Libreboot 25.06 “Luminous Lemon” released!

Leah Rowe

30 June 2025


Return to index

Article published by: Leah Rowe

Date of publication: 30 June 2025

A corresponding Canoeboot 25.06 release is also available.

There was a Libreboot 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. It means that the changelog is much bigger, and also includes the changes that went in Libreboot 25.04.

Today’s Libreboot 25.06 revision is a stable release, whereas the previous stable release was Libreboot 20241206. This revised release log lists all changes as of today, 30 June 2025, since the Libreboot 20241206 release of December 2024.

PLEASE READ THESE INSTRUCTIONS BEFORE INSTALLING, OR YOU MAY BRICK YOUR MACHINE!! - Please click the link and follow the instructions there, before flashing. For posterity, here is the link again.

Open source BIOS/UEFI firmware

Libreboot 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, 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 for hardware initialisation, and then a payload such as 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..

Summarised list of changes

Board support

The priority for the first half of 2025 has been on further auditing the Libreboot build system, so fewer board ports were added. More board ports will be added instead in the December 2025 release (a lot more).

The following boards have been added since the Libreboot 20241206 release:

Board ports were low priority for this release; now it shall be the focus, between June 2025 and October 2025, ready for the 25.12 release cycle leading into December 2025.

Dell Precision T1700 is essentially the OptiPlex 9020 but with a slightly different, code-compatible PCH that also supports ECC memory features when an Intel Xeon processor is installed.

Revision updates

In descending order from latest changes to earliest changes:

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

Security

These can be considered bug fixes, but these are special fixes that are of massive concern to users.

Feature changes

In descending order from latest changes to earliest changes:

Configuration changes

In descending order from the latest changes to the earliest changes:

Bug fixes

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):

General code cleanup

Another bug focus in this release was to clean up the logic of Libreboot’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:

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:

