#!/bin/bash # SCRIPT FLOW EXPLANATION FOR USERS cat << 'EOF' ╔════════════════════════════════════════════════════════════════╗ ║ Ubuntu Post-Install Setup Script ║ ╚════════════════════════════════════════════════════════════════╝ This script is divided into TWO main phases: ┌────────────────────────────────────────────────────────────────┐ │ PHASE 1: ESSENTIAL SYSTEM SETUP (Required) │ ├────────────────────────────────────────────────────────────────┤ │ These are installed/configured FIRST: │ │ ✓ System updates and essential packages │ │ ✓ OpenSSH server (remote access) │ │ ✓ rsync, curl, wget (core utilities) │ │ ✓ SSH key configuration │ │ ✓ Docker & Docker Compose (container platform) │ │ ✓ Hard drive mounting (storage setup) │ │ │ │ These are REQUIRED for everything else to work. │ └────────────────────────────────────────────────────────────────┘ ┌────────────────────────────────────────────────────────────────┐ │ PHASE 2: SERVICE SELECTION MENU (Optional) │ ├────────────────────────────────────────────────────────────────┤ │ After Phase 1, you'll see a CHECKBOX MENU where you can: │ │ • Select which services to INSTALL │ │ • Select which services to UNINSTALL │ │ • Skip services you don't want │ │ │ │ Services include: │ │ • Self-hosted apps (ActualBudget, Keycloak, Jellyfin, etc.) │ │ • Network services (Samba, VPNs, fail2ban) │ │ • Monitoring tools (Uptime Kuma, Portainer, Watchtower) │ │ • And many more... │ └────────────────────────────────────────────────────────────────┘ ┌────────────────────────────────────────────────────────────────┐ │ RE-RUNNING THIS SCRIPT │ ├────────────────────────────────────────────────────────────────┤ │ You can safely re-run this script on an already configured │ │ server: │ │ • Phase 1 will DETECT existing installations and skip them │ │ • Phase 2 menu will show ALL services (installed and not) │ │ • Select NEW services to add │ │ • Or select UNINSTALL to remove services │ │ │ │ The script is IDEMPOTENT - safe to run multiple times! │ └────────────────────────────────────────────────────────────────┘ Press ENTER to continue with Phase 1 (Essential Setup)... EOF read -p "" # Now continue with the actual script... EOF