Live CD or Live DVDの作り方

FreeBSDの動くLive DVDを作成する。

/livedvd/i386にシステム全体を作る。

まずベースシステムを/livedvd/i386以下に、作る

# cd /usr/src
# setenv DESTDIR /livedvd/i386
# mkdir -p $DESTDIR
# make buildworld TARGET_ARCH=i386
# make installworld TARGET_ARCH=i386
# make distrib-dirs TARGET_ARCH=i386
# make distribution TARGET_ARCH=i386
# make buildkernel TARGET_ARCH=i386 KERNCONF=GENERIC
# make installkernel TARGET_ARCH=i386 KERNCONF=GENERIC

packageのインストール

packageはchrootしてインストールできる。例えば、こんな感じ。

# chroot $DESTDIR
jupiter# pkg_add ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/i386/packages-7.1-release/x11/xorg-7.3_2.tbz
jupiter# exit
# 

chrootすると、普段は"# "としているプロンプトが、デフォルトの"`/bin/hostname -s`# "になり、hostnameが表示される。

Live DVDとdisklessのための設定

Live DVDは書くことができないファイルシステムのため、FreeBSDのdisklessシステムの動作を利用する。disklessの場合は、起動の最中に/etc/rcから/etc/rc.initdisklessを実行し、必要なmdファイルシステムを作るというのが、FreeBSDのdisklessシステムの動作の基本のようだ。diskless(8)よりも、/etc/initdisklessのコメントほうが詳しいので、よく読んで、どのように動作するか知っておくといいと思う。

まず、/etc/rc.initdisklessを確実に実行してもらうために/etc/disklessというファイルを作っておく。

# touch $DESTDIR/etc/diskless

次に、一番最初に読み込まれるfstabを書いておく。

# echo "/dev/iso9660/FreeBSD_7.1-PRERELEASE  /   cd9660  ro     0       0" > $DESTDIR/etc/fstab

ここでは、後で書き込む、Live DVDのラベルをFreeBSD_7.1-PRERELEASEとする。ここが一致してないと起動できない。

/dev/acd0  /   cd9660  ro     0       0

としても、もちろん起動するが、1番目のDVD (or CD) ドライブに決め打ちしてしまうことになる。

これ以上は、$DESTDIR/etcは触らない。

/etc/rc.initdisklessは、/conf以下にあるファイルを読んで、mdファイルシステムを作り、マウントし、ファイルをコピーしてくれる。/conf以下にはbaseとdefaultと{IPaddress}というディレクトリを作ることができる。{IPaddress}はネットワークブートの場合に便利だが、Live DVDの場合にはIP決め打ちにしてよいことがあるとは思えないので、以下では省略。

例えば/etcをmdファイルシステムとして作る場合、/conf/{base,default}/etcを作って、ファイルをコピーしておけば、/etc/rc.initdisklessが、mdファイルシステムを作成し、/conf/{base, default}/etcの中をコピーしてくれる。また、/conf/{base, default}/etc/md_sizeというファイルに、mdファイルシステムの大きさを決めてくれる。ない場合には、デフォルトの10240ブロック (5MB) となる。

/conf/baseと/conf/defaultは、同じように動作する。順番はbase、defaultなので、例えば、/conf/base/etc/rc.confと/conf/default/etc/rc.confがあれば、/conf/default/etc/rc.confが上書きされる。

というのを考慮して、/conf/base/etcにmd_sizeのみをおいて、mdファイルシステムを作って、/etc/default/etcにファイルをおいてコピーさせることにする。

mdファイルシステムを使うのは、/etc、/home、/root、/varとする。
/conf/base/etc/md_size 10240
/conf/base/home/md_size 1024000
/conf/base/root/md_size 10240
/conf/base/var/md_size 102400
と、それぞれのファイルに書いておく。
/conf/default/に、/etc、/home、/root、/varを

# cd $DESTDIR/conf/default
# pax -rw -pe ../../etc ./
# mkdir home
# pax -rw -pe ../../root ./
# pax -rw -pe ../../var ./

まず、$DESTDIR/conf/default/etc/fstabを書き換える。

# vi ./etc/fstab
# cat ./etc/fstab
/dev/iso9660/FreeBSD_7.1-PRERELEASE  /   cd9660  ro     0       0
md              /tmp            mfs     -s=30m,rw       0       0
proc            /proc                   procfs  rw      0       0

/tmpは、空のディレクトリでよいので、fstabでmdファイルシステムを作るので問題ない。

次に、$DESTDIR/conf/default/etc/rc.confを書き換える。

# vi ./etc/rc.conf

Live DVDシステムのuserを作らなければならない。vipwには、-dオプションでパスワードファイルの場所を指定できる。

# vipw -d ./etc

に、

freebsd::1000:1000::0:0:FreeBSD User:/home/freebsd:/bin/csh

freebsdというuserを追加する。ついで、./etc/groupも編集しておく。

freebsd:*:1000:

この状態で、パスワードが空になるのだが(rootも)、それを設定する方法が、僕には分からない。$DESTDIRにchrootしてpasswdを使い、$DESTDIR/etc/master.passwdから文字列をコピーするしかないと思う。freebsdも一回追加する必要がある。パスワードが空だといろいろと不便なので。$DESTDIR/etcはあまり変更を加えたくないのだが。

その後、$DESTDIR/conf/default/homeにfreebsdディレクトリを作って、/usr/share/skelディレクトリのdotファイルをコピーをしておく。

この状態で、isoファイルを作れば、bootできる。が、/conf/default以下をDVDから読み込むのは時間がかかる。なので、/conf/default以下をtarで固めておくと、起動が早くなる。

# cd $DESTDIR/conf/default
# tar -czpf etc.cpio.gz ./etc
# tar -czpf home.cpio.gz ./home
# tar -czpf root.cpio.gz ./root
# tar -czpf var.cpio.gz ./var
# rm -rf etc home root var
# 

これで、isoイメージを作成できる。

isoイメージの作成

portsからsysutils/cdrtoolsをインストールしておく。

isoイメージを作成するには、/usr/src/release/i386/mkisoimages.shを利用するのが、便利である。ただし、このままだとmkisofsに-rオプションを渡すので、setuidビットが正しくセットされない。

# cp /usr/src/release/i386/mkisoimages.sh /root/bin

この最後の行、

mkisofs $bootable -r -J -V $LABEL -publisher "$publisher" -o $NAME $*

mkisofs $bootable -R -J -V $LABEL -publisher "$publisher" -o $NAME $*

に変更しておく。

# sh /root/bin/mkisoimages.sh -b FreeBSD_7.1-PRERELEASE /livedvd/FreeBSD_7.1-PRERELEASE.iso $DESTDIR

で/livedvd/FreeBSD_7.1-PRERELEASE.isoが作成される。これをDVDに焼くとbootable DVDができる。

実際にやってみると

FreeBSD自体は、容易に起動する。

X.OrgKDE 4.1、FirefoxOpenOffice.org-3、GIMPなど、フルインストールしてDVDを作成してみた。もういくつかの点を、修正する必要があるし、ブートするまでに極限までの忍耐力を必要とするが、起動した。