Releases: zbm-dev/zfsbootmenu
ZFSBootMenu v1.4rc1
ZFSBootMenu 1.4 includes significant internal changes and some user-visible functional changes in the generate-zbm
script.
Fixes
- Internal improvements to
generate-zbm
to improve consistency and facilitate future development. - Management of versioned image retention should now be more consistent with expectation. Versioned ZBM images now increment a revision number when existing images with the same version already exist, and the retention policy preserves a configurable number of revisions for the current version alongside the latest revision of each of the same number of prior versions.
- Improved error handling should make failures in
generate-zbm
easier to understand.
New features
- Move from an INI configuration format to YAML, which should provide more flexibility for future enhancements.
- Provide a
--migrate
command-line option to convert existing INI configurations to the new format. - Add configuration options to change default behavior for
--kernel
,--kver
and--prefix
to makegenerate-zbm
easier to incorporate on non-Void systems. - Add a configuration option to change the default behavior for
--version
to allow customized output versioning of images. - Support string interpolation of
%current
or%{current}
tags in--kver
and--version
values. - Add a
--cmdline
command-line option to override the configuredCommandLine
value without editing the configuration file.
Significant commits in this release:
3b2b2f0 - Add explicit --migrate option to generate-zbm (Andrew J. Hesford)
3cd3a8e - Improve error handling and automatic config conversion (Andrew J. Hesford)
80e0c30 - Switch syslinux entry to heredoc, fix syslinux.cfg file copy (Zach Dykstra)
6351226 - Move to YAML configuration, improve version handling (Andrew J. Hesford, Zach Dykstra)
5fdb872 - Add configuration options for kernel, version and prefix (Andrew J. Hesford)
79295ec - Add an optional parameter to safeCopy: (Zach Dykstra)
8aa133f - Clean up control flow in generate-zbm (Andrew J. Hesford)
ZFSBootMenu v1.3.1
This release fixes an issue found minutes after v1.3 was tagged and released - such is life. After timing out on the countdown menu, the screen is now cleared before displaying a prompt for the pool password.
ZFSBootMenu v1.3
This release features several fixes and new features.
Fixes
- When creating a boot image,
generate-zbm
will fail if the EFI System Partition (BootMountPoint
in the configuration) is not and cannot be mounted. - When
generate-zbm
creates backup kernels, initramfs images or UEFI bundles, timestamps of the original files will be preserved when possible, which may help boot loaders like rEFInd properly order the images. - Some display issues in the boot menu have been fixed.
New features
The following new features should allow ZFSBootMenu to work with distributions such as Arch or Ubuntu:
- The Dracut module now searches for a much broader range of kernel/initramfs pairs in boot environments, including unversioned kernels with names like
linux
orvmlinuz
. generate-zbm
now has a--kver
argument that can specify a version number when one cannot be correctly determined from the name of a kernel file, allowing creation of ZFSBootMenu images on systems like Arch that do not encode version information in kernel names.- When starting a boot environment, the
root=
command-line argument is now set with a prefix (e.g., thezfs:
part ofroot=zfs:pool/ROOT/void
) that is chosen based on distribution ID in/etc/os-release
or/usr/lib/os-release
, if available; the default selection can be overridden by setting theorg.zfsbootmenu:rootprefix
property.
In addition:
- In the ZFSBootMenu snapshot browser, an option to view a
zfs diff
between the live boot environment and a selected snapshot allow convenient review of the changes since the snapshot was taken. - ZFSBootMenu now attempts to detect an active suspend-to-disk image and prevent any operations on ZFS pools that could lead to corruption on resume.
- The currently selected boot environment and kernel are displayed throughout submenus.
- In addition to identifying boot environments by the property
mountpoint=/
, ZFSBootMenu will also identify boot environments with the propertiesmountpoint=legacy
andorg.zfsbootmenu:active=on
. - Boot environments with
mountpoint=/
can be hidden from ZFSBootMenu by setting the propertyorg.zfsbootmenu:active=off
.
Significant commits in this release:
7122be9 - Use mountpoint to check for ESP (Zach Dykstra)
315e326 - Check return of mount operation (Zach Dykstra)
8e434b1 - Allow root prefix to be customized for other distributions (Andrew J. Hesford)
fcaba86 - Support unversioned kernel naming in generate-zbm (Andrew J. Hesford)
294a84d - Broaden search for kernels and initramfs images (Andrew J. Hesford)
2263dbe - Handle kernels with multi-part versions (Zach Dykstra)
95f65a6 - Initial support for org.zfsbootmenu:active visibility (Andrew J. Hesford)
69c3d63 - Draw the preview header on kernel, snapshot and diff screens (Zach Dykstra)
83b2cbb - Initial support for resume guard (Andrew J. Hesford)
6828550 - Initial snapshot diff browser (Zach Dykstra)
4c0a968 - Report source size when cloning/duplicating a snapshot (Zach Dykstra)
ZFSBootMenu v1.3rc2
This release contains all of the fixes and new features in v1.3rc1, as well as some fixes to command-line generation that should allow ZFSBootMenu to properly boot Arch Linux systems.
ZFSBootMenu v1.3rc1
This release features several fixes and new features.
Fixes
- When creating a boot image,
generate-zbm
will fail if the EFI System Partition (BootMountPoint
in the configuration) is not and cannot be mounted. - When
generate-zbm
creates backup kernels, initramfs images or UEFI bundles, timestamps of the original files will be preserved when possible, which may help boot loaders like rEFInd properly order the images. - Some display issues in the boot menu have been fixed.
New features
The following new features should allow ZFSBootMenu to work with distributions such as Arch or Ubuntu:
- The Dracut module now searches for a much broader range of kernel/initramfs pairs in boot environments, including unversioned kernels with names like
linux
orvmlinuz
. generate-zbm
now has a--kver
argument that can specify a version number when one cannot be correctly determined from the name of a kernel file, allowing creation of ZFSBootMenu images on systems like Arch that do not encode version information in kernel names.- When starting a boot environment, the
root=
command-line argument is now set with a prefix (e.g., thezfs:
part ofroot=zfs:pool/ROOT/void
) that is chosen based on distribution ID in/etc/os-release
or/usr/lib/os-release
, if available; the default selection can be overridden by setting theorg.zfsbootmenu:rootprefix
property.
In addition:
- In the ZFSBootMenu snapshot browser, an option to view a
zfs diff
between the live boot environment and a selected snapshot allow convenient review of the changes since the snapshot was taken. - ZFSBootMenu now attempts to detect an active suspend-to-disk image and prevent any operations on ZFS pools that could lead to corruption on resume.
- The currently selected boot environment and kernel are displayed throughout submenus.
- In addition to identifying boot environments by the property
mountpoint=/
, ZFSBootMenu will also identify boot environments with the propertiesmountpoint=legacy
andorg.zfsbootmenu:active=on
. - Boot environments with
mountpoint=/
can be hidden from ZFSBootMenu by setting the propertyorg.zfsbootmenu:active=off
.
Significant commits in this release:
7122be9 - Use mountpoint to check for ESP (Zach Dykstra)
315e326 - Check return of mount operation (Zach Dykstra)
8e434b1 - Allow root prefix to be customized for other distributions (Andrew J. Hesford)
fcaba86 - Support unversioned kernel naming in generate-zbm (Andrew J. Hesford)
294a84d - Broaden search for kernels and initramfs images (Andrew J. Hesford)
2263dbe - Handle kernels with multi-part versions (Zach Dykstra)
95f65a6 - Initial support for org.zfsbootmenu:active visibility (Andrew J. Hesford)
69c3d63 - Draw the preview header on kernel, snapshot and diff screens (Zach Dykstra)
83b2cbb - Initial support for resume guard (Andrew J. Hesford)
6828550 - Initial snapshot diff browser (Zach Dykstra)
4c0a968 - Report source size when cloning/duplicating a snapshot (Zach Dykstra)
ZFSBootMenu v1.2
This release features substantial code and idea contributions from @ahesford . Thank you for all of your help writing features, debugging code and improving documentation.
Snapshot overhaul
Previously, snapshots could be cloned to a boot environment with a pre-generated, and often long, BE name. Substantial quality of life improvements were made here, including:
- Add the ability to do a full zfs send | zfs recv clone from a local snapshot. This lets you establish a new boot environment that is not dependent on any other environments or snapshots.
- Add the ability to clone and promote a snapshot, or simply clone it.
- When cloning a snapshot, local ZFS properties of the parent filesystem are now transferred to the clone.
- For all snapshot operations, you can now directly enter a boot environment name. This name is checked for character validity, and to confirm that it is not already taken.
Always up-to-date menu system
Any time you transition from one menu to another (Snapshots, Kernels, recovery shell), the list of boot environments and kernels is completely regenerated. This helps remove potential disconnects between the state of your pool and boot environments and the ZFSBootMenu interface.
UEFI bundle improvements
If you create unversioned UEFI bundles for static boot entries, generate-zbm
will now create a -backup
file for you on upgrade. This will allow you a recovery option if the active UEFI bundle has a problem.
Protect against missing kernel modules
When creating a new initramfs, the zfsbootmenu
Dracut module needs to install a number of ZFS-related kernel modules. Previously, the modules were installed through a Dracut helper function that did not verify if the copy succeeded. This process has been reworked to ensure that all of the required kernel modules are installed in the initramfs, or the creation of the image is marked as a failure. If it is marked as a failure, existing/current images are not deleted or otherwise replaced.
Set default kernel
Much like setting a default boot environment, you can now set a default kernel for a specific boot environment. You no longer need to manually set a kernel version in your booted OS, you can simply do it from the menu!
Shellcheck
On commit, the shell scripts that power the boot menu and Dracut setup are run through a validator to check for common errors and pitfalls. This can help reduce some classes of bugs.
ZFSBootMenu v1.1
This release includes a number of small fixes and improvements.
Fixes
- Correctly handle exiting the recovery shell, fixing an infinite loop. A reboot is no longer required to recover from the recovery shell. Thanks, @ahesford.
- Check that the EFI stub file is present on disk at the specified location. If the file is missing and an EFI bundle is requested, exit with an error.
- Minor documentation fixes.
Features
- Handle console fonts defined on the kernel command line. This is useful for systems with a 4k display. You should now be able to read the screen without a magnifying glass. Thanks to @ahesford for the significant time spent on tracking this down.
- Instead of calling
objcopy
directly,dracut
is now used to generate a bundled EFI file. This means that the bundled EFI file can now be signed by Secure Boot keys! Thanks to @ericonr for this feature - and learning a bit of Perl to do it!
No configuration file changes are needed to use this release. Enjoy!
ZFSBootMenu v1.0
We're jumping straight up to v1.0!
Small changes
- Set the kernel log level to 0 when in the menu system, then restore it to the original value on boot
- Reverse sort the kernel list, so the most recent is always first
- Add an initial chroot helper script,
zfs-chroot
for the recovery shell. It can be invoked aszfs-chroot pool/ROOT/BE
. - Set the default config path in
generate-zbm
to/etc/zfsbootmenu/conf.d
- Allow the EFI stub file to be defined in config.ini
- Optionally read the kernel command line from
/etc/default/zfsbootmenu
Large changes
- Clean up or whitelist all issues in
zfsbootmenu-lib.sh
,zfsbootmenu-preview.sh
andzfsbootmenu.sh
noted by shellcheck. - Support entering a custom kernel command line via
alt-c
on the main menu. The input line is pre-filled with the command line that would have been used on the next boot, for that environment. This command line is NOT persisted between reboots, it's simply here to let you recover an unbootable system. - Add support for reading the kernel commandline from the ZFS property
org.zfsbootmenu:commandline
. This property is now considered the default/primary source of truth for the kernel command line - it takes precedence over/etc/default/zfsbootmenu
and/etc/default/grub
.
A big thank you to @ahesford for his code contributions and testing leading up to this release!
ZFSBootMenu v1.0rc2
This release contains all of the fixes and features from 1.0rc1, as well as the following:
- Add support for reading the kernel commandline from the ZFS property
org.zfsbootmenu:commandline
. This property takes precedence over/etc/default/grub
and/etc/default/zfsbootmenu
- Clean up or whitelist all issues in
zfsbootmenu-lib.sh
,zfsbootmenu-preview.sh
andzfsbootmenu.sh
noted by shellcheck.
A big thank you to @ahesford for his code contributions and testing leading up to this release candidate. It is very much appreciated!
ZFSBootMenu 1.0rc1
This release has been a long time coming. In no particular order, it contains the following:
- Set the kernel log level to 0 when in the menu system, then restore it to the original value on boot
- Reverse sort the kernel list, so the most recent is always first
- Add an initial chroot helper script for the recovery shell
- Set the default config path in
generate-zbm
to/etc/zfsbootmenu/conf.d
- Allow the EFI stub file to be defined in config.ini
- Support entering a custom kernel command line via
alt-c
on the main menu. The input line is pre-filled with the command line that would have been used on the next boot, for that environment. This command line is NOT persisted between reboots, it's simply here to let you recover an unbootable system.