[PATCH 13/14] test/parser: Add test for recent RHCOS grub2 config

Jeremy Kerr jk at ozlabs.org
Wed Nov 20 13:43:05 AEDT 2019


Add a test for a RHCOS grub2 boot config, using the ignition firstboot
facility.

Signed-off-by: Jeremy Kerr <jk at ozlabs.org>
---
 test/parser/Makefile.am                 |   1 +
 test/parser/data/grub2-rhcos-ootpa.conf | 194 ++++++++++++++++++++++++
 test/parser/test-grub2-rhcos-ootpa.c    |  38 +++++
 3 files changed, 233 insertions(+)
 create mode 100644 test/parser/data/grub2-rhcos-ootpa.conf
 create mode 100644 test/parser/test-grub2-rhcos-ootpa.c

diff --git a/test/parser/Makefile.am b/test/parser/Makefile.am
index 5f1a93b..5f7922c 100644
--- a/test/parser/Makefile.am
+++ b/test/parser/Makefile.am
@@ -43,6 +43,7 @@ parser_TESTS = \
 	test/parser/test-grub2-f20-ppc64 \
 	test/parser/test-grub2-ubuntu-13_04-x86 \
 	test/parser/test-grub2-sles-btrfs-snapshot \
+	test/parser/test-grub2-rhcos-ootpa \
 	test/parser/test-grub2-lexer-error \
 	test/parser/test-grub2-parser-error \
 	test/parser/test-grub2-test-file-ops \
