mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-02-09 23:03:26 +01:00
Compare commits
8 Commits
fix/addon-
...
fix/umlaut
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
54cab8993e | ||
|
|
59e27bfc8a | ||
|
|
43d76b6ea7 | ||
|
|
7715a02f05 | ||
|
|
c29dfa7a29 | ||
|
|
1439d98ec4 | ||
|
|
44ad9370b6 | ||
|
|
4e96bb664f |
11
CHANGELOG.md
11
CHANGELOG.md
@@ -410,10 +410,21 @@ 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))
|
||||
|
||||
@@ -20,28 +20,9 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
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
|
||||
header_info
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
@@ -20,43 +20,32 @@ 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)
|
||||
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
|
||||
|
||||
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
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
@@ -20,43 +20,32 @@ 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)
|
||||
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
|
||||
|
||||
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
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
@@ -24,33 +24,31 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
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
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -20,47 +20,36 @@ 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)
|
||||
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
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -20,48 +20,37 @@ 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)
|
||||
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
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -20,45 +20,38 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
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
|
||||
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
|
||||
fi
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
$STD apk -U upgrade
|
||||
rc-service vaultwarden restart -q
|
||||
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
|
||||
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
|
||||
clear
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
rc-service vaultwarden restart -q
|
||||
msg_ok "Admin token updated"
|
||||
fi
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -20,28 +20,10 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
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
|
||||
header_info
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit 0
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
14
ct/alpine.sh
14
ct/alpine.sh
@@ -20,18 +20,10 @@ 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
|
||||
if [ "$UPD" == "1" ]; then
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit 0
|
||||
fi
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit 0
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -23,10 +23,9 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
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)
|
||||
UPD=$(msg_menu "Cronicle Update Options" \
|
||||
"1" "Update ${APP}" \
|
||||
"2" "Install ${APP} Worker")
|
||||
|
||||
if [ "$UPD" == "1" ]; then
|
||||
if [[ ! -d /opt/cronicle ]]; then
|
||||
|
||||
@@ -31,18 +31,27 @@ function update_script() {
|
||||
|
||||
APP_VERSION=$(grep -o '"version": *"[^"]*"' /opt/gitea-mirror/package.json | cut -d'"' -f4)
|
||||
if [[ $APP_VERSION =~ ^2\. ]]; 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
|
||||
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
|
||||
exit 0
|
||||
fi
|
||||
|
||||
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
|
||||
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."
|
||||
exit 0
|
||||
fi
|
||||
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
|
||||
msg_info "Proceeding with version $APP_VERSION update. All configuration will be cleared as warned."
|
||||
rm -rf /opt/gitea-mirror
|
||||
fi
|
||||
|
||||
|
||||
@@ -27,12 +27,11 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
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)
|
||||
UPD=$(msg_menu "Home Assistant Update Options" \
|
||||
"1" "Update ALL Containers" \
|
||||
"2" "Remove ALL Unused Images" \
|
||||
"3" "Install HACS" \
|
||||
"4" "Install FileBrowser")
|
||||
|
||||
if [ "$UPD" == "1" ]; then
|
||||
msg_info "Updating All Containers"
|
||||
|
||||
23
ct/loki.sh
23
ct/loki.sh
@@ -29,21 +29,13 @@ function update_script() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
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)
|
||||
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)
|
||||
msg_info "Stopping Loki"
|
||||
systemctl stop loki
|
||||
if systemctl is-active --quiet promtail 2>/dev/null || dpkg -s promtail >/dev/null 2>&1; then
|
||||
@@ -85,7 +77,6 @@ function update_script() {
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
@@ -24,21 +24,9 @@ function update_script() {
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
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)
|
||||
setup_meilisearch
|
||||
|
||||
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 [[ -d /opt/meilisearch-ui ]]; then
|
||||
if check_for_gh_release "meilisearch-ui" "riccox/meilisearch-ui"; then
|
||||
msg_info "Stopping Meilisearch-UI"
|
||||
systemctl stop meilisearch-ui
|
||||
@@ -58,10 +46,11 @@ 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
|
||||
|
||||
@@ -27,10 +27,9 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
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)
|
||||
UPD=$(msg_menu "Node-Red Update Options" \
|
||||
"1" "Update ${APP}" \
|
||||
"2" "Install Themes")
|
||||
if [ "$UPD" == "1" ]; then
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
@@ -49,32 +48,31 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
if [ "$UPD" == "2" ]; then
|
||||
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)
|
||||
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")
|
||||
header_info
|
||||
msg_info "Installing ${THEME} Theme"
|
||||
cd /root/.node-red
|
||||
|
||||
@@ -20,32 +20,21 @@ 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"
|
||||
|
||||
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
|
||||
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
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -29,10 +29,9 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
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)
|
||||
UPD=$(msg_menu "Plex Update Options" \
|
||||
"1" "Update LXC" \
|
||||
"2" "Install plexupdate")
|
||||
if [ "$UPD" == "1" ]; then
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt update
|
||||
|
||||
@@ -27,12 +27,11 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
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)
|
||||
UPD=$(msg_menu "Home Assistant Update Options" \
|
||||
"1" "Update system and containers" \
|
||||
"2" "Install HACS" \
|
||||
"3" "Install FileBrowser" \
|
||||
"4" "Remove ALL Unused Images")
|
||||
|
||||
if [ "$UPD" == "1" ]; then
|
||||
msg_info "Updating ${APP} LXC"
|
||||
|
||||
@@ -33,7 +33,9 @@ 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
|
||||
|
||||
@@ -31,11 +31,9 @@ function update_script() {
|
||||
VAULT=$(get_latest_github_release "dani-garcia/vaultwarden")
|
||||
WVRELEASE=$(get_latest_github_release "dani-garcia/bw_web_builds")
|
||||
|
||||
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)
|
||||
UPD=$(msg_menu "Vaultwarden Update Options" \
|
||||
"1" "Update VaultWarden + Web-Vault" \
|
||||
"2" "Set Admin Token")
|
||||
|
||||
if [ "$UPD" == "1" ]; then
|
||||
if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then
|
||||
@@ -59,14 +57,10 @@ 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
|
||||
@@ -84,16 +78,22 @@ 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" == "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
|
||||
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
|
||||
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
|
||||
|
||||
@@ -28,10 +28,14 @@
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "admin",
|
||||
"username": null,
|
||||
"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"
|
||||
@@ -39,10 +43,6 @@
|
||||
{
|
||||
"text": "SSL certificates can be managed automatically with Let's Encrypt integration.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Initial Login data: `cat ~/nginx-ui.creds`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -30,29 +30,19 @@ 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]
|
||||
Email =
|
||||
CADir =
|
||||
RenewalInterval = 7
|
||||
RecursiveNameservers =
|
||||
HTTPChallengePort = 9180
|
||||
|
||||
[terminal]
|
||||
StartCmd = login
|
||||
EOF
|
||||
msg_ok "Configured Nginx UI"
|
||||
|
||||
@@ -78,17 +68,6 @@ 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
|
||||
|
||||
@@ -27,68 +27,6 @@ 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]
|
||||
|
||||
@@ -3318,6 +3318,68 @@ 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()
|
||||
#
|
||||
|
||||
@@ -3595,6 +3595,7 @@ _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"
|
||||
|
||||
@@ -3621,6 +3622,7 @@ _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
|
||||
|
||||
@@ -421,6 +421,8 @@ 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
|
||||
|
||||
Reference in New Issue
Block a user