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 % .\" %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 .\" Copyright (c) 1994 Gordon W. Ross, Theo de Raadt
.\" Updated by Luigi Rizzo
.\" All rights reserved. .\" All rights reserved.
.\" .\"
.\" Redistribution and use in source and binary forms, with or without .\" 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 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" 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 .Dt DISKLESS 8
.Os .Os
.Sh 名称 .Sh 名称
@ -42,15 +43,13 @@
修復中に一時的に利用するために有用です。 修復中に一時的に利用するために有用です。
このファイルは、クライアントがネットワークを介してブートする時に、 このファイルは、クライアントがネットワークを介してブートする時に、
クライアントとサーバとの間で行われる通信の一般的な解説を提供します。 クライアントとサーバとの間で行われる通信の一般的な解説を提供します。
一般的な解説の後に、ディスクレスの Sun クライアントのためのサーバ設定
を行うための詳細な指示を説明します。
.Sh 操作 .Sh 操作
ネットワークを介してシステムをブートする時に、 ネットワークを介してシステムをブートする時に、
クライアントとサーバの間で 3 フェーズのやりとりがあります: クライアントとサーバの間で 3 フェーズのやりとりがあります:
.Pp .Pp
.Bl -enum -compact .Bl -enum -compact
.It .It
PROM (もしくはステージ 1 のブートストラップ) がブートプログラムを ステージ 1 のブートストラップがブートプログラムを
読み込みます。 読み込みます。
.It .It
ブートプログラムがカーネルを読み込みます。 ブートプログラムがカーネルを読み込みます。
@ -58,286 +57,157 @@ PROM (
カーネルがルートを NFS マウントします。 カーネルがルートを NFS マウントします。
.El .El
.Pp .Pp
これの各フェーズについて、以降で詳しく記述します。 これの各フェーズについて、以降で詳しく記述します。
.Pp .Pp
フェーズ 1 では、PROM がブートプログラムを読み込みます。 フェーズ 1 では、ステージ 1 のブートストラップコードが
PROM の設計の種類はたくさんありますので、 ブートプログラムを読み込みます。このブートプログラムは、
このフェーズは本質的にマシンに依存しています。 普通ネットワークカードを制御できます。
Sun のマシンは ブートプログラムを、BIOS や、ネットワークカード上の BOOT ROM
クライアントの (PXE, etherboot, netboot) に格納することもできます。また、
.Tn IP ディスクユニット (etherboot, netboot 等) からロードさせることもできます。
アドレスを決定するために
.Tn RARP
を利用し、その後
.Tn RARP
リプライを送ったところからブートプログラムをダウンロードするために
.Tn TFTP
を使います。
HP 300 シリーズのマシンでは、ブートプログラムをダウンロードするために
.Tn HP リモートメンテナンスプロトコル
を利用します。
典型的なパーソナルコンピュータはネットワークブートプログラムを
ディスケットもしくはネットワークカードの特別な PROM をつかって読み込むかも
しれません。
.Pp .Pp
フェーズ 2 では、ブートプログラムがカーネルを読み込みます。 フェーズ 2 では、ブートプログラムがカーネルを読み込みます。
このフェーズの操作はブートプログラムの設計に依存します。 このフェーズの操作はブートプログラムの設計に依存します。
(ここで記述する設計は Sun と NetBSD/hp300 で使われているものです。) 普通、ブートプログラムは
ブートプログラムは以下を行います: .Tn BOOTP
プロトコルまたは
.Tn DHCP
プロトコルを用い、クライアントの IP アドレスと
その他のブート情報を取得します。ブート情報は、
NFS サーバ、ルータ、ネームサーバの IP アドレス、
ロードするカーネル名を含みます (これに限らず他の情報が含まれる
こともあります)。
その後、カーネルがロードされます。これには、
(etherboot や netboot の場合のように) NFS を使って直接ロードされる場合と、
pxeboot と呼ばれる中間ローダを通じて、TFTP や NFS を使ってロードされる
場合とがあります。
.Pp .Pp
.Bl -tag -width \&2.2 -compact フェーズ 3 では、カーネルが DHCP や BOOTP を用いて設定情報を獲得し、
.It 2.1 ルートファイルシステムのマウントに進み、動作を開始します。
.Tn RARP ディスクレスシステムの開始処理中に行なわれるいくつかの動作は、
を使ってクライアントの IP アドレスを入手します。 .Pa /etc/rc.diskless1
.It 2.2
.Tn RPC / BOOTPARAMS / WHOAMI .Pa /etc/rc.diskless2
要求をクライアントの 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
.Sh 設定 .Sh 設定
クライアントがネットワークを介してブートするためには、 ディスクレスクライアントを実行させるためには、次に示すものが必要です。
サーバは正しく設定されていなければなりません。
この例では、 どのように Sun クライアントが設定されれば良いかを示します。
他のクライアントの設定も似たようなものです。
.Pp .Pp
クライアントのホスト名 (hostname) を "myclient" .Bl -bullet -compact
と仮定します。
.Pp
.Bl -enum
.It .It
.Pa /etc/ethers NFS サーバ。これは、適切なパーミッションを付けて
に適切なクライアントのイーサネットアドレスのエントリを追加します: ルートパーティションと /usr パーティションをエクスポートします。
.Bd -literal -offset indent -compact いくつかのシステムファイルにアクセスできるようにするために、
8:0:20:7:c5:c7 myclient ルートパーティションが -maproot=0 でエクスポートされている限り、
.Ed スクリプト rc.diskless{1,2} は読み込み専用パーミッションで動作します。
これは、 例として
.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
を作成し中身も作り、その後以下の
.Pa /etc/exports .Pa /etc/exports
行を作成します: は次に示す行を含みます。
.Bd -literal -offset indent -compact .Bd -literal -offset indent
/export/usr.sun3 -ro myclient <ROOT> -maproot=0 -alldirs <list of diskless clients>
/export/myclient -rw=myclient,root=myclient /usr -alldirs <list of diskless clients>
.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
.Ed .Ed
.Pp .Pp
上記の "le0" はクライアントがブートのために使う ここで <ROOT> は、ルートパーティションのサーバ上でのマウントポイントです。
ネットワークインタフェース名に置き換えなければなりません。 スクリプト
.Pa /usr/share/examples/diskless/clone_root
を使い、共用可能な読み込み専用ルートパーティションを
生成することができます。
しかし、同様に、サーバ自身が使用するルートディレクトリを
(読み込み専用で) エクスポートさせると決めることもできます。
.Pp
.It .It
クライアントの bootp または dhcp サーバ。bootpd は
.Pa /etc/fstab .Pa /etc/inetd.conf
(これはつまり
.Pa /export/myclient/root/etc/fstab .Pa bootps
です) 行のコメントを外すことで使用可能にすることができます。
にあるクリティカルなマウントポイントとスワップファイルを .Pa /etc/bootptab
正しく設定します。 の例は次のようになります。
つまり以下のようにします: .Bd -literal -offset indent
.Bd -literal -offset indent -compact .default:\
myserver:/export/myclient/root / nfs rw 0 0 hn:ht=1:vm=rfc1048:\
myserver:/usr /usr nfs rw 0 0 :sm=255.255.255.0:\
myserver:/export/myclient/swap none swap sw,nfsmntpt=/swap :sa=<SERVER>:\
:gw=<GATEWAY>:\
:rp="<SERVER>:<ROOT>":
<CLIENT>:ha=0123456789ab:tc=.default
.Ed .Ed
.Pp .Pp
.Pa /etc/fstab SERVER, GATEWAY, CLIENT の意味は明らかでしょう。
にスワップファイルを指定しなければならないことに注意してください。 .Pp
指定しないとスワップが使用されません。 .It
.El ルートパーティション上に、ディスクレスクライアント用の設定ファイルを
.Sh 関連ファイル 生成します。これらは、
.Bl -tag -width /usr/mdec/rbootd -compact .Pa /cont/${i}/etc
.It Pa /etc/ethers に置きます。ここで、${i} は、"default"、またはクライアントの
わかっているクライアントのイーサネットアドレス サブネットブロードキャストアドレス、またはクライアントの
.It Pa /etc/bootparams IP アドレスです。
クライアントのルートパス名 .Pp
.It Pa /etc/exports /etc/rc の主要な部分の実行 (これには、rc.conf の読み込みも含まれます)
公開された NFS マウントポイント の前に、/etc/rc.diskless.1 によって、ファイルが
.It Pa /etc/rbootd.conf 上に記したディレクトリから /etc にコピーされ
HP リモートブートデーモンのための設定ファイル (/etc にあったそれ以前の内容は上書きされます)、
.It Pa /tftpboot 最も汎用のものから開始されます。
Sun PROM によって読み込まれるブートプログラムの場所 .Pp
.It Pa /usr/mdec/rbootd 最低でも、
HP ブート ROM によって読み込まれるブートプログラムの場所 .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 .El
.Sh セキュリティ上の問題
暗号化されない NFS を使用してルートパーティションと
ユーザパーティションをマウントすると、暗号化キーなどの
情報が洩れるかもしれないことに注意して下さい。
.Pp
.Sh バグ
このマニュアルページはおそらく不完全です。
.Pp
FreeBSD はときどきルートパーティションに書き込みを要求します。
ですから、スタートアップスクリプトでは、元の内容を保存する間、
MFS ファイルシステムをいくつかの位置 (/etc や /var など) に
マウントします。この処理はすべての場合を扱えないかもしれません。
.Sh 関連項目 .Sh 関連項目
.Xr bootparams 5 ,
.Xr ethers 5 , .Xr ethers 5 ,
.Xr exports 5 , .Xr exports 5 ,
.Xr bootparamd 8 , .Xr bootpd 8 ,
.Xr mountd 8 , .Xr mountd 8 ,
.Xr nfsd 8 , .Xr nfsd 8 ,
.Xr rarpd 8 , .Xr pxeboot 8 ,
.Xr rbootd 8 ,
.Xr reboot 8 , .Xr reboot 8 ,
.Xr tftpd 8 .Xr tftpd 8 ,
.Xr ports/net/etherboot