Top/EBUG勉強会/20240217_BuildFuguIta

河豚板のビルドシステム

EBUG 第88回会合 2024年2月17日
川俣吉広、kaw@on.rim.or.jp

はじめに

河豚板は 2023年12月-2024年1月にMakefileを始めとするビルドツールの全面改良を行い、OpenBSDからスクラッチで生成できるようになりました。
今回は、このビルドツールの内容についてざっくりと紹介します。


おさらい: 河豚板のファイルシステムのレイアウト

以下の説明は起動モード0の場合

それ以外の起動モードについては、河豚板ガイドの「起動モードとファイルシステム」を参照のこと。

fi-filesys-mode0.png

/

/sysmedia

/fuguita

/ram

おさらい: デバイスのパーティション構成

LiveDVD

普通のEl Torito規格のブート構成。UEFIのネイティブブートには未対応、起動はCSM を有効にして*2

LiveUSB (amd64の場合)

ビルドツール

Makefileと数個のシェルスクリプトなどで構成

このビルドツールで作成できるのは、LiveDVD用のISOイメージファイル。 出来上がったISOイメージで河豚板を起動し、usbfadmユティリティのnewdrive機能を呼び出してLiveUSB用のディスクイメージを生成する。
ビルドツールのMakefileには、vmm(4)上でISOイメージを起動し、LiveDVDの動作チェックとLiveUSBの生成を行うための dvd2usb ターゲットが存在する。

fiflow.png

ブートローダ

カーネル

/ ... ramdisk root

構成要素

イメージファイル(rdroot.img)として作成し、rdsetroot(8)ユティリティを用いてカーネルと結合する。

fuguita-*.ffsimg ... システムのファイルツリーイメージ

3つのフェーズを経て作成

Makefileの変遷 ... 「秘伝のタレ」を取り除く

当初、MakefileはOpenBSDのErrata適用時に、必要なISOイメージを生成する部分のみサポート。

それ以外の部分はメジャーリリース時に一回だけ行うことがほとんどで、頻繁に実行することがなかったため、毎回手でコマンドを打って処理していた → 秘伝のタレ

その後、以下のように、徐々に処理をMakefileに吸収していった。

2005-

ISOの生成部分廻りをMakefile化

後は手動

2009-

手動操作の中でも頻繁に行う部分をMakefileに追加

2022/01-

ファイルツリーとカーネルの生成部分を追加

2022/04-

追加部分をさらに拡大

2023/12-2024/01

素のOpenBSD上で、ほぼmakeだけで河豚板をビルドできるようになる

以上により、「秘伝のタレ」がなくなり、ビルドツールの配布サイズの縮小と、アーキテクチャ非依存化が実現した。

$ ls -lh tools-7.4.tar.gz old/tools-7.3-*.tar.gz
-rw-r--r--  1 ftpadmin  ftpadmin  28.5M Apr 23  2023 old/tools-7.3-amd64.tar.gz
-rw-r--r--  1 ftpadmin  ftpadmin  38.2M Apr 23  2023 old/tools-7.3-arm64.tar.gz
-rw-r--r--  1 ftpadmin  ftpadmin  25.8M Apr 23  2023 old/tools-7.3-i386.tar.gz
-rw-r--r--  1 ftpadmin  ftpadmin  74.8K Jan  8 12:18 tools-7.4.tar.gz

More Topics

*.ffsimgのサイズピッタリ問題

stagingディレクトリ下に作られたファイルツリーをピッタリ収納するには、 イメージファイルのサイズをどの程度にすればよいか?

fi7.4-amd64 # ls -l staging
total 52
-rw-r--r--   1 root  wheel   578 Jan 19 04:56 .cshrc
-rw-r--r--   1 root  wheel   468 Jan 19 04:56 .profile
drwxr-xr-x   2 root  wheel   512 Jan 19 04:56 altroot
drwxr-xr-x   2 root  wheel  1024 Jan 19 04:58 bin
drwxr-xr-x   2 root  wheel   512 Feb 15 11:17 dev
drwxr-xr-x  25 root  wheel  1536 Feb 15 11:18 etc
drwxr-xr-x   2 root  wheel   512 Jan 19 04:56 home
drwxr-xr-x   2 root  wheel   512 Jan 19 04:56 mnt
drwx------   3 root  wheel   512 Feb 15 11:17 root
drwxr-xr-x   2 root  wheel  1536 Feb 15 11:18 sbin
lrwxrwx---   1 root  wheel    11 Jan 19 04:56 sys -> usr/src/sys
drwxrwxrwt   2 root  wheel   512 Feb 15 11:18 tmp
drwxr-xr-x  14 root  wheel   512 Feb 15 11:18 usr
drwxr-xr-x  24 root  wheel   512 Jan 19 04:56 var

fi7.4-amd64 # du -sh staging
994M    staging
fi7.4-amd64 # ls -l sysmedia
total 2110028
-r-xr-xr-x  1 root  wheel       88844 Dec 17 08:58 boot
-rwxr--r--  1 root  wheel        2048 Feb 15 11:18 boot.catalog
-rw-r--r--  1 root  wheel    11806004 Feb 15 11:08 bsd-fi
-rw-r--r--  1 root  wheel    11832361 Feb 15 11:12 bsd-fi.mp
-rw-r--r--  1 root  wheel       90052 Dec 17 08:58 cdboot
-rw-r--r--  1 root  wheel        2048 Dec 17 08:58 cdbr
drwxr-xr-x  2 root  wheel         512 Dec 14 01:59 etc
-rw-r--r--  1 root  wheel  1055916032 Feb 15 11:28 fuguita-7.4-amd64.ffsimg
fi7.4-amd64 #
fittingfs.png

イメージファイルfuguita-7.4-amd64.ffsimgの大きさは?

実装:

金庫の中に鍵問題

Makefileを書く場合に例えば、

livecd.iso: sysmedia/boot sysmedia/cdboot ....
        mkhybrid -o livecd.iso .... sysmedia

と書きたいところだが、sysmedia/bootやsysmedia/cdboot ... は、実際にはsysmedia.imgというイメージファイルの中にある場合があり*5、ターゲットlivecd.isoの依存物として直接書くことができない。困った...

とりあえず今のところ取っている解決策(暫定):

ToDo


Top/EBUG勉強会/20240217_BuildFuguIta

*1 リマスター時の指定でtmpfsに変更可能
*2 OpenBSD 7.4-currentのmkhybrid(8)にはUEFIブートが取り入れられたようだ。
*3 OpenBSDのsyspatchのものではなく、河豚板独自に作成したtarball
*4 ハードリンクが扱えない&&遅いため、OpenRSYNCは使用不可
*5 arm64の場合

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