Skip to content

Releases: zbm-dev/zfsbootmenu

ZFSBootMenu v3.0.1

29 Jan 20:04
Compare
Choose a tag to compare

ZFSBootMenu v3.0.1 includes fixes for two issues. The zbm.skip and zbm.timeout=0 arguments are now correctly handled, breaking the infinite loop on countdown prompts. Hooks listed in the System Report help section correctly indicate if they're enabled or not, and now show if they've run once.

Binary images are built with OpenZFS 2.3.0 and Linux 6.1, 6.6 and 6.12.

Significant commits in this release

  • ff7c935 zfsbootmenu-core.sh: fix instant timed prompts (Zach Dykstra)
  • 849207e zreport: handle hooks that run once and are completed (Zach Dykstra)

ZFSBootMenu v3.0.0

27 Jan 01:22
Compare
Choose a tag to compare

ZFSBootMenu v3.0.0 collects several bug fixes and refinements to the user experience within the loader as well as the process of creating images.

Binary images are built with OpenZFS 2.3.0 and Linux 6.1, 6.6 and 6.12.

New features

The ZFSBootMenu initialization process, previously encapsulated in a monolithic function run once at boot, has been split into independent parts. The initialization process is now easier to customize, because additional initialization scripts can be interleaved with the system process. Furthermore, execution of individual components is now easy to track, and ZFSBootMenu uses this facility to ensure that each initialization script is run only once. The main zfsbootmenu process uses this guarantee to retry initialization whenever it is launched, rather than assuming that all initialization was successfully completed at boot. In particular, this can be helpful for remote connections when the initialization process (e.g., pool imports) require manual intervention that may not have been completed on the console.

UEFI systems will benefit from several enhancements. Image creation should now include kernel modules necessary to mount VFAT filesystems, which ensures that external ZFSBootMenu hooks installed on an EFI system partition will always be loadable. On systems that support it, ZFSBootMenu now provides users with an option to reboot into EFI firmware.

A new kernel argument, zbm.waitfor, allows the specification of devices that must be present before ZFSBootMenu will attempt to boot pools. This may be useful, for example, to ensure that encryption keys on external devices are present for automatic unlocking.

Fixes

The zsnapshot utility provided in the recovery environment now verifies that a specified filesystem is actually ZFS. When invoked without a filesystem argument, a menu of candidate filesystems will be presented.

Handling of symbolic links in the install helper and in the initramfs creation modules ensure that helpful aliases like zbm and reboot will be available in images generated with dracut as well as mkinitcpio.

Console initialization that was previously done only in dracut images is now done in mkinitcpio images.

ZFSBootMenu will print the kernel and boot environment it is attempting to boot immediately before it invokes kexec, which removes ambiguity about unexpected hangs in the boot process.

When building custom images, the generate-zbm utility now properly ignores kernels for which it cannot determine a version either from the kernel contents or the file name.

The ZFSBootMenu build container better handles multiple kernel versions. A new -k option allows users to specify any kernel series offered by Void Linux, and the container will ensure that all components are necessary to build the ZFS kernel module for that series.

