Linux From Scratch 5.1.1 / 6.LFSシステムを起動できるようにする



/etc/fstab ファイルを作成する

/etc/fstab ファイルは、パーティションがデフォルトでどこにマウントされ、どのファイルシステムがどういう順番でチェックされねばならないか、ということを決定するために、いくつかのプログラムによって使われます。新しいファイルシステムテーブルを、以下のように作ります。

cat > /etc/fstab << "EOF"
# Begin /etc/fstab

# filesystem  mount-point  fs-type  options         dump  fsck-order

/dev/xxx      /            fff      defaults        1     1
/dev/yyy      swap         swap     pri=1           0     0
proc          /proc        proc     defaults        0     0
devpts        /dev/pts     devpts   gid=4,mode=620  0     0
shm           /dev/shm     tmpfs    defaults        0     0

# End /etc/fstab
EOF

もちろん、xxx と yyy, fff を、たとえば hda2 や hda5, reiserfs といったように、お使いのシステムに適切な値に置き換えて下さい。この表の六つのフィールドについての詳しい情報については man 5 fstab を見て下さい。

reiserfs パーティションを使っているときは、そのパーティションはダンプやチェックの必要がないので、行の最後に 1 1 とあるのを 0 0 と置き換えて下さい。

tmpfs へのマウントポイントである /dev/shm は POSIX 共有メモリを有効にするために含めます。お使いのカーネルはこれを動かすために要求されるサポートを組み込みで構築されていなければいけません。これについては次章でより詳しく取り上げます。現在のところ非常に少数のソフトウェアだけが、POSIX 共有メモリを実際に使っていることを注意して下さい。ですから、/dev/shm マウントポイントを任意選択だとみなすことができます。より詳しい情報はカーネルソースツリーの中の Documentation/filesystems/tmpfs.txt を見て下さい。

さらに、ほかにも fstab ファイルに加えたいと思う行があります。たとえば、USB デバイスを使おうとしているなら、それを使うためのような行です。

usbfs       /proc/bus/usb  usbfs    defaults    0     0

このオプションはもちろん、お使いのカーネルに、関連するサポートをコンパイルしてあるときだけ動きます。

Linux-2.4.26 のインストール

Linux の内容

Linux カーネルは全ての Linux システムの中心です。これは Linux を動かしているものです。コンピュータの電源が付けられ Linux システムがブートする時、真っ先にロードされる Linux ソフトウェアの一つがカーネルです。カーネルはシステムのハードウェア構成、シリアルポート、パラレルポート、サウンドカード、ネットワークカード、 IDE コントローラー、SCSI コントローラやその他にも多くの物をを初期化します。簡単に言えばつまり、カーネルはソフトウェアが実行できるようにハードウェアを準備します。

インストールされるプログラム: the kernel 及び the kernel headers

Linux インストール依存性

Linux は以下のパッケージに依存します: Bash, Binutils, Coreutils, Findutils, GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, Sed.

the kernel のインストール

カーネルの構築はいくつかの段階を踏みます。カーネルの設定、コンパイル、そしてインストールです。本書のカーネルを設定する方法が気に入らない場合は、その他の方法を探すのにカーネルソースツリーの中の README ファイルを見て下さい。

以下のコマンドを実行してコンパイルの準備をします。

make mrproper

これはカーネルツリーを完全にクリーンにします。カーネルチームはこのコマンドをそれぞれのカーネルのコンパイルに先立ち実行するよう勧めています。解凍した後のソースツリーがクリーンであると当てにしてはいけません。

メニュー形式のインターフェイスを通じてカーネルを最適化します。

cp /sources/linux-2.4.26.tar.bz2 /usr/src
cd /usr/src
tar jxvf linux-2.4.26.tar.bz2
rm linux-2.4.26.tar.bz2
cd linux-2.4.26
make menuconfig

ある状況では make oldconfig の方がより適切でしょう。より詳しい情報については README を見て下さい。

望むのなら、単純にカーネルコンフィグファイル .config をお使いのホストマシンから(それが利用できると仮定します)解凍した linux-2.4.22 ディレクトリにコピーすることでカーネルの設定を飛ばしてもいいでしょう。しかしこの方法はお勧めしません。すべてのの設定メニューを調べて、ゼロからご自分用のカーネル設定を作成したほうがようでしょう。

POSIX 共有メモリのサポートについては、カーネルの設定オプション "Virtual memory file system support" が有効になっているのを確かめてください。それは "File systems" メニューの中にあって通常デフォルトで有効になっています

依存性を確認して依存性情報ファイルを作ります。

make CC=/opt/gcc-2.95.3/bin/gcc dep

カーネルイメージをコンパイルします。

make CC=/opt/gcc-2.95.3/bin/gcc bzImage

モジュールとして設定されたドライバーをコンパイルします。

make CC=/opt/gcc-2.95.3/bin/gcc modules

カーネルモジュールを使うつもりなら、/etc/modules.conf ファイルが必要となります。モジュールと一般的なカーネル設定に付属する情報は、通常は linux-2.4.22/Documentation ディレクトリの中にあるカーネル付属文章にあります。 modules.conf の man page と http://www.tldp.org/HOWTO/Kernel-HOWTO.html にあるカーネル HOWTO も情報源となります。

(訳注:カーネル付属文章の日本語訳は Linux JF Project のウェブサイト http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.6/index.html などで利用できます。)

