Refactor: Post-PBS Script (#7213)

This commit is contained in:
CanbiZ 2025-08-26 15:13:16 +02:00 committed by GitHub
parent 4a69a7b39f
commit d6e498050f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,9 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 community-scripts ORG
# Author: tteck (tteckster) # Author: tteck (tteckster) | MickLesk (CanbiZ) | thost96
# License: MIT # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
header_info() { header_info() {
clear clear
@ -29,156 +28,276 @@ CROSS="${RD}✗${CL}"
set -euo pipefail set -euo pipefail
shopt -s inherit_errexit nullglob shopt -s inherit_errexit nullglob
msg_info() { msg_info() { echo -ne " ${HOLD} ${YW}$1..."; }
local msg="$1" msg_ok() { echo -e "${BFR} ${CM} ${GN}$1${CL}"; }
echo -ne " ${HOLD} ${YW}${msg}..." msg_error() { echo -e "${BFR} ${CROSS} ${RD}$1${CL}"; }
# ---- helpers ----
get_pbs_codename() {
awk -F'=' '/^VERSION_CODENAME=/{print $2}' /etc/os-release
} }
msg_ok() { repo_state_list() {
local msg="$1" local repo="$1"
echo -e "${BFR} ${CM} ${GN}${msg}${CL}" local file=""
local state="missing"
for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list; 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"
fi
break
fi
done
echo "$state $file"
} }
msg_error() { component_exists_in_sources() {
local msg="$1" local component="$1"
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}" grep -h -E "^[^#]*Components:[^#]*\b${component}\b" /etc/apt/sources.list.d/*.sources 2>/dev/null | grep -q .
} }
start_routines() { # ---- main ----
main() {
header_info header_info
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" echo -e "\nThis script will Perform Post Install Routines.\n"
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS SOURCES" --menu "This will set the correct sources to update and install Proxmox Backup Server.\n \nChange to Proxmox Backup Server sources?" 14 58 2 \ while true; do
"yes" " " \ read -rp "Start the Proxmox Backup Server Post Install Script (y/n)? " yn
"no" " " 3>&2 2>&1 1>&3) case $yn in
[Yy]*) break ;;
[Nn]*)
clear
exit
;;
*) echo "Please answer yes or no." ;;
esac
done
if command -v pveversion >/dev/null 2>&1; then
echo -e "\n🛑 PVE Detected, Wrong Script!\n"
exit 1
fi
local CODENAME
CODENAME="$(get_pbs_codename)"
case "$CODENAME" in
bookworm) start_routines_3 ;;
trixie) start_routines_4 ;;
*)
msg_error "Unsupported Debian codename: $CODENAME"
echo -e "Supported: bookworm (PBS 3.x) and trixie (PBS 4.x)"
exit 1
;;
esac
}
# ---- PBS 3.x (Bookworm) ----
start_routines_3() {
header_info
local VERSION="bookworm"
# --- Debian sources ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS SOURCES" --menu \
"Correct Debian sources for Proxmox Backup Server 3.x?" 14 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Changing to Proxmox Backup Server Sources" msg_info "Correcting Debian Sources"
cat <<EOF >/etc/apt/sources.list cat <<EOF >/etc/apt/sources.list
deb http://deb.debian.org/debian ${VERSION} main contrib deb http://deb.debian.org/debian ${VERSION} main contrib
deb http://deb.debian.org/debian ${VERSION}-updates main contrib deb http://deb.debian.org/debian ${VERSION}-updates main contrib
deb http://security.debian.org/debian-security ${VERSION}-security main contrib deb http://security.debian.org/debian-security ${VERSION}-security main contrib
EOF EOF
msg_ok "Changed to Proxmox Backup Server Sources" msg_ok "Corrected Debian Sources"
;;
no)
msg_error "Selected no to Correcting Proxmox Backup Server Sources"
;; ;;
no) msg_error "Selected no to Correcting Debian Sources" ;;
esac esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS-ENTERPRISE" --menu "The 'pbs-enterprise' repository is only available to users who have purchased a Proxmox VE subscription.\n \nDisable 'pbs-enterprise' repository?" 14 58 2 \ # --- Enterprise repo ---
"yes" " " \ read -r state file <<<"$(repo_state_list pbs-enterprise)"
"no" " " 3>&2 2>&1 1>&3) case $state in
case $CHOICE in active)
yes) sed -i "s/^[^#].*pbs-enterprise/# &/" "$file"
msg_info "Disabling 'pbs-enterprise' repository"
cat <<EOF >/etc/apt/sources.list.d/pbs-enterprise.list
# deb https://enterprise.proxmox.com/debian/pbs ${VERSION} pbs-enterprise
EOF
msg_ok "Disabled 'pbs-enterprise' repository" msg_ok "Disabled 'pbs-enterprise' repository"
;; ;;
no) disabled) msg_ok "'pbs-enterprise' already disabled" ;;
msg_error "Selected no to Disabling 'pbs-enterprise' repository" missing)
cat >/etc/apt/sources.list.d/pbs-enterprise.list <<EOF
# deb https://enterprise.proxmox.com/debian/pbs ${VERSION} pbs-enterprise
EOF
msg_ok "Added 'pbs-enterprise' repository (disabled)"
;; ;;
esac esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS-NO-SUBSCRIPTION" --menu "The 'pbs-no-subscription' repository provides access to all of the open-source components of Proxmox Backup Server.\n \nEnable 'pbs-no-subscription' repository?" 14 58 2 \ # --- No-subscription repo ---
"yes" " " \ read -r state file <<<"$(repo_state_list pbs-no-subscription)"
"no" " " 3>&2 2>&1 1>&3) if [[ "$state" == "missing" ]]; then
case $CHOICE in cat >/etc/apt/sources.list.d/pbs-install-repo.list <<EOF
yes)
msg_info "Enabling 'pbs-no-subscription' repository"
cat <<EOF >/etc/apt/sources.list.d/pbs-install-repo.list
deb http://download.proxmox.com/debian/pbs ${VERSION} pbs-no-subscription deb http://download.proxmox.com/debian/pbs ${VERSION} pbs-no-subscription
EOF EOF
msg_ok "Enabled 'pbs-no-subscription' repository" msg_ok "Enabled 'pbs-no-subscription' repository"
;; else
no) msg_ok "'pbs-no-subscription' repository already present"
msg_error "Selected no to Enabling 'pbs-no-subscription' repository" fi
;;
esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS TEST" --menu "The 'pbstest' repository can give advanced users access to new features and updates before they are officially released.\n \nAdd (Disabled) 'pbstest' repository?" 14 58 2 \ # --- Test repo (legacy name pbstest) ---
"yes" " " \ read -r state file <<<"$(repo_state_list pbstest)"
"no" " " 3>&2 2>&1 1>&3) if [[ "$state" == "missing" ]]; then
case $CHOICE in cat >/etc/apt/sources.list.d/pbstest-for-beta.list <<EOF
yes)
msg_info "Adding 'pbstest' repository and set disabled"
cat <<EOF >/etc/apt/sources.list.d/pbstest-for-beta.list
# deb http://download.proxmox.com/debian/pbs ${VERSION} pbstest # deb http://download.proxmox.com/debian/pbs ${VERSION} pbstest
EOF EOF
msg_ok "Added 'pbstest' repository" msg_ok "Added 'pbstest' repository (disabled)"
;; else
no) msg_ok "'pbstest' repository already exists"
msg_error "Selected no to Adding 'pbstest' repository" fi
;;
esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \ post_routines_common
"yes" " " \ }
"no" " " 3>&2 2>&1 1>&3)
# ---- PBS 4.x (Trixie, deb822) ----
start_routines_4() {
header_info
local VERSION="trixie"
# --- Debian sources (deb822) ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS SOURCES" --menu \
"Correct Debian sources for Proxmox Backup Server 4.x (deb822)?" 14 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 msg_info "Correcting Debian Sources (deb822)"
rm -f /etc/apt/sources.list.d/*.list
sed -i '/proxmox/d;/bookworm/d' /etc/apt/sources.list || true
cat >/etc/apt/sources.list.d/debian.sources <<EOF
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://security.debian.org/debian-security
Suites: trixie-security
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie-updates
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
msg_ok "Corrected Debian Sources"
;;
no) msg_error "Selected no to Correcting Debian Sources" ;;
esac
# --- Enterprise repo ---
if ! component_exists_in_sources "pbs-enterprise"; then
cat >/etc/apt/sources.list.d/pbs-enterprise.sources <<EOF
Types: deb
URIs: https://enterprise.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-enterprise' repository"
else
msg_ok "'pbs-enterprise' repository already present"
fi
# --- No-subscription repo ---
if ! component_exists_in_sources "pbs-no-subscription"; then
cat >/etc/apt/sources.list.d/proxmox.sources <<EOF
Types: deb
URIs: http://download.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-no-subscription' repository"
else
msg_ok "'pbs-no-subscription' repository already present"
fi
# --- Test repo (pbs-test, renamed) ---
if ! component_exists_in_sources "pbs-test"; then
cat >/etc/apt/sources.list.d/pbs-test.sources <<EOF
# Types: deb
# URIs: http://download.proxmox.com/debian/pbs
# Suites: trixie
# Components: pbs-test
# Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-test' repository (disabled)"
else
msg_ok "'pbs-test' repository already present"
fi
post_routines_common
}
# ---- Shared routines ----
post_routines_common() {
# Subscription nag
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu \
"Disable subscription nag in PBS UI?" 14 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox \
"Supporting the software's development team is essential.\nPlease consider buying a subscription." 10 58
msg_info "Disabling subscription nag" msg_info "Disabling subscription nag"
echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then echo 'Removing subscription nag from UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then sed -i '/data\\.status/{s/\\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script
msg_ok "Disabled subscription nag (Delete browser cache)" msg_ok "Disabled subscription nag (clear browser cache!)"
;; ;;
no) no)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_error "Selected no to Disabling subscription nag" msg_error "Selected no to Disabling subscription nag"
rm -f /etc/apt/apt.conf.d/no-nag-script 2>/dev/null
;; ;;
esac esac
apt --reinstall install proxmox-widget-toolkit &>/dev/null apt --reinstall install proxmox-widget-toolkit &>/dev/null || msg_error "Widget toolkit reinstall failed"
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Backup Server now?" 11 58 2 \ # Update
"yes" " " \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu \
"no" " " 3>&2 2>&1 1>&3) "Update Proxmox Backup Server now?" 11 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Updating Proxmox Backup Server (Patience)" msg_info "Updating Proxmox Backup Server (Patience)"
apt-get update &>/dev/null apt update &>/dev/null || msg_error "apt update failed"
apt-get -y dist-upgrade &>/dev/null apt -y dist-upgrade &>/dev/null || msg_error "apt dist-upgrade failed"
msg_ok "Updated Proxmox Backup Server" msg_ok "Updated Proxmox Backup Server"
;; ;;
no) no) msg_error "Selected no to updating Proxmox Backup Server" ;;
msg_error "Selected no to Updating Proxmox Backup Server"
;;
esac esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu "\nReboot Proxmox Backup Server now? (recommended)" 11 58 2 \ # Reminder
"yes" " " \ whiptail --backtitle "Proxmox VE Helper Scripts" --title "Post-Install Reminder" --msgbox \
"no" " " 3>&2 2>&1 1>&3) "IMPORTANT:
Please run this script on every PBS node individually if you have multiple nodes.
After completing these steps, it is strongly recommended to REBOOT your node.
After the upgrade or post-install routines, always clear your browser cache or perform a hard reload (Ctrl+Shift+R) before using the PBS Web UI to avoid UI display issues." 20 80
# Reboot
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu \
"Reboot Proxmox Backup Server now? (recommended)" 11 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Rebooting Proxmox Backup Server" msg_info "Rebooting PBS"
sleep 2 sleep 2
msg_ok "Completed Post Install Routines" msg_ok "Completed Post Install Routines"
reboot reboot
;; ;;
no) no)
msg_error "Selected no to Rebooting Proxmox Backup Server (Reboot recommended)" msg_error "Selected no to Reboot (Reboot recommended)"
msg_ok "Completed Post Install Routines" msg_ok "Completed Post Install Routines"
;; ;;
esac esac
} }
header_info main
echo -e "\nThis script will Perform Post Install Routines.\n"
while true; do
read -p "Start the Proxmox Backup Server Post Install Script (y/n)?" yn
case $yn in
[Yy]*) break ;;
[Nn]*)
clear
exit
;;
*) echo "Please answer yes or no." ;;
esac
done
if command -v pveversion >/dev/null 2>&1; then
echo -e "\n🛑 PVE Detected, Wrong Script!\n"
exit 1
fi
start_routines