Significant commits in this release

  • b5fb075 - early-setup.d/: create generic hook, console-init now dracut only (Zach Dykstra)
  • ed2272c - zfsbootmenu: print bootenv and kernel just before kexec (Zach Dykstra)
  • 3ee4f29 - bin/generate-zbm: require at least one kernel version value (Zach Dykstra)
  • db78c98 - dracut: explicitly require the bash module (Zach Dykstra)
  • 693b64a - install-helpers.sh: fix realpath -> readlink (Andrew J. Hesford)
  • dbb23f1 - init.d/50-import-pools: tailor text if using a binary release (Zach Dykstra)
  • 6eebde0 - lib/zfsbootmenu-core.sh: add initramfs generator to zreport (Zach Dykstra)
  • 9f5e426 - releng/docker/build-init.sh: make it easier to customize kernel versions (Andrew J. Hesford)
  • 6075572 - docs/index: fix repeated word. (Érico Nogueira)
  • b1c12af - docs/guides/alpine/: add zfs-scripts to packages installed (camckay)
  • 074d83b - zfsbootmenu-ui.sh: fix typo in fallback message (zenodotus280)
  • d48408b - *: remove execute bit on files not intended for execution (Andrew J. Hesford)
  • 4231230 - install-tree.sh: use tar to capture symlinks properly (Andrew J. Hesford)
  • 9a6e7dc - docs/guides/fedora: update to Workstation 40 (Kevin K.)
  • b7124bb - contrib: add megaraid_sas unbind script (Zach Dykstra)
  • 1b496a6 - contrib: remove system hook, clean up docs (Zach Dykstra)
  • 1a6c694 - zfsbootmenu/install-helpers.sh: preserve relative symlinks (Andrew J. Hesford)
  • 14e4c1d - docs/general/container-building: fix InitCPIOHookDirs parent key (Bojan Petrović)
  • dc755a8 - docs/guides/alpine: include nvme initramfs module (eli)
  • 08dda60 - zfsbootmenu: add modal power menu on main screen (classabbyamp)
  • 29fb17e - zfsbootmenu/lib/zfsbootmenu-ui.sh: add modal prompt (classabbyamp)
  • 02d3755 - zfsbootmenu/bin/reboot: add reboot-to-uefi functionality (classabbyamp)
  • 2994512 - zfsbootmenu: attempt initialization if necessary (Andrew J. Hesford)
  • 1538998 - lib/zfsbootmenu-core: allow timed_prompt to delay indefinitely (Andrew J. Hesford)
  • e3b1ff3 - init: split initialization into quasi-idempotent parts (Andrew J. Hesford)
  • 5b61ab9 - bin/generate-zbm: support including a splash image in unified EFI bundles (classabbyamp)
  • 4a034be - *: prefer systemd-boot stub to gummiboot (classabbyamp)
  • 3b34348 - releng/tag-release.sh: no longer ship zbm-kcl as a release asset (Zach Dykstra)
  • 96c4d5e - zfsbootmenu-ui: fix new populate_be_list for encrypted filesystems (Andrew J. Hesford)
  • dae859d - releng/version.sh: fix git-based version detection (Andrew J. Hesford)
  • c83f534 - zsnapshots: allow filesystem selection when no argument is specified (Andrew J. Hesford)
  • cd7d55d - zfs-chroot: remove PROMPT_COMMAND from chroot env (Zach Dykstra)
  • cd37f6a - zfsbootmenu-core: discard stderr on zfs/zpool cmds (Zach Dykstra)
  • 2611f36 - zfsbootmenu: clean up main loop (Zach Dykstra)
  • 0f87c5f - docs: fix curl arguments in container-example (Winston Hoy)
  • 98f7dac - zfsbootmenu: generalize zbm.import_delay as zbm.retry_delay (Zach Dykstra)
  • 075cba0 - zfsbootmenu: add zbm.waitfor argument handler (Zach Dykstra)
  • ad127f3 - recovery shell: stop double printing errors on first launch (Zach Dykstra)
  • 4868300 - install-helpers.sh: fix date template syntax (Fermín Olaiz)
  • aa8654b - zfsbootmenu logs: remove alias, fix header with alt name (Zach Dykstra)
  • f9b3f70 - recovery shell: print zerrors since the last command was executed (Zach Dykstra)
  • 3ac3466 - recovery image: remove broken cryptsetup (Zach Dykstra)
  • fd4d012 - recovery shell: ESP-related tooling (Zach Dykstra)
  • 14d8554 - zsnapshots: check if input is a valid ZFS filesystem (Zach Dykstra)
  • be37517 - 20-console-autosize.sh: respect mkinitcpio consolefont (Zach Dykstra)

ZFSBootMenu v2.3.0

13 Dec 02:43
Compare
Choose a tag to compare

ZFSBootMenu v2.3.0 introduces a few new capabilities and refactors some existing features.

New features

The ZFSBootMenu hook system has been enhanced. In addition to "early setup", "setup" and "teardown" hooks, users can install "load-key" and "boot-selection" hooks to better control the unlocking of ZFS filesystems and the process of booting a selected environment. Hook installation and management has been simplified: the zfsbootmenu_{early_setup,setup,teardown} variables in dracut and mkinitcpio configurations have been deprecated in favor of zfsbootmenu_hook_root, which points to a directory containing subdirectories that correspond to each hook stage. ZFSBootMenu now includes "system" hooks that are automatically installed in every generated image; the USB-teardown and font-resizing hooks provided as contrib scripts are now installed as system hooks. A new command-line argument, zbm.skip_hooks, allows individual hooks to be skipped at runtime.

When ZFSBootMenu is unable to import any ZFS pools, it will capture and display import errors when entering an emergency shell.

The commands reboot, poweroff and shutdown are provided in ZFSBootMenu images, providing a convenient means to interrupt or restart the boot process from an emergency shell.

Various UI and UX enhancements improve the user experience within ZFSBootMenu:

  • The zreport utility provides more information about the environment
  • Online help now includes a "System Report" tab that displays the output of zreport
  • Pre-built ZFSBootMenu images will no longer complain on hostid mismatches
  • The main menu now shows the key by which entries are sorted

Fixes

Chimera Linux boot environments are now properly recognized and will receive the appropriate root prefix by default.

