あなたの天然記念物
ホーム更新雑談Perl鉄ゲタランドナーコースガイド自転車Linuxリンク経歴連絡先
ディスクなしパソコンの構築−その3− (2003.12.05)

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


電源ONでフロッピーのプログラムがロード

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


GRUBを実行

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の内容はのちほど。


GRUBがdhcpdサーバへ問合せ

サーバの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がTFTPサーバにgrub.confを要求

フロッピーに入れる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サーバからgrub.confを転送

TFTPサーバには次のようにファイルを用意します。
mkdir /tftpboot/diskless
cp server/grub.conf /tftpboot/diskless
ここでTFTPサーバに置くgrub.confの内容はのちほど。


GRUBがTFTPサーバのgrub.confで再実行

/tftpboot/diskless/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がゲートウェイです。


bzImageがTFTPサーバから転送される

カーネルに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

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