Raspberry Pi 4(Bullseye)のセットアップ

# はじめに
ちょくちょくRaspberryPiのセットアップをする機会があるにもかかわらず、毎回やり方を調べているので、この機会に備忘録がてら自身のセットアップについてまとめようと思います。

:::note warn
あくまで私のやり方でのセットアップになるので、これが正解というわけではありません。
:::

## 環境について
・Windows10 (21H2)
・Raspberry Pi 4 (4GB)
・microSD (16GB)
・Raspberry Pi Imager v1.7.2


# 1. RaspberryPiImagerのダウンロード
https://www.raspberrypi.com/software/

上記サイトよりダウンロードしてください。

# 2. OSの書き込み
Raspberry Pi Imagerを起動し、OS、ストレージ、設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153639/4dd5933a-6c4f-a6b3-bae1-0352f82a8b51.png)
まず「OSを選ぶ」より必要なOSを選択してください。
私は「Raspberry Pi OS (other)」＞「Raspberry Pi OS Lite (64bit)」を選択しています。
次に「ストレージを選ぶ」で、書き込みを行うSDカードを選択してください。

ここまで行うと、右下に歯車の設定アイコンが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153639/3562c35f-3593-3eb7-f66b-892c4bef50cc.png)

## 詳細設定について
歯車アイコンをクリックすると詳細設定項目が表示されます。
（昔はsshファイルを置いたりしてたのがここで全部設定できるなんて、便利になりましたね）

:::note warn
ここでユーザ名とパスワードを設定しなかった場合、初回起動時にモニタに接続する必要があります。
モニタ無しでセットアップ（ヘッドレスセットアップ）をする場合は、ここで必ず設定しておきましょう。
https://qiita.com/tama_2396k/items/95596738bd5e6e5d8218
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153639/d7447393-9b5f-99c2-b78b-3194362a79d5.png)
* ホスト名
  * デフォルトは `raspberrypi` .local
* SSHの有効化
  * 公開鍵認証の設定をしたときに、公開鍵は表示されているが、秘密鍵がどこに格納されるのかが不明のため、とりあえずはパスワード認証で進める。
* ユーザ名とパスワード
  * ユーザ名 `pi` も設定はできるが非推奨
* Wi-Fi
  * 私は有線接続でしか運用しない予定なので未入力にしています。
* ロケール
  * タイムゾーン： `Asia/Tokyo`
  * キーボードレイアウト： `jp`

設定完了後、「書き込む」ボタンを押してOSの書き込みを行ってください。


# 3. IPアドレスの確認
OSの書き込みが完了した後、SDカードを本体に挿入し、電源を接続して起動してください。
SSH接続をするためにRaspberry PiのIPアドレスを調べます。

参考記事↓

https://qiita.com/xshell/items/af4e2ef8d804cd29e38e

Windowsのコマンドプロンプトを立ち上げ、以下のコマンドを実行（`192.168.0.%i`の部分は自身の環境に合わせる）
```
for /l %i in (0,1,255) do ping -w 1 -n 1 192.168.0.%i
```
第4オクテットを0～255で回して検索するため少し時間がかかります。
検索完了後、以下のコマンドを実行
```
arp -a
```
すると以下のような結果が表示されます。（一部マスクしています）
```
インターフェイス: 192.168.0.45 --- 0x8
  インターネット アドレス 物理アドレス           種類
  192.168.0.1         58-27-xx-xx-xx-xx     動的
　　　　　　　　　　　　～～　中略　～～
  192.168.0.25        e4-5f-01-xx-xx-xx     動的
  192.168.0.201       b8-27-eb-xx-xx-xx     動的
  192.168.0.202       b8-27-eb-xx-xx-xx     動的
  192.168.0.255       ff-ff-ff-ff-ff-ff     静的
```
192.168.0.201と192.168.0.202に関しては既存のRaspberryPiです。
昔の記事では `b8-27-eb` 始まりがRaspberryPiと紹介されてたりしますが、IEEEを確認すると、RaspberryPiのMACアドレスは下記の４種類に増えたようです。（2022年5月25日現在）

https://regauth.standards.ieee.org/standards-ra-web/pub/view.html#registries

※リンク先で `raspberry pi` で検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153639/5a4721cb-4aac-6ad6-6d6a-a20dc034bef8.png)

