bug-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug #63476] configuration getting damaged after embedding it using grub


From: Kareem Zarka
Subject: [bug #63476] configuration getting damaged after embedding it using grub-mkimage
Date: Tue, 6 Dec 2022 06:29:05 -0500 (EST)

URL:
  <https://savannah.gnu.org/bugs/?63476>

                 Summary: configuration getting damaged after embedding it
using grub-mkimage
                 Project: GNU GRUB
               Submitter: the_zarka
               Submitted: Tue 06 Dec 2022 11:29:03 AM UTC
                Category: Installation
                Severity: Major
                Priority: 5 - Normal
              Item Group: Software Error
                  Status: None
                 Privacy: Public
             Assigned to: None
         Originator Name: Kareem Zarka
        Originator Email: zarkakareem@gmail.com
             Open/Closed: Open
                 Release: 2.00
                 Release: 
         Discussion Lock: Any
         Reproducibility: Every Time
         Planned Release: None


    _______________________________________________________

Follow-up Comments:


-------------------------------------------------------
Date: Tue 06 Dec 2022 11:29:03 AM UTC By: Kareem Zarka <the_zarka>
Hi I'm using grub 2.00 
after the process of embedding an early configuration file into the grub's
binary the configuration file loses some lines from it 
something is going wrong with parsing 
during this command 
```
        grub-mkimage -v -c ../cfg -p ${EFIDIR} -d ./grub-core/ \
                       -O ${GRUB_TARGET}-efi -o 
./${GRUB_IMAGE_PREFIX}${GRUB_IMAGE}
\
                       ${GRUB_MKIMAGE_MODULES}
```
my cfg file is the following 

```
# SPDX-FileCopyrightText: Huawei Inc.
#
# SPDX-License-Identifier: MIT

# NOTE: This file is referenced from x-gpt-efi-disk.wks.in
# Please be careful when moving it around the tree.

serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1

set CMDLINE="console=@SERIAL_CONSOLES@ panic=60 rootwait quiet"

# Find the boot partition. We need to know where to load from and save the
# environment to. The boot partition is saved into the ONIRO_GRUB_BOOT
# variable.
#
# TODO: switch to out-of-tree search by partition type uuid.
#
# XXX: the boot string is hard-coded but the .wks file allows customization
via
# BOOT_PARTITION_LABEL, which is unsupported here.
if search --label --set ONIRO_BOOT_PART --no-floppy --hint-efi=hd0,gpt1 boot;
then
    echo "note: found ONIRO_BOOT_PART=$ONIRO_BOOT_PART"
else
    echo "error: cannot find boot partition, halting"
    halt
fi

# Load a specific list of GRUB variables from the grubenv file. Ideally we
# would never have this and we would use EFI variables instead but this is
not
# supported by RAUC without opting out of using GRUB itself.
load_env --skip-sig --file "(${ONIRO_BOOT_PART})/EFI/BOOT/grubenv"
SYSOTA_BOOT_ACTIVE SYSOTA_BOOT_TRY SYSOTA_BOOT_TRIED
echo "note: loaded SYSOTA_BOOT_ACTIVE=$SYSOTA_BOOT_ACTIVE
SYSOTA_BOOT_TRY=$SYSOTA_BOOT_TRY SYSOTA_BOOT_TRIED=$SYSOTA_BOOT_TRIED"

# Recover active slot if the file is corrupted.
if [ -z "$SYSOTA_BOOT_ACTIVE" ]; then
    echo "warning: SYSOTA_BOOT_ACTIVE is unset, attempting recovery"
    if [ -e "(hd0,gpt2)/boot/@KERNEL_IMAGETYPE@" -a -e
"(hd0,gpt3)/boot/@KERNEL_IMAGETYPE@" ]; then
        # Both slots are available, pick the more recent slot.
        # TODO: handle rollback prevention flags (how?)
        if [ "(hd0,gpt2)/boot/@KERNEL_IMAGETYPE@" -nt
"(hd0,gpt3)/boot/@KERNEL_IMAGETYPE@" ]; then
            echo "note: recovered SYSOTA_BOOT_ACTIVE=A (slot A kernel is newer
than slot B)"
            set SYSOTA_BOOT_ACTIVE="A"
        else
            echo "note: recovered SYSOTA_BOOT_ACTIVE=B (slot B kernel is newer
than slot A)"
            set SYSOTA_BOOT_ACTIVE="B"
        fi
    elif [ -e "(hd0,gpt2)/boot/@KERNEL_IMAGETYPE@" ]; then
        echo "note: recovered SYSOTA_BOOT_ACTIVE=A"
        set SYSOTA_BOOT_ACTIVE="A"
    elif [ -e "(hd0,gpt3)/boot/@KERNEL_IMAGETYPE@" ]; then
        echo "note: recovered SYSOTA_BOOT_ACTIVE=B"
        set SYSOTA_BOOT_ACTIVE="B"
    else
        echo "error: cannot recover GRUB environment block: both slots are
corrupted, halting"
        halt
    fi

    echo "note: saving recovered GRUB environment block"
    save_env --file "($ONIRO_BOOT_PART)/EFI/BOOT/grubenv" SYSOTA_BOOT_ACTIVE
SYSOTA_BOOT_TRY SYSOTA_BOOT_TRIED
fi

# Find the slot to boot from.
if [ -n "$SYSOTA_BOOT_TRY" ]; then
    echo "note: performing one-time boot from slot $SYSOTA_BOOT_TRY"
    set SLOT="$SYSOTA_BOOT_TRY"
    set SYSOTA_BOOT_TRIED="$SYSOTA_BOOT_TRY"
    unset SYSOTA_BOOT_TRY

    echo "note: saving modified GRUB environment block"
    save_env --file "($ONIRO_BOOT_PART)/EFI/BOOT/grubenv" SYSOTA_BOOT_ACTIVE
SYSOTA_BOOT_TRY SYSOTA_BOOT_TRIED
else
    echo "note: performing normal boot from slot $SYSOTA_BOOT_ACTIVE"
    set SLOT="$SYSOTA_BOOT_ACTIVE"
fi

timeout=@WIC_BOOTLOADER_TIMEOUT@
default=boot

# Load the kernel from a fixed location of the slot selected for booting.
# The partition identifiers below refer to the fixed sys-a and sys-b
# partitions.
#
# For a description of how to package the kernel into the rootfs image, refer
# to the wiki page:
#
https://gitlab.eclipse.org/eclipse/oniro-core/sysota/-/wikis/Boot%20Assets%20Specification#efigrub
if [ "$SLOT" == "A" ]; then
    # TODO pass root partition by partuuid.
menuentry 'boot' {
    linux "(hd0,gpt2)/boot/@KERNEL_IMAGETYPE@" root=@RAUC_SLOT_A@ rauc.slot=A
$CMDLINE
}
elif [ "$SLOT" == "B" ]; then
menuentry 'boot' {
    linux "(hd0,gpt3)/boot/@KERNEL_IMAGETYPE@" root=@RAUC_SLOT_B@ rauc.slot=B
$CMDLINE
}
else
    echo "error: cannot select slot to boot from, halting"
    halt
fi

boot

```

the resulting embedded file inside of the binary is differnet from the
original one 
here's the link for the differnce between both of them
https://www.diffchecker.com/1g3BHMXd/
I'm losing empty lines , {  ,fi and #

I'm trying to fuse this stand-alone configuration into the binary 
but I realised I can't embed boot-menu-entries directly but I need to install
it into rootfs then embed a file to look for it 
is there a way around this ? 
and lastly is there a way around to not lost lines from the embedded file ?

My end goal is to have one file including both the binary and the
stand-alone-configuration and being able to boot :D 

Thanks in advance






    _______________________________________________________
File Attachments:


-------------------------------------------------------
Date: Tue 06 Dec 2022 11:29:03 AM UTC  Name: 11.png  Size: 458KiB   By:
the_zarka
some of the the differnces
<http://savannah.gnu.org/bugs/download.php?file_id=54061>
-------------------------------------------------------
Date: Tue 06 Dec 2022 11:29:03 AM UTC  Name:
Screenshot@from@2022-12-06@12-25-56.png  Size: 542KiB   By: the_zarka
some of the the differnces
<http://savannah.gnu.org/bugs/download.php?file_id=54062>

    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?63476>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]