Raspberry Pi Zero WにRaspbian Stretch をインストールして色々設定する

(2018/4/30追記)
本記事作成時はStretchのKernel4.9だったのになぁ・・・
今時点はKernel4.14になっているため記事内の最新化を実施しました。
また、Bluetoothテザリングのセットアップも追記。

#01.はじめに
~~新年早々pi zero wを購入したので現時点(2018/1/1)で最新版となるRaspbian Stretch4.9~~
現時点(2018/4/30)で最新版となるRaspbian Stretch のインストール～セットアップをまとめることにしました。
初回接続からsshを有効にして作業するためHDMIディスプレイ等は不要な手順になっています。

#02.準備したもの
* raspberry pi zero w
* micro SD カード（32GBで実施。8GB以上あれば良いみたいです。）
* micro USB ケーブル
* 作業PC（Windows10で実施しました）
* ターミナルツール（teraterm利用）

#03.OSイメージのダウンロード
[公式サイト](https://www.raspberrypi.org/)からOSイメージをダウンロードする。
　`DOWNLOADS` -> `RASPBIAN`-> `Raspbian Stretch Lite` -> `Download ZiP`
　　Release date:2018-04-18、Kernel version:4.14
　　※zipファイルで約350MB、解凍すると約1.8GBくらいでした。

#04.SDカードへOSイメージの書き込み
なにはともあれPCに挿しこみSDカードのフォーマットを実施（今回はOS標準のツールで実施しました）
OSイメージの書き込みについては色んなツールがありますが、
以前何かで使ってインストール済みだった「Win32DiskImager」を利用しました。
ググればすぐ見つかると思います。
↓こんな感じでイメージ書き込み。3分程度で完了。
![01.png](https://qiita-image-store.s3.amazonaws.com/0/207453/3278559f-2416-50a8-38ce-e8fdd16092d0.png)

このあとまだ作業があるのでSDカードは挿したままでokです。

#05.ssh有効化、wifi接続設定
基本的に[Raspberry Piの無線LANをmicroSDで設定する](https://qiita.com/mascii/items/0d1a280ac58ed8f6f999)を参考にさせて頂きました！
上記サイトを参考に`ssh`と`wpa_supplicant.conf`を用意し、
書き込んだドライブのrootに放り込むだけで起動後に<b>ssh有効化</b>、<b>wifi接続</b>されます。ラクチン！
あ、`wpa_supplicant.conf`のssidとpskはご自身の環境に置き換えて下さいね。
放り込んだあとのイメージは↓の通り
![02.png](https://qiita-image-store.s3.amazonaws.com/0/207453/81dc7961-f8fe-7eaa-4a26-edffe2b12365.png)
※ファイルサイズが43,436KBとかなってますが、
　コピー元は0バイトと200バイト程度です。表示は気にしなくてOKです。

#06.Raspbianの起動
ここまでで準備したsdカードpiに挿し込んで起動します。
起動と言っても電源挿すだけです。
以降はターミナルでの作業となります。

#07.Raspbianログイン
teratermでIPアドレスを指定してssh接続します。
※IPアドレスは各自ルーターのDHCP情報なり`arp -a`なりで確認してください。
セットアップ直後は
　ユーザ：pi
　PASSWORD：raspberry
で固定です。PASSWORDはすぐ変えるようにしましょう。

#08.各種設定変更
設定用のguiが用意されているためそちらで行う。

```bash: 
sudo raspi-config
```
##08-01.パスワードを変更する
`1 Change User Password`

##08-02.ロケールをjpに変更する
`4 Localisation Options` -> `I1 Change Locale` -> `ja_JP.UTF-8 UTF-8`

##08-03.時刻設定変更をJSTにする
`4 Localisation Options` -> `I2 Change Timezone` -> `Asia` ->  `Tokyo`

##08-04.raspbianをアップデートする（debianのいつものやつ）
```bash:
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo reboot
```
##08-05.SDカードの延命処置
書き込み回数制限によるSDカードの寿命を少しでも延命させる

以下サイトを参考にさせて頂きました！
[Raspberry PiのログをRAMDISKに置く方法](https://curecode.jp/tech/raspberrypi-ramdisk/)
##08-06.swapの削除
```shell-session
pi@raspberrypi:~ $ free
              total        used        free      shared  buff/cache   available
Mem:         444532       23236      361156        5884       60140      367608
Swap:        102396           0      102396　　★100k程度ある
pi@raspberrypi:~ $ sudo swapoff --all
pi@raspberrypi:~ $ free
              total        used        free      shared  buff/cache   available
Mem:         444532       23348      360404        5884       60780      367500
Swap:             0           0           0　　★0にする
pi@raspberrypi:~ $ sudo apt-get -y remove dphys-swapfile　　★パッケージ削除しておく
パッケージリストを読み込んでいます... 完了
　...省略...
dphys-swapfile (20100506-3) を削除しています ...
man-db (2.7.6.1-2) のトリガを処理しています ...
pi@raspberrypi:~ $ sudo reboot
再起動後...
pi@raspberrypi:~ $ free
              total        used        free      shared  buff/cache   available
Mem:         444532       23964       21212        5892      399356      366724
Swap:             0           0           0　　★0になってるok！
pi@raspberrypi:~ $
```
##08-xx.ログのRAMDISK配置
まだ常時起動する予定はないため一旦保留

#09.Bluetoothテザリング設定
自身はスマホをもっておらず、ガラケとipad miniで生活しています。
ラズパイを外で動かす際はipadにBluetoothテザリングさせると都合がよいため、
そのときの設定も記載します。

##09-01.Bluetoothペアリング
Bluetoothなのでまずはペアリングを行います。

以下コマンドを発行して設定します。

```bash: 
pi@raspberrypi:~ $ sudo bluetoothctl
[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# scan on
[bluetooth]# pair zz:zz:zz:zz:zz
[bluetooth]# trust zz:zz:zz:zz:zz
[bluetooth]# quit
```

実行ログ

```bash: 
（bluetoothctlツールの起動）
pi@raspberrypi:~ $ sudo bluetoothctl
[NEW] Controller xx:xx:xx:xx:xx:xx raspberrypi [default]
[NEW] Device yy:yy:yy:yy:yy:yy yy-yy-yy-yy-yy-yy

（いくつかのオプション設定）
[bluetooth]# agent on
Agent registered
[bluetooth]# default-agent
Default agent request successful

（ここからスキャン開始、ipad側のbluetoothもONにしてスキャン状態にする）
（zz:zz:zz:zz:zzが接続先ipadです）
[bluetooth]# scan on
Discovery started
[CHG] Controller xx:xx:xx:xx:xx:xx Discovering: yes
[NEW] Device zz:zz:zz:zz:zz ほげほげ の iPad　　　　　★★これがipad★★

（ペアリング）
[bluetooth]# pair zz:zz:zz:zz:zz
Attempting to pair with zz:zz:zz:zz:zz
[CHG] Device zz:zz:zz:zz:zz Connected: yes
Request confirmation

（この辺でipad側にもポップアップがでてる。okする）
[agent] Confirm passkey 999999 (yes/no): yes
[CHG] Device zz:zz:zz:zz:zz Modalias: bluetooth:hogehogehoge
[CHG] Device zz:zz:zz:zz:zz UUIDs: .....
（一部略）
[CHG] Device zz:zz:zz:zz:zz ServicesResolved: yes
[CHG] Device zz:zz:zz:zz:zz Paired: yes
Pairing successful
[CHG] Device zz:zz:zz:zz:zz ServicesResolved: no
[CHG] Device zz:zz:zz:zz:zz Connected: no
[CHG] Device yy:yy:yy:yy:yy:yy RSSI: -101

（念のため信用コマンド発行）
[bluetooth]# trust zz:zz:zz:zz:zz
[CHG] Device 34:12:98:27:7C:A8 Trusted: yes
Changing 34:12:98:27:7C:A8 trust succeeded

（bluetoothctlツールから抜ける）
[bluetooth]# quit
```

ここまででペアリングは完了です。

##09-02.Bluetoothのネットワーク利用準備
Bluetoothのネットワークを使うためには
Personal Area Network(PAN)というプロファイルで行うようです。
bt-panというスクリプトがあるためそれを利用します。
・[bt-panの説明](https://github.com/mk-fg/fgtk#bt-pan)

セットアップは簡単です。（スクリプトの配置場所は趣味でoptにしています）

```bash: 
（bt-panを使うために必要なものをインストール）
pi@raspberrypi:~ $ sudo apt-get install python-dbus

（bt-panのダウンロード）
pi@raspberrypi:~ $ sudo mkdir -m 755 /opt/pan
pi@raspberrypi:~ $ cd /opt/pan
pi@raspberrypi:/opt/pan $ sudo wget https://raw.githubusercontent.com/mk-fg/fgtk/master/bt-pan
・・・
2018-04-30 20:15:00 (2.05 MB/s) - `bt-pan へ保存完了 [8902/8902]

（bt-panに実行権限付与）
pi@raspberrypi:/opt/pan $ sudo chmod 755 bt-pan

（試しにテスト）
（ipad側はWi-Fiを切ってモバイルデータ通信に。インターネット共有をオンにする）
pi@raspberrypi:/opt/pan $ sudo ./bt-pan client zz:zz:zz:zz:zz

　⇒　pi側には何も出ないがipad側に接続済の表示！ok！
　　　念のためifconfigで確認。bnep0が対象の接続。

pi@raspberrypi:/opt/pan $ ifconfig
bnep0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ・・・
```

##09-03.起動時の自動設定
お手軽に、自分の運用方法にはマッチする方法で設定しました。
rc.localにbt-panコマンド書いておくだけです！

```bash: 
sudo /opt/pan/bt-pan client 34:12:98:27:7C:A8
```
この１行をrc.localのexit 0の前に追記しました。

これでpi電源投入時にipad側でインターネット共有がONになっていれば接続される。
ipad側の操作を忘れたらpiの再起動が必要になるため
cron等で一定間隔にチェックするのも考えましたが電源もったいないので
今のところこの状態で満足しています。


#99.参考にさせて頂いたサイトまとめ
・[Raspberry Piの無線LANをmicroSDで設定する](https://qiita.com/mascii/items/0d1a280ac58ed8f6f999)
・[Raspberry PiのログをRAMDISKに置く方法](https://curecode.jp/tech/raspberrypi-ramdisk/)

謝辞！