From 3b22ee878425a29c34ac79d3e700997ab5c8d30f Mon Sep 17 00:00:00 2001 From: Mateusz Kowalski Date: Thu, 25 Feb 2021 16:30:21 +0100 Subject: [PATCH] Change paths for bootloader files in iso element This PR updates locations for files used by the bootloader depending on the target operating system built. The current logic does not take into account latest versions of operating systems and makes it impossible to build ISOs against those. With this change it is possible to correctly build CentOS 8, Ubuntu 18.04 and Ubuntu 20.04 images. Closes-Bug: #1916913 Change-Id: I3ed0041640f539e82805d03ba26fe46217f3ac3c --- .../elements/iso/cleanup.d/100-build-iso | 11 +++++++- diskimage_builder/elements/iso/pkg-map | 6 ++++- .../iso/post-install.d/01-copy-bootloaders | 25 +++++++++++++------ 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/diskimage_builder/elements/iso/cleanup.d/100-build-iso b/diskimage_builder/elements/iso/cleanup.d/100-build-iso index 9f9febf5..afc62802 100755 --- a/diskimage_builder/elements/iso/cleanup.d/100-build-iso +++ b/diskimage_builder/elements/iso/cleanup.d/100-build-iso @@ -32,6 +32,12 @@ function build_efiboot_img() { if [[ $DISTRO_NAME = "fedora" || $DISTRO_NAME = "rhel7" ]] ; then cp $TMP_BOOTLOADER_DIR/shim.efi $TMP_BUILD_DIR/bootx64.efi cp $TMP_BOOTLOADER_DIR/grubx64.efi $TMP_BUILD_DIR/grubx64.efi + elif [[ $DISTRO_NAME = "centos" ]] ; then + cp $TMP_BOOTLOADER_DIR/shimx64-centos.efi $TMP_BUILD_DIR/bootx64.efi + cp $TMP_BOOTLOADER_DIR/grubx64.efi $TMP_BUILD_DIR/grubx64.efi + elif [[ $DISTRO_NAME = "ubuntu" || $DISTRO_NAME = "debian" ]] ; then + cp $TMP_BOOTLOADER_DIR/shimx64.efi.signed $TMP_BUILD_DIR/bootx64.efi + cp $TMP_BOOTLOADER_DIR/grubx64.efi.signed $TMP_BUILD_DIR/grubx64.efi else cp $TMP_BOOTLOADER_DIR/shim.efi.signed $TMP_BUILD_DIR/bootx64.efi cp $TMP_BOOTLOADER_DIR/grubx64.efi.signed $TMP_BUILD_DIR/grubx64.efi @@ -65,6 +71,10 @@ function build_iso() { if [ $DISTRO_NAME = "fedora" ]; then EFI_BOOT_DIR="EFI/fedora" EXTRA_KERNEL_PARAMS="usbcore.autosuspend=-1" + #centos + elif [ $DISTRO_NAME = "centos" ]; then + EFI_BOOT_DIR="EFI/centos" + EXTRA_KERNEL_PARAMS="" #debian elif [ $DISTRO_NAME = "debian" ]; then EFI_BOOT_DIR="EFI/debian" @@ -178,4 +188,3 @@ build_iso "$EMITTED_KERNEL" "$EMITTED_RAMDISK" "$EMITTED_KERNEL_CMDLINE_ARGS" \ # Clean-up the bootloaders directory sudo rm -fr $TMP_BOOTLOADER_DIR - diff --git a/diskimage_builder/elements/iso/pkg-map b/diskimage_builder/elements/iso/pkg-map index a9d9d371..4226ac28 100644 --- a/diskimage_builder/elements/iso/pkg-map +++ b/diskimage_builder/elements/iso/pkg-map @@ -4,6 +4,11 @@ "syslinux": "syslinux", "syslinux-common": "syslinux-common", "isolinux": "isolinux" + }, + "ubuntu":{ + "syslinux": "syslinux", + "syslinux-common": "syslinux-common", + "isolinux": "isolinux" } }, "family":{ @@ -24,4 +29,3 @@ "isolinux": "" } } - diff --git a/diskimage_builder/elements/iso/post-install.d/01-copy-bootloaders b/diskimage_builder/elements/iso/post-install.d/01-copy-bootloaders index 63b96695..4d38d9fa 100755 --- a/diskimage_builder/elements/iso/post-install.d/01-copy-bootloaders +++ b/diskimage_builder/elements/iso/post-install.d/01-copy-bootloaders @@ -16,10 +16,16 @@ if [ $DISTRO_NAME = "fedora" ]; then SHIM_FILE="/boot/efi/EFI/fedora/shim.efi" SYSLINUX_FILE="/usr/share/syslinux/isolinux.bin" LDLINUX_FILE="/usr/share/syslinux/ldlinux.c32" -#debian -elif [ $DISTRO_NAME = "debian" ]; then +#centos +elif [ $DISTRO_NAME = "centos" ]; then + GRUB_FILE="/boot/efi/EFI/centos/grubx64.efi" + SHIM_FILE="/boot/efi/EFI/centos/shimx64-centos.efi" + SYSLINUX_FILE="/usr/share/syslinux/isolinux.bin" + LDLINUX_FILE="/usr/share/syslinux/ldlinux.c32" +#debian/ubuntu +elif [ $DISTRO_NAME = "ubuntu" || $DISTRO_NAME = "debian" ]; then GRUB_FILE="/usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed" - SHIM_FILE="/usr/lib/shim/shim.efi.signed" + SHIM_FILE="/usr/lib/shim/shimx64.efi.signed" SYSLINUX_FILE="/usr/lib/ISOLINUX/isolinux.bin" LDLINUX_FILE="/usr/lib/syslinux/modules/bios/ldlinux.c32" #rhel7 @@ -28,18 +34,23 @@ elif [ $DISTRO_NAME = "rhel7" ]; then SHIM_FILE="/boot/efi/EFI/redhat/shim.efi" SYSLINUX_FILE="/usr/share/syslinux/isolinux.bin" LDLINUX_FILE="/usr/share/syslinux/ldlinux.c32" -#ubuntu +#other else GRUB_FILE="/usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed" - SHIM_FILE="/usr/lib/shim/shim.efi.signed" - SYSLINUX_FILE="/usr/lib/syslinux/isolinux.bin" - LDLINUX_FILE="/usr/lib/syslinux/ldlinux.c32" + SHIM_FILE="/usr/lib/shim/shimx64.efi.signed" + SYSLINUX_FILE="/usr/lib/ISOLINUX/isolinux.bin" + LDLINUX_FILE="/usr/lib/syslinux/modules/bios/ldlinux.c32" fi cp $GRUB_FILE $TMP_BOOTLOADER_DIR cp $SHIM_FILE $TMP_BOOTLOADER_DIR cp $SYSLINUX_FILE $TMP_BOOTLOADER_DIR +# On some operating systems signed bootloader packages install +# files with read permissions for root only, whereas some for all +# the users. +chmod --recursive +r $TMP_BOOTLOADER_DIR + # Starting from SYSLINUX 5.00, the isolinux.bin is dependent # on ldlinux.c32. # http://www.syslinux.org/wiki/index.php/Library_modules