diff --git a/bin/.bin/ec b/bin/.bin/ec new file mode 100755 index 0000000..fc10bab Binary files /dev/null and b/bin/.bin/ec differ diff --git a/bin/.bin/utm-backup.sh b/bin/.bin/utm-backup.sh new file mode 100755 index 0000000..7939d6e --- /dev/null +++ b/bin/.bin/utm-backup.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ---- CONFIG ---- +UTM_DIR="$HOME/Library/Containers/com.utmapp.UTM/Data/Documents" +VM_NAME="Personal Fedora.utm" + +REMOTE_HOST="rhea.local" +REMOTE_DIR="/tank/backups/utm" + +KEEP=5 +DATE="$(date +%Y-%m-%d_%H-%M-%S)" + +BASENAME="${VM_NAME%.utm}_$DATE" +ARCHIVE="/tmp/$BASENAME.tar.gz" + +# ---- SANITY CHECKS ---- +if [[ ! -d "$UTM_DIR/$VM_NAME" ]]; then + echo "ERROR: VM not found: $UTM_DIR/$VM_NAME" + exit 1 +fi + +# Optional: refuse if VM might be running +if pgrep -f "$VM_NAME" >/dev/null; then + echo "ERROR: VM appears to be running. Shut it down first." + exit 1 +fi + +# ---- CREATE ARCHIVE ---- +echo "Creating compressed archive..." +tar -C "$UTM_DIR" -czf "$ARCHIVE" "$VM_NAME" + +# ---- COPY ---- +echo "Uploading $ARCHIVE → $REMOTE_HOST:$REMOTE_DIR/" +scp "$ARCHIVE" "$REMOTE_HOST:$REMOTE_DIR/" + +# ---- REMOTE ROTATION ---- +echo "Pruning old backups on remote (keeping last $KEEP)..." + +ssh "$REMOTE_HOST" " + ls -dt $REMOTE_DIR/${VM_NAME%.utm}_*.tar.gz 2>/dev/null \ + | tail -n +$((KEEP + 1)) \ + | xargs -r rm -f +" + +# ---- CLEANUP ---- +rm -f "$ARCHIVE" + +echo "Backup complete." +