aboutsummaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
authorBartosz Bezak <bartosz@stackhpc.com>2024-10-31 13:27:21 +0100
committerBartosz Bezak <bartosz@stackhpc.com>2025-03-19 14:35:58 +0100
commit5025ab688be5d484ae2c4ab798a5be13a3489026 (patch)
treef123c0dbbf571a58aa6c365d1a75f8cee47d722e /docker
parent23519e6d88826cb4f77a3e9b7a21eef02f313ae9 (diff)
downloadkolla-5025ab688be5d484ae2c4ab798a5be13a3489026.tar.gz
kolla-5025ab688be5d484ae2c4ab798a5be13a3489026.zip
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
Diffstat (limited to 'docker')
-rw-r--r--docker/ironic/ironic-pxe/Dockerfile.j24
-rw-r--r--docker/ironic/ironic-pxe/extend_start.sh30
2 files changed, 34 insertions, 0 deletions
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