From 55c7549c3e80bac2822db64aacf5dbd0916f1a49 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 20 Apr 2026 10:18:55 +0200 Subject: [PATCH] Refactor: PMG Post Install (#13693) * PMG Post Install: Detect gateway via /etc/os-release when /etc/issue is generic * PMG Post Install: detect gateway via dpkg or PMG service units * PMG: migrate post-install to deb822 format, fix APT source conflicts - Simplify PMG detection to dpkg-based check only - Extend repo_state() to scan .sources files (deb822 format) - Add toggle_repo() helper for enable/disable on both formats - Migrate Debian sources correction to deb822 (debian.sources) - Migrate pmg-enterprise, pmg-no-subscription, pmgtest repo creation to deb822 .sources files - Install script: clean up duplicate APT sources created by proxmox-mailgateway-container package (enterprise.list, pmg-install-repo.list, legacy sources.list) * fix: use official Signed-By path & revert install script cleanup - Change Signed-By from /etc/apt/keyrings/pmg.gpg to /usr/share/keyrings/proxmox-archive-keyring.gpg in all three PMG repo creation blocks (enterprise, no-subscription, test), matching official PMG docs and PVE post-install convention - Remove APT source cleanup from install script (handled by post-pmg-install instead) * remove empty line --- tools/pve/post-pmg-install.sh | 95 +++++++++++++++++++++++++++-------- 1 file changed, 75 insertions(+), 20 deletions(-) diff --git a/tools/pve/post-pmg-install.sh b/tools/pve/post-pmg-install.sh index 532c4efaa..2f8627358 100644 --- a/tools/pve/post-pmg-install.sh +++ b/tools/pve/post-pmg-install.sh @@ -47,7 +47,8 @@ msg_error() { source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) 2>/dev/null || true declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "post-pmg-install" "pve" -if ! grep -q "Proxmox Mail Gateway" /etc/issue 2>/dev/null; then +if ! dpkg -s proxmox-mailgateway-container >/dev/null 2>&1 && + ! dpkg -s proxmox-mailgateway >/dev/null 2>&1; then msg_error "This script is only intended for Proxmox Mail Gateway" exit 232 fi @@ -57,14 +58,24 @@ repo_state() { local repo="$1" local file="" local state="missing" - for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list; do + for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources; do [[ -f "$f" ]] || continue if grep -q "$repo" "$f"; then file="$f" - if grep -qE "^[^#].*${repo}" "$f"; then - state="active" - elif grep -qE "^#.*${repo}" "$f"; then - state="disabled" + if [[ "$f" == *.sources ]]; then + # deb822 format: check Enabled field + if grep -qiE '^Enabled:\s*no' "$f"; then + state="disabled" + else + state="active" + fi + else + # legacy format + if grep -qE "^[^#].*${repo}" "$f"; then + state="active" + elif grep -qE "^#.*${repo}" "$f"; then + state="disabled" + fi fi break fi @@ -72,6 +83,28 @@ repo_state() { echo "$state $file" } +toggle_repo() { + # $1 = file, $2 = action (enable|disable) + local file="$1" action="$2" + if [[ "$file" == *.sources ]]; then + if [[ "$action" == "disable" ]]; then + if grep -qiE '^Enabled:' "$file"; then + sed -i 's/^Enabled:.*/Enabled: no/' "$file" + else + echo "Enabled: no" >>"$file" + fi + else + sed -i 's/^Enabled:.*/Enabled: yes/' "$file" + fi + else + if [[ "$action" == "disable" ]]; then + sed -i '/^[^#]/s/^/# /' "$file" + else + sed -i 's/^# *//' "$file" + fi + fi +} + start_routines() { header_info VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" @@ -84,11 +117,20 @@ start_routines() { case $CHOICE in yes) msg_info "Correcting Debian Sources" - cat </etc/apt/sources.list -deb http://deb.debian.org/debian ${VERSION} main contrib -deb http://deb.debian.org/debian ${VERSION}-updates main contrib -deb http://security.debian.org/debian-security ${VERSION}-security main contrib + cat </etc/apt/sources.list.d/debian.sources +Types: deb +URIs: http://deb.debian.org/debian +Suites: ${VERSION} ${VERSION}-updates +Components: main contrib non-free non-free-firmware +Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg + +Types: deb +URIs: http://security.debian.org/debian-security +Suites: ${VERSION}-security +Components: main contrib non-free non-free-firmware +Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg EOF + rm -f /etc/apt/sources.list msg_ok "Corrected Debian Sources" ;; no) msg_error "Selected no to Correcting Debian Sources" ;; @@ -108,7 +150,7 @@ EOF keep) msg_ok "Kept 'pmg-enterprise' repository" ;; disable) msg_info "Disabling 'pmg-enterprise' repository" - sed -i "s/^[^#].*pmg-enterprise/# &/" "$file" + toggle_repo "$file" disable msg_ok "Disabled 'pmg-enterprise' repository" ;; delete) @@ -128,7 +170,7 @@ EOF case $CHOICE in enable) msg_info "Enabling 'pmg-enterprise' repository" - sed -i "s/^#.*pmg-enterprise/deb/" "$file" + toggle_repo "$file" enable msg_ok "Enabled 'pmg-enterprise' repository" ;; keep) msg_ok "Kept 'pmg-enterprise' repository disabled" ;; @@ -149,8 +191,12 @@ EOF case $CHOICE in yes) msg_info "Adding 'pmg-enterprise' repository" - cat >/etc/apt/sources.list.d/pmg-enterprise.list </etc/apt/sources.list.d/pmg-enterprise.sources </etc/apt/sources.list.d/pmg-install-repo.list </etc/apt/sources.list.d/pmg-no-subscription.sources </etc/apt/sources.list.d/pmgtest-for-beta.list </etc/apt/sources.list.d/pmgtest.sources <