diff --git a/.env.example b/.env.example index 9ed00f8..07ac8c7 100644 --- a/.env.example +++ b/.env.example @@ -42,7 +42,6 @@ FEDORA_MACVLAN_GATEWAY= # LAN gateway (e.g. 192.168.1.1) FEDORA_MACVLAN_IP_RANGE= # IP range for containers (e.g. 192.168.1.208/28 — 16 IPs) FEDORA_GITEA_IP= # Static LAN IP for Gitea container FEDORA_DB_IP= # Static LAN IP for DB container (leave empty if sqlite3) -FEDORA_CADDY_IP= # Static LAN IP for Caddy container # ----------------------------------------------------------------------------- diff --git a/PLAN.md b/PLAN.md index 7a4b410..6dff4c7 100644 --- a/PLAN.md +++ b/PLAN.md @@ -680,7 +680,7 @@ gitea-migration/ | 7 | Docker on Fedora | Same | Same | | 8 | docker-compose on Unraid | `ssh_exec UNRAID "docker compose version"` or `docker-compose --version` | "docker-compose not found on Unraid. Run setup/unraid.sh." | | 9 | docker-compose on Fedora | Same | Same | -| 10 | Container IPs available | Ping-check `UNRAID_GITEA_IP`, `UNRAID_CADDY_IP`, `FEDORA_GITEA_IP`, `FEDORA_CADDY_IP` — warn if responding | "IP $ip is already responding to ping (may be in use)." | +| 10 | Container IPs available | Ping-check `UNRAID_GITEA_IP`, `UNRAID_CADDY_IP`, `FEDORA_GITEA_IP` — warn if responding | "IP $ip is already responding to ping (may be in use)." | | 12 | DNS resolves | `dig +short $GITEA_DOMAIN` returns `$UNRAID_IP` | "$GITEA_DOMAIN does not resolve to $UNRAID_IP." | | 13 | GitHub token valid | `github_api GET /user` returns 200 | "GitHub token invalid. Check GITHUB_TOKEN in .env." | | 14 | GitHub repos exist | For each repo in `REPO_NAMES`: `github_api GET /repos/$GITHUB_USERNAME/$repo` returns 200 | "GitHub repo $repo not found under $GITHUB_USERNAME." | diff --git a/USAGE_GUIDE.md b/USAGE_GUIDE.md index 6f6819d..7488327 100644 --- a/USAGE_GUIDE.md +++ b/USAGE_GUIDE.md @@ -214,7 +214,7 @@ Then re-run Phase 4. Already-migrated repos will be skipped. **Symptom**: Preflight check 13 warns that a macvlan IP is already responding to ping. -**Fix**: Either release the conflicting IP or change the container IP in `.env` (`UNRAID_GITEA_IP`, `UNRAID_CADDY_IP`, `FEDORA_GITEA_IP`, or `FEDORA_CADDY_IP`). +**Fix**: Either release the conflicting IP or change the container IP in `.env` (`UNRAID_GITEA_IP`, `UNRAID_CADDY_IP`, or `FEDORA_GITEA_IP`). ### DNS doesn't resolve to Unraid IP diff --git a/lib/common.sh b/lib/common.sh index 07b666b..7a3d8f9 100644 --- a/lib/common.sh +++ b/lib/common.sh @@ -209,7 +209,7 @@ _ENV_VAR_NAMES=( UNRAID_MACVLAN_PARENT UNRAID_MACVLAN_SUBNET UNRAID_MACVLAN_GATEWAY UNRAID_MACVLAN_IP_RANGE UNRAID_GITEA_IP UNRAID_CADDY_IP FEDORA_MACVLAN_PARENT FEDORA_MACVLAN_SUBNET FEDORA_MACVLAN_GATEWAY - FEDORA_MACVLAN_IP_RANGE FEDORA_GITEA_IP FEDORA_CADDY_IP + FEDORA_MACVLAN_IP_RANGE FEDORA_GITEA_IP GITEA_ADMIN_USER GITEA_ADMIN_PASSWORD GITEA_ADMIN_EMAIL GITEA_ORG_NAME GITEA_INSTANCE_NAME GITEA_DB_TYPE GITEA_VERSION ACT_RUNNER_VERSION GITEA_DOMAIN GITEA_INTERNAL_URL @@ -231,7 +231,7 @@ _ENV_VAR_TYPES=( nonempty nonempty ip nonempty ip ip nonempty nonempty ip - nonempty ip ip + nonempty ip nonempty password email nonempty nonempty db_type nonempty nonempty nonempty url @@ -564,6 +564,53 @@ render_template() { envsubst "$vars" < "$src" > "$dest" } +# --------------------------------------------------------------------------- +# Template block helpers — conditional block stripping and DB-specific vars +# --------------------------------------------------------------------------- + +# Strip conditional blocks from a rendered file. +# Usage: strip_template_block +strip_template_block() { + local file="$1" start="$2" end="$3" + sed -i.bak "/${start}/,/${end}/d" "$file" + rm -f "${file}.bak" +} + +# Set DB-specific variables for docker-compose template rendering. +# Requires GITEA_DB_TYPE, GITEA_DB_USER, GITEA_DB_PASSWD, GITEA_DB_NAME in env. +# Exports: DB_DOCKER_IMAGE, DB_ENV_VARS, DB_HEALTHCHECK, DB_DATA_DIR +set_db_vars() { + case "${GITEA_DB_TYPE}" in + postgres) + DB_DOCKER_IMAGE="postgres:16-alpine" + DB_ENV_VARS=" - POSTGRES_USER=${GITEA_DB_USER} + - POSTGRES_PASSWORD=${GITEA_DB_PASSWD} + - POSTGRES_DB=${GITEA_DB_NAME}" + DB_HEALTHCHECK='["CMD-SHELL", "pg_isready -U '"${GITEA_DB_USER}"'"]' + DB_DATA_DIR="postgresql/data" + ;; + mysql) + DB_DOCKER_IMAGE="mysql:8.0" + DB_ENV_VARS=" - MYSQL_ROOT_PASSWORD=${GITEA_DB_PASSWD} + - MYSQL_DATABASE=${GITEA_DB_NAME} + - MYSQL_USER=${GITEA_DB_USER} + - MYSQL_PASSWORD=${GITEA_DB_PASSWD}" + DB_HEALTHCHECK='["CMD", "mysqladmin", "ping", "-h", "localhost"]' + DB_DATA_DIR="mysql" + ;; + mssql) + DB_DOCKER_IMAGE="mcr.microsoft.com/mssql/server:2022-latest" + DB_ENV_VARS=" - ACCEPT_EULA=Y + - SA_PASSWORD=${GITEA_DB_PASSWD}" + # shellcheck disable=SC2089,SC2016 + DB_HEALTHCHECK='["CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '"'"'${GITEA_DB_PASSWD}'"'"' -Q \"SELECT 1\" -C -N"]' + DB_DATA_DIR="mssql/data" + ;; + esac + # shellcheck disable=SC2090 + export DB_DOCKER_IMAGE DB_ENV_VARS DB_HEALTHCHECK DB_DATA_DIR +} + # --------------------------------------------------------------------------- # Polling / waiting # --------------------------------------------------------------------------- diff --git a/preflight.sh b/preflight.sh index bc32201..72a6e25 100755 --- a/preflight.sh +++ b/preflight.sh @@ -243,7 +243,7 @@ REQUIRED_VARS=( UNRAID_MACVLAN_PARENT UNRAID_MACVLAN_SUBNET UNRAID_MACVLAN_GATEWAY UNRAID_MACVLAN_IP_RANGE UNRAID_GITEA_IP UNRAID_CADDY_IP FEDORA_MACVLAN_PARENT FEDORA_MACVLAN_SUBNET FEDORA_MACVLAN_GATEWAY - FEDORA_MACVLAN_IP_RANGE FEDORA_GITEA_IP FEDORA_CADDY_IP + FEDORA_MACVLAN_IP_RANGE FEDORA_GITEA_IP GITEA_ADMIN_USER GITEA_ADMIN_PASSWORD GITEA_ADMIN_EMAIL GITEA_ORG_NAME GITEA_INSTANCE_NAME GITEA_DOMAIN GITEA_INTERNAL_URL @@ -402,7 +402,7 @@ else # shellcheck disable=SC2329 check_ips_available() { local fail=0 - for ip_var in UNRAID_GITEA_IP UNRAID_CADDY_IP FEDORA_GITEA_IP FEDORA_CADDY_IP; do + for ip_var in UNRAID_GITEA_IP UNRAID_CADDY_IP FEDORA_GITEA_IP; do local ip="${!ip_var:-}" [[ -z "$ip" ]] && continue # ping -c1 -W1: one packet, 1-second timeout diff --git a/setup/configure_env.sh b/setup/configure_env.sh index 93c51ba..0c86e90 100755 --- a/setup/configure_env.sh +++ b/setup/configure_env.sh @@ -65,7 +65,7 @@ get_env_val() { # Prompt function # --------------------------------------------------------------------------- # Base prompt count (fixed prompts + TLS conditional slots — repo/DB prompts added dynamically) -TOTAL_PROMPTS=62 +TOTAL_PROMPTS=61 CURRENT_PROMPT=0 LAST_SECTION="" @@ -254,7 +254,6 @@ prompt_var "FEDORA_MACVLAN_GATEWAY" "Fedora LAN gateway" prompt_var "FEDORA_MACVLAN_IP_RANGE" "Fedora container IP range" nonempty "" "DOCKER NETWORKING" prompt_var "FEDORA_GITEA_IP" "Fedora Gitea container IP" ip "" "DOCKER NETWORKING" prompt_var "FEDORA_DB_IP" "Fedora DB container IP (empty if sqlite3)" optional "" "DOCKER NETWORKING" -prompt_var "FEDORA_CADDY_IP" "Fedora Caddy container IP" ip "" "DOCKER NETWORKING" # --- GITEA SHARED CREDENTIALS --- prompt_var "GITEA_ADMIN_USER" "Admin username (same on both instances)" nonempty "" "GITEA SHARED CREDENTIALS"