Raspberry Piの初期設定

みなさま、新年あけましておめでとうございます。
本年もよろしくお願いします。

Qiita書初めです。
2021年12月31日から2022年1月1日にかけてRaspberry Pi 4B+の初期設定を行っていたので、その方法を記載します。
人によって様々なやり方があり議論の余地はあると思いますが、私の考える限り最小限の労力で動作するRaspberry Piを作り出せる方法をまとめました。
自身の備忘録的な記事ですが、もし良ければご参考にしてください。

#ヘッドレスインストール
今回使用したOSはRaspberry PiのOSはRaspbian 10 Busterです。
Raspberry Pi OSのインストール直後はsshが無効化されているので、OSイメージを書き込んだbootパーティーションに空ファイルで<font color="Red">拡張子無し</font>の
**ssh**
というファイルを置きます。
そして無線LANにも自動接続できるように、
**wpa_supplicant.conf**
という名前のファイルも置きます。
拡張子は<font color="Red">.conf</font>です。
wpa_supplicant.confのファイルの中身は以下のように記載すればSSIDとPSKを設定済みの状態でRaspberry Piを起動できます。

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

network={
        ssid="SSIDの値"
        psk="PSKの値"
}
```

このwpa_supplicant.confもsshと同じくbootパーティーションに配置します。

ここまではRaspberry Piにログインせずに行う作業です。
以降はRaspberry Piにssh経由でログインして実施する作業です。

#sshログイン
ルーターをはじめDHCPサーバなどからRaspberry PiのMACアドレスを見つけ出し、ARPやRARPでRaspberry PiのMACアドレス宛に付与されたIPアドレスを調べましょう。
Raspberry PiのIPアドレスがわかればTeratermなりPuttyなりでssh経由でRaspberry Piにログインします。

#1.Time Zoneの変更
どんなシステム、OSでもログイン直後に私はこの操作を行います。
私はTeratermで作業を行うことが多いのですが、必ずログを取得する設定にしてログインします。
ログ内でコマンド実行時の時間がわかれば検索しやすいので、重要な設定変更時や作業完了時には`date`コマンドを実行しています。
いざ何かあった際にログを解析すると思うのですが、自分の認識している作業時間とログに出力されている時刻とにずれがあると解析の手間が増えます。
ですので極力一番最初にこの設定を行います。
また作業には`raspi-config`を使いますので、`raspi-config`内の作業はコメントに記載しています。

```sh:タイムゾーン変更
date
whoami
pwd
sudo raspi-config
##Time ZoneをAsia/Tokyoに変更
date
```

最初と最後に必ず`date`を実行して、ログイン時間の記録とともにUTC0時で動作していたTime Zoneが作業後に日本時間に変更されていることを確認します。
`whoami`はログインユーザ、`pwd`は現在いるディレクトリのフルパス表示ですが、これらも確認のため毎回入力するようにしています。

`sudo raspi-config`の後はこのような画面が出てきますので、`5 Localozation Options`を選択し、エンターキーを押し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/43456d3e-a0b5-1f4d-0bdd-c8f95f36ad6f.png)

`L2 Timezone`を選択しエンターキーを押し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/6c525ca9-99d5-e29e-e776-e1a8309cb46d.png)

デフォルトで`Europe`になっているところを`Asia`を選択してエンターキーを押し
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/678668c8-2208-d7e1-3797-d4c100059988.png)

デフォルトで`Aden`になっているところを`Tokyo`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/6aebfb1e-9d75-73d1-93ba-1d3bdd42a903.png)

正常に処理が完了すると`raspi-config`コマンドの最初の画面に戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/24b0663d-d9b2-76bb-c164-88325615a846.png)

以上でTime Zoneの変更は完了です。

#2.ディスク拡張を行う
Raspbianは自身のインストールされたSDカードの領域を限界まで使い切っていません。
これでは宝の持ち腐れになるので領域拡張を行います。
このディスク拡張の処理だけ単独で行うには以下のコマンドを実行します。
先ほどのTime Zoneと同じく`raspi-config`コマンドです。

```sh:ディスク拡張
date
sudo raspi-config
##ディスク拡張を行う
```

[1.Time Zoneの変更](https://qiita.com/d31843e18f976f1ab7a8/#1.Time Zoneの変更)の作業後であれば`raspi-config`コマンドの画面のままだと思いますので、引き続きの作業で問題ありません。
`6 Advanced Options`を選択してエンターキーを押し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/311271c9-cd92-c267-e2b3-c1f65ab96a1d.png)

`A1 Expand Filesystem`を選択しエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/86c274f5-84fe-a84d-5dc4-11e81864b1bc.png)
即座にディスク拡張が行われて、以下のようなメッセージが出力されますので`OK`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/551090ec-41d4-9d40-b30a-ef59a5d01e56.png)

再度`raspi-config`コマンド実行直後の画面に戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/24b0663d-d9b2-76bb-c164-88325615a846.png)
ここで一度`Finish`を選択してエンターキーを押します。
この作業が終了すると再起動を促してきますので、そのまま案内に沿って再起動しましょう。

#3.Locale、キーボード、WLANの電波帯を日本に変更する
こちらの作業も主に`raspi-config`を使います。
初期状態のままではLocale変更時に日本のロケール情報がインストールされていないためエラーが出ますので、このエラーが出ないように予めlocale情報をインストールしておきます。

```sh:ロケール変更
date
df -h
sudo apt install -y locales-all
sudo raspi-config
##ロケール、キーボード、WLANを日本に変更
date
```
`df -h`はディスク拡張が行われているかの確認のコマンドになります。
`sudo apt install -y locales-all`が正常に完了したら、次に`raspi-config`コマンドを実行します。
`5 Localozation Options`を選択してエンターキーを押し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/387951a6-2a14-5617-3422-2c2c4bbf7760.png)
`L1 Locale`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/29dff5cf-4406-6af4-a2f5-339e6281c207.png)
デフォルトで`en_GB.UTF-8 UTF-8`が選択されているので、`スペースキー`でこの選択を解除し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/f482238c-eb9d-1e91-f86e-7bcc182566af.png)
スペースキーで解除後の画面はこうなり、`*`が消えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/53065f02-3f18-1b0d-b265-d5062f59b18e.png)
`ja_JP.UTF-8 UTF-8`を選択して`スペースキー`を押してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/09a1c858-c184-cb97-fa5b-9ecee5c7752e.png)
`Configuring locales`画面が出てきますので、`ja_JP.UTF-8`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/695dcdc6-61f0-ea06-e620-bd9a9bd54fa6.png)
再度`raspi-config`コマンド実行直後の画面に戻りますのでもう一度`5 Localozation Options`を選択してエンターキーを押し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/387951a6-2a14-5617-3422-2c2c4bbf7760.png)
`L3 Keyboard`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/0302118f-8d4f-43d4-19b1-b2760cb8b249.png)
再度`raspi-config`コマンド実行直後の画面に戻りますのでもう一度`5 Localozation Options`を選択してエンターキーを押し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/387951a6-2a14-5617-3422-2c2c4bbf7760.png)
`L4 WLAN Country`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/8f80780c-fd62-b7d8-5d53-f3bda2ae2757.png)
数ある選択肢の中から`JP`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/f7890548-8413-c849-9c00-1d40580bda66.png)
確認画面が出てきますので、`OK`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/2cc46fba-0a53-c51a-727d-8f93080de48f.png)
再度`raspi-config`コマンド実行直後の画面に戻りますので`タブキー`を2回押して`Finish`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/d3fff50c-df59-bd13-c53d-97c438fb20bf.png)
再起動を求める画面が出てきますので、`Yes`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/95a6a042-84fb-d093-4b87-954ccbdb82c3.png)

再起動後、次の作業に移ります。

#4.piユーザのユーザ名変更
ここは議論の分かれるところとなりますが、私は初期設定のpiのユーザ名を変更することを是としています。
Raspbianは周知のとおりDebianベース動作しているディストリビューションですので、Linuxです。
Linuxの共通仕様としてUIDやsudoersがあり、piユーザを削除するとこれらの設定内容も影響を受けます。
UIDも変更可能で、sudoersももちろん変更可能なのですが、<font color="Red">**初期設定ユーザのpiを削除してUIDが1000のユーザを手動で作成し、sudoersに新たに追加することでOSの動作に影響がないとは言い切れないのではないか？**</font>というのが私の意見です。
ですので私はpiというユーザ名を変更しています。

##4-1.ユーザ名変更のため、一時的に別ユーザを追加する
ユーザは自身のユーザ名を変更できません。
ですのでまずは他のユーザを作り、このユーザにpiの名前を変更できる権限を付与してpiというユーザ名を変更します。
しかしこのユーザはあくまで一時的なユーザ、piの名前を変更するためだけのユーザのため、piの名前を変更後はこのユーザを削除します。
今回作成する一時ユーザ名は`tempuser`とします。

```sh:一時ユーザ追加
date
sudo useradd -M tempuser
sudo gpasswd -a tempuser sudo
sudo passwd tempuser
##tempuserのパスワードを設定する
date
```

`useradd -M`のオプションはユーザのホームディレクトリを作成しないというオプションです。
次の作業に移ります。

##4-2.ユーザ名変更のため、Raspbianの起動処理を変更する
初期設定ではRasbianは**GUIにpiユーザで自動ログインする**という設定になっています。
ですのでいきなりpiというユーザ名を変更しようとすると**piというユーザは何か処理してるからユーザ名を変更できないよ**という旨のエラーメッセージを返してきます。
当然ですね。
piの名前を変更する際にエラーがでないように、このRaspbianの初期設定値、**GUIにpiユーザで自動ログインする**から**CLIで誰もログインしない**に変更します。
この起動時にGUIで起動するかCLIで起動するかをRun Level、と言います。
厳密にはRun Levelはアプリケーション毎に設定変更可能なのですが、ここではRaspberry Piが起動した際にGUIで起動するかCLIで起動するかを指定している、くらいの認識で良いと思います。

```sh:RaspberryPiの起動時設定変更
date
sudo raspi-config
##起動をDesktop/Auto Loginからcli/no loginに変更する。
##こうしないと初期ユーザ名piがDesktopに自動ログインしてしまうため、
##この後に行うユーザ名変更作業ができない。
date
```

ここまでの作業と同じく`raspi-config`を実行し、今回は`1 System Options`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/9a50a86d-1e9e-e1dd-cbc9-a37f3e032e66.png)
`S5 Boot / Auto Login`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/2e7f657b-baa2-256a-09bf-431a31af1031.png)
`B1 Console`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/631e6ae2-9710-4627-e9fb-aa5e61084c89.png)
再度`raspi-config`コマンド実行直後の画面に戻りますので`タブキー`を2回押して`Finish`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/d3fff50c-df59-bd13-c53d-97c438fb20bf.png)
再起動を求める画面が出てきますが、`いいえ`を選択してエンターキーを押します。(日本語化されていますが、なぜか選択肢だけ日本語になっています。)
次の作業を行ってから再起動を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/3ebc31ba-597a-8d0b-17d3-f3a3c63c3825.png)



##4-3.再起動のついでに64bit化を行う
[以前の記事](https://qiita.com/hidekko/items/1f819cc91b23e184cd22)でも記載していますが、使っているRaspberry Piが4GB以上のモデルであれば64bit化した方が良いとも思います。
Raspbianは初期設定が32bitですが、メモリが8GBのRaspberry Piにインストールした直後に`free`コマンドを実行するとちゃんと8GBのメモリを認識してくれています。
何故8BG認識できるか理由は調べていないのですが、**8GBのメモリをOSが認識していることと、8GBまでメモリが取り扱えることは別次元で、実際に使ってみると4GBで頭打ちになってしまうのではないか？**という疑問が払しょくできませんので64bit化しておきます。

```sh:64bit化
date
sudo cat /boot/config.txt
sudo nano /boot/config.txt
##一番最後の行にarm_64bit=1と追記する。
##追記が終るとctrl Xで記述モードを終了し、書き込み確認が行われるのでYを入力し、
##書き込むファイル名の確認も行われるのでそのままエンターキーを押します。
date
sudo cat /boot/config.txt
sudo reboot
```

[以前の記事](https://qiita.com/hidekko/items/1f819cc91b23e184cd22)でもやったのと同じ方法ではエラーがでるので、`nano`コマンドを用いました。
この書き込み作業が終ってから再起動しますので、次の作業はsshの再ログインから始まります。
ここで注意するのは次のsshログインは一時的に作ったユーザ、本記事の例では`tempuser`でログインする、ということです。

##5.初期ユーザPiのユーザ名を変更する
`newuser`でログインした直後、最上段の行の最後に<font color="red">**aarch64**</font>と表記があれば64bit化に成功しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/d99f5f8b-ce7b-b6ad-21fe-bcfb2f643a02.png)

本項目では例としてユーザ名Piをnewuserに変更します。


```sh:ユーザ名変更
date
whoami
pwd
sudo cat /etc/passwd
sudo usermod -l newuser pi
sudo groupmod -n newuser pi
sudo cat /etc/passwd
sudo ls /home
sudo usermod -d /home/newuser -m newuser
sudo ls /home
date
sudo reboot
```
最初の`date`コマンドの結果が日本語表示になっていると思います。

`sudo cat /etc/passwd`コマンドで現在設定されているユーザ一覧が確認できます。
この段階ではpiユーザがUID1000で設定されていることが確認できます。

'sudo usermod -l newuser pi'はユーザ名piをnewuserに変更する、というコマンドです。
これはコマンドの記載順序が逆なのではなく、これで正しい順序です。
私は初めて見たときは記載順序が逆なんじゃないかと思って書き直して実行したのですが、無事エラーが出ました。

2回目の`sudo cat /etc/passwd`コマンドでUID1000がpiからnewuserに変更されていることが確認できます。

1回目の`sudo ls /home`で/home/piが確認できますが、`sudo usermod -d /home/newuser -m newuser`で変更できます。
2回目の`sudo ls /home`で/home/newuserに変更されていることを確認します。

最後に再起動を行い、次はnewuserで再ログインします。

##6.一時ユーザを削除する
newuserでログインし、tempuserを削除します。
この作業を忘れてしまうとsudoersに追加されているtempuserが残り続けるのでセキュリティ的に脆弱になってしまいます。
忘れず削除しましょう。

```sh:一時ユーザ削除
date
whoami
pwd
sudo cat /etc/passwd
sudo userdel tempuser
sudo cat /etc/passwd
date
```

はい。
これで一時ユーザが削除作業＋削除の確認できました。

#7.元々piというユーザ名だった現newuserのパスワードを変更する
この作業も忘れてはいけませんね。

```sh:パスワード変更
date
passwd
##newuserのパスワードをpiの初期パスワードから変更
```
はい。
簡単ですね。

#8.Updateを行う
こちらも[以前の記事](https://qiita.com/hidekko/items/1f819cc91b23e184cd22)で紹介しているのですが、同じ方法になります。
理屈も同じく、いつパッケージ内のアプリケーションに修正がかかっているかわかりませんので早めにUpdateをしておくことをお勧めします。

```sh:update
date
sudo apt-key list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys xxxxxxxxxxxxxxxx
##apt-key listの結果によっては必要。不要な場合もある。
date
sudo apt update --allow-releaseinfo-change
date
sudo apt full-upgrade -y --fix-missing
date
sudo apt autoremove -y
date
sudo apt clean
date
sudo reboot
```

この作業は時間がかかりますので気長に待ちましょう。
最後に念のため再起動を行います。

#9.設定変更した部分を元に戻す
この作業も忘れがちなので記載しておきます。
Run LevelをGUIからCLIに落としているので、これを元に戻します。
GUIを使わない方やメモリ消費、消費電力を気にされる方はCLIのままでも良いと思いますが、念のため元に戻しておきます。
<font color="Red">**ただし、元に戻す場合でも脆弱になってしまいますのでAuto Logonは避けましょう。**</font>

```sh:RunLevelを元に戻す
date
sudo raspi-config
##好みにより起動をcli/no loginからDesktopに変更する。GUI操作が不要な場合は設定しなくても良い。
##raspi-config後の案内通り再起動しても良い
```
ここまでの作業と同じく`raspi-config`を実行し、今回も`1 System Options`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/9a50a86d-1e9e-e1dd-cbc9-a37f3e032e66.png)
`S5 Boot / Auto Login`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/2e7f657b-baa2-256a-09bf-431a31af1031.png)
ここでは例として先ほども言及した`Desktop`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/bd92d2fc-2777-dacb-b1ee-bf90ad7a1936.png)
再度`raspi-config`コマンド実行直後の画面に戻りますので`タブキー`を2回押して`Finish`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/d3fff50c-df59-bd13-c53d-97c438fb20bf.png)
再起動を求める画面が出てきますので、`はい`を選択してエンターキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643392/788af908-e559-34c5-8dff-ebeb853c91bb.png)

これでRaspberry Piは最新化されて初期ユーザ名、パスワードが変更され、64bit化、ディスク拡張も終わっているので物理的に持っているパフォーマンスを遺憾なく発揮できます。

#番外編.xrdpのインストール
VNCも良いのですが、私はWindowsマシンで作業を行っているのでRDPクライアントツールを色々インストールするのも面倒なのでxrdpをRaspberry Piにインストールしています。

```sh:xrdpのインストール
date
whoami
pwd
sudo apt install -y xrdp
```

最後に手元のWindowsマシンからRaspberry PiにRDP接続ができることを確認します。

本日はここまで。

**それではみなさま、今年も良いエンジニアライフを！**