新規にRaspbian Jessie Liteをヘッドレスでインストールして初期設定するまで


　以前、Raspberry Pi 2でヘッドレスにRaspbianをインストールしてファイルサーバ化する手順をまとめたけれど、あれからだいぶ時間がたってしまったので、改めてRapbian Jessie Liteをヘッドレスにインストールして初期設定する手順をまとめ直すことにした。

### Rapbian Jessie Liteを書き込んだmicroSDカードを準備するまで

　しばらくRaspberry Pi自体から離れているうちにPC環境も移行していたので、改めてPCにツール類を入れ直して、Raspberry Piをいじれる環境を整えるところからやり直し。

　Rapbian Jessie Liteのイメージファイルは、日本ミラーとしていつもお世話になっている[北陸先端科学技術大学院大学](http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian_lite/images/)から「2017-07-05-raspbian-jessie-lite.zip」をダウンロード。

　まず、PCにSDメモリカードフォーマッターをインストールして、今まで使っていたmicroSDカードをフォーマットする。

　いつの間にかSDメモリカードフォーマッターのバージョンが新しくなっていたようで、以前は「オプション設定」という項目から「論理サイズ調整」をONにした記憶があるけれど、今は「オプション設定」自体が無くなっていた。

　今までRaspberry Pi 2で使っていたmicroSDカードなので、bootなど複数のパーティションが見えたけれど、とりあえずmicroSDカード上のパーティションが選択されていることだけ確認してそのままフォーマットをかけたら、まっさらなmicroSDカードになった。

　次は、PCにWin32 Disk Imagerをインストールして、microSDカードにイメージファイルを書き込み。

　これも以前とは少し画面が異なっている気がしたけれど、特に設定する項目もないのでダウンロードしてZIPから解凍したRapbian Jessie Liteのイメージファイルを選択して、書き込み先のmicroSDカードは自動的に選択されていたので、そのまま「Write」を実施した。

　最後に、sshを有効にするために、Rapbian Jessie Liteが書き込まれたmicroSDカードのbootパーティションを開いて、拡張子なしの「ssh」というファイルを作成した。

### Raspberry Pi 2を立ち上げて初期設定するまで

　準備のできたmicroSDカードをRaspberry Pi 2に挿し直して、LANケーブルをつないでから電源用のmicroUSBケーブルをつないで起動。

　例によって、Raspberry PiがDHCPで取得したIPアドレスを調べるのにiOSアプリのFingを利用。問題なくネットワーク上にRaspberry Piが現れた。

　PCにTeraTermをインストールして、Fingで見つけたRaspberry PiのIPアドレスにsshで接続。初期ユーザは`pi`、パスワードは`raspberry`。

　`df -h`を叩いて、ファイルシステムが正しく認識されていることを確認。

```
pi@raspberrypi:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  930M   14G   7% /
devtmpfs        458M     0  458M   0% /dev
tmpfs           462M     0  462M   0% /dev/shm
tmpfs           462M   12M  450M   3% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           462M     0  462M   0% /sys/fs/cgroup
/dev/mmcblk0p1   42M   21M   21M  51% /boot
pi@raspberrypi:~ $
```

#### raspi-configの設定

　まず、`sudo raspi-config`を叩いて、以下の設定を変更。

##### Localeを変更

- `4 Localisation Options`を選択。
- `I1 Change Local`を選択。
- `en_GB.UTF-8 UTF-8`でスペースを押して`*`を外す。
- `ja_JP.UTF-8 UTF-8`でスペースを押して`*`を付ける。
- `Default local for the system environment:`で`ja_JP.UTF-8`を選択。

##### Timezoneを変更

- 再度、`4 Localisation Options`を選択。
- `I2 Change Timezone`を選択。
- `Asia` → `Tokyo`を選択する。

##### Cameraモジュールをディゼーブル

- `5 Interfacing Options`を選択。
- `P1 Camera`を選択。
- `Would you like the camera interface to be enabled?`で`No`を選択。

##### GPUメモリの割り当てを64MBから16MBに変更

- `7 Advanced Options`を選択。
- `A3 Memory Split`を選択。
- `64` → `16`に変更する。

##### 再起動

　`Finish`を選んで、再起動する。

#### Raspbianの更新

　再起動したらsshで入り直して、システムを最新版にする。

　まずは`/etc/apt/sources.list`を書き換えて、リポジトリ先を国内のJAISTに変更する。

