linuxカーネルをアップデートする時のメモ

今回はlinux-3.2.12-gentooからlinux-3.2.21-gentooに移行します
それではそのやり方を書いていきます

前提

linux-3.2.21-gentooなどの最新のカーネルと現在のカーネルのソースが

/usr/src

にあることが前提です

# emerge "sys-kernel/gentoo-sources"

などをしていれば通常はここに入っているはずです

設定のコピー

それではまずカーネルの設定ファイルをコピーしておきます

# cp /usr/src/linux/.config /usr/src/linux-3.2.21-gentoo

シンボリックリンクの貼り直し

# sudo eselect kernel list
Available kernel symlink targets:
  [1]   linux-3.2.12
  [2]   linux-3.2.12-gentoo *
  [3]   linux-3.2.21
  [4]   linux-3.2.21-gentoo

現在はlinux-3.2.12-gentooになっているらしいですが
linux-3.2.21-gentooにしたいので
左に書いてある[4]の数字を指定します

# sudo eselect kernel set 4

そして変更されているか確認します

# eselect kernel list
Available kernel symlink targets:
  [1]   linux-3.2.12
  [2]   linux-3.2.12-gentoo
  [3]   linux-3.2.21
  [4]   linux-3.2.21-gentoo *

表示では設定できていますが念の為確認します

% ls -ld /usr/src/linux
lrwxrwxrwx 1 root root 19 Jul 15 02:00 /usr/src/linux -> linux-3.2.21-gentoo

linux-3.2.21-gentooシンボリックリンクになっているようです

makeをする

それではカーネルソースのあるディレクトリに移動して
コピーした設定ファイルを最新のに合わせます

% cd /usr/src/linux
# make oldconfig

今回は特に設定が変更なかったようなので何も出ませんでした
変更があった場合は出るらしいですがまだ遭遇したことがないので
出た場合は各自調べて下さい
次はコンパイルをします

# make

をするだけで色々とコンパイルができますが
私はccacheを使いたいのと、かかった時間も知りたいので

# time sudo sh -c 'CCACHE_DIR="/var/tmp/ccache" make -j2 CC="ccache gcc" HOSTCC="ccache gcc" HOSTCXX="ccache g++"'

こんな感じでやることにしてます*1
後は色々と出来上がったら色々と配置させます

# make modules_install

これでモジュールを配置できます
後は必要に応じて/bootをマウントします
私の場合は以下のようになります

# mount /dev/sda1 /boot

カーネルも配置しますがi386のCPUの種類の表記やファイル名などは個人に合わせてください

# cp ./arch/i386/boot/bzImage /boot/linux-3.2.21-gentoo

後はブートローダーの設定にこのカーネルを追加しておきます
私はgrubを使っているのでgrubの説明になりますが
liloなどを使っている人は各自、既にある設定を参考にいじってください

# vim /boot/grub/grub.conf

vimと書かれているのはエディタであれば何に置き換えてもいいです
ここでは以前の私のgrub.confを例に説明します

timeout 10
default 0
fallback 1
splashimage=(hd0,0)/grub/splash.xpm.gz

title Gentoo Linux (linux-3.2.12-gentoo) 1280x1024-32 splash off
root (hd0,0)
kernel /linux-3.2.12-gentoo root=/dev/sda3 video=uvesafb:1280x1024-32,mtrr:3,ywrap

title Gentoo Linux (linux-3.2.12-gentoo) 1280x1024-32 splash on
root (hd0,0)
kernel /linux-3.2.12-gentoo root=/dev/sda3 video=uvesafb:1280x1024-32,mtrr:3,ywrap splash=silent,theme:natural_gentoo console=tty1
initrd /initrd-splash.gz

title Gentoo Linux (linux-3.2.12-gentoo) old
root (hd0,0)
kernel /linux-3.2.12-gentoo-old root=/dev/sda3 video=uvesafb:1280x1024-32,mtrr:3,ywrap

簡単に説明すると
timeoutはカウントダウンの時間
defaultはカウントダウン終了後に自動で起動するカーネル。この数字はtitle〜を上から順番に0,1,2,3,4...としたもの
fallbackはdefaultのカーネルの起動に失敗した場合に起動するカーネル。これもdefaultと同じように数字を指定する
splashimageは背景を指定する

次にカーネルの設定をするのだけれどこれらは空改行をして区切る
titleは選択する時に出る名前
rootはhddの場所
kernelはカーネルの場所とその他オプション
それで、今回のケースだと問題があった場合に困るから過去のカーネルは残したまま
新しいカーネルを追加します
なので既にある今起動しているカーネルの設定をコピーして
kernel /ほにゃらら
の箇所だけをいじれば大抵はこれで良いです

timeout 10
default 0
fallback 1
splashimage=(hd0,0)/grub/splash.xpm.gz

title Gentoo Linux (linux-3.2.21-gentoo) 1280x1024-32 splash off
root (hd0,0)
kernel /linux-3.2.21-gentoo root=/dev/sda3 video=uvesafb:1280x1024-32,mtrr:3,ywrap

title Gentoo Linux (linux-3.2.12-gentoo) 1280x1024-32 splash off
root (hd0,0)
kernel /linux-3.2.12-gentoo root=/dev/sda3 video=uvesafb:1280x1024-32,mtrr:3,ywrap

title Gentoo Linux (linux-3.2.12-gentoo) 1280x1024-32 splash on
root (hd0,0)
kernel /linux-3.2.12-gentoo root=/dev/sda3 video=uvesafb:1280x1024-32,mtrr:3,ywrap splash=silent,theme:natural_gentoo console=tty1
initrd /initrd-splash.gz

title Gentoo Linux (linux-3.2.12-gentoo) old
root (hd0,0)
kernel /linux-3.2.12-gentoo-old root=/dev/sda3 video=uvesafb:1280x1024-32,mtrr:3,ywrap

私の場合はこのようになります
最初のtitle〜から3行を追加しました

ちなみに後ろのパラメータを説明すると
rootで/ディレクトリを指定して
videoで解像度や使うドライバを指定してます

後は再起動をして新しいカーネルで起動したら

% uname -a

これでバージョンが新しいものに変わっているか確認するだけです

*1:これで正しいのかしりません