Compare commits

..

1 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
96f0758865 fix(addons): ensure curl is installed before use in all addon scripts 2026-02-09 10:48:01 +01:00
42 changed files with 554 additions and 369 deletions

View File

@@ -410,21 +410,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- tracearr: prepare for next stable release [@durzo](https://github.com/durzo) ([#11673](https://github.com/community-scripts/ProxmoxVE/pull/11673))
- PeaNUT: symlink server.js after update [@vhsdream](https://github.com/vhsdream) ([#11696](https://github.com/community-scripts/ProxmoxVE/pull/11696))
- #### ✨ New Features
- remove whiptail from update scripts for unattended update support [@MickLesk](https://github.com/MickLesk) ([#11712](https://github.com/community-scripts/ProxmoxVE/pull/11712))
- #### 🔧 Refactor
- Nginx-UI: better User Handling | ACME [@MickLesk](https://github.com/MickLesk) ([#11715](https://github.com/community-scripts/ProxmoxVE/pull/11715))
- NginxProxymanager: use better-sqlite3 [@MickLesk](https://github.com/MickLesk) ([#11708](https://github.com/community-scripts/ProxmoxVE/pull/11708))
### 💾 Core
- #### 🔧 Refactor
- hwaccel: add libmfx-gen1.2 to Intel Arc setup for QSV support [@MickLesk](https://github.com/MickLesk) ([#11707](https://github.com/community-scripts/ProxmoxVE/pull/11707))
### ❔ Uncategorized
- Bichon: Update website [@tremor021](https://github.com/tremor021) ([#11711](https://github.com/community-scripts/ProxmoxVE/pull/11711))

View File

@@ -20,9 +20,28 @@ color
catch_errors
function update_script() {
header_info
$STD apk -U upgrade
msg_ok "Updated successfully!"
if ! apk -e info newt >/dev/null 2>&1; then
apk add -q newt
fi
while true; do
CHOICE=$(
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 1 \
"1" "Check for Docker Updates" 3>&2 2>&1 1>&3
)
exit_status=$?
if [ $exit_status == 1 ]; then
clear
exit-script
fi
header_info
case $CHOICE in
1)
$STD apk -U upgrade
msg_ok "Updated successfully!"
exit
;;
esac
done
exit 0
}

View File

@@ -20,32 +20,43 @@ color
catch_errors
function update_script() {
if ! apk -e info newt >/dev/null 2>&1; then
apk add -q newt
fi
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
CHOICE=$(msg_menu "Grafana Update Options" \
"1" "Check for Grafana Updates" \
"2" "Allow 0.0.0.0 for listening" \
"3" "Allow only ${LXCIP} for listening")
case $CHOICE in
1)
$STD apk -U upgrade
msg_ok "Updated successfully!"
exit
;;
2)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana
service grafana restart
msg_ok "Allowed listening on all interfaces!"
exit
;;
3)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana
service grafana restart
msg_ok "Allowed listening only on ${LXCIP}!"
exit
;;
esac
while true; do
CHOICE=$(
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 3 \
"1" "Check for Grafana Updates" \
"2" "Allow 0.0.0.0 for listening" \
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
)
exit_status=$?
if [ $exit_status == 1 ]; then
clear
exit-script
fi
header_info
case $CHOICE in
1)
$STD apk -U upgrade
msg_ok "Updated successfully!"
exit
;;
2)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana
service grafana restart
msg_ok "Allowed listening on all interfaces!"
exit
;;
3)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana
service grafana restart
msg_ok "Allowed listening only on ${LXCIP}!"
exit
;;
esac
done
exit 0
}

View File

@@ -20,32 +20,43 @@ color
catch_errors
function update_script() {
if ! apk -e info newt >/dev/null 2>&1; then
apk add -q newt
fi
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
CHOICE=$(msg_menu "Loki Update Options" \
"1" "Check for Loki Updates" \
"2" "Allow 0.0.0.0 for listening" \
"3" "Allow only ${LXCIP} for listening")
case $CHOICE in
1)
$STD apk -U upgrade
msg_ok "Updated successfully!"
exit
;;
2)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/loki
service loki restart
msg_ok "Allowed listening on all interfaces!"
exit
;;
3)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/loki
service loki restart
msg_ok "Allowed listening only on ${LXCIP}!"
exit
;;
esac
while true; do
CHOICE=$(
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 3 \
"1" "Check for Loki Updates" \
"2" "Allow 0.0.0.0 for listening" \
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
)
exit_status=$?
if [ $exit_status == 1 ]; then
clear
exit-script
fi
header_info
case $CHOICE in
1)
$STD apk -U upgrade
msg_ok "Updated successfully!"
exit
;;
2)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/loki
service loki restart
msg_ok "Allowed listening on all interfaces!"
exit
;;
3)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/loki
service loki restart
msg_ok "Allowed listening only on ${LXCIP}!"
exit
;;
esac
done
exit 0
}

