ルモーリン

ディスクなしパソコンの構築~その3~

投稿:2003-12-05

他のパソコンはマザーボードからの起動ができないため、 フロッピーからの起動に挑戦しました。

電源ONでフロッピーのプログラムがロード マザーボードのBIOSをフロッピーから起動にして IDEのコントローラやドライブを全部無効にしておきます。

grub-0.92をダウンロード、Linuxの環境に展開します。 初めにmakeを実行して、環境を用意します。 次に

./configure --enable-diskless --enable-rtl8139

を実行して、設定ファイルを変更します。 --enable-rtl8139はLANカードのドライバです。 ISAのne2000互換の場合は、

./configure --enable-diskless --enalbe-ne --enable-ne-scan=0x220

を実行します。 0x220はIOポートのアドレスです。(ISAだからね。わーなつかしー。) PCIのne2000互換の場合は、

./configure --enable-diskless --enable-nt8390

を実行します。 最初、全部のドライバを指定したら、自動対応するかと思ったら、 そういう訳ではないようなので、 PCに合わせて1個ずつドライバを指定するようにしました。 最後に

make clean
make dep
make

を実行します。 フロッピーをドライブに差し込んでから、

mkdosfs -v -c /dev/fd0

MS-DOSフォーマットをして

mount /dev/fd0
mkdir /mnt/floppy/boot
mkdir /mnt/floppy/boot/grub
cp stage1/stage1 /mnt/floppy/boot/grub
cp stage1/stage2 /mnt/floppy/boot/grub
cp diskless/grub.conf /mnt/floppy/boot/grub
umount /dev/fd0

必要なファイルをコピーします。

grub
root (fd0)
setup (fd0)
quit

GRUBが起動されるようにします。 上記のgrub.confはテキストエディタでスクラッチから作成します。 フロッピーに入れるgrub.confの内容はのちほど。

サーバのdhcpdの設定に以下を追加します。 PXEの場合はfilenameエントリでプログラムを指定していましたが、 GRUBはdhcpdに設定ファイルを要求し、 dhcpdはoption option-150というエントリを回答します(/etc/dhcpd.conf)。

host diskless {
    hardware ethernet    12:34:56:78:90:ab;
    fixed-address        diskless;
    option subnet-mask   255.255.255.0;
    option host-name     "diskless";
    option option-150    "/diskless/grub.conf";
    server-name          "diskserve";
}

フロッピーに入れるgrub.confを次のように作成します。 TFTPサーバに置いておくgrub.confでないことに注意してください(/mnt/floppy/boot/grub/grub.conf)。

timeout=3
default=0

title Load grub.conf from TFTP server
dhcp
root (nd)
dhcp --with-configfile

1回目のdhcpでLANボードの認識をして、 rootで(nd)を指定できるようにします。 2回目のdhcpでTFTPサーバにgrub.confを要求します。

TFTPサーバには次のようにファイルを用意します。

mkdir /tftpboot/diskless
cp server/grub.conf /tftpboot/diskless

ここでTFTPサーバに置くgrub.confの内容はのちほど。

/tftpboot/diskless/grub.confの内容は次の通りです。

timeout=3
default=0

title Boot from NFS server
dhcp
root (nd)
kernel /diskless/bzImage nfsroot=192.168.123.67:/tftpboot/diskless/root nfsaddrs=192.168.123.45:192.168.123.67:192.168.123.89:255.255.255.0

IPアドレスは末尾45がdiskless、67がサーバ、89がゲートウェイです。

カーネルにLANのドライバ、IP、iptables、iptablesのモジュール各種、 PPP、NFSその他もろもろ入れてみました。 GRUBと違ってLANのドライバはありったけ入れても良さそうです。 下記の設定はconfigs/kernel-2.4.18-i386.configとの差分です。 GRUBではneのケースも試しましたが、kernelでは試していません。 ダイヤルアップサーバやファイヤウオールのために設定が増えました。

カーネルの設定一覧
項番項目設定
1CONFIG_IP_PNPy
2CONFIG_IP_NF_CONNTRACKy
3CONFIG_IP_NF_FTPy
4CONFIG_IP_NF_IPTABLESy
5CONFIG_IP_NF_MATCH_LIMITy
6CONFIG_IP_NF_MATCH_STATEy
7CONFIG_IP_NF_FILTERy
8CONFIG_IP_NF_TARGET_REJECTy
9CONFIG_IP_NF_NATy
10CONFIG_IP_NF_TARGET_MASQUERADEy
11CONFIG_IP_NF_NAT_FTPy
12CONFIG_IP_NF_TARGET_LOGy
13CONFIG_NE2K_PCIy
14CONFIG_8139TOOy
15CONFIG_PPPy
16CONFIG_PPP_ASYNCy
17CONFIG_NFS_FSy
18CONFIG_ROOT_NFSy
19CONFIG_SUNRPCy
20CONFIG_LOCKDy

逆に設定から外れているのは次のものです。

  • CONFIG_IP_PNP_DHCP
  • CONFIG_IP_PNP_BOOTP
  • CONFIG_IP_PNP_RARP