やった日:2015年10月中旬
最初の状態
- Raspberry Pi Model B Rev2(512MB版)
- Raspbian Wheezy を運用中
- 無線LAN でネットワークに接続
$ uname -a
Linux raspberrypi 4.1.7+ #817 PREEMPT Sat Sep 19 15:25:36 BST 2015 armv6l GNU/Linux
$ cat /etc/debian_version
7.8
下準備
SDイメージをダウンロード
NOOBS は使うつもりがないので、Raspbian のイメージを持ってくる。
https://www.raspberrypi.org/downloads/raspbian/
今回は2015-09-24版、zipで1.24GB。解凍後は4.02GB。
GUI 環境が要らない人は
Raspbian Jessie Lite を使うと吉。これには GUI 関係のパッケージが入ってない。
zipで280MB、解凍後1.2GBほどとお手頃サイズなので 4GB SDカードでも動く。
既存環境のバックアップ
SDカードの余りが手元にないので、現状のバックアップを取ってから上書きインストールする。
Win32 Disk Imager でおもむろに Read。
さらに、/home/pi
とか /etc
は tarball にして別のPCにコピー、移行のときに参照しやすくしとく。
あと crontab -l
、aptitude search '~i'
の結果も保存っと。
ちょっとしたコツ
書き込み量の多い環境だとSDカードにゴミが溜まるらしく、バックアップしたimgをzipで固めても何か小さくならない。
なので、バックアップ前に空き領域を0埋めしておくといいっぽい。
ってことで大雑把に0埋めするスクリプトを作って走らせておく。
#!/bin/bash
EMPTY=$(( `df -B1 /dev/root | awk 'NR==2 {print$4}'` ))
EMPTY=$(( ($EMPTY / 104857600) - 1 ))
mkdir zeropad
trap "rm -r zeropad" EXIT
for ((i = 0; i < $EMPTY; i++)); do
echo padding file $(( $i + 1 )) / $EMPTY
dd if=/dev/zero of=zeropad/$i bs=1M count=100 > /dev/null
done
インストール
Win32 Disk Imager で Write。そして立ち上げてみる。
……おお、既定でデスクトップ、しかも自動ログインしてる。
(Raspbian Lite の場合は今までと同じように CUI でログインを要求される)
$ uname -a
Linux raspberrypi 4.1.7+ #817 PREEMPT Sat Sep 19 15:25:36 BST 2015 armv6l GNU/Linux
$ cat /etc/debian_version
8.0
カーネルのバージョンは変わってなかった。
とりあえずの設定
とりあえずキーボードレイアウトとか
参考:Raspberry Pi 2 に Raspbian Jessie (2015-09-24) をセットアップした。
キーマップは "Generic 105-key (Intl) PC" → "Others" → "Japanese" → "Japanese" かな。
CUI から raspi-config を弄ってる場合は、先にロケールを日本語にすると漢字が豆腐になって死ぬので要注意。
とりあえず無線LAN
参考:http://www.myu.ac.jp/~xkozima/lab/raspTutorial1.html
SSIDとパスフレーズを入力して、無線LANドングル(BUFFALO の安いやつ)を挿せばそれだけで繋がる。楽ちん。
ただし、wpa_supplicant は使いにくい部分があり、後で別のパッケージで代替する予定。
とりあえず apt-get
# apt-get update; apt-get upgrade
比較的新しいイメージファイルだったので、更新は3つだけだった。
とりあえず日本語ロケール
(SSH 使う分には関係ないけど)そのまま日本語ロケールを設定すると文字化けるらしいので、VLゴシックあたりを突っ込んでからロケールを変える。VLゴシックってかわいい
参考:Raspberry Pi 2 に Raspbian Jessie (2015-09-24) をセットアップした。
# apt-get install fonts-vlgothic
キーボードが……
GUI からキーボードレイアウトを設定しても、raspi-config
しても、再起動すると Console のキー配列がデフォルトの US に戻ってる罠。
XWindow にログインすれば設定通り日本語109配列になってるのに……謎。
追記 クリーンインストールしたら直った。さらに謎……
パッケージの設定
wicd
我が家は未だに 802.11g 環境で、電子レンジその他が原因で接続断が発生しやすい状況。
一度接続断が起こると wpa_supplicant は再接続してくれないので、無線LANの管理には wicd
を使う。
参考:Easy Wireless Configuration with wicd
追記 Jessie + 4.x 系カーネル からは wpa_supplicant も自動再接続できるように改善されたようなので、この目的で wicd を導入する必要はなくなった。
# apt-get install wicd-cli wicd-curses
設定は wicd-curses
から。認証情報を入力して、「このネットワークに自動的に接続する」にチェックすると、wicd が再接続してくれるようになる。
設定が終わったら、さっき wpa_supplicant.conf
に加えた認証情報を消す。
reboot
して正常に繋がるかどうか確認する。
競合の解消、IPv6 無効
一応繋がるがどうも不安定で、そうこうしているうちに繋がらなくなってしまった。
どうやら wicd.service
と dhcpcd.service
が競合してるっぽかったので、後者を止める。
ついでに avahi-daemon
も使わないので止める。
service の止め方が変わってて戸惑うなど。
# systemctl stop dhcpcd
# systemctl disable dhcpcd
# systemctl stop avahi-daemon
# systemctl disable avahi-daemon
あとルーターが古くて IPv6 非対応なので、これも止めちゃえ。
(略)
# Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1
これで万事解決。
追記 解決してなかった。
これでもまだ競合するので、dhcpcd.conf
にさらに次の行を追加。
nohook wpa_supplicant
screen
SSH 接続が切れても作業を続けられるように screen
を入れる。
# apt-get install screen
ここまで終われば、あとは SSH 経由でいいかな。
mono-complete
C# で書いたプログラムを走らせたいので mono
を入れる。
# apt-get install mono-complete
なお
$ mono -V
Mono JIT compiler version 3.2.8 (Debian 3.2.8+dfsg-10)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: normal
Notifications: epoll
Architecture: armel,vfp+hard
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: sgen
初代RasPiで野良ビルドするには時間がかかりすぎるのでこれで我慢するしかない……
exfat-fuse
USBメモリを使う準備。
# apt-get install exfat-fuse
Wheezy の時と同じように /etc/fstab
にちょろっと書いて再起動したら、「そんなデバイスない」って言われて emergency shell 起動したんだけど
noauto
あるいは nofail
オプションをつければいいらしい。ってか systemd ってなんやねん。
(略)
/dev/sda1 /mnt/usbmem0 exfat-fuse defaults,nofail 0 0
使ってるうちに気づいたけど、nofail
設定だとUSBメモリを挿すだけで自動的にマウントしてくれるようになったっぽい(noauto
の挙動は未確認)。
SSH 公開鍵の配置
参考:ssh公開鍵認証を実装する(自分メモ)
鍵生成は Tera Term でやった。
fbterm
無線LANのトラブル時とかに直接ログインする時に、日本語ロケールなので標準コンソールが豆腐だらけになっちゃう。
ということで UTF-8 を扱える fbterm を入れとく。
# apt-get install fbterm
crontab の復元
保存しておいたファイルからコピペするだけなので省略。
事故回避策
crontab -r
の事故を防ぐために。
(略)
# avoid crontab trouble
alias crontab='crontab -i'
rsyslog
/etc/rsyslog.conf
の cron.*
のコメントアウトを外す。
SDカードの書き込み回数が気になる場合は、逆にログの量を減らすべき。
1wire
温度計を繋いでるので使えるように。
(略)
w1-gpio
w1-therm
追記 /boot/config.txt
の末尾に次の行を追加する必要あり。
dtoverlay=w1-gpio,gpiopin=4
iptables
# apt-get install iptables-persistent
/etc/iptables/rules.v4
を古いのからコピーしてきて
# netfilter-persistent reload
ここも変わってる。
mrtg
# apt-get install snmpd snmp snmp-mibs-downloader mrtg
mrtg.cfg
は Wheezy のをそのまま持ってきてよさ気。
参考:Raspberry Piにmrtgをインストールする
まとめ
ゆっくりやってたら2日かかりました。