河豚板のビルドシステム†
おさらい: ファイルシステムのレイアウト†
以下の説明は起動モード0の場合
それ以外の起動モードに付いては、河豚板ガイドの「起動モードとファイルシステム」を参照のこと。
- rd(4) ... ramdisk root
- OpenBSDのインストールメディアで使われている
- カーネルビルトイン ... カーネル起動時にすでにマウントされている
- /dev
- /boottmp/
- /boottmp/rc ... 河豚板の初期化スクリプト。完了後は/etc/rcにチェイン
- /boottmp/* ... クランチバイナリ(初期に必要なコマンド群)、河豚板のツール、初期化に用いるパッチファイルなど
/sysmedia†
- DVD, USBメモリをRead Onlyでマウント
- ブートローダ、カーネル, /etc/boot.conf
- fuguita-*.ffsimg ... OSのファイルツリー全体が格納されたディスクイメージファイル
/fuguita†
- OSのファイルツリー全体
- /sysmedia/fuguita-*.ffsimgをRead Onlyでマウントしたもの
- 素のOpenBSDとほぼ同じだが、ライブシステムに必要な若干の改変がされている
/ram†
おさらい: デバイスのパーティション構成†
- LiveDVDとLiveUSBのコンテンツは同じ ... LiveDVDとLiveUSBのブートローダ全部入り
→LiveDVDでLiveUSB、またはその逆のリマスターも可能
LiveDVD†
普通のEl Torito規格のブート構成。UEFIのネイティブブートには未対応、CSMで*2。
LiveUSB (amd64の場合)†
- Legacy BIOS / UEFI 両対応
- パーティショニングはMBR。Legacy BIOSによるブート
- ESP (EFI System Partition, ID=EF)も作成されBOOTX64.EFIもインストールされている
- 上記は amd64 でのデフォルト。指定によりパーティショニングやブートの方式を変更できる。
ビルドシステム†
Makefileと数個のシェルスクリプトなどで構成 - https://github.com/ykaw/FuguIta
このビルドシステムで作成できるのは、LiveDVD用のISOイメージファイル。
出来上がったISOイメージで河豚板を起動し、usbfadmユティリティのnewdrive機能を呼び出してLiveUSB用のディスクイメージを生成する。
ビルドシステムのMakefileには、vmm(4)上でISOイメージを起動し、LiveDVDの動作チェックとLiveUSBの生成を行うための dvd2usb ターゲットが存在する。
ブートローダ†
- 開発環境の/usr/mdecからコピー
- DVDの場合、mkhybridでISOイメージを作成する時にboot.catalogが作成される
- LiveUSBでは、usbfadm newdrive時にMBR・PBRやESPの作成、installbootが実行される
カーネル†
- 動作可能性を増やすため、SMP/UPカーネルを両方インストール
- GENERICカーネルのconfigファイルにライブシステムとして動作させるためのパッチを当ててコンパイル
- ルートファイルシステムをrdにする & rdのサイズ設定
- 使用できるvnd(4)の数を2つ増やし、6個に
- NKPTP (PTPの初期値)の調整
/ ... ramdisk root†
構成要素
- crunched binary
/fuguitaをマウントする前や、シャットダウン時に/sysmediaや/ramがアンマウントされた後も必要な実行バイナリをcrunchgen(8)で生成
... bootbin = disklabel, halt, init, ksh, ln, mount, mount_cd9660, mount_ext2fs, mount_ffs, mount_mfs, mount_msdos, mount_ntfs, mount_vnd, newfs, reboot, sed, sh, sleep, swapctl, swapon, sysctl, umount, vnconfig
- rc
河豚板の初期化スクリプト。ファイルシステムの構築やネットワークの設定を行う。
初期化完了後は、OpenBSDの/etc/rcにチェインする。
- 河豚板独自のユティリティスクリプト、diffファイルなど
- rcから呼び出され、on-the-flyで/etc中のファイルなどに改変を加える(ネットワーク関連の設定ファイルなど)。
- /dev
- MAKEDEV vnd4 vnd5 ... カーネルのconfigファイルに対応して作成
イメージファイル(rdroot.img)として作成し、rdsetroot(8)ユティリティを用いてカーネルと結合する。
fuguita-*.ffsimg ... システムのファイルツリーイメージ†
3つのフェーズを経て作成
- stagingディレクトリでファイルツリーを展開 : lib/010_extract.sh
- OpenBSDのインストールセットの展開
- rsync, rlwrap, pvをpkg_add
- ユーザカスタマイズ(siteXX.tgz)があれば展開
- Errata対応のパッチファイル*3があれば適用
- ファイルツリーの修正 : lib/020_modify_tree.sh
展開したファイルツリーを、ライブシステムとして動作するように修正する
- KARL関連のファイルを削除
- dangling symlinkを修正
- 河豚板では使用できないコマンド(halt,reboot,syspatch,sysupgradeなど)を使用できるものへのsymlinkやstubに置き換える
- 河豚板特有のユティリティや設定ファイルなどをインストール
- stagingディレクトリから fuguita-*.ffsimg内へコピー
- rsync -avxHS --delete を使って、ファイルツリーを同期させる*4
ビルドシステムの変遷†
More Topics†