Compare commits

..

14 Commits

Author SHA1 Message Date
github-actions[bot]
a8923beaa1 Update CHANGELOG.md 2026-04-23 13:52:31 +00:00
CanbiZ (MickLesk)
145602a8c3 mealie: start.sh missing after failed update (#13958)
* fix(mealie): restore start.sh before build steps to prevent broken container

When CLEAN_INSTALL=1 wipes /opt/mealie/* and a subsequent build step fails
(uv sync, yarn install, yarn generate - e.g. due to OOM or network error),
start.sh was never written because it was created at the very end of the
update function. On the next reboot systemd could not find the ExecStart
binary and the container was left in a permanently broken state.

Fix: move mealie.env restore and start.sh creation to immediately after
fetch_and_deploy_gh_release, before any build steps that can fail. This
ensures the service entry point is always present even if the build is
interrupted, allowing uv to self-heal on next startup.

Fixes: #13945

* fix(mealie): backup and restore start.sh alongside mealie.env

Instead of recreating start.sh from a heredoc after CLEAN_INSTALL wipes
/opt/mealie/*, simply back it up before the wipe and restore it together
with mealie.env. Simpler and avoids any drift between the hardcoded
heredoc and what was actually installed.

* fix(mealie): fallback heredoc if start.sh missing before backup
2026-04-23 15:52:12 +02:00
community-scripts-pr-app[bot]
687e778460 Update CHANGELOG.md (#13968)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 13:51:25 +00:00
CanbiZ (MickLesk)
1476849f3c twingate-connector: perform real apt upgrade during update flow (#13959)
* fix(twingate-connector): perform real apt upgrade during update flow

The update path used ensure_dependencies, which only installs missing
packages and does not upgrade already installed ones. As a result, users
could see 'Updated successfully' even when a newer twingate-connector
version was available.

Switch update_script to a real package update flow:
- ensure apt is healthy
- refresh apt metadata
- install/upgrade twingate-connector via retry helper
- restart service

This aligns behavior with Twingate's documented upgrade process.

* Update twingate-connector.sh
2026-04-23 15:51:01 +02:00
community-scripts-pr-app[bot]
a2bf10d2f2 Update CHANGELOG.md (#13967)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 13:50:52 +00:00
Slaviša Arežina
9c44055709 Updated to match our starndard (#13956) 2026-04-23 15:50:26 +02:00
community-scripts-pr-app[bot]
7141f89676 Update CHANGELOG.md (#13966)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 13:50:24 +00:00
CanbiZ (MickLesk)
9f50496f8b fix(tools.func): upgrade Node.js minor/patch on same major version (#13957)
In setup_nodejs() Scenario 1 (major version already matches), only npm
was refreshed - apt never upgraded the nodejs package itself. This left
existing LXCs stuck on older minor releases (e.g. 22.13.1) even though
NodeSource ships newer ones (e.g. 22.19+).

Fix: add pt-get install -y --only-upgrade nodejs before the npm pin
so the latest minor/patch from the already-configured NodeSource repo is
always installed.

Fixes: seerr update failing with ERR_PNPM_UNSUPPORTED_ENGINE because
seerr 3.2.0 requires Node >=22.19.0 but installed was v22.13.1 (#13955)
2026-04-23 15:49:54 +02:00
community-scripts-pr-app[bot]
01bbacec22 Update CHANGELOG.md (#13965)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 13:31:16 +00:00
community-scripts-pr-app[bot]
116253df1a Update CHANGELOG.md (#13964)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 13:30:51 +00:00
CanbiZ (MickLesk)
8706cd3783 Revert "core: Add PHS_VERBOSE env var to skip verbose mode prompts (#13797)" (#13963)
This reverts commit 518b6778e2.
2026-04-23 15:30:38 +02:00
CanbiZ (MickLesk)
874d8f300c Revert "Prefer silent mode on PHS env conflict (#13951)" (#13962)
This reverts commit a37b36520c.
2026-04-23 15:30:19 +02:00
community-scripts-pr-app[bot]
aa54abcf50 Update CHANGELOG.md (#13953)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 07:34:09 +00:00
CanbiZ (MickLesk)
a37b36520c Prefer silent mode on PHS env conflict (#13951)
When PHS_SILENT and PHS_VERBOSE are both set, stop falling back to interactive mode. Changes prefer silent mode to keep automation safe and avoid blocking unattended/non-TTY updates. Only show a whiptail warning when both stdin/stdout are TTYs and whiptail is present, and ignore any whiptail errors. Added a brief comment and adjusted the fallback message accordingly.
2026-04-23 09:33:40 +02:00
16 changed files with 80 additions and 80 deletions

View File

@@ -445,6 +445,29 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-04-23
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- mealie: start.sh missing after failed update [@MickLesk](https://github.com/MickLesk) ([#13958](https://github.com/community-scripts/ProxmoxVE/pull/13958))
- twingate-connector: perform real apt upgrade during update flow [@MickLesk](https://github.com/MickLesk) ([#13959](https://github.com/community-scripts/ProxmoxVE/pull/13959))
- #### 🔧 Refactor
- Update scripts to match standard [@tremor021](https://github.com/tremor021) ([#13956](https://github.com/community-scripts/ProxmoxVE/pull/13956))
### 💾 Core
- Revert "core: Add PHS_VERBOSE env var to skip verbose mode prompts" [@MickLesk](https://github.com/MickLesk) ([#13963](https://github.com/community-scripts/ProxmoxVE/pull/13963))
- Revert "core: hotfix - prefer silent mode on PHS env conflict" [@MickLesk](https://github.com/MickLesk) ([#13962](https://github.com/community-scripts/ProxmoxVE/pull/13962))
- #### 🐞 Bug Fixes
- tools.func: upgrade Node.js minor/patch on same major version [@MickLesk](https://github.com/MickLesk) ([#13957](https://github.com/community-scripts/ProxmoxVE/pull/13957))
- core: hotfix - prefer silent mode on PHS env conflict [@MickLesk](https://github.com/MickLesk) ([#13951](https://github.com/community-scripts/ProxmoxVE/pull/13951))
## 2026-04-22
### 🆕 New Scripts

View File

@@ -39,7 +39,7 @@ function update_script() {
[ -f /opt/checkmate/client/.env.local ] && cp /opt/checkmate/client/.env.local /opt/checkmate_client.env.local.bak
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" "tarball"
msg_info "Updating Checkmate Server"
cd /opt/checkmate/server

View File

@@ -38,7 +38,7 @@ function update_script() {
cp -r /opt/flatnotes/data /opt/flatnotes_data_backup
msg_ok "Backed up Configuration and Data"
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes"
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes" "tarball"
msg_info "Updating Flatnotes"
cd /opt/flatnotes/client

View File

@@ -39,7 +39,7 @@ function update_script() {
cp /opt/linkding/.env /opt/linkding_env_backup
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" "tarball"
msg_info "Restoring Data"
cp -r /opt/linkding_data_backup/. /opt/linkding/data

View File

@@ -38,10 +38,27 @@ function update_script() {
msg_info "Backing up Configuration"
cp -f /opt/mealie/mealie.env /opt/mealie.env
[[ -f /opt/mealie/start.sh ]] && cp -f /opt/mealie/start.sh /opt/mealie.start.sh
msg_ok "Backup completed"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball"
msg_info "Restoring Configuration"
mv -f /opt/mealie.env /opt/mealie/mealie.env
if [[ -f /opt/mealie.start.sh ]]; then
mv -f /opt/mealie.start.sh /opt/mealie/start.sh
else
cat <<'STARTEOF' >/opt/mealie/start.sh
#!/bin/bash
set -a
source /opt/mealie/mealie.env
set +a
exec uv run mealie
STARTEOF
fi
chmod +x /opt/mealie/start.sh
msg_ok "Configuration restored"
msg_info "Installing Python Dependencies with uv"
cd /opt/mealie
$STD uv sync --frozen --extra pgsql
@@ -70,18 +87,6 @@ function update_script() {
$STD uv run python -m nltk.downloader -d /nltk_data averaged_perceptron_tagger_eng
msg_ok "Updated NLTK Data"
msg_info "Restoring Configuration"
mv -f /opt/mealie.env /opt/mealie/mealie.env
cat <<'STARTEOF' >/opt/mealie/start.sh
#!/bin/bash
set -a
source /opt/mealie/mealie.env
set +a
exec uv run mealie
STARTEOF
chmod +x /opt/mealie/start.sh
msg_ok "Configuration restored"
msg_info "Starting Service"
systemctl start mealie
msg_ok "Started Service"

View File

@@ -34,7 +34,7 @@ function update_script() {
systemctl stop nodecast-tv
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv"
fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv" "tarball"
msg_info "Updating Modules"
cd /opt/nodecast-tv

View File

@@ -145,7 +145,7 @@ EOF
cp -r /opt/termix/uploads /opt/termix_uploads_backup
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" "tarball"
msg_info "Recreating Directories"
mkdir -p /opt/termix/html \

View File

@@ -29,8 +29,9 @@ function update_script() {
exit
fi
msg_info "Updating ${APP}"
ensure_dependencies twingate-connector
msg_info "Updating Twingate Connector"
$STD apt update
$STD apt install -y --only-upgrade twingate-connector
$STD systemctl restart twingate-connector
msg_ok "Updated successfully!"
exit

View File

@@ -22,7 +22,7 @@ msg_ok "Installed Dependencies"
MONGO_VERSION="8.0" setup_mongodb
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate"
fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" "tarball"
msg_info "Configuring Checkmate"
JWT_SECRET="$(openssl rand -hex 32)"

View File

@@ -27,7 +27,7 @@ msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs
setup_uv
fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding"
fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" "tarball"
msg_info "Building Frontend"
cd /opt/linkding

View File

@@ -13,7 +13,7 @@ setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv"
fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv" "tarball"
NODE_VERSION="20" setup_nodejs
msg_info "Installing Dependencies"

View File

@@ -120,7 +120,7 @@ fetch_and_deploy_gh_release "RAHasher" "RetroAchievements/RALibretro" "prebuild"
cp /opt/RALibretro/RAHasher /usr/bin/RAHasher
chmod +x /usr/bin/RAHasher
fetch_and_deploy_gh_release "romm" "rommapp/romm"
fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball"
msg_info "Creating environment file"
sed -i 's/^supervised no/supervised systemd/' /etc/redis/redis.conf

View File

@@ -55,7 +55,7 @@ rm -rf /opt/guacamole-server
msg_ok "Built Guacamole Server (guacd)"
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix"
fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" "tarball"
msg_info "Building Frontend"
cd /opt/termix

View File

@@ -2702,21 +2702,16 @@ advanced_settings() {
# STEP 28: Verbose Mode & Confirmation
# ═══════════════════════════════════════════════════════════════════════════
28)
# PHS_VERBOSE forces verbose mode and skips the prompt
if [[ "$PHS_MODE" == "verbose" ]]; then
local verbose_default_flag="--defaultno"
[[ "$_verbose" == "yes" ]] && verbose_default_flag=""
if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
--title "VERBOSE MODE" \
$verbose_default_flag \
--yesno "\nEnable Verbose Mode?\n\nShows detailed output during installation." 12 58; then
_verbose="yes"
else
local verbose_default_flag="--defaultno"
[[ "$_verbose" == "yes" ]] && verbose_default_flag=""
if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
--title "VERBOSE MODE" \
$verbose_default_flag \
--yesno "\nEnable Verbose Mode?\n\nShows detailed output during installation." 12 58; then
_verbose="yes"
else
_verbose="no"
fi
_verbose="no"
fi
# Build summary
local ct_type_desc="Unprivileged"
@@ -3449,7 +3444,7 @@ configure_ssh_settings() {
# msg_menu()
#
# - Displays a numbered menu for update_script() functions
# - In silent mode (PHS_MODE=silent): auto-selects the default option
# - 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
@@ -3473,7 +3468,7 @@ msg_menu() {
local count=${#tags[@]}
# Silent mode: return default immediately
if [[ "$PHS_MODE" == "silent" ]]; then
if [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]]; then
echo "$default_tag"
return 0
fi
@@ -3509,34 +3504,6 @@ msg_menu() {
return 0
}
# ------------------------------------------------------------------------------
# resolve_phs_mode()
#
# - Resolves PHS_SILENT/PHS_VERBOSE env vars into a single PHS_MODE enum
# - Values: "silent", "verbose", "interactive"
# - If both PHS_SILENT=1 and PHS_VERBOSE=1, shows a conflict warning
# and defaults to "interactive"
# - Should be called once early, before any mode-dependent logic
# ------------------------------------------------------------------------------
resolve_phs_mode() {
if [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]] && [[ -n "${PHS_VERBOSE+x}" ]] && [[ "${PHS_VERBOSE}" == "1" ]]; then
# Conflict handling must never block unattended/non-TTY updates.
# Prefer silent mode to keep automation safe.
if [[ -t 0 ]] && [[ -t 1 ]] && command -v whiptail >/dev/null 2>&1; then
whiptail --backtitle "Proxmox VE Helper Scripts" \
--title "Configuration Conflict Warning" \
--msgbox "PHS_SILENT and PHS_VERBOSE are both set.\n\nFalling back to silent mode." 10 58 || true
fi
PHS_MODE="silent"
elif [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]]; then
PHS_MODE="silent"
elif [[ -n "${PHS_VERBOSE+x}" ]] && [[ "${PHS_VERBOSE}" == "1" ]]; then
PHS_MODE="verbose"
else
PHS_MODE="interactive"
fi
}
# ------------------------------------------------------------------------------
# start()
#
@@ -3547,16 +3514,17 @@ resolve_phs_mode() {
# ------------------------------------------------------------------------------
start() {
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
resolve_phs_mode
if command -v pveversion >/dev/null 2>&1; then
install_script || return 0
return 0
elif [[ "$PHS_MODE" == "silent" ]]; then
elif [ ! -z ${PHS_SILENT+x} ] && [[ "${PHS_SILENT}" == "1" ]]; then
VERBOSE="no"
set_std_mode
elif [[ "$PHS_MODE" == "verbose" ]]; then
VERBOSE="yes"
set_std_mode
ensure_profile_loaded
get_lxc_ip
update_script
update_motd_ip
cleanup_lxc
else
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "${APP} LXC Update/Setting" --menu \
"Support/Update functions for ${APP} LXC. Choose an option:" \
@@ -3580,12 +3548,12 @@ start() {
exit 0
;;
esac
ensure_profile_loaded
get_lxc_ip
update_script
update_motd_ip
cleanup_lxc
fi
ensure_profile_loaded
get_lxc_ip
update_script
update_motd_ip
cleanup_lxc
}
# ==============================================================================

View File

@@ -940,7 +940,7 @@ is_verbose_mode() {
#
# - Detects if script is running in unattended/non-interactive mode
# - Checks MODE variable first (primary method)
# - Falls back to legacy flags (PHS_MODE, var_unattended)
# - Falls back to legacy flags (PHS_SILENT, var_unattended)
# - Returns 0 (true) if unattended, 1 (false) otherwise
# - Used by prompt functions to auto-apply defaults
#
@@ -984,7 +984,7 @@ is_unattended() {
esac
# Legacy fallbacks for compatibility
[[ "${PHS_MODE:-}" == "silent" ]] && return 0
[[ "${PHS_SILENT:-0}" == "1" ]] && return 0
[[ "${var_unattended:-}" =~ ^(yes|true|1)$ ]] && return 0
[[ "${UNATTENDED:-}" =~ ^(yes|true|1)$ ]] && return 0

View File

@@ -6336,12 +6336,15 @@ function setup_nodejs() {
}
fi
# Scenario 1: Already installed at target version - just update packages/modules
# Scenario 1: Already installed at target version - upgrade to latest minor/patch + update packages/modules
if [[ -n "$CURRENT_NODE_VERSION" && "$CURRENT_NODE_VERSION" == "$NODE_VERSION" ]]; then
msg_info "Update Node.js $NODE_VERSION"
ensure_apt_working || return 100
# Upgrade to the latest minor/patch release from NodeSource
$STD apt-get install -y --only-upgrade nodejs 2>/dev/null || true
# Pin npm to 11.11.0 to work around Node.js 22.22.2 regression (nodejs/node#62425)
$STD npm install -g npm@11.11.0 2>/dev/null || true