| From dd5c8ee1440bde77c6829a084c0116d059949720 Mon Sep 17 00:00:00 2001 |
| From: Jeremy Kerr <jk@ozlabs.org> |
| Date: Thu, 14 Nov 2019 15:08:21 +0800 |
| Subject: [PATCH 16/18] test/parser: Add test for recent RHCOS grub2 config |
| |
| Add a test for a RHCOS grub2 boot config, using the ignition firstboot |
| facility. |
| |
| Signed-off-by: Jeremy Kerr <jk@ozlabs.org> |
| (cherry picked from commit 1ef95c2606eb6c9fcf3530504317f3a0b1a1ba34) |
| Signed-off-by: Klaus Heinrich Kiwi <klaus@linux.vnet.ibm.com> |
| --- |
| 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.17.1 |
| |