Linux-2.4.22 のインストール

推定構築時間:           0.1 SBU
推定必要ディスクスペース  186 MB

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.

カーネルヘッダのインストール

まだ新しいカーネルをコンパイルしません ー これは全てのパッケージのインストールが終ったあとにします。 しかしカーネルヘッダを必要とするパッケージもあるので、今カーネルアーカイブを解凍し、設定をして、それらのパッケージによって見つけられるようにヘッダファイルをコピーします。

カーネルソースディレクトリの中にあるファイルが root によって所有されていないことに注意するのは重要です。 root ユーザとしてパッケージを解凍するとき(ここ chroot 環境の中でするように)にはいつでも、パッケージャのコンピュータ上にあったときのユーザーとグループ ID が何であれ、ファイルはその ID を持つことになります。 これは、インストールのあとでソースツリーを削除するので、通常インストールする他のパッケージの問題とはなりません。 しかし Linux カーネルソースツリーはたびたびかなり長い間残しておかれるので、パッケージャが使っていたユーザ ID が何であれお使いのマシンの誰かに割り当てられる可能性があり、その人がカーネルソースへ書き込みをするかもしれません。

この事を考慮して、すべてのファイルが root ユーザーによって所有されるように chown -R 0:0linux-2.4.22 ディレクトリに対して実行するといいかもしれません。

ヘッダをインストールする準備をします。

make mrproper

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

include/linux/version.h を作ります。

make include/linux/version.h

プラットフォーム固有の include/asm シンボリックリンクを作成します。

make symlinks

プラットフォーム固有のヘッダーファイルをインストールします。

cp -HR include/asm /usr/include
cp -R include/asm-generic /usr/include

クロスプラットフォームカーネルヘッダをインストールします。

cp -R include/linux /usr/include

autoconf.h ヘッダファイルを使ういくつかのカーネルヘッダファイルがあります。 まだカーネルを最適化していないので、コンパイルが失敗することを避けるためにこのファイルを自分で作る必要があります。 空の autoconf.h ファイルを作ります。

touch /usr/include/linux/autoconf.h

カーネルヘッダをコピーし、それらのシンボリックリンクを作らない理由

これまで、/usr/include/{linux,asm} ディレクトリを /usr/src/linux/include/{linux,asm} へシンボリックリンクすることは一般的な習慣でした。 以下に載せる Linux Torvalds によって Linux Kernel メーリングリストに投函された指摘からの引用にあるように、これは悪い習慣でした。

新しいカーネルをコンパイルする人々への提案。

見えるところに一つのシンボリックリンク(カーネルの構築それ自身が設定する、つまり
カーネルコンパイル自身の内部でのみ使われる "linux/include/asm" シンボリックリン
クを除く)を持つべきではありません。

そしてそう、これはまさに私がやることです。私の /usr/src/linux は、たとえ私が長い
こと 2.2.13 カーネルヘッダを使っていなくてもまだ古い 2.2.13 ヘッダファイルを持っ
ています。しかしこれらのヘッダは Glibc がそれに対してコンパイルされたもので、それ
ゆえこれらのヘッダはライブラリのオブジェクトファイルに整合します。

そしてこれは少なくともここ 5 年間示唆されて来た環境です。私は何故シンボリックリ
ンクの問題が腐ったゾンビの様にまだ生きているのかわかりません。全てのディストリビ
ューションの非常に多くがまだその壊れたシンボリックリンクを持っていて、人々はまだ
、例えそれが正しくなくても linux ソースが "/usr/src/linux" の中に入っているべきだ
ということを憶えています。

極めて重要な部分は、 Linus がヘッダファイルは Glibc がそれに対してコンパイルされたものであるべきだと述べている所です。 これらのヘッダはオブジェクトコードのライブラリファイルに整合するので、あとで他のパッケージをコンパイルするときに使われるべきものです。 ヘッダをコピーすることによって、あとでカーネルをアップグレードしてもそれらがまだ利用できるようにします。

ところで、/usr/include/{linux,asm} へのシンボリックリンクを持たない限りは、/usr/src/linux にカーネルソースを置くことは完壁に申し分ないことを注意しておきます。