訳: 鈴木 康修 <yasu@hike.te.chiba-u.ac.jp>
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章アプリケーションのインストール - packages と ports を参照してください。
isc-dhcp がインストールされると、
動作するために設定ファイルを必要とします
(通常 /usr/local/etc/dhcpd.conf
が指定されます) 。
下記にコメントを含めた例を示します。
このオプションは
| |
TFTP サーバを
| |
カーネルとして
etherboot が読み込むファイルを
注記:PXE は相対的なファイル名を好むようです。
また、カーネルではなく | |
ルートファイルシステムへのパスを、
通常の NFS 書式で |
続けて、bootpd
で同等のことをする設定です。
これは /etc/bootptab
におきます。
BOOTP を使用するために、デフォルトではない
NO_DHCP_SUPPORT
オプション付きで
etherboot
をコンパイルしなければならないことと、PXE は DHCP
を 必要 とすることに注意してください。
bootpd の唯一明白な利点は、
これがベースシステムに存在するということです。
Etherboot のウェブサイト には主に Linux システムについて述べた 広範囲の文書 が含まれています。 しかし、それにもかかわらず有用な情報を含んでいます。 下記は FreeBSD システム上での etherboot の使用法についての概観を示します。
まずはじめに net/etherboot
の package または port をインストールしなければなりません。
etherboot port は通常
/usr/ports/net/etherboot
にあります。
ports ツリーがシステムにインストールされている場合、
このディレクトリ内で make
を実行すれば、よきに計らってくれます。
ports および packages に関する情報は 5章アプリケーションのインストール - packages と ports
を参照してください。
ここで説明している方法では、ブートフロッピーを使用します。 他の方法 (PROM または DOS プログラム) については etherboot の文書を参照してください。
ブートフロッピーを作成するためには、
etherboot
をインストールしたマシンのドライブにフロッピーディスクを挿入します。
それからカレントディレクトリを etherboot
ツリー内の src
ディレクトリにして次のように入力します。
#
gmake bin32/devicetype
.fd0
devicetype
は
ディスクレスワークステーションのイーサネットカードタイプに依存します。
正しい devicetype
を決定するために、
同じディレクトリ内の NIC
ファイルを参照してください。
TFTP サーバ上で tftpd
を有効にする必要があります。
tftpd
が提供するファイルを置くディレクトリ
(たとえば /tftpboot
)
を作成してください。
/etc/inetd.conf
ファイルに以下の行を追加してください。
少なくとも 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
に追加してください。
下記を /etc/exports
に加えることで、
ディスクレスマシンのルートディレクトリが位置するファイルシステムをエクスポートしてください
(ボリュームのマウントポイントを適当に調節し、
margaux
をディスクレスワークステーションの名前に置き換えてください)。
/data/misc
-alldirs -ro margaux
mountd
に設定ファイルを再読み込みさせてください。
/etc/rc.conf
内で NFS
をはじめて有効にする必要があったのなら、
代わりに再起動した方がよいかもしれません。
#
kill -HUP `cat /var/run/mountd.pid`
次のオプションを (通常のものに) 追加した、 ディスクレスクライアント用のカーネルコンフィグレーションファイルを作成してください。
BOOTP_NFSV3
および
BOOTP_WIRED_TO
を利用してもよいかもしれません
(LINT
を参照してください)。
カーネルを構築して (9章FreeBSD カーネルのコンフィグレーション を参照)、
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
に下記の行を追加してください。
"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 にエクスポートファイルを再読み込みさせてください。
ルートファイルシステムを提供するサーバが 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 に関する質問がある場合には、
ドキュメント を読んだ上で
<questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、
<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。