```
pi@raspberrypi:~ $ cat /etc/apt/sources.list
#deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
deb http://ftp.jaist.ac.jp/raspbian jessie main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://archive.raspbian.org/raspbian/ jessie main contrib non-free rpi
pi@raspberrypi:~ $
```

　アップデート系のコマンドを一通り実施して、再起動。

```
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get dist-upgrade
pi@raspberrypi:~ $ sudo rpi-update
pi@raspberrypi:~ $ sudo reboot
```

　以前は`apt-get update`の後に`apt-get upgrade`も叩いたけれど、`apt-get dist-upgrade`だけで更新含めパッケージの追加やら削除やら、全部面倒をみてくれるらしい。

　再起動後に掃除系のコマンドも一通り叩いてみたものの、この時点で削除されるパッケージはなかった。

```
pi@raspberrypi:~ $ sudo apt-get autoremove
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
pi@raspberrypi:~ $
pi@raspberrypi:~ $ sudo apt-get autoclean
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています       
状態情報を読み取っています... 完了
pi@raspberrypi:~ $
pi@raspberrypi:~ $ sudo apt-get clean
pi@raspberrypi:~ $
```

　また、念のため以下のコマンドを叩いて設定ファイルをシステムに残して削除されたパッケージがあるか確認してみたけれど、何もなかった。

```
pi@raspberrypi:~ $ dpkg -l | awk '/^rc/ { print $2 }'
pi@raspberrypi:~ $
```

　更新後のシステムを確認。

```
pi@raspberrypi:~ $ cat /etc/devian_bian_version 
8.0
pi@raspberrypi:~ $
pi@raspberrypi:~ $ hostnamectl
   Static hostname: raspberrypi
         Icon name: computer
           Chassis: n/a
        Machine ID: 8d0193e221c44a60a0e896a4944e917b
           Boot ID: 637bbeed3c3d47f9b06a55e57d88fa46
  Operating System: Raspbian GNU/Linux 8 (jessie)
            Kernel: Linux 4.9.40-v7+
      Architecture: arm
pi@raspberrypi:~ $
```

#### デフォルトのランレベルを変更

　例によって、デフォルトのランレベルを5相当から3相当に変更。

```
pi@raspberrypi:~ $ systemctl get-default
graphical.target
pi@raspberrypi:~ $ 
pi@raspberrypi:~ $ sudo systemctl set-default multi-user.target
Created symlink from /etc/systemd/system/default.target to /lib/systemd/system/multi-user.target.
pi@raspberrypi:~ $
pi@raspberrypi:‾ $ sudo systemctl set-default multi-user.targetystemctl get-default
multi-user.target
pi@raspberrypi:~ $
```

　一度再起動し、`multi-user.target`で起動していることを確認。

### 無線LANを設定するまで

