あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

Raspberry Pi 4がPXEブートに正式対応していた

Raspberry Pi 4のブートローダーEEPROMイメージが更新されて、長らくベータ扱いだったPXEブートが正式版となりました。リリースノートのコミット日を見るに1週間前にはリリースされていた模様。見落としていなければ公式ブログには出ていなかった気がするので、ブログにするほどの記事ではなかったか、あるいはこれから記事になるかのどちらかでしょうか。フーム、ここのリリースノートもちゃんとRSSで読むようにするか……。

github.com

アップデートは、aptでrpi-eeprom-imagesとrpi-eepromパッケージを最新の6.0-1に更新して、rpi-eeprom-updateコマンドで更新します。rpi-eeprom-updateコマンドはRaspbian起動時に自動実行されるようになっているので、おそらく手動実行しなくても再起動を2回(たぶん、1回目の再起動でイメージ適用、2回目で適用済みのイメージで起動)実行すれば勝手に上がるはずです。

pi@yamanooku:~ $ sudo apt update;sudo apt upgrade
pi@yamanooku:~ $ sudo rpi-eeprom-update 
BCM2711 detected
*** UPDATE REQUIRED ***
BOOTLOADER: update required
CURRENT: 2019年  9月 10日 火曜日 10:41:50 UTC (1568112110)
 LATEST: 2020年  4月 16日 木曜日 17:11:26 UTC (1587057086)
 FW DIR: /lib/firmware/raspberrypi/bootloader/critical
VL805: up-to-date
CURRENT: 000137ad
 LATEST: 000137ad

新しいイメージを適用した後も、ブートローダー(起動順)はデフォルトではSDカードのみなので、PXEブートを有効にするために下記のドキュメントに従ってブート設定を更新する必要があります。

www.raspberrypi.org

ドキュメントどおりですが、日本語コメントを添えつつ手順です。

# 設定前にパラメータを確認したい人はこれで
$ vcgencmd bootloader_config

# ブートローダーEEPROMイメージをコピー
$ cp /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-04-16.bin pieeprom.bin

# ブートローダーEEPROMイメージからブート設定ファイルを抽出
$ rpi-eeprom-config pieeprom.bin > bootconf.txt

# ブート設定ファイルを編集
$ vi bootconf.txt

BOOT_ORDERを0x1から0x21に書き換え。
BOOT_ORDER=0x1
↓
BOOT_ORDER=0x21

# 編集したブート設定ファイルとコピーしたブートローダーEEPROMイメージを使って新しいブートローダーEEPROMイメージを生成
$ rpi-eeprom-config --out pieeprom-new.bin --config bootconf.txt pieeprom.bin

# 生成されたブートローダーEEPROMイメージをrpi-eeprom-updateでEEPROMに書き込み
$ sudo rpi-eeprom-update -d -f ./pieeprom-new.bin

# 再起動して新しいブートローダーEEPROMで起動
$ sudo reboot

# 再起動後にパラメータを確認したい人は再度これで
$ vcgencmd bootloader_config

BOOT_ORDERは0x0がNONE、0x1がSDカード、0x2がネットワークブートです。下位ニブル(4bit)から試行されるので、0x21ではSD→ネットワークブート→NONE(停止)となります。

あとは、公式ドキュメントの手順にそっとRaspberry PiPXEブート環境を整備すればネットワークブートができるようになります。このブログでは省略。

www.raspberrypi.org

さて、同時にHDMI diagnostics screenというものが実装されたらしく、PXEブートはベータのうちにもう触っていてわかっている私としてはこれのほうが見たかったので、TFTPサーバーにおいたまま忘れてたPi4のシリアル番号入ディレクトリをリネームで隠してわざと失敗させてみました。

こんな感じの画面。見るだけなんですけど、ちょっとBIOS画面っぽくてかっこいい。ブートローダーのバージョン、Pi4のシリアルやMACアドレスなどの情報や、設定されたブートローダーの値、DHCPサーバーから取得できたIPアドレス、ネットワークブートに失敗したログが確認できました。

f:id:Akkiesoft:20200506162732j:plain

ちなみにブートローダーを変更する前の状態でSDカードを抜いて表示した画面はこちら。BOOT_ORDERの値がちゃんと違ったり、SDカードがねえぜ!とログを出して止まっていたりしているのが確認できます。

f:id:Akkiesoft:20200506163114j:plain

というわけで、新しいバージョンのブートローダーEEPROMイメージを適用してPXEブートを有効にする手順の確認でした。Pi4ならGbEなので、SDカードをナシにしてPXE+NFSストレージにしてもまあまあ運用できるのではないかと思います。そうするとSDカードの故障とかの悩みからは開放されそうですね。NASがある家ならNASNFS共有を有効すれば良いでしょうし便利そう。家の常設Pi4でやってみようかしらん🤔?

ついでに宣伝

在庫が死ぬほど余っとる薄い本もついでに宣伝しておきます。昨日までエアコミケだったので。新刊のEject本と合わせてよろしくおねがいします。

www.melonbooks.co.jp

ec.toranoana.shop

電子版もラズピッピいじり3・4までリリースしました。こちらはBOOTHにて販売中。

eject.booth.pm