Ubuntu RAM-Linux その2: grub.dの準備

update-grubコマンドでgrub.cfgを更新する際に、自動的にRAM-Linuxのメニューも追加されるように、/etc/grub.dにエントリを新規追加する。Ubuntu Musiumのため、このエントリはやや特殊となっていて、09_lowlatencyをベースに、コピーして利用する。差分は下記の通り。
RAMDISK_SIZEを指定するとRAM-Linuxとなるように、後で/sbin/init側を調整する。
汎用性を考えると/sbin/initには手を入れたくないので、方針を変更し、RAM-Linux専用のinitrdを別途置く方針とする。

1./etc/grub.d/09_lowlatency_ramlinuxを作成する。

09_lowlatency_ramlinux.patch:

--- /etc/grub.d/09_lowlatency	2014-04-10 01:16:13.000000000 +0900
+++ /etc/grub.d/09_lowlatency_overlay
@@ -109,7 +109,7 @@
       fi
       echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
   else
-      echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
+      echo "menuentry '$(echo "$os" | grub_quote) - RAM-Linux' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
   fi      
   echo "recordfail" | sed "s/^/$submenu_indentation/"
   if [ x$type != xrecovery ] ; then
@@ -142,19 +142,21 @@
     fi
     printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
   fi
-  if [ x$type != xsimple ]; then
-    message="$(gettext_printf "Loading Linux %s ..." ${version})"
+#  if [ x$type != xsimple ]; then
+    message="$(gettext_printf "Loading RAM-Linux %s ..." ${version})"
     sed "s/^/$submenu_indentation/" << EOF
 	echo	'$(echo "$message" | grub_quote)'
 EOF
-  fi
+#  fi
   if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then
     sed "s/^/$submenu_indentation/" << EOF
-	linux	${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args}
+	linux	${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args} overlay=tmpfs
+        echo '特別な初期 RAM ディスクをロード中...'
 EOF
   else
     sed "s/^/$submenu_indentation/" << EOF
-	linux	${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
+	linux	${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} overlay=tmpfs 
+        echo '特別な初期 RAM ディスクをロード中...'
 EOF
   fi
   if test -n "${initrd}" ; then
@@ -199,46 +201,6 @@
 boot_device_id=
 title_correction_code=
 
-cat << 'EOF'
-function gfxmode {
-	set gfxpayload="${1}"
-	if [ "${1}" = "keep" ]; then
-		set vt_handoff=vt.handoff=7
-	else
-		set vt_handoff=
-	fi
-}
-EOF
-
-# Use ELILO's generic "efifb" when it's known to be available.
-# FIXME: We need an interface to select vesafb in case efifb can't be used.
-if [ "x$GRUB_GFXPAYLOAD_LINUX" != x ]; then
-  echo "set linux_gfx_mode=$GRUB_GFXPAYLOAD_LINUX"
-else
-  cat << EOF
-if [ "\${recordfail}" != 1 ]; then
-  if [ -e \${prefix}/gfxblacklist.txt ]; then
-    if hwmatch \${prefix}/gfxblacklist.txt 3; then
-      if [ \${match} = 0 ]; then
-        set linux_gfx_mode=keep
-      else
-        set linux_gfx_mode=text
-      fi
-    else
-      set linux_gfx_mode=text
-    fi
-  else
-    set linux_gfx_mode=keep
-  fi
-else
-  set linux_gfx_mode=text
-fi
-EOF
-fi
-cat << EOF
-export linux_gfx_mode
-EOF
-
 # Extra indentation to add to menu entries in a submenu. We're not in a submenu
 # yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
 submenu_indentation=""

パッチ適用コマンド例:

sudo su -
cd /etc/grub.d/
cp 09_lowlatency 09_lowlatency_ramlinux
patch 09_lowlatency_ramlinux 09_lowlatency_ramlinux.patch

2./etc/default/grubで、パラメータを修正する。
grubでRAM-Linuxエントリを選択できるようにするため。

#GRUB_HIDDEN_TIMEOUT=0  # コメントアウト
GRUB_TIMEOUT=1          # 1秒程度で良いかと。

3.所望のエントリができるか、テストする。

grub-mkconfig -o grub_test.cfg