Ubuntu で Raspberry Pi 5 の NVMe ブート
TL;DR
Mon 23 Sep 13:02:56 UTC 2024
のファームウェアだとデフォルトで NVMe に対応してるので何もせず NVMe に好きな OS を書き込めば勝手に起動する。- Ubuntu Server 24.04.01 だと ssh がデフォルトでパスワードログインがオフになっているため、ヘッドレスでインストールしたかったら
user-data
を変更する必要がある。
承前
Raspberry Pi 5 を衝動買いしてしまった。自宅で飼ってる Kubernetes クラスターのコントロールプレーンノードに Raspberry Pi 4 を使ってるのだけれども、etcdHighCommitDurations
のアラートがよく出るようになってしまったのでノードをアップグレードしたかったのもある。
ということで、何はともあれ Raspberry Pi 5 に Ubuntu サーバーのインストールだ。
今回は PoE + NVMe を追加する HAT を買ったので、だいぶコンパクトになった。(2.5inch SSDはデカかった。)
ラズパイの状況確認
まずは SD カードにラズパイOSをインストールして NVMe に SSD を繋げた状態で状況を確認してみる。
lsblk
を実行してみたところ、最初から NVMe の SSD が見えてる。
yuanying@raspberrypi:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mmcblk0 179:0 0 57.6G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
└─mmcblk0p2 179:2 0 57.1G 0 part /
nvme0n1 259:0 0 119.2G 0 disk
ファームウェアを確認してみたところ、どうやら最新っぽい。多分、つい最近公式で Raspberry Pi SSDs and SSD Kits が売り出されたのでそのタイミングで有効化されたのでは無いだろうか。
yuanying@raspberrypi:~$ sudo rpi-eeprom-update
BOOTLOADER: up to date
CURRENT: Mon 23 Sep 13:02:56 UTC 2024 (1727096576)
LATEST: Mon 23 Sep 13:02:56 UTC 2024 (1727096576)
RELEASE: default (/lib/firmware/raspberrypi/bootloader-2712/default)
Use raspi-config to change the release.
ということで、eeprom も特に編集を行わず、Ubuntu を NVMe にインストールすることにする。
Ubuntu のインストール
Ubuntu のダウンロード
まずは、UbuntuのOSイメージをダウンロードしてくる。現時点で LTS の最新をダウンロード。
curl -LO https://cdimage.ubuntu.com/releases/24.04.1/release/ubuntu-24.04.1-preinstalled-server-arm64+raspi.img.xz
ダウンロードしたイメージをカスタマイズ
ラズパイにはキーボードやディスプレイを繋げずSSHからヘッドレスでインストールを完結したかったので、OSイメージをカスタマイズする。
ダウンロードしてきたOSイメージの最初のパーティションに user-data
があるので、それを変更してやれば良い。
ので、まずはイメージを解凍。
xzcat < ubuntu-24.04.1-preinstalled-server-arm64+raspi.img.xz \
> ubuntu-24.04.1-preinstalled-server-arm64+raspi.img
raspi.img
の一つ目のパーティションをマウントする。手順は以下。
raspi.img
を loopback device として認識させる。
yuanying@raspberrypi:~ $ sudo losetup -f --show ubuntu-24.04.1-preinstalled-server-arm64+raspi.img
/dev/loop0
- パーティションを認識させる。
yuanying@raspberrypi:~ $ sudo partprobe /dev/loop0
yuanying@raspberrypi:~ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 3.4G 0 loop
|-loop0p1 259:3 0 512M 0 part
`-loop0p2 259:4 0 2.9G 0 part
mmcblk0 179:0 0 57.6G 0 disk
|-mmcblk0p1 179:1 0 512M 0 part /boot/firmware
`-mmcblk0p2 179:2 0 57.1G 0 part /
nvme0n1 259:0 0 119.2G 0 disk
loop0p1
をマウントする。
yuanying@raspberrypi:~ $ sudo mount -t vfat /dev/loop0p1 /mnt
/mnt/usr-data
を編集する。
yuanying@raspberrypi:~ $ sudo vi /mnt/user-data
自分は以下のエントリを追加した。
users:
- name: yuanying
primary_group: staff
groups: users, adm
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvZ4sFxzmLCYdEm...
- 後処理
sudo umount /mnt
sudo losetup -D
アンマウントしてloopback deviceの関連付けを削除したら終了。
カスタマイズしたイメージをインストール
あとは NVMe に Ubuntu を書き込んで終了。
sudo dd if=ubuntu-24.04.1-preinstalled-server-arm64+raspi.img of=/dev/nvme0n1 bs=4M status=progress
SDカードを外して再起動したところ、無事起動した。