#author("2024-02-14T09:15:08+09:00","default:kaw","kaw")
#author("2024-02-15T00:58:06+09:00","default:kaw","kaw")
#topicpath
*河豚板のビルドシステム [#z9018484]
RIGHT:EBUG 第88回会合 2024年2月17日 ~
川俣吉広、kaw@on.rim.or.jp
#contents
** はじめに [#s4b01120]
河豚板は 2023年12月-2024年1月にMakefileを始めとするビルドツールの面改良を行い、OpenBSDからスクラッチで生成できるようになりました。~
今回は、このビルドツールの容についてざっくりと紹介します。

-ビルド手順: [[河豚板ガイド 4-開発編 河豚板の構築>fg4:build_fuguita]]

-リポジトリ: https://github.com/ykaw/FuguIta

**[[おさらい>EBUG勉強会/20090221_LiveCD_3]]: ファイルシステムのレイアウト [#k05b4a75]
以下の説明は起動モード0の場合

それ以外の起動モードに付いては、河豚板ガイドの「[[起動モードとファイルシステム>fg3:bootmode_fs]]」を参照のこと。
|&ref(fi-filesys-mode0.png,,25%);|
*** / [#i85f2ac7]
- [[rd(4)>man:rd.4]] ... ramdisk root
- OpenBSDのインストールメディアで使われている
- カーネルビルトイン ... カーネル起動時にすでにマウントされている
- /dev
- /boottmp/
-- /boottmp/rc ... 河豚板の初期化スクリプト。完了後は/etc/rcにチェイン
-- /boottmp/* ... クランチバイナリ(初期に必要なコマンド群)、河豚板のツール、初期化に用いるパッチファイルなど
*** /sysmedia [#i7507962]
- DVD, USBメモリをRead Onlyでマウント
- ブートローダ、カーネル, [[/etc/boot.conf>man:man8/amd64/boot.8]]
- fuguita-*.ffsimg ... OSのファイルツリー全体が格納されたディスクイメージファイル
*** /fuguita [#yd892df2]
- OSのファイルツリー全体
- /sysmedia/fuguita-*.ffsimgをRead Onlyでマウントしたもの
- 素のOpenBSDとほぼ同じだが、ライブシステムに必要な若干の改変がされている
*** /ram [#v97f0e6f]
- [[mfs>man:mount_mfs.8]]((リマスター時の指定で[[tmpfs>man:mount_tmpfs]]に変更可能))
- /fuguitaの[[シャドウコピー>man:lndir.1]]
-- 基本的には
 cd /ram && lndir /fuguita
したもの
-- シンボリック・リンクだと都合の悪いもののみ /fuguita/* からコピー
**[[おさらい>EBUG勉強会/20190223_UEFI_GPT]]: デバイスのパーティション構成 [#j60e4c5b]
- LiveDVDとLiveUSBのコンテンツは同じ ... LiveDVDとLiveUSBのブートローダ全部入り~
→LiveDVDでLiveUSB、またはその逆のリマスターも可能
|&ref(fipart.png,,25%);|
***LiveDVD [#babbf626]
普通のEl Torito規格のブート構成。UEFIのネイティブブートには未対応、CSMで((OpenBSD 7.4-currentの[[mkhybrid(8)>man:mkhybrid.8]]にはUEFIブートが取り入れられたようだ。))。
***LiveUSB (amd64の場合) [#n59c66ae]
- Legacy BIOS / UEFI 両対応
-- パーティショニングはMBR。Legacy BIOSによるブート
-- ESP (EFI System Partition, ID=EF)も作成されBOOTX64.EFIもインストールされている
- 上記は amd64 でのデフォルト。指定により[[パーティショニングやブートの方式を変更できる>fg3:liveusb_remaster]]。
**ビルドシステム [#jb17e51e]
Makefileと数個のシェルスクリプトなどで構成 - https://github.com/ykaw/FuguIta
Makefileと数個のシェルスクリプトなどで構成

このビルドシステムで作成できるのは、LiveDVD用のISOイメージファイル。
出来上がったISOイメージで河豚板を起動し、usbfadmユティリティのnewdrive機能を呼び出してLiveUSB用のディスクイメージを生成する。~
ビルドシステムのMakefileには、[[vmm(4)>man:vmm.4]]上でISOイメージを起動し、LiveDVDの動作チェックとLiveUSBの生成を行うための dvd2usb ターゲットが存在する。
|&ref(fiflow.png,,25%);|

***ブートローダ [#y9670200]
-開発環境の/usr/mdecからコピー
--DVDの場合、mkhybridでISOイメージを作成する時にboot.catalogが作成される
--LiveUSBでは、usbfadm newdrive時にMBR・PBRやESPの作成、installbootが実行される

***カーネル [#o919a3b9]
-動作可能性を増やすため、SMP/UPカーネルを両方インストール

-GENERICカーネルのconfigファイルにライブシステムとして動作させるためのパッチを当ててコンパイル
--ルートファイルシステムをrdにする & rdのサイズ設定
--使用できる[[vnd(4)>man:vnd.4]]の数を2つ増やし、6個に
--NKPTP ([[PTP>https://www.hazymoon.jp/OpenBSD/arch/i386/i386/locore_paging.html]]の初期値)の調整

*** / ... ramdisk root [#z4b333b7]
構成要素
-crunched binary ~
/fuguitaをマウントする前や、シャットダウン時に/sysmediaや/ramがアンマウントされた後も必要な実行バイナリを[[crunchgen(8)>man: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)>man:rdsetroot.8]]ユティリティを用いてカーネルと結合する。

*** fuguita-*.ffsimg ... システムのファイルツリーイメージ [#g57f3ec5]
3つのフェーズを経て作成

- stagingディレクトリでファイルツリーを展開 : lib/010_extract.sh
-- OpenBSDのインストールセットの展開
-- rsync, rlwrap, pvをpkg_add
-- ユーザカスタマイズ(siteXX.tgz)があれば展開
-- Errata対応のパッチファイル((OpenBSDのsyspatchのものではなく、河豚板独自に作成したtarball))があれば適用

- ファイルツリーの修正 : lib/020_modify_tree.sh ~
展開したファイルツリーを、ライブシステムとして動作するように修正する
-- KARL関連のファイルを削除
-- dangling symlinkを修正
-- 河豚板では使用できないコマンド(halt,reboot,syspatch,sysupgradeなど)を使用できるものへのsymlinkやstubに置き換える
-- 河豚板特有のユティリティや設定ファイルなどをインストール

- stagingディレクトリから fuguita-*.ffsimg内へコピー
-- rsync -avxHS --delete を使って、ファイルツリーを同期させる((ハードリンクが扱えない&&遅いため、OpenRSYNCは使用不可))

** ビルドシステムの変遷 [#m1e1e501]
** Makefileの変遷 [#m1e1e501]
-初期版 2005-
--ブートローダのコピー
--ISOイメージの生成
--rdsetroot
--後は手動

-2009-
--fuguita-*.ffsimg, rdroot.img, media.imgのvnconfig/mount/umount

-2022/01-
--staging: lib/010_extract.sh, lib/020_modify_tree.sh (まだ手動)
--staging -> fuguita-*.ffsimgの同期
--カーネルのコンパイル

-2022/04-
--kernconfig
--staging: Makefileに組み込み

-2023/12-2024/01
--ほぼ面書き換え
--ramdisk root生成部を追加
--*.ffsimgのサイズ計算→生成

** More Topics [#x9b7ebff]

----
#topicpath


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