* c46a71138c7 Libreboot 25.06 release 
* b1ef562b767 tree.sh: add sha512 error for check_project_hashes 
* 04bee3834d0 tree.sh: add error check in check_project_hashes() 
* 677dfc4d103 tree.sh: more reliable clean in run_make_command 
* 267d4c90341 inject.sh: add missing semicolons 
* 974bdbb3815 vendor.sh: fix bad cbfstool path 
* dc6996252a0 put coreboot utils in elf/coreboot/TREE 
* b77154640de release.sh: use printf to create version files 
* dee6997d0cc lib.sh: simplify setvars() 
* 79ded40f3d0 lib.sh: simplify chkvars() 
* 5036a0bc501 mk: simplify main() 
* 41308ee9244 get.sh: simplify fetch_project() 
* b5867be214d get.sh: simplify try_copy() 
* 495098d6a71 get.sh: tidy up bad_checksum() 
* 671e3aa27b4 get.sh: simplify fetch_targets() 
* 09b6e91803d general cleanup in get.sh and vendor.sh 
* 18dacd4c22b xbmk: rename xbmklocal/xbmktmp variables 
* e981132c829 get.sh: consolidate printf statements 
* afc36754b13 get.sh: remove redundant printf in fetch_project 
* ffe387ac6b9 get.sh: remove superfluous command in try_git() 
* ba7c49c090b vendor.sh: simplify fetch() 
* 30bc3732c39 init.sh: error out if .git/ is a symlink 
* 2493203ee53 get.sh: Properly error out if tmpclone fails 
* ad333ae2481 tree.sh: Don't auto-run make-oldconfig 
* 97ce531c341 rom.sh: simplify mkcoreboottar() 
* a47e9811723 rom.sh: rename mkvendorfiles 
* d2e148fdd9d rom.sh: simplify ccache handling for coreboot 
* 8c3f10ba402 rom.sh: simplify u-boot payload handling 
* 3e28873532b ifd/hp8300usdt: set the HAP bit by default 
* 452aeb6001a coreboot: Remove unused vboot tests 
* 64cc91bca33 coreboot/default: Remove unneeded FSP modules 
* 0216a3104a5 get.sh: Always update git remotes 
* 419733d3073 get.sh: re-generate remotes every time 
* 231b320e63b release.sh: copy version files to rsrc 
* fc0720184d9 xbmk: add fake config makefile args to flashprog 
* f9266601b8c vendor.sh: add colon at the end of a for loop 
* 8e0c6059d15 rom.sh: skip copyps1bios on dry builds 
* a3250d14474 tree.sh: Don't run make-clean on dry runs 
* 24b8e633e03 GRUB: Update to revision 73d1c959e (14 March 2025) 
* f6b77822835 Revert "vendor.sh: optimise find_me()" 
* fb7aaa78bb0 vendor.sh: optimise find_me() 
* 903f78bf080 get.sh: add missing check in fetch_project() 
* f15bb8153a3 get.sh: stricter URL check in xbmkget() 
* cdc0fb49e1c get.sh: make xbmkget() easier to understand 
* 620c1dd6fae get.sh: Make xbmkget err on exiting the loop check 
* 900da04efa9 tree.sh: fix up copy_elf(), bad for loop 
* 8aaf404ddea lib.sh: Use while, not for, to process arguments 
* d9c64b26754 xbmk: stricter handling of files on while loops 
* b25a4876434 init.sh: looser XBMK_THREADS validation 
* 769a97aed5a init.sh: Hardcode XBMK_CACHE for integrity 
* 265ec0b7673 dependencies/debian: add libx86 
* 2702a43a86d init.sh: merge xbmk_lock() with xbmk_set_env() 
* fc4006ce877 init.sh: move xbmk_set_version 
* 962902a1c4a init.sh: set pyver from set_env 
* 158c56072c0 init.sh: merge xbmk_mkdirs with set_env 
* 5f022acbf47 init.sh: check version/versiondate once read 
* 485a60e2f6a init.sh: error if version not read 
* 99f09f25ef3 init.sh: only update version files on parent 
* 94437278dc7 init.sh: simplify unknown version creation 
* 6b603b9fbf4 init.sh: only set xbmk version on parent instance 
* ac36ea7f950 init.sh: initialise variables AFTER path 
* 484afcb9196 init.sh: merge create_pathdirs with set_pyver 
* d0bee6b4ebb init.sh: Set python version only on parent 
* 4aa69a7d1f0 init.sh: remove useless command 
* 36ffe6ef501 init.sh: remove useless comment 
* 0343081d905 init.sh: xbmk_create_tmpdir to xbmk_mkdirs 
* c75bc0449d0 init.sh: move gnupath creation to create_tmpdir 
* 253aa81a3f9 init.sh: move PATH init to set_env 
* e05a18d3513 init.sh: check the lock file BEFORE git init 
* cde3b7051e4 init.sh: return from child in set_env instead 
* 7ec9ee42283 inject.sh: shorten the nukemode variable name 
* b48eb161e49 vendor.sh: simplify mksha512sum() 
* ac609d5aae4 vendor.sh: Remove _dest if it's bad 
* a3e1ed9823d release.sh: rename relsrc to rsrc 
* 44df3b2bff8 release.sh: tidy up nuke() 
* 3c58181f69e get.sh: remove useless message 
* 01a0217c1e3 get.sh: simplify bad_checksum() 
* 4ca57943d70 release.sh: simplify nuke() EVEN MORE, yet again 
* 47a3982bbea release.sh: use x_ on find command for nuke() 
* 6dc71cc0246 release.sh: simplify nuke() EVEN MORE 
* 05c07f7401b get.sh: move nuke() to release.sh 
* 587d245cafa release.sh: simplify prep_release_bin() 
* 136bd66c280 mrc.sh: merge extract_mrc with extract_shellball 
* dbe109d7b54 release.sh: don't move src/docs/ 
* 840d6a1d277 get.sh: FURTHER simplify nuke() 
* d2564fd9457 get.sh: simplify tmpclone() 
* 6dea381614d get.sh: fix bad mkdir command 
* 6a2ed9428b7 vendor.sh: Fix broken KBC1126 insertion 
* 4313b474a59 vendor.sh: additional safety check 
* d668f3a3529 vendor.sh: Properly verify SHA512SUM on extraction 
* a191d22bd6d get.sh: add missing eval to dx_ in nuke() 
* c8813c9a144 properly exit 1 when calling fx_ 
* 208dfc89bd5 get.sh: simplify nuke() 
* 46f42291d3c get.sh: fix broken printf statement 
* f29aa9c8d59 get.sh: use subshells on try_ functions 
* e62886dedae get.sh: simplify try_copy() 
* d9ed03f9ea5 get.sh submodules: Don't delete files recursively 
* 8d5475ed5b5 get.sh: simplify fetch_submodules() config check 
* 21867b7d805 get.sh: simplify fetch_submodules() 
* e9fe5a74a2e get.sh: fix caching of crossgcc tarballs 
* 6089716f07c release.sh: Don't run prep_release with fx_ 
* b04c86e5740 git.sh: rename to get.sh 
* 3c23ff4fa18 git.sh: Only create destination repo on success 
* ed8a33d6fb1 git.sh: cleanup 
* 1ca26c5d238 git.sh: Re-implement redundant git downloads 
* e38805a9448 rom.sh: reduce indendation in check_coreboot_utils 
* 6bf24221e60 release.sh: simplify release() 
* 66f7ecdb2d7 release.sh: clean up the vdir after release 
* d4c0479093a release.sh: remove src_dirname variable 
* 6d3a6347c3e release.sh: build in tmp directory first 
* a0105e1ab44 release.sh: remove unnecessary mkdir command 
* f4871da9bca release.sh: split up build_release() 
* c85aff5c54e release.sh: delete tmp/cache from the tarball 
* 92954eeb38f lib.sh: remove rmgit() 
* 05b5914b354 lib.sh: remove mk() 
* c9696e23338 lib.sh: move xbmkget() to git.sh 
* 23913bb8d2a lib.sh: move mksha512sum() to vendor.sh 
* 80f0562e8d1 lib.sh: split up try_file() 
* 89cd828e87c lib.sh: move _ua to try_file() 
* 308a9ab1e17 mrc.sh: minor cleanup 
* 40163dcfa4e mrc.sh: update copyright year to include 2025 
* ef800b652c8 inject.sh: remove the hashfiles variable 
* 311ae2f8df2 inject.sh: define xchanged here instead 
* 76f81697e6e vendor.sh: remove check_vcfg() 
* 97d4d020d97 vendor.sh: simplify getvfile() 
* 57f896ac016 vendor.sh: simplify setvfile() 
* 3879f6c4d8f lib.sh: use fx_ in rmgit() 
* 0911a5a5aed lib.sh: split up xbmkget() 
* a449afb287f inject.sh: only compile nvmutil if needed 
* 2bbf2ae80b7 inject.sh: simplified serprog check 
* 9c27b7437cf vendor.sh: tidy up variables 
* 0cc816167bb vendor.sh: split up setvfile() 
* 7d90d434252 remove another confusing message 
* a0c436ad4ba inject.sh: Remove confusing path on tar creation 
* dcfd3e632e2 inject.sh: re-add mac address confirmation 
* e5af201060e inject.sh: further cleanup for vendor.sh 
* 0aa99f4bf8b tree.sh: only create elfdir in copy_elf() 
* a8e374020c0 tree.sh: simplified srcdir check on make-clean 
* 0f931b508a8 inject.sh: split to vendor.sh the download parts 
* 3554b5aad9c inject.sh: split up the inject functions 
* 81dbde7e09f lbmk: use x_ instead of err, where appropriate 
* 14d46abceda mrc.sh: operate on refcode in tmp area first 
* 6e521c2e1ea mrc.sh: fix outdated info in the comment 
* 23486abef3a inject.sh: use direct comparison for metmp 
* 91220ce1833 inject.sh: use subshell to speed up find_me() 
* ff33ec3352b mk: use zero exit instead, to run trees 
* c2b627dc6d0 remove useless comment 
* 066402b7e7a mk: remove unnecessary line break 
* 7012c00ed11 mk: re-split tree logic to include/tree.sh 
* 50ce1ac9b22 mk: move release functions to idnclude/release.sh 
* 1ce3e7a3d39 mk: add missing error handli for mk -f 
* 0d876622fcb git.sh: re-write tmpclone without caching 
* 454f11bdd7b git.sh: use setvars for fail variables 
* 6bdb15fd329 git.sh: hard fail if git am fails 
* 93d4eca04ae git.sh: Hard fail if reset fails 
* a3ba8acface init.sh: Only check XBMK_CACHE if it exists 
* 021e7615c84 HP 820 G2: Use fam15h cbfstool tree for refcode 
* fe926052441 also fix the other grub trees 
*   a8594762d27 Merge pull request 'fix trying to boot all logical volumes after unlocking an encrypted volume' (#330) from cqst/lbmk:master into master 
|\  
| * e084b06dc76 fix trying to boot all logical volumes after unlocking an encrypted volume 
|/  
* 2cea8517f3b init.sh: remove useless export 
* 1b0afdcea22 init.sh: also allow XBMK_RELEASE=Y or N 
* 570f1417a80 init.sh: Resolve XBMK_CACHE via readlink 
* e1af1055ed1 init.sh: check XBMK_CACHE is a directory instead 
* e1628ad8f3e init.sh: export LOCALVERSION in set_env 
* 40a944118f2 init.sh: run set_version before set_env 
* cba04aa74b8 init.sh: Use readlink in pybin() 
* a94bd3c0939 inject.sh: simplify extract_kbc1126ec() 
* e3098c61f43 inject.sh: simplified MAC address handling 
* d530e68594d inject.sh: Simplify patch_release_roms() 
* 7f71328f0e2 lib.sh: Remove useless command in err() 
* 394b4ea7a59 inject.sh: rename copytb and preprom functions 
* ec5c954337b lib.sh: Simplified fx_() and removed fe_() 
* 1390f7f8007 mk: Create serprog tarballs here instead 
* 0ef77e65832 build serprog using fe_ *defined inside mkhelper* 
* d2e6f989d7e rom.sh: build serprog images with fe_ 
* 0faef899469 lib.sh: support any command on find_exec() 
* 2b7f6b7d7ce inject.sh: Simplify extract_intel_me_bruteforce() 
* 485d785d331 inject.sh: clean up tmp me file before extract 
* fac99aa2d44 lib.sh: re-add missing break in fe/fx_ 
* 03300766d14 inject.sh: tidy up extract_intel_me_bruteforce 
* 4781dbd2a05 inject.sh: fix oversight in me bruteforce 
* cf78583a6d8 inject.sh: remove unnecessary check 
* 5657cc1afb3 inject.sh: don't use subshell for me bruteforce 
* 5686f35e0f1 inject.sh: insanely optimise the me bruteforce 
* e8be3fd1d41 git.sh: Simplify git am handling 
* 4c1de1ad126 inject.sh: remove unused function 
* 282b939d9da init.sh: New function dx_ to execute path files 
* 73074dedee3 inject.sh: Further simplified FSP extraction 
* 7585336b914 inject.sh: simplify kconfig scanning 
* ef38333f8b0 lib.sh find_ex: Write sort errors to /dev/null 
* c275f35e7e2 lib.sh x_(): Remove warning of empty args 
* 17d826d3a96 lbmk: Replace err with much simpler implementation 
* f98e34a24dd singletree/elfcheck: use fx_, not fe_ 
* 8ca06463ebc rom.sh: Print the rom image path being generated 
* dc9fe517cb0 rom.sh: Safer cprom() 
* 2be8d1c7982 rom.sh: specifically check keymaps in cprom() 
* 89a8cd4936a rom.sh: simplify mkseagrub() 
* c2182d82193 mk: simplify elfcheck() 
* 437ac2454c1 lib.sh: simplify singletree() 
* 62ec3dac075 git.sh: move singletree() to lib.sh 
* 6b247c93e25 mk: Fix bad error handling for gnu_setver 
* ee8bb28ba21 GRUB: Mark E820 reserved on coreboot memory 
* 61ec396ef6d inject.sh: simplify extract_intel_me_bruteforce() 
* e4edc2194d3 inject.sh: Remove unnecessary check 
* f4057d7daab inject.sh extract_intel_me(): reduce indentation 
* b7ca59debe6 inject.sh: Move FSP extraction only to extract_fsp 
* eb882de94cb inject.sh: tidy up intel me handling 
* 153dd76a82e inject.sh: tidy up the deguard command 
* 428c46ca2b1 lib.sh: set -u -e in err() 
* 20c87308587 lib.sh: Provide error message where none is given 
* 35265731c5b init.sh: Silence the output of git config --global 
* 5e3aaa1eb8b init.sh: Run git name/email check before init 
* a3b5626f53d lib.sh: stricter xbmk_err check in err() 
* 51b2a1159d0 lib.sh: simplify err-not-set handling 
* 61e5fd1a0b2 lib.sh: Add warning if x_ is called without args 
* 4020fb43280 lib.sh: simplify err() 
* b51846da6de init.sh: single-quote xbmklock in xbmk_lock() 
* 8b7bd992f66 init.sh: define lock file in a variable instead 
* 9611c19e7ed init.sh: tidy up xbmk_child_exec() 
* 37ca0c90e1c lib.sh err: add missing redirect to stderr 
* 54291ebb720 lbmk: MUCH safer err function 
* 3f7dc2a55f5 lib.sh: rename errx to xmsg 
* 59c94664e3e lib.sh: Make x_ err if first arg is empty 
* 91bb6cbede0 lib.sh: Make err_ always exit no matter what 
* b19c4f8f674 inject.sh: tidy up TBFW handling 
* 439020fbda5 inject.sh: remove useless comment block 
* 6e447876cca init.sh: tidy up the python version check 
* 7392f6fc8ec init.sh: move non-init functions to lib.sh 
* 7acec7a3a1d init.sh: simplify dependencies handling 
* 93ba36ae456 rom.sh: tidy up copyps1bios() 
* fc71e52fdfc mk: tidy up xgccargs handling 
* 184871bc17c mk: remove useless code 
* b6a2dc4ea3c init.sh: tidy up pathdir creation 
* f5b2bdb8868 mk: re-make gnupath/ after handling crossgcc 
* 1b7a9fd637d mk: tidy up check_cross_compiler 
* 488d52e784f mk: re-make gnupath/ for each cross compiler 
* c33467df1e6 mk: reduce indentation in check_cross_compiler() 
* aa4083443b1 mk: Allow use of x_ on prefix functions 
* 8f828e6cd35 mk: tidy up check_project_hashes() sha512sum check 
* 7a2f33264d7 mk: simplify check_gnu_path() 
* 46b968a6e85 inject.sh: minor code cleanup 
* 5499ae66bd8 inject.sh: simplify extract_archive() 
* 72f4412a52d inject.sh: simplified fsp extraction 
* bf569d2b4dc inject.sh: Remove redundant code in copy_tbfw 
* 8de0ed811fb inject.sh: Stricter TBFW handling 
* 530e4109a2b init.sh: *Re-create* tmpdirs on parent instance 
* 498f5a26cc8 init.sh: Always create xbmklocal 
* 00d22f20829 lbmk: Unified local ./tmp handling 
* 0f7b3691aba lib.sh: redirect find errors to /dev/null 
* 7fadb17fd9e lib.sh: Fix bad touch command 
* 0b09d970732 inject.sh: Only build nvmutil once 
* 308df9ca406 inject.sh: always re-build nvmutil 
* 44a1cc9ef85 util/nvmutil:  use x, not ?, for random characters 
* a17875c3459 lib.sh find_ex: explicitly create the tmp file 
* 0ffaf5c7331 init.sh: Explicitly create the xbmktmp directory 
* fcc52b986e7 init.sh: unified handling of ./tmp 
* 47762c84ad0 lib.sh: add fe_ which is fx_ but err on find 
* d18d1c2cae2 lbmk: unified execution on find commands 
* 773d2deaca0 NEW MAINBOARD: Dell Precision T1700 SFF and MT 
* 9b11e93686c mk: include rom.sh directly 
* 1f7e4b35cb2 mk: Download vendorfiles before building release 
* acb0ea202f2 lib.sh: Simplify rmgit() 
* 15b76bc202f lib.sh: support multiple arguments in remkdir() 
* f3ae3dbbbe4 lib.sh: simplify remkdir() 
* 6c4d88f2686 move x_() to lib.sh 
* 2ae565ba93a init.sh: move setvars/err_ to lib.sh 
* c073ee9d4fc Restore SeaBIOS 9029a010 update, but with AHCI fix 
* 8245f0b3211 Revert "seabios: bump to rev 9029a010, 4 March 2025" 
* 4c50157234d coreboot/t420_8mb: add missing txtmode config 
* f21749da8b1 Libreboot 25.04 Corny Calamity 
* bb5f5cd5763 add pico-sdk backport patch fixing gcc 14.x 
* 4f77125066d coreboot/fam15h: update submodule for nasm 
* 0f2202554ab coreboot/fam15h: update nasm to 2.16.03 
* 2009c26f0aa serprog: Remove pico2 support for the time being 
* a08b8d94fc5 seabios: bump to rev 9029a010, 4 March 2025 
* 342eca6f3d1 update untitled 
* b0a6d4711a3 coreboot413: add alper's fix to cbfstool for gcc15 
* 628ae867c9a flashprog: bump to rev e060018 (1 March 2025) 
* 5e96db5a2b4 further gcc-15 fix for gmp on -std=23 
* 9a9cd26b2d5 coreboot/default and fam15h: gmp fix, gcc15 hostcc 
* 80007223c85 lib.sh: Provide printf for mktarball 
*   a16c483e5fd Merge pull request 'coreboot: fam15h: Add patches to fix build with GCC 15 as host compiler' (#318) from alpernebbi/lbmk:coreboot-fam15h-gcc15 into master 
|\  
| * 685685ab0e4 coreboot: fam15h: Add patches to fix build with GCC 15 as host compiler 
|/  
*   02110f2bc1d Merge pull request 'coreboot: Add patch to fix build with GCC 15 as host compiler' (#317) from alpernebbi/lbmk:coreboot-gcc15-nonstring into master 
|\  
| * 5ad1de3931a coreboot: Add patch to fix build with GCC 15 as host compiler 
|/  
*   9e7bceb7fa9 Merge pull request 'seabios: Fix malloc_fn function pointer in romfile patch' (#313) from alpernebbi/lbmk:seabios-romfile-malloc-fptr into master 
|\  
| * 35c853f8b33 seabios: Fix malloc_fn function pointer in romfile patch 
* |   686e136f150 Merge pull request 'dependencies/debian: Fix libusb package name' (#315) from alpernebbi/lbmk:debian-libusb-dependency into master 
|\ \  
| * | 6f120f01588 dependencies/debian: Fix libusb package name 
| |/  
* / d8b0e749983 init.sh: fix yet another double quote for dotfiles 
|/  
*   780844112ae Merge pull request 'Update U-Boot to v2025.10' (#305) from alpernebbi/lbmk:uboot-v2025.04 into master 
|\  
| * 1265927ca38 u-boot: gru: Disable INIT_SP_RELATIVE 
| * 5bea1fade9a u-boot: arm64: Expand our modified defconfigs to full configs 
| * fd56d8ada13 u-boot: arm64: Merge our modifications into new defconfigs 
| * ed9ddd7415f u-boot: arm64: Add new upstream defconfigs 
| * b1fa44858cb u-boot: arm64: Rebase to v2025.04 
| * 976fc6890ae u-boot: arm64: Save our modifications to the upstream defconfigs 
| * 418570a6172 u-boot: arm64: Turn configs into defconfigs 
|/  
* 093a86d9c09 init.sh: don't use eval to read version files 
* 3045079947b init.sh: use backslash for dotfiles in eval 
* da108d1c045 mk: Don't run mkhelpers if mode is set 
* 71a58a38ab4 mk: condense main() again 
* f3882b9bf21 init.sh: make git name/email error more useful 
* 9cebda333d5 init.sh: move git name/mail check to xbmk_git_init 
* ea081adc4ca init.sh: tidy up the git name/email check 
* 3292bded692 mk: make main() more readable 
* 97a5e3d15ed mk: move git check to init.sh xbmk_set_version 
* 11cd952060d init.sh: tidy up xbmk_init() 
* f6c5c8d396d mk: move git_init to init.sh 
* ec1c92238cc init.sh: minor cleanup 
* e009f09e7fa init.sh: clean up setvars 
* 9ec72153408 init.sh setvars: make err a printf for eval 
* 18ad654a1f7 init.sh: merge xbmk_child_init with xbmk_init 
* 15268202478 init.sh: split xbmk_child_init into functions 
* 0280cd4c0e7 init.sh: move parent fork to new function 
* a0e1d42ff74 init.sh: Provide more complete error info 
* a8f0623efbb update uefitool to rev a072527, 26 Apr 2025 
* c698972130f rename include/vendor.sh to inject.sh 
* 24e488aae56 lib.sh: move _ua to the xbmkget function 
* 6779d3f9915 move variables out of init.sh to others 
* 848159fa0eb lib.sh: rename vendor_checksum 
* 1de77c6558c lib.sh: move singletree() to git.sh 
* 703fe444312 lib.sh: move cbfs() to rom.sh 
* b57952e90d2 re-split include/init.sh to lib.sh 
* 8ecb62c6628 rename include/lib.sh to init.sh 
* ce4381169fa lib.sh: introduce more top-down function order 
* 15b64cfebe8 mk/git.sh: remove tree_depend variable 
* 9b8179c0e5d git.sh: remove unused xgcc linking feature 
* 4624c6e536c mk: remove unused variables (ser/xp) 
* aba5b3a3532 mk: simplify main() 
* 0ab7c6ff9cf lib.sh: use realpath to get sys python on venv 
* 8edea026c58 lib.sh: Force use of System Python to prevent hang 
* b1b964fa5c3 lib.sh: further condense the python check 
* 9543a325acb lib.sh: further simplify the python check 
* 9baabed7186 lib.sh: condense the python check 
* 0c5c5ffc873 lib.sh: simplify mk() 
* 83022b6ba83 lib.sh: simplify cbfs() 
* 13ad839691d lib.sh: simplify the python check 
* b1ea4165754 mk: remove mkhelp() and use x_() instead 
* 4cf64e59ed0 mk: simplify handling of trees() 
* d0581914c74 coreboot/hp8300cmt: purge xhci_overcurrent_mapping 
* cb52fc4ba82 Fix VBT path on HP Elite desktops 
* 2bee87cfc26 lib.sh: add missing copyright year 
* 4b7ab403c65 ifd/q45t_am: unlock regions by default 
* 564155277ea coreboot/g43t_am3: use ifd-based setup 
* 0ddd1963751 coreboot/q45t_am3: use ifd-based setup 
* 3b2d933842a coreboot/default: add missing submodules 
* a10d81399c7 NEW MAINBOARD: Acer Q45T-AM (G43T-AM3 variant) 
* d114e0a765c mk: don't print confirmation of git pkg.cfg 
* f59c24f12aa coreboot/g43t_am3: fix data.vbt path 
* 21020fa319a add missing config/data/coreboot/0 
*   2b4629d790b Merge pull request 'lib.sh: Fix python3 detection when 'python' is python2' (#290) from alpernebbi/lbmk:python3-detection-fix into master 
|\  
| * a18d287a81e lib.sh: Fix python3 detection when 'python' is python2 
|/  
* c7569a67145 coreboot/next: merge with coreboot/default 
* 762c7ff43eb coreboot/default: Update, c247f62749b (8 Feb 2025) 
* 86e7aa80c51 Update the GRUB revisions 
* 8d57bf6009e Revert "git.sh: minor cleanup" 
* a2898771f6e lib.sh: perform root check even earlier 
* 779f6003421 lib.sh: tidy up opening logic (put it together) 
* bac4be99c20 lib.sh: do root check before python check 
* e63d8dd20d9 git.sh: minor cleanup 
* 11078508a25 lib.sh: simplify mktarball() 
* 087bbedc5f8 vendor.sh: tidy up vendor_download() 
* e11fd52d958 mk: tidy up check_gnu_path() 
* 3442f4278ed mk: simplify check_project_hashes() 
* 6b6a0fa607c lib.sh: fix missing s/TMPDIR/xbmktmp 
* e07a2adb130 lbmk: don't handle TMPDIR directly 
* 9d3b52cd1d2 rom.sh: minor cleanup 
* b4402c54258 vendor.sh: yet even more code cleanup 
* fe5bdc7633d vendor.sh: even more cleanup 
* fcedb17a9a1 vendor.sh: more cleanup 
* 4e2b59ed3ff vendor.sh: minor cleanup 
* a3acf4c3f95 vendor.sh: simplify process_release_roms 
* 30213a96883 vendor.sh: remove unnecessary check 
* 38df7275f12 git.sh: remove unnecessary comment 
* f5891fb6991 git.sh: remove link_crossgcc() 
* a685654b90f git.sh: remove move_repo() 
* e4aa62f79a8 git.sh: remove prep_submodule() 
* 2839feb9e43 git.sh: make git_prep command clearer 
* 410fa702c9c mrc.sh: Make proper use of variable inside printf 
* 075902c3ea7 simplify a few file checks 
* b2255425eba rom.sh: remove unnecessary check 
* 39640d76a75 lbmk: minor cleanup 
* c8dc701f3eb lib.sh mktarball: stricter tar error handling 
* 58a53d7046f vendor.sh: don't err on bruteforce me extract 
* 958fa34832a mk check_project_hashes: handle error on sha512sum 
* 8b4b069e3f6 vendor.sh: remove unnecessary xchanged="y" 
* 166dbb04c92 vendor.sh: set need_files="n" if skipping patch 
* e90657cc734 vendor.sh: Don't handle vendor files if not needed 
* 2e10a45fa36 Revert "lib.sh: use eval for the command in x_" 
* 738d4bb6b6d lib.sh: fix bad eval writing resized file 
* eb9e5d2d5d4 lib.sh: fix bad eval writing version/versiondate 
* 3bfdecdc75b lib.sh: use eval for the command in x_ 
* 4fa3bb9e5b1 mk: use eval to run mkhelp commands 
* 9b3635718a8 mk: tidy up the switch/case block in main() 
* 0c381028abc mk: tidier error handling 
* 023f9cf0498 lib.sh: tidy up the error handling 
* cb3253befb9 rom.sh: tidy up error handling 
* 7af46721bcb vendor.sh: tidy up error handling 
* 04ebb3b91a0 vendor.sh: tidy up decat_fspfd() 
* 0c87fdf96ad git.sh: clean up fetch_project() 
* 9eb8856b3c5 mk: Remove unnecessary argument checks on trees() 
* 52f3d54116f vendor.sh: properly call err_ in fail_inject 
* c4c6692b761 remove xbmk_parent, handle forking in lib.sh 
* fd5431db05d lib.sh: define x_ right after err_ 
* 972681a127b mk: minor cleanup 
* b41cd39b686 lib.sh: minor cleanup 
* 49939502648 mrc.sh: minor cleanup 
* c158d82298b rom.sh: minor cleanup 
* cb36248c8c0 vendor.sh: tidy up check_release() 
* 409cab39c56 vendor.sh: tidy up vendor_inject() 
* 12b1623e473 vendor.sh: tidy up readcfg() 
* 0d85f061e2e vendor.sh: tidy up patch_release_roms() 
* 61f20141028 vendor.sh: tidy up process_release_roms() 
* 5901f36e49d vendor.sh: tidy up patch_rom() 
* 082930ce0e7 vendor.sh: tidy up inject() 
* e1f91f30372 vendor.sh: tidy up modify_mac_addresses() 
* 3181ac50126 script/trees: merge with mk and delete script/ 
* 3d03dd1a507 mk: remove the legacy "roms" command 
* f0c629dcc6c lib.sh: write version/versiondate to dotfiles 
* 23b942c83e9 lib.sh: hardcode projectname/projectsite 
* a03bb793aea remove update/vendor symlinks 
* d7f80ebe71e move build to mk 
* 57d58527fd0 trees: unify the execution of mkhelper commands 
* e5262da4be7 trees: tidy up configure_project() 
* 51798278397 build: make coreboot building an else in "roms" 
* c189257888a trees: don't build dependencies if dry=":" 
* 115a66fddd3 trees: unified handling of flags 
* 3ea633cc791 trees: simplified handling of badhash/do_make 
* 9be40e94a2b trees: don't set mode on ./mk -b 
* 67ad7c2635c trees: don't set mod on ./mk -d 
* 24448948419 trees: don't initialise mode to "all" 
* 97c50a39a60 trees: clean up some comments 
* cfb14fd8dd8 vendor.sh: simplified readkconfig() 
* 5b697b93a2d lib.sh: double-quote pwd to prevent globbing 
* 5a0a24f5559 lbmk: unified PWD handling (work directory) 
* a25a29cfbb7 lib.sh: initialise PATH if it's unset 
* 1022abf6991 move XBMKPATH to include/lib.sh 
* 0764c969a29 lbmk: use pwd util, not PWD environmental variable 
* f98b9b01107 clean up a few semicolons in the build system 
* 8ccb61cc718 trees: err if first argument is not a flag 
* 947c3e1a176 trees: err if no argument given 
* edbbde0b12d trees: set dry=":" on ./mk -f 
* 33bb0ecf764 trees: clean up initialisation of the dry variable 
* c7636ff1dfc trees: initialise mode to "all", not "" 
* d0bd12631a6 trees: don't abuse the mode variable on -f 
* c4cd876c609 trees: Add missing flag to error output 
* 5ebcae5235f lbmk: minor code formatting cleanup 
* 70cef71dbab grub/xhci: Remove unused patch 
* 3f14a470a2e remove _fsp targets (keep _vfsp) 
* d7312260e7e util/nvmutil: remove excessive comments 
* e348ea0381a Bump GRUB revision to add 73 security patches 
*   4b228c11f9f Merge pull request 'Update pico-serprog revision' (#271) from Riku_V/lbmk:master into master 
|\  
| * a8359e30b27 Update pico-serprog revision 
|/  
* d2cb954933b util/nvmutil: Fix bad error messages on R/W 
* e1e515bd22a util/nvmutil: hardened pledge on help output 
*   ada057a865c Merge pull request 'Simplify the README' (#269) from runxiyu/lbmk:readme-simplification into master 
|\  
| * 9ced146b47c README.html: Use newlines instead of bulleted list for docs/support links 
| * 266122592cd README.html: Use the EFF's page on Right to Repair 
| * e36aa8c5a5c README.html: Vastly simplify it 
| * c17f4381ce5 README.html: Mention SeaBIOS and U-Boot instead of Tianocore as payloads 
|/  
*   47eb049cb47 Merge pull request 'deps/arch: genisoimage belongs to cdrtools' (#267) from runxiyu/lbmk:master into master 
|\  
| * fa9a0df2458 deps/arch: genisoimage belongs to cdrtools 
|/  
* a98490573be util/nvmutil: only set mac_updated at the end 
* 6b9cf09ca21 restore old x230 gbe file 
* 8a435355135 util/nvmutil: Fix bad comparison 
* a65a0c2f963 util/nvmutil: allow ./nvm gbe MAC 
* 96356ce94f6 util/nvmutil: move "e" to swap() 
* b1d8975959d util/nvmutil: Only read up to 4KB on larger gbe 
* 6821659bcb2 util/nvmutil: fix minor mistake (line break) 
* 3bb7520f6d9 util/nvmutil: do setmac if only filename given 
* d94b274fd9f vendor.sh: don't error if grep -v fails 
* 6ebdd3c72ba vendor.sh: Don't show gbe filename on inject 
* a08748a9eda util/nvmutil: don't say write not needed if errno 
* 6841a351ebc util/nvmutil: print dump *after* modification 
* da0a6c216cf util/nvmutil: verbosely print the written MAC 
* db5879c6b5a util/nvmutil: minor cleanup in cmd_dump 
* bd7215d1eb7 util/nvmutil: show nvm words written on writeGbe 
* c70117c79c4 util/nvmutil: clean up readonly check on writeGbe 
* cf5a63e65ca util/nvmutil: Remove useless gbeFileChanged var 
* 83601aa524b util/nvmutil: reset errno if any MAC updated 
* 3e86bf5ce25 util/nvmutil: reset errno when writing a MAC 
* bcf53cc2cc0 util/nvmutil: show total number of bytes read 
* c91cc329cf8 util/nvmutil: rename tbw/bw to tnw/nw 
* 90607108330 util/nvmutil: err if bytes read lower than nf 
* c72f699d368 util/nvmutil: err if fewer bytes written 
* d666f67ebe5 util/nvmutil: Show bytes written in writeGbe 
* b2d6393ed5f util/nvmutil swap(): ensure that no overflow occurs 
* 063fef14d34 util/nvmutil: make swap() a bit clearer 
* fd1bbdc96cb util/nvmutil: make 0x3f checksum position a define 
* 5ddf7f251d6 util/nvmutil: make 128 (nvm area) a define 
* 8850acc7da6 util/nvmutil swap(): Only handle the nvm area 
* 49506a88328 util/nvmutil: move write checks to writeGbe 
* 948377b0e7e util/nvmutil: make cmd_swap its own function again 
* 6e134c9f4bf util/nvmutil: minor cleanup 
* 98e105ac4f1 util/nvmutil: allocate less memory for setchecksum 
* 52e8ea57f7b util/nvmutil: Further reduce memory usage 
* 7a7d356824e util/nvmutil: Remove unnecessary buf16 variable 
* cdf23975bc1 util/nvmutil: Only allocate needed memory for file 
* ed45da9cae5 util/nvmutil: Remove unnecessary buffer 
* ec3148dc3b5 util/nvmutil: Show specific error for bad cmd argc 
* 073420d3056 util/nvmutil: cleaner argument handling 
* a6c18734e70 util/nvmutil: extreme pledge/unveil hardening 
* deb307eaf63 util/nvmutil: more minor cleanup 
* c14eccaf153 util/nvmutil: more granular MAC parsing errors 
* 88fb9cc90ea util/nvmutil: more cleanup 
* 5aaf27f80c3 remove errant comment in nvmutil 
* c829b45c17c util/nvmutil: support 16kb and 128kb gbe files 
* a98ca5bf65c util/nvmutil: Prevent unveil allowing dir access 
* 68c32034a00 typo: nvme should say nvm in nvmutil.c 
* c944c2bbac7 util/nvmutil: General code cleanup 
* 8c65e64e398 snip 
* f666652fe15 snip 
* 64d3c7b5150 grub/xhci: Add xHCI non-root-hub fixes from Nitrokey 
* 7bf0d4c2ed5 add gnults-devel to fedora 41 dependencies 
* 66d084e7f7c grub.cfg: scan luks *inside lvm* 
* 5a3b0dab966 grub.cfg: Scan *every* LVM device 
* 3c9f4be76f6 Libreboot 20241206, 8th revision 
* d4cc94d6b44 rom.sh: don't run mkpicotool on dry builds 
* de6d2f556f1 pico-sdk: Import picotool as a dependency 
* 4210ee68ea2 lib.sh: Much safer python version check 
* 8c7ba6131cc coreboot/next uprev: Fix T480 backlight keys 
* 411fb697dfc set up python in PATH, ensuring that it is python3 
* e8336bcc3ca vendor.sh: Proper semantics on prefix file names 
* 63f45782638 vendor.sh: Confirm if need_files=n 
* 13b06ae130f vendor.sh: Allow restoring the default GbE file 
* ab8feff92e0 vendor.sh: set random MAC address *by default* 
* 0ceaa01d45d vendor.sh: add clarification to nogbe warning 
* 4d5caf1dcfc vendor.sh: check that the vcfg file exists 
* fc4ee88e167 vendor.sh: error out if nuking failed 
* 8819a93d89b add line break, part 3 
* 8ce1a00f517 add line break, part 2 
* bc2c14e76a8 add line break 
* c762850311a vendor.sh: prevent double-nuke 
* 68299ad05ca vendor.sh: much more verbose errors/confirmation 
* b8e6d12f3d9 add libx86 to arch dependencies 
* cf8ad497b4e vendor.sh: Remove unnecessary return 
* c858099b359 vendor.sh: Download utils even if vcfg unset 
* ce16856a242 vendor.sh: Allow setmac if vendorfiles not needed 
* 4b51787d078 add less to arch dependencies 
* 8bd028ec153 lib.sh: Set python after dependencies 
* 44b6df7c24c update my copyright years on modified scripts 
* 818f3d630c2 vendor.sh: Don't error if vcfg is unset 
* 432a1a5bca7 lib.sh: Fix unescaped quotes in chkvars() 
* a73b0fd910a Revert "fix more unescaped quotes in eval" 
* ec6bcc1fba5 fix more unescaped quotes in eval 
* 5284f20b981 fix ./mk dependencies build issue 
* d825f9a9683 rom.sh: Remove errant GRUB modules check 
* 4149f3dc81a submodule/grub: use codeberg for 1st gnulib mirror 
* 0305975e705 util/nvmutil: Update AUTHORS and COPYING files 
* 20b192e13bd util/nvmutil: Describe nvmutil in help output 
* d1ca21628cb util/nvmutil: Remove the correct binary on uninstall 
* e63fe256dfc util/spkmodem-recv: More correct Makefile 
* efd50ee548b util/nvmutil: Honour the INSTALL variable 
* 8008838abbc util/nvmutil: Don't clean when doing uninstall 
* 982f257f58a util/nvmutil: Proper DESTDIR/PREFIX handling 
* 3f85ae5f853 util/nvmutil: Set CC and CFLAGS only if unset 
* 2c7b9fb9412 util/nvmutil: Capitalise BABA 
* 57f9906f6d1 util/nvmutil: Add uninstall to Makefile 
* 4defe2c6085 util/nvmutil: Add distclean to Makefile 
* 033e4cd9d50 util/nvmutil: Make the GbE checksum a define 
* 874317c4e59 util/nvmutil: nicer hexdump display 
* a338e585eed util/nvmutil: show the correct hexdump order 
* b032e483ef1 lib.sh mktarball: cleaner if statement 
* 0cf58c22734 fix lbmk shellcheck errors 
* 8276560cc99 lib.sh and rom.sh: update my header 
* 08e86d2218c vendor.sh inject: reset err upon return 
* 41275d699ca vendor.sh: MUCH, MUCH, MUCH safer ./mk inject 
* ed7293494e3 util/nvmutil: Obey the 79-character per line limit 
* 637b5e36fd2 util/nvmutil: Tidy up copyright header 
* cd28db883e2 vendor.sh: fix comment 
* 57971ceb227 util/nvmutil: Fix another straggler 
* 15b37b2a1ab util/nvmutil: Tidy up pledge calls 
* e8799310db2 hp820g2: fix vendorfile inject and set release=y 
* f9ab082ec19 fedora41/dependencies: add libuuid-devel 
* 661591f9f0b add uuid-devel to fedora41 dependencies 
* 1a46c047386 support ./mk dependencies fedora reinstall 
* d58d63569f1 fix missing semicolon in grub nvme patch 
* 95ea3293df5 bump seabios to rev 1602647f1 (7 November 2024) 
* 6d7e6c361b3 Bump GRUB revision to 6811f6f09 (26 November 2024) 
* 09a01477df6 t480/3050micro: force power off post power failure 
* d344cd95eac flashprog: Disable -Werror 
* dc95e912bfe bump flashprog to revision eb2c041 (14 Nov 2024) 
* 27c8c1c16ba replace liblz4-tool with lz4 and liblz4-dev 
* d3a732a64db lib.sh dependencies: support --reinstall argument 
* 466ada423dd move xbmkpath to XBMK_CACHE/ 
* b0a23840327 Revert "Remove legacy update/vendor commands" 
* 3d7dd4aa9fe Fix U-Boot build issue with Swig 4.3.0 
* 0c810747469 use command -v instead of which 
* 6c7e3ce2d6e trees: remove unnecessary subshell 
* ad137eae89d trees: only symlink host gcc/gnat to build xgcc 
* cfb6de94c33 trees: correction on check_gnu_path 
* ec2f0716662 trees: match gcc/gnat versions both ways 
* f64b5996279 Merge path.sh into script/trees 
* 295463d281e path.sh: Further cleanup 
* 5b24e0a5a96 path.sh: More thorough gcc/gnat version check 
* 7849a075886 path.sh: minor cleanup 
* 17168a87dbf path.sh: remove unnecessary shebang 
* e565df94fd7 Fix globbing issue in lbmk 
* c80cc0a00b6 remove auto-confirm on distro dependencies 
* 01fc65a0a9d Mitigate Debian Trixie/Sid GCC/GNAT version mismatch 
* 424b0c7103b t480/3050micro: disable hyperthreading 
* 603105f3b4e t480/t480s: Disable TPM2 to mitigate SeaBIOS lag 
* 754bd1e6ca3 rom.sh: Name pico directory serprog_pico 
* db22308eba5 add 2024 to Riku's copyright header on rom.sh 
*   4fa5f696db8 Merge pull request 'rp2530' (#258) from Riku_V/lbmk:rp2530 into master 
|\  
| * a5e0360992d pico-sdk: update to 2.1.0 
| * e2f8cc7f3ee pico-serprog: enable building for multiple pico chips 
|/  
* ccc2b4d589f add spdx headers to dependencies configs 
* a3969701e6b dependencies/debian: fix debian sid 
* 8f370cb60d9 add spdx headers to various config files 
* d591ea4c5dc git.sh: don't initialise livepull globally 
* b5da9feba3b vendor.sh: Print useful message on ./mk inject 
* 12c6259cb2f vendor.sh: Handle FSP insertion post-release 
* 78132051462 Remove legacy update/vendor commands 
* 07037561bd6 lbmk: remove use of deprecated ./vendor command 
* 5d1f1823067 vendor.sh: Safer exit when vendorfiles not needed 
* a18175a5df9 data/deguard: Remove unused patch 
* ee8f53b96ff lib.sh: Safer exit from ./mk dependencies 
* a8b35c88cf1 remove geteltorito and mtools from lbmk 
* 1dd32ea5487 rom.sh: support grub-first setups 
* f7801ef4770 vendor.sh: delete old tb.bin first, just in case 
* 02cbf8a729d vendor.sh: make TBFW pad size configurable 
* 9884e5ed1b0 T480/T480S: Support fetching ThunderBolt firmware 
* 36b42dd1c11 also de-rainbow the u-boot menu 
* eafc82028a4 Revert "use rainbow deer on the grub background" 
* 44969c73bd2 rom.sh: insert grub background in cbfs not memdisk 
* 401efb24b22 use rainbow deer on the grub background 
* dc27cb91784 add some scripts to .gitignore 
* 3b6b283eabe disable 3050micro nvme hotplug 
* c2023921893 fix t480 spd size (512, not 256) 
* da527459b68 add tarballs and signatures to gitignore 
* b910424b5df fix another very stupid mistake 
* e3b77b132e6 fix the stupidest bug ever 

This is about 650 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.

Markdown file for this page: https://libreboot.org/news/libreboot2506.md

Subscribe to RSS for this site

Site map

This HTML page was generated by the Libreboot Static Site Generator.