Add minimum version validation for all dependencies across local and remote machines (jq>=1.6, curl>=7.70, git>=2.30, docker>=20.0, compose>=2.0, shellcheck>=0.8, gh>=2.0). Setup scripts now record every install action to .manifests/<host>.manifest files, enabling full rollback via setup/cleanup.sh. teardown_all.sh gains --cleanup flag to chain prerequisite removal after phase teardowns. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
110 lines
4.9 KiB
Bash
Executable File
110 lines
4.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# =============================================================================
|
|
# setup/unraid.sh — Install prerequisites on Unraid (runs via SSH from MacBook)
|
|
# =============================================================================
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
source "${SCRIPT_DIR}/../lib/common.sh"
|
|
|
|
load_env
|
|
require_vars UNRAID_IP UNRAID_SSH_USER UNRAID_GITEA_DATA_PATH
|
|
|
|
log_info "=== Unraid Setup ==="
|
|
|
|
# --------------------------------------------------------------------------
|
|
# OS check — Unraid must be Linux (Docker, static binaries, x86_64)
|
|
# --------------------------------------------------------------------------
|
|
log_info "Verifying Unraid OS..."
|
|
require_remote_os "UNRAID" "Linux" "Unraid must be a Linux machine — check UNRAID_IP in .env"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Manifest — track what we install for rollback/cleanup
|
|
# --------------------------------------------------------------------------
|
|
manifest_init "unraid"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# SSH connectivity
|
|
# --------------------------------------------------------------------------
|
|
log_info "Testing SSH to Unraid..."
|
|
if ! ssh_check UNRAID; then
|
|
log_error "Cannot SSH to Unraid at $UNRAID_IP as $UNRAID_SSH_USER"
|
|
exit 1
|
|
fi
|
|
log_success "SSH to Unraid OK"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Docker (pre-installed on Unraid — DO NOT attempt to install)
|
|
# --------------------------------------------------------------------------
|
|
if ssh_exec UNRAID "docker --version" &>/dev/null; then
|
|
log_success "Docker found on Unraid"
|
|
else
|
|
log_error "Docker not found on Unraid."
|
|
log_error "Enable Docker via Unraid's Settings > Docker page."
|
|
log_error "This script does not install Docker on Unraid."
|
|
exit 1
|
|
fi
|
|
|
|
# --------------------------------------------------------------------------
|
|
# docker-compose (try plugin first, then standalone)
|
|
# --------------------------------------------------------------------------
|
|
if ssh_exec UNRAID "docker compose version" &>/dev/null; then
|
|
log_success "docker compose (plugin) found on Unraid"
|
|
elif ssh_exec UNRAID "docker-compose --version" &>/dev/null; then
|
|
log_success "docker-compose (standalone) found on Unraid"
|
|
else
|
|
log_info "Installing docker-compose standalone binary on Unraid..."
|
|
COMPOSE_VERSION="v2.29.1"
|
|
ssh_exec UNRAID "curl -SL https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose"
|
|
manifest_record "unraid" "static_bin" "/usr/local/bin/docker-compose"
|
|
if ssh_exec UNRAID "docker-compose --version" &>/dev/null; then
|
|
log_success "docker-compose installed on Unraid"
|
|
else
|
|
log_error "Failed to install docker-compose on Unraid"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# --------------------------------------------------------------------------
|
|
# jq (install via static binary — Unraid has no package manager)
|
|
# --------------------------------------------------------------------------
|
|
if ssh_exec UNRAID "jq --version" &>/dev/null; then
|
|
log_success "jq found on Unraid"
|
|
else
|
|
log_info "Installing jq static binary on Unraid..."
|
|
JQ_VERSION="1.7.1"
|
|
ssh_exec UNRAID "curl -SL https://github.com/jqlang/jq/releases/download/jq-${JQ_VERSION}/jq-linux-amd64 -o /usr/local/bin/jq && chmod +x /usr/local/bin/jq"
|
|
manifest_record "unraid" "static_bin" "/usr/local/bin/jq"
|
|
if ssh_exec UNRAID "jq --version" &>/dev/null; then
|
|
log_success "jq installed on Unraid"
|
|
else
|
|
log_error "Failed to install jq on Unraid"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Minimum version checks for remote tools
|
|
# --------------------------------------------------------------------------
|
|
log_info "Checking minimum versions on Unraid..."
|
|
check_remote_min_version "UNRAID" "docker" "docker --version" "20.0"
|
|
check_remote_min_version "UNRAID" "docker-compose" "docker compose version 2>/dev/null || docker-compose --version" "2.0"
|
|
check_remote_min_version "UNRAID" "jq" "jq --version" "1.6"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Data path
|
|
# --------------------------------------------------------------------------
|
|
log_info "Verifying data path: $UNRAID_GITEA_DATA_PATH"
|
|
if ssh_exec UNRAID "mkdir -p '$UNRAID_GITEA_DATA_PATH' && touch '$UNRAID_GITEA_DATA_PATH/.write-test' && rm '$UNRAID_GITEA_DATA_PATH/.write-test'"; then
|
|
log_success "Data path exists and is writable"
|
|
else
|
|
log_error "Cannot write to $UNRAID_GITEA_DATA_PATH on Unraid"
|
|
exit 1
|
|
fi
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Summary
|
|
# --------------------------------------------------------------------------
|
|
log_success "All Unraid prerequisites satisfied"
|