Pre-built recovery images now include sgdisk and SSL certificates that will allow curl to communicate with HTTPS servers. The pre-built release and recovery images both include the zbm-kcl utility to allow convenient editing of command-line arguments for boot environments as well as ZFSBootMenu EFI bundles.

The zbm and debug commands, previously shell aliases, are now symlinks; this makes these commands accessible to users of images built with mkinitcpio.

Searches for kernels and initramfs images in boot environments have been improved. Although results of searches should be the same, the searches should happen slightly faster.

The contrib/zbm-sign.pl script now respects the EFI.ImageDir variable in the generate-zbm configuration file.

Removal

Support for managing syslinux configurations with generate-zbm, long deprecated, has been removed. Users must now manage syslinux configurations manually.

Significant commits in this release

  • cb8dfaa - zfsbootmenu-core: show enabled/disabled hooks in zreport (Zach Dykstra)
  • 3739e89 - zreport: show canmount dataset property (Zach Dykstra)
  • efea0c1 - zfsbootmenu: use symlinks for two useful aliases (Zach Dykstra)
  • 0d29988 - lib/zfsbootmenu-kcl: clean up argument reading (Andrew J. Hesford)
  • 07d6e73 - zfsbootmenu-preinit: single-quote values written to /etc/zfsbootmenu.conf (Andrew J. Hesford)
  • 23bdb71 - zfsbootmenu-ui: fix argument order when listing snapshots (Andrew J. Hesford)
  • 14fb79f - zfsbootmenu-core: use new zbm-release file, make zreport pretty (Zach Dykstra)
  • 691e332 - zfsbootmenu-help: add system report section to online help (Zach Dykstra)
  • 9d7eba4 - Improve version handling in the repository and ZBM images (Andrew J. Hesford)
  • 8f1570f - contrib/zbm-sign.pl: respect EFI.ImageDir (John Zimmermann)
  • d7ebc84 - examples: modernize, install (Zach Dykstra)
  • 55f08b9 - generate-zbm: remove integrated syslinux support (Zach Dykstra)
  • f23fc69 - zfsbootmenu-core: fix typo in warning text (Zach Dykstra)
  • 9588659 - zfsbootmenu/: tab-delimit kernel lists for boot environments (Andrew J. Hesford)
  • 831d55a - releng/docker: Dockerfile parity with image-build.sh (Min Idzelis)
  • 57b5572 - zfsbootmenu: remove legacy root= usage/design (Zach Dykstra)
  • e93de79 - zfsbootmenu: add sysrq-based reboot/poweroff (Zach Dykstra)
  • 6afe2ff - zfsbootmenu-core: remove SIGINT trap when launching e-shell (Min Idzelis)
  • abf9649 - zfsbootmenu: rename UI library, normalize imports (Zach Dykstra)
  • 40f7928 - zfsbootmenu-core: optimize initramfs search (Andrew J. Hesford)
  • d7caa8c - releng/docker/image-build.sh: use tmpfs for XBPS cache (Andrew J. Hesford)
  • 3f3e831 - zfsbootmenu: make zbm.autosize a system hook (Zach Dykstra)
  • 9b348b4 - zfsbootmenu-core: disable spl_hostid warnings (Zach Dykstra)
  • bd1319f - zfsbootmenu: log errors for unimportable pools (Zach Dykstra)
  • 2762b7e - zfsbootmenu-core: run boot environment hooks after environment mount (Agorgianitis Loukas)
  • 9524215 - releng/docker/build-init.sh: add rc.pre.d hooks (Andrew J. Hesford)
  • 640af57 - Refactor user runtime hooks installation and processing (Andrew J. Hesford)
  • 7045d1f - zfsbootmenu-lib: show sort key where needed (Zach Dykstra)
  • ff59562 - zfsbootmenu: refactor installation, support system and user runtime hooks (Zach Dykstra)
  • e5cfb46 - releng/docker/image-build.sh: improve repo and kernel selection (Andrew J. Hesford)
  • 1526bb8 - zfsbootmenu-core: improve kernel searches (Andrew J. Hesford)
  • 955ac2f - zfsbootmenu-core: remove trailing whitespace (Andrew J. Hesford)
  • e7a3b89 - releng/docker: update Void base images (Andrew J. Hesford)
  • 3682393 - releng/docker/image-build.sh: support custom XBPS repositories (Andrew J. Hesford)
  • c8c9e8d - contrib/remote-ssh-build.sh: Add pool key to system mkinitcpio config (Emad Elsaid)
  • 56cbbe8 - dracut, initcpio: make libgcc_s search universal (Andrew J. Hesford)
  • deefabd - release,recovery: add tools to images (Zach Dykstra)
  • 2431eff - zfsbootmenu-core: log error when be is locked in mount_zfs (Zach Dykstra)
  • 3616009 - zfsbootmenu: add default Chimera Linux KCL (Zach Dykstra)
  • 9343eb5 - zfs-chroot: small visual fixes/improvements (Zach Dykstra)

