GeekFactory

int128.hatenablog.com

カーネルイメージの配置を変えて保守性を向上する

多くのLinuxでは、カーネルイメージは以下の名前で格納されています。

  • /boot/vmlinuz-2.6.27-gentoo-r8
  • /boot/System.map-2.6.27-gentoo-r8
  • /boot/config-2.6.27-gentoo-r8

これだと複数のカーネルイメージを持つとごちゃごちゃして分かりにくい。バージョンでディレクトリを切ってあげると見通しがよくなります。

  • /boot/2.6.27-gentoo-r8/vmlinuz
  • /boot/2.6.27-gentoo-r8/System.map
  • /boot/2.6.27-gentoo-r8/config
  • /boot/current -> 2.6.27-gentoo-r8

シンボリックリンクで現在有効なカーネルを指しておけばgrub.confも変更なしでおk。

カーネルビルドが終わった後でmake installすると、/sbin/installkernelが実行されます。/sbin/installkernelを書き換えることで上記の場所にインストールできます。

--- /sbin/installkernel.dist    2009-03-22 18:46:10.705965000 +0900
+++ /sbin/installkernel 2009-04-04 14:12:30.904154701 +0900
@@ -29,22 +29,11 @@
 fi

 updatever () {
-  if [ -f "$dir/$1-$ver" ] ; then
-    mv "$dir/$1-$ver" "$dir/$1-$ver.old"
+  if [ -f "$dir/$ver/$1" ] ; then
+    mv "$dir/$ver/$1" "$dir/$ver/$1.old"
   fi

-  cat "$2" > "$dir/$1-$ver"
-
-  if test -f "$dir/$1" ; then
-    if test -L "$dir/$1" &&
-       [ "$(readlink -f ${dir}/${1})" = "${dir}/${1}-${ver}" ]; then
-      ln -sf "$1-$ver.old" "$dir/$1.old"
-    else
-      mv "$dir/$1" "$dir/$1.old"
-    fi
-  fi
-
-  ln -sf "$1-$ver" "$dir/$1"
+  cat "$2" > "$dir/$ver/$1"
 }

 if [ "$(basename $img)" = "vmlinux" ] ; then
@@ -61,7 +50,7 @@
 fi

 if [ "$(basename $img)" = "vmlinux" ] && [ "$(id -u)" = "0" ] ; then
-  mkboot -i ${dir}/vmlinux-${ver}
+  mkboot -i ${dir}/${ver}/vmlinux
 else
-  mkboot -i ${dir}/vmlinuz-${ver}
+  mkboot -i ${dir}/${ver}/vmlinuz
 fi