diff --git a/test/parser/data/grub2-rhcos-ootpa.conf b/test/parser/data/grub2-rhcos-ootpa.conf
new file mode 100644
index 0000000..329980e
--- /dev/null
+++ b/test/parser/data/grub2-rhcos-ootpa.conf
@@ -0,0 +1,194 @@
+#
+# DO NOT EDIT THIS FILE
+#
+# It is automatically generated by grub2-mkconfig using templates
+# from /etc/grub.d and settings from /etc/default/grub
+#
+
+### BEGIN /etc/grub.d/00_header ###
+set pager=1
+
+if [ -f ${config_directory}/grubenv ]; then
+  load_env -f ${config_directory}/grubenv
+elif [ -s $prefix/grubenv ]; then
+  load_env
+fi
+if [ "${next_entry}" ] ; then
+   set default="${next_entry}"
+   set next_entry=
+   save_env next_entry
+   set boot_once=true
+else
+   set default="${saved_entry}"
+fi
+
+if [ x"${feature_menuentry_id}" = xy ]; then
+  menuentry_id_option="--id"
+else
+  menuentry_id_option=""
+fi
+
+export menuentry_id_option
+
+if [ "${prev_saved_entry}" ]; then
+  set saved_entry="${prev_saved_entry}"
+  save_env saved_entry
+  set prev_saved_entry=
+  save_env prev_saved_entry
+  set boot_once=true
+fi
+
+function savedefault {
+  if [ -z "${boot_once}" ]; then
+    saved_entry="${chosen}"
+    save_env saved_entry
+  fi
+}
+
+function load_video {
+  if [ x$feature_all_video_module = xy ]; then
+    insmod all_video
+  else
+    insmod efi_gop
+    insmod efi_uga
+    insmod ieee1275_fb
+    insmod vbe
+    insmod vga
+    insmod video_bochs
+    insmod video_cirrus
+  fi
+}
+
+terminal_output ofconsole
+if [ x$feature_timeout_style = xy ] ; then
+  set timeout_style=menu
+  set timeout=1
+# Fallback normal timeout code in case the timeout_style feature is
+# unavailable.
+else
+  set timeout=1
+fi
+### END /etc/grub.d/00_header ###
+
+### BEGIN /etc/grub.d/01_menu_auto_hide ###
+if [ "${boot_success}" = "1" -o "${boot_indeterminate}" = "1" ]; then
+  set last_boot_ok=1
+else
+  set last_boot_ok=0
+fi
+
+# Reset boot_indeterminate after a successful boot
+if [ "${boot_success}" = "1" ] ; then
+  set boot_indeterminate=0
+# Avoid boot_indeterminate causing the menu to be hidden more then once
+elif [ "${boot_indeterminate}" = "1" ]; then
+  set boot_indeterminate=2
+fi
+set boot_success=0
+save_env boot_success boot_indeterminate
+
+if [ x$feature_timeout_style = xy ] ; then
+  if [ "${menu_show_once}" ]; then
+    unset menu_show_once
+    save_env menu_show_once
+    set timeout_style=menu
+    set timeout=60
+  elif [ "${menu_auto_hide}" -a "${last_boot_ok}" = "1" ]; then
+    set orig_timeout_style=${timeout_style}
+    set orig_timeout=${timeout}
+    if [ "${fastboot}" = "1" ]; then
+      # timeout_style=menu + timeout=0 avoids the countdown code keypress check
+      set timeout_style=menu
+      set timeout=0
+    else
+      set timeout_style=hidden
+      set timeout=1
+    fi
+  fi
+fi
+### END /etc/grub.d/01_menu_auto_hide ###
+
+### BEGIN /etc/grub.d/01_users ###
+if [ -f ${prefix}/user.cfg ]; then
+  source ${prefix}/user.cfg
+  if [ -n "${GRUB2_PASSWORD}" ]; then
+    set superusers="root"
+    export superusers
+    password_pbkdf2 root ${GRUB2_PASSWORD}
+  fi
+fi
+### END /etc/grub.d/01_users ###
+
+### BEGIN /etc/grub.d/02_ignition_firstboot ###
+# We store the file on the /boot/ partition so find the
+# boot partition. On UEFI this may different than the grub
+# $root so we search for it here.
+# https://github.com/coreos/ignition-dracut/issues/51
+search --set=bootpart --label boot
+# Determine if this is a first boot and set the variable
+# to be used later on the kernel command line.
+set ignition_firstboot=""
+if [ -f "(${bootpart})/ignition.firstboot" ]; then
+    # default to dhcp networking parameters to be used with ignition 
+    set ignition_network_kcmdline='rd.neednet=1 ip=dhcp'
+
+    # source in the `ignition.firstboot` file which could override the
+    # above $ignition_network_kcmdline with static networking config.
+    # This override feature is primarily used by coreos-installer to
+    # persist static networking config provided during install to the    
+    # first boot of the machine.
+    source "(${bootpart})/ignition.firstboot"
+    
+    # we support setting variables in the 
+    set ignition_firstboot="ignition.firstboot $ignition_network_kcmdline $ignition_extra_kcmdline"
+fi
+### END /etc/grub.d/02_ignition_firstboot ###
+
+### BEGIN /etc/grub.d/10_linux_bls ###
+
+### END /etc/grub.d/10_linux_bls ###
+
+### BEGIN /etc/grub.d/15_ostree ###
+menuentry 'Red Hat Enterprise Linux CoreOS 42.80.20191030.0 (Ootpa) (ostree)' --class gnu-linux --class gnu --class os --unrestricted 'ostree-0-645e1535-a6f3-4fa6-a82c-b8c032619a7b' {
+load_video
+set gfxpayload=keep
+insmod gzio
+insmod part_gpt
+insmod ext2
+set root='hd0,gpt2'
+if [ x$feature_platform_search_hint = xy ]; then
+  search --no-floppy --fs-uuid --set=root --hint='hd0,gpt2'  645e1535-a6f3-4fa6-a82c-b8c032619a7b
+else
+  search --no-floppy --fs-uuid --set=root 645e1535-a6f3-4fa6-a82c-b8c032619a7b
+fi
+linux /ostree/rhcos-6264e4be818e20cf1021bd6e7aa8c76147ce07dec186468c7dfbbc9c5dfc7d8b/vmlinuz-4.18.0-80.11.2.el8_0.ppc64le console=tty0 console=hvc0,115200n8 rootflags=defaults,prjquota rw $ignition_firstboot root=UUID=8d8a5c3b-97e6-4d7b-bb87-206af5a9d851 ostree=/ostree/boot.0/rhcos/6264e4be818e20cf1021bd6e7aa8c76147ce07dec186468c7dfbbc9c5dfc7d8b/0 ignition.platform.id=openstack
+initrd /ostree/rhcos-6264e4be818e20cf1021bd6e7aa8c76147ce07dec186468c7dfbbc9c5dfc7d8b/initramfs-4.18.0-80.11.2.el8_0.ppc64le.img
+}
+### END /etc/grub.d/15_ostree ###
+
+### BEGIN /etc/grub.d/20_linux_xen ###
+### END /etc/grub.d/20_linux_xen ###
+
+### BEGIN /etc/grub.d/20_ppc_terminfo ###
+  terminfo -g 80x24 ofconsole
+### END /etc/grub.d/20_ppc_terminfo ###
+
+### BEGIN /etc/grub.d/30_os-prober ###
+### END /etc/grub.d/30_os-prober ###
+
+### BEGIN /etc/grub.d/30_uefi-firmware ###
+### END /etc/grub.d/30_uefi-firmware ###
+
+### BEGIN /etc/grub.d/40_custom ###
+# This file provides an easy way to add custom menu entries.  Simply type the
+# menu entries you want to add after this comment.  Be careful not to change
+# the 'exec tail' line above.
+### END /etc/grub.d/40_custom ###
+
+### BEGIN /etc/grub.d/41_custom ###
+if [ -f  ${config_directory}/custom.cfg ]; then
+  source ${config_directory}/custom.cfg
+elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
+  source $prefix/custom.cfg;
+fi
+### END /etc/grub.d/41_custom ###
diff --git a/test/parser/test-grub2-rhcos-ootpa.c b/test/parser/test-grub2-rhcos-ootpa.c
new file mode 100644
index 0000000..19299be
--- /dev/null
+++ b/test/parser/test-grub2-rhcos-ootpa.c
@@ -0,0 +1,38 @@
+
+#include "parser-test.h"
+
+void run_test(struct parser_test *test)
+{
+	struct discover_boot_option *opt;
+	struct discover_context *ctx;
+	struct discover_device *dev;
+
+	ctx = test->ctx;
+
+	dev = test_create_device(test, "bootdev");
+	dev->label = "boot";
+	device_handler_add_device(test->handler, dev);
+
+	test_read_conf_file(test, "grub2-rhcos-ootpa.conf",
+			"/grub/grub.cfg");
+
+	/* add the ignition.firstboot file on the boot-labelled partition,
+	 * to check that we can source this correctly */
+	test_add_file_string(test, dev,
+			"/ignition.firstboot",
+			"ignition_extra_kcmdline=meep\n");
+
+	test_run_parser(test, "grub2");
+
+	check_boot_option_count(ctx, 1);
+
+	opt = get_boot_option(ctx, 0);
+	check_name(opt,
+		"Red Hat Enterprise Linux CoreOS 42.80.20191030.0 (Ootpa) (ostree)");
+	check_args(opt, "console=tty0 console=hvc0,115200n8 "
+			"rootflags=defaults,prjquota rw "
+			"ignition.firstboot rd.neednet=1 ip=dhcp meep "
+			"root=UUID=8d8a5c3b-97e6-4d7b-bb87-206af5a9d851 "
+			"ostree=/ostree/boot.0/rhcos/6264e4be818e20cf1021bd6e7aa8c76147ce07dec186468c7dfbbc9c5dfc7d8b/0 "
+			"ignition.platform.id=openstack");
+}
-- 
2.20.1



More information about the Petitboot mailing list