Make ipxe-boot image EFI capable
This refreshes the ipxe build makefile to build an image that works in both legacy BIOS and UEFI environments. This makes the following changes: - Moves the ipxe submodule commit to current master - Creates an EFI partition efi.img containing ipxe.efi as the default binary - Builds ipxe-boot.img as an MBR/GPT hybrid ISO which boots and runs iPXE in both legacy BIOS and UEFI environments - Stop creating ipxe-boot.qcow2 since the conversion from ipxe-boot.img has an incorrect EFI partition, and there is no real benefit over the raw image anyway - Refresh the documentation for how to upload the images to an OpenStack cloud, remove the redundancy from ipxe/README Change-Id: I720ed5aaa0d55ded73e01aaba9db66602adc26cd
This commit is contained in:
parent
ad0b75e870
commit
ce863ae11c
|
@ -1,25 +1,26 @@
|
||||||
Preparing the Host Cloud Environment
|
Preparing the Host Cloud Environment
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
#. Build or download an ipxe-boot image for the baremetal instances.
|
#. The ``ipxe`` directory contains tools for building an IPXE image which is used by the baremetal
|
||||||
|
instances to begin provisioning over the network.
|
||||||
|
|
||||||
#. To download a pre-built image::
|
To install the required build dependencies on a Fedora system::
|
||||||
|
|
||||||
wget https://repos.fedorapeople.org/repos/openstack-m/ovb/ipxe-boot.qcow2
|
sudo dnf install -y gcc xorriso make qemu-img syslinux-nonlinux xz-devel
|
||||||
|
|
||||||
#. To build the image, run the following from the root of the OVB repo::
|
It may be necessary to use the ``direct`` libguestfs backend::
|
||||||
|
|
||||||
|
export LIBGUESTFS_BACKEND=direct
|
||||||
|
|
||||||
|
To build the image, run the following from the root of the OVB repo::
|
||||||
|
|
||||||
make -C ipxe
|
make -C ipxe
|
||||||
|
|
||||||
To install the required build dependencies on a Fedora system::
|
#. Upload an ipxe-boot image for the baremetal instances, for both UEFI boot and
|
||||||
|
legacy BIOS boot::
|
||||||
|
|
||||||
sudo dnf install -y make gcc perl xz-devel genisoimage qemu-img
|
openstack image create --progress --disk-format raw --property os_shutdown_timeout=5 --file ipxe/ipxe-boot.img ipxe-boot
|
||||||
|
openstack image create --progress --disk-format raw --property os_shutdown_timeout=5 --property hw_firmware_type=uefi --property hw_machine_type=q35 --file ipxe/ipxe-boot.img ipxe-boot-uefi
|
||||||
#. Source an rc file that will provide admin credentials for the host cloud.
|
|
||||||
|
|
||||||
#. Upload an ipxe-boot image for the baremetal instances::
|
|
||||||
|
|
||||||
glance image-create --name ipxe-boot --disk-format qcow2 --property os_shutdown_timeout=5 --container-format bare < ipxe/ipxe-boot.qcow2
|
|
||||||
|
|
||||||
.. note:: The path provided to ipxe-boot.qcow2 is relative to the root of
|
.. note:: The path provided to ipxe-boot.qcow2 is relative to the root of
|
||||||
the OVB repo. If the command is run from a different working
|
the OVB repo. If the command is run from a different working
|
||||||
|
@ -28,10 +29,6 @@ Preparing the Host Cloud Environment
|
||||||
.. note:: os_shutdown_timeout=5 is to avoid server shutdown delays since
|
.. note:: os_shutdown_timeout=5 is to avoid server shutdown delays since
|
||||||
since these servers won't respond to graceful shutdown requests.
|
since these servers won't respond to graceful shutdown requests.
|
||||||
|
|
||||||
.. note:: On a UEFI enabled openstack cloud, to boot the baremetal instances
|
|
||||||
with uefi (instead of the default bios firmware) the image should
|
|
||||||
be created with the parameters --property="hw_firmware_type=uefi".
|
|
||||||
|
|
||||||
#. Upload a CentOS 7 image for use as the base image::
|
#. Upload a CentOS 7 image for use as the base image::
|
||||||
|
|
||||||
wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
|
wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
|
||||||
|
|
|
@ -4,17 +4,39 @@ IPXE_SRCDIR=ipxe/src
|
||||||
|
|
||||||
# The specific image to use as the OVB iPXE boot image
|
# The specific image to use as the OVB iPXE boot image
|
||||||
# Override this to use a different image (e.g. ipxe.hd)
|
# Override this to use a different image (e.g. ipxe.hd)
|
||||||
IPXE_IMG=ipxe.iso
|
IPXE_IMG=bin/ipxe.iso
|
||||||
|
|
||||||
ipxe_img_path=$(IPXE_SRCDIR)/bin/$(IPXE_IMG)
|
IPXE_EFI=bin-x86_64-efi/ipxe.efi
|
||||||
|
|
||||||
all: ipxe-boot.img ipxe-boot.qcow2
|
ipxe_img_path=$(IPXE_SRCDIR)/$(IPXE_IMG)
|
||||||
|
ipxe_efi_path=$(IPXE_SRCDIR)/$(IPXE_EFI)
|
||||||
|
|
||||||
ipxe-boot.img: $(ipxe_img_path) script.ipxe
|
all: ipxe-boot.img
|
||||||
cp $< $@
|
|
||||||
|
|
||||||
ipxe-boot.qcow2: ipxe-boot.img
|
ipxe-boot.img: $(ipxe_img_path) efi.img
|
||||||
qemu-img convert -f raw -O qcow2 $< $@
|
tmp_dir=$$(mktemp -d) && \
|
||||||
|
cp efi.img $$tmp_dir/efi.img && \
|
||||||
|
mkdir -p $$tmp_dir/boot/efi && \
|
||||||
|
xorriso -osirrox on -indev $(ipxe_img_path) -extract / $$tmp_dir && \
|
||||||
|
xorriso -as mkisofs \
|
||||||
|
-isohybrid-mbr /usr/share/syslinux/isohdpfx.bin \
|
||||||
|
-c boot.catalog \
|
||||||
|
-b isolinux.bin \
|
||||||
|
-no-emul-boot \
|
||||||
|
-boot-load-size 4 \
|
||||||
|
-boot-info-table \
|
||||||
|
-eltorito-alt-boot \
|
||||||
|
-e efi.img \
|
||||||
|
-no-emul-boot \
|
||||||
|
-isohybrid-gpt-basdat \
|
||||||
|
-o ipxe-boot.img \
|
||||||
|
$$tmp_dir
|
||||||
|
|
||||||
|
efi.img: $(ipxe_efi_path)
|
||||||
|
tmp_dir=$$(mktemp -d) && \
|
||||||
|
mkdir -p $$tmp_dir/EFI/BOOT && \
|
||||||
|
cp $(ipxe_efi_path) $$tmp_dir/EFI/BOOT/BOOTX64.EFI && \
|
||||||
|
virt-make-fs --format=raw --type=fat $$tmp_dir efi.img
|
||||||
|
|
||||||
# iPXE is configured by setting config macros in the source tree. The repo
|
# iPXE is configured by setting config macros in the source tree. The repo
|
||||||
# contains a number of config headers in ipxe/src/config/*.h which contain
|
# contains a number of config headers in ipxe/src/config/*.h which contain
|
||||||
|
@ -38,18 +60,27 @@ repo_config_path = $(IPXE_SRCDIR)/config/local
|
||||||
repo_config_headers = $(foreach header,$(config_headers),$(repo_config_path)/$(header))
|
repo_config_headers = $(foreach header,$(config_headers),$(repo_config_path)/$(header))
|
||||||
|
|
||||||
# Copy individual repo_config_headers from ipxe-config/
|
# Copy individual repo_config_headers from ipxe-config/
|
||||||
$(repo_config_path): ; mkdir $@
|
$(repo_config_path): $(IPXE_SRCDIR)
|
||||||
|
mkdir -p $@
|
||||||
$(repo_config_path)/%.h: ipxe-config/%.h | $(repo_config_path)
|
$(repo_config_path)/%.h: ipxe-config/%.h | $(repo_config_path)
|
||||||
cp $< $@
|
cp $< $@
|
||||||
|
|
||||||
|
$(IPXE_SRCDIR):
|
||||||
|
git submodule init
|
||||||
|
git submodule update
|
||||||
|
|
||||||
# We disable -Werror so we can build older commits with newer gcc
|
# We disable -Werror so we can build older commits with newer gcc
|
||||||
# Don't use parallel make, as this races to initialise config headers in a
|
# Don't use parallel make, as this races to initialise config headers in a
|
||||||
# clean repo.
|
# clean repo.
|
||||||
$(ipxe_img_path): $(repo_config_headers)
|
$(ipxe_img_path): $(repo_config_headers) script.ipxe
|
||||||
$(MAKE) -C ipxe/src NO_WERROR=1 EMBED=../../script.ipxe bin/$(IPXE_IMG)
|
$(MAKE) -C ipxe/src NO_WERROR=1 EMBED=../../script.ipxe $(IPXE_IMG)
|
||||||
|
|
||||||
|
$(ipxe_efi_path): $(repo_config_headers) script.ipxe
|
||||||
|
$(MAKE) -C ipxe/src NO_WERROR=1 EMBED=../../script.ipxe $(IPXE_EFI)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(MAKE) -C ipxe/src clean
|
rm -rf ipxe
|
||||||
|
mkdir ipxe
|
||||||
rm -f ipxe-boot.img ipxe-boot.qcow2
|
rm -f ipxe-boot.img ipxe-boot.qcow2
|
||||||
|
|
||||||
.PHONY: $(ipxe_img_path) clean
|
.PHONY: $(ipxe_img_path) clean
|
||||||
|
|
16
ipxe/README
16
ipxe/README
|
@ -1,17 +1,7 @@
|
||||||
IPXE image-building tools
|
IPXE image-building tools
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
This directory contains tools for for building an IPXE image. Run ``make`` to
|
This directory contains tools for for building an IPXE image. Documentation
|
||||||
build the image. It is provided as both raw and qcow2.
|
to build the image is found at:
|
||||||
|
|
||||||
The iPXE image has minimal build dependencies. On a Fedora system, these are:
|
https://openstack-virtual-baremetal.readthedocs.io/en/latest/host-cloud/prepare.html
|
||||||
|
|
||||||
* gcc
|
|
||||||
* genisoimage
|
|
||||||
* make
|
|
||||||
* qemu-img
|
|
||||||
* syslinux-nonlinux
|
|
||||||
* xz-devel
|
|
||||||
|
|
||||||
Please ping Ben Nemec <openstack@nemebean.com> when making a change which
|
|
||||||
affects the ipxe image to update the public repo of pre-built images.
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit c63ef427a2b18d318b313a4adf6267bb4dfa0c1c
|
Subproject commit f58b5109f46088bdbb5345a9d94b636c54345bdf
|
Loading…
Reference in New Issue