ZFSBootMenu v2.2.2

24 Oct 23:24
Compare
Choose a tag to compare

ZFSBootMenu v2.2.2 contains no runtime changes relative to v2.2.1. The creation of UEFI bundles (so-called unified kernel images, or UKIs) in generate-zbm has been updated to properly support newer UEFI stub loaders that were known to cause boot failures in the past. These changes were inspired by similar functionality in mkinitcpio and the ukify utility included with systemd.

Significant commits in this release

  • 9424356 - bin/generate-zbm: add .linux section last (Zach Dykstra)
  • 36a0a66 - bin/generate-zbm: use mkinitcpio method to calc offsets (Zach Dykstra)

ZFSBootMenu v2.2.1

13 Oct 19:12
7895ef5
Compare
Choose a tag to compare

ZFSBootMenu v2.2.1 offers a few minor bug fixes over the prior release. More significantly, the build-container images and release assets for this version include OpenZFS 2.2.0 to provide access to upgraded pools.

All users of the binary releases or the ZFSBootMenu build container are encouraged to update to ZFSBootMenu v2.2.1 before upgrading any ZFS pools.

Release assets were re-issued after it was discovered that Terminus fonts were missing.

Significant commits in this release

  • e4102ee - zfs-chroot: load keys again after setting pool r/w (Zach Dykstra)
  • 7b3dcc1 - zfs-chroot: add read-write prompt (Zach Dykstra)
  • 09e4d76 - docs/man/zfsbootmenu: fix typo (Wesley H. Gimenes)
  • 7532d1f - zfsbootmenu: protect stdout of main interface (Zach Dykstra)
  • 6528649 - zfsbootmenu-help: use cat in place of less (Zach Dykstra)
  • bf20728 - zfsbootmenu: make 'less' an optional binary (Zach Dykstra)
  • d03f9de - Add dm-crypt to recovery images, so cryptsetup works (Andrew J. Hesford)
  • b212b23 - zbm-builder.sh: add mount-options argument, document use (Andrew Gunnerson)

ZFSBootMenu v2.2.0

22 May 00:01
Compare
Choose a tag to compare

Perhaps the most significant change in ZFSBootMenu v2.2.0 is an overhaul of the project documentation. We are thrilled to welcome new member @classabbyamp to the project, who oversaw this substantial effort. Disparate documentation previously stored in Markdown files, the GitHub Wiki, POD files, and another git repository have now been combined into a single tree that is published on Read The Docs. The documentation is now maintained as an integral part of this repository and is published at https://docs.zfsbootmenu.org/. This includes:

  • Man pages
  • Run-time help pages
  • Distribution installation guides
  • Configuration and how-to documentation

Installation guides for Void Linux, Alpine, Debian Bullseye, Ubuntu 22.04 and openSUSE Leap are available, with similiar steps shared between the guides for easier maintenance and revision.

New features

Kernel command-line handling for ZFSBootMenu and boot environments has received a revamp with the zbm-kcl tool. This comprehensive tool can modify the kernel command-line for both boot environments and for the embedded command-line in binary EFI releases. Refer to zbm-kcl.8 for additional usage details.

UEFI variable handling in ZFSBootMenu has now been normalized to be consistent between Dracut and mkinitcpio. When chrooting into a boot environment, efivarfs is now mounted in the chroot. The filesystem is mounted read-only if the pool is read-only, and read-write if the pool is read-write. Additionally, if efibootmgr is present in the ZFSBootMenu initramfs, efivarfs is mounted read-write in the recovery shell.

To help users with high-DPI displays, ZFSBootMenu binary releases will now attempt to set the largest possible font size (up to 32 pixels) that ensures at least 100 text columns on the screen. Users who build their own custom ZFSBootMenu images can add contrib/20-console-autosize.sh as an early-setup hook to achieve the same effect. Consult zfsbootmenu.7 for instructions on configuring custom hooks.

The generate-zbm configuration key Kernel.Version now supports globs, such as 6.1.* or 5.*, to select the latest among a series of matching kernel versions for building a ZFSBootMenu image. The containerized build process now includes Linux versions 6.1, 5.15 and 5.10 and pre-compiled ZFS modules for each to simplify builds of custom images with recent LTS kernels.

The zsnapshots tool has been added to allow convenient access to the main snapshot interface for a specific dataset from the recovery shell. This can be useful if ZFSBootMenu is unable to detect any valid kernels in a boot environment - allowing you to roll back to a previous snapshot.

Fixes

A mutex to prevent infinite recursion when attempting to load keys for an encryption root is now restricted to the process that created it. This fixes an edge case where the interface launched from SSH would not be able to unlock an encryption root.

