>From 675ebfb1fc1e7e1368980e160e05f98cbb8e152e Mon Sep 17 00:00:00 2001 From: Anton Midyukov Date: Thu, 2 Jan 2020 22:28:16 +0700 Subject: [PATCH 03/22] grub: generate grub.cfg for grub-efi, ieee1275boot and grub-pc --- features.in/grub/cfg.in/20install2.cfg | 6 +- .../grub/cfg.in/25install-vnc-connect.cfg | 4 +- .../grub/cfg.in/25install-vnc-listen.cfg | 4 +- features.in/grub/cfg.in/30live.cfg | 4 +- features.in/grub/cfg.in/32live_rw.cfg | 4 +- features.in/grub/cfg.in/80rescue.cfg | 4 +- features.in/grub/cfg.in/82rescue_rw.cfg | 4 +- features.in/grub/cfg.in/83rescue_fm.cfg | 4 +- features.in/grub/cfg.in/85mediacheck.cfg | 4 +- features.in/grub/generate.mk | 2 +- .../grub/scripts.d/20-propagator-ramdisk | 10 ++-- .../grub/scripts.d/20-propagator-rescue-hash | 8 ++- features.in/grub/stage1/scripts.d/01-grub | 60 ++++++++++++++----- 13 files changed, 77 insertions(+), 41 deletions(-) diff --git a/features.in/grub/cfg.in/20install2.cfg b/features.in/grub/cfg.in/20install2.cfg index 1da6304eb5..373cd892fc 100644 --- a/features.in/grub/cfg.in/20install2.cfg +++ b/features.in/grub/cfg.in/20install2.cfg @@ -1,6 +1,6 @@ default='linux' -menuentry 'Install ALT @relname@' --hotkey 'i' --id 'linux' { - linux$linux_suffix /EFI/BOOT/vmlinuz changedisk fastboot automatic=method:cdrom ramdisk_size=@altinst_size@ vga=@bootvga@ @bootargs@ - initrd$linux_suffix /EFI/BOOT/full.cz +menuentry 'Install @relname@' --hotkey 'i' --id 'linux' { + linux$linux_suffix @boot_path@/vmlinuz changedisk fastboot automatic=method:cdrom ramdisk_size=@altinst_size@ vga=@bootvga@ @bootargs@ + initrd$linux_suffix @boot_path@/full.cz } diff --git a/features.in/grub/cfg.in/25install-vnc-connect.cfg b/features.in/grub/cfg.in/25install-vnc-connect.cfg index 178e8fccd5..77cbee0e5c 100644 --- a/features.in/grub/cfg.in/25install-vnc-connect.cfg +++ b/features.in/grub/cfg.in/25install-vnc-connect.cfg @@ -1,5 +1,5 @@ menuentry 'Install ALT @relname@ (headless with DHCP+VNC client) (edit to set server IP address)' --id 'vncconnect' { - linux$linux_suffix /EFI/BOOT/vmlinuz changedisk fastboot automatic=method:cdrom ramdisk_size=@altinst_size@ showopts @bootargs@ headless no_alt_virt_keyboard vncconnect=IP - initrd$linux_suffix /EFI/BOOT/full.cz + linux$linux_suffix @boot_path@/vmlinuz changedisk fastboot automatic=method:cdrom ramdisk_size=@altinst_size@ showopts @bootargs@ headless no_alt_virt_keyboard vncconnect=IP + initrd$linux_suffix @boot_path@/full.cz } diff --git a/features.in/grub/cfg.in/25install-vnc-listen.cfg b/features.in/grub/cfg.in/25install-vnc-listen.cfg index 53b2b5119b..39606a400a 100644 --- a/features.in/grub/cfg.in/25install-vnc-listen.cfg +++ b/features.in/grub/cfg.in/25install-vnc-listen.cfg @@ -1,6 +1,6 @@ menuentry 'Install ALT @relname@ (headless with DHCP+VNC) (password VNCPWD)' --id 'vncpasswd' { - linux$linux_suffix /EFI/BOOT/vmlinuz changedisk fastboot automatic=method:cdrom ramdisk_size=@altinst_size@ showopts @bootargs@ headless no_alt_virt_keyboard vncpassword=VNCPWD - initrd$linux_suffix /EFI/BOOT/full.cz + linux$linux_suffix @boot_path@/vmlinuz changedisk fastboot automatic=method:cdrom ramdisk_size=@altinst_size@ showopts @bootargs@ headless no_alt_virt_keyboard vncpassword=VNCPWD + initrd$linux_suffix @boot_path@/full.cz } diff --git a/features.in/grub/cfg.in/30live.cfg b/features.in/grub/cfg.in/30live.cfg index d53a1e506a..b03b5ade9e 100644 --- a/features.in/grub/cfg.in/30live.cfg +++ b/features.in/grub/cfg.in/30live.cfg @@ -1,6 +1,6 @@ menuentry 'LiveCD (no hard disk needed)' --id 'live' { - linux$linux_suffix /EFI/BOOT/vmlinuz changedisk fastboot live automatic=method:cdrom ramdisk_size=@live_size@ stagename=live showopts lowmem vga=@bootvga@ @bootargs@ - initrd$linux_suffix /EFI/BOOT/full.cz + linux$linux_suffix @boot_path@/vmlinuz changedisk fastboot live automatic=method:cdrom ramdisk_size=@live_size@ stagename=live showopts lowmem vga=@bootvga@ @bootargs@ + initrd$linux_suffix @boot_path@/full.cz } diff --git a/features.in/grub/cfg.in/32live_rw.cfg b/features.in/grub/cfg.in/32live_rw.cfg index 55c4b977fe..5aec351804 100644 --- a/features.in/grub/cfg.in/32live_rw.cfg +++ b/features.in/grub/cfg.in/32live_rw.cfg @@ -1,4 +1,4 @@ menuentry 'LiveCD with sessions support' --id 'session' { - linux$linux_suffix /EFI/BOOT/vmlinuz changedisk fastboot live automatic=method:cdrom ramdisk_size=@live_size@ stagename=live showopts live_rw vga=@bootvga@ @bootargs@ - initrd$linux_suffix /EFI/BOOT/full.cz + linux$linux_suffix @boot_path@/vmlinuz changedisk fastboot live automatic=method:cdrom ramdisk_size=@live_size@ stagename=live showopts live_rw vga=@bootvga@ @bootargs@ + initrd$linux_suffix @boot_path@/full.cz } diff --git a/features.in/grub/cfg.in/80rescue.cfg b/features.in/grub/cfg.in/80rescue.cfg index c6c0ae53c9..230f8c6cb3 100644 --- a/features.in/grub/cfg.in/80rescue.cfg +++ b/features.in/grub/cfg.in/80rescue.cfg @@ -1,4 +1,4 @@ menuentry 'Rescue LiveCD' --id 'rescue' { - linux$linux_suffix /EFI/BOOT/vmlinuz changedisk fastboot live automatic=method:cdrom ramdisk_size=@rescue_size@ stagename=rescue splash=0 showopts @rescue_bootargs@ - initrd$linux_suffix /EFI/BOOT/full.cz + linux$linux_suffix @boot_path@/vmlinuz changedisk fastboot live automatic=method:cdrom ramdisk_size=@rescue_size@ stagename=rescue splash=0 showopts @rescue_bootargs@ + initrd$linux_suffix @boot_path@/full.cz } diff --git a/features.in/grub/cfg.in/82rescue_rw.cfg b/features.in/grub/cfg.in/82rescue_rw.cfg index ec18be28bb..6266962645 100644 --- a/features.in/grub/cfg.in/82rescue_rw.cfg +++ b/features.in/grub/cfg.in/82rescue_rw.cfg @@ -1,4 +1,4 @@ menuentry 'Rescue with sessions support' --id 'rescue_session' { - linux$linux_suffix /EFI/BOOT/vmlinuz changedisk fastboot live automatic=method:cdrom,label:ALT* ramdisk_size=@rescue_size@ stagename=rescue splash=0 showopts @rescue_bootargs@ live_rw - initrd$linux_suffix /EFI/BOOT/full.cz + linux$linux_suffix @boot_path@/vmlinuz changedisk fastboot live automatic=method:cdrom,label:ALT* ramdisk_size=@rescue_size@ stagename=rescue splash=0 showopts @rescue_bootargs@ live_rw + initrd$linux_suffix @boot_path@/full.cz } diff --git a/features.in/grub/cfg.in/83rescue_fm.cfg b/features.in/grub/cfg.in/83rescue_fm.cfg index 71bf21d3b7..e2214b6cc5 100644 --- a/features.in/grub/cfg.in/83rescue_fm.cfg +++ b/features.in/grub/cfg.in/83rescue_fm.cfg @@ -1,4 +1,4 @@ menuentry 'Forensic mode (leave disks alone)' --id 'rescue_forensic' { - linux$linux_suffix /EFI/BOOT/vmlinuz changedisk fastboot live automatic=method:cdrom ramdisk_size=@rescue_size@ splash=0 showopts stagename=rescue @rescue_bootargs@ max_loop=16 forensic hash=@rescue_hash@ - initrd$linux_suffix /EFI/BOOT/full.cz + linux$linux_suffix @boot_path@/vmlinuz changedisk fastboot live automatic=method:cdrom ramdisk_size=@rescue_size@ splash=0 showopts stagename=rescue @rescue_bootargs@ max_loop=16 forensic hash=@rescue_hash@ + initrd$linux_suffix @boot_path@/full.cz } diff --git a/features.in/grub/cfg.in/85mediacheck.cfg b/features.in/grub/cfg.in/85mediacheck.cfg index 6779dd00d3..490df685f2 100644 --- a/features.in/grub/cfg.in/85mediacheck.cfg +++ b/features.in/grub/cfg.in/85mediacheck.cfg @@ -1,4 +1,4 @@ menuentry 'Check this media for defects' --id 'mediachk' { - linux$linux_suffix /EFI/BOOT/vmlinuz changedisk live quiet lowmem automatic=method:cdrom mediacheck=1 stagename=mediacheck showopts @bootargs@ - initrd$linux_suffix /EFI/BOOT/full.cz + linux$linux_suffix @boot_path@/vmlinuz changedisk live quiet lowmem automatic=method:cdrom mediacheck=1 stagename=mediacheck showopts @bootargs@ + initrd$linux_suffix @boot_path@/full.cz } diff --git a/features.in/grub/generate.mk b/features.in/grub/generate.mk index a0b59221a2..f321ce798e 100644 --- a/features.in/grub/generate.mk +++ b/features.in/grub/generate.mk @@ -19,7 +19,7 @@ ifndef GRUB_DIRECT GRUB_CFG := $(GRUB_CFG) $(SUBPROFILE_DIRS) defaults endif -DSTDIR := $(BUILDDIR)/stage1/files/EFI/BOOT/.in +DSTDIR := $(BUILDDIR)/stage1/files/boot/grub/.in DSTCFGS := $(DSTDIR)/*.cfg # we can do GRUB_{CFG,MODULES,FILES} diff --git a/features.in/grub/scripts.d/20-propagator-ramdisk b/features.in/grub/scripts.d/20-propagator-ramdisk index c47302a769..04470b6c85 100755 --- a/features.in/grub/scripts.d/20-propagator-ramdisk +++ b/features.in/grub/scripts.d/20-propagator-ramdisk @@ -5,11 +5,11 @@ cd "$WORKDIR" -cfgs="$(find EFI/BOOT -name '*.cfg')" -[ -n "$cfgs" ] || { - echo "${0##*/}: did not find any config under EFI/BOOT " >&2 - exit 1 -} +[ -f boot/grub/grub.cfg -o -f EFI/BOOT/grub.cfg ] || exit 0 + +cfgs= +[ ! -f boot/grub/grub.cfg ] || cfgs+='boot/grub/grub.cfg ' +[ ! -f EFI/BOOT/grub.cfg ] || cfgs+='EFI/BOOT/grub.cfg' # apply size census while looking for potential squashfs images find -maxdepth 1 -type f -size +1M \ diff --git a/features.in/grub/scripts.d/20-propagator-rescue-hash b/features.in/grub/scripts.d/20-propagator-rescue-hash index fff0be0ce9..3ca61591bc 100755 --- a/features.in/grub/scripts.d/20-propagator-rescue-hash +++ b/features.in/grub/scripts.d/20-propagator-rescue-hash @@ -5,10 +5,14 @@ cd "$WORKDIR" -grep -qs "@rescue_hash@" EFI/BOOT/*.cfg || exit 0 +[ -f boot/grub/grub.cfg -o -f EFI/BOOT/grub.cfg ] || exit 0 + +cfgs= +[ ! -f boot/grub/grub.cfg ] || cfgs+='boot/grub/grub.cfg ' +[ ! -f EFI/BOOT/grub.cfg ] || cfgs+='EFI/BOOT/grub.cfg' find -maxdepth 1 -type f -name rescue \ | while read image; do rescue_hash="$(sha256sum -b "$image" | cut -f1 -d' ')" - sed -i "s,@rescue_hash@,$rescue_hash," EFI/BOOT/*.cfg + sed -i "s,@rescue_hash@,$rescue_hash," $cfgs done diff --git a/features.in/grub/stage1/scripts.d/01-grub b/features.in/grub/stage1/scripts.d/01-grub index 9f87292925..4ea9a02acd 100755 --- a/features.in/grub/stage1/scripts.d/01-grub +++ b/features.in/grub/stage1/scripts.d/01-grub @@ -2,17 +2,23 @@ # gather grub configuration from snippets; # copy modules; see also this feature's generate.mk -CFG="grub.cfg" +CFG="$WORKDIR/boot/grub/grub.cfg" +CFG_EFI="$WORKDIR/EFI/BOOT/grub.cfg" -mkdir -p "$WORKDIR/EFI/BOOT" -cd "$WORKDIR/EFI/BOOT" +if [ -n "$GLOBAL_EFI_BOOTLOADER" -a ! "$GLOBAL_EFI_BOOTLOADER" = "grub-efi" ]; then + rm -fr "$WORKDIR/boot" + exit 0 +fi -# validate just in case (see also stage1 Makefile) -case "$GLOBAL_BOOTLOADER" in - isolinux|syslinux|ieee1275boot|grubaa64boot|grubx86boot) ;; - *) echo "error: weird GLOBAL_BOOTLOADER: \`$GLOBAL_BOOTLOADER'" >&2; - exit 1;; -esac +if [ -z "$GLOBAL_EFI_BOOTLOADER" ]; then + case "$GLOBAL_BOOTLOADER" in + ieee1275boot) ;; + *) rm -fr "$WORKDIR/boot" + exit 0;; + esac +fi + +cd "$WORKDIR/boot/grub" # copy extra files, if any GRUB_FILES="$(cat .in/grub.list)" @@ -21,21 +27,47 @@ if [ -n "${GRUB_FILES% }" ]; then fi # number ordering sponsored by shell's pathname expansion -grep -hv '^#' .in/[0-9][0-9]*.cfg > "$CFG" +case "$GLOBAL_BOOTLOADER" in + ieee1275boot) + grep -hv '^#' $(find .in/*.cfg -not -name *_efi.cfg) > "$CFG" ;; +esac + +if [ "$GLOBAL_EFI_BOOTLOADER" = "grub-efi" ]; then + mkdir -p "$WORKDIR/EFI/BOOT" + grep -hv '^#' $(find .in/*.cfg) > "$CFG_EFI" +fi # there should be DEFAULT directive there (at least for alterator-netinst) -if ! grep -i '^default' .in/[0-9][0-9]*.cfg; then - DEFAULT="$(grep -i '\-\-id ' .in/[0-9][0-9]*.cfg | head -1 | rev| cut -f2 -d' ' |rev)" +default_change() { +local CFG=$1 +if ! grep -i '^default' "$CFG"; then + DEFAULT="$(grep -i '\-\-id ' "$CFG" | head -1 | rev| cut -f2 -d' ' |rev)" if [ -n "$DEFAULT" ]; then echo "default=$DEFAULT" >> "$CFG" else - echo "error: no DEFAULT or UI directive and cannot guess" >&2 + echo "error: no DEFAULT or UI directive and cannot guess for $CFG" >&2 exit 1 fi fi +} + +if [ -f "$CFG" ]; then + default_change "$CFG" + sed -i 's,@boot_path@,/boot,g' "$CFG" +fi + +if [ -f "$CFG_EFI" ]; then + default_change "$CFG_EFI" + sed -i 's,@boot_path@,/EFI/BOOT,g' "$CFG_EFI" +fi # snippets are not going into the actual image -if [ "$DEBUG" != 2 ]; then rm -r .in/; fi +if [ "$DEBUG" != 2 ]; then + rm -r .in/ + cd $WORKDIR + [ -f "$CFG" ] || rm -r boot/grub + [ ! $(ls -A boot/ | wc -l) -eq 0 ] || rm -r boot/ +fi # NB: there will be final macro expansion based on actual image sizes # done by features.in/grub/scripts.d/20-propagator-ramdisk -- 2.24.1