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に知らせる
必要があるのです。)