From 56336550e7d3e959d9dd103107f0422097da43d4 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Wed, 2 Sep 2020 14:17:26 +0000 Subject: [PATCH] create_disk: Use bootupd to install UEFI if available See https://github.com/coreos/bootupd and https://github.com/coreos/fedora-coreos-tracker/issues/510 Basically in order to handle *updates*, bootupd also takes care of installation so that it knows the original version. In order to sanely "ratchet" this change, only use bootupd if we find the ostree deployment is using it. --- src/create_disk.sh | 26 ++++++++++++++++++++------ src/vmdeps-aarch64.txt | 1 + src/vmdeps-x86_64.txt | 1 + 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/create_disk.sh b/src/create_disk.sh index 8598ff096e..fc657ccb40 100755 --- a/src/create_disk.sh +++ b/src/create_disk.sh @@ -314,8 +314,7 @@ EOF # be overridden below bootloader_backend=none -# Helper to install UEFI on supported architectures -install_uefi() { +install_uefi_without_bootupd() { # See also https://github.com/ostreedev/ostree/pull/1873#issuecomment-524439883 # In the future it'd be better to get this stuff out of the OSTree commit and # change our build process to download+extract it separately. @@ -339,7 +338,21 @@ install_uefi() { done ) done +} +install_uefi() { + if test -d "${deploy_root}"/usr/lib/bootupd/updates; then + # https://github.com/coreos/fedora-coreos-tracker/issues/510 + # See also https://github.com/ostreedev/ostree/pull/1873#issuecomment-524439883 + /usr/bin/bootupctl backend install --src-root="${deploy_root}" "${rootfs}" + else + install_uefi_without_bootupd + fi + # We have a "static" grub config file that basically configures grub to look + # in the partition labeled "boot". + local target_efi="$rootfs/boot/efi" + local grubefi=$(find "${target_efi}/EFI/" -maxdepth 1 -type d | grep -v BOOT) + local vendor_id="${grubefi##*/}" local vendordir="${target_efi}/EFI/${vendor_id}" mkdir -p "${vendordir}" cat > ${vendordir}/grub.cfg << 'EOF' @@ -348,8 +361,10 @@ set prefix=($prefix) configfile $prefix/grub2/grub.cfg boot EOF +} - # copy the grub config and any other files we might need +# copy the grub config and any other files we might need +install_grub_cfg() { mkdir -p $rootfs/boot/grub2 cp -v $grub_script $rootfs/boot/grub2/grub.cfg } @@ -367,6 +382,7 @@ x86_64) --boot-directory $rootfs/boot \ $disk fi + install_grub_cfg ;; aarch64) # Our aarch64 is UEFI only. @@ -375,9 +391,7 @@ aarch64) ppc64le) # to populate PReP Boot, i.e. support pseries grub2-install --target=powerpc-ieee1275 --boot-directory $rootfs/boot --no-nvram "${disk}${PREPPN}" - mkdir -p $rootfs/boot/grub2 - # copy the grub config and any other files we might need - cp $grub_script $rootfs/boot/grub2/grub.cfg + install_grub_cfg ;; s390x) bootloader_backend=zipl diff --git a/src/vmdeps-aarch64.txt b/src/vmdeps-aarch64.txt index 0a6c44e015..48025b4a8a 100644 --- a/src/vmdeps-aarch64.txt +++ b/src/vmdeps-aarch64.txt @@ -1,5 +1,6 @@ # For grub install when creating images and pxe install grub2 grub2-tools-extra +bootupd # For creating bootable UEFI media on aarch64 shim-aa64 grub2-efi-aa64 diff --git a/src/vmdeps-x86_64.txt b/src/vmdeps-x86_64.txt index 447436db45..d7ba632e9c 100644 --- a/src/vmdeps-x86_64.txt +++ b/src/vmdeps-x86_64.txt @@ -1,5 +1,6 @@ # For grub install when creating images without anaconda grub2 +bootupd # For creating bootable UEFI media on x86_64 shim-x64 grub2-efi-x64