Compare commits

..

2 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
3233b71a67 Update nginx-ui.sh 2026-02-09 10:13:26 +01:00
CanbiZ (MickLesk)
1094c0c57d fix(nginx-ui): remove admin user hack, use setup wizard instead
The previous install script started nginx-ui for 3 seconds, stopped it,
and ran reset-password to create an admin user. This caused:
- Race condition: the internal setup wizard could trigger during the brief
  start window, conflicting with the reset-password approach
- Admin users unable to login after the setup wizard fired
- Settings lockup due to overloaded app.ini with hardcoded nginx paths
  that conflict with UI-managed settings

Changes:
- Remove start/stop/reset-password hack from install script
- Simplify app.ini to match upstream defaults (minimal config)
- Let users complete the natural setup wizard on first visit
- Update JSON: remove default credentials, add setup wizard note
- Add setup wizard hint to CT script output

The setup wizard properly handles admin account creation and ACME email
configuration, which are both needed for full functionality.

Ref: ProxmoxVED#1408
2026-02-09 10:04:21 +01:00
52 changed files with 604 additions and 657 deletions

View File

@@ -407,38 +407,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### 🐞 Bug Fixes - #### 🐞 Bug Fixes
- Umlautadaptarr: use release appsettings.json instead of hardcoded copy [@MickLesk](https://github.com/MickLesk) ([#11725](https://github.com/community-scripts/ProxmoxVE/pull/11725))
- tracearr: prepare for next stable release [@durzo](https://github.com/durzo) ([#11673](https://github.com/community-scripts/ProxmoxVE/pull/11673)) - 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)) - 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
- Refactor: FileFlows [@tremor021](https://github.com/tremor021) ([#11108](https://github.com/community-scripts/ProxmoxVE/pull/11108))
- Refactor: wger [@MickLesk](https://github.com/MickLesk) ([#11722](https://github.com/community-scripts/ProxmoxVE/pull/11722))
- 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))
### 🧰 Tools
- #### 🐞 Bug Fixes
- addons: ensure curl is installed before use [@MickLesk](https://github.com/MickLesk) ([#11718](https://github.com/community-scripts/ProxmoxVE/pull/11718))
- Netbird (addon): add systemd ordering to start after Docker [@MickLesk](https://github.com/MickLesk) ([#11716](https://github.com/community-scripts/ProxmoxVE/pull/11716))
### ❔ Uncategorized
- Bichon: Update website [@tremor021](https://github.com/tremor021) ([#11711](https://github.com/community-scripts/ProxmoxVE/pull/11711))
## 2026-02-08 ## 2026-02-08
### 🚀 Updated Scripts ### 🚀 Updated Scripts

View File

@@ -20,9 +20,28 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info if ! apk -e info newt >/dev/null 2>&1; then
$STD apk -U upgrade apk add -q newt
msg_ok "Updated successfully!" 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 exit 0
} }

View File

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

View File

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

View File

@@ -24,31 +24,33 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if ! apk -e info newt >/dev/null 2>&1; then
CHOICE=$(msg_menu "Nextcloud Options" \ apk add -q newt
"1" "Update Alpine Packages" \ fi
"2" "Nextcloud Login Credentials" \ while true; do
"3" "Renew Self-signed Certificate") CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 3 \
"1" "Nextcloud Login Credentials" ON \
case $CHOICE in "2" "Renew Self-signed Certificate" OFF \
1) 3>&1 1>&2 2>&3)
msg_info "Updating Alpine Packages" exit_status=$?
$STD apk -U upgrade if [ $exit_status == 1 ]; then
msg_ok "Updated Alpine Packages" clear
msg_ok "Updated successfully!" exit-script
exit fi
;; header_info
2) case $CHOICE in
cat nextcloud.creds 1)
exit 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 2)
rc-service nginx restart 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
msg_ok "Renewed self-signed certificate" rc-service nginx restart
exit exit
;; ;;
esac esac
done
exit 0
} }
start start

View File

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

View File

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

View File

