EBUGの原稿
OpenBSDでLive CDをつくる†
Why OpenBSD?, Why Live CD?†
- Other BSD / Linux では?
- Linuxでも昔1FDとかいじっていた ... 1FD Linux 作成キットとして公開*1
- 一番慣れたBSD → make build / make releaseが昂じてやってみたくなった
- OpenBSDには定番がない
- Linux ... FrozenTech's LiveCD List によると295種類
- FreeBSD ... FreeSBIE
- NetBSD ... pkgsrc - sysutils/mklivecd
- 以前 OpenBSD を使った 1CD snortがあったがobsolete
Boot手順の概要†
- 実環境をなるべく弄らないで載せることにより;
- 常用環境を持ち歩きたい
- 実環境のバックアップシステムとして使用可能か
- H/Wの検証用などのテスト環境
アプローチ1†
- CD-ROMを直接マウントする。
- kernel config
config bsd root on cd0c
- 書き込み可能な領域の確保 ... union FSを使ってCDにmfsを被せる。
- CDの作成手順
- ターゲットシステムのFile Treeを作成
mkdir ./cdroot
(cd TARGET-ROOT-DIR && pax -rwpe . WORKDIR/cdroot)
rm -rf ./cdroot/{dev/fd,kern,mnt,proc,tmp}/*
- ISOイメージ作成
mkhybrid -R -o ISO-IMAGE -b BOOT-RECORD -c BOOT-CATALOG ./cdroot
- CD-ROM書込
cdrecord dev=/dev/rcd0c ISO-IMAGE
- 欠点
- 「実環境をなるべくいじらない」にちょっと反する;
- mfs + union mount の準備のため、ターゲットシステムでの/etc/rcの改造が必要
- Union FSが不安定 (OpenBSD 3.8 でレイヤー系のファイルシステムは削除されてしまった)
アプローチ2†
- rd*2 (RAM Disk)デバイスをrootとしてマウント ... インストーラが使っている方法 ... あらかじめ内容を作り込んでおける。
- rdは大容量 or 動的なサイズ確保が苦手 → mfsも併用する。
- kernel config
option RAMDISK_HOOKS
option MINIROOTSIZE=3800 ← 512byte block
config bsd root on rd0a
pseudo-device rd 1 # ram disk
- vnデバイス上にrd内のファイルツリー作成
dd if=/dev/zero of=./rdroot.img bs=512 count=3800
mkdir ./rdroot
vnconfig svnd0 ./rdroot.img
disklabel -w svnd0 rdroot
newfs /dev/rsvnd0a
mount /dev/svnd0a ./rdroot
- rdsetrootコマンドでroot FSイメージをカーネルに組込む。
- ルートパーティション(/dev/rd0a)のレイアウト ... 必要なコマンド/ファイルのみ収録
/+-boottmp/
| +-init* ksh* = sh* ln* sysctl
| login.conf rc
| mount* mount_cd9660* mount_ffs* mount_mfs*
+-bin@ -> boottmp
+-etc@ -> boottmp
+-sbin@ -> boottmp
+-cdrom/
+-mfs/
+-dev/
| +-MAKEDEV (many device files...)
+-mnt/
+-tmp/
上記イメージファイルの作成(アプローチ1 手順aと同じ方法)し、カーネルにファイルシステムのイメージを書き込み;
./rdsetroot bsd.rd < ./rdroot.img
- /etc/rcの内容
- 実装メモリ量の取得/設定 → mfsの作成
- mfsとCD-ROMのマウント → /mfs, /cdrom
これ以降通常のコマンドが使用可能となる(ダイナミックリンクしたものはまだ使用できない)。
- /cdrom/{bin,sbin}を / にsymlink
- Read/Write両方が必要なものを /mfs以下にコピー、/ に symlink
- 残りの /cdrom/* を / にsymlink
- 初期設定(ルート・パスワード、ネットワーク設定など)をユーザに問い合わせ
- 本来の /etc/rc にチェイン (以降通常のブートシーケンス)
- CD-ROMイメージの作成 ... 貴本的にはターゲットシステム(通常HDDにインストールして運用しているもの等)をそのままコピー
- /tmp, /proc, /kernfs, /dev/fdなどは空にしておく。
- ブートローダ(cdbr, cdboot)、カーネルのコピー
- 欠点
- Read Onlyのサブディレクトリ以下を一部分書き込み可能にするのが繁雑
- 一部書き込み可でないと動かない部分があった ... /usr/X11R6/X11/lib/xdm/authdir/*
- mfs+nullfs ... UnionFSよりは若干安定
- lndirによる方法 ... symlink NGなものもあり ... /usr/lib/exec/auth/*
- セキュリティに注意
- ホスト固有の情報を入れると紛失した場合危険 ... 端末的使用が無難
- mfs上の情報は消えると復帰できないので、端末やFW, RT的使用が無難
- 遅い
- CD上のファイルが圧縮されていればスループットが上がるのに。
参考文献等†
- ソースコード
- src/distrib/i386/common/Makefile.inc, src/distrib/i386/cdfs/Makefile, src/distrib/i386/cdfs-emu/Makefileあたり
- manpage of section 8
- boot, biosboot, boot_i386, cdboot, installboot, release
- 書籍
- rd, md, mfs関連: BSD Magazine No.4, 6, 10, 16
- ブート関連: Unix Magazine 1998.12 Linuxでリラックス / 1999.8 CD-Rで作るブータブル・リカバリーCD
- Links
作成したISOイメージは、以下に置いてあります;†
アプローチ1により作成 ... http://kaw.ath.cx/dl/pub/OpenBSD/LiveCD/CD-OpenBSD-3.6.iso.bz2
アプローチ2により作成 ...
http://kaw.ath.cx/dl/pub/OpenBSD/LiveCD/CD-OpenBSD-3.7.iso.bz2