#author("2024-05-23T13:04:42+09:00","default:kaw","kaw")
[[:EBUG勉強会/20240524_FuguItaISO]]
#author("2024-05-23T13:07:52+09:00","default:kaw","kaw")

#topicpath
*河豚板のEFI CD boot / arm64 ISO 対応 [#v80a10cd]
RIGHT:EBUG 第89回会合 2024年5月24日 ~
川俣吉広、kaw@on.rim.or.jp

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

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

**経緯 [#r1d0fa9a]
2024年4月5日にリリースされたOpenBSD 7.5では、ライブ・システムに関連した2つの機能が追加された。

[[OpenBSD 7.5 what's new>https://www.openbsd.org/75.html]]

-amd64のISOイメージがUEFIで起動できるようになった
 - Various bugfixes and tweaks in userland:
  ...
  - Added mkhybrid(8) '-e' (-eltorito-boot-efi) option for writing an EFI eltorito boot image, in addition to or instead of the x86 boot image, to the output file.
  ...
 - Installer, upgrade and bootloader improvements:
  ...
  - Make the amd64 cdXX.iso and installXX.iso CD images bootable in EFI mode (by creating an EFI system partition containing the EFI boot loaders to be installed as an El Torito boot image).
 
-arm64がISOイメージをサポート
 - Installer, upgrade and bootloader improvements:
   ...
   - Added CD install images to arm64.

**おさらい [#n3473446]

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

--LiveDVDの/dev/cd0aとLiveUSBの/dev/sd0aの容は全く同じ

---LiveDVD⇔LiveUSBのリマスタリングを容易にできるようにするため

---そのためLiveDVDとLiveUSBのブート関連ファイルが部入っている

---起動関連や各種ユティリティのスクリプトもLiveDVDとLiveUSBで通に使える

#ref(EBUG勉強会/20240217_BuildFuguIta/fipart.png,,25%)

-ビルドフロー (i386/amd64)

--ブートローダ関連、カーネル+ramdisk root、システムのファイルツリーイメージという各コンポーネントをsysmediaというディレクトリに集約した上で、ISOイメージを生成

--出来上がったISOイメージを実機、あるいは仮想環境で実行させ、その上でusbfadmユティリティのnewdrive機能を使用してLiveUSB用のディスクイメージを生成する

--usbfadm newdrive実行時に、MBR/GPT、LegacyBIOS/UEFI、スワップ/ユーザファイル保存領域/FATの有無とそのサイズ、ユーザファイル保存領域の暗号化の有無、などを指定する

#ref(EBUG勉強会/20240217_BuildFuguIta/fiflow.png,,25%)

**amd64のUEFI CD boot [#ie79d37f]
どこが変っているか見てみる:

-リポジトリのコミットメッセージ~
[[/usr/src/distrib/amd64/iso/Makefile>https://cvsweb.openbsd.org/src/distrib/amd64/iso/Makefile?rev=1.47&content-type=text/x-cvsweb-markup]]
 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

--ESP (EFI System Partition)に相当するFATパーティションイメージを作成し、mkhybridによるISOイメージ作成時に新たに新設された-eオプションで指定している。

-これと同様な処理を河豚板のMakefileに追加した(赤字部分)。
#ref(addeficdboot.png,,33%)

-加えて、リマスタリングの際も、この変更部分が反映されるようにする要がある。~
リマスタリング時に/sysmediaからコピーするファイルの一覧にeficdbootを加える。~
→remaster_dvd.shとusbfadmを改修
#ref(fi-remaster_eficdboot.png,,25%)

**arm64のISOイメージ作成 [#q3a60449]
arm64のビルドフロー

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

--各コンポーネントを集約するのは、i386/amd64ではsysmediaというディレクトリだったが、arm64ではsysmedia.imgの中にあるaパーティション(LiveDVDの/dev/cd0a、LiveUSBの/dev/sd0aに相当)

--arm64では、ISOイメージは今までサポートされておらず、LiveUSB用のディスクイメージを直接生成する要があったため

--sysmedia.imgはあらかじめ用意しておく要がある(いわゆる、「秘伝のタレ」)

--arm64はsysmedia.imgのiパーティションにあるU-BOOTバイナリ、Raspberry Pi用ファームウェア、EFIアプリケーション(bootaa64.efi)を使用して起動するため、aパーティションにブートローダ関連のファイルは不要だが、i386/amd64との互換性のため、サイズ0のダミーファイルをtouchで生成するようになっている

#ref(fiflow_arm64.png,,33%)

OpenBSDでの変更部分

-リポジトリのコミットメッセージ~
[[/usr/src/distrib/arm64/iso/Makefile>https://cvsweb.openbsd.org/src/distrib/arm64/iso/Makefile?rev=1.8&content-type=text/x-cvsweb-markup]]
 Revision 1.8, Thu Oct 26 14:27:01 2023 UTC (6 months, 3 weeks ago) by deraadt
 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/bootaa64.efi
 +	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" > ${.OBJDIR}/cd-dir/etc/boot.conf
 +
 +	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}/${MACHINE}
 +
 +	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 OpenBSD project" \
 +	    -p "Theo de Raadt <deraadt@openbsd.org>" \
 +	    -V "OpenBSD/${MACHINE}   ${OSREV} Install CD" \
 +	    -b ${OSREV}/${MACHINE}/cdbr -c ${OSREV}/${MACHINE}/boot.catalog \
 +	    ${.OBJDIR}/cd-dir

-新たにcdbr (CD boot record)を作成するようになっている

-cdbrの中身はmkfsで作成したESP。っているのは、bootaa64.efiのみ

-これをi386/amd64のLegacy BIOSの場合と同様、mkhybridの-bオプションで指定

リマスター時の問題

- usbfadm newdriveでISOイメージからLiveUSB用ディスクイメージを作成する場合、ISOイメージ中にはESPにあるべきU-BOOTとRaspberry Pi Firmware関連のファイルがない
#ref(fi-remaster_arm64.png,,33%)
- これらをISOイメージ中にも持たせておく要がある

**LiveUSB用ディスクイメージの再利用 [#x3e053e6]
秘伝のタレ

LiveCD flow
LiveUSB flow

Recycle

----
#topicpath


Front page   Edit Diff History Attach Copy Rename Reload   New Page list Search Recent changes   Help   RSS of recent changes