Fix duplicate prompts after whiptail menu selection

Applied WHIPTAIL_USED flag check to all 25 service prompts that appear
after the whiptail menu to prevent services from being prompted
individually when they weren't selected in the checkbox menu.

This fixes the issue where services like AudioBookshelf were being
prompted even when not selected in whiptail.

Services fixed:
- AudioBookshelf, Emby, ARM, FileBrowser, Magic Mirror
- ActualBudget, Keycloak, Caddy, fail2ban
- Lyrion Music Server, Mealie, Minecraft, Jellyfin, Frigate
- ddclient, ntfy, Uptime Kuma, wg-easy
- Traccar, Portainer, MeshCentral Server
- FindMyDevice, Frigate-Notify, Watchtower

Pattern applied:
  if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_SERVICE" ]; then
      # Show prompt
  fi

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