Remove remaining OS-specific hardcodes from core scripts
OS version reads now go through platform_get_os_version() and platform_os_version_probe_cmd() instead of grepping /etc/unraid-version directly. STATE_DIR fallbacks to /boot/config removed — STATE_DIR is always set by load_config.sh and the fallback encoded a platform-specific path. Setup DB path references use platform_setup_db_path() instead of the VARAVERK_SETUP_FILE/-/boot/config compound fallback. DOCKER_APPDATA_BASE default removed from arr_sync.sh — the adapter sets it.
This commit is contained in:
@@ -345,7 +345,7 @@ state_init() {
|
|||||||
# Returns 0 (true) if the local partnership DB reports an ACTIVE partnership.
|
# Returns 0 (true) if the local partnership DB reports an ACTIVE partnership.
|
||||||
# Reads /boot/config/partnership_<hostname>.db — no subprocess, no SSH.
|
# Reads /boot/config/partnership_<hostname>.db — no subprocess, no SSH.
|
||||||
check_partnership_active() {
|
check_partnership_active() {
|
||||||
local state_file="${STATE_DIR:-/boot/config}/partnership_${LOCAL_SERVER_NAME}.db"
|
local state_file="${STATE_DIR}/partnership_${LOCAL_SERVER_NAME}.db"
|
||||||
local state
|
local state
|
||||||
state=$(grep "^state=" "$state_file" 2>/dev/null | cut -d= -f2)
|
state=$(grep "^state=" "$state_file" 2>/dev/null | cut -d= -f2)
|
||||||
[[ "$state" == "ACTIVE" ]]
|
[[ "$state" == "ACTIVE" ]]
|
||||||
@@ -603,13 +603,13 @@ if [[ "$SHOW_STATUS" == true ]]; then
|
|||||||
TIER4=$(state_get tier4_started)
|
TIER4=$(state_get tier4_started)
|
||||||
STRIKES=$(state_get handback_strikes)
|
STRIKES=$(state_get handback_strikes)
|
||||||
|
|
||||||
local_ver=$(grep -oP '(?<=version=")[^"]+' /etc/unraid-version 2>/dev/null || echo "unknown")
|
local_ver=$(platform_get_os_version 2>/dev/null || echo "unknown")
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "━━━━━ $ICON_SUMMARY FALLBACK STATUS ━━━━━"
|
echo "━━━━━ $ICON_SUMMARY FALLBACK STATUS ━━━━━"
|
||||||
echo "$ICON_HOST My ID: $MY_ID ($LOCAL_SERVER_NAME)"
|
echo "$ICON_HOST My ID: $MY_ID ($LOCAL_SERVER_NAME)"
|
||||||
echo "$ICON_HOST Remote ID: $REMOTE_ID ($REMOTE_SERVER_NAME — $REMOTE_SERVER)"
|
echo "$ICON_HOST Remote ID: $REMOTE_ID ($REMOTE_SERVER_NAME — $REMOTE_SERVER)"
|
||||||
echo "$ICON_GEAR unRAID ver: $local_ver"
|
echo "$ICON_GEAR OS ver: $local_ver"
|
||||||
echo "$ICON_FALLBACK State: $CURRENT_STATE"
|
echo "$ICON_FALLBACK State: $CURRENT_STATE"
|
||||||
echo "$ICON_NET Local DDNS: ${LOCAL_DDNS_CONTAINERS[*]:-none}"
|
echo "$ICON_NET Local DDNS: ${LOCAL_DDNS_CONTAINERS[*]:-none}"
|
||||||
echo "$ICON_NET Remote DDNS: ${REMOTE_DDNS_CONTAINERS[*]:-none}"
|
echo "$ICON_NET Remote DDNS: ${REMOTE_DDNS_CONTAINERS[*]:-none}"
|
||||||
|
|||||||
@@ -185,13 +185,13 @@ log "$ICON_GEAR Config: remote=${REMOTE_SERVER_NAME} (${REMOTE_SERVER}) fallback
|
|||||||
# ━━━ Status ━━━
|
# ━━━ Status ━━━
|
||||||
# ==============================================================================================
|
# ==============================================================================================
|
||||||
if [[ "$SHOW_STATUS" == true ]]; then
|
if [[ "$SHOW_STATUS" == true ]]; then
|
||||||
local_ver=$(grep -oP '(?<=version=")[^"]+' /etc/unraid-version 2>/dev/null || echo "unknown")
|
local_ver=$(platform_get_os_version 2>/dev/null || echo "unknown")
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "━━━━━ $ICON_SUMMARY STATUS ━━━━━"
|
echo "━━━━━ $ICON_SUMMARY STATUS ━━━━━"
|
||||||
echo "$ICON_HOST My ID: $MY_ID ($LOCAL_SERVER_NAME)"
|
echo "$ICON_HOST My ID: $MY_ID ($LOCAL_SERVER_NAME)"
|
||||||
echo "$ICON_HOST Remote ID: $REMOTE_ID ($REMOTE_SERVER_NAME — $REMOTE_SERVER)"
|
echo "$ICON_HOST Remote ID: $REMOTE_ID ($REMOTE_SERVER_NAME — $REMOTE_SERVER)"
|
||||||
echo "$ICON_GEAR unRAID ver: $local_ver"
|
echo "$ICON_GEAR OS ver: $local_ver"
|
||||||
echo "$ICON_FALLBACK Block wait: ${FALLBACK_TEST_BLOCK_WAIT}s"
|
echo "$ICON_FALLBACK Block wait: ${FALLBACK_TEST_BLOCK_WAIT}s"
|
||||||
echo "$ICON_FALLBACK Handback wait: ${FALLBACK_TEST_HANDBACK_WAIT}s"
|
echo "$ICON_FALLBACK Handback wait: ${FALLBACK_TEST_HANDBACK_WAIT}s"
|
||||||
echo "$ICON_FALLBACK Check interval: ${FALLBACK_CHECK_INTERVAL}s"
|
echo "$ICON_FALLBACK Check interval: ${FALLBACK_CHECK_INTERVAL}s"
|
||||||
|
|||||||
+1
-1
@@ -178,7 +178,7 @@ ARR_SYNC_ENABLED="${ARR_SYNC_ENABLED:-true}"
|
|||||||
ARR_SYNC_BLOCKLIST="${ARR_SYNC_BLOCKLIST:-${DATA_DIR}/arr_sync_blocklist.tsv}"
|
ARR_SYNC_BLOCKLIST="${ARR_SYNC_BLOCKLIST:-${DATA_DIR}/arr_sync_blocklist.tsv}"
|
||||||
ARR_SYNC_CONNECT_TIMEOUT="${ARR_SYNC_CONNECT_TIMEOUT:-10}"
|
ARR_SYNC_CONNECT_TIMEOUT="${ARR_SYNC_CONNECT_TIMEOUT:-10}"
|
||||||
ARR_SYNC_API_TIMEOUT="${ARR_SYNC_API_TIMEOUT:-60}"
|
ARR_SYNC_API_TIMEOUT="${ARR_SYNC_API_TIMEOUT:-60}"
|
||||||
DOCKER_APPDATA_BASE="${DOCKER_APPDATA_BASE:-/mnt/user/appdata}"
|
|
||||||
ARR_SYNC_LIDARR_PORT="${ARR_SYNC_LIDARR_PORT:-8686}"
|
ARR_SYNC_LIDARR_PORT="${ARR_SYNC_LIDARR_PORT:-8686}"
|
||||||
ARR_SYNC_SONARR_PORT="${ARR_SYNC_SONARR_PORT:-8989}"
|
ARR_SYNC_SONARR_PORT="${ARR_SYNC_SONARR_PORT:-8989}"
|
||||||
ARR_SYNC_RADARR_PORT="${ARR_SYNC_RADARR_PORT:-7878}"
|
ARR_SYNC_RADARR_PORT="${ARR_SYNC_RADARR_PORT:-7878}"
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ fi
|
|||||||
# ==============================================================================================
|
# ==============================================================================================
|
||||||
# ━━━ Main ━━━
|
# ━━━ Main ━━━
|
||||||
# ==============================================================================================
|
# ==============================================================================================
|
||||||
_unraid_ver=$(grep -oP '(?<=version=")[^"]+' /etc/unraid-version 2>/dev/null || echo "unknown")
|
_unraid_ver=$(platform_get_os_version 2>/dev/null || echo "unknown")
|
||||||
_uptime_s=$(awk '{print int($1)}' /proc/uptime 2>/dev/null || echo 0)
|
_uptime_s=$(awk '{print int($1)}' /proc/uptime 2>/dev/null || echo 0)
|
||||||
_container_count=$(docker ps -q 2>/dev/null | wc -l || echo 0)
|
_container_count=$(docker ps -q 2>/dev/null | wc -l || echo 0)
|
||||||
_rootfs_pct=$(df / --output=pcent 2>/dev/null | tail -1 | tr -d ' %')
|
_rootfs_pct=$(df / --output=pcent 2>/dev/null | tail -1 | tr -d ' %')
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ OWNER_ID="${PARTNERSHIP_OWNER_HOST:-HOST1}"
|
|||||||
MIRROR_ID=$( [[ "$OWNER_ID" == "HOST1" ]] && echo "HOST2" || echo "HOST1" )
|
MIRROR_ID=$( [[ "$OWNER_ID" == "HOST1" ]] && echo "HOST2" || echo "HOST1" )
|
||||||
MIRROR="${!MIRROR_ID}"
|
MIRROR="${!MIRROR_ID}"
|
||||||
SSH_KEY_PUB="${SSH_KEY}.pub"
|
SSH_KEY_PUB="${SSH_KEY}.pub"
|
||||||
STATE_FILE="${VARAVERK_SETUP_FILE:-${STATE_DIR:-/boot/config}/varaverk_setup.db}"
|
STATE_FILE="$(platform_setup_db_path)"
|
||||||
AUTH_KEYS="/root/.ssh/authorized_keys"
|
AUTH_KEYS="/root/.ssh/authorized_keys"
|
||||||
MIRROR_SHORT="${MIRROR%%.*}"
|
MIRROR_SHORT="${MIRROR%%.*}"
|
||||||
|
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ source "$SCRIPT_DIR/../load_config.sh"
|
|||||||
source "$SCRIPT_DIR/../Plugin/$PLATFORM/Partnership/containers.sh"
|
source "$SCRIPT_DIR/../Plugin/$PLATFORM/Partnership/containers.sh"
|
||||||
|
|
||||||
SSH_TIMEOUT=15
|
SSH_TIMEOUT=15
|
||||||
BLOCKLIST_FILE="${PARTNERSHIP_BLOCKLIST_FILE:-${STATE_DIR:-/boot/config}/partnership_blocklist.db}"
|
BLOCKLIST_FILE="${PARTNERSHIP_BLOCKLIST_FILE:-${STATE_DIR}/partnership_blocklist.db}"
|
||||||
|
|
||||||
# ── Parse mode flags before parse_args ────────────────────────────────────────────────────────
|
# ── Parse mode flags before parse_args ────────────────────────────────────────────────────────
|
||||||
MODE=""
|
MODE=""
|
||||||
@@ -267,11 +267,11 @@ AM_MIRROR=false
|
|||||||
[[ "$MY_ID" == "$MIRROR_ID" ]] && AM_MIRROR=true
|
[[ "$MY_ID" == "$MIRROR_ID" ]] && AM_MIRROR=true
|
||||||
|
|
||||||
# State files
|
# State files
|
||||||
LOCAL_STATE_FILE="${STATE_DIR:-/boot/config}/partnership_${LOCAL_SERVER_NAME}.db"
|
LOCAL_STATE_FILE="${STATE_DIR}/partnership_${LOCAL_SERVER_NAME}.db"
|
||||||
REMOTE_STATE_FILE="${STATE_DIR:-/boot/config}/partnership_${REMOTE_SERVER_NAME}.db"
|
REMOTE_STATE_FILE="${STATE_DIR}/partnership_${REMOTE_SERVER_NAME}.db"
|
||||||
OWNER_STATE_FILE="${STATE_DIR:-/boot/config}/partnership_${OWNER}.db"
|
OWNER_STATE_FILE="${STATE_DIR}/partnership_${OWNER}.db"
|
||||||
MIRROR_STATE_FILE="${STATE_DIR:-/boot/config}/partnership_${MIRROR}.db"
|
MIRROR_STATE_FILE="${STATE_DIR}/partnership_${MIRROR}.db"
|
||||||
OFFLINE_COUNTER="${STATE_DIR:-/boot/config}/partnership_offline_days.db"
|
OFFLINE_COUNTER="${STATE_DIR}/partnership_offline_days.db"
|
||||||
|
|
||||||
# ── Exit Trap — restart locally stopped containers if script crashes mid-cleanup ──────────────
|
# ── Exit Trap — restart locally stopped containers if script crashes mid-cleanup ──────────────
|
||||||
# Used by cleanup_partner_containers() — also shared with partnership_offboard.sh which
|
# Used by cleanup_partner_containers() — also shared with partnership_offboard.sh which
|
||||||
@@ -1175,7 +1175,7 @@ if [[ "$MODE" == "onboard" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Write HOST1_LOCAL_DONE flag to setup.db
|
# Write HOST1_LOCAL_DONE flag to setup.db
|
||||||
local_state_file="${VARAVERK_SETUP_FILE:-${STATE_DIR:-/boot/config}/varaverk_setup.db}"
|
local_state_file="$(platform_setup_db_path)"
|
||||||
if [[ "$DRY_RUN" == false ]]; then
|
if [[ "$DRY_RUN" == false ]]; then
|
||||||
flag_key="${MY_ID}_LOCAL_DONE"
|
flag_key="${MY_ID}_LOCAL_DONE"
|
||||||
if grep -q "^${flag_key}=" "$local_state_file" 2>/dev/null; then
|
if grep -q "^${flag_key}=" "$local_state_file" 2>/dev/null; then
|
||||||
|
|||||||
@@ -120,11 +120,11 @@ AM_MIRROR=false
|
|||||||
[[ "$MY_ID" == "$OWNER_ID" ]] && AM_OWNER=true
|
[[ "$MY_ID" == "$OWNER_ID" ]] && AM_OWNER=true
|
||||||
[[ "$MY_ID" == "$MIRROR_ID" ]] && AM_MIRROR=true
|
[[ "$MY_ID" == "$MIRROR_ID" ]] && AM_MIRROR=true
|
||||||
|
|
||||||
LOCAL_STATE_FILE="${STATE_DIR:-/boot/config}/partnership_${LOCAL_SERVER_NAME}.db"
|
LOCAL_STATE_FILE="${STATE_DIR}/partnership_${LOCAL_SERVER_NAME}.db"
|
||||||
REMOTE_STATE_FILE="${STATE_DIR:-/boot/config}/partnership_${REMOTE_SERVER_NAME}.db"
|
REMOTE_STATE_FILE="${STATE_DIR}/partnership_${REMOTE_SERVER_NAME}.db"
|
||||||
OWNER_STATE_FILE="${STATE_DIR:-/boot/config}/partnership_${OWNER}.db"
|
OWNER_STATE_FILE="${STATE_DIR}/partnership_${OWNER}.db"
|
||||||
MIRROR_STATE_FILE="${STATE_DIR:-/boot/config}/partnership_${MIRROR}.db"
|
MIRROR_STATE_FILE="${STATE_DIR}/partnership_${MIRROR}.db"
|
||||||
OFFLINE_COUNTER="${STATE_DIR:-/boot/config}/partnership_offline_days.db"
|
OFFLINE_COUNTER="${STATE_DIR}/partnership_offline_days.db"
|
||||||
|
|
||||||
acquire_lock "strict"
|
acquire_lock "strict"
|
||||||
|
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ START=$(date +%s)
|
|||||||
write_onboard_phase() {
|
write_onboard_phase() {
|
||||||
local target_id="$1" phase="$2"
|
local target_id="$1" phase="$2"
|
||||||
local key="${target_id}_PHASE${phase}_DONE"
|
local key="${target_id}_PHASE${phase}_DONE"
|
||||||
local state_file="${VARAVERK_SETUP_FILE:-${STATE_DIR:-/boot/config}/varaverk_setup.db}"
|
local state_file="$(platform_setup_db_path)"
|
||||||
[[ "$DRY_RUN" == true ]] && { warn "DRY RUN — would write ${key}=true"; return 0; }
|
[[ "$DRY_RUN" == true ]] && { warn "DRY RUN — would write ${key}=true"; return 0; }
|
||||||
if grep -q "^${key}=" "$state_file" 2>/dev/null; then
|
if grep -q "^${key}=" "$state_file" 2>/dev/null; then
|
||||||
sed -i "s|^${key}=.*|${key}=true|" "$state_file"
|
sed -i "s|^${key}=.*|${key}=true|" "$state_file"
|
||||||
@@ -412,7 +412,7 @@ elif [[ "$PHASE1_ONLY" == true ]]; then
|
|||||||
# Write key-ready flag so UI can show the manual-install state
|
# Write key-ready flag so UI can show the manual-install state
|
||||||
[[ "$DRY_RUN" == false ]] && {
|
[[ "$DRY_RUN" == false ]] && {
|
||||||
local kflag="${MIRROR_ID}_KEY_READY"
|
local kflag="${MIRROR_ID}_KEY_READY"
|
||||||
local _setup_f="${VARAVERK_SETUP_FILE:-${STATE_DIR:-/boot/config}/varaverk_setup.db}"
|
local _setup_f="$(platform_setup_db_path)"
|
||||||
grep -q "^${kflag}=" "$_setup_f" 2>/dev/null \
|
grep -q "^${kflag}=" "$_setup_f" 2>/dev/null \
|
||||||
&& sed -i "s|^${kflag}=.*|${kflag}=true|" "$_setup_f" \
|
&& sed -i "s|^${kflag}=.*|${kflag}=true|" "$_setup_f" \
|
||||||
|| echo "${kflag}=true" >> "$_setup_f"
|
|| echo "${kflag}=true" >> "$_setup_f"
|
||||||
|
|||||||
@@ -140,8 +140,8 @@ AM_MIRROR=false
|
|||||||
[[ "$MY_ID" == "$OWNER_ID" ]] && AM_OWNER=true
|
[[ "$MY_ID" == "$OWNER_ID" ]] && AM_OWNER=true
|
||||||
[[ "$MY_ID" == "$MIRROR_ID" ]] && AM_MIRROR=true
|
[[ "$MY_ID" == "$MIRROR_ID" ]] && AM_MIRROR=true
|
||||||
|
|
||||||
LOCAL_STATE_FILE="${STATE_DIR:-/boot/config}/partnership_${LOCAL_SERVER_NAME}.db"
|
LOCAL_STATE_FILE="${STATE_DIR}/partnership_${LOCAL_SERVER_NAME}.db"
|
||||||
REMOTE_STATE_FILE="${STATE_DIR:-/boot/config}/partnership_${REMOTE_SERVER_NAME}.db"
|
REMOTE_STATE_FILE="${STATE_DIR}/partnership_${REMOTE_SERVER_NAME}.db"
|
||||||
|
|
||||||
acquire_lock "strict"
|
acquire_lock "strict"
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,8 @@
|
|||||||
# platform_scripts_dir_probe_cmd — shell command to run on a remote to discover its SCRIPTS_DIR
|
# platform_scripts_dir_probe_cmd — shell command to run on a remote to discover its SCRIPTS_DIR
|
||||||
# platform_get_templates_dir — path to Unraid CA docker templates-user directory
|
# platform_get_templates_dir — path to Unraid CA docker templates-user directory
|
||||||
# platform_setup_db_path — path to the persistent Varaverk setup/wizard state database
|
# platform_setup_db_path — path to the persistent Varaverk setup/wizard state database
|
||||||
|
# platform_get_os_version — local OS version string (e.g. "7.2.3")
|
||||||
|
# platform_os_version_probe_cmd — shell command to run on a remote to retrieve its OS version
|
||||||
# platform_rebuild_container — rebuild a container from its stored XML template
|
# platform_rebuild_container — rebuild a container from its stored XML template
|
||||||
# platform_push_conf — push master.conf to all listed hosts via WebGUI PHP
|
# platform_push_conf — push master.conf to all listed hosts via WebGUI PHP
|
||||||
# platform_push_setup_state — push wizard setup state to WebGUI PHP
|
# platform_push_setup_state — push wizard setup state to WebGUI PHP
|
||||||
@@ -275,6 +277,27 @@ platform_setup_db_path() {
|
|||||||
echo "/boot/config/varaverk_setup.db"
|
echo "/boot/config/varaverk_setup.db"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ──────────────────────────────────────────────────────────────────────────────────────────────
|
||||||
|
# platform_get_os_version
|
||||||
|
# Writes the platform OS version string to stdout (e.g. "7.2.3").
|
||||||
|
# Returns 1 if the version file is absent or unparseable.
|
||||||
|
# ──────────────────────────────────────────────────────────────────────────────────────────────
|
||||||
|
platform_get_os_version() {
|
||||||
|
local ver
|
||||||
|
ver=$(grep -oP '(?<=version=")[^"]+' /etc/unraid-version 2>/dev/null)
|
||||||
|
[[ -n "$ver" ]] || return 1
|
||||||
|
echo "$ver"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ──────────────────────────────────────────────────────────────────────────────────────────────
|
||||||
|
# platform_os_version_probe_cmd
|
||||||
|
# Writes a shell command suitable for running on a remote via SSH to retrieve
|
||||||
|
# that remote's OS version string. Output format matches platform_get_os_version.
|
||||||
|
# ──────────────────────────────────────────────────────────────────────────────────────────────
|
||||||
|
platform_os_version_probe_cmd() {
|
||||||
|
echo "grep -oP '(?<=version=\")[^\"]+' /etc/unraid-version 2>/dev/null"
|
||||||
|
}
|
||||||
|
|
||||||
# ──────────────────────────────────────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────────────────────────────────────
|
||||||
# platform_rebuild_container <container_name>
|
# platform_rebuild_container <container_name>
|
||||||
# Rebuilds a container from its stored Unraid CA XML template (stops old, recreates on new
|
# Rebuilds a container from its stored Unraid CA XML template (stops old, recreates on new
|
||||||
|
|||||||
+1
-1
@@ -180,7 +180,7 @@ if ! check_rsync_enabled; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Blocklist gate — refuse to sync with a partner blocked after offboard
|
# Blocklist gate — refuse to sync with a partner blocked after offboard
|
||||||
BLOCKLIST_FILE="${PARTNERSHIP_BLOCKLIST_FILE:-${STATE_DIR:-/boot/config}/partnership_blocklist.db}"
|
BLOCKLIST_FILE="${PARTNERSHIP_BLOCKLIST_FILE:-${STATE_DIR}/partnership_blocklist.db}"
|
||||||
if [[ -f "$BLOCKLIST_FILE" ]] && grep -q "^${REMOTE_SERVER_NAME}|" "$BLOCKLIST_FILE" 2>/dev/null; then
|
if [[ -f "$BLOCKLIST_FILE" ]] && grep -q "^${REMOTE_SERVER_NAME}|" "$BLOCKLIST_FILE" 2>/dev/null; then
|
||||||
error "Rsync blocked — $REMOTE_SERVER_NAME is on the partnership blocklist"
|
error "Rsync blocked — $REMOTE_SERVER_NAME is on the partnership blocklist"
|
||||||
error "Re-onboard the partnership to restore access: partnership_manager.sh --onboard"
|
error "Re-onboard the partnership to restore access: partnership_manager.sh --onboard"
|
||||||
|
|||||||
@@ -81,7 +81,7 @@
|
|||||||
#
|
#
|
||||||
# Three new safety functions added:
|
# Three new safety functions added:
|
||||||
# check_unraid_version_parity() — refuses remote ops on version mismatch
|
# check_unraid_version_parity() — refuses remote ops on version mismatch
|
||||||
# reads /etc/unraid-version local and remote via SSH
|
# reads OS version via platform_get_os_version() / platform_os_version_probe_cmd()
|
||||||
# major mismatch → abort | minor mismatch → configurable warn/abort
|
# major mismatch → abort | minor mismatch → configurable warn/abort
|
||||||
# check_remote_docker_daemon() — verifies remote Docker daemon before
|
# check_remote_docker_daemon() — verifies remote Docker daemon before
|
||||||
# issuing any remote container commands — strike system → skip/retry/exit
|
# issuing any remote container commands — strike system → skip/retry/exit
|
||||||
@@ -1741,7 +1741,7 @@ check_api() {
|
|||||||
# remote operation. Version mismatches can mean changed APIs, commands, or behaviours
|
# remote operation. Version mismatches can mean changed APIs, commands, or behaviours
|
||||||
# that silently break remote container operations, rsync, or fallback logic.
|
# that silently break remote container operations, rsync, or fallback logic.
|
||||||
#
|
#
|
||||||
# Reads /etc/unraid-version on both sides — format: version="7.2.3"
|
# Reads platform OS version on both sides via adapter.
|
||||||
#
|
#
|
||||||
# Mismatch behaviour (UNRAID_VERSION_MISMATCH_ACTION in master.conf):
|
# Mismatch behaviour (UNRAID_VERSION_MISMATCH_ACTION in master.conf):
|
||||||
# "warn" — log warning and continue (default for minor/patch differences)
|
# "warn" — log warning and continue (default for minor/patch differences)
|
||||||
@@ -1754,28 +1754,26 @@ check_unraid_version_parity() {
|
|||||||
local local_version remote_version
|
local local_version remote_version
|
||||||
|
|
||||||
# Read local version
|
# Read local version
|
||||||
if [[ ! -f /etc/unraid-version ]]; then
|
local_version=$(platform_get_os_version 2>/dev/null)
|
||||||
warn "Cannot read local /etc/unraid-version — skipping version parity check"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
local_version=$(grep -oP '(?<=version=")[^"]+' /etc/unraid-version 2>/dev/null)
|
|
||||||
if [[ -z "$local_version" ]]; then
|
if [[ -z "$local_version" ]]; then
|
||||||
warn "Cannot parse local unRAID version — skipping parity check"
|
warn "Cannot read local OS version — skipping version parity check"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Read remote version via SSH
|
# Read remote version via SSH
|
||||||
|
local _probe_cmd
|
||||||
|
_probe_cmd=$(platform_os_version_probe_cmd)
|
||||||
remote_version=$(ssh -i "$SSH_KEY" -o ConnectTimeout=10 root@"$REMOTE_SERVER" \
|
remote_version=$(ssh -i "$SSH_KEY" -o ConnectTimeout=10 root@"$REMOTE_SERVER" \
|
||||||
"grep -oP '(?<=version=\")[^\"]+' /etc/unraid-version 2>/dev/null" 2>/dev/null)
|
"$_probe_cmd" 2>/dev/null)
|
||||||
if [[ -z "$remote_version" ]]; then
|
if [[ -z "$remote_version" ]]; then
|
||||||
warn "Cannot read remote unRAID version from $REMOTE_SERVER_NAME — skipping parity check"
|
warn "Cannot read remote OS version from $REMOTE_SERVER_NAME — skipping parity check"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "Version parity: local=$local_version remote=$remote_version"
|
log "Version parity: local=$local_version remote=$remote_version"
|
||||||
|
|
||||||
if [[ "$local_version" == "$remote_version" ]]; then
|
if [[ "$local_version" == "$remote_version" ]]; then
|
||||||
log "unRAID versions match: $local_version ✅"
|
log "OS versions match: $local_version ✅"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1785,20 +1783,22 @@ check_unraid_version_parity() {
|
|||||||
remote_major="${remote_version%%.*}"
|
remote_major="${remote_version%%.*}"
|
||||||
|
|
||||||
if [[ "$local_major" != "$remote_major" ]]; then
|
if [[ "$local_major" != "$remote_major" ]]; then
|
||||||
error "unRAID MAJOR version mismatch — local: $local_version remote: $remote_version"
|
error "OS MAJOR version mismatch — local: $local_version remote: $remote_version"
|
||||||
error "Major version differences may break remote APIs, commands, and behaviours"
|
error "Major version differences may break remote APIs, commands, and behaviours"
|
||||||
error "Update both servers to the same major version before running remote operations"
|
error "Update both servers to the same major version before running remote operations"
|
||||||
notify "unRAID major version mismatch on $(hostname) — local: $local_version remote: $remote_version — remote operations aborted" "Version Parity" "warning"
|
notify "OS major version mismatch on $(hostname) — local: $local_version remote: $remote_version — remote operations aborted" \
|
||||||
|
"Version Parity" "warning"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Minor/patch mismatch — action depends on config
|
# Minor/patch mismatch — action depends on config
|
||||||
local action="${UNRAID_VERSION_MISMATCH_ACTION:-warn}"
|
local action="${UNRAID_VERSION_MISMATCH_ACTION:-warn}"
|
||||||
warn "unRAID version mismatch — local: $local_version remote: $remote_version"
|
warn "OS version mismatch — local: $local_version remote: $remote_version"
|
||||||
|
|
||||||
if [[ "$action" == "abort" ]]; then
|
if [[ "$action" == "abort" ]]; then
|
||||||
error "UNRAID_VERSION_MISMATCH_ACTION=abort — refusing to continue"
|
error "UNRAID_VERSION_MISMATCH_ACTION=abort — refusing to continue"
|
||||||
notify "unRAID version mismatch on $(hostname) — local: $local_version remote: $remote_version — aborted" "Version Parity" "warning"
|
notify "OS version mismatch on $(hostname) — local: $local_version remote: $remote_version — aborted" \
|
||||||
|
"Version Parity" "warning"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1906,14 +1906,14 @@ validate_unraid_cmd() {
|
|||||||
|
|
||||||
show_status() {
|
show_status() {
|
||||||
local local_ver
|
local local_ver
|
||||||
local_ver=$(grep -oP '(?<=version=")[^"]+' /etc/unraid-version 2>/dev/null || echo "unknown")
|
local_ver=$(platform_get_os_version 2>/dev/null || echo "unknown")
|
||||||
echo "━━━━━ $ICON_SUMMARY STATUS ━━━━━"
|
echo "━━━━━ $ICON_SUMMARY STATUS ━━━━━"
|
||||||
echo "Local: $LOCAL_SERVER_NAME"
|
echo "Local: $LOCAL_SERVER_NAME"
|
||||||
echo "Remote: $REMOTE_SERVER_NAME"
|
echo "Remote: $REMOTE_SERVER_NAME"
|
||||||
echo "IP: ${REMOTE_SERVER:-not resolved}"
|
echo "IP: ${REMOTE_SERVER:-not resolved}"
|
||||||
echo "My ID: ${MY_ID:-not set}"
|
echo "My ID: ${MY_ID:-not set}"
|
||||||
echo "Remote ID: ${REMOTE_ID:-not set}"
|
echo "Remote ID: ${REMOTE_ID:-not set}"
|
||||||
echo "unRAID ver: $local_ver"
|
echo "OS ver: $local_ver"
|
||||||
echo "Profile: ${PROFILE_NAME:-n/a}"
|
echo "Profile: ${PROFILE_NAME:-n/a}"
|
||||||
|
|
||||||
echo "DryRun: ${DRY_RUN:-false}"
|
echo "DryRun: ${DRY_RUN:-false}"
|
||||||
|
|||||||
Reference in New Issue
Block a user