diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | 0001-build-customize-configuration.patch | 9 | ||||
-rw-r--r-- | 0002-Use-spec-compliant-timeouts.patch | 98 | ||||
-rw-r--r-- | ipxe.spec | 308 | ||||
-rw-r--r-- | sources | 1 |
5 files changed, 417 insertions, 0 deletions
@@ -0,0 +1 @@ +/ipxe-20240119-gitde8a0821.tar.xz diff --git a/0001-build-customize-configuration.patch b/0001-build-customize-configuration.patch new file mode 100644 index 0000000..8a9a3ea --- /dev/null +++ b/0001-build-customize-configuration.patch @@ -0,0 +1,9 @@ +diff -rupN ipxe-20190125-git36a4c85f/src/config/local/general.h ipxe-20190125-git36a4c85f.new/src/config/local/general.h +--- ipxe-20190125-git36a4c85f/src/config/local/general.h 1970-01-01 01:00:00.000000000 +0100 ++++ ipxe-20190125-git36a4c85f.new/src/config/local/general.h 2019-02-01 16:40:42.725293033 +0000 +@@ -0,0 +1,5 @@ ++/* Enable IPv6. */ ++#define NET_PROTO_IPV6 ++/* Enable HTTPS */ ++#define DOWNLOAD_PROTO_HTTPS ++#define DOWNLOAD_PROTO_NFS diff --git a/0002-Use-spec-compliant-timeouts.patch b/0002-Use-spec-compliant-timeouts.patch new file mode 100644 index 0000000..f1a4d50 --- /dev/null +++ b/0002-Use-spec-compliant-timeouts.patch @@ -0,0 +1,98 @@ +From bc252caa54fcfb2e9fd0ddb01ebaa50192e85c38 Mon Sep 17 00:00:00 2001 +From: Alex Williamson <alex.williamson@redhat.com> +Date: Wed, 21 Oct 2015 11:18:40 +0200 +Subject: Use spec compliant timeouts + +Message-id: <20150428212403.31299.29391.stgit@gimli.home> +Patchwork-id: 64951 +O-Subject: [RHEL7.2 ipxe PATCH 2/2] [dhcp][RHEL-only] Use spec compliant timeouts +Bugzilla: 1196352 +RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com> +RH-Acked-by: Gerd Hoffmann <kraxel@redhat.com> +RH-Acked-by: Laszlo Ersek <lersek@redhat.com> + +Use local config to override iPXE's abbreviated DHCP timeouts using +the recommended values for spec compliance. This matches the state +of RHEL6 gPXE DHCP timeouts after bz968474 + bz1206042 + +Signed-off-by: Alex Williamson <alex.williamson@redhat.com> +Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> +(cherry picked from commit 7038f41c0131d263de5165b416500009acdbf550) +--- + src/config/local/.gitignore | 1 - + src/config/local/dhcp.h | 62 +++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 62 insertions(+), 1 deletion(-) + delete mode 100644 src/config/local/.gitignore + create mode 100644 src/config/local/dhcp.h + +diff --git a/src/config/local/dhcp.h b/src/config/local/dhcp.h +new file mode 100644 +index 0000000..83df5b8 +--- /dev/null ++++ b/src/config/local/dhcp.h +@@ -0,0 +1,62 @@ ++/* ++ * Downstream localization ++ * ++ * For RHEL, use spec compliant DHCP timeouts (bz1196352) ++ */ ++ ++/* ++ * PXE spec defines timeouts of 4, 8, 16, 32 seconds ++ */ ++#undef DHCP_DISC_START_TIMEOUT_SEC ++#define DHCP_DISC_START_TIMEOUT_SEC 4 ++#undef DHCP_DISC_END_TIMEOUT_SEC ++#define DHCP_DISC_END_TIMEOUT_SEC 32 ++ ++/* ++ * Elapsed time used for early break waiting for ProxyDHCP, this therefore ++ * needs to be less than the cumulative time for the first 2 timeouts. ++ */ ++#undef DHCP_DISC_PROXY_TIMEOUT_SEC ++#define DHCP_DISC_PROXY_TIMEOUT_SEC 11 ++ ++/* ++ * Approximate PXE spec requirement using minimum timeout (0.25s) for ++ * timeouts of 0.25, 0.5, 1, 2, 4 ++ */ ++#undef DHCP_REQ_START_TIMEOUT_SEC ++#define DHCP_REQ_START_TIMEOUT_SEC 0 ++#undef DHCP_REQ_END_TIMEOUT_SEC ++#define DHCP_REQ_END_TIMEOUT_SEC 4 ++ ++/* ++ * Same as normal request phase, except non-fatal, so we extend the timer ++ * to 8 and set the early timeout to an elapsed time value that causes a ++ * break after the 4 second timeout. At least that's what we'd like to do, ++ * but our timer operates at 18Hz and has a minimum resolution of 7 cycles. ++ * Therefore the above quarter-second starting timeout looks more like ++ * 0.39s, 0.78s, 1.56s, 3.11s, 6.22s. If we had an ideal timer, we could ++ * set the timeout to 7s (0.25 + 0.5 + 1 + 2 + 4 = 7.75s) and exit without ++ * failure when the timer rolls over to 8s. With our timer, we get 0.39 + ++ * 0.78 + 1.56 + 3.11 = 5.84s. The next timeout would take us to 12.06s ++ * (+6.22). That seems like a long time to wait for an optional reply, so ++ * we reduce the early timeout to 5s to exit before the timer exceeds the ++ * max and causes a failure. This still adds one extra cycle vs the ++ * upstream defaults. ++ */ ++#undef DHCP_PROXY_START_TIMEOUT_SEC ++#define DHCP_PROXY_START_TIMEOUT_SEC 0 ++#undef DHCP_PROXY_END_TIMEOUT_SEC ++#define DHCP_PROXY_END_TIMEOUT_SEC 8 ++#undef DHCP_REQ_PROXY_TIMEOUT_SEC ++#define DHCP_REQ_PROXY_TIMEOUT_SEC 5 ++ ++/* ++ * Same as above, retry each server using our approximation of standard ++ * timeouts and exit before timer induced failure. ++ */ ++#undef PXEBS_START_TIMEOUT_SEC ++#define PXEBS_START_TIMEOUT_SEC 0 ++#undef PXEBS_END_TIMEOUT_SEC ++#define PXEBS_END_TIMEOUT_SEC 8 ++#undef PXEBS_MAX_TIMEOUT_SEC ++#define PXEBS_MAX_TIMEOUT_SEC 5 +-- +1.8.3.1 + diff --git a/ipxe.spec b/ipxe.spec new file mode 100644 index 0000000..40fbecb --- /dev/null +++ b/ipxe.spec @@ -0,0 +1,308 @@ +# 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: 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 +%ifarch x86_64 +BuildRequires: syslinux +%endif +BuildRequires: mtools +BuildRequires: xorriso +BuildRequires: edk2-devel +BuildRequires: xz-devel +BuildRequires: gcc +BuildRequires: binutils-devel +BuildRequires: make + +Obsoletes: gpxe <= 1.0.1 +%endif + +%ifarch x86_64 +%package bootimgs +Summary: X86 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 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 bootimgs +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 boot images in USB, CD, floppy, and PXE +UNDI 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. +%endif + +%ifarch aarch64 +%package bootimgs +Summary: ARM Network boot loader images in bootable USB and GRUB formats +BuildArch: noarch + +%description bootimgs +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 ARM boot images in USB and GRUB formats. +%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 \ + "$@" +} + +%ifarch x86_64 + +make_ipxe bin-i386-efi/ipxe.efi bin-x86_64-efi/ipxe.efi \ + bin-x86_64-efi/snponly.efi + +make_ipxe ISOLINUX_BIN=/usr/share/syslinux/isolinux.bin \ + bin/undionly.kpxe bin/ipxe.{dsk,iso,usb,lkrn} \ + allroms + +# 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 +make_ipxe bin-arm64-efi/ipxe.efi +%endif + +%install +%ifarch x86_64 +mkdir -p %{buildroot}/%{_datadir}/%{name}/ +mkdir -p %{buildroot}/%{_datadir}/%{name}.efi/ +pushd src/bin/ + +cp -a undionly.kpxe ipxe.{iso,usb,dsk,lkrn} %{buildroot}/%{_datadir}/%{name}/ + +for img in *.rom; do + if [ -e $img ]; then + cp -a $img %{buildroot}/%{_datadir}/%{name}/ + echo %{_datadir}/%{name}/$img >> ../../rom.list + fi +done +popd + +cp -a src/bin-i386-efi/ipxe.efi %{buildroot}/%{_datadir}/%{name}/ipxe-i386.efi +cp -a src/bin-x86_64-efi/ipxe.efi %{buildroot}/%{_datadir}/%{name}/ipxe-x86_64.efi +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) + sed -i -e "/\/${rom}.rom/d" rom.list + echo %{_datadir}/%{name}/${rom}.rom >> qemu.rom.list + + 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 +cp -a src/bin-arm64-efi/ipxe.efi %{buildroot}/%{_datadir}/%{name}/arm64-efi/ipxe.efi +%endif + +%ifarch x86_64 +%files bootimgs +%dir %{_datadir}/%{name} +%{_datadir}/%{name}/ipxe.iso +%{_datadir}/%{name}/ipxe.usb +%{_datadir}/%{name}/ipxe.dsk +%{_datadir}/%{name}/ipxe.lkrn +%{_datadir}/%{name}/ipxe-i386.efi +%{_datadir}/%{name}/ipxe-x86_64.efi +%{_datadir}/%{name}/undionly.kpxe +%{_datadir}/%{name}/ipxe-snponly-x86_64.efi +%doc COPYING COPYING.GPLv2 COPYING.UBDL + +%files roms -f rom.list +%dir %{_datadir}/%{name} +%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 +%dir %{_datadir}/%{name} +%dir %{_datadir}/%{name}/arm64-efi +%{_datadir}/%{name}/arm64-efi/ipxe.efi +%{_datadir}/%{name}/arm64-efi/snponly.efi +%endif + +%changelog +* Thu Jul 18 2024 Fedora Release Engineering <releng@fedoraproject.org> - 20240119-2.gitde8a0821 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Tue Jan 30 2024 Daniel P. Berrangé <berrange@redhat.com> - 20240119-1.gitde8a0821 +- Update to latest git snapshot + +* Thu Jan 25 2024 Stid Official <stidofficiel@gmail.com> - 20220210-8.git64113751 +- Add support of NFS protocol + +* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 20220210-7.git64113751 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jan 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 20220210-6.git64113751 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Tue Dec 19 2023 Yaakov Selkowitz <yselkowi@redhat.com> - 20220210-5.git64113751 +- Fix build with binutils 2.41 + +* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 20220210-4.git64113751 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 20220210-3.git64113751 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 20220210-2.git64113751 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Sun Apr 10 2022 Cole Robinson <crobinso@redhat.com> - 20220210-1.git64113751 +- Update to newer git snapshot + +* Tue Mar 01 2022 Yaakov Selkowitz <yselkowi@redhat.com> - 20200823-9.git4bd064de +- Add aarch64 EFI artifacts (bz 2058680) + +* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 20200823-8.git4bd064de +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild @@ -0,0 +1 @@ +4259f615cfc116e8c15e8a0f4ab75f46 ipxe-20240119-gitde8a0821.tar.xz |