@@ -20,38 +20,45 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
CHOICE=$(msg_menu "Vaultwarden Update Options" \ if ! apk -e info newt >/dev/null 2>&1; then
"1" "Update Vaultwarden" \ apk add -q newt
"2" "Reset ADMIN_TOKEN") fi
while true; do
case $CHOICE in CHOICE=$(
1) whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 2 \
$STD apk -U upgrade "1" "Update Vaultwarden" \
rc-service vaultwarden restart -q "2" "Reset ADMIN_TOKEN" 3>&2 2>&1 1>&3
msg_ok "Updated successfully!" )
exit exit_status=$?
;; if [ $exit_status == 1 ]; then
2) clear
if [[ "${PHS_SILENT:-0}" == "1" ]]; then exit-script
msg_warn "Reset ADMIN_TOKEN requires interactive mode, skipping."
exit
fi fi
read -r -s -p "Setup your ADMIN_TOKEN (make it strong): " NEWTOKEN header_info
echo "" case $CHOICE in
if [[ -n "$NEWTOKEN" ]]; then 1)
if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi $STD apk -U upgrade
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 rc-service vaultwarden restart -q
msg_ok "Admin token updated" msg_ok "Updated successfully!"
fi exit
exit ;;
;; 2)
esac 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 start

View File

@@ -20,10 +20,28 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info if ! apk -e info newt >/dev/null 2>&1; then
$STD apk -U upgrade apk add -q newt
msg_ok "Updated successfully!" fi
exit 0 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 start

View File

@@ -20,10 +20,18 @@ color
catch_errors catch_errors
function update_script() { 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 header_info
$STD apk -U upgrade if [ "$UPD" == "1" ]; then
msg_ok "Updated successfully!" $STD apk -U upgrade
exit 0 msg_ok "Updated successfully!"
exit 0
fi
} }
start start

View File

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

View File

