Raspberry Pi ファーストセットアップ

ここ1年あたりから流行り始めて、最近でも雑誌の特集になっていたりと
話題奮闘中な小型LinuxマシンのRaspberry Piですが、
5月半ばに手に入れる機会があったので、導入手順をまとめておきます。


前提

  • ホストPCはWindows 7 Professional
  • Linux関連の知識がある程度あるひと

用意するもの

RaspberryPiを動かすために以下を用意します。

  • Raspberry Pi Model B
  • クリアケース
  • SDカード 16GB (SanDisk Extreme SDHC SDHCカード UHS-1Class10 16GB SDSDX-016G-J35)
  • microUSBケーブル
  • USB充電器
  • HDMIケーブル
  • ディスプレイ
  • LANケーブル

Raspberry Pi 本体とクリアケースは秋葉原千石電商 本店2F で5480円、
SDカードはツクモeXで3000円くらいで買いました。他は手元にあったものを利用しました。

オンラインで売っているところもいくつかあるので、欲しいひとは以下をあたってみると良いかも。

注意点
  • USB充電器
    • 1000mA以上のアンペアを供給できるものを選ぶこと。
  • SDカード
    • 以下のURLを参考に動作確認がとれたものを選ぶのがベター。動かないものを選んでしまうと悲惨です。
    • http://elinux.org/RPi_SD_cards
    • できるだけ速度の速いものが良いです。

ブートイメージの書き込み

ディストリビューションはいくつか選べますが、推奨されている"Raspbian"をインストールすることにします。
Raspberry Pi Downloads - Software for the Raspberry Piからブートイメージを落としてきます。
※2013/6/24時点で「2013-05-25-wheezy-raspbian.zip」が最新のようです。

Windowsを利用している場合、ブートイメージをSDカードへ書き込むためのツールが必要になります。
Win32 Disk Imager download | SourceForge.netからWin32 Disk Imagerを落としてきます。

Win32 Disk Imagerを起動します。
「Image File」に落としてきたブートイメージ(*.img)のパスを入れ、「Device」はSDカードのドライブ名を選択します。
間違って別のドライブを選択しないように注意します。

「Write」ボタンを押してしばらく待てばSDカードへブートイメージの書き込みが完了します。

初回起動とセットアップ

以下の順番で進めます。

  1. ブートイメージを書き込んだSDカードをRaspberry Piに挿入
  2. HDMIケーブルをディスプレイにつなぎ、Raspberry Piに接続
  3. LANケーブルをRaspberry Piに接続
  4. 最後にmicroUSBケーブルとUSB充電器を接続し、Raspberry Piに接続

Raspberry PiにはOn/Offスイッチはないので、mircoUSBケーブルを接続すると自動的に電源が入ります。
そのため予め周辺機器を接続した状態で最後にmicroUSBケーブルを接続する必要があります。


起動するとLinuxの起動画面が表示されます。左上にRapberry Piのアイコンが。
しばらくすると、最初に設定画面が現れますので必要な項目を設定していきます。

設定項目(raspi-config)
  • info
    • このツールの情報が表示されます。
  • expand_rootfs
    • パーティションの拡張を行います。
    • 初期状態ではSDカードの先頭2GBほどしか使用しないようになっているので、こちらから容量全体を使うように設定します。
  • overscan
    • オーバースキャンを設定します。画面周囲に余白が必要な場合に使用します。
  • configure_keyboard
    • キーボード配列の指定。
    • 一般的な日本語キーボードであれば
    • Generic 105-key (Intl) PC> → Japanese → Japanese (OADG 109A) に設定
  • change_pass
    • 初期ユーザ「pi」のパスワードを変更します。(初期パスワードは"raspberry"です)
  • change_locale
    • ロケールの設定。
    • 日本語も設定可能ですが、初期状態では日本語環境がないので最初は設定不要です。
  • change_timezone
    • 日本国内で使用する場合は Asia → Tokyo を指定しておきます。
  • change_hostname
    • ホストネームの設定。
  • memory_split
    • GPUへのメモリ配分を指定します。特に問題がないので初期設定のままで。
  • overclock
    • オーバークロックの設定。CPUの駆動周波数を変更することで高速化できますが、寿命が短くなるため安易に利用しない方が良いです。
  • ssh
    • SSH接続を有効にする。ディスプレイを繋げるのが面倒で、以降はSSHで操作するなら Enable に設定)
  • boot_behaviour
    • 起動時にXのデスクトップ画面を自動起動させる場合は Yes
  • camera
    • Raspberry Pi 用のカメラモジュールを利用するときに使うオプションです。
  • rastrack
    • 自分のRaspberry Piを Rastrackに登録します。どこの誰がどれくらい利用しているのかがわかるサービスのようです。
  • update
    • raspi-config のアップデートを行います。