モジュールをインストールします。

make CC=/opt/gcc-2.95.3/bin/gcc modules_install

文章なしでは何も完成しないので、カーネルと共にマニュアルページも構築します。

make mandocs

そして全てのページをインストールします。

cp -a Documentation/man /usr/share/man/man9

カーネルのコンパイルは完了しましたが、作成されたファイルのいくつかはまだソースツリーの中にあります。インストールを完成させるために、二つのファイルが /boot ディレクトリにコピーされる必要があります。

カーネルファイルへのパスは、お使いのプラットフォームに依存します。カーネルをインストールするため次のコマンドを実行します。

cp arch/i386/boot/bzImage /boot/lfskernel

System.map はカーネルのシンボルファイルです。実行中のカーネルの「カーネル API に含まれる全関数の関数エントリポイント」と「カーネルデータ構造のアドレス」のマッピング情報が、このファイルに含まれています。マップファイルをインストールするために以下のコマンドを実行します。

cp System.map /boot
cp .config /boot/config-lfskernel

SCSIなどを使っている場合はinitrdファイルが必要な場合があります。

cd /boot
mkinitrd initrd-lfskernel.img lfskernel

mkinitrdが存在しないためカーネルコンフィグで「SCSI LAW DEVICE」 を有効にして対処する。


LFS システムを起動できるようにする

ピカピカの LFS システムが九分通り完成しています。最後にやるべき事はそれを起動できることを確かめることです。以下の説明は、たとえば IA-32 アーキテクチャのコンピュータ、つまり普通の PC にのみ適用できます。他のアーキテクチャの "ブートロード" についての情報は、これら各アーキテクチャ向けのリソース固有の場所に置かれています。

ブートローディングは複雑な問題です。最初にいくつか注意をしておきます。現在使用しているブートローダに慣れておいたほうがいいということ、ハードディスク上にある、起動可能にしたい別のオペレーティングシステムのことを把握しておく必要があります。原因が何であるにしろ、もしお使いのコンピュータが使えなく(起動できなく)なったときに、コンピュータを救助できるよう、緊急の起動ディスクを準備していることを確認してください。

以前、この段階への準備として Grub ブートローダソフトウェアをコンパイルしインストールしました。ここではハードディスクの特定の場所へ Grub の特別なファイルを書き込むという手続きを踏みます。その前に、万一に備えて Grub 起動ディスクを作成することを強く勧めます。空のフロッピーディスクを挿入し以下のコマンドを実行してください。

dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1

ディスクを取りだしどこか安全なところに保管しておいて下さい。さてそれでは grub シェルを実行します。

grub

Grub はデバイスとパーティションに対して ( hdn,m ) という独自の命名規則を使います。n はハードドライブの番号、m はパーティションの番号で共にゼロから始まります。これはたとえば、hda1 のパーティションは Grub では ( hd0,0 ) で、hda2 は ( hd1,1 ) となります。 Linux とは対照的に、Grub は CD-ROM ドライブをハードドライブとして考えないので、たとえば、CD を hdb にしていて、二つ目のハードドライブを hdc にしているとすると、二つ目のハードドライブは ( hd1 ) となります。

上の情報を使って、ルートパーティションに適切な呼称を決定して下さい。以下の例ではルートパーティションが hda4 であると仮定しています。

最初に、Grub に stage{1,2} ファイルを探す場所を教えます。Grub に選択肢を表示させるためにどこでもタブを使うことができます。

root (hd0,3)
Warning
以下のコマンドは現在お使いのブートローダを上書きします。望まないなら、コマンドを実行しないで下さい。たとえば、あなたは MBR ( Master Boot Record ) を管理するのにサードパーティのブートマネージャを使っているかも知れません。この場合は恐らく、Grub を LFS パーティションの "ブートセクタ" へインストールする方が賢明かも知れません。この場合のコマンドは setup ( hd0,3 ) となります。

それでは Grub に、自身を hda の MBR ( Master Boot Record ) へインストールするよう教えます。

setup (hd0)

何も問題がなければ、Grub は /boot/grub の中にそのファイルを見つけたことを報告するでしょう。Grub に対してする事はこれですべてです。

quit

さて Grub のブートメニューを定義する "メニューリスト" ファイルを作らなければいけません。

cat > /boot/grub/menu.lst << "EOF"

# /boot/grub/menu.lst を作成します。

# デフォルトではメニューの一番最初のエントリを起動します。
default 0

# デフォルトのエントリを起動するまでに 30 秒待ちます。
timeout 30

# 綺麗な色を使いましょう。
color green/black light-green/black

# 初めのエントリは LFS です。
title LFS 5.1.1
root (hd0,3)
kernel /boot/lfskernel root=/dev/hda4 ro
EOF

ホストディストリビューションのエントリを加えるといいでしょう。それはこのようになります。

cat >> /boot/grub/menu.lst << "EOF"
title Red Hat
root (hd0,2)
kernel /boot/kernel-2.4.20 root=/dev/hda3 ro
initrd /boot/initrd-2.4.20
EOF

また、Windows とデュアルブートにしたいなら、以下のエントリがその起動を可能にします。

cat >> /boot/grub/menu.lst << "EOF"
title Windows
rootnoverify (hd0,0)
chainloader +1
EOF

info grub で知りたいことを見つけられない場合、Grub についてのより詳しい情報を http://www.gnu.org/software/grub で見つけることができるでしょう。