diff options
| author | Craig Jennings <c@cjennings.net> | 2026-01-18 11:15:57 -0600 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-01-18 11:15:57 -0600 |
| commit | 2e8e5cdd980098241fbd5f6d92f05111818f574a (patch) | |
| tree | 0f1df49d25586477c58439efe9fad74a5d5dfcf4 /build.sh | |
| parent | 6505511f2e6b43a37570fc840f6d2851c7cc170c (diff) | |
| download | archangel-2e8e5cdd980098241fbd5f6d92f05111818f574a.tar.gz archangel-2e8e5cdd980098241fbd5f6d92f05111818f574a.zip | |
Add snapshot retention with automatic pruning
Implements hybrid retention policy:
- Always keep 20 most recent snapshots
- Delete snapshots beyond #20 only if older than 180 days
- Genesis snapshot is always protected
Features:
- zfs-snap-prune script with --dry-run, --test, --verbose modes
- Comprehensive test suite (22 tests)
- Runs automatically after pacman operations
- Daily systemd timer for cleanup
- Regenerates GRUB menu after pruning
This prevents unbounded snapshot growth while preserving
recent history and the genesis snapshot.
Diffstat (limited to 'build.sh')
| -rwxr-xr-x | build.sh | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -187,6 +187,10 @@ mkdir -p "$PROFILE_DIR/airootfs/usr/local/share/grub-zfs-snap" cp "$CUSTOM_DIR/40_zfs_snapshots" "$PROFILE_DIR/airootfs/usr/local/share/grub-zfs-snap/" cp "$CUSTOM_DIR/zz-grub-zfs-snap.hook" "$PROFILE_DIR/airootfs/usr/local/share/grub-zfs-snap/" +# Copy zfs-snap-prune for snapshot retention +info "Copying zfs-snap-prune..." +cp "$CUSTOM_DIR/zfs-snap-prune" "$PROFILE_DIR/airootfs/usr/local/bin/" + # Copy example config for unattended installs mkdir -p "$PROFILE_DIR/airootfs/root" cp "$CUSTOM_DIR/install-archzfs.conf.example" "$PROFILE_DIR/airootfs/root/" @@ -207,6 +211,9 @@ if grep -q "file_permissions=" "$PROFILE_DIR/profiledef.sh"; then /)/ i\ ["/usr/local/bin/grub-zfs-snap"]="0:0:755" }' "$PROFILE_DIR/profiledef.sh" sed -i '/^file_permissions=(/,/)/ { + /)/ i\ ["/usr/local/bin/zfs-snap-prune"]="0:0:755" + }' "$PROFILE_DIR/profiledef.sh" + sed -i '/^file_permissions=(/,/)/ { /)/ i\ ["/etc/shadow"]="0:0:400" }' "$PROFILE_DIR/profiledef.sh" fi |
