  Diskless Linux Mini Howto
  Robert Nemkin buci@math.klte.hu 著
  v0.0.3 12 Sep 1996
  堀江誠一 shorie@ibm.net 訳

  この文書はディスク無しの Linux 機をどのように構成するかについて説明し
  ます。版権は Robert Nemkin に所属します。版権の扱いは GPL に従います。
  この文書を英語に翻訳してくれた Bela Kis <bkis@cartan.math.klte.hu> に
  感謝します。

  注意: この文書はかなり以前に書かれたものなので、いまどきの Linux 環境
  にはあてはまらない箇所があります。 (JF Project)
  ______________________________________________________________________

  目次

  1. 変更点
  2. ディスクなしの Linux 機を設定する方法
  3. 関連文書
  4. ハードウェア
  5. 基本的な考え方
     5.1 PC を設定する
     5.2 サーバー上に bootpd を設置する
     5.3 サーバー上の bootpd の構成を行う
     5.4 tftp を理解する
     5.5 遠隔サーバー上に最小構成の Linux を組む
     5.6 tftp の構成を行う
     5.7 最後の作業

  6. メモリ及びディスクの必要量。速度
  7. 発生しうるエラー
  8. 誤り、および将来に向けての文書の更新

  ______________________________________________________________________

  1.  変更点

  o  v0.0.3 12 Sep 1996: 小さな誤りをいくつか修正

  2.  ディスクなしの Linux 機を設定する方法

  この文書はディスク無しの Linux 機をどのように構成するのかを説明しま
  す。 Linux をフロッピーもハードディスクもないような機械で走らせなけれ
  ばならないことがあるかもしれません。ネットワークと、bootp や tftp や
  NFS サーバーを持った Unix 機、そして EPROM ライターがあれば、Linux を
  ハードディスクもフロッピーディスクも無しで起動することができます。

  3.  関連文書

  o  NFS-root Mini Howto

  o  Linux NET-2/3-HOWTO Terry Dawson, 94004531@postoffice.csu.edu.au

  o  新しいカーネルの設定とコンパイルについては /usr/src/linux/README を
     参照して下さい。

  4.  ハードウェア

  この文書に書いてある内容は以下の構成の機器で確認しています。

  o  ブートサーバーとしてSun-OS 4.1.3

  o  Slackware 2.3 + Linux 1.2.8 + WD 8013 Ethernet カード

  o  稼動している Ethernet LAN

  5.  基本的な考え方

  基礎となる考え方は以下の通りです。PC は、IP アドレスをブートサーバーか
  ら bootp プロトコルによって入手します。この時、IP アドレスの初期値は
  0.0.0.0 であり、カーネルは tftp プロトコルを用いて入手します。 (-- セ
  グメントを超えて(ルーターを通して）起動するというのは一筋縄でいくこと
  ではありません。そこで、サーバーとディスク無し機を同じネットワークセグ
  メントに設定するか、サーバーの位置を特定するためにあなたのルーターのヘ
  ルパー UDP アドレスを設定して下さい。詳しくはルーターの製品情報を参照
  してください--)

  以上を行うには、以下の手続きを参照して下さい。

  5.1.  PC を設定する

  まず、nfsブートパッケージを入手して下さい（手近な Linux ミラーサイトの
  the /pub/Linux/system/Linux-boot ディレクトリーに有ります）。このパッ
  ケージには WD8013 用の起動 EPROM イメージが有り、そのまま ROM ライター
  で焼くことができます。

  PC の準備には他の方法もあります。

  o  対象機が完全にディスクレスというわけでもなければ、小さな DOS プログ
     ラムから起動することもできます。

  o  また、上のパッケージのバイナリイメージを収めたフロッピーを使う手も
     あります。

     後者の場合、フロッピーに dd コマンドでイメージを書き込みます。

  このイメージは bootp と tftp クライアントを持っています。他に、 Linux
  のカーネルを用意しなければなりません。このカーネルは nfs-root オプショ
  ン付きで構築されていなければなりません。

  o  もし、最新の安定したカーネルである Linux-1.2.13 を使用しているなら
     ば、 nfsboot パッケージのカーネルパッチファイルが必要です。 (--
     patch(1) を参照してください--)

  o  もしも最新ではあっても安定していない Linux-1.3.x シリーズを使用して
     いるならば nfs-root オプションでカーネルを構成しなければなりませ
     ん。

     フロッピーやハードディスクといったブロックデバイスをカーネルに取り
     込む必要は有りません。しかし、TCP/IP 対応機能、WD Ethernet カード対
     応、 NFS ファイルシステムへの対応機能は必須です。これらの機能を設定
     したら、カーネルをコンパイルして下さい。

  5.2.  サーバー上に bootpd を設置する

  bootpd は、bootpd-2.4.tar.gz に入っています（場所は、Linux ミラーサイ
  トの /pub/Linux/system/Network/boot.net ディレクトリです）。パッケージ
  を入手したらコンパイルし、組み込んで下さい。もし、サーバー側の Unix が
  Slackware ならば、bootpd ははじめから組み込まれていますのでこの手順は
  無視してください。デーモンは、コマンドラインから起動することができま
  す。

       ______________________________________________________________________
               bootpd -s
       ______________________________________________________________________

  あるいは、inetd からも起動できます

  o  この場合、/etc/inetd.conf の以下の行から、行頭の井桁印を消します。

       ______________________________________________________________________
       # tftp   dgram   udp     wait    root    /usr/sbin/in.tftpd     tftpd /export
       # bootps dgram   udp     wait    root    /usr/sbin/in.bootpd    bootpd
       ______________________________________________________________________

  o  また、/etc/services の以下の2行のコメントをはずして下さい。もし、以
     上の行が見当たらないときには、行を追加して下さい。（訳注：井桁は行
     頭のものをはずすだけです。行の途中のものははずさないで下さい）

       ______________________________________________________________________
       bootps          67/tcp          # BOOTP server
       tftp            69/udp          # TFTP server
       ______________________________________________________________________

  o  inetd を再起動するには、次のようにします

       ______________________________________________________________________
               kill -HUP <process id of inetd>.
       ______________________________________________________________________

  5.3.  サーバー上の bootpd の構成を行う

  とにもかくにも、bootptab という名前のファイルを bootpd のために用意す
  ることから始めます。このファイルは普通は/etcに置かれます。構成を行うた
  めにこのファイルを編集してゲートウェイ、DNS サーバーの IP アドレス、お
  よびディスクレス機の Ethernet アドレスを記述しなければなりません。例を
  あげると：

  ______________________________________________________________________

  global.prof:\
          :sm=255.255.255.0:\
          :ds=192.168.1.5:\
          :gw=192.168.1.19:\
          :ht=ethernet:\
          :bf=linux:
  machine1:hd=/export/root/machine1:tc=global.prof:ha=0000c0863d7a:ip=192.168.1.140:
  machine2:hd=/export/root/machine2:tc=global.prof:ha=0800110244e1:ip=192.168.1.141:
  machine3:hd=/export/root/machine3:tc=global.prof:ha=0800110244de:ip=192.168.1.142:
  ______________________________________________________________________

  ここで globa.prof は、ホスト記述用の雛形です（訳注：この後に続く個々の
  機械に共通の事項を記述します）。また、

  o  smはサブネットマスクを、

  o  dsはドメイン・ネーム・サーバーのアドレスを、

  o  gwは既定のゲートウェイアドレスを

  o  htはLANメディアのハードウェアを

  o  bfは、ブートファイルの名前を

     それぞれ記述します。この後、すべての機械（訳注：ディスクレス機）用
     に

  o  hdはブートファイルのディレクトリを

  o  tcはグローバル・テンプレートの読み込みを

  o  haはEther Net カードのハードウェアアドレスを

  o  ipは割り当てられるIPアドレスを

  それぞれ記述します。

  5.4.  tftp を理解する

  TFTP (Trivial File Transfer Protocol)は FTP と同様なファイル転送プロト
  コルです。しかし、このプロトコルは EPROM に焼き込めるくらい単純化され
  ています。 TFTP には2つの用途が有ります

  o  simple TFTP は、クライアントがファイルシステムすべてを読み書きでき
     るような用途です。これは簡単に実現できますが、大きなセキュリ
     ティー・ホールになります（何しろ誰でもこのプロトコルでパスワード
     ファイルを盗めます）。

  o  secure TFTP では、TFTP サーバーが chroot.2 システムコールを使用し
     て、自分自身のルートディレクトリを変更します。新しく設定されるルー
     トディレクトリの外を読み書きすることは一切禁止されています。chroot
     によって、今までとは違うディレクトリがルートになるため、すでに説明
     したhdは、新しい方の環境に対応している必要があります。例えば、
     simple TFTP を使用している場合、hd はブートディレクトリへのフルパス
     /export/root/machine1 をもっています。/export を新しいルートとして
     secure TFTP を使用する場合は、/export が / になるため、hd は
     /root/machine1 になります。

     UnixであればほとんどすべてTFTPサーバーを持っています。多分、自分で
     導入する必要はないでしょう。

  5.5.  遠隔サーバー上に最小構成の Linux を組む

  Slackware ならばパッケージ a、ap、n および x などが使用されることで
  しょう。もちろん、もっとインストールしてもかまいません。しかし、ディス
  クレス X 端末ならば上記の構成でも十分です。導入を行うためには実動状態
  にある Linux が必要です。リモートマシン（訳注：ディスクレス機にブート
  機能を提供する機械。この場合は SunOS 機）上に、ある程度のディスク領域
  を確保し、ネットワークから読み書きできるよう export します。 export し
  たディレクトリを（訳注：実動状態の Linux 機の）適当な場所（例えば
  /mnt）にマウントします。そうして、導入先を / ではなく /mnt として（訳
  注： Linux 機の）setup ユーティリティーを使用します。そうして先にあげ
  たパッケージを導入して下さい。ディスクレス機を一台しか使用しないならば
  このままで結構です。もし、2台以上の Linux 機をディスクレスとして使用し
  たいなら、このままではだめです。ファイルやディレクトリーの中にはディス
  クレス機毎に固有の情報を持つものがあるためです。この問題は /usr（この
  ディレクトリは機械固有情報を持っていない）を別の場所に移動し、おのおの
  のディスクレス機にサブディレクトリを用意することによって解決できます。
  たとえば、/export/linux/machine1 が /mnt にマウントされている場合、最
  初の設定の後、ディレクトリ構造は以下のようになっています。

       ______________________________________________________________________
       /export/linux/machine1/bin
       /export/linux/machine1/sbin
       /export/linux/machine1/lib
       /export/linux/machine1/etc
       /export/linux/machine1/var
       /export/linux/machine1/usr
       ______________________________________________________________________

  変更後は、以下のようになります。

       ______________________________________________________________________
       /export/linux/machine1/bin
       /export/linux/machine1/sbin
       /export/linux/machine1/lib
       /export/linux/machine1/etc
       /export/linux/machine1/var
       /export/linux/usr
       ______________________________________________________________________

  ここで、おのおののディスクレス機用にサブディレクトリを用意します。ディ
  スクレス機がそれぞれ machine1,、machine2、machine3 等と呼ばれていると
  仮定します。この場合、それぞれのディスクレス機の設定用に次のような
  bash スクリプトを使えます。

  ______________________________________________________________________

          cd /export/linux
          for x in machine2 machine3 ; do
                  mkdir $x; cd $x
                  (cd ../machine1; tar cf - *) | tar xvf -
          done
  ______________________________________________________________________

  Then do the following export:

  そうして、以下の export を行います。

  o  /export/linux/usr                       readonly for everyone.

  o  /export/liunx/machine1          only to machine1 with rw,root
     rights.

  o  /export/liunx/machine2          only to machine2 with rw,root
     rights.

  o  /export/liunx/machine3          only to machine3 with rw,root
     rights.

  この作業を行うには以下の記述を見てください  (-- 書式は SunOS 4.1.3 の
  export ファイルのものです--) 。

       ______________________________________________________________________

       # This file is /etc/export
       # for remote linux X terminals by Buci
       # this line is only once
       /export/root/usr             -access=linuxnet
       # these lines once for every host
       /export/root/machine1       rw=machine1,root=machine1
       /export/root/machine2       rw=machine2,root=machine2
       /export/root/machine3       rw=machine3,root=machine3
       ______________________________________________________________________

  exportfs -a を走らせることを忘れないで下さい。

  5.6.  tftp の構成を行う

  さて、TFTP サーバーを構成する番です。secure TFTP を使う必要が無いので
  あれば話は簡単で、クライアントは /export ディレクトリーから起動しま
  す。

  secure TFTPを使用する場合には、/tftpboot の下に /export/linux ディレク
  トリーを作る（カーネルは一つ持ち、他のマシンようにはそのカーネルへのリ
  ンクを張る）か、/exportをsecure TFTP の起動ディレクトリーとします。あ
  るいは、別々の tftpboot ディレクトリを使用するな場合はカーネルを一つだ
  けもち、他のマシン用に（訳注：このカーネルへの）リンクをはります。設定
  を行うには以下のように記述します。

  ______________________________________________________________________
        mkdir -p /tftpboot/export/linux/machine1
        cd /tftpboot/export/linux/machine1
        cp /export/linux/machine1/<name of the kernel> .
  ______________________________________________________________________

  Then type the following:

  そして以下のように入力してください。

       ______________________________________________________________________
             mkdir -p /tftpboot/export/linux/machine2
             cd ../machine2
             ln -s ../machine2/<name of the kernel>
       ______________________________________________________________________

  5.7.  最後の作業

  最後に、

       ______________________________________________________________________
          /sbin/mount nfs_server:/export/linux/usr /usr
       ______________________________________________________________________

  を、

       ______________________________________________________________________
          /export/linux/<machinex>/etc/rc.d/rc.S
       ______________________________________________________________________

  の先頭に追加します

  ここで <machinex> は machine1、machine2、等をあらわします。

  6.  メモリ及びディスクの必要量。速度

  Slackware 2.3 で試しただけです。他の配布やバージョンでは、以下の数字は
  変化するでしょう。

  o  Diskspace: 28MB + 6.5MB/machine

  o  RAM: X を 8 MB で使っており、スワップは 4MB が必要なだけのようで
     す。スワップは、/temp に機械毎に作成することができます。mkswap を走
     らせることを忘れないでおいて下さい。

  o  Speed: 486 DX2/66 に 8 MBの構成で、何の問題もありません。

  7.  発生しうるエラー

  o  変なエラーを見つけています。/dev サブディレクトリで、 SunOS がデバ
     イスエントリを壊してしまいます。そのため、ディスク付きの Linux にマ
     ウントして MAKEDEV を実行しなければなりませんでした(これは、Linux
     nfs と SunOS nfs の違いが原因でした。両者とも、デバイス番号に 32
     ビットを使用していますが、Linux はメジャー、マイナー番号に 16 ビッ
     トづつ割り当て、SunOS は、14 ビットをメジャー、18 ビットをまいなー
     番号に割り付けてたのです)。

  o  ディスクレス Linux が起動するときには、tftp サーバのための経路設定
     テーブルのなかには一つだけしか経路があってはいけません。したがっ
     て、テーブルを正しく設定しなければなりません。二つの方法がありま
     す。

     o  すべての機械用に rc.S を手作業で設定する

     o  bootp クライアントパッケージを使用し、汎用設定スクリプトを書く

  8.  誤り、および将来に向けての文書の更新

  o  関連文書の引用を修正する。

  o  SunOS は BSD をもとにしているので、SVR をもとにしたサーバ(例えば、
     Solaris)用に設定を用意する。

  o  Linux は、bootp/tftp サーバとしては SunOS に似ているが、Linux をも
     とにしたサーバの例も便利だと思われる。

  o  この文書を現行の etherboot パッケージにあわせる。

  o  カーネル 1.2.13 と カーネル 1.3.x 用の違いを明らかにする。後者は
     nfs root パッチを持っている。

  o  wd8013 以外の ethercards で試してみる。

  o  linux 用に正しく経路テーブルを設定するために、bootp クライアントで
     ある bootpc の設定情報を追加する。

  o  誤字脱字やその他の間違いは、 buci@math.klte.hu に知らせて下さい。

  o  日本語版の誤字、脱字、翻訳間違いは訳者shorie@ibm.netに知らせてくだ
     さい。内容に関する質問は原著者にお願いします。(訳者より)

