2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

カーネルアップデート(Linux2.4カーネル編)!

カーネルのアップデートが必要なときのことを考えてみる。

■ 大きなバグが既存のカーネルにあったとき
■ セキュリティーホールが見つかったとき
■ 新しい機能が使いたいとき

などである。紹介しておいてこういう事を言うのも何だが、「kernelのアップデートは、無理してやる必要もないし、むしろ逆にkernel自体に問題がなければ避けるべきかと思う。」
Linuxカーネルのアップデートは、バイナリでやってる方が多いと思う。 どうも、俺はバイナリと言うのはエラーが出てもよく解らないし、非常に扱いにくいと常々思ってる。 途中経過が解らないし、エラーが出ても一見何もなかったように終わったときには再起動できず手遅れだったりする。 実は俺には、バイナリでカーネルのアップデートを行った経験があり、何回か失敗した苦い経験がある(T.T)。 そんな理由で、今回はカーネルソースからのカーネルのアップデートを説明する。 ソースからコンパイルする方法では、個人的にエラーが出ると途中でコンパイルを止めてしまうので挙動が顕著で失敗しにくいと思ってる。 バイナリの方が簡単そうに見えるが、実はエラーらしき物が出ても何気なく終わってしまう。 非常に危険だと思う。 しかし、カーネルのアップデートは危険を伴うので、「小心者で自信がない人の挑戦は避けた方が良いかも知れない。加えて、初心者は特に止めた方が良いと思う。まず、初心者では何かあっても復旧できないと言う事を声を大にして言っておく!」 俺は、ただ単にアホなので結構スリルとサスペンスが好きでやっちゃってます(笑)。 たまには、後悔するときもあるが、「まいっかぁ~ね」で忘れることにしています。ここでは、最新のカーネルを導入する方法を説明するが、最適化の説明はしていないことを了解 くださいませ。menuconfigでカーネルの最適化は出来るが、とりあえずアップデートするだけにしてある。

実行環境 )
OS : VineLinux 2.6R カーネル2.4.19→2.4.21(アップデートカーネル)


1.カーネルをゲットする

以下のサイトから最新カーネルをゲットする。ここ に最新ソースコードが有るのでゲットしてくる。
ちなみに、執筆時点(2003年7月)kernel2.4系では、Linux-2.4.21が最新であった。 ここから、俺の場合 Linux-2.4.21.tar.gz (パッチが出てる場合は、パッチも落としてパッ チ当てする)


2.カーネルを展開する

■ ロケールを切り替える(要注意)。
カーネルをコンパイルするときはロケールを英語にすること。エラーが出てしまう。

$ su –
password : *******

# LANG=C
一時的にlocaleを変える事を忘れずに行うこと!

■ カーネルを展開する。
Linux-2.4.21.tar.gzを適当なフォルダに置いておく。とりあえず、/tmpに置いておく。 それで、以下のディレクトリに展開する。

# cd /usr/src

# tar zxvf /tmp/linux-2.4.21.tar.gz

パッチが用意されてる場合は、パッチを適用する。

# cd linux-2.4.21

# cp /tmp/patchxxxxxx.gz .

カーネルパッチを適用する。
# zcat patchxxxxxx.gz | patch -p1


3.既存カーネルの設定を保持させる

既存のカーネルの設定をそのまま新カーネルの設定へ引き継ぐためカレントへ以前のカーネル設定をコピーする。

# cp /usr/src/linux-2.4.19/configs/kernel-2.4.19-i686.config .config


4.既存のカーネルの設定で.configを作る

既存のカーネルの設定で.configファイルを生成する。

# make oldconfig

対話型のコマンドで、n,y,mのどれかを選ぶようになっている。 デフォルトは、大文字になっている。 これは、RedHat、Vine系のやり方だす。 Tourbo系は、何でも専用のシェルが用意されてるようだす。
注:kernel2.6系ではこれが出来ないので注意する事。


5.カーネルのシンボルリンクを変更する

コンパイルを正常に行わせるために、ソースのシンボルリンクを変更する。

# rm -f /usr/src/linux

# ln -s /usr/src/linux-2.4.21 /usr/src/linux


6.本来だったらカーネルの最適化の設定(でも割愛)

# make xconfig

もしくは、

# make menuconfig

本来だったら、上記のコマンドを使って新しいカーネルの設定を行うが、 ここでは、以前の設定と何ら変わらないと言うことにしてるので割愛する。 最適化を目的とする場合は、このコマンドにてパラメータ設定を行う。


7.カーネルソースのコンパイル

依存関係の整合性を取る。

# make dep
依存関係のチェックを行う。

# make clean
オブジェクトコードのゴミを削除する。

# make bzImage
カーネルをコンパイルして、カーネルイメージを作成する。これにより、ブートイメージ等が作成される。


8.モジュールのセットアップ

カーネルモジュールをコンパイルする。

# make modules
/lib/modules/<カーネルのバージョン番号> のディレクトリ内に関連ファイルをつっこむ!

# make modules_install


9.カーネルのイメージをインストールする

最終段階で/bootディレクトリにカーネルイメージをつっこむ!

# make install

これで、ほとんどの作業が終わった。 もう一息だ!


10.liloの変更

ブートストラップには、liloもしくはGRUBが使われてると思う。 GRUBの場合は、新しいカーネルの情報が追加される。 しかし、liloは少し手を加えなければならない。

# cd /etc

# vi lilo.conf
省略
image=/boot/vmlinuz-2.4.21
label=linux
read-only
root=/dev/hda3

image=/boot/vmlinuz-2.4.19
label=linux.old
read-only
root=/dev/hda3
省略

これを訂正したら、

# /sbin/lilo -v
これで反映させる。
注:これを忘れるとせっかく上の作業を行ってもliloが上書きされないので注意する事。

以上ですべて終了。
(^о^)オ(^。^)ツ(^◯^)カ(^о^)レ
(* ^^)ノ±■ コーヒー飲む?

以上

コメント