View File

@@ -24,31 +24,33 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
CHOICE=$(msg_menu "Nextcloud Options" \
"1" "Update Alpine Packages" \
"2" "Nextcloud Login Credentials" \
"3" "Renew Self-signed Certificate")
case $CHOICE in
1)
msg_info "Updating Alpine Packages"
$STD apk -U upgrade
msg_ok "Updated Alpine Packages"
msg_ok "Updated successfully!"
exit
;;
2)
cat nextcloud.creds
exit
;;
3)
openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/nextcloud-selfsigned.key -out /etc/ssl/certs/nextcloud-selfsigned.crt -subj "/C=US/O=Nextcloud/OU=Domain Control Validated/CN=nextcloud.local" >/dev/null 2>&1
rc-service nginx restart
msg_ok "Renewed self-signed certificate"
exit
;;
esac
if ! apk -e info newt >/dev/null 2>&1; then
apk add -q newt
fi
while true; do
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 3 \
"1" "Nextcloud Login Credentials" ON \
"2" "Renew Self-signed Certificate" OFF \
3>&1 1>&2 2>&3)
exit_status=$?
if [ $exit_status == 1 ]; then
clear
exit-script
fi
header_info
case $CHOICE in
1)
cat nextcloud.creds
exit
;;
2)
openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/nextcloud-selfsigned.key -out /etc/ssl/certs/nextcloud-selfsigned.crt -subj "/C=US/O=Nextcloud/OU=Domain Control Validated/CN=nextcloud.local" >/dev/null 2>&1
rc-service nginx restart
exit
;;
esac
done
exit 0
}
start

View File

@@ -20,36 +20,47 @@ color
catch_errors
function update_script() {
if ! apk -e info newt >/dev/null 2>&1; then
apk add -q newt
fi
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
CHOICE=$(msg_menu "Redis Management" \
"1" "Update Redis" \
"2" "Allow 0.0.0.0 for listening" \
"3" "Allow only ${LXCIP} for listening")
case $CHOICE in
1)
msg_info "Updating Redis"
apk update && apk upgrade redis
rc-service redis restart
msg_ok "Updated successfully!"
exit
;;
2)
msg_info "Setting Redis to listen on all interfaces"
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf
rc-service redis restart
msg_ok "Redis now listens on all interfaces!"
exit
;;
3)
msg_info "Setting Redis to listen only on ${LXCIP}"
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/redis.conf
rc-service redis restart
msg_ok "Redis now listens only on ${LXCIP}!"
exit
;;
esac
while true; do
CHOICE=$(
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Redis Management" --menu "Select option" 11 58 3 \
"1" "Update Redis" \
"2" "Allow 0.0.0.0 for listening" \
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
)
exit_status=$?
if [ $exit_status == 1 ]; then
clear
exit-script
fi
header_info
case $CHOICE in
1)
msg_info "Updating Redis"
apk update && apk upgrade redis
rc-service redis restart
msg_ok "Updated successfully!"
exit
;;
2)
msg_info "Setting Redis to listen on all interfaces"
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf
rc-service redis restart
msg_ok "Redis now listens on all interfaces!"
exit
;;
3)
msg_info "Setting Redis to listen only on ${LXCIP}"
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/redis.conf
rc-service redis restart
msg_ok "Redis now listens only on ${LXCIP}!"
exit
;;
esac
done
}
start

View File

@@ -20,37 +20,48 @@ color
catch_errors
function update_script() {
if ! apk -e info newt >/dev/null 2>&1; then
apk add -q newt
fi
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
CHOICE=$(msg_menu "Valkey Management" \
"1" "Update Valkey" \
"2" "Allow 0.0.0.0 for listening" \
"3" "Allow only ${LXCIP} for listening")
case $CHOICE in
1)
msg_info "Updating Valkey"
apk update && apk upgrade valkey
rc-service valkey restart
msg_ok "Updated Valkey"
msg_ok "Updated successfully!"
exit
;;
2)
msg_info "Setting Valkey to listen on all interfaces"
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf
rc-service valkey restart
msg_ok "Valkey now listens on all interfaces!"
exit
;;
3)
msg_info "Setting Valkey to listen only on ${LXCIP}"
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/valkey/valkey.conf
rc-service valkey restart
msg_ok "Valkey now listens only on ${LXCIP}!"
exit
;;
esac
while true; do
CHOICE=$(
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Valkey Management" --menu "Select option" 11 58 3 \
"1" "Update Valkey" \
"2" "Allow 0.0.0.0 for listening" \
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
)
exit_status=$?
if [ $exit_status == 1 ]; then
clear
exit-script
fi
header_info
case $CHOICE in
1)
msg_info "Updating Valkey"
apk update && apk upgrade valkey
rc-service valkey restart
msg_ok "Updated Valkey"
msg_ok "Updated successfully!"
exit
;;
2)
msg_info "Setting Valkey to listen on all interfaces"
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf
rc-service valkey restart
msg_ok "Valkey now listens on all interfaces!"
exit
;;
3)
msg_info "Setting Valkey to listen only on ${LXCIP}"
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/valkey/valkey.conf
rc-service valkey restart
msg_ok "Valkey now listens only on ${LXCIP}!"
exit
;;
esac
done
}
start

