cbwww/site/news/canoeboot2506.md
Leah Rowe 8606571920 remove errant pic
Signed-off-by: Leah Rowe <leah@libreboot.org>
2025-07-03 09:50:58 +01:00

1421 lines
75 KiB
Markdown

% Canoeboot 25.06 "Onerous Olive" released!
% Leah Rowe
% 30 June 2025
A corresponding [Libreboot 25.06](https://libreboot.org/news/libreboot2506.html)
release is also available.
There *was* a Canoeboot 25.04 release in April 2025, but that is retroactively
regarded as an RC of 25.06. The original 25.06 release announcement showed
changes since 25.04, but the changelog is now relative to December 2024.
This reflects the [revised release schedule](revisions.md). It means that the
changelog is much bigger, and also includes the changes that went in
Canoeboot 25.04.
Today's Canoeboot 25.06 revision is a *stable release*, whereas the previous
stable release was Canoeboot 20241207. This revised release log lists all
changes as of today, 30 June 2025, since the Canoeboot 20241207 release of
December 2024.
<img tabindex=1 class="r" src="https://av.canoeboot.org/t60logo.jpg" /><span class="f"><img src="https://av.canoeboot.org/t60logo.jpg" /></span>
Open source BIOS/UEFI firmware
----------------------------
Canoeboot is a free/open source BIOS/UEFI replacement on x86 and ARM, providing
boot firmware that initialises the hardware in your computer, to then load an
operating system (e.g. Linux/BSD). It is specifically
a *[coreboot distribution](../docs/maintain/)*,
in the same way that Debian is a Linux distribution. It provides an automated
build system to produce coreboot ROM images with a variety of payloads such as
GRUB or SeaBIOS, with regular well-tested releases to make coreboot as easy
to use as possible for non-technical users. From a project management perspective,
this works in *exactly* the same way as a Linux distro, providing a source-based
package manager (called lbmk) which patches sources and compiles coreboot images.
It makes use of [coreboot](https://www.coreboot.org/) for hardware initialisation,
and then a payload such as [SeaBIOS](https://www.seabios.org/SeaBIOS)
or GRUB to boot your operating
system; on ARM(chromebooks) and certain x86 mainboards, we provide *U-Boot* (as
a coreboot payload), which provides a lightweight UEFI implementation..
Sumarised list of changes
-------------------------
This section provides a brief overview, summarising all of the changes. The
next sections (after this) show *all* changes in detail.
The most important changes are, thus:
New mainboards:
* Acer Q45T-AM support added (similar to G43T-AM3 mainboard)
* Dell Latitude E5420, E5520, E5530, E6220, E6230, E6320, E6330, E6420, E6430,
E6520, E6530
* Dell OptiPlex 7010 SFF, 9020 SFF, 9020 MT
* HP Elite 8200 SFF, 8300 CMT, 8300 USDT
* Dell Precision T1650
* ThinkPad T420, T420s, T430, T440p, T520, T530, W530, W541, X220, X230, X230T
Revision updates:
* GRUB, SeaBIOS, Untitled, flashprog, U-Boot, uefitool have all been updated
to newer revisions, from ~April 2025.
Security:
* GRUB has has *a lot* of security fixes applied to it from upstream, including
a very large series of *73* major security fixes, and a few minor tweaks
after the fact.
* Globbing issues fixed in the Canoeboot build system, cbmk. Better error
handling in general.
Feature changes:
* Better, more reliable caching of Git repositories and files during download.
Re-builds of sources make better use of local caching, instead of downloading
from scratch every time (e.g. coreboot and GRUB sources).
* Non-root USB hub support added to GRUB, for xHCI devices
* GRUB: better LVM scanning, for auto-boot especially with encrypted `/boot/`;
Linux distros are easier to handle, in general.
* Better MAC address handling, on IFD-based systems. Insertion of MAC addresses
is done by default, randomised by default, unless overridden by the user.
Config changes:
* Removed unnecessary sources by default, to make source archives smaller. Only
the sources needed to build the binaries are included, in many cases.
* Updated various dependencies configs, for installing build dependencies in
various Linux distros (for the `./build dependencies` command which installs
them in your distro).
Bug fixes:
* Better checksum verification for project files, when deciding whether to
re-build a given upstream source.
* General build system fixes, making the build process more reliable, with
much stricter error handling (and some false error conditions have also been
removed).
* GRUB payload: Mark E820 reserved for cbmem, which means that you no longer
need `iomem=relaxed` (kernel option) at boot time, to access the cbmem console.
* Use `x` instead of `?` in nvmutil, as a character for randomness in MAC
addresses, to work around a design quirk in ZSH.
* Where files are operated on post-build, e.g. coreboot images, more strictly
operate on them first, erroring out more reliably when a fault occurs; prevent
bad files from being copied to final build destinations. This reduces the
chance of bad/corrupt build artifacts being present in release builds.
This, and more, has all been done. There was also a general focus on heavily
auditing the build system, cbmk, so as to clean up the code. The amount of
overall code in lbmk was *reduced*, without removing functionality.
These next sections will repeat many of the above items, but in more detail.
Detailed list of changes
-------------------------
### Board support
This board, which was also added in Canoeboot 25.04, is available
in Canoeboot 25.06:
* Acer Q45T-AM support added (similar to G43T-AM3 mainboard)
The following boards have been added since the Canoeboot 25.04 release:
* Dell OptiPlex 7010 SFF desktop
* Dell OptiPlex 9020 SFF desktop
* Dell OptiPlex 9020 MT desktop
* Dell Latitude E5420 laptop
* Dell Latitude E5520 laptop
* Dell Latitude E5530 laptop
* Dell Latitude E6220 laptop
* Dell Latitude E6230 laptop
* Dell Latitude E6320 laptop
* Dell Latitude E6330 laptop
* Dell Latitude E6420 laptop
* Dell Latitude E6430 laptop
* Dell Latitude E6520 laptop
* Dell Latitude E6530 laptop
* HP Elite 8200 SFF desktop
* HP Elite 8300 CMT desktop
* HP Elite 8300 USDT desktop
* Dell Precision T1650 desktop
* Lenovo ThinkPad T420 laptop
* Lenovo ThinkPad T420s laptop
* Lenovo ThinkPad T430 laptop
* Lenovo ThinkPad T440p laptop
* Lenovo ThinkPad T520 laptop
* Lenovo ThinkPad T530 laptop
* Lenovo ThinkPad W530 laptop
* Lenovo ThinkPad W541 laptop
* Lenovo ThinkPad X220 laptop
* Lenovo ThinkPad X230 laptop
* Lenovo ThinkPad X230T laptop
These newer boards also happen to work just fine without microcode updates,
which is great since Canoeboot doesn't provide such updates at all.
The priority for the first half of 2025 has been on further auditing the
Canoeboot build system, so fewer board ports were added. More board ports
will be added instead in the December 2025 release (a lot more).
These boards use Intel ME, and they're inherited from Libreboot; in Canoeboot,
we tell the user to avoid re-flashing the original Intel ME, but still
disable the ME after early bringup, using a specially modified Intel
Flash Descriptor that sets the altMeDisable (HAP) bit - additionally, we
use Soft Temporary ME Disable in coreboot.
The flash is divided into regions:
* Intel Flash Descriptor (data configuring the hardware, including regions)
* Intel GbE region (gigabit ethernet config)
* Intel ME
* BIOS region
Canoeboot flashes all of these, *except* Intel ME. The ME region is skipped.
Canoeboot *itself* doesn't distribute Intel ME at all. You simply skip re-flashing
the one you already have, while disabling it during early boot time by setting
the HAP bit.
This is functionally equivalent to running `me_cleaner`, in that only the
ROMP and BUP modules are executed; the ME initialises itself but then shuts
down, during early boot. Using `me_cleaner` itself cannot be done in Canoeboot,
because that would mean either distributing (directly or indirectly) or
otherwise handling `me.bin`, which would go against Canoeboot policy.
Therefore, when installing Canoeboot on these newer machines, you can flash
just the BIOS region of the flash, and the IFD/GbE regions. In this way,
Canoeboot still provides a fully free coreboot distro on these machines.
This differs greatly from the Libreboot implementation, which downloads an
Intel ME at build time, shrinks it using mecleaner, and shrinks the ME region,
enlarging the BIOS region; as a result, Libreboot can build full images, where
all of the flash can be reprogrammed without issue.
This is because of differences in Libreboot and Canoeboot policies, which you
can learn by reading their policies:
* [Libreboot Binary Blob Reduction Policy](https://libreboot.org/news/policy.html)
* [Canoeboot Binary Blob Extermination Policy](policy.md)
Canoeboot provides more information about this in the [following
guide](../docs/install/ivy_has_common.md), which is also referenced in
the new Canoeboot installation instructions for these machines.
This change has been made, so as to expand the hardware support by Canoeboot,
while still complying with its zero-blob policy. Canoeboot *remains* a
fully *free software* coreboot distribution.
The HP EliteBook laptops (from Libreboot) were not added yet, because they
use EC firmware in-flash, and a reliable method to re-use what's there at
the factory has not yet been implemented, but I have successfully determined
that HP EliteBooks are also feasible, so these will be added in a future
Canoeboot release, most likely the Canoeboot 25.12 release planned for
December 2025.
### Revision updates
In descending order from latest changes to earliest changes:
* GRUB: Update to revision 73d1c959e (14 March 2025)
* Bump SeaBIOS to to rev 9029a010, 4 March 2025
* Updated Untitled to newer LBSSG repository.
* Bump flashprog to rev e060018 (1 March 2025)
* Bump U-Boot on ARM64 boards to U-Boot v2025.04. Patching courtesy of
Alper Nebi Yasak.
* Merged coreboot/next with coreboot/default
* Bump coreboot/next to rev c247f62749b as of 20 April 2025
* Bump coreboot/default to rev c247f62749b as of 20 April 2025
* Bump flashprog to revision eb2c041 (14 Nov 2024).
The GRUB revision includes a number of critical CVE fixes, and regression
fixes, that were also included in Libreboot 20241206 rev11. Some later fixes
are also present, such as wiping LUKS keys from memory after successfully
booting Linux (Linux handles LUKS itself, and starts the process again).
The NASM version was updated to version 2.16.03 on coreboot/fam15h, to prevent
build errors, instead of fixing the old NASM 2.14.02. Tested on Debian Sid
Experimental, with GCC15-based toolchain, and on Fedora 42.
PICO support: Reverted to the old pico serprog/sdk repositories used
in Libreboot 20240612. This is temporary, because pico2 support is currently
broken, so this release only has pico1 support, when dealing with Rpi Pico
devices. Upstream pico-serprog works fine on pico2, so this will be fixed
in and re-updated again in a future revision release. The pico2 update images
were retroactively removed from the 20241206 release on rsync.
A patch from upstream was backported to the old pico-sdk version, so that it
builds correctly on newer GCC15 (tested on Debian Sid with "Experimental"
packages enabled).
### Licensing
* Added SPDX license headers to almost every configuration file in cbmk.
### Security
These can be considered bug fixes, but these are special fixes that are of
massive concern to users.
* This GRUB change was merged, in the aforementioned revision
update: `dbc0eb5bd disk/cryptodisk: Wipe the passphrase from memory` - this
wipes the LUKS key from memory, after GRUB exits, where one was created
by GRUB while unlocking a given volume.
* Merged *73* critical CVE fixes into the GNU GRUB source code, from upstream.
* Stricter use of pledge and unveil in the nvmutil source code.
* *Much* safer `./mk inject`. It used to be that the tarballs were extracted
and files inserted into the extracted images, but the tarballs were left
unmodified; many users thought then that they should extract the tarball
and flash that, which lead to bricks. And it was easy to flash uninjected
images, where files (e.g. Intel ME) are needed, so now ROM images are padded
by one byte, to prevent flashing, and the user is strongly reminded to
inject files first; upon running the `./mk inject` commands, these images
are then safe to flash.
* Fix globbing issues in lbmk by double-quoting variables everywhere, and
generally making sure that certain characters are escaped properly when
necessary. To reduce the chance of bad commands being run by mistake or
intentionally.
* Removed auto-confirm on `./mk dependencies` commands, to mitigate the risk
of a buggy package manager on the user's distro possibly removing many
packages. Now the user must confirm their choice, e.g. when a conflict
occurs, instead of the package manager already deciding for the user.
### Feature changes
In descending order from latest changes to earliest changes:
* `init.sh`: looser `XBMK_THREADS` validation; correct it on child instances,
if it's not set, or set incorrectly.
* `get.sh`: use subshells on `try_` functions, wrapped in an error handler
so as to provide more verbose output under fault conditions. This makes it
easier to debug when a download fails.
* `git.sh`: Re-implement redundant git downloads, more reliably than before; all
repositories are now cached, reliably, including submodules, even when upstream
repo links differ wildly. This reduces the amount of internet bandwidth used,
when handling multiple builds.
* `release.sh`: build in tmp directory first, leaving old files behind under
fault conditions, for further analysis
* `inject.sh`: re-add mac address confirmation, for user-friendliness, when
running the inject commands.
* `init.sh`: Resolve `XBMK_CACHE` via readlink
* `init.sh`: Use `readlink` in `pybin()`, with realpath only as fallback. This
makes the function more redundant, working on more systems by default.
* `lib.sh`: support any command on `find_exec()` (later renamed); this is a
generic function, that implements a while loop for a given set of files,
based on the output a command that generates those paths. This is operated
on by a function, defined when calling find\_exec. This unifies all use of
while loops on lists of files and directories, throughout xbmk, rather
than re-implementing the for/while loops each time.
* `inject.sh`: simplify kconfig scanning by using the `fe_` with a new
function, `scankconfig()`. This new function checks *all* coreboot configs
for a given target, whereas the old behaviour only resulted in the *first*
config being checked. In practise, this causes no real behaviour changes.
* `rom.sh`: Print the rom image path being generated
* `lib.sh`: Add warning if x_ is called without args
* `init.sh`: More verbose error info, on non-zero exits.
* `util/nvmutil`: Within each 4KB part, only handle 4KB, even if the block
size is bigger. This means using less memory, and modification of anything
past 4KB is not required.
* `util/nvmutil`: Support 16KB and 128KB GbE files, in addition to the
usual 8KB files. The size is based on the block size of the flash you use.
* Added non-root USB3 hub support to GRUB on the xHCI implementation, courtesy
of a patch from Nitrokey.
* GRUB: Scan LUKS inside *every* LVM, to support the uncommon use case where
LUKS is inside LVM, instead of LVM inside LUKS. It is theoretically possible,
even if ill advised.
* GRUB: Scan *every* LVM device, where available, as a fallback at boot time
when all else fails.
* Release ROMs prefixed with a "DO NOT FLASH" warning and padded by one byte,
where vendor files are required. The `./mk inject` commands remove this
prefix/padding, after vendor files are inserted and checksums verified.
* Better detecting of whether vendor files are needed, and confirmation to
the user while running `./mk inject` commands.
* Allow restoring the default MAC address on `./mk inject` commands, by using
the `setmac restore` arguments.
* Randomise the MAC address by default, where applicable, when running
the `./mk inject` commands, because lots of users previously flashed without
changing it, so lots of users had generic MAC addresses.
The `setmac keep` argument prevents this from happening, where desired.
* `include/vendor.sh`: More user-friendly debug messages, for the user to
know what's going on.
* `util/nvmutil`: Add uninstall command to the Makefile
* `util/nvmutil`: Add distclean command to the Makefile
* `util/nvmutil`: Nicer hexdump display, similar to `hexdump -C`.
* Support a `re` argument in `./mk dependencies` Fedora commands, for
re-installation of packages as desired.
* Support `--reinstall` in the `./mk dependencies debian` command, when the
user wants to re-install dependencies.
* Put temporary `PATH` directory in the normal `XBMK_CACHE` directory, and
clear it whenever a new parent instance of the build system is executed.
This is used for the GCC/GNAT matched symlinks, for example, or the python
symlink created at startup.
* Pico 2 support briefly added, but was a bit buggy for now, so it's removed
in this release, and was retroactively removed in rsync for the
Libreboot 20241206 release; this will be re-added in a future release.
* Added GRUB-first payload setups as an option, but not enabled by default.
The user can add `payload_grubsea="y"` in the `target.cfg` file for a given
mainboard.
* Insert GRUB backgrounds in CBFS instead of GRUB memdisk, which makes
GRUB background images easier to replace.
### Configuration changes
<img tabindex=1 class="r" src="https://av.libreboot.org/rpi_pico/soic16_x200.webp" /><span class="f"><img src="https://av.libreboot.org/rpi_pico/soic16_x200.webp" /></span>
In descending order from the latest changes to the earliest changes:
* ifd/hp8300usdt: set the HAP bit by default; it was previously not set, but
the `me_cleaner` config was nonetheless used, and ME Soft Temporary Disable
was also used. As a result, this change is basically redundant, but otherwise
technically correct (more so than the previous behaviour).
* coreboot: Remove unused vboot tests (futility tests), to shrink the size of
release tarballs.
* `dependencies/debian`: add `libx86`
* A GRUB configuration change was made, fixing auto-scanning of LVMs when
doing cryptomount.
* Added `gnutls-devel` to Fedora 41 dependencies.
* Added `libx86` to Arch dependencies, needed for the `int` utility.
* Added `less` to Arch dependencies, because it's needed for certain commands
e.g. git commands.
* GRUB: Use the codeberg mirror first, to mitigate GNU mirrors often being
slow or rate limited, e.g. for gnulib downloads.
* fedora41/dependencies: add libuuid-devel
* Added `uuid-devel` to fedora41 dependencies
* flashprog: Disable `-Werror` to prevent minor warnings being treated as errors.
### Bug fixes
<img tabindex=1 class="r" src="https://av.libreboot.org/rpi/wson8/0003.jpg" /><span class="f"><img src="https://av.libreboot.org/rpi/wson8/0003.jpg" /></span>
This combines both build system fixes, and changes to upstream sources (e.g.
coreboot and various payloads like SeaBIOS/GRUB, utilities like flashprog, and
so on).
The following bug fixes have been merged (in descending order from the latest
changes to the earliest changes):
* `tree.sh`: add sha512 error for `check_project_hashes()`. Handle errors
in `sha512sum` and `awk`; also check that `project.hash` exists and error
out if it doesn't, when checking a given project hash. We know that the
project hash file should always exist, and always be read; technically,
find might not yield results, but then an empty file would be produced.
the empty file edge-case scenario would already have resulted in an error
exit inside `configure_project()`, so that's already covered.
* `tree.sh`: add error checking in `check_project_hashes()`, when reading
the `old_pjhash` variable; we need to error out where a read error occurs.
such an error is extremely unlikely, so this fix is largely theoretical and
preventative.
* `tree.sh`: more reliable clean in `run_make_command()`; don't do a no-op if
it fails, instead fall back to the `clean` method, and throw an error
if *that* fails. The no-op existed because not all projects have distclean,
but we always intend for them to be cleaned. This therefore prevents
further unhandled error conditions, in such edge cases.
* put coreboot utils in `elf/coreboot/TREE`, to prevent old binaries from
still being used when a code change is made.
* `release.sh`: use printf to create version files, instead of copying the
version files, because they don't exist in some cases, so this prevents
an error condition.
* `init.sh`: error out if .git/ is a symlink; this is a preventative bug fix,
to prevent future unknown bugs in such a scenario.
* `get.sh`: Properly error out if `tmpclone()` fails, where it previously
failed to throw an error under certain fault conditions.
* `tree.sh`: Don't auto-run make-oldconfig; it now must be applied permanently,
via e.g. `./mk -u` commands. Otherwise, undesirable changes can sometimes
be made during build time, especially on projects that don't use scons
quite as reliably, as in the U-Boot build system.
* `get.sh`: re-generate remotes every time, on cached Git repositories, so
that configuration changes in `config/git/` are automatically applied when
dealing with multiple versions of a given upstream project.
* `release.sh`: copy version files to `rsrc` (release source directory),
otherwise an `unknown` version number is erroneously created. This fixes
a regression caused by previous optimisation to `init.sh`
* xbmk: add fake config makefile args to `flashprog`, and `pcsx-redux`, to
prevent `./mk -u` (without additional arguments) from erroneously exiting
with error status. otherwise, an error can occur in such conditions if
a Makefile has not yet been created.
* `rom.sh`: skip running `copyps1bios()` on dry builds, otherwise
running `./mk -d` without argument will cause an error.
* `tree.sh`: Don't run make-clean on dry runs (`./mk -d`), to prevent error
conditions while building GRUB, if `./mk -d` is passed without additional
argument, since the latter requiires running autoconf to get a Makefile in
the GRUB build system.
* `get.sh`: add missing check in `fetch_project()`; we were checking the
main URL on a download, but not the backup URL.
* `get.sh`: stricter URL check in `xbmkget()`; throw an error if a URL is
empty, rather than skipping to the next. If a URL is set but fails, then
falling back to the next is OK (or throw an error if the backup is set,
and also failed).
* `get.sh`: Make `xbmkget` always throw an error upon exiting the loop check;
it was previously throwing an error if the for loop returned with zero status.
Depending on the sh implementation, or changes made in the future, this could
cause unpredictable buggy behaviour. Therefore, the error exit is much
stricter now, and less ambiguous, to prevent future bugs, because it is
imperative that execution must never continue under fault conditions. If a
file or repository is successfully handled, a return (zero) occurs, otherwise
the loop exits and a non-zero exit occurs.
* `tree.sh`: fix up `copy_elf()`, or specifically fix a bad `for` loop,
because shorthand conditionals are used and the way they were used can be
buggy on some sh implementations, so they are terminated more explicitly.
* xbmk: stricter handling of files on while loops, to prevent instances where
execution continues under fault conditions. This prevents other, less
predictable bugs in the future.
* `init.sh`: Hardcode `XBMK_CACHE` for integrity; this is a bug fix, because
there's too much that can be wrong with this being configurable, so now it
is hardcoded at runtime. It was never intended to be configurable anyway.
* `init.sh`: check/validate version/versiondate once read, in child instances
of xbmk, to further verify that they were previously set, and set correctly.
This is theoretically a preventative bug fix.
* `init.sh`: force an error condition if the xbmk version was not read. This
prevents further erroneous state within xbmk.
* `init.sh`: check the `lock` file BEFORE `git init`, to prevent erroneous
initialisation while another xbmk parent instance is running.
* `init.sh`: return from xbmk child instances in `set_env()` instead. This is
easier than the previous check, preventing the initialisation of a git repo
and/or recreation of xbmktmp and xbmklocal by erroneoues parent executions
of xbmk while another parent is running - the latter of which could have
caused a massively unpredictable build failure, so this is also a
preemptive bug fix, fixing and preventing all kinds of weird unknown bugs.
* `release.sh`: don't move `src/docs/` to `docs/` inside release archives,
because otherwise `./mk -b` will fail, inside release archives.
* `get.sh` submodules: Don't delete files recursively. Use `rm -R` instead
of `rm -Rf`, on files.
* `git.sh`: Only create destination repo on success; don't leave a broken cache
laying around, which would otherwise break the build system under certain
conditions.
* `release.sh`: removed an unnecessary `src_dirname` variable
* `release.sh`: delete tmp/cache from release tarballs
* `inject.sh`: Remove confusing path on tar creation; that is, don't print said
path, because temporary paths are printed during this, when creating tarballs.
In this file, the correct path is printed at the end of the process, when
handling an images tarball.
* `tree.sh`: only create elfdir in `copy_elf()`, to prevent empty directories
being created where a project provides `build.list`, but where no actual
configs are being built on a given target name.
* `mk`: add missing error handli for `mk -f` (when doing releases)
* `git.sh`: hard fail if git am fails (regression fix)
* `git.sh`: Hard fail if reset fails; allowing re-try when cloning fails, but
the reset-fail scenario didn't cause any exit at all. This is fixed now.
* `init.sh`: Only check `XBMK_CACHE` if it exists
* `grub.cfg`: fix trying to boot all logical volumes after unlocking an encrypted
volume; this makes booting LVMs more reliable, on encrypted boot setups.
* `init.sh`: also allow `XBMK_RELEASE=Y` or `=N`, not just `n` and `y`,
because some people use uppercase here. This is considered a bug fix, but
could just as easily have been in the features section.
* `init.sh`: check `XBMK_CACHE` is a directory instead of a file.
* `init.sh`: run `set_version` *before* `set_env`, to prevent a future situation
where the version is not set correctly. In general, the version should always
be set as early as poessible when running xbmk.
* `lib.sh`: re-add missing break in fe/fx\_, that caused improper exits (or non
exits) in some cases.
* `singletree/elfcheck`: use `fx_`, not `fe_`; this is a less strict test, to
prevent certain errors under specific edge-case conditions.
* `rom.sh`: Safer `cprom()`; don't insert special files like GRUB keymaps AFTER
copying the system ROM to the final destination; do it BEFORE, instead, to
ensure that bad images aren't left in place under fault conditions.
* `rom.sh`: specifically check keymaps in `cprom()`; it previously checked
whether a setup is *not* seauboot, which was valid, but future conditionals
would break this check. the code has been changed in advance, to prevent bugs
in a future revision of xbmk.
* `mk`: Fix bad error handling for `gnu_setver`; I accidentally mixed and/or in
a shorthand conditional statement, which leads to buggy behaviour in various
implementations of sh.
* GRUB: Mark E820 reserved on coreboot memory, to fix cbmem when running
with strict `/dev/mem` access; otherwise, restrictions on access to memory
below 1MB will cause an error when trying to access the cbmem console.
* `lib.sh`: set `-u -e` in `err()` in case they were set `+u +e` in other parts
of xbmk.
* `init.sh`: Silence the output of git config --global
* `init.sh`: Run git name/email check before init; otherwise, it returns if
init is already done, which could lead to an error later when building
coreboot.
* `lib.sh`: stricter `xbmk_err` check in `err()`
* `lib.sh`: simplify err-not-set handling
* `lib.sh` err: add missing redirect to stderr
* xbmk: MUCH safer `err` function; make it an actual function, instead of
a variable. Initially, this function was made to then check a variable,
that refers to a function, and a fallback was provided for non-zero exit
in case the pointed function didn't, but it was later made to be just a
simple function that exits with a message. Code equals bugs, so fewer lines
of code will yield fewer bugs.
* `lib.sh`: Make x_ err if first arg is empty; this is a preventative bug fix,
to make the build system still exit under such conditions, but it would
result in an empty error message.
* `lib.sh`: Make err_ always exit no matter what; this is a preventative bug
fix, just making the exit stricter in all cases.
* `mk`: re-make gnupath/ after handling crossgcc, rather than deleting files
within. This makes the creation of it more reliable.
* `mk`: re-make gnupath/ for each cross compiler, to ensure that no stagnant
build artifacts are re-used
* `inject.sh`: Stricter TBFW handling; don't copy it until it has been
properly padded to the correct size.
* `init.sh`: *Re-create* tmpdirs on parent instance, to ensure that they are
not cluttered with old files that might cause weird bugs in the future; this
is a preventative bug fix.
* `init.sh`: Always create xbmklocal, to prevent errors in the case when it
isn't created automatically in certain child instances, like when running
a *release* copy of the build system, during release builds.
* `lib.sh`: Fix bad touch command
* `inject.sh`: always re-build nvmutil, so that changes to it are automatically
re-applied when running the build system again. (and only build it once,
for a given instance of xbmk)
* `util/nvmutil`: use `x`, not `?`, for random characters, while still
supporting `?` for backwards compatibility. This is because ZSH errors out
when providing the old characters, in some setups. Use of `x` is more
reliable, across several implementations of sh, e.g. `xx:xx:xx:xx:xx:xx`
would be a full random MAC address.
* `lib.sh` find\_ex: explicitly create the tmp file, to prevent errors, which
were nonetheless unlikely to begin with.
* `init.sh`: Explicitly create the xbmktmp directory (make sure to do this
when creating this which is a temporary directory).
* `lib.sh`: add fe_ which is fx_ but err on find
* xbmk: unified execution on `find` commands. Handle it with a new special
function that is common across the build system.
* `mk`: Download vendorfiles before building release, to mitigate intermittent
internet connectivity during release builds, otherwise a release build could
fail. This way, all downloads are done simultaneously, since downloads are
the fastest part, even on a crap internet connection.
* Revert AHCI reset patch for SeaBIOS, which caused AHCI not to work in SeaBIOS
on the 25.04 release; the latter was also revised, to fix this. SeaBIOS has
since added a new release, which includes a fix that delays AHCI reset, to
mitigate in cases where the controller isn't ready sooner. However, this
release simply reverts the AHCI reset patch for now. The AHCI reset plus delay
will be present in Canoeboot's next release, after 25.06.
* lenovo/t420: Add missing text-mode configuration
* coreboot (all trees): Added patch fixing GMP build errors on modern
GCC15 hostcc.
* coreboot (all trees): Fixed building of crossgcc with newer GCC15. Patches
courtesy of Alper Nebi Yasak.
* coreboot (all trees): Added a patch to fix building coreboot utils with
newer GCC15.
* dependencies/debian: Fixed the libusb package name for newer Debian releases,
courtesy of Alper Nebi Yasak.
* SeaBIOS: Fixed `malloc_fn` function pointers in the `romfile` patch, courtesy
of Alper Nebi Yasak. Fix build errors on GCC 15.
* `include/lib.sh`: Force use of System Python e.g. `/usr/bin/python`, when
a python venv is detected. This prevents the build system from hanging.
* coreboot `g43t_am3`: Fixed the `data.vbt` path.
* Alper Nebi Yasak fixed the Python 2/3 detection in some edge cases when
the `python` command is python2.
* `include/lib.sh` (later `init.sh`): Do root check *first*, right after
the dependencies check, whereas it previously did the python check before
checking for root user.
* lbmk: Don't use TMPDIR directly, use another variable containing its value,
and make sure it doesn't get changed wrongly. This reduces the possibility
of accidentally leaving old tmp files laying around.
* `include/lib.sh`: `tar` commands now return an exit with error, if a fault
occurs, whereas it didn't before, due to piped output. This is done
using the `x_` wrapper on tar commands, to provide error exits.
* `mk`: function `check_project_hashes` now returns an error, if the sha512sum
command fails. It previously didn't, due to piped outputs. It's now mitigated
by using `x_` on piped commands, for error exits.
* Forking of lbmk parent instance to child instance isno longer handled by
variables. It's been simplified, to only be based on whether TMPDIR is set,
and it's generally more robust now in this release. The old code sometimes
broke under certain edge cases.
* `include/vendor.sh` (later renaming to `inject.sh`): General code cleanup,
about 100 sloc removed without reducing features.
* lbmk: Initialise `PATH` to a standard string if not set, on the parent
instance of lbmk.
* lbmk: Use `pwd` instead of the `PWD` variable, resetting the latter safely
as lbmk runs. This prevents lbmk from changing directory to an erroneous
system path, if `PWD` wasn't properly set for some reason. This is a
preventative bug fix, because no actual issue ever occured in practise.
* Much safer Python version check at lbmk startup, using data structures that
are provided universally by all Python implementations, instead of
relying on the output of `--version`.
* Fixed T480 backlight controls, courtesy of a patch from Mate Kukri.
* Set up Python in `PATH` when lbmk starts, to ensure that it is always
version 3. This is checked at startup.
* `include/vendor.sh`: Allow setting a MAC address even if vendor files aren't
needed.
* `util/nvmutil`: Honour the `INSTALL` variable, if set by the user, otherwise
it is set to `install` by default.
* `util/nvmutil`: Don't do `clean` when running `uninstall`.
* `util/nvmutil`: Proper DESTDIR/PREFIX handling, whereas it was not handled
properly at all before.
* `util/nvmutil`: Only set CC/CFLAGS if unset, and use sensible defaults.
* Fixed various shellcheck errors in lbmk.
* Debian dependencies: replace liblz4-tool with lz4 and liblz4-dev. The latter
is also available in Debian Trixie and Sid, at this time, in addition to
Debian Bookworm, so it works on all of them.
* U-Boot (x86): Fixed a bug since Swig 4.3.0 changed the syntax for its
language-specific AppendOut functions. A patch from upstream was backported,
and the patch is also compatible with older versions of Swig.
* In lbmk scripts, use `command -v` instead of `which`, to find the locations
of certain binaries. This is a bug fix, since `which` is non-standard and
so could break on some setups.
* Crossgcc: when building it for coreboot, fix mismatching GCC/GNAT versions
so that they match, if multiple versions are present. This was done because
Debain Trixie initially had GCC 14 and GNAT 13, whereas we need GNAT to build
the Intel video init code on many mainboards.
* `dependencies/debian`: Fix the `python3-distutils` package, renamed it
to `python3-distutils-extra`, which works on bookworm *and* newer, but the
former did not.
* `git.sh`: don't initialise the `livepull` variable globally, reset it per
target instead, to prevent some repositories from being wrongly re-cloned.
* Safer exit when running the `./mk dependencies` commands, so that lbmk is
more likely to exit, because it was theoretically possible that it might
not under certain edge cases.
* Add tarballs and gpg signatures to `.gitignore`
### General code cleanup
<img tabindex=1 class="r" src="https://av.libreboot.org/rpi/wson8/0007.jpg" /><span class="f"><img src="https://av.libreboot.org/rpi/wson8/0007.jpg" /></span>
Another bug focus in this release was to clean up the logic of Canoeboot's
build system, and fix several bugs, especially those relating to error handling.
A lot of cleanup was done on the init functions used by the build system, to
initialise common variables, such as environmental variables, and temporary
files and/or directories; such logic was moved to a new script called `init.sh`.
In descending order from the latest changes to the earliest changes:
* `lib.sh`: simplify `setvars()`
* `lib.sh`: simplify `chkvars()`
* `mk`: simplify `main()`
* `get.sh`: simplify `fetch_project()`
* `get.sh`: simplify `try_copy()`
* `get.sh`: tidy up `bad_checksum()`
* `get.sh`: simplify `fetch_targets()`
* general cleanup in `get.sh` and `vendor.sh`
* xbmk: rename `xbmklocal`/`xbmktmp` variables (shorten them)
* `get.sh`: consolidate printf statements
* `get.sh`: remove redundant printf in `fetch_project()`
* `get.sh`: remove superfluous command in `try_git()`
* `rom.sh`: simplify `mkcoreboottar()`
* `rom.sh`: rename `mkvendorfiles()`, which actually handles general init
tasks, including the processing of vendor files where appropriate.
* `rom.sh`: simplify ccache handling for coreboot; make-oldconfig wasn't
needed at all, when cooking configs to enable ccache, so the *cook* function
became much smaller and was then merged with `mkvendorfiles()`
* `rom.sh`: simplify u-boot payload handling, by using a single variable name
that defines the type of U-Boot tree. This allows several other U-Boot-related
checks to be greatly simplified, as they were.
* `vendor.sh`: add a colon at the end of a `for` loop
* `get.sh`: make `xbmkget()` easier to understand, by not using shorthand
conditional statements in the for loop handling a repository or file
download.
* `init.sh`: merge `xbmk_lock()` with `xbmk_set_env()`
* `init.sh`: set pyver from `set_env()` instead of the main function.
* `init.sh`: merge `xbmk_mkdirs()` with `set_env()`
* `init.sh`: only update version files on parent, to speed up xbmk
* `init.sh`: simplify unknown version creation, where none was created and
no Git metadata exists.
* `init.sh`: only set xbmk version on parent instance; we only need to read
what was set, on child instances. In other words, apply the principle of
least privelege.
* `init.sh`: initialise variables AFTER path, to avoid unnecessary work inside
child instances of xbmk.
* `init.sh`: merge `create_pathdirs()` with `set_pyver()`
* `init.sh`: Set python version only on parent instances of xbmk, to speed
up operation of the xbmk build system.
* `init.sh`: `xbmk_create_tmpdir()` to `xbmk_mkdirs()`
* `init.sh`: move `gnupath` creation to `create_tmpdir()`
* `init.sh`: move PATH init to `set_env()`
* `inject.sh`: shorten the `nukemode` variable name
* `get.sh`: simplify `bad_checksum()`
* `release.sh`: use `x_()` on find command for `nuke()`, so as to remove the
need for a more complicated while loop inside said function.
* `get.sh`: move `nuke()` to `release.sh` and only run it on releases; don't
do it on normal xbmk Git. It's only needed in the former context, because
that has to do with distribution by the project, and this makes
development easier. Therefore, files are only purged within the release
archives, but not during development.
* `release.sh`: simplify `prep_release_bin()`
* `get.sh`: simplify `tmpclone()`
* `get.sh`: simplify `nuke()` by using `fx_` for the file loop
* `get.sh`: simplify `try_copy()`
* `get.sh`: simplify `fetch_submodules()` config check
* `get.sh`: simplify `fetch_submodules()` by using `xbmkget()` for everything,
instead of implementing redundant logic in the build system.
* `git.sh`: rename to `get.sh`
* `rom.sh`: reduce indendation in `check_coreboot_utils`; simplify the for
loop by replacing it with a call to `fx_` instead.
* `release.sh`: simplify `release()`
* `release.sh`: clean up the `vdir` after release
* `release.sh`: removed an unnecessary `mkdir` command
* `release.sh`: split up `build_release()` into smaller functions
* `lib.sh`: remove `rmgit()`
* `lib.sh`: remove the unnecessary `mk()` function
* `lib.sh`: move `xbmkget()` to `git.sh`
* `lib.sh`: move `mksha512sum()` to `vendor.sh`
* `lib.sh`: split up `try_file()` into smaller functions
* `lib.sh`: move `_ua` to `try_file()`
* `inject.sh`: remove the `hashfiles` variable
* `inject.sh`: define `xchanged` here instead
* `lib.sh`: use `fx_` in `rmgit()`
* `lib.sh`: split up `xbmkget()` into smaller functions
* `inject.sh`: only compile nvmutil if needed
* `inject.sh`: simplified serprog check
* `inject.sh`: further cleanup for `vendor.sh`, such that all vendor-download
functions are only defined in `vendor.sh`; this means that the Canoeboot
version of the file can remain in much closer sync, with fewer differences.
* `tree.sh`: simplified srcdir check on make-clean
* `inject.sh`: split up the inject functions into smaller functions for
each specific task. (for inserting MAC addresses)
* xbmk: use `x_` instead of `err`, where appropriate, because it handles
globbing perfectly these days, and `x_` is cleaner in most cases.
* `mk`: remove unnecessary line break
* `mk`: re-split tree logic to new file, `include/tree.sh`
* `mk`: move release functions to `include/release.sh`
* `git.sh`: use `setvars()` for fail variables
* `init.sh`: remove useless export; variables that are y/n can just be reset
to `n` if not set to `y`, for simplicity.
* `init.sh`: export `LOCALVERSION` in `set_env` instead of `set_version`.
* `inject.sh`: simplified MAC address handling
* `inject.sh`: Simplify `patch_release_roms()`
* `lib.sh`: Remove useless command in `err()`
* `lib.sh`: Simplified `fx_()` and removed `fe_()`; fe didn't prefix `x_` to
a given command, but fx did. Now, it is prefix manually, for greater control,
on commands that need stricter error handling, while it can be avoided on
commands where strict error handling is unfeasible.
* `mk`: Create serprog tarballs here instead; `rom.sh` was simplified to use
mkhelp when building actual images.
* build serprog images using `fx_` *defined inside mkhelper*, to tidy up xbmk
* `rom.sh`: build serprog images with `fx_`, rather than implementing a
specific for loop.
* `git.sh`: Simplify git am handling by using the new `fe_` or `fx_` function,
instead of making a specific while loop.
* `inject.sh`: remove an unused function
* `init.sh`: New function `dx_` to execute path files; this is used instead
of for loops all around xbmk, to simplify operations where the output of
a file search is used as argument to a function.
* `lib.sh` `find_ex`: Write sort errors to `/dev/null`
* `lib.sh` `x_()`: Remove warning of empty args; it's really not required,
since it's obvious anyway in the resulting final error message.
* xbmk: Replace `err()` with much simpler implementation, for reliability
and bug prevention.
* `rom.sh`: simplify `mkseagrub()`
* `mk`: simplify `elfcheck()`
* `lib.sh`: simplify `singletree()`
* `git.sh`: move `singletree()` to `lib.sh`
* `lib.sh`: simplify `err()`
* `init.sh`: single-quote xbmklock in `xbmk_lock()`
* `init.sh`: define lock file in a variable instead; this makes it more
flexible, because the path can be checked and then re-used nicely.
* `init.sh`: tidy up `xbmk_child_exec()`; make the command style more consistent
* `lib.sh`: rename errx to xmsg
* `init.sh`: tidy up the python version check
* `init.sh`: move non-init functions to `lib.sh`
* `init.sh`: simplify dependencies handling
* `rom.sh`: tidy up `copyps1bios()`
* `mk`: tidy up xgccargs handling
* `mk`: generally removed dead code
* `init.sh`: tidy up pathdir creation
* `mk`: tidy up `check_cross_compiler()`
* `mk`: reduce indentation in `check_cross_compiler()`
* `mk`: Allow use of x_ on prefix functions
* `mk`: tidy up `check_project_hashes()` sha512sum check
* `mk`: simplify `check_gnu_path()`
* `inject.sh`: general code cleanup
* xbmk: Unified local ./tmp handling
* `lib.sh`: redirect find errors to `/dev/null` to prevent clutter on
the user's terminal
* `init.sh`: unified handling of ./tmp
* `mk`: include rom.sh directly
* `lib.sh`: Simplify rmgit()
* `lib.sh`: support multiple arguments in remkdir()
* `lib.sh`: simplify remkdir()
* xbmk: move x_() to `lib.sh`
* `init.sh`: move setvars/err_ to lib.sh
* `init.sh`: Generally modularised it, moving separate tasks into separate
functions, rathher than having it be one big monolith.
* `vendor.sh` was renamed to `inject.sh`, so that future changes can be
in better sync between lbmk and cbmk on this file, because the cbmk version
has the MAC address changer (but no vendorfile handling). In the future,
this will be split so that `vendor.sh` exists again, containing only the
vendorfile handling, and `inject.sh` will only handle MAC addresses.
* `init.sh`: Several variables were moved out of this file and elsewwhere in
lbmk.
* Moved the `singletree` function to `git.sh` instead of `lib.sh`
* Moved the `cbfs` function from `lib.sh` to `rom.sh`.
* `include/lib.sh`: Use a more top-down function order, more clear, and it was
split into an extra file `init.sh` that does the most basic lbmk initialisation
at startup, whereas what remains in `lib.sh` really are generic library
functions used throughout lbmk.
* `include/git.sh`: Removed unused crossgcc linking feature, because we don't
use it anymore (coreboot trees have their own crossgcc and never link to
another these days). Libreboot used to have many more coreboot trees, some
of which re-used crossgcc from another tree. Similarly, the accompanying
variable `tree_depend` is no longer handled. The `xtree` variable is still
handled, because projects like U-Boot use that to configure crossgcc.
* include/vendor.sh: Removed unnecessary check against the ROM image size.
Generally simplified the processing of release images.
* include/git.sh`: Removed many redundant functions, merging several of them.
* `include/mrc.sh`: Fixed a bad print, making proper use of a string inside
a printf statement.
* Simplified many file checks in lbmk, by using the `e` function.
* Removed a bunch of useless `eval` commands in general, throughout lbmk,
making the code much cleaner.
* lbmk: the `x_` function is now used much more aggressively, for error
handling, simplifying error handling in lbmk overall.
* `mk` main script: Merged the `trees` script with it, so now it's all one
script. The `mk` script is now the only executable script in lbmk.
* `mk` (main script): The `roms` command is removed (legacy / obsolete).
* The version/versiondate files are now dotfiles, to hide during operation.
* `include/lib.sh`: Hardcoded projectname/projectsite variables, instead
of storing them in a file.
* `trees` script: Unified handling of flags (same string used in error output),
to ensure that error(usage) messages always match.
* `trees` script (later merged into `mk`): Removed a lot of old bloat.
* `util/nvmutil`: Make the checksum word position a define. Generally cleaned
up a lot of code to make it clearer for the reader. Added more verbose
messages to the user, confirming things such as how much was read or written
on the user's file system. Various miscallaneous bug fixes (edge cases that
were unlikely to ever be triggered).
* `util/nvmutil`: More efficient use of memory when handling files.
* `util/nvmutil`: Much cleaner handling of user input.
* `util/nvmutil: More granular MAC address parsing errors, easy for debugging.
* `util/nvmutil`: Make the Gbe Checksum a define, for readibility.
* `util/nvmutil`: Obey the 79-character-per-line limit, as per lbmk coding
style.
* `util/nvmutil`: Tidied up several pledge calls
* Removed use of several unnecessary subshells and `eval` statements in lbmk.
* `trees`: Later, the GCC/GNAT matching feature was rewritten to work both ways,
where an older GCC was matched to GNAT and vice versa, whereas it previously
only went one way. `gcc` and `gnat` are manipulated in `PATH` to ensure that
the user has a consistent version of both.
* `path.sh` later merged into the `trees` script (which later merged
into the main `mk` script). This `path.sh` is what contained the first
implementation of the GNAT/GCC version matching feature.
* `path.sh`: Remove unnecessary shebang, and the same on other `include/`
scripts. NOTE: `path.sh` was later merged into `lib.sh`, which then became
split into `init.sh` in later changes (see above).
* Removed legacy build system commands e.g. `./build` and `./update`; now
only the newer `./mk` commands are supported. This and the change below was
briefly reverted, for the 20241206 revisions, but then re-introduced.
Git log
-------
This log shows all changes in today's release, from 30 June 2025, ever
since the Libreboot 20241206 release of 6 December 2025:
```
* 64b76b4e3a Canoeboot 25.06 release
* 126dff455b tree.sh: add sha512 error for check_project_hashes
* 08a9837216 tree.sh: add error check in check_project_hashes()
* e1664be01e tree.sh: more reliable clean in run_make_command
* 1843f71577 inject.sh: add missing semicolons
* 3567d95860 put coreboot utils in elf/coreboot/TREE
* 885016c0c2 release.sh: use printf to create version files
* eeb9954179 lib.sh: simplify setvars()
* bc0a2a9b75 lib.sh: simplify chkvars()
* 3657ed8677 mk: simplify main()
* ee92a228c3 get.sh: simplify fetch_project()
* bbc35fe6e6 get.sh: simplify try_copy()
* b9f78f2aff get.sh: tidy up bad_checksum()
* ff77de4a9d get.sh: simplify fetch_targets()
* 405215bc34 general cleanup in get.sh
* 21352b990e xbmk: rename xbmklocal/xbmktmp variables
* fcfc43aced get.sh: consolidate printf statements
* 46c0eb5ff4 get.sh: remove redundant printf in fetch_project
* 77b79d3581 get.sh: remove superfluous command in try_git()
* 7b8185f460 init.sh: error out if .git/ is a symlink
* 2b8ccfbe5b get.sh: Properly error out if tmpclone fails
* ff06b30ca5 tree.sh: Don't auto-run make-oldconfig
* 173f304fd7 rom.sh: simplify mkcoreboottar()
* 0854e99cfe rom.sh: rename mkvendorfiles
* 00ab60e762 rom.sh: simplify ccache handling for coreboot
* 82bb342a63 rom.sh: simplify u-boot payload handling
* 463cdd8128 coreboot: Remove unused vboot tests
* a70d8afc30 get.sh: Always update git remotes
* 77ad7a0ca3 get.sh: re-generate remotes every time
* e209646018 release.sh: copy version files to rsrc
* ada8a6dd7b xbmk: add fake config makefile args to flashprog
* 069aa21567 rom.sh: skip copyps1bios on dry builds
* bcdcfa045a tree.sh: Don't run make-clean on dry runs
* 4c0ecf17e6 GRUB: Update to revision 73d1c959e (14 March 2025)
* be598c497b get.sh: add missing check in fetch_project()
* 378a73ce42 get.sh: stricter URL check in xbmkget()
* b9886740ba get.sh: make xbmkget() easier to understand
* c130682fdf get.sh: Make xbmkget err on exiting the loop check
* 1342d74cc6 tree.sh: fix up copy_elf(), bad for loop
* b4a547caac lib.sh: Use while, not for, to process arguments
* 41ffbb640d xbmk: stricter handling of files on while loops
* b516a29482 init.sh: looser XBMK_THREADS validation
* fa59f9da76 init.sh: Hardcode XBMK_CACHE for integrity
* d92dee6781 dependencies/debian: add libx86
* 6577abc60a FSDG-compliant Sandy/Ivybridge/Haswell support
* addbd95a24 init.sh: merge xbmk_lock() with xbmk_set_env()
* 1c34d4567b init.sh: move xbmk_set_version
* a4103517ea init.sh: set pyver from set_env
* 6a3c771feb init.sh: merge xbmk_mkdirs with set_env
* de62243cd2 init.sh: check version/versiondate once read
* 6b8ee3d3b3 init.sh: error if version not read
* 08610f4145 init.sh: only update version files on parent
* 412b0a81d7 init.sh: simplify unknown version creation
* 2a6a4d765d init.sh: only set xbmk version on parent instance
* 416b1f66be init.sh: initialise variables AFTER path
* 46f09075c2 init.sh: merge create_pathdirs with set_pyver
* abf52b0394 init.sh: Set python version only on parent
* 1e4e3f36f4 init.sh: remove useless command
* ed83718cf2 init.sh: remove useless comment
* 8617375799 init.sh: xbmk_create_tmpdir to xbmk_mkdirs
* 83064459d9 init.sh: move gnupath creation to create_tmpdir
* 0389d1eadb init.sh: move PATH init to set_env
* 4aba9ef29e init.sh: check the lock file BEFORE git init
* fa2c288939 init.sh: return from child in set_env instead
* 9b1d4dfe82 inject.sh: shorten the nukemode variable name
* e34651a98a release.sh: rename relsrc to rsrc
* 1523a67729 release.sh: tidy up nuke()
* c068efec88 get.sh: remove useless message
* c660ecde62 get.sh: simplify bad_checksum()
* 2d13b4c2e2 release.sh: simplify nuke() EVEN MORE, yet again
* c20e29005f release.sh: use x_ on find command for nuke()
* 97603a43cf release.sh: simplify nuke() EVEN MORE
* 534a4d4870 get.sh: move nuke() to release.sh
* 8b646abe9a release.sh: simplify prep_release_bin()
* aeb1187a8a release.sh: don't move src/docs/
* 8cb0c224a5 get.sh: FURTHER simplify nuke()
* 8cb23315d9 get.sh: simplify tmpclone()
* 8d6244bb7f get.sh: fix bad mkdir command
* 4582a21abf inject.sh: Stronger hash verification
* fd98310f5b properly exit 1 when calling fx_
* e96dfae0b3 get.sh: simplify nuke()
* 3bfb82cb82 get.sh: fix broken printf statement
* 9c24b170c2 get.sh: use subshells on try_ functions
* 4f926ee708 get.sh: simplify try_copy()
* 36cf7892df get.sh submodules: Don't delete files recursively
* 398f265359 get.sh: simplify fetch_submodules() config check
* a3f48f3115 get.sh: simplify fetch_submodules()
* 142b79b206 get.sh: fix caching of crossgcc tarballs
* a658265a86 release.sh: Don't run prep_release with fx_
* aaa0a1ff93 git.sh: rename to get.sh
* 2d691c7377 git.sh: Only create destination repo on success
* 6199bc5b95 git.sh: cleanup
* 1dd18a9a55 git.sh: Re-implement redundant git downloads
* 176c0fa1c4 rom.sh: reduce indendation in check_coreboot_utils
* 584de778f8 release.sh: simplify release()
* ed8644177b release.sh: clean up the vdir after release
* 2ca6337b0a release.sh: remove src_dirname variable
* abfa2d1ec7 release.sh: build in tmp directory first
* d3ec7e8635 release.sh: remove unnecessary mkdir command
* b68447e75c release.sh: split up build_release()
* 4b36ba9765 release.sh: delete tmp/cache from the tarball
* 5861c25a7c lib.sh: remove rmgit()
* 1f2c8e47d4 lib.sh: remove mk()
* 19888e2cb8 lib.sh: move xbmkget() to git.sh
* 9c5f59cc42 lib.sh: remove mksha512sum()
* 279b7f20be lib.sh: split up try_file()
* 3347e3d314 lib.sh: move _ua to try_file()
* 57f68535a2 inject.sh: remove the hashfiles variable
* d07bd53b07 inject.sh: define xchanged here instead
* 47b9a261d7 lib.sh: use fx_ in rmgit()
* ed9f6338af lib.sh: split up xbmkget()
* 753af0a7a2 inject.sh: only compile nvmutil if needed
* 387f4b785b inject.sh: simplified serprog check
* 31bab5c10c remove another confusing message
* 6c3ea129a4 inject.sh: Remove confusing path on tar creation
* 3062f04c45 inject.sh: re-add mac address confirmation
* cf8ca4cdd6 inject.sh: further cleanup
* a82ca2da5f tree.sh: only create elfdir in copy_elf()
* 33debfcf1c tree.sh: simplified srcdir check on make-clean
* 2acdfefdf9 inject.sh: bring in sync with lbmk 0f931b508a8
* a170ab4118 cbmk: use x_ instead of err, where appropriate
* 5cdd377547 mk: use zero exit instead, to run trees
* c022a14c9e remove useless comment
* c9325f234e mk: remove unnecessary line break
* e22593f037 mk: re-split tree logic to include/tree.sh
* c463e8a52d mk: move release functions to idnclude/release.sh
* 966a6377a0 mk: add missing error handli for mk -f
* 718697c0e6 git.sh: re-write tmpclone without caching
* a5c5089eda git.sh: use setvars for fail variables
* 7b2671ea26 git.sh: hard fail if git am fails
* 45b6d3b3ba git.sh: Hard fail if reset fails
* e320ce60a7 init.sh: Only check XBMK_CACHE if it exists
* d99bc55f4a also fix the other grub trees
* c15ee8fc32 fix trying to boot all logical volumes after unlocking an encrypted volume
* 63cef86bdb init.sh: remove useless export
* 0a3793ad4e init.sh: also allow XBMK_RELEASE=Y or N
* 433b5de916 init.sh: Resolve XBMK_CACHE via readlink
* 5d2c94a8bd init.sh: check XBMK_CACHE is a directory instead
* f0a0f678bf init.sh: export LOCALVERSION in set_env
* 542d72192d init.sh: run set_version before set_env
* 9ccfee43e7 init.sh: Use readlink in pybin()
* 2f17c5be3b inject.sh: simplified MAC address handling
* 3900122957 lib.sh: Remove useless command in err()
* afcd0cfde6 lib.sh: Simplified fx_() and removed fe_()
* 386f3c3346 mk: Create serprog tarballs here instead
* 326f0459d9 build serprog using fe_ *defined inside mkhelper*
* 418fcce9ba rom.sh: build serprog images with fe_
* add92cd405 lib.sh: support any command on find_exec()
* bd5d85569f lib.sh: re-add missing break in fe/fx_
* eac3b96ddd git.sh: Simplify git am handling
* 6e4172b1ba inject: remove unused function
* 92374e6071 init.sh: New function dx_ to execute path files
* 1bc8055e28 inject.sh: simplify kconfig scanning
* ea8f9b59c6 lib.sh find_ex: Write sort errors to /dev/null
* 0ba013a61d lib.sh x_(): Remove warning of empty args
* e47324619d lbmk: Replace err with much simpler implementation
* 2279a1f6f6 singletree/elfcheck: use fx_, not fe_
* 1e1e65cb43 rom.sh: Print the rom image path being generated
* ffdf93bf90 rom.sh: Safer cprom()
* 1c0c88c7cb rom.sh: specifically check keymaps in cprom()
* 9342e5bb61 rom.sh: simplify mkseagrub()
* 4a9376adc4 mk: simplify elfcheck()
* e2f6e7a410 lib.sh: simplify singletree()
* 9d91c3da60 git.sh: move singletree() to lib.sh
* 877f00df1f mk: Fix bad error handling for gnu_setver
* 0156cd91c8 lib.sh: set -u -e in err()
* 7f150c3e4f GRUB: Mark E820 reserved on coreboot memory
* 22d3266a53 lib.sh: Provide error message where none is given
* 5b2d537123 init.sh: Silence the output of git config --global
* edfa4a0ddd init.sh: Run git name/email check before init
* 23755c1748 lib.sh: stricter xbmk_err check in err()
* 5150bf64a4 lib.sh: simplify err-not-set handling
* 90bd3e67c4 lib.sh: Add warning if x_ is called without args
* 78aa78c82e lib.sh: simplify err()
* 15afad4a2b init.sh: single-quote xbmklock in xbmk_lock()
* 41bc473276 init.sh: define lock file in a variable instead
* 4415865ccc init.sh: tidy up xbmk_child_exec()
* ee686cc86b lib.sh err: add missing redirect to stderr
* cd979e3b09 lbmk: MUCH safer err function
* fda09e8923 lib.sh: rename errx to xmsg
* 8eea01eceb lib.sh: Make x_ err if first arg is empty
* af309d888b lib.sh: Make err_ always exit no matter what
* 6e14ab7c09 init.sh: tidy up the python version check
* 7944fd6297 init.sh: move non-init functions to lib.sh
* 159ded1c4e init.sh: simplify dependencies handling
* 7ab7bf19f2 rom.sh: tidy up copyps1bios()
* a5519f13e1 mk: tidy up xgccargs handling
* ed441a4ba0 mk: remove useless code
* e05787d82f init.sh: tidy up pathdir creation
* 2c3f9e4e7e mk: re-make gnupath/ after handling crossgcc
* e6d3b5763d mk: tidy up check_cross_compiler
* 45513d56be mk: re-make gnupath/ for each cross compiler
* 7314903331 mk: reduce indentation in check_cross_compiler()
* f6005f17b6 mk: Allow use of x_ on prefix functions
* 4a32890198 mk: tidy up check_project_hashes() sha512sum check
* 1d988606ca mk: simplify check_gnu_path()
* f64b2affb1 inject.sh: minor code cleanup
* bb5228dc32 init.sh: *Re-create* tmpdirs on parent instance
* 0c05289152 init.sh: Always create xbmklocal
* b2c14b6759 lbmk: Unified local ./tmp handling
* 6a653729a3 lib.sh: redirect find errors to /dev/null
* 67e06ce368 lib.sh: Fix bad touch command
* 2c9f3065ee inject.sh: Only build nvmutil once
* 4ca73f9434 inject.sh: always re-build nvmutil
* e6c2fd9734 util/nvmutil: use x, not ?, for random characters
* 09f6a6b11d lib.sh find_ex: explicitly create the tmp file
* 2d05cd260d init.sh: Explicitly create the xbmktmp directory
* e32a6c96d5 init.sh: unified handling of ./tmp
* 6c7da73782 lib.sh: add fe_ which is fx_ but err on find
* afb5e7d3d5 lbmk: unified execution on find commands
* 0b9c797f32 mk: include rom.sh directly
* a13e53ba16 lib.sh: Simplify rmgit()
* 61407551ca lib.sh: support multiple arguments in remkdir()
* 4c2786daba lib.sh: simplify remkdir()
* 6348e8a93e move x_() to lib.sh
* a30fd38ae4 init.sh: move setvars/err_ to lib.sh
* d51b995528 Restore SeaBIOS 9029a010 update, but with AHCI fix
* 62f9c277f3 Revert "seabios: bump to rev 9029a010, 4 March 2025"
* 7333d71808 Canoeboot 25.04 Corny Calamity
* 2da5712128 bring coreboot revs in sync with libreboot 25.04
* 96c8dfa883 remove unused coreboot tree
* d66cfa5644 add pico-sdk backport patch fixing gcc 14.x
* b262db3b87 serprog: Remove pico2 support for the time being
* 15efc268a1 seabios: bump to rev 9029a010, 4 March 2025
* 973053479b update untitled
* 2c97b272b8 coreboot413: add alper's fix to cbfstool for gcc15
* bbe401f5f9 flashprog: bump to rev e060018 (1 March 2025)
* 64385b0dd1 lib.sh: Provide printf for mktarball
* 8a5603f98c seabios: Fix malloc_fn function pointer in romfile patch
* 892b02a215 dependencies/debian: Fix libusb package name
* db162c3662 init.sh: fix yet another double quote for dotfiles
* 41dad0d2c2 u-boot: gru: Disable INIT_SP_RELATIVE
* db79c0171e u-boot: arm64: Expand our modified defconfigs to full configs
* f34dd5cf38 u-boot: arm64: Merge our modifications into new defconfigs
* 99ade886e0 u-boot: arm64: Add new upstream defconfigs
* a710f63df3 u-boot: arm64: Rebase to v2025.04
* c3ae4a917d u-boot: arm64: Save our modifications to the upstream defconfigs
* a576fa4570 u-boot: arm64: Turn configs into defconfigs
* 34d134f2f2 init.sh: don't use eval to read version files
* b63612871d init.sh: use backslash for dotfiles in eval
* 7722e2f0d0 mk: Don't run mkhelpers if mode is set
* d85ec327c3 mk: condense main() again
* 4ff7cd3d77 init.sh: make git name/email error more useful
* ec287ca69e init.sh: move git name/mail check to xbmk_git_init
* f89e5ad87a init.sh: tidy up the git name/email check
* 76d99b8cae mk: make main() more readable
* f3caaf394e mk: move git check to init.sh xbmk_set_version
* f30892e92f init.sh: tidy up xbmk_init()
* cbf486789d mk: move git_init to init.sh
* 2c39a2bc7b init.sh: minor cleanup
* d6d8ee1d4b init.sh: clean up setvars
* ef78f88117 init.sh setvars: make err a printf for eval
* 3221ca7742 init.sh: merge xbmk_child_init with xbmk_init
* 723e979c8c init.sh: split xbmk_child_init into functions
* 0d86ef50ac init.sh: move parent fork to new function
* 68d5660cca init.sh: Provide more complete error info
* 6ebb11cf9c lib.sh: move _ua to the xbmkget function
* 2c8570c07a move variables out of init.sh to others
* 75f6b1cc1e lib.sh: rename vendor_checksum
* 5a294b183e lib.sh: move singletree() to git.sh
* 7943fab580 lib.sh: move cbfs() to rom.sh
* a16d9f35a2 re-split include/init.sh to lib.sh
* 6d54f46148 rename include/lib.sh to init.sh
* cf961e00b7 lib.sh: introduce more top-down function order
* 7dbd02fcd0 mk/git.sh: remove tree_depend variable
* 7c6039a086 git.sh: remove unused xgcc linking feature
* 2c419396d3 mk: remove unused variables (ser/xp)
* f6d81c4751 mk: simplify main()
* cc1b025df2 lib.sh: use realpath to get sys python on venv
* e281ad8659 lib.sh: Force use of System Python to prevent hang
* 88799b8db6 lib.sh: further condense the python check
* 03ff6f38b9 lib.sh: further simplify the python check
* 4d4ab8ce59 lib.sh: condense the python check
* 87edc96778 lib.sh: simplify mk()
* 63e07a44df lib.sh: simplify cbfs()
* e18af2022a lib.sh: simplify the python check
* f899a3225d mk: remove mkhelp() and use x_() instead
* 6bd6f14a19 mk: simplify handling of trees()
* 46e6169495 lib.sh: add missing copyright year
* 7786ea4250 mk: don't print confirmation of git pkg.cfg
* d9908ca648 lib.sh: Fix python3 detection when 'python' is python2
* 8affdc0bcb Update the GRUB revisions
* b665d09442 Revert "git.sh: minor cleanup"
* ec25425e55 lib.sh: perform root check even earlier
* dbf40653b2 lib.sh: tidy up opening logic (put it together)
* 46fb5786e0 lib.sh: do root check before python check
* 0fa1265106 git.sh: minor cleanup
* c8c5a0e017 lib.sh: simplify mktarball()
* 76e7c35ae2 mk: tidy up check_gnu_path()
* 2fccddb9d0 mk: simplify check_project_hashes()
* b399252309 lib.sh: fix missing s/TMPDIR/xbmktmp
* 72c83cdaeb cbmk: don't handle TMPDIR directly
* 86a96b22a5 rom.sh: minor cleanup
* 374baddbcb inject.sh: yet even more code cleanup
* e644717077 inject.sh: even more cleanup
* ec24bc4915 inject.sh: minor cleanup
* 5469f483fc git.sh: remove unnecessary comment
* 991a98caec git.sh: remove link_crossgcc()
* 1915c84376 git.sh: remove move_repo()
* 515c1782ad git.sh: remove prep_submodule()
* 519d93691f git.sh: make git_prep command clearer
* ca0aab3bfe simplify a few file checks
* 85b1996afa rom.sh: remove unnecessary check
* c3910fbc5f cbmk: minor cleanup
* 6fc23805cb lib.sh mktarball: stricter tar error handling
* 58a17c8d15 mk check_project_hashes: handle error on sha512sum
* d65d93b300 Revert "lib.sh: use eval for the command in x_"
* 0aace67a54 lib.sh: fix bad eval writing version/versiondate
* 7c98661271 lib.sh: use eval for the command in x_
* e63c14677f mk: use eval to run mkhelp commands
* f4e5879534 mk: tidy up the switch/case block in main()
* 85373b9b91 mk: tidier error handling
* d0b95ffe6e lib.sh: tidy up the error handling
* caaaf46540 rom.sh: tidy up error handling
* 7bd9fb9a7b git.sh: clean up fetch_project()
* 4d15c476b6 mk: Remove unnecessary argument checks on trees()
* 94a8fa816f inject.sh: properly call err_ in fail_inject
* ca6a3c8958 remove xbmk_parent, handle forking in lib.sh
* f3c757c2d2 lib.sh: define x_ right after err_
* 2b9881639f mk: minor cleanup
* 3b2718bd9d lib.sh: minor cleanup
* 8999d30b96 rom.sh: minor cleanup
* 32242cc03b inject.sh: tidy up check_release()
* f439230604 inject.sh: tidy up xbmk_inject()
* bbc28e73f8 inject.sh: tidy up readcfg()
* cdcdadf097 inject.sh: tidy up patch_release_roms()
* ff35a6a300 inject.sh: tidy up modify_mac_addresses()
* 67c8338acf script/trees: merge with mk and delete script/
* d4dba9140c mk: remove the legacy "roms" command
* 4cb9db2ba2 lib.sh: write version/versiondate to dotfiles
* f0dcaca4ee lib.sh: hardcode projectname/projectsite
* ba5487aa34 remove update symlink
* 062e057e87 move build to mk
* 02785da1af trees: unify the execution of mkhelper commands
* 6405f92bd4 trees: tidy up configure_project()
* 019b885cd8 build: make coreboot building an else in "roms"
* f2f4aaefb7 trees: don't build dependencies if dry=":"
* e5fefd8074 trees: unified handling of flags
* 6696e69f01 trees: simplified handling of badhash/do_make
* 28ef540e74 trees: don't set mode on ./mk -b
* dd60b2ee84 trees: don't set mod on ./mk -d
* c429fc8e3f trees: don't initialise mode to "all"
* c5dacebe44 trees: clean up some comments
* 8d27e6c786 inject.sh: simplified readkconfig()
* ca5618628b inject.sh: replace xbmkpath with xbmkpwd
* 9130750ebb lib.sh: double-quote pwd to prevent globbing
* 12e600bf5c cbmk: unified PWD handling (work directory)
* 891a7d8e63 lib.sh: initialise PATH if it's unset
* 18689092d3 move XBMKPATH to include/lib.sh
* dcc7f10ec7 cbmk: use pwd util, not PWD environmental variable
* 6e6b54cc24 clean up a few semicolons in the build system
* 7b7642dc90 trees: err if first argument is not a flag
* c2ddb7cc1f trees: err if no argument given
* aa306663c3 trees: set dry=":" on ./mk -f
* e246c22953 trees: clean up initialisation of the dry variable
* 0ee7f48c8c trees: initialise mode to "all", not ""
* 1211636df2 trees: don't abuse the mode variable on -f
* ec14ff58da trees: Add missing flag to error output
* d7063fc20d cbmk: minor code formatting cleanup
* 2c05e7e6ba grub/xhci: Remove unused patch
* 112c756a70 util/nvmutil: remove excessive comments
* b74a7f0cc6 Bump GRUB revision to add 73 security patches
* bce7fceb56 Update pico-serprog revision
* dca11e70ed util/nvmutil: Fix bad error messages on R/W
* 1b9073b39b util/nvmutil: hardened pledge on help output
* b52fc1fe66 deps/arch: genisoimage belongs to cdrtools
* 3a3b935b8b util/nvmutil: only set mac_updated at the end
* 438ebb1647 util/nvmutil: Fix bad comparison
* a70ab825b9 util/nvmutil: allow ./nvm gbe MAC
* 471ce4fbdc util/nvmutil: move "e" to swap()
* db9f7cf588 util/nvmutil: Only read up to 4KB on larger gbe
* 71f6b631e3 inject.sh: Don't show gbe filename on inject
* d96d370754 util/nvmutil: fix minor mistake (line break)
* 698b9ff63b util/nvmutil: do setmac if only filename given
* a0d7c564fb util/nvmutil: don't say write not needed if errno
* a5549b43f8 util/nvmutil: print dump *after* modification
* 5540713d16 util/nvmutil: verbosely print the written MAC
* bbdd985bea util/nvmutil: minor cleanup in cmd_dump
* 7849f23f81 util/nvmutil: show nvm words written on writeGbe
* 38bb650f12 util/nvmutil: clean up readonly check on writeGbe
* ae5772e8f7 util/nvmutil: Remove useless gbeFileChanged var
* 43e583d0b9 util/nvmutil: reset errno if any MAC updated
* 4ea5484e02 util/nvmutil: reset errno when writing a MAC
* 67ac52df84 util/nvmutil: show total number of bytes read
* 97beb4305b util/nvmutil: rename tbw/bw to tnw/nw
* 3c6198a780 util/nvmutil: err if bytes read lower than nf
* 508509e4e5 util/nvmutil: err if fewer bytes written
* 5c9edb8ffe util/nvmutil: Show bytes written in writeGbe
* b44c311db7 util/nvmutil swap(): ensure that no overflow occurs
* dcfde2e318 util/nvmutil: make swap() a bit clearer
* 06f30b9543 util/nvmutil: make 0x3f checksum position a define
* cac598f79e util/nvmutil: make 128 (nvm area) a define
* d176b56c58 util/nvmutil swap(): Only handle the nvm area
* 47d7283462 util/nvmutil: move write checks to writeGbe
* b01995d167 util/nvmutil: make cmd_swap its own function again
* 3dc1fedbe8 util/nvmutil: minor cleanup
* e2be86695a util/nvmutil: allocate less memory for setchecksum
* 741ef57efc util/nvmutil: Further reduce memory usage
* af6d6d6d59 util/nvmutil: Remove unnecessary buf16 variable
* 16d760d738 util/nvmutil: Only allocate needed memory for file
* 6c2a8010e2 util/nvmutil: Remove unnecessary buffer
* 252e2bdb71 util/nvmutil: Show specific error for bad cmd argc
* 59942196a5 util/nvmutil: cleaner argument handling
* 21400784de util/nvmutil: extreme pledge/unveil hardening
* 8f99e386a4 util/nvmutil: more minor cleanup
* 11eb4df755 util/nvmutil: more granular MAC parsing errors
* dc376cca14 util/nvmutil: more cleanup
* e6f4d11c5e remove errant comment in nvmutil
* 90f2c22826 util/nvmutil: support 16kb and 128kb gbe files
* fef744d68e util/nvmutil: Prevent unveil allowing dir access
* d68d0a8d75 typo: nvme should say nvm in nvmutil.c
* fe55e33254 util/nvmutil: General code cleanup
* 232f6b8610 grub/xhci: Add xHCI non-root-hub fixes from Nitrokey
* a6c9ebd11f add gnults-devel to fedora 41 dependencies
* 1a3c74a974 grub.cfg: scan luks *inside lvm*
* d74e906652 grub.cfg: Scan *every* LVM device
* 302d116c28 snip
* 3730a63edd Canoeboot 20250107 release
* a223a0db89 update u-boot/grub/seabios version displays
* 23db77a030 inject.sh: MAC address changer (not vendorfiles)
* 514f61d6ba pico-sdk: Remove old, unnecessary patch
* 465b18eff3 remove errant symlink
* ec7e8d3a8f Bump coreboot/next to 2f1e4e5e85, 31 December 2024
* 8829539531 rom.sh: don't run mkpicotool on dry builds
* 62d655b8dd pico-sdk: Import picotool as a dependency
* adf1a2e1a4 lib.sh: Much safer python version check
* 1b1dae36d2 set up python in PATH, ensuring that it is python3
* ac6b7c9e3a add libx86 to arch dependencies
* 24aa70869e add less to arch dependencies
* d731b07aa7 lib.sh: Set python after dependencies
* d57303e080 update my copyright years on modified scripts
* bf5979f0b2 lib.sh: Fix unescaped quotes in chkvars()
* 9baf6a72a7 Revert "fix more unescaped quotes in eval"
* c1dd3da298 fix more unescaped quotes in eval
* caa18bdcb3 fix ./mk dependencies build issue
* 43ab374ec7 rom.sh: Remove errant GRUB modules check
* 2916aee7ab submodule/grub: use codeberg for 1st gnulib mirror
* 8e30ea27ef util/nvmutil: Update AUTHORS and COPYING files
* 376b1301f5 util/nvmutil: Describe nvmutil in help output
* da32fe1928 util/nvmutil: Remove the correct binary on uninstall
* 54809f06bf util/spkmodem-recv: More correct Makefile
* ac6f3884ad util/nvmutil: Honour the INSTALL variable
* e993212146 util/nvmutil: Don't clean when doing uninstall
* 21c87a6fbf util/nvmutil: Proper DESTDIR/PREFIX handling
* 5ed1114443 util/nvmutil: Set CC and CFLAGS only if unset
* 1e494f4530 util/nvmutil: Capitalise BABA
* ba71891687 util/nvmutil: Add uninstall to Makefile
* 1310c9a58c util/nvmutil: Add distclean to Makefile
* faa78f53c2 util/nvmutil: Make the GbE checksum a define
* 227c396ca2 util/nvmutil: nicer hexdump display
* 07e8b9f35e util/nvmutil: show the correct hexdump order
* 76d87782a8 lib.sh mktarball: cleaner if statement
* 3d1fea0977 fix lbmk shellcheck errors
* 4862f6a348 lib.sh and rom.sh: update my header
* 8bdfd31498 rom.sh: handle tarballs in mkcoreboottar
* 13194ec94a util/nvmutil: Obey the 79-character per line limit
* ce0fdf183d util/nvmutil: Tidy up copyright header
* f3feac0728 util/nvmutil: Fix another straggler
* 145ff612c1 util/nvmutil: Tidy up pledge calls
* 4a83659885 compile rmodtool alongside cbfstool
* a22f272dfe fedora41/dependencies: add libuuid-devel
* de26e984df add uuid-devel to fedora41 dependencies
* 4ce13dab7a support ./mk dependencies fedora reinstall
* 9d60470a97 fix missing semicolon in grub nvme patch
* 2d860d6f66 bump seabios to rev 1602647f1 (7 November 2024)
* 5d82a911b9 Bump GRUB revision to 6811f6f09 (26 November 2024)
* b75d32be72 flashprog: Disable -Werror
* 22206cadeb bump flashprog to revision eb2c041 (14 Nov 2024)
* 1ebdb20d97 replace liblz4-tool with lz4 and liblz4-dev
* 012f530656 lib.sh dependencies: support --reinstall argument
* 33206cae60 move xbmkpath to XBMK_CACHE/
* 4a4f7abf0e Revert "Remove legacy update/vendor commands"
* 71bccad345 Fix U-Boot build issue with Swig 4.3.0
* 2608bea771 use command -v instead of which
* 3dc3a557db trees: remove unnecessary subshell
* dbf8bef5ff trees: only symlink host gcc/gnat to build xgcc
* cd93e1b615 trees: correction on check_gnu_path
* 57fafb0b73 trees: match gcc/gnat versions both ways
* f167d4aeb9 Merge path.sh into script/trees
* 444154c002 path.sh: Further cleanup
* c25ea91783 path.sh: More thorough gcc/gnat version check
* 12221b2828 path.sh: minor cleanup
* 02b1a45c6b path.sh: remove unnecessary shebang
* 5a5a7c37f5 Fix globbing issue in cbmk
* 69c5f8911d remove auto-confirm on distro dependencies
* 7ee6ec0ce9 Mitigate Debian Trixie/Sid GCC/GNAT version mismatch
* f1d9ecc468 rom.sh: Name pico directory serprog_pico
* bb6c31aa16 add 2024 to Riku's copyright header on rom.sh
* 3d738af507 pico-sdk: update to 2.1.0
* fa6ed8816e pico-serprog: enable building for multiple pico chips
* 31a0ea3537 add spdx headers to various config files
* dd6f914186 git.sh: don't initialise livepull globally
* 417accd9e0 lib.sh: Support copying files locally
* 7b8bda9977 lib.sh: Safer exit from ./mk dependencies
* 63eb43ec39 dependencies/void: add missing escape character
* daefe4f895 rom.sh: support grub-first setups
* 73920cb0a1 rom.sh: insert grub background in cbfs not memdisk
* 5ebeb65cbf add tarballs and signatures to gitignore
* 5053354644 fix another very stupid mistake
* df509aac63 fix the stupidest bug ever
```
This is about 500 changes.
Revision releases
-----------------
When certain bugs are found, releases may be re-built and re-uploaded. When
this happens, the original release is replaced with a *revision release*.
Revisions are numbered; for example, the first post-release revision
is *rev1*.
### 25.06 (30 June 2025)
No revisions, thus far. The original 25.06 release is the current revision, so
it could be considered *rev0* (revision zero).
Build testing
-------------
This release was built on the latest Debian 12.10 Bookworm release, as of
this day. It was also build-tested successfully on the latest Arch Linux updates
as of 26 June 2025.