　次は、手元のHUBのポートが埋まりきってしまっているので、無線LANで接続できるようにする。無線LANを搭載したRaspberry Pi 3を購入しようかとも思ったのだけど、そこまでマシンパワーが必要なことをするわけでもないので、Wi-Fiドングルを導入することにした。Raspberry Pi 2では定番の[PLANEX GW-USNANO2A](http://www.amazon.co.jp/gp/product/B00ESA34GA/)を購入。

　Wi-FiドングルをRaspberry Piにつないだら、`lsusb`を叩いて認識されたことを確認。

```
pi@raspberrypi:~ $ lsusb
Bus 001 Device 004: ID 2019:ab2a PLANEX GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
pi@raspberrypi:~ $
```

　`sudo raspi-config`を叩いて、Wi-fi Countryを変更。

- `4 Localisation Options`を選択。
- `I4 Change Wi-fi Country`を選択。
- `JP Japan`を選択。

　`Finish`を選んで、再起動する。

　再起動後、どう認識されているかを確認。

```
pi@raspberrypi:~ $ sudo cat /etc/wpa_supplicant/wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
pi@raspberrypi:~ $
pi@raspberrypi:~ $ iwconfig
eth0      no wireless extensions.

lo        no wireless extensions.

wlan0     unassociated  Nickname:"<WIFI@REALTEK>"
          Mode:Auto  Frequency=2.412 GHz  Access Point: Not-Associated
          Sensitivity:0/0
          Retry:off   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

pi@raspberrypi:~ $
```

　`iwlist scan`を叩いて、手元の無線アクセスポイントが認識されているか確認。

```
pi@raspberrypi:~ $ sudo iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - うちの無線アクセスポイントの情報が表示

pi@raspberrypi:~ $
```

　無線アクセスポイントが認識されていることを確認したので、`wpa_passphrase`を叩いて設定ファイルに記載する内容を確認する。

```
pi@raspberrypi:~ $ wpa_passphrase うちのESSID うちのパスフレーズ
network={
        ssid="うちのESSID"
        #psk="うちのパスフレーズ"
        psk=暗号化されたパスフレーズ
}
pi@raspberrypi:~ $
```

　nanoエディタで`/etc/wpa_supplicant/wpa_supplicant.conf`を開いて、`wpa_passphrase`の出力結果を書き込んで編集した。

```
pi@raspberrypi:~ $ sudo cat /etc/wpa_supplicant/wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid="うちのESSID"
        psk=暗号化されたパスフレーズ
}

pi@raspberrypi:~ $
```

　wlan0を`ifdown`/`ifup`して、無線アクセスポイントに接続されたことを確認。

```
pi@raspberrypi:~ $ sudo ifdown wlan0
pi@raspberrypi:~ $ sudo ifup wlan0
pi@raspberrypi:~ $
pi@raspberrypi:~ $ iwconfig wlan0
wlan0     IEEE 802.11bgn  ESSID:"うちのESSID"  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency:2.437 GHz  Access Point: (後略)

pi@raspberrypi:~ $
```

　実際には、`network={……}`内にオプションを付け加えないといけないかと思い色々と試したのだけどエラーになってしまい、一番単純なESSIDと暗号化されたパスフレーズだけを記載するやり方に戻したところ、つながるようになった。`sudo sh -c 'wpa_passphrase うちのESSID うちのパスフレーズ >> /etc/wpa_supplicant/wpa_supplicant.conf'`で直接書き込んでも良かったかもしれない。

　接続ができるようになったところで、無線LANのパワーマネジメント機能をオフにする。`iwconfig`の表示が`Power Management:off`となっていても当てにならないらしいので、8192cuドライバのパラメータを確認する。

```
pi@raspberrypi:~ $ cat /sys/module/8192cu/parameters/rtw_power_mgnt
1
pi@raspberrypi:~ $
pi@raspberrypi:~ $ cat /sys/module/8192cu/parameters/rtw_enusbss
0
pi@raspberrypi:~ $
pi@raspberrypi:~ $ cat /sys/module/8192cu/parameters/rtw_ips_mode
1
pi@raspberrypi:~ $
```

　やはり、`rtw_power_mgnt`の値が`1`の最小限の電力管理になっている。`/etc/modprobe.d/8192cu.conf`を作成して値を`0`にする。情報元の海外のフォーラムを読むとこれだけ変えればいいらしいのだけれど、念のため`rtw_enusbss=1`も追加。`rtw_ips_mode=1`を加えている情報もあったのだけど、パラメータ的にはもともと`1`になっているので追加しなかった。作成して、再起動。

```
pi@raspberrypi:~ $ sudo cat /etc/modprobe.d/8192cu.conf
options 8192cu rtw_power_mgnt=0 rtw_enusbss=1
pi@raspberrypi:~ $
pi@raspberrypi:~ $ sudo reboot
```

　再起動後、8192cuドライバのパラメータが変更されたことを確認。

```
pi@raspberrypi:~ $ cat /sys/module/8192cu/parameters/rtw_power_mgnt
0
pi@raspberrypi:~ $
pi@raspberrypi:~ $ cat /sys/module/8192cu/parameters/rtw_enusbss
1
pi@raspberrypi:~ $
pi@raspberrypi:~ $ cat /sys/module/8192cu/parameters/rtw_ips_mode
1
pi@raspberrypi:~ $
```

　`iwconfig`と`ifconfig`を叩いて、無線アクセスポイントに接続し、IPアドレスを取得できているか確認。

```
pi@raspberrypi:~ $ iwconfig wlan0
wlan0     IEEE 802.11bgn  ESSID:"うちのESSID"  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency:2.437 GHz  Access Point: (後略)

pi@raspberrypi:~ $

pi@raspberrypi:~ $ ifconfig wlan0
wlan0     Link encap:イーサネット  ハードウェアアドレス 00:22:cf:fb:85:20
          inetアドレス:192.168.0.12 ブロードキャスト:192.168.0.255  マスク:255.255.255.0
          inet6アドレス: (後略)

pi@raspberrypi:~ $
```

　無事接続を確認したので、一旦シャットダウンしてLANケーブルを外して立ち上げ直し、無線LAN側のIPアドレスに対してssh接続できることも確認した。

　Macのターミナルからも、`ssh pi@raspberrypi.local`と叩いてssh接続できることを確認。