Adds apt hooks to create a snapshot before operations.

This commit is contained in:
cyteen 2026-03-11 02:15:45 +00:00
parent 9611285132
commit 6ca4256b3e
1 changed files with 12 additions and 6 deletions

View File

@ -1,6 +1,13 @@
#!/usr/bin/env bash #!/usr/bin/env bash
POOL_NAME=rpool ROOT_DATASET=$(zfs list -H -o name,mountpoint | awk '$2 == "/" { print $1 }')
if [ -z "$ROOT_DATASET" ]; then
echo "Error: Could not detect ZFS dataset mounted at /" >&2
exit 1
fi
# Usually the pool name is the first component (rpool/ROOT/ubuntu → rpool)
POOL_NAME="${ROOT_DATASET%%/*}"
# Create zfs snapshots before apt operations using apt hooks # Create zfs snapshots before apt operations using apt hooks
@ -9,8 +16,8 @@ POOL_NAME=rpool
conf_print_snapPrepApt() { conf_print_snapPrepApt() {
cat <<EOF cat <<EOF
#!/bin/bash #!/bin/bash
DATE="'$(date +%F-%T)'" DATE="\$(date +%F-%T)"
zfs snapshot -r ${POOL_NAME}@snap_pre_apt_$DATE zfs snapshot -r ${POOL_NAME}@snap_pre_apt_\$DATE
EOF EOF
} }
conf_print_snapPrepApt | sudo tee /usr/local/sbin/snapPrepApt conf_print_snapPrepApt | sudo tee /usr/local/sbin/snapPrepApt
@ -24,15 +31,14 @@ DPkg::Pre-Invoke {"/usr/local/sbin/snapPrepApt || true";};
EOF EOF
} }
conf_print_apt_conf_d | sudo tee /etc/apt/apt.conf.d/90zfs-pre-apt-snapshot conf_print_apt_conf_d | sudo tee /etc/apt/apt.conf.d/90zfs-pre-apt-snapshot
sudo chmod +x /etc/apt/apt.conf.d/90zfs-pre-apt-snapshot
# 3. Kernel Updates # 3. Kernel Updates
# Use /etc/kernel/preinst.d/ to snapshot before kernel installation: # Use /etc/kernel/preinst.d/ to snapshot before kernel installation:
conf_print_kernel_preinst_d() { conf_print_kernel_preinst_d() {
cat <<EOF cat <<EOF
#!/bin/bash #!/bin/bash
DATE='$(date +%F-%T)' DATE="\$(date +%F-%T)"
zfs snapshot -r ${POOL_NAME}@pre-kernel_${DATE} zfs snapshot -r \${POOL_NAME}@pre-kernel_\${DATE}
EOF EOF
} }
conf_print_kernel_preinst_d | sudo tee /etc/kernel/preinst.d/90zfs-pre-kernel-snapshot conf_print_kernel_preinst_d | sudo tee /etc/kernel/preinst.d/90zfs-pre-kernel-snapshot