diff --git a/install/proxmox-mail-gateway-install.sh b/install/proxmox-mail-gateway-install.sh index dfd0b5236..6b9eba309 100644 --- a/install/proxmox-mail-gateway-install.sh +++ b/install/proxmox-mail-gateway-install.sh @@ -21,6 +21,13 @@ setup_deb822_repo \ "trixie" \ "pmg-no-subscription" $STD apt install -y proxmox-mailgateway-container + +msg_info "Cleaning up duplicate APT sources" +rm -f /etc/apt/sources.list.d/pmg-enterprise.list +rm -f /etc/apt/sources.list.d/pmg-install-repo.list +[[ -f /etc/apt/sources.list.d/debian.sources ]] && : >/etc/apt/sources.list +msg_ok "Cleaned up duplicate APT sources" + msg_ok "Installed Proxmox Mail Gateway" motd_ssh diff --git a/tools/pve/post-pmg-install.sh b/tools/pve/post-pmg-install.sh index 0b76e7add..2620918e0 100644 --- a/tools/pve/post-pmg-install.sh +++ b/tools/pve/post-pmg-install.sh @@ -47,12 +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 && - ! grep -qE '^ID=(pmg|proxmox-mail-gateway)' /etc/os-release 2>/dev/null && - ! grep -qE '^PRETTY_NAME=.*Proxmox Mail Gateway' /etc/os-release 2>/dev/null && - ! dpkg -s proxmox-mailgateway-container >/dev/null 2>&1 && - ! dpkg -s proxmox-mailgateway >/dev/null 2>&1 && - ! systemctl list-unit-files 'pmg*.service' 2>/dev/null | grep -q '^pmg.*\.service'; 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 @@ -62,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 @@ -77,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)" @@ -89,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" ;; @@ -113,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) @@ -133,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" ;; @@ -154,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 <