From 5025ab688be5d484ae2c4ab798a5be13a3489026 Mon Sep 17 00:00:00 2001 From: Bartosz Bezak Date: Thu, 31 Oct 2024 13:27:21 +0100 Subject: Ironic: Add ESP image for UEFI virtual media UEFI virtual media boot requires an ESP image [1]. [1] https://docs.openstack.org/ironic/2024.2/admin/drivers/redfish.html#virtual-media-boot Change-Id: Ie8485a7098743e1d736145e8fd9441cf13c929d7 --- docker/ironic/ironic-pxe/Dockerfile.j2 | 4 ++++ docker/ironic/ironic-pxe/extend_start.sh | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) (limited to 'docker') diff --git a/docker/ironic/ironic-pxe/Dockerfile.j2 b/docker/ironic/ironic-pxe/Dockerfile.j2 index 51588ac61..f4a7734f9 100644 --- a/docker/ironic/ironic-pxe/Dockerfile.j2 +++ b/docker/ironic/ironic-pxe/Dockerfile.j2 @@ -9,10 +9,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% if base_package_type == 'rpm' %} {% set ironic_pxe_packages = [ + 'dosfstools', 'grub2-tools', 'grub2-efi-*64', 'grub2-efi-aa64-modules', 'ipxe-bootimgs', + 'mtools', 'shim-*64', 'tftp-server', ] %} @@ -26,8 +28,10 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {{ macros.install_packages(ironic_pxe_packages | customizable("packages")) }} {% elif base_package_type == 'deb' %} {% set ironic_pxe_packages = [ + 'dosfstools', 'grub-efi-*64-signed', 'ipxe', + 'mtools', 'pxelinux', 'shim-signed', 'syslinux-common', diff --git a/docker/ironic/ironic-pxe/extend_start.sh b/docker/ironic/ironic-pxe/extend_start.sh index 50aa543a7..54d6b1b21 100644 --- a/docker/ironic/ironic-pxe/extend_start.sh +++ b/docker/ironic/ironic-pxe/extend_start.sh @@ -55,6 +55,35 @@ function prepare_ipxe { fi } +function prepare_esp_image { + # NOTE(bbezak): based on https://docs.openstack.org/ironic/2024.2/install/configure-esp.html + # ESP image needs to be provided for UEFI boot with virtual media: + # https://docs.openstack.org/ironic/2024.2/admin/drivers/redfish.html#virtual-media-boot + if [[ "${KOLLA_BASE_DISTRO}" =~ debian|ubuntu ]]; then + shim_src_file="/usr/lib/shim/shim*64.efi.signed" + grub_src_file="/usr/lib/grub/*-efi-signed/grubnet*64.efi.signed" + elif [[ "${KOLLA_BASE_DISTRO}" =~ centos|rocky ]]; then + shim_src_file="/boot/efi/EFI/${KOLLA_BASE_DISTRO}/shim*64.efi" + grub_src_file="/boot/efi/EFI/${KOLLA_BASE_DISTRO}/grub*64.efi" + fi + + if [[ "${KOLLA_BASE_ARCH}" == "x86_64" ]]; then + shim_dst_file="bootx64.efi" + grub_dst_file="grubx64.efi" + elif [[ "${KOLLA_BASE_ARCH}" == "aarch64" ]]; then + shim_dst_file="bootaa64.efi" + grub_dst_file="grubaa64.efi" + fi + + DEST=${HTTPBOOT_PATH}/esp.img + dd if=/dev/zero of=$DEST bs=4096 count=2048 + mkfs.msdos -F 12 -n ESP_IMAGE $DEST + mmd -i $DEST EFI EFI/BOOT + mcopy -i $DEST -v $shim_src_file ::EFI/BOOT/$shim_dst_file + mcopy -i $DEST -v $grub_src_file ::EFI/BOOT/$grub_dst_file + mdir -i $DEST ::EFI/BOOT +} + # Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases # of the KOLLA_BOOTSTRAP variable being set, including empty. if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then @@ -63,6 +92,7 @@ if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then prepare_pxe_pxelinux prepare_pxe_grub prepare_ipxe + prepare_esp_image exit 0 fi -- cgit v1.2.3