light-heart-labs--ods
115 行
5.3 KiB
Bash
可执行文件
115 行
5.3 KiB
Bash
可执行文件
#!/bin/bash
|
|
# ============================================================================
|
|
# ODS Installer — Compose Selection
|
|
# ============================================================================
|
|
# Part of: installers/lib/
|
|
# Purpose: Resolve which docker-compose overlay files to use based on tier,
|
|
# GPU backend, and capability profile
|
|
#
|
|
# Expects: SCRIPT_DIR, TIER, GPU_BACKEND, CAP_COMPOSE_OVERLAYS, LOG_FILE,
|
|
# GPU_COUNT, log(), warn()
|
|
# Provides: resolve_compose_config() → sets COMPOSE_FILE, COMPOSE_FLAGS
|
|
#
|
|
# Modder notes:
|
|
# Add new compose overlay mappings or backends here.
|
|
# ============================================================================
|
|
|
|
[[ -f "${SCRIPT_DIR:-}/lib/safe-env.sh" ]] && . "${SCRIPT_DIR}/lib/safe-env.sh"
|
|
|
|
resolve_compose_config() {
|
|
COMPOSE_FILE="docker-compose.yml"
|
|
COMPOSE_FLAGS=""
|
|
|
|
if [[ -n "${CAP_COMPOSE_OVERLAYS:-}" ]]; then
|
|
IFS=',' read -r -a profile_overlays <<< "$CAP_COMPOSE_OVERLAYS"
|
|
compose_overlay_ok=true
|
|
for overlay in "${profile_overlays[@]}"; do
|
|
if [[ -f "$SCRIPT_DIR/$overlay" ]]; then
|
|
COMPOSE_FLAGS="$COMPOSE_FLAGS -f $overlay"
|
|
else
|
|
compose_overlay_ok=false
|
|
break
|
|
fi
|
|
done
|
|
if [[ "$compose_overlay_ok" == "true" && ${#profile_overlays[@]} -gt 0 ]]; then
|
|
COMPOSE_FLAGS="${COMPOSE_FLAGS# }"
|
|
COMPOSE_FILE="${profile_overlays[${#profile_overlays[@]}-1]}"
|
|
else
|
|
COMPOSE_FLAGS=""
|
|
fi
|
|
fi
|
|
|
|
# Backward compatibility default if no flags were set.
|
|
if [[ -z "$COMPOSE_FLAGS" ]]; then
|
|
if [[ "$TIER" == "NV_ULTRA" ]]; then
|
|
if [[ -f "$SCRIPT_DIR/docker-compose.base.yml" && -f "$SCRIPT_DIR/docker-compose.nvidia.yml" ]]; then
|
|
COMPOSE_FLAGS="-f docker-compose.base.yml -f docker-compose.nvidia.yml"
|
|
COMPOSE_FILE="docker-compose.nvidia.yml"
|
|
fi
|
|
elif [[ "$TIER" == "CLOUD" ]]; then
|
|
if [[ -f "$SCRIPT_DIR/docker-compose.base.yml" ]]; then
|
|
COMPOSE_FLAGS="-f docker-compose.base.yml"
|
|
COMPOSE_FILE="docker-compose.base.yml"
|
|
fi
|
|
elif [[ "$GPU_BACKEND" == "cpu" ]]; then
|
|
if [[ -f "$SCRIPT_DIR/docker-compose.base.yml" && -f "$SCRIPT_DIR/docker-compose.cpu.yml" ]]; then
|
|
COMPOSE_FLAGS="-f docker-compose.base.yml -f docker-compose.cpu.yml"
|
|
COMPOSE_FILE="docker-compose.cpu.yml"
|
|
fi
|
|
elif [[ "$TIER" == "SH_LARGE" || "$TIER" == "SH_COMPACT" ]]; then
|
|
if [[ -f "$SCRIPT_DIR/docker-compose.base.yml" && -f "$SCRIPT_DIR/docker-compose.amd.yml" ]]; then
|
|
COMPOSE_FLAGS="-f docker-compose.base.yml -f docker-compose.amd.yml"
|
|
COMPOSE_FILE="docker-compose.amd.yml"
|
|
fi
|
|
elif [[ "$TIER" == "ARC" || "$TIER" == "ARC_LITE" || "$GPU_BACKEND" == "intel" || "$GPU_BACKEND" == "sycl" ]]; then
|
|
# Prefer docker-compose.arc.yml (oneAPI build-from-source) when present;
|
|
# fall back to docker-compose.intel.yml (pre-built image) if arc.yml is absent.
|
|
if [[ -f "$SCRIPT_DIR/docker-compose.base.yml" && -f "$SCRIPT_DIR/docker-compose.arc.yml" ]]; then
|
|
COMPOSE_FLAGS="-f docker-compose.base.yml -f docker-compose.arc.yml"
|
|
COMPOSE_FILE="docker-compose.arc.yml"
|
|
elif [[ -f "$SCRIPT_DIR/docker-compose.base.yml" && -f "$SCRIPT_DIR/docker-compose.intel.yml" ]]; then
|
|
COMPOSE_FLAGS="-f docker-compose.base.yml -f docker-compose.intel.yml"
|
|
COMPOSE_FILE="docker-compose.intel.yml"
|
|
fi
|
|
else
|
|
if [[ -f "$SCRIPT_DIR/docker-compose.base.yml" && -f "$SCRIPT_DIR/docker-compose.nvidia.yml" ]]; then
|
|
COMPOSE_FLAGS="-f docker-compose.base.yml -f docker-compose.nvidia.yml"
|
|
COMPOSE_FILE="docker-compose.nvidia.yml"
|
|
elif [[ -f "$SCRIPT_DIR/docker-compose.yml" ]]; then
|
|
COMPOSE_FLAGS="-f docker-compose.yml"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [[ -z "$COMPOSE_FLAGS" ]]; then
|
|
COMPOSE_FLAGS="-f $COMPOSE_FILE"
|
|
fi
|
|
|
|
if [[ -x "$SCRIPT_DIR/scripts/resolve-compose-stack.sh" ]]; then
|
|
COMPOSE_ENV="$("$SCRIPT_DIR/scripts/resolve-compose-stack.sh" \
|
|
--script-dir "$SCRIPT_DIR" \
|
|
--tier "$TIER" \
|
|
--gpu-backend "$GPU_BACKEND" \
|
|
--profile-overlays "${CAP_COMPOSE_OVERLAYS:-}" \
|
|
--gpu-count "${GPU_COUNT:-1}" \
|
|
--ods-mode "${ODS_MODE:-local}" \
|
|
--env 2>>"$LOG_FILE")"
|
|
load_env_from_output <<< "$COMPOSE_ENV"
|
|
fi
|
|
|
|
# Layer Tier 0 memory overlay for low-RAM machines
|
|
if [[ "$TIER" == "0" && -f "$SCRIPT_DIR/docker-compose.tier0.yml" ]]; then
|
|
COMPOSE_FLAGS="$COMPOSE_FLAGS -f docker-compose.tier0.yml"
|
|
log "Including docker-compose.tier0.yml (Tier 0 memory limits)"
|
|
fi
|
|
|
|
# Auto-include docker-compose.override.yml if present (standard Docker convention).
|
|
# This lets modders add services without editing core compose files.
|
|
if [[ -f "$SCRIPT_DIR/docker-compose.override.yml" ]]; then
|
|
COMPOSE_FLAGS="$COMPOSE_FLAGS -f docker-compose.override.yml"
|
|
log "Including docker-compose.override.yml (user overrides)"
|
|
fi
|
|
|
|
log "Compose selection: $COMPOSE_FLAGS"
|
|
}
|