OpenBSD を PxeBoot でインストール

久々の更新になっちゃいました。
ノートPCが手に入ったのでOpenBSDをインストールすることにしました。
もらってから発覚したのですが、CDROMが壊れているマシンでした。インストールCDからインストールできない訳です。
それならと言うことで、以前から興味のあったPxeBootでインストールしてみることにしました。
構成としてはGentooマシンでdhcpdとtftpをホストしました。

やってみた感想としては、インストールするのにISOを焼く作業がなくなるし、設定もそんなに難しくないのでおすすめです。
インストール作業なんかはそんなに頻繁に行う作業ではないでしょうが、OpenBSDは半年に一回Updateがありますし。

参考にさせてもらったのは以下のドキュメント。
The Gentoo Linux alternative installation method HOWTO
OpenBSD FAQ 6.10 How do I boot using PXE? (i386, amd64)

ハマった所は、dhcpd.confで next-server を指定しないといけなかった所と、
PxeBoot環境では Grub は OpenBSD をうまく起動できない所でした。
dhcpdについてですが、設定ファイルでnext-serverを指定しないとサーバ機のIPアドレスを認識してくれませんでした。
また、OpenBSDをpxegrubで起動しようとしたのですが、起動時に下記のようなエラーがでて先に進めませんでした。
 panic: /boot too old: upgrade!
Grubの設定を下記のようにすればよいとの情報があったのですが、現状には当てはまらないようです。
 title=Diskless OpenBSD
 root (nd)
 kernel --type=openbsd /bsd.rd

うまくいった手順についてですが、まずはGentoo機にdhcpdとtftpをインストールします。
 $ sudo emerge dhcp
 $ sudo emerge tftp-hpa

Bootファイル設置用のディレクトリを作成します。
 $ sudo mkdir -p /diskless
まず bsd.rd を取得して、 /diskless 配下に置きます。
次に pxeboot を取得して、 /diskless 配下に置きます。

最終的な /etc/dhcp/dhcpd.conf の内容は以下のようになりました。
 ddns-update-style none ;
 option routers 192.168.1.10;
 option subnet-mask 255.255.255.0;
 option broadcast-address 192.168.1.255;
 option domain-name-servers 218.176.253.97;
 next-server 192.168.1.12;
 
 default-lease-time 120;
 max-lease-time 120;
 
 subnet 192.168.1.0 netmask 255.255.255.0 {
     # クライアントにロードさせるブートファイルを指定
     filename "pxeboot";
     range 192.168.1.36 192.168.1.250;
 }
tftpの起動オプションは以下のようになります。
/etc/conf.d/in.tftp
 INTFTPD_PATH="/diskless"
 INTFTPD_USER="nobody"
 INTFTPD_OPTS="-u ${INTFTPD_USER} -l -vvvvvv -p -c -s ${INTFTPD_PATH}"

クライアントをネットワークブートし、起動後に boot> プロンプトが表示されるので、 bsd.rd と入力します。
後は通常のインストールと変わりません。

Comment

  1. trombik
    2009-03-03 Tue 10:15

    > インストール作業なんかはそんなに頻繁に行う作業ではないでしょうが、OpenBSDは半年に一回Updateがありますし。

    ネットワークに接続していて、コンソールにアクセスできる環境であれば、bsd.rdでネットワーク経由でアップグレードできます。

    新しいバージョンのbsd.rdを/直下に置いて、bsd.rdを起動すればOKです。

    boot> bsd.rd

    詳しくはboot(8)

  2. tma
    2009-03-03 Tue 13:02

    へー知らなかったです。
    今度やってみます!