Top/EBUG勉強会/20240525_FuguItaISO

河豚板のEFI CD boot / arm64 ISO 対応

EBUG 第89回会合 2024年5月25日
川俣吉広、kaw@on.rim.or.jp

概要

2024年4月5日にリリースされたOpenBSD 7.5では、amd64プラットフォームでEFIでのCD起動が、arm64プラットフォームでは、ISOイメージによる起動がサポートされました。

この二つの新機能を河豚板 7.5でも実装した方法について報告します。


目次

経緯

2024年4月5日にリリースされたOpenBSD 7.5では、ライブ・システムに適用可能と思われる2つの機能が追加された。

OpenBSD 7.5 what's new

おさらい

LiveDVDとLiveUSBのパーティション構成

fipart.png
パーティション構成: /sysmedia部分はLiveDVD/LiveUSBで共通

ビルドフロー (i386/amd64)

fiflow.png
ビルドフロー: 各コンポーネントを/sysmediaに集約して生成

amd64のUEFI CD boot

OpenBSDのリポジトリで、どこが変っているか見てみる:

OpenBSDリポジトリのコミットメッセージ

/usr/src/distrib/amd64/iso/Makefile

Revision 1.47 / (download) - annotate - [select for diffs], Fri Dec 15 06:03:00 2023 UTC (5 months ago) by jmatthew
Branch: MAIN
CVS Tags: OPENBSD_7_5_BASE, OPENBSD_7_5, HEAD
Changes since 1.46: +15 -4 lines
Diff to previous 1.46 (colored)

For amd64 cdXX.iso and installXX.iso, create an EFI system partition image
containing the EFI boot loaders and install it as an El Torito boot image,
making the install CDs bootable in EFI mode.

"looks great" deraadt@
ok mlarkin@

変更部分(抜粋)

-${CDROM}: ${BASE} ${XBASE}
+${EFICDBOOT}: ${EFIBOOT}
+	rm -rf ${.OBJDIR}/eficdboot-dir
+	mkdir -p ${.OBJDIR}/eficdboot-dir/efi/boot
+	cp ${EFIBOOT} ${.OBJDIR}/eficdboot-dir/efi/boot
+	makefs -t msdos -o create_size=${EFICDBOOTSIZE} ${EFICDBOOT} \
+	    ${.OBJDIR}/eficdboot-dir
+
+${CDROM}: ${BASE} ${XBASE} ${EFICDBOOT}
(略)
        mkhybrid -a -R -T -L -l -d -D -N -o ${.OBJDIR}/${CDROM} \
            -A "OpenBSD ${OSREV} ${MACHINE} Install CD" \
@@ -77,14 +87,15 @@
            -p "Theo de Raadt <deraadt@openbsd.org>" \
            -V "OpenBSD/${MACHINE}   ${OSREV} Install CD" \
            -b ${OSREV}/${MACHINE}/cdbr -c ${OSREV}/${MACHINE}/boot.catalog \
+	    -e ${OSREV}/${MACHINE}/${EFICDBOOT} \
            ${.OBJDIR}/cd-dir

河豚板での対応

これと同様な処理を河豚板のMakefileに追加した(赤字部分)。

addeficdboot.png
amd64ビルドフローの改修: ESPのイメージファイルを生成し、sysmediaにeficdbootとしてコピー

加えて、リマスタリングの際も、この変更部分が反映されるようにする必要がある。
リマスタリング時に/sysmediaからコピーするファイルの一覧にeficdbootを加える。
→改修: remaster_dvd.sh (*→LiveDVD)、usbfadm (*→LiveUSB)

fi-remaster_eficdboot.png
リマスタリング対応: ESPのイメージファイルも相互にコピーできるようにする

arm64のISOイメージ作成

arm64のビルドフロー

i386/amd64とは異なる部分がある

fiflow_arm64.png
arm64のビルドフロー: イメージファイル内のパーティションに各コンポーネントを集約

OpenBSDでの変更部分

河豚板での対応

以上より、arm64のISOイメージを作成するためのビルドフローは以下のようになる(赤字部分が変更点)

fiflow_arm64_iso.png
ビルドフローの改修: cdbrの生成と、U-Boot, ラズパイF/Wの供給

また、河豚板LiveUSBのアップデートにはfiupdateというツールが利用できるが、このツールでアップデートを行うには新しいリリースのISOイメージが必要。 今回の改修で、arm64プラットフォームにおいてもfiupdateを使用できるようになった。

LiveUSB用ディスクイメージの再利用

これまで説明してきたように、河豚板のビルドフローは、

と別のフローになっていた。

ここで、いま一つよく見てみると、LiveUSB用ディスクイメージとsysmedia.imgは、sysmedia部分のみならず、全体が全く同じものであることがわかる。

よって、稼動環境で生成されたLiveUSB用ディスクイメージをビルド環境にフィードバックし、ビルド環境に組み込んで使用できるようにビルドシステムのMakefileを改修した。

fiflow_arm64_p1.png
ビルドフロー改善のアイデア: LiveDVDで生成されたLiveUSBイメージはビルド環境にフィードバックできる

この改修で、LiveUSB用ディスクイメージをビルド環境にフィードバックした後は、全てのプラットフォームでLiveDVD、LiveUSBを同時に生成できるようになった。

fiflow_arm64_p2.png
ビルドフロー改善: LiveUSBイメージをビルド環境にフィードバック後のフロー

まとめ

前回の勉強会ネタ「河豚板のビルドシステム」で紹介したToDo:

のうち、項目2, 3は完了。項目1についてもほぼ解決となった。

参考情報


Top/EBUG勉強会/20240525_FuguItaISO

Front page   New Page list Search Recent changes   Help   RSS of recent changes