Skip to content

Commit

Permalink
create_disk: Use bootupd to install UEFI if available
Browse files Browse the repository at this point in the history
See https://github.com/coreos/bootupd
and coreos/fedora-coreos-tracker#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.
  • Loading branch information
cgwalters committed Sep 21, 2020
1 parent db85a3c commit 7c7d60f
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 6 deletions.
26 changes: 20 additions & 6 deletions src/create_disk.sh
Expand Up @@ -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.
Expand All @@ -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/libexec/bootupd 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'
Expand All @@ -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
}
Expand All @@ -367,6 +382,7 @@ x86_64)
--boot-directory $rootfs/boot \
$disk
fi
install_grub_cfg
;;
aarch64)
# Our aarch64 is UEFI only.
Expand All @@ -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
Expand Down
1 change: 1 addition & 0 deletions 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
1 change: 1 addition & 0 deletions 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

0 comments on commit 7c7d60f

Please sign in to comment.