Files
mw-pfeddersheim-workstation/scripts/maintenance.sh
T

93 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# saTway Maintenance Script
# Version: 1.1.0
# Target: mw-pfeddersheim-workstation
CHECK_MODE=false
if [[ "${1:-}" == "--check" ]]; then
CHECK_MODE=true
echo "Running in CHECK mode (non-destructive)..."
fi
# Ensure log directory exists
mkdir -p "$HOME/logs" 2>/dev/null || true
LOCAL_LOG="$HOME/logs/maintenance-$(date +%Y%m%d).log"
echo "--- Starting saTway Maintenance $(date) ---" | tee -a "$LOCAL_LOG"
# 1. System Update Check
echo "[1/6] Checking for system updates..." | tee -a "$LOCAL_LOG"
if command -v checkupdates &> /dev/null; then
checkupdates | tee -a "$LOCAL_LOG" || echo "No updates or checkupdates failed (exit code $?)" | tee -a "$LOCAL_LOG"
elif command -v pacman &> /dev/null; then
echo "Use 'sudo pacman -Syu' to update system packages." | tee -a "$LOCAL_LOG"
fi
# 2. System Optimization (Journald & Packages)
echo "[2/6] Optimizing system logs and package cache..." | tee -a "$LOCAL_LOG"
if command -v journalctl &> /dev/null; then
echo "Checking systemd journal logs..." | tee -a "$LOCAL_LOG"
if [ "$CHECK_MODE" = true ]; then
journalctl --disk-usage | tee -a "$LOCAL_LOG"
else
sudo journalctl --vacuum-time=7d --vacuum-size=500M 2>&1 | tee -a "$LOCAL_LOG" || echo "Journald vacuum failed (requires sudo)" | tee -a "$LOCAL_LOG"
fi
fi
if command -v paccache &> /dev/null; then
echo "Checking Arch package cache..."
if [ "$CHECK_MODE" = true ]; then
sudo du -sh /var/cache/pacman/pkg/ | tee -a "$LOCAL_LOG" || echo "du failed (requires sudo)" | tee -a "$LOCAL_LOG"
else
sudo paccache -rk2 2>&1 | tee -a "$LOCAL_LOG" || echo "paccache failed (requires sudo)" | tee -a "$LOCAL_LOG"
fi
fi
if command -v pacman &> /dev/null; then
echo "Checking for orphaned packages..." | tee -a "$LOCAL_LOG"
ORPHANS=$(pacman -Qtdq) || ORPHANS=""
if [ -n "$ORPHANS" ]; then
echo "Orphaned packages found: $ORPHANS" | tee -a "$LOCAL_LOG"
if [ "$CHECK_MODE" = false ]; then
echo "Removing orphaned packages..." | tee -a "$LOCAL_LOG"
sudo pacman -Rns --noconfirm $ORPHANS | tee -a "$LOCAL_LOG"
fi
else
echo "No orphaned packages found." | tee -a "$LOCAL_LOG"
fi
fi
# 3. Docker Cleanup
if command -v docker &> /dev/null; then
echo "[3/6] Checking Docker resources..." | tee -a "$LOCAL_LOG"
if [ "$CHECK_MODE" = true ]; then
docker system df | tee -a "$LOCAL_LOG"
else
echo "Pruning unused docker data..." | tee -a "$LOCAL_LOG"
docker system prune -f 2>&1 | tee -a "$LOCAL_LOG"
echo "Pruning unused docker volumes..." | tee -a "$LOCAL_LOG"
docker volume prune -f 2>&1 | tee -a "$LOCAL_LOG"
fi
fi
# 4. pnpm/npm check
if command -v pnpm &> /dev/null; then
echo "[4/6] Checking global pnpm packages..." | tee -a "$LOCAL_LOG"
pnpm list -g --depth 0 | tee -a "$LOCAL_LOG"
if [ "$CHECK_MODE" = false ]; then
echo "Pruning pnpm store..." | tee -a "$LOCAL_LOG"
pnpm store prune 2>&1 | tee -a "$LOCAL_LOG"
fi
fi
# 5. Git Repos Status
echo "[5/6] Checking infra repo status..." | tee -a "$LOCAL_LOG"
git status | tee -a "$LOCAL_LOG"
# 6. Disk Space Check
echo "[6/6] Current disk usage summary:" | tee -a "$LOCAL_LOG"
df -h / | tee -a "$LOCAL_LOG"
echo "--- Maintenance Task Finished $(date) ---" | tee -a "$LOCAL_LOG"