※項目はhttp://gothmog.ddo.jp/grasshopper/?p=9133をベースにさせていただきました。

上記項目のうち、

  • update
  • expand_rootfs
  • configure_keyboard
  • change_pass
  • change_timezone
  • ssh

を設定して「Finish」を押下します。
あとから設定したい場合は、 raspi-config コマンドを実行してください。

しばらくすると、GUIのデスクトップ環境が立ち上がると思います。

change_locale は日本語環境をインストールしてから設定します。
この時点で変更してしまうと日本語フォントがないため文字化けします。

sshさえ設定してしまえば、以降はリモートからログインして設定することが可能です。
DHCPを利用している場合は、ターミナルから

$ /sbin/ifconfig

を叩いて、IPアドレスを確認しておいてください。

日本語環境の設定

まずはパッケージのリスト更新と最新へアップグレードします。

$ sudo apt-get update
$ sudo apt-get upgrade

次に、日本語フォントをインストールします。

$ sudo apt-get install ttf-kochi-gothic ttf-kochi-mincho
$ sudo apt-get install fonts-ipafont-gothic fonts-ipafont-mincho
$ sudo apt-get install xfonts-intl-japanese xfonts-intl-japanese-big xfonts-mplus

どのフォントがあるか知りたい場合は以下のコマンドを叩いて見てください。

$ apt-cache search font japan |less

ロケールを変更します。

$ sudo raspi-config

change_locale を選択し、

を有効にします。デフォルトは 「ja_JP.UTF-8」にします。

ここで一度再起動します。

$ sudo reboot

ここまでで、日本語表示環境が整います。
日本語が入力できるようにインプットメソッドを入れましょう。

$ sudo apt-get install ibus-anthy

anthyを利用できるようにibusの設定をします。
[Preferences]>>[IBusPreferences]>>[Input Method]>>[Select an input method|▼]>>[Japanese>Anthy]
Anthyを選択後[+Add]ボタンを押すと「Input Method」に登録され使用可能になる


ひとまず、今日はここまで。細かい設定と周辺機器との連携については後ほど書きます。

Raspberry Piをいじっていると、Zaurusの代替ROM書換えて遊んでいた時を思い出しますね。

el-get 設定その後

Windows (gnupack) な環境で el-get を使っていたのですが、
git cloneやhg cloneに失敗したり、el-getのrecipeとpackage.elで作ったrecipeで
パッケージインストールすると依存関係が崩れたのか上手くインストールできないパッケージが出てきたりと
苦行の道を歩んでいる感じがして本来の目的である「パッケージの一律管理で楽をする」から
大分離れてしまっている感が否めないのでひとまず積極的に使うことを諦めました。

ひとまず、以下の方針で様子見。

  • package.el にあるものは package.elを利用する
  • それ以外(emacswikiやrecipeにあるもの)はel-getを利用する
  • el-getのインストールに失敗するものはauto-installを利用する

The Silver Searcher のビルド手順 for gnupack

検索ツールといえば find & grep ですが、より優れている `The Silver Searcher' という検索ツールがあることを最近知りました。
使ってみないとどんなものなのかわからないので実際に導入してみました。

ちなみに、`The Silver Searcher' のことを通称 ag 呼ぶみたいです。なんの略?

2013/03/30 追記

