<!doctype linuxdoctr system>

<article>

<title>Diskless Linux Mini Howto
<author>Robert Nemkin <tt>buci@math.klte.hu</tt> 著
<date>v0.0.3 12 Sep 1996
<trans>堀江誠一 <tt>shorie@ibm.net</tt> 訳



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

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

<toc>

<sect>変更点
<p>
<itemize>
<item>v0.0.3 12 Sep 1996: 小さな誤りをいくつか修正
</itemize>

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

<sect>関連文書
<p>
<itemize>
<item>NFS-root Mini Howto
<item>Linux NET-2/3-HOWTO
  Terry Dawson, <tt>94004531@postoffice.csu.edu.au</tt>
<item>新しいカーネルの設定とコンパイルについては <tt>/usr/src/linux/README</tt> を
参照して下さい。
</itemize>

<sect>ハードウェア<p>
この文書に書いてある内容は以下の構成の機器で確認しています。
<itemize>
<item>ブートサーバーとしてSun-OS 4.1.3
<item>Slackware 2.3 + Linux 1.2.8 + WD 8013 Ethernet カード
<item>稼動している Ethernet LAN
</itemize>

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

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

<sect1>PC を設定する<p>
まず、nfsブートパッケージを入手して下さい（手近な Linux ミラーサイトの
the <tt>/pub/Linux/system/Linux-boot</tt> ディレクトリーに有ります）。このパッケー
ジには WD8013 用の起動 EPROM イメージが有り、そのまま ROM ライターで焼くこと
ができます。<p>
 PC の準備には他の方法もあります。
<itemize>
<item>対象機が完全にディスクレスというわけでもなければ、小さな DOS プログラム
から起動することもできます。
<item>また、上のパッケージのバイナリイメージを収めたフロッピーを使う手も
あります。
</itemize>
後者の場合、フロッピーに dd コマンドでイメージを書き込みます。<p>
このイメージは bootp と tftp クライアントを持っています。他に、
 Linux のカーネルを用意しなければなりません。このカーネルは nfs-root
 オプション付きで構築されていなければなりません。
<itemize>
<item>もし、最新の安定したカーネルである Linux-1.2.13 を使用しているならば、
 nfsboot パッケージのカーネルパッチファイルが必要です
。<footnote>patch(1) を参照してください</footnote>
<item>もしも最新ではあっても安定していない Linux-1.3.x シリーズを使用してい
るならば nfs-root オプションでカーネルを構成しなければなりません。
</itemize>
フロッピーやハードディスクといったブロックデバイスをカーネルに取り込む必要は
有りません。しかし、TCP/IP 対応機能、WD Ethernet カード対応、 NFS ファ
イルシステムへの対応機能は必須です。これらの機能を設定したら、
カーネルをコンパイルして下さい。

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

</code></tscreen>
あるいは、inetd からも起動できます<itemize>
<item>この場合、/etc/inetd.conf の以下の行
から、行頭の井桁印を消します。

<tscreen><code>
# tftp   dgram   udp     wait    root    /usr/sbin/in.tftpd 	tftpd /export
# bootps dgram   udp     wait    root    /usr/sbin/in.bootpd	bootpd

</code></tscreen>

<item>また、/etc/services の以下の2行のコメントをはずして下さい。もし、以上の
行が見当たらないときには、行を追加して下さい。（訳注：井桁は行頭のもの
をはずすだけです。行の途中のものははずさないで下さい）
<tscreen><code>
bootps          67/tcp          # BOOTP server
tftp            69/udp		# TFTP server

</code></tscreen>

<item>inetd を再起動するには、次のようにします
<tscreen><code>
	kill -HUP <process id of inetd>.

</code></tscreen>
</itemize>

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

<tscreen><code>

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:
</code></tscreen>

ここで globa.prof は、ホスト記述用の雛形です（訳注：この後に続く
個々の機械に共通の事項を記述します）。また、
<itemize>
<item>smはサブネットマスクを、
<item>dsはドメイン・ネーム・サーバーのアドレスを、
<item>gwは既定のゲートウェイアドレスを
<item>htはLANメディアのハードウェアを
<item>bfは、ブートファイルの名前を
</itemize>
それぞれ記述します。この後、すべての機械（訳注：ディスクレス機）用に
<itemize>
<item>hdはブートファイルのディレクトリを
<item>tcはグローバル・テンプレートの読み込みを
<item>haはEther Net カードのハードウェアアドレスを
<item>ipは割り当てられるIPアドレスを
</itemize>

それぞれ記述します。


<sect1>tftp を理解する<p>
TFTP (Trivial File Transfer Protocol)は FTP と同様なファイル転送プロト
コルです。しかし、このプロトコルは EPROM に焼き込めるくらい単純化されて
います。 TFTP には2つの用途が有ります
<itemize>
<item>simple TFTP は、クライアントがファイルシステムすべてを読み書きできる
ような用途です。これは簡単に実現できますが、大きなセキュリティー・
ホールになります（何しろ誰でもこのプロトコルでパスワードファイルを盗
めます）。
<item>secure TFTP では、TFTP サーバーが chroot.2 システムコールを使用して、
自分自身のルートディレクトリを変更します。新しく設定されるルート
ディレクトリの外を読み書きすることは一切禁止されています。chroot
 によって、今までとは違うディレクトリがルートになるため、すでに説明
