各種ファイルの準備ができたら、いよいよLFSのカーネルをコンパイルする。LFS-BOOKでは、この手順に先立ってソースコードを展開していないが、必要なのでまず展開してからコンパイルする。
ここでは、これまでのソフトウェアのインストールとは違い、いくつものmakeが実行されるが、それぞれ意味がある。まずは、それを解説しておこう。
make mrproper | 既存のconfigureの結果を削除する(新規だからやらなくていいように思うが一応やっておく) |
---|---|
make menuconfig | カーネルのコンパイルについて、各種の設定を行う。通常のソフトウェアインストールにおける./configureと同じ |
make dep | configの内容を反映させるために、依存関係を更新する |
make bzImage | arch/i386/boot/bzImage(圧縮カーネル)を作成する |
make modules | moduleの構築 |
make modules_install | moduleのインストール |
最後に登場するmodule(モジュール)とは、カーネルのコンパイル時に一緒にコンパイルしてしまうのではなく(bzImageに含めるのではなく)、必要なときにだけカーネルに組み込むことのできるプログラムをいう。これは、デバイスドライバやファイルシステムなどで、使用頻度の低いものに対して有効な手法といえる。必要に応じて組み込まれるモジュールのファイルは、/lib/modulesにカーネル別に置かれているはずだから、どんなものがあるかを知りたければ、そちらを参照するとよいだろう。
このほかに解説しておくべきものとしては、make menuconfigが挙げられる。これを実行すると、画面1のような設定画面が表示される。設定項目を全部見ていくと結構な量があることが分かると思うが、1つ1つ見ていきながら、自分にとって必要なものを設定する。
特に、MS-DOS(vfat)やNTFSをマウントして使いたい方などは、デフォルトではチェックされていない点に気を付けよう。このほかにも、SCSIは使っていないからサポートする必要がないなど、分かる範囲だけでも設定しておくとよいだろう。
make menuconfigではなく、make xmenuconfigとすればX Window Systemベースの設定画面を起動できる。make configとすれば、対話式(一問一答形式)での設定することもできる。しかし、マシンパワーを必要とせず、操作もしやすい(間違えてもやり直しやすい)という点で、make menuconfigを使うのがベストであろうと思う。
カーネルをコンパイルしたら、生成されたbzImageに名前を付けて/bootへとコピーする。さらに、ソースディレクトリに生成されたSystem.mapというファイルも/bootへとコピーしておく。
ここまでできたら、chrootしていた環境からlogoutで抜け出して、ベース・ディストリビューションへと戻る。
ベース・ディストリビューション環境に戻ったら、LFS環境で作成したカーネル(/bootにコピーしたもの。以下の例ではlfskernel)を、ベース・ディストリビューションの/bootにもコピーする。これは、LFSのパーティションにブートローダがないからだ。
# cp /mnt/lfs/boot/lfskernel /boot
カーネルをコピーしたら、ベース・ディストリビューションを起動するために利用しているブートローダに、LFSを起動するための設定を書き加える。
# cat >> /etc/lilo.conf << "EOF" image=/boot/lfskernel label=lfs root=/dev/hdb6 read-only EOF
上記は、LILOをブートローダとしている場合の例である。/dev/hda6としている部分は、筆者の環境におけるLFS用のパーティション・デバイスである。この部分は、各自の環境に合わせて変更してほしい。LILOの場合は、このように/etc/lilo.confを書き換えた後で、
# /sbin/lilo -v
を実行して、変更を認識させなければならない。
GRUBの場合は設定が異なる。/boot/grub/menu.lstまたは/etc/grub.confに対し、次のようなコマンドを発行して設定を変更する(ディストリビューションによってファイル名やパスが異なるので要確認)。GRUBの場合は、LILOのように変更を認識させる必要はない。
# cat >> /etc/grub.conf << "EOF" title Linux From Scratch (2.4.18) root (hd0,0) kernel /boot/lfskernel ro root=/dev/hda6 EOF
LFSを起動させるための準備は整った。LFSが無事起動するかどうか、マシンを再起動してみよう。ブートローダの設定がうまくいっていれば、起動するカーネルの選択肢としてLFSが現れるはずである。
筆者の環境では、USB関連のエラーが出て起動が一度ストップしてしまう(注)が、[Enter]キーを押して先に進めるとLFSが起動した。
注:これはベース・ディストリビューションでも出ている症状なので、LFSの問題ではない。
起動したのが本当にLFSなのかどうかを確かめるには、ルートディレクトリに移動して各サブディレクトリのファイルを見てみればよい。また、素っ気ないプロンプトやdf -kでマウント状態を表示しても確認できる。
これで、ひとまずはLFSを起動できた。おさらいの意味も込めて、LFSのインストール手順をまとめておこう。筆者が提供したスクリプトについても、補記しておくことにする。
1. ソース(lfs-packages-3.3.tar)の入手とLFS用パーティション(マウントポイント)の作成
2. ディレクトリの作成(script.txt:rootで実行)
3. lfs-packageのソースを/mnt/lfs/usr/srcにコピー
4. lfs-packageを展開
5. ライブラリを静的に取り込んでコンパイル(lfs-compile.sh)
6. /procのマウントとchroot(root.sh:rootで実行)
− ここからはchroot後の環境 −
7. ライブラリを動的に組み込んでコンパイル(lfs-compile2.sh)
8. 各種設定ファイルの作成とカーネルのコンパイル(lfs-compile3.sh)
− ベース・ディストリビューションへ戻る −
9. ブートローダの設定
10. 起動
ようやくLFS-3.3が起動できるようになったが、ここまでを理解したうえで手順を見直してみると、案外簡単にできてしまう気もする。これはひとえに、LFS-BOOKが親切に手順を解説してくれているからだし、(基本的には)そのとおりにやっているだけで動作したからでもある。
それでも、充実したインストーラを備える最新のディストリビューションとは違い、起動しただけで喜びに浸れる。これは、まさにLinuxが登場したばかりのころと同じ感覚であり、久方ぶりにそれを味わったという方も多いだろう。単にlsと打って答えが出るだけでもうれしいのだが、残念なことに自分のオリジナルな環境とはいい難い。
ただシェルを使うことができ、一般的なコマンドが通るだけであって、X Window Systemも動作していない。達成感はそれなりに得られるかもしれないが、使えるOSにするまでにはまだ遠い道のりが残されているだろう。これを、自分のオリジナリティにあふれた、使えるOSに育てていくことこそが、本当のLFSなのである。
そのためには、これまでに紹介してきたインストール手順に手を加える必要があるかもしれない。あるいは、いま起動しているLFSに手を加え、必要なソフトウェアをインストールしなければならないのかもしれない。何をするべきかは、各人の目的によるので一概に限定することはできない。
今後は、LFS環境を充実させる手段を紹介していくつもりだ。筆者の目の前で、ただプロンプトを光らせているだけのそれ(LFS)は、わが子のようにかわいく、それを育てていきたいと考えている。しかし、筆者がのんびりしている間にLFS-4.0がリリースされてずいぶんと時間がたってしまった。
次回はLFS-4.0のインストール方法を紹介し、以降はLFS-4.0環境を育てていく話を連載するつもりだ。これまでのように中断せず、なるべく一定のペースで掲載できるように努力するので、今後ともよろしくお付き合い願いたい。
Copyright © ITmedia, Inc. All Rights Reserved.