Rasberry Piの初期設定(ヘッドレスで設定)

#　追記
[Raspberry Pi ヘッドレスセットアップ](https://qiita.com/coffeebeater/items/4ab6b2a9a9807552d76d)という記事が`Raspberry Pi Imager`を使ってのヘッドレス設定について解説しています。何枚もOS入りsdカード作らないなら[Raspberry Pi ヘッドレスセットアップ](https://qiita.com/coffeebeater/items/4ab6b2a9a9807552d76d)の方が絶対楽です。

# 目的
久しぶりにRaspberry Piを使って何かしようと思い、Raspiの設定をしようと思ったところいろいろと状況が変わったようなので調査がてら、自分向けにまとめていきます。

# 目標
Raspiに接続するディスプレイとキーボードを使わずに、`ssh`で接続可能にする。

# 使用したもの

1. OSをsdカードに焼いたり、sshを接続するためのPC(Mac Pro M1チップのものを使いました)
1. Rasberri Pi 本体(Raspberri Pi 3 model Bを使いました)
1. SDカード(32GB)

どちらの機器で操作しているか分かりやすくするために、`1`をPC、`2`をRasberry PiまたはRaspiと表現します。

# OSの準備

Raspberry Piを動かすためのOSの準備をします。用意したSDカードにOSを焼きます。Raspberri PiはSDカードからOSを読み込んで動作します。[^1]このとき使用するOSは以前は`Raspbian`と呼ばれていましたが、現在は`Raspberry Pi OS`と呼ぶそうです。[^2]

Raspberri Pi公式から`Raspberri Pi Imager`という、sdカードに焼くためのsoftwareが用意されています。また、このソフトウェアからOSを選択できるので別個にOSをダウンロードする必要はありません。

[^1]: 設定をすることで、USBからのOSの起動も可能なようです。https://jyn.jp/raspberrypi-usb-only-boot/
[^2]: 他のOSをインストールすることが可能です。実際`Raspberry Pi Imager` では様々なOSが選択できます。ですが、 `Rasberry Pi OS`がデファクトスタンダードとなっており、特定の目的がない場合はこれこれを使います。

## Raspberry Pi Imager のインストール

[Rasberry Piの公式ページ](https://www.raspberrypi.com/software/)の`Software` からインストールできます。個人的にはパッケージ管理ソフトを使って入れたいのので、Macのパッケージ管理ソフト`brew`を使って入れています。[^3]

[^3]: https://formulae.brew.sh/cask/raspberry-pi-imager

```
brew install --cask raspberry-pi-imager
```

Ubuntuなどで`apt`を使う場合はこちらです。

```
sudo apt install rpi-imager
```

これで、OSを焼く準備が完了しました。

## Raspberry Pi OS をSDカードに焼く
OSを焼くSDカードをPCに接続し、`Raspberry PI Imager`を立ち上げてください。

![Raspberry Pi Imager の起動画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/fc1625c7-fe44-b59a-d0b7-e89216598114.png "Raspberry Pi Imager の起動画面")

`Operating System`の項目の`CHOOSE OS`から`Raspberry Pi OS (32-bit)`を選択、`Storage`の項目の`CHOOSE STORAGE`から接続したSDカードを選択します。

`WRITE`が押せるようになっていると思いますので、`WRITE`を押して書き込みます。

# SSHで接続をするための設定
通常の手順では、この時点でSDカードをPCから取り外しますが、今回はそのままネットワークに接続するための設定をしていきます。

raspi用のディスプレイやキーボードを用意していないので、最低限ネットワークに接続できるようにして、sshを有効化してPCから接続できるようにしていきます。

## ネットワークへ接続するための設定

ここでの、ネットワークへの接続は`wi-fi`の使用を想定しています。有線LANを使用する場合はそのまま次の項目へ進んでくださの使用を想定しています。有線LANを使用する場合はそのまま次の項目へ進んでください 。

`wi-fi`の設定は`wpa_supplicant.conf`というファイルに記述されます。SDカードの直下(ルートディレクトリ)にこの名前のファイルを作成し、ファイルの中身を以下のようにして保存します。


```
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
  ssid="【接続したいSSIDの名前】"
  psk=【wifiのパスワード】
}
```

- 【接続したいSSIDの名前】は接続したいSSIDの名前に変更してください。`"`で囲んでください。
- 【wifiのパスワード】は`"`で囲むことで平文で記述することもできますが、パスワードを平文で書くのは非常に気持ちが悪いので、こちらの[サイト](http://jorisvr.nl/wpapsk.html)などで`WPA key`を計算して`"`で囲まずに記述してください。

## SSHの有効化

デフォルトの状態では`SSH`は無効化されています[^4]。有効化は簡単です。SDカードの直下(ルートディレクトリ)に、`ssh`という名前のファイルを作成するだけです。

[^4]: 初期のユーザ名が`pi`、パスワードが`raspberry`となっていることは検索すればすぐに出てくるのでセキュリティ上の問題だと思います。

# sshで接続

Raspiを立ち上げていきます。PCからSDカードを取り外して、Raspiに入れ電源を繋げてください。

## IPアドレスの検索

現状では、RaspiのIPアドレスがわかりません。
まずは、デフォルトで割り振られるホスト名`raspberrypi.local`で試してみてください。

```
ssh pi@raspberrypi.local
```

複数のraspiを接続していない場合はこれで接続できると思います。`pi`の部分がユーザー名、`raspberrypi.local`がホスト名を表しています。

しかし、複数のRaspiを接続していて、かつホスト名を`raspberrypi`から変更していない場合は、この方法では検索できません。そこで`arp`[^5]というコマンドを使って調べたいと思います。

[^5]: `arp`は`Address Resolution Protocol`の略です。IPアドレス(ネットワーク上で割り振られる識別子)からMACアドレス(機器に固有の識別子)を調べるプロトコルです。

```
arp -a |grep -e b8 -e dc -e e4
```

`arp -a`は現在のネットワーク内で使用されているIPアドレスとMACアドレスの対応を表示してくれます。`grep`は指定して単語が含まれる行のみ表示してくれます。 `-e`オプションはor検索をしてくれます。`b8`、`dc`、`e4`はRaspiのMACアドレスの冒頭の2文字です。以前は`b8:~`のみでしたが最近追加されたようです。[こちら](https://udger.com/resources/mac-address-vendor-detail?name=raspberry_pi_foundation)を確認してください。

ここで表示されたIPアドレスがraspiのIPアドレスになります。複数のraspiを繋げていると当然複数表示されるので、適切なものを選んでください。

仮に`192.168.X.XXX`が繋げたいraspiのIPアドレスだったとします。

## SSHで接続

PCからsshで接続します。PCのターミナルで

```
ssh pi@192.168.X.XXX
```

入力してください。パスワードは`raspberry`です。これで`ssh`で接続できます。

# raspiの設定

sshでraspiに接続できたと思います。最後にraspi上での設定をします。

## パスワードの変更

Raspberry Pi OSのsshのデフォルトのユーザーとパスワードは`pi`、`raspberry`であるのは有名なので必ず変更しましょう。sshで繋げたraspi上で

```
sudo raspi-config
```

と入力してください。
![raspi-configの画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/59af86e3-e0fd-864e-e968-373deebb2c6a.png "raspi-configの画面")
この画面が表示されます。`1 System Options` -> `S3 Password`で変更することができます。

## タイムゾーンの設定
    
タイムゾーンを日本に変更します。
`raspi-config`で`5 Localisation Options` -> `L2 Timezone` -> `Asia` -> `Tokyo`で変更できます。