From 4a7dd2e6549c514efaf587ff73877b8f85b6c216 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 12 Jan 2026 17:46:43 +0000 Subject: [PATCH] Add helper function and apply reconfigure fix to key services 1. **Created check_service_exists() Helper Function:** - Reusable function to check if service exists - Shows options: Skip / Reconfigure / Restart - Handles backup automatically on reconfigure - Returns boolean flag to control installation flow - Reduces code duplication across services 2. **Applied Reconfigure Fix to Services:** - Immich (with drive detection) - AudioBookshelf - Emby 3. **How It Works:** ```bash check_service_exists "ServiceName" "$SERVICE_DIR" RECONFIGURE_FLAG if [ "$RECONFIGURE_FLAG" = "true" ]; then # Only run configuration if true fi ``` 4. **Benefits:** - Consistent behavior across all services - Automatic backup before any changes - Safe default (Skip) protects existing configs - Easy to apply to remaining services Next: Apply to remaining 20+ services (ActualBudget, Mealie, Jellyfin, etc.) --- ubuntu-post-install.sh | 114 +++++++++++++++++++++++++---------------- 1 file changed, 71 insertions(+), 43 deletions(-) diff --git a/ubuntu-post-install.sh b/ubuntu-post-install.sh index 453e753..482d39a 100644 --- a/ubuntu-post-install.sh +++ b/ubuntu-post-install.sh @@ -1473,6 +1473,59 @@ CADDY_BLOCK echo "" } +# ============================================================================ +# CHECK IF SERVICE EXISTS AND ASK USER ACTION +# ============================================================================ +check_service_exists() { + local SERVICE_NAME="$1" + local SERVICE_DIR="$2" + local RETURN_VAR="$3" # Variable name to set (true/false) + + if [ -f "$SERVICE_DIR/docker-compose.yml" ]; then + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo " $SERVICE_NAME is already installed at $SERVICE_DIR" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "" + echo "Options:" + echo " 1. Skip (keep existing configuration)" + echo " 2. Reconfigure (will backup existing config)" + echo " 3. Restart containers only" + echo "" + local ACTION="" + prompt_text "Choose option [1/2/3]:" "1" ACTION + + case "$ACTION" in + 2) + echo " Backing up existing configuration..." + local BACKUP_NAME=$(echo "$SERVICE_NAME" | tr '[:upper:] ' '[:lower:]-') + BACKUP_DIR="$DOCKER_DIR/backups/$(date +%Y%m%d-%H%M%S)-$BACKUP_NAME" + mkdir -p "$BACKUP_DIR" + cp -r "$SERVICE_DIR" "$BACKUP_DIR/" + echo " ✓ Backup saved to: $BACKUP_DIR" + eval "$RETURN_VAR=true" + return 0 + ;; + 3) + echo " Restarting $SERVICE_NAME containers..." + cd "$SERVICE_DIR" + docker compose restart 2>/dev/null && echo " ✓ $SERVICE_NAME restarted" || echo " ⚠ Failed to restart" + eval "$RETURN_VAR=false" + return 0 + ;; + *) + echo " Skipping $SERVICE_NAME (already configured)" + eval "$RETURN_VAR=false" + return 0 + ;; + esac + else + # Service doesn't exist, proceed with installation + eval "$RETURN_VAR=true" + return 0 + fi +} + # ============================================================================ # SHOW CURRENT INSTALLATION STATUS # ============================================================================ @@ -2633,45 +2686,8 @@ else if [ "$INSTALL_IMMICH" = "y" ] || [ "$INSTALL_IMMICH" = "Y" ]; then IMMICH_DIR="$DOCKER_DIR/immich" - # Check if already installed - if [ -f "$IMMICH_DIR/docker-compose.yml" ]; then - echo "" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo " Immich is already installed at $IMMICH_DIR" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "" - echo "Options:" - echo " 1. Skip (keep existing configuration)" - echo " 2. Reconfigure (will backup existing config)" - echo " 3. Restart containers only" - echo "" - IMMICH_ACTION="" - prompt_text "Choose option [1/2/3]:" "1" IMMICH_ACTION - - case "$IMMICH_ACTION" in - 2) - echo " Backing up existing configuration..." - BACKUP_DIR="$DOCKER_DIR/backups/$(date +%Y%m%d-%H%M%S)-immich" - mkdir -p "$BACKUP_DIR" - cp -r "$IMMICH_DIR" "$BACKUP_DIR/" - echo " ✓ Backup saved to: $BACKUP_DIR" - IMMICH_RECONFIGURE=true - ;; - 3) - echo " Restarting Immich containers..." - cd "$IMMICH_DIR" - docker compose restart 2>/dev/null && echo " ✓ Immich restarted" || echo " ⚠ Failed to restart" - IMMICH_RECONFIGURE=false - ;; - *) - echo " Skipping Immich (already configured)" - IMMICH_RECONFIGURE=false - ;; - esac - else - # New installation - IMMICH_RECONFIGURE=true - fi + # Check if already installed and ask what to do + check_service_exists "Immich" "$IMMICH_DIR" IMMICH_RECONFIGURE if [ "$IMMICH_RECONFIGURE" = "true" ]; then echo "Installing Immich..." @@ -2911,9 +2927,14 @@ IMMICH_ENV fi if [ "$INSTALL_AUDIOBOOKSHELF" = "y" ] || [ "$INSTALL_AUDIOBOOKSHELF" = "Y" ]; then - echo "Installing Audiobookshelf..." ABS_DIR="$DOCKER_DIR/audiobookshelf" + # Check if already installed and ask what to do + check_service_exists "AudioBookshelf" "$ABS_DIR" ABS_RECONFIGURE + + if [ "$ABS_RECONFIGURE" = "true" ]; then + echo "Installing Audiobookshelf..." + if [ "$DRY_RUN" = true ]; then echo "[DRY-RUN] Would create $ABS_DIR" else @@ -2964,7 +2985,8 @@ ABS_ENV echo " Access at: http://localhost:13378" echo "" fi - fi + fi # End ABS_RECONFIGURE check + fi # End INSTALL_AUDIOBOOKSHELF check # ---- EMBY ---- if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_EMBY" ]; then @@ -2978,9 +3000,14 @@ ABS_ENV fi if [ "$INSTALL_EMBY" = "y" ] || [ "$INSTALL_EMBY" = "Y" ]; then - echo "Installing Emby..." EMBY_DIR="$DOCKER_DIR/emby" + # Check if already installed and ask what to do + check_service_exists "Emby" "$EMBY_DIR" EMBY_RECONFIGURE + + if [ "$EMBY_RECONFIGURE" = "true" ]; then + echo "Installing Emby..." + if [ "$DRY_RUN" = true ]; then echo "[DRY-RUN] Would create $EMBY_DIR" else @@ -3034,7 +3061,8 @@ EMBY_ENV echo " Access at: http://localhost:8096" echo "" fi - fi + fi # End EMBY_RECONFIGURE check + fi # End INSTALL_EMBY check # ---- A.R.M. (Automatic Ripping Machine) ---- if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_ARM" ]; then