diff --git a/ubuntu-post-install.sh b/ubuntu-post-install.sh index 8a29d06..10014aa 100644 --- a/ubuntu-post-install.sh +++ b/ubuntu-post-install.sh @@ -2278,10 +2278,16 @@ else echo "Selected services:" echo "$SELECTED_SERVICES" | tr '"' '\n' | grep -v '^$' | sed 's/^/ - /' echo "" + + # Mark that whiptail was used - skip all individual prompts + WHIPTAIL_USED=true + else + # Whiptail not available - will use individual prompts + WHIPTAIL_USED=false fi # ---- IMMICH ---- - if [ -z "$INSTALL_IMMICH" ]; then + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_IMMICH" ]; then echo "" echo "┌─────────────────────────────────────────────────────────────────┐" echo "│ IMMICH - Self-hosted photo & video backup │" @@ -2491,13 +2497,15 @@ IMMICH_ENV fi # ---- AUDIOBOOKSHELF ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ AUDIOBOOKSHELF - Audiobook & podcast server │" - echo "│ Stream audiobooks with progress sync across devices. │" - echo "│ Port: 13378 │" - echo "└─────────────────────────────────────────────────────────────────┘" - prompt_yn "Install Audiobookshelf? (y/n):" "n" INSTALL_AUDIOBOOKSHELF + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_AUDIOBOOKSHELF" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ AUDIOBOOKSHELF - Audiobook & podcast server │" + echo "│ Stream audiobooks with progress sync across devices. │" + echo "│ Port: 13378 │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Audiobookshelf? (y/n):" "n" INSTALL_AUDIOBOOKSHELF + fi if [ "$INSTALL_AUDIOBOOKSHELF" = "y" ] || [ "$INSTALL_AUDIOBOOKSHELF" = "Y" ]; then echo "Installing Audiobookshelf..." @@ -2553,14 +2561,14 @@ ABS_ENV fi # ---- EMBY ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ EMBY - Media server for movies, TV, music │" - echo "│ Stream your media library to any device. │" - echo "│ Port: 8096 (web), 8920 (https) │" - echo "└─────────────────────────────────────────────────────────────────┘" - if [ -z "$INSTALL_EMBY" ]; then - prompt_yn "Install Emby? (y/n):" "n" INSTALL_EMBY + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_EMBY" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ EMBY - Media server for movies, TV, music │" + echo "│ Stream your media library to any device. │" + echo "│ Port: 8096 (web), 8920 (https) │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Emby? (y/n):" "n" INSTALL_EMBY fi if [ "$INSTALL_EMBY" = "y" ] || [ "$INSTALL_EMBY" = "Y" ]; then @@ -2620,14 +2628,14 @@ EMBY_ENV fi # ---- A.R.M. (Automatic Ripping Machine) ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ A.R.M. - Automatic Ripping Machine │" - echo "│ Automatically rip DVDs, Blu-rays, and CDs. │" - echo "│ Port: 8080 │" - echo "└─────────────────────────────────────────────────────────────────┘" - if [ -z "$INSTALL_ARM" ]; then - prompt_yn "Install A.R.M.? (y/n):" "n" INSTALL_ARM + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_ARM" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ A.R.M. - Automatic Ripping Machine │" + echo "│ Automatically rip DVDs, Blu-rays, and CDs. │" + echo "│ Port: 8080 │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install A.R.M.? (y/n):" "n" INSTALL_ARM fi if [ "$INSTALL_ARM" = "y" ] || [ "$INSTALL_ARM" = "Y" ]; then @@ -2704,14 +2712,14 @@ ARM_ENV fi # ---- FILEBROWSER ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ FILEBROWSER - Web-based file manager │" - echo "│ Browse, upload, download files via web interface. │" - echo "│ Port: 8085 │" - echo "└─────────────────────────────────────────────────────────────────┘" - if [ -z "$INSTALL_FILEBROWSER" ]; then - prompt_yn "Install Filebrowser? (y/n):" "n" INSTALL_FILEBROWSER + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_FILEBROWSER" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ FILEBROWSER - Web-based file manager │" + echo "│ Browse, upload, download files via web interface. │" + echo "│ Port: 8085 │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Filebrowser? (y/n):" "n" INSTALL_FILEBROWSER fi if [ "$INSTALL_FILEBROWSER" = "y" ] || [ "$INSTALL_FILEBROWSER" = "Y" ]; then @@ -2781,14 +2789,14 @@ FB_SETTINGS fi # ---- MAGIC MIRROR ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ MAGIC MIRROR - Smart mirror / dashboard display │" - echo "│ Modular smart mirror platform. Run up to 3 instances. │" - echo "│ Ports: 8081, 8082, 8083 │" - echo "└─────────────────────────────────────────────────────────────────┘" - if [ -z "$INSTALL_MAGICMIRROR" ]; then - prompt_yn "Install Magic Mirror? (y/n):" "n" INSTALL_MAGICMIRROR + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_MAGICMIRROR" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ MAGIC MIRROR - Smart mirror / dashboard display │" + echo "│ Modular smart mirror platform. Run up to 3 instances. │" + echo "│ Ports: 8081, 8082, 8083 │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Magic Mirror? (y/n):" "n" INSTALL_MAGICMIRROR fi if [ "$INSTALL_MAGICMIRROR" = "y" ] || [ "$INSTALL_MAGICMIRROR" = "Y" ]; then @@ -3014,13 +3022,13 @@ MM_CONFIG fi # ---- ACTUALBUDGET ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ ACTUALBUDGET - Open-source Personal Finance Management │" - echo "│ Budget tracking with bank account synchronization via SimpleFIN│" - echo "│ Port: 5006 │" - echo "└─────────────────────────────────────────────────────────────────┘" - if [ -z "$INSTALL_ACTUALBUDGET" ]; then + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_ACTUALBUDGET" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ ACTUALBUDGET - Open-source Personal Finance Management │" + echo "│ Budget tracking with bank account synchronization via SimpleFIN│" + echo "│ Port: 5006 │" + echo "└─────────────────────────────────────────────────────────────────┘" prompt_yn "Install ActualBudget? (y/n):" "n" INSTALL_ACTUALBUDGET fi @@ -3069,13 +3077,13 @@ AB_COMPOSE fi # ---- KEYCLOAK ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ KEYCLOAK - Identity and Access Management (IAM) │" - echo "│ SSO, OAuth2, SAML, User Management, MFA │" - echo "│ Port: 8180 (HTTP) - Use reverse proxy for HTTPS │" - echo "└─────────────────────────────────────────────────────────────────┘" - if [ -z "$INSTALL_KEYCLOAK" ]; then + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_KEYCLOAK" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ KEYCLOAK - Identity and Access Management (IAM) │" + echo "│ SSO, OAuth2, SAML, User Management, MFA │" + echo "│ Port: 8180 (HTTP) - Use reverse proxy for HTTPS │" + echo "└─────────────────────────────────────────────────────────────────┘" prompt_yn "Install Keycloak? (y/n):" "n" INSTALL_KEYCLOAK fi @@ -3587,13 +3595,13 @@ EOF fi # ---- CADDY WEB SERVER ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ CADDY - Modern Web Server & Reverse Proxy │" - echo "│ Automatic HTTPS, reverse proxy for all your services │" - echo "│ Port: 80 (HTTP), 443 (HTTPS) │" - echo "└─────────────────────────────────────────────────────────────────┘" - if [ -z "$INSTALL_CADDY" ]; then + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_CADDY" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ CADDY - Modern Web Server & Reverse Proxy │" + echo "│ Automatic HTTPS, reverse proxy for all your services │" + echo "│ Port: 80 (HTTP), 443 (HTTPS) │" + echo "└─────────────────────────────────────────────────────────────────┘" prompt_yn "Install Caddy reverse proxy? (y/n):" "n" INSTALL_CADDY fi @@ -3727,13 +3735,13 @@ CADDYFILE fi # ---- FAIL2BAN ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ FAIL2BAN - Intrusion Prevention System │" - echo "│ Automatically ban IPs with failed auth attempts │" - echo "│ Protects SSH, Caddy, and other services │" - echo "└─────────────────────────────────────────────────────────────────┘" - if [ -z "$INSTALL_FAIL2BAN" ]; then + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_FAIL2BAN" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ FAIL2BAN - Intrusion Prevention System │" + echo "│ Automatically ban IPs with failed auth attempts │" + echo "│ Protects SSH, Caddy, and other services │" + echo "└─────────────────────────────────────────────────────────────────┘" prompt_yn "Install and configure fail2ban? (y/n):" "n" INSTALL_FAIL2BAN fi @@ -3859,14 +3867,14 @@ backend = auto" fi # ---- LYRION MUSIC SERVER ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ LYRION MUSIC SERVER (LMS) - Music streaming server │" - echo "│ Stream music to Squeezebox devices, apps, and Chromecast. │" - echo "│ Port: 9000 (web), 9090 (CLI), 3483 (players) │" - echo "└─────────────────────────────────────────────────────────────────┘" - if [ -z "$INSTALL_LMS" ]; then - prompt_yn "Install Lyrion Music Server? (y/n):" "n" INSTALL_LMS + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_LMS" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ LYRION MUSIC SERVER (LMS) - Music streaming server │" + echo "│ Stream music to Squeezebox devices, apps, and Chromecast. │" + echo "│ Port: 9000 (web), 9090 (CLI), 3483 (players) │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Lyrion Music Server? (y/n):" "n" INSTALL_LMS fi if [ "$INSTALL_LMS" = "y" ] || [ "$INSTALL_LMS" = "Y" ]; then @@ -3925,14 +3933,14 @@ LMS_ENV fi # ---- MEALIE ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ MEALIE - Recipe manager & meal planner │" - echo "│ Save recipes, plan meals, generate shopping lists. │" - echo "│ Port: 9925 │" - echo "└─────────────────────────────────────────────────────────────────┘" - if [ -z "$INSTALL_MEALIE" ]; then - prompt_yn "Install Mealie? (y/n):" "n" INSTALL_MEALIE + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_MEALIE" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ MEALIE - Recipe manager & meal planner │" + echo "│ Save recipes, plan meals, generate shopping lists. │" + echo "│ Port: 9925 │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Mealie? (y/n):" "n" INSTALL_MEALIE fi if [ "$INSTALL_MEALIE" = "y" ] || [ "$INSTALL_MEALIE" = "Y" ]; then @@ -3986,14 +3994,14 @@ MEALIE_COMPOSE fi # ---- MINECRAFT SERVER ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ MINECRAFT SERVER - Game server with RAM limit │" - echo "│ Fabric server with configurable memory allocation. │" - echo "│ Port: 25565 │" - echo "└─────────────────────────────────────────────────────────────────┘" - if [ -z "$INSTALL_MINECRAFT" ]; then - prompt_yn "Install Minecraft Server? (y/n):" "n" INSTALL_MINECRAFT + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_MINECRAFT" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ MINECRAFT SERVER - Game server with RAM limit │" + echo "│ Fabric server with configurable memory allocation. │" + echo "│ Port: 25565 │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Minecraft Server? (y/n):" "n" INSTALL_MINECRAFT fi if [ "$INSTALL_MINECRAFT" = "y" ] || [ "$INSTALL_MINECRAFT" = "Y" ]; then @@ -4144,13 +4152,15 @@ MC_ENV fi # ---- JELLYFIN (Alternative to Emby) ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ JELLYFIN - Free media server (alternative to Emby) │" - echo "│ Stream movies, TV, music. No premium features locked. │" - echo "│ Port: 8096 │" - echo "└─────────────────────────────────────────────────────────────────┘" - prompt_yn "Install Jellyfin? (y/n):" "n" INSTALL_JELLYFIN + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_JELLYFIN" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ JELLYFIN - Free media server (alternative to Emby) │" + echo "│ Stream movies, TV, music. No premium features locked. │" + echo "│ Port: 8096 │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Jellyfin? (y/n):" "n" INSTALL_JELLYFIN + fi if [ "$INSTALL_JELLYFIN" = "y" ] || [ "$INSTALL_JELLYFIN" = "Y" ]; then echo "Installing Jellyfin..." @@ -4214,13 +4224,15 @@ JELLYFIN_ENV fi # ---- FRIGATE NVR ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ FRIGATE - AI-powered NVR for security cameras │" - echo "│ Object detection, recordings, 24/7 monitoring. │" - echo "│ Port: 5000 (web), 8554 (RTSP), 8555 (WebRTC) │" - echo "└─────────────────────────────────────────────────────────────────┘" - prompt_yn "Install Frigate? (y/n):" "n" INSTALL_FRIGATE + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_FRIGATE" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ FRIGATE - AI-powered NVR for security cameras │" + echo "│ Object detection, recordings, 24/7 monitoring. │" + echo "│ Port: 5000 (web), 8554 (RTSP), 8555 (WebRTC) │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Frigate? (y/n):" "n" INSTALL_FRIGATE + fi if [ "$INSTALL_FRIGATE" = "y" ] || [ "$INSTALL_FRIGATE" = "Y" ]; then echo "Installing Frigate..." @@ -4536,13 +4548,15 @@ CADDY_FILE fi # ---- DDCLIENT DYNAMIC DNS ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ DDCLIENT - Dynamic DNS updater │" - echo "│ Keep your domain pointing to your home IP. │" - echo "│ Supports: Cloudflare, DuckDNS, No-IP, and more. │" - echo "└─────────────────────────────────────────────────────────────────┘" - prompt_yn "Install ddclient? (y/n):" "n" INSTALL_DDCLIENT + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_DDCLIENT" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ DDCLIENT - Dynamic DNS updater │" + echo "│ Keep your domain pointing to your home IP. │" + echo "│ Supports: Cloudflare, DuckDNS, No-IP, and more. │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install ddclient? (y/n):" "n" INSTALL_DDCLIENT + fi if [ "$INSTALL_DDCLIENT" = "y" ] || [ "$INSTALL_DDCLIENT" = "Y" ]; then echo "Installing ddclient..." @@ -4622,13 +4636,15 @@ DDCLIENT_CONF fi # ---- NTFY NOTIFICATIONS ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ NTFY - Push notifications server │" - echo "│ Send notifications from scripts to your phone. │" - echo "│ Port: 8090 │" - echo "└─────────────────────────────────────────────────────────────────┘" - prompt_yn "Install ntfy? (y/n):" "n" INSTALL_NTFY + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_NTFY" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ NTFY - Push notifications server │" + echo "│ Send notifications from scripts to your phone. │" + echo "│ Port: 8090 │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install ntfy? (y/n):" "n" INSTALL_NTFY + fi if [ "$INSTALL_NTFY" = "y" ] || [ "$INSTALL_NTFY" = "Y" ]; then echo "Installing ntfy..." @@ -4683,13 +4699,15 @@ NTFY_ENV fi # ---- UPTIME KUMA ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ UPTIME KUMA - Service monitoring dashboard │" - echo "│ Monitor websites, servers, Docker containers. │" - echo "│ Port: 3001 │" - echo "└─────────────────────────────────────────────────────────────────┘" - prompt_yn "Install Uptime Kuma? (y/n):" "n" INSTALL_UPTIMEKUMA + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_UPTIMEKUMA" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ UPTIME KUMA - Service monitoring dashboard │" + echo "│ Monitor websites, servers, Docker containers. │" + echo "│ Port: 3001 │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Uptime Kuma? (y/n):" "n" INSTALL_UPTIMEKUMA + fi if [ "$INSTALL_UPTIMEKUMA" = "y" ] || [ "$INSTALL_UPTIMEKUMA" = "Y" ]; then echo "Installing Uptime Kuma..." @@ -4734,13 +4752,15 @@ UPTIME_COMPOSE fi # ---- WG-EASY (WireGuard with Web UI) ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ WG-EASY - WireGuard VPN with web management │" - echo "│ Easy WireGuard setup with QR codes for clients. │" - echo "│ Port: 51821 (web), 51820 (VPN) │" - echo "└─────────────────────────────────────────────────────────────────┘" - prompt_yn "Install wg-easy? (y/n):" "n" INSTALL_WGEASY + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_WGEASY" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ WG-EASY - WireGuard VPN with web management │" + echo "│ Easy WireGuard setup with QR codes for clients. │" + echo "│ Port: 51821 (web), 51820 (VPN) │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install wg-easy? (y/n):" "n" INSTALL_WGEASY + fi if [ "$INSTALL_WGEASY" = "y" ] || [ "$INSTALL_WGEASY" = "Y" ]; then echo "Installing wg-easy..." @@ -4808,13 +4828,15 @@ WGEASY_ENV fi # ---- TRACCAR GPS TRACKING ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ TRACCAR - GPS tracking server │" - echo "│ Track phones, vehicles, assets with OwnTracks/Traccar apps. │" - echo "│ Port: 8082 (web), 5055 (OsmAnd), 5000+ (devices) │" - echo "└─────────────────────────────────────────────────────────────────┘" - prompt_yn "Install Traccar? (y/n):" "n" INSTALL_TRACCAR + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_TRACCAR" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ TRACCAR - GPS tracking server │" + echo "│ Track phones, vehicles, assets with OwnTracks/Traccar apps. │" + echo "│ Port: 8082 (web), 5055 (OsmAnd), 5000+ (devices) │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Traccar? (y/n):" "n" INSTALL_TRACCAR + fi if [ "$INSTALL_TRACCAR" = "y" ] || [ "$INSTALL_TRACCAR" = "Y" ]; then echo "Installing Traccar..." @@ -4879,13 +4901,15 @@ TRACCAR_XML fi # ---- PORTAINER ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ PORTAINER - Docker management web UI │" - echo "│ Manage containers, images, volumes via browser. │" - echo "│ Port: 9443 (https), 9000 (http) │" - echo "└─────────────────────────────────────────────────────────────────┘" - prompt_yn "Install Portainer? (y/n):" "n" INSTALL_PORTAINER + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_PORTAINER" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ PORTAINER - Docker management web UI │" + echo "│ Manage containers, images, volumes via browser. │" + echo "│ Port: 9443 (https), 9000 (http) │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Portainer? (y/n):" "n" INSTALL_PORTAINER + fi if [ "$INSTALL_PORTAINER" = "y" ] || [ "$INSTALL_PORTAINER" = "Y" ]; then echo "Installing Portainer..." @@ -4932,13 +4956,15 @@ PORTAINER_COMPOSE fi # ---- MESHCENTRAL SERVER ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ MESHCENTRAL SERVER - Self-hosted remote management │" - echo "│ Full MeshCentral server (not just agent). Manage all devices. │" - echo "│ Port: 4430 (https), 4433 (agent) │" - echo "└─────────────────────────────────────────────────────────────────┘" - prompt_yn "Install MeshCentral Server? (y/n):" "n" INSTALL_MESHCENTRAL_SERVER + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_MESHCENTRAL_SERVER" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ MESHCENTRAL SERVER - Self-hosted remote management │" + echo "│ Full MeshCentral server (not just agent). Manage all devices. │" + echo "│ Port: 4430 (https), 4433 (agent) │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install MeshCentral Server? (y/n):" "n" INSTALL_MESHCENTRAL_SERVER + fi if [ "$INSTALL_MESHCENTRAL_SERVER" = "y" ] || [ "$INSTALL_MESHCENTRAL_SERVER" = "Y" ]; then echo "Installing MeshCentral Server..." @@ -5010,13 +5036,15 @@ MC_ENV fi # ---- FINDMYDEVICE (FMD) ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ FINDMYDEVICE - Self-hosted device tracking │" - echo "│ Track and locate Android devices. Alternative to Google Find. │" - echo "│ Port: 8084 │" - echo "└─────────────────────────────────────────────────────────────────┘" - prompt_yn "Install FindMyDevice server? (y/n):" "n" INSTALL_FMD + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_FMD" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ FINDMYDEVICE - Self-hosted device tracking │" + echo "│ Track and locate Android devices. Alternative to Google Find. │" + echo "│ Port: 8084 │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install FindMyDevice server? (y/n):" "n" INSTALL_FMD + fi if [ "$INSTALL_FMD" = "y" ] || [ "$INSTALL_FMD" = "Y" ]; then echo "Installing FindMyDevice..." @@ -5073,13 +5101,15 @@ FMD_ENV fi # ---- FRIGATE-NOTIFY ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ FRIGATE-NOTIFY - Push notifications for Frigate events │" - echo "│ Get alerts when Frigate detects people, cars, etc. │" - echo "│ Sends to: ntfy, Pushover, Discord, Gotify, and more. │" - echo "└─────────────────────────────────────────────────────────────────┘" - prompt_yn "Install Frigate-Notify? (y/n):" "n" INSTALL_FRIGATE_NOTIFY + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_FRIGATE_NOTIFY" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ FRIGATE-NOTIFY - Push notifications for Frigate events │" + echo "│ Get alerts when Frigate detects people, cars, etc. │" + echo "│ Sends to: ntfy, Pushover, Discord, Gotify, and more. │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Frigate-Notify? (y/n):" "n" INSTALL_FRIGATE_NOTIFY + fi if [ "$INSTALL_FRIGATE_NOTIFY" = "y" ] || [ "$INSTALL_FRIGATE_NOTIFY" = "Y" ]; then echo "Installing Frigate-Notify..." @@ -5176,13 +5206,15 @@ FN_CONFIG fi # ---- WATCHTOWER ---- - echo "" - echo "┌─────────────────────────────────────────────────────────────────┐" - echo "│ WATCHTOWER - Container update monitoring │" - echo "│ Monitor containers for updates. NOTIFY ONLY by default. │" - echo "│ Why notify-only? Apps like Immich have breaking DB migrations. │" - echo "└─────────────────────────────────────────────────────────────────┘" - prompt_yn "Install Watchtower? (y/n):" "n" INSTALL_WATCHTOWER + if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_WATCHTOWER" ]; then + echo "" + echo "┌─────────────────────────────────────────────────────────────────┐" + echo "│ WATCHTOWER - Container update monitoring │" + echo "│ Monitor containers for updates. NOTIFY ONLY by default. │" + echo "│ Why notify-only? Apps like Immich have breaking DB migrations. │" + echo "└─────────────────────────────────────────────────────────────────┘" + prompt_yn "Install Watchtower? (y/n):" "n" INSTALL_WATCHTOWER + fi if [ "$INSTALL_WATCHTOWER" = "y" ] || [ "$INSTALL_WATCHTOWER" = "Y" ]; then echo "Installing Watchtower..."