スポンサーリンク

DISKLESS(8) FreeBSD システム管理者マニュアル DISKLESS(8)

名称

diskless − ネットワークを介してシステムをブートする

解説

ネットワークを介してマシンをブートする能力は、 diskless もしくは dataless マシンのためや、ローカルのファイルシステムの再インストールまたは修復中に 一時的に利用するために有用です。このファイルは、クライアントがネットワー クを介してブートする時に、クライアントとサーバとの間で行われる通信の一般 的な解説を提供します。

操作

ネットワークを介してシステムをブートする時に、クライアントとサーバの間で 3 フェーズのやりとりがあります:

       1. ステージ 1 のブートストラップ、典型的にはイーサネットカード組み込みの PXE が、ブートプログラムを読み込みます。

2. ステージ 2 ブートプログラム、典型的には pxeboot(8) が、モジュールと カーネルを読み込み、カーネルをブートします。

3. カーネル NFS がルートディレクトリをマウントし、そこから処理を継続し ます。

これらの各フェーズについて、以降で詳しく記述します。

最初に、ステージ 1 ブートストラップがステージ 2 ブートプログラムをネット ワーク経由でロードします。ステージ 1 ブートストラップは典型的には BOOTP か DHCP を使用して読み取るファイル名を取得し、 TFTP を使用してそのファイ ルをロードします。このファイルは典型的には pxeboot と呼ばれ、 /boot/pxeboot からサーバの TFTP ディレクトリに、典型的には /tftpdir にコ ピーされるべきです。

それから、ステージ 2 ブートプログラムが追加モジュールとカーネルをロードし ます。これらのファイルは DHCP サーバや BOOTP サーバには存在しないかもしれ ません。 DHCP 設定で使用可能な next-server オプションを使用して、ステージ 2 ブートファイルとカーネルを持つサーバを指定可能です。ステージ 2 プログラ ムは、 NFS または TFTP を使用してこれらのファイルを取得します。デフォルト では NFS が使用されます。 pxeboot(8) を使用している場合、 /etc/make.conf に LOADER_TFTP_SUPPORT=YES を設定し、下記の方法で pxeboot(8) を再コンパイ ルおよび再インストールすることで TFTP を使用するバージョンをインストール 可能です。しばしば TFTP を使用することが必要となりますので、 /tftpdir/ に カスタムカーネルを置くことができます。 NFS を使用するが diskless クライア ント用にカスタムルートファイルシステムを持たない場合、ステージ 2 ブート は、サーバのカーネルを diskless マシン用のカーネルとしてロードしますが、 これはあなたの期待する動作ではないかもしれません。

cd /usr/src/sys/boot/i386
make clean; make; make install
cp /boot/pxeboot /tftpdir/

フェーズ 3 では、カーネルは以下の 2 つの方法のどちらかで IP ネットワーク 設定を獲得し、ルートファイルシステムのマウントに進み、動作を開始します。 フェーズ 2 のローダが、カーネル環境を使ってカーネルにネットワーク設定を渡 せるのなら、カーネルはその情報を使ってネットワークインタフェースを設定し ます。そうでない場合、 DHCP や BOOTP を用いて設定情報を獲得しないとなりま せん。ブートスクリプトは diskless 起動を認識し、 /etc/rc.d/initdiskless および /etc/rc.d/diskless 中の動作を実行します。古いシステムでは、スクリ プトは /etc/rc.diskless1/etc/rc.diskless2 です。

設定

diskless クライアントを実行させるためには、次に示すものが必要です。

 NFS サーバ。これは、適切なパーミッションを付けてルートパーティションと /usr パーティションをエクスポートします。いくつかのシステムファイルにアクセスできるようにするために、ルートパーティションが −maproot=0でエクスポートされている限り、スクリプト diskless は読み込み専用パーミッションで動作します。例として /etc/exports は次に示す行を含みます。

<ROOT> -ro -maproot=0 -alldirs <list of diskless clients>
/usr -ro -alldirs <list of diskless clients>

ここで ⟨ROOT⟩ は、ルートパーティションのサーバ上でのマウントポイント です。スクリプト /usr/share/examples/diskless/clone_root を使い、共用 可能な読み込み専用ルートパーティションを生成することができます。しか し、多くの場合、サーバ自身が使用するルートディレクトリを (読み込み専 用で) エクスポートさせると決めることもできます。

 BOOTP または DHCP サーバ。 bootpd(8)/etc/inetd.conf の ‘‘bootps’’行のコメントを外すことで使用可能にすることができます。 /etc/bootptabの例は次のようになります。

.default:\
hn:ht=1:vm=rfc1048:\
:sm=255.255.255.0:\
:sa=<SERVER>:\
:gw=<GATEWAY>:\
:rp="<SERVER>:<ROOT>":

<CLIENT>:ha=0123456789ab:tc=.default

⟨SERVER⟩, ⟨GATEWAY⟩, ⟨CLIENT⟩, ⟨ROOT⟩ の意味は明らかでしょう。

 適切に初期化されたルートパーティション。スクリプト/usr/share/examples/diskless/clone_root が、サーバのルートパーティションを参照として使用することで、この作成の助けとなります。作業を始めたばかりならば、サーバ自身のルートディレクトリ / を使用すべきであり、この複製を作成すべきではありません。