Artix is now a recognized distribution: ZFSBootMenu will specify the proper root argument for Artix boot environments.

Significant commits in this release

  • f688389 - zfsbootmenu: warn when canmount=on is set for root dataset (Zach Dykstra)
  • aca5ae1 - zfsbootmenu/install-helpers.sh: hard depend on chroot (Andrew J. Hesford)
  • dacce21 - contrib/zbm-sign.pl: add hook to sign ZBM EFI images for Secure Boot (Liam)
  • da94578 - zsnapshots: recovery environment helper tool (Zach Dykstra)
  • ddcee9d - generate-zbm: allow globs for kernel-version specs (Andrew J. Hesford)
  • 989449c - zfsbootmenu: add zbm.kcl_override argument handler (Zach Dykstra)
  • 534adcf - omit-drivers: blacklist intel screen orientation sensor (Zach Dykstra)
  • 7f38b12 - zfsbootmenu-core: recognize Artix in root-prefix detection (Andrew J. Hesford)
  • 84da18e - contrib/: expand font setting capabilities (Zach Dykstra)
  • f78f723 - zfsbootmenu: manage efivarfs when needed (Zach Dykstra)
  • c28a44f - zbm-kcl, zbm-efi-kcl: unify, allow streaming EFI modifications (Andrew J. Hesford)
  • d73fad8 - UEFI: improve stub handling (Zach Dykstra)
  • 5b61268 - releng: add kpartx and wipefs to recovery images (Zach Dykstra)
  • c578ef5 - Key management: properly normalize Booleans, make cache mutex per-PID (Andrew J. Hesford)

ZFSBootMenu v2.1.0

20 Dec 02:59
Compare
Choose a tag to compare

image

Deprecated features

  • syslinux support as a core part of generate-zbm will be removed in the next release. contrib/syslinux-update.sh should be used to create syslinux.cfg moving forward. Refer to the script for usage documentation.
  • Awareness of platform endianness when writing /etc/hostid was rendered moot when support for skim was removed because fzf is only supported on little-endian systems. All hostid writes assume little-endian byte order by default.

New features

  • The command line option zbm.prefer has been extended with a !! marker to import exactly one pool when multiple are available on a system. Refer to zfsbootmenu.7 for more details.
  • Users of the binary releases are now able to use their own custom hooks with the new zbm.hookroot command line option. Using this, a partition and directory specification can be provided which allows for additional scripts to be loaded at runtime. Refer to zfsbootmenu.7 for more details.
  • contrib/remote-ssh-build.sh has been provided by a new contributor. This script helps ease the creation of a custom EFI file with an embedded SSH server and keys.
  • A global application header has been added to highlight the pages that are available and the currently selected page.
  • Unless explicitly configured, generate-zbm will now default to dracut but fall back to mkinitcpio when it cannot find dracut in the path.
  • The build container ghcr.io/zbm-dev/zbm-builder has been substantially improved, making it easier to manage custom images built in a controlled, compatible environment using podman or docker.

Fixes

  • On some systems, Dracut was incorrectly using dash where bash should be used. Forbidding the inclusion of dash with Dracut resolves this issue.
  • The drm Dracut module has been blacklisted. ZFSBootMenu should never attempt to load firmware for video cards.
  • When using ZFSBootMenu to pin a kernel, ensure that an anchor is attached to the end of the pin. This resolves incorrect matches on systems that have unversioned kernels.
  • To avoid a potential conflict between ZFS pool names and files/directories created by ZFSBootMenu, all detected boot environment mountpoints have been moved to a dedicated environments/ sub-directory.