@@ -37,12 +37,17 @@ function update_script() {
msg_info "Stopped Service" msg_info "Stopped Service"
msg_info "Creating Backup" msg_info "Creating Backup"
ls /opt/*.tar.gz &>/dev/null && rm -f /opt/*.tar.gz
backup_filename="/opt/${APP}_backup_$(date +%F).tar.gz" backup_filename="/opt/${APP}_backup_$(date +%F).tar.gz"
tar -czf "$backup_filename" -C /opt/fileflows Data tar -czf "$backup_filename" -C /opt/fileflows Data
msg_ok "Backup Created" msg_ok "Backup Created"
fetch_and_deploy_from_url "https://fileflows.com/downloads/zip" "/opt/fileflows" msg_info "Updating $APP to latest version"
temp_file=$(mktemp)
curl -fsSL https://fileflows.com/downloads/zip -o "$temp_file"
$STD unzip -o -d /opt/fileflows "$temp_file"
rm -rf "$temp_file"
rm -rf "$backup_filename"
msg_ok "Updated $APP to latest version"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start fileflows systemctl start fileflows

View File

@@ -31,27 +31,18 @@ function update_script() {
APP_VERSION=$(grep -o '"version": *"[^"]*"' /opt/gitea-mirror/package.json | cut -d'"' -f4) APP_VERSION=$(grep -o '"version": *"[^"]*"' /opt/gitea-mirror/package.json | cut -d'"' -f4)
if [[ $APP_VERSION =~ ^2\. ]]; then if [[ $APP_VERSION =~ ^2\. ]]; then
if [[ "${PHS_SILENT:-0}" == "1" ]]; then if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ VERSION 2.x DETECTED" --yesno \
msg_warn "Version $APP_VERSION detected. Major version upgrade requires interactive confirmation, skipping." "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 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
exit 0 exit 0
fi 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." if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ FINAL CONFIRMATION" --yesno \
echo "" "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
read -r -p "Final confirmation - proceed? (y/N): " CONFIRM2 whiptail --backtitle "Gitea Mirror Update" --title "Update Cancelled" --msgbox "Update process cancelled. Please backup your configuration before proceeding." 8 60
if [[ ! "$CONFIRM2" =~ ^[Yy]$ ]]; then
msg_info "Update cancelled. Please backup your configuration before proceeding."
exit 0 exit 0
fi 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 rm -rf /opt/gitea-mirror
fi fi

View File

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

View File

@@ -33,8 +33,7 @@ function update_script() {
msg_ok "Stopped Service" msg_ok "Stopped Service"
PHP_VERSION="8.5" PHP_APACHE="YES" setup_php PHP_VERSION="8.5" PHP_APACHE="YES" setup_php
setup_composer
msg_info "Creating a backup" msg_info "Creating a backup"
mv /opt/koillection/ /opt/koillection-backup mv /opt/koillection/ /opt/koillection-backup
msg_ok "Backup created" msg_ok "Backup created"

View File

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

View File

@@ -24,9 +24,21 @@ function update_script() {
check_container_storage check_container_storage
check_container_resources 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 if check_for_gh_release "meilisearch-ui" "riccox/meilisearch-ui"; then
msg_info "Stopping Meilisearch-UI" msg_info "Stopping Meilisearch-UI"
systemctl stop meilisearch-ui systemctl stop meilisearch-ui
@@ -46,11 +58,10 @@ function update_script() {
msg_info "Starting Meilisearch-UI" msg_info "Starting Meilisearch-UI"
systemctl start meilisearch-ui systemctl start meilisearch-ui
msg_ok "Started Meilisearch-UI" msg_ok "Started Meilisearch-UI"
msg_ok "Updated successfully!"
fi fi
exit
fi fi
msg_ok "Updated successfully!"
exit
} }
start start

View File

@@ -28,6 +28,12 @@ function update_script() {
exit exit
fi fi
msg_error "This script is currently disabled due to an external issue with the OpenResty APT repository."
msg_error "The repository's GPG key uses SHA-1 signatures, which are no longer accepted by Debian as of February 1, 2026."
msg_error "The issue is tracked in openresty/openresty#1097"
msg_error "For more details, see: https://github.com/community-scripts/ProxmoxVE/issues/11406"
exit 1
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
msg_error "Wrong Debian version detected!" msg_error "Wrong Debian version detected!"
msg_error "Please create a snapshot first. You must upgrade your LXC to Debian Trixie before updating. Visit: https://github.com/community-scripts/ProxmoxVE/discussions/7489" msg_error "Please create a snapshot first. You must upgrade your LXC to Debian Trixie before updating. Visit: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
@@ -139,17 +145,15 @@ function update_script() {
"database": { "database": {
"engine": "knex-native", "engine": "knex-native",
"knex": { "knex": {
"client": "better-sqlite3", "client": "sqlite3",
"connection": { "connection": {
"filename": "/data/database.sqlite" "filename": "/data/database.sqlite"
}, }
"useNullAsDefault": true
} }
} }
} }
EOF EOF
fi fi
sed -i 's/"client": "sqlite3"/"client": "better-sqlite3"/' /app/config/production.json
cd /app cd /app
$STD yarn install --network-timeout 600000 $STD yarn install --network-timeout 600000
msg_ok "Initialized Backend" msg_ok "Initialized Backend"

View File

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

View File

@@ -20,21 +20,32 @@ color
catch_errors catch_errors
function update_script() { 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" header_info "$APP"
msg_info "Updating Alpine OS" case "$UPD" in
$STD apk -U upgrade "1")
msg_ok "System updated" msg_info "Updating Alpine OS"
$STD apk -U upgrade
msg_info "Pulling latest NPMplus container image" msg_ok "System updated"
cd /opt exit
$STD docker compose pull ;;
msg_info "Recreating container" "2")
$STD docker compose up -d msg_info "Updating NPMplus Container"
msg_ok "Updated NPMplus container" cd /opt
msg_info "Pulling latest container image"
msg_ok "Updated successfully!" $STD docker compose pull
exit msg_info "Recreating container"
$STD docker compose up -d
msg_ok "Updated successfully!"
exit
;;
esac
exit 0
} }
start start

View File

@@ -29,9 +29,10 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
UPD=$(msg_menu "Plex Update Options" \ 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" \ "1" "Update LXC" ON \
"2" "Install plexupdate") "2" "Install plexupdate" OFF \
3>&1 1>&2 2>&3)
if [ "$UPD" == "1" ]; then if [ "$UPD" == "1" ]; then
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
$STD apt update $STD apt update

View File

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

View File

@@ -33,9 +33,7 @@ function update_script() {
systemctl stop umlautadaptarr systemctl stop umlautadaptarr
msg_ok "Stopped Service" 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" 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" msg_info "Starting Service"
systemctl start umlautadaptarr systemctl start umlautadaptarr

View File

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

View File

@@ -7,9 +7,9 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="wger" APP="wger"
var_tags="${var_tags:-management;fitness}" var_tags="${var_tags:-management;fitness}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-1024}"
var_disk="${var_disk:-8}" var_disk="${var_disk:-6}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
@@ -23,44 +23,38 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /home/wger ]]; then
if [[ ! -d /opt/wger ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
if check_for_gh_release "wger" "wger-project/wger"; then if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop redis-server nginx celery celery-beat wger systemctl stop wger
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Data" msg_info "Updating $APP to v${RELEASE}"
cp -r /opt/wger/media /opt/wger_media_backup temp_file=$(mktemp)
cp /opt/wger/.env /opt/wger_env_backup curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o "$temp_file"
msg_ok "Backed up Data" tar xzf "$temp_file"
cp -rf wger-"$RELEASE"/* /home/wger/src
cd /home/wger/src
$STD pip install -r requirements_prod.txt --ignore-installed
$STD pip install -e .
$STD python3 manage.py migrate
$STD python3 manage.py collectstatic --no-input
$STD yarn install
$STD yarn build:css:sass
rm -rf "$temp_file"
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wger" "wger-project/wger" "tarball" msg_info "Starting Service"
systemctl start wger
msg_info "Restoring Data" msg_ok "Started Service"
cp -r /opt/wger_media_backup/. /opt/wger/media msg_ok "Updated successfully!"
cp /opt/wger_env_backup /opt/wger/.env else
rm -rf /opt/wger_media_backup /opt/wger_env_backup msg_ok "No update required. ${APP} is already at v${RELEASE}"
msg_ok "Restored Data"
msg_info "Updating wger"
cd /opt/wger
set -a && source /opt/wger/.env && set +a
export DJANGO_SETTINGS_MODULE=settings.main
$STD uv pip install .
$STD uv run python manage.py migrate
$STD uv run python manage.py collectstatic --no-input
msg_ok "Updated wger"
msg_info "Starting Services"
systemctl start redis-server nginx celery celery-beat wger
msg_ok "Started Services"
msg_ok "Updated Successfully"
fi fi
exit exit
} }
@@ -69,7 +63,7 @@ start
build_container build_container
description description
msg_ok "Completed Successfully!\n" msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"

View File

@@ -35,10 +35,6 @@
{ {
"text": "The Disk space initially allocated by the script is only a placeholder, as we can't know how much space you will ever need. You should increase it to match your workload.", "text": "The Disk space initially allocated by the script is only a placeholder, as we can't know how much space you will ever need. You should increase it to match your workload.",
"type": "info" "type": "info"
},
{
"text": "Please copy your `BICHON_ENCRYPT_PASSWORD` from `/opt/bichon/bichon.env` to a safe place.",
"type": "warning"
} }
] ]
} }

View File

@@ -1,5 +1,5 @@
{ {
"generated": "2026-02-09T12:16:55Z", "generated": "2026-02-09T06:27:10Z",
"versions": [ "versions": [
{ {
"slug": "2fauth", "slug": "2fauth",
@@ -109,9 +109,9 @@
{ {
"slug": "bentopdf", "slug": "bentopdf",
"repo": "alam00000/bentopdf", "repo": "alam00000/bentopdf",
"version": "v2.2.0", "version": "v2.1.0",
"pinned": false, "pinned": false,
"date": "2026-02-09T07:07:40Z" "date": "2026-02-02T14:30:55Z"
}, },
{ {
"slug": "beszel", "slug": "beszel",
@@ -284,9 +284,9 @@
{ {
"slug": "domain-monitor", "slug": "domain-monitor",
"repo": "Hosteroid/domain-monitor", "repo": "Hosteroid/domain-monitor",
"version": "v1.1.2", "version": "v1.1.1",
"pinned": false, "pinned": false,
"date": "2026-02-09T06:29:34Z" "date": "2025-11-18T11:32:30Z"
}, },
{ {
"slug": "donetick", "slug": "donetick",
@@ -1292,9 +1292,9 @@
{ {
"slug": "snowshare", "slug": "snowshare",
"repo": "TuroYT/snowshare", "repo": "TuroYT/snowshare",
"version": "v1.3.3", "version": "v1.2.12",
"pinned": false, "pinned": false,
"date": "2026-02-09T10:52:12Z" "date": "2026-01-30T13:35:56Z"
}, },
{ {
"slug": "sonarr", "slug": "sonarr",
@@ -1523,9 +1523,9 @@
{ {
"slug": "vikunja", "slug": "vikunja",
"repo": "go-vikunja/vikunja", "repo": "go-vikunja/vikunja",
"version": "v1.1.0", "version": "v1.0.0",
"pinned": false, "pinned": false,
"date": "2026-02-09T10:34:29Z" "date": "2026-01-28T11:12:59Z"
}, },
{ {
"slug": "wallabag", "slug": "wallabag",

View File

@@ -30,14 +30,10 @@
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": "admin@example.com",
"password": null "password": "changeme"
}, },
"notes": [ "notes": [
{
"text": "On first launch, a setup wizard will guide you through creating an admin account. There are no default credentials.",
"type": "info"
},
{ {
"text": "You can install the specific one certbot you prefer, or you can Running /app/scripts/install-certbot-plugins within the Nginx Proxy Manager (NPM) LXC shell will install many common plugins. Important: This script does not install all Certbot plugins, as some require additional, external system dependencies (like specific packages for certain DNS providers). These external dependencies must be manually installed within the LXC container before you can successfully install and use the corresponding Certbot plugin. Consult the plugin's documentation for required packages.", "text": "You can install the specific one certbot you prefer, or you can Running /app/scripts/install-certbot-plugins within the Nginx Proxy Manager (NPM) LXC shell will install many common plugins. Important: This script does not install all Certbot plugins, as some require additional, external system dependencies (like specific packages for certain DNS providers). These external dependencies must be manually installed within the LXC container before you can successfully install and use the corresponding Certbot plugin. Consult the plugin's documentation for required packages.",
"type": "info" "type": "info"

View File

@@ -19,9 +19,9 @@
"type": "default", "type": "default",
"script": "ct/wger.sh", "script": "ct/wger.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 1,
"ram": 2048, "ram": 1024,
"hdd": 8, "hdd": 6,
"os": "debian", "os": "debian",
"version": "13" "version": "13"
} }
@@ -33,7 +33,7 @@
}, },
"notes": [ "notes": [
{ {
"text": "This LXC also runs Celery and Redis to synchronize workouts and ingredients", "text": "Enable proxy support by uncommenting this line in `/home/wger/src/settings.py` and pointing it to your URL: `# CSRF_TRUSTED_ORIGINS = ['http://127.0.0.1', 'https://my.domain.example.com']`, then restart the service `systemctl restart wger`.",
"type": "info" "type": "info"
} }
] ]

View File

@@ -15,30 +15,31 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt install -y \ $STD apt-get install -y \
ffmpeg \ ffmpeg \
jq \
imagemagick imagemagick
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
setup_hwaccel setup_hwaccel
msg_info "Installing ASP.NET Core Runtime" msg_info "Installing ASP.NET Core Runtime"
setup_deb822_repo \ curl -fsSL https://packages.microsoft.com/config/debian/13/packages-microsoft-prod.deb -o packages-microsoft-prod.deb
"microsoft" \ $STD dpkg -i packages-microsoft-prod.deb
"https://packages.microsoft.com/keys/microsoft-2025.asc" \ rm -rf packages-microsoft-prod.deb
"https://packages.microsoft.com/debian/13/prod/" \ $STD apt-get update
"trixie" $STD apt-get install -y aspnetcore-runtime-8.0
$STD apt install -y aspnetcore-runtime-8.0
msg_ok "Installed ASP.NET Core Runtime" msg_ok "Installed ASP.NET Core Runtime"
fetch_and_deploy_from_url "https://fileflows.com/downloads/zip" "/opt/fileflows"
msg_info "Setup FileFlows" msg_info "Setup FileFlows"
$STD ln -svf /usr/bin/ffmpeg /usr/local/bin/ffmpeg $STD ln -svf /usr/bin/ffmpeg /usr/local/bin/ffmpeg
$STD ln -svf /usr/bin/ffprobe /usr/local/bin/ffprobe $STD ln -svf /usr/bin/ffprobe /usr/local/bin/ffprobe
cd /opt/fileflows/Server temp_file=$(mktemp)
dotnet FileFlows.Server.dll --systemd install --root true curl -fsSL https://fileflows.com/downloads/zip -o "$temp_file"
$STD unzip -d /opt/fileflows "$temp_file"
$STD bash -c "cd /opt/fileflows/Server && dotnet FileFlows.Server.dll --systemd install --root true"
systemctl enable -q --now fileflows systemctl enable -q --now fileflows
rm -f "$temp_file"
msg_ok "Setup FileFlows" msg_ok "Setup FileFlows"
motd_ssh motd_ssh

View File

@@ -37,6 +37,7 @@ PageSize = 10
Host = 0.0.0.0 Host = 0.0.0.0
Port = 9000 Port = 9000
RunMode = release RunMode = release
JwtSecret = $(openssl rand -hex 32)
[cert] [cert]
HTTPChallengePort = 9180 HTTPChallengePort = 9180

View File

@@ -130,11 +130,10 @@ if [ ! -f /app/config/production.json ]; then
"database": { "database": {
"engine": "knex-native", "engine": "knex-native",
"knex": { "knex": {
"client": "better-sqlite3", "client": "sqlite3",
"connection": { "connection": {
"filename": "/data/database.sqlite" "filename": "/data/database.sqlite"
}, }
"useNullAsDefault": true
} }
} }
} }

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" 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" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/umlautadaptarr.service cat <<EOF >/etc/systemd/system/umlautadaptarr.service
[Unit] [Unit]

View File

@@ -15,167 +15,92 @@ update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt install -y \ $STD apt install -y \
build-essential \ git \
nginx \ apache2 \
redis-server \ libapache2-mod-wsgi-py3
libpq-dev
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="sass" setup_nodejs msg_info "Installing Python"
setup_uv $STD apt install -y python3-pip
PG_VERSION="16" setup_postgresql rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
PG_DB_NAME="wger" PG_DB_USER="wger" setup_postgresql_db msg_ok "Installed Python"
fetch_and_deploy_gh_release "wger" "wger-project/wger" "tarball"
NODE_VERSION="22" NODE_MODULE="yarn,sass" setup_nodejs
msg_info "Setting up wger" msg_info "Setting up wger"
mkdir -p /opt/wger/{static,media} $STD adduser wger --disabled-password --gecos ""
chmod o+w /opt/wger/media mkdir /home/wger/db
cd /opt/wger touch /home/wger/db/database.sqlite
$STD corepack enable chown :www-data -R /home/wger/db
$STD npm install chmod g+w /home/wger/db /home/wger/db/database.sqlite
$STD npm run build:css:sass mkdir /home/wger/{static,media}
$STD uv venv chmod o+w /home/wger/media
$STD uv pip install . --group docker temp_dir=$(mktemp -d)
SECRET_KEY=$(openssl rand -base64 40) cd "$temp_dir"
cat <<EOF >/opt/wger/.env RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
DJANGO_SETTINGS_MODULE=settings.main curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o "$RELEASE.tar.gz"
PYTHONPATH=/opt/wger tar xzf "$RELEASE".tar.gz
mv wger-"$RELEASE" /home/wger/src
cd /home/wger/src
$STD pip install -r requirements_prod.txt --ignore-installed
$STD pip install -e .
$STD wger create-settings --database-path /home/wger/db/database.sqlite
sed -i "s#home/wger/src/media#home/wger/media#g" /home/wger/src/settings.py
sed -i "/MEDIA_ROOT = '\/home\/wger\/media'/a STATIC_ROOT = '/home/wger/static'" /home/wger/src/settings.py
$STD wger bootstrap
$STD python3 manage.py collectstatic
rm -rf "$temp_dir"
echo "${RELEASE}" >/opt/wger_version.txt
msg_ok "Finished setting up wger"
DJANGO_DB_ENGINE=django.db.backends.postgresql msg_info "Creating Service"
DJANGO_DB_DATABASE=${PG_DB_NAME} cat <<EOF >/etc/apache2/sites-available/wger.conf
DJANGO_DB_USER=${PG_DB_USER} <Directory /home/wger/src>
DJANGO_DB_PASSWORD=${PG_DB_PASS} <Files wsgi.py>
DJANGO_DB_HOST=localhost Require all granted
DJANGO_DB_PORT=5432 </Files>
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME} </Directory>
DJANGO_MEDIA_ROOT=/opt/wger/media <VirtualHost *:80>
DJANGO_STATIC_ROOT=/opt/wger/static WSGIApplicationGroup %{GLOBAL}
DJANGO_STATIC_URL=/static/ WSGIDaemonProcess wger python-path=/home/wger/src python-home=/home/wger
WSGIProcessGroup wger
WSGIScriptAlias / /home/wger/src/wger/wsgi.py
WSGIPassAuthorization On
ALLOWED_HOSTS=${LOCAL_IP},localhost,127.0.0.1 Alias /static/ /home/wger/static/
CSRF_TRUSTED_ORIGINS=http://${LOCAL_IP}:3000 <Directory /home/wger/static>
Require all granted
</Directory>
USE_X_FORWARDED_HOST=True Alias /media/ /home/wger/media/
SECURE_PROXY_SSL_HEADER=HTTP_X_FORWARDED_PROTO,http <Directory /home/wger/media>
Require all granted
</Directory>
DJANGO_CACHE_BACKEND=django_redis.cache.RedisCache ErrorLog /var/log/apache2/wger-error.log
DJANGO_CACHE_LOCATION=redis://127.0.0.1:6379/1 CustomLog /var/log/apache2/wger-access.log combined
DJANGO_CACHE_TIMEOUT=300 </VirtualHost>
DJANGO_CACHE_CLIENT_CLASS=django_redis.client.DefaultClient
AXES_CACHE_ALIAS=default
USE_CELERY=True
CELERY_BROKER=redis://127.0.0.1:6379/2
CELERY_BACKEND=redis://127.0.0.1:6379/2
SITE_URL=http://${LOCAL_IP}:3000
SECRET_KEY=${SECRET_KEY}
EOF EOF
set -a && source /opt/wger/.env && set +a $STD a2dissite 000-default.conf
$STD uv run wger bootstrap $STD a2ensite wger
$STD uv run python manage.py collectstatic --no-input systemctl restart apache2
cat <<EOF | uv run python manage.py shell
from django.contrib.auth import get_user_model
User = get_user_model()
user, created = User.objects.get_or_create(
username="admin",
defaults={"email": "admin@localhost"},
)
if created:
user.set_password("${PG_DB_PASS}")
user.is_superuser = True
user.is_staff = True
user.save()
EOF
msg_ok "Set up wger"
msg_info "Creating Config and Services"
cat <<EOF >/etc/systemd/system/wger.service cat <<EOF >/etc/systemd/system/wger.service
[Unit] [Unit]
Description=wger Gunicorn Description=wger Service
After=network.target After=network.target
[Service] [Service]
Type=simple
User=root User=root
WorkingDirectory=/opt/wger ExecStart=/usr/local/bin/wger start -a 0.0.0.0 -p 3000
EnvironmentFile=/opt/wger/.env
ExecStart=/opt/wger/.venv/bin/gunicorn \
--bind 127.0.0.1:8000 \
--workers 3 \
--threads 2 \
--timeout 120 \
wger.wsgi:application
Restart=always Restart=always
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
cat <<EOF >/etc/systemd/system/celery.service systemctl enable -q --now wger
[Unit] msg_ok "Created Service"
Description=wger Celery Worker
After=network.target redis-server.service
Requires=redis-server.service
[Service]
WorkingDirectory=/opt/wger
EnvironmentFile=/opt/wger/.env
ExecStart=/opt/wger/.venv/bin/celery -A wger worker -l info
Restart=always
[Install]
WantedBy=multi-user.target
EOF
mkdir -p /var/lib/wger/celery
chmod 700 /var/lib/wger/celery
cat <<EOF >/etc/systemd/system/celery-beat.service
[Unit]
Description=wger Celery Beat
After=network.target redis-server.service
Requires=redis-server.service
[Service]
WorkingDirectory=/opt/wger
EnvironmentFile=/opt/wger/.env
ExecStart=/opt/wger/.venv/bin/celery -A wger beat -l info \
--schedule /var/lib/wger/celery/celerybeat-schedule
Restart=always
[Install]
WantedBy=multi-user.target
EOF
cat <<'EOF' >/etc/nginx/sites-available/wger
server {
listen 3000;
server_name _;
client_max_body_size 20M;
location /static/ {
alias /opt/wger/static/;
expires 30d;
}
location /media/ {
alias /opt/wger/media/;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
}
EOF
$STD rm -f /etc/nginx/sites-enabled/default
$STD ln -sf /etc/nginx/sites-available/wger /etc/nginx/sites-enabled/wger
systemctl enable -q --now redis-server nginx wger celery celery-beat
systemctl restart nginx
msg_ok "Created Config and Services"
motd_ssh motd_ssh
customize customize

View File

@@ -3318,68 +3318,6 @@ configure_ssh_settings() {
fi 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() # start()
# #

View File

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

View File

@@ -79,24 +79,11 @@ EOF
header_info header_info
msg "Installing NetBird..." msg "Installing NetBird..."
pct exec "$CTID" -- bash -c ' 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 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 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 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
apt-get update &>/dev/null apt-get update &>/dev/null
apt-get install -y netbird-ui &>/dev/null apt-get install -y netbird-ui &>/dev/null
if systemctl list-unit-files docker.service &>/dev/null; then
mkdir -p /etc/systemd/system/netbird.service.d
cat <<OVERRIDE >/etc/systemd/system/netbird.service.d/after-docker.conf
[Unit]
After=docker.service
Wants=docker.service
OVERRIDE
systemctl daemon-reload
fi
' '
msg "\e[1;32m ✔ Installed NetBird.\e[0m" msg "\e[1;32m ✔ Installed NetBird.\e[0m"
sleep 2 sleep 2

View File

@@ -89,12 +89,6 @@ if ! dig +short pkgs.tailscale.com | grep -qvE "^127\.|^0\.0\.0\.0$"; then
echo "nameserver 1.1.1.1" >"$ORIG_RESOLV" echo "nameserver 1.1.1.1" >"$ORIG_RESOLV"
fi 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 \ curl -fsSL https://pkgs.tailscale.com/stable/${ID}/${VER}.noarmor.gpg \
| tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null | tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null

View File

@@ -5,11 +5,6 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/bakito/adguardhome-sync # 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/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/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)

View File

@@ -5,11 +5,6 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/9001/copyparty # 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/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/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)

View File

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

View File

@@ -88,7 +88,6 @@ if [ -f "$INSTALL_PATH" ]; then
read -r -p "Would you like to update ${APP}? (y/N): " update_prompt read -r -p "Would you like to update ${APP}? (y/N): " update_prompt
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Updating ${APP}" 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 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" chmod +x "$INSTALL_PATH"
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"

View File

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

View File

@@ -5,11 +5,6 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/alangrainger/immich-public-proxy # 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/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/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)

View File

@@ -5,11 +5,6 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/CyferShepard/Jellystat # 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/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/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)

View File

@@ -5,11 +5,6 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/xperimental/nextcloud-exporter # 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/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/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)

View File

@@ -51,10 +51,6 @@ function msg_ok() {
} }
msg_info "Installing ${APP}" 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") 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 dpkg -i OliveTin_linux_amd64.deb &>/dev/null
systemctl enable --now OliveTin &>/dev/null systemctl enable --now OliveTin &>/dev/null

View File

@@ -57,10 +57,6 @@ function msg_ok() { echo -e "${CM} ${GN}${1}${CL}"; }
function msg_error() { echo -e "${CROSS} ${RD}${1}${CL}"; } function msg_error() { echo -e "${CROSS} ${RD}${1}${CL}"; }
function check_internet() { 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" msg_info "Checking Internet connectivity to GitHub"
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://github.com) HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://github.com)
if [[ "$HTTP_CODE" -ge 200 && "$HTTP_CODE" -lt 400 ]]; then if [[ "$HTTP_CODE" -ge 200 && "$HTTP_CODE" -lt 400 ]]; then

View File

@@ -5,11 +5,6 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/eko/pihole-exporter/ # 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/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/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)

View File

@@ -5,11 +5,6 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/martabal/qbittorrent-exporter # 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/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/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.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" msg_info "Installing Prerequisites"
apt update &>/dev/null apt update &>/dev/null
apt-get -y install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl unzip shared-mime-info curl &>/dev/null apt-get -y install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl unzip shared-mime-info &>/dev/null
msg_ok "Installed Prerequisites" msg_ok "Installed Prerequisites"
LATEST=$(curl -fsSL https://api.github.com/repos/webmin/webmin/releases/latest | grep '"tag_name":' | cut -d'"' -f4) 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 if [ $exit_code -eq 0 ]; then
msg_ok "Updated container $container" 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 elif [ "$BACKUP_CHOICE" == "yes" ]; then
msg_info "Restoring LXC from backup" msg_info "Restoring LXC from backup"
pct stop $container pct stop $container