7411 Commits

Author SHA1 Message Date
Michael Brown
33ca177cfc [release] Update version number after release
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-06 16:17:42 +00:00
Michael Brown
12798ec29a [release] Release version 2.0.0
Signed-off-by: Michael Brown <mcb30@ipxe.org>
v2.0.0
2026-03-06 15:48:55 +00:00
Michael Brown
6165069249 [doc] Update change log in preparation for release
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-06 15:23:55 +00:00
Michael Brown
94138656d7 [efi] Do not unconditionally raise back to internal TPL
Most TPL manipulation is handled by efi_raise_tpl()/efi_restore_tpl()
pairs.  The exceptions are the places where we need to temporarily
drop to a lower TPL in order to allow a timer interrupt to occur.

These currently assume that they are called only from code that is
already running at the internal TPL (generally TPL_CALLBACK).  This
assumption is not always correct.  In particular, the call from
_efi_start() to efi_driver_reconnect_all() takes place after the SNP
devices have been released and so will be running at the external TPL.

Create an efi_drop_tpl()/efi_undrop_tpl() pair to abstract away the
temporary lowering of the TPL, and ensure that the TPL is always
raised back to its original level rather than being unconditionally
raised to the internal TPL.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-05 15:56:07 +00:00
Michael Brown
cbeda2012a [efi] Allow creating an image device handle with no parent device
When we fall back to using our own loaded image's device handle
(instead of the most recently opened SNP device handle), we may find
that the device handle is no longer valid since we have disconnected
the driver that originally provided it.

Check for existence of the device path protocol on the identified
parent handle, and choose not to attempt to set a parent-child
relationship if the parent handle appears to no longer be valid.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-05 13:25:25 +00:00
Michael Brown
5a17d8daf3 [efi] Install protocols onto a dedicated device handle
When we fall back to using our own loaded image's device handle
(instead of the most recently opened SNP device handle), we may find
that some protocols (e.g. EFI_SIMPLE_FILE_SYSTEM_PROTOCOL) are already
present on this handle.

Fix by creating a child device handle with an added Uri() device path
component, and installing EFI_SIMPLE_FILE_SYSTEM_PROTOCOL and others
onto this handle instead of onto the identified parent device handle.

This also provides a way for us to communicate the image URI to a
chainloaded iPXE, so that that iPXE can set its current working URI
appropriately.

A side effect of this change is that the EFI_SIMPLE_NETWORK_PROTOCOL
will be found on the parent of the loaded image's device handle,
rather than directly on the loaded image's device handle.  This will
not cause problems for a chainloaded iPXE, since that will already use
LocateDevicePath() to find EFI_SIMPLE_NETWORK_PROTOCOL (or the
EFI_MANAGED_NETWORK_SERVICE_BINDING_PROTOCOL created by MnpDxe) and so
will already find the instance on the parent device handle.  If other
UEFI executables are found to exist that do require the protocols to
be installed directly on the loaded image's device handle, then we
could potentially install copies of these protocol instances on the
device handle.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-05 13:25:16 +00:00
Michael Brown
910d9c5a98 [efi] Allow executing images even with no open network devices
We need a device handle from which to nominally load an EFI image.  We
currently rely on using the most recently opened network device's SNP
device handle, in the same way that we use the most recently opened
network device when loading a BIOS PXE NBP image.  If there is no most
recently opened network device, then we cannot execute an EFI image.

We use three aspects of the SNP device handle: the handle itself
(giving us something on which to install protocols), the associated
device path (giving us a base path from which to construct the new
image's file path), and the associated network device (giving us an
interface for the PXE base code protocol installation).

Make the network device optional by simply choosing not to install the
PXE base code protocols when no network device is defined.  This
allows us to fall back to using our own loaded image's device handle
and device path for the other two purposes.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-05 12:59:31 +00:00
Michael Brown
3df8f9c379 [efi] Try all supported autoexec protocols
When chainloaded from another iPXE, there will be both a virtual
filesystem and a managed network protocol available through which we
could attempt to load autoexec.ipxe.