Significant commits in this release

  • 8e6ca4a - set_default_kernel: properly clear default when no kernel is specified (Andrew J. Hesford)
  • 0b40f44 - interface: enable left/right arrow key navigation (Zach Dykstra)
  • 235eb17 - Stop installing zpool.cache (Andrew J. Hesford)
  • 5427883 - Improve containerized builds (Andrew J. Hesford)
  • c023517 - Automatically select initramfs generator when not forced (Andrew J. Hesford)
  • 6223804 - Update artifact uploader to latest version (Zach Dykstra)
  • 00ef434 - Add/use border label feature flag (Zach Dykstra)
  • 562b14a - Fix booting test VMs on some hardware (Zach Dykstra)
  • 8d3bbff - Fix kernel selection after introducing $BASE/environments (Alexander Lobakin)
  • b743893 - contrib/README.md: document contrib scripts (Andrew J. Hesford)
  • a3f15ed - generate-zbm: deprecate syslinux support (Andrew J. Hesford)
  • 9f85003 - Include the OpenSSH client in recovery images (Zach Dykstra)
  • 91900d3 - Explicitly require bash, blacklist dash (Andrew J. Hesford)
  • 3399f4b - Move dataset mountpoint to $BASE/environments/ (Zach Dykstra)
  • 7eb7780 - Allow imports of hooks from external sources at runtime (Andrew J. Hesford)
  • 57b46a2 - Extend capabilities of zbm.prefer (Zach Dykstra)
  • af1c74b - Remove diff from early days of playing around (Zach Dykstra)
  • 3da5547 - Center key bind text on horizontal layout fzf screens (Zach Dykstra)
  • df8ab05 - Support busybox as /bin/sh in chroot (Zach Dykstra)
  • 2fa207e - fix: ensure $uefi_stub is defined before checking if it is a file (Zach Dykstra)
  • 906ce3b - Add anchor to end of string when pinning a kernel (Zach Dykstra)
  • 9c91afa - Make default efi path distro agnostic (gardar)
  • 333b6d8 - Wrapper Build Script for ZBM with SSH access (Gerhard Roethlin)
  • 05dbf11 - Show /etc/zbm-commit-hash in zreport (Zach Dykstra)
  • d4b35a0 - zbm-build.sh: don't upgrade packages when installing custom software (Andrew J. Hesford)
  • 10e3624 - Exploit common configurations for recovery/release images (Andrew J. Hesford)
  • 1be8ed0 - Drop drm module from standard dracut config (Andrew J. Hesford)
  • 9b57d8a - testing: move Ubuntu to 22.04 LTS, make column available to Debian/Ubuntu (Andrew J. Hesford)
  • f2d3336 - Add a contrib script to snapshot the BE prior to boot (Zach Dykstra)

ZFSBootMenu v2.0.0

28 Jun 15:35
Compare
Choose a tag to compare

ZFSBootMenu 2.0.0 introduces a major internal reorganization that allows images to be built with initramfs generators other than dracut and includes some helpful command-line utilities. This release is based on Linux 5.10.125 and ZFS 2.1.5.

New features

  • Dracut is now optional; ZFSBootMenu images may currently be built with mkinitcpio
  • Generalizations to support mkinitcpio should also apply to, e.g., initramfs-tools, although installation hooks for initramfs-tools have not (yet) been written
  • A new utility, zbm-efi-kcl, provides the ability to edit the kernel command-line embedded in a ZBM EFI bundle rather than requiring regeneration of the bundle
  • A new utility, zbm-builder.sh, provides a simple interface for creating custom, local images using the official ZBM build container; it is now possible to build local images without installing ZBM or its Perl dependencies

Fixes

  • Video drivers are now omitted from images by default to avoid GPU initialization issues in the final boot environment
  • General fixes to shell functions were made in support of using busybox in mkinitcpio images
  • The online command-line editor now provides an option to revert to the default

Significant commits in this release

  • 8933a57 - Basic EFI KCL editor (Zach Dykstra)
  • ada36c8 - Include cryptsetup in recovery images (Zach Dykstra)
  • f1b0270 - Include cryptsetup in containarized builds (Grzegorz Uriasz)
  • fd52d7c - Omit video drivers by default (Zach Dykstra)
  • 65dd0cd - Add option to revert to default KCL via ctrl-t in draw_be (Zach Dykstra)
  • 632b24f - Add special escape sequences to PS1 (Zach Dykstra)
  • 3d9f57b - Build recovery images in CI/CD (Zach Dykstra)
  • 9368171 - Accept any root= value as valid (Zach Dykstra)
  • 7982971 - zbm-builder.sh: support custom build/source paths and hooks (James R. Todd)
  • fc83894 - Document scrolling keys in help viewer (Zach Dykstra)
  • 6f09d39 - Fix broken links (Jip de Beer)
  • 64936f3 - Add minimal documentation to ESP sync hook (Zach Dykstra)
  • d559458 - Add BUILD.md, a quick-start containerized build guide (James Todd)
  • 1aca5d1 - Bug fixes and use local repository option for zbm-builder.sh (James Todd)
  • 8b1aade - Make the emergency shell slightly fancy (Zach Dykstra)
  • 5a5ab0b - Write data to console to recalculate size (Zach Dykstra)
  • eac0547 - install-helpers.sh: explicitly require setsid (Andrew J. Hesford)
  • dbd9642 - Replace 'tr' with bash string manipulation (Zach Dykstra)
  • 8916a10 - Update luks-unlock.sh to work with current libraries (Zach Dykstra)
  • 33883e5 - zfsbootmenu-core.sh: drop preload_be_cmdline, improve KCL caching (Andrew J. Hesford)
  • 7548af5 - zbm-kcl: remove dracut from ZBM_MODULEDIR warning (Andrew J. Hesford)
  • 306f36b - Fix install location for common module files (Zach Dykstra)
  • 644b0f1 - Use an early-setup hook to force console init in release images (Andrew J. Hesford)
  • ec89a7c - Use column to layout footer (Zach Dykstra)
  • 2bd6757 - generate-zbm: remove INI migration support (Zach Dykstra)
  • 65167e6 - Define all ZBM requirements in install-helpers.sh (Andrew J. Hesford)
  • 812f9b4 - Remove support for deprecated KCL sources (Andrew J. Hesford)
  • 3dcaa88 - Improve container-based builds and support mkinitcpio images (Andrew J. Hesford)
  • f93687f - Annotate mkinitcpio.conf to explain ZBM specifics (Andrew J. Hesford)
  • 91b4b3b - De-prioritize Dracut as the primary generator (Zach Dykstra)
  • af34fa9 - Support building mkinitcpio images in generate-zbm (Andrew J. Hesford)
  • 50a2da4 - General fixes to support busybox in mkinitcpio images (Andrew J. Hesford)
  • 1fe8c4c - Add support for mkinitcpio (Andrew J. Hesford)
  • e1bd708 - zbm-builder.sh: add script to build custom images using GHCR container (Andrew J. Hesford)
  • 20a8ac7 - Add manual page for zbm-kcl (Andrew J. Hesford)

