大橋のページ

iproute2+tcを使って1台で複数インターネット接続

1 複数のインターネット接続
2 インタフェースとルーティングテーブル
3 ifconfigとrouteコマンド
4 Linuxカーネルのコンパイル 1
5 Linuxカーネルのコンパイル 2
6 iproute2+tcのインストール
7 ipコマンドでインタフェースの登録
8 ipコマンドでルーティング設定
9 namedをインタフェースごとに起動する
10 sendmailをインタフェースごとに起動する

5 Linuxカーネルのコンパイル2

カーネルをコンパイルする

オプションの設定が終わったら、コンパイルに移ります。設定したオプションは、「/usr/src/linux」ディレクトリに「.config」という名前(隠しファイル)で保存されています。

続いて、

# make dep
# make clean
# make bzImage 

をそれぞれ実行します(「;」で続ける方法もあります)。「make bzImage」では、「make zImage」と実行する方法もありますが、「make zImage」では、カーネルが512KB以下でなければならないため、不要なドライバを外してしまうか、モジュールとして組み込むなどしてカーネルのサイズを小さくする必要があります。RedHat 6.1の標準のカーネルはかなり大きく、圧縮された状態でも625KBほどあります。そのため、標準の「/usr/src/linux/.config」に少し手を加えてコンパイルすると、「make zImage」では、

tools/build bootsect setup compressed/vmlinux.out CURRENT > zImage
Root device is (3, 8)
Boot sector 512 bytes.
Setup is 3544 bytes.
System is 522 kB
System is too big. Try using bzImage or modules.
make[1]: *** [zImage] Error 1
make[1]: Leaving directory `/usr/src/linux-2.2.12/arch/i386/boot'
make: *** [zImage] Error 2

というような「too big」エラーが出ます。「make bzImage」としたほうが簡単です。

続いて、モジュールのコンパイルとインストールをします。

# make modules
# make modules_install

「module_install」を実行すると「/lib/modules」の下に「2.2.12-32」のようなディレクトリができて、モジュールがインストールされます。インストールは上書きインストールであるため、以前のものが残っていると起動時に実行される「depmod -a」で「/lib/modules/2.2.12-32/misc/sch_teql.o: unresolved symbol(s)」のようなメッセージが表示されてしまいます。すでにあるディレクトリの名前を変更してバックアップしておいてから、新規にモジュールをインストールしたほうが安全で確実です。もし、以前のモジュールが残っていてメッセージが表示されるようなら、「rm -f /lib/modules/2.2.12-32/misc/sch_teq.o」などrmコマンドで削除してしまってかまいません。

テストするためにいったんFDにカーネルをインストールします。FDDにFDをセットし、フォーマットします。

# whereis fdformat
fdformat: /usr/bin/fdformat /usr/man/man8/fdformat.8
# /usr/bin/fdformat /dev/fd0H1440
両面, 80 トラック, 18 セクタ/トラック。合計容量 1440 kB。
フォーマットします ... 終了
照合します ... 終了
#

フロッピーディスクとCD-ROMの取扱方法
http://kondara.sdri.co.jp/docs/Kondara-Removable-HOWTO/Kondara-Removable-HOWTO.html

FDにLinuxカーネルをインストールします。このときもカーネルが512KB以下なら「make zdisk」です。512KB以上なら「make bzdisk」とします。

# make zdisk

FDDにFDを入れたまま、再起動して、新しいカーネルで無事起動するかをテストします。問題ないようなら、新しいカーネルを配置します。カーネルが512KB以下なら「make zlilo」、512KB以上なら「make bzlilo」とします。

# make zlilo

ただし、「make zlilo」コマンドを実行すると、「/」に「System.map」と「vmlinuz」が配置されます。しかし、RedHatの場合、「/boot」の下にvmlinuzが置かれる設定になっているため、「/etc/lilo.conf」を修正するか、カーネルと「System.map」を「/boot」ディレクトリに移動する必要があります。

古いカーネルは、実態が「vmlinuz-2.2.14-5.0」で、これは圧縮されたカーネルです。圧縮されていないカーネルは「vmlinux-2.2.14-5.0」になっています。「vmlinuz」もありますが、「vmlinuz-2.2.14-5.0」のシンボリックリンクになっていますが、RedHat Linux 6.1/6.2では、「lilo.conf」では「vmlinuz-2.2.14-5.0」が指定してあります。「System.map」も「System.map-2.2.14-5.0」のシンボリックリンクになっています。

「/」にできた「System.map」を上書きで移動し、「vmlinuz」も上書きで移動します。上書きでもシンボリックリンクに上書きされるだけで、実態はそれぞれ残っています。続いて、「/etc/lilo.conf」を編集します。

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux     <-- デフォルトの起動imageのlabelが「linux」になっている

image=/boot/vmlinuz-2.2.14-5.0
        label=old.linux <--lavelを変更します
        read-only
        root=/dev/hda1
image=/boot/vmlinuz  <--以下、追加します
        label=linux
        read-only
        root=/dev/hda1

続いて、liloを実行します。

# /sbin/lilo
Added linux *

これでカーネルの再構築は終わりです。再起動して問題ないかどうかを確認します。

(追加 筆者が行なったときは、コンパイル時に「ip_masq.c:2534: warning: long unsigned int format, unsigned int arg (arg 4)」のような警告が出ていました。とくにこの警告はネットワーク関係で表示されました。詳しい情報を求めています。)

著作権、商標等について (C) 2000 HyperDyne Inc.