kernelのアップデート

※Linuxの「核」となるものです。セキュリティと安定動作の
 ためにも、当面はLinux2.2.xの安定版カーネルを使用しましょう。
 また、セキュリティ向上のため、OpenWallプロジェクトのパッチも
 取り入れるようにしましょう。
(現在、OpenWallのパッチはi386系のみ対応しています。)

【ダウンロード】
ftp://ftp.kernel.org/pub/linux/kernel/v2.2/ より

最新の「〜.bz2」をダウンロードします。
(15MBくらいありますよ!!)

カーネルのバージョンによっては、
glibcなどの別ファイルを更新する必要があります。
でも、glibcをバージョンアップするなら、思い切って
雑誌の付録についてくる最新のLinuxをインストール
した方がスッキリすると思います。


【OpenWallパッチの取得】
セキュリティ向上のため、OpenWallプロジェクトの、
「スタック領域におけるプログラムの実行を禁止するパッチ」も
同時に導入しておくと良いでしょう。これにより、単純な
バッファオーバーフローによる攻撃から、システムを守る
ことができます。
http://www.openwall.com/linux/
(上のアドレスより、「linux-2.2.26-ow1.tar.gz」を取得します。
 必ずカーネルのバージョンにあったパッチを取得してください。)



【前準備】
・既存の設定ファイルがある場合は、印刷しておくと良いです。
 (/usr/src/linux/.config)

【展開】
(以下の作業はrootで行ってください)
# cd /usr/src

ここで、「/usr/src/linux」がディレクトリかリンク
ファイルであるかをlsコマンドで確認します。
# ls -lsa linux

そこにある「linux」がディレクトリの場合
  # mv linux linux-old  (念のため古いソースは保存します)
そこにある「linux」がリンクファイルの場合
  # rm linux

「linux」をリンクファイルにします。
# mkdir linux-2.2.26
# ln -s linux-2.2.26 linux

ここで展開します。展開は「linux」に対して行います。
# bzip2 -cd linux-2_2_26_tar.bz2 | tar xvf -
# cd /usr/src/linux
# vi Makefile
----------------------------------------
 ・・・
INSTALL_PATH=/boot (←先頭の「#」をはずして有効にします)
 ・・・
----------------------------------------
「:wq!」で保存終了します。

# make menuconfig
----------------------------------------
 (カーネルの設定を指定します)
----------------------------------------
設定ファイルは「/usr/src/linux/.config」に保存されます。
以下はわたしのサンプルです。
これと同じにしても、環境によって動作する
保証はありませんのでご注意ください。
----------------------------------------

<カーネル設定ファイルの例はこちら

----------------------------------------

※もし、古いカーネルの「.config」ファイルがあれば、
 /usr/src/linux(今作業しているディレクトリ)にコピーし、

# make oldconfig

と入力すると、差分だけ聞いてきますので、「y/N」を入力
すれば簡単にすみます。
(念のため そのあと make menuconfig はして下さい)


【OpenWallのパッチあて】
OpenWallのパッチをあてたい方は、ここで行います。
# cd /usr/src
# gzip -cd linux-2.2.26-ow1.tar.gz | tar xvf -
# cp linux-2.2.26-ow1/linux-2.2.26-ow1.diff .
# patch -p0 < linux-2.2.26-ow1.diff

※ディレクトリを戻して、設定を確認します。
# cd /usr/src/linux
# make menuconfig
※「Security Options」という項目が増えていますので、
 すべてチェックONにし、保存終了します。
 これでパッチあては完了です。



【コンパイルとリンク】(マシンによっては時間がかかる場合も)
# make dep
# make clean
# make bzImage
# make modules
# make modules_install

【起動準備】
(新カーネルのコピー)
# cp arch/i386/boot/bzImage /boot/bzImage-2.2.26
# rm /boot/bzImage
# ln -s /boot/bzImage-2.2.26 /boot/bzImage
# cp System.map /boot/System.map-2.2.26
# rm /boot/System.map
# ln -s /boot/System.map-2.2.26 /boot/System.map

(LILOの再設定)

まず、現在のパーティションを確認します。
# df
(「/」または「/boot」の領域Noをメモします。
 「/boot」がなければ「/」のところです)

# cd /etc
# vi lilo.conf
----------------------------------------
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
lba32
timeout=50
default=linux-2.2.26 (←ここを修正)
image=/boot/vmlinuz
label=linux
root=/dev/hda3 (←「/boot」のパーティションを指定)
initrd=/boot/initrd
read-only
image=/boot/bzImage (ここから下を追加または修正)
label=linux-2.2.26
root=/dev/hda3 (←「/boot」のパーティションを指定)
initrd=/boot/initrd
read-only
----------------------------------------
(/dev/hda3は、皆さんの環境に合わせて変更してください)
「:wq!」で保存終了します。

編集したら、必ず以下を実行してください。
# /sbin/lilo

【システム再起動】
# shutdown -h now

※再起動が完了したら、バージョンをチェックします。

# uname -a

新カーネルになっているかどうかを確認してください。

※なお、1度再構築した後、設定ファイルを少しだけ修正して再構築
 しなおした場合であっても、必ず「/sbin/lilo」は実行してください。
 そうしないと、カーネルが起動しなくなります。
 (LILOは絶対セクタ番号でブートローダを見にいきますので、
 再コンパイルするたびに新しいカーネルの場所をLILOに知らせる
 必要があるのです。)