All notable changes to BootPrep will be documented in this file.
The project follows Semantic Versioning.
- Patch releases (x.y.Z) contain maintenance fixes and compatibility improvements.
- Minor releases (x.Y.z) introduce new functionality while maintaining compatibility.
- Major releases (X.y.z) may introduce incompatible changes.
- Added bounded, root-only run logs for installation, upgrade, direct preparation, explicit activation, and Snapper rollback. Logs retain the beginning, end, and final status, are limited to 1 MiB each, and keep the ten newest runs.
- Added single-operation locking and signal forwarding to the logging wrapper.
- Added a shared reconciliation helper that discovers independent Btrfs subvolumes and adopts their mounts into the system being prepared.
- Added automated tests for logging security and retention, subvolume reconciliation, nonstandard root names, mount-definition conflicts, and installer integration.
- Expanded
fstabreconciliation from root and home snapshot stores to independent subvolumes belonging to the stable root layout, including/var/lib/bootprep. - Bind-mounted an independently mounted
/var/lib/bootprepinto the selected snapshot so logs, backups, and state persist across activation and rollback. - Excluded historical snapshots, sibling layouts, and paths beyond a separate-home boundary from automatic adoption.
- Preserved existing mount definitions and required review for conflicting native mount units, with a narrowly verified compatibility case for an unused vendor
/var/lib/machines.rawunit. - Made a healthy existing installation a successful no-change result and distinguished partial installations from legacy installations.
- Limited the Snapper plugin trigger to the
rollback-postcallback.
- Completed both BootPrep regression stages on Debian, Kubuntu, TUXEDO OS, Manjaro, CachyOS, and EndeavourOS: explicit
bootprep-btrfs activateand native Snapper rollback. - Confirmed stable-root normalization for nonstandard root subvolume names, including
@rootfs.
- The installer now verifies the required GRUB configuration layout before installing BootPrep and stops safely when
/boot/grub/grub.cfgis unavailable, preventing a successful installation that would fail later during boot preparation.
- For an uncommon GRUB-on-UEFI layout where
/boot/grubis absent but/boot/efi/grub/grub.cfgexists, the installer now creates and verifies a compatibility symlink at/boot/grub.
- Replaced the patched
10_linux, runtime-state, and manual EFI redirect architecture with direct preparation inside the selected writable snapshot. - BootPrep now mounts and enters the selected snapshot, runs
grub-mkconfig -o /boot/grub/grub.cfg, and refreshes the existing EFI loader while preserving the system's firmware boot entry and boot order. - Snapshot discovery now derives the base root subvolume instead of requiring it to be named
@, validates the selected snapshot directly, and mounts it by numeric Btrfs subvolume ID so discovery is independent of the running root's path-reporting context. - EFI bootloader discovery now validates existing GRUB or shim loader directories, compares OS identities case-insensitively, preserves the existing bootloader ID spelling, and refuses ambiguous targets.
- The installer is now limited to fresh installations and redirects complete or partial existing installations to the upgrader.
- The upgrader now supports clean upgrades across supported distributions and migration from BootPrep 1.x.
- Removed the BootPrep patch and diversion of
/etc/grub.d/10_linuxfrom the active architecture. - Removed
BOOTPREP_BTRFS_SNAPSHOT_BOOTINGfrom/etc/default/grub. - Removed
/usr/lib/bootprep/bootprep-runtime.sh. - Removed
/var/lib/bootprep/next-bootand pending boot transaction state. - Removed manual backup, retention, and rewriting of EFI-side
grub.cfgfiles.
- Version 1 installations are migrated through
bootprep-upgrade.sh. - The upgrader verifies and restores the diverted upstream
10_linux, removes the diversion, archives the patched v1 script, removes the obsolete GRUB setting, and archives legacy runtime artifacts. - All removed v1 files are preserved in a timestamped migration archive beneath
/var/lib/bootprep/backups. - The v1 migration path remains available for users upgrading directly from v1 to later releases.
- Retained UEFI-only support with the EFI System Partition mounted at
/boot/efi. - Added support for distributions that embed the GRUB prefix in the EFI executable instead of using an EFI-side
grub.cfg. - Across Debian, Kubuntu, and GRUB-based installations of EndeavourOS and CachyOS, validated fresh installation, clean upgrades, explicit snapshot activation, native Snapper rollback, and reboot testing, with migration from BootPrep 1.x to 2.0.0 validated on Debian.
- Added writable snapshot verification.
- Added early Btrfs, UEFI, ESP, GRUB tool, platform-target, and bootloader-ID validation.
- GRUB installation deliberately uses
--no-nvramto preserve existing firmware boot entries and boot order while refreshing the loader files on the EFI System Partition. - Cleanup no longer removes temporary directories while mounts remain active.
- Added
bootprep-btrfs, a lightweight Btrfs orchestrator. - Added
bootprep-btrfs activate <snapshot-number> [mount-point]for activating an existing snapshot and preparing it for the next boot. - The
activateworkflow makes the selected snapshot writable, sets it as the Btrfs default subvolume, and invokesbootprep prepare <snapshot-number>as the final preparation step. - The optional mount point defaults to
/. - Commands not handled as BootPrep-specific workflows are passed directly to
/usr/bin/btrfswithout interpretation.
bootprep-install.shnow installs and verifiesbootprep-btrfsalongside the BootPrep engine and Snapper plugin.bootprep-upgrade.shnow reinstalls and verifiesbootprep-btrfsalongside the BootPrep engine and Snapper plugin.- Manual Btrfs snapshot activation can now be performed through
bootprep-btrfs activateinstead of manually coordinating the individual Btrfs operations and BootPrep preparation step.
- Btrfs workflow orchestration is separated from the BootPrep preparation engine.
bootprepremains responsible only for preparing an already-selected writable snapshot for the next boot.bootprep-btrfshandles Btrfs-specific workflows while delegating final boot preparation tobootprep.99_bootprepremains the minimal Snapper rollback bridge to the BootPrep preparation engine.
- Automatic Snapshot Store Reconciliation.
- Automatic discovery of available root and home snapshot stores.
- Automatic creation of required
/.snapshotsand/home/.snapshotsmount entries when corresponding snapshot stores exist.
- BootPrep now derives snapshot store mount options from the running system rather than using fixed mount options.
- Runtime-only mount options are filtered before generating persistent
fstabentries. - Generated snapshot store entries now follow the same persistent mount style as the remainder of the system.
- The installer now performs the same Snapshot Store Reconciliation as the BootPrep preparation engine.
- Missing snapshot store mount entries are automatically created.
- Incorrect snapshot store mount entries are replaced with canonical entries.
- Duplicate active snapshot store mount entries are detected and safely rejected.
- Snapshot store discovery now correctly supports both standard
root (
@) and writable snapshot boot environments. - Improved compatibility with systems installed before BootPrep by automatically preparing existing snapshots for successful boot.
- Initial public release.
- Automatic preparation of writable Btrfs snapshots for boot.
- Snapper rollback integration through the
99_bootprepplugin. - Automatic GRUB integration for writable snapshot booting.
- BootPrep installer.
- BootPrep upgrade utility.
- Automatic EFI GRUB update after snapshot preparation.