aboutsummaryrefslogtreecommitdiff
path: root/build.sh
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-01-18 11:15:57 -0600
committerCraig Jennings <c@cjennings.net>2026-01-18 11:15:57 -0600
commit2e8e5cdd980098241fbd5f6d92f05111818f574a (patch)
tree0f1df49d25586477c58439efe9fad74a5d5dfcf4 /build.sh
parent6505511f2e6b43a37570fc840f6d2851c7cc170c (diff)
downloadarchangel-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-xbuild.sh7
1 files changed, 7 insertions, 0 deletions
diff --git a/build.sh b/build.sh
index cf5c086..67542ec 100755
--- a/build.sh
+++ b/build.sh
@@ -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