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 に 感謝します。 注意: この文書はかなり以前に書かれたものなので、いまどきの 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 . ______________________________________________________________________ 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/ . ______________________________________________________________________ Then type the following: そして以下のように入力してください。 ______________________________________________________________________ mkdir -p /tftpboot/export/linux/machine2 cd ../machine2 ln -s ../machine2/ ______________________________________________________________________ 5.7. 最後の作業 最後に、 ______________________________________________________________________ /sbin/mount nfs_server:/export/linux/usr /usr ______________________________________________________________________ を、 ______________________________________________________________________ /export/linux//etc/rc.d/rc.S ______________________________________________________________________ の先頭に追加します ここで は 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に知らせてくだ さい。内容に関する質問は原著者にお願いします。(訳者より)