カーネルビルド

GLANTANKを外部に公開するサーバにするにあたって、
最低限の準備として iptables の設定をしようと思う。

そこで問題発生。カーネルでnetfilter が対応していないではないか。
ということで、GLANTANKセットアップ初日は、カーネルビルドに費した。

手順は以下の通り。

1. aptitude をインストールしておく。

# apt-get install aptitude

2. 付属のソースコードCD-ROM より カーネルソースコード
linux-2.6.10-iop1-20050909snap.tar.bz2 をコピーする。
とりあえずコピー先は、/usr/src しておく。

3. ここで bzip2 がないことに気づく。

# aptitude install bzip2

4. また、カーネルビルドに必要なツールをインストールする。
実際にはどれが必要かかなり試行錯誤したが、結局以下の3つを入れると
後は依存関係で自動的にインストールされるはず。

# aptitude install gcc-3.4
# aptitude install kernel-package
# aptitude install libncurses5-dev

5. kernel-pkg.conf の設定。自分の名前とメールアドレスを記入。

maintainer := okinaka
email := okinaka@example.com

6. ソースを展開する。そしてシンボリックリンクを張る。

# cd /usr/src
# tar xjf linux-2.6.10-iop1-20050909snap.tar.bz2
# ln -s linux-2.6.10-iop1-20050909snap linux

7. ビルド用の環境変数の設定。ビルドの際は、gcc を見にいくのだが、
デフォルトのコンパイラ gcc が見つからずにビルドが始まらない。
そこで、環境設定を設定することでコンパイラーを指定する。

# export CC=gcc-3.4
# export MAKEFLAGS="CC=gcc-3.4"

でも、めんどっちいので gcc-3.4 から gcc のシンボリックを作成した。だめじゃん。

# ln -s /usr/bin/gcc-3.4 /usr/bin/gcc

7. GLANTANK用のデフォルト設定ファイル(config)を .config の元にする。

# cd /usr/src/linux
# cp config .config
# make oldconfig
# make menuconfig

8. カーネル設定 (make menuconfig)。
RAID と netfilter の設定を組みこんでおく。


Multi-device support (RAID and LVM) --->
[*] Multiple devices driver support (RAID and LVM)
<*> RAID support
<*> Linear (append) mode
<*> RAID-0 (striping) mode
<*> RAID-1 (mirroring) mode
<*> Faulty test mode for MD
Networking support --->
[*] Networking support
Networking options --->
[*] Network packet filtering (replaces ipchains) --->
IP: Netfilter Configuration --->
以降をとりあえず全部チェック。

9. バイナリーアーカイブとソースアーカイブを作成。

# make-kpkg clean
# make-kpkg --revision ba2 --zimage binary-arch kernel_source

10. カーネルモジュール。
古いモジュールをバックアップし、有事に備える。

# mv /lib/modules/2.6.10-iop1 /lib/modules/2.6.10-iop1.orig
# cd /usr/src
# dpkg -i kernel-image-2.6.10-iop1_ba2_arm.deb

11. カーネルイメージ。
RedBoot は、イメージの読み先が固定になっているので、
カーネルイメージのファイル名を変更。
(もちろん古いものをバックアップ。)

# mv /boot/zImage /boot/zImage.orig
# cp /boot/vmlinuz-2.6.10-iop1 /boot/zImage

12. 再起動