From patchwork Wed Nov 20 02:43:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeremy Kerr X-Patchwork-Id: 1197773 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 47HnfV2svDz9sPV for ; Wed, 20 Nov 2019 14:06:58 +1100 (AEDT) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=ozlabs.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; secure) header.d=ozlabs.org header.i=@ozlabs.org header.b="ogkkcO5X"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 47HnfT5DrzzDqlS for ; Wed, 20 Nov 2019 14:06:57 +1100 (AEDT) X-Original-To: petitboot@lists.ozlabs.org Delivered-To: petitboot@lists.ozlabs.org Received: from ozlabs.org (bilbo.ozlabs.org [203.11.71.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 47Hn9S44lrzDqfY for ; Wed, 20 Nov 2019 13:45:16 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=ozlabs.org Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=ozlabs.org header.i=@ozlabs.org header.b="ogkkcO5X"; dkim-atps=neutral Received: by ozlabs.org (Postfix, from userid 1023) id 47Hn9Q64Bmz9sPW; Wed, 20 Nov 2019 13:45:14 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ozlabs.org; s=201707; t=1574217914; bh=FjB7lhZNFmEX5BRgzgXtE6ieUmHxa4G6E0iZnUMr58I=; h=From:To:Subject:Date:In-Reply-To:References:From; b=ogkkcO5XvuD+5K4I5YGSIuZAPeRzMLrgoQFOrbdvWhWuV/KrZRQEonqYK6cyOH4hj t548DVuRPDzV0pe2wo9ymo/vevx5kQsUZlpjtw3F7lMrBAgf0mZ13GUN0rv8A1tnO+ ug6z1At+BCK/kQdRc2OGYy8TEkisOPb24zEewfi+x7dWLkxVFPUvq6hT9BsaGzBhRD CRpDWKz2qcPD00TO7wo/Szut/B+Bjg4OwSelRyNrGQUlLdDKKQVWciApdZ/28jazNa Y/L3OlFFRXfEfk4LxL262Y9qsWplnQKqcN+FnWcjlON7z7QvXx3h/5vE0h9EzxybKr QYnHFEDPtbN7g== From: Jeremy Kerr To: petitboot@lists.ozlabs.org Subject: [PATCH 13/14] test/parser: Add test for recent RHCOS grub2 config Date: Wed, 20 Nov 2019 10:43:05 +0800 Message-Id: <20191120024306.16526-14-jk@ozlabs.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191120024306.16526-1-jk@ozlabs.org> References: <20191120024306.16526-1-jk@ozlabs.org> MIME-Version: 1.0 X-BeenThere: petitboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Petitboot bootloader development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: petitboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Petitboot" Add a test for a RHCOS grub2 boot config, using the ignition firstboot facility. Signed-off-by: Jeremy Kerr --- 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"); +}