したhdは、新しい方の環境に対応している必要があります。例えば、
simple TFTP を使用している場合、hd はブートディレクトリへのフルパス
<tt>/export/root/machine1</tt> をもっています。/export を新しいルートと
して secure TFTP を使用する場合は、/export が / になるため、hd は <tt>/root/machine1</tt>
 になります。
</itemize>
UnixであればほとんどすべてTFTPサーバーを持っています。多分、自分で
導入する必要はないでしょう。

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

<tscreen><code>
/export/linux/machine1/bin
/export/linux/machine1/sbin
/export/linux/machine1/lib
/export/linux/machine1/etc
/export/linux/machine1/var
/export/linux/machine1/usr

</code></tscreen>
<p>
変更後は、以下のようになります。
<tscreen><code>
/export/linux/machine1/bin
/export/linux/machine1/sbin
/export/linux/machine1/lib
/export/linux/machine1/etc
/export/linux/machine1/var
/export/linux/usr

</code></tscreen>


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

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

</code></tscreen>	

Then do the following export:

そうして、以下の export を行います。
<itemize>
<item>/export/linux/usr 			readonly for everyone.
<item>/export/liunx/machine1		only to machine1 with rw,root rights.
<item>/export/liunx/machine2		only to machine2 with rw,root rights.
<item>/export/liunx/machine3		only to machine3 with rw,root rights.
</itemize>

この作業を行うには以下の記述を見てください <footnote>書式は SunOS 4.1.3 の export
 ファイルのものです</footnote>。
<tscreen><code>	
# 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

</code></tscreen>	

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

<sect1>tftp の構成を行う<p>

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

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

</code></tscreen>

Then type the following:

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

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

</code></tscreen>

<sect1>最後の作業<p>


最後に、
<tscreen><code>
   /sbin/mount nfs_server:/export/linux/usr /usr

</code></tscreen>

を、
<tscreen><code>
   /export/linux/&lt;machinex&gt;/etc/rc.d/rc.S

</code></tscreen>
 
の先頭に追加します

ここで &lt;machinex&gt; は machine1、machine2、等をあらわします。
<sect>メモリ及びディスクの必要量。速度<p>

Slackware 2.3 で試しただけです。他の配布やバージョンでは、以下の
数字は変化するでしょう。
<itemize>
<item> Diskspace: 28MB + 6.5MB/machine
<item>RAM: X を 8 MB で使っており、スワップは 4MB が必要なだけのようです。
スワップは、/temp に機械毎に作成することができます。mkswap を走らせる
ことを忘れないでおいて下さい。
<item> Speed: 486 DX2/66 に 8 MBの構成で、何の問題もありません。
</itemize>

<sect>発生しうるエラー<p>
<itemize>
<item>変なエラーを見つけています。/dev サブディレクトリで、 SunOS が
デバイスエントリを壊してしまいます。そのため、ディスク付きの Linux 
にマウントして MAKEDEV を実行しなければなりませんでした(これは、Linux
nfs と SunOS nfs の違いが原因でした。両者とも、デバイス番号に 32 ビット
を使用していますが、Linux はメジャー、マイナー番号に 16 ビットづつ割り
当て、SunOS は、14 ビットをメジャー、18 ビットをまいなー番号に
割り付けてたのです)。
<item>ディスクレス Linux が起動するときには、tftp サーバのための経路設定
テーブルのなかには一つだけしか経路があってはいけません。したがって、
テーブルを正しく設定しなければなりません。二つの方法があります。
<itemize>
<item>すべての機械用に rc.S を手作業で設定する
<item>bootp クライアントパッケージを使用し、汎用設定スクリプトを書く
</itemize>
</itemize>

<sect>誤り、および将来に向けての文書の更新<p>
<itemize>
<item>関連文書の引用を修正する。
<item>SunOS は BSD をもとにしているので、SVR をもとにしたサーバ(例えば、
Solaris)用に設定を用意する。
<item>Linux は、bootp/tftp サーバとしては SunOS に似ているが、Linux
をもとにしたサーバの例も便利だと思われる。
<item>
この文書を現行の etherboot パッケージにあわせる。
<item>カーネル 1.2.13 と カーネル 1.3.x 用の違いを明らかにする。後者は
nfs root パッチを持っている。
<item>wd8013 以外の ethercards で試してみる。
<item>linux 用に正しく経路テーブルを設定するために、bootp クライアント
である bootpc の設定情報を追加する。
<item>誤字脱字やその他の間違いは、 <tt>buci@math.klte.hu</tt> に知らせて下さい。
<item>日本語版の誤字、脱字、翻訳間違いは訳者<tt>shorie@ibm.net</tt>に知らせて
ください。内容に関する質問は原著者にお願いします。(訳者より)
</itemize>

</article>

