2023-02-07 17:15:22 +00:00
#!/usr/bin/env bash
# Copyright (c) 2021-2023 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE
2023-04-24 16:06:45 +00:00
header_info( ) {
clear
cat <<"EOF"
2023-06-12 02:58:34 +00:00
____ _ ________ ____ __ ____ __ ____
/ __ \ | / / ____/ / __ \_ ___ _____/ /_ / _/___ _____/ /_____ _/ / /
/ /_/ / | / / __/ / /_/ / __ \/ ___/ __/ / // __ \/ ___/ __/ __ ` / / /
/ ____/| | / / /___ / ____/ /_/ ( __ ) /_ _/ // / / ( __ ) /_/ /_/ / / /
/_/ | ___/_____/ /_/ \_ ___/____/\_ _/ /___/_/ /_/____/\_ _/\_ _,_/_/_/
2023-05-28 01:59:30 +00:00
2023-01-10 15:56:36 +00:00
EOF
}
2023-04-24 16:06:45 +00:00
2022-10-30 01:04:45 +00:00
RD = $( echo "\033[01;31m" )
2023-04-24 16:06:45 +00:00
YW = $( echo "\033[33m" )
2022-10-30 01:04:45 +00:00
GN = $( echo "\033[1;92m" )
CL = $( echo "\033[m" )
2022-04-23 15:15:56 +00:00
BFR = "\\r\\033[K"
HOLD = "-"
CM = " ${ GN } ✓ ${ CL } "
CROSS = " ${ RD } ✗ ${ CL } "
2022-09-21 16:22:29 +00:00
2023-04-24 16:06:45 +00:00
set -euo pipefail
shopt -s inherit_errexit nullglob
2022-04-23 15:15:56 +00:00
2023-04-24 16:06:45 +00:00
msg_info( ) {
2023-05-28 01:59:30 +00:00
local msg = " $1 "
echo -ne " ${ HOLD } ${ YW } ${ msg } ... "
2022-04-23 15:15:56 +00:00
}
2023-04-24 16:06:45 +00:00
msg_ok( ) {
2023-05-28 01:59:30 +00:00
local msg = " $1 "
echo -e " ${ BFR } ${ CM } ${ GN } ${ msg } ${ CL } "
2022-04-23 15:15:56 +00:00
}
2023-04-24 16:06:45 +00:00
msg_error( ) {
local msg = " $1 "
echo -e " ${ BFR } ${ CROSS } ${ RD } ${ msg } ${ CL } "
}
start_routines( ) {
2023-05-28 01:59:30 +00:00
header_info
2023-06-12 02:58:34 +00:00
VERSION = " $( awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release) "
if lscpu | grep -qP 'Vendor ID:.*GenuineIntel' && lscpu | grep -qP 'Model name:.*N' && [ [ " $VERSION " = = "bullseye" ] ] ; then
whiptail --msgbox --title "N-SERIES PROCESSOR DETECTED" "To ensure compatibility with Proxmox VE on systems equipped with N-series processors, it is recommended to install Proxmox Virtual Environment 8" 10 58
fi
CHOICE = $( whiptail --title "SOURCES" --menu "The package manager will use the correct sources to update and install packages on your Proxmox VE server.\n \nCorrect Proxmox VE sources?" 14 58 2 \
2023-05-28 01:59:30 +00:00
"yes" " " \
"no" " " 3>& 2 2>& 1 1>& 3)
2023-04-24 16:06:45 +00:00
case $CHOICE in
yes)
2023-06-12 02:58:34 +00:00
msg_info "Correcting Proxmox VE Sources"
cat <<EOF >/etc/apt/sources.list
2023-06-12 03:19:19 +00:00
deb http://ftp.debian.org/debian ${ VERSION } main contrib
deb http://ftp.debian.org/debian ${ VERSION } -updates main contrib
deb http://security.debian.org/debian-security ${ VERSION } -security main contrib
2023-06-12 02:58:34 +00:00
EOF
msg_ok "Corrected Proxmox VE Sources"
2023-04-24 16:06:45 +00:00
; ;
no)
2023-06-12 02:58:34 +00:00
msg_error "Selected no to Correcting Proxmox VE Sources"
2023-04-24 16:06:45 +00:00
; ;
esac
2022-04-23 15:15:56 +00:00
2023-06-12 02:58:34 +00:00
CHOICE = $( whiptail --title "PVE-ENTERPRISE" --menu "The 'pve-enterprise' repository is only available to users who have purchased a Proxmox VE subscription.\n \nDisable 'pve-enterprise' repository?" 14 58 2 \
2023-05-28 01:59:30 +00:00
"yes" " " \
"no" " " 3>& 2 2>& 1 1>& 3)
2023-04-24 16:06:45 +00:00
case $CHOICE in
yes)
2023-06-12 02:58:34 +00:00
msg_info "Disabling 'pve-enterprise' repository"
cat <<EOF >/etc/apt/sources.list.d/pve-enterprise.list
2023-06-12 03:19:19 +00:00
# deb https://enterprise.proxmox.com/debian/pve ${VERSION} pve-enterprise
2022-04-23 15:15:56 +00:00
EOF
2023-06-12 02:58:34 +00:00
msg_ok "Disabled 'pve-enterprise' repository"
2023-04-24 16:06:45 +00:00
; ;
no)
2023-06-12 02:58:34 +00:00
msg_error "Selected no to Disabling 'pve-enterprise' repository"
2023-04-24 16:06:45 +00:00
; ;
esac
2022-04-23 15:15:56 +00:00
2023-06-02 15:55:20 +00:00
CHOICE = $( whiptail --title "PVE-NO-SUBSCRIPTION" --menu "The 'pve-no-subscription' repository provides access to all of the open-source components of Proxmox VE.\n \nEnable 'pve-no-subscription' repository?" 14 58 2 \
2023-05-28 01:59:30 +00:00
"yes" " " \
"no" " " 3>& 2 2>& 1 1>& 3)
2023-04-24 16:06:45 +00:00
case $CHOICE in
yes)
2023-04-25 01:05:10 +00:00
msg_info "Enabling 'pve-no-subscription' repository"
2023-06-12 02:58:34 +00:00
cat <<EOF >/etc/apt/sources.list.d/pve-install-repo.list
2023-06-12 03:19:19 +00:00
deb http://download.proxmox.com/debian/pve ${ VERSION } pve-no-subscription
2022-04-23 15:15:56 +00:00
EOF
2023-04-25 01:05:10 +00:00
msg_ok "Enabled 'pve-no-subscription' repository"
2023-04-24 16:06:45 +00:00
; ;
no)
2023-04-25 01:05:10 +00:00
msg_error "Selected no to Enabling 'pve-no-subscription' repository"
2023-04-24 16:06:45 +00:00
; ;
esac
2022-04-23 15:15:56 +00:00
2023-06-12 03:19:19 +00:00
if [ [ " ${ VERSION } " = = "bookworm" ] ] ; then
2023-06-12 02:58:34 +00:00
CHOICE = $( whiptail --title "CEPH PACKAGE REPOSITORIES" --menu "The 'Ceph Package Repositories' provides access to both the 'no-subscription' and 'enterprise' repositories.\n \nEnable 'ceph package repositories?" 14 58 2 \
"yes" " " \
"no" " " 3>& 2 2>& 1 1>& 3)
case $CHOICE in
yes)
msg_info "Enabling 'ceph package repositories'"
cat <<EOF >/etc/apt/sources.list.d/ceph.list
# deb http://download.proxmox.com/debian/ceph-quincy bookworm enterprise
deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription
EOF
msg_ok "Enabled 'ceph package repositories'"
; ;
no)
msg_error "Selected no to Enabling 'ceph package repositories'"
; ;
esac
fi
2023-06-02 15:55:20 +00:00
CHOICE = $( whiptail --title "PVETEST" --menu "The 'pvetest' repository can give advanced users access to new features and updates before they are officially released.\n \nAdd (Disabled) 'pvetest' repository?" 14 58 2 \
2023-05-28 01:59:30 +00:00
"yes" " " \
"no" " " 3>& 2 2>& 1 1>& 3)
2023-04-24 16:06:45 +00:00
case $CHOICE in
yes)
2023-04-25 01:05:10 +00:00
msg_info "Adding 'pvetest' repository and set disabled"
2023-06-12 02:58:34 +00:00
cat <<EOF >/etc/apt/sources.list.d/pvetest-for-beta.list
2023-06-12 03:19:19 +00:00
# deb http://download.proxmox.com/debian/pve ${VERSION} pvetest
2022-04-23 15:15:56 +00:00
EOF
2023-04-25 01:05:10 +00:00
msg_ok "Added 'pvetest' repository"
2023-04-24 16:06:45 +00:00
; ;
no)
2023-04-25 01:05:10 +00:00
msg_error "Selected no to Adding 'pvetest' repository"
2023-04-24 16:06:45 +00:00
; ;
esac
2022-04-23 15:15:56 +00:00
2023-06-02 15:55:20 +00:00
if [ [ ! -f /etc/apt/apt.conf.d/no-nag-script ] ] ; then
CHOICE = $( whiptail --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 \
"yes" " " \
"no" " " 3>& 2 2>& 1 1>& 3)
case $CHOICE in
yes)
2023-06-12 02:58:34 +00:00
whiptail --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
2023-06-02 15:55:20 +00:00
msg_info "Disabling subscription nag"
echo " DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js $'; if [ \$? -eq 1 ]; 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
apt --reinstall install proxmox-widget-toolkit & >/dev/null
msg_ok "Disabled subscription nag (Delete browser cache)"
; ;
no)
2023-06-12 02:58:34 +00:00
whiptail --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
2023-06-02 15:55:20 +00:00
msg_error "Selected no to Disabling subscription nag"
; ;
esac
fi
2023-07-02 07:51:07 +00:00
if ! systemctl is-active --quiet pve-ha-lrm; then
CHOICE = $( whiptail --title "HIGH AVAILABILITY" --menu "Enable high availability?" 10 58 2 \
2023-06-02 15:55:20 +00:00
"yes" " " \
"no" " " 3>& 2 2>& 1 1>& 3)
case $CHOICE in
yes)
2023-07-02 07:51:07 +00:00
msg_info "Enabling high availability"
systemctl enable -q --now pve-ha-lrm
systemctl enable -q --now pve-ha-crm
systemctl enable -q --now corosync
msg_ok "Enabled high availability"
2023-06-02 15:55:20 +00:00
; ;
no)
2023-07-02 07:51:07 +00:00
msg_error "Selected no to Enabling high availability"
2023-06-02 15:55:20 +00:00
; ;
esac
fi
2023-07-02 07:51:07 +00:00
if systemctl is-active --quiet pve-ha-lrm; then
CHOICE = $( whiptail --title "HIGH AVAILABILITY" --menu "If you plan to utilize a single node instead of a clustered environment, you can disable unnecessary high availability (HA) services, thus reclaiming system resources.\n\nIf HA becomes necessary at a later stage, the services can be re-enabled.\n\nDisable high availability?" 18 58 2 \
2023-07-02 06:54:37 +00:00
"yes" " " \
"no" " " 3>& 2 2>& 1 1>& 3)
case $CHOICE in
yes)
2023-07-02 07:51:07 +00:00
msg_info "Disabling high availability"
systemctl disable -q --now pve-ha-lrm
systemctl disable -q --now pve-ha-crm
systemctl disable -q --now corosync
msg_ok "Disabled high availability"
2023-07-02 06:54:37 +00:00
; ;
no)
2023-07-02 07:51:07 +00:00
msg_error "Selected no to Disabling high availability"
2023-07-02 06:54:37 +00:00
; ;
esac
fi
2023-06-12 02:58:34 +00:00
CHOICE = $( whiptail --title "UPDATE" --menu "\nUpdate Proxmox VE now?" 11 58 2 \
2023-05-28 01:59:30 +00:00
"yes" " " \
"no" " " 3>& 2 2>& 1 1>& 3)
2023-04-24 16:06:45 +00:00
case $CHOICE in
yes)
2023-06-12 02:58:34 +00:00
msg_info "Updating Proxmox VE (Patience)"
2022-10-30 01:04:45 +00:00
apt-get update & >/dev/null
apt-get -y dist-upgrade & >/dev/null
2023-06-12 02:58:34 +00:00
msg_ok "Updated Proxmox VE"
2023-04-24 16:06:45 +00:00
; ;
no)
2023-06-12 02:58:34 +00:00
msg_error "Selected no to Updating Proxmox VE"
2023-04-24 16:06:45 +00:00
; ;
esac
2022-04-23 15:15:56 +00:00
2023-06-12 02:58:34 +00:00
CHOICE = $( whiptail --title "REBOOT" --menu "\nReboot Proxmox VE now? (recommended)" 11 58 2 \
2023-05-28 01:59:30 +00:00
"yes" " " \
"no" " " 3>& 2 2>& 1 1>& 3)
2023-04-24 16:06:45 +00:00
case $CHOICE in
yes)
2023-06-12 02:58:34 +00:00
msg_info "Rebooting Proxmox VE"
2022-10-30 01:04:45 +00:00
sleep 2
msg_ok "Completed Post Install Routines"
reboot
2023-04-24 16:06:45 +00:00
; ;
no)
2023-06-12 02:58:34 +00:00
msg_error "Selected no to Rebooting Proxmox VE (Reboot recommended)"
2023-04-24 16:06:45 +00:00
msg_ok "Completed Post Install Routines"
; ;
esac
}
header_info
echo -e "\nThis script will Perform Post Install Routines.\n"
while true; do
2023-06-12 02:58:34 +00:00
read -p "Start the Proxmox VE Post Install Script (y/n)?" yn
2023-04-24 16:06:45 +00:00
case $yn in
[ Yy] *) break ; ;
2023-05-28 01:59:30 +00:00
[ Nn] *) clear; exit ; ;
2023-04-24 16:06:45 +00:00
*) echo "Please answer yes or no." ; ;
esac
done
if ! command -v pveversion >/dev/null 2>& 1; then
header_info
msg_error "\n No PVE Detected!\n"
exit
fi
start_routines