さて。 ここまでいろいろと弄ってきましたが、ここで、カーネルの再構築を行います。
この先登場するquotaやiptableなどにカーネルの機能が必要だということと、VineやRedhatなどの一般向けディストリビューション用のカーネルは、あらゆる機能が詰め込まれているので余計なものも多いのです。
必要なものを揃える
このサーバーは、「ぶっこ抜き」によってほとんどのソフトが入っていません。カーネル再構築に必要なパッケージをインストールします。まずは、/usrを書き込みできるようにしておきます。
# mount /usr -o remount,rw
そして、これらのソフトを順に導入します。
# apt-get install kernel-headers # apt-get install kernel-source # apt-get install make # apt-get install binutils # apt-get install gcc-cpp # apt-get install glibc-devel # apt-get install gcc # apt-get install ncurses-devel
カーネルの設定
さあ、あとは、 make menuconfig で設定を行ってください。
他の設定はおのおのの機械に合わせて行いますが、忘れずに設定しておいてほしいものがあります。
-File system ---> [*] Quota support -Networking options ---> [*] Network packet filtering (replaces ipchains) -Networking options ---> IP: Netfilter Configuration ---> <M> Connection tracking (required for masq/NAT) (NEW) <M> FTP protocol support (NEW) <M> Amanda protocol support (NEW) <M> TFTP protocol support (NEW) <M> IRC protocol support (NEW) <M> IP tables support (required for filtering/masq/NAT) (NEW) <M> limit match support (NEW) <M> MAC address match support (NEW) <M> Packet type match support (NEW) <M> netfilter MARK match support (NEW) <M> Multiple port match support (NEW) <M> TOS match support (NEW) <M> recent match support (NEW) <M> ECN match support (NEW) <M> DSCP match support (NEW) <M> AH/ESP match support (NEW) <M> AH/ESP match support (NEW) <M> LENGTH match support (NEW) <M> TTL match support (NEW) <M> tcpmss match support (NEW) <M> Helper match support (NEW) <M> Connection state match support (NEW) <M> Connection tracking match support (NEW) <M> Packet filtering (NEW) <M> REJECT target support (NEW) <M> Full NAT (NEW) <M> MASQUERADE target support (NEW) <M> REDIRECT target support (NEW) [*] NAT of local connections (READ HELP) (NEW) <M> Packet mangling (NEW) <M> TOS target support (NEW) <M> ECN target support (NEW) <M> DSCP target support (NEW) <M> MARK target support (NEW) <M> LOG target support (NEW) <M> ULOG target support (NEW) <M> TCPMSS target support (NEW) <M> ARP tables support (NEW) <M> ARP packet filtering (NEW) <M> ARP payload mangling (NEW) < > ipchains (2.2-style) support (NEW) < > ipfwadm (2.0-style) support (NEW)
これらは、セキュリティ上是非必要なものです。
最後に、ちょっと一工夫
これからコンパイルするのですが、この自作したオリジナルカーネル。Vineの既存のものと混ざったりしてはこまりますね。
そこで、Makefileをちょっと弄っておきます。
上から4行目くらいのところ。
VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 26 EXTRAVERSION = -0vl16 ・ ・ ・
この、EXTRAVERSION ってところを書き換えると、リビジョン番号が変化します。たとえば私だったら・・・
VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 26 EXTRAVERSION = -0hd16 ・ ・ ・
こんなふうに書き換えました。(vlはVineLinuxの略。私はhideyosiなので・・・(^^) )
メイク開始!
さあ、各種設定がすんだら、カーネルをコンパイルします。
# make dep;make clean;make bzImage
カーネルモジュールもコンパイル。
# make modules
さて。無事コンパイルできました。では、新しいカーネルをインストールします。
まず、モジュール。
ちなみに、カーネルモジュールは、ちゃんとリビジョン番号ごとに別にインストールされます。ちょっとみてみましょう。
# ls /lib/modules 2.4.26-0vl15/
ほら、今はこんな状態。では、新しいカーネルモジュールをインストール。
# make modules_install
で、もう一度確認してみると・・・
# ls /lib/modules 2.4.26-0hd16/ 2.4.26-0vl15/
ね? ちゃんと分けてインストールしてくれるでしょ?
じゃ、こんどはカーネル。カーネルのインストールはちょっと一工夫。
まず、今回コンパイルして出来上がったカーネルは、 /usr/src/linux/arch/i386/boot/bzImage がそれ。
で、これをブートカーネル部分の /boot にコピーするわけなんだけど、今、ちゃんと動いている現カーネルもとっておきたいよね? (万が一のこともあるし・・・)
ちなみに、現在のカーネルは、 /boot/vmlinuz-2.4.26-0vl15 。
なので、/boot に、これをまねてコピーします。(リビジョン番号をつけて)
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.26-0hd16
これで、元のカーネルはそのまま残ります。
liloの設定
最後に、この新しいカーネルを起動できるように、lilo を設定します。
lilo の設定は、 /etc/lilo.conf に書かれていますので、これを開きます。 きっと、標準ではこんな感じでしょう。
prompt timeout=50 default=linux boot=/dev/hda map=/boot/map install=menu message=/boot/message image=/boot/vmlinuz-2.4.26-0vl15 label=linux initrd=/boot/initrd-2.4.26-0vl15.img read-only root=/dev/hda2 append=" resume2=swap:/dev/hda5"
これを、こんな感じに書き換えます。
prompt timeout=50 default=linux boot=/dev/hda map=/boot/map install=menu message=/boot/message image=/boot/vmlinuz-2.4.26-0vl15 label=linux initrd=/boot/initrd-2.4.26-0vl15.img read-only root=/dev/hda2 append=" resume2=swap:/dev/hda5" image=/boot/vmlinuz-2.4.26-0hd16 label=linux.org # initrd=/boot/initrd-2.4.26-0vl15.img read-only root=/dev/hda2 append=" resume2=swap:/dev/hda5"
最後に、この設定を反映させるために、 lilo を実行します。
# lilo Added linux * Added linux.org #
さあ! これでOKです。あとは再起動します。起動時、 lilo のメニューに、 linux.org が出てくるはずですので、これを選択すれば新しいカーネルで起動できます。
カーネルに問題があったら、これまでの手順を繰り返します。
カーネルがまったく問題ないことを確認できたら、 lilo.conf の default=linux の部分を default=linux.org に書き換えれば、標準で新カーネルが起動するようになります。
神経質な後処理
新しいカーネルがちゃんと問題なく動くようになったら、後処理をしておきます。
まず、うまく設定できたカーネルの設定を保存しておきましょう。カーネルソースにある、 .config というファイルです。
# cp /usr/src/linux/.config /home/toyotomi
これで、カーネルソースが新しくなったりした時にもすぐに対応できます。
また、Cコンパイラなどの開発環境は、普段からサーバーに置いておくものではありません。一旦抜いておきます。(必要になったら、またインストールすればいいのですから) おっと。/usr を、書き込みできるようにしてから行うのを忘れずに。 それと、カーネルソースは一旦クリーンしておかないと、削除した時にゴミがのこってしまいますのでこれもやっておきます。
# mount /usr -o remount,rw # cd /usr/src/linux # make clean # apt-get remove ncurses-devel # apt-get remove gcc # apt-get remove glibc-devel # apt-get remove gcc-cpp # apt-get remove binutils # apt-get remove make # apt-get remove kernel-source # apt-get remove kernel-headers # mount /usr -o remount,ro
ちなみに、これらのパッケージは結構大きいですよね。aptで最初に導入する時、ダウンロードにわりと時間が掛かったかもしれません。こんなのを削除しちゃって、また必要な時にはダウンロードしなおし。それじゃ時間かかってしょうがないよ!と思うかもしれませんが・・・・
aptはなかなかよく出来ています。一度ダウンロードしたものは、 /var/cache/apt/archivers に格納されています。ネットワークで最新のバージョンを検索し、もしキャッシュにも同じものがあれば、いちいちダウンロードしてきません。なので、このキャッシュにあるものを残しておけば、もう一回導入する時も早く、もし最新版が出ていれば、その時だけダウンロードしなおすということを自動でやってくれます。