普通は、ディスクレスブートにおいてはサーバの rc.confrc.local とは異なるものを使いたいでしょう。 diskless ブートスクリプトは、(ルートの他のサブディレクトリと同様) /etc 中の様々なファイルをオーバライドする機構を提供します。スクリプトは 4 個のオーバライドディレクトリ/conf/base, /conf/default, /conf/<broadcast-ip>, /conf/<machine-ip>を提供します。サーバの /etcdiskless マシン上で完全に置き換える/conf/base/etc を、常に作成すべきです。ここで、サーバの /etc を複製することが可能ですし、サーバの /etc/conf/base/etc へマウントすることを diskless ブートスクリプトに対して指示する特殊ファイルを作成することも可能です。これは、 diskless マシンの /etc の元となるマウントポイントを含むファイル /conf/base/etc/diskless_remount を作成することで実現されます。例えば、このファイルの中身は次のようになります:
10.0.0.1:/etc
代りに、サーバが独立したルートを複数持つ場合、このファイルは次のようになります:
10.0.0.1:/usr/diskless/4.7-RELEASE/etc
これは動作しますが、 /usr/diskless/4.7-RELEASE/usr/diskless/4.8-RELEASE へコピーしてインストールを更新すると、この移動を反映するように diskless_remount を変更する必要があるでしょう。これを避けるために、 diskless_remount ファイル中のパスで / で開始するものの実際のパスは、クライアントのルートをこれらの前に付けたものになります。これにより、このファイルには次のように書けます:
/etc
diskless スクリプトは、オーバライドされたディレクトリを保持するために、メモリファイルシステムを作成します。わずか 2MB パーティションがデフォルトで作成されますが、用途によっては足りないかもしれません。この動作を変えるには、このディレクトリ用のメモリディスクの大きさを 512 バイトセクタ数単位で示す、ファイル /conf/base/etc/md_size を作成します。
その次に、典型的には、ファイル毎のオーバライドを /conf/default/etcディレクトリにて提供します。最低でも、 /etc/fstab, /etc/rc.conf,/etc/rc.local のオーバライドを /conf/default/etc/fstab,/conf/default/etc/rc.conf, /conf/default/etc/rc.local で指定する必要があります。
オーバライドは階層的です。ネットワーク固有のデフォルトを /conf/         BROADCASTIP/etc ディレクトリ中で提供可能です。ここで、 ⟨BROADCASTIP⟩は、 BOOTP にてディスクレスシステムに与えられる、 diskless システムのブロードキャストアドレスを示します。 diskless_remount および md_sizeの機構はこれらのディレクトリ中のいかなるものに対しても動作します。コンフィギュレーション機能は /etc 以外のディレクトリに対して動作します。置換やオーバライドしたいディレクトリを/conf/{base,default,<broadcast>,<ip>}/* 中に作成することで、 /etc と同様に動作します。
通常は /conf/base/etc/diskless_remount を使用してサーバの /etc を複製しますので、メモリファイルシステムから不要なファイルを削除したいかもしれません。例えば、サーバはファイアウォールを持つがディスクレスではそうでない場合、 /etc/ipfw.conf を削除したいと思うでしょう。/conf/base/                       DIRECTORY.remove ファイルを作成することで、これは実現可能です。例えば、 /conf/base/etc.remove に相対パスを列挙すると、ブートスクリプトがこれらをメモリファイルシステムから削除します。
最低でも、 /conf/default/etc/fstab に次の内容を含める必要があります。

<SERVER>:<ROOT> / nfs ro 0 0
<SERVER>:/usr /usr nfs ro 0 0
proc /proc procfs rw 0 0

また、 /conf/default/etc/rc.conf を変更し、 diskless クライアント用の スタートアップオプションを含むようにしたバージョンを用意する必要もあ ります。 /conf/default/etc/rc.local は空にできますが、サーバ自身の /etc/rc.localdiskless システムに使用されることを防げます。

スタートアップコードで既に設定されているため、 rc.conf では hostnameifconfig_* を指定する必要はまずないでしょう。最後になりますが、複 数の diskless クライアントで同じ設定ファイルを共有する場合、 ‘hostname‘ の値をスイッチ変数に使う case 文を用いて、マシン固有の設定 を行なうようにすると良いかもしれません。

 NFS または TFTP を使用されロードされる、 diskless クライアント用のカーネル。これは NFS クライアントのサポートを含んでいなければなりません。
 options NFSCLIENToptions NFS_ROOT
カーネル環境を使ってカーネルにネットワーク設定を渡すことのできないブート機構を使っているのなら、以下のオプションも含める必要があります。
 options BOOTPoptions BOOTP_NFSROOToptions BOOTP_COMPAT
注: PXE 環境では上記のオプションは必要ありません。
diskless ブート環境は、ルートファイルシステムを読み取り専用でマウントする時に一時的なローカルディスクを提供するメモリに裏打ちされたファイルシステムに依存しています。そのため、カーネル設定のデバイスセクションには以下を追加することが必要です。
device md
ファイアウォールを使用する場合、デフォルトを ‘‘open’’ にしておかねばならないことは覚えておいて下さい。オープンにしておかないと、カーネルで BOOTP パケットの読み書きができなくなります。

セキュリティ上の問題

暗号化されない NFS を使用してルートパーティションとユーザパーティションを マウントすると、暗号化キーなどの情報が洩れるかもしれないことに注意して下 さい。

バグ

このマニュアルページはおそらく不完全です。

FreeBSD はときどきルートパーティションに書き込みを要求します。ですから、 スタートアップスクリプトでは、元の内容を保存する間、 MFS ファイルシステム をいくつかの位置 ( /etc/var など) にマウントします。この処理はすべて の場合を扱えないかもしれません。

関連項目

ethers(5), exports(5), bootpd(8), mountd(8), nfsd(8), pxeboot(8), reboot(8), tftpd(8)

ports/net/etherboot

FreeBSD 10.0 January 10, 2004 FreeBSD 10.0

スポンサーリンク