ZFSBootMenu v1.12.0

26 Jan 05:39
Compare
Choose a tag to compare

NOTE 2022-02-12: A configuration issue prevented keymap, font and other console initialization steps from running in the pre-generated release and recovery binaries. The configuration has been adjusted to correct this problem and the release and recover binaries, together with their signatures, have been updated for this release. The source distribution was not affected and has not been updated.

This release brings multiple changes to how ZFSBootMenu works at run-time. These changes were introduced in an effort to:

  1. Reduce the ZFSBootMenu startup time,
  2. Remove dependencies on Dracut-specific helper functions, and
  3. Make ZFSBootMenu more modular and more easily maintained.

Prior to this release, the only Dracut helper functions in use were those that retrieve command-line arguments to dynamically configure ZFSBootMenu. These have all been replaced by internal functions that are both more correct and roughly an order of magnitude faster.

With the help of the flamegraph visualization tool, multiple unnecessary Dracut modules have been pruned from the binary releases. The net effect of these changes is a large decrease in the time spent booting to either the menu or directly to a boot environment. [Note: the upper "before" image represents a total run time of 8.3 seconds, while the lower "after" image represents a total run time of 4.8 seconds, a reduction of more than 40 percent.]

Before
After

ZFSBootMenu v1.12 is expected to be the last release series before ZFSBootMenu v2.0. The internal changes and dramatically reduced dependence on Dracut will allow ZFSBootMenu v2.0 images to be built using either dracut or mkinitcpio.

Deprecated features

  • Support for skim has been removed. ZFSBootMenu now requires fzf for all menu functionality.
  • Support for using /etc/default/grub and /etc/default/zfsbootmenu for boot environment kernel command line parameters will be removed in the next release.

Fixes

  • Use kexec --kexec-syscall-auto to try multiple different ways to load a kernel
  • Change the release files names to better indicate to rEFInd that they are Linux kernels
  • root= is always removed/suppressed when passing a commandline into the boot environment
  • More kernel commandline parameters are validated for correctness

New feaures

  • Add the zbm-kcl userland tool to view and edit boot environment kernel command lines
  • generate-zbm can now execute user hooks before and after an initramfs or EFI bundle has been created
  • Teardown hooks now have access to variables indicating which boot environment, kernel and initramfs were selected
  • We now provide recovery builds that include networking and a few disk-related tools
  • Buildah is now used to create build images
  • Countdown timers now have colored text by default

Significant commits in this release

  • bd736f1 - Add a shell utility to modify and review KCL properties (Andrew J. Hesford)
  • 466e4d2 - Allow rollbacks from the snapshot menu (Andrew J. Hesford)
  • b9c4ed9 - Add Alpine to the ZBM test suite (Andrew J. Hesford)
  • 2c8eacc - Add support for early/late hooks in generate-zbm (Zach Dykstra)
  • 1ca3cf4 - Define BE selection variables in teardown hook environment (Andrew J. Hesford)
  • 89b6273 - Enable profiling framework in core ZFSBootMenu tools (Zach Dykstra)
  • 46b0eb9 - Completely rewrite KCL handling (Andrew J. Hesford, Zach Dykstra)
  • 6789ee2 - Provide, and use, a buildah script to construct zbm-builder images (Andrew J. Hesford)
  • 70bad38 - Add initial boot-environment guide (Andrew J. Hesford)
  • 4b836f3 - Generate release and recovery image builds (Zach Dykstra)
  • 044df51 - Separate core library routines from main UI routines (Andrew J. Hesford)

