FreeBSD 8.3 diskless構築、その2

ディスクレスサーバーの設定

さてFreeBSDの場合、ディスクレスサーバーを設定するマシンの /etc/rc.initdiskless が鍵になる。rc.initdiskless のコメント文に記述されている指示に従って設定を行えばよいのだが、実際にはこの記述だけで全て設定するのはきつい。この他 /usr/share/examples/diskless/clone_root コマンドのコメント分も参考にし、この clone_root コマンドを /root にコピーして、実行権を与えておくのがよい。

外部記憶装置を持たないPCのブートの流れは、小さなプログラムから大きなプログラムを段階的にメモリにロードし、最後に完全なファイルシステムを使える状態にする。具体的には、

  1. DHCPでIPアドレスなどのネットワークパラメーターとFreeBSDカーネルをダウンロードするtftpサーバーのIPアドレスを取得
  2. tftpサーバーからpxebootカーネルをダウンロードして、最低限の起動プロセスを開始
  3. メモリをファイルシステムとして利用しながら、NFSでファイルシステムをネットワークマウントして、ブートプロセスを開始。メモリファイルシステムにもシステムファイルをコピーして、最終的にUnixファイルシステムの構造を構築。

という流れになる。その為、ディスクレスサーバーでは、

  • DHCPサービス
  • tftpサービス
  • NFSサービス

の各ネットワークサービスを提供出来るようにしておかなければならないが、FreeBSD OSを普通にインストールするとtftp, NFSは簡単にスタート出来る。DHCPサーバーは、OSインストールだけでは入らないので、ports から組み込む必要がある。

1. DHCPサーバーの準備

私は isc-dhcpd を使用しているが、dhcpサーバーはディスクレスサーバーと同一である必要は無い。既に別のホストでisc-dhcpdが稼働しているならそれを利用すればよい。
dhcpd.conf に、以下のように、固定IPの設定の他、pxeboot をtftpダウンロードするためのホストIP、NFSルートサーバー(tftpサーバーと同一)上のパスなどを記述する。

host pc01 {
hardware ethernet 00:0c:29:b4:cd:93;
fixed-address 192.168.1.101;
option routers 192.168.1.1;
filename “pxeboot”;
next-server 192.168.1.10;
option root-path “/diskless”;
}

こんな感じ。

この後で、dhcpdを再起動し、ディスレスクライアントにするPCでネットワークブートするかどうか確認しておけばよい。

2. tftpサーバーの準備

tftpサーバー は ftpサーバーから認証の機能を取り除いたもの。サーバーにアクセスできるホストなら、ダウンロード指定されたファイルをgetすることができる。ディスクレスクライアントがネットブートのためのpxebootファイルをダウンロードする。

tftpサーバーの設置は、ディスクレスサーバー構築作業の中で一番設定が簡単な項目かも。/etc/inetd.conf の中のコメントを一つ外すだけ。

tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -s /tftpboot

このあと、inetd を再起動しておく。
次に pxeboot ファイルを /tftpboot の下にコピーしておく。pxeboot は /boot の下にインストールされている。

# mkdir /tftpboot
 # cp /boot/pxeboot /tftpboot

3. NFSサーバーの準備

nfsサービスの起動はファイルに数行スイッチを書き足すだけなので難しくないが、exportするファイルシステムにディスクレスクライアント用のファイルを構成する方法に複数のやり方があって難しいと感じる。

/etc/rc.conf への記述追加

rpc_statd_enable=”YES”
rpc_lockd_enable=”YES”
nfs_client_enable=”NO”
nfs_server_enable=”YES”
mountd_enable=”YES”
rpcbind_enable=”YES”

以上をサーバーに記述する。
これで、サービス起動の準備は揃った。

次は、ディスクレスクライアントが使うディレクトリを整備する。

コメントを残す