Files
TA-ProxMenu/proxmenu-scripts.sh
T
2026-07-25 11:07:14 -05:00

444 lines
17 KiB
Bash
Executable File

#!/usr/bin/env bash
# TA-Proxmenu - Proxmox Setup Scripts for TA Use
[ "${2:-}" != "q" ] && source /opt/idssys/defaults/colors.inc
source /opt/idssys/defaults/default.inc
source /opt/idssys/ta-proxmenu/defaults.inc
ACTION_REQUESTED=0
[[ -n "${action:-}" ]] && ACTION_REQUESTED=1
FINISH_ACTION() {
(( ACTION_REQUESTED == 1 )) && exit 0
ENTER2CONTINUE
}
INSTALL_PULSE() {
echo
bash <(curl -fsSL https://github.com/rcourtman/Pulse/releases/latest/download/install.sh)
echo
echo -e "\n${idsCL[Green]}Pulse has been installed${idsCL[Default]}"
FINISH_ACTION
}
INSTALL_ACRONIS() {
read -n 1 -p "Are you sure you wish to install Acronis (Y/n)?" choice
case "$choice" in
[Nn]) MAIN_MENU;;
* )
echo
cd /tmp || return 1
wget "https://us5-cloud.acronis.com/bc/api/ams/links/agents/redirect?language=multi&channel=CURRENT&system=linux&architecture=64&productType=enterprise&login=010180ae-63c4-4495-bed0-4ec934c25af9&white_labeled=0" -O ./acronisinstall
chmod +x ./acronisinstall
./acronisinstall
rm -f ./acronisinstall
echo
echo -e "\n${idsCL[Green]}Acronis has been installed${idsCL[Default]}"
FINISH_ACTION
;;
esac
}
INSTALL_PROXMENUX() {
# read -n 1 -p "Are you sure you wish to install ProxMenux (Y/n)?" choice
# case "$choice" in
# [Nn]) MAIN_MENU;;
# * )
# echo
bash -c "$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)"
# systemctl disable --now proxmenux-monitor
menu
# echo -e "\n${idsCL[Green]}ProxMenux has been installed${idsCL[Default]}"
# esac
}
PROXMENUX_POST_INSTALL() {
PMFLDR='/usr/local/share/proxmenux/scripts/post_install'
[ ! -f "${PMFLDR}/customizable_post_install.sh" ] && INSTALL_PROXMENUX
bash "${PMFLDR}/customizable_post_install.sh"
touch /opt/.PROXMENUX_POST_INSTALL
[ -s /etc/apt/sources.list ] && cat /dev/null > /etc/apt/sources.list
}
INSTALL_GLANCES() {
read -n 1 -p "Are you sure you wish to install Glances (Y/n)?" choice
case "$choice" in
[Nn]) echo;;
* )
echo
apt install glances -y
echo -e "\n${idsCL[Green]}Glances has been installed${idsCL[Default]}"
FINISH_ACTION
esac
}
INSTALL_SCREENCONNECT() {
read -n 1 -p "Are you sure you wish to install ScreenConnect (Y/n)?" choice
case "$choice" in
[Nn]) echo;;
* )
echo
echo -en "\n${idsCL[LightYellow]}Paste the URL provided from the Build Installer: ${idsCL[Default]}"
read -r -e SCURL
[[ -n "$SCURL" ]] || { echo "No URL supplied."; FINISH_ACTION; return; }
wget "${SCURL}" -O /tmp/scinstall
dpkg -i /tmp/scinstall
apt install --fix-broken -y
apt remove "connectwis*" -y > /dev/null 2>&1
dpkg -i /tmp/scinstall
rm -f /tmp/scinstall
systemctl disable --now proxmenux-monitor
echo -e "\n${idsCL[Green]}ScreenConnect has been installed${idsCL[Default]}"
FINISH_ACTION
esac
}
INSTALL_RMM() {
read -n 1 -p "Are you sure you wish to install RMM (Y/n)?" choice
case "$choice" in
[Nn]) echo;;
* )
echo
echo -en "\n${idsCL[LightYellow]}Paste the Linux Server URL provided from the Download Agent screen: ${idsCL[Default]}"
read -r -e RMMURL
[[ -n "$RMMURL" ]] || { echo "No URL supplied."; FINISH_ACTION; return; }
wget "${RMMURL}" -O /tmp/rmminstall
if [[ "$RMMURL" != *TKN* || "$RMMURL" != */RUN* ]]; then
echo "Unable to extract the RMM token from the URL."
FINISH_ACTION
return
fi
TOKEN="${RMMURL#*TKN}"
TOKEN="${TOKEN%%/RUN*}"
[[ -n "$TOKEN" ]] || { echo "The RMM token is empty."; FINISH_ACTION; return; }
TOKEN="$TOKEN" bash /tmp/rmminstall
systemctl restart ITSPlatform
# rm -f /tmp/rmminstall
echo -e "\n${idsCL[Green]}RMM has been installed${idsCL[Default]}"
FINISH_ACTION
esac
}
INSTALL_S1() {
echo
echo -en "${idsCL[LightYellow]}Paste the customers SentinelOne Site Token: ${idsCL[Default]}"
read -r -e s1token
[[ -n "$s1token" ]] || { echo "No SentinelOne site token supplied."; FINISH_ACTION; return; }
cd /tmp || return 1
rm -f "/tmp/${S1_PACKAGE}"
wget "$S1_DOWNLOAD_URL" -O "/tmp/${S1_PACKAGE}"
dpkg -i "/tmp/${S1_PACKAGE}"
/opt/sentinelone/bin/sentinelctl management token set "$s1token"
/opt/sentinelone/bin/sentinelctl control start
rm -f "/tmp/${S1_PACKAGE}"
echo -e "\n${idsCL[Green]}SentinelOne Agent has been installed. Make sure its added to a \"DETECT ONLY\" policy${idsCL[Default]}"
FINISH_ACTION
}
INSTALL_OMSA() {
read -n 1 -p "Are you sure you wish to install Dell OpenManage Administrator (Y/n)?" choice
case "$choice" in
[Nn]) echo;;
* )
echo
mkdir -p /tmp/omsa
cd /tmp/omsa || return 1
apt install -y gnupg libcurl4t64 libncurses6 libxslt1.1 libgpm2 libtinfo6
mkdir -p /etc/apt/keyrings
wget -qO - https://linux.dell.com/repo/pgp_pubkeys/0x1285491434D8786F.asc | gpg --dearmor -o /etc/apt/keyrings/linux.dell.com.gpg
chmod +r /etc/apt/keyrings/linux.dell.com.gpg
echo "deb [signed-by=/etc/apt/keyrings/linux.dell.com.gpg] http://linux.dell.com/repo/community/openmanage/11000/jammy jammy main" > /etc/apt/sources.list.d/linux.dell.com.list
apt update
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/libwsman-curl-client-transport1_2.6.5-0ubuntu16_amd64.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/libwsman-client4t64_2.6.5-0ubuntu16_amd64.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/libwsman1t64_2.6.5-0ubuntu16_amd64.deb
# wget -c http://http.us.debian.org/debian/pool/main/libx/libxml2/libxml2-16_2.15.1+dfsg-2+b1_amd64.deb
wget -c http://http.us.debian.org/debian/pool/main/libx/libxml2/libxml2-16_2.15.2+dfsg-0.1_amd64.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/libwsman-server1t64_2.6.5-0ubuntu16_amd64.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/s/sblim-sfcc/libcimcclient0_2.2.8-0ubuntu2_amd64.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/openwsman_2.6.5-0ubuntu16_amd64.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/multiverse/c/cim-schema/cim-schema_2.48.0-0ubuntu1_all.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/s/sblim-sfc-common/libsfcutil0_1.0.1-0ubuntu4_amd64.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/multiverse/s/sblim-sfcb/sfcb_1.4.9-0ubuntu7_amd64.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/s/sblim-cmpi-devel/libcmpicppimpl0_2.0.3-0ubuntu2_amd64.deb
wget -c http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_amd64.deb
dpkg -i libwsman-curl-client-transport1_2.6.5-0ubuntu16_amd64.deb
dpkg -i libwsman-client4t64_2.6.5-0ubuntu16_amd64.deb
dpkg -i libxml2-16_2.15.2+dfsg-0.1_amd64.deb
dpkg -i libwsman1t64_2.6.5-0ubuntu16_amd64.deb
dpkg -i libwsman-server1t64_2.6.5-0ubuntu16_amd64.deb
dpkg -i libcimcclient0_2.2.8-0ubuntu2_amd64.deb
dpkg -i openwsman_2.6.5-0ubuntu16_amd64.deb
dpkg -i cim-schema_2.48.0-0ubuntu1_all.deb
dpkg -i libsfcutil0_1.0.1-0ubuntu4_amd64.deb
dpkg -i sfcb_1.4.9-0ubuntu7_amd64.deb
dpkg -i libcmpicppimpl0_2.0.3-0ubuntu2_amd64.deb
dpkg -i libssl1.1_1.1.1w-0+deb11u1_amd64.deb
apt install -y srvadmin-all
/opt/dell/srvadmin/sbin/srvadmin-services.sh start
rm -rf -- /tmp/omsa
echo -e "\n${idsCL[Green]}Dell OMSA has been installed${idsCL[Default]}"
echo -e "\n${idsCL[LightCyan]}Available at: ${idsCL[LightGreen]}https://${RNIP}:1311${idsCL[Default]}"
FINISH_ACTION
esac
}
DOWNLOAD_VIRTIO() {
echo -e "\n${idsCL[LightCyan]}Current \"Stable\" version available for download: ${idsCL[White]}${VIRTIO_FILE}${idsCL[Default]}"
if [ -f "${DLDIR}/${VIRTIO_FILE}" ]; then
echo -en "\n${idsCL[LightRed]}Removing existing download ... "
rm -f "${DLDIR}/${VIRTIO_FILE}"
echo -e "${idsCL[Red]}Done${idsCL[Default]}"
fi
wget -q -P "$DLDIR" "$VIRTIO_DOWNLOAD_URL" &
echo -e "\n${idsCL[LightCyan]}Downloading will continue in the background\n"
FINISH_ACTION
}
DETECT_CPU(){
# if [ ! -f /etc/apt/sources.list.d/proxlb.list ]; then
# echo "deb https://repo.gyptazy.com/stable /" > /etc/apt/sources.list.d/proxlb.list
# wget -O /etc/apt/trusted.gpg.d/proxlb.asc https://repo.gyptazy.com/repository.gpg
# apt-get update
# fi
if [ ! -f /etc/apt/sources.list.d/gyptazy.list ]; then
curl https://git.gyptazy.com/api/packages/gyptazy/debian/repository.key -o /etc/apt/keyrings/gyptazy.asc
echo "deb [signed-by=/etc/apt/keyrings/gyptazy.asc] https://packages.gyptazy.com/api/packages/gyptazy/debian trixie main" | sudo tee -a /etc/apt/sources.list.d/gyptazy.list
apt update
fi
if [ "$(dpkg -l | awk '/proxclmc/ {print }'|wc -l)" -eq 0 ]; then
apt -y install proxclmc
fi
echo
proxclmc
echo
echo -en "${idsCL[LightCyan]}Would you like to set '${idsCL[LightGreen]}cpu: $(proxclmc --list-only)${idsCL[LightCyan]}' on all VMs (y/N)?${idsCL[Default]} "
read -n 1 choice
case "$choice" in
[Yy])
sed -i "/cpu:/c cpu: $(proxclmc --list-only)" /etc/pve/nodes/*/qemu-server/*.conf
echo
echo -e "\n${idsCL[Green]}All VM's have been reconfigured\n${idsCL[LightCyan]}This will require the VM's to be powered off and then turned back on in order to take effect${idsCL[Default]}"
FINISH_ACTION
;;
*) echo;;
esac
}
RESTART_PVE_SERVICES(){
if [ "${1}" == "" ]; then
echo -en "${idsCL[LightCyan]}Would you like to restart all Proxmox services on the local host (Y/n)?${idsCL[Default]} "
read -n 1 choice
else
choice=${1}
fi
case "${choice}" in
[Nn]) echo;;
*) echo
echo -en "\n${idsCL[Yellow]}Restarting services ... "
#systemctl restart pve-cluster pvedaemon pvestatd pveproxy pve-ha-lrm pve-ha-crm
systemctl restart pve-cluster pvedaemon pvestatd pveproxy
echo -e "${idsCL[Green]}Done${idsCL[Default]}"
echo -e "\n${idsCL[Green]}This hosts Proxmox services have been restarted${idsCL[Default]}\n"
FINISH_ACTION
;;
esac
}
SET_VM_SHUTDOWNTIMEOUT(){
if [ "${1}" == "" ]; then
echo -en "${idsCL[LightCyan]}Would you like to set all VM's shutdown timeout to 180secs (Y/n)?${idsCL[Default]} "
read -n 1 choice
else
choice=${1}
fi
case "${choice}" in
[Nn]) echo;;
*)
echo "Updating all VM's shutdown timeout to 180 seconds..."
sed -E -i 's/(down=)[0-9]+/\1180/g' /etc/pve/nodes/*/qemu-server/*.conf
FINISH_ACTION
;;
esac
}
MAINTENANCE_MODE(){
local local_node
local_node="$(hostname -s)"
if ha-manager status | grep -F "$local_node" | grep -q "maintenance mode"; then
echo -en "${idsCL[LightCyan]}Take the local host out of maintenance mode (Y/n)?${idsCL[Default]} "
else
echo -en "${idsCL[LightCyan]}Put the local host into maintenance mode (Y/n)?${idsCL[Default]} "
fi
read -n 1 choice
case "$choice" in
[Nn]) echo;;
*) echo
if ha-manager status | grep -F "$local_node" | grep -q "maintenance mode"; then
ha-manager crm-command node-maintenance disable "$local_node"
echo -e "\n${idsCL[Green]}This host will be taken out of maintenance mode${idsCL[Default]}\n"
else
ha-manager crm-command node-maintenance enable "$local_node"
echo -e "\n${idsCL[Green]}This host will be entered into maintenance mode${idsCL[Default]}\n"
bash /opt/idssys/ta-proxmenu/inc/evacuate-proxmox-node.sh
fi
FINISH_ACTION
;;
esac
}
INSTALL_KEEPALIVE() {
read -n 1 -p "Are you sure you wish to install Keepalive on all Hosts (Y/n)?" choice
case "$choice" in
[Nn]) echo;;
* )
echo
bash /opt/idssys/ta-proxmenu/inc/deploy-proxmox-keepalived.sh
echo -e "\n${idsCL[Green]}Keepalive has been installed${idsCL[Default]}"
FINISH_ACTION
esac
}
MAIN_MENU() {
echo -en "${idsCL[LightCyan]}Pulling host info ... "
CRES=$(pvesh get /cluster/resources)
DPL=$(dpkg -l)
echo -e "${idsCL[Green]}Done${idsCL[Default]}"
while :
do
clear
echo
echo -e " ${idsCL[Green]}TA-Proxmenu - Proxmox Setup Scripts${idsCL[Default]} ${idsCL[Default]}${VERS}"
echo -e "${idsCL[Green]}---------------------------------------------------------------------------${idsCL[Default]}"
echo -e " Hostname: ${idsCL[Cyan]}$(hostname -s)${idsCL[Default]}"
echo -e " IP Address: ${idsCL[Cyan]}${RNIP}${idsCL[Default]}"
echo -e "${idsCL[Green]}---------------------------------------------------------------------------${idsCL[Default]}"
echo
echo -en "${idsCL[White]} [${idsCL[LightYellow]}0${idsCL[Default]}] ${idsCL[White]}Run Post-Install Script${idsCL[Default]}"
[ -f /opt/.PROXMENUX_POST_INSTALL ] && echo -e "${idsCL[Cyan]} - Has been run previously${idsCL[Default]}" || echo
echo -e "${idsCL[White]} [${idsCL[LightYellow]}1${idsCL[Default]}] ${idsCL[White]}Detect CPU-Arch for Live Migrations${idsCL[Default]}"
if ! grep -qi pulse <<< "$CRES"; then
echo -e "${idsCL[White]} [${idsCL[LightYellow]}2${idsCL[Default]}] ${idsCL[White]}Install Pulse Monitoring${idsCL[Default]}"
else
echo -e "${idsCL[DarkGray]} [2] Pulse Monitoring is already installed${idsCL[Default]}"
fi
if [ -f "${DLDIR}/${VIRTIO_FILE}" ]; then
echo -e "${idsCL[DarkGray]} [3] Current VirtIO drivers already downloaded to 'local' on this host${idsCL[Default]}"
elif compgen -G "${DLDIR}/virtio*.iso" > /dev/null; then
echo -e "${idsCL[White]} [${idsCL[LightYellow]}3${idsCL[Default]}] ${idsCL[LightGreen]}**${idsCL[White]}Download the available updated Win-VirtIO drivers to 'local' on this host${idsCL[Default]}"
else
echo -e "${idsCL[White]} [${idsCL[LightYellow]}3${idsCL[Default]}] ${idsCL[White]}Download the current Win-VirtIO drivers to 'local' on this host${idsCL[Default]}"
fi
if ! command -v glances &> /dev/null; then
echo -e "${idsCL[White]} [${idsCL[LightYellow]}4${idsCL[Default]}] ${idsCL[White]}Install Glances (CLI Monitor)${idsCL[Default]}"
else
echo -e "${idsCL[DarkGray]} [4] Glances is already installed${idsCL[Default]}"
fi
if ! grep -q 'srvadmin-all' <<< "$DPL"; then
echo -e "${idsCL[White]} [${idsCL[LightYellow]}5${idsCL[Default]}] ${idsCL[White]}Install Dell OpenManage Server Administrator${idsCL[Default]}"
else
echo -e "${idsCL[DarkGray]} [5] Dell OMSA is already installed - ${idsCL[Cyan]}https://${RNIP}:1311"
fi
echo
if [ "$(systemctl is-active ITSPlatform)" != "active" ]; then
echo -e "${idsCL[White]} [${idsCL[LightYellow]}6${idsCL[Default]}] ${idsCL[White]}Install ConnectWise RMM Agent${idsCL[Default]}"
else
echo -e "${idsCL[DarkGray]} [6] ConnectWise RMM Agent is already installed${idsCL[Default]}"
fi
if ! grep -q 'cyberprotect' <<< "$DPL"; then
echo -e "${idsCL[White]} [${idsCL[LightYellow]}7${idsCL[Default]}] ${idsCL[White]}Install Acronis Backup Agent${idsCL[Default]}"
else
echo -e "${idsCL[DarkGray]} [7] Acronis Backup is already installed${idsCL[Default]}"
fi
if ! grep -q 'sentinelagent' <<< "$DPL"; then
echo -e "${idsCL[White]} [${idsCL[LightYellow]}8${idsCL[Default]}] ${idsCL[White]}Install SentinelOne Agent (v${S1_VERSION//_/.})${idsCL[Default]}"
else
echo -e "${idsCL[DarkGray]} [8] SentinelOne is already installed${idsCL[Default]}"
fi
echo
if [ "$(systemctl is-active connectwise*)" != "active" ]; then
echo -e "${idsCL[White]} [${idsCL[LightYellow]}S${idsCL[Default]}] ${idsCL[White]}Install ScreenConnect Agent${idsCL[Default]}"
else
echo -e "${idsCL[DarkGray]} [S] ScreenConnect is already installed${idsCL[Default]}"
fi
echo
if ha-manager status | grep -F "$(hostname -s)" | grep -q "maintenance mode"; then
echo -e "${idsCL[White]} [${idsCL[LightYellow]}M${idsCL[Default]}] ${idsCL[White]}Take Host out of Maintenance Mode${idsCL[Default]}"
else
echo -e "${idsCL[White]} [${idsCL[LightYellow]}M${idsCL[Default]}] ${idsCL[White]}Put Host into Maintenance Mode${idsCL[Default]}"
fi
echo -e "${idsCL[White]} [${idsCL[LightYellow]}R${idsCL[Default]}] ${idsCL[White]}Restart Proxmox Services${idsCL[Default]}"
echo
if ! grep -q 'keepalived' <<< "$DPL"; then
echo -e "${idsCL[White]} [${idsCL[LightYellow]}K${idsCL[Default]}] ${idsCL[White]}Install Keepalive on all Hosts${idsCL[Default]}"
else
echo -e "${idsCL[DarkGray]} [K] Keepalive is already installed${idsCL[Default]}"
fi
echo
echo -e "${idsCL[White]} [${idsCL[LightYellow]}Q${idsCL[Default]}] ${idsCL[White]}Quit${idsCL[Default]}"
echo
echo
echo -e -n "${idsCL[Yellow]}Enter ${idsCL[LightYellow]}option${idsCL[Yellow]} from above:${idsCL[Default]} "
read -n 1 opt
echo
case $opt in
[0]) PROXMENUX_POST_INSTALL;;
[1]) DETECT_CPU;;
[2]) INSTALL_PULSE;;
[3]) DOWNLOAD_VIRTIO;;
[4]) INSTALL_GLANCES;;
[5]) INSTALL_OMSA;;
[6]) INSTALL_RMM;;
[7]) INSTALL_ACRONIS;;
[8]) INSTALL_S1;;
[Ss]) INSTALL_SCREENCONNECT;;
[Mm]) MAINTENANCE_MODE;;
[Rr]) RESTART_PVE_SERVICES;;
[Kk]) INSTALL_KEEPALIVE;;
[Qq]) EXIT1; exit 0;;
*) echo -e "That's an invalid option.\nPlease select a valid option."; sleep 1;;
esac
done
}
if (( ACTION_REQUESTED == 1 )); then
case "$action" in
pulse) INSTALL_PULSE;;
rmm) INSTALL_RMM;;
omsa) INSTALL_OMSA;;
glances) INSTALL_GLANCES;;
acronis) INSTALL_ACRONIS;;
proxmenux) [ ! -f /usr/local/bin/menu ] && INSTALL_PROXMENUX || /usr/local/bin/menu;;
screenconnect) INSTALL_SCREENCONNECT;;
restart) RESTART_PVE_SERVICES "${2:-}";;
cpu) DETECT_CPU;;
mm) MAINTENANCE_MODE;;
timeout) SET_VM_SHUTDOWNTIMEOUT "${2:-}";;
*) MAIN_MENU;;
esac
else
MAIN_MENU
fi
exit 0