diff --git a/install.sh b/install.sh index 155f534..61f22d2 100644 --- a/install.sh +++ b/install.sh @@ -2,6 +2,7 @@ set -euo pipefail CATALOG_URL=${XYMEDIA_CATALOG_URL:-https://git.keeper.work/admin/xymediavault-releases/raw/branch/main/catalog-v1.json} +RELEASE_BASE=${XYMEDIA_RELEASE_BASE:-https://git.keeper.work/admin/xymediavault-releases/raw/branch/main} SCRIPT_DIR=$(cd -- "$(dirname -- "$0")" && pwd -P) INSTALL_DIR=/opt/xymediavault PG_HOST=postgres @@ -56,6 +57,20 @@ else fi fi chmod 600 "$PG_PASSWORD_FILE" +TEMPLATE_DIR="$INSTALL_DIR/bootstrap" +mkdir -p "$TEMPLATE_DIR" +template_file() { + local name=$1 local_file="$SCRIPT_DIR/$1" downloaded="$TEMPLATE_DIR/$1" + if [[ -f $local_file ]]; then + printf '%s\n' "$local_file" + return 0 + fi + curl --fail --silent --show-error --location --proto '=https' --tlsv1.2 "$RELEASE_BASE/$name" -o "$downloaded" + printf '%s\n' "$downloaded" +} +CONFIG_TEMPLATE=$(template_file config.yaml) +COMPOSE_TEMPLATE=$(template_file compose.yaml) +DOCKERFILE_TEMPLATE=$(template_file Dockerfile.bootstrap) umask 077 printf 'XYMEDIA_INSTALL_DIR=%s\nXYMEDIA_POSTGRES_HOST=%s\nXYMEDIA_POSTGRES_PORT=%s\nXYMEDIA_POSTGRES_DATABASE=%s\nXYMEDIA_POSTGRES_USER=%s\nXYMEDIA_API_PORT=%s\nXYMEDIA_WEBDAV_PORT=%s\nXYMEDIA_TVBOX_PORT=%s\n' "$INSTALL_DIR" "$PG_HOST" "$PG_PORT" "$PG_DB" "$PG_USER" "$API_PORT" "$WEBDAV_PORT" "$TVBOX_PORT" >"$INSTALL_DIR/.env" curl --fail --silent --show-error --location --proto '=https' --tlsv1.2 "$CATALOG_URL" -o "$INSTALL_DIR/catalog-v1.json" @@ -126,7 +141,7 @@ if (( ! SKIP_COMPONENTS )); then cp "$archive" "$INSTALL_DIR/components/$component.tar.zst" done fi -PG_HOST="$PG_HOST" PG_PORT="$PG_PORT" PG_DB="$PG_DB" PG_USER="$PG_USER" python3 - "$SCRIPT_DIR/config.yaml" "$INSTALL_DIR/config.yaml" <<'PY' +PG_HOST="$PG_HOST" PG_PORT="$PG_PORT" PG_DB="$PG_DB" PG_USER="$PG_USER" python3 - "$CONFIG_TEMPLATE" "$INSTALL_DIR/config.yaml" <<'PY' import os, pathlib, sys template, output = map(pathlib.Path, sys.argv[1:]) values = { @@ -140,7 +155,7 @@ for placeholder, value in values.items(): content = content.replace(placeholder, value) output.write_text(content) PY -cp "$SCRIPT_DIR/compose.yaml" "$SCRIPT_DIR/Dockerfile.bootstrap" "$INSTALL_DIR/" +cp "$COMPOSE_TEMPLATE" "$DOCKERFILE_TEMPLATE" "$INSTALL_DIR/" if [[ ! -f "$INSTALL_DIR/.bootstrap-dockerfile.sha256" || "$(sha256sum "$INSTALL_DIR/Dockerfile.bootstrap" | cut -d' ' -f1)" != "$(<"$INSTALL_DIR/.bootstrap-dockerfile.sha256")" ]]; then "${COMPOSE[@]}" --project-directory "$INSTALL_DIR" --env-file "$INSTALL_DIR/.env" -f "$INSTALL_DIR/compose.yaml" build app sha256sum "$INSTALL_DIR/Dockerfile.bootstrap" | cut -d' ' -f1 >"$INSTALL_DIR/.bootstrap-dockerfile.sha256"