みなさま、新年あけましておめでとうございます。
本年もよろしくお願いします。
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パーティーションに空ファイルで拡張子無しの
ssh
というファイルを置きます。
そして無線LANにも自動接続できるように、
wpa_supplicant.conf
という名前のファイルも置きます。
拡張子は.confです。
wpa_supplicant.confのファイルの中身は以下のように記載すればSSIDとPSKを設定済みの状態でRaspberry Piを起動できます。
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
内の作業はコメントに記載しています。
date
whoami
pwd
sudo raspi-config
## Time ZoneをAsia/Tokyoに変更
date
最初と最後に必ずdate
を実行して、ログイン時間の記録とともにUTC0時で動作していたTime Zoneが作業後に日本時間に変更されていることを確認します。
whoami
はログインユーザ、pwd
は現在いるディレクトリのフルパス表示ですが、これらも確認のため毎回入力するようにしています。
sudo raspi-config
の後はこのような画面が出てきますので、5 Localozation Options
を選択し、エンターキーを押し、
デフォルトでEurope
になっているところをAsia
を選択してエンターキーを押し
デフォルトでAden
になっているところをTokyo
を選択してエンターキーを押します。
正常に処理が完了するとraspi-config
コマンドの最初の画面に戻ります。
以上でTime Zoneの変更は完了です。
2.ディスク拡張を行う
Raspbianは自身のインストールされたSDカードの領域を限界まで使い切っていません。
これでは宝の持ち腐れになるので領域拡張を行います。
このディスク拡張の処理だけ単独で行うには以下のコマンドを実行します。
先ほどのTime Zoneと同じくraspi-config
コマンドです。
date
sudo raspi-config
## ディスク拡張を行う
[1.Time Zoneの変更](https://qiita.com/d31843e18f976f1ab7a8/#1.Time Zoneの変更)の作業後であればraspi-config
コマンドの画面のままだと思いますので、引き続きの作業で問題ありません。
6 Advanced Options
を選択してエンターキーを押し、
A1 Expand Filesystem
を選択しエンターキーを押します。
即座にディスク拡張が行われて、以下のようなメッセージが出力されますのでOK
を選択します。
再度raspi-config
コマンド実行直後の画面に戻ります。
ここで一度Finish
を選択してエンターキーを押します。
この作業が終了すると再起動を促してきますので、そのまま案内に沿って再起動しましょう。
3.Locale、キーボード、WLANの電波帯を日本に変更する
こちらの作業も主にraspi-config
を使います。
初期状態のままではLocale変更時に日本のロケール情報がインストールされていないためエラーが出ますので、このエラーが出ないように予めlocale情報をインストールしておきます。
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
を選択してエンターキーを押し、
L1 Locale
を選択してエンターキーを押します。
デフォルトでen_GB.UTF-8 UTF-8
が選択されているので、スペースキー
でこの選択を解除し、
スペースキーで解除後の画面はこうなり、*
が消えます。
ja_JP.UTF-8 UTF-8
を選択してスペースキー
を押してエンターキーを押します。
Configuring locales
画面が出てきますので、ja_JP.UTF-8
を選択してエンターキーを押します。
再度raspi-config
コマンド実行直後の画面に戻りますのでもう一度5 Localozation Options
を選択してエンターキーを押し、
L3 Keyboard
を選択してエンターキーを押します。
再度raspi-config
コマンド実行直後の画面に戻りますのでもう一度5 Localozation Options
を選択してエンターキーを押し、
L4 WLAN Country
を選択してエンターキーを押します。
数ある選択肢の中からJP
を選択してエンターキーを押します。
確認画面が出てきますので、OK
を選択してエンターキーを押します。
再度raspi-config
コマンド実行直後の画面に戻りますのでタブキー
を2回押してFinish
を選択してエンターキーを押します。
再起動を求める画面が出てきますので、Yes
を選択してエンターキーを押します。
再起動後、次の作業に移ります。
4.piユーザのユーザ名変更
ここは議論の分かれるところとなりますが、私は初期設定のpiのユーザ名を変更することを是としています。
Raspbianは周知のとおりDebianベース動作しているディストリビューションですので、Linuxです。
Linuxの共通仕様としてUIDやsudoersがあり、piユーザを削除するとこれらの設定内容も影響を受けます。
UIDも変更可能で、sudoersももちろん変更可能なのですが、初期設定ユーザのpiを削除してUIDが1000のユーザを手動で作成し、sudoersに新たに追加することでOSの動作に影響がないとは言い切れないのではないか?というのが私の意見です。
ですので私はpiというユーザ名を変更しています。
4-1.ユーザ名変更のため、一時的に別ユーザを追加する
ユーザは自身のユーザ名を変更できません。
ですのでまずは他のユーザを作り、このユーザにpiの名前を変更できる権限を付与してpiというユーザ名を変更します。
しかしこのユーザはあくまで一時的なユーザ、piの名前を変更するためだけのユーザのため、piの名前を変更後はこのユーザを削除します。
今回作成する一時ユーザ名はtempuser
とします。
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で起動するかを指定している、くらいの認識で良いと思います。
date
sudo raspi-config
## 起動をDesktop/Auto Loginからcli/no loginに変更する。
## こうしないと初期ユーザ名piがDesktopに自動ログインしてしまうため、
## この後に行うユーザ名変更作業ができない。
date
ここまでの作業と同じくraspi-config
を実行し、今回は1 System Options
を選択してエンターキーを押します。
S5 Boot / Auto Login
を選択してエンターキーを押します。
B1 Console
を選択してエンターキーを押します。
再度raspi-config
コマンド実行直後の画面に戻りますのでタブキー
を2回押してFinish
を選択してエンターキーを押します。
再起動を求める画面が出てきますが、いいえ
を選択してエンターキーを押します。(日本語化されていますが、なぜか選択肢だけ日本語になっています。)
次の作業を行ってから再起動を行います。
4-3.再起動のついでに64bit化を行う
以前の記事でも記載していますが、使っているRaspberry Piが4GB以上のモデルであれば64bit化した方が良いとも思います。
Raspbianは初期設定が32bitですが、メモリが8GBのRaspberry Piにインストールした直後にfree
コマンドを実行するとちゃんと8GBのメモリを認識してくれています。
何故8BG認識できるか理由は調べていないのですが、**8GBのメモリをOSが認識していることと、8GBまでメモリが取り扱えることは別次元で、実際に使ってみると4GBで頭打ちになってしまうのではないか?**という疑問が払しょくできませんので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
以前の記事でもやったのと同じ方法ではエラーがでるので、nano
コマンドを用いました。
この書き込み作業が終ってから再起動しますので、次の作業はsshの再ログインから始まります。
ここで注意するのは次のsshログインは一時的に作ったユーザ、本記事の例ではtempuser
でログインする、ということです。
5.初期ユーザPiのユーザ名を変更する
newuser
でログインした直後、最上段の行の最後にaarch64と表記があれば64bit化に成功しています。
本項目では例としてユーザ名Piをnewuserに変更します。
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が残り続けるのでセキュリティ的に脆弱になってしまいます。
忘れず削除しましょう。
date
whoami
pwd
sudo cat /etc/passwd
sudo userdel tempuser
sudo cat /etc/passwd
date
はい。
これで一時ユーザが削除作業+削除の確認できました。
7.元々piというユーザ名だった現newuserのパスワードを変更する
この作業も忘れてはいけませんね。
date
passwd
## newuserのパスワードをpiの初期パスワードから変更
はい。
簡単ですね。
8.Updateを行う
こちらも以前の記事で紹介しているのですが、同じ方法になります。
理屈も同じく、いつパッケージ内のアプリケーションに修正がかかっているかわかりませんので早めに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のままでも良いと思いますが、念のため元に戻しておきます。
ただし、元に戻す場合でも脆弱になってしまいますのでAuto Logonは避けましょう。
date
sudo raspi-config
## 好みにより起動をcli/no loginからDesktopに変更する。GUI操作が不要な場合は設定しなくても良い。
## raspi-config後の案内通り再起動しても良い
ここまでの作業と同じくraspi-config
を実行し、今回も1 System Options
を選択してエンターキーを押します。
S5 Boot / Auto Login
を選択してエンターキーを押します。
ここでは例として先ほども言及したDesktop
を選択してエンターキーを押します。
再度raspi-config
コマンド実行直後の画面に戻りますのでタブキー
を2回押してFinish
を選択してエンターキーを押します。
再起動を求める画面が出てきますので、はい
を選択してエンターキーを押します。
これでRaspberry Piは最新化されて初期ユーザ名、パスワードが変更され、64bit化、ディスク拡張も終わっているので物理的に持っているパフォーマンスを遺憾なく発揮できます。
番外編.xrdpのインストール
VNCも良いのですが、私はWindowsマシンで作業を行っているのでRDPクライアントツールを色々インストールするのも面倒なのでxrdpをRaspberry Piにインストールしています。
date
whoami
pwd
sudo apt install -y xrdp
最後に手元のWindowsマシンからRaspberry PiにRDP接続ができることを確認します。
本日はここまで。
それではみなさま、今年も良いエンジニアライフを!