Raspberry PiをHeadlessでセットアップする

## 【内容】
Raspberry Pi にキーボードやディスプレイを接続せずにセットアップします。
(Wifi 接続も含む)

なお、本手順は以下の機種で動作を確認済みです。

- Raspberry Pi 3 Model B (「4B」でも検証済み)
- Raspberry Pi Zero W
- Raspbian Strech 20181113 (Raspbian Busterでも検証済み)

## 【手順】
### 1. ブート用SDカードの作成
※ 本手順は「Raspbian Strech 20181113」で実行することを想定しています。
まずは、Raspberry Piの公式HPからRaspbianのOSイメージをダウンロードします。

- [Raspberry Pi 公式 Donwloadページ](https://www.raspberrypi.org/downloads/raspbian/)

しかし、現時点では新しいOSイメージが置かれているため、今回対象としている「Raspbian Strech 20181113」をダウンロードすることができません。
下記のミラーサイトからダウンロードすることが出来るので、こちらから入手してください。

- [【Raspbian Strech 20181113 ミラーサイト (ftp.jaist.ac.jp) 】](http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/raspbian-2018-11-15/2018-11-13-raspbian-stretch.zip)

ダウンロードが完了したらOSイメージをSDカードに書き込んでください。
SDカードへの書き込み方法はここでは省きます。
多くの方が記事を書かれていますので検索していただくか、公式HPのこちらを参考にしてください。

- [【www.raspberrypi.org - Installing operating system images】](https://www.raspberrypi.org/documentation/installation/installing-images/README.md)

SDカードの書き込みが終わっても、PCからSDカードをアンマウントしないでください。
まだ作業が残っています。


### 2. ssh起動用ファイルの作成
現行バージョンのRaspbianではデフォルトではsshサービスが無効化されています。
これを自動起動できるようにSDカードの「Boot」パティションに`ssh`(拡張子なし)という空のファイルを作ってください。
windowsをご利用の方は、標準では拡張子が非表示になっているので、拡張子が付いていないか確認してください。

なお、`ssh`ファイルはRaspberry Pi起動時に読み込まれて削除されます。


### 3. Wifi接続用の設定ファイルの作成
ssh同様、「Boot」パティションにWifi設定用のファイルを置いておくと、自動的に読み込まれて適切な場所に書き込まれます。

具体的には「Boot」パティションに`wpa_supplicant.conf`という名前のファイルを作り、設定を記述します。
Wifiに接続するためには下記の内容を記載してください。
設定内容は接続するアクセスポイントに応じて変更する必要があります。

```wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
    ssid="<SSID名>"
    psk="<パスワード>"
}
```

### 4. Raspberry Piの起動
上記の準備ができたら、PCからSDカードを取り出し、ラズパイ本体に挿入して電源を投入します。
LEDがしばらくチカチカして落ち着いたら、起動が完了していると思います。


### 5. sshで接続する
Windows 10やMacの場合、 `ssh pi@raspberrypi.local` でアクセスできます。
同一セグメント内に同じ名前のラズパイがなければの話ですが…
パスワードは `raspberry` です。

Windows 7の場合はターミナルソフトをインストールした上で、下記手順でラズパイのIPを見つけて接続する必要があります。


### ネットワーク上のRaspberry Piを探す (Windows 7などの場合)
起動しネットワークに接続されたラズパイはsshサービスを起動していますが、IPをDHCPで取得しているのでIPがわからない限り接続できません。

そこで下記のコマンドを「ラズパイ探し.bat」として保存して実行してください。

#### 2020/05/12 追記
コメントでご指摘いただきましたが、RaspberryPi4ではMACアドレスが変更されています。
RaspberryPi4の場合は、下記スクリプトの `b8-27-eb` の部分を `dc-a6-32` に変更してください。

```ラズパイ探し.bat
@echo off
set SEARCH_MAC="b8-27-eb"

for /l %%i in (1,1,254) do ping -w 500 -n 1 192.168.1.%%i
echo ##################################################
echo  search %SEARCH_MAC%
echo ##################################################
arp -a | find %SEARCH_MAC%
pause
```


```text:結果
##################################################
 search "b8-27-eb"
##################################################
  192.168.1.59        b8-27-eb-xx-xx-xx     動的
```

特定のセグメント(ここでは「192.168.1.*」)にpingを打った後、arpコマンドで特定のMACアドレスを持つIPを表示します。(ラズパイのMACアドレスは頭3桁がすべて同じです)
セグメント内に他のラズパイがなければ上記の例のように一件だけ表示されるはずですので、そこに表示されているIPに対してsshで接続してください。
複数件ある場合は自分の持っているラズパイのMACアドレスを特定したうえで、そこに表示されているIPに対してsshで接続してください。


### 6. Raspberry Piの更新
sshでつながったら`passwd`コマンドでpiユーザのパスワードを変更しておきましょう。
また、最新のモジュールに更新するために、以下のコマンドを実行しておきましょう。

```bash

sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt autoremove -y
```

## 【課題】
同一セグメント内にラズパイが複数ある場合、自分のラズパイのMACアドレスを特定する必要があります。
そのためにはディスプレイとキーボードを接続する必要がありますので、完全なheadlessセットアップは行なえません。