2008-11-03

Xubuntu 8.10のネットインストール

CG定点観測さんでXubuntuというものがあるのを知り、古いノートPCを再生させようと思い立つ。

で、たまたま思い立った日が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が動いてミラーサーバを決めた後らしく、解決策にならない。

そんなわけで、こんな方法で逃げてみた。

  1. mkdir /tftpboot/ubuntu-installer/i386/initrd
  2. cd /tftpboot/ubuntu-installer/i386/initrd
  3. gzip -dc ../initrd.gz | cpio -idv
  4. 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

  5. 同じく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

  6. 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 件のコメント: