  NFS-Root Mini-Howto
  Andreas Kostyrka, andreas@ag.or.at
  V8, 8 August 1997
  井伊 亮太, pessi@kmc.kyoto-u.ac.jp
  中野 博樹, cas@kaba.or.jp, cas@kuis.kyoto-u.ac.jp
  早川 仁, cz8cb01@linux.or.jp
  v8j, 1999年 9月15日

  この Mini-HOWTO では、ルートファイルシステムを NFS でマウントする
  ``ディスクレス'' Linux マシンをセットアップする方法について説明しま
  す。この Mini-Howto の最新版は常に ftp://sun-
  site.unc.edu/pub/Linux/docs/HOWTO/mini/NFS-Root もしくは最寄りの sun-
  site ミラーサイトから取得できます。
  ______________________________________________________________________

  目次

  1. Copyright
     1.1 この文書に協力してくれた方々

  2. 概観
  3. サーバーの設定
     3.1 カーネルのコンパイル
     3.2 root ファイルシステムの作成
        3.2.1 ファイルシステムのコピー
        3.2.2 ルートファイルシステムに対する変更
        3.2.3 ファイルシステムの export
        3.2.4 RARP の設定
        3.2.5 BOOTP の設定
        3.2.6 ハードウェアアドレスを見つける

  4. ディスクレスマシンを起動
     4.1 boot rom を使用
     4.2 raw カーネルディスクを使う
     4.3 ブートローダーと RARP を使う
     4.4 RARP なしでブートローダーを使う

  5. 既知の問題
     5.1 /sbin/init が起動しない。
     5.2 /dev トラブル

  6. その他の話題
  7. 翻訳について

  ______________________________________________________________________

  1.  Copyright

  （訳注：読者の利便を考え日本語訳をしますが、原文の Copyright が優先し
  ます）

  (c) 1996 Andreas Kostyrka (e9207884@student.tuwien.ac.at or
  andreas@ag.or.at)

  Unless otherwise stated, Linux HOWTO documents are copyrighted by
  their respective authors. Linux HOWTO documents may be reproduced and
  distributed in whole or in part, in any medium physical or electronic,
  as long as this copyright notice is retained on all copies. Commercial
  redistribution is allowed and encouraged; however, the author would
  like to be notified of any such distributions.

  特に断らない限り、Linux HOWTO ドキュメントはそれぞれの著者の著作物で
  す。Linux HOWTO ドキュメントは、全てのコピーにおいて copyright が保持
  されている限り、どのような物理的あるいは電子的なメディアによっても、全
  部あるいはその一部を複製し、配布することができます。商用の再配布につい
  ても許可や奨励をされていますが、そのようないかなる配布に関しても、著者
  は通知されることを望んでいます。

  All translations, derivative works, or aggregate works incorporating
  any Linux HOWTO documents must be covered under this copyright notice.
  That is, you may not produce a derivative work from a HOWTO and impose
  additional restrictions on its distribution. Exceptions to these rules
  may be granted under certain conditions; please contact the Linux
  HOWTO coordinator at the address given below.

  全ての翻訳、派生的な著作物、あるいはいずれかの Linux HOWTO 文書の内容
  を取り入れて集合的な著作物はこの copyright の下で保護される必要があり
  ます。つまり、いずれかの HOWTO をもとにした著作物を作ってもその配布に
  制限を追加してはいけません。ある条件の下では、これらの規則に対する例外
  が認められる場合があります。下記のアドレスの Linux HOWTO のコーディネ
  ータに連絡を取ってください。

  In short, we wish to promote dissemination of this information through
  as many channels as possible. However, we do wish to retain copyright
  on the HOWTO documents, and would like to be notified of any plans to
  redistribute the HOWTOs.

  要するに、私たちは可能な限り多くの経路を通じてこの情報の普及を促進する
  ことを望んでいます。しかし、私たちは HOWTO の文書の著作権を保持するこ
  とも強く望んでいますし、またそれら HOWTO の文書を再配布するどんな計画
  も私たちに知らせていただければ幸甚に思います。

  If you have questions, please contact Andreas Kostyrka
  <mailto:andreas@ag.or.at>, the author of this mini-HOWTO, or Tim
  Bynum, the Linux HOWTO coordinator, at <mailto:linux-
  howto@sunsite.unc.edu> via email.

  もしご質問があれば e-mail で、この mini-HOWTO の著者である Andreas
  Kostyrka <mailto:andreas@ag.or.at>、あるいは Linux HOWTO のコーディネ
  ーターの Tim Bynum <mailto:linux-howto@sunsite.unc.edu> までどうぞ。

  1.1.  この文書に協力してくれた方々

  o  Avery Pennarun <apenwarr@foxnet.net> (LILOなしで起動する方法につい
     て)

  o   Ofer Maor <ofer@hadar.co.il> (ディスクレスマシンの設定についてよい
     mini howto を提供してくれた)

  o  Christian Leutloff <leutloff@sundancer.tng.oche.de> (netboot に関し
     ての情報)

  2.  概観

  一般に、ディスクレスマシンには以下のような問題があります。

  o  自身の IP アドレスを見つける必要があり、また必要ならその他の
     Ethernet の設定もです。

  o  NFS サーバーと、自身の root ファイルシステムのマウントすべきパスを
     知る必要があります。

  カーネル（1.3.7x 以降）の現在の NFSROOT の実装では、次の ``やりかた''
  で上記の問題を解決しています。

  o  IP アドレスを RARP で取得したり、Ethernet 関係の設定全てを LILO や
     LOADLIN から渡されるカーネルパラメータから取得することができます。

  o  マウントする NFS のパスをカーネルパラメータで渡すこともできます。渡
     されなかった場合、カーネルは RARP サーバーを NFS サーバーでもあると
     見なして、パスにはコンパイル時に指定されたデフォルト値を使用しま
     す。（現在のデフォルト値は /tftpboot/<そのマシンのIP アドレス>で
     す）

  o  クライアントの設定は BOOTP から取得することもできます。

  ディスクレス環境の設定を始める前に、ブートするために LILO と LOADLIN
  のどちらを使用するかを決めておいた方がよいでしょう。これらを使用すると
  融通性があるという利点がありますが、速度の点では不利です。LILO が無い
  ほうが Linux カーネルの起動はより早くなります。この点は考慮した方がよ
  いかも知れません。

  3.  サーバーの設定

  3.1.  カーネルのコンパイル

  サーバーのカーネルには RARP サポートを設定しておいたほうがよいでしょ
  う。カーネルパラメーター無しで起動する時には必要になりますから。ただし
  クライアントがサーバーと同じサブネット内になければ RARP は役に立たない
  でしょう。

  ディスクレスマシン用のカーネルには最低限、次のような機能をコンパイル時
  に組み込む必要があるでしょう。

  o  NFS ファイルシステム(ext2 サポートを組み込む必要はありません。モ
     ジュールで充分です)

  o  ``Root on NFS'' の有効化（enabled）

  o  ディスクレスマシンのネットワークカード用の Ethernet ドライバー

  o  ニーズにもよりますが、NFS-Root の為に RARP や BOOTBP サポートを組み
     込む必要があるかも知れません。（これらは make config をしたときに
     NFS の後に聞かれます）

  ディスクレスマシンをカーネルパラメーター無しで起動する場合、ルートデバ
  イスを 0:255 にセットする必要もあります。ダミーデバイスを作るには
  mknod /dev/nfsroot b 0 255 を実行します。デバイスファイルを作成した
  後、カーネルイメージのルートデバイスを rdev <kernel-image>
  /dev/nfsroot で設定することができます。

  3.2.  root ファイルシステムの作成

  3.2.1.  ファイルシステムのコピー

  Warning／警告：これらの指示はうまく動作するかもしれませんが、環境に
  よっては決して適切なものではありません。クライアントのためのルートファ
  イルシステム設定の、よりよい方法については Ofer Maor
  <ofer@hadar.co.il> の NFS-Root-Client mini howto を参照してください。

  クライアントのためのルートツリーをサーバー上のどこに置くのかを決めた
  後、（例えば）mkdir -p <directory> と tar cClf / - | tar xpCf
  <directory> - を実行して作成してください。

  LILO を使わずにカーネルを起動する場合、ルートディレクトリは
  /tftpboot/<IP-address> の必要があります。それが嫌なら、カーネルソース
  の一番上（訳注：つまり /usr/src/linux)にある Makefile で変更できます。
  NFS_ROOT = -DNFS_ROOT="/tftpboot/%s" のような行を探してください。変更
  した場合カーネルを再コンパイルする必要があります。

  3.2.2.  ルートファイルシステムに対する変更

  さて、不必要なファイルを取り除いて、/etc/rc.d スクリプトをチェックしま
  しょう。いくつかの重要な点があります。

  o  重要なことの一つとしては eth0 の設定があります。ディスクレスマシン
     は eth0 を、少なくとも部分的には、設定して起動します。ディスクレス
     マシンの IP アドレスをサーバの IP アドレスとして設定するのは、利口
     な行為とはいえませんね。（筆者が最初のころにやってしまったことの一
     つです）

  o  もう一つの点はディスクレスマシンの /etc/fstab です。NFS ファイルシ
     ステム用の設定の必要があります。

  o  警告／WARNING: サーバーのルートファイルシステムと、クライアント
     （ディスクレスマシン）のファイルシステムを混同しないこと。（サーバ
     ーの rc.inet1 を修正してしまい、なぜ（rc.int1 で設定したにもかかわ
     らず）クライアントが動作しないのか、と考え込んだことがあります）

  3.2.3.  ファイルシステムの export

  ルートディレクトリをディスクレスマシン用に export します。方法が不明の
  場合、exports(5) を参照してください。大抵の場合、変更後に nfsd/mountd
  の再起動が必要となります。RedHat の場合、/etc/rc.d/init.d/nfs stop ;
  /etc/rc.d/init.d/nfs start  を実行することで簡単にできます。

  3.2.4.  RARP の設定

  RARP をネットワーク上のどこかでセットアップします。クライアントを
  nfsroot パラメーターなしで起動する場合、RARP サーバーは NFS サーバーの
  必要がありますが、普通は NFS サーバーでしょう。このためには、RARP サポ
  ート付きのカーネルを走らせる必要があります。

  設定をするために、次のスクリプトを実行してください（また、サーバーの
  /etc/rc.d のどこかにそのスクリプトをインストールしておきましょう）

  /sbin/rarp -s <IP アドレス> <ハードウェアアドレス>

     IP アドレス
        はディスクレスマシンの IP アドレス

     ハードウェアアドレス
        はディスクレスマシンのネットワークカードの Ethernet アドレスで
        す。

  例： /sbin/rarp -s 131.131.90.200 00:00:c0:47:10:12

  IP アドレスの代わりにホスト名を使うこともできます。ただし、サーバーが
  IP アドレスを（/etc/hosts や DNS を検索して）見つけることができれば、
  ですが。

  3.2.5.  BOOTP の設定

  BOOTP を設定するためには /etc/bootptab を編集する必要がありま
  す。bootpd(8) や bootptab(5) の man page を参照してください。

  3.2.6.  ハードウェアアドレスを見つける

  ハードウェアアドレスなんて知りません。どうすれば見つけられるんでしょう
  か？

  o  作ったカーネルを起動して、ネットワークカードが認識されている行が表
     示されるのを待ちましょう。通常 6 バイトの 16 進数が含まれています
     が、それがそのカードのハードウェアアドレスのはずです。

  o  TCP/IP ネットワークを有効にした何かの OS でディスクレスマシンを起動
     します。それからそのマシンからサーバーへ ping を実行し、/sbin/arp
     -a で ARP キャッシュの中を見ます。

  4.  ディスクレスマシンを起動

  4.1.  boot rom を使用

  私はまだそういう力業な物を使ったことがありませんから、次の tips を挙げ
  ることしかできません（Christian Leutloff
  <leutloff@sundancer.tng.oche.de> のお作法）。

  o  ``normal'' の boot rom を使うことはできません。

  o  Gero Kuhlmann による netboot パケットが存在します。これは Linux 用
     の boot rom と、さらなる情報を提供します。netboot はお近くの Linux
     ミラーサイト、または Debian package(netboot-0.4)から入手できます。

  o   boot rom に付属のドキュメントを注意深く読んでください。

  o  おそらく、サーバーの tftpd を有効化する必要があるでしょうが、使用す
     る boot rom のカーネルのロード方法に依存します。

  o  各 Linux ディストリビューションの bootrom ベンダーについて、上記で
     述べた以外のどのような情報でも歓迎します。ここに追加しますので。

  4.2.  raw カーネルディスクを使う

  デフォルトのネーミングに従った正しい名前でルートファイルシステムを
  export していて、NFS サーバーが RARP サーバーである場合（つまり両者の
  マシンは同一のサブネット内に存在）、カーネルをディスクに cat するだけ
  で起動することができます。（カーネルのルートデバイスを 0:255 にする必
  要があります） これはつまり、サーバーのルートディレクトリが
  /tftpboot/IP アドレス にあると仮定します（この値はカーネルコンパイル時
  に変更できます）。

  4.3.  ブートローダーと RARP  を使う

  カーネル起動時に必要なパラメーター全てと、nfsroot=<サーバーの IP アド
  レス>:</path/to/mount> を渡してください。ここで サーバーの IP アドレス
  は NFS サーバーの IP アドレスを、/path/to/mount はルートディレクトリの
  パスを表します。

  Tips:

  o  LILO を使うのであれば、``lock'' 機能の使用は考慮に値します。まず単
     純に全ての正確なパラメーターを入力し、``lock'' を追加してください。
     次回の起動時に LILO をタイムアウトさせます。

     [訳注：lock すると次のブートでも同じパラメータで起動します。詳しく
     は LILO の README を参照してください。]

  o   ディスクレスマシン用のブートディスクを作るときに、lilo.conf で
     append= 機能を使うこともできます。

  4.4.  RARP なしでブートローダーを使う

  カーネルに、nfsroot に加えて nfsaddrs=<client-IP>:<srv-IP>:<gw-
  IP>:<netm-IP>:<hostname> 引数を渡してください。カーネルは eth0 を渡さ
  れた引数で設定します。

     client-IP
        ディスクレスマシンの IP アドレス

     srv-IP
        NFS サーバーの IP アドレス

     gw-IP
        ゲートウェイ

     netm-IP
        ネットマスク

     hostname
        マシンの名前（ホスト名）

  5.  既知の問題

  5.1.  /sbin/init が起動しない。

  /sbin/init でよくある問題は、いくつかの（少なくとも）現行のディストリ
  ビューションの /sbin/init は動的リンクになっていることです。ですからク
  ライアントに対して正しい /lib の設定をする必要があります。簡単な方法と
  しては、（クライアント用の）/sbin/init を、静的リンクされた ``Hello
  World'' プログラムと置き換えてみることです。これにより、もっと根本的な
  問題か``単なる'' 動的リンクの問題かを見極めることができます。

  5.2.  /dev トラブル

  起動時に tty に関するよくわからないメッセージが表示された場合、クライ
  アントの /dev ディレクトリで MAKEDEV スクリプトを実行する必要があるで
  しょう。これは dev 番号に 64 bit を使用している、いくつかのサーバー OS
  では動作しないと言う噂がありますが、実行すべきでしょう。この問題が発生
  した場合、どの os で起きたかを私にメールしてください。可能性のある解決
  方法は起動プロセスの初期で、ram ディスクに小さな /dev を作成して、毎回
  デバイスのノードを再インストールすることです。

  6.  その他の話題

  o   BOOTP のクライアントは
     ftp://sunsite.unc.edu/system/Network/admin/bootpc.v045.tgz にありま
     す。

     initrd（Linux 2.0 以降からサポートされました）により、ディスクレス
     マシンはとてもうまく動作します。実際 initrd はさらにカスタマイズし
     た設定を行う場合の、より進んだ選択肢です。

  o  bootpd をそのまま用いる起動の場合には、これ(BOOTPクライアント)は実
     のところ必要ないと思われます。というのも、Linux 2.0 では RARP の代
     わりに BOOTPを使用するオプションも提供されているからです(より正確に
     は、両方をカーネルコンパイル時に組み込むことができます。その場合
     は、最初に応答が返ってきた方で動作することになります)。

  o  カーネルソースのドキュメントディレクトリに、NFS ルートシステムにつ
     いてのドキュメントがあります。

  o  NFS 経由で swap を可能にするパッチもあります。それは私にメールで送
     られてきましたが（個人的に非常に忙しかった時ので）、メールを無くし
     てしまいました :(  おそらく http://www.linuxhq.com/ の unofficial
     patches セクションから入手できるはずです。

  o  私の PGP 公開鍵は andreas@ag.or.at を finger することで手に入れられ
     ます。 fingerprint はこれです: F1 F7 43 D5 07 C4 6C 87  BF 6B 33 A2
     2C EE 5A F9.

  7.  翻訳について

  当文書は井伊 亮太さん、中野 博樹さんの翻訳した 1996/08/06 版を、早川が
  最新版（1997/08/08）の LDP で更新したものです。

  日本語訳：井伊 亮太 <pessi@kmc.kyoto-u.ac.jp>
       中野 博樹 <cas@kaba.or.jp>, <cas@kuis.kyoto-u.ac.jp> (1996/08/06)
  日本語訳：早川 仁  <cz8cb01@linux.or.jp> (1999/09/15)