この4種類のどれかから始まるMACアドレスのものがRaspberryPiとなりますが、個人的にはルーターの管理画面から検索する方が速くて楽です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153639/fefad00a-65e9-20c6-8a88-267ea2701e59.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153639/1bd235a3-9090-4d33-9055-8c751fae3846.png)
もしくは、せっかく詳細設定でホスト名指定できるようになったので、ホスト名で接続してもいいですね。


# 4. SSH接続～初期設定
Tera Termを起動し、IPアドレスやホスト名でログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153639/6cdb4c43-d2d6-ba06-b99c-cc58d8253964.png)
ログインに使用するユーザ名とパスワードは、詳細設定で入力した値になります。

ログインができたら、初期設定を行っていきます。

## raspi-config

下記コマンドを実行し、設定画面を表示します。
```
$ sudo raspi-config
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153639/cd710f31-ad2b-c89f-4f2c-189a8faa07a7.png)

### ロケールの設定
[5 Localisation Options] > [L1 Locale]
[ ] ja_JP.UTF-8 UTF-8 にカーソルを合わせ、スペースキーで選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153639/fdcad7e7-b075-ef7a-0c9e-057d66002b20.png)

次の画面ではシステム全体での言語設定となるため、私は「en_GB.UTF-8」としています。
※日本語でしか使用しない場合は「ja_JP.UTF-8」でいいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153639/c5740991-2016-1f3f-9031-b52ff2cf6447.png)

他の設定はRaspberry Pi Imagerの詳細設定で入力した内容なので割愛。

## パッケージの更新
いつものやつ。
```
$ sudo apt update
$ sudo apt upgrade
```

## vimの入れ替え
この後、いろいろなファイルを触る必要が出て来るが、デフォルトで入ってるvimは最小構成で使い勝手が悪いため入れなおす。

```text
# 今インストールされているvimの確認
$ dpkg -l | grep vim
ii  vim-common                           2:8.2.2434-3+deb11u1             all          Vi IMproved - Common files
ii  vim-tiny                             2:8.2.2434-3+deb11u1             arm64        Vi IMproved - enhanced vi editor - compact version
```

```text
# vimをアンインストール
$ sudo apt remove -y --purge vim-common vim-tiny

# 通常のvimをインストール
$ sudo apt install -y vim
```

```text
$ dpkg -l | grep vim
ii  vim                                  2:8.2.2434-3+deb11u1             arm64        Vi IMproved - enhanced vi editor
ii  vim-common                           2:8.2.2434-3+deb11u1             all          Vi IMproved - Common files
ii  vim-runtime                          2:8.2.2434-3+deb11u1             all          Vi IMproved - Runtime files
```

### viでのクリップボード有効化
今入れたviでもクリップボードへのコピーやペーストができない。
※[+]は使用可、[-]は使用不可
```text
$ vim --version | grep clipboard
-clipboard         +jumplist          +popupwin          +user_commands
+ex_extra          -mouse_jsbterm     -sun_workshop      -xterm_clipboard
```

そのため追加インストール。
入れるのは下記サイトを参考に`vim-gtk`を選択。
[Raspbian Vimでクリップボードにコピーできるようにした](https://ytyaru.hatenablog.com/entry/2019/02/03/000000)
```text
$ sudo apt install vim-gtk
```
```text
$ vim --version | grep clipboard
+clipboard         +jumplist          +popupwin          +user_commands
+ex_extra          -mouse_jsbterm     -sun_workshop      +xterm_clipboard
```

### .vimrcの設定
設定内容はお好みで。
```
$ touch ~/.vimrc
$ echo "set fileencodings=utf-8" > ~/.vimrc
$ echo "set nocompatible" >> ~/.vimrc
$ echo "set number" >> ~/.vimrc
$ echo "set cursorline" >> ~/.vimrc
$ echo "syntax enable" >> ~/.vimrc
$ echo "set title" >> ~/.vimrc
$ echo "set hlsearch" >> ~/.vimrc
$ echo "nnoremap <silent><Esc><Esc> :<C-u>set nohlsearch!<CR>" >> ~/.vimrc
$ echo "set backspace=indent,eol,start" >> ~/.vimrc
$ echo "set clipboard=unnamed,autoselect" >> ~/.vimrc

