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:
+208
-176
@@ -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..."
|
||||
|
||||
Reference in New Issue
Block a user