Try both of these, with the virtual filesystem attempted first so that
an autoexec.ipxe that was explicitly downloaded by the chainloading
iPXE will have the highest priority.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-05 12:59:31 +00:00
Michael Brown
b677399da1 [efi] Treat a URI device path as higher priority than a cached DHCP packet
We currently expect to find either a cached DHCP packet (from a UEFI
PXE boot) or a URI device path (from a UEFI HTTP boot), but not both
simultaneously.  When both are present, the cached DHCP packet will
currently override any current working URI that was previously derived
from a URI device path.

Treat the URI device path as being more informative than the cached
DHCP packet by swapping the order in which these are processed.

Leave the boot option device path as being a lower priority than a
cached DHCP packet, since the boot option device path may well refer
to an earlier boot stage.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-05 12:41:38 +00:00
Michael Brown
8df45c2f3b [github] Add organization to sponsorship links
There is no viable way to link to the list of sponsorship recipients.
Add the organization itself as a sponsorship recipient, solely in
order to enable the use of https://github.com/sponsors/ipxe as a
central link for sponsorship information.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-03 14:57:17 +00:00
Michael Brown
608dde2adf [doc] Add contribution guidelines
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-03 14:30:33 +00:00
Michael Brown
f7fe2b319e [cachedhcp] Set current working URI to cached DHCP filename
For a UEFI HTTP boot, we set the current working URI based on the
loaded image device path.  The autoexec.ipxe script will be fetched
from the same directory as the iPXE binary itself.

For a BIOS or UEFI PXE boot, we do not explicitly set a current
working URI, but rely on the fact that registering the cached DHCP
settings block will cause the TFTP code to set the current working URI
to "tftp://${next-server}/".  The autoexec.ipxe script will therefore
be fetched from the default directory (which is most probably the root
directory) of the TFTP server.

When using a UEFI shim, the shim will always fetch iPXE from the same
directory as the shim itself.  This leads to a somewhat unintuitive
requirement for a UEFI PXE boot: the shim and iPXE must be placed in
the same directory, but the corresponding autoexec.ipxe script must be
placed in the root directory.

As with the loaded image device path for a UEFI HTTP boot, the
existence of a cached DHCP packet gives us a way to construct the URI
of our own binary.  We can therefore choose to use this to set the
current working URI, so that the autoexec.ipxe script may be placed in
the same directory as the iPXE binary itself.  This is the least
surprising location, and avoids the need for lengthy explanations in
documentation.

Choose to set the current working URI at the point that the cached
DHCP packet is recorded, rather than the point at which it is applied
and registered as a settings block.  This avoids some awkward corner
cases (such as failing to find a matching network device for the
DHCPACK), and naturally ensures that we retrieve the next-server
address and filename from the same DHCP packet.  We rely on the order
in which cached DHCP packets are recorded to impose a priority
ordering: later packets (e.g. PxeBSACK) will override earlier ones.

To avoid breaking existing setups that do place the autoexec.ipxe
script in the root directory, we modify the fetching logic to first
attempt to retrieve autoexec.ipxe from the current working URI, then
from the root directory of that URI.

