EBUG勉強会/20240525_FuguItaISO
をテンプレートにして作成
Start:
#topicpath
*河豚板のEFI CD boot / arm64 ISO 対応 [#v80a10cd]
RIGHT:EBUG 第89回会合 2024年5月25日 ~
川俣吉広、kaw@on.rim.or.jp
**概要 [#ra602256]
2024年4月5日にリリースされたOpenBSD 7.5では、amd64プラッ...
この二つの新機能を河豚板 7.5でも実装した方法について報告...
----
目次
#contents
**経緯 [#r1d0fa9a]
2024年4月5日にリリースされたOpenBSD 7.5では、ライブ・シス...
[[OpenBSD 7.5 what's new>https://www.openbsd.org/75.html]]
-amd64のISOイメージがUEFIで起動できるように[[mkhybrid>man...
- Various bugfixes and tweaks in userland:
...
- Added mkhybrid(8) '-e' (-eltorito-boot-efi) option fo...
...
- Installer, upgrade and bootloader improvements:
...
- Make the amd64 cdXX.iso and installXX.iso CD images b...
-arm64がISOイメージをサポート
- Installer, upgrade and bootloader improvements:
...
- Added CD install images to arm64.
**おさらい [#n3473446]
***LiveDVDとLiveUSBのパーティション構成 [#u37c5d18]
-LiveDVDの/dev/cd0aとLiveUSBの/dev/sd0aの内容は全く同じ
--LiveDVD⇔LiveUSBのリマスタリングを容易にできるようにする...
--そのためLiveDVDとLiveUSBのブート関連ファイルが全部入っ...
--起動関連や各種ユティリティのスクリプトもLiveDVDとLiveUS...
|CENTER:|c
|&ref(EBUG勉強会/20240217_BuildFuguIta/fipart.png,,33%);|
|パーティション構成: /sysmedia部分はLiveDVD/LiveUSBで共通|
***ビルドフロー (i386/amd64) [#o00e05e6]
-ブートローダ関連、カーネル+[[ramdisk root>man:rd.4]]、シ...
-出来上がったISOイメージを実機、あるいは仮想環境で実行さ...
-LiveUSBのディスクイメージ生成時に、MBR/GPT、LegacyBIOS/U...
|CENTER:|c
|&ref(EBUG勉強会/20240217_BuildFuguIta/fiflow.png,,25%);|
|ビルドフロー: 各コンポーネントを/sysmediaに集約して生成|
**amd64のUEFI CD boot [#ie79d37f]
OpenBSDのリポジトリで、どこが変っているか見てみる:
***OpenBSDリポジトリのコミットメッセージ [#d17eba65]
[[/usr/src/distrib/amd64/iso/Makefile>https://cvsweb.open...
Revision 1.47 / (download) - annotate - [select for diff...
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 syst...
containing the EFI boot loaders and install it as an El ...
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} ${EFIC...
+ ${.OBJDIR}/eficdboot-dir
+
+${CDROM}: ${BASE} ${XBASE} ${EFICDBOOT}
(略)
mkhybrid -a -R -T -L -l -d -D -N -o ${.OBJDIR}/$...
-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}/${MA...
+ -e ${OSREV}/${MACHINE}/${EFICDBOOT} \
${.OBJDIR}/cd-dir
--ESP (EFI System Partition)に相当するFATパーティションイ...
***河豚板での対応 [#id259845]
これと同様な処理を河豚板の[[Makefile>github:Makefile]]に...
|CENTER:|c
|&ref(addeficdboot.png,,33%);|
|amd64ビルドフローの改修: ESPのイメージファイルを生成し、...
加えて、リマスタリングの際も、この変更部分が反映されるよ...
リマスタリング時に/sysmediaからコピーするファイルの一覧に...
→改修: [[remaster_dvd.sh>github_boottmp:remaster_dvd.sh]]...
|CENTER:|c
|&ref(fi-remaster_eficdboot.png,,25%);|
|リマスタリング対応: ESPのイメージファイルeficdbootも相互...
**arm64のISOイメージ作成 [#q3a60449]
***arm64のビルドフロー [#x2e7b204]
i386/amd64とは異なる部分がある
-各コンポーネントを集約するのは、i386/amd64ではsysmediaと...
-arm64では、ISOイメージは今までサポートされておらず、Live...
-sysmedia.imgはあらかじめ用意しておく必要がある(いわゆる...
-arm64はsysmedia.imgのiパーティションにあるU-BOOTバイナリ...
|CENTER:|c
|&ref(fiflow_arm64.png,,33%);|
|arm64のビルドフロー: イメージファイル内のパーティション...
***OpenBSDでの変更部分 [#w4adaaca]
-リポジトリのコミットメッセージ~
[[/usr/src/distrib/arm64/iso/Makefile>https://cvsweb.open...
Revision 1.8, Thu Oct 26 14:27:01 2023 UTC (6 months, 3 ...
Branch: MAIN
Changes since 1.7: +40 -3 lines
construct EFI bootable cdXX.iso and instalXX.iso files
変更部分 (抜粋)
+cdbr: ${RELDIR}/BOOTAA64.EFI
+ dd if=/dev/zero of=cdbr bs=512 count=5760
+ vnconfig -v cdbr > vnd
+ fdisk -iy -b "5744@16:c" `cat vnd` >/dev/null
+ newfs -t msdos /dev/r`cat vnd`i
+ mount ${MOUNT_ARGS_msdos} /dev/`cat vnd`i ${MOUNT_POINT}
+ mkdir -p ${MOUNT_POINT}/efi/boot
+ cp ${RELDIR}/BOOTAA64.EFI ${MOUNT_POINT}/efi/boot/boot...
+ echo bootaa64.efi > ${MOUNT_POINT}/efi/boot/startup.nsh
+ umount ${MOUNT_POINT}
+ vnconfig -u `cat vnd`
+ rm -f vnd
+
(略)
+${CDROM}: ${BASE} ${XBASE} cdbr
+ rm -rf ${.OBJDIR}/cd-dir
+ mkdir -p ${.OBJDIR}/cd-dir/${OSREV}/${MACHINE}
+ mkdir -p ${.OBJDIR}/cd-dir/etc
+ echo "set image /${OSREV}/${MACHINE}/bsd.rd" > ${.OBJD...
+
+ cp -p ${BASE} ${.OBJDIR}/cd-dir/${OSREV}/${MACHINE}
+ cp -p ${XBASE} ${.OBJDIR}/cd-dir/${OSREV}/${MACHINE}
+
+ cat ${RELDIR}/SHA256 ${RELXDIR}/SHA256 > \
+ ${.OBJDIR}/cd-dir/${OSREV}/${MACHINE}/SHA256
+ # XXX no SHA256.sig
+
+ cp -p ${.OBJDIR}/cdbr ${.OBJDIR}/cd-dir/${OSREV}/${MAC...
+
+ mkhybrid -a -R -T -L -l -d -D -N -o ${.OBJDIR}/${CDROM...
+ -A "OpenBSD ${OSREV} ${MACHINE} Install CD" \
+ -P "Copyright (c) `date +%Y` Theo de Raadt, The Op...
+ -p "Theo de Raadt <deraadt@openbsd.org>" \
+ -V "OpenBSD/${MACHINE} ${OSREV} Install CD" \
+ -b ${OSREV}/${MACHINE}/cdbr -c ${OSREV}/${MACHINE}...
+ ${.OBJDIR}/cd-dir
-新たにcdbr (CD boot record)を作成するようになっている
-cdbrの中身は[[makefs>man:makefs.8]]で作成したESPで、boot...
-このイメージファイルをi386/amd64のLegacy BIOSの場合と同...
***河豚板での対応 [#s8c29b84]
- usbfadm newdriveでISOイメージからLiveUSB用ディスクイメ...
|CENTER:|c
|&ref(fi-remaster_arm64.png,,25%);|
|リマスタリング時の問題: U-Boot, ラズパイF/Wはどうやって...
// amd64 -> arm64
- これらをISOイメージ中にも持たせておく必要がある
--システムのファイルツリー(fuguita-7.5-arm64.ffsimg)中に ...
以上より、arm64のISOイメージを作成するためのビルドフロー...
|CENTER:|c
|&ref(fiflow_arm64_iso.png,,33%);|
|ビルドフローの改修: cdbrの生成と、U-Boot, ラズパイF/Wの...
- パーティションイメージcdbr (CD boot record)を作成。
-- このイメージファイルはbootaa64.efiを含むESP(amd64のefi...
- LiveDVD⇔LiveUSB 双方向のリマスタリングを可能にするため...
-- U-boot及びRasPiファームウェアは、ビルドシステム内ではp...
-- [[makebootarc_arm64.sh>github_lib:makebootarc_arm64.sh...
-- [[gen_makebootarc_arm64.sh>github_lib:gen_makebootarc_...
以上より、arm64プラットフォーム用のISOイメージも生成でき...
また、河豚板LiveUSBのアップデートには[[fiupdate>EBUG勉強...
**LiveUSB用ディスクイメージの再利用 [#x3e053e6]
これまで説明してきたように、河豚板のビルドフローは、
-i386/amd64~
sysmediaというディレクトリに各コンポーネントを集約 → Live...
-arm64~
sysmedia.imgというイメージファイル内に各コンポーネントを...
と別のフローになっていた。
ここで、いま一つよく見てみると、LiveUSB用ディスクイメージ...
よって、稼動環境で生成されたLiveUSB用ディスクイメージをビ...
|CENTER:|c
|&ref(fiflow_arm64_p1.png,,33%);|
|ビルドフロー改善のアイデア: LiveDVDで生成されたLiveUSBイ...
この改修で、LiveUSB用ディスクイメージをビルド環境にフィー...
|CENTER:|c
|&ref(fiflow_arm64_p2.png,,33%);|
|ビルドフロー改善: LiveUSBイメージをビルド環境にフィード...
**まとめ [#ycd9e22e]
- amd64プラットフォームでLiveDVDがEFIモードで起動できるよ...
- arm64プラットフォームでLiveDVDの供給が可能となった
- LiveDVD→LiveUSB、LiveUSB→LiveDVD、どちらの方向のリマス...
- 一度生成したLiveUSBのディスクイメージをビルドシステムに...
-- 全ての対応プラットフォームでLiveDVD、LiveUSBの一括生成...
-- 仮想環境や実機を使用せず(=人手を介することなく)、LiveU...
前回の勉強会ネタ「[[河豚板のビルドシステム>EBUG勉強会/202...
-1. 微妙に残っている秘伝のタレを取り除く
-2. arm64のISO作れてリマスターもできるようにする
-3. amd64のISOイメージのUEFI起動対応
-4. ISO内に2GB超のファイルがあると起動NG問題解決
のうち、項目2, 3は完了。項目1についてもほぼ解決となった。
** 関連情報
- [[河豚板ガイド/開発編: 河豚板の構築>河豚板ガイド/4-開発...
- 河豚板の開発リポジトリ(オリジナルCVSからのコピー)~
https://github.com/ykaw/FuguIta
- [[河豚板のUEFI/GPT対応>EBUG勉強会/20190223_UEFI_GPT]]
- [[河豚板のビルドシステム>EBUG勉強会/20240217_BuildFuguI...
----
#topicpath
End:
#topicpath
*河豚板のEFI CD boot / arm64 ISO 対応 [#v80a10cd]
RIGHT:EBUG 第89回会合 2024年5月25日 ~
川俣吉広、kaw@on.rim.or.jp
**概要 [#ra602256]
2024年4月5日にリリースされたOpenBSD 7.5では、amd64プラッ...
この二つの新機能を河豚板 7.5でも実装した方法について報告...
----
目次
#contents
**経緯 [#r1d0fa9a]
2024年4月5日にリリースされたOpenBSD 7.5では、ライブ・シス...
[[OpenBSD 7.5 what's new>https://www.openbsd.org/75.html]]
-amd64のISOイメージがUEFIで起動できるように[[mkhybrid>man...
- Various bugfixes and tweaks in userland:
...
- Added mkhybrid(8) '-e' (-eltorito-boot-efi) option fo...
...
- Installer, upgrade and bootloader improvements:
...
- Make the amd64 cdXX.iso and installXX.iso CD images b...
-arm64がISOイメージをサポート
- Installer, upgrade and bootloader improvements:
...
- Added CD install images to arm64.
**おさらい [#n3473446]
***LiveDVDとLiveUSBのパーティション構成 [#u37c5d18]
-LiveDVDの/dev/cd0aとLiveUSBの/dev/sd0aの内容は全く同じ
--LiveDVD⇔LiveUSBのリマスタリングを容易にできるようにする...
--そのためLiveDVDとLiveUSBのブート関連ファイルが全部入っ...
--起動関連や各種ユティリティのスクリプトもLiveDVDとLiveUS...
|CENTER:|c
|&ref(EBUG勉強会/20240217_BuildFuguIta/fipart.png,,33%);|
|パーティション構成: /sysmedia部分はLiveDVD/LiveUSBで共通|
***ビルドフロー (i386/amd64) [#o00e05e6]
-ブートローダ関連、カーネル+[[ramdisk root>man:rd.4]]、シ...
-出来上がったISOイメージを実機、あるいは仮想環境で実行さ...
-LiveUSBのディスクイメージ生成時に、MBR/GPT、LegacyBIOS/U...
|CENTER:|c
|&ref(EBUG勉強会/20240217_BuildFuguIta/fiflow.png,,25%);|
|ビルドフロー: 各コンポーネントを/sysmediaに集約して生成|
**amd64のUEFI CD boot [#ie79d37f]
OpenBSDのリポジトリで、どこが変っているか見てみる:
***OpenBSDリポジトリのコミットメッセージ [#d17eba65]
[[/usr/src/distrib/amd64/iso/Makefile>https://cvsweb.open...
Revision 1.47 / (download) - annotate - [select for diff...
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 syst...
containing the EFI boot loaders and install it as an El ...
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} ${EFIC...
+ ${.OBJDIR}/eficdboot-dir
+
+${CDROM}: ${BASE} ${XBASE} ${EFICDBOOT}
(略)
mkhybrid -a -R -T -L -l -d -D -N -o ${.OBJDIR}/$...
-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}/${MA...
+ -e ${OSREV}/${MACHINE}/${EFICDBOOT} \
${.OBJDIR}/cd-dir
--ESP (EFI System Partition)に相当するFATパーティションイ...
***河豚板での対応 [#id259845]
これと同様な処理を河豚板の[[Makefile>github:Makefile]]に...
|CENTER:|c
|&ref(addeficdboot.png,,33%);|
|amd64ビルドフローの改修: ESPのイメージファイルを生成し、...
加えて、リマスタリングの際も、この変更部分が反映されるよ...
リマスタリング時に/sysmediaからコピーするファイルの一覧に...
→改修: [[remaster_dvd.sh>github_boottmp:remaster_dvd.sh]]...
|CENTER:|c
|&ref(fi-remaster_eficdboot.png,,25%);|
|リマスタリング対応: ESPのイメージファイルeficdbootも相互...
**arm64のISOイメージ作成 [#q3a60449]
***arm64のビルドフロー [#x2e7b204]
i386/amd64とは異なる部分がある
-各コンポーネントを集約するのは、i386/amd64ではsysmediaと...
-arm64では、ISOイメージは今までサポートされておらず、Live...
-sysmedia.imgはあらかじめ用意しておく必要がある(いわゆる...
-arm64はsysmedia.imgのiパーティションにあるU-BOOTバイナリ...
|CENTER:|c
|&ref(fiflow_arm64.png,,33%);|
|arm64のビルドフロー: イメージファイル内のパーティション...
***OpenBSDでの変更部分 [#w4adaaca]
-リポジトリのコミットメッセージ~
[[/usr/src/distrib/arm64/iso/Makefile>https://cvsweb.open...
Revision 1.8, Thu Oct 26 14:27:01 2023 UTC (6 months, 3 ...
Branch: MAIN
Changes since 1.7: +40 -3 lines
construct EFI bootable cdXX.iso and instalXX.iso files
変更部分 (抜粋)
+cdbr: ${RELDIR}/BOOTAA64.EFI
+ dd if=/dev/zero of=cdbr bs=512 count=5760
+ vnconfig -v cdbr > vnd
+ fdisk -iy -b "5744@16:c" `cat vnd` >/dev/null
+ newfs -t msdos /dev/r`cat vnd`i
+ mount ${MOUNT_ARGS_msdos} /dev/`cat vnd`i ${MOUNT_POINT}
+ mkdir -p ${MOUNT_POINT}/efi/boot
+ cp ${RELDIR}/BOOTAA64.EFI ${MOUNT_POINT}/efi/boot/boot...
+ echo bootaa64.efi > ${MOUNT_POINT}/efi/boot/startup.nsh
+ umount ${MOUNT_POINT}
+ vnconfig -u `cat vnd`
+ rm -f vnd
+
(略)
+${CDROM}: ${BASE} ${XBASE} cdbr
+ rm -rf ${.OBJDIR}/cd-dir
+ mkdir -p ${.OBJDIR}/cd-dir/${OSREV}/${MACHINE}
+ mkdir -p ${.OBJDIR}/cd-dir/etc
+ echo "set image /${OSREV}/${MACHINE}/bsd.rd" > ${.OBJD...
+
+ cp -p ${BASE} ${.OBJDIR}/cd-dir/${OSREV}/${MACHINE}
+ cp -p ${XBASE} ${.OBJDIR}/cd-dir/${OSREV}/${MACHINE}
+
+ cat ${RELDIR}/SHA256 ${RELXDIR}/SHA256 > \
+ ${.OBJDIR}/cd-dir/${OSREV}/${MACHINE}/SHA256
+ # XXX no SHA256.sig
+
+ cp -p ${.OBJDIR}/cdbr ${.OBJDIR}/cd-dir/${OSREV}/${MAC...
+
+ mkhybrid -a -R -T -L -l -d -D -N -o ${.OBJDIR}/${CDROM...
+ -A "OpenBSD ${OSREV} ${MACHINE} Install CD" \
+ -P "Copyright (c) `date +%Y` Theo de Raadt, The Op...
+ -p "Theo de Raadt <deraadt@openbsd.org>" \
+ -V "OpenBSD/${MACHINE} ${OSREV} Install CD" \
+ -b ${OSREV}/${MACHINE}/cdbr -c ${OSREV}/${MACHINE}...
+ ${.OBJDIR}/cd-dir
-新たにcdbr (CD boot record)を作成するようになっている
-cdbrの中身は[[makefs>man:makefs.8]]で作成したESPで、boot...
-このイメージファイルをi386/amd64のLegacy BIOSの場合と同...
***河豚板での対応 [#s8c29b84]
- usbfadm newdriveでISOイメージからLiveUSB用ディスクイメ...
|CENTER:|c
|&ref(fi-remaster_arm64.png,,25%);|
|リマスタリング時の問題: U-Boot, ラズパイF/Wはどうやって...
// amd64 -> arm64
- これらをISOイメージ中にも持たせておく必要がある
--システムのファイルツリー(fuguita-7.5-arm64.ffsimg)中に ...
以上より、arm64のISOイメージを作成するためのビルドフロー...
|CENTER:|c
|&ref(fiflow_arm64_iso.png,,33%);|
|ビルドフローの改修: cdbrの生成と、U-Boot, ラズパイF/Wの...
- パーティションイメージcdbr (CD boot record)を作成。
-- このイメージファイルはbootaa64.efiを含むESP(amd64のefi...
- LiveDVD⇔LiveUSB 双方向のリマスタリングを可能にするため...
-- U-boot及びRasPiファームウェアは、ビルドシステム内ではp...
-- [[makebootarc_arm64.sh>github_lib:makebootarc_arm64.sh...
-- [[gen_makebootarc_arm64.sh>github_lib:gen_makebootarc_...
以上より、arm64プラットフォーム用のISOイメージも生成でき...
また、河豚板LiveUSBのアップデートには[[fiupdate>EBUG勉強...
**LiveUSB用ディスクイメージの再利用 [#x3e053e6]
これまで説明してきたように、河豚板のビルドフローは、
-i386/amd64~
sysmediaというディレクトリに各コンポーネントを集約 → Live...
-arm64~
sysmedia.imgというイメージファイル内に各コンポーネントを...
と別のフローになっていた。
ここで、いま一つよく見てみると、LiveUSB用ディスクイメージ...
よって、稼動環境で生成されたLiveUSB用ディスクイメージをビ...
|CENTER:|c
|&ref(fiflow_arm64_p1.png,,33%);|
|ビルドフロー改善のアイデア: LiveDVDで生成されたLiveUSBイ...
この改修で、LiveUSB用ディスクイメージをビルド環境にフィー...
|CENTER:|c
|&ref(fiflow_arm64_p2.png,,33%);|
|ビルドフロー改善: LiveUSBイメージをビルド環境にフィード...
**まとめ [#ycd9e22e]
- amd64プラットフォームでLiveDVDがEFIモードで起動できるよ...
- arm64プラットフォームでLiveDVDの供給が可能となった
- LiveDVD→LiveUSB、LiveUSB→LiveDVD、どちらの方向のリマス...
- 一度生成したLiveUSBのディスクイメージをビルドシステムに...
-- 全ての対応プラットフォームでLiveDVD、LiveUSBの一括生成...
-- 仮想環境や実機を使用せず(=人手を介することなく)、LiveU...
前回の勉強会ネタ「[[河豚板のビルドシステム>EBUG勉強会/202...
-1. 微妙に残っている秘伝のタレを取り除く
-2. arm64のISO作れてリマスターもできるようにする
-3. amd64のISOイメージのUEFI起動対応
-4. ISO内に2GB超のファイルがあると起動NG問題解決
のうち、項目2, 3は完了。項目1についてもほぼ解決となった。
** 関連情報
- [[河豚板ガイド/開発編: 河豚板の構築>河豚板ガイド/4-開発...
- 河豚板の開発リポジトリ(オリジナルCVSからのコピー)~
https://github.com/ykaw/FuguIta
- [[河豚板のUEFI/GPT対応>EBUG勉強会/20190223_UEFI_GPT]]
- [[河豚板のビルドシステム>EBUG勉強会/20240217_BuildFuguI...
----
#topicpath
Page: