Automated InstallerはPXEによるネットワークブートに対応しているんだけど、UbuntuみたいにLiveCD自体をネットワークブート出来るといろいろ遊べて面白そうなので(Solarisベースならメンテも出来る)。
OpenSolaris 08/05でLiveCDをPXEブートする方法は
PXE / Net booting Open Solaris 200805 release. – Butter Mountain
に書いてあるので、それを見ながら行う。
PXEgrubをブートする方法は上記サイト等を参考に。
tftp公開ディレクトリを/path/to/tftpboot、nfs公開ディレクトリを/path/to/shareとすると、
- cdromイメージそのものを/path/to/shareにコピーする
- cdrom内の/bootと/platformを/path/to/tftprootにコピーする。
- /path/to/tftpboot/boot/pxegrub を /path/to/tftpboot/pxegrub.0 にコピーする
- /path/to/tftproot/boot/x86.microroot と /path/to/tftpboot/boot/amd64/x86.microroot の中身を編集する。
ミニルートイメージであるx86.microrootはgzip圧縮されたUFSなので、UFSが書き込めるLinuxカーネルならばループバックマウントして直接書き込めばいいのだがUbuntu-9.04ではそうなっていないようなので、OpenSolarisを立ち上げて作業をする(多分FreeBSDでも大丈夫)。
ミニルートイメージをマウントしたら、(ミニルートイメージのルート)/.nfs を作成し、
中身のスクリプト (ミニルートイメージのルート)/lib/svc/method/life-fs-root を以下のように書き換える。
@@ -192,6 +192,10 @@
echo "\rPreparing live image for use" >/dev/msglog
+ /sbin/mount -F nfs -o vers=3 nfsserver:/path/to/share /.nfs
+ /usr/sbin/lofiadm -a /.nfs/osol-0906-x86.iso /dev/lofi/1
+ /sbin/mount -F hsfs -o ro /dev/lofi/1 /.cdrom || break
+
# Determine if any of the USB devices contains a UFS filesystem.
# For devices that do, attempt to mount them to see if the
# compressed /usr filesystem exists
@@ -240,8 +244,8 @@
# because the mount command enforces nosetuid, and /usr
# needs to have the setuid capability.
#
- /usr/sbin/lofiadm -a /.cdrom/solaris.zlib /dev/lofi/1 || break
- /sbin/mount -F hsfs -o ro /dev/lofi/1 /usr
+ /usr/sbin/lofiadm -a /.cdrom/solaris.zlib /dev/lofi/2 || break
+ /sbin/mount -F hsfs -o ro /dev/lofi/2 /usr
if [ $? -ne 0 ]
then
echo "/usr MOUNT FAILED!"
後はその書き換えたイメージをgzip圧縮し直して配置し直すだけ。
上記サイトでは指定させたオプションを読み込むことで他のネットワークでも使えるようにしているが、そういった再利用を視野に入れないのならば決め打ちしてしまっても問題ないだろう。この場合、逆にブートローダ側のメニューについて一切変更の必要はない。
Ubuntuのときと違いミニルートの中身をいじるのでアーキテクチャが変わったり、バージョンが上がったとき等の再利用性は無くなるが、LiveCDの中身自体やカーネルの再構築をせずに出来るので作業としては楽なほうだろう。
CDイメージの中身を展開して、それをNFSマウントさせる方法だと、原因不明だが全部コピーしようとしだして、いつまで経っても起動しない&メモリ使い切るので、CDイメージのある場所をNFSマウントさせ、そこにあるCDイメージを改めてマウントする方法をとる。
とりあえず、LiveCDが立ち上がることは確認できたがDHCPからDNSサーバの情報が正しく取得できていないようで、起動後にresolv.confとnsswitch.confを適切に設定してやらないとDNS解決が出来なかった。