# ROMS we want for QEMU with format PCIID:QEMUNAME %global qemuroms \\\ 8086100e:e1000 \\\ 10ec8139:rtl8139 \\\ 1af41000:virtio \\\ 808610d3:e1000e %if 0%{?fedora} # Fedora specific roms %global qemuroms %{qemuroms} \\\ 10222000:pcnet \\\ 10ec8029:ne2k_pci \\\ 80861209:eepro100 \\\ 15ad07b0:vmxnet3 %endif # Enable cross-architecture building on all supported hosts %global buildarches x86_64 aarch64 # debugging firmwares does not go the same way as a normal program. # moreover, all architectures providing debuginfo for a single noarch # package is currently clashing in koji, so don't bother. %global debug_package %{nil} # Upstream don't do "releases" :-( So we're going to use the date # as the version, and a GIT hash as the release. Generate new GIT # snapshots using the folowing commands: # # $ hash=`git log -1 --format='%h'` # $ date=`git log -1 --format='%cd' --date=short | tr -d -` # $ git archive --prefix ipxe-${date}-git${hash}/ ${hash} | xz -7e > ipxe-${date}-git${hash}.tar.xz # # And then change these two: %global hash de8a0821 %global date 20240119 Name: ipxe Version: %{date} Release: 2.git%{hash}%{?dist} Summary: A network boot loader License: BSD-2-Clause AND BSD-3-Clause AND GPL-2.0-only AND (GPL-2.0-only OR MPL-1.1) AND GPL-2.0-or-later AND GPL-2.0-or-later WITH UBDL-exception AND ISC AND MIT URL: http://ipxe.org/ Source0: %{name}-%{version}-git%{hash}.tar.xz # Enable IPv6 for qemu's config # Sent upstream: http://lists.ipxe.org/pipermail/ipxe-devel/2015-November/004494.html Patch0001: 0001-build-customize-configuration.patch Patch0002: 0002-Use-spec-compliant-timeouts.patch %ifarch %{buildarches} BuildRequires: perl-interpreter BuildRequires: perl-Getopt-Long %if 0%{?fedora} >= 33 || 0%{?rhel} >= 9 BuildRequires: perl-FindBin BuildRequires: perl-lib %endif BuildRequires: syslinux BuildRequires: mtools BuildRequires: xorriso BuildRequires: edk2-devel BuildRequires: xz-devel BuildRequires: gcc BuildRequires: binutils-devel BuildRequires: make Obsoletes: gpxe <= 1.0.1 %endif # Define architecture-specific boot image packages %package bootimg-x86_64 Summary: x86_64 Network boot loader images in bootable USB, CD, floppy and GRUB formats BuildArch: noarch Provides: %{name}-bootimgs = %{version}-%{release} Obsoletes: %{name}-bootimgs < 20200823-9.git4bd064de Obsoletes: gpxe-bootimgs <= 1.0.1 %package bootimg-aarch64 Summary: AArch64 Network boot loader images in bootable USB and GRUB formats BuildArch: noarch %package roms Summary: Network boot loader roms in .rom format Requires: %{name}-roms-qemu = %{version}-%{release} BuildArch: noarch Obsoletes: gpxe-roms <= 1.0.1 %package roms-qemu Summary: Network boot loader roms supported by QEMU, .rom format BuildArch: noarch Obsoletes: gpxe-roms-qemu <= 1.0.1 %description bootimg-x86_64 iPXE is an open source network bootloader. It provides a direct replacement for proprietary PXE ROMs, with many extra features such as DNS, HTTP, iSCSI, etc. This package contains the iPXE x86_64 boot images in USB, CD, floppy, and PXE UNDI formats. %description bootimg-aarch64 iPXE is an open source network bootloader. It provides a direct replacement for proprietary PXE ROMs, with many extra features such as DNS, HTTP, iSCSI, etc. This package contains the iPXE AArch64 boot images in USB and GRUB formats. %description roms iPXE is an open source network bootloader. It provides a direct replacement for proprietary PXE ROMs, with many extra features such as DNS, HTTP, iSCSI, etc. This package contains the iPXE roms in .rom format. %description roms-qemu iPXE is an open source network bootloader. It provides a direct replacement for proprietary PXE ROMs, with many extra features such as DNS, HTTP, iSCSI, etc. This package contains the iPXE ROMs for devices emulated by QEMU, in .rom format. %description iPXE is an open source network bootloader. It provides a direct replacement for proprietary PXE ROMs, with many extra features such as DNS, HTTP, iSCSI, etc. %prep %setup -q -n %{name}-%{version}-git%{hash} %autopatch -p1 # ath9k drivers are too big for an Option ROM, and ipxe devs say it doesn't # make sense anyways # http://lists.ipxe.org/pipermail/ipxe-devel/2012-March/001290.html rm -rf src/drivers/net/ath/ath9k %build cd src make_ipxe() { make %{?_smp_mflags} \ NO_WERROR=1 V=1 \ "$@" } # Define build targets based on host architecture (QEMU-style cross-building) %ifarch x86_64 build_targets="bin-i386-efi/ipxe.efi bin-x86_64-efi/ipxe.efi bin-x86_64-efi/snponly.efi" cross_targets="bin-arm64-efi/snponly.efi bin-arm64-efi/ipxe.efi" %endif %ifarch aarch64 build_targets="bin-arm64-efi/snponly.efi bin-arm64-efi/ipxe.efi" cross_targets="bin-i386-efi/ipxe.efi bin-x86_64-efi/ipxe.efi bin-x86_64-efi/snponly.efi" %endif # Build native architecture targets echo "Building native architecture targets..." make_ipxe $build_targets # Build cross-architecture targets echo "Building cross-architecture targets..." make_ipxe $cross_targets # Build x86_64 specific traditional boot images (needed on all architectures) echo "Building x86_64 traditional boot images..." make_ipxe ISOLINUX_BIN=/usr/share/syslinux/isolinux.bin \ bin/undionly.kpxe bin/ipxe.{dsk,iso,usb,lkrn} \ allroms # Build x86_64 QEMU ROMs (needed on all architectures) echo "Building x86_64 QEMU ROMs..." mkdir bin-combined for romstr in %{qemuroms}; do rom=$(echo "$romstr" | cut -d ":" -f 1) make_ipxe CONFIG=qemu bin/${rom}.rom make_ipxe CONFIG=qemu bin-x86_64-efi/${rom}.efidrv vid="0x${rom%%????}" did="0x${rom#????}" EfiRom -f "$vid" -i "$did" --pci23 \ -ec bin-x86_64-efi/${rom}.efidrv \ -o bin-combined/${rom}.eficrom util/catrom.pl \ bin/${rom}.rom \ bin-combined/${rom}.eficrom \ > bin-combined/${rom}.rom EfiRom -d bin-combined/${rom}.rom # truncate to at least 256KiB truncate -s \>256K bin-combined/${rom}.rom # verify rom fits in 256KiB test $(stat -c '%s' bin-combined/${rom}.rom) -le $((256 * 1024)) done %install # Create architecture-specific directory structure mkdir -p %{buildroot}/%{_datadir}/%{name}/x86_64/ mkdir -p %{buildroot}/%{_datadir}/%{name}/aarch64/ mkdir -p %{buildroot}/%{_datadir}/%{name}.efi/x86_64/ # Install x86_64 traditional boot images (built on all architectures) echo "Installing x86_64 boot images..." pushd src/bin/ cp -a undionly.kpxe ipxe.{iso,usb,dsk,lkrn} %{buildroot}/%{_datadir}/%{name}/x86_64/ popd # Install x86_64 EFI images echo "Installing x86_64 EFI images..." cp -a src/bin-i386-efi/ipxe.efi %{buildroot}/%{_datadir}/%{name}/x86_64/ipxe-i386.efi cp -a src/bin-x86_64-efi/ipxe.efi %{buildroot}/%{_datadir}/%{name}/x86_64/ipxe-x86_64.efi cp -a src/bin-x86_64-efi/snponly.efi %{buildroot}/%{_datadir}/%{name}/x86_64/ipxe-snponly-x86_64.efi # Install aarch64 EFI images echo "Installing aarch64 EFI images..." cp -a src/bin-arm64-efi/snponly.efi %{buildroot}/%{_datadir}/%{name}/aarch64/snponly.efi cp -a src/bin-arm64-efi/ipxe.efi %{buildroot}/%{_datadir}/%{name}/aarch64/ipxe.efi # Install ROM files (x86_64 specific) echo "Installing ROM files..." for img in src/bin/*.rom; do if [ -e "$img" ]; then baseimg=$(basename "$img") cp -a "$img" %{buildroot}/%{_datadir}/%{name}/x86_64/ echo %{_datadir}/%{name}/x86_64/$baseimg >> x86_64.rom.list fi done # Install QEMU ROMs and create symlinks echo "Installing QEMU ROMs..." mkdir -p %{buildroot}%{_datadir}/%{name}/x86_64/qemu/ for romstr in %{qemuroms}; do rom=$(echo "$romstr" | cut -d ":" -f 1) qemuname=$(echo "$romstr" | cut -d ":" -f 2) # Remove QEMU ROMs from main ROM list sed -i -e "/\/x86_64\/${rom}.rom/d" x86_64.rom.list # Copy ROM files cp src/bin-combined/${rom}.rom %{buildroot}/%{_datadir}/%{name}.efi/x86_64/ echo %{_datadir}/%{name}.efi/x86_64/${rom}.rom >> x86_64.qemu.rom.list # Create QEMU symlinks ln -s ../../ipxe/x86_64/${rom}.rom %{buildroot}%{_datadir}/%{name}/x86_64/qemu/pxe-${qemuname}.rom ln -s ../../ipxe.efi/x86_64/${rom}.rom %{buildroot}%{_datadir}/%{name}/x86_64/qemu/efi-${qemuname}.rom done %files bootimg-x86_64 %dir %{_datadir}/%{name} %dir %{_datadir}/%{name}/x86_64 %{_datadir}/%{name}/x86_64/ipxe.iso %{_datadir}/%{name}/x86_64/ipxe.usb %{_datadir}/%{name}/x86_64/ipxe.dsk %{_datadir}/%{name}/x86_64/ipxe.lkrn %{_datadir}/%{name}/x86_64/ipxe-i386.efi %{_datadir}/%{name}/x86_64/ipxe-x86_64.efi %{_datadir}/%{name}/x86_64/undionly.kpxe %{_datadir}/%{name}/x86_64/ipxe-snponly-x86_64.efi %doc COPYING COPYING.GPLv2 COPYING.UBDL %files bootimg-aarch64 %dir %{_datadir}/%{name} %dir %{_datadir}/%{name}/aarch64 %{_datadir}/%{name}/aarch64/ipxe.efi %{_datadir}/%{name}/aarch64/snponly.efi %doc COPYING COPYING.GPLv2 COPYING.UBDL %files roms -f x86_64.rom.list %dir %{_datadir}/%{name} %dir %{_datadir}/%{name}/x86_64 %doc COPYING COPYING.GPLv2 COPYING.UBDL %files roms-qemu -f x86_64.qemu.rom.list %dir %{_datadir}/%{name} %dir %{_datadir}/%{name}.efi %dir %{_datadir}/%{name}.efi/x86_64 %{_datadir}/%{name}/x86_64/qemu %doc COPYING COPYING.GPLv2 COPYING.UBDL %changelog * Thu Jul 18 2024 Fedora Release Engineering - 20240119-2.gitde8a0821 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild * Tue Jan 30 2024 Your Name - 20240119-2.gitde8a0821 - Implement QEMU-style cross-architecture building for iPXE - Generate both ipxe-bootimg-x86_64 and ipxe-bootimg-aarch64 noarch packages - Enable building all architectures on any supported build host * Tue Jan 30 2024 Daniel P. Berrangé - 20240119-1.gitde8a0821 - Update to latest git snapshot * Thu Jan 25 2024 Stid Official - 20220210-8.git64113751 - Add support of NFS protocol * Wed Jan 24 2024 Fedora Release Engineering - 20220210-7.git64113751 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild * Sat Jan 20 2024 Fedora Release Engineering - 20220210-6.git64113751 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild * Tue Dec 19 2023 Yaakov Selkowitz - 20220210-5.git64113751 - Fix build with binutils 2.41 * Thu Jul 20 2023 Fedora Release Engineering - 20220210-4.git64113751 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild * Thu Jan 19 2023 Fedora Release Engineering - 20220210-3.git64113751 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild * Thu Jul 21 2022 Fedora Release Engineering - 20220210-2.git64113751 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild * Sun Apr 10 2022 Cole Robinson - 20220210-1.git64113751 - Update to newer git snapshot * Tue Mar 01 2022 Yaakov Selkowitz - 20200823-9.git4bd064de - Add aarch64 EFI artifacts (bz 2058680) * Thu Jan 20 2022 Fedora Release Engineering - 20200823-8.git4bd064de - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild