  How To Build a Minimal Linux System from Source Code
  Greg O'Keefe, gcokeefe@postoffice.utas.edu.au
  v0.8, September 2000
  日本語訳 千旦裕司
  v0.8, December 2000

  この文書は、ソースコードから最小限度の Linux System を構築する方法を述
  べたものである。以前は、From PowerUp to Bash Prompt <http://www.linux-
  doc.org/HOWTO/From-PowerUp-To-Bash-Prompt-HOWTO.html> (日本語訳
  <http://www.linux.or.jp/JF/JFdocs/From-PowerUp-To-Bash-Prompt-
  HOWTO.html>) の一部であったが、これを分離し、双方の文書を簡潔かつ明確
  な主題を持つものにした。ここで構築するシステムは、本当に 最小限度のも
  のであり、実際の役に立つシステムではない。ソースコードから本格的なシス
  テムを構築したいなら、この文書ではなく、Gerard Beekmans の Linux From
  Scratch HOWTO <http://www.linuxfromscratch.org> を参考にしてほしい。
  ______________________________________________________________________

  目次

  1. 何が必要か
  2. ファイルシステム
  3. MAKEDEV
  4. カーネル
  5. Lilo
  6. Glibc
  7. SysVinit
  8. Ncurses
  9. Bash
  10. Util-linux (getty と login)
  11. sh-utils
  12. もっと使いやすくするために
  13. More Informatin
     13.1 Random Tips
     13.2 リンク

  14. Administrivia
     14.1 Copyright
     14.2 ホームページ
     14.3 フィードバック
     14.4 Acknowledgements
     14.5 改訂履歴
        14.5.1 0.8
     14.6 TODO
     14.7 日本語訳について

  ______________________________________________________________________

  1.  何が必要か

  本書では、ひとつのパーティションに Red Hat のようなディストリビュー
  ションをインストールし、もうひとつのパーティションを新しい Linux シス
  テムの構築のために使うこととする。構築中のシステムを 「ターゲットシス
  テム」 と呼び、それを構築するために使っているシステムを 「ソースシステ
  ム」 と呼ぶ。(「ソースコード」という言葉も使うが、そちらと混同しないよ
  うにしてほしい)

  それゆえ、ふたつの空いたパーティションのあるマシンが必要になる。可能な
  ら、大切なものが何も乗っていないマシンを使ってほしい。ソースシステムと
  して既にインストールされた Linux を使うこともできるが、わたしはお薦め
  しない。実行するコマンドのひとつにパラメータを付け忘れただけで、システ
  ムに偶然余計なものをインストールすることがある。それがシステムに不整合
  と不和を引き起こすことがあり得るからである。

  486 やそれ以前のふるい PC ハードウェアには、bios に困った制限があ
  る。bios が、ハードディスクの最初の 512M を越えた領域を読み込めないの
  である。Linux の場合、一旦立ち上がれば bios を通さずに直接ディスクにア
  クセスできるのでそれほど問題ではないのだが、Linux がそうした旧いマシン
  にロードされるためには、カーネルが 512M 以下の領域になければならなくな
  る。もしそうしたマシンを持っているなら、512M の境界を越えたパーティ
  ションを活かすために、512M の境界以下に /boot としてマウントされること
  になる完全に独立したパーティションを作る必要がある。

  最近わたしが実験をした時には、ソースシステムとして Red Hat 6.1 を使っ
  た。そしてベースシステムに加えて、次のパッケージをインストールした。

  o  cpp

  o  egcs

  o  egcs-c++

  o  patch

  o  make

  o  dev86

  o  ncurses-devel

  o  glibc-devel

  o  kernel-headers

  わたしは文書が簡単に読めるように X-window と Mozilla(Netscape) も加え
  たが、これは必須ではない。その作業が終わった時点で、350M のディスクス
  ペースを使っていた。(思ったよりも大きいのだが、なぜだろう？)

  完成したターゲットシステムは 650M の容量を占めた。ただ、これにはすべて
  のソースコードと構築のときの中間ファイルが含まれている。容量が厳しい場
  合は、それぞれのパッケージをビルドした後で 'make clean' をすればよい。
  それにしても、この予期せぬ肥大化は少し心配である。

  最後に、これから構築しようとするシステムのためのソースコードが必要にな
  る。この文書で述べてきた「パッケージ」というのがあり、それらはソース
  CD やインターネット上で手に入る。USA のサイトと Australia のミラーサイ
  トの URL を以下に書いておく。(訳注:翻訳時において、この Australia のミ
  ラーサイトはアクセスできませんでした)

  o  MAKEDEV: USA <ftp://tsx-11.mit.edu/pub/linux/sources/sbin>Another
     USA <ftp://sunsite.unc.edu/pub/Linux/system/admin>site

  o  Lilo: USA <ftp://lrcftp.epfl.ch/pub/linux/local/lilo/>, Australia
     <ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/boot/lilo/>

  o  Linux Kernel: ミラーサイトの一覧がこちら home page
     <http://www.kernel.org> にある。ここ USA
     <ftp://ftp.kernel.org/pub/linux/kernel> はいつも混んでいるのでやめ
     たほうがいい。 Australia
     <ftp://kernel.mirror.aarnet.edu.au/pub/linux/kernel/> (訳注: Japan
     <http://www.ring.gr.jp/archives/linux/kernel.org/kernel/>)

  o  GNU libc: これ自体と Linuxthreads のアドオン(addon)はこちら。 USA
     <ftp://ftp.gnu.org/pub/gnu/glibc> Australia
     <ftp://mirror.aarnet.edu.au/pub/gnu/glibc>

  o  GNU libc addons: アドオンとして Linuxthreads と libcrypt も必要にな
     る。アメリカの輸出規制で libcrypt が見つからないときは、ここで手に
     入る。 libcrypt <ftp://ftp.gwdg.de/pub/linux/glibc>

     Linuxthreads のアドオンは、libc 自体と同じ場所にある。

  o  GNU ncurses: USA <ftp://ftp.gnu.org/gnu/ncurses> Australia
     <ftp://mirror.aarnet.edu.au/pub/gnu/ncurses>

  o  SysVinit: USA <ftp://sunsite.unc.edu/pub/Linux/system/daemons/init>
     Australia
     <ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/daemons/init>

  o  GNU Bash: USA <ftp://ftp.gnu.org/gnu/bash> Australia
     <ftp://mirror.aarnet.edu.au/pub/gnu/bash>

  o  GNU sh-utils: USA <ftp://ftp.gnu.org/gnu/sh-utils> Australia
     <ftp://mirror.aarnet.edu.au/pub/gnu/sh-utils>

  o  util-linux: Somewhere else
     <ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/> Australia
     <ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/misc> このパッ
     ケージには、agetty と login が含まれている。 (訳注: Japan
     <http://www.ring.gr.jp/archives/linux/kernel.org/utils/util-
     linux/>)

  以上を整理すると、構築に必要なのは、

  o  それぞれ 400M と 700M のふたつの空きパーティションがあるマシン。こ
     の容量はおそらくもっと少なくても大丈夫だと思われる。

  o  Linux ディストリビューション(例えば Red Hat の CD)と、インストール
     する手段(例えば、CD-ROM ドライブ)。

  o  上記に示したソースコードの圧縮ファイル(tarballs)。

  ソースシステムについては、手助けがなくとも、自分でインストールできると
  思う。ここからは、すでにそれがなされていることを前提にする。

  この小さなプロジェクトの最初の到達点は、カーネルが起動して、init を見
  つけられないためにパニックを起こすところまで持っていくことである。これ
  は、カーネルと lilo をインストールすることを意味する。しかし、 lilo を
  すんなりインストールするには、ターゲットシステムの /dev ディレクトリに
  デバイスファイルが必要となる。 lilo はブートセクタに書込みをするために
  ローレベル(low level)のディスクアクセスを必要とするからである。MAKEDEV
  はそうしたデバイスファイルを作るスクリプトである。(もちろんソースシス
  テムからそれらをコピーすることもできるが、それではごまかしになってしま
  う。)しかし、まず最初に、これらすべてを収容するためのファイルシステム
  が必要だ。

  2.  ファイルシステム

  新しいシステムは、ファイルシステムの中で動作するので、まず初めに
  mke2fs を使ってファイルシステムを作らなければならない。そしてそれを何
  らかの場所にマウントするのだが、わたしは /mnt/target をお薦めする。な
  にかトラブルが起こった場合でも、ここなら心配ないと思われるからだ。ソー
  スシステムが立ち上がるとき自動的にマウントされるように、/etc/fstab に
  エントリーを入れておくとわずかだが時間の節約ができる。

  ターゲットシステムを起動したときには、今 /mnt/target にあるものが ルー
  トディレクトリ(/)に入る。

  ターゲットシステム上のディレクトリ階層が必要である。File Heirarchy
  Standard( ママ) (``7.3ファイルシステム-参考文献等'' を参照)に目を通し
  て、どういう形になるべきなのかを理解すること。あるいは、ターゲットシス
  テムがマウントされている場所に cd して、以下を記述通りに打ち込むこと。

          mkdir bin boot dev etc home lib mnt root sbin tmp usr var
          cd var; mkdir lock log run spool
          cd ../usr; mkdir bin include lib local sbin share src
          cd share/; mkdir man; cd man
          mkdir man1 man2 man3 ... man9

  FHS や大部分のパッケージではマニュアルページ(man page)の置き場所が上記
  と異なるので、シンボリックリンクを張る必要がある。

          cd ..; ln -s share/man man (訳注:/mnt/target/usr で ln の実行)

  3.  MAKEDEV

  ソースコードは、ターゲットシステムの /usr/src ディレクトリに置く。例え
  ば、ターゲットシステムのファイルシステムが /mnt/target にマウントされ
  ていて、圧縮ファイルが(ソースシステムの) /root にあるとすると、以下の
  ようにすべきことになる。

          cd /mnt/target/usr/src
          tar -xzvf /root/MAKEDEV-2.5.tar.gz

  全く起動できない状態に陥らないよう、圧縮ファイルを、解凍すべき場所にコ
  ピーしておくとよい。

  ソフトウェアをインストールするときは、稼働中のシステム上にインストール
  するのが普通である。しかしこの場合はそれを望んでおらず、 /mnt/target
  をルートファイルシステムとしてインストールしたい。それをする方法はパッ
  ケージごとにそれぞれ違っている。MAKEDEV の場合は、以下のようにする。

          ROOT=/mnt/target make install

  こうしたオプションを探すには、README や INSTALL ファイルを見るか、./
  configure --help とすることが必要となる。

  上記のコマンドで ROOT という変数を付けて何をしたのかを理解するには、
  MAKEDEV の Makefile を見ること。次に、 man ./MAKEDEV.man と打ってマ
  ニュアルページを見て、そのプログラムがどういう働きをするか理解するこ
  と。そうすれば、この場合のデバイスファイルの作り方は、cd
  /mnt/target/dev としてから、./MAKEDEV generic とすればいいということが
  分かるだろう。ls を実行して、作り出されたすばらしいデバイスファイルを
  眺めてほしい。

  4.  カーネル

  次はカーネルの作成である。これは前にやったことがあると思うので、簡単に
  説明したい。ブートさせようとするカーネルがあった方が lilo のインストー
  ルが楽になる。ターゲットシステムの usr/src ディレクトリに行って、そこ
  に Linux カーネルのソースコードを解凍・展開してほしい。そして cd linux
  として Linux のソースツリーのあるディレクトリに入り、例えば make
  menuconfig のように好きな方法でカーネルを設定すること。モジュールなし
  の設定にするとあとの作業が少しだけ簡単になる。モジュールを使う設定にし
  た場合は、Makefile ファイルを開いて、INSTALL_MOD_PATH という項目を見つ
  け、それを /mnt/target と設定することが必要になる。

  次に、make dep; make bzImage とすること。もしモジュールを設定したのな
  ら、make modules そして make modules_install とすればよ
  い。arch/i386/boot/bzImage にあるカーネルと、 System.map という名前の
  システムマップをターゲットシステムのブートディレクトリである
  /mnt/target/boot にコピーする。これで、lilo のインストールの準備が整っ
  た。

  5.  Lilo

  lilo には QuickInst と呼ばれる小さなスクリプトが付いている。 lilo の
  ソースコードをターゲットシステムのソースディレクトリに (解凍・)展開
  し、ROOT=/mnt/target ./QuickInst とコマンドを打ち込んで、このスクリプ
  トを実行してほしい。スクリプトは、lilo をどういうふうにインストールし
  たいのかと尋ねてくるだろう。

  気を付けてほしいのは、ROOT 変数をターゲットシステムのパーティションに
  設定しているので、ファイル名はそこを基準に伝えるということである。それ
  ゆえ、どのカーネルをデフォルトでブートしたいのかと聞かれた
  ら、/mnt/target/boot/ bzImage ではなく、/boot/bzImage と答えてほしい。
  わたしは、そのスクリプトの中の小さなバグを見つけた。そのため、以下のよ
  うに表示された。

      ./QuickInst: /boot/bzImage: no such file

  しかし、これを無視しても、何の問題もない。

  QuickInst を使ってどこにブートセクタを置くべきだろうか？リブートの際に
  は、ソースシステムかターゲットシステム、あるいはマシン上の他のシステム
  かどれを起動するのかを選択できるようにしたい。それに、現在構築中の
  lilo が新しいシステムのカーネルを起動するところを実際に見てみたい。こ
  のふたつを同時に実現するにはどうすればいいのか？少し脇道にそれて、デュ
  アルブートの Linux システムにおいて lilo が DOS をブートする方法を見て
  みよう。そうしたシステムでの lilo.conf ファイルはおそらく下記のように
  なっているだろう。

  prompt
  timeout = 50
  default = linux

  image = /boot/bzImage
          label  = linux
          root   = /dev/hda1
          read-only

  other = /dev/hda2
          label = dos

  マシンが上記のように設定されているなら、bios によってマスターブートレ
  コードが読み込まれてロードされ、次に(ロードされたプログラムが) lilo の
  ブートローダをロードし、それがプロンプトを表示する。もしそのプロンプト
  画面で dos とタイプしたなら、lilo は hda2 からブートセクタをロードし
  て、それが DOS をロードする。

  これからしようとしていることは、hda2 のブートセクタがそれとは異なる
  lilo のブートセクタ(つまり QuickInst がこれからインストールしようとし
  ているセクタ)になるということを除けば、上記と全く同じことである。ディ
  ストリビューションに付属の lilo が、構築したばかりの lilo をロードし、
  その lilo が、先だって構築したカーネルをロードするということになる。再
  起動時には、lilo プロンプトをふたつ見るわけである。

  要点だけを言うと、QuickInst がブートセクタをどこに置くか聞いてきたら、
  ターゲットシステム上のファイルシステムがあるデバイス名を答えるとよい。
  たとえば、/dev/hda2 などである。

  そして、ソースシステム上の lilo.conf を修正する。そうすると、以下のよ
  うな行が加わる。

  other = /dev/hda2
          label = target

  ここで lilo と打てば、これで初めて、ターゲットシステムが起動可能になっ
  たはずだ。

  6.  Glibc

  次は、init をインストールしたいのだが、Linux 上で走るすべてのプログラ
  ムに共通する事柄として、init は GNU C library, すなわち glibc が提供す
  るライブラリ関数を使用している。そこで、それを先にインストールする。

  glibc は非常に巨大で複雑なパッケージである。わたしの古い 386/SX 16MHz
  8M RAM のマシンでは、コンパイルに 90 時間かかった。しかし、 Celeron
  433MHz 64M RAM のマシンでは、33 分しかかからなかった。メモリがここでは
  一番重要なのだと思う。もし 8M (あるいは、それ以下)の RAM しかないとき
  は、コンパイルに長時間かかることを覚悟してほしい。

  glibc のインストールに関する文書は、(実際にソースを展開している場所と
  は)別のディレクトリでビルドすることを薦めている。そうしておけば、その
  ディレクトリを消してしまうだけで、簡単にやり直しができる。265M もの
  ディスクスペースを節約できるために、そうしたいと思うひともいるだろう。

  glibc-2.1.3.tar.gz (あるいはこれに類するバージョン)の圧縮ファイルを通
  常どおり/mnt/target/usr/src に展開する。そして、glibc のディレクトリに
  アドオンパッケージも展開する必要がある。したがって、 cd glibc-2.1.3 と
  してから、その場所に glibc-crypt-2.1.3.tar.gz と glibc-
  linuxthreads-2.1.3.tar.gz の圧縮ファイルを展開すること。

  これで、ビルド用ディレクトリを作成し、設定し、make し、インストールす
  る準備ができた。わたしが使ったコマンドがあるのだが、まずは自分で付属文
  書を読んで、自分の環境にとってどうするのが最もよいのか確認してほしい。
  しかし、その前に、どれだけ空いたスペースがあるか df コマンドで調べたい
  かもしれない。glibc をコンパイルしてインストールし終わったら、再度空き
  容量を調べ、glibc の容量消費の激しさを確認すること。

          cd ..
          mkdir glibc-build ;(訳注:cd glibc-build)
          ../glibc-2.1.3/configure --enable-add-ons --prefix=/usr
          make
          make install_root=/mnt/target install

  パッケージをどこにインストールするか決める方法は、上記以外にもあるの
  で、注意すること。

  7.  SysVinit

  SysVinit は、make もバイナリのインストールも極めて簡単なので、ここでは
  読者が SysVinit のソースコードを展開してその展開先のディレクトリにいる
  ことを前提に、以下のコマンドだけ書いておく。

   cd src
   make
   ROOT=/mnt/target make install

  init に関係のあるスクリプトはたくさんある。SysVinit のパッケージにも典
  型的なスクリプトが付いていて、問題なく動作する。しかし、読者は手動でイ
  ンストールすべきだ。それらは、SysVinit のソースコードツリーの中の
  debian/etc というディレクトリに階層的にセットアップされているので、そ
  れらをターゲットシステムの etc ディレクトリに直接コピーするだけでい
  い。方法は、cd ../debian/etc; cp -r * /mnt/target/etc とすること。コ
  ピーする前に、読者はきっとそれを見たくなると思う。

  これで再起動するにあたって、ターゲットシステムのカーネルが init をロー
  ドするためのすべての準備が整った。ここでの問題は、それらのスクリプトを
  解釈すべき bash がまだ入っていないので、スクリプトが動かないということ
  だろう。また、init は getty を実行しようとするが、実行すべき getty が
  まだそこにないということもある。とりあえず再起動して、なにも問題がない
  ことを確認してほしい。

  8.  Ncurses

  次に、bash が必要なのだが、bash には ncurses が必要なので、それを先に
  インストールする。ncurses はテキストスクリーンを操作する方法として
  termcap に取って替わるものだが、termcap 呼び出しもサポートすることで、
  上位互換性を提供している。無駄のないシンプルな現代的システムを持ちたい
  なら、古い termcap の方式を使えなくするのが最適だと思う。termcap を使
  う少し古いアプリケーションをコンパイルする場合など後のトラブルに遭遇す
  ることもあるが、少なくとも何がどういうものを使っているのかが分かる。も
  しそうしたアプリケーションを使う必要があるのなら、ncurses を termcap
  サポート(のオプション付き)でコンパイルし直せばいい。

  わたしが使ったコマンドは以下である。

          ./configure --prefix=/usr --with-install-prefix=/mnt/target --with-shared --disable-termcap
          make
          make install

  9.  Bash

  自分の思い通りの場所に bash をインストールするために、読んだり考えた
  り、トライアンドエラーで、ずいぶん時間がかかった。わたしに必要だった設
  定オプションは以下のようなものであった。

   ./configure --prefix=/mnt/target/usr/local --exec-prefix=/mnt/target --with-curses

  bash のインストールが完了したら、 cd /mnt/target/bin; ln -s bash sh と
  打って、シンボリックリンクを張る必要がある。これは、スクリプトには通常
  最初の一行に以下のように書かれてあるからである。

  #!/bin/sh

  もしシンボリックリンクがなかったら、スクリプトは /bin/bash ではなく
  /bin/sh を探すので、それらは実行されないだろう。

  もしよければ、ここで再起動することもできる。その時にはスクリプトが実際
  に実行されるが、getty もしくは login プログラムがないので、まだログイ
  ンはできない。

  10.  Util-linux (getty と login)

  util-linux パッケージには、agetty と login とが含まれている。bash プロ
  ンプトが表示されるには、この両方が必要だ。それらのインストールが終わっ
  たら、ターゲットシステムの /sbin ディレクトリで、agetty から getty に
  シンボリックリンクを張ること。 getty は Unix 系のシステムでは必ず存在
  するプログラムの一つであると考えられているので、inittab の設定を変更し
  て agetty を実行させるよりもリンクを張るほうが考え方としてよいと思う。

  util-linux のコンパイルにはひとつ問題が残っている。このパッケージには
  more というプログラムも含まれていて、わたしは、make の過程で、more が
  ターゲットシステムの ncurses 5 にリンクを張るようにしたかったのだが、
  ソースシステムの ncurses 4 にリンクしてしまうのを止めさせる方法が分か
  らなかったのである。これについては、もっと調べるつもりだ。

  ターゲットシステム上には、/etc/passwd ファイルも必要である。このファイ
  ルの情報に基づいて、login プログラムは、利用を許されているユーザかどう
  かの確認作業をする。この段階ではまだおもちゃのシステムにすぎないので、
  ルートユーザだけセットアップしてパスワードを要求しないといった乱暴な設
  定も可能ではある。以下の設定をターゲットシステムの /etc/passwd に書き
  込むこと。

  root::0:0:root:/root:/bin/bash

  フィールドはコロンで区切られていて、左から順に、ユーザ id、パスワード
  (暗号化されている)、ユーザ番号、グループ番号、ユーザ名、ホームディレク
  トリ、デフォルトのシェルとなっている。

  (訳注:インストール方法がないので、``日本語訳について''に付記しまし
  た。)

  11.  sh-utils

  必要な最後のパッケージは、GNU の sh-util である。今の段階では、この
  パッケージのなかで必要なのは、stty だけである。このプログラム
  は、/etc/init.d/rc のなかで呼び出されるプログラムであり、ランレベルを
  変更したり、起動時のランレベルに入ったりするのに利用される。わたしは、
  以前 stty だけが入ったパッケージを実際に持っていて使っていたのだが、ど
  こからそれを取ってきたか忘れてしまった。しかし、システムをより使いやす
  くしようとすると必要になるプログラムが他にも入っていることから、GNU の
  パッケージを使うほうがより良いと思う。

  これで出来上がりだ。ブートしてログインのためにプロンプトを表示するシス
  テムになった。"root" とタイプすれば、シェルが起動する。ただ、たいした
  ことは出来ない。手作りのシステムを鑑賞するための ls コマンドすらここに
  はない。タブキーを二度押すと、使えるコマンドが表示される。わたしの知る
  限りこの状態で最も満足のゆく機能がこれだった。 (訳注: 例えば、'echo *'
  でファイル名が表示されます。)

  (訳注:インストール方法がないので、``日本語訳について''に付記しまし
  た。)

  12.  もっと使いやすくするために

  ここまでだと、全く使い物にならないシステムを作ってしまったように思える
  かもしれない。しかし、本当は、多少の仕事ができるようになるまでもう少し
  なのである。最初にしなければならないことは、ルートファイルシステムを読
  み書きできる状態( read-write)でマウントすることである。SysVinit パッ
  ケージに入っていたスクリプトで /etc/init.d にある mountall.sh を使えば
  それが出来る。そして、mount -a とすれば、/etc/fstab で指定した方法で全
  てをマウントできるはずである。ターゲットシステムの /etc/rc2.d に、その
  スクリプトへの S05mountall のような名前のシンボリックリンクを張ってほ
  しい。

  このスクリプトを実行するには、まだインストールされていないコマンド類が
  必要になるかもしれない。もしそうなら、それらのコマンドを含んだパッケー
  ジを探して、インストールしてほしい。``Random Tips'' のセクションを見れ
  ば、パッケージを探すときの手がかりが見つかるだろう。

  /etc/init.d にある他のスクリプトを見ること。まともなシステムならそれら
  の大部分が含まれている必要がある。ひとつずつ起動させて、数を増やす前に
  全てがスムースに実行されているか確認すること。

  ファイル階層構造の標準的な形式を確認してほしい。(``Filesystem'' を見て
  ほしい) /bin や /sbin に入るべきコマンドのリストがそこに掲載されてい
  る。それらのコマンドが全てインストールされているか確認しよう。さらに進
  んで、これらのコマンドについて定めている POSIX の文書を探してみよう。

  ここまで来れば、必要なものが全てそろうまで、パッケージをそこに投げ入れ
  るだけの問題である。gcc や make といった構築ツールを入れるくらいになれ
  は、コマンド群の内容はずっとよくなっているだろう。それが済んだら、ター
  ゲットシステムを使って必要なものを今までよりずっと簡単に構築できるよう
  になる。

  13.  More Informatin

  13.1.  Random Tips

  もし、RPM の入った Linux システム上で thingy というコマンドがあったと
  して、そのソースコードがどこで手にはいるか手がかりが欲しいときは、以下
  のようなコマンドを使うことができる。

          rpm -qif `which thingy`

  また、Red Hat のソース CD を持っているなら、以下の方法でソースコードを
  インストールできる。

          rpm -i /mnt/cdrom/SRPMS/what.it.just.said-1.2.srpm

  上記のようにすると、圧縮ファイル(tarball)と、Red Hat のパッチがあれば
  同時にそうしたファイルも、/usr/src/redhat/SOURCES ディレクトリに入る。

  13.2.  リンク

  o  ソースからのソフトウェアのビルドに関する mini-HOWTO がある。
     Software Building mini-HOWTO
     <http://www.linuxdoc.org/HOWTO/Software-Building-HOWTO.html> (日本
     語訳 <http://www.linux.or.jp/JF/JFdocs/Software-Building-
     HOWTO.html>)

  o   ソースから Linux システムを構築するための HOWTO もある。その文書は
     実際に使うためのシステム構築に焦点を当てていて、単なる学習用の演習
     ではない。 The Linux From Scratch HOWTO
     <http://www.linuxfromscratch.org>

  o   Unix File System Standard
     <ftp://tsx-11.mit.edu/pub/linux/docs/linux-standards/fsstnd/> もし
     くは、Unix File System Standard に対するリンク
     <http://www.pathname.com/fhs/>。この文書では、Unix フィアルシステム
     内のどこに、何を置くべきなのかが述べられている。また、/bin や /sbin
     等の内容として最低限なにが必要なのかが解説されている。もし最小だが
     完全なシステムを構築しようとしているのなら、この文書は、リファレン
     スとして役に立つ。

  14.  Administrivia

  14.1.  Copyright

  この文書の著作権： Copyright (c) 1999, 2000 Greg O'Keefe.

  この文書の利用、配布、修正は、次のライセンスの条項に従う限り無料です。
  GNU General Public Licence <http://www.gnu.org/copyleft/gpl.html>
  他の文書においてこの文書の全体もしくは部分を利用するときは、著者まで連
  絡願います。

  14.2.  ホームページ

  この文書の最新バージョンは、こちらにあります。 From Powerup To Bash
  Prompt <http://www.netspace.net.au/~gok/power2bash>

  14.3.  フィードバック

  読者のコメント、批判、改善ついての提案など何なりと聞かせてください。

  Greg O'Keefe gcokeefe@postoffice.utas.edu.au

  14.4.  Acknowledgements

  製品名はそれぞれの権利者の登録商標です。

  この文書をつくるにあたって、お世話になった何人もの方たちがいるので、こ
  こに感謝のことばを述べたいと思います。

     Michael Emery
        unios のことを思い出させてくれた。

     Tim Little
        /etc/passwd に関するいくつかのよい手がかりを与えてくれた。

     sPaKr on #linux in efnet
        syslogd が /etc/services を必要とすることを指摘し、同時に
        "rolling your own" という言葉がソースからシステムを作ることを指
        すのだと教えてくれた。

     Alex Aitkin
        Vico と "verum ipsum factum" が「理解はつくることから生まれる」
        という意味であることを知らせてくれた。

     Dennis Scott
        わたしの 16 進数の計算の間違いを指摘してくれた。

     jdd
        誤植を指摘してくれた。

  14.5.  改訂履歴

  14.5.1.  0.8

  o   最初のバージョン。"From PowerUp to Bash Prompt" から分離した。

  14.6.  TODO

  o   docbook 形式に変換すること。

  14.7.  日本語訳について

  蛇足ではありますが、util-linux と sh-util については、インストール方法
  の記述がないので、訳者が試みてなんとか上手くいった方法を書いておきたい
  と思います。 (本当に参考程度です。)

  o  util-linux について
     展開したディレクトリの中に、MCONFIG という設定ファイルがあるので、
     それを 開いて、DESTDIR=/mnt/target という行を追加し、HAVE_SHADE=yes
     を no に、 LOCALEDIR を /mnt/target/usr/share/locale に変更します。
     あとは、./configure ; make ; make install です。

  o  sh-utils について
     ./configure --prefix=/mnt/target make ; make install です。

  バージョンは、それぞれ 2.10f と 2.0 でした。いろいろな方法があると思う
  ので、詳しくは、プログラム付属の文書か Linux From Scratch をご覧くださ
  い。

  翻訳: 千旦 裕司

  校正: 山森 浩幸
        武井 伸光
        佐野 武俊
        川嶋 勤

