RaspberryPi
raspbian
Jessie

Raspbian Wheezy から Jessie への移行 やったことメモ

More than 1 year has passed since last update.

やった日: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 -laptitude search '~i' の結果も保存っと。


ちょっとしたコツ

書き込み量の多い環境だとSDカードにゴミが溜まるらしく、バックアップしたimgをzipで固めても何か小さくならない。

なので、バックアップ前に空き領域を0埋めしておくといいっぽい。

ってことで大雑把に0埋めするスクリプトを作って走らせておく。


zeropad.sh

#!/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

2015-10-15-173105_1824x984_scrot.png

うむ。


キーボードが……

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.servicedhcpcd.service が競合してるっぽかったので、後者を止める。

ついでに avahi-daemon も使わないので止める。

service の止め方が変わってて戸惑うなど。

# systemctl stop dhcpcd

# systemctl disable dhcpcd
# systemctl stop avahi-daemon
# systemctl disable avahi-daemon

あとルーターが古くて IPv6 非対応なので、これも止めちゃえ。


/etc/sysctl.conf

(略)

# Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1

これで万事解決。

追記 解決してなかった。

これでもまだ競合するので、dhcpcd.conf にさらに次の行を追加。


/etc/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 起動したんだけど:anger::anger:

noauto あるいは nofail オプションをつければいいらしい。ってか systemd ってなんやねん。


/etc/fstab

(略)

/dev/sda1 /mnt/usbmem0 exfat-fuse defaults,nofail 0 0

参考:jessie で知っておくべき問題点

使ってるうちに気づいたけど、nofail 設定だとUSBメモリを挿すだけで自動的にマウントしてくれるようになったっぽい(noauto の挙動は未確認)。


SSH 公開鍵の配置

参考:ssh公開鍵認証を実装する(自分メモ)

鍵生成は Tera Term でやった。


fbterm

無線LANのトラブル時とかに直接ログインする時に、日本語ロケールなので標準コンソールが豆腐だらけになっちゃう。

ということで UTF-8 を扱える fbterm を入れとく。

# apt-get install fbterm


crontab の復元

保存しておいたファイルからコピペするだけなので省略。


事故回避策

crontab -r の事故を防ぐために。


/etc/bash.bashrc

(略)

# avoid crontab trouble
alias crontab='crontab -i'


rsyslog

/etc/rsyslog.confcron.* のコメントアウトを外す。

SDカードの書き込み回数が気になる場合は、逆にログの量を減らすべき。


1wire

温度計を繋いでるので使えるように。


/etc/modules

(略)

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日かかりました。