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: zarkakar...@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...@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/