View File

@@ -20,38 +20,45 @@ color
catch_errors
function update_script() {
CHOICE=$(msg_menu "Vaultwarden Update Options" \
"1" "Update Vaultwarden" \
"2" "Reset ADMIN_TOKEN")
case $CHOICE in
1)
$STD apk -U upgrade
rc-service vaultwarden restart -q
msg_ok "Updated successfully!"
exit
;;
2)
if [[ "${PHS_SILENT:-0}" == "1" ]]; then
msg_warn "Reset ADMIN_TOKEN requires interactive mode, skipping."
exit
if ! apk -e info newt >/dev/null 2>&1; then
apk add -q newt
fi
while true; do
CHOICE=$(
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 2 \
"1" "Update Vaultwarden" \
"2" "Reset ADMIN_TOKEN" 3>&2 2>&1 1>&3
)
exit_status=$?
if [ $exit_status == 1 ]; then
clear
exit-script
fi
read -r -s -p "Setup your ADMIN_TOKEN (make it strong): " NEWTOKEN
echo ""
if [[ -n "$NEWTOKEN" ]]; then
if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1)
if [[ ! -f /var/lib/vaultwarden/config.json ]]; then
sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden
else
sed -i "s|\"admin_token\": .*|\"admin_token\": \"${TOKEN}\",|" /var/lib/vaultwarden/config.json
fi
header_info
case $CHOICE in
1)
$STD apk -U upgrade
rc-service vaultwarden restart -q
msg_ok "Admin token updated"
fi
exit
;;
esac
msg_ok "Updated successfully!"
exit
;;
2)
if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Setup your ADMIN_TOKEN (make it strong)" 10 58 3>&1 1>&2 2>&3); then
if [[ -z "$NEWTOKEN" ]]; then exit-script; fi
if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1)
if [[ ! -f /var/lib/vaultwarden/config.json ]]; then
sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden
else
sed -i "s|\"admin_token\": .*|\"admin_token\": \"${TOKEN}\",|" /var/lib/vaultwarden/config.json
fi
rc-service vaultwarden restart -q
fi
clear
exit
;;
esac
done
}
start

View File

@@ -20,10 +20,28 @@ color
catch_errors
function update_script() {
header_info
$STD apk -U upgrade
msg_ok "Updated successfully!"
exit 0
if ! apk -e info newt >/dev/null 2>&1; then
apk add -q newt
fi
while true; do
CHOICE=$(
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 1 \
"1" "Check for Zigbee2MQTT Updates" 3>&2 2>&1 1>&3
)
exit_status=$?
if [ $exit_status == 1 ]; then
clear
exit-script
fi
header_info
case $CHOICE in
1)
$STD apk -U upgrade
msg_ok "Updated successfully!"
exit
;;
esac
done
}
start

View File

@@ -20,10 +20,18 @@ color
catch_errors
function update_script() {
UPD=$(
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 1 \
"1" "Check for Alpine Updates" ON \
3>&1 1>&2 2>&3
)
header_info
$STD apk -U upgrade
msg_ok "Updated successfully!"
exit 0
if [ "$UPD" == "1" ]; then
$STD apk -U upgrade
msg_ok "Updated successfully!"
exit 0
fi
}
start

View File

@@ -23,9 +23,10 @@ function update_script() {
header_info
check_container_storage
check_container_resources
UPD=$(msg_menu "Cronicle Update Options" \
"1" "Update ${APP}" \
"2" "Install ${APP} Worker")
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
"1" "Update ${APP}" ON \
"2" "Install ${APP} Worker" OFF \
3>&1 1>&2 2>&3)
if [ "$UPD" == "1" ]; then
if [[ ! -d /opt/cronicle ]]; then

View File

