.\" %NetBSD: diskless.8,v 1.11 1997/06/16 07:50:35 mrg Exp % .\" .\" Copyright (c) 1994 Gordon W. Ross, Theo de Raadt .\" Updated by Luigi Rizzo, Robert Watson .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. The name of the author may not be used to endorse or promote products .\" derived from this software without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. .\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" %FreeBSD: src/share/man/man8/diskless.8,v 1.24 2004/06/21 14:23:31 mpp Exp % .\" .\" $FreeBSD$ .Dd January 10, 2004 .Dt DISKLESS 8 .Os .Sh 名称 .Nm diskless .Nd ネットワークを介してシステムをブートする .Sh 解説 ネットワークを介してマシンをブートする能力は、 .Em diskless もしくは .Em dataless マシンのためや、ローカルのファイルシステムの再インストールまたは 修復中に一時的に利用するために有用です。 このファイルは、クライアントがネットワークを介してブートする時に、 クライアントとサーバとの間で行われる通信の一般的な解説を提供します。 .Sh 操作 ネットワークを介してシステムをブートする時に、 クライアントとサーバの間で 3 フェーズのやりとりがあります: .Bl -enum .It ステージ 1 のブートストラップ、 典型的にはイーサネットカード組み込みの PXE が、 ブートプログラムを読み込みます。 .It ステージ 2 ブートプログラム、 典型的には .Xr pxeboot 8 が、モジュールとカーネルを読み込み、 カーネルをブートします。 .It カーネル .Tn NFS がルートディレクトリをマウントし、そこから処理を継続します。 .El .Pp これらの各フェーズについて、以降で詳しく記述します。 .Pp 最初に、ステージ 1 ブートストラップがステージ 2 ブートプログラムを ネットワーク経由でロードします。 ステージ 1 ブートストラップは典型的には .Tn BOOTP か .Tn DHCP を使用して読み取るファイル名を取得し、 .Tn TFTP を使用してそのファイルをロードします。 このファイルは典型的には .Pa pxeboot と呼ばれ、 .Pa /boot/pxeboot からサーバの .Tn TFTP ディレクトリに、典型的には .Pa /tftpdir にコピーされるべきです。 .Pp それから、 ステージ 2 ブートプログラムが追加モジュールとカーネルをロードします。 これらのファイルは .Tn DHCP サーバや .Tn BOOTP サーバには存在しないかもしれません。 .Tn DHCP 設定で使用可能な .Ic next-server オプションを使用して、 ステージ 2 ブートファイルとカーネルを持つサーバを指定可能です。 ステージ 2 プログラムは、 .Tn NFS または .Tn TFTP を使用してこれらのファイルを取得します。 デフォルトでは .Tn NFS が使用されます。 .Xr pxeboot 8 を使用している場合、 .Pa /etc/make.conf に .Li LOADER_TFTP_SUPPORT=YES を設定し、 下記の方法で .Xr pxeboot 8 を再コンパイルおよび再インストールすることで .Tn TFTP を使用するバージョンをインストール可能です。 しばしば .Tn TFTP を使用することが必要となりますので、 .Pa /tftpdir/ にカスタムカーネルを置くことができます。 .Tn NFS を使用するが .Nm クライアント用にカスタムルートファイルシステムを持たない場合、 ステージ 2 ブートは、サーバのカーネルを .Nm マシン用のカーネルとしてロードしますが、 これはあなたの期待する動作ではないかもしれません。 .Bd -literal -offset indent cd /usr/src/sys/boot/i386 make clean; make; make install cp /boot/pxeboot /tftpdir/ .Ed .Pp フェーズ 3 では、カーネルは以下の 2 つの方法のどちらかで IP ネットワーク設定を獲得し、ルートファイルシステムのマウントに進み、 動作を開始します。 フェーズ 2 のローダが、カーネル環境を使ってカーネルにネットワーク設定を 渡せるのなら、カーネルはその情報を使ってネットワークインタフェースを設定します。 そうでない場合、 .Tn DHCP や .Tn BOOTP を用いて設定情報を獲得しないとなりません。 ブートスクリプトは .Nm 起動を認識し、 .Pa /etc/rc.d/initdiskless および .Pa /etc/rc.d/diskless 中の動作を実行します。 古いシステムでは、スクリプトは .Pa /etc/rc.diskless1 と .Pa /etc/rc.diskless2 です。 .Sh 設定 .Nm クライアントを実行させるためには、次に示すものが必要です。 .Bl -bullet .It .Tn NFS サーバ。これは、適切なパーミッションを付けて ルートパーティションと .Pa /usr パーティションをエクスポートします。 いくつかのシステムファイルにアクセスできるようにするために、 ルートパーティションが .Fl maproot Ns =0 でエクスポートされている限り、 スクリプト .Nm は読み込み専用パーミッションで動作します。 例として .Pa /etc/exports は次に示す行を含みます。 .Bd -literal -offset indent -ro -maproot=0 -alldirs /usr -ro -alldirs .Ed .Pp ここで .Aq ROOT は、ルートパーティションのサーバ上でのマウントポイントです。 スクリプト .Pa /usr/share/examples/diskless/clone_root を使い、共用可能な読み込み専用ルートパーティションを 生成することができます。 しかし、多くの場合、サーバ自身が使用するルートディレクトリを (読み込み専用で) エクスポートさせると決めることもできます。 .It .Tn BOOTP または .Tn DHCP サーバ。 .Xr bootpd 8 は .Pa /etc/inetd.conf の .Dq Li bootps 行のコメントを外すことで使用可能にすることができます。 .Pa /etc/bootptab の例は次のようになります。 .Bd -literal -offset indent .default:\\ hn:ht=1:vm=rfc1048:\\ :sm=255.255.255.0:\\ :sa=:\\ :gw=:\\ :rp=":": :ha=0123456789ab:tc=.default .Ed .Pp .Aq SERVER , .Aq GATEWAY , .Aq CLIENT , .Aq ROOT の意味は明らかでしょう。 .It 適切に初期化されたルートパーティション。 スクリプト .Pa /usr/share/examples/diskless/clone_root が、サーバのルートパーティションを参照として使用することで、 この作成の助けとなります。 作業を始めたばかりならば、サーバ自身のルートディレクトリ .Pa / を使用すべきであり、この複製を作成すべきではありません。 .Pp 普通は、ディスクレスブートにおいてはサーバの .Pa rc.conf や .Pa rc.local とは異なるものを使いたいでしょう。 .Nm ブートスクリプトは、(ルートの他のサブディレクトリと同様) .Pa /etc 中の様々なファイルをオーバライドする機構を提供します。 スクリプトは 4 個のオーバライドディレクトリ .Pa /conf/base , .Pa /conf/default , .Pa /conf/ , .Pa /conf/ を提供します。 サーバの .Pa /etc を .Nm マシン上で完全に置き換える .Pa /conf/base/etc を、常に作成すべきです。 ここで、サーバの .Pa /etc を複製することが可能ですし、サーバの .Pa /etc を .Pa /conf/base/etc へマウントすることを .Nm ブートスクリプトに対して指示する 特殊ファイルを作成することも可能です。 これは、 .Nm マシンの .Pa /etc の元となるマウントポイントを含むファイル .Pa /conf/base/etc/diskless_remount を作成することで実現されます。 例えば、このファイルの中身は次のようになります: .Pp .Dl 10.0.0.1:/etc .Pp 代りに、サーバが独立したルートを複数持つ場合、 このファイルは次のようになります: .Pp .Dl 10.0.0.1:/usr/diskless/4.7-RELEASE/etc .Pp これは動作しますが、 .Pa /usr/diskless/4.7-RELEASE を .Pa /usr/diskless/4.8-RELEASE へコピーしてインストールを更新すると、この移動を反映するように .Pa diskless_remount を変更する必要があるでしょう。 これを避けるために、 .Pa diskless_remount ファイル中のパスで .Pa / で開始するものの実際のパスは、 クライアントのルートをこれらの前に付けたものになります。 これにより、このファイルには次のように書けます: .Pp .Dl /etc .Pp .Nm スクリプトは、 オーバライドされたディレクトリを保持するために、 メモリファイルシステムを作成します。 わずか 2MB パーティションがデフォルトで作成されますが、 用途によっては足りないかもしれません。 この動作を変えるには、 このディレクトリ用のメモリディスクの大きさを 512 バイトセクタ数単位で示す、ファイル .Pa /conf/base/etc/md_size を作成します。 .Pp その次に、典型的には、ファイル毎のオーバライドを .Pa /conf/default/etc ディレクトリにて提供します。 最低でも、 .Pa /etc/fstab , .Pa /etc/rc.conf , .Pa /etc/rc.local のオーバライドを .Pa /conf/default/etc/fstab , .Pa /conf/default/etc/rc.conf , .Pa /conf/default/etc/rc.local で指定する必要があります。 .Pp オーバライドは階層的です。 ネットワーク固有のデフォルトを .Pa /conf/ Ns Ao Ar BROADCASTIP Ac Ns Pa /etc ディレクトリ中で提供可能です。 ここで、 .Aq Ar BROADCASTIP は、 .Tn BOOTP にてディスクレスシステムに与えられる、 .Nm システムのブロードキャストアドレスを示します。 .Pa diskless_remount および .Pa md_size の機構はこれらのディレクトリ中のいかなるものに対しても動作します。 コンフィギュレーション機能は .Pa /etc 以外のディレクトリに対して動作します。 置換やオーバライドしたいディレクトリを .Pa /conf/{base,default,,}/* 中に作成することで、 .Pa /etc と同様に動作します。 .Pp 通常は .Pa /conf/base/etc/diskless_remount を使用してサーバの .Pa /etc を複製しますので、 メモリファイルシステムから不要なファイルを削除したいかもしれません。 例えば、サーバはファイアウォールを持つがディスクレスではそうでない場合、 .Pa /etc/ipfw.conf を削除したいと思うでしょう。 .Pa /conf/base/ Ns Ao Ar DIRECTORY Ac Ns Pa .remove ファイルを作成することで、これは実現可能です。 例えば、 .Pa /conf/base/etc.remove に相対パスを列挙すると、 ブートスクリプトがこれらをメモリファイルシステムから削除します。 .Pp 最低でも、 .Pa /conf/default/etc/fstab に次の内容を含める必要があります。 .Bd -literal -offset indent : / nfs ro 0 0 :/usr /usr nfs ro 0 0 proc /proc procfs rw 0 0 .Ed .Pp また、 .Pa /conf/default/etc/rc.conf を変更し、 .Nm クライアント用のスタートアップオプションを 含むようにしたバージョンを用意する必要もあります。 .Pa /conf/default/etc/rc.local は空にできますが、サーバ自身の .Pa /etc/rc.local が .Nm システムに使用されることを防げます。 .Pp スタートアップコードで既に設定されているため、 .Pa rc.conf では .Va hostname や .Va ifconfig_* を指定する必要はまずないでしょう。 最後になりますが、 複数の .Nm クライアントで同じ設定ファイルを共有する場合、 .Li `hostname` の値をスイッチ変数に使う .Ic case 文を用いて、 マシン固有の設定を行なうようにすると良いかもしれません。 .It .Tn NFS または .Tn TFTP を使用されロードされる、 .Nm クライアント用のカーネル。 これは NFS クライアントのサポートを含んでいなければなりません。 .Pp .D1 Cd "options NFSCLIENT" .D1 Cd "options NFS_ROOT" .Pp カーネル環境を使ってカーネルにネットワーク設定を渡すことのできない ブート機構を使っているのなら、以下のオプションも含める必要があります。 .Pp .D1 Cd "options BOOTP" .D1 Cd "options BOOTP_NFSROOT" .D1 Cd "options BOOTP_COMPAT" .Pp .Em 注 : PXE 環境では上記のオプションは必要ありません。 .Pp .Nm ブート環境は、ルートファイルシステムを読み取り専用でマウントする時に 一時的なローカルディスクを提供するメモリに裏打ちされたファイルシステムに 依存しています。 そのため、カーネル設定のデバイスセクションには以下を追加することが必要です。 .Pp .D1 Cd "device md" .Pp ファイアウォールを使用する場合、デフォルトを .Dq open にしておかねばならないことは覚えておいて下さい。 オープンにしておかないと、カーネルで .Tn BOOTP パケットの読み書きができなくなります。 .El .Sh セキュリティ上の問題 暗号化されない .Tn NFS を使用してルートパーティションと ユーザパーティションをマウントすると、暗号化キーなどの 情報が洩れるかもしれないことに注意して下さい。 .Sh バグ このマニュアルページはおそらく不完全です。 .Pp .Fx はときどきルートパーティションに書き込みを要求します。 ですから、スタートアップスクリプトでは、元の内容を保存する間、 MFS ファイルシステムをいくつかの位置 ( .Pa /etc や .Pa /var など) に マウントします。この処理はすべての場合を扱えないかもしれません。 .Sh 関連項目 .Xr ethers 5 , .Xr exports 5 , .Xr bootpd 8 , .Xr mountd 8 , .Xr nfsd 8 , .Xr pxeboot 8 , .Xr reboot 8 , .Xr tftpd 8 .Pp .Pa ports/net/etherboot