As with commit a69afd7 ("[tftp] Use TFTP server URI only if no other
working URI is set"), this is technically a breaking change in
behaviour, but the new behaviour is almost certainly less surprising
than the existing behaviour.  Scripts that rely on the current working
URI being set to the root of the TFTP server can use absolute URIs
(i.e. add an initial slash): this is more explicit and will work on
iPXE builds both before and after this change.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-03 11:29:01 +00:00
Michael Brown
027d0fe246 [ci] Include Secure Boot ISO and USB images in release artifacts
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-02 22:19:52 +00:00
Michael Brown
559282d5a7 [build] Use Markdown consistently within release notes
Pass both parts of the generated release notes through pandoc, to
ensure some consistency in terms of link styles and line lengths.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-02 22:19:52 +00:00
Michael Brown
3680a4ae52 [build] Add support for including a UEFI shim in filesystem images
Add support for loading iPXE via a UEFI shim in ISO and USB images.
Since the iPXE shim's default loader filename is currently "ipxe.efi"
for all CPU architectures, at most one architecture within an image
may use a shim.  (This limitation should be removed in the next signed
release of the iPXE shim.)

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-02 16:49:47 +00:00
Michael Brown
1fbc3bca70 [efi] Automatically open network device matching loaded image device path
It is unintuitive to have to include an "ifopen" at the start of an
autoexec.ipxe script.  Commit efe8126 ("[cachedhcp] Automatically open
network device matching cached DHCPACK") causes the chainloaded device
to be opened automatically, using the cached DHCPACK to identify the
chainloaded device.

In the case of a UEFI HTTP(S) boot, the firmware does not provide
access to the DHCPACK and we are forced to instead extract the very
limited amount of information encoded into the loaded image's device
path.

Mark the device matching the loaded image's device path to be opened
automatically, so that the chainloaded device will be opened in the
same way for both TFTP and HTTP(S) boots.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-02 00:08:18 +00:00
Michael Brown
a69afd7435 [tftp] Use TFTP server URI only if no other working URI is set
We currently set the working URI to "tftp://${next-server}/" whenever
the value of the next-server setting changes.

Many years ago this was required for the default boot sequence, which
would treat the boot filename as a potentially relative URI.  Since
commit 481a217 ("[autoboot] Retain initial-slash (if present) when
constructing TFTP URIs"), the default boot sequence has always
constructed an absolute URI.

There is still a valid use case for setting the default working URI
based on the value of next-server: it allows command sequences such as

  dhcp && chain ${filename}

or

  set next-server 192.168.0.1
  chain myscript.ipxe

to work as expected.  Note that since "${filename}" may be a relative
path, it is necessary for the current working URI to be the root of
the TFTP server, i.e. "tftp://${next-server}/", rather than the full
path "tftp://${next-server}/${filename}".

In the case of a UEFI HTTP(S) boot, we already have a working URI set
on entry (to be the URI of the iPXE binary itself).  Running "dhcp"
would change this current working URI, which is quite unintuitive.

Similarly, once we start executing an image (e.g. a script), the
current working URI is set to the image's own URI, so that relative
URIs may be used in a script to download files relative to the
location of the script itself.  Running "dhcp" within the script may
or may not change the current working URI: it will happen to do so
only if the TFTP server address happens to change.  This is also
somewhat unintuitive.

Change the behaviour of the TFTP settings applicator to treat the TFTP
server URI as a fallback, to be used only if nothing else has already
set a current working URI.  This is technically a breaking change in
behaviour, but the new behaviour is almost certainly much less
surprising than the existing behaviour.  (Scripts that do genuinely
expect to acquire a new TFTP server address can use full URIs of the
form "tftp://${next-server}/...": this is more explicit and will work
on iPXE builds both before and after this change.)

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-01 19:47:29 +00:00
Michael Brown
fa993d5242 [tls] Transmit a closure alert when closing the connection
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-27 13:25:45 +00:00
Michael Brown
4d0b0cd4c7 [tls] Respond to received closure alerts
TLS defines a mechanism for gracefully closing a connection via a
closure alert.  We currently ignore this alert since it is a warning
rather than an error, and warnings are allowed to be ignored.

In almost all cases, a higher-level protocol such as HTTP will already
give us the information required to know when the connection should be
closed.  In the very rare case of an HTTPS server that does not send a
Content-Length header and does not close the TCP connection, only the
closure alert indicates that the whole file has been retrieved.

Handle a received closure alert by gracefully closing the connection.

Reported-by: Tuomo Tanskanen <tuomo.tanskanen@est.tech>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-27 13:22:08 +00:00
Michael Brown
efe8126372 [cachedhcp] Automatically open network device matching cached DHCPACK
It is unintuitive to have to include an "ifopen" at the start of an
autoexec.ipxe script.  Provide a mechanism for upper-layer drivers to
mark a network device to be opened automatically upon registration,
and do so for the device to which the cached DHCPACK is applied.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-26 13:11:57 +00:00
Michael Brown
879549da39 [dynui] Allow for duplicate shortcut keys
When searching for a shortcut key, search first from the currently
selected menu item and then from the start of the list.

This allows several ways for a shortcut key to be meaningfully used
multiple times within the same menu.  For example, two sections may
have the same shortcut key:

  item --key s --gap (S)ection 1
  item ...
  item ...
  item --key s --gap (S)ection 2
  item ...

With the above menu, repeated "s" keypresses would cycle through the
sections.

As another example, entries within different sections may have the
same shortcut keys.  For example:

  item --key d --gap (D)ebian
  item --key s debst Debian (s)table release
  item --key u debun Debian (u)nstable release
  item --key f --gap (F)edora
  item --key s fedst Fedora (s)table release
  item --key u fedun Fedora (u)nstable release

With the above menu, a shortcut key sequence such as "f", "s" can be
used to select an entry within a specific section, avoiding the need
to choose shortcut keys that are globally unique within the menu.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-26 12:28:50 +00:00
Michael Brown
f00d2079d3 [doc] Add release process documentation
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-25 22:10:59 +00:00
Joseph Wong
ad748f0d92 [bnxt] Update link speed definitions
Add new link speed definitions and remove unused D3 Flow Control
definitions.

Signed-off-by: Joseph Wong <joseph.wong@broadcom.com>
2026-02-25 17:46:10 +00:00
Michael Brown
7ce5dbd76f [efi] Allow for the existence of multiple shim lock protocols
When multiple shims are present in the system (e.g. in a boot chain
such as UEFI -> iPXE shim -> iPXE -> distro shim -> distro kernel),
there may be more than one installed shim lock protocol.

There is no sensible way to identify which shim lock protocol belongs
to which shim.  The shim lock protocol is installed on an anonymous
handle that has no device path, no other form of identifier, and no
connection to any other handle or protocol instance installed by the
shim.

The shim does include some extremely convoluted logic whereby a second
shim will attempt to uninstall a shim lock protocol installed by an
earlier shim.  However, this logic is broken: the second shim calls
UninstallProtocolInterface() with the wrong handle and the wrong
protocol interface pointer.  This logic error is silently ignored
since shim does not bother to check the return status.

Experience shows that there is unfortunately no point in trying to get
a fix for this upstreamed into shim, or even in raising the issue with
the shim project.  We therefore work around the shim bug by calling
all instances of the shim lock protocol, rather than relying on shim
itself to ensure that only one such instance exists.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-25 17:15:05 +00:00
Michael Brown
596c84ce77 [efi] Support the EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE operation
Support getting the size of a TFTP file via the EFI PXE API, as
required for booting OpenBSD.

Debugged-by: Eric Radman <ericshane@eradman.com>
Tested-by: Eric Radman <ericshane@eradman.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-25 00:25:03 +00:00
Michael Brown
b48965ae57 [xferbuf] Silently discard data written to a void data transfer buffer
Allow data to be successfully written (and discarded) to a void data
transfer buffer, rather than throwing an error.  This allows a void
data transfer buffer to be used when determining the length of a file
downloaded from a TFTP server that does not support the "tsize" option
defined in RFC 2349.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-25 00:19:20 +00:00
Michael Brown
3194c8ad0a [xferbuf] Record maximum required size
Record the maximum size required when writing into a data transfer
buffer.  This allows the maximum size to be determined even if
allocation fails (e.g. due to a fixed-size buffer or an out-of-memory
condition).

In the case of a fixed-size buffer (which may already be larger than
required), this allows the caller to determine the actual size used
for written data.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-25 00:00:28 +00:00
Michael Brown
7948ffe329 [ci] Remove now-redundant "netboot" job
Use the ipxeboot.tar.gz artifact created by util/gensrvimg in the
"combine" job, and delete the dedicated "netboot" job that currently
creates the same artifact.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-24 15:53:25 +00:00
Michael Brown
9250a9091b [build] Create util/gensrvimg for building network boot server images
In the spirit of util/genfsimg, create a script util/gensrvimg that
can be used to install compiled iPXE binaries to a directory tree
suitable for copying to a TFTP or HTTP server.

The script detects the CPU architecture for each input file and
installs it into the appropriate subdirectory.  Top-level symlinks are
created for each filename, with earlier files taking precedence.

Signed binaries are detected and automatically placed into a Secure
Boot specific subdirectory, thereby allowing the reduced-feature
Secure Boot binaries to coexist with full-feature binaries in a single
installation directory tree.  An iPXE shim may be specified and will
be automatically installed alongside the signed binaries, with the
relevant symlink created for each signed binary.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-24 15:44:15 +00:00
Joseph Wong
f0ceb70cb9 [bnxt] Fix memory leak in probe()
Fix potential memory leak in probe() if initialization fails after
HWRM memory has been allocated.

Signed-off-by: Joseph Wong <joseph.wong@broadcom.com>
2026-02-24 10:03:49 +00:00
Joseph Wong
a6d393ecc8 [bnxt] Skip unnecessary calls for VFs
Add a check for VFs in HWRM backing store related functions to return
immediately as these function are not needed.

Signed-off-by: Joseph Wong <joseph.wong@broadcom.com>
2026-02-24 09:58:38 +00:00
Dexter Gerig
9443f7a2a7 [tls] Remove current time from client random bytes
TLS versions 1.2 and earlier define a 4-byte gmt_unix_time field as
part of the 32-byte ClientHello random data block, as a (minimal) form
of protection against a broken random number generator.  iPXE has
never set this field to a correct value.  Early versions had only
relative timers and so set this field to zero.  Commit 5da7123 ("[tls]
Include current time within the client random bytes") did set this
field to the current time, but neglected to use the correct byte
ordering.

TLS version 1.3 (defined in RFC 8446) omits the gmt_unix_time field
completely and just defines the whole 32-byte value as random data.

Simplify the code by using the approach defined in RFC 8446.

Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-24 09:33:39 +00:00
Christian I. Nilsson
1b6d88d646 [ipv6] Obtain MTU setting from NDP
RA contains MTU setting, this is especially needed in some networks
which don't have a a full 1500 MTU link to IPv6 internet.  Mostly due
to some providers (such as Microsoft Azure) not having a working pMTUd
setup.

Signed-off-by: Christian I. Nilsson <nikize@gmail.com>
Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-23 23:38:18 +00:00
Joseph Wong
1eb571cef4 [bnxt] Remove access of deprecated link speed variables
Remove access of deprecated link speed variables for 5750x devices.
Update test flag to include CHIP_P5_PLUS when excluding access of
certain NVM variables.

Signed-off-by: Joseph Wong <joseph.wong@broadcom.com>
2026-02-23 12:58:44 +00:00
Joseph Wong
a5e4bb98bf [bnxt] Fix typo in function declaration
Fix typo in function declaration.  Duplicate declaration of
bnxt_adv_cq_index().  Modified to include function declaration for
bnxt_adv_nq_index().

Signed-off-by: Joseph Wong <joseph.wong@broadcom.com>
2026-02-23 12:52:55 +00:00
Joseph Wong
df5957ccc9 [bnxt] Fix coding style
Ensure whitespace and indentation adhere to iPXE coding standards.
Fix vertical alignment of multi-line function calls.

No functional changes.

Signed-off-by: Joseph Wong <joseph.wong@broadcom.com>
2026-02-23 12:33:45 +00:00
Joseph Wong
9d6831bb07 [bnxt] Correct port index usage
Use port index value retrieved from the firmware when calling
bnxt_hwrm_queue_qportcfg() to retrieve the queue_id.  This function
is available for all devices.

Signed-off-by: Joseph Wong <joseph.wong@broadcom.com>
2026-02-23 12:27:53 +00:00
Michael Brown
2012ab71de [pxeprefix] Add a minimal iPXE NBP metadata header
There is no fixed structure for a PXE NBP: the format is just an
opaque block of executable code that is loaded into memory verbatim
and executed by jumping to the first byte.  It is consequently
impossible for external code to unambiguously identify a PXE NBP, or
to inspect any metadata about the NBP's functionality.

The first five bytes of an iPXE NBP are already fixed as being an ljmp
instruction that resets the code segment to 0x7c0 and continues
execution from the following byte.  We can extend this to include a
minimal header as follows:

    Offset    Content
    ------    -------
    0         ljmp instruction (0xea)
    1-2       ljmp offset (and therefore length of header)
    3-4       ljmp segment (0x07c0)
    5+        Metadata fields
    \_ 5      CPU architecture (0x32=i386, 0x64=x86_64)
    \_ 6-7    Magic value (0x18ae)

This is backwards-compatible to existing binaries (which effectively
have zero bytes of metadata following the ljmp instruction), and
allows for future expansion by appending metadata fields (with the
ljmp offset used to determine the overall header length and therefore
the presence of further fields).

In this initial version of the header, define a magic value (used to
differentiate an iPXE NBP from other binaries that happen to start
with an ljmp instruction), and a single-byte value that encodes
whether this binary is built for 32-bit or 64-bit CPUs.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-22 23:23:37 +00:00
Michael Brown
47467538f0 [build] Use little-endian word values in genfsimg
The genfsimg script extracts 16-bit word values from binary files
using the POSIX-compatible subset of options to "od".  This subset
does not include the "--endian" option supported by GNU od.  The
16-bit values are therefore effectively extracted and compared as byte
sequences.  Since all quantities in PE files are little-endian, this
requires all literals to be written in a byte-reversed form.

Switch to implementing get_word() in a marginally less efficient way
(by issuing two separate calls to get_byte()), so that the value
returned is the real 16-bit word value.  This allows several of the
constants to be written in a more meaningful form (e.g. "8664" for
x86_64, "aa64" for AArch64, etc).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-22 21:32:14 +00:00
Michael Brown
0854850d02 [ci] Add a job to automatically create releases
Add a job that will automatically create a (draft) release for any
suitable tag, using the build artifacts and release notes already
constructed by earlier jobs.  Minimise the logic within the release
job itself, since by definition it cannot be tested on every commit.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-21 00:29:50 +00:00
Michael Brown
179366d729 [ci] Remove redundant duplicate creation of version.txt
The version.txt file is now created by the "version" job (which also
generates the release name, release title, and release notes).  Remove
the now-redundant generation of version.txt in the BIOS build job.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-20 17:37:00 +00:00
Michael Brown
9e0057a864 [build] Allow for generation of all release information
Allow for automatic generation of the release name, release title, and
release notes (derived from the relevant section of the changelog).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-20 15:23:05 +00:00
Michael Brown
a82e0b41af [doc] Fix header levels in Markdown files
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-20 00:24:24 +00:00
Michael Brown
df2ef86d16 [doc] Update README
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-19 15:33:55 +00:00
Michael Brown
53a3365beb [doc] Add an initial changelog
Attempt to document major changes that have been included since the
v1.20.1 release (back in 2020).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-19 15:33:55 +00:00
Michael Brown
8fb90cb403 [build] Allow for construction of a text file containing the version
Add a rule to construct bin/version.txt containing the version number,
to allow a GitHub Actions workflow to verify that a tagged release
embeds a version number that matches the tag.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-19 13:00:19 +00:00
Michael Brown
0cde7ce6df [build] Mark system logger as permitted for UEFI Secure Boot
Reported-by: Christian I. Nilsson <ChristianN@2PintSoftware.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-19 12:21:45 +00:00
Michael Brown
2184bfdb03 [ci] Create a network bootable files archive as a build artifact
Create an archive designed to be extracted to a web server (or TFTP
server) directory, containing the network bootable files such as
undionly.kpxe, ipxe.efi, etc.

Incorporate the iPXE shim binaries, complete with the required
symlinks such as snponly-shim.efi -> shimx64.efi.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-18 22:06:33 +00:00
Michael Brown
d98278a177 [ci] Include latest iPXE shim in build artifacts
Prepare for the possibility of creating ISO and USB disk images that
support UEFI Secure Boot by downloading the Microsoft-signed binaries
from the latest release of the iPXE shim.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-18 18:54:37 +00:00
Michael Brown
80639a6ca8 [ci] Use ipxe-builder-utils container for combined BIOS/UEFI images
We currently use the ipxe-signer container for the step that combines
the BIOS and UEFI build artifacts to produce the multi-architecture
ISO and USB images.

Switch to using the generic architecture-independent utility toolchain
container, thereby allowing the ipxe-signer container to minimise its
attack surface by removing tools that are not required for the signing
operation.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-18 00:27:59 +00:00