@@ -31,27 +31,18 @@ function update_script() {
APP_VERSION=$(grep -o '"version": *"[^"]*"' /opt/gitea-mirror/package.json | cut -d'"' -f4)
if [[ $APP_VERSION =~ ^2\. ]]; then
if [[ "${PHS_SILENT:-0}" == "1" ]]; then
msg_warn "Version $APP_VERSION detected. Major version upgrade requires interactive confirmation, skipping."
exit 75
fi
msg_warn "WARNING: Version $APP_VERSION detected!"
msg_warn "Updating from version 2.x will CLEAR ALL CONFIGURATION."
msg_warn "This includes: API tokens, User settings, Repository configurations, All custom settings"
echo ""
read -r -p "Do you want to continue? (y/N): " CONFIRM
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ VERSION 2.x DETECTED" --yesno \
"WARNING: Version $APP_VERSION detected!\n\nUpdating from version 2.x will CLEAR ALL CONFIGURATION.\n\nThis includes:\n• API tokens\n• User settings\n• Repository configurations\n• All custom settings\n\nDo you want to continue with the update process?" 15 70 --defaultno; then
exit 0
fi
msg_warn "FINAL WARNING: This update WILL clear all configuration!"
msg_warn "Please ensure you have backed up API tokens, custom configurations, and repository settings."
echo ""
read -r -p "Final confirmation - proceed? (y/N): " CONFIRM2
if [[ ! "$CONFIRM2" =~ ^[Yy]$ ]]; then
msg_info "Update cancelled. Please backup your configuration before proceeding."
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ FINAL CONFIRMATION" --yesno \
"FINAL WARNING: This update WILL clear all configuration!\n\nBEFORE PROCEEDING, please:\n\n• Copy API tokens to a safe location\n• Backup any custom configurations\n• Note down repository settings\n\nThis action CANNOT be undone!" 18 70 --defaultno; then
whiptail --backtitle "Gitea Mirror Update" --title "Update Cancelled" --msgbox "Update process cancelled. Please backup your configuration before proceeding." 8 60
exit 0
fi
msg_info "Proceeding with version $APP_VERSION update. All configuration will be cleared as warned."
whiptail --backtitle "Gitea Mirror Update" --title "Proceeding with Update" --msgbox \
"Proceeding with version $APP_VERSION update.\n\nAll configuration will be cleared as warned." 8 50
rm -rf /opt/gitea-mirror
fi

View File

@@ -27,11 +27,12 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
UPD=$(msg_menu "Home Assistant Update Options" \
"1" "Update ALL Containers" \
"2" "Remove ALL Unused Images" \
"3" "Install HACS" \
"4" "Install FileBrowser")
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
"1" "Update ALL Containers" ON \
"2" "Remove ALL Unused Images" OFF \
"3" "Install HACS" OFF \
"4" "Install FileBrowser" OFF \
3>&1 1>&2 2>&3)
if [ "$UPD" == "1" ]; then
msg_info "Updating All Containers"

View File

@@ -29,13 +29,21 @@ function update_script() {
exit 1
fi
CHOICE=$(msg_menu "Loki Update Options" \
"1" "Update Loki & Promtail" \
"2" "Allow 0.0.0.0 for listening" \
"3" "Allow only ${LOCAL_IP} for listening")
case $CHOICE in
1)
while true; do
CHOICE=$(
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 3 \
"1" "Update Loki & Promtail" \
"2" "Allow 0.0.0.0 for listening" \
"3" "Allow only ${LOCAL_IP} for listening" 3>&2 2>&1 1>&3
)
exit_status=$?
if [ $exit_status == 1 ]; then
clear
exit-script
fi
header_info
case $CHOICE in
1)
msg_info "Stopping Loki"
systemctl stop loki
if systemctl is-active --quiet promtail 2>/dev/null || dpkg -s promtail >/dev/null 2>&1; then
@@ -77,6 +85,7 @@ function update_script() {
exit
;;
esac
done
exit 0
}

View File

