Ubuntu linuxをネットワークインストールする

Ubuntu linux 8.04 - Hardy Heron が無事リリースされました。

で、早速インスコしようかと思ったのですが、Ubuntu(desktop)のisoイメージは690MB前後で、最近のCD-R/Wには焼けるけども一昔前のRWには焼けない、というちょっと中途半端なサイズで、しかも我が家には旧世代の650MBまでのものしかないと。じゃあDVD-RWで良いじゃないかと考えたものの、メインマシンのディスクドライブはDVD-RWを読めない。外付けドライブもあるにはあるけれど、わざわざ準備するのが面倒くさい。それより何より、ネットが繋がってる環境なのに、一度しか使わないディスクを焼くのがもったいない、ということで、ネットワークインストールを試みました。

ネットワークインストールといえば起動バイナリだけ準備して必要なデータはネット越しに、というものだと理解してたものの、世間一般ではどういう訳か"pxe boot"のことを指すようで、検索してもpxelinuxを使った方法しか出てこない。最近のマシンのほとんどがpxebootできるのかどうかは知りませんが*1、わざわざ既存のLAN内部にルーター等と競合しかねないようなDHCP鯖を設置して、tftp鯖置いて…というのはまどろっこしすぎるというか暇人のすることだとしか思えない。

というわけで、pxebootせずにnetwork越しにインストールした際の作業記録。起動に必要なイメージデータは10MB以下なので、USB Bootさえできる環境なら16MBのメディアがあれば十分です。もしくは100MB入るCD-R/Wか。

ブートイメージ

Ubuntuの場合、インターネットからデータを持ってきてインストールする、という方式に対応できるブートイメージはpxeboot向けのものしかない*2ので、pxelinuxとsyslinuxの設定ファイルの書式は(ほぼ)共通という点を利用して、pxeboot用のイメージをCD/USBメモリ用に流用。なお、インストールOSがx86かx64かで起動イメージが変わるので注意。

以下のリンクにおいて、リンク先は国内の各ミラーサーバーです。本家サーバーは混んでそうなので。

最短経路

Daemontoolsとかでmini.iso*3をマウントしてやって、中身を丸ごとusbメモリにコピーして*4、isolinux.cfgをsyslinux.cfgにリネームして syslinux -mas x: でブートローダー登録して再起動するのが一番簡単。

CD向けイメージ

isoファイルです。これをCD-R/Wに焼き込んでやればbootableなイメージのできあがり。焼き込みソフトを持っていなければ、imgburnあたりが手軽でお勧め。あとはインストールしたいマシンのディスクドライブにぶち込んで、CDからブートしてやればOK。成功すれば、

というような表示が出るはず。これ以降は画面の指示に従う。

USBメモリ向けイメージ

CDイメージに比べると若干手順が増えるけど気にしない。まず、起動イメージ類を含んだ.tar.gzファイルを持ってくる。

これを7-zip等で解凍してやると、

.
│  pxelinux.0
│  pxelinux.cfg
│
└─ubuntu-installer
    └─amd64
        │  initrd.gz
        │  linux
        │  pxelinux.0
        │
        ├─boot-screens
        │      boot.txt
        │      f1.txt
        │      f10.txt
        │      f2.txt
        │      f3.txt
        │      f4.txt
        │      f5.txt
        │      f6.txt
        │      f7.txt
        │      f8.txt
        │      f9.txt
        │      splash.rle
        │
        ├─pxelinux.cfg
        │      default
        │
        └─pxelinux.cfg.serial-9600
                default

という具合にファイルが展開される*5ので、以下、ubuntu-installer/amd64/をルートとして話を進めると、

  1. /boot-screens以下のファイル全てと/pxelinux.cfg/defaultをルートに移動*6
  2. /pxelinux.0ファイルと/以下に存在するディレクトリ3つを全て削除。
  3. /defaultを/syslinux.cfgにリネーム。
  4. /syslinux.cfgをLF対応なエディタで開き、ubuntu-installer/amd64/boot-screens/, ubuntu-installer/amd64/を削除*7
  5. /boot.txtを開き、一行目が^Xsplash.rleとなるように編集*8
  6. /以下の全てのファイルをUSBメモリ(x:)にコピー
  7. kernel.orgから最新のsyslinuxをダウンロード*9してHDDに展開。
  8. コマンドプロンプトからsyslinuxの入ったディレクトリに移動し、 syslinux -mas x: でブートローダーを登録。
  9. USBメモリ刺したまま再起動。

成功すれば、

というような表示が出るはず。これ以降は画面の指示に従う。

脚注

*1:一昔前まではintelのカード積んでなかったらダメだったんだけどね。

*2:fedoraとかだと結構細かいニーズに応じたファイルがあったりするのですが。

*3:CD向けイメージの項を参照。

*4:本当はboot.catとisolinux.binは不要。

*5:このツリー図はx64版のものですが、x86版でも同じ。amd64じゃなくてi386になるだけ。

*6:syslinuxがディレクトリ構造を認識できないぽいため、全てのファイルを同一ディレクトリに。

*7:各種ファイルがルートにあることを明示する。

*8:vimとかの制御コード&LF対応なエディタがいいかも。^Xは制御コードなので、メモ帳とかでは■で表示される。

*9:現時点での最新版は3.63