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

やった日：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埋めするスクリプトを作って走らせておく。

```bash: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) をセットアップした。](http://qiita.com/tchisaka/items/e8a2b09c808715dc8515)
キーマップは "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) をセットアップした。](http://qiita.com/tchisaka/items/e8a2b09c808715dc8515)

```
# apt-get install fonts-vlgothic
```
![2015-10-15-173105_1824x984_scrot.png](https://qiita-image-store.s3.amazonaws.com/0/89950/62248625-9209-a61b-ca4c-74bf7481159e.png)
うむ。

### キーボードが……
GUI からキーボードレイアウトを設定しても、`raspi-config` しても、再起動すると Console のキー配列がデフォルトの US に戻ってる罠。
XWindow にログインすれば設定通り日本語109配列になってるのに……謎。
**追記**　クリーンインストールしたら直った。さらに謎……

# パッケージの設定
## wicd
~~我が家は未だに 802.11g 環境で、電子レンジその他が原因で接続断が発生しやすい状況。
一度接続断が起こると wpa_supplicant は再接続してくれないので、無線LANの管理には `wicd` を使う。
参考：[Easy Wireless Configuration with wicd](https://blog.bartbania.com/raspberry_pi/easy-wireless-configuration-for-raspberry-pi/)~~
**追記**　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 非対応なので、これも止めちゃえ。

```file:/etc/sysctl.conf
（略）
# Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1
```

~~これで万事解決。~~
~~**追記**　解決してなかった。
これでもまだ競合するので、`dhcpcd.conf` にさらに次の行を追加。~~

```file:/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 ってなんやねん。

```file:/etc/fstab
（略）
/dev/sda1       /mnt/usbmem0    exfat-fuse defaults,nofail 0       0
```

参考：[jessie で知っておくべき問題点](https://www.debian.org/releases/jessie/mips/release-notes/ch-information.ja.html#systemd-auto-mounts-incompat)

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

## SSH 公開鍵の配置
参考：[ssh公開鍵認証を実装する（自分メモ）](http://qiita.com/HamaTech/items/21bb9761f326c4d4aa65)
鍵生成は Tera Term でやった。

## fbterm
無線LANのトラブル時とかに直接ログインする時に、日本語ロケールなので標準コンソールが豆腐だらけになっちゃう。
ということで UTF-8 を扱える fbterm を入れとく。

```
# apt-get install fbterm
```

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

### 事故回避策
`crontab -r` の事故を防ぐために。

```bash:/etc/bash.bashrc
（略）
# avoid crontab trouble
alias crontab='crontab -i'
```

## rsyslog
`/etc/rsyslog.conf` の `cron.*` のコメントアウトを外す。
SDカードの書き込み回数が気になる場合は、逆にログの量を減らすべき。

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

```file:/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をインストールする](http://netlog.jpn.org/r271-635/2013/04/raspberry_pi_mrtg.html)



# まとめ
ゆっくりやってたら2日かかりました。