diskless.8 revision 1.6.2.3

Submitted by:<kuma@jp.FreeBSD.org> Norihiro Kumagai
This commit is contained in:
Kazuo Horikawa 2001-04-23 14:04:19 +00:00
parent d8fde782cd
commit ab35b57046
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=9280

View file

@ -1,6 +1,8 @@
.\" %NetBSD: diskless.8,v 1.11 1997/06/16 07:50:35 mrg Exp %
.\" %FreeBSD: src/share/man/man8/diskless.8,v 1.6.2.3 2001/04/20 23:15:25 luigi Exp %
.\"
.\" Copyright (c) 1994 Gordon W. Ross, Theo de Raadt
.\" Updated by Luigi Rizzo
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@ -25,9 +27,8 @@
.\" (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.6.2.2 2000/12/29 10:18:06 ru Exp %
.\"
.Dd October 2, 1994
.Dd April 18, 2001
.Dt DISKLESS 8
.Os
.Sh 名称
@ -42,15 +43,13 @@
修復中に一時的に利用するために有用です。
このファイルは、クライアントがネットワークを介してブートする時に、
クライアントとサーバとの間で行われる通信の一般的な解説を提供します。
一般的な解説の後に、ディスクレスの Sun クライアントのためのサーバ設定
を行うための詳細な指示を説明します。
.Sh 操作
ネットワークを介してシステムをブートする時に、
クライアントとサーバの間で 3 フェーズのやりとりがあります:
.Pp
.Bl -enum -compact
.It
PROM (もしくはステージ 1 のブートストラップ) がブートプログラムを
ステージ 1 のブートストラップがブートプログラムを
読み込みます。
.It
ブートプログラムがカーネルを読み込みます。
@ -58,286 +57,157 @@ PROM (
カーネルがルートを NFS マウントします。
.El
.Pp
これの各フェーズについて、以降で詳しく記述します。
これの各フェーズについて、以降で詳しく記述します。
.Pp
フェーズ 1 では、PROM がブートプログラムを読み込みます。
PROM の設計の種類はたくさんありますので、
このフェーズは本質的にマシンに依存しています。
Sun のマシンは
クライアントの
.Tn IP
アドレスを決定するために
.Tn RARP
を利用し、その後
.Tn RARP
リプライを送ったところからブートプログラムをダウンロードするために
.Tn TFTP
を使います。
HP 300 シリーズのマシンでは、ブートプログラムをダウンロードするために
.Tn HP リモートメンテナンスプロトコル
を利用します。
典型的なパーソナルコンピュータはネットワークブートプログラムを
ディスケットもしくはネットワークカードの特別な PROM をつかって読み込むかも
しれません。
フェーズ 1 では、ステージ 1 のブートストラップコードが
ブートプログラムを読み込みます。このブートプログラムは、
普通ネットワークカードを制御できます。
ブートプログラムを、BIOS や、ネットワークカード上の BOOT ROM
(PXE, etherboot, netboot) に格納することもできます。また、
ディスクユニット (etherboot, netboot 等) からロードさせることもできます。
.Pp
フェーズ 2 では、ブートプログラムがカーネルを読み込みます。
このフェーズの操作はブートプログラムの設計に依存します。
(ここで記述する設計は Sun と NetBSD/hp300 で使われているものです。)
ブートプログラムは以下を行います:
普通、ブートプログラムは
.Tn BOOTP
プロトコルまたは
.Tn DHCP
プロトコルを用い、クライアントの IP アドレスと
その他のブート情報を取得します。ブート情報は、
NFS サーバ、ルータ、ネームサーバの IP アドレス、
ロードするカーネル名を含みます (これに限らず他の情報が含まれる
こともあります)。
その後、カーネルがロードされます。これには、
(etherboot や netboot の場合のように) NFS を使って直接ロードされる場合と、
pxeboot と呼ばれる中間ローダを通じて、TFTP や NFS を使ってロードされる
場合とがあります。
.Pp
.Bl -tag -width \&2.2 -compact
.It 2.1
.Tn RARP
を使ってクライアントの IP アドレスを入手します。
.It 2.2
.Tn RPC / BOOTPARAMS / WHOAMI
要求をクライアントの IP アドレスとともにブロードキャストして、
クライアント名とサーバの
.Tn IP
アドレスを入手します。
.It 2.3
.Tn RPC / BOOTPARAMS / GETFILE
要求をクライアント名とともに使うことで、
クライアントのルートのサーバにおけるパスを入手します。
.It 2.4
クライアントのルートに対するサーバのパスを指定して
.Xr mountd 8
を呼ぶことで、ルートファイルハンドルを入手します。
.It 2.5
ルートファイルハンドル上で
.Tn NFS
ルックアップを呼ぶことで、カーネルのファイルハンドルを入手します。
.It 2.6
カーネルファイルハンドルに対して
.Tn NFS
読み出しをつかって、カーネルを読み込みます。
.It 2.7
カーネルのエントリポイントに制御を移します。
.El
.Pp
フェーズ 3 では、カーネルはルートを NFS マウントします。
カーネルは、ブートプログラムによって行われた多くの作業を繰り返します。
なぜなら、ブートプログラムが集めた情報をカーネルに受け渡す
標準的な方法が無いからです。
カーネルで利用される工程は以下のようなものです:
.Pp
.Bl -tag -width \&2.2 -compact
.It 3.1
カーネルは、上記の 2.1 と 2.2 で記述されたのと同じ工程を使うことで、
ブートサーバを見付けます。
.It 3.2
カーネルは、上記の 2.3 から 2.5 で記述されたのと同じ工程を使うことで
ルートのための
.Tn NFS
ファイルハンドルを入手します。
.It 3.3
カーネルは、ルートディレクトリが最後に更新された時間を入手するために
.Tn NFS
属性入手機能 (getattr function) を呼び出し、システム時計を調べるために
これを使います。
.El
フェーズ 3 では、カーネルが DHCP や BOOTP を用いて設定情報を獲得し、
ルートファイルシステムのマウントに進み、動作を開始します。
ディスクレスシステムの開始処理中に行なわれるいくつかの動作は、
.Pa /etc/rc.diskless1
.Pa /etc/rc.diskless2
とに列挙されています。
.Sh 設定
クライアントがネットワークを介してブートするためには、
サーバは正しく設定されていなければなりません。
この例では、 どのように Sun クライアントが設定されれば良いかを示します。
他のクライアントの設定も似たようなものです。
ディスクレスクライアントを実行させるためには、次に示すものが必要です。
.Pp
クライアントのホスト名 (hostname) を "myclient"
と仮定します。
.Pp
.Bl -enum
.Bl -bullet -compact
.It
.Pa /etc/ethers
に適切なクライアントのイーサネットアドレスのエントリを追加します:
.Bd -literal -offset indent -compact
8:0:20:7:c5:c7 myclient
.Ed
これは、
.Xr rarpd 8
が使用します。
.It
.Pa /etc/hosts
もしくは DNS データベースに myclient のための
IP アドレスを割り当てます:
.Bd -literal -offset indent -compact
192.197.96.12 myclient
.Ed
.It
Sun のマシンをブートする場合、
.Pa /tftpboot
ディレクトリで
.Xr tftpd 8
を実行するために
.Pa /etc/inetd.conf
が設定されているようにします。
.Pp
HP 300 シリーズのマシンをブートする場合、
ブートプログラムがクライアントに転送されるように
.Pa /etc/rbootd.conf
が正しく設定されているようにします。
エントリは以下のようになるでしょう:
.Bd -literal -offset indent -compact
08:00:09:01:23:E6 SYS_UBOOT # myclient
.Ed
.Pp
さらなる情報は、
.Xr rbootd 8
を参照して下さい。
.It
SPARC マシンをブートする場合、
(
.Pa /usr/mdec/boot
のような)
適当なディスクレスブートローダのコピーを
.Pa /tftpboot
ディレクトリにインストールします。
ブートプログラムが、16 進のクライアントの IP アドレスとドットと
アーキテクチャ名からなるファイル名 (全て英語の大文字) で
アクセスできるようにリンクを作成します。
例えば以下のようになります:
.Bd -literal -offset indent -compact
# cd /tftpboot
# ln -s boot C0C5600C.SUN4
.Ed
.Pp
Sun3 のマシンに対しては、この名前は C0C5600C となるようにします
(Sun3 の PROM はアーキテクチャ名を付加しません)。
使われる名前はアーキテクチャに依存します。
これは、単純にブートクライアントの PROM が何を望んでいるかに
一致させます。
クライアントの PROM が期待されるファイルを読み込むことに
失敗する場合には、
クライアントがどんなファイル名を読み込もうとしているのかを知るために
.Xr tcpdump 1
を使うことができます。
.Pp
HP 300 シリーズのマシンをブートする場合、
ネットワークブートプログラム
.Pa SYS_UBOOT
(これは、インストール前に
.Pa uboot.lif
から呼び出されます
) がディレクトリ
.Pa /usr/mdec/rbootd
にインストールされているようにします。
.It
myclient をブートパラメータデータベース
.Pa /etc/bootparams
に追加します:
.Bd -literal -offset indent -compact
myclient root=server:/export/myclient/root
.Ed
.Pp
注: スワップファイルをマウント可能とするには、mountd が
.Fl r
フラグ付きで開始されていることを確認することが必要です。
.It
myclient のためのスワップファイルを作成します:
.Bd -literal -offset indent -compact
# mkdir /export/myclient
# cd /export/myclient
# dd if=/dev/zero of=swap bs=16k count=1024
.Ed
ここでは、16 メガバイトのスワップファイルを作成しました。
.It
myclient の
.Pa /
ファイルシステムをサーバ上に作成します。
これがどのように行われるかはクライアントのアーキテクチャと
NetBSD ディストリビューションのバージョンに依存します。
サーバのルートファイルシステムをコピーし変更するように
単純であるか、おそらく標準バイナリディストリビューションから
これらのファイルを入手する必要があるかも知れません
.Pp
SunOS とはちがって、クライアントのスワップのためにマウントポイントを
作成する必要があることに注意が必要です:
.Bd -literal -offset indent -compact
# mkdir /export/myclient/root/swap
.Ed
.It
.Pa /etc/exports
にある必要とされるファイルシステムを公開します:
.Bd -literal -offset indent -compact
/usr -ro myclient
# for SunOS:
# /export/myclient -rw=myclient,root=myclient
# for NetBSD:
/export/myclient -maproot=root -alldirs myclient
.Ed
.Pp
サーバとクライアントが同じアーキテクチャである場合、
クライアントはサーバの
.Pa /usr
を共有することができます (これは上記のように実現します)。
そうでない場合、クライアントのための
.Pa /usr
パーティションを別の場所に正しく作成する必要があります。
.Pp
もしサーバが sparc の場合でクライアントが sun3 の場合、
.Pa /export/usr.sun3
を作成し中身も作り、その後以下の
NFS サーバ。これは、適切なパーミッションを付けて
ルートパーティションと /usr パーティションをエクスポートします。
いくつかのシステムファイルにアクセスできるようにするために、
ルートパーティションが -maproot=0 でエクスポートされている限り、
スクリプト rc.diskless{1,2} は読み込み専用パーミッションで動作します。
例として
.Pa /etc/exports
行を作成します:
.Bd -literal -offset indent -compact
/export/usr.sun3 -ro myclient
/export/myclient -rw=myclient,root=myclient
.Ed
.It
最低限、
.Pa /export/myclient/root
にある以下のファイルをコピーしカスタマイズします:
.Bd -literal -offset indent -compact
# cd /export/myclient/root/etc
# cp fstab.nfs fstab
# cp /etc/hosts hosts
# echo myclient > myname
# echo 192.197.96.12 > hostname.le0
は次に示す行を含みます。
.Bd -literal -offset indent
<ROOT> -maproot=0 -alldirs <list of diskless clients>
/usr -alldirs <list of diskless clients>
.Ed
.Pp
上記の "le0" はクライアントがブートのために使う
ネットワークインタフェース名に置き換えなければなりません。
ここで <ROOT> は、ルートパーティションのサーバ上でのマウントポイントです。
スクリプト
.Pa /usr/share/examples/diskless/clone_root
を使い、共用可能な読み込み専用ルートパーティションを
生成することができます。
しかし、同様に、サーバ自身が使用するルートディレクトリを
(読み込み専用で) エクスポートさせると決めることもできます。
.Pp
.It
クライアントの
.Pa /etc/fstab
(これはつまり
.Pa /export/myclient/root/etc/fstab
です)
にあるクリティカルなマウントポイントとスワップファイルを
正しく設定します。
つまり以下のようにします:
.Bd -literal -offset indent -compact
myserver:/export/myclient/root / nfs rw 0 0
myserver:/usr /usr nfs rw 0 0
myserver:/export/myclient/swap none swap sw,nfsmntpt=/swap
bootp または dhcp サーバ。bootpd は
.Pa /etc/inetd.conf
.Pa bootps
行のコメントを外すことで使用可能にすることができます。
.Pa /etc/bootptab
の例は次のようになります。
.Bd -literal -offset indent
.default:\
hn:ht=1:vm=rfc1048:\
:sm=255.255.255.0:\
:sa=<SERVER>:\
:gw=<GATEWAY>:\
:rp="<SERVER>:<ROOT>":
<CLIENT>:ha=0123456789ab:tc=.default
.Ed
.Pp
.Pa /etc/fstab
にスワップファイルを指定しなければならないことに注意してください。
指定しないとスワップが使用されません。
.El
.Sh 関連ファイル
.Bl -tag -width /usr/mdec/rbootd -compact
.It Pa /etc/ethers
わかっているクライアントのイーサネットアドレス
.It Pa /etc/bootparams
クライアントのルートパス名
.It Pa /etc/exports
公開された NFS マウントポイント
.It Pa /etc/rbootd.conf
HP リモートブートデーモンのための設定ファイル
.It Pa /tftpboot
Sun PROM によって読み込まれるブートプログラムの場所
.It Pa /usr/mdec/rbootd
HP ブート ROM によって読み込まれるブートプログラムの場所
SERVER, GATEWAY, CLIENT の意味は明らかでしょう。
.Pp
.It
ルートパーティション上に、ディスクレスクライアント用の設定ファイルを
生成します。これらは、
.Pa /cont/${i}/etc
に置きます。ここで、${i} は、"default"、またはクライアントの
サブネットブロードキャストアドレス、またはクライアントの
IP アドレスです。
.Pp
/etc/rc の主要な部分の実行 (これには、rc.conf の読み込みも含まれます)
の前に、/etc/rc.diskless.1 によって、ファイルが
上に記したディレクトリから /etc にコピーされ
(/etc にあったそれ以前の内容は上書きされます)、
最も汎用のものから開始されます。
.Pp
最低でも、
.Pa /conf/default/etc/fstab
に次の内容を含める必要があります。
.Bd -literal -offset indent
<SERVER>:<ROOT> / nfs ro 0 0
<SERVER>:/usr /usr nfs ro 0 0
proc /proc procfs rw 0 0
.Ed
.Pp
また、
.Pa /conf/default/etc/rc.conf
を変更し、ディスクレスクライアント用のスタートアップオプションを
含むようにしたバージョンを用意する必要もあります。
.Pp
スタートアップコードで既に設定されているため、
hostname や ifconfig_* を指定する必要はまずないでしょう。
一方、サーバのローカルスタートアップファイルを使用しないようにするため、
local_startup="" を設定する必要があるでしょう。
最後になりますが、
複数のディスクレスクライアントで同じ設定ファイルを共有する場合、
`hostname` の値をスイッチ変数に使う case 文を用いて、
マシン固有の設定を行なうようにするといいかもしれません。
.Pp
.It
カーネルを構築します。その際、設定ファイル
(/sys/i386/conf/DISKLESS など) には、少なくとも
次のオプションを含めておきます。
.Bd -literal -offset indent
options MFS
options BOOTP
options BOOTP_NFSROOT
options BOOTP_COMPAT
.Ed
.Pp
ファイアウォールを使用する場合、デフォルトをオープンにしておかねば
ならないことは覚えておいて下さい。オープンにしておかないと、
カーネルで bootp パケットの読み書きができなくなります。
.El
.Sh セキュリティ上の問題
暗号化されない NFS を使用してルートパーティションと
ユーザパーティションをマウントすると、暗号化キーなどの
情報が洩れるかもしれないことに注意して下さい。
.Pp
.Sh バグ
このマニュアルページはおそらく不完全です。
.Pp
FreeBSD はときどきルートパーティションに書き込みを要求します。
ですから、スタートアップスクリプトでは、元の内容を保存する間、
MFS ファイルシステムをいくつかの位置 (/etc や /var など) に
マウントします。この処理はすべての場合を扱えないかもしれません。
.Sh 関連項目
.Xr bootparams 5 ,
.Xr ethers 5 ,
.Xr exports 5 ,
.Xr bootparamd 8 ,
.Xr bootpd 8 ,
.Xr mountd 8 ,
.Xr nfsd 8 ,
.Xr rarpd 8 ,
.Xr rbootd 8 ,
.Xr pxeboot 8 ,
.Xr reboot 8 ,
.Xr tftpd 8
.Xr tftpd 8 ,
.Xr ports/net/etherboot