agは元素記号の銀を意味するとのこと。The "Silver" Searcher だからか。

環境

導入の流れ

ag のソースを落としてきます
$ git clone git://github.com/ggreer/the_silver_searcher.git
ag のビルドに必要なパッケージのインストールをします
$ cyg-pm install -require zlib-devel pcre pkg-config 
ビルド
$ cd the_silver_searcher && ./build.sh && make install

これで、/usr/local/bin にag.exeがインストールされます。

使い方

ターミナル上で

$ ag hoge ~/fuga

と入力すれば、~/fuga ディレクトリ以下にあるhogeを含むファイルの一覧が検索され、結果が出力されます。
実際にこんな感じで出力されます。手軽で便利ですね。

$ ag setq ~/.emacs.d/conf/
/home/.emacs.d/conf/05_common-init.el
13:      (setq default-process-coding-system '(utf-8-unix . cp932-dos))
14:   ;;  (setq default-process-coding-system '(cp932 . cp932))
15:   ;;  (setq default-process-coding-system '(cp932 . utf-8-unix))
19:  (setq default-process-coding-system '(utf-8-unix . utf-8-unix)))
59:(setq frame-title-format "%f %Z")
68:(setq truncate-lines nil)
71:(setq truncate-partial-width-windows t)
75:(setq uniquify-buffer-name-style 'forward)
76:(setq uniquify-buffer-name-style 'post-forward-angle-brackets)
77:(setq uniquify-ignore-buffers-re "*[^*]+*")
86:(setq linum-delay t)
95:(setq linum-format "%3d")
114:(setq display-time-24hr-format t)
115:(setq display-time-string-forms '(24-hours ":" minutes))
147:(setq-default save-place t)
151:(setq scroll-preserve-screen-position t)
154:(setq vertical-centering-font-regexp ".*")

色々と細かい指定もできるようなので詳細は ag -h を見てみてください。

emacsで使いたい

便利なものは是非emacsでも利用したいものですね。
既にemacs用のインターフェースを用意してくれている方がいますのでそれをするのが良いでしょう。

私はhelmを利用しているのでemacs-helm-agを導入しました。
が、そのままでは動かなかったので少し変更を加えました。
もし動かない場合は以下を試してみてください。
GitHub - zqwell/emacs-helm-ag: The silver searcher with helm interface

helm-ag の導入手順

git からソースを入手
$ cd ~/.emacs.d/public_repos/
$ git clone git://github.com/zqwell/emacs-helm-ag.git
設定
(add-to-list 'load-path (expand-file-name "~/.emacs.d/public_repos/emacs-helm-ag"))
(when (require 'helm-ag nil t)
  (setq helm-ag-base-command "ag --nocolor --nogroup --ignore-case --line-numbers")
  ;; (setq helm-ag-command-option "--all-text")
  )
使い方

el-getをWindows環境で利用するにあたってハマった点

最近巷では、el-get というパケージ管理ツールが流行っているようなので流行に乗らなければ!と思い導入してみました。
Windowsでel-getを動かせるようになるのに結構ハマったので、自分と同じ境遇にいる人は少しは参考になるかも。
てかWindowsemacsを利用するのは地雷原が多すぎる。マインスイーパやってるみたいでした。

導入環境は、Windowsで以下のとおり。

基本的にはGitHub - dimitri/el-get: Manage the external elisp bits and pieces upon which you depend!に記載がある通り以下を評価してあげればインストールまで勝手に進むのですが

;; So the idea is that you copy/paste this code into your *scratch* buffer,
;; hit C-j, and you have a working developper edition of el-get.
(url-retrieve
 "https://raw.github.com/dimitri/el-get/master/el-get-install.el"
 (lambda (s)
   (let (el-get-master-branch)
     (goto-char (point-max))
     (eval-print-last-sexp))))

Windowsでは以下の問題が発生してそのままではインストールができませんでした。

Windowsで発生した問題
  1. install-infoでコケる
  2. el-getのbyte-compileが始まらない
  3. error setting certificate verify locations が発生してgit cloneできない
  4. M-x emacswiki-refresh すると何時まで経っても終わらない

回避方法

install-infoでコケる

Readme.mdに対処方法が書いてあります。

When using the windows operating system, take into account that the way Emacs calls external programs is not the same for native builds and cygwin, so make sure you don't mix and match them at least for install-info (e.g. cygwin version of install-info will error out when called by el-get from a windows-nt Emacs, see system-type). When using a native build of Emacs for windows, consider using the GNU Win 32 distribution of TexInfo for windows, which contains the proper install-info version when you're not using the cygwin Emacs binary.

意訳すると cygwin の install-info は利用できないので GNU Win 32 のバイナリ使ってね。ということらしい。

早速、cygwinのinstall-infoを利用しないように

$ mv /usr/bin/install-info.exe{,_}

してリネームします。

TexInfo for Windows の「Download」から

  • Binaries
  • Dependencies

のzipアーカイブを落としてきて解凍しPATHを通します。
~/bin下に展開したと場合、
~/bin/GnuWin32/bin
のパスを通せばOK.
これで、GNUWin32のinstall-infoが利用されるようになります。

el-getのbyte-compileが始まらない

これは自分の環境だけの問題かもしれませんが、一応書いておきます。

結論からいうと
http://dev.ariel-networks.com/articles/emacs/part1/
lgrepの設定を書いてあると問題が発生します。以下のコードを書いている人は要注意。

Windows環境の場合,上記のままではうまく動きません.以下のように設定する事でこの問題を回避できます.
======================
;; shell-quote-argumentの問題回避
(defvar quote-argument-for-windows-p t "enables `shell-quote-argument' workaround for windows.")
(defadvice shell-quote-argument (around shell-quote-argument-for-win activate)
  "workaround for windows."
  (if quote-argument-for-windows-p
      (let ((argument (ad-get-arg 0)))
        (setq argument (replace-regexp-in-string "\\\\" "\\\\" argument nil t))
        (setq argument (replace-regexp-in-string "'" "'\\''" argument nil t))
        (setq ad-return-value (concat "'" argument "'")))
      ad-do-it))

;; lgrep で Shift_JIS を使うように設定
(setq grep-host-defaults-alist nil) ;; これはおまじないだと思ってください
(setq grep-template "lgrep -Ks -Os <C> -n <R> <F> <N>")
(setq grep-find-template "find . <X> -type f <F> -print0 | xargs -0 -e lgrep -Ks -Os <C> -n <R> <N>")
====================== 

理由は、shell-quote-argument の挙動を変更してしまっているからです。
el-getは、call-process-shell-command でemacsを起動してbyte-compileしますが
引数はshell-quote-argument でQuote化された結果が渡されるため、emacsが引数を
ファイル名と捉え間違えてしまいbyte-compileが実行されません。

shell-quote-argument の挙動を元に戻して、かつ(setq w32-quote-process-args t)をしてあげるか、
以下のようにel-getの場合だけ元の挙動をするように変更してあれば問題ありません。

(setq w32-quote-process-args t)

;; shell-quote-argumentの問題回避
(defvar quote-argument-for-windows-p t "enables `shell-quote-argument' workaround for windows.")
(defadvice shell-quote-argument (around shell-quote-argument-for-win activate)
  "workaround for windows."
  (if (and quote-argument-for-windows-p
           (not (w32-shell-dos-semantics))) ;;el-get利用時の場合は無効にするための判定
      (let ((argument (ad-get-arg 0)))
        (setq argument (replace-regexp-in-string "\\\\" "\\\\" argument nil t))
        (setq argument (replace-regexp-in-string "'" "'\\''" argument nil t))
        (setq ad-return-value (concat "'" argument "'")))
      ad-do-it))

el-getは、Windowsの場合shell-file-nameを"cmdproxy"に変更してcall-process-shell-commandを叩くようなので
(w32-shell-dos-semantics)の挙動を利用して通る経路を変えています。

error setting certificate verify locations が発生してgit cloneできない

「error setting certificate verify locations」とかいうエラーが出た場合は
以下のようにパッケージをインストールすれば問題が解決します。

$ cyg-pm install -require ca-certificates
M-x emacswiki-refresh すると何時まで経っても終わらない

el-get インストール完了後に M-x emacswiki-refresh するとCPUがぶんまわりはじめて延々終わらない現象になります。
どうも既知の問題だそうです。

Cannot refresh emacswiki recipes (Windows) · Issue #569 · dimitri/el-get · GitHub

対処方法は
Support in-process emacswiki-refresh with prefix arg by DarwinAwardWinner · Pull Request #570 · dimitri/el-get · GitHub
に書いてあるとおり、emacswiki-refresh を引数ありで呼べということのようです。

C-u M-x emacswiki-refresh

別プロセスで動かす場合に問題になるようで、引数ありで呼び出す場合は同プロセス(in-process)上で動作する挙動になるため問題が回避できるようです。

まとめ

el-getで問題が起きた場合の着眼点を書いておきます。

  • readmeは読んだか?
  • issueに似た現象が起票されていないか?
  • shell-quote-argument の挙動を変えていたりしないか
  • WindowsLinuxでの挙動の違う点で問題が起きていないか?
    • shellの挙動や外部プログラム実行時に渡す引数に問題ないか

el-getの設定

el-getを導入できたので、設定を上げておきます。
詳しい内容については、info に記載があります。 M-x info !

recipeの格納ポリシー
  • el-getにないWebから拾ってきたrecipeは「~/.emacs.d/el-get/el-get」に入れる
  • ファイルで配布されてないレシピは el-get-sources に追加 (一時的なもの含め)
設定ファイル
(add-to-list 'load-path "~/.emacs.d/el-get/el-get")

;; el-getがなければ自動でインストール
(unless (require 'el-get nil 'noerror)
  (with-current-buffer
      (url-retrieve-synchronously
       "https://raw.github.com/dimitri/el-get/master/el-get-install.el")
    (let (el-get-master-branch)
      (goto-char (point-max))
      (eval-print-last-sexp))))

;; マイレシピの格納場所
(add-to-list 'el-get-recipe-path "~/.emacs.d/my-recipes")

;; マイレシピを手軽に追加する場合は以下に書く
(setq el-get-sources
      '(
        ;; 以下追加例
        ;; (:name ruby-mode-trunk-head
        ;;        :type http
        ;;        :description "Major mode for editing Ruby files. (trunk-head)"
        ;;        :url "http://bugs.ruby-lang.org/projects/ruby-trunk/repository/raw/misc/ruby-mode.el")
        ;; (:name php-mode-github
        ;;        :type github
        ;;        :website "https://github.com/ejmr/php-mode"
        ;;        :description "Major mode for editing PHP files. (on Github based on SourceForge version))"
        ;;        :pkgname "ejmr/php-mode")
        ))

(el-get 'sync)

あと定期的に実行することを記載しておきます。

SANYO eneloop スティックブースター の所感

eneloop スティックブースター を買ったのですが、どれくらい充電できるのか、バッテリ0%のipod touchに差して確認してみました。一晩挿したままにしておいて、朝確認してみると59%になっていました。緊急用であれば十分有効ですね。

Lispとゴキブリの共通点

これは…

Lispとゴキブリの共通点

・現代でも生き残っている数少ない古代種である
・ゴキブリは1匹見つけると20匹いる。Lispは1つのマクロが20倍のコードになる。[要出典]
・どちらも再帰的に増え続ける
・卵-幼虫-成虫、もしくは、Read-eval-printの成長段階を踏む
・全世界に約 4,000 種、うち日本には50種余りが知られる。
・その体構造が原始的・平均的であるため実験の対象として利用される事がある。アメリカ合衆国にはその手の業者/学者がいる。
・見た目によって忌み嫌われることが多いが、一方で愛好家も多い。
・特に主婦には人気がない。[要出典]

参考:http://ja.wikipedia.org/wiki/ゴキブリ

引用元:Lispとゴキブリの共通点: なつたん