・Plamo Linuxのカーネルパッケージの更新方法.
Plamo Linuxの場合,カーネルのパッケージはバイナリイメージ本体とヘッダーファイル, ソースコードの3つに分かれており,64ビット版のPlamo-5.2の場合, バイナリイメージは 00_base/kernel-3.12.5_plamo64-x86_64-P1.txz, ヘッダーファイルは 01_minimum/devel.txz/kernel_headers-3.12.5_plamo64-i386-P1.txz, ソースコードは 09_kernel/kernelsrc-3.12.5_plamo64-noarch-P1.txz, という構成になっている.
これらのパッケージも,通常のパッケージ同様, updatepkgコマンドで更新することはできるものの, カーネル本体(バイナリイメージ)を更新した場合, ブートローダの設定ファイルを調整してやる必要がある.
また,何らかのトラブルがあって新しいカーネルでは起動しない場合に備え, カーネル本体は updatepkg で入れ替えてしまうのではなく, 動作している既存のカーネルと共存させることがお勧め. そのための方法は以下のとおり.
Plamo Linuxのパッケージ管理システムでは, インストール済みのパッケージは/var/log/packages/に パッケージのベース名(カーネル本体の場合はkernel)で記録されており, updatepkg等はこのディレクトリを調べて同じベース名のパッケージがインストール済みならば それを削除してから新しいパッケージをインストールする.
そのため,ここに記録されているパッケージのベース名を別の名前に変えてしまえば, 同じベース名の複数のパッケージを共存させることが可能になる. 例えば,以下ではファイル名にカーネルのバージョンを付記することで, ベース名が異なるようにしている.
# ls /var/log/packages | grep kernel kernel kernel_headers # mv /var/log/packages{,-`uname -r`} # ls /var/log/packages | grep kernel kernel-3.9.3-plamo64 kernel_headers
こうしておけば,古いカーネルパッケージ(kernel-3.9.3_plamo64-x86_64-P1.txz)を削除しなくても, 新しいカーネルパッケージをインストールすることができる.
# installpkg kernel-3.12.5_plamo64-x86_64-P1.txz kernel-3.12.5_plamo64-x86_64-P1 のインストール中 PACKAGE DESCRIPTION: .. # ls /var/log/packages | grep kernel kernel kernel-3.9.3-plamo64 kernel_headers
この結果,/boot以下にも2種のカーネルが存在することになる.
# ls /boot System.map@ config@ diag1.img inside.bmp vmlinuz@ System.map-3.12.5-plamo64 config-3.12.5-plamo64 diag2.img onlyblue.bmp vmlinuz-3.12.5-plamo64 System.map-3.9.3-plamo64 config-3.9.3-plamo64 grub/ tuxlogo.bmp vmlinuz-3.9.3-plamo64
起動時のカーネルを読み込むブートローダに,新しくインストールしたカーネルを読みこむ設定を追加する. ブートローダにgrubを使っている場合,設定ファイルは /boot/grub/grub.cfg. このファイルで,カーネルを読み込んでいるのは以下の部分.
63 ### BEGIN /etc/grub.d/10_linux ### 64 menuentry 'Plamo Linux' --class plamo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-3d357515-123b-4489-bb5c-034da40d0e30' { 65 load_video 66 set gfxpayload=keep 67 insmod gzio 68 insmod part_msdos 69 insmod ext2 70 set root='hd0,msdos1' 71 if [ x$feature_platform_search_hint = xy ]; then 72 search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 3d357515-123b-4489-bb5c-034da40d0e30 73 else 74 search --no-floppy --fs-uuid --set=root 3d357515-123b-4489-bb5c-034da40d0e30 75 fi 76 echo 'Linux 3.9.3-plamo64 をロード中...' 77 linux /boot/vmlinuz-3.9.3-plamo64 root=/dev/sda1 ro vga16 unicon=eucjp vt.default_utf8=0 panic_output=7 78 }
この部分をcut & pasteして新しいカーネル用の設定を追加する. 具体的には64行目の"menuentry.."から78行目までをコピーすることになる. viを使える人なら64行目で15yして,PすればOK.
修正が必要なのはロードするカーネルの名前(vmlinuz-3.12.5-plamo64)と, それを選択するための menuentry の名称で,修正後のgrub.cfgの該当部分はこんな感じ.
63 ### BEGIN /etc/grub.d/10_linux ### 64 menuentry 'kernel 3.12.5' --class plamo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-3d357515-123b-4489-bb5c-034da40d0e30' { 65 load_video 66 set gfxpayload=keep 67 insmod gzio 68 insmod part_msdos 69 insmod ext2 70 set root='hd0,msdos1' 71 if [ x$feature_platform_search_hint = xy ]; then 72 search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 3d357515-123b-4489-bb5c-034da40d0e30 73 else 74 search --no-floppy --fs-uuid --set=root 3d357515-123b-4489-bb5c-034da40d0e30 75 fi 76 echo 'Linux 3.12.5-plamo64 をロード中...' 77 linux /boot/vmlinuz-3.12.5-plamo64 root=/dev/sda1 ro vga16 unicon=eucjp vt.default_utf8=0 panic_output=7 78 } 79 menuentry 'kernel 3.9.3' --class plamo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-3d357515-123b-4489-bb5c-034da40d0e30' { 80 load_video 81 set gfxpayload=keep 82 insmod gzio 83 insmod part_msdos 84 insmod ext2 85 set root='hd0,msdos1' 86 if [ x$feature_platform_search_hint = xy ]; then 87 search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 3d357515-123b-4489-bb5c-034da40d0e30 88 else 89 search --no-floppy --fs-uuid --set=root 3d357515-123b-4489-bb5c-034da40d0e30 90 fi 91 echo 'Linux 3.9.3-plamo64 をロード中...' 92 linux /boot/vmlinuz-3.9.3-plamo64 root=/dev/sda1 ro vga16 unicon=eucjp vt.default_utf8=0 panic_output=7 93 }
これで再起動すると,grubのメニュー画面に"kernel 3.12.5"が出るようになり, それを選べば新しいカーネルで起動するはず.
ここ長いことブートローダに lilo は使ってないので,liloの場合の方法は紹介できないのだけど, /etc/lilo.conf(だったか?) で同様に新しい設定を追加してから, "lilo"コマンドを実行することをお忘れなく.
lilo の場合は /boot/vmlinuz を見てたはずなので,lilo.conf をイジらずに lilo を実行するだけで 新しいカーネルを読み込むようになる気はする.
残りのkernel_headersとkernelsrcパッケージは特に古いのを残しておく意味もないので, updatepkgで古いパッケージは削除して更新すればいい.