以前のRaspberry Piでの設定
以前でもRaspberry PiのイメージをmSDにコピーして、最初に起動する前に/bootパーティションにsshまたはssh.txtという空ファイル(内容が無くサイズが0バイトのファイル)を作成することでSSHを有効化できました。
さらに、/bootパーティションにwpa_supplicant.confファイルを作成しておくことでWi-Fiに接続するように設定することが出来ていました。
現在のRaspberry Piでの設定(Raspberry Pi Imager)
現在ではRaspberry Pi用のmSDを作成する際には、Raspberry Pi Imagerを使うことが出来ます。このRaspberry Pi Imagerを使う場合には、Operating Systemを選択した時点で右下に表示される歯車(v1.7.1以降)をクリックする、またはCTL+SHIFT+x(Windowsの場合)、CMD+SHIFT+x(Macの場合)(v1.6以降)で詳細設定画面を表示することで、SSHの有効化やWi-Fiの接続設定などをすることが出来ています。
このRaspberry Pi Imagerの詳細設定画面でも、さらにロケールを設定できたりと非常に便利です。
mSD用のイメージを自分好みにカスタマイズする
今回は、さらに自分好みにカスタマイズするためにmSD用のイメージを編集してしまいましょう。
まずダウンロードしたRaspberry Pi OSのzipファイルを解凍します。現在の最新である2022/01/28付のRaspberry Pi OS 64-bit版では次のようになります。
$ unzip 2022-01-28-raspios-bullseye-arm64.zip
$ ls -l
total 5221012
-rw-r--r-- 1 pi pi 4156555264 Jan 28 12:21 2022-01-28-raspios-bullseye-arm64.img
-rw-r--r-- 1 pi pi 1189750489 Mar 17 10:33 2022-01-28-raspios-bullseye-arm64.zip
unzipコマンドで解凍するとimgファイルが取り出されます。
ここで、imgファイルからデバイスマップを作成することでループバックマウントすることのできるkpartxコマンドをインストールします。
$ sudo apt install -y kpartx
インストールしたkpartxコマンドを使って、先ほど解凍してできたimgファイルのデバイスマップを作成します。
$ sudo kpartx -a 2022-01-28-raspios-bullseye-arm64.img
imgファイルに含まれているbootとrootfsのパーティションに対応して/dev/mapper/ディレクトリーにloop0p1とloop0p2が表示されます。
$ ls /dev/mapper
control loop0p1 loop0p2
それぞれをマウントしていきます。
$ sudo mount /dev/mapper/loop0p2 /mnt
$ sudo mount /dev/mapper/loop0p1 /mnt/boot
rootfsに対応するloop0p2を/mntとしてマウントして、bootに対応するloop0p1を/mnt/bootにマウントしています。
sshの有効化とWi-Fiの接続設定のためにファイルを作成していきます。
$ cd /mnt/boot
$ sudo touch ssh
$ sudo cp /etc/wpa_supplicant/wpa_supplicant.conf .
例えばdhcpcd.confファイルを編集して固定IPアドレスを設定してみましょう。
$ cd /mnt/etc
$ sudo vi dhcpcd.conf
interface wlan0
static ip_address=192.168.0.168
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
/etc/dhcpcd.confファイルに上記のような内容を追加してみました。もちろん、実際に使用しているアドレスに応じて修正する必要があります。
この他にも例えば/etc/ssh/sshd_configファイルを編集してPasswordAuthentication noに修正することでセキュリティを強化することなどが考えられます。
必要な編集が終わりましたら、それぞれをアンマウントします。
$ cd
$ sudo umount /mnt/boot
$ sudo umount /mnt
これで終わりではありません。kpartxで作成していたloopデバイスを解放しておきましょう。
$ sudo kpartx -d 2022-01-28-raspios-bullseye-arm64.img
loop deleted : /dev/loop0
$ ls /dev/mapper
control
先ほど表示されていたloopデバイスが表示されなくなりました。
また、losetupコマンドで状態を表示した場合にも、何も表示されなくなっていることで確認することが出来ます。
$ sudo losetup -l
これで作成したimgファイルは、Raspberry Pi ImagerのOS選択画面で「Use custom」を使うことでmSDまたはSSDなどにコピーすることが出来ます。
もちろんimgファイルをzipで圧縮しておくことも出来ます。
個人的に何台ものRaspberry Piを使用している場合には、非常に便利な方法ではないでしょうか。
参考: 2021//03/19 Raspberry Pi Imager update to v1.6