From ef23b5a841c47627ff2c12e14d0f855f2bcc5cb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20L=C3=B6nnegren?= Date: Mon, 24 Apr 2023 10:48:31 +0200 Subject: [PATCH] grub: Delete loopback device on fallback (#1745) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * grub: Delete loopback device on fallback During boot if the active menu-entry fails the fallback will also fail with the error-message "device already exists". This commit ensures we delete the loopback-device if it exists before booting to fallback or recovery. Signed-off-by: Fredrik Lönnegren * Bump system/grub2-config version Signed-off-by: Fredrik Lönnegren * Bump system/cos version Signed-off-by: Fredrik Lönnegren --------- Signed-off-by: Fredrik Lönnegren --- packages/cos/collection.yaml | 2 +- packages/grub2/collection.yaml | 2 +- packages/grub2/config/grub.cfg | 34 ++++++++++++++++++++++------------ 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/packages/cos/collection.yaml b/packages/cos/collection.yaml index c188858237e..e9365fd2c27 100644 --- a/packages/cos/collection.yaml +++ b/packages/cos/collection.yaml @@ -2,7 +2,7 @@ packages: - &cos name: "cos" category: "system" - version: 0.10.6 + version: 0.10.7 description: "cOS base image, used to build cOS live ISOs" brand_name: "cOS" labels: diff --git a/packages/grub2/collection.yaml b/packages/grub2/collection.yaml index 4172cb0938e..535d18b7a68 100644 --- a/packages/grub2/collection.yaml +++ b/packages/grub2/collection.yaml @@ -7,7 +7,7 @@ packages: version: ">0.0.2" - name: "grub2-config" category: "system" - version: 0.1.3 + version: 0.1.4 provides: - name: "grub-config" version: ">0.0.12" diff --git a/packages/grub2/config/grub.cfg b/packages/grub2/config/grub.cfg index eda7bba1cf4..1d259b4ebd3 100644 --- a/packages/grub2/config/grub.cfg +++ b/packages/grub2/config/grub.cfg @@ -43,24 +43,30 @@ insmod gfxterm insmod loopback insmod squash4 +set loopdev="loop0" + menuentry "${display_name}" --id cos { # label is kept around for backward compatibility set label=${active_label} set img=/cOS/active.img - loopback loop0 /$img - source (loop0)/etc/cos/bootargs.cfg - linux (loop0)$kernel $kernelcmd ${extra_cmdline} ${extra_active_cmdline} - initrd (loop0)$initramfs + loopback $loopdev /$img + source ($loopdev)/etc/cos/bootargs.cfg + linux ($loopdev)$kernel $kernelcmd ${extra_cmdline} ${extra_active_cmdline} + initrd ($loopdev)$initramfs } menuentry "${display_name} (fallback)" --id fallback { # label is kept around for backward compatibility set label=${passive_label} set img=/cOS/passive.img - loopback loop0 /$img - source (loop0)/etc/cos/bootargs.cfg - linux (loop0)$kernel $kernelcmd ${extra_cmdline} ${extra_passive_cmdline} - initrd (loop0)$initramfs + # if loopdev already exists, we've probably already tried booting once, delete it and try again. + if [ -e ($loopdev) ]; then + loopback -d $loopdev + fi + loopback $loopdev /$img + source ($loopdev)/etc/cos/bootargs.cfg + linux ($loopdev)$kernel $kernelcmd ${extra_cmdline} ${extra_passive_cmdline} + initrd ($loopdev)$initramfs } menuentry "${display_name} recovery" --id recovery { @@ -72,10 +78,14 @@ menuentry "${display_name} recovery" --id recovery { fi set img=/cOS/recovery.img search --no-floppy --label --set=root $recovery_label - loopback loop0 /$img - source (loop0)/etc/cos/bootargs.cfg - linux (loop0)$kernel $kernelcmd ${extra_cmdline} ${extra_recovery_cmdline} - initrd (loop0)$initramfs + # if loopdev already exists, we've probably already tried booting once, delete it and try again. + if [ -e ($loopdev) ]; then + loopback -d $loopdev + fi + loopback $loopdev /$img + source ($loopdev)/etc/cos/bootargs.cfg + linux ($loopdev)$kernel $kernelcmd ${extra_cmdline} ${extra_recovery_cmdline} + initrd ($loopdev)$initramfs } if [ -f "${custom_file}" ]; then