# 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 # We only build the ROMs if on an EFI build host. The resulting # binary RPM will be noarch, so other archs will still be able # to use the binary ROMs. %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: 5.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 %ifarch x86_64 BuildRequires: syslinux %endif BuildRequires: mtools BuildRequires: xorriso BuildRequires: edk2-tools BuildRequires: xz-devel BuildRequires: gcc BuildRequires: binutils-devel BuildRequires: make Obsoletes: gpxe <= 1.0.1 %endif %ifarch x86_64 %package bootimgs-x86 Summary: X86 Network boot loader images BuildArch: noarch Provides: %{name}-bootimgs = %{version}-%{release} Obsoletes: %{name}-bootimgs < 20200823-9.git4bd064de Obsoletes: gpxe-bootimgs <= 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 bootimgs-x86 iPXE is an open source network bootloader. This package contains iPXE x86 boot images for UEFI (snponly.efi) and BIOS (undionly.kpxe). %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. %endif %ifarch aarch64 %package bootimgs-aarch64 Summary: ARM Network boot loader images BuildArch: noarch %description bootimgs-aarch64 iPXE is an open source network bootloader. This package contains iPXE aarch64 boot images for UEFI (snponly.efi). %endif %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 \ GITVERSION=%{hash} \ "$@" } %ifarch x86_64 make_ipxe bin-x86_64-efi/snponly.efi make_ipxe ISOLINUX_BIN=/usr/share/syslinux/isolinux.bin \ bin/undionly.kpxe # build roms with efi support for qemu 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 %endif %ifarch aarch64 make_ipxe bin-arm64-efi/snponly.efi %endif %install %ifarch x86_64 mkdir -p %{buildroot}/%{_datadir}/%{name}/ mkdir -p %{buildroot}/%{_datadir}/%{name}.efi/ pushd src/bin/ cp -a undionly.kpxe %{buildroot}/%{_datadir}/%{name}/ popd cp -a src/bin-x86_64-efi/snponly.efi %{buildroot}/%{_datadir}/%{name}/ipxe-snponly-x86_64.efi mkdir -p %{buildroot}%{_datadir}/%{name}/qemu/ for romstr in %{qemuroms}; do # the roms supported by qemu will be packaged separatedly # remove from the main rom list and add them to qemu.list rom=$(echo "$romstr" | cut -d ":" -f 1) qemuname=$(echo "$romstr" | cut -d ":" -f 2) echo %{_datadir}/%{name}/${rom}.rom >> qemu.rom.list cp src/bin/${rom}.rom %{buildroot}/%{_datadir}/%{name}/ cp src/bin-combined/${rom}.rom %{buildroot}/%{_datadir}/%{name}.efi/ echo %{_datadir}/%{name}.efi/${rom}.rom >> qemu.rom.list # Set up symlinks with expected qemu firmware names ln -s ../../ipxe/${rom}.rom %{buildroot}%{_datadir}/%{name}/qemu/pxe-${qemuname}.rom ln -s ../../ipxe.efi/${rom}.rom %{buildroot}%{_datadir}/%{name}/qemu/efi-${qemuname}.rom done # endif x86_64 %endif %ifarch aarch64 mkdir -p %{buildroot}/%{_datadir}/%{name}/arm64-efi cp -a src/bin-arm64-efi/snponly.efi %{buildroot}/%{_datadir}/%{name}/arm64-efi/snponly.efi %endif %ifarch x86_64 %files bootimgs-x86 %dir %{_datadir}/%{name} %{_datadir}/%{name}/undionly.kpxe %{_datadir}/%{name}/ipxe-snponly-x86_64.efi %doc COPYING COPYING.GPLv2 COPYING.UBDL %files roms-qemu -f qemu.rom.list %dir %{_datadir}/%{name} %dir %{_datadir}/%{name}.efi %{_datadir}/%{name}/qemu %doc COPYING COPYING.GPLv2 COPYING.UBDL %endif %ifarch aarch64 %files bootimgs-aarch64 %dir %{_datadir}/%{name} %dir %{_datadir}/%{name}/arm64-efi %{_datadir}/%{name}/arm64-efi/snponly.efi %endif %changelog * Tue Oct 29 2024 Troy Dawson - 20240119-5.gitde8a0821 - Bump release for October 2024 mass rebuild: Resolves: RHEL-64018 * Tue Jul 16 2024 Gerd Hoffmann - 20240119-4.gitde8a0821 - Strip down package, remove drivers except qemu drivers. - Resolves: RHEL-37610 * Mon Jun 24 2024 Troy Dawson - 20240119-3.gitde8a0821 - Bump release for June 2024 mass rebuild * Fri Feb 23 2024 Konstantin Shalygin - 20240119-2.gitde8a0821 - Added iPXE 'reboot' & 'poweroff' commands * 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