Raspberry pi Zero WH ヘッドレス初期設定

# はじめに
Raspberry pi の初期設定をヘッドレス（外部ディスプレイなし）で
やろうと思い、いろいろ調べながらやろうと思ったのですが、
筆者が初心者なもので、つまずきまくったので、
自分用と思って残しておきます。

# 環境
* Raspberry pi Zero WH
* Team microSDHCカード 32GB
* MacBook Pro Early 2015 (macOS 10.15.3)

# OSのインストール
SDカードにOSをぶちこむ作業です。
[公式サイト](https://www.raspberrypi.org/downloads/raspbian/)から、所望のzipファイルをダウンロードしてください。
筆者はデスクトップは使用しないので、Liteバージョンを選択し、ダウンロードしました。
執筆当時（2020年2月27日）では、`2020-02-13-raspbian-buster-lite.zip`が
ダウンロードされました。

SDカードをMacに接続し、diskutilで接続状況を確認します。

```
$ diskutil list
```
上記のコマンドで、SDカードのマウント場所が確認できます。
筆者の環境では`/dev/disk2`にマウントされていました。
ここは確実に確認しないと、取り返しのつかないことになるので、
めっちゃ確認します。

次に、SDカードをアンマウントし、
ダウンロードした.imgファイルを書き込んでいきます。
先ほどダウンロードした.imgファイルのディレクトリまで`cd`コマンドで移動して、
以下のコマンドを入力します。

```
$ unzip 2020-02-13-raspbian-buster-lite.zip
$ diskutil unmountDisk /dev/disk2
$ sudo dd bs=1m if=2020-02-13-raspbian-buster-lite.img of=/dev/rdisk2
```
これで書き込みがスタートします。
何の音沙汰もなく始まるので、動作が止まっているように見えますが、ちゃんと書き込まれてます。
結構時間がかかるので、気長に待ちましょう。

ここで、ディスクの位置を間違えてしまうと、
最悪のケース、Mac本体のデータが消し飛びます。
緊張しながら、慎重にコマンドを入力しましょう。
`dd`コマンドは、`disk2`とするより、`rdisk2`とする方が書き込みが早くなるそうです。
詳しいことはわからないので、自己責任で。

書き込みが終了したら、rapsbianOSがSDカードに書き込まれました!!

# ヘッドレスのための初期設定
ヘッドレスでラズパイを始めるためには、
事前にSSHの設定やWi-Fiの設定をしておく必要があります。
先ほどOSを書き込んだSDカードに入り込み、
設定を書き加えていきます。

```
$ cd /Volumes/boot
```
これで、書き込んだOSに入り込めました。
ここに、`ssh`、`wpa_supplicant.conf`という、2つのファイルを新規作成します。

```
$ touch ssh
$ touch wpa_supplicant.conf
```
`ssh`ファイルは拡張子なしで、空ファイルのままで大丈夫です。
`wpa_supplicant.conf`は、以下を書き込みます。

```
$ vim wpa_supplicant.conf
```

```wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="wifiのid"
    psk="wifiのパスワード"
}
```
自分の環境のssidとパスワードを入力してください。
ここで注意なのですが、Wi-Fiは2.4GHz帯しか対応していないので注意です。
筆者は5GHz帯のssidを入力しており、つまずきました。（初歩的すぎる...）
複数のssidを登録したい場合は、`network={}`を連結すれば良いみたいです。

```wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="wifiのid1"
    psk="wifiのパスワード1"
}
network={
    ssid="wifiのid2"
    psk="wifiのパスワード2"
}
```

書き込みが完了したら、macでの設定は終了なので、
SDカードを取り出します。

```
$ cd
$ diskutil eject /dev/disk2
```

# SSHで接続して初期設定
Raspberry pi にSDカードを差し込んで、
microUSBから給電をすると、
緑のLEDが点滅して、Raspberry pi が起動します！！
点滅から、常時点灯に切り替われば、起動完了です。
macから、sshでラズパイに接続します。

```
$ ssh pi@raspberrypi.local
```
パスワードを求められるので、`raspberry`と入力しましょう。
無事、ssh接続ができているはずです！

# Raspberry pi の初期設定
これ以降は、普通のラズパイの初期設定と同じです。
一応、書いておきます。

### パスワードの変更
まずは、piとrootのパスワードをそれぞれ変更します。

```
$ passwd
$ sudo passwd
```

### ユーザの追加
自分用のユーザを設定し、切り替えます。

```
$ sudo useradd -d /home/kabewall -m -s /bin/bash kabewall
$ sudo passwd kabewall
$ sudo gpasswd -a kabewall sudo
$ sudo su - kabewall
```

### 鍵認証の設定

鍵認証でssh接続したい場合は、以下の設定を行います。

```
$ mkdir .ssh
$ chmod 700 .ssh
```

Mac側で鍵を生成します。

```
$ ssh-keygen -t rsa
$ ls ~/.ssh/

id_rsa id_rsp.pub
```
最後の行のように表示されていればOKです。
再度、macから以下のコマンドでラズパイに公開鍵を送ります。

```
$ scp .ssh/id_rsa.pub kabewall@raspberrypi.local:/home/kabewall/.ssh/

id_rsa.pub
```
最後の行のように表示されればOKです。
ラズパイに戻って、以下のコマンドを打ちます。

```
$ cd ~
$ cat id_rsa.pub >> authorized_keys
$ chmod 600 authorized_keys
$ rm -i id_rsa.pub
```

最後に、sshの設定をして終わりです。

```
sudo vim /etc/ssh/sshd_config
```
ここに、以下を追記します。

```
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
```

全ての変更を有効にするために、sshを再起動しましょう。

```
sudo /etc/init.d/ssh restart
```
restartされたら設定完了です。

### その他諸々の設定

shからbashに切り替えたいときは、

```
$ sudo chsh -s /bin/bash kabewall
```

初期設定は、`raspi-config`から。
ここら辺の設定は、偉大な先輩たちのQiitaの方が参考になるでしょう。
筆者は[この記事](https://qiita.com/HeRo/items/c1c30d7267faeb304538#raspi-config-%E3%81%AB%E3%82%88%E3%82%8B%E8%A8%AD%E5%AE%9A)を参考にしました。

# まとめ
初期設定って、意外と時間がかかるものですね。
これを乗り越えたら、無限の可能性が待っていると思うと、がんばれます。

## 参考文献
[Raspberry Pi 初期設定](https://qiita.com/HeRo/items/c1c30d7267faeb304538#raspi-config-%E3%81%AB%E3%82%88%E3%82%8B%E8%A8%AD%E5%AE%9A)
[【ヘッドレス】Raspberry Pi 3 セットアップ for macOS](https://qiita.com/y_k/items/2e37583d4a5dcf81dc19)
[ラズパイにSSH接続（鍵認証）](https://qiita.com/kuro___inu/items/93da8aa9b56847c3a2bf)