ZFSBootMenu v1.11.0

31 Oct 21:05
Compare
Choose a tag to compare

Updated defaults

  • The chroot hot-key has been changed to MOD+J to avoid a key conflict with the usage of CTRL+I.

Deprecated features

  • Support for reading the KCL from /etc/default/zfsbootmenu or /etc/default/grub will be removed in a future release. During the transition period, ZFSBootMenu will attempt to automatically convert a deprecated KCL configuration to the org.zfsbootmenu:commandline property.

Fixes

  • The Makefile now correctly installs all files (this fixes the missing help pages)
  • Make the width of the count down menu consistent as digits are dropped from the timer
  • Remove a spurious function call in the preview renderer
  • Where possible, prefer built-in Bash regex support over forking to grep
  • Remove uses of basename, prefering Bash string manipulation
  • Properly find the zpool executable when creating an initramfs
  • Set a consistent environment for SSH and recovery shells
  • Set default columns and rows for serial consoles when none are provided
  • Improve the reliability of detecting which libgcc_s.so to install
  • Set keylocation and a corrected encryption root for full-copy clones

New features

  • Allow taking over a running instance of ZFSBootMenu via zbm
  • Create a docker/podman image, based on Void Linux, that can be used to create ZFSBootMenu images
  • Allow diffing a snapshot with another snapshot, instead of just with the current state of the filesystem
  • Add early hooks, just after kernel modules have been loaded but before any pools have been imported
  • org.zfsbootmenu:keysource can now be an arbitrary ZFS filesystem instead of another boot environment
  • Snapshots can now be created, providing a starting point for a new boot environment
  • zreport is available in the recovery shell, which can provide details-at-a-glance for bug reports
  • The testing/ infrastructure has been updated to allow the installation of multiple distributions in one command
  • The Debian testing environment has been updated to Bullseye
  • EFI bundles can be built and tested under testing/

Significant commits in this release

  • 32f138f - Try to inherit key (encryptionroot) in duplicate_snapshot (Andrew J. Hesford)
  • 357aa5e - Make keylocation of target match that of source in duplicate_snapshot (Zach Dykstra)
  • c048ead - testing: move debian to bullseye (Andrew J. Hesford)
  • 7bb154d - testing: allow installation of multiple distros in one setup run (Andrew J. Hesford)
  • 8fab2b5 - Rework GitHub actions to also build assets on push (Zach Dykstra)
  • 8922f87 - Add zreport function (Zach Dykstra)
  • f0d402c - Support creating EFI bundles in run.sh, along with booting them. (Zach Dykstra)
  • 2c58479 - Improve search for libgcc_s in module-setup.sh (Andrew J. Hesford)
  • 726894f - Default stty cols/rows values for serial consoles (Zach Dykstra)
  • 78656b0 - Small fixes for SSH usage (Zach Dykstra)
  • 0e14c7b - Update zfsbootmenu.7 to reflect new org.zfsbootmenu:keysource behavior (Andrew J. Hesford)
  • 891e44a - Allow snapshot creation / move logic to function (Zach Dykstra)
  • d208103 - Make cache_key aware of mountpoints on key sources (Andrew J. Hesford)
  • 2d03ff5 - Remove explicit path to zpool ldd check (Zach Dykstra)
  • 29a1049 - Deprecate KCL in /etc/default/{zfsbootmenu,grub} (Andrew J. Hesford)
  • c2a1bee - Support early hooks, add example luks-unlock.sh (Zach Dykstra)
  • 62f7315 - Enable snapshot <> snapshot diffing (Zach Dykstra)
  • c920c76 - Replace mod+i with mod+j (Zach Dykstra)
  • a79b9d0 - zkexec: recovery shell arbitrary kexec wrapper (Zach Dykstra)
  • 8d4d776 - Makefile: recursively install dracut module (Andrew J. Hesford)
  • c1feb56 - recovery shell quality of life improvements (Zach Dykstra)
  • 5876ca9 - Create a global debug/trace log viewer (Zach Dykstra)
  • 83b1766 - Overhaul, generalize containerized build scripts (Andrew J. Hesford)
  • cfa0455 - releng/make-binary.sh: use containerized image builds (Andrew J. Hesford)
  • 4166967 - Add Dockerfile and Compose service to build ZBM images (Thomas Oster)
  • 687295a - Allow zfsbootmenu to takeover a running instance (Zach Dykstra)
  • 9000687 - Start adding aliases for missing niceties (Zach Dykstra)
  • 804ef02 - Make sure feature flags are available everywhere (Zach Dykstra)
  • 739540a - Error out in testing if machine type isn't known to run.sh. (Érico Nogueira Rolim)