feat: add OS compatibility checks before running platform-specific logic
- lib/common.sh: add require_local_os, require_remote_os, require_remote_pkg_manager - setup/macbook.sh: require macOS (Darwin) - setup/unraid.sh: require remote is Linux - setup/fedora.sh: require remote is Linux + has dnf (RPM-based) - manage_runner.sh: native runner add/remove requires macOS - run_all.sh: control plane must be macOS - preflight.sh: 3 new checks (1: local=macOS, 2: Unraid=Linux, 3: Fedora=Linux+dnf) - phase5_migrate_pipelines.sh: fix sed -i to be portable (no macOS-only syntax) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -123,6 +123,55 @@ require_vars() {
|
||||
done
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# OS compatibility checks
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Verify the local machine is running the expected OS.
|
||||
# Usage: require_local_os "Darwin" "This script requires macOS"
|
||||
# os_type: "Darwin" for macOS, "Linux" for Linux
|
||||
# Checks `uname -s` against the expected value.
|
||||
require_local_os() {
|
||||
local expected="$1" msg="${2:-This script requires ${1}}"
|
||||
local actual
|
||||
actual="$(uname -s)"
|
||||
if [[ "$actual" != "$expected" ]]; then
|
||||
log_error "$msg"
|
||||
log_error "Detected OS: $actual (expected: $expected)"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Verify a remote machine (via SSH) is running the expected OS.
|
||||
# Usage: require_remote_os "UNRAID" "Linux" "Unraid must be a Linux machine"
|
||||
# host_key: SSH host key (UNRAID, FEDORA) — uses ssh_exec
|
||||
# os_type: expected `uname -s` output
|
||||
require_remote_os() {
|
||||
local host_key="$1" expected="$2" msg="${3:-Remote host $1 must be running $2}"
|
||||
local actual
|
||||
actual="$(ssh_exec "$host_key" "uname -s" 2>/dev/null)" || {
|
||||
log_error "Cannot determine OS on ${host_key} (SSH failed)"
|
||||
return 1
|
||||
}
|
||||
if [[ "$actual" != "$expected" ]]; then
|
||||
log_error "$msg"
|
||||
log_error "${host_key} detected OS: $actual (expected: $expected)"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Check if a remote host has a specific package manager available.
|
||||
# Usage: require_remote_pkg_manager "FEDORA" "dnf" "Fedora requires dnf"
|
||||
require_remote_pkg_manager() {
|
||||
local host_key="$1" pkg_mgr="$2"
|
||||
local msg="${3:-${host_key} requires ${pkg_mgr}}"
|
||||
if ! ssh_exec "$host_key" "command -v $pkg_mgr" &>/dev/null; then
|
||||
log_error "$msg"
|
||||
log_error "${host_key} does not have '${pkg_mgr}' — is this the right machine?"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# SSH
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user