[[diary/Kojima]]

・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"が出るようになり,
それを選べば新しいカーネルで起動するはず.

#ref("plamo51_64_update.png")

ここ長いことブートローダに lilo は使ってないので,liloの場合の方法は紹介できないのだけど,
/etc/lilo.conf(だったか?) で同様に新しい設定を追加してから,
"lilo"コマンドを実行することをお忘れなく.

 lilo の場合は /boot/vmlinuz を見てたはずなので,lilo.conf をイジらずに lilo を実行するだけで
 新しいカーネルを読み込むようになる気はする.

残りのkernel_headersとkernelsrcパッケージは特に古いのを残しておく意味もないので,
updatepkgで古いパッケージは削除して更新すればいい.

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS