Merge develop and preserve generic i18n regression coverage

This commit is contained in:
Jonatan
2026-10-16 23:03:54 +02:00
60 changed files with 2968 additions and 95 deletions
@@ -607,6 +607,22 @@ hb_prepare_staging() {
(( jobs_covered )) || paths+=("$HB_BACKUP_JOBS_DIR")
fi
# The logins to private image registries are needed to update the
# applications installed from them, whatever the profile selects.
local registry_logins=/etc/pve/priv/proxmenux/registry-auth.json
if [[ -e "$registry_logins" ]]; then
local logins_covered=0 candidate normalized
for candidate in "${paths[@]}"; do
normalized="${candidate%/}"
[[ -z "$normalized" ]] && normalized="/"
if [[ "$registry_logins" == "$normalized" || "$registry_logins" == "$normalized"/* ]]; then
logins_covered=1
break
fi
done
(( logins_covered )) || paths+=("$registry_logins")
fi
rm -rf "$staging_root"
mkdir -p "$staging_root/rootfs" "$staging_root/metadata"
+6
View File
@@ -45,6 +45,7 @@
# 6 post-update restart failed
# 7 another ProxMenux update is already running for this CT
# 8 started CT could not record its verification handoff identity
# 9 scheduled run skipped because the CT was intentionally stopped
#
# The frontend surfaces exit code + duration in a follow-up POST to
# /api/lxc-updates/<vmid>/applied so the notification event fires with
@@ -163,6 +164,11 @@ fi
# 2) CT must be running for pct exec. Auto-start stopped CTs, then
# restore their original stopped state on every exit path.
STATE=$(pct status "$VMID" | awk '{print $2}')
if [[ "$STATE" != "running" && "${EXECUTION_MODE:-}" == "scheduled" ]]; then
[[ -n "${SCHEDULED_STOPPED_MARKER:-}" ]] && printf '%s\n' "$SCHEDULED_STOPPED_MARKER"
echo "SKIPPED: CT $VMID is stopped; a scheduled update will not start it."
exit 9
fi
STARTED_BY_PROXMENUX=0
OBSERVATION_ATTEMPTED=0
capture_before_stop() {
+11
View File
@@ -82,6 +82,16 @@ remove_monitor_notification_target() {
echo " - Notification target removed from Proxmox"
}
# The logins to private image registries go with ProxMenux. /etc/pve is shared
# by the cluster, so the other nodes lose them too.
remove_registry_logins() {
mountpoint -q /etc/pve || return 0
[[ -f /etc/pve/priv/proxmenux/registry-auth.json ]] || return 0
pmx_record_execution "Remove private registry logins" "rm -f /etc/pve/priv/proxmenux/registry-auth.json"
rm -f /etc/pve/priv/proxmenux/registry-auth.json /etc/pve/priv/proxmenux/.registry-auth.json.proxmenux.lock
rmdir /etc/pve/priv/proxmenux 2>/dev/null || true
}
uninstall_proxmenux_monitor() {
# 1. Stop service if it is running
@@ -809,6 +819,7 @@ uninstall_proxmenu() {
pmx_remove_file "$INSTALL_DIR/$MENU_SCRIPT"
pmx_record_execution "Remove ProxMenux application directory" "rm -rf $BASE_DIR"
rm -rf "$BASE_DIR"
remove_registry_logins
# Remove selected dependencies
if [ -n "$deps_to_remove" ]; then
+1 -1
View File
@@ -142,7 +142,7 @@
"title": "Create VM System NAS",
"menu": "Create VM from template or script",
"script": "menus/create_vm_menu.sh",
"keywords": "vm virtual nas",
"keywords": "vm virtual nas truenas openmediavault omv xigmanas rockstor fygoos fygonas fnos",
"argument": "1"
},
{
+33 -5
View File
@@ -18,7 +18,7 @@
#
# Features:
# - Auto-detects latest versions for TrueNAS SCALE/CORE, OMV,
# XigmaNAS and Rockstor, with safe fallbacks.
# XigmaNAS, Rockstor and FygoOS, with safe fallbacks.
# - Dispatches Synology DSM to the dedicated loader-based flow.
# - Dispatches ZimaOS to its own installer script.
# - Runs the Umbrel OS community installer (external script).
@@ -179,6 +179,30 @@ function resolve_rockstor_iso() {
HN="Rockstor"
}
function resolve_fygoos_iso() {
local default_file="fygoos_PE_x86_1.2.0701_2731.iso"
local base_url="https://download.liveupdate.fygonas.com/x86_64/trim"
local detected_file="" detected_ver=""
if _has_curl; then
detected_file=$(
curl -fsSL "https://fygonas.com/download" 2>/dev/null \
| grep -Eo 'download\.liveupdate\.fygonas\.com/x86_64/trim/fygoos_PE_x86_[0-9.]+_[0-9]+\.iso' \
| sed 's|.*/||' \
| _latest_version_from_lines
)
fi
[[ -z "$detected_file" ]] && detected_file="$default_file"
detected_ver=$(sed -E 's/^fygoos_PE_x86_([0-9.]+)_.*/\1/' <<<"$detected_file")
ISO_NAME="FygoOS ${detected_ver}"
ISO_FILE="$detected_file"
ISO_URL="${base_url}/${ISO_FILE}"
ISO_PATH="$ISO_DIR/$ISO_FILE"
HN="FygoOS"
}
function select_nas_iso() {
local NAS_OPTIONS=(
@@ -189,17 +213,18 @@ function select_nas_iso() {
"5" "XigmaNAS VM (FreeBSD based)"
"6" "Rockstor VM (openSUSE based)"
"7" "ZimaOS VM (Proxmox-zimaos)"
"8" "FygoOS VM (Debian based)"
"" ""
"" "\Z4───────────────── $(translate "Community Scripts") ─────────────────\Zn"
"" ""
"8" "Umbrel OS VM (Helper-Scripts)"
"9" "$(translate "Return to Main Menu")"
"9" "Umbrel OS VM (Helper-Scripts)"
"10" "$(translate "Return to Main Menu")"
)
local NAS_TYPE
NAS_TYPE=$(dialog --colors --backtitle "ProxMenux" \
--title "$(translate "NAS Systems")" \
--menu "\n$(translate "Select the NAS system to install:")" 20 70 10 \
--menu "\n$(translate "Select the NAS system to install:")" 22 70 13 \
"${NAS_OPTIONS[@]}" 3>&1 1>&2 2>&3)
@@ -234,6 +259,9 @@ function select_nas_iso() {
return 1
;;
8)
resolve_fygoos_iso
;;
9)
HN="Umbrel OS"
bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/vm/umbrel-os-vm.sh)"
echo -e
@@ -251,7 +279,7 @@ function select_nas_iso() {
return 1
;;
9)
10)
return 1
;;
esac