訳: 鈴木 康修 <[email protected]>
FreeBSD マシンはネットワークを通じて起動でき、 そして NFS サーバからマウントしたファイルシステムを使用して、 ローカルディスクなしで動作することができます。 標準の設定ファイルを変更する以上の、システムの修正は必要ありません。 必要な要素のすべてが用意されているので、 このようなシステムを設定するのは簡単です。
ネットワークを通じてカーネルを読み込む方法は、 少なくとも二つあります。
PXE: Intel® の Preboot Execution Environment システムは、 一部のネットワークカードまたはマザーボードに組み込まれた、 スマートなブート ROM の一形態です。 詳細については pxeboot(8) を参照してください。
port の etherboot (net/etherboot) は、 ネットワークを通じてカーネルを起動する ROM 化可能なコードを提供します。 コードはネットワークカード上のブート PROM に焼き付けるか、 あるいはローカルフロッピー (ハード) ディスクドライブ、 または動作している MS-DOS® システムから読み込むことができます。 多くのネットワークカードに対応しています。
サンプルスクリプト (/usr/share/examples/diskless/clone_root) はサーバ上で、 ワークステーションのルートファイルシステムの作成と維持をやり易くします。 このスクリプトは少し書き換えないといけないでしょうが、 早く取り掛かれるようにします。
ディスクレスシステム起動を検知しサポートする標準のシステム起動ファイルが /etc 内にあります。
必要なら、NFS ファイルまたはローカルディスクのどちらかにスワップできます。
ディスクレスワークステーションを設定する方法はいろいろあります。 多くの要素が関わっており、 その多くはローカルの状況に合わせてカスタマイズできます。下記は、 単純さと標準の FreeBSD 起動スクリプトとの互換性を強調した完全なシステムの設定を説明します。 記述されているシステムの特徴は次のとおりです。
ディスクレスワークステーションは、 共有された読み取り専用の ルートファイルシステムと、 共有された読み取り専用の /usr を使用します。
ルート ファイルシステムは、 標準的な FreeBSD (典型的にはサーバの) のルートのコピーで、 一部の設定ファイルが、ディスクレス稼働、 また場合によってはそのワークステーションに特有のもので上書きされています。
書き込み可能でなければならない ルート の部分は mfs(8) ファイルシステムで覆われます。 システムが再起動するときにはすべての変更が失われるでしょう。
カーネルは DHCP (または BOOTP) および TFTP を用いて etherboot によって読み込まれます。
注意記述されているとおり、 このシステムは安全ではありません。 ネットワークの保護された範囲で使用されるべきであり、 他のホストから信頼されてはいけません。
ネットワークを通じて設定を取得し、 ワークステーションを起動するために一般的に使用されるプロトコルには、 BOOTP と DHCP の 2 つがあります。 それらはワークステーションのブートストラップ時に何ヵ所かで使用されます。
etherboot はカーネルを見つけるために DHCP (デフォルト) または BOOTP (設定オプションが必要) を使用します (PXE は DHCP を使用します) 。
NFS ルートの場所を定めるためにカーネルは BOOTP を使用します。
BOOTP だけを使用するようにシステムを設定することもできます。 bootpd(8) サーバプログラムは FreeBSD のベースシステムに含まれています。
しかしながら、DHCP には BOOTP に勝る点が多々あります。 (よりよい設定ファイル、PXE が使えること、 そしてディスクレス稼働には直接関係しない多くの長所) ここでは BOOTP だけ利用する場合と、 BOOTP と DHCP を組み合わせた設定を扱います。特に ISC DHCP ソフトウェアパッケージを利用する後者の方法に重点をおきます。
isc-dhcp サーバは、 BOOTP および DHCP リクエストの両方に答えることができます。
4.4-RELEASE の時点で isc-dhcp 3.0 はベースシステムの一部では無くなりました。 まずはじめに net/isc-dhcp3-server port または対応する package をインストールする必要があるでしょう。 ports および package に関する一般的な情報については 第5章 を参照してください。
isc-dhcp がインストールされると、 動作するために設定ファイルを必要とします (通常 /usr/local/etc/dhcpd.conf が指定されます) 。 下記にコメントを含めた例を示します。
default-lease-time 600; max-lease-time 7200; authoritative; option domain-name "example.com"; option domain-name-servers 192.168.4.1; option routers 192.168.4.1; subnet 192.168.4.0 netmask 255.255.255.0 { use-host-decl-names on; option subnet-mask 255.255.255.0; option broadcast-address 192.168.4.255; host margaux { hardware ethernet 01:23:45:67:89:ab; fixed-address margaux.example.com; next-server 192.168.4.4; filename "/tftpboot/kernel.diskless"; option root-path "192.168.4.4:/data/misc/diskless"; } }
注意: PXE は相対的なファイル名を好むようです。 また、カーネルではなく pxeboot を読み込みます (option filename "pxeboot")。
続けて、bootpd で同等のことをする設定です。 これは /etc/bootptab におきます。
BOOTP を使用するために、デフォルトではない NO_DHCP_SUPPORT オプション付きで etherboot をコンパイルしなければならないことと、PXE は DHCP を 必要 とすることに注意してください。 bootpd の唯一明白な利点は、 これがベースシステムに存在するということです。
.def100:\ :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\ :sm=255.255.255.0:\ :ds=192.168.4.1:\ :gw=192.168.4.1:\ :hd="/tftpboot":\ :bf="/kernel.diskless":\ :rp="192.168.4.4:/data/misc/diskless": margaux:ha=0123456789ab:tc=.def100
Etherboot のウェブサイト には主に Linux システムについて述べた 広範囲の文書 が含まれています。 しかし、それにもかかわらず有用な情報を含んでいます。 下記は FreeBSD システム上での etherboot の使用法についての概観を示します。
まずはじめに net/etherboot の package または port をインストールしなければなりません。 etherboot port は通常 /usr/ports/net/etherboot にあります。 ports ツリーがシステムにインストールされている場合、 このディレクトリ内で make を実行すれば、よきに計らってくれます。 ports および packages に関する情報は 第5章 を参照してください。
ここで説明している方法では、ブートフロッピーを使用します。 他の方法 (PROM または DOS プログラム) については etherboot の文書を参照してください。
ブートフロッピーを作成するためには、 etherboot をインストールしたマシンのドライブにフロッピーディスクを挿入します。 それからカレントディレクトリを etherboot ツリー内の src ディレクトリにして次のように入力します。
# gmake bin32/devicetype.fd0
devicetype は ディスクレスワークステーションのイーサネットカードタイプに依存します。 正しい devicetype を決定するために、 同じディレクトリ内の NIC ファイルを参照してください。
TFTP サーバ上で tftpd を有効にする必要があります。
tftpd が提供するファイルを置くディレクトリ (たとえば /tftpboot) を作成してください。
/etc/inetd.conf ファイルに以下の行を追加してください。
tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot
注意: 少なくとも PXE のいくつかのバージョンが TCP 版の TFTP を要求するようです。その場合 dgram udp を stream tcp に置き換えた 2 番目の行を追加してください。
inetd に設定ファイルを再読み込みさせてください。
# kill -HUP `cat /var/run/inetd.pid`
tftpboot ディレクトリはサーバ上のどこにでも置けます。 その場所が inetd.conf および dhcpd.conf の両方に設定されていることを確かめてください。
さらに NFS を有効にして NFS サーバの適切なファイルシステムをエクスポートする必要があります。
この行を /etc/rc.conf に追加してください。
nfs_server_enable="YES"
下記を /etc/exports に加えることで、 ディスクレスマシンのルートディレクトリが位置するファイルシステムをエクスポートしてください (ボリュームのマウントポイントを適当に調節し、 margaux をディスクレスワークステーションの名前に置き換えてください)。
/data/misc -alldirs -ro margaux
mountd に設定ファイルを再読み込みさせてください。 /etc/rc.conf 内で NFS をはじめて有効にする必要があったのなら、 代わりに再起動した方がよいかもしれません。
# kill -HUP `cat /var/run/mountd.pid`
次のオプションを (通常のものに) 追加した、 ディスクレスクライアント用のカーネルコンフィグレーションファイルを作成してください。
options BOOTP # Use BOOTP to obtain IP address/hostname options BOOTP_NFSROOT # NFS mount root filesystem using BOOTP info options BOOTP_COMPAT # Workaround for broken bootp daemons.
BOOTP_NFSV3 および BOOTP_WIRED_TO を利用してもよいかもしれません (LINT を参照してください)。
カーネルを構築して (第9章 を参照)、 dhcpd.conf に記述した名称で tftp ディレクトリにコピーしてください。
dhcpd.conf に root-path として記載された ディスクレスワークステーションのためのルートファイルシステムを作成する必要があります。
これを行う最も簡単な方法は /usr/share/examples/diskless/clone_root シェルスクリプトを使用することです。 このスクリプトは、少なくともファイルシステムが作成される場所 (DEST 変数) を調節するために変更する必要があります。
説明についてはスクリプトの一番上にあるコメントを参照してください。 ベースシステムをどのように構築するか、 またファイルがどのようにディスクレス稼働、サブネット、 または個々のワークステーションに固有のバージョンによって、 選択的にオーバライドできるかを説明します。 また、ディスクレスな場合の /etc/fstab ファイルおよび /etc/rc.conf ファイルの例を示します。
/usr/share/examples/diskless 内の README ファイルには、多くの興味深い背景情報が書かれています。 しかし diskless ディレクトリ内の他の例と同じく、 clone_root と /etc/rc.diskless[12] で実際に使われているものとは異なる設定方法が説明されています。 ここに書かれている方法は rc スクリプトの変更が必要になりますが、 こちらの方が気に入ったというのでなければ、 参照にとどめてください。
必要なら、サーバに置かれたスワップファイルに NFS 経由でアクセスできます。 bootptab または dhcpd.conf の正確なオプションは、 現時点では明確には文書化されていません。 下記の設定例は isc-dhcp 3.0rc11 を使用して動作したと報告されているものです。
dhcpd.conf に下記の行を追加してください。
# Global section option swap-path code 128 = string; option swap-size code 129 = integer 32; host margaux { ... # Standard lines, see above option swap-path "192.168.4.4:/netswapvolume/netswap"; option swap-size 64000; }
これは、少なくとも FreeBSD クライアントにおいては、 DHCP/BOOTP オプションコードの 128 は NFS スワップファイルへのパスで、オプションコード 129 は KB 単位のスワップサイズだということです。 もっと古いバージョンの dhcpd では option option-128 "... という書式が受け付けられましたが、 もはや対応していません。
代わりに、/etc/bootptab では次の書式を使います。
T128="192.168.4.4:/netswapvolume/netswap":T129=0000fa00
注意: /etc/bootptab では、スワップの大きさは 16 進数で表さなければなりません。
NFS スワップファイルサーバ側でスワップファイルを作成します。
# mkdir /netswapvolume/netswap # cd /netswapvolume/netswap # dd if=/dev/zero bs=1024 count=64000 of=swap.192.168.4.6 # chmod 0600 swap.192.168.4.6
192.168.4.6 はディスクレスクライアントの IP アドレスです。
NFS スワップファイルサーバ上で /etc/exports に下記の行を追加してください。
/netswapvolume -maproot=0:10 -alldirs margaux
それから、上述したように mountd にエクスポートファイルを再読み込みさせてください。
ディスクレスワークステーションが X を起動するように設定されている場合、 xdm 設定ファイルを調整しなければならないでしょう。 これはデフォルトでエラーファイルを /usr に置きます。
ルートファイルシステムを提供するサーバが FreeBSD で動作していない場合、 FreeBSD マシン上でルートファイルシステムを作成し、 tar または cpio を利用して置きたい場所にコピーしなければならないでしょう。
この状況では、major/minor 整数サイズが異なっていることにより /dev 内のスペシャルファイルに関する問題が時々おこります。 この問題を解決するには、非 FreeBSD サーバからディレクトリをエクスポートして、 そのディレクトリを FreeBSD マシンでマウントし、 FreeBSD マシン上で MAKEDEV を実行して正しいデバイスエントリを作成します (FreeBSD 5.0 およびそれ以降では、 devfs(5) を使用してユーザに意識させずにデバイスノードを割り当てるので、 これらのバージョンでは MAKEDEV は必要ありません)。
本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、ドキュメント を読んだ上で <[email protected]> まで (英語で)
連絡してください。
本文書に関する質問については、<[email protected]> まで電子メールを (英語で)
送ってください。