From a5208b55647e796ae2e77026c8905a3b22006484 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Sat, 13 Jun 2026 16:01:22 +0200 Subject: [PATCH 01/64] Add bookorbit (ct) (#15080) Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> --- ct/bookorbit.sh | 78 ++++++++++++++++++++++++++++ ct/headers/bookorbit | 6 +++ install/bookorbit-install.sh | 99 ++++++++++++++++++++++++++++++++++++ 3 files changed, 183 insertions(+) create mode 100644 ct/bookorbit.sh create mode 100644 ct/headers/bookorbit create mode 100644 install/bookorbit-install.sh diff --git a/ct/bookorbit.sh b/ct/bookorbit.sh new file mode 100644 index 000000000..25b19cddf --- /dev/null +++ b/ct/bookorbit.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/bookorbit/bookorbit + +APP="BookOrbit" +var_tags="${var_tags:-books;library;reading}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-10}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -d /opt/bookorbit ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "bookorbit" "bookorbit/bookorbit"; then + msg_info "Stopping Service" + systemctl stop bookorbit + msg_ok "Stopped Service" + + create_backup /opt/bookorbit/.env + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bookorbit" "bookorbit/bookorbit" "tarball" + + msg_info "Rebuilding Application" + cd /opt/bookorbit + PNPM_VERSION=$(jq -r '.packageManager | ltrimstr("pnpm@")' /opt/bookorbit/package.json) + $STD corepack enable + $STD corepack prepare "pnpm@${PNPM_VERSION}" --activate + $STD pnpm install --frozen-lockfile + $STD pnpm --filter client run build-only + $STD pnpm --filter server run build + cp -r /opt/bookorbit/client/dist /opt/bookorbit/server/public + mkdir -p /opt/bookorbit/server/migrations + cp -r /opt/bookorbit/server/src/db/migrations/. /opt/bookorbit/server/migrations/ + chmod +x /opt/bookorbit/server/bin/kepubify/* + APP_VER=$(cat ~/.bookorbit) + sed -i "s/^APP_VERSION=.*/APP_VERSION=v$APP_VER/" /opt/bookorbit/.env + msg_ok "Rebuilt Application" + + msg_info "Updating Kobo Python Runtime" + $STD uv pip install --python /opt/bookorbit-python/bin/python -r /opt/bookorbit/server/requirements/kobo-cloudscraper.txt + msg_ok "Updated Kobo Python Runtime" + + + msg_info "Starting Service" + systemctl start bookorbit + msg_ok "Started Service" + msg_ok "Updated successfully!" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/headers/bookorbit b/ct/headers/bookorbit new file mode 100644 index 000000000..0fddb4d33 --- /dev/null +++ b/ct/headers/bookorbit @@ -0,0 +1,6 @@ + ____ __ ____ __ _ __ + / __ )____ ____ / /__/ __ \_____/ /_ (_) /_ + / __ / __ \/ __ \/ //_/ / / / ___/ __ \/ / __/ + / /_/ / /_/ / /_/ / ,< / /_/ / / / /_/ / / /_ +/_____/\____/\____/_/|_|\____/_/ /_.___/_/\__/ + diff --git a/install/bookorbit-install.sh b/install/bookorbit-install.sh new file mode 100644 index 000000000..48c249a2d --- /dev/null +++ b/install/bookorbit-install.sh @@ -0,0 +1,99 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/bookorbit/bookorbit + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y \ + build-essential \ + ffmpeg \ + poppler-utils +msg_ok "Installed Dependencies" + +PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql +PG_DB_NAME="bookorbit" PG_DB_USER="bookorbit" PG_DB_EXTENSIONS="uuid-ossp,pg_trgm,vector" setup_postgresql_db +NODE_VERSION="24" setup_nodejs +setup_uv + +fetch_and_deploy_gh_release "bookorbit" "bookorbit/bookorbit" "tarball" + +msg_info "Building Application" +cd /opt/bookorbit +PNPM_VERSION=$(jq -r '.packageManager | ltrimstr("pnpm@")' /opt/bookorbit/package.json) +$STD corepack enable +$STD corepack prepare "pnpm@${PNPM_VERSION}" --activate +$STD pnpm install --frozen-lockfile +$STD pnpm --filter client run build-only +$STD pnpm --filter server run build +cp -r /opt/bookorbit/client/dist /opt/bookorbit/server/public +mkdir -p /opt/bookorbit/server/migrations +cp -r /opt/bookorbit/server/src/db/migrations/. /opt/bookorbit/server/migrations/ +chmod +x /opt/bookorbit/server/bin/kepubify/* +msg_ok "Built Application" + +msg_info "Setting up Python Runtime" +$STD uv venv /opt/bookorbit-python +$STD uv pip install --python /opt/bookorbit-python/bin/python -r /opt/bookorbit/server/requirements/kobo-cloudscraper.txt +msg_ok "Set up Python Runtime" + +msg_info "Configuring Application" +mkdir -p /opt/bookorbit-data/covers /opt/bookorbit-data/book-bucket /opt/bookorbit-books +APP_VER=$(cat ~/.bookorbit) +JWT_SECRET=$(openssl rand -hex 32) +SETUP_BOOTSTRAP_TOKEN=$(openssl rand -hex 16) +cat <>~/bookorbit.creds + +Setup Token: ${SETUP_BOOTSTRAP_TOKEN} +EOF +cat </opt/bookorbit/.env +NODE_ENV=production +PORT=3000 +DATABASE_URL=postgres://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME} +JWT_SECRET=${JWT_SECRET} +SETUP_BOOTSTRAP_TOKEN=${SETUP_BOOTSTRAP_TOKEN} +APP_URL=http://${LOCAL_IP}:3000 +CLIENT_URL=http://${LOCAL_IP}:3000 +NODE_OPTIONS=--max-old-space-size=2048 +APP_DATA_PATH=/opt/bookorbit-data +KOBO_CLOUDSCRAPER_PYTHON=/opt/bookorbit-python/bin/python +BOOK_DOCK_PATH=/opt/bookorbit-data/book-bucket +APP_VERSION=v${APP_VER} +EOF +msg_ok "Configured Application" + +msg_info "Creating Service" +cat </etc/systemd/system/bookorbit.service +[Unit] +Description=BookOrbit Service +After=network.target postgresql.service +Requires=postgresql.service + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/bookorbit/server +EnvironmentFile=/opt/bookorbit/.env +ExecStartPre=/usr/bin/node /opt/bookorbit/server/dist/scripts/migrate.js +ExecStart=/usr/bin/node /opt/bookorbit/server/dist/main.js +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now bookorbit +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc From 9020fa88b8c977739bc1dc348ad111f4966448c3 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 13 Jun 2026 14:01:50 +0000 Subject: [PATCH 02/64] Update CHANGELOG.md (#15081) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b97d8760..4f87b6ad9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -480,6 +480,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-06-13 + +### 🆕 New Scripts + + - BookOrbit ([#15080](https://github.com/community-scripts/ProxmoxVE/pull/15080)) + ## 2026-06-12 ### 🆕 New Scripts From 07ab5dc16e9530243a8d4a5e159e12a9e3c0e781 Mon Sep 17 00:00:00 2001 From: MickLesk Date: Sat, 13 Jun 2026 18:17:21 +0200 Subject: [PATCH 03/64] Quote PostgreSQL extension names Wrap the extension identifier in double quotes in the CREATE EXTENSION SQL call within setup_postgresql_db. This ensures extension names containing hyphens, mixed case, or other characters that require quoting are handled correctly and avoids syntax errors when creating extensions. --- misc/tools.func | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/tools.func b/misc/tools.func index 055eb3ee2..cbeded9f8 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -8098,7 +8098,7 @@ setup_postgresql_db() { IFS=',' read -ra EXT_LIST <<<"${PG_DB_EXTENSIONS:-}" for ext in "${EXT_LIST[@]}"; do ext=$(echo "$ext" | xargs) # Trim whitespace - $STD sudo -u postgres psql -d "$PG_DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS $ext;" + $STD sudo -u postgres psql -d "$PG_DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS \"$ext\";" done fi From d4b9bc86e8fa2f476e7e694146ae699aef25ab59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Sat, 13 Jun 2026 18:43:15 +0200 Subject: [PATCH 04/64] Refactor A-B (#15075) --- ct/2fauth.sh | 16 ++++++++++------ ct/adventurelog.sh | 16 ++++++---------- ct/ampache.sh | 18 +++++------------- ct/anchor.sh | 7 ++----- ct/anytype-server.sh | 9 ++------- ct/apache-tomcat.sh | 20 ++++++++------------ ct/babybuddy.sh | 5 +++-- ct/baikal.sh | 13 +++++-------- ct/bambuddy.sh | 24 ++++++------------------ ct/bar-assistant.sh | 26 +++++++++++--------------- ct/baserow.sh | 19 ++++++------------- ct/bentopdf.sh | 17 ++++++----------- ct/bichon.sh | 14 +++++++------- ct/bitmagnet.sh | 14 ++++++-------- ct/blocky.sh | 10 ++-------- ct/bookstack.sh | 17 +++++------------ ct/bytestash.sh | 21 +++------------------ 17 files changed, 93 insertions(+), 173 deletions(-) diff --git a/ct/2fauth.sh b/ct/2fauth.sh index 3906ec971..506f140d8 100644 --- a/ct/2fauth.sh +++ b/ct/2fauth.sh @@ -35,8 +35,10 @@ function update_script() { $STD apt -y upgrade msg_info "Creating Backup" - rm -rf /opt/2fauth-backup - mv /opt/2fauth /opt/2fauth-backup + create_backup \ + /opt/2fauth/.env \ + /opt/2fauth/storage + if ! dpkg -l | grep -q 'php8.4'; then cp /etc/nginx/conf.d/2fauth.conf /etc/nginx/conf.d/2fauth.conf.bak fi @@ -46,11 +48,13 @@ function update_script() { PHP_VERSION="8.4" PHP_FPM="YES" setup_php sed -i 's/php8\.[0-9]/php8.4/g' /etc/nginx/conf.d/2fauth.conf fi + fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth" "tarball" setup_composer - cp /opt/2fauth-backup/.env /opt/2fauth/.env - cp -r /opt/2fauth-backup/storage /opt/2fauth/storage - cd /opt/2fauth || return + restore_backup + + msg_info "Configuring 2FAuth" + cd /opt/2fauth export COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev --prefer-dist php artisan 2fauth:install @@ -58,7 +62,7 @@ function update_script() { chmod -R 755 /opt/2fauth $STD systemctl restart php8.4-fpm $STD systemctl restart nginx - rm -rf /opt/2fauth-backup + msg_ok "Configured 2FAuth" msg_ok "Updated successfully!" fi exit diff --git a/ct/adventurelog.sh b/ct/adventurelog.sh index 4b7825bfd..e61c7f2da 100644 --- a/ct/adventurelog.sh +++ b/ct/adventurelog.sh @@ -35,10 +35,8 @@ function update_script() { systemctl stop adventurelog-frontend msg_ok "Services Stopped" - msg_info "Backup Old Installation" - cp -r /opt/adventurelog /opt/adventurelog-backup - rm -rf /opt/adventurelog - msg_ok "Backup done" + create_backup /opt/adventurelog/backend/server/.env \ + /opt/adventurelog/backend/server/media fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog" "tarball" PYTHON_VERSION="3.13" setup_uv @@ -47,9 +45,9 @@ function update_script() { $STD sudo -u postgres psql -d adventurelog_db -c "CREATE EXTENSION IF NOT EXISTS postgis;" msg_ok "PostgreSQL Extensions Ready" - msg_info "Updating ${APP}" - cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env - cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media + restore_backup + + msg_info "Updating AdventureLog" cd /opt/adventurelog/backend/server if [[ ! -x .venv/bin/python ]]; then $STD uv venv --clear .venv @@ -61,12 +59,10 @@ function update_script() { $STD .venv/bin/python -m manage collectstatic --noinput $STD .venv/bin/python -m manage migrate - cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env cd /opt/adventurelog/frontend $STD pnpm i $STD pnpm build - rm -rf /opt/adventurelog-backup - msg_ok "Updated ${APP}" + msg_ok "Updated AdventureLog" msg_info "Starting Services" systemctl daemon-reexec diff --git a/ct/ampache.sh b/ct/ampache.sh index 88aac095e..11798160e 100644 --- a/ct/ampache.sh +++ b/ct/ampache.sh @@ -34,24 +34,16 @@ function update_script() { systemctl stop apache2 msg_ok "Stopped Service" - msg_info "Creating Backup" - cp /opt/ampache/config/ampache.cfg.php /tmp/ampache.cfg.php.backup - cp /opt/ampache/public/rest/.htaccess /tmp/ampache_rest.htaccess.backup - cp /opt/ampache/public/play/.htaccess /tmp/ampache_play.htaccess.backup - rm -rf /opt/ampache_backup - mv /opt/ampache /opt/ampache_backup - msg_ok "Created Backup" + create_backup /opt/ampache/config/ampache.cfg.php \ + /opt/ampache/public/rest/.htaccess \ + /opt/ampache/public/play/.htaccess \ + /opt/ampache/advanced-config fetch_and_deploy_gh_release "Ampache" "ampache/ampache" "prebuild" "latest" "/opt/ampache" "ampache-*_all_php8.4.zip" - msg_info "Restoring Backup" - cp /tmp/ampache.cfg.php.backup /opt/ampache/config/ampache.cfg.php - cp /tmp/ampache_rest.htaccess.backup /opt/ampache/public/rest/.htaccess - cp /tmp/ampache_play.htaccess.backup /opt/ampache/public/play/.htaccess + restore_backup chmod 664 /opt/ampache/public/rest/.htaccess /opt/ampache/public/play/.htaccess chown -R www-data:www-data /opt/ampache - rm -f /tmp/ampache*.backup - msg_ok "Restored Configuration" msg_info "Starting Service" systemctl start apache2 diff --git a/ct/anchor.sh b/ct/anchor.sh index 7702598a2..f0094c30c 100644 --- a/ct/anchor.sh +++ b/ct/anchor.sh @@ -35,9 +35,7 @@ function update_script() { systemctl stop anchor-web anchor-server msg_ok "Stopped Services" - msg_info "Backing up Configuration" - cp /opt/anchor/.env /opt/anchor.env.bak - msg_ok "Backed up Configuration" + create_backup /opt/anchor/.env CLEAN_INSTALL=1 fetch_and_deploy_gh_release "anchor" "ZhFahim/anchor" "tarball" @@ -57,8 +55,7 @@ function update_script() { cp -r public .next/standalone/public msg_ok "Built Web Interface" - cp /opt/anchor.env.bak /opt/anchor/.env - rm -f /opt/anchor.env.bak + restore_backup msg_info "Running Database Migrations" cd /opt/anchor/server diff --git a/ct/anytype-server.sh b/ct/anytype-server.sh index 5058177e6..c54c8da6b 100644 --- a/ct/anytype-server.sh +++ b/ct/anytype-server.sh @@ -36,17 +36,12 @@ function update_script() { systemctl stop anytype msg_ok "Stopped Service" - msg_info "Backing up Data" - cp -r /opt/anytype/data /opt/anytype_data_backup - msg_ok "Backed up Data" + create_backup /opt/anytype/data CLEAN_INSTALL=1 fetch_and_deploy_gh_release "anytype" "grishy/any-sync-bundle" "prebuild" "latest" "/opt/anytype" "any-sync-bundle_*_linux_amd64.tar.gz" chmod +x /opt/anytype/any-sync-bundle - msg_info "Restoring Data" - cp -r /opt/anytype_data_backup/. /opt/anytype/data - rm -rf /opt/anytype_data_backup - msg_ok "Restored Data" + restore_backup msg_info "Starting Service" systemctl start anytype diff --git a/ct/apache-tomcat.sh b/ct/apache-tomcat.sh index 48b9bc5f8..734fe1bde 100644 --- a/ct/apache-tomcat.sh +++ b/ct/apache-tomcat.sh @@ -26,26 +26,26 @@ function update_script() { check_container_resources TOMCAT_DIR=$(ls -d /opt/tomcat-* 2>/dev/null | head -n1) - if [[ -z "$TOMCAT_DIR" || ! -d "$TOMCAT_DIR" ]]; then + if [[ -z $TOMCAT_DIR || ! -d $TOMCAT_DIR ]]; then msg_error "No ${APP} Installation Found!" exit fi # Detect major version and current version from install path (e.g., /opt/tomcat-11 -> 11) TOMCAT_MAJOR=$(basename "$TOMCAT_DIR" | grep -oP 'tomcat-\K[0-9]+') - if [[ -z "$TOMCAT_MAJOR" ]]; then + if [[ -z $TOMCAT_MAJOR ]]; then msg_error "Cannot determine Tomcat major version from path: $TOMCAT_DIR" exit fi CURRENT_VERSION=$(grep -oP 'Apache Tomcat Version \K[0-9.]+' "$TOMCAT_DIR/RELEASE-NOTES" 2>/dev/null || echo "unknown") LATEST_VERSION=$(curl -fsSL "https://dlcdn.apache.org/tomcat/tomcat-${TOMCAT_MAJOR}/" | grep -oP 'v[0-9]+\.[0-9]+\.[0-9]+(-M[0-9]+)?/' | sort -V | tail -n1 | sed 's/\/$//; s/v//') - if [[ -z "$LATEST_VERSION" ]]; then + if [[ -z $LATEST_VERSION ]]; then msg_error "Failed to fetch latest version for Tomcat ${TOMCAT_MAJOR}" exit fi - if [[ "$CURRENT_VERSION" == "$LATEST_VERSION" ]]; then + if [[ $CURRENT_VERSION == "$LATEST_VERSION" ]]; then msg_ok "${APP} ${CURRENT_VERSION} is already up to date" exit fi @@ -54,13 +54,9 @@ function update_script() { systemctl stop tomcat msg_ok "Stopped Tomcat service" - msg_info "Backing up configuration and applications" - BACKUP_DIR="/tmp/tomcat-backup-$$" - mkdir -p "$BACKUP_DIR" - cp -a "$TOMCAT_DIR/conf" "$BACKUP_DIR/conf" - cp -a "$TOMCAT_DIR/webapps" "$BACKUP_DIR/webapps" - [[ -d "$TOMCAT_DIR/lib" ]] && cp -a "$TOMCAT_DIR/lib" "$BACKUP_DIR/lib" - msg_ok "Backed up configuration and applications" + create_backup $TOMCAT_DIR/conf + [[ -d $TOMCAT_DIR/webapps ]] && create_backup $TOMCAT_DIR/webapps + [[ -d $TOMCAT_DIR/lib ]] && create_backup $TOMCAT_DIR/lib msg_info "Downloading Tomcat ${LATEST_VERSION}" TOMCAT_URL="https://dlcdn.apache.org/tomcat/tomcat-${TOMCAT_MAJOR}/v${LATEST_VERSION}/bin/apache-tomcat-${LATEST_VERSION}.tar.gz" @@ -78,7 +74,7 @@ function update_script() { cp -a "$BACKUP_DIR/webapps"/* "$TOMCAT_DIR/webapps/" 2>/dev/null || true if [[ -d "$BACKUP_DIR/lib" ]]; then for jar in "$BACKUP_DIR/lib"/*.jar; do - [[ -f "$jar" ]] || continue + [[ -f $jar ]] || continue jar_name=$(basename "$jar") if [[ ! -f "$TOMCAT_DIR/lib/$jar_name" ]]; then cp "$jar" "$TOMCAT_DIR/lib/" diff --git a/ct/babybuddy.sh b/ct/babybuddy.sh index 66d5f71f7..29fc7703a 100644 --- a/ct/babybuddy.sh +++ b/ct/babybuddy.sh @@ -37,16 +37,17 @@ function update_script() { systemctl stop uwsgi msg_ok "Services Stopped" + create_backup /opt/babybuddy/babybuddy/settings/production.py + msg_info "Cleaning old files" - cp /opt/babybuddy/babybuddy/settings/production.py /tmp/production.py.bak find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} + msg_ok "Cleaned old files" fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy" "tarball" + restore_backup msg_info "Updating ${APP}" cd /opt/babybuddy - mv /tmp/production.py.bak /opt/babybuddy/babybuddy/settings/production.py source .venv/bin/activate $STD uv pip install -r requirements.txt export DJANGO_SETTINGS_MODULE=babybuddy.settings.production diff --git a/ct/baikal.sh b/ct/baikal.sh index cc568f039..74550dd8e 100644 --- a/ct/baikal.sh +++ b/ct/baikal.sh @@ -34,22 +34,19 @@ function update_script() { systemctl stop apache2 msg_ok "Stopped Service" - msg_info "Backing up data" - mv /opt/baikal /opt/baikal-backup - msg_ok "Backed up data" + create_backup /opt/baikal/config/baikal.yaml \ + /opt/baikal/Specific/ PHP_APACHE="YES" PHP_VERSION="8.3" setup_php setup_composer fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal" "tarball" - - msg_info "Configuring Baikal" - cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/ - cp -r /opt/baikal-backup/Specific/ /opt/baikal/ + restore_backup chown -R www-data:www-data /opt/baikal/ chmod -R 755 /opt/baikal/ + + msg_info "Configuring Baikal" cd /opt/baikal $STD composer install - rm -rf /opt/baikal-backup msg_ok "Configured Baikal" msg_info "Starting Service" diff --git a/ct/bambuddy.sh b/ct/bambuddy.sh index 045e2bc4a..8f19a1015 100644 --- a/ct/bambuddy.sh +++ b/ct/bambuddy.sh @@ -38,11 +38,11 @@ function update_script() { msg_ok "Stopped Service" msg_info "Backing up Configuration and Data" - cp /opt/bambuddy/.env /opt/bambuddy.env.bak - cp -r /opt/bambuddy/data /opt/bambuddy_data_bak - [[ -f /opt/bambuddy/bambuddy.db ]] && cp /opt/bambuddy/bambuddy.db /opt/bambuddy.db.bak - [[ -f /opt/bambuddy/bambutrack.db ]] && cp /opt/bambuddy/bambutrack.db /opt/bambutrack.db.bak - [[ -d /opt/bambuddy/archive ]] && cp -r /opt/bambuddy/archive /opt/bambuddy_archive_bak + create_backup /opt/bambuddy/.env \ + /opt/bambuddy/data \ + /opt/bambuddy/bambuddy.db \ + /opt/bambuddy/bambutrack.db \ + /opt/bambuddy/archive msg_ok "Backed up Configuration and Data" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bambuddy" "maziggy/bambuddy" "tarball" "latest" "/opt/bambuddy" @@ -59,19 +59,7 @@ function update_script() { $STD npm run build msg_ok "Rebuilt Frontend" - msg_info "Restoring Configuration and Data" - mkdir -p /opt/bambuddy/data - cp /opt/bambuddy.env.bak /opt/bambuddy/.env - cp -r /opt/bambuddy_data_bak/. /opt/bambuddy/data/ - [[ -f /opt/bambuddy.db.bak ]] && cp /opt/bambuddy.db.bak /opt/bambuddy/bambuddy.db - [[ -f /opt/bambutrack.db.bak ]] && cp /opt/bambutrack.db.bak /opt/bambuddy/bambutrack.db - if [[ -d /opt/bambuddy_archive_bak ]]; then - mkdir -p /opt/bambuddy/archive - cp -r /opt/bambuddy_archive_bak/. /opt/bambuddy/archive/ - fi - rm -f /opt/bambuddy.env.bak /opt/bambuddy.db.bak /opt/bambutrack.db.bak - rm -rf /opt/bambuddy_data_bak /opt/bambuddy_archive_bak - msg_ok "Restored Configuration and Data" + restore_backup msg_info "Starting Service" systemctl start bambuddy diff --git a/ct/bar-assistant.sh b/ct/bar-assistant.sh index be0b90f24..d38393ef0 100644 --- a/ct/bar-assistant.sh +++ b/ct/bar-assistant.sh @@ -37,16 +37,15 @@ function update_script() { PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="pdo-sqlite" setup_php - msg_info "Backing up Bar Assistant" - mv /opt/bar-assistant /opt/bar-assistant-backup - msg_ok "Backed up Bar Assistant" + create_backup /opt/bar-assistant/.env \ + /opt/bar-assistant/storage/bar-assistant fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant" setup_composer - msg_info "Updating Bar-Assistant" - cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.env - cp -r /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant + restore_backup + + msg_info "Configuring Bar-Assistant" cd /opt/bar-assistant $STD composer install --no-interaction $STD php artisan migrate --force @@ -57,8 +56,7 @@ function update_script() { $STD php artisan route:cache $STD php artisan event:cache chown -R www-data:www-data /opt/bar-assistant - rm -rf /opt/bar-assistant-backup - msg_ok "Updated Bar-Assistant" + msg_ok "Configured Bar-Assistant" msg_info "Starting nginx" systemctl start nginx @@ -66,23 +64,21 @@ function update_script() { fi if check_for_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim"; then - msg_info "Backing up Vue Salt Rim" - mv /opt/vue-salt-rim /opt/vue-salt-rim-backup - msg_ok "Backed up Vue Salt Rim" + + create_backup /opt/vue-salt-rim/public/config.js msg_info "Stopping nginx" systemctl stop nginx msg_ok "Stopped nginx" fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim" + restore_backup - msg_info "Updating Vue Salt Rim" - cp /opt/vue-salt-rim-backup/public/config.js /opt/vue-salt-rim/public/config.js + msg_info "Configuring Vue Salt Rim" cd /opt/vue-salt-rim $STD npm install $STD npm run build - rm -rf /opt/vue-salt-rim-backup - msg_ok "Updated Vue Salt Rim" + msg_ok "Configured Vue Salt Rim" msg_info "Starting nginx" systemctl start nginx diff --git a/ct/baserow.sh b/ct/baserow.sh index 34ce68ccf..fa0d044db 100644 --- a/ct/baserow.sh +++ b/ct/baserow.sh @@ -35,27 +35,20 @@ function update_script() { systemctl stop baserow-backend baserow-celery baserow-celery-beat baserow-celery-export baserow-frontend msg_ok "Stopped Services" - msg_info "Backing up Data" - cp /opt/baserow/.env /opt/baserow.env.bak - msg_ok "Backed up Data" - + create_backup /opt/baserow/.env CLEAN_INSTALL=1 fetch_and_deploy_gh_release "baserow" "baserow/baserow" "tarball" + restore_backup - msg_info "Restoring Configuration" - cp /opt/baserow.env.bak /opt/baserow/.env - rm -f /opt/baserow.env.bak - msg_ok "Restored Configuration" - - msg_info "Updating Backend Dependencies" + msg_info "Configuring Baserow" cd /opt/baserow/backend $STD uv sync --frozen --no-dev - msg_ok "Updated Backend Dependencies" + msg_ok "Configured Baserow" - msg_info "Updating Frontend" + msg_info "Rebuilding Frontend" cd /opt/baserow/web-frontend $STD npm install $STD npm run build - msg_ok "Updated Frontend" + msg_ok "Rebuilt Frontend" msg_info "Running Migrations" cd /opt/baserow/backend diff --git a/ct/bentopdf.sh b/ct/bentopdf.sh index eabbc1952..072a71db9 100644 --- a/ct/bentopdf.sh +++ b/ct/bentopdf.sh @@ -36,18 +36,13 @@ function update_script() { systemctl stop bentopdf msg_ok "Stopped Service" - [[ -f /opt/bentopdf/.env.production ]] && cp /opt/bentopdf/.env.production /opt/production.env - + create_backup /opt/bentopdf/.env.production CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bentopdf" "alam00000/bentopdf" "tarball" "latest" "/opt/bentopdf" + restore_backup - msg_info "Updating BentoPDF" + msg_info "Configuring BentoPDF" cd /opt/bentopdf $STD npm ci --no-audit --no-fund - if [[ -f /opt/production.env ]]; then - mv /opt/production.env ./.env.production - else - cp ./.env.example ./.env.production - fi export NODE_OPTIONS="--max-old-space-size=3072" export SIMPLE_MODE=true export VITE_USE_CDN=true @@ -64,9 +59,9 @@ EOF if [[ ! -f /etc/ssl/private/bentopdf-selfsigned.key || ! -f /etc/ssl/certs/bentopdf-selfsigned.crt ]]; then CERT_CN="$(hostname -I | awk '{print $1}')" $STD openssl req -x509 -nodes -newkey rsa:2048 -days 3650 \ - -keyout /etc/ssl/private/bentopdf-selfsigned.key \ - -out /etc/ssl/certs/bentopdf-selfsigned.crt \ - -subj "/CN=${CERT_CN}" + -keyout /etc/ssl/private/bentopdf-selfsigned.key \ + -out /etc/ssl/certs/bentopdf-selfsigned.crt \ + -subj "/CN=${CERT_CN}" fi cat <<'EOF' >/etc/nginx/sites-available/bentopdf server { diff --git a/ct/bichon.sh b/ct/bichon.sh index 00f7dd77b..94bcf71a7 100644 --- a/ct/bichon.sh +++ b/ct/bichon.sh @@ -35,14 +35,14 @@ function update_script() { fi MIGRATE_V1=0 - if [[ "$CURRENT_VERSION" == 0.* ]]; then + if [[ $CURRENT_VERSION == 0.* ]]; then MIGRATE_V1=1 DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//') if [ "$DISK_USAGE" -gt 50 ]; then echo -e "\n${RD}Warning: Less than 50% free storage remaining on the root disk.${CL}" echo -e "${RD}Bichon v1 data migration temporarily duplicates data and requires free space for it.${CL}" read -r -p "Are you sure you want to proceed with the update? (y/N): " proceed - if [[ ! "$proceed" =~ ^[Yy]$ ]]; then + if [[ ! $proceed =~ ^[Yy]$ ]]; then msg_error "Update cancelled by user." exit fi @@ -53,7 +53,7 @@ function update_script() { echo -e "\n${RD}Warning: LXC has less than 2GB of RAM allocated (${RAM_TOTAL}MB).${CL}" echo -e "${RD}Bichon v1 data migration consumes significant memory and may crash if insufficient.${CL}" read -r -p "Are you sure you want to proceed with the update? (y/N): " proceed_ram - if [[ ! "$proceed_ram" =~ ^[Yy]$ ]]; then + if [[ ! $proceed_ram =~ ^[Yy]$ ]]; then msg_error "Update cancelled by user." exit fi @@ -65,12 +65,12 @@ function update_script() { systemctl stop bichon msg_ok "Stopped service" - cp /opt/bichon/bichon.env /tmp/bichon.env.backup + create_backup /opt/bichon/bichon.env if [ "$MIGRATE_V1" -eq 1 ] && [ "$CURRENT_VERSION" != "0.3.7" ]; then - msg_info "Updating to intermediate version v0.3.7" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bichon" "rustmailer/bichon" "prebuild" "v0.3.7" "/opt/bichon" "bichon-*-x86_64-unknown-linux-gnu.tar.gz" - cp /tmp/bichon.env.backup /opt/bichon/bichon.env + restore_backup + msg_info "Updating to intermediate version v0.3.7" systemctl start bichon sleep 30 systemctl stop bichon @@ -78,7 +78,7 @@ function update_script() { fi CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bichon" "rustmailer/bichon" "prebuild" "latest" "/opt/bichon" "bichon-*-x86_64-unknown-linux-gnu.tar.gz" - cp /tmp/bichon.env.backup /opt/bichon/bichon.env + restore_backup if [ "$MIGRATE_V1" -eq 1 ]; then msg_info "Running Bichon v1 Data Migration (patience)" diff --git a/ct/bitmagnet.sh b/ct/bitmagnet.sh index ab4d534d1..8d8d5b875 100644 --- a/ct/bitmagnet.sh +++ b/ct/bitmagnet.sh @@ -56,21 +56,19 @@ function update_script() { bitmagnet \ >/tmp/backup.sql mv /tmp/backup.sql /opt/ - [ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/ - [ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/ + create_backup /opt/bitmagnet/.env \ + /opt/bitmagnet/config.yml msg_ok "Data backed up" - rm -rf /opt/bitmagnet - fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" "tarball" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" "tarball" + restore_backup - msg_info "Updating Bitmagnet" + msg_info "Configuring Bitmagnet" cd /opt/bitmagnet VREL=v$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL" chmod +x bitmagnet - [ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/ - [ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/ - msg_ok "Updated Bitmagnet" + msg_ok "Configured Bitmagnet" msg_info "Starting Service" systemctl start bitmagnet-web diff --git a/ct/blocky.sh b/ct/blocky.sh index d8b57c24d..b26890622 100644 --- a/ct/blocky.sh +++ b/ct/blocky.sh @@ -33,15 +33,9 @@ function update_script() { systemctl stop blocky msg_ok "Stopped Service" - msg_info "Backup Config" - mv /opt/blocky/config.yml /opt/config.yml - msg_ok "Backed Up Config" - + create_backup /opt/blocky/config.yml CLEAN_INSTALL=1 fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_Linux_x86_64.tar.gz" - - msg_info "Restore Config" - mv /opt/config.yml /opt/blocky/config.yml - msg_ok "Restored Config" + restore_backup msg_info "Starting Service" systemctl start blocky diff --git a/ct/bookstack.sh b/ct/bookstack.sh index eafc91657..caa720d4b 100644 --- a/ct/bookstack.sh +++ b/ct/bookstack.sh @@ -36,20 +36,14 @@ function update_script() { systemctl stop apache2 msg_ok "Services Stopped" - msg_info "Backing up data" - mv /opt/bookstack /opt/bookstack-backup - msg_ok "Backup finished" - + create_backup /opt/bookstack/.env \ + /opt/bookstack/public/uploads \ + /opt/bookstack/storage/uploads \ + /opt/bookstack/themes fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack" "tarball" PHP_VERSION="8.3" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="ldap,tidy,mysqli" setup_php setup_composer - - msg_info "Restoring backup" - cp /opt/bookstack-backup/.env /opt/bookstack/.env - [[ -d /opt/bookstack-backup/public/uploads ]] && cp -a /opt/bookstack-backup/public/uploads/. /opt/bookstack/public/uploads/ - [[ -d /opt/bookstack-backup/storage/uploads ]] && cp -a /opt/bookstack-backup/storage/uploads/. /opt/bookstack/storage/uploads/ - [[ -d /opt/bookstack-backup/themes ]] && cp -a /opt/bookstack-backup/themes/. /opt/bookstack/themes/ - msg_ok "Backup restored" + restore_backup msg_info "Configuring BookStack" cd /opt/bookstack @@ -60,7 +54,6 @@ function update_script() { chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads chmod -R 640 /opt/bookstack/.env - rm -rf /opt/bookstack-backup msg_ok "Configured BookStack" msg_info "Starting Apache2" diff --git a/ct/bytestash.sh b/ct/bytestash.sh index 5a65a9b76..c71e100ae 100644 --- a/ct/bytestash.sh +++ b/ct/bytestash.sh @@ -34,25 +34,10 @@ function update_script() { systemctl stop bytestash-backend bytestash-frontend msg_ok "Services Stopped" - msg_info "Backing up data" - tmp_dir="/opt/bytestash-data-backup" - mkdir -p "$tmp_dir" - if [[ -d /opt/bytestash/data ]]; then - cp -r /opt/bytestash/data "$tmp_dir"/data - elif [[ -d /opt/data ]]; then - cp -r /opt/data "$tmp_dir"/data - fi - msg_ok "Data backed up" - + [[ -d /opt/bytestash/data ]] && create_backup /opt/bytestash/data + [[ -d /opt/data ]] && create_backup /opt/data CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bytestash" "jordan-dalby/ByteStash" "tarball" - - msg_info "Restoring data" - if [[ -d "$tmp_dir"/data ]]; then - mkdir -p /opt/bytestash/data - cp -r "$tmp_dir"/data/* /opt/bytestash/data/ - rm -rf "$tmp_dir" - fi - msg_ok "Data restored" + restore_backup msg_info "Configuring ByteStash" cd /opt/bytestash/server From 9c88ef84a0af5ac4ce80f45b839167a5792157a3 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 13 Jun 2026 16:43:39 +0000 Subject: [PATCH 05/64] Update CHANGELOG.md (#15089) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f87b6ad9..00431d8ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -486,6 +486,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - BookOrbit ([#15080](https://github.com/community-scripts/ProxmoxVE/pull/15080)) +### 🚀 Updated Scripts + + - #### 🔧 Refactor + + - Refactor: Implement backup functions for scripts A-B [@tremor021](https://github.com/tremor021) ([#15075](https://github.com/community-scripts/ProxmoxVE/pull/15075)) + ## 2026-06-12 ### 🆕 New Scripts From d9b7255a0b60a3f5831587d0bfa50deeaafe226b Mon Sep 17 00:00:00 2001 From: Tom Frenzel <40773830+tomfrenzel@users.noreply.github.com> Date: Sat, 13 Jun 2026 20:40:19 +0200 Subject: [PATCH 06/64] HomeBox: Support v0.26.0 (#15086) --- ct/homebox.sh | 10 ++++++---- install/homebox-install.sh | 2 ++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ct/homebox.sh b/ct/homebox.sh index c87879060..bc36c2547 100644 --- a/ct/homebox.sh +++ b/ct/homebox.sh @@ -39,14 +39,16 @@ function update_script() { systemctl stop homebox msg_ok "Stopped Service" - if [ -f /opt/homebox ] && [ -x /opt/homebox ]; then - rm -f /opt/homebox - fi - fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_x86_64.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_x86_64.tar.gz" chmod +x /opt/homebox/homebox [ -f /opt/.env ] && mv /opt/.env /opt/homebox/.env [ -d /opt/.data ] && mv /opt/.data /opt/homebox/.data + if ! grep -q "HBOX_AUTH_API_KEY_PEPPER" /opt/homebox/.env; then + AUTH_KEY=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32) + echo "HBOX_AUTH_API_KEY_PEPPER=${AUTH_KEY}" >>/opt/homebox/.env + fi + msg_info "Starting Service" systemctl start homebox msg_ok "Started Service" diff --git a/install/homebox-install.sh b/install/homebox-install.sh index 70d370249..065a16874 100644 --- a/install/homebox-install.sh +++ b/install/homebox-install.sh @@ -18,11 +18,13 @@ fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "lates msg_info "Configuring Homebox" chmod +x /opt/homebox/homebox +AUTH_KEY="$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)" cat </opt/homebox/.env # For possible environment variables check here: https://homebox.software/en/configure-homebox HBOX_MODE=production HBOX_WEB_PORT=7745 HBOX_WEB_HOST=0.0.0.0 +HBOX_AUTH_API_KEY_PEPPER=${AUTH_KEY} EOF msg_ok "Configured Homebox" From d214627ca9a49f5355dbe500848cb4874924e0cc Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 13 Jun 2026 18:40:40 +0000 Subject: [PATCH 07/64] Update CHANGELOG.md (#15091) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00431d8ca..91d898858 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -488,6 +488,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts + - #### 🐞 Bug Fixes + + - HomeBox: Support v0.26.0 [@tomfrenzel](https://github.com/tomfrenzel) ([#15086](https://github.com/community-scripts/ProxmoxVE/pull/15086)) + - #### 🔧 Refactor - Refactor: Implement backup functions for scripts A-B [@tremor021](https://github.com/tremor021) ([#15075](https://github.com/community-scripts/ProxmoxVE/pull/15075)) From 6c1024776dd2c07e3f0d92e3105dcef62176e45c Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 13 Jun 2026 14:43:35 -0400 Subject: [PATCH 08/64] Immich: Update image-processing libraries (#15082) --- ct/immich.sh | 8 ++++---- install/immich-install.sh | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ct/immich.sh b/ct/immich.sh index c3ba5dff9..f0362c2df 100644 --- a/ct/immich.sh +++ b/ct/immich.sh @@ -310,7 +310,7 @@ function compile_libjxl() { SOURCE=${SOURCE_DIR}/libjxl JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62" JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0" - LIBJXL_REVISION="794a5dcf0d54f9f0b20d288a12e87afb91d20dfc" + LIBJXL_REVISION="332feb17d17311c748445f7ee75c4fb55cc38530" # : "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}" if [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then msg_info "Recompiling libjxl" @@ -355,7 +355,7 @@ function compile_libjxl() { function compile_libheif() { SOURCE=${SOURCE_DIR}/libheif ensure_dependencies libaom-dev - LIBHEIF_REVISION="35dad50a9145332a7bfdf1ff6aef6801fb613d68" + LIBHEIF_REVISION="62f1b8c76ed4d8305071fdacbe74ef9717bacac5" # : "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}" if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then msg_info "Recompiling libheif" @@ -387,7 +387,7 @@ function compile_libheif() { function compile_libraw() { SOURCE=${SOURCE_DIR}/libraw - LIBRAW_REVISION="0b56545a4f828743f28a4345cdfdd4c49f9f9a2a" + LIBRAW_REVISION="b860248a89d9082b8e0a1e202e516f46af9adb29" # : "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}" if [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then msg_info "Recompiling libraw" @@ -430,7 +430,7 @@ function compile_imagemagick() { function compile_libvips() { SOURCE=$SOURCE_DIR/libvips - LIBVIPS_REVISION="0c9151a4f416d2f8ae20a755db218f6637050eec" + LIBVIPS_REVISION="17ad2f62dda7e39985955da189183e594683d45e" if [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then msg_info "Recompiling libvips" [[ -d "$SOURCE" ]] && rm -rf "$SOURCE" diff --git a/install/immich-install.sh b/install/immich-install.sh index a31ad9e45..378dd0642 100644 --- a/install/immich-install.sh +++ b/install/immich-install.sh @@ -178,7 +178,7 @@ cd "$STAGING_DIR" SOURCE=${SOURCE_DIR}/libjxl JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62" JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0" -LIBJXL_REVISION="794a5dcf0d54f9f0b20d288a12e87afb91d20dfc" +LIBJXL_REVISION="332feb17d17311c748445f7ee75c4fb55cc38530" # : "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}" $STD git clone https://github.com/libjxl/libjxl.git "$SOURCE" cd "$SOURCE" @@ -216,7 +216,7 @@ msg_ok "(1/5) Compiled libjxl" msg_info "(2/5) Compiling libheif" SOURCE=${SOURCE_DIR}/libheif -LIBHEIF_REVISION="35dad50a9145332a7bfdf1ff6aef6801fb613d68" +LIBHEIF_REVISION="62f1b8c76ed4d8305071fdacbe74ef9717bacac5" # : "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}" $STD git clone https://github.com/strukturag/libheif.git "$SOURCE" cd "$SOURCE" @@ -242,7 +242,7 @@ msg_ok "(2/5) Compiled libheif" msg_info "(3/5) Compiling libraw" SOURCE=${SOURCE_DIR}/libraw -LIBRAW_REVISION="0b56545a4f828743f28a4345cdfdd4c49f9f9a2a" +LIBRAW_REVISION="b860248a89d9082b8e0a1e202e516f46af9adb29" # : "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}" $STD git clone https://github.com/LibRaw/LibRaw.git "$SOURCE" cd "$SOURCE" @@ -272,7 +272,7 @@ msg_ok "(4/5) Compiled imagemagick" msg_info "(5/5) Compiling libvips" SOURCE=$SOURCE_DIR/libvips -LIBVIPS_REVISION="0c9151a4f416d2f8ae20a755db218f6637050eec" +LIBVIPS_REVISION="17ad2f62dda7e39985955da189183e594683d45e" $STD git clone https://github.com/libvips/libvips.git "$SOURCE" cd "$SOURCE" $STD git reset --hard "$LIBVIPS_REVISION" From 054dd68c15b4e725fd017ff2624b74e0946f4207 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 13 Jun 2026 18:44:03 +0000 Subject: [PATCH 09/64] Update CHANGELOG.md (#15092) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91d898858..7301e1036 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -490,6 +490,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Immich: Update image-processing libraries [@vhsdream](https://github.com/vhsdream) ([#15082](https://github.com/community-scripts/ProxmoxVE/pull/15082)) - HomeBox: Support v0.26.0 [@tomfrenzel](https://github.com/tomfrenzel) ([#15086](https://github.com/community-scripts/ProxmoxVE/pull/15086)) - #### 🔧 Refactor From 4f97ac2090aec14df57476bccc23ec229ecc5f97 Mon Sep 17 00:00:00 2001 From: thieneret <123479547+thieneret@users.noreply.github.com> Date: Sun, 14 Jun 2026 00:38:59 +0200 Subject: [PATCH 10/64] Update authentik version to 2026.5.3 (#15093) --- ct/authentik.sh | 2 +- install/authentik-install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/authentik.sh b/ct/authentik.sh index 53fe25132..ab9451596 100644 --- a/ct/authentik.sh +++ b/ct/authentik.sh @@ -42,7 +42,7 @@ function update_script() { RUST_PROFILE="minimal" RUST_TOOLCHAIN="stable" setup_rust setup_yq - AUTHENTIK_VERSION="version/2026.5.2" + AUTHENTIK_VERSION="version/2026.5.3" # Source: https://github.com/goauthentik/fips/blob/main/Makefile#L26 XMLSEC_VERSION="1.3.11" diff --git a/install/authentik-install.sh b/install/authentik-install.sh index f959493dd..23a1adc17 100644 --- a/install/authentik-install.sh +++ b/install/authentik-install.sh @@ -59,7 +59,7 @@ PG_VERSION="17" setup_postgresql PG_DB_NAME="authentik" PG_DB_USER="authentik" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db XMLSEC_VERSION="1.3.11" -AUTHENTIK_VERSION="version/2026.5.2" +AUTHENTIK_VERSION="version/2026.5.3" fetch_and_deploy_gh_release "xmlsec" "lsh123/xmlsec" "tarball" "${XMLSEC_VERSION}" "/opt/xmlsec" fetch_and_deploy_gh_release "authentik" "goauthentik/authentik" "tarball" "${AUTHENTIK_VERSION}" "/opt/authentik" fetch_and_deploy_gh_release "geoipupdate" "maxmind/geoipupdate" "binary" From 7dbee6cd839545237915446ab30b704d0f2b08b5 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 13 Jun 2026 22:39:22 +0000 Subject: [PATCH 11/64] Update CHANGELOG.md (#15095) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7301e1036..03596b7b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -488,6 +488,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts + - Update authentik version to 2026.5.3 [@thieneret](https://github.com/thieneret) ([#15093](https://github.com/community-scripts/ProxmoxVE/pull/15093)) + - #### 🐞 Bug Fixes - Immich: Update image-processing libraries [@vhsdream](https://github.com/vhsdream) ([#15082](https://github.com/community-scripts/ProxmoxVE/pull/15082)) From 46f163c50ce2e77bfc54a0975c9b4ed839a0c249 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 14 Jun 2026 00:25:15 +0000 Subject: [PATCH 12/64] Archive old changelog entries (#15097) Co-authored-by: github-actions[bot] --- .github/changelogs/2026/06.md | 127 ++++++++++++++++++++++++++++++++++ CHANGELOG.md | 127 ++-------------------------------- 2 files changed, 132 insertions(+), 122 deletions(-) diff --git a/.github/changelogs/2026/06.md b/.github/changelogs/2026/06.md index 93b3f0602..ddd1c030d 100644 --- a/.github/changelogs/2026/06.md +++ b/.github/changelogs/2026/06.md @@ -1,3 +1,130 @@ +## 2026-06-13 + +### 🆕 New Scripts + + - BookOrbit ([#15080](https://github.com/community-scripts/ProxmoxVE/pull/15080)) + +### 🚀 Updated Scripts + + - Update authentik version to 2026.5.3 [@thieneret](https://github.com/thieneret) ([#15093](https://github.com/community-scripts/ProxmoxVE/pull/15093)) + + - #### 🐞 Bug Fixes + + - Immich: Update image-processing libraries [@vhsdream](https://github.com/vhsdream) ([#15082](https://github.com/community-scripts/ProxmoxVE/pull/15082)) + - HomeBox: Support v0.26.0 [@tomfrenzel](https://github.com/tomfrenzel) ([#15086](https://github.com/community-scripts/ProxmoxVE/pull/15086)) + + - #### 🔧 Refactor + + - Refactor: Implement backup functions for scripts A-B [@tremor021](https://github.com/tremor021) ([#15075](https://github.com/community-scripts/ProxmoxVE/pull/15075)) + +## 2026-06-12 + +### 🆕 New Scripts + + - Twenty ([#15047](https://github.com/community-scripts/ProxmoxVE/pull/15047)) +- Alpine-Cinny ([#15044](https://github.com/community-scripts/ProxmoxVE/pull/15044)) + +### 💾 Core + + - #### ✨ New Features + + - [core] Implement backup and restore functions [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15067](https://github.com/community-scripts/ProxmoxVE/pull/15067)) + +## 2026-06-11 + +### 🆕 New Scripts + + - Clickhouse ([#15045](https://github.com/community-scripts/ProxmoxVE/pull/15045)) + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Manyfold: add new dependency [@MickLesk](https://github.com/MickLesk) ([#15040](https://github.com/community-scripts/ProxmoxVE/pull/15040)) + - OpenArchiver: switch Rebuild Function [@MickLesk](https://github.com/MickLesk) ([#15042](https://github.com/community-scripts/ProxmoxVE/pull/15042)) + - CLIProxyAPI: Save management password to creds file [@tremor021](https://github.com/tremor021) ([#15051](https://github.com/community-scripts/ProxmoxVE/pull/15051)) + - Jotty: Fix wrong path test in config restore [@vhsdream](https://github.com/vhsdream) ([#15038](https://github.com/community-scripts/ProxmoxVE/pull/15038)) + - Fix for cross-seed after node upgrade [@TorinFrancis](https://github.com/TorinFrancis) ([#15025](https://github.com/community-scripts/ProxmoxVE/pull/15025)) + + - #### 🔧 Refactor + + - Alpine-Nextcloud: Upgrade PHP and dependencies in installation script [@MickLesk](https://github.com/MickLesk) ([#15039](https://github.com/community-scripts/ProxmoxVE/pull/15039)) + - [arm64] porting stage 1: set script arm64 statuses to yes [@asylumexp](https://github.com/asylumexp) ([#15052](https://github.com/community-scripts/ProxmoxVE/pull/15052)) + +### 💾 Core + + - #### ✨ New Features + + - misc scripts: add support for arm64 [@asylumexp](https://github.com/asylumexp) ([#12639](https://github.com/community-scripts/ProxmoxVE/pull/12639)) + + - #### 🔧 Refactor + + - [arm64] remove logic for custom debian arm64 template [@asylumexp](https://github.com/asylumexp) ([#15050](https://github.com/community-scripts/ProxmoxVE/pull/15050)) + +### 📚 Documentation + + - (github): Revise script request template [@MickLesk](https://github.com/MickLesk) ([#15058](https://github.com/community-scripts/ProxmoxVE/pull/15058)) + +## 2026-06-10 + +### 🆕 New Scripts + + - Baserow ([#14968](https://github.com/community-scripts/ProxmoxVE/pull/14968)) + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Koillection: Fix update procedure [@tremor021](https://github.com/tremor021) ([#15033](https://github.com/community-scripts/ProxmoxVE/pull/15033)) + +## 2026-06-09 + +### 🆕 New Scripts + + - paperclip ([#14990](https://github.com/community-scripts/ProxmoxVE/pull/14990)) + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - endurain: Install pytz package during backend setup [@MickLesk](https://github.com/MickLesk) ([#15014](https://github.com/community-scripts/ProxmoxVE/pull/15014)) + + - #### 🔧 Refactor + + - Refactor: Proxmox Backup Server - use deb822 [@MickLesk](https://github.com/MickLesk) ([#15013](https://github.com/community-scripts/ProxmoxVE/pull/15013)) + +## 2026-06-08 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - security: Fix HTTP to HTTPS for all package and repository downloads [@MickLesk](https://github.com/MickLesk) ([#15009](https://github.com/community-scripts/ProxmoxVE/pull/15009)) + - homelable: preserve MCP server config across updates [@ferr079](https://github.com/ferr079) ([#14996](https://github.com/community-scripts/ProxmoxVE/pull/14996)) + - changedetection: migrate Python install to uv venv [@ferr079](https://github.com/ferr079) ([#14995](https://github.com/community-scripts/ProxmoxVE/pull/14995)) + + - #### 🔧 Refactor + + - Update Flowwiseai to node 24 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#14999](https://github.com/community-scripts/ProxmoxVE/pull/14999)) + +### 🧰 Tools + + - #### 🐞 Bug Fixes + + - security: Fix MITM RCE vulnerability in microcode scripts (CVE) [@MickLesk](https://github.com/MickLesk) ([#15007](https://github.com/community-scripts/ProxmoxVE/pull/15007)) + +## 2026-06-07 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Immich: use actual installed PostgreSQL version for vchord package [@MickLesk](https://github.com/MickLesk) ([#14989](https://github.com/community-scripts/ProxmoxVE/pull/14989)) + + - #### 🔧 Refactor + + - Navidrome: remove genereic filebrowser addon setup [@MickLesk](https://github.com/MickLesk) ([#14991](https://github.com/community-scripts/ProxmoxVE/pull/14991)) + ## 2026-06-06 ### 🆕 New Scripts diff --git a/CHANGELOG.md b/CHANGELOG.md index 03596b7b0..ca4d2b565 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,6 +62,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit + + + @@ -75,7 +78,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
-

June (6 entries)

+

June (13 entries)

[View June 2026 Changelog](.github/changelogs/2026/06.md) @@ -1049,124 +1052,4 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes - - core: fall back to silent mode when no TTY or whiptail unavailable [@MickLesk](https://github.com/MickLesk) ([#14497](https://github.com/community-scripts/ProxmoxVE/pull/14497)) - -## 2026-05-14 - -### 🆕 New Scripts - - - CLIProxyAPI ([#14443](https://github.com/community-scripts/ProxmoxVE/pull/14443)) - -## 2026-05-13 - -### 🚀 Updated Scripts - - - #### 🐞 Bug Fixes - - - Fix: Broken Manifold update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#14468](https://github.com/community-scripts/ProxmoxVE/pull/14468)) - - SoulSync: Fix update function [@tremor021](https://github.com/tremor021) ([#14465](https://github.com/community-scripts/ProxmoxVE/pull/14465)) - - Reactive-Resume: fix PDF generation timeout in LXC containers [@MickLesk](https://github.com/MickLesk) ([#14416](https://github.com/community-scripts/ProxmoxVE/pull/14416)) - - (calibre-web) Add --no-sandbox for PDF conversion [@jamesmyatt](https://github.com/jamesmyatt) ([#14461](https://github.com/community-scripts/ProxmoxVE/pull/14461)) - -### 💾 Core - - - #### 🔧 Refactor - - - tools.func: encode GitHub tag, refine pin logic, add Codeberg [@MickLesk](https://github.com/MickLesk) ([#14473](https://github.com/community-scripts/ProxmoxVE/pull/14473)) - -## 2026-05-12 - -### 🆕 New Scripts - - - DocuSeal ([#14445](https://github.com/community-scripts/ProxmoxVE/pull/14445)) -- Authentik ([#14440](https://github.com/community-scripts/ProxmoxVE/pull/14440)) - -### 🚀 Updated Scripts - - - #### 🐞 Bug Fixes - - - Save Omada version [@lucacome](https://github.com/lucacome) ([#14433](https://github.com/community-scripts/ProxmoxVE/pull/14433)) - - - #### ✨ New Features - - - OpenCloud: bump version to 6.2.0 [@vhsdream](https://github.com/vhsdream) ([#14451](https://github.com/community-scripts/ProxmoxVE/pull/14451)) - - - #### 🔧 Refactor - - - misc: bump node versions [@CrazyWolf13](https://github.com/CrazyWolf13) ([#14447](https://github.com/community-scripts/ProxmoxVE/pull/14447)) - -## 2026-05-11 - -### 🆕 New Scripts - - - Lychee ([#14424](https://github.com/community-scripts/ProxmoxVE/pull/14424)) - -### 🚀 Updated Scripts - - - #### 🐞 Bug Fixes - - - Termix: fix nginx pid path and log paths on update (#) [@MickLesk](https://github.com/MickLesk) ([#14419](https://github.com/community-scripts/ProxmoxVE/pull/14419)) - - Nginxproxymanager: restore NPM nginx.conf after OpenResty rebuid [@MickLesk](https://github.com/MickLesk) ([#14421](https://github.com/community-scripts/ProxmoxVE/pull/14421)) - - - #### 🔧 Refactor - - - InvestBrain: add commented reverse proxy config hints to .env [@MickLesk](https://github.com/MickLesk) ([#14422](https://github.com/community-scripts/ProxmoxVE/pull/14422)) - -### 🧰 Tools - - - #### 🐞 Bug Fixes - - - Cronmaster: fix unexpected EOF in update_cronmaster script [@MickLesk](https://github.com/MickLesk) ([#14420](https://github.com/community-scripts/ProxmoxVE/pull/14420)) - -## 2026-05-10 - -### 🚀 Updated Scripts - - - #### 🐞 Bug Fixes - - - Save Beszel version [@lucacome](https://github.com/lucacome) ([#14389](https://github.com/community-scripts/ProxmoxVE/pull/14389)) - - karakeep: Fix SERVER_VERSION update [@MickLesk](https://github.com/MickLesk) ([#14378](https://github.com/community-scripts/ProxmoxVE/pull/14378)) - - inspIRCd: Fix service not autostarting [@tremor021](https://github.com/tremor021) ([#14368](https://github.com/community-scripts/ProxmoxVE/pull/14368)) - - - #### 🔧 Refactor - - - refactor: webcheck [@CrazyWolf13](https://github.com/CrazyWolf13) ([#14391](https://github.com/community-scripts/ProxmoxVE/pull/14391)) - -### 💾 Core - - - #### 🐞 Bug Fixes - - - [tools.func]: Pin `pnpm` version [@tremor021](https://github.com/tremor021) ([#14386](https://github.com/community-scripts/ProxmoxVE/pull/14386)) - -## 2026-05-09 - -### 🚀 Updated Scripts - - - #### 🐞 Bug Fixes - - - FlowiseAI: Migrate to pnpm [@MickLesk](https://github.com/MickLesk) ([#14344](https://github.com/community-scripts/ProxmoxVE/pull/14344)) - - Purge openresty [@lucacome](https://github.com/lucacome) ([#14353](https://github.com/community-scripts/ProxmoxVE/pull/14353)) - - Check for release for Sonarr [@lucacome](https://github.com/lucacome) ([#14354](https://github.com/community-scripts/ProxmoxVE/pull/14354)) - - fix(termix-install.sh): add tmpfiles.d persistence and systemd PIDFile path [@runnylogan](https://github.com/runnylogan) ([#14350](https://github.com/community-scripts/ProxmoxVE/pull/14350)) - - ERPNext: start bench Redis services before bench new-site [@MickLesk](https://github.com/MickLesk) ([#14343](https://github.com/community-scripts/ProxmoxVE/pull/14343)) - - [Hotfix]Jotty: use absolute path when creating data dir [@vhsdream](https://github.com/vhsdream) ([#14355](https://github.com/community-scripts/ProxmoxVE/pull/14355)) - -## 2026-05-08 - -### 🚀 Updated Scripts - - - #### 🐞 Bug Fixes - - - wishlist: pin pnpm to v10 to match engine requirements [@MickLesk](https://github.com/MickLesk) ([#14342](https://github.com/community-scripts/ProxmoxVE/pull/14342)) - - [pelican] fix env copy regression [@LetterN](https://github.com/LetterN) ([#14328](https://github.com/community-scripts/ProxmoxVE/pull/14328)) - - fix(homepage): fix ERR_PNPM_IGNORED_BUILDS error [@Sergih28](https://github.com/Sergih28) ([#14315](https://github.com/community-scripts/ProxmoxVE/pull/14315)) - - - #### ✨ New Features - - - tools.func: add setup_nltk as new function [@MickLesk](https://github.com/MickLesk) ([#14314](https://github.com/community-scripts/ProxmoxVE/pull/14314)) - -### 💾 Core - - - #### 🐞 Bug Fixes - - - tools.func: fix meilisearch import-dump background process handling [@MickLesk](https://github.com/MickLesk) ([#14341](https://github.com/community-scripts/ProxmoxVE/pull/14341)) \ No newline at end of file + - core: fall back to silent mode when no TTY or whiptail unavailable [@MickLesk](https://github.com/MickLesk) ([#14497](https://github.com/community-scripts/ProxmoxVE/pull/14497)) \ No newline at end of file From c48ece67f08a03e5b54a238ed2dbaab8614be14c Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 14 Jun 2026 00:25:47 +0000 Subject: [PATCH 13/64] Update CHANGELOG.md (#15098) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca4d2b565..2204ba9fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -483,6 +483,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
+## 2026-06-14 + ## 2026-06-13 ### 🆕 New Scripts From d9e6e6ea3d3a823f908e887903eb2bd30a06f811 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 14 Jun 2026 14:00:10 +0200 Subject: [PATCH 14/64] fix(checkmk): remove stale backup site before creating new backup during update (#15088) --- ct/checkmk.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ct/checkmk.sh b/ct/checkmk.sh index 43ccaf5e1..a9ea34d29 100644 --- a/ct/checkmk.sh +++ b/ct/checkmk.sh @@ -33,6 +33,7 @@ function update_script() { RELEASE="${RELEASE%%+*}" msg_info "Updating checkmk" $STD omd stop monitoring + $STD omd -f rm monitoringbackup 2>/dev/null || true $STD omd cp monitoring monitoringbackup curl_download "/opt/checkmk.deb" "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-community-${RELEASE}_0.$(get_os_info codename)_amd64.deb" $STD apt install -y /opt/checkmk.deb From bcea631c30439716db4f68e5e50cfed2d614f11d Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 14 Jun 2026 14:00:32 +0200 Subject: [PATCH 15/64] Iinvoiceninja: fix nginx setup assets port (#15090) --- install/invoiceninja-install.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/install/invoiceninja-install.sh b/install/invoiceninja-install.sh index 0cc5af74a..cfd2379cb 100644 --- a/install/invoiceninja-install.sh +++ b/install/invoiceninja-install.sh @@ -133,6 +133,8 @@ server { fastcgi_pass unix:/run/php/php8.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; + fastcgi_param HTTP_X_FORWARDED_HOST $http_host; + fastcgi_param HTTP_X_FORWARDED_PROTO $scheme; fastcgi_read_timeout 300; } From 5831cc246ab387c742f5c443cbe23565a51ac69f Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 14 Jun 2026 12:00:36 +0000 Subject: [PATCH 16/64] Update CHANGELOG.md (#15099) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2204ba9fc..f1ca7aa63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -485,6 +485,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-06-14 +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - CheckMK: remove stale backup site before creating new backup during update [@MickLesk](https://github.com/MickLesk) ([#15088](https://github.com/community-scripts/ProxmoxVE/pull/15088)) + ## 2026-06-13 ### 🆕 New Scripts From 4a09cac50626b02d5f38173292c94c3f48d3c95c Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 14 Jun 2026 12:00:59 +0000 Subject: [PATCH 17/64] Update CHANGELOG.md (#15100) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1ca7aa63..ca706ab02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -489,6 +489,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Iinvoiceninja: fix nginx setup assets port [@MickLesk](https://github.com/MickLesk) ([#15090](https://github.com/community-scripts/ProxmoxVE/pull/15090)) - CheckMK: remove stale backup site before creating new backup during update [@MickLesk](https://github.com/MickLesk) ([#15088](https://github.com/community-scripts/ProxmoxVE/pull/15088)) ## 2026-06-13 From f37bf50a4733e44b88603c125e689034ef594810 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Sun, 14 Jun 2026 14:32:06 +0200 Subject: [PATCH 18/64] Refactor (#15096) --- ct/calibre-web.sh | 12 +++--------- ct/certimate.sh | 9 ++------- ct/checkmate.sh | 11 +++-------- ct/cleanuparr.sh | 9 ++------- ct/commafeed.sh | 13 ++----------- ct/configarr.sh | 10 ++++++---- ct/convertx.sh | 13 ++++--------- ct/crafty-controller.sh | 20 +++++++------------- ct/cryptpad.sh | 21 +++++++++------------ ct/dagu.sh | 10 ++-------- ct/dashy.sh | 10 ++-------- ct/databasus.sh | 13 ++----------- ct/dawarich.sh | 15 ++++----------- ct/ddns-updater.sh | 9 ++------- ct/degoog.sh | 10 +++------- ct/discopanel.sh | 11 ++--------- ct/docmost.sh | 16 +++++----------- ct/docuseal.sh | 13 ++++--------- ct/domain-monitor.sh | 8 ++------ ct/donetick.sh | 10 +++------- ct/dynacat.sh | 14 ++++---------- 21 files changed, 73 insertions(+), 184 deletions(-) diff --git a/ct/calibre-web.sh b/ct/calibre-web.sh index 1733a29bf..3c8568d06 100644 --- a/ct/calibre-web.sh +++ b/ct/calibre-web.sh @@ -35,10 +35,8 @@ function update_script() { systemctl stop calibre-web msg_ok "Stopped Service" - msg_info "Backing up Data" - cp -r /opt/calibre-web/app.db /opt/app.db_backup - cp -r /opt/calibre-web/data /opt/data_backup - msg_ok "Backed up Data" + create_backup /opt/calibre-web/app.db \ + /opt/calibre-web/data CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Calibre-Web" "janeczku/calibre-web" "prebuild" "latest" "/opt/calibre-web" "calibre-web*.tar.gz" setup_uv @@ -50,11 +48,7 @@ function update_script() { $STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir -r requirements.txt msg_ok "Installed Dependencies" - msg_info "Restoring Data" - cp /opt/app.db_backup /opt/calibre-web/app.db 2>/dev/null - cp -r /opt/data_backup /opt/calibre-web/data 2>/dev/null - rm -rf /opt/app.db_backup /opt/data_backup - msg_ok "Restored Data" + restore_backup msg_info "Starting Service" systemctl start calibre-web diff --git a/ct/certimate.sh b/ct/certimate.sh index 414fe96b1..bb321aa20 100644 --- a/ct/certimate.sh +++ b/ct/certimate.sh @@ -35,16 +35,11 @@ function update_script() { systemctl stop certimate msg_ok "Stopped Service" - msg_info "Backing up Data" - cp -r /opt/certimate/pb_data /opt/certimate_pb_data_backup - msg_ok "Backed up Data" + create_backup /opt/certimate/pb_data fetch_and_deploy_gh_release "certimate" "certimate-go/certimate" "prebuild" "latest" "/opt/certimate" "certimate_*_linux_amd64.zip" - msg_info "Restoring Data" - cp -r /opt/certimate_pb_data_backup/. /opt/certimate/pb_data - rm -rf /opt/certimate_pb_data_backup - msg_ok "Restored Data" + restore_backup msg_info "Starting Service" systemctl start certimate diff --git a/ct/checkmate.sh b/ct/checkmate.sh index 14fa8420d..471b7e4f7 100644 --- a/ct/checkmate.sh +++ b/ct/checkmate.sh @@ -35,10 +35,8 @@ function update_script() { systemctl stop checkmate-server checkmate-client nginx msg_ok "Stopped Services" - msg_info "Backing up Data" - cp /opt/checkmate/server/.env /opt/checkmate_server.env.bak - [ -f /opt/checkmate/client/.env.local ] && cp /opt/checkmate/client/.env.local /opt/checkmate_client.env.local.bak - msg_ok "Backed up Data" + create_backup /opt/checkmate/server/.env \ + /opt/checkmate/client/.env.local CLEAN_INSTALL=1 fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" "tarball" @@ -56,10 +54,7 @@ function update_script() { VITE_APP_API_BASE_URL="/api/v1" UPTIME_APP_API_BASE_URL="/api/v1" VITE_APP_LOG_LEVEL="warn" $STD npm run build msg_ok "Updated Checkmate Client" - msg_info "Restoring Data" - mv /opt/checkmate_server.env.bak /opt/checkmate/server/.env - [ -f /opt/checkmate_client.env.local.bak ] && mv /opt/checkmate_client.env.local.bak /opt/checkmate/client/.env.local - msg_ok "Restored Data" + restore_backup msg_info "Starting Services" systemctl start checkmate-server checkmate-client nginx diff --git a/ct/cleanuparr.sh b/ct/cleanuparr.sh index a97d8726c..f554e2048 100755 --- a/ct/cleanuparr.sh +++ b/ct/cleanuparr.sh @@ -33,16 +33,11 @@ function update_script() { systemctl stop cleanuparr msg_ok "Stopped Service" - msg_info "Backing up config" - cp -r /opt/cleanuparr/config /opt/cleanuparr_config_backup - msg_ok "Backed up config" + create_backup /opt/cleanuparr/config CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-amd64.zip" - msg_info "Restoring config" - [[ -d /opt/cleanuparr/config ]] && rm -rf /opt/cleanuparr/config - mv /opt/cleanuparr_config_backup /opt/cleanuparr/config - msg_ok "Restored config" + restore_backup msg_info "Starting Service" systemctl start cleanuparr diff --git a/ct/commafeed.sh b/ct/commafeed.sh index 2a6411e46..d842c3c7f 100644 --- a/ct/commafeed.sh +++ b/ct/commafeed.sh @@ -36,20 +36,11 @@ function update_script() { msg_ok "Stopped Service" ensure_dependencies rsync - - if [ -d /opt/commafeed/data ] && [ "$(ls -A /opt/commafeed/data)" ]; then - msg_info "Backing up existing data" - mv /opt/commafeed/data /opt/data.bak - msg_ok "Backed up existing data" - fi + create_backup /opt/commafeed/data CLEAN_INSTALL=1 fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip" - if [ -d /opt/data.bak ] && [ "$(ls -A /opt/data.bak)" ]; then - msg_info "Restoring data" - mv /opt/data.bak /opt/commafeed/data - msg_ok "Restored data" - fi + restore_backup msg_info "Starting Service" systemctl start commafeed diff --git a/ct/configarr.sh b/ct/configarr.sh index f13bf18bf..d8fdcfb32 100644 --- a/ct/configarr.sh +++ b/ct/configarr.sh @@ -33,11 +33,13 @@ function update_script() { systemctl stop configarr-task.timer msg_ok "Stopped Service" - mkdir -p /opt/backup/ - mv /opt/configarr/{config.yml,secrets.yml,.env} /opt/backup/ + create_backup /opt/configarr/config.yml \ + /opt/configarr/secrets.yml \ + /opt/configarr/.env + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "configarr" "raydak-labs/configarr" "prebuild" "latest" "/opt/configarr" "configarr-linux-x64.tar.xz" - mv /opt/backup/{config.yml,secrets.yml,.env} /opt/configarr/ - rm -rf /opt/backup + + restore_backup msg_info "Starting Service" systemctl start configarr-task.timer diff --git a/ct/convertx.sh b/ct/convertx.sh index 96f40fa84..2ec368dc4 100644 --- a/ct/convertx.sh +++ b/ct/convertx.sh @@ -36,19 +36,14 @@ function update_script() { ensure_dependencies libreoffice-writer - msg_info "Move data-Folder" - if [[ -d /opt/convertx/data ]]; then - mv /opt/convertx/data /opt/data - fi - msg_ok "Moved data-Folder" + create_backup /opt/convertx/data fetch_and_deploy_gh_release "ConvertX" "C4illin/ConvertX" "tarball" "latest" "/opt/convertx" + restore_backup + msg_info "Updating ConvertX" - if [[ -d /opt/data ]]; then - mv /opt/data /opt/convertx/data - fi - cd /opt/convertx + cd /opt/convertx $STD bun install msg_ok "Updated ConvertX" diff --git a/ct/crafty-controller.sh b/ct/crafty-controller.sh index 6661cb5ef..7e1118640 100644 --- a/ct/crafty-controller.sh +++ b/ct/crafty-controller.sh @@ -30,20 +30,17 @@ function update_script() { fi RELEASE=$(curl -fsSL "https://gitlab.com/api/v4/projects/20430749/releases" | grep -o '"tag_name":"v[^"]*"' | head -n 1 | sed 's/"tag_name":"v//;s/"//') - if [[ ! -f /opt/crafty-controller_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/crafty-controller_version.txt)" ]]; then + if [[ ! -f /opt/crafty-controller_version.txt ]] || [[ ${RELEASE} != "$(cat /opt/crafty-controller_version.txt)" ]]; then msg_info "Stopping Crafty-Controller" systemctl stop crafty-controller msg_ok "Stopped Crafty-Controller" - msg_info "Creating Backup of config" - cp -a /opt/crafty-controller/crafty/crafty-4/app/config/. /opt/crafty-controller/backup - rm /opt/crafty-controller/backup/version.json - rm /opt/crafty-controller/backup/credits.json - rm /opt/crafty-controller/backup/logging.json - rm /opt/crafty-controller/backup/default.json.example - rm /opt/crafty-controller/backup/motd_format.json - msg_ok "Backup Created" + create_backup /opt/crafty-controller/crafty/crafty-4/app/config/version.json \ + /opt/crafty-controller/crafty/crafty-4/app/config/credits.json \ + /opt/crafty-controller/crafty/crafty-4/app/config/logging.json \ + /opt/crafty-controller/crafty/crafty-4/app/config/default.json.example \ + /opt/crafty-controller/crafty/crafty-4/app/config/motd_format.json msg_info "Updating Crafty-Controller to v${RELEASE}" curl -fsSL "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip" -o $(basename "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip") @@ -58,11 +55,8 @@ function update_script() { echo "${RELEASE}" >"/opt/crafty-controller_version.txt" msg_ok "Updated Crafty-Controller to v${RELEASE}" - msg_info "Restoring Backup of config" - cp -a /opt/crafty-controller/backup/. /opt/crafty-controller/crafty/crafty-4/app/config - rm -rf /opt/crafty-controller/backup + restore_backup chown -R crafty:crafty /opt/crafty-controller/ - msg_ok "Backup Restored" msg_info "Starting Crafty-Controller" systemctl start crafty-controller diff --git a/ct/cryptpad.sh b/ct/cryptpad.sh index abb180246..0480c0b66 100644 --- a/ct/cryptpad.sh +++ b/ct/cryptpad.sh @@ -34,21 +34,18 @@ function update_script() { systemctl stop cryptpad msg_info "Stopped Service" - msg_info "Creating backup" - [ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/ - for dir in blob block customize data datastore www/common/onlyoffice/dist onlyoffice-conf; do - [ -d "/opt/cryptpad/${dir}" ] && mv "/opt/cryptpad/${dir}" "/tmp/cryptpad_${dir//\//_}" - done - msg_ok "Created backup" + create_backup /opt/cryptpad/config/config.js \ + /opt/cryptpad/blob \ + /opt/cryptpad/block \ + /opt/cryptpad/customize \ + /opt/cryptpad/data \ + /opt/cryptpad/datastore \ + /opt/cryptpad/www/common/onlyoffice/dist \ + /opt/cryptpad/onlyoffice-conf CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" "tarball" - msg_info "Restoring backup" - mv /opt/config.js /opt/cryptpad/config/ - for dir in blob block customize data datastore www/common/onlyoffice/dist onlyoffice-conf; do - [ -d "/tmp/cryptpad_${dir//\//_}" ] && mv "/tmp/cryptpad_${dir//\//_}" "/opt/cryptpad/${dir}" - done - msg_ok "Restored backup" + restore_backup msg_info "Updating CryptPad" cd /opt/cryptpad diff --git a/ct/dagu.sh b/ct/dagu.sh index 225242b10..10dd3f067 100644 --- a/ct/dagu.sh +++ b/ct/dagu.sh @@ -35,17 +35,11 @@ function update_script() { systemctl stop dagu msg_ok "Stopped Service" - msg_info "Backing up Data" - cp -r /opt/dagu/data /opt/dagu_data_backup - msg_ok "Backed up Data" + create_backup /opt/dagu/data fetch_and_deploy_gh_release "dagu" "dagucloud/dagu" "prebuild" "latest" "/opt/dagu" "dagu_*_linux_amd64.tar.gz" - msg_info "Restoring Data" - mkdir -p /opt/dagu/data - cp -r /opt/dagu_data_backup/. /opt/dagu/data - rm -rf /opt/dagu_data_backup - msg_ok "Restored Data" + restore_backup msg_info "Starting Service" systemctl start dagu diff --git a/ct/dashy.sh b/ct/dashy.sh index 35e066fad..8d3e53402 100644 --- a/ct/dashy.sh +++ b/ct/dashy.sh @@ -36,10 +36,7 @@ function update_script() { systemctl stop dashy msg_ok "Stopped Service" - msg_info "Backing up user-data" - rm -rf /opt/dashy_user_data_backup - cp -r /opt/dashy/user-data /opt/dashy_user_data_backup - msg_ok "Backed up user-data" + create_backup /opt/dashy/user-data CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dashy" "lissy93/dashy" "prebuild" "latest" "/opt/dashy" "dashy-*.tar.gz" @@ -48,10 +45,7 @@ function update_script() { $STD yarn install --ignore-engines --network-timeout 300000 msg_ok "Updated Dashy" - msg_info "Restoring user-data" - cp -r /opt/dashy_user_data_backup/. /opt/dashy/user-data/ - rm -rf /opt/dashy_user_data_backup - msg_ok "Restored user-data" + restore_backup msg_info "Starting Dashy" systemctl start dashy diff --git a/ct/databasus.sh b/ct/databasus.sh index f45f62386..88f4fb643 100644 --- a/ct/databasus.sh +++ b/ct/databasus.sh @@ -35,12 +35,7 @@ function update_script() { $STD systemctl stop databasus msg_ok "Stopped Databasus" - msg_info "Backing up Configuration" - [[ ! -f /.env && -f /opt/databasus/.env ]] && cp /opt/databasus/.env /.env - chmod 600 /.env - cp /.env /opt/databasus.env.bak - chmod 600 /opt/databasus.env.bak - msg_ok "Backed up Configuration" + create_backup /opt/databasus/.env msg_info "Ensuring Database Clients" # Create PostgreSQL version symlinks for compatibility @@ -87,11 +82,7 @@ function update_script() { chown -R postgres:postgres /opt/databasus msg_ok "Updated Databasus" - msg_info "Restoring Configuration" - cp /opt/databasus.env.bak /.env - rm -f /opt/databasus.env.bak - chmod 600 /.env - msg_ok "Restored Configuration" + restore_backup if ! grep -q "EnvironmentFile=/.env" /etc/systemd/system/databasus.service; then msg_info "Updating Service" diff --git a/ct/dawarich.sh b/ct/dawarich.sh index 86e6c95e1..c34de77e1 100644 --- a/ct/dawarich.sh +++ b/ct/dawarich.sh @@ -37,11 +37,9 @@ function update_script() { systemctl stop dawarich-web dawarich-worker msg_ok "Stopped Services" - msg_info "Backing up Data" - cp -r /opt/dawarich/app/storage /opt/dawarich_storage_backup 2>/dev/null || true - cp /opt/dawarich/app/config/master.key /opt/dawarich_master.key 2>/dev/null || true - cp /opt/dawarich/app/config/credentials.yml.enc /opt/dawarich_credentials.yml.enc 2>/dev/null || true - msg_ok "Backed up Data" + create_backup /opt/dawarich/app/storage \ + /opt/dawarich/app/config/master.key \ + /opt/dawarich/app/config/credentials.yml.enc CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dawarich" "Freika/dawarich" "tarball" "latest" "/opt/dawarich/app" @@ -85,12 +83,7 @@ function update_script() { $STD bundle exec rake data:migrate msg_ok "Ran Migrations" - msg_info "Restoring Data" - cp -r /opt/dawarich_storage_backup/. /opt/dawarich/app/storage/ 2>/dev/null || true - cp /opt/dawarich_master.key /opt/dawarich/app/config/master.key 2>/dev/null || true - cp /opt/dawarich_credentials.yml.enc /opt/dawarich/app/config/credentials.yml.enc 2>/dev/null || true - rm -rf /opt/dawarich_storage_backup /opt/dawarich_master.key /opt/dawarich_credentials.yml.enc - msg_ok "Restored Data" + restore_backup msg_info "Starting Services" systemctl start dawarich-web dawarich-worker diff --git a/ct/ddns-updater.sh b/ct/ddns-updater.sh index aa2016a63..c5d6851aa 100644 --- a/ct/ddns-updater.sh +++ b/ct/ddns-updater.sh @@ -33,16 +33,11 @@ function update_script() { systemctl stop ddns-updater msg_ok "Stopped Service" - msg_info "Backing up Data" - cp -r /opt/ddns-updater/data /opt/ddns-updater_data_backup - msg_ok "Backed up Data" + create_backup /opt/ddns-updater/data CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ddns-updater" "qdm12/ddns-updater" "singlefile" "latest" "/opt/ddns-updater" "ddns-updater_*_linux_amd64" - msg_info "Restoring Data" - cp -r /opt/ddns-updater_data_backup/. /opt/ddns-updater/data/ - rm -rf /opt/ddns-updater_data_backup - msg_ok "Restored Data" + restore_backup msg_info "Starting Service" systemctl start ddns-updater diff --git a/ct/degoog.sh b/ct/degoog.sh index 0dbe0c4d5..dbded5b95 100644 --- a/ct/degoog.sh +++ b/ct/degoog.sh @@ -35,10 +35,8 @@ function update_script() { systemctl stop degoog msg_ok "Stopped Service" - msg_info "Backing up Configuration & Data" - [[ -f /opt/degoog/.env ]] && cp /opt/degoog/.env /opt/degoog.env.bak - [[ -d /opt/degoog/data ]] && mv /opt/degoog/data /opt/degoog_data_backup - msg_ok "Backed up Configuration & Data" + create_backup /opt/degoog/.env \ + /opt/degoog/data if ! command -v bun >/dev/null 2>&1; then msg_info "Installing Bun" @@ -55,9 +53,7 @@ function update_script() { CLEAN_INSTALL=1 fetch_and_deploy_gh_release "degoog" "fccview/degoog" "prebuild" "latest" "/opt/degoog" "degoog_*_prebuild.tar.gz" - msg_info "Restoring Configuration & Data" - [[ -f /opt/degoog.env.bak ]] && mv /opt/degoog.env.bak /opt/degoog/.env - [[ -d /opt/degoog_data_backup ]] && mv /opt/degoog_data_backup /opt/degoog/data + restore_backup if [[ -f /opt/degoog/.env ]]; then grep -q "^DEGOOG_VALKEY_URL=" /opt/degoog/.env && sed -i "s|^DEGOOG_VALKEY_URL=.*|DEGOOG_VALKEY_URL=redis://valkey:6379|" /opt/degoog/.env || echo "DEGOOG_VALKEY_URL=redis://valkey:6379" >>/opt/degoog/.env diff --git a/ct/discopanel.sh b/ct/discopanel.sh index f71b64021..9521b2279 100644 --- a/ct/discopanel.sh +++ b/ct/discopanel.sh @@ -37,19 +37,12 @@ function update_script() { systemctl stop discopanel msg_ok "Stopped Service" - msg_info "Creating Backup" - mkdir -p /opt/discopanel_backup_temp - cp /opt/discopanel/data/discopanel.db /opt/discopanel_backup_temp/discopanel.db - msg_ok "Created Backup" + create_backup /opt/discopanel/data/discopanel.db fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "prebuild" "latest" "/opt/discopanel" "discopanel-linux-amd64.tar.gz" ln -sf /opt/discopanel/discopanel-linux-amd64 /opt/discopanel/discopanel - msg_info "Restoring Data" - mkdir -p /opt/discopanel/data - mv /opt/discopanel_backup_temp/discopanel.db /opt/discopanel/data/discopanel.db - rm -rf /opt/discopanel_backup_temp - msg_ok "Restored Data" + restore_backup msg_info "Starting Service" systemctl start discopanel diff --git a/ct/docmost.sh b/ct/docmost.sh index c50f59c3d..c3392c585 100644 --- a/ct/docmost.sh +++ b/ct/docmost.sh @@ -37,25 +37,19 @@ function update_script() { systemctl stop docmost msg_ok "Stopped Service" - msg_info "Backing up data" - cp /opt/docmost/.env /opt/ - cp -r /opt/docmost/data /opt/ - rm -rf /opt/docmost - msg_ok "Data backed up" + create_backup /opt/docmost/.env \ + /opt/docmost/data fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball" - msg_info "Updating ${APP}" - cd /opt/docmost - mv /opt/.env /opt/docmost/.env - mv /opt/data /opt/docmost/data + restore_backup # Fix: Docmost EE (audit logs etc.) lives in a git submodule that is NOT # included in GitHub tarballs. The community NoopAuditService exists but # is only exported by CoreModule – child modules such as UserModule cannot # resolve it. Making CoreModule @Global() exposes the token app-wide. - if [[ ! -f /opt/docmost/apps/server/src/ee/ee.module.ts ]] \ - && ! grep -q '@Global()' /opt/docmost/apps/server/src/core/core.module.ts 2>/dev/null; then + if [[ ! -f /opt/docmost/apps/server/src/ee/ee.module.ts ]] && + ! grep -q '@Global()' /opt/docmost/apps/server/src/core/core.module.ts 2>/dev/null; then sed -i '/^ Module,$/a\ Global,' /opt/docmost/apps/server/src/core/core.module.ts sed -i '/^@Module({$/i @Global()' /opt/docmost/apps/server/src/core/core.module.ts fi diff --git a/ct/docuseal.sh b/ct/docuseal.sh index e33270257..ee2c6478f 100644 --- a/ct/docuseal.sh +++ b/ct/docuseal.sh @@ -35,24 +35,19 @@ function update_script() { systemctl stop docuseal docuseal-sidekiq msg_ok "Stopped Services" - msg_info "Backing up Data" - cp /opt/docuseal/.env /opt/docuseal.env.bak - [[ -d /opt/docuseal/data ]] && mv /opt/docuseal/data /opt/docuseal_data.bak - msg_ok "Backed up Data" + create_backup /opt/docuseal/.env \ + /opt/docuseal/data CLEAN_INSTALL=1 fetch_and_deploy_gh_release "docuseal" "docusealco/docuseal" "tarball" local required_ruby current_ruby required_ruby=$(grep -m1 '^ruby ' /opt/docuseal/Gemfile | grep -oP '[0-9]+\.[0-9]+\.[0-9]+') current_ruby=$(PATH="/root/.rbenv/bin:/root/.rbenv/shims:${PATH}" rbenv global 2>/dev/null || true) - if [[ -n "$required_ruby" && "$required_ruby" != "$current_ruby" ]]; then + if [[ -n $required_ruby && $required_ruby != "$current_ruby" ]]; then RUBY_VERSION="${required_ruby}" RUBY_INSTALL_RAILS="false" HOME=/root setup_ruby fi - msg_info "Restoring Data" - mv /opt/docuseal.env.bak /opt/docuseal/.env - [[ -d /opt/docuseal_data.bak ]] && mv /opt/docuseal_data.bak /opt/docuseal/data - msg_ok "Restored Data" + restore_backup msg_info "Building Application" cd /opt/docuseal diff --git a/ct/domain-monitor.sh b/ct/domain-monitor.sh index b5ced7a7e..110be28bf 100644 --- a/ct/domain-monitor.sh +++ b/ct/domain-monitor.sh @@ -43,9 +43,7 @@ function update_script() { systemctl stop apache2 msg_info "Service stopped" - msg_info "Creating backup" - mv /opt/domain-monitor/.env /opt - msg_ok "Created backup" + create_backup /opt/domain-monitor/.env setup_composer CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-monitor" "Hosteroid/domain-monitor" "prebuild" "latest" "/opt/domain-monitor" "domain-monitor-v*.zip" @@ -56,9 +54,7 @@ function update_script() { chown -R www-data:www-data /opt/domain-monitor msg_ok "Updated Domain Monitor" - msg_info "Restoring backup" - mv /opt/.env /opt/domain-monitor - msg_ok "Restored backup" + restore_backup msg_info "Restarting Services" systemctl start apache2 diff --git a/ct/donetick.sh b/ct/donetick.sh index bb86e98b7..d1b8771a4 100644 --- a/ct/donetick.sh +++ b/ct/donetick.sh @@ -35,18 +35,14 @@ function update_script() { systemctl stop donetick msg_ok "Stopped Service" - msg_info "Backing Up Configurations" - mv /opt/donetick/config/selfhosted.yaml /opt/donetick/donetick.db /opt - msg_ok "Backed Up Configurations" + create_backup /opt/donetick/config/selfhosted.yaml \ + /opt/donetick/donetick.db CLEAN_INSTALL=1 fetch_and_deploy_gh_release "donetick" "donetick/donetick" "prebuild" "latest" "/opt/donetick" "donetick_Linux_x86_64.tar.gz" - msg_info "Restoring Configurations" - mv /opt/selfhosted.yaml /opt/donetick/config + restore_backup grep -q 'http://localhost"$' /opt/donetick/config/selfhosted.yaml || sed -i '/https:\/\/localhost"$/a\ - "http://localhost"' /opt/donetick/config/selfhosted.yaml grep -q 'capacitor://localhost' /opt/donetick/config/selfhosted.yaml || sed -i '/http:\/\/localhost"$/a\ - "capacitor://localhost"' /opt/donetick/config/selfhosted.yaml - mv /opt/donetick.db /opt/donetick - msg_ok "Restored Configurations" msg_info "Starting Service" systemctl start donetick diff --git a/ct/dynacat.sh b/ct/dynacat.sh index 5f7951bb6..19d14fda6 100644 --- a/ct/dynacat.sh +++ b/ct/dynacat.sh @@ -35,19 +35,13 @@ function update_script() { systemctl stop dynacat msg_ok "Stopped Service" - msg_info "Backing up Data" - cp -r /opt/dynacat/config /opt/dynacat_config_backup - cp -r /opt/dynacat/assets /opt/dynacat_assets_backup - cp -r /opt/dynacat/data /opt/dynacat_data_backup - msg_ok "Backed up Data" + create_backup /opt/dynacat/config \ + /opt/dynacat/assets \ + /opt/dynacat/data CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dynacat" "Panonim/dynacat" "prebuild" "latest" "/opt/dynacat" "dynacat-linux-amd64.tar.gz" - msg_info "Restoring Data" - cp -r /opt/dynacat_config_backup/. /opt/dynacat/config - cp -r /opt/dynacat_assets_backup/. /opt/dynacat/assets - cp -r /opt/dynacat_data_backup/. /opt/dynacat/data - rm -rf /opt/dynacat_config_backup /opt/dynacat_assets_backup /opt/dynacat_data_backup + restore_backup chmod +x /opt/dynacat/dynacat msg_ok "Restored Data" From cfb84ae12d5e048905ce87e9b505747642cfc39f Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 14 Jun 2026 12:32:32 +0000 Subject: [PATCH 19/64] Update CHANGELOG.md (#15101) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca706ab02..08e104123 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -492,6 +492,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - Iinvoiceninja: fix nginx setup assets port [@MickLesk](https://github.com/MickLesk) ([#15090](https://github.com/community-scripts/ProxmoxVE/pull/15090)) - CheckMK: remove stale backup site before creating new backup during update [@MickLesk](https://github.com/MickLesk) ([#15088](https://github.com/community-scripts/ProxmoxVE/pull/15088)) + - #### 🔧 Refactor + + - Refactor: Implement backup functions for scripts C-D [@tremor021](https://github.com/tremor021) ([#15096](https://github.com/community-scripts/ProxmoxVE/pull/15096)) + ## 2026-06-13 ### 🆕 New Scripts From 293d4b73a1ac96d0707b4c9f4856cd6da67847d1 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 15 Jun 2026 10:08:24 +0200 Subject: [PATCH 20/64] core: implement gateway validation for DHCP and static networks (#15107) --- misc/build.func | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/misc/build.func b/misc/build.func index c16d8a17f..2dc50db78 100644 --- a/misc/build.func +++ b/misc/build.func @@ -979,6 +979,20 @@ base_settings() { IPV6_METHOD=${var_ipv6_method:-"none"} GATE=${var_gateway:-""} + + # Guard against invalid gateway combinations from defaults/app vars: + # - DHCP must not force a static gateway + # - Static IPv4 must use a gateway in the same subnet + if [[ "$NET" == "dhcp" && -n "$GATE" ]]; then + msg_warn "Ignoring var_gateway '$GATE' because var_net is 'dhcp'" + GATE="" + elif [[ "$NET" != "dhcp" && -n "$GATE" ]]; then + if ! validate_gateway_in_subnet "$NET" "$GATE"; then + msg_warn "Ignoring var_gateway '$GATE' because it is not in subnet of var_net '$NET'" + GATE="" + fi + fi + APT_CACHER=${var_apt_cacher:-""} APT_CACHER_IP=${var_apt_cacher_ip:-""} From 96d828f379f7190ccdecd2be1744546f1c01ff04 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 15 Jun 2026 10:08:49 +0200 Subject: [PATCH 21/64] Vaultwarden: extend version check for VaultWarden update (#15105) --- ct/vaultwarden.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ct/vaultwarden.sh b/ct/vaultwarden.sh index a33dd40a1..a7d6e598e 100644 --- a/ct/vaultwarden.sh +++ b/ct/vaultwarden.sh @@ -37,6 +37,11 @@ function update_script() { "2" "Set Admin Token") if [ "$UPD" == "1" ]; then + INSTALLED_VERSION="$(/opt/vaultwarden/bin/vaultwarden --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -n1)" + if [[ -n "$INSTALLED_VERSION" ]] && + ! grep -qxF "$INSTALLED_VERSION" "$HOME/.vaultwarden" 2>/dev/null; then + printf '%s\n' "$INSTALLED_VERSION" >"$HOME/.vaultwarden" + fi if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then msg_info "Stopping Service" systemctl stop vaultwarden From a2f987f07b4bc2dc90f25937f0ed2dcadcc2c150 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 08:08:57 +0000 Subject: [PATCH 22/64] Update CHANGELOG.md (#15109) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08e104123..c30982ea4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -483,6 +483,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-06-15 + +### 💾 Core + + - #### 🔧 Refactor + + - core: implement gateway validation for DHCP and static networks [@MickLesk](https://github.com/MickLesk) ([#15107](https://github.com/community-scripts/ProxmoxVE/pull/15107)) + ## 2026-06-14 ### 🚀 Updated Scripts From 4b20b8dab5ecfd4fcc4fbdc49c005ee4de80ebef Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 15 Jun 2026 10:09:14 +0200 Subject: [PATCH 23/64] tools.func: extend mesa-vulkan-drivers and vulkan-tools to installation for ARC GPU's (#15106) --- misc/tools.func | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/misc/tools.func b/misc/tools.func index cbeded9f8..7bc14e104 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -5267,6 +5267,8 @@ _setup_intel_arc() { intel-media-va-driver-non-free \ intel-opencl-icd \ libmfx-gen1.2 \ + mesa-vulkan-drivers \ + vulkan-tools \ vainfo \ intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed" @@ -5301,6 +5303,8 @@ _setup_intel_arc() { ocl-icd-libopencl1 \ libvpl2 \ libmfx-gen1.2 \ + mesa-vulkan-drivers \ + vulkan-tools \ vainfo \ intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed" @@ -5324,6 +5328,8 @@ _setup_intel_modern() { va-driver-all \ intel-media-va-driver \ ocl-icd-libopencl1 \ + mesa-vulkan-drivers \ + vulkan-tools \ vainfo \ intel-gpu-tools 2>/dev/null || msg_warn "Some Intel packages failed" @@ -5358,6 +5364,8 @@ _setup_intel_modern() { $STD apt -y install \ intel-media-va-driver-non-free \ ocl-icd-libopencl1 \ + mesa-vulkan-drivers \ + vulkan-tools \ vainfo \ libmfx-gen1.2 \ intel-gpu-tools 2>/dev/null || msg_warn "Some Intel packages failed" From dee66b996e64d51c1d0f763b0791911714e8fb8b Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 08:09:30 +0000 Subject: [PATCH 24/64] Update CHANGELOG.md (#15110) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c30982ea4..ed4a43cf2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -485,8 +485,18 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-06-15 +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Vaultwarden: extend version check for VaultWarden update [@MickLesk](https://github.com/MickLesk) ([#15105](https://github.com/community-scripts/ProxmoxVE/pull/15105)) + ### 💾 Core + - #### ✨ New Features + + - tools.func: extend mesa-vulkan-drivers and vulkan-tools to installation for ARC GPU's [@MickLesk](https://github.com/MickLesk) ([#15106](https://github.com/community-scripts/ProxmoxVE/pull/15106)) + - #### 🔧 Refactor - core: implement gateway validation for DHCP and static networks [@MickLesk](https://github.com/MickLesk) ([#15107](https://github.com/community-scripts/ProxmoxVE/pull/15107)) From 6762208d6666f65e84bf881a9e1cbd4f321755a6 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 15 Jun 2026 10:09:38 +0200 Subject: [PATCH 25/64] core: improve mirror selection and error handling (#15108) --- misc/build.func | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/misc/build.func b/misc/build.func index 2dc50db78..dea1e3d51 100644 --- a/misc/build.func +++ b/misc/build.func @@ -4393,10 +4393,12 @@ EOF pct exec "$CTID" -- bash -c "apt-get update 2>&1 && apt-get install -y ${_base_pkgs} 2>&1" >>"$BUILD_LOG" 2>&1 || { local failed_mirror failed_mirror=$(pct exec "$CTID" -- bash -c "grep -m1 -oP '(?<=URIs: https?://)[^/]+' /etc/apt/sources.list.d/debian.sources 2>/dev/null || grep -m1 -oP '(?<=deb https?://)[^/]+' /etc/apt/sources.list 2>/dev/null" 2>/dev/null || echo "unknown") - msg_warn "apt-get update failed (${failed_mirror}), trying alternate mirrors..." + msg_warn "apt-get update failed (${failed_mirror})." + msg_custom "ℹ️" "${YW}" "Probing alternate mirrors (this can take 1-2 minutes on network issues)" local mirror_exit=0 pct exec "$CTID" -- env APT_BASE="$_base_pkgs" bash -c ' DISTRO=$(. /etc/os-release 2>/dev/null && echo "$ID" || echo "debian") + echo " Mirror fallback for distro: $DISTRO" if [ "$DISTRO" = "ubuntu" ]; then EU_MIRRORS="de.archive.ubuntu.com fr.archive.ubuntu.com se.archive.ubuntu.com nl.archive.ubuntu.com it.archive.ubuntu.com ch.archive.ubuntu.com mirrors.xtom.de" @@ -4454,15 +4456,21 @@ EOF } # Phase 1: Scan global mirrors first (independent of local CDN issues) + echo " Phase 1/3: Scanning global mirrors for reachability..." OTHERS_OK=$(scan_reachable "$OTHERS") OTHERS_PICK=$(printf "%s\n" $OTHERS_OK | shuf | head -3 | xargs) + if [ -z "$OTHERS_PICK" ]; then + echo " No reachable global mirrors found" + fi + for mirror in $OTHERS_PICK; do echo " Attempting mirror: $mirror" try_mirrors "$mirror" && exit 0 done # Phase 2: Try primary mirror + echo " Phase 2/3: Trying primary mirror..." if [ "$DISTRO" = "ubuntu" ]; then PRIMARY="archive.ubuntu.com" else @@ -4474,9 +4482,14 @@ EOF fi # Phase 3: Fall back to regional mirrors + echo " Phase 3/3: Scanning regional mirrors..." REGIONAL_OK=$(scan_reachable "$REGIONAL") REGIONAL_PICK=$(printf "%s\n" $REGIONAL_OK | shuf | head -3 | xargs) + if [ -z "$REGIONAL_PICK" ]; then + echo " No reachable regional mirrors found" + fi + for mirror in $REGIONAL_PICK; do echo " Attempting mirror: $mirror" try_mirrors "$mirror" && exit 0 @@ -4510,12 +4523,14 @@ EOF msg_warn "Mirror '${custom_mirror}' also failed. Try another or type 'skip'." done if [[ "$custom_mirror" == "skip" ]]; then - msg_error "apt-get base packages installation failed" - install_exit_code=1 + msg_warn "Mirror selection aborted by user ('skip')" + msg_warn "Aborting installation before base package bootstrap" + post_update_to_api "aborted" "130" "force" + install_exit_code=130 fi elif [[ $mirror_exit -ne 0 ]]; then msg_error "apt-get base packages installation failed" - install_exit_code=1 + install_exit_code=100 fi } fi From 3c42589ff048c6105c4cc57e1c49b91cbafd76a2 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 08:10:04 +0000 Subject: [PATCH 27/64] Update CHANGELOG.md (#15112) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed4a43cf2..f000234c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -499,6 +499,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🔧 Refactor + - core: improve mirror selection and error handling [@MickLesk](https://github.com/MickLesk) ([#15108](https://github.com/community-scripts/ProxmoxVE/pull/15108)) - core: implement gateway validation for DHCP and static networks [@MickLesk](https://github.com/MickLesk) ([#15107](https://github.com/community-scripts/ProxmoxVE/pull/15107)) ## 2026-06-14 From 55703ab0ecb5dcacd930f201f32b3349f45b5dc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Mon, 15 Jun 2026 21:33:12 +0200 Subject: [PATCH 28/64] Watcharr: Clean install on update (#15119) * Clean install * Update --- ct/watcharr.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ct/watcharr.sh b/ct/watcharr.sh index 3dd3b1106..149841389 100644 --- a/ct/watcharr.sh +++ b/ct/watcharr.sh @@ -34,9 +34,9 @@ function update_script() { systemctl stop watcharr msg_ok "Stopped Service" - rm -f /opt/watcharr/server/watcharr - rm -rf /opt/watcharr/server/ui - fetch_and_deploy_gh_release "watcharr" "sbondCo/Watcharr" "tarball" + create_backup /opt/watcharr/server/data + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "watcharr" "sbondCo/Watcharr" "tarball" + restore_backup msg_info "Updating Watcharr" cd /opt/watcharr From 77eb109927d817d442d7d057400835e74461457d Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 15 Jun 2026 21:33:23 +0200 Subject: [PATCH 29/64] degoog: add curl-impersonate to script (#15117) * jotty: add curl-impersonate to script * Ensure clean install for curl-impersonate deployment --- ct/degoog.sh | 1 + install/degoog-install.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/ct/degoog.sh b/ct/degoog.sh index dbded5b95..fa98bbf99 100644 --- a/ct/degoog.sh +++ b/ct/degoog.sh @@ -52,6 +52,7 @@ function update_script() { msg_ok "Updated Valkey" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "degoog" "fccview/degoog" "prebuild" "latest" "/opt/degoog" "degoog_*_prebuild.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "curl-impersonate" "lexiforest/curl-impersonate" "prebuild" "latest" "/usr/local/bin" "curl-impersonate-v*.$(uname -m)-linux-gnu.tar.gz" restore_backup diff --git a/install/degoog-install.sh b/install/degoog-install.sh index 4411b2789..2135c809d 100644 --- a/install/degoog-install.sh +++ b/install/degoog-install.sh @@ -27,6 +27,7 @@ ln -sf /root/.bun/bin/bun /usr/local/bin/bun ln -sf /root/.bun/bin/bunx /usr/local/bin/bunx msg_ok "Installed Bun" +fetch_and_deploy_gh_release "curl-impersonate" "lexiforest/curl-impersonate" "prebuild" "latest" "/usr/local/bin" "curl-impersonate-v*.$(uname -m)-linux-gnu.tar.gz" fetch_and_deploy_gh_release "degoog" "fccview/degoog" "prebuild" "latest" "/opt/degoog" "degoog_*_prebuild.tar.gz" msg_info "Setting up degoog" From 16bd4f473b0716d1f37af464c6b87751fd813231 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 19:33:43 +0000 Subject: [PATCH 30/64] Update CHANGELOG.md (#15120) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f000234c6..ef722504e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -489,8 +489,13 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Watcharr: Clean install on update [@tremor021](https://github.com/tremor021) ([#15119](https://github.com/community-scripts/ProxmoxVE/pull/15119)) - Vaultwarden: extend version check for VaultWarden update [@MickLesk](https://github.com/MickLesk) ([#15105](https://github.com/community-scripts/ProxmoxVE/pull/15105)) + - #### ✨ New Features + + - degoog: add curl-impersonate to script [@MickLesk](https://github.com/MickLesk) ([#15117](https://github.com/community-scripts/ProxmoxVE/pull/15117)) + ### 💾 Core - #### ✨ New Features From 7ee47be43692fe654f8e13ed28f228499b03dd09 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Tue, 16 Jun 2026 10:56:29 +0200 Subject: [PATCH 32/64] Add runtime status guard and deleted script stubs (#15125) * Add runtime script status guard and deleted-script stubs. Prevent disabled/deleted scripts from running updates with clear user messages, and ensure deleted ct scripts are stubbed automatically so legacy update commands no longer fail with 404. * Delete ct/ente.sh * Update booklore.sh --- .../delete-pocketbase-entry-on-removal.yml | 143 ++++++++++++++++++ ct/booklore.sh | 15 ++ ct/litellm.sh | 15 ++ ct/minio.sh | 73 +-------- install/minio-install.sh | 95 ------------ misc/build.func | 52 +++++++ 6 files changed, 229 insertions(+), 164 deletions(-) create mode 100644 ct/booklore.sh create mode 100644 ct/litellm.sh delete mode 100644 install/minio-install.sh diff --git a/.github/workflows/delete-pocketbase-entry-on-removal.yml b/.github/workflows/delete-pocketbase-entry-on-removal.yml index 5e6fcee61..c01f47c27 100644 --- a/.github/workflows/delete-pocketbase-entry-on-removal.yml +++ b/.github/workflows/delete-pocketbase-entry-on-removal.yml @@ -27,6 +27,7 @@ jobs: BEFORE="${{ github.event.before }}" AFTER="${{ github.event.after }}" slugs="" + ct_slugs="" # Deleted JSON files: get slug from previous commit deleted_json=$(git diff --name-only --diff-filter=D "$BEFORE" "$AFTER" -- json/ | grep '\.json$' || true) @@ -37,6 +38,14 @@ jobs: done # Deleted script files: derive slug from path + deleted_ct=$(git diff --name-only --diff-filter=D "$BEFORE" "$AFTER" -- ct/ | grep '\.sh$' || true) + for f in $deleted_ct; do + [[ -z "$f" ]] && continue + base="${f##*/}" + base="${base%.sh}" + [[ -n "$base" ]] && ct_slugs="$ct_slugs $base" + done + deleted_sh=$(git diff --name-only --diff-filter=D "$BEFORE" "$AFTER" -- ct/ install/ tools/ turnkey/ vm/ | grep '\.sh$' || true) for f in $deleted_sh; do [[ -z "$f" ]] && continue @@ -51,14 +60,17 @@ jobs: done slugs=$(echo $slugs | xargs -n1 | sort -u | tr '\n' ' ') + ct_slugs=$(echo $ct_slugs | xargs -n1 2>/dev/null | sort -u | tr '\n' ' ') if [[ -z "$slugs" ]]; then echo "No deleted JSON or script files to mark as deleted in PocketBase." echo "count=0" >> "$GITHUB_OUTPUT" exit 0 fi echo "$slugs" > slugs_to_delete.txt + echo "$ct_slugs" > ct_slugs_to_stub.txt echo "count=$(echo $slugs | wc -w)" >> "$GITHUB_OUTPUT" echo "Slugs to mark as deleted: $slugs" + [[ -n "$ct_slugs" ]] && echo "CT stubs to generate: $ct_slugs" - name: Mark as deleted in PocketBase if: steps.slugs.outputs.count != '0' @@ -159,3 +171,134 @@ jobs: })().catch(e => { console.error(e); process.exit(1); }); ENDSCRIPT shell: bash + + - name: Generate CT stubs for deleted scripts + if: steps.slugs.outputs.count != '0' + env: + POCKETBASE_URL: ${{ secrets.POCKETBASE_URL }} + POCKETBASE_COLLECTION: ${{ secrets.POCKETBASE_COLLECTION }} + POCKETBASE_ADMIN_EMAIL: ${{ secrets.POCKETBASE_ADMIN_EMAIL }} + POCKETBASE_ADMIN_PASSWORD: ${{ secrets.POCKETBASE_ADMIN_PASSWORD }} + run: | + if [[ ! -s ct_slugs_to_stub.txt ]]; then + echo "No deleted ct/*.sh files; skipping stub generation." + exit 0 + fi + node << 'ENDSCRIPT' + (async function() { + const fs = require('fs'); + const https = require('https'); + const http = require('http'); + const path = require('path'); + const url = require('url'); + + function request(fullUrl, opts, redirectCount) { + redirectCount = redirectCount || 0; + return new Promise(function(resolve, reject) { + const u = url.parse(fullUrl); + const isHttps = u.protocol === 'https:'; + const body = opts.body; + const options = { + hostname: u.hostname, + port: u.port || (isHttps ? 443 : 80), + path: u.path, + method: opts.method || 'GET', + headers: opts.headers || {} + }; + if (body) options.headers['Content-Length'] = Buffer.byteLength(body); + const lib = isHttps ? https : http; + const req = lib.request(options, function(res) { + if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) { + if (redirectCount >= 5) return reject(new Error('Too many redirects from ' + fullUrl)); + const redirectUrl = url.resolve(fullUrl, res.headers.location); + res.resume(); + resolve(request(redirectUrl, opts, redirectCount + 1)); + return; + } + let data = ''; + res.on('data', function(chunk) { data += chunk; }); + res.on('end', function() { + resolve({ ok: res.statusCode >= 200 && res.statusCode < 300, statusCode: res.statusCode, body: data }); + }); + }); + req.on('error', reject); + if (body) req.write(body); + req.end(); + }); + } + + const raw = process.env.POCKETBASE_URL.replace(/\/$/, ''); + const apiBase = /\/api$/i.test(raw) ? raw : raw + '/api'; + const coll = process.env.POCKETBASE_COLLECTION; + const ctSlugs = fs.readFileSync('ct_slugs_to_stub.txt', 'utf8').trim().split(/\s+/).filter(Boolean); + if (!ctSlugs.length) { + console.log('No ct slugs to process.'); + return; + } + + const authRes = await request(apiBase + '/collections/users/auth-with-password', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + identity: process.env.POCKETBASE_ADMIN_EMAIL, + password: process.env.POCKETBASE_ADMIN_PASSWORD + }) + }); + if (!authRes.ok) throw new Error('Auth failed: ' + authRes.body); + const token = JSON.parse(authRes.body).token; + const recordsUrl = apiBase + '/collections/' + encodeURIComponent(coll) + '/records'; + + for (const slug of ctSlugs) { + const filter = "(slug='" + slug + "')"; + const listRes = await request(recordsUrl + '?filter=' + encodeURIComponent(filter) + '&perPage=1&fields=slug,name,deleted_message', { + headers: { 'Authorization': token } + }); + if (!listRes.ok) { + console.warn('Failed to fetch record for slug "' + slug + '"'); + continue; + } + const list = JSON.parse(listRes.body); + const rec = list.items && list.items[0]; + const appName = (rec && rec.name) ? rec.name : slug; + const deletedMessage = (rec && rec.deleted_message && rec.deleted_message.trim()) + ? rec.deleted_message.trim() + : 'This script was removed and cannot be installed or updated.'; + + const stubPath = path.join('ct', slug + '.sh'); + const content = +`#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE + +APP="${appName.replace(/"/g, '\\"')}" + +header_info "$APP" +variables +color + +msg_error "This script is no longer available in community-scripts." +msg_error "${deletedMessage.replace(/"/g, '\\"')}" +msg_info "More info: https://community-scripts.org/scripts/${slug}" +exit 1 +`; + fs.writeFileSync(stubPath, content); + console.log('Generated stub: ' + stubPath); + } + })().catch(e => { console.error(e); process.exit(1); }); + ENDSCRIPT + shell: bash + + - name: Commit generated stubs + if: steps.slugs.outputs.count != '0' + run: | + if git diff --quiet -- ct; then + echo "No generated ct stubs to commit." + exit 0 + fi + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add ct/*.sh + git commit -m "chore: add deleted script stubs" + git push + shell: bash diff --git a/ct/booklore.sh b/ct/booklore.sh new file mode 100644 index 000000000..ebf96783e --- /dev/null +++ b/ct/booklore.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE + +APP="BookLore" + +header_info "$APP" +variables +color + +msg_error "This script is no longer available in community-scripts." +msg_error "The Booklore or the Grimmory Fork will for now not return to community-scripts. Due to the unstable nature of these projects we decided to remove them and will decide at later point if they come back, which will most likley not happen. Plese do not create Issues for this." +msg_info "More info: https://community-scripts.org/scripts/booklore" +exit 1 diff --git a/ct/litellm.sh b/ct/litellm.sh new file mode 100644 index 000000000..a88fefec8 --- /dev/null +++ b/ct/litellm.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE + +APP="LiteLLM" + +header_info "$APP" +variables +color + +msg_error "This script is no longer available in community-scripts." +msg_error "This script was removed and cannot be installed or updated." +msg_info "More info: https://community-scripts.org/scripts/litellm" +exit 1 diff --git a/ct/minio.sh b/ct/minio.sh index 95b9facbc..cd5e80bd1 100644 --- a/ct/minio.sh +++ b/ct/minio.sh @@ -1,80 +1,15 @@ #!/usr/bin/env bash source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/minio/minio APP="MinIO" -var_tags="${var_tags:-object-storage}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-5}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" -var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -f /usr/local/bin/minio ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - FEATURE_RICH_VERSION="2025-04-22T22-12-26Z" - RELEASE=$(curl -fsSL https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}') - CURRENT_VERSION="" - [[ -f /opt/${APP}_version.txt ]] && CURRENT_VERSION=$(cat /opt/${APP}_version.txt) - RELEASE=$(curl -fsSL https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}') - - if [[ "${CURRENT_VERSION}" == "${FEATURE_RICH_VERSION}" && "${RELEASE}" != "${FEATURE_RICH_VERSION}" ]]; then - echo - echo "You are currently running the last feature-rich community version: ${FEATURE_RICH_VERSION}" - echo "WARNING: Updating to the latest version will REMOVE most management features from the Console UI." - echo "Do you still want to upgrade to the latest version? [y/N]: " - read -n 1 -r - echo - if [[ ! $REPLY =~ ^[Yy]$ ]]; then - msg_ok "No update performed. Staying on the feature-rich version." - exit - fi - fi - - if [[ "${CURRENT_VERSION}" != "${RELEASE}" ]]; then - msg_info "Stopping Service" - systemctl stop minio - msg_ok "Stopped Service" - - msg_info "Updating ${APP} to ${RELEASE}" - mv /usr/local/bin/minio /usr/local/bin/minio_bak - curl -fsSL "https://dl.min.io/server/minio/release/linux-amd64/minio" -o /usr/local/bin/minio - chmod +x /usr/local/bin/minio - rm -f /usr/local/bin/minio_bak - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated ${APP}" - - msg_info "Starting Service" - systemctl start minio - msg_ok "Started Service" - msg_ok "Updated successfully!" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:9000${CL}" +msg_error "This script is no longer available in community-scripts." +msg_error "Repository is archived. Minio is gone" +msg_info "More info: https://community-scripts.org/scripts/minio" +exit 1 diff --git a/install/minio-install.sh b/install/minio-install.sh deleted file mode 100644 index 4596fa9ad..000000000 --- a/install/minio-install.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/minio/minio - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -FEATURE_RICH_VERSION="2025-04-22T22-12-26Z" - -echo -echo "MinIO recently removed many management features from the Console UI." -echo "The last feature-complete version is: $FEATURE_RICH_VERSION" -echo "Latest versions require the paid edition for full UI functionality." -echo -echo "Choose which version to install:" -echo " [N] Feature-rich community version ($FEATURE_RICH_VERSION) [Recommended]" -echo " [Y] Latest version (may lack UI features)" -echo -read -p "Install latest MinIO version? [y/N]: " -n 1 -r -echo -if [[ $REPLY =~ ^[Yy]$ ]]; then - USE_LATEST=true -else - USE_LATEST=false -fi - -msg_info "Setting up MinIO" -if [[ "$USE_LATEST" == "true" ]]; then - RELEASE=$(curl -fsSL https://api.github.com/repos/minio/minio/releases/latest | grep '"tag_name"' | awk -F '"' '{print $4}') - DOWNLOAD_URL="https://dl.min.io/server/minio/release/linux-amd64/minio" -else - RELEASE="$FEATURE_RICH_VERSION" - DOWNLOAD_URL="https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.${FEATURE_RICH_VERSION}" -fi - -curl -fsSL "$DOWNLOAD_URL" -o /usr/local/bin/minio -chmod +x /usr/local/bin/minio -useradd -r minio-user -s /sbin/nologin -mkdir -p /home/minio-user -chown minio-user:minio-user /home/minio-user -mkdir -p /data -chown minio-user:minio-user /data - -MINIO_ADMIN_USER="minioadmin" -MINIO_ADMIN_PASSWORD="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)" - -cat </etc/default/minio -MINIO_ROOT_USER=${MINIO_ADMIN_USER} -MINIO_ROOT_PASSWORD=${MINIO_ADMIN_PASSWORD} -EOF - -{ - echo "" - echo "MinIO Credentials" - echo "MinIO Admin User: $MINIO_ADMIN_USER" - echo "MinIO Admin Password: $MINIO_ADMIN_PASSWORD" -} >>~/minio.creds -echo "${RELEASE}" >/opt/${APPLICATION,,}_version.txt -msg_ok "Setup MinIO" - -msg_info "Creating service" -cat </etc/systemd/system/minio.service -[Unit] -Description=MinIO -Documentation=https://docs.min.io -Wants=network-online.target -After=network-online.target - -[Service] -User=minio-user -Group=minio-user -EnvironmentFile=-/etc/default/minio -ExecStart=/usr/local/bin/minio server --console-address ":9001" /data -Restart=always -RestartSec=5 -LimitNOFILE=65536 - -[Install] -WantedBy=multi-user.target -EOF - -systemctl enable -q --now minio -msg_ok "Service created" - -motd_ssh -customize -cleanup_lxc diff --git a/misc/build.func b/misc/build.func index dea1e3d51..5947cb944 100644 --- a/misc/build.func +++ b/misc/build.func @@ -3645,6 +3645,53 @@ run_addon_updates() { done } + +runtime_script_status_guard() { + local script_slug="${SCRIPT_SLUG:-${NSAPP:-}}" + script_slug="$(echo "$script_slug" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')" + [[ -z "$script_slug" ]] && return 0 + + local api_url="https://db.community-scripts.org/api/collections/script_scripts/records?filter=(slug='${script_slug}')&perPage=1&fields=slug,is_disabled,is_deleted,disable_message,deleted_message" + local response + if ! response=$(curl -fsSL --connect-timeout 2 --max-time 3 "$api_url" 2>/dev/null); then + msg_warn "Script status check is unavailable. Continuing without status verification." + return 0 + fi + + if ! command -v jq >/dev/null 2>&1; then + msg_warn "Missing jq for script status check. Continuing without status verification." + return 0 + fi + + local has_record is_deleted is_disabled deleted_message disable_message info_url + has_record=$(printf '%s' "$response" | jq -r '.items | length') + [[ "$has_record" == "0" ]] && return 0 + + is_deleted=$(printf '%s' "$response" | jq -r '.items[0].is_deleted // false') + is_disabled=$(printf '%s' "$response" | jq -r '.items[0].is_disabled // false') + deleted_message=$(printf '%s' "$response" | jq -r '.items[0].deleted_message // ""') + disable_message=$(printf '%s' "$response" | jq -r '.items[0].disable_message // ""') + info_url="https://community-scripts.org/scripts/${script_slug}" + + if [[ "$is_deleted" == "true" ]]; then + msg_error "This script is no longer available in community-scripts." + [[ -n "$deleted_message" ]] && msg_error "$deleted_message" + [[ -z "$deleted_message" ]] && msg_error "This script was removed and cannot be installed or updated." + msg_info "More info: ${info_url}" + return 1 + fi + + if [[ "$is_disabled" == "true" ]]; then + msg_error "This script is currently disabled in community-scripts." + [[ -n "$disable_message" ]] && msg_error "$disable_message" + [[ -z "$disable_message" ]] && msg_error "Updates and installs are temporarily disabled for this script." + msg_info "More info: ${info_url}" + return 1 + fi + + return 0 +} + # ------------------------------------------------------------------------------ # start() # @@ -3653,9 +3700,11 @@ run_addon_updates() { # - In silent mode: runs update_script with automatic cleanup # - Otherwise: shows update/setting menu and runs update_script with cleanup # ------------------------------------------------------------------------------ + start() { source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) if command -v pveversion >/dev/null 2>&1; then + runtime_script_status_guard || return 0 install_script || return 0 return 0 elif [ ! -z ${PHS_SILENT+x} ] && [[ "${PHS_SILENT}" == "1" ]]; then @@ -3663,6 +3712,7 @@ start() { set_std_mode ensure_profile_loaded get_lxc_ip + runtime_script_status_guard || return 0 update_script run_addon_updates update_motd_ip @@ -3673,6 +3723,7 @@ start() { set_std_mode ensure_profile_loaded get_lxc_ip + runtime_script_status_guard || return 0 update_script run_addon_updates update_motd_ip @@ -3702,6 +3753,7 @@ start() { esac ensure_profile_loaded get_lxc_ip + runtime_script_status_guard || return 0 update_script run_addon_updates update_motd_ip From f13782704e64f1819f1ddafcc063cedcfb3011ea Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 08:57:08 +0000 Subject: [PATCH 33/64] Update CHANGELOG.md (#15128) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef722504e..0c28f33a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -483,6 +483,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-06-16 + +### 🆕 New Scripts + + - Add runtime status guard and deleted script stubs [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15125](https://github.com/community-scripts/ProxmoxVE/pull/15125)) + ## 2026-06-15 ### 🚀 Updated Scripts From e60c1f31c2548c6c66ab9cfc83678ddd13061c05 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner Date: Tue, 16 Jun 2026 11:07:23 +0200 Subject: [PATCH 34/64] Stop spinner for deleted/disabled info messages Co-authored-by: Cursor --- .github/workflows/delete-pocketbase-entry-on-removal.yml | 2 +- ct/booklore.sh | 2 +- ct/litellm.sh | 2 +- ct/minio.sh | 2 +- misc/build.func | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/delete-pocketbase-entry-on-removal.yml b/.github/workflows/delete-pocketbase-entry-on-removal.yml index c01f47c27..03056dc1e 100644 --- a/.github/workflows/delete-pocketbase-entry-on-removal.yml +++ b/.github/workflows/delete-pocketbase-entry-on-removal.yml @@ -279,7 +279,7 @@ color msg_error "This script is no longer available in community-scripts." msg_error "${deletedMessage.replace(/"/g, '\\"')}" -msg_info "More info: https://community-scripts.org/scripts/${slug}" +msg_warn "More info: https://community-scripts.org/scripts/${slug}" exit 1 `; fs.writeFileSync(stubPath, content); diff --git a/ct/booklore.sh b/ct/booklore.sh index ebf96783e..349bb2796 100644 --- a/ct/booklore.sh +++ b/ct/booklore.sh @@ -11,5 +11,5 @@ color msg_error "This script is no longer available in community-scripts." msg_error "The Booklore or the Grimmory Fork will for now not return to community-scripts. Due to the unstable nature of these projects we decided to remove them and will decide at later point if they come back, which will most likley not happen. Plese do not create Issues for this." -msg_info "More info: https://community-scripts.org/scripts/booklore" +msg_warn "More info: https://community-scripts.org/scripts/booklore" exit 1 diff --git a/ct/litellm.sh b/ct/litellm.sh index a88fefec8..16d078f40 100644 --- a/ct/litellm.sh +++ b/ct/litellm.sh @@ -11,5 +11,5 @@ color msg_error "This script is no longer available in community-scripts." msg_error "This script was removed and cannot be installed or updated." -msg_info "More info: https://community-scripts.org/scripts/litellm" +msg_warn "More info: https://community-scripts.org/scripts/litellm" exit 1 diff --git a/ct/minio.sh b/ct/minio.sh index cd5e80bd1..a9ee5c0b1 100644 --- a/ct/minio.sh +++ b/ct/minio.sh @@ -11,5 +11,5 @@ color msg_error "This script is no longer available in community-scripts." msg_error "Repository is archived. Minio is gone" -msg_info "More info: https://community-scripts.org/scripts/minio" +msg_warn "More info: https://community-scripts.org/scripts/minio" exit 1 diff --git a/misc/build.func b/misc/build.func index 5947cb944..8ebda5cbc 100644 --- a/misc/build.func +++ b/misc/build.func @@ -3677,7 +3677,7 @@ runtime_script_status_guard() { msg_error "This script is no longer available in community-scripts." [[ -n "$deleted_message" ]] && msg_error "$deleted_message" [[ -z "$deleted_message" ]] && msg_error "This script was removed and cannot be installed or updated." - msg_info "More info: ${info_url}" + msg_warn "More info: ${info_url}" return 1 fi @@ -3685,7 +3685,7 @@ runtime_script_status_guard() { msg_error "This script is currently disabled in community-scripts." [[ -n "$disable_message" ]] && msg_error "$disable_message" [[ -z "$disable_message" ]] && msg_error "Updates and installs are temporarily disabled for this script." - msg_info "More info: ${info_url}" + msg_warn "More info: ${info_url}" return 1 fi From 29c25a0ab8abc5068ec429c05571e48533ec4456 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner Date: Tue, 16 Jun 2026 13:01:26 +0200 Subject: [PATCH 35/64] bot blacklist --- .github/workflows/close-new-script-prs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/close-new-script-prs.yml b/.github/workflows/close-new-script-prs.yml index d3541e21b..d7b6d2458 100644 --- a/.github/workflows/close-new-script-prs.yml +++ b/.github/workflows/close-new-script-prs.yml @@ -28,6 +28,7 @@ jobs: const allowedBots = [ "push-app-to-main[bot]", "push-app-to-main", + "community-scripts-pr-app" ]; if (allowedBots.includes(author)) { From af7e83300f177ac3b5d7748999c8c9e4ba7fbc81 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 13:26:24 +0200 Subject: [PATCH 36/64] Add kiwix (ct) (#15131) Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> --- ct/headers/kiwix | 6 +++ ct/kiwix.sh | 75 +++++++++++++++++++++++++++++++++++++ install/kiwix-install.sh | 80 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 161 insertions(+) create mode 100644 ct/headers/kiwix create mode 100644 ct/kiwix.sh create mode 100644 install/kiwix-install.sh diff --git a/ct/headers/kiwix b/ct/headers/kiwix new file mode 100644 index 000000000..743f3c30d --- /dev/null +++ b/ct/headers/kiwix @@ -0,0 +1,6 @@ + __ __ _ _ + / //_/(_) __(_) __ + / ,< / / | /| / / / |/_/ + / /| |/ /| |/ |/ / /> < +/_/ |_/_/ |__/|__/_/_/|_| + diff --git a/ct/kiwix.sh b/ct/kiwix.sh new file mode 100644 index 000000000..88016ef4e --- /dev/null +++ b/ct/kiwix.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/kiwix/kiwix-tools + +APP="Kiwix" +var_tags="${var_tags:-documentation;offline}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-512}" +var_disk="${var_disk:-4}" +var_os="${var_os:-ubuntu}" +var_version="${var_version:-24.04}" +var_arm64="${var_arm64:-no}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if ! dpkg -s kiwix-tools &>/dev/null; then + msg_error "No ${APP} Installation Found!" + exit + fi + + CURRENT=$(dpkg-query -W -f='${Version}' kiwix-tools 2>/dev/null) + + msg_info "Updating Package Index" + $STD apt update + msg_ok "Updated Package Index" + + CANDIDATE=$(apt-cache policy kiwix-tools | awk '/Candidate:/{print $2}') + if [[ -z "$CANDIDATE" || "$CANDIDATE" == "(none)" ]]; then + msg_error "No Candidate Version Found for kiwix-tools" + exit + fi + + if [[ "$CURRENT" == "$CANDIDATE" ]]; then + echo "${CURRENT}" >/root/.kiwix + msg_ok "Already on latest version: ${CURRENT}" + exit + fi + + msg_info "Stopping Service" + systemctl stop kiwix-serve + msg_ok "Stopped Service" + + msg_info "Updating Kiwix-Tools" + $STD apt install -y --only-upgrade kiwix-tools + RELEASE=$(dpkg-query -W -f='${Version}' kiwix-tools 2>/dev/null) + echo "${RELEASE}" >/root/.kiwix + msg_ok "Updated Kiwix-Tools" + msg_ok "Updated successfully from ${CURRENT} to ${RELEASE}!" + + msg_info "Starting Service" + systemctl start kiwix-serve + msg_ok "Started Service" + exit +} + +start +build_container +description + +msg_ok "Completed successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}" diff --git a/install/kiwix-install.sh b/install/kiwix-install.sh new file mode 100644 index 000000000..9208c6998 --- /dev/null +++ b/install/kiwix-install.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) | tewalds +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/kiwix/kiwix-tools + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y software-properties-common +msg_ok "Installed Dependencies" + +msg_info "Adding Kiwix PPA" +add-apt-repository -y ppa:kiwixteam/release >>"$(get_active_logfile)" 2>&1 +$STD apt update +msg_ok "Added Kiwix PPA" + +msg_info "Installing Kiwix-Tools" +$STD apt install -y kiwix-tools +RELEASE=$(dpkg -s kiwix-tools 2>/dev/null | awk '/^Version:/{print $2}') +mkdir -p /data +echo "${RELEASE}" >/root/.kiwix +msg_ok "Installed Kiwix-Tools" + +msg_info "Downloading Kiwix Test Archive" +ZIM_BASE_URL="https://download.kiwix.org/zim/wikipedia" +ZIM_FILE="$(CURL_TIMEOUT=60 CURL_CONNECT_TO=15 curl_with_retry "${ZIM_BASE_URL}/" "-" | + grep -oE 'href="speedtest_en_blob_[0-9]{4}-[0-9]{2}\.zim"' | + sed -E 's/^href="|"$//g' | + sort -V | + tail -n 1)" || true + +if [[ -z "${ZIM_FILE}" ]]; then + msg_warn "No Kiwix speedtest ZIM archive found - skipping optional download" +else + ZIM_URL="${ZIM_BASE_URL}/${ZIM_FILE}" + ZIM_TEMP="/data/.${ZIM_FILE}.tmp" + ZIM_TARGET="/data/${ZIM_FILE}" + if ! CURL_TIMEOUT=120 CURL_CONNECT_TO=15 curl_with_retry "${ZIM_URL}" "${ZIM_TEMP}"; then + rm -f "${ZIM_TEMP}" + msg_warn "Failed to download Kiwix ZIM archive - skipping optional download" + ZIM_FILE="" + elif [[ ! -s "${ZIM_TEMP}" ]]; then + rm -f "${ZIM_TEMP}" + msg_warn "Downloaded Kiwix ZIM archive is empty - skipping optional download" + ZIM_FILE="" + else + mv "${ZIM_TEMP}" "${ZIM_TARGET}" + msg_ok "Downloaded Kiwix Test Archive (${ZIM_FILE})" + fi +fi + +msg_info "Creating Service" +cat <<'EOF' >/etc/systemd/system/kiwix-serve.service +[Unit] +Description=Kiwix ZIM Server +After=network.target + +[Service] +Type=simple +ExecStart=/bin/sh -c 'exec /usr/bin/kiwix-serve --port 8080 /data/*.zim' +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now kiwix-serve +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc From 5f5881c757cdad6d612d3f17f1163e9324c7028c Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 11:26:58 +0000 Subject: [PATCH 37/64] Update CHANGELOG.md (#15132) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c28f33a4..433a7a9b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -487,7 +487,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🆕 New Scripts - - Add runtime status guard and deleted script stubs [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15125](https://github.com/community-scripts/ProxmoxVE/pull/15125)) + - Kiwix ([#15131](https://github.com/community-scripts/ProxmoxVE/pull/15131)) +- Add runtime status guard and deleted script stubs [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15125](https://github.com/community-scripts/ProxmoxVE/pull/15125)) ## 2026-06-15 From 691ce33090d16999b09b738768dc5a0933984aa1 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 14:28:15 +0200 Subject: [PATCH 38/64] Add feishin (ct) (#15130) Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> --- ct/feishin.sh | 77 ++++++++++++++++++++++++++++++++++++++ ct/headers/feishin | 6 +++ install/feishin-install.sh | 68 +++++++++++++++++++++++++++++++++ 3 files changed, 151 insertions(+) create mode 100644 ct/feishin.sh create mode 100644 ct/headers/feishin create mode 100644 install/feishin-install.sh diff --git a/ct/feishin.sh b/ct/feishin.sh new file mode 100644 index 000000000..b13b280e5 --- /dev/null +++ b/ct/feishin.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/jeffvli/feishin + +APP="Feishin" +var_tags="${var_tags:-music;player;streaming}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-4096}" +var_disk="${var_disk:-8}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -d /opt/feishin ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "feishin" "jeffvli/feishin"; then + create_backup /opt/feishin/.env + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "feishin" "jeffvli/feishin" "tarball" + + msg_info "Rebuilding Feishin Web" + cd /opt/feishin + #PNPM_VERSION=$(jq -r '.packageManager | ltrimstr("pnpm@")' /opt/feishin/package.json) + $STD corepack enable + $STD corepack prepare "pnpm@10" --activate + $STD pnpm install + $STD pnpm run build:web + msg_ok "Rebuilt Feishin Web" + + restore_backup + + msg_info "Publishing Web Assets" + rm -rf /usr/share/nginx/html + mkdir -p /usr/share/nginx/html + cp -r /opt/feishin/out/web/. /usr/share/nginx/html/ + + set -a + source /opt/feishin/.env + set +a + + envsubst /etc/nginx/conf.d/settings.js + envsubst '${PUBLIC_PATH}' /etc/nginx/sites-available/feishin + ln -sf /etc/nginx/sites-available/feishin /etc/nginx/sites-enabled/feishin + rm -f /etc/nginx/sites-enabled/default + systemctl restart nginx + msg_ok "Published Web Assets" + + msg_ok "Updated successfully!" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9180${CL}" diff --git a/ct/headers/feishin b/ct/headers/feishin new file mode 100644 index 000000000..d8d1ad3f5 --- /dev/null +++ b/ct/headers/feishin @@ -0,0 +1,6 @@ + ______ _ __ _ + / ____/__ (_)____/ /_ (_)___ + / /_ / _ \/ / ___/ __ \/ / __ \ + / __/ / __/ (__ ) / / / / / / / +/_/ \___/_/____/_/ /_/_/_/ /_/ + diff --git a/install/feishin-install.sh b/install/feishin-install.sh new file mode 100644 index 000000000..68669db7d --- /dev/null +++ b/install/feishin-install.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/jeffvli/feishin + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y \ + nginx \ + gettext-base +msg_ok "Installed Dependencies" + +NODE_VERSION="24" setup_nodejs + +fetch_and_deploy_gh_release "feishin" "jeffvli/feishin" "tarball" + +msg_info "Building Feishin Web" +cd /opt/feishin +#PNPM_VERSION=$(jq -r '.packageManager | ltrimstr("pnpm@")' /opt/feishin/package.json) +$STD corepack enable +$STD corepack prepare "pnpm@10" --activate +$STD pnpm install +$STD pnpm run build:web +msg_ok "Built Feishin Web" + +msg_info "Configuring Environment" +cat </opt/feishin/.env +SERVER_NAME=jellyfin +SERVER_LOCK=false +SERVER_TYPE=jellyfin +SERVER_URL=http://localhost:8096 +REMOTE_URL= +LEGACY_AUTHENTICATION=false +ANALYTICS_DISABLED=false +PUBLIC_PATH=/ +EOF +msg_ok "Configured Environment" + +msg_info "Publishing Web Assets" +rm -rf /usr/share/nginx/html +mkdir -p /usr/share/nginx/html +cp -r /opt/feishin/out/web/. /usr/share/nginx/html/ + +set -a +source /opt/feishin/.env +set +a + +envsubst /etc/nginx/conf.d/settings.js +envsubst '${PUBLIC_PATH}' /etc/nginx/sites-available/feishin + +ln -sf /etc/nginx/sites-available/feishin /etc/nginx/sites-enabled/feishin +rm -f /etc/nginx/sites-enabled/default +systemctl enable -q --now nginx +systemctl reload nginx +msg_ok "Published Web Assets" + +motd_ssh +customize +cleanup_lxc From f1ee2a2b91046adac32bf358570d6bbab05ed38b Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 12:28:50 +0000 Subject: [PATCH 39/64] Update CHANGELOG.md (#15138) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 433a7a9b9..d90d8fa66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -487,7 +487,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🆕 New Scripts - - Kiwix ([#15131](https://github.com/community-scripts/ProxmoxVE/pull/15131)) + - Feishin ([#15130](https://github.com/community-scripts/ProxmoxVE/pull/15130)) +- Kiwix ([#15131](https://github.com/community-scripts/ProxmoxVE/pull/15131)) - Add runtime status guard and deleted script stubs [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15125](https://github.com/community-scripts/ProxmoxVE/pull/15125)) ## 2026-06-15 From b0896dbdeb0f12b5679e41b24fd02f1b8b7be1c9 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 14:52:29 +0200 Subject: [PATCH 40/64] Update .app files (#15139) Co-authored-by: GitHub Actions --- ct/headers/booklore | 6 ++++++ ct/headers/litellm | 6 ++++++ 2 files changed, 12 insertions(+) create mode 100644 ct/headers/booklore create mode 100644 ct/headers/litellm diff --git a/ct/headers/booklore b/ct/headers/booklore new file mode 100644 index 000000000..267b0346f --- /dev/null +++ b/ct/headers/booklore @@ -0,0 +1,6 @@ + ____ __ __ + / __ )____ ____ / /__/ / ____ ________ + / __ / __ \/ __ \/ //_/ / / __ \/ ___/ _ \ + / /_/ / /_/ / /_/ / ,< / /___/ /_/ / / / __/ +/_____/\____/\____/_/|_/_____/\____/_/ \___/ + diff --git a/ct/headers/litellm b/ct/headers/litellm new file mode 100644 index 000000000..1360a8ff9 --- /dev/null +++ b/ct/headers/litellm @@ -0,0 +1,6 @@ + __ _ __ __ __ __ ___ + / / (_) /____ / / / / / |/ / + / / / / __/ _ \/ / / / / /|_/ / + / /___/ / /_/ __/ /___/ /___/ / / / +/_____/_/\__/\___/_____/_____/_/ /_/ + From 0683d4942c86442540ff34aa499c8a2373add6de Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Tue, 16 Jun 2026 15:22:06 +0200 Subject: [PATCH 41/64] fix openobserve root password policy failure (#15137) Generate a policy-compliant ZO_ROOT_USER_PASSWORD during install so OpenObserve can start reliably on versions that require lower/upper/digit/special character complexity. --- install/openobserve-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/openobserve-install.sh b/install/openobserve-install.sh index 651fcad52..1057ff629 100644 --- a/install/openobserve-install.sh +++ b/install/openobserve-install.sh @@ -17,7 +17,7 @@ msg_info "Installing OpenObserve" mkdir -p /opt/openobserve/data RELEASE=$(get_latest_github_release "openobserve/openobserve") tar zxf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/v$RELEASE/openobserve-v$RELEASE-linux-amd64.tar.gz) -C /opt/openobserve -ROOT_PASS=$(openssl rand -base64 18 | cut -c1-13) +ROOT_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c9)Aa1!" cat </opt/openobserve/data/.env ZO_ROOT_USER_EMAIL = "admin@example.com" From e08719ac3f4790e3f81abc932e087fe20327cd72 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 13:22:46 +0000 Subject: [PATCH 42/64] Update CHANGELOG.md (#15145) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d90d8fa66..a772e91cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -491,6 +491,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - Kiwix ([#15131](https://github.com/community-scripts/ProxmoxVE/pull/15131)) - Add runtime status guard and deleted script stubs [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15125](https://github.com/community-scripts/ProxmoxVE/pull/15125)) +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - fix: generate policy-compliant OpenObserve root password [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15137](https://github.com/community-scripts/ProxmoxVE/pull/15137)) + ## 2026-06-15 ### 🚀 Updated Scripts From 6c23883d9429e96e5eb6995d4f62f1ad6a42c1a6 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Tue, 16 Jun 2026 16:04:22 +0200 Subject: [PATCH 43/64] Fix InvoiceShelf install/update package manager execution. (#15141) Use Corepack-managed Yarn when available so installs respect upstream packageManager metadata and avoid Yarn classic mismatch failures during both fresh installs and updates. --- ct/invoiceshelf.sh | 10 ++++++++-- install/invoiceshelf-install.sh | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ct/invoiceshelf.sh b/ct/invoiceshelf.sh index e6dee2377..15fa2c368 100644 --- a/ct/invoiceshelf.sh +++ b/ct/invoiceshelf.sh @@ -52,8 +52,14 @@ function update_script() { msg_info "Updating Application" cd /opt/invoiceshelf $STD composer install --no-dev --optimize-autoloader - $STD yarn install - $STD yarn build + if command -v corepack >/dev/null 2>&1; then + $STD corepack enable + $STD corepack yarn install + $STD corepack yarn build + else + $STD yarn install + $STD yarn build + fi $STD php artisan migrate --force $STD php artisan optimize:clear chown -R www-data:www-data /opt/invoiceshelf diff --git a/install/invoiceshelf-install.sh b/install/invoiceshelf-install.sh index 6160c66f5..368fcf6e6 100644 --- a/install/invoiceshelf-install.sh +++ b/install/invoiceshelf-install.sh @@ -39,8 +39,14 @@ sed -i "s|^DB_USERNAME=.*|DB_USERNAME=${PG_DB_USER}|" .env sed -i "s|^DB_PASSWORD=.*|DB_PASSWORD=${PG_DB_PASS}|" .env COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev --optimize-autoloader --no-interaction $STD php artisan key:generate -$STD yarn install -$STD yarn build +if command -v corepack >/dev/null 2>&1; then + $STD corepack enable + $STD corepack yarn install + $STD corepack yarn build +else + $STD yarn install + $STD yarn build +fi mkdir -p storage/framework/{cache,sessions,views} storage/logs bootstrap/cache chown -R www-data:www-data /opt/invoiceshelf chmod -R 775 storage bootstrap/cache From 6b25e35ecf9d1c95835457c7e01c467ff44ea7ce Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 14:05:03 +0000 Subject: [PATCH 44/64] Update CHANGELOG.md (#15146) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a772e91cb..109752f7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -495,6 +495,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Fix InvoiceShelf install/update Yarn package manager mismatch [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15141](https://github.com/community-scripts/ProxmoxVE/pull/15141)) - fix: generate policy-compliant OpenObserve root password [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15137](https://github.com/community-scripts/ProxmoxVE/pull/15137)) ## 2026-06-15 From 4d4e1d7654c07b6f3a8de3904213064e333d10b6 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Tue, 16 Jun 2026 16:43:27 +0200 Subject: [PATCH 45/64] fix storyteller Yarn 4 install mismatch (#15140) Enable Corepack and run Storyteller install/build commands through corepack yarn so the script honors upstream packageManager and avoids Yarn 1 failures. --- ct/storyteller.sh | 5 +++-- install/storyteller-install.sh | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ct/storyteller.sh b/ct/storyteller.sh index 6ac3a38a3..a461a6d02 100644 --- a/ct/storyteller.sh +++ b/ct/storyteller.sh @@ -48,13 +48,14 @@ function update_script() { msg_info "Rebuilding Storyteller" cd /opt/storyteller export NODE_OPTIONS="--max-old-space-size=4096" - $STD yarn install --network-timeout 600000 + $STD corepack enable + $STD corepack yarn install --network-timeout 600000 $STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so export CI=1 export NODE_ENV=production export NEXT_TELEMETRY_DISABLED=1 export SQLITE_NATIVE_BINDING=/opt/storyteller/node_modules/better-sqlite3/build/Release/better_sqlite3.node - $STD yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build + $STD corepack yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build mkdir -p /opt/storyteller/web/.next/standalone/web/.next/static cp -rT /opt/storyteller/web/.next/static /opt/storyteller/web/.next/standalone/web/.next/static if [[ -d /opt/storyteller/web/public ]]; then diff --git a/install/storyteller-install.sh b/install/storyteller-install.sh index e02ee1a6b..3bf66cea6 100644 --- a/install/storyteller-install.sh +++ b/install/storyteller-install.sh @@ -32,7 +32,8 @@ fetch_and_deploy_gl_release "storyteller" "storyteller-platform/storyteller" "ta msg_info "Setting up Storyteller" cd /opt/storyteller -$STD yarn install --network-timeout 600000 +$STD corepack enable +$STD corepack yarn install --network-timeout 600000 $STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so STORYTELLER_SECRET_KEY=$(openssl rand -base64 32) cat </opt/storyteller/.env @@ -58,7 +59,7 @@ export CI=1 export NODE_ENV=production export NEXT_TELEMETRY_DISABLED=1 export SQLITE_NATIVE_BINDING=/opt/storyteller/node_modules/better-sqlite3/build/Release/better_sqlite3.node -$STD yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build +$STD corepack yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build mkdir -p /opt/storyteller/web/.next/standalone/web/.next/static cp -rT /opt/storyteller/web/.next/static /opt/storyteller/web/.next/standalone/web/.next/static if [[ -d /opt/storyteller/web/public ]]; then From 2e8ff7a6c5acfae1e58aa332c1b90086f47374ef Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 14:44:00 +0000 Subject: [PATCH 46/64] Update CHANGELOG.md (#15147) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 109752f7c..a873188ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -495,6 +495,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - fix storyteller install failure with yarn 4 corepack [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15140](https://github.com/community-scripts/ProxmoxVE/pull/15140)) - Fix InvoiceShelf install/update Yarn package manager mismatch [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15141](https://github.com/community-scripts/ProxmoxVE/pull/15141)) - fix: generate policy-compliant OpenObserve root password [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15137](https://github.com/community-scripts/ProxmoxVE/pull/15137)) From 2112e2793e35accfcdd10d725b049647b86de240 Mon Sep 17 00:00:00 2001 From: "Ethan H." <62605642+ethan-hgwr@users.noreply.github.com> Date: Tue, 16 Jun 2026 21:12:02 +0200 Subject: [PATCH 47/64] fix(degoog): use localhost for valkey url (#15149) --- install/degoog-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/degoog-install.sh b/install/degoog-install.sh index 2135c809d..7e120eb2c 100644 --- a/install/degoog-install.sh +++ b/install/degoog-install.sh @@ -40,7 +40,7 @@ DEGOOG_PLUGINS_DIR=/opt/degoog/data/plugins DEGOOG_THEMES_DIR=/opt/degoog/data/themes DEGOOG_ALIASES_FILE=/opt/degoog/data/aliases.json DEGOOG_PLUGIN_SETTINGS_FILE=/opt/degoog/data/plugin-settings.json -DEGOOG_VALKEY_URL=redis://valkey:6379 +DEGOOG_VALKEY_URL=redis://127.0.0.1:6379 DEGOOG_CACHE_MAX_ENTRIES=1000 DEGOOG_CACHE_TTL_MS=43200000 # DEGOOG_SETTINGS_PASSWORDS=changeme From 49b7de22c3c8b1e79392dc2c1ab2009ff70358c3 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 19:12:40 +0000 Subject: [PATCH 48/64] Update CHANGELOG.md (#15150) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a873188ad..dd9084336 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -495,8 +495,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes - - fix storyteller install failure with yarn 4 corepack [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15140](https://github.com/community-scripts/ProxmoxVE/pull/15140)) + - fix(degoog): use localhost for valkey url [@ethan-hgwr](https://github.com/ethan-hgwr) ([#15149](https://github.com/community-scripts/ProxmoxVE/pull/15149)) - Fix InvoiceShelf install/update Yarn package manager mismatch [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15141](https://github.com/community-scripts/ProxmoxVE/pull/15141)) + - fix storyteller install failure with yarn 4 corepack [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15140](https://github.com/community-scripts/ProxmoxVE/pull/15140)) - fix: generate policy-compliant OpenObserve root password [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15137](https://github.com/community-scripts/ProxmoxVE/pull/15137)) ## 2026-06-15 From 4556d40b075005e0472115d8e347370b8ca4fae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Wed, 17 Jun 2026 09:00:40 +0200 Subject: [PATCH 49/64] Pin version (#15156) --- ct/trek.sh | 2 +- install/trek-install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/trek.sh b/ct/trek.sh index 8ad25d7a3..50127e1be 100644 --- a/ct/trek.sh +++ b/ct/trek.sh @@ -32,7 +32,7 @@ function update_script() { NODE_VERSION="24" setup_nodejs - if check_for_gh_release "trek" "mauriceboe/TREK"; then + if check_for_gh_release "trek" "mauriceboe/TREK" "v3.0.22"; then msg_info "Stopping Service" systemctl stop trek msg_ok "Stopped Service" diff --git a/install/trek-install.sh b/install/trek-install.sh index 48656e935..43cb9b86a 100644 --- a/install/trek-install.sh +++ b/install/trek-install.sh @@ -18,7 +18,7 @@ $STD apt install -y build-essential msg_ok "Installed Dependencies" NODE_VERSION="24" setup_nodejs -fetch_and_deploy_gh_release "trek" "mauriceboe/TREK" "tarball" +fetch_and_deploy_gh_release "trek" "mauriceboe/TREK" "tarball" "v3.0.22" msg_info "Building Client" cd /opt/trek/client From d42fd9893ebfa656686fef8aa427e1b998c7729d Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 17 Jun 2026 07:01:06 +0000 Subject: [PATCH 50/64] Update CHANGELOG.md (#15157) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd9084336..7c5afa824 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -483,6 +483,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-06-17 + +### 🚀 Updated Scripts + + - #### 💥 Breaking Changes + + - TREK: Pin version [@tremor021](https://github.com/tremor021) ([#15156](https://github.com/community-scripts/ProxmoxVE/pull/15156)) + ## 2026-06-16 ### 🆕 New Scripts From 59a389fb2dad062c0c42dc362ce289f739a6de8d Mon Sep 17 00:00:00 2001 From: Tobias <96661824+CrazyWolf13@users.noreply.github.com> Date: Wed, 17 Jun 2026 10:12:39 +0200 Subject: [PATCH 51/64] kasm: fix release detection (#15151) --- ct/kasm.sh | 27 +++++++++++++-------------- install/kasm-install.sh | 25 ++++++++++++------------- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/ct/kasm.sh b/ct/kasm.sh index 0b7a8f38e..930e0748f 100644 --- a/ct/kasm.sh +++ b/ct/kasm.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2026 community-scripts ORG -# Author: Omar Minaya +# Author: CrazyWolf13 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://www.kasmweb.com/docs/latest/index.html @@ -16,7 +16,7 @@ var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-0}" var_fuse="${var_fuse:-yes}" var_tun="${var_tun:-yes}" -var_kasm_version="${var_kasm_version:-}" +var_kasm_version="${var_kasm_version:-1.19.0}" header_info "$APP" variables @@ -34,19 +34,18 @@ function update_script() { msg_info "Checking for new version" CURRENT_VERSION=$(readlink -f /opt/kasm/current | awk -F'/' '{print $4}') - KASM_VERSION=$(curl -s https://kasm.com/downloads | grep -oP ']*>.*?' | sed -E 's/<\/?h1[^>]*>//g' | grep -oP '\d+\.\d+\.\d+') - KASM_URL="https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION:-var_kasm_version}.tar.gz" + KASM_URL=$(curl -s https://kasm.com/downloads \ + | grep -oP 'https://kasm-static-content\.s3\.amazonaws\.com/kasm_release_\d+\.\d+\.\d+-latest\.tar\.gz' \ + | head -1) + KASM_VERSION=$(echo "$KASM_URL" | grep -oP '\d+\.\d+\.\d+(?=-latest)') - # KASM_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_[0-9]+\.[0-9]+\.[0-9]+\.[a-z0-9]+\.tar\.gz' | head -n 1) - # if [[ -z "$KASM_URL" ]]; then - # SERVICE_IMAGE_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_service_images_amd64_[0-9]+\.[0-9]+\.[0-9]+\.tar\.gz' | head -n 1) - # if [[ -n "$SERVICE_IMAGE_URL" ]]; then - # KASM_VERSION=$(echo "$SERVICE_IMAGE_URL" | sed -E 's/.*kasm_release_service_images_amd64_([0-9]+\.[0-9]+\.[0-9]+).*/\1/') - # KASM_URL="https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}.tar.gz" - # fi - # else - # KASM_VERSION=$(echo "$KASM_URL" | sed -E 's/.*kasm_release_([0-9]+\.[0-9]+\.[0-9]+).*/\1/') - # fi + # Fallback to predefined version if online lookup failed. + if [[ -z "$KASM_VERSION" ]] || [[ -z "$KASM_URL" ]]; then + msg_warn "Unable to fetch latest Kasm release online, falling back to v${var_kasm_version}" + fi + + KASM_VERSION="${KASM_VERSION:-$var_kasm_version}" + KASM_URL="${KASM_URL:-https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}-latest.tar.gz}" if [[ -z "$KASM_VERSION" ]] || [[ -z "$KASM_URL" ]]; then msg_error "Unable to detect latest Kasm release URL." diff --git a/install/kasm-install.sh b/install/kasm-install.sh index 3b9bafa10..f5dbd024f 100644 --- a/install/kasm-install.sh +++ b/install/kasm-install.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Copyright (c) 2021-2026 community-scripts ORG -# Author: Omar Minaya +# Author: CrazyWolf13 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://www.kasmweb.com/docs/latest/index.html @@ -18,19 +18,18 @@ $STD sh <(curl -fsSL https://get.docker.com/) msg_ok "Installed Docker" msg_info "Detecting latest Kasm Workspaces release" -KASM_VERSION=$(curl -s https://kasm.com/downloads | grep -oP ']*>.*?' | sed -E 's/<\/?h1[^>]*>//g' | grep -oP '\d+\.\d+\.\d+') -KASM_URL="https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION:-var_kasm_version}.tar.gz" +KASM_URL=$(curl -s https://kasm.com/downloads \ + | grep -oP 'https://kasm-static-content\.s3\.amazonaws\.com/kasm_release_\d+\.\d+\.\d+-latest\.tar\.gz' \ + | head -1) +KASM_VERSION=$(echo "$KASM_URL" | grep -oP '\d+\.\d+\.\d+(?=-latest)') -# KASM_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_[0-9]+\.[0-9]+\.[0-9]+\.[a-z0-9]+\.tar\.gz' | head -n 1) -# if [[ -z "$KASM_URL" ]]; then -# SERVICE_IMAGE_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_service_images_amd64_[0-9]+\.[0-9]+\.[0-9]+\.tar\.gz' | head -n 1) -# if [[ -n "$SERVICE_IMAGE_URL" ]]; then -# KASM_VERSION=$(echo "$SERVICE_IMAGE_URL" | sed -E 's/.*kasm_release_service_images_amd64_([0-9]+\.[0-9]+\.[0-9]+).*/\1/') -# KASM_URL="https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}.tar.gz" -# fi -# else -# KASM_VERSION=$(echo "$KASM_URL" | sed -E 's/.*kasm_release_([0-9]+\.[0-9]+\.[0-9]+).*/\1/') -# fi +# Fallback to predefined version if online lookup failed. +if [[ -z "$KASM_VERSION" ]] || [[ -z "$KASM_URL" ]]; then + msg_warn "Unable to fetch latest Kasm release online, falling back to v${var_kasm_version}" +fi + +KASM_VERSION="${KASM_VERSION:-$var_kasm_version}" +KASM_URL="${KASM_URL:-https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}-latest.tar.gz}" if [[ -z "$KASM_VERSION" ]] || [[ -z "$KASM_URL" ]]; then msg_error "Unable to detect latest Kasm release URL." From 00fe32dc3c7c5f91820fab165eedcaa077e3e9e1 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 17 Jun 2026 08:13:04 +0000 Subject: [PATCH 52/64] Update CHANGELOG.md (#15158) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c5afa824..3f78da410 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -487,6 +487,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts + - #### 🐞 Bug Fixes + + - kasm: fix release detection [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15151](https://github.com/community-scripts/ProxmoxVE/pull/15151)) + - #### 💥 Breaking Changes - TREK: Pin version [@tremor021](https://github.com/tremor021) ([#15156](https://github.com/community-scripts/ProxmoxVE/pull/15156)) From 04e6933b3b8a17e06b712696fe47e87f35eb6a33 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Wed, 17 Jun 2026 15:30:38 +0200 Subject: [PATCH 53/64] trek: update install and upgrade workflow for v3.1.0 (#15165) * trek: update install and upgrade workflow Remove the hardcoded release tag and fetch the latest TREK release. Consolidate builds to npm workspaces (shared, client, server), copy client dist into server/public, and install/prune server deps for production. Add libkitinerary dependency and ensure dependencies during upgrade. Implement backup/restore during upgrades and add migration logic that detects the old systemd ExecStart; when present, rewrite trek.service to run the compiled dist via node --require tsconfig-paths/register, add XDG_CACHE_HOME and QT_QPA_PLATFORM env vars, and switch to network-online.target. Installer changes also create data/uploads directories, set additional .env defaults (TZ, LOG_LEVEL, DEFAULT_LANGUAGE, ALLOWED_ORIGINS), and adjust workspace setup steps. * add proxy env --- ct/trek.sh | 79 +++++++++++++++++++++++++++++------------ install/trek-install.sh | 61 +++++++++++++++++++++---------- 2 files changed, 99 insertions(+), 41 deletions(-) diff --git a/ct/trek.sh b/ct/trek.sh index 50127e1be..9d411730d 100644 --- a/ct/trek.sh +++ b/ct/trek.sh @@ -32,48 +32,81 @@ function update_script() { NODE_VERSION="24" setup_nodejs - if check_for_gh_release "trek" "mauriceboe/TREK" "v3.0.22"; then + if check_for_gh_release "trek" "mauriceboe/TREK"; then + MIGRATION=0 + grep -qF "ExecStart=/usr/bin/node --import tsx src/index.ts" \ + /etc/systemd/system/trek.service && MIGRATION=1 + msg_info "Stopping Service" systemctl stop trek msg_ok "Stopped Service" - msg_info "Backing up Data" - cp /opt/trek/server/.env /opt/trek.env.bak - mv /opt/trek/data /opt/trek-data.bak - mv /opt/trek/uploads /opt/trek-uploads.bak - msg_ok "Backed up Data" + ensure_dependencies "libkitinerary-bin" + + create_backup /opt/trek/server/.env \ + /opt/trek/data \ + /opt/trek/uploads CLEAN_INSTALL=1 fetch_and_deploy_gh_release "trek" "mauriceboe/TREK" "tarball" - msg_info "Building Client" - cd /opt/trek/client + msg_info "Building TREK" + cd /opt/trek $STD npm ci - $STD npm run build - mkdir -p /opt/trek/server/public - cp -r /opt/trek/client/dist/* /opt/trek/server/public/ - cp -r /opt/trek/client/public/fonts /opt/trek/server/public/fonts 2>/dev/null || true - msg_ok "Built Client" + $STD npm run build --workspace=shared + $STD npm run build --workspace=client + $STD npm run build --workspace=server + msg_ok "Built TREK" - msg_info "Installing Server Dependencies" - cd /opt/trek/server - $STD npm ci - msg_ok "Installed Server Dependencies" + msg_info "Setting up TREK Workspace" + rm -rf /opt/trek/server/public + mkdir -p /opt/trek/server/public/fonts + cp -a /opt/trek/client/dist/. /opt/trek/server/public/ + cp -a /opt/trek/client/public/fonts/. /opt/trek/server/public/fonts/ + + restore_backup - msg_info "Restoring Data" - mv /opt/trek-data.bak /opt/trek/data - mv /opt/trek-uploads.bak /opt/trek/uploads rm -rf /opt/trek/server/data /opt/trek/server/uploads ln -s /opt/trek/data /opt/trek/server/data ln -s /opt/trek/uploads /opt/trek/server/uploads - cp /opt/trek.env.bak /opt/trek/server/.env - rm -f /opt/trek.env.bak - msg_ok "Restored Data" + + rm -rf /opt/trek/node_modules + cd /opt/trek + $STD npm ci --workspace=server --omit=dev + msg_ok "Set up TREK Workspace" + + if [[ "$MIGRATION" == "1" ]]; then + msg_info "Migrating TREK Service" + cat </etc/systemd/system/trek.service +[Unit] +Description=TREK Travel Planner +Documentation=https://github.com/mauriceboe/TREK +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/trek/server +EnvironmentFile=/opt/trek/server/.env +Environment=XDG_CACHE_HOME=/tmp/trek-kf6-cache +Environment=QT_QPA_PLATFORM=offscreen +ExecStart=/usr/bin/node --require tsconfig-paths/register dist/index.js +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + systemctl daemon-reload + msg_ok "Migrated TREK Service" + fi msg_info "Starting Service" systemctl start trek msg_ok "Started Service" msg_ok "Updated Successfully!" fi + exit } diff --git a/install/trek-install.sh b/install/trek-install.sh index 43cb9b86a..c189afc1b 100644 --- a/install/trek-install.sh +++ b/install/trek-install.sh @@ -14,57 +14,82 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt install -y build-essential +$STD apt install -y \ + build-essential \ + libkitinerary-bin msg_ok "Installed Dependencies" NODE_VERSION="24" setup_nodejs -fetch_and_deploy_gh_release "trek" "mauriceboe/TREK" "tarball" "v3.0.22" +fetch_and_deploy_gh_release "trek" "mauriceboe/TREK" "tarball" -msg_info "Building Client" -cd /opt/trek/client +msg_info "Setup TREK" +cd /opt/trek $STD npm ci -$STD npm run build -msg_ok "Built Client" +$STD npm run build --workspace=shared +$STD npm run build --workspace=client +$STD npm run build --workspace=server +msg_ok "Setup TREK" -msg_info "Setting up Server" -cd /opt/trek/server -$STD npm ci +msg_info "Setting up TREK Workspace" +rm -rf /opt/trek/server/public mkdir -p /opt/trek/server/public -cp -r /opt/trek/client/dist/* /opt/trek/server/public/ -cp -r /opt/trek/client/public/fonts /opt/trek/server/public/fonts 2>/dev/null || true -mkdir -p /opt/trek/{data/logs,uploads/{files,covers,avatars,photos}} -rm -rf /opt/trek/server/data /opt/trek/server/uploads +cp -a /opt/trek/client/dist/. /opt/trek/server/public/ +if [[ -d /opt/trek/client/public/fonts ]]; then + mkdir -p /opt/trek/server/public/fonts + cp -a /opt/trek/client/public/fonts/. /opt/trek/server/public/fonts/ +fi +mkdir -p \ + /opt/trek/data/logs \ + /opt/trek/uploads/files \ + /opt/trek/uploads/covers \ + /opt/trek/uploads/avatars \ + /opt/trek/uploads/photos +rm -rf /opt/trek/server/data +rm -rf /opt/trek/server/uploads ln -s /opt/trek/data /opt/trek/server/data ln -s /opt/trek/uploads /opt/trek/server/uploads +cd /opt/trek +$STD npm prune --omit=dev +msg_ok "Set up TREK Workspace" + +msg_info "Configuring TREK" ENCRYPTION_KEY=$(openssl rand -hex 32) ADMIN_EMAIL="admin@trek.local" ADMIN_PASSWORD=$(openssl rand -base64 18 | tr -dc 'A-Za-z0-9' | head -c 16) cat </opt/trek/server/.env NODE_ENV=production +HOST=0.0.0.0 PORT=3000 ENCRYPTION_KEY=${ENCRYPTION_KEY} ADMIN_EMAIL=${ADMIN_EMAIL} ADMIN_PASSWORD=${ADMIN_PASSWORD} +TZ=UTC +LOG_LEVEL=info +DEFAULT_LANGUAGE=en +ALLOWED_ORIGINS= COOKIE_SECURE=false FORCE_HTTPS=false -LOG_LEVEL=info -TZ=UTC +TRUST_PROXY=1 EOF chmod 600 /opt/trek/server/.env -msg_ok "Set up Server" +msg_ok "Configured TREK" msg_info "Creating Service" cat </etc/systemd/system/trek.service [Unit] Description=TREK Travel Planner -After=network.target +Documentation=https://github.com/mauriceboe/TREK +After=network-online.target +Wants=network-online.target [Service] Type=simple User=root WorkingDirectory=/opt/trek/server EnvironmentFile=/opt/trek/server/.env -ExecStart=/usr/bin/node --import tsx src/index.ts +Environment=XDG_CACHE_HOME=/tmp/trek-kf6-cache +Environment=QT_QPA_PLATFORM=offscreen +ExecStart=/usr/bin/node --require tsconfig-paths/register dist/index.js Restart=on-failure RestartSec=5 From 1d8518b305a38bce3df636382314b7988238cffc Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 17 Jun 2026 13:31:18 +0000 Subject: [PATCH 54/64] Update CHANGELOG.md (#15167) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f78da410..eb81118a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -491,6 +491,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - kasm: fix release detection [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15151](https://github.com/community-scripts/ProxmoxVE/pull/15151)) + - #### ✨ New Features + + - trek: update install and upgrade workflow for v3.1.0 [@MickLesk](https://github.com/MickLesk) ([#15165](https://github.com/community-scripts/ProxmoxVE/pull/15165)) + - #### 💥 Breaking Changes - TREK: Pin version [@tremor021](https://github.com/tremor021) ([#15156](https://github.com/community-scripts/ProxmoxVE/pull/15156)) From 5169c61968998996c545d10bb3bd42947bc7e610 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Wed, 17 Jun 2026 15:34:27 +0200 Subject: [PATCH 55/64] immich public proxy: replace npm install with npm ci for consistent dependency installation (#15166) --- tools/addon/immich-public-proxy.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/addon/immich-public-proxy.sh b/tools/addon/immich-public-proxy.sh index e464382d5..f6d72fd51 100644 --- a/tools/addon/immich-public-proxy.sh +++ b/tools/addon/immich-public-proxy.sh @@ -99,7 +99,7 @@ function update() { msg_info "Installing dependencies" cd "$CONFIG_PATH" - $STD npm install + $STD npm ci msg_ok "Installed dependencies" msg_info "Building ${APP}" @@ -151,7 +151,7 @@ function install() { msg_info "Installing dependencies" cd "$CONFIG_PATH" - $STD npm install + $STD npm ci msg_ok "Installed dependencies" msg_info "Building ${APP}" From 4b80e0db29a845a9a910a2b0ef2219846d79f038 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 17 Jun 2026 13:35:06 +0000 Subject: [PATCH 56/64] Update CHANGELOG.md (#15168) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb81118a6..7660c22db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -499,6 +499,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - TREK: Pin version [@tremor021](https://github.com/tremor021) ([#15156](https://github.com/community-scripts/ProxmoxVE/pull/15156)) +### 🧰 Tools + + - #### 🐞 Bug Fixes + + - immich public proxy: replace npm install with npm ci for consistent dependency installation [@MickLesk](https://github.com/MickLesk) ([#15166](https://github.com/community-scripts/ProxmoxVE/pull/15166)) + ## 2026-06-16 ### 🆕 New Scripts From 3d7fd049fa4e832bd573ea940865354737b9caf1 Mon Sep 17 00:00:00 2001 From: Tom Frenzel <40773830+tomfrenzel@users.noreply.github.com> Date: Wed, 17 Jun 2026 18:11:08 +0200 Subject: [PATCH 57/64] chore(paperless-ngx): pin version to prevent v3 update (#15171) --- ct/paperless-ngx.sh | 7 ++++--- install/paperless-ngx-install.sh | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ct/paperless-ngx.sh b/ct/paperless-ngx.sh index 9328c3522..da6dffd0d 100644 --- a/ct/paperless-ngx.sh +++ b/ct/paperless-ngx.sh @@ -49,7 +49,8 @@ function update_script() { fi fi - if check_for_gh_release "paperless" "paperless-ngx/paperless-ngx"; then + RELEASE="v2.20.15" + if check_for_gh_release "paperless" "paperless-ngx/paperless-ngx" "${RELEASE}" "v3 needs further testing"; then msg_info "Stopping all Paperless-ngx Services" systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue msg_ok "Stopped all Paperless-ngx Services" @@ -63,7 +64,7 @@ function update_script() { msg_ok "Backup completed to $BACKUP_DIR" PYTHON_VERSION="3.13" setup_uv - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "${RELEASE}" "/opt/paperless" "paperless*tar.xz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc" . /etc/os-release @@ -138,7 +139,7 @@ function update_script() { msg_ok "Backup completed to $BACKUP_DIR" PYTHON_VERSION="3.13" setup_uv - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "${RELEASE}" "/opt/paperless" "paperless*tar.xz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc" . /etc/os-release diff --git a/install/paperless-ngx-install.sh b/install/paperless-ngx-install.sh index b7d1745a4..639783a89 100644 --- a/install/paperless-ngx-install.sh +++ b/install/paperless-ngx-install.sh @@ -46,7 +46,7 @@ msg_ok "Installed Dependencies" PG_VERSION="16" setup_postgresql PG_DB_NAME="paperlessdb" PG_DB_USER="paperless" setup_postgresql_db PYTHON_VERSION="3.13" setup_uv -fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz" +fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "v2.20.15" "/opt/paperless" "paperless*tar.xz" msg_info "Setup Paperless-ngx" cd /opt/paperless From a5398b742cc166b2fbc7626ddf62de159e3dfda1 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 17 Jun 2026 16:11:43 +0000 Subject: [PATCH 58/64] Update CHANGELOG.md (#15172) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7660c22db..4913b0b8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -499,6 +499,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - TREK: Pin version [@tremor021](https://github.com/tremor021) ([#15156](https://github.com/community-scripts/ProxmoxVE/pull/15156)) + - #### 🔧 Refactor + + - chore(paperless-ngx): pin version to prevent v3 update [@tomfrenzel](https://github.com/tomfrenzel) ([#15171](https://github.com/community-scripts/ProxmoxVE/pull/15171)) + ### 🧰 Tools - #### 🐞 Bug Fixes From 05823c3cb5cad99e1d7e8ca48eea0d76c565eeac Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Jun 2026 11:53:15 +0200 Subject: [PATCH 59/64] flowise: add deps / uv / python 3.11 (#15177) --- install/flowiseai-install.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/install/flowiseai-install.sh b/install/flowiseai-install.sh index 1af403d16..4291f42a1 100644 --- a/install/flowiseai-install.sh +++ b/install/flowiseai-install.sh @@ -14,12 +14,17 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt install -y build-essential python3-dev +$STD apt install -y \ + build-essential \ + pkg-config msg_ok "Installed Dependencies" +PYTHON_VERSION="3.11" setup_uv NODE_VERSION="24" setup_nodejs msg_info "Installing FlowiseAI (Patience)" +PYTHON_BIN="$(uv python find 3.11)" +export npm_config_python="$PYTHON_BIN" $STD npm install -g flowise \ @opentelemetry/exporter-trace-otlp-grpc \ @opentelemetry/exporter-trace-otlp-proto \ From ca95941cd9ab763ceea3eee6ed648d45db9dca7a Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 18 Jun 2026 09:53:40 +0000 Subject: [PATCH 60/64] Update CHANGELOG.md (#15179) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4913b0b8d..d85b825e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -483,6 +483,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-06-18 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - flowise: add deps / uv / python 3.11 [@MickLesk](https://github.com/MickLesk) ([#15177](https://github.com/community-scripts/ProxmoxVE/pull/15177)) + ## 2026-06-17 ### 🚀 Updated Scripts From e9b6af3531c8a64597e0edba7309002d11f9ff68 Mon Sep 17 00:00:00 2001 From: Tobias <96661824+CrazyWolf13@users.noreply.github.com> Date: Thu, 18 Jun 2026 11:55:28 +0200 Subject: [PATCH 61/64] refactor: crafty-controller (#15178) * refactor: crafty-controller * refactor: crafty-controller --- ct/crafty-controller.sh | 41 ++++++++++++---------------- install/crafty-controller-install.sh | 16 +++-------- 2 files changed, 22 insertions(+), 35 deletions(-) diff --git a/ct/crafty-controller.sh b/ct/crafty-controller.sh index 7e1118640..b783fbea2 100644 --- a/ct/crafty-controller.sh +++ b/ct/crafty-controller.sh @@ -29,42 +29,37 @@ function update_script() { exit fi - RELEASE=$(curl -fsSL "https://gitlab.com/api/v4/projects/20430749/releases" | grep -o '"tag_name":"v[^"]*"' | head -n 1 | sed 's/"tag_name":"v//;s/"//') - if [[ ! -f /opt/crafty-controller_version.txt ]] || [[ ${RELEASE} != "$(cat /opt/crafty-controller_version.txt)" ]]; then - + if check_for_gl_release "Crafty-Controller" "crafty-controller/crafty-4"; then msg_info "Stopping Crafty-Controller" systemctl stop crafty-controller msg_ok "Stopped Crafty-Controller" - create_backup /opt/crafty-controller/crafty/crafty-4/app/config/version.json \ - /opt/crafty-controller/crafty/crafty-4/app/config/credits.json \ - /opt/crafty-controller/crafty/crafty-4/app/config/logging.json \ - /opt/crafty-controller/crafty/crafty-4/app/config/default.json.example \ - /opt/crafty-controller/crafty/crafty-4/app/config/motd_format.json + create_backup \ + "/opt/crafty-controller/crafty/crafty-4/app/config/db" \ + "/opt/crafty-controller/crafty/crafty-4/app/config/config.json" \ + "/opt/crafty-controller/crafty/crafty-4/app/config/web" \ + "/opt/crafty-controller/crafty/crafty-4/servers" \ + "/opt/crafty-controller/crafty/crafty-4/backups" \ + "/opt/crafty-controller/crafty/crafty-4/import" - msg_info "Updating Crafty-Controller to v${RELEASE}" - curl -fsSL "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip" -o $(basename "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip") - $STD unzip crafty-4-v"${RELEASE}".zip - cp -a crafty-4-v"${RELEASE}"/. /opt/crafty-controller/crafty/crafty-4/ - rm -rf crafty-4-v"${RELEASE}" - cd /opt/crafty-controller/crafty/crafty-4 - sudo -u crafty bash -c ' - source /opt/crafty-controller/crafty/.venv/bin/activate - pip3 install --no-cache-dir -r requirements.txt - ' &>/dev/null - echo "${RELEASE}" >"/opt/crafty-controller_version.txt" - msg_ok "Updated Crafty-Controller to v${RELEASE}" + CLEAN_INSTALL=1 fetch_and_deploy_gl_release "Crafty-Controller" "crafty-controller/crafty-4" "tarball" "latest" "/opt/crafty-controller/crafty/crafty-4" restore_backup - chown -R crafty:crafty /opt/crafty-controller/ + + msg_info "Updating Python dependencies" + chown -R crafty:crafty /opt/crafty-controller + cd /opt/crafty-controller/crafty/crafty-4 + $STD sudo -u crafty bash -c ' + source /opt/crafty-controller/crafty/.venv/bin/activate + pip3 install --no-cache-dir -r requirements.txt + ' + msg_ok "Updated Python dependencies" msg_info "Starting Crafty-Controller" systemctl start crafty-controller msg_ok "Started Crafty-Controller" msg_ok "Updated successfully!" - else - msg_ok "No update required. ${APP} is already at v${RELEASE}" fi exit } diff --git a/install/crafty-controller-install.sh b/install/crafty-controller-install.sh index 904332147..d9223590f 100644 --- a/install/crafty-controller-install.sh +++ b/install/crafty-controller-install.sh @@ -16,29 +16,22 @@ update_os msg_info "Setting up TemurinJDK" setup_java $STD apt install -y temurin-{8,11,17,21,25}-jre -sudo update-alternatives --set java /usr/lib/jvm/temurin-25-jre-amd64/bin/java +$STD update-alternatives --set java /usr/lib/jvm/temurin-25-jre-amd64/bin/java msg_ok "Installed TemurinJDK" msg_info "Setup Python3" $STD apt install -y \ - python3 \ python3-dev \ python3-pip \ python3-venv rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED msg_ok "Setup Python3" -msg_info "Installing Crafty-Controller (Patience)" useradd crafty -m -s /bin/bash -cd /opt mkdir -p /opt/crafty-controller/crafty /opt/crafty-controller/server -RELEASE=$(curl -fsSL "https://gitlab.com/api/v4/projects/20430749/releases" | grep -o '"tag_name":"v[^"]*"' | head -n 1 | sed 's/"tag_name":"v//;s/"//') -echo "${RELEASE}" >"/opt/crafty-controller_version.txt" -curl -fsSL "https://gitlab.com/crafty-controller/crafty-4/-/archive/v${RELEASE}/crafty-4-v${RELEASE}.zip" -o "crafty-4-v${RELEASE}.zip" -$STD unzip crafty-4-v"${RELEASE}".zip -cp -a crafty-4-v"${RELEASE}"/. /opt/crafty-controller/crafty/crafty-4/ -rm -rf crafty-4-v"${RELEASE}" +fetch_and_deploy_gl_release "Crafty-Controller" "crafty-controller/crafty-4" "tarball" "latest" "/opt/crafty-controller/crafty/crafty-4" +msg_info "Installing Crafty-Controller dependencies (Patience)" cd /opt/crafty-controller/crafty python3 -m venv .venv chown -R crafty:crafty /opt/crafty-controller/ @@ -47,7 +40,7 @@ $STD sudo -u crafty bash -c ' cd /opt/crafty-controller/crafty/crafty-4 pip3 install --no-cache-dir -r requirements.txt ' -msg_ok "Installed Craft-Controller and dependencies" +msg_ok "Installed Crafty-Controller dependencies" msg_info "Setting up service" cat </etc/systemd/system/crafty-controller.service @@ -80,7 +73,6 @@ if [[ -f "$CREDS_FILE" ]]; then } >>~/crafty-controller.creds fi msg_ok "Service started" - motd_ssh customize cleanup_lxc From d8640aeb4c22c4261fb6c3e555d01813747afd28 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 18 Jun 2026 09:56:07 +0000 Subject: [PATCH 62/64] Update CHANGELOG.md (#15180) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d85b825e6..c2cdefe39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -491,6 +491,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - flowise: add deps / uv / python 3.11 [@MickLesk](https://github.com/MickLesk) ([#15177](https://github.com/community-scripts/ProxmoxVE/pull/15177)) + - #### 💥 Breaking Changes + + - refactor: crafty-controller [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15178](https://github.com/community-scripts/ProxmoxVE/pull/15178)) + ## 2026-06-17 ### 🚀 Updated Scripts From 34651702342b0a2096337459acb4d27c8f558066 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Jun 2026 12:51:44 +0200 Subject: [PATCH 63/64] Downgrade Node.js version to 22 for compatibility --- install/flowiseai-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/flowiseai-install.sh b/install/flowiseai-install.sh index 4291f42a1..769d734fd 100644 --- a/install/flowiseai-install.sh +++ b/install/flowiseai-install.sh @@ -20,7 +20,7 @@ $STD apt install -y \ msg_ok "Installed Dependencies" PYTHON_VERSION="3.11" setup_uv -NODE_VERSION="24" setup_nodejs +NODE_VERSION="22" setup_nodejs #needed because better-sql break msg_info "Installing FlowiseAI (Patience)" PYTHON_BIN="$(uv python find 3.11)" From 6275928a8179574399ea9c25efec5654a06ace4f Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Jun 2026 12:52:04 +0200 Subject: [PATCH 64/64] Downgrade Node.js version from 24 to 22 --- ct/flowiseai.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/flowiseai.sh b/ct/flowiseai.sh index 4e7e139dc..7d4c6468e 100644 --- a/ct/flowiseai.sh +++ b/ct/flowiseai.sh @@ -29,7 +29,7 @@ function update_script() { exit fi - NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs + NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs msg_info "Updating FlowiseAI (this may take some time)" systemctl stop flowise