@@ -24,9 +24,21 @@ function update_script() {
check_container_storage
check_container_resources
setup_meilisearch
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Meilisearch Update" --radiolist --cancel-button Exit-Script "Spacebar = Select" 10 58 2 \
"1" "Update Meilisearch" ON \
"2" "Update Meilisearch-UI" OFF \
3>&1 1>&2 2>&3)
if [[ -d /opt/meilisearch-ui ]]; then
if [ "$UPD" == "1" ]; then
setup_meilisearch
exit
fi
if [ "$UPD" == "2" ]; then
if [[ ! -d /opt/meilisearch-ui ]]; then
msg_error "No Meilisearch-UI Installation Found!"
exit
fi
if check_for_gh_release "meilisearch-ui" "riccox/meilisearch-ui"; then
msg_info "Stopping Meilisearch-UI"
systemctl stop meilisearch-ui
@@ -46,11 +58,10 @@ function update_script() {
msg_info "Starting Meilisearch-UI"
systemctl start meilisearch-ui
msg_ok "Started Meilisearch-UI"
msg_ok "Updated successfully!"
fi
exit
fi
msg_ok "Updated successfully!"
exit
}
start

View File

@@ -27,9 +27,10 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
UPD=$(msg_menu "Node-Red Update Options" \
"1" "Update ${APP}" \
"2" "Install Themes")
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
"1" "Update ${APP}" ON \
"2" "Install Themes" OFF \
3>&1 1>&2 2>&3)
if [ "$UPD" == "1" ]; then
NODE_VERSION="22" setup_nodejs
@@ -48,31 +49,32 @@ function update_script() {
exit
fi
if [ "$UPD" == "2" ]; then
THEME=$(msg_menu "Node-Red Themes" \
"midnight-red" "Midnight Red (default)" \
"aurora" "Aurora" \
"cobalt2" "Cobalt2" \
"dark" "Dark" \
"dracula" "Dracula" \
"espresso-libre" "Espresso Libre" \
"github-dark" "GitHub Dark" \
"github-dark-default" "GitHub Dark Default" \
"github-dark-dimmed" "GitHub Dark Dimmed" \
"monoindustrial" "Monoindustrial" \
"monokai" "Monokai" \
"monokai-dimmed" "Monokai Dimmed" \
"noctis" "Noctis" \
"oceanic-next" "Oceanic Next" \
"oled" "OLED" \
"one-dark-pro" "One Dark Pro" \
"one-dark-pro-darker" "One Dark Pro Darker" \
"solarized-dark" "Solarized Dark" \
"solarized-light" "Solarized Light" \
"tokyo-night" "Tokyo Night" \
"tokyo-night-light" "Tokyo Night Light" \
"tokyo-night-storm" "Tokyo Night Storm" \
"totallyinformation" "TotallyInformation" \
"zenburn" "Zenburn")
THEME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NODE-RED THEMES" --radiolist --cancel-button Exit-Script "Choose Theme" 15 58 6 \
"aurora" "" OFF \
"cobalt2" "" OFF \
"dark" "" OFF \
"dracula" "" OFF \
"espresso-libre" "" OFF \
"github-dark" "" OFF \
"github-dark-default" "" OFF \
"github-dark-dimmed" "" OFF \
"midnight-red" "" ON \
"monoindustrial" "" OFF \
"monokai" "" OFF \
"monokai-dimmed" "" OFF \
"noctis" "" OFF \
"oceanic-next" "" OFF \
"oled" "" OFF \
"one-dark-pro" "" OFF \
"one-dark-pro-darker" "" OFF \
"solarized-dark" "" OFF \
"solarized-light" "" OFF \
"tokyo-night" "" OFF \
"tokyo-night-light" "" OFF \
"tokyo-night-storm" "" OFF \
"totallyinformation" "" OFF \
"zenburn" "" OFF \
3>&1 1>&2 2>&3)
header_info
msg_info "Installing ${THEME} Theme"
cd /root/.node-red

View File

@@ -20,21 +20,32 @@ color
catch_errors
function update_script() {
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE MODE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 14 60 2 \
"1" "Check for Alpine Updates" OFF \
"2" "Update NPMplus Docker Container" ON \
3>&1 1>&2 2>&3)
header_info "$APP"
msg_info "Updating Alpine OS"
$STD apk -U upgrade
msg_ok "System updated"
msg_info "Pulling latest NPMplus container image"
cd /opt
$STD docker compose pull
msg_info "Recreating container"
$STD docker compose up -d
msg_ok "Updated NPMplus container"
msg_ok "Updated successfully!"
exit
case "$UPD" in
"1")
msg_info "Updating Alpine OS"
$STD apk -U upgrade
msg_ok "System updated"
exit
;;
"2")
msg_info "Updating NPMplus Container"
cd /opt
msg_info "Pulling latest container image"
$STD docker compose pull
msg_info "Recreating container"
$STD docker compose up -d
msg_ok "Updated successfully!"
exit
;;
esac
exit 0
}
start

View File

@@ -29,9 +29,10 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
UPD=$(msg_menu "Plex Update Options" \
"1" "Update LXC" \
"2" "Install plexupdate")
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select \nplexupdate info >> https://github.com/mrworf/plexupdate" 10 59 2 \
"1" "Update LXC" ON \
"2" "Install plexupdate" OFF \
3>&1 1>&2 2>&3)
if [ "$UPD" == "1" ]; then
msg_info "Updating ${APP} LXC"
$STD apt update

View File

@@ -27,11 +27,12 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
UPD=$(msg_menu "Home Assistant Update Options" \
"1" "Update system and containers" \
"2" "Install HACS" \
"3" "Install FileBrowser" \
"4" "Remove ALL Unused Images")
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
"1" "Update system and containers" ON \
"2" "Install HACS" OFF \
"3" "Install FileBrowser" OFF \
"4" "Remove ALL Unused Images" OFF \
3>&1 1>&2 2>&3)
if [ "$UPD" == "1" ]; then
msg_info "Updating ${APP} LXC"

View File