$ sudo ln -s ~/.vimrc /root/.vimrc
$ sudo ln -s ~/.vim /root/.vim
```
#### 参考にした記事
[Raspberry Pi のvi編集モードで入力ができない事象の解消](https://qiita.com/nikofu501/items/2b1c5c0c0abc47cfbed7)
[vimで方向キーがABCDを入力してしまう問題の解決](https://qiita.com/blue_camel/items/e2bd59a3b33acd5edfd0)
[脱初級者のためのVim設定ガイド](https://qiita.com/Catalyst3104/items/bf750cce9d3970c9058f)
[オプションを設定してvi/vimを使いやすくする〜初心者編](https://linuc.spa-miz.com/2020/10/15/set-options-to-make-vi-easier-to-use-vi-first-first-person-stories/)
[Vimをカスタマイズしよう 〜 Vimはいいぞ！ゴリラと学ぶVim講座(6)](https://knowledge.sakura.ad.jp/23121/)

## IPアドレスの固定
現状ではDHCPによってIPアドレスが振られているため、IPアドレスを固定化します。
念のため `ifconfig` で対象のインターフェースを確認しておく。
```
$ ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
```
```
$ sudo vi /etc/dhcpcd.conf
```
下記を追記
```dhcpcd.conf
interface eth0
static ip_address=192.168.0.XXX/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
static domain_search=
noipv6
```
設定の反映
```
$ sudo service dhcpcd reload
```
:::note warn
変更後のIPアドレスで接続テストを行いますが、その際今操作しているTeraTermは閉じない事！
もし編集内容が間違っていて、新しいIPアドレスで接続できなかった場合、元に戻す手段がなくなります。
:::

設定した固定IPでSSH接続できることを確認したら、元のTeraTermは閉じても構いません。

## 公開鍵認証
### 鍵の作成
パスワード認証での接続ではセキュリティに不安があるので、公開鍵認証にします。
Windows上でコマンドプロンプトを立ち上げ、以下コマンドを入力します。
```
> ssh-keygen -t rsa -b 2048
```
鍵の保存場所を聞かれるので、「保存場所+ファイル名」の形式で入力します。
```
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\ユーザ名/.ssh/id_rsa): D:\key\id_rsa
```
その後パスフレーズを2回入力することでファイル鍵が作成されます。

### Raspberry Pi側の設定
Tera TermのSSH SCPを用いて、先ほど作成した公開鍵をRaspberry Piに送信します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153639/416a8fa3-07e8-5db6-9561-24245242f640.png)
送信したファイルを基に設定を行っていきます。
設定後は送信した公開鍵ファイルは不要になるので削除します。
```
$ mkdir .ssh
$ cat id_rsa.pub >> .ssh/authorized_keys
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
$ rm id_rsa.pub
```
続いてSSHサーバの設定を変更します。
主な作業内容は以下の４点
* SSHポートの変更
* rootログインの禁止
* 公開鍵認証の有効化
* パスワード認証の無効化
```
$ sudo vi /etc/ssh/sshd_config
```

```diff_conf:/etc/ssh/sshd_config
# ポートの変更
#Port 22
+ Port 10022

# パスワード認証の無効化
#PasswordAuthentication yes
+ PasswordAuthentication no

# 空パスワードでのログインを無効化
#PermitEmptyPasswords no
+ PermitEmptyPasswords no

# rootユーザでのログインを無効化
#PermitRootLogin prohibit-password
+ PermitRootLogin no

# 公開鍵認証の有効化
#PubkeyAuthentication yes
+ PubkeyAuthentication yes
#AuthorizedKeysFile     .ssh/authorized_keys .ssh/authorized_keys2
+ AuthorizedKeysFile %h/.ssh/authorized_keys
+ RSAAuthentication yes

# ログインに関するログの出力
#SyslogFacility AUTH
#LogLevel INFO
+ SyslogFacility AUTHPRIV
+ LogLevel VERBOSE
```
#### 参考にした記事
[Raspberry Piに公開鍵認証を使ってssh接続する](https://tool-lab.com/raspi-key-authentication-over-ssh/)
[セキュアなSSHサーバの設定](https://qiita.com/comefigo/items/092137ac40f319cb14fa)

設定が完了したらsshを再起動します。
```
$ sudo /etc/init.d/ssh restart
```
:::note warn
ここでも、接続テスト時は、構文エラー時のリカバリ用として元のTere Termをそのままにして行いましょう。
:::

新しくTera Termを立ち上げ、変更したポート番号を入力し接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153639/e28cd8f6-06dc-1a38-9520-5facd4fd952d.png)
秘密鍵ファイルを選択し、パスフレーズは鍵作成時に入力したものを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153639/f4d0db23-06f2-d8ac-f497-440b9b16d7e5.png)
無事接続ができれば、sshの公開鍵認証化は完了です。

これで初期設定は完了です。