Releases: rocketman-code/atomic-rollback
Releases · rocketman-code/atomic-rollback
v0.4.0
Added
- Automatic snapshots use rolling timestamp names in
%Y-%m-%d_%H-%M-%Sformat instead of a fixedroot.pre-update. Every RPM transaction creates a new snapshot; the history is no longer overwritten on each upgrade. Closes #9. - Snapshot retention: the tool keeps the most recent
MAX_SNAPSHOTSautomatic snapshots (default 50, configurable in/etc/atomic-rollback.conf) and evicts older ones. User-named snapshots are never counted against the limit and are never evicted; unbounded accumulation of user-named snapshots remains the expected behavior. snapshot listshows a three-column table: btrfs subvolume ID, name, and creation time. Sorted by ID (chronological).rollback [id|name]andsnapshot delete <id|name>accept btrfs subvolume IDs (integers) in addition to names.rollbackwith no arguments defaults to the most recent snapshot (highest ID). The IDs are btrfs filesystem primitives, monotonic and never reused, surfaced as the user-facing handle without any atomic-rollback state.snapshot createoutput includes the btrfs subvolume ID (e.g.Snapshot 'foo' with ID 123 created.) so the new snapshot can be referenced numerically in subsequent commands without runninglistfirst.checkandrollbackshow rollback scope: directories protected by separate btrfs subvolumes are listed as SAFE (unaffected by rollback), directories inside the root subvolume are listed as RISK (will revert on rollback). Derived from fstabsubvol=entries and mountpoint checks on top-level directories.--versionand-Vprint the installed version. Output format:atomic-rollback v<version>, one line to stdout, matching thebtrfs-progs v6.17convention.
Changed
checkoutput and user-facing documentation use "boot chain" terminology instead of "system bootable." The tool verifies boot chain structural validity (the formal model's scope), not system bootability in the broader sense. Kernel bugs, runtime failures, and other post-boot problems are outside what the tool can prove, and the language now matches.- The kernel-install hook is owned by
migrateas a migration artifact instead of being installed by the RPM. The hook now persists across atomic-rollback uninstall, so removing the tool on a migrated system does not leave future kernel installs with unbootable BLS entries. Closes #17.
Removed
- The libdnf5 actions plugin (
/etc/dnf/libdnf5-plugins/actions.d/atomic-rollback.actions) is no longer shipped. The RPM C plugin added in 0.3.7 covers every RPM-based frontend (dnf, rpm, PackageKit); keeping both caused duplicate snapshots on dnf5 transactions. Closes #16.
Fixed
- Systems upgrading from any 0.3.x release have their legacy
root.pre-updatesnapshot renamed to its creation timestamp (in the same%Y-%m-%d_%H-%M-%Sformat as new automatic snapshots) on upgrade. The renamed snapshot joins the rolling history and becomes eligible for retention; before this release it did not match the auto-name format and was treated as a user-named snapshot, persisting indefinitely on upgraded systems. The btrfs subvolume ID is preserved across the rename, so rollback targets that referenced the numeric ID are unaffected.
v0.3.8
Fixed
check,setup, andmigratefailed at the baseline gate with "Btrfs subvolume 'root' not found" on systems with a non-default root subvolume name (e.g., the openSUSE Timeshift@layout). The root filesystem check hardcoded"root"instead of reading thesubvol=mount option from/etc/fstab. Closes #15.
v0.3.7
Added
- RPM plugin: snapshots are now created before every RPM transaction regardless of frontend (dnf, PackageKit/Discover, bare rpm). Previously only dnf5 transactions triggered snapshots via the libdnf5 actions plugin.
Fixed
snapshotno longer prints contradictory "already exists" and "created" messages on the same call. The function returns a typed result and the caller handles messaging.snapshotis now a safe no-op on non-btrfs systems instead of failing and blocking package transactions.
v0.3.6
Fixed
check,setup, andmigratefailed on aarch64 with "shimx64.efi is missing." The EFI boot file check hardcoded x86_64 filenames instead of deriving them from the UEFI architecture suffix.
v0.3.5
Typed device references
All device references are now typed. Bare UUIDs, fstab device specs (UUID=, LABEL=, PARTUUID=, PARTLABEL=, ID=, /dev/ paths), resolved device paths, and subvolume names each have distinct types. Passing a bare UUID where a device spec is expected (the bug fixed in 0.3.3) is now a compile error. No behavior changes.
v0.3.4
License change
This release relicenses atomic-rollback from MIT OR Apache-2.0 to GPL-3.0-only.
All future versions are licensed under the GNU General Public License v3.0 only (no "or later" clause). Previously published versions (0.3.3 and earlier) remain under their original license.
See LICENSE for the full text.
Other changes
- Removed
scripts/monitor-reddit.sh(one-time utility, not part of the distributed package).
v0.3.3
Fixed
checkfailed on vanilla Fedora 43 with "Can't lookup blockdev." The root UUID extracted from BLS boot entries was passed to mount without theUUID=prefix, so mount received a bare UUID string instead of a valid device spec. All stock Fedora installs usingUUID=in fstab were affected. Closes #2.- Linux-specific syscalls (renameat2, syncfs) gated behind
#[cfg(target_os = "linux")]socargo testruns on macOS for pure-logic tests.
See CHANGELOG.md for details.
v0.3.2
Fixed
- Subvolume names with spaces now parse correctly
- Verification chain handles all fstab device formats (PARTUUID=, PARTLABEL=, ID=)
- BLS initrd validation checks all initrd lines (multi-valued per BLS spec)
- BLS root= parameter check accepts all kernel device formats
- ESP grub.cfg migration renders from generator template, eliminating double-prefix bug class
Changed
- Internal: all external tool output parsed through grammar-derived types at the boundary
See CHANGELOG.md for details.
v0.3.1
Fixed
- Kernel-install hook uses full binary path (/usr/bin/atomic-rollback). The bare command was not in RPM's scriptlet PATH, causing exit 127 on kernel upgrades.
- RPM spec rewritten for COPR vendored builds. The previous spec used %cargo_build which expects Fedora-packaged crates.
- COPR Makefile builds from cloned source with correct outdir contract.
Changed
- Installation via COPR is the only supported method. The crate was removed from crates.io (binary alone is insufficient without the hook and plugin).
Install
sudo dnf copr enable rocketman-code/atomic-rollback
sudo dnf install atomic-rollback
v0.3.0
Added
snapshot create [name]subcommand: explicit snapshot creation with optional name.snapshot listsubcommand: shows available snapshots, excluding system subvolumes.snapshot delete <name>subcommand: refuses fstab-referenced system subvolumes. Mounted-subvolume and default-subvolume protection delegated to kernel and btrfs-progs.--helpand-hat top level and for snapshot subcommands.
Changed
snapshot <name>replaced bysnapshot create <name>. Baresnapshot(no args) still creates with the default name. Unrecognized snapshot subcommands are now rejected instead of silently treated as snapshot names.
Fixed
- Migration step 1 now handles all fstab device reference formats (UUID=, LABEL=, /dev/ paths). Previously only UUID= was supported.