@@ -33,9 +33,7 @@ function update_script() {
systemctl stop umlautadaptarr
msg_ok "Stopped Service"
cp /opt/UmlautAdaptarr/appsettings.json /opt/UmlautAdaptarr/appsettings.json.bak
fetch_and_deploy_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr" "prebuild" "latest" "/opt/UmlautAdaptarr" "linux-x64.zip"
cp /opt/UmlautAdaptarr/appsettings.json.bak /opt/UmlautAdaptarr/appsettings.json
msg_info "Starting Service"
systemctl start umlautadaptarr

View File

@@ -31,9 +31,11 @@ function update_script() {
VAULT=$(get_latest_github_release "dani-garcia/vaultwarden")
WVRELEASE=$(get_latest_github_release "dani-garcia/bw_web_builds")
UPD=$(msg_menu "Vaultwarden Update Options" \
"1" "Update VaultWarden + Web-Vault" \
"2" "Set Admin Token")
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 3 \
"1" "VaultWarden $VAULT" ON \
"2" "Web-Vault $WVRELEASE" OFF \
"3" "Set Admin Token" OFF \
3>&1 1>&2 2>&3)
if [ "$UPD" == "1" ]; then
if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then
@@ -57,10 +59,14 @@ function update_script() {
msg_info "Starting Service"
systemctl start vaultwarden
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "VaultWarden is already up-to-date"
fi
exit
fi
if [ "$UPD" == "2" ]; then
if check_for_gh_release "vaultwarden_webvault" "dani-garcia/bw_web_builds"; then
msg_info "Stopping Service"
systemctl stop vaultwarden
@@ -78,22 +84,16 @@ function update_script() {
msg_info "Starting Service"
systemctl start vaultwarden
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "Web-Vault is already up-to-date"
fi
msg_ok "Updated successfully!"
exit
fi
if [ "$UPD" == "2" ]; then
if [[ "${PHS_SILENT:-0}" == "1" ]]; then
msg_warn "Set Admin Token requires interactive mode, skipping."
exit
fi
read -r -s -p "Set the ADMIN_TOKEN: " NEWTOKEN
echo ""
if [[ -n "$NEWTOKEN" ]]; then
if [ "$UPD" == "3" ]; then
if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Set the ADMIN_TOKEN" 10 58 3>&1 1>&2 2>&3); then
if [[ -z "$NEWTOKEN" ]]; then exit; fi
ensure_dependencies argon2
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -t 2 -m 16 -p 4 -l 64 -e)
sed -i "s|ADMIN_TOKEN=.*|ADMIN_TOKEN='${TOKEN}'|" /opt/vaultwarden/.env

View File

@@ -28,14 +28,10 @@
}
],
"default_credentials": {
"username": null,
"username": "admin",
"password": null
},
"notes": [
{
"text": "On first visit, the setup wizard will guide you to create an admin account and configure ACME email.",
"type": "warning"
},
{
"text": "Nginx runs on ports 80/443, Nginx UI management interface on port 9000.",
"type": "info"
@@ -43,6 +39,10 @@
{
"text": "SSL certificates can be managed automatically with Let's Encrypt integration.",
"type": "info"
},
{
"text": "Initial Login data: `cat ~/nginx-ui.creds`",
"type": "info"
}
]
}

View File

@@ -30,19 +30,29 @@ msg_ok "Installed Nginx UI"
msg_info "Configuring Nginx UI"
mkdir -p /usr/local/etc/nginx-ui
cat <<EOF >/usr/local/etc/nginx-ui/app.ini
[server]
HttpHost = 0.0.0.0
HttpPort = 9000
RunMode = release
JwtSecret = $(openssl rand -hex 32)
[nginx]
AccessLogPath = /var/log/nginx/access.log
ErrorLogPath = /var/log/nginx/error.log
ConfigDir = /etc/nginx
PIDPath = /run/nginx.pid
TestConfigCmd = nginx -t
ReloadCmd = nginx -s reload
RestartCmd = systemctl restart nginx
[app]
PageSize = 10
[server]
Host = 0.0.0.0
Port = 9000
RunMode = release
[cert]
HTTPChallengePort = 9180
[terminal]
StartCmd = login
Email =
CADir =
RenewalInterval = 7
RecursiveNameservers =
EOF
msg_ok "Configured Nginx UI"
@@ -68,6 +78,17 @@ EOF
systemctl daemon-reload
msg_ok "Created Service"
msg_info "Creating Initial Admin User"
systemctl start nginx-ui
sleep 3
systemctl stop nginx-ui
sleep 1
/usr/local/bin/nginx-ui reset-password --config /usr/local/etc/nginx-ui/app.ini &>/tmp/nginx-ui-reset.log || true
ADMIN_PASS=$(grep -oP 'Password: \K\S+' /tmp/nginx-ui-reset.log || echo "admin")
echo -e "Nginx-UI Credentials\nUsername: admin\nPassword: $ADMIN_PASS" >~/nginx-ui.creds
rm -f /tmp/nginx-ui-reset.log
msg_ok "Created Initial Admin User"
msg_info "Starting Service"
systemctl enable -q --now nginx-ui
rm -rf /etc/nginx/sites-enabled/default

View File

