Zfsbootmenu Versions Save

ZFS Bootloader for root-on-ZFS systems with support for snapshots and native full disk encryption

v2.3.0

5 months ago

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)

v2.2.2

6 months ago

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)

v2.2.1

7 months ago

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)

v2.2.0

11 months ago

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)

v2.1.0

1 year ago

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)

v2.0.0

1 year ago

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)

v1.12.0

2 years ago

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)

v1.11.0

2 years ago

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)

v1.10.1

2 years ago

ZFSBootMenu 1.10.1 brings a pair of fixes to issues seen in the wild. Release artifacts are built with Linux 5.12.14 and ZFS 2.1.0 under Void/glibc.

Fixes

  • Remove a spurious warning when generate-zbm incorrectly detected a mismatch between /etc/hostid and the run-time spl_hostid SPL module parameter.
  • Fix a race condition between ZFSBootMenu and udev when attempting to load ZFS/SPL kernel modules, resulting in an incorrect drop to a recovery shell.

Significant commits in this release

  • 2a9a6ab - Relax insmod spl failures, try to load zfs.ko (Zach Dykstra)
  • f657717 - generate-zbm: fix hostid comparison (Andrew J. Hesford)

v1.10.0

2 years ago

ZFSBootMenu 1.10.0 brings some minor new features and some behavior changes that should improve the booting and configuration experience. Notably, some default behaviors have changed in this release. Read on for details about how this may impact your configuration.

Updated defaults

Previous releases have had zbm.import_policy=strict and zbm.set_hostid=0 set by default. Starting with this release, the default values are zbm.import_policy=hostid and zbm.set_hostid=1. zbm.import_policy=hostid can help ZFSBootMenu automatically and safely import a pool when the wrong hostid is provided. zbm.set_hostid=1 passes the hostid used to import the pool to the boot environment, ensuring that it can also correctly import the pool.

Please refer to Command-Line Parameters for a compete description of both of these feature flags.

Fixes

  • When no hostid is provided or discoverable, use 0x00bab10c instead of 0x0.
  • Force SPL to use /etc/hostid and always ensure that a valid hostid is stored in the file.
  • Blacklist Plymouth; the splash screens it draws interferes with the ZBM interface.
  • Persist runtime configuration to a file that is used when the interface is launched normally or through SSH.

New features

  • When exiting the diff browser, exit back to the snapshot list with the snapshot selection preserved.
  • Set a hostname in ZFSBootMenu so that it shows up in the pool history for read/write operations.
  • When generating an initramfs, warn if /etc/hostid doesn't match spl_hostid provided as a module parameter to SPL.
  • Support console= kernel parameters with a ,speed suffix. This is normally used when setting a serial port as the machine console.
  • Add a shortcut key to remove the pinned kernel value for a boot environment.

Allow references to parent properties in org.zfsbootmenu:commandline

Any reference to %{parent} in org.zfsbootmenu:commandline will be replaced with the value of the same property on the parent filesystem (with parent references above recursively expanded), allowing easy specification of common options at a mutual parent of two BEs and overrides or additions of individual options per-BE. The value of %{parent} is always an empty string on a root filesystem.

This is not intended to be sophisticated, and %{parent} appearing within other words will be replaced regardless. The assumption is that %{parent} is unique enough and will not conflict with real KCL options, so dumb global replacement is sufficient.

zpool import process improvements

The existing zbm.prefer option has been extended to support defining a mandatory pool. Append ! to the pool name to indicate that the specific pool MUST be imported before any other pool imports will be attempted.

  • zbm.prefer=zroot! will require that zroot be imported on boot.

Between pool import attempts, zbm.import_delay (default of 5 seconds) controls how long to pause. During this delay window, the escape key can be used to access a full recovery shell.

Either one of spl_hostid or spl.spl_hostid can be provided on the ZFSBootMenu kernel command line, in either hex or decimal format. The parameter value is checked to ensure that it's either valid hex or decimal, and then normalized to an 8 digit hex value.

Additional steps have been taken to ensure that SPL can be loaded if an invalid spl.spl_hostid value is provided on the kernel command line. A more strict test is now used to determine if the ZFS kernel module has been loaded and drop to a recovery shell if not.

Significant commits in this release

  • c759df9 - For musl/non-dracut compat, change default hostid to non-zero value (Zach Dykstra)
  • 8886db3 - Force spl.spl_hostid=0 when matching hostid (Andrew J. Hesford)
  • 24e6e6a - Blacklist plymouth; it directly conflicts with how we manage the tty (Zach Dykstra)
  • 9875115 - Store options from KCL in a file for easy sourcing (Andrew J. Hesford)
  • 98f3164 - Use fzf's execute[] function to render draw_diff (Zach Dykstra)
  • 64bd359 - Set a hostname in ZBM, check if spl.spl_hostid matches /etc/hostid (Zach Dykstra)
  • 40dd0e3 - Small quality of life improvements (Zach Dykstra)
  • 635d140 - Add keyboard shortcut to remove pinned kernel (Zach Dykstra)
  • 04f5b87 - Allow references to parent properties in org.zfsbootmenu:commandline (Andrew J. Hesford)
  • 5142aa1 - Support pool import retries (Andrew J. Hesford)
  • e2caa81 - Improved pool imports (Andrew J. Hesford)
  • 31cc1b3 - Validate spl_hostid, control loading spl.ko (Zach Dykstra)
  • ccfc92c - Change ZBM hostid handling defaults (Zach Dykstra)