で、たまたま思い立った日がUbuntu 8.10とXubuntu 8.10がリリースされた日で、さっそくAlternateのCD-ROMイメージをダウンロード。Think Padは光学ドライブがないので、ネットインストールに挑戦… これが茨の道だった。
分かったこと。
- DHCP+TFTPでブートさせるのまでは簡単。
- DOS対策のためか存在しないファイルを要求するとTFTPサーバが少しウェイトするので、ubuntu-installer/i386/boot-screens/以下にamd.cfg gtk.cfg amdgtk.cfg adamd.cfg adgtk.cfg adamdgtk.cfgという名前の空のファイルを置いておくと高速にメニューが出てくる。
- kickstartという自動インストール機構がある。Solarisで言うところのjumpstart。
- kickstartの設定ファイルの場所はubuntu-installer/i386/boot-screens/text.cfgで指定する。
- ただし、Xubuntuのインストーラがkickstartの書式を直接理解するというわけではない。実際にはインストール時にkickseedというプログラムがpreseedという別の形式(?)のファイルに変換しているだけらしい。凝ってるなあ…
- で、このkickseedのスクリプトがバグってる。getoptが-lオプションを認識出来ないので、kickstartの設定がほとんど反映されない。
最後のが影響が大きく、ミラーサーバの指定ができずに必ず公式サーバに接続しにいこうとしてしまう。まあ、時間のある時だったらいいけど、できればローカルなミラーサーバを探しにいって欲しいわけだ。
一応カーネルの起動オプションで生の(すなわちkickseedが動的に生成したものではない)preseedを指定することもできるのだが、これが反映されるのがkickseedが動いてミラーサーバを決めた後らしく、解決策にならない。
そんなわけで、こんな方法で逃げてみた。
- mkdir /tftpboot/ubuntu-installer/i386/initrd
- cd /tftpboot/ubuntu-installer/i386/initrd
- gzip -dc ../initrd.gz | cpio -idv
- lib/kickseed/handlers/url.shのurl_handler()の先頭に以下を追加。超強引wwww
ks_preseed d-i log/url string ''
ks_preseed d-i mirror/country string 'enter information manually'
ks_preseed d-i mirror/protocol select http
ks_preseed d-i mirror/http/hostname string 192.168.1.xx
ks_preseed d-i mirror/http/directory string /xubuntu - 同じくlib/kickseed/handlers/user.shのuser_handler()の先頭に以下を追加。これでパスワードなしのユーザを追加する。
ks_preseed passwd passwd/make-user boolean true
ks_preseed passwd passwd/username string xxxx
ks_preseed passwd passwd/user-fullname string xxxx
ks_preseed passwd passwd/user-password-crypted password - find . | cpio -oc | gzip > ../initrd.gz
(作業はSolaris上でやったので、cpioのオプションがLinuxと違うかもしれない)
要するに、kickseedがやるはずだった処理を、getoptに差し掛かる前に自前で実行してしまおうというものだ。kickstartの設定ファイルには
と書いてあるが、実際にはオプションはまったく解析されない。
install
url --url http://192.168.1.xx/xubuntu/
user xxxx --fullname xxxx --passwd xxx
%packages
xubuntu-desktop
で、大体これでうまくいくんだけど、パッケージの選択がまだうまくいかないのでベースシステムだけになってしまう。あと、sources.listもおかしいかな。うーん…
0 件のコメント:
コメントを投稿