@@ -27,6 +27,68 @@ msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr" "prebuild" "latest" "/opt/UmlautAdaptarr" "linux-x64.zip"
msg_info "Setting up UmlautAdaptarr"
cat <<EOF >/opt/UmlautAdaptarr/appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
},
"Console": {
"TimestampFormat": "yyyy-MM-dd HH:mm:ss::"
}
},
"AllowedHosts": "*",
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://[::]:5005"
}
}
},
"Settings": {
"UserAgent": "UmlautAdaptarr/1.0",
"UmlautAdaptarrApiHost": "https://umlautadaptarr.pcjones.de/api/v1",
"IndexerRequestsCacheDurationInMinutes": 12
},
"Sonarr": [
{
"Enabled": false,
"Name": "Sonarr",
"Host": "http://192.168.1.100:8989",
"ApiKey": "dein_sonarr_api_key"
}
],
"Radarr": [
{
"Enabled": false,
"Name": "Radarr",
"Host": "http://192.168.1.101:7878",
"ApiKey": "dein_radarr_api_key"
}
],
"Lidarr": [
{
"Enabled": false,
"Host": "http://192.168.1.102:8686",
"ApiKey": "dein_lidarr_api_key"
},
],
"Readarr": [
{
"Enabled": false,
"Host": "http://192.168.1.103:8787",
"ApiKey": "dein_readarr_api_key"
},
],
"IpLeakTest": {
"Enabled": false
}
}
EOF
msg_ok "Setup UmlautAdaptarr"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/umlautadaptarr.service
[Unit]

View File

@@ -3318,68 +3318,6 @@ configure_ssh_settings() {
fi
}
# ------------------------------------------------------------------------------
# msg_menu()
#
# - Displays a numbered menu for update_script() functions
# - In silent mode (PHS_SILENT=1): auto-selects the default option
# - In interactive mode: shows menu via read with 10s timeout + default fallback
# - Usage: CHOICE=$(msg_menu "Title" "tag1" "Description 1" "tag2" "Desc 2" ...)
# - The first item is always the default
# - Returns the selected tag to stdout
# - If no valid selection or timeout, returns the default (first) tag
# ------------------------------------------------------------------------------
msg_menu() {
local title="$1"
shift
# Parse items into parallel arrays: tags[] and descriptions[]
local -a tags=()
local -a descs=()
while [[ $# -ge 2 ]]; do
tags+=("$1")
descs+=("$2")
shift 2
done
local default_tag="${tags[0]}"
local count=${#tags[@]}
# Silent mode: return default immediately
if [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]]; then
echo "$default_tag"
return 0
fi
# Display menu
echo ""
msg_custom "📋" "${BL}" "${title}"
echo ""
for i in "${!tags[@]}"; do
local marker=" "
[[ $i -eq 0 ]] && marker="* "
printf "${TAB3}${marker}%s) %s\n" "${tags[$i]}" "${descs[$i]}"
done
echo ""
local selection=""
read -r -t 10 -p "${TAB3}Select [default=${default_tag}, timeout 10s]: " selection || true
# Validate selection
if [[ -n "$selection" ]]; then
for tag in "${tags[@]}"; do
if [[ "$selection" == "$tag" ]]; then
echo "$selection"
return 0
fi
done
msg_warn "Invalid selection '${selection}' - using default: ${default_tag}"
fi
echo "$default_tag"
return 0
}
# ------------------------------------------------------------------------------
# start()
#

View File

@@ -3595,7 +3595,6 @@ _setup_intel_arc() {
$STD apt -y install \
intel-media-va-driver-non-free \
intel-opencl-icd \
libmfx-gen1.2 \
vainfo \
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
@@ -3622,7 +3621,6 @@ _setup_intel_arc() {
intel-media-va-driver-non-free \
ocl-icd-libopencl1 \
libvpl2 \
libmfx-gen1.2 \
vainfo \
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
fi

View File

@@ -79,6 +79,10 @@ EOF
header_info
msg "Installing NetBird..."
pct exec "$CTID" -- bash -c '
if ! command -v curl &>/dev/null; then
apt-get update -qq
apt-get install -y curl >/dev/null
fi
apt install -y ca-certificates gpg &>/dev/null
curl -fsSL "https://pkgs.netbird.io/debian/public.key" | gpg --dearmor >/usr/share/keyrings/netbird-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/netbird-archive-keyring.gpg] https://pkgs.netbird.io/debian stable main" >/etc/apt/sources.list.d/netbird.list

View File

@@ -89,6 +89,12 @@ if ! dig +short pkgs.tailscale.com | grep -qvE "^127\.|^0\.0\.0\.0$"; then
echo "nameserver 1.1.1.1" >"$ORIG_RESOLV"
fi
if ! command -v curl &>/dev/null; then
echo "[INFO] curl not found, installing..."
apt-get update -qq
apt-get install -y curl >/dev/null
fi
curl -fsSL https://pkgs.tailscale.com/stable/${ID}/${VER}.noarmor.gpg \
| tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null

View File

@@ -5,6 +5,11 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/bakito/adguardhome-sync
if ! command -v curl &>/dev/null; then
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
apt-get update >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1
fi
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)

View File

@@ -5,6 +5,11 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/9001/copyparty
if ! command -v curl &>/dev/null; then
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
apt-get update >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1
fi
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)

View File

@@ -110,6 +110,7 @@ if [[ -f "$INSTALL_PATH" ]]; then
read -r update_prompt
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Updating ${APP}"
if ! command -v curl &>/dev/null; then $PKG_MANAGER curl &>/dev/null; fi
curl -fsSL https://github.com/gtsteffaniak/filebrowser/releases/latest/download/linux-amd64-filebrowser -o "$TMP_BIN"
chmod +x "$TMP_BIN"
mv -f "$TMP_BIN" /usr/local/bin/filebrowser

View File

@@ -88,6 +88,7 @@ if [ -f "$INSTALL_PATH" ]; then
read -r -p "Would you like to update ${APP}? (y/N): " update_prompt
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Updating ${APP}"
if ! command -v curl &>/dev/null; then $PKG_MANAGER curl &>/dev/null; fi
curl -fsSL "https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz" | tar -xzv -C /usr/local/bin &>/dev/null
chmod +x "$INSTALL_PATH"
msg_ok "Updated ${APP}"

View File

@@ -44,7 +44,7 @@ IP=$(get_lxc_ip)
install_glances_debian() {
msg_info "Installing dependencies"
apt-get update >/dev/null 2>&1
apt-get install -y gcc lm-sensors wireless-tools >/dev/null 2>&1
apt-get install -y gcc lm-sensors wireless-tools curl >/dev/null 2>&1
msg_ok "Installed dependencies"
msg_info "Setting up Python + uv"
@@ -114,7 +114,7 @@ install_glances_alpine() {
apk update >/dev/null 2>&1
$STD apk add --no-cache \
gcc musl-dev linux-headers python3-dev \
python3 py3-pip py3-virtualenv lm-sensors wireless-tools >/dev/null 2>&1
python3 py3-pip py3-virtualenv lm-sensors wireless-tools curl >/dev/null 2>&1
msg_ok "Installed dependencies"
msg_info "Setting up Python + uv"

View File

@@ -5,6 +5,11 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/alangrainger/immich-public-proxy
if ! command -v curl &>/dev/null; then
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
apt-get update >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1
fi
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)

View File

@@ -5,6 +5,11 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/CyferShepard/Jellystat
if ! command -v curl &>/dev/null; then
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
apt-get update >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1
fi
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)

View File

@@ -5,6 +5,11 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/xperimental/nextcloud-exporter
if ! command -v curl &>/dev/null; then
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
apt-get update >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1
fi
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)

View File

@@ -51,6 +51,10 @@ function msg_ok() {
}
msg_info "Installing ${APP}"
if ! command -v curl &>/dev/null; then
apt-get update >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1
fi
curl -fsSL "https://github.com/OliveTin/OliveTin/releases/latest/download/OliveTin_linux_amd64.deb" -o $(basename "https://github.com/OliveTin/OliveTin/releases/latest/download/OliveTin_linux_amd64.deb")
dpkg -i OliveTin_linux_amd64.deb &>/dev/null
systemctl enable --now OliveTin &>/dev/null

View File

@@ -57,6 +57,10 @@ function msg_ok() { echo -e "${CM} ${GN}${1}${CL}"; }
function msg_error() { echo -e "${CROSS} ${RD}${1}${CL}"; }
function check_internet() {
if ! command -v curl &>/dev/null; then
apt-get update >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1
fi
msg_info "Checking Internet connectivity to GitHub"
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://github.com)
if [[ "$HTTP_CODE" -ge 200 && "$HTTP_CODE" -lt 400 ]]; then

View File

@@ -5,6 +5,11 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/eko/pihole-exporter/
if ! command -v curl &>/dev/null; then
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
apt-get update >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1
fi
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)

View File

@@ -5,6 +5,11 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/martabal/qbittorrent-exporter
if ! command -v curl &>/dev/null; then
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
apt-get update >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1
fi
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)

View File

@@ -42,7 +42,7 @@ whiptail --backtitle "Proxmox VE Helper Scripts" --title "Webmin Installer" --ye
msg_info "Installing Prerequisites"
apt update &>/dev/null
apt-get -y install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl unzip shared-mime-info &>/dev/null
apt-get -y install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl unzip shared-mime-info curl &>/dev/null
msg_ok "Installed Prerequisites"
LATEST=$(curl -fsSL https://api.github.com/repos/webmin/webmin/releases/latest | grep '"tag_name":' | cut -d'"' -f4)

View File

@@ -421,8 +421,6 @@ for container in $CHOICE; do
if [ $exit_code -eq 0 ]; then
msg_ok "Updated container $container"
elif [ $exit_code -eq 75 ]; then
echo -e "${YW}[WARN]${CL} Container $container skipped (requires interactive mode)"
elif [ "$BACKUP_CHOICE" == "yes" ]; then
msg_info "Restoring LXC from backup"
pct stop $container