From e2e7f0722fa51016672b78b430f41bd390421460 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Apr 2026 09:04:01 +0200 Subject: [PATCH 001/102] homelable: fix install failure by correcting password-reset chmod target (#13894) * Initial plan * fix(homelable): correct password reset script chmod path Agent-Logs-Url: https://github.com/community-scripts/ProxmoxVE/sessions/6227f182-739b-4c0b-9b1f-be73074924d2 Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com> --- install/homelable-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/homelable-install.sh b/install/homelable-install.sh index 7146cd24e..e356ab5c8 100644 --- a/install/homelable-install.sh +++ b/install/homelable-install.sh @@ -66,7 +66,7 @@ sed -i "s|^AUTH_PASSWORD_HASH=.*|AUTH_PASSWORD_HASH='${HASH}'|" /opt/homelable/b systemctl restart homelable echo "Password updated and service restarted successfully!" EOF -chmod +x /opt/homelable/change_password.sh +chmod +x /root/change_password.sh msg_ok "Created Password Reset Utility" msg_info "Building Frontend" From 4d2d6edefe7a69a447e376cb1a2067ae8be17331 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, 21 Apr 2026 07:04:24 +0000 Subject: [PATCH 002/102] Update CHANGELOG.md (#13898) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2563d6531..9c212543b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -445,6 +445,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-04-21 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - homelable: fix install failure by correcting password-reset chmod target [@Copilot](https://github.com/Copilot) ([#13894](https://github.com/community-scripts/ProxmoxVE/pull/13894)) + ## 2026-04-20 ### πŸ†• New Scripts From 55bad2aa407cd6fef029043e431b3f575f0f0194 Mon Sep 17 00:00:00 2001 From: Chris Date: Tue, 21 Apr 2026 03:11:26 -0400 Subject: [PATCH 003/102] OpenCloud: Pin version to 6.1.0 (#13890) --- ct/opencloud.sh | 2 +- install/opencloud-install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/opencloud.sh b/ct/opencloud.sh index 449941145..6fb676546 100644 --- a/ct/opencloud.sh +++ b/ct/opencloud.sh @@ -29,7 +29,7 @@ function update_script() { exit fi - RELEASE="v6.0.0" + RELEASE="v6.1.0" if check_for_gh_release "OpenCloud" "opencloud-eu/opencloud" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then msg_info "Stopping services" systemctl stop opencloud opencloud-wopi diff --git a/install/opencloud-install.sh b/install/opencloud-install.sh index f98394514..8181eb060 100644 --- a/install/opencloud-install.sh +++ b/install/opencloud-install.sh @@ -64,7 +64,7 @@ $STD sudo -u cool coolconfig set-admin-password --user=admin --password="$COOLPA echo "$COOLPASS" >~/.coolpass msg_ok "Installed Collabora Online" -fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "v6.0.0" "/usr/bin" "opencloud-*-linux-amd64" +fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "v6.1.0" "/usr/bin" "opencloud-*-linux-amd64" mv /usr/bin/OpenCloud /usr/bin/opencloud msg_info "Configuring OpenCloud" From 43b03474463de0cf0fc8b956b8cd0f5d60b8975b 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, 21 Apr 2026 07:11:52 +0000 Subject: [PATCH 004/102] Update CHANGELOG.md (#13899) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c212543b..9b3203443 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -449,6 +449,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸš€ Updated Scripts + - OpenCloud: Pin version to 6.1.0 [@vhsdream](https://github.com/vhsdream) ([#13890](https://github.com/community-scripts/ProxmoxVE/pull/13890)) + - #### 🐞 Bug Fixes - homelable: fix install failure by correcting password-reset chmod target [@Copilot](https://github.com/Copilot) ([#13894](https://github.com/community-scripts/ProxmoxVE/pull/13894)) From 7666519557af4149d4b78cd8e07d54b9d1f999ec 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, 21 Apr 2026 10:37:48 +0200 Subject: [PATCH 005/102] Add foldergram (ct) (#13900) Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> --- ct/foldergram.sh | 61 ++++++++++++++++++++++++++++++++ install/foldergram-install.sh | 65 +++++++++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 ct/foldergram.sh create mode 100644 install/foldergram-install.sh diff --git a/ct/foldergram.sh b/ct/foldergram.sh new file mode 100644 index 000000000..47c4605d9 --- /dev/null +++ b/ct/foldergram.sh @@ -0,0 +1,61 @@ +#!/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: SlaviΕ‘a AreΕΎina (tremor021) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/foldergram/foldergram + +APP="Foldergram" +var_tags="${var_tags:-photos}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-4}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +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/foldergram ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "foldergram" "foldergram/foldergram"; then + msg_info "Stopping Service" + systemctl stop foldergram + msg_ok "Stopped Service" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "foldergram" "foldergram/foldergram" "tarball" + + msg_info "Installing Foldergram" + cd /opt/foldergram + $STD pnpm install --frozen-lockfile + $STD pnpm run build + msg_ok "Installed Foldergram" + + msg_info "Starting Service" + systemctl start foldergram + msg_ok "Started Service" + msg_ok "Updated successfully!" + fi + cleanup_lxc + 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}:4141${CL}" diff --git a/install/foldergram-install.sh b/install/foldergram-install.sh new file mode 100644 index 000000000..895a619a8 --- /dev/null +++ b/install/foldergram-install.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: SlaviΕ‘a AreΕΎina (tremor021) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/foldergram/foldergram + +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 --no-install-recommends ffmpeg +msg_ok "Installed Dependencies" + +NODE_VERSION=25 NODE_MODULE="corepack" setup_nodejs + +fetch_and_deploy_gh_release "foldergram" "foldergram/foldergram" "tarball" + +msg_info "Configuring Foldergram" +export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 +$STD corepack enable +cd /opt/foldergram +$STD pnpm install +$STD pnpm run build +mkdir -p /opt/foldergram_media +cat </opt/foldergram_media/foldergram.env +NODE_ENV=production +SERVER_PORT=4141 +DATA_ROOT=/opt/foldergram_media +GALLERY_ROOT=/opt/foldergram_media/gallery +DB_DIR=/opt/foldergram_media/db +THUMBNAILS_DIR=/opt/foldergram_media/thumbnails +PREVIEWS_DIR=/opt/foldergram_media/previews +IMAGE_DETAIL_SOURCE=preview +DERIVATIVE_MODE=eager +GALLERY_EXCLUDED_FOLDERS= +EOF +msg_ok "Configured Foldergram" + +msg_info "Creating services" +cat </etc/systemd/system/foldergram.service +[Unit] +Description=Foldergram Service +After=network.target + +[Service] +WorkingDirectory=/opt/foldergram +ExecStart=/usr/bin/pnpm start +Restart=always +EnvironmentFile=/opt/foldergram_media/foldergram.env + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now foldergram +msg_ok "Created services" + +motd_ssh +customize +cleanup_lxc From 323222a963d1d837ca96cf795ea8e3b0bceda05d 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, 21 Apr 2026 08:38:14 +0000 Subject: [PATCH 006/102] Update CHANGELOG.md (#13905) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b3203443..5368daaa8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -447,6 +447,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-04-21 +### πŸ†• New Scripts + + - foldergram ([#13900](https://github.com/community-scripts/ProxmoxVE/pull/13900)) + ### πŸš€ Updated Scripts - OpenCloud: Pin version to 6.1.0 [@vhsdream](https://github.com/vhsdream) ([#13890](https://github.com/community-scripts/ProxmoxVE/pull/13890)) From 9293dfaa82b612156d292be2bd85a6a0eca5a51b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Tue, 21 Apr 2026 10:38:16 +0200 Subject: [PATCH 007/102] Update dependencies (#13901) --- ct/domain-locker.sh | 70 ++++++++++++++++---------------- install/domain-locker-install.sh | 4 ++ 2 files changed, 40 insertions(+), 34 deletions(-) diff --git a/ct/domain-locker.sh b/ct/domain-locker.sh index 6eb67c5e6..8f08a02fa 100644 --- a/ct/domain-locker.sh +++ b/ct/domain-locker.sh @@ -20,41 +20,43 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/domain-locker ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - if check_for_gh_release "domain-locker" "Lissy93/domain-locker"; then - msg_info "Stopping Service" - systemctl stop domain-locker - msg_info "Service stopped" - - PG_VERSION="17" setup_postgresql - NODE_VERSION="22" setup_nodejs - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-locker" "Lissy93/domain-locker" "tarball" - - msg_info "Installing Modules (patience)" - cd /opt/domain-locker - $STD npm install - msg_ok "Installed Modules" - - msg_info "Building Domain-Locker (a lot of patience)" - set -a - source /opt/domain-locker.env - set +a - $STD npm run build - msg_info "Built Domain-Locker" - - msg_info "Restarting Services" - systemctl start domain-locker - msg_ok "Restarted Services" - msg_ok "Updated successfully!" - fi + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/domain-locker ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + + ensure_dependencies whois + + if check_for_gh_release "domain-locker" "Lissy93/domain-locker"; then + msg_info "Stopping Service" + systemctl stop domain-locker + msg_info "Service stopped" + + PG_VERSION="17" setup_postgresql + NODE_VERSION="22" setup_nodejs + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-locker" "Lissy93/domain-locker" "tarball" + + msg_info "Installing Modules (patience)" + cd /opt/domain-locker + $STD npm install + msg_ok "Installed Modules" + + msg_info "Building Domain-Locker (a lot of patience)" + set -a + source /opt/domain-locker.env + set +a + $STD npm run build + msg_info "Built Domain-Locker" + + msg_info "Restarting Services" + systemctl start domain-locker + msg_ok "Restarted Services" + msg_ok "Updated successfully!" + fi + exit } start diff --git a/install/domain-locker-install.sh b/install/domain-locker-install.sh index 3f00864fe..093c61144 100644 --- a/install/domain-locker-install.sh +++ b/install/domain-locker-install.sh @@ -13,6 +13,10 @@ setting_up_container network_check update_os +msg_info "Installing dependencies" +$STD apt install -y whois +msg_ok "Installed dependencies" + PG_VERSION="17" setup_postgresql PG_DB_NAME="domainlocker_db" PG_DB_USER="domainlocker" setup_postgresql_db NODE_VERSION="22" setup_nodejs From 2a823151a9992a1f47cc65e211db66554ceccdb5 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, 21 Apr 2026 08:38:40 +0000 Subject: [PATCH 008/102] Update CHANGELOG.md (#13907) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5368daaa8..94a769004 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -457,6 +457,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Domain-Locker: Update dependencies [@tremor021](https://github.com/tremor021) ([#13901](https://github.com/community-scripts/ProxmoxVE/pull/13901)) - homelable: fix install failure by correcting password-reset chmod target [@Copilot](https://github.com/Copilot) ([#13894](https://github.com/community-scripts/ProxmoxVE/pull/13894)) ## 2026-04-20 From 2aacb5c26ad68f2a2ce1f6df0111c59e86afd9cb 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, 21 Apr 2026 10:39:17 +0200 Subject: [PATCH 009/102] Update .app files (#13906) Co-authored-by: GitHub Actions --- ct/headers/foldergram | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ct/headers/foldergram diff --git a/ct/headers/foldergram b/ct/headers/foldergram new file mode 100644 index 000000000..b9afddd96 --- /dev/null +++ b/ct/headers/foldergram @@ -0,0 +1,6 @@ + ______ __ __ + / ____/___ / /___/ /__ _________ __________ _____ ___ + / /_ / __ \/ / __ / _ \/ ___/ __ `/ ___/ __ `/ __ `__ \ + / __/ / /_/ / / /_/ / __/ / / /_/ / / / /_/ / / / / / / +/_/ \____/_/\__,_/\___/_/ \__, /_/ \__,_/_/ /_/ /_/ + /____/ From 8fd8a6674e6453be92a3bc83894b8e07dda99246 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, 21 Apr 2026 15:06:26 +0200 Subject: [PATCH 010/102] minthcm (#13903) Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com> --- ct/headers/minthcm | 6 +++ ct/minthcm.sh | 41 +++++++++++++++++++ install/minthcm-install.sh | 83 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 ct/headers/minthcm create mode 100644 ct/minthcm.sh create mode 100644 install/minthcm-install.sh diff --git a/ct/headers/minthcm b/ct/headers/minthcm new file mode 100644 index 000000000..27a85fbb5 --- /dev/null +++ b/ct/headers/minthcm @@ -0,0 +1,6 @@ +ο»Ώ __ ____ __ __ __________ ___ + / |/ (_)___ / /_/ / / / ____/ |/ / + / /|_/ / / __ \/ __/ /_/ / / / /|_/ / + / / / / / / / / /_/ __ / /___/ / / / +/_/ /_/_/_/ /_/\__/_/ /_/\____/_/ /_/ + diff --git a/ct/minthcm.sh b/ct/minthcm.sh new file mode 100644 index 000000000..90211bd7c --- /dev/null +++ b/ct/minthcm.sh @@ -0,0 +1,41 @@ +#!/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: MintHCM +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/minthcm/minthcm + +APP="MintHCM" +var_tags="${var_tags:-hcm}" +var_disk="${var_disk:-20}" +var_cpu="${var_cpu:-4}" +var_ram="${var_ram:-4096}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +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 /var/www/MintHCM ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + msg_custom "πŸš€" "${GN}" "The app offers a built-in updater. Please use it." + 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}${CL}" diff --git a/install/minthcm-install.sh b/install/minthcm-install.sh new file mode 100644 index 000000000..d9d5071bd --- /dev/null +++ b/install/minthcm-install.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MintHCM +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/minthcm/minthcm +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" + +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +PHP_VERSION="8.2" +PHP_APACHE="YES" PHP_MODULE="mysql,redis" PHP_FPM="YES" setup_php +setup_composer +setup_mariadb +$STD mariadb -u root -e "SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'" + +fetch_and_deploy_gh_release "MintHCM" "minthcm/minthcm" "tarball" "latest" "/var/www/MintHCM" + +msg_info "Configuring MintHCM" +mkdir -p /etc/php/${PHP_VERSION}/mods-available +cp /var/www/MintHCM/docker/config/000-default.conf /etc/apache2/sites-available/000-default.conf +cp /var/www/MintHCM/docker/config/php-minthcm.ini /etc/php/${PHP_VERSION}/mods-available/php-minthcm.ini +mkdir -p "/etc/php/${PHP_VERSION}/cli/conf.d" "/etc/php/${PHP_VERSION}/apache2/conf.d" +ln -s "/etc/php/${PHP_VERSION}/mods-available/php-minthcm.ini" "/etc/php/${PHP_VERSION}/cli/conf.d/20-minthcm.ini" +ln -s "/etc/php/${PHP_VERSION}/mods-available/php-minthcm.ini" "/etc/php/${PHP_VERSION}/apache2/conf.d/20-minthcm.ini" +chown -R www-data:www-data /var/www/MintHCM +find /var/www/MintHCM -type d -exec chmod 755 {} \; +find /var/www/MintHCM -type f -exec chmod 644 {} \; +mkdir -p /var/www/script +cp /var/www/MintHCM/docker/script/generate_config.php /var/www/script/generate_config.php +cp /var/www/MintHCM/docker/.env /var/www/script/.env +chown -R www-data:www-data /var/www/script +$STD a2enmod rewrite +$STD a2enmod headers +$STD systemctl restart apache2 +msg_ok "Configured MintHCM" + +msg_info "Setting up Elasticsearch" +setup_deb822_repo \ + "elasticsearch" \ + "https://artifacts.elastic.co/GPG-KEY-elasticsearch" \ + "https://artifacts.elastic.co/packages/7.x/apt" \ + "stable" +$STD apt install -y elasticsearch +echo "-Xms2g" >>/etc/elasticsearch/jvm.options +echo "-Xmx2g" >>/etc/elasticsearch/jvm.options +$STD /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment -b +systemctl enable -q --now elasticsearch +msg_ok "Set up Elasticsearch" + +msg_info "Configuring Database" +DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) +$STD mariadb -u root -e "CREATE USER 'minthcm'@'localhost' IDENTIFIED BY '${DB_PASS}';" +$STD mariadb -u root -e "GRANT ALL ON *.* TO 'minthcm'@'localhost'; FLUSH PRIVILEGES;" +sed -i "s/^DB_HOST=.*/DB_HOST=localhost/" /var/www/script/.env +sed -i "s/^DB_USER=.*/DB_USER=minthcm/" /var/www/script/.env +sed -i "s/^DB_PASS=.*/DB_PASS=$DB_PASS/" /var/www/script/.env +sed -i "s/^ELASTICSEARCH_HOST=.*/ELASTICSEARCH_HOST=localhost/" /var/www/script/.env +msg_ok "Configured Database" + +msg_info "Generating configuration file" +set -a +source /var/www/script/.env +set +a +$STD php /var/www/script/generate_config.php +msg_ok "Generated configuration file" + +msg_info "Installing MintHCM" +cd /var/www/MintHCM +$STD sudo -u www-data php MintCLI install /dev/null 2>&1\n" >/var/spool/cron/crontabs/www-data +service cron start +rm -f /var/www/MintHCM/configMint4 +msg_ok "Installed MintHCM" + +motd_ssh +customize +cleanup_lxc From 1221720b3b78406efbc7f5d2d519492cbf7a4265 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, 21 Apr 2026 13:06:51 +0000 Subject: [PATCH 011/102] Update CHANGELOG.md (#13913) 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 94a769004..4b031db56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -449,7 +449,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸ†• New Scripts - - foldergram ([#13900](https://github.com/community-scripts/ProxmoxVE/pull/13900)) + - minthcm ([#13903](https://github.com/community-scripts/ProxmoxVE/pull/13903)) +- foldergram ([#13900](https://github.com/community-scripts/ProxmoxVE/pull/13900)) ### πŸš€ Updated Scripts From 2495469338d99f4c96b0855061b4cd7c453d7671 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, 21 Apr 2026 15:21:29 +0200 Subject: [PATCH 012/102] anchor (#13895) Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- ct/anchor.sh | 83 ++++++++++++++++++++++++++++++++ install/anchor-install.sh | 99 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 182 insertions(+) create mode 100644 ct/anchor.sh create mode 100644 install/anchor-install.sh diff --git a/ct/anchor.sh b/ct/anchor.sh new file mode 100644 index 000000000..6d8ea36cb --- /dev/null +++ b/ct/anchor.sh @@ -0,0 +1,83 @@ +#!/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/ZhFahim/anchor + +APP="Anchor" +var_tags="${var_tags:-notes;productivity;sync}" +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_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -f ~/.anchor ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "anchor" "ZhFahim/anchor"; then + msg_info "Stopping Services" + 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" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "anchor" "ZhFahim/anchor" "tarball" + + msg_info "Building Server" + cd /opt/anchor/server + $STD pnpm install --frozen-lockfile + $STD pnpm prisma generate + $STD pnpm build + [[ -d src/generated ]] && mkdir -p dist/src && cp -R src/generated dist/src/ + msg_ok "Built Server" + + msg_info "Building Web Interface" + cd /opt/anchor/web + $STD pnpm install --frozen-lockfile + SERVER_URL=http://127.0.0.1:3001 $STD pnpm build + cp -r .next/static .next/standalone/.next/static + 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 + + msg_info "Running Database Migrations" + cd /opt/anchor/server + set -a && source /opt/anchor/.env && set +a + $STD pnpm prisma migrate deploy + msg_ok "Ran Database Migrations" + + msg_info "Starting Services" + systemctl start anchor-server anchor-web + msg_ok "Started Services" + msg_ok "Updated ${APP}" + 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/install/anchor-install.sh b/install/anchor-install.sh new file mode 100644 index 000000000..e1407cfa4 --- /dev/null +++ b/install/anchor-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/ZhFahim/anchor + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs +PG_VERSION="17" setup_postgresql +PG_DB_NAME="anchor" PG_DB_USER="anchor" setup_postgresql_db + +fetch_and_deploy_gh_release "anchor" "ZhFahim/anchor" "tarball" + +msg_info "Building Server" +cd /opt/anchor/server +$STD pnpm install --frozen-lockfile +$STD pnpm prisma generate +$STD pnpm build +[[ -d src/generated ]] && mkdir -p dist/src && cp -R src/generated dist/src/ +msg_ok "Built Server" + +msg_info "Building Web Interface" +cd /opt/anchor/web +$STD pnpm install --frozen-lockfile +SERVER_URL=http://127.0.0.1:3001 $STD pnpm build +cp -r .next/static .next/standalone/.next/static +cp -r public .next/standalone/public +msg_ok "Built Web Interface" + +msg_info "Configuring Application" +JWT_SECRET=$(openssl rand -base64 32) +cat </opt/anchor/.env +APP_URL=http://${LOCAL_IP}:3000 +JWT_SECRET=${JWT_SECRET} +DATABASE_URL=postgresql://anchor:${PG_DB_PASS}@localhost:5432/anchor +PG_HOST=localhost +PG_USER=anchor +PG_PASSWORD=${PG_DB_PASS} +PG_DATABASE=anchor +PG_PORT=5432 +EOF +msg_ok "Configured Application" + +msg_info "Running Database Migrations" +cd /opt/anchor/server +set -a && source /opt/anchor/.env && set +a +$STD pnpm prisma migrate deploy +msg_ok "Ran Database Migrations" + +msg_info "Creating Services" +cat </etc/systemd/system/anchor-server.service +[Unit] +Description=Anchor API Server +After=network.target postgresql.service + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/anchor/server +EnvironmentFile=/opt/anchor/.env +ExecStart=/usr/bin/node dist/src/main.js +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +cat </etc/systemd/system/anchor-web.service +[Unit] +Description=Anchor Web Interface +After=network.target anchor-server.service + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/anchor/web/.next/standalone +EnvironmentFile=/opt/anchor/.env +Environment=PORT=3000 HOSTNAME=0.0.0.0 NODE_ENV=production +ExecStart=/usr/bin/node server.js +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now anchor-server anchor-web +msg_ok "Created Services" + +motd_ssh +customize +cleanup_lxc From a2d94d6ebe74f053a2bea125b16fcf6ad99d7785 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, 21 Apr 2026 13:22:02 +0000 Subject: [PATCH 013/102] Update CHANGELOG.md (#13915) 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 4b031db56..7739c360b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -449,7 +449,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸ†• New Scripts - - minthcm ([#13903](https://github.com/community-scripts/ProxmoxVE/pull/13903)) + - anchor ([#13895](https://github.com/community-scripts/ProxmoxVE/pull/13895)) +- minthcm ([#13903](https://github.com/community-scripts/ProxmoxVE/pull/13903)) - foldergram ([#13900](https://github.com/community-scripts/ProxmoxVE/pull/13900)) ### πŸš€ Updated Scripts From ed496277fca7db7800f4eda0f2a21763a80b67c4 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, 21 Apr 2026 15:23:19 +0200 Subject: [PATCH 014/102] Add gogs (ct) (#13896) Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> --- ct/gogs.sh | 65 +++++++++++++++++++++++++++++++++++++++++ install/gogs-install.sh | 50 +++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 ct/gogs.sh create mode 100644 install/gogs-install.sh diff --git a/ct/gogs.sh b/ct/gogs.sh new file mode 100644 index 000000000..09d557682 --- /dev/null +++ b/ct/gogs.sh @@ -0,0 +1,65 @@ +#!/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://gogs.io/ + +APP="Gogs" +var_tags="${var_tags:-git;code;devops}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-1024}" +var_disk="${var_disk:-8}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +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 /opt/gogs/gogs ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "gogs" "gogs/gogs"; then + msg_info "Stopping Service" + systemctl stop gogs + msg_ok "Stopped Service" + + msg_info "Backing up Data" + cp -r /opt/gogs/custom /opt/gogs_custom_backup + cp -r /opt/gogs/data /opt/gogs_data_backup + msg_ok "Backed up Data" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gogs" "gogs/gogs" "prebuild" "latest" "/opt/gogs" "gogs_*_linux_amd64.tar.gz" + + msg_info "Restoring Data" + cp -r /opt/gogs_custom_backup/. /opt/gogs/custom + cp -r /opt/gogs_data_backup/. /opt/gogs/data + rm -rf /opt/gogs_custom_backup /opt/gogs_data_backup + msg_ok "Restored Data" + + msg_info "Starting Service" + systemctl start gogs + 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/install/gogs-install.sh b/install/gogs-install.sh new file mode 100644 index 000000000..e58e1d36c --- /dev/null +++ b/install/gogs-install.sh @@ -0,0 +1,50 @@ +#!/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://gogs.io/ + +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 git +msg_ok "Installed Dependencies" + +fetch_and_deploy_gh_release "gogs" "gogs/gogs" "prebuild" "latest" "/opt/gogs" "gogs_*_linux_amd64.tar.gz" + +msg_info "Setting up Gogs" +mkdir -p /opt/gogs/{custom/conf,data,log} +msg_ok "Set up Gogs" + +msg_info "Creating Service" +cat </etc/systemd/system/gogs.service +[Unit] +Description=Gogs Git Service +After=network.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/gogs +ExecStart=/opt/gogs/gogs web +Restart=on-failure +RestartSec=5 +Environment=USER=root +Environment=HOME=/root + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now gogs +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc From 8f97a4909d8080ad3b22d16ec29f33a596f6cbba 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, 21 Apr 2026 13:23:53 +0000 Subject: [PATCH 015/102] Update CHANGELOG.md (#13916) 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 7739c360b..e0cc017b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -449,7 +449,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸ†• New Scripts - - anchor ([#13895](https://github.com/community-scripts/ProxmoxVE/pull/13895)) + - gogs ([#13896](https://github.com/community-scripts/ProxmoxVE/pull/13896)) +- anchor ([#13895](https://github.com/community-scripts/ProxmoxVE/pull/13895)) - minthcm ([#13903](https://github.com/community-scripts/ProxmoxVE/pull/13903)) - foldergram ([#13900](https://github.com/community-scripts/ProxmoxVE/pull/13900)) From 981c16dec5e3711f3c241d6122b13fa3113bbe6e 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, 21 Apr 2026 15:30:16 +0200 Subject: [PATCH 016/102] Update .app files (#13914) Co-authored-by: GitHub Actions --- ct/headers/anchor | 6 ++++++ ct/headers/gogs | 6 ++++++ ct/headers/minthcm | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 ct/headers/anchor create mode 100644 ct/headers/gogs diff --git a/ct/headers/anchor b/ct/headers/anchor new file mode 100644 index 000000000..896f407c0 --- /dev/null +++ b/ct/headers/anchor @@ -0,0 +1,6 @@ + ___ __ + / | ____ _____/ /_ ____ _____ + / /| | / __ \/ ___/ __ \/ __ \/ ___/ + / ___ |/ / / / /__/ / / / /_/ / / +/_/ |_/_/ /_/\___/_/ /_/\____/_/ + diff --git a/ct/headers/gogs b/ct/headers/gogs new file mode 100644 index 000000000..3d659556d --- /dev/null +++ b/ct/headers/gogs @@ -0,0 +1,6 @@ + ______ + / ____/___ ____ ______ + / / __/ __ \/ __ `/ ___/ +/ /_/ / /_/ / /_/ (__ ) +\____/\____/\__, /____/ + /____/ diff --git a/ct/headers/minthcm b/ct/headers/minthcm index 27a85fbb5..4a18a165c 100644 --- a/ct/headers/minthcm +++ b/ct/headers/minthcm @@ -1,4 +1,4 @@ -ο»Ώ __ ____ __ __ __________ ___ + __ ____ __ __ __________ ___ / |/ (_)___ / /_/ / / / ____/ |/ / / /|_/ / / __ \/ __/ /_/ / / / /|_/ / / / / / / / / / /_/ __ / /___/ / / / From 9baed4b50e9fdacf3fdb921c15e0c7b92021856c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:47:16 +0200 Subject: [PATCH 017/102] FileFlows: Update dependencies (#13917) * Add Node installation option * update deps * add hwaccel * upd --- install/fileflows-install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install/fileflows-install.sh b/install/fileflows-install.sh index bc6f6f797..b7b2aceef 100644 --- a/install/fileflows-install.sh +++ b/install/fileflows-install.sh @@ -5,7 +5,6 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://fileflows.com/ -# Import Functions und Setup source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 @@ -17,6 +16,7 @@ update_os msg_info "Installing Dependencies" $STD apt install -y \ ffmpeg \ + pciutils \ imagemagick msg_ok "Installed Dependencies" @@ -35,6 +35,7 @@ fetch_and_deploy_from_url "https://fileflows.com/downloads/zip" "/opt/fileflows" $STD ln -svf /usr/bin/ffmpeg /usr/local/bin/ffmpeg $STD ln -svf /usr/bin/ffprobe /usr/local/bin/ffprobe +$STD rm -rf /opt/fileflows/Server/runtimes/win-* read -r -p "${TAB3}Do you want to install FileFlows Server or Node? (S/N): " install_server From 14655ff6a4a036ab6e0714bd2db2620ba2085aff 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, 21 Apr 2026 13:47:51 +0000 Subject: [PATCH 018/102] Update CHANGELOG.md (#13918) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e0cc017b5..432bc8229 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -463,6 +463,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - Domain-Locker: Update dependencies [@tremor021](https://github.com/tremor021) ([#13901](https://github.com/community-scripts/ProxmoxVE/pull/13901)) - homelable: fix install failure by correcting password-reset chmod target [@Copilot](https://github.com/Copilot) ([#13894](https://github.com/community-scripts/ProxmoxVE/pull/13894)) + - #### ✨ New Features + + - FileFlows: Update dependencies [@tremor021](https://github.com/tremor021) ([#13917](https://github.com/community-scripts/ProxmoxVE/pull/13917)) + ## 2026-04-20 ### πŸ†• New Scripts From abac42ca1329c46c639be713e144733e0429ccb7 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 07:41:43 +0200 Subject: [PATCH 019/102] ERPNext (#13921) * Add erpnext (ct) * use trixie wkhtmltopdf * remove empty lines --------- Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com> --- ct/erpnext.sh | 47 +++++++++++++++++ install/erpnext-install.sh | 100 +++++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 ct/erpnext.sh create mode 100644 install/erpnext-install.sh diff --git a/ct/erpnext.sh b/ct/erpnext.sh new file mode 100644 index 000000000..94fb7b764 --- /dev/null +++ b/ct/erpnext.sh @@ -0,0 +1,47 @@ +#!/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/frappe/erpnext + +APP="ERPNext" +var_tags="${var_tags:-erp;business;accounting}" +var_cpu="${var_cpu:-4}" +var_ram="${var_ram:-4096}" +var_disk="${var_disk:-20}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +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/frappe-bench ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_info "Updating ERPNext" + $STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:$PATH"; cd /opt/frappe-bench && bench update --reset' + msg_ok "Updated ERPNext" + 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}${CL}" +echo -e "${INFO}${YW} Credentials:${CL}" +echo -e "${TAB}${BGN}Username: Administrator${CL}" +echo -e "${TAB}${BGN}Password: see ~/erpnext.creds${CL}" diff --git a/install/erpnext-install.sh b/install/erpnext-install.sh new file mode 100644 index 000000000..81af4374b --- /dev/null +++ b/install/erpnext-install.sh @@ -0,0 +1,100 @@ +#!/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/frappe/erpnext + +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 \ + git \ + build-essential \ + python3-dev \ + libffi-dev \ + libssl-dev \ + redis-server \ + nginx \ + supervisor \ + fail2ban \ + xvfb \ + libfontconfig1 \ + libxrender1 \ + fontconfig \ + libjpeg-dev \ + libmariadb-dev \ + python3-pip \ + wkhtmltopdf +msg_ok "Installed Dependencies" + +NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs +UV_PYTHON="3.13" setup_uv +setup_mariadb + +msg_info "Configuring MariaDB for ERPNext" +cat </etc/mysql/mariadb.conf.d/50-erpnext.cnf +[mysqld] +character-set-server=utf8mb4 +collation-server=utf8mb4_unicode_ci + +[client] +default-character-set=utf8mb4 +EOF +$STD systemctl restart mariadb +msg_ok "Configured MariaDB for ERPNext" + +msg_info "Installing Frappe Bench" +useradd -m -s /bin/bash frappe +chown frappe:frappe /opt +echo "frappe ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/frappe +$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:$PATH"; uv tool install frappe-bench' +msg_ok "Installed Frappe Bench" + +msg_info "Initializing Frappe Bench" +ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) +DB_ROOT_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) +mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '${DB_ROOT_PASS}'; FLUSH PRIVILEGES;" +$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:$PATH"; cd /opt && bench init --frappe-branch version-15 frappe-bench' +$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:$PATH"; cd /opt/frappe-bench && bench get-app erpnext --branch version-15' +$STD sudo -u frappe bash -c "export PATH=\"\$HOME/.local/bin:\$PATH\"; cd /opt/frappe-bench && bench new-site site1.local --db-root-username root --db-root-password \"$DB_ROOT_PASS\" --admin-password \"$ADMIN_PASS\" --install-app erpnext --set-default" +msg_ok "Initialized Frappe Bench" + +msg_info "Configuring ERPNext" +cat </opt/frappe-bench/.env +ADMIN_PASSWORD=${ADMIN_PASS} +DB_ROOT_PASSWORD=${DB_ROOT_PASS} +SITE_NAME=site1.local +EOF +{ + echo "ERPNext Credentials" + echo "==================" + echo "Admin Username: Administrator" + echo "Admin Password: ${ADMIN_PASS}" + echo "DB Root Password: ${DB_ROOT_PASS}" + echo "Site Name: site1.local" +} >~/erpnext.creds +$STD systemctl enable --now redis-server +msg_ok "Configured ERPNext" + +msg_info "Setting up Production" +BENCH_PY="/home/frappe/.local/share/uv/tools/frappe-bench/bin/python" +$STD sudo -u frappe bash -c "curl -fsSL https://bootstrap.pypa.io/get-pip.py | \"${BENCH_PY}\"" +$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:$PATH"; uv tool install ansible' +ln -sf /home/frappe/.local/bin/ansible* /usr/local/bin/ +$STD bash -c 'export PATH="/home/frappe/.local/bin:$PATH"; cd /opt/frappe-bench && bench setup production frappe --yes' +ln -sf /opt/frappe-bench/config/supervisor.conf /etc/supervisor/conf.d/frappe-bench.conf +$STD supervisorctl reread +$STD supervisorctl update +$STD systemctl enable --now supervisor +msg_ok "Set up Production" + +motd_ssh +customize +cleanup_lxc From 759d0aacf06279754668fb128fe02c4bed590bce Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 07:41:53 +0200 Subject: [PATCH 020/102] ownfoil (#13904) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add ownfoil (ct) * Update ct/ownfoil.sh Co-authored-by: SlaviΕ‘a AreΕΎina <58952836+tremor021@users.noreply.github.com> * Update ct/ownfoil.sh Co-authored-by: SlaviΕ‘a AreΕΎina <58952836+tremor021@users.noreply.github.com> * Update install/ownfoil-install.sh Co-authored-by: SlaviΕ‘a AreΕΎina <58952836+tremor021@users.noreply.github.com> * Fix backup command to handle errors correctly --------- Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com> Co-authored-by: SlaviΕ‘a AreΕΎina <58952836+tremor021@users.noreply.github.com> --- ct/ownfoil.sh | 69 ++++++++++++++++++++++++++++++++++++++ install/ownfoil-install.sh | 52 ++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 ct/ownfoil.sh create mode 100644 install/ownfoil-install.sh diff --git a/ct/ownfoil.sh b/ct/ownfoil.sh new file mode 100644 index 000000000..3a770f614 --- /dev/null +++ b/ct/ownfoil.sh @@ -0,0 +1,69 @@ +#!/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: pajjski +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/a1ex4/ownfoil + +APP="ownfoil" +var_tags="${var_tags:-gaming}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-1024}" +var_disk="${var_disk:-4}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +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/ownfoil ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "ownfoil" "a1ex4/ownfoil"; then + msg_info "Stopping Service" + systemctl stop ownfoil + msg_ok "Stopped Service" + + msg_info "Backing up Data" + cp -r /opt/ownfoil/app/config /opt/ownfoil_data_backup + msg_ok "Backed up Data" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball" + + msg_info "Installing Dependencies" + cd /opt/ownfoil + $STD source .venv/bin/activate + $STD uv pip install -r requirements.txt + msg_ok "Installed Dependencies" + + msg_info "Restoring Data" + cp -r /opt/ownfoil_data_backup /opt/ownfoil/app/config + rm -rf /opt/ownfoil_data_backup + msg_ok "Restored Data" + + msg_info "Starting Service" + systemctl start ownfoil + 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}:8465${CL}" diff --git a/install/ownfoil-install.sh b/install/ownfoil-install.sh new file mode 100644 index 000000000..6717cfbe4 --- /dev/null +++ b/install/ownfoil-install.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: pajjski +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/a1ex4/ownfoil + +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 git +msg_ok "Installed Dependencies" + +setup_uv +fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball" + +msg_info "Setting up Ownfoil" +cd /opt/ownfoil +$STD uv venv .venv +$STD source .venv/bin/activate +$STD uv pip install -r requirements.txt +msg_ok "Setup ownfoil" + +msg_info "Creating Service" +cat </etc/systemd/system/ownfoil.service +[Unit] +Description=ownfoil Service +After=network.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/ownfoil +ExecStart=/opt/ownfoil/.venv/bin/python /opt/ownfoil/app/app.py +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now ownfoil +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc From 34928f8f1d656fcf89931bec204688a39752fc8e 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, 22 Apr 2026 05:42:05 +0000 Subject: [PATCH 021/102] Update CHANGELOG.md (#13927) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 432bc8229..afff97df1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -445,6 +445,13 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-04-22 + +### πŸ†• New Scripts + + - ownfoil ([#13904](https://github.com/community-scripts/ProxmoxVE/pull/13904)) +- ERPNext ([#13921](https://github.com/community-scripts/ProxmoxVE/pull/13921)) + ## 2026-04-21 ### πŸ†• New Scripts From 192c2d4fc89503fb9bbbcbfa4a451acde5f16a2b Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 07:43:20 +0200 Subject: [PATCH 023/102] Mini-QR (#13902) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add mini-qr (ct) * Update ct/mini-qr.sh Co-authored-by: SlaviΕ‘a AreΕΎina <58952836+tremor021@users.noreply.github.com> * Update ct/mini-qr.sh Co-authored-by: SlaviΕ‘a AreΕΎina <58952836+tremor021@users.noreply.github.com> * Update install/mini-qr-install.sh Co-authored-by: SlaviΕ‘a AreΕΎina <58952836+tremor021@users.noreply.github.com> --------- Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com> Co-authored-by: SlaviΕ‘a AreΕΎina <58952836+tremor021@users.noreply.github.com> --- ct/mini-qr.sh | 63 ++++++++++++++++++++++++++++++++++++++ install/mini-qr-install.sh | 60 ++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 ct/mini-qr.sh create mode 100644 install/mini-qr-install.sh diff --git a/ct/mini-qr.sh b/ct/mini-qr.sh new file mode 100644 index 000000000..5376b691a --- /dev/null +++ b/ct/mini-qr.sh @@ -0,0 +1,63 @@ +#!/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: doge0420 +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/lyqht/mini-qr + +APP="Mini-QR" +var_tags="${var_tags:-QRcode;}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-6}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +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/mini-qr ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "mini-qr" "lyqht/mini-qr"; then + msg_info "Stopping Service" + systemctl stop caddy + msg_ok "Stopped Service" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mini-qr" "lyqht/mini-qr" "tarball" + + msg_info "Installing Dependencies" + cd /opt/mini-qr + $STD npm install + msg_ok "Installed Dependencies" + + msg_info "Building MiniQR" + $STD npm run build + msg_ok "Built MiniQR" + + msg_info "Starting Service" + systemctl start caddy + 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}${CL}" diff --git a/install/mini-qr-install.sh b/install/mini-qr-install.sh new file mode 100644 index 000000000..1bfa0728b --- /dev/null +++ b/install/mini-qr-install.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: doge0420 +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/lyqht/mini-qr + +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 \ + libharfbuzz0b \ + caddy \ + fontconfig +msg_ok "Installed Dependencies" + +NODE_VERSION="20" setup_nodejs +fetch_and_deploy_gh_release "mini-qr" "lyqht/mini-qr" "tarball" + +msg_info "Building MiniQR" +cd /opt/mini-qr +$STD npm install +$STD npm run build +msg_ok "Built MiniQR" + +msg_info "Configuring Caddy" +cat </etc/caddy/Caddyfile +:80 { + root * /opt/mini-qr/dist + file_server + + # Handle client-side routing + try_files {path} /index.html + + # Cache static assets + @assets { + path /assets/* + } + header @assets Cache-Control "public, immutable, max-age=31536000" + + # Correct MIME types for JS modules + @jsmodules { + path *.js *.mjs + } + header @jsmodules Content-Type "application/javascript" +} +EOF +systemctl enable -q --now caddy +systemctl reload caddy +msg_ok "Configured Caddy" + +motd_ssh +customize +cleanup_lxc From 29f2671e7a466e7d6432405b55636e3071d7c2dd 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, 22 Apr 2026 05:43:45 +0000 Subject: [PATCH 024/102] Update CHANGELOG.md (#13930) 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 afff97df1..020693c6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -449,7 +449,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸ†• New Scripts - - ownfoil ([#13904](https://github.com/community-scripts/ProxmoxVE/pull/13904)) + - Mini-QR ([#13902](https://github.com/community-scripts/ProxmoxVE/pull/13902)) +- ownfoil ([#13904](https://github.com/community-scripts/ProxmoxVE/pull/13904)) - ERPNext ([#13921](https://github.com/community-scripts/ProxmoxVE/pull/13921)) ## 2026-04-21 From 51410375049f1dcbfe39698850178c6a5e564156 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 07:50:00 +0200 Subject: [PATCH 025/102] Dashy (#13817) * Add dashy (ct) * fix systemctl syntax --------- Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com> --- ct/dashy.sh | 73 ++++++++++++++++++++++++++++++++++++++++ install/dashy-install.sh | 42 +++++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 ct/dashy.sh create mode 100644 install/dashy-install.sh diff --git a/ct/dashy.sh b/ct/dashy.sh new file mode 100644 index 000000000..cd885200f --- /dev/null +++ b/ct/dashy.sh @@ -0,0 +1,73 @@ +#!/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: tteck (tteckster) | Co-Author: CrazyWolf13 +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://dashy.to/ + +APP="Dashy" +var_tags="${var_tags:-dashboard}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-6}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +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/dashy/public/ ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + if check_for_gh_release "dashy" "Lissy93/dashy"; then + msg_info "Stopping Service" + systemctl stop dashy + msg_ok "Stopped Service" + + msg_info "Backing up conf.yml" + if [[ -f /opt/dashy/public/conf.yml ]]; then + cp -R /opt/dashy/public/conf.yml /opt/dashy_conf_backup.yml + else + cp -R /opt/dashy/user-data/conf.yml /opt/dashy_conf_backup.yml + fi + msg_ok "Backed up conf.yml" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dashy" "Lissy93/dashy" "prebuild" "latest" "/opt/dashy" "dashy-*.tar.gz" + + msg_info "Updating Dashy" + cd /opt/dashy + $STD yarn install --ignore-engines --network-timeout 300000 + msg_ok "Updated Dashy" + + msg_info "Restoring conf.yml" + cp -R /opt/dashy_conf_backup.yml /opt/dashy/user-data + msg_ok "Restored conf.yml" + + msg_info "Cleaning" + rm -rf /opt/dashy_conf_backup.yml /opt/dashy/public/conf.yml + msg_ok "Cleaned" + + msg_info "Starting Dashy" + systemctl start dashy + msg_ok "Started Dashy" + 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}:4000${CL}" diff --git a/install/dashy-install.sh b/install/dashy-install.sh new file mode 100644 index 000000000..76331b182 --- /dev/null +++ b/install/dashy-install.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: tteck (tteckster) | Co-Author: CrazyWolf13 +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://dashy.to/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs +fetch_and_deploy_gh_release "dashy" "Lissy93/dashy" "prebuild" "latest" "/opt/dashy" "dashy-*.tar.gz" + +msg_info "Installing Dashy" +cd /opt/dashy +$STD yarn install --ignore-engines --network-timeout 300000 +msg_ok "Installed Dashy" + +msg_info "Creating Service" +cat </etc/systemd/system/dashy.service +[Unit] +Description=dashy + +[Service] +Type=simple +WorkingDirectory=/opt/dashy +Environment=NODE_OPTIONS=--openssl-legacy-provider +ExecStart=/usr/bin/node server.js +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now dashy +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc From 4e5a45feb5654cb186dba6ab9eee6ba60553fc0f 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, 22 Apr 2026 05:50:24 +0000 Subject: [PATCH 026/102] Update CHANGELOG.md (#13931) 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 020693c6d..54f85f62e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -449,7 +449,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸ†• New Scripts - - Mini-QR ([#13902](https://github.com/community-scripts/ProxmoxVE/pull/13902)) + - Dashy ([#13817](https://github.com/community-scripts/ProxmoxVE/pull/13817)) +- Mini-QR ([#13902](https://github.com/community-scripts/ProxmoxVE/pull/13902)) - ownfoil ([#13904](https://github.com/community-scripts/ProxmoxVE/pull/13904)) - ERPNext ([#13921](https://github.com/community-scripts/ProxmoxVE/pull/13921)) From 686b9aab815293966d6c66225234272b0225a487 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, 22 Apr 2026 08:00:49 +0200 Subject: [PATCH 027/102] Update .app files (#13928) Co-authored-by: GitHub Actions --- ct/headers/dashy | 6 ++++++ ct/headers/erpnext | 6 ++++++ ct/headers/mini-qr | 6 ++++++ ct/headers/ownfoil | 6 ++++++ 4 files changed, 24 insertions(+) create mode 100644 ct/headers/dashy create mode 100644 ct/headers/erpnext create mode 100644 ct/headers/mini-qr create mode 100644 ct/headers/ownfoil diff --git a/ct/headers/dashy b/ct/headers/dashy new file mode 100644 index 000000000..330f9e3d0 --- /dev/null +++ b/ct/headers/dashy @@ -0,0 +1,6 @@ + ____ __ + / __ \____ ______/ /_ __ __ + / / / / __ `/ ___/ __ \/ / / / + / /_/ / /_/ (__ ) / / / /_/ / +/_____/\__,_/____/_/ /_/\__, / + /____/ diff --git a/ct/headers/erpnext b/ct/headers/erpnext new file mode 100644 index 000000000..0fbb49f27 --- /dev/null +++ b/ct/headers/erpnext @@ -0,0 +1,6 @@ + __________ ____ _ __ __ + / ____/ __ \/ __ \/ | / /__ _ __/ /_ + / __/ / /_/ / /_/ / |/ / _ \| |/_/ __/ + / /___/ _, _/ ____/ /| / __/> Date: Wed, 22 Apr 2026 09:19:54 +0200 Subject: [PATCH 028/102] readd wkhtml from ved readd from ved --- install/erpnext-install.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/install/erpnext-install.sh b/install/erpnext-install.sh index 81af4374b..970b84ae1 100644 --- a/install/erpnext-install.sh +++ b/install/erpnext-install.sh @@ -30,8 +30,7 @@ $STD apt install -y \ fontconfig \ libjpeg-dev \ libmariadb-dev \ - python3-pip \ - wkhtmltopdf + python3-pip msg_ok "Installed Dependencies" NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs @@ -50,6 +49,13 @@ EOF $STD systemctl restart mariadb msg_ok "Configured MariaDB for ERPNext" +msg_info "Installing wkhtmltopdf" +WKHTMLTOPDF_URL="https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.bookworm_amd64.deb" +$STD curl -fsSL -o /tmp/wkhtmltox.deb "$WKHTMLTOPDF_URL" +$STD apt install -y /tmp/wkhtmltox.deb +rm -f /tmp/wkhtmltox.deb +msg_ok "Installed wkhtmltopdf" + msg_info "Installing Frappe Bench" useradd -m -s /bin/bash frappe chown frappe:frappe /opt From d044dea89e3228436b9cdc512efce3005406456a Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Wed, 22 Apr 2026 09:25:29 +0200 Subject: [PATCH 029/102] add --clear to uv venv in update_script() to prevent interactive prompt (#13926) --- ct/calibre-web.sh | 2 +- ct/homelable.sh | 2 +- ct/profilarr.sh | 2 +- ct/yamtrack.sh | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ct/calibre-web.sh b/ct/calibre-web.sh index ffea110b5..0d168002a 100644 --- a/ct/calibre-web.sh +++ b/ct/calibre-web.sh @@ -44,7 +44,7 @@ function update_script() { msg_info "Installing Dependencies" cd /opt/calibre-web - $STD uv venv + $STD uv venv --clear /opt/calibre-web/.venv $STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir --upgrade pip setuptools wheel $STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir -r requirements.txt msg_ok "Installed Dependencies" diff --git a/ct/homelable.sh b/ct/homelable.sh index e12104e9a..eb5a67888 100644 --- a/ct/homelable.sh +++ b/ct/homelable.sh @@ -43,7 +43,7 @@ function update_script() { msg_info "Updating Python Dependencies" cd /opt/homelable/backend - $STD uv venv /opt/homelable/backend/.venv + $STD uv venv --clear /opt/homelable/backend/.venv $STD uv pip install --python /opt/homelable/backend/.venv/bin/python -r requirements.txt msg_ok "Updated Python Dependencies" diff --git a/ct/profilarr.sh b/ct/profilarr.sh index 8d1ce0a96..7bf0582b2 100644 --- a/ct/profilarr.sh +++ b/ct/profilarr.sh @@ -44,7 +44,7 @@ function update_script() { msg_info "Installing Python Dependencies" cd /opt/profilarr/backend - $STD uv venv /opt/profilarr/backend/.venv + $STD uv venv --clear /opt/profilarr/backend/.venv sed 's/==/>=/g' requirements.txt >requirements-relaxed.txt $STD uv pip install --python /opt/profilarr/backend/.venv/bin/python -r requirements-relaxed.txt rm -f requirements-relaxed.txt diff --git a/ct/yamtrack.sh b/ct/yamtrack.sh index 21e9fe34f..714125fea 100644 --- a/ct/yamtrack.sh +++ b/ct/yamtrack.sh @@ -43,7 +43,7 @@ function update_script() { msg_info "Installing Python Dependencies" cd /opt/yamtrack - $STD uv venv .venv + $STD uv venv --clear .venv $STD uv pip install --no-cache-dir -r requirements.txt msg_ok "Installed Python Dependencies" From 6da3a5f0e201c35334fe7246e47b6bf7a5bcd1cb 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, 22 Apr 2026 07:25:54 +0000 Subject: [PATCH 030/102] Update CHANGELOG.md (#13933) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54f85f62e..e3fa4bdaf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -454,6 +454,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - ownfoil ([#13904](https://github.com/community-scripts/ProxmoxVE/pull/13904)) - ERPNext ([#13921](https://github.com/community-scripts/ProxmoxVE/pull/13921)) +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - add --clear to uv venv in update_script() to prevent interactive prompt [@MickLesk](https://github.com/MickLesk) ([#13926](https://github.com/community-scripts/ProxmoxVE/pull/13926)) + ## 2026-04-21 ### πŸ†• New Scripts From 518b6778e2a6d2dadd53d1969d84841c6d8d642c Mon Sep 17 00:00:00 2001 From: John Gorman <967905+gormanity@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:47:44 +0800 Subject: [PATCH 031/102] core: Add PHS_VERBOSE env var to skip verbose mode prompts (#13797) --- misc/build.func | 70 ++++++++++++++++++++++++++++++++++--------------- misc/core.func | 4 +-- 2 files changed, 51 insertions(+), 23 deletions(-) diff --git a/misc/build.func b/misc/build.func index 56c247e82..d1588eb89 100644 --- a/misc/build.func +++ b/misc/build.func @@ -2702,16 +2702,21 @@ advanced_settings() { # STEP 28: Verbose Mode & Confirmation # ═══════════════════════════════════════════════════════════════════════════ 28) - local verbose_default_flag="--defaultno" - [[ "$_verbose" == "yes" ]] && verbose_default_flag="" - - if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \ - --title "VERBOSE MODE" \ - $verbose_default_flag \ - --yesno "\nEnable Verbose Mode?\n\nShows detailed output during installation." 12 58; then + # PHS_VERBOSE forces verbose mode and skips the prompt + if [[ "$PHS_MODE" == "verbose" ]]; then _verbose="yes" else - _verbose="no" + local verbose_default_flag="--defaultno" + [[ "$_verbose" == "yes" ]] && verbose_default_flag="" + + if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \ + --title "VERBOSE MODE" \ + $verbose_default_flag \ + --yesno "\nEnable Verbose Mode?\n\nShows detailed output during installation." 12 58; then + _verbose="yes" + else + _verbose="no" + fi fi # Build summary local ct_type_desc="Unprivileged" @@ -3444,7 +3449,7 @@ configure_ssh_settings() { # msg_menu() # # - Displays a numbered menu for update_script() functions -# - In silent mode (PHS_SILENT=1): auto-selects the default option +# - In silent mode (PHS_MODE=silent): auto-selects the default option # - In interactive mode: shows menu via read with 10s timeout + default fallback # - Usage: CHOICE=$(msg_menu "Title" "tag1" "Description 1" "tag2" "Desc 2" ...) # - The first item is always the default @@ -3468,7 +3473,7 @@ msg_menu() { local count=${#tags[@]} # Silent mode: return default immediately - if [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]]; then + if [[ "$PHS_MODE" == "silent" ]]; then echo "$default_tag" return 0 fi @@ -3504,6 +3509,30 @@ msg_menu() { return 0 } +# ------------------------------------------------------------------------------ +# resolve_phs_mode() +# +# - Resolves PHS_SILENT/PHS_VERBOSE env vars into a single PHS_MODE enum +# - Values: "silent", "verbose", "interactive" +# - If both PHS_SILENT=1 and PHS_VERBOSE=1, shows a conflict warning +# and defaults to "interactive" +# - Should be called once early, before any mode-dependent logic +# ------------------------------------------------------------------------------ +resolve_phs_mode() { + if [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]] && [[ -n "${PHS_VERBOSE+x}" ]] && [[ "${PHS_VERBOSE}" == "1" ]]; then + whiptail --backtitle "Proxmox VE Helper Scripts" \ + --title "⚠️ Configuration Conflict Warning" \ + --msgbox "PHS_SILENT and PHS_VERBOSE environment variables are both set.\n\nFalling back to interactive mode." 10 58 + PHS_MODE="interactive" + elif [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]]; then + PHS_MODE="silent" + elif [[ -n "${PHS_VERBOSE+x}" ]] && [[ "${PHS_VERBOSE}" == "1" ]]; then + PHS_MODE="verbose" + else + PHS_MODE="interactive" + fi +} + # ------------------------------------------------------------------------------ # start() # @@ -3514,17 +3543,16 @@ msg_menu() { # ------------------------------------------------------------------------------ start() { source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) + resolve_phs_mode if command -v pveversion >/dev/null 2>&1; then install_script || return 0 return 0 - elif [ ! -z ${PHS_SILENT+x} ] && [[ "${PHS_SILENT}" == "1" ]]; then + elif [[ "$PHS_MODE" == "silent" ]]; then VERBOSE="no" set_std_mode - ensure_profile_loaded - get_lxc_ip - update_script - update_motd_ip - cleanup_lxc + elif [[ "$PHS_MODE" == "verbose" ]]; then + VERBOSE="yes" + set_std_mode else CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "${APP} LXC Update/Setting" --menu \ "Support/Update functions for ${APP} LXC. Choose an option:" \ @@ -3548,12 +3576,12 @@ start() { exit 0 ;; esac - ensure_profile_loaded - get_lxc_ip - update_script - update_motd_ip - cleanup_lxc fi + ensure_profile_loaded + get_lxc_ip + update_script + update_motd_ip + cleanup_lxc } # ============================================================================== diff --git a/misc/core.func b/misc/core.func index 220281958..ea5a775e7 100644 --- a/misc/core.func +++ b/misc/core.func @@ -940,7 +940,7 @@ is_verbose_mode() { # # - Detects if script is running in unattended/non-interactive mode # - Checks MODE variable first (primary method) -# - Falls back to legacy flags (PHS_SILENT, var_unattended) +# - Falls back to legacy flags (PHS_MODE, var_unattended) # - Returns 0 (true) if unattended, 1 (false) otherwise # - Used by prompt functions to auto-apply defaults # @@ -984,7 +984,7 @@ is_unattended() { esac # Legacy fallbacks for compatibility - [[ "${PHS_SILENT:-0}" == "1" ]] && return 0 + [[ "${PHS_MODE:-}" == "silent" ]] && return 0 [[ "${var_unattended:-}" =~ ^(yes|true|1)$ ]] && return 0 [[ "${UNATTENDED:-}" =~ ^(yes|true|1)$ ]] && return 0 From 22d9eece6f3199632381f9af9997fabd2b14379b 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, 22 Apr 2026 12:48:13 +0000 Subject: [PATCH 032/102] Update CHANGELOG.md (#13941) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e3fa4bdaf..bcaf3168e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -460,6 +460,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - add --clear to uv venv in update_script() to prevent interactive prompt [@MickLesk](https://github.com/MickLesk) ([#13926](https://github.com/community-scripts/ProxmoxVE/pull/13926)) +### πŸ’Ύ Core + + - #### ✨ New Features + + - core: Add PHS_VERBOSE env var to skip verbose mode prompts [@gormanity](https://github.com/gormanity) ([#13797](https://github.com/community-scripts/ProxmoxVE/pull/13797)) + ## 2026-04-21 ### πŸ†• New Scripts From a37b36520c5e208068aa4be39495bb9e04b0e615 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Thu, 23 Apr 2026 09:33:40 +0200 Subject: [PATCH 033/102] Prefer silent mode on PHS env conflict (#13951) When PHS_SILENT and PHS_VERBOSE are both set, stop falling back to interactive mode. Changes prefer silent mode to keep automation safe and avoid blocking unattended/non-TTY updates. Only show a whiptail warning when both stdin/stdout are TTYs and whiptail is present, and ignore any whiptail errors. Added a brief comment and adjusted the fallback message accordingly. --- misc/build.func | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/misc/build.func b/misc/build.func index d1588eb89..127e8a641 100644 --- a/misc/build.func +++ b/misc/build.func @@ -3520,10 +3520,14 @@ msg_menu() { # ------------------------------------------------------------------------------ resolve_phs_mode() { if [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]] && [[ -n "${PHS_VERBOSE+x}" ]] && [[ "${PHS_VERBOSE}" == "1" ]]; then - whiptail --backtitle "Proxmox VE Helper Scripts" \ - --title "⚠️ Configuration Conflict Warning" \ - --msgbox "PHS_SILENT and PHS_VERBOSE environment variables are both set.\n\nFalling back to interactive mode." 10 58 - PHS_MODE="interactive" + # Conflict handling must never block unattended/non-TTY updates. + # Prefer silent mode to keep automation safe. + if [[ -t 0 ]] && [[ -t 1 ]] && command -v whiptail >/dev/null 2>&1; then + whiptail --backtitle "Proxmox VE Helper Scripts" \ + --title "Configuration Conflict Warning" \ + --msgbox "PHS_SILENT and PHS_VERBOSE are both set.\n\nFalling back to silent mode." 10 58 || true + fi + PHS_MODE="silent" elif [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]]; then PHS_MODE="silent" elif [[ -n "${PHS_VERBOSE+x}" ]] && [[ "${PHS_VERBOSE}" == "1" ]]; then From aa54abcf50ade5ebc56e65da3d84134262065a8e 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, 23 Apr 2026 07:34:09 +0000 Subject: [PATCH 034/102] Update CHANGELOG.md (#13953) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bcaf3168e..845233774 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -445,6 +445,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-04-23 + +### πŸ’Ύ Core + + - #### 🐞 Bug Fixes + + - core: hotfix - prefer silent mode on PHS env conflict [@MickLesk](https://github.com/MickLesk) ([#13951](https://github.com/community-scripts/ProxmoxVE/pull/13951)) + ## 2026-04-22 ### πŸ†• New Scripts From 874d8f300c684b12d583ae26e27ccc4d734ac838 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Thu, 23 Apr 2026 15:30:19 +0200 Subject: [PATCH 035/102] Revert "Prefer silent mode on PHS env conflict (#13951)" (#13962) This reverts commit a37b36520c5e208068aa4be39495bb9e04b0e615. --- misc/build.func | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/misc/build.func b/misc/build.func index 127e8a641..d1588eb89 100644 --- a/misc/build.func +++ b/misc/build.func @@ -3520,14 +3520,10 @@ msg_menu() { # ------------------------------------------------------------------------------ resolve_phs_mode() { if [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]] && [[ -n "${PHS_VERBOSE+x}" ]] && [[ "${PHS_VERBOSE}" == "1" ]]; then - # Conflict handling must never block unattended/non-TTY updates. - # Prefer silent mode to keep automation safe. - if [[ -t 0 ]] && [[ -t 1 ]] && command -v whiptail >/dev/null 2>&1; then - whiptail --backtitle "Proxmox VE Helper Scripts" \ - --title "Configuration Conflict Warning" \ - --msgbox "PHS_SILENT and PHS_VERBOSE are both set.\n\nFalling back to silent mode." 10 58 || true - fi - PHS_MODE="silent" + whiptail --backtitle "Proxmox VE Helper Scripts" \ + --title "⚠️ Configuration Conflict Warning" \ + --msgbox "PHS_SILENT and PHS_VERBOSE environment variables are both set.\n\nFalling back to interactive mode." 10 58 + PHS_MODE="interactive" elif [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]]; then PHS_MODE="silent" elif [[ -n "${PHS_VERBOSE+x}" ]] && [[ "${PHS_VERBOSE}" == "1" ]]; then From 8706cd3783c2b997e88f7170a9a8449a745449c0 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Thu, 23 Apr 2026 15:30:38 +0200 Subject: [PATCH 036/102] Revert "core: Add PHS_VERBOSE env var to skip verbose mode prompts (#13797)" (#13963) This reverts commit 518b6778e2a6d2dadd53d1969d84841c6d8d642c. --- misc/build.func | 70 +++++++++++++++---------------------------------- misc/core.func | 4 +-- 2 files changed, 23 insertions(+), 51 deletions(-) diff --git a/misc/build.func b/misc/build.func index d1588eb89..56c247e82 100644 --- a/misc/build.func +++ b/misc/build.func @@ -2702,21 +2702,16 @@ advanced_settings() { # STEP 28: Verbose Mode & Confirmation # ═══════════════════════════════════════════════════════════════════════════ 28) - # PHS_VERBOSE forces verbose mode and skips the prompt - if [[ "$PHS_MODE" == "verbose" ]]; then + local verbose_default_flag="--defaultno" + [[ "$_verbose" == "yes" ]] && verbose_default_flag="" + + if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \ + --title "VERBOSE MODE" \ + $verbose_default_flag \ + --yesno "\nEnable Verbose Mode?\n\nShows detailed output during installation." 12 58; then _verbose="yes" else - local verbose_default_flag="--defaultno" - [[ "$_verbose" == "yes" ]] && verbose_default_flag="" - - if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \ - --title "VERBOSE MODE" \ - $verbose_default_flag \ - --yesno "\nEnable Verbose Mode?\n\nShows detailed output during installation." 12 58; then - _verbose="yes" - else - _verbose="no" - fi + _verbose="no" fi # Build summary local ct_type_desc="Unprivileged" @@ -3449,7 +3444,7 @@ configure_ssh_settings() { # msg_menu() # # - Displays a numbered menu for update_script() functions -# - In silent mode (PHS_MODE=silent): auto-selects the default option +# - In silent mode (PHS_SILENT=1): auto-selects the default option # - In interactive mode: shows menu via read with 10s timeout + default fallback # - Usage: CHOICE=$(msg_menu "Title" "tag1" "Description 1" "tag2" "Desc 2" ...) # - The first item is always the default @@ -3473,7 +3468,7 @@ msg_menu() { local count=${#tags[@]} # Silent mode: return default immediately - if [[ "$PHS_MODE" == "silent" ]]; then + if [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]]; then echo "$default_tag" return 0 fi @@ -3509,30 +3504,6 @@ msg_menu() { return 0 } -# ------------------------------------------------------------------------------ -# resolve_phs_mode() -# -# - Resolves PHS_SILENT/PHS_VERBOSE env vars into a single PHS_MODE enum -# - Values: "silent", "verbose", "interactive" -# - If both PHS_SILENT=1 and PHS_VERBOSE=1, shows a conflict warning -# and defaults to "interactive" -# - Should be called once early, before any mode-dependent logic -# ------------------------------------------------------------------------------ -resolve_phs_mode() { - if [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]] && [[ -n "${PHS_VERBOSE+x}" ]] && [[ "${PHS_VERBOSE}" == "1" ]]; then - whiptail --backtitle "Proxmox VE Helper Scripts" \ - --title "⚠️ Configuration Conflict Warning" \ - --msgbox "PHS_SILENT and PHS_VERBOSE environment variables are both set.\n\nFalling back to interactive mode." 10 58 - PHS_MODE="interactive" - elif [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]]; then - PHS_MODE="silent" - elif [[ -n "${PHS_VERBOSE+x}" ]] && [[ "${PHS_VERBOSE}" == "1" ]]; then - PHS_MODE="verbose" - else - PHS_MODE="interactive" - fi -} - # ------------------------------------------------------------------------------ # start() # @@ -3543,16 +3514,17 @@ resolve_phs_mode() { # ------------------------------------------------------------------------------ start() { source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) - resolve_phs_mode if command -v pveversion >/dev/null 2>&1; then install_script || return 0 return 0 - elif [[ "$PHS_MODE" == "silent" ]]; then + elif [ ! -z ${PHS_SILENT+x} ] && [[ "${PHS_SILENT}" == "1" ]]; then VERBOSE="no" set_std_mode - elif [[ "$PHS_MODE" == "verbose" ]]; then - VERBOSE="yes" - set_std_mode + ensure_profile_loaded + get_lxc_ip + update_script + update_motd_ip + cleanup_lxc else CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "${APP} LXC Update/Setting" --menu \ "Support/Update functions for ${APP} LXC. Choose an option:" \ @@ -3576,12 +3548,12 @@ start() { exit 0 ;; esac + ensure_profile_loaded + get_lxc_ip + update_script + update_motd_ip + cleanup_lxc fi - ensure_profile_loaded - get_lxc_ip - update_script - update_motd_ip - cleanup_lxc } # ============================================================================== diff --git a/misc/core.func b/misc/core.func index ea5a775e7..220281958 100644 --- a/misc/core.func +++ b/misc/core.func @@ -940,7 +940,7 @@ is_verbose_mode() { # # - Detects if script is running in unattended/non-interactive mode # - Checks MODE variable first (primary method) -# - Falls back to legacy flags (PHS_MODE, var_unattended) +# - Falls back to legacy flags (PHS_SILENT, var_unattended) # - Returns 0 (true) if unattended, 1 (false) otherwise # - Used by prompt functions to auto-apply defaults # @@ -984,7 +984,7 @@ is_unattended() { esac # Legacy fallbacks for compatibility - [[ "${PHS_MODE:-}" == "silent" ]] && return 0 + [[ "${PHS_SILENT:-0}" == "1" ]] && return 0 [[ "${var_unattended:-}" =~ ^(yes|true|1)$ ]] && return 0 [[ "${UNATTENDED:-}" =~ ^(yes|true|1)$ ]] && return 0 From 116253df1a54604e14182cd9b879b3828ad1effb 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, 23 Apr 2026 13:30:51 +0000 Subject: [PATCH 037/102] Update CHANGELOG.md (#13964) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 845233774..37f4e28cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -449,6 +449,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸ’Ύ Core + - Revert "core: hotfix - prefer silent mode on PHS env conflict" [@MickLesk](https://github.com/MickLesk) ([#13962](https://github.com/community-scripts/ProxmoxVE/pull/13962)) + - #### 🐞 Bug Fixes - core: hotfix - prefer silent mode on PHS env conflict [@MickLesk](https://github.com/MickLesk) ([#13951](https://github.com/community-scripts/ProxmoxVE/pull/13951)) From 01bbacec220e964d4b809505c68a03d410e4ebfe 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, 23 Apr 2026 13:31:16 +0000 Subject: [PATCH 038/102] Update CHANGELOG.md (#13965) 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 37f4e28cc..f75f2a94b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -449,7 +449,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸ’Ύ Core - - Revert "core: hotfix - prefer silent mode on PHS env conflict" [@MickLesk](https://github.com/MickLesk) ([#13962](https://github.com/community-scripts/ProxmoxVE/pull/13962)) + - Revert "core: Add PHS_VERBOSE env var to skip verbose mode prompts" [@MickLesk](https://github.com/MickLesk) ([#13963](https://github.com/community-scripts/ProxmoxVE/pull/13963)) +- Revert "core: hotfix - prefer silent mode on PHS env conflict" [@MickLesk](https://github.com/MickLesk) ([#13962](https://github.com/community-scripts/ProxmoxVE/pull/13962)) - #### 🐞 Bug Fixes From 9f50496f8b508b9d5c52c158dfbe8fe8801c959e Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Thu, 23 Apr 2026 15:49:54 +0200 Subject: [PATCH 039/102] fix(tools.func): upgrade Node.js minor/patch on same major version (#13957) In setup_nodejs() Scenario 1 (major version already matches), only npm was refreshed - apt never upgraded the nodejs package itself. This left existing LXCs stuck on older minor releases (e.g. 22.13.1) even though NodeSource ships newer ones (e.g. 22.19+). Fix: add pt-get install -y --only-upgrade nodejs before the npm pin so the latest minor/patch from the already-configured NodeSource repo is always installed. Fixes: seerr update failing with ERR_PNPM_UNSUPPORTED_ENGINE because seerr 3.2.0 requires Node >=22.19.0 but installed was v22.13.1 (#13955) --- misc/tools.func | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/misc/tools.func b/misc/tools.func index aa9bf4fed..751210ed9 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -6336,12 +6336,15 @@ function setup_nodejs() { } fi - # Scenario 1: Already installed at target version - just update packages/modules + # Scenario 1: Already installed at target version - upgrade to latest minor/patch + update packages/modules if [[ -n "$CURRENT_NODE_VERSION" && "$CURRENT_NODE_VERSION" == "$NODE_VERSION" ]]; then msg_info "Update Node.js $NODE_VERSION" ensure_apt_working || return 100 + # Upgrade to the latest minor/patch release from NodeSource + $STD apt-get install -y --only-upgrade nodejs 2>/dev/null || true + # Pin npm to 11.11.0 to work around Node.js 22.22.2 regression (nodejs/node#62425) $STD npm install -g npm@11.11.0 2>/dev/null || true From 7141f8967629596591509e4d31b3fcbb75796b80 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, 23 Apr 2026 13:50:24 +0000 Subject: [PATCH 040/102] Update CHANGELOG.md (#13966) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f75f2a94b..bb077c527 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -454,6 +454,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - tools.func: upgrade Node.js minor/patch on same major version [@MickLesk](https://github.com/MickLesk) ([#13957](https://github.com/community-scripts/ProxmoxVE/pull/13957)) - core: hotfix - prefer silent mode on PHS env conflict [@MickLesk](https://github.com/MickLesk) ([#13951](https://github.com/community-scripts/ProxmoxVE/pull/13951)) ## 2026-04-22 From 9c440557092afad135eb2a500594d7288b94d881 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Thu, 23 Apr 2026 15:50:26 +0200 Subject: [PATCH 041/102] Updated to match our starndard (#13956) --- ct/checkmate.sh | 2 +- ct/flatnotes.sh | 2 +- ct/linkding.sh | 2 +- ct/nodecast-tv.sh | 2 +- ct/termix.sh | 2 +- install/checkmate-install.sh | 2 +- install/linkding-install.sh | 2 +- install/nodecast-tv-install.sh | 2 +- install/romm-install.sh | 2 +- install/termix-install.sh | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ct/checkmate.sh b/ct/checkmate.sh index a8c14445b..cd8e23ae0 100644 --- a/ct/checkmate.sh +++ b/ct/checkmate.sh @@ -39,7 +39,7 @@ function update_script() { [ -f /opt/checkmate/client/.env.local ] && cp /opt/checkmate/client/.env.local /opt/checkmate_client.env.local.bak msg_ok "Backed up Data" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" "tarball" msg_info "Updating Checkmate Server" cd /opt/checkmate/server diff --git a/ct/flatnotes.sh b/ct/flatnotes.sh index 06e188e23..b88065247 100644 --- a/ct/flatnotes.sh +++ b/ct/flatnotes.sh @@ -38,7 +38,7 @@ function update_script() { cp -r /opt/flatnotes/data /opt/flatnotes_data_backup msg_ok "Backed up Configuration and Data" - fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes" + fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes" "tarball" msg_info "Updating Flatnotes" cd /opt/flatnotes/client diff --git a/ct/linkding.sh b/ct/linkding.sh index d770b8be2..b0604291f 100644 --- a/ct/linkding.sh +++ b/ct/linkding.sh @@ -39,7 +39,7 @@ function update_script() { cp /opt/linkding/.env /opt/linkding_env_backup msg_ok "Backed up Data" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" "tarball" msg_info "Restoring Data" cp -r /opt/linkding_data_backup/. /opt/linkding/data diff --git a/ct/nodecast-tv.sh b/ct/nodecast-tv.sh index 730b70136..63ec5bc8e 100644 --- a/ct/nodecast-tv.sh +++ b/ct/nodecast-tv.sh @@ -34,7 +34,7 @@ function update_script() { systemctl stop nodecast-tv msg_ok "Stopped Service" - fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv" + fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv" "tarball" msg_info "Updating Modules" cd /opt/nodecast-tv diff --git a/ct/termix.sh b/ct/termix.sh index c89d09e31..cac5acfa1 100644 --- a/ct/termix.sh +++ b/ct/termix.sh @@ -145,7 +145,7 @@ EOF cp -r /opt/termix/uploads /opt/termix_uploads_backup msg_ok "Backed up Data" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" "tarball" msg_info "Recreating Directories" mkdir -p /opt/termix/html \ diff --git a/install/checkmate-install.sh b/install/checkmate-install.sh index ef6ad02cc..9aaef3ec8 100644 --- a/install/checkmate-install.sh +++ b/install/checkmate-install.sh @@ -22,7 +22,7 @@ msg_ok "Installed Dependencies" MONGO_VERSION="8.0" setup_mongodb NODE_VERSION="22" setup_nodejs -fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" +fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" "tarball" msg_info "Configuring Checkmate" JWT_SECRET="$(openssl rand -hex 32)" diff --git a/install/linkding-install.sh b/install/linkding-install.sh index a77509d83..88ed1d433 100644 --- a/install/linkding-install.sh +++ b/install/linkding-install.sh @@ -27,7 +27,7 @@ msg_ok "Installed Dependencies" NODE_VERSION="22" setup_nodejs setup_uv -fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" +fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" "tarball" msg_info "Building Frontend" cd /opt/linkding diff --git a/install/nodecast-tv-install.sh b/install/nodecast-tv-install.sh index d4b3652bd..ecbb2e4c3 100644 --- a/install/nodecast-tv-install.sh +++ b/install/nodecast-tv-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv" +fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv" "tarball" NODE_VERSION="20" setup_nodejs msg_info "Installing Dependencies" diff --git a/install/romm-install.sh b/install/romm-install.sh index eab5ce485..515355110 100644 --- a/install/romm-install.sh +++ b/install/romm-install.sh @@ -120,7 +120,7 @@ fetch_and_deploy_gh_release "RAHasher" "RetroAchievements/RALibretro" "prebuild" cp /opt/RALibretro/RAHasher /usr/bin/RAHasher chmod +x /usr/bin/RAHasher -fetch_and_deploy_gh_release "romm" "rommapp/romm" +fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball" msg_info "Creating environment file" sed -i 's/^supervised no/supervised systemd/' /etc/redis/redis.conf diff --git a/install/termix-install.sh b/install/termix-install.sh index 557e71e8c..f152ebb3d 100644 --- a/install/termix-install.sh +++ b/install/termix-install.sh @@ -55,7 +55,7 @@ rm -rf /opt/guacamole-server msg_ok "Built Guacamole Server (guacd)" NODE_VERSION="22" setup_nodejs -fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" +fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" "tarball" msg_info "Building Frontend" cd /opt/termix From a2bf10d2f2522f1a06c56401f0837ba67665dd58 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, 23 Apr 2026 13:50:52 +0000 Subject: [PATCH 042/102] Update CHANGELOG.md (#13967) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb077c527..f50568fe9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -447,6 +447,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-04-23 +### πŸš€ Updated Scripts + + - #### πŸ”§ Refactor + + - Update scripts to match standard [@tremor021](https://github.com/tremor021) ([#13956](https://github.com/community-scripts/ProxmoxVE/pull/13956)) + ### πŸ’Ύ Core - Revert "core: Add PHS_VERBOSE env var to skip verbose mode prompts" [@MickLesk](https://github.com/MickLesk) ([#13963](https://github.com/community-scripts/ProxmoxVE/pull/13963)) From 1476849f3c7d4122336745fc0c35bafb7a2be072 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Thu, 23 Apr 2026 15:51:01 +0200 Subject: [PATCH 043/102] twingate-connector: perform real apt upgrade during update flow (#13959) * fix(twingate-connector): perform real apt upgrade during update flow The update path used ensure_dependencies, which only installs missing packages and does not upgrade already installed ones. As a result, users could see 'Updated successfully' even when a newer twingate-connector version was available. Switch update_script to a real package update flow: - ensure apt is healthy - refresh apt metadata - install/upgrade twingate-connector via retry helper - restart service This aligns behavior with Twingate's documented upgrade process. * Update twingate-connector.sh --- ct/twingate-connector.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ct/twingate-connector.sh b/ct/twingate-connector.sh index 1c662686b..0f97f1877 100644 --- a/ct/twingate-connector.sh +++ b/ct/twingate-connector.sh @@ -29,8 +29,9 @@ function update_script() { exit fi - msg_info "Updating ${APP}" - ensure_dependencies twingate-connector + msg_info "Updating Twingate Connector" + $STD apt update + $STD apt install -y --only-upgrade twingate-connector $STD systemctl restart twingate-connector msg_ok "Updated successfully!" exit From 687e77846027d0e957cd669ac34c7e0ca001d453 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, 23 Apr 2026 13:51:25 +0000 Subject: [PATCH 044/102] Update CHANGELOG.md (#13968) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f50568fe9..eb6b5b325 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -449,6 +449,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸš€ Updated Scripts + - #### 🐞 Bug Fixes + + - twingate-connector: perform real apt upgrade during update flow [@MickLesk](https://github.com/MickLesk) ([#13959](https://github.com/community-scripts/ProxmoxVE/pull/13959)) + - #### πŸ”§ Refactor - Update scripts to match standard [@tremor021](https://github.com/tremor021) ([#13956](https://github.com/community-scripts/ProxmoxVE/pull/13956)) From 145602a8c35cdaa72bfc13a30114e07370c6b1ea Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Thu, 23 Apr 2026 15:52:12 +0200 Subject: [PATCH 045/102] mealie: start.sh missing after failed update (#13958) * fix(mealie): restore start.sh before build steps to prevent broken container When CLEAN_INSTALL=1 wipes /opt/mealie/* and a subsequent build step fails (uv sync, yarn install, yarn generate - e.g. due to OOM or network error), start.sh was never written because it was created at the very end of the update function. On the next reboot systemd could not find the ExecStart binary and the container was left in a permanently broken state. Fix: move mealie.env restore and start.sh creation to immediately after fetch_and_deploy_gh_release, before any build steps that can fail. This ensures the service entry point is always present even if the build is interrupted, allowing uv to self-heal on next startup. Fixes: #13945 * fix(mealie): backup and restore start.sh alongside mealie.env Instead of recreating start.sh from a heredoc after CLEAN_INSTALL wipes /opt/mealie/*, simply back it up before the wipe and restore it together with mealie.env. Simpler and avoids any drift between the hardcoded heredoc and what was actually installed. * fix(mealie): fallback heredoc if start.sh missing before backup --- ct/mealie.sh | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/ct/mealie.sh b/ct/mealie.sh index fb51f0471..89312ddc1 100644 --- a/ct/mealie.sh +++ b/ct/mealie.sh @@ -38,10 +38,27 @@ function update_script() { msg_info "Backing up Configuration" cp -f /opt/mealie/mealie.env /opt/mealie.env + [[ -f /opt/mealie/start.sh ]] && cp -f /opt/mealie/start.sh /opt/mealie.start.sh msg_ok "Backup completed" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" + msg_info "Restoring Configuration" + mv -f /opt/mealie.env /opt/mealie/mealie.env + if [[ -f /opt/mealie.start.sh ]]; then + mv -f /opt/mealie.start.sh /opt/mealie/start.sh + else + cat <<'STARTEOF' >/opt/mealie/start.sh +#!/bin/bash +set -a +source /opt/mealie/mealie.env +set +a +exec uv run mealie +STARTEOF + fi + chmod +x /opt/mealie/start.sh + msg_ok "Configuration restored" + msg_info "Installing Python Dependencies with uv" cd /opt/mealie $STD uv sync --frozen --extra pgsql @@ -70,18 +87,6 @@ function update_script() { $STD uv run python -m nltk.downloader -d /nltk_data averaged_perceptron_tagger_eng msg_ok "Updated NLTK Data" - msg_info "Restoring Configuration" - mv -f /opt/mealie.env /opt/mealie/mealie.env - cat <<'STARTEOF' >/opt/mealie/start.sh -#!/bin/bash -set -a -source /opt/mealie/mealie.env -set +a -exec uv run mealie -STARTEOF - chmod +x /opt/mealie/start.sh - msg_ok "Configuration restored" - msg_info "Starting Service" systemctl start mealie msg_ok "Started Service" From 7e1b2b4f92ed4582eed7d44d5141806cd75cddb5 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, 23 Apr 2026 13:52:42 +0000 Subject: [PATCH 046/102] Update CHANGELOG.md (#13969) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb6b5b325..45d79df98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -451,6 +451,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - mealie: start.sh missing after failed update [@MickLesk](https://github.com/MickLesk) ([#13958](https://github.com/community-scripts/ProxmoxVE/pull/13958)) - twingate-connector: perform real apt upgrade during update flow [@MickLesk](https://github.com/MickLesk) ([#13959](https://github.com/community-scripts/ProxmoxVE/pull/13959)) - #### πŸ”§ Refactor From 3c386470557b992f9e43e22961032ff4ce7f8bfc Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Thu, 23 Apr 2026 20:52:59 +0200 Subject: [PATCH 047/102] core: improve system update information / lxc stack upgrade (#13970) * fix(lxc-stack): use dist-upgrade and improve recovery prompt When the host LXC stack is too old for a template, upgrading only pve-container/lxc-pve can leave the Proxmox stack in an inconsistent state. Use a full dist-upgrade instead. Also refine the recovery prompt: - [1] Upgrade LXC stack now - [2] Older template fallback only when actually available - [3] Ignore - [4] Cancel Do not auto-fallback to an older template after ignore/failure; honor the user's explicit choice and stop with a clear error instead. * chore(lxc-stack-prompt): clarify host dist-upgrade action in option 1 * Update build.func * fix(lxc-stack): use host upgrade instead of dist-upgrade in recovery flow * Enhance upgrade prompt with warning message Added a warning message to inform users about the implications of running the host upgrade. --------- Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> --- misc/build.func | 149 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 111 insertions(+), 38 deletions(-) diff --git a/misc/build.func b/misc/build.func index 56c247e82..272dc1f66 100644 --- a/misc/build.func +++ b/misc/build.func @@ -5376,13 +5376,59 @@ create_lxc_container() { # Offer upgrade for pve-container/lxc-pve if candidate > installed; optional auto-retry pct create # Returns: - # 0 = no upgrade needed / container created after upgrade or fallback + # 0 = no upgrade needed / container created after upgrade or explicit fallback # 1 = upgraded (and if do_retry=yes and retry succeeded, creation done) - # 2 = user declined + # 2 = user chose ignore # 3 = upgrade attempted but failed OR retry failed + # 4 = user cancelled offer_lxc_stack_upgrade_and_maybe_retry() { local do_retry="${1:-no}" # yes|no local _pvec_i _pvec_c _lxcp_i _lxcp_c need=0 + local _ans + + has_previous_os_version_template() { + local os_type="${PCT_OSTYPE:-}" + local current_ver="${PCT_OSVERSION:-}" + local tpl_pattern="${TEMPLATE_PATTERN:-${TEMPLATE:-}}" + local -a all_versions=() + + [[ -n "$os_type" && -n "$current_ver" ]] || return 1 + + mapfile -t _local_vers < <( + pveam list "$TEMPLATE_STORAGE" 2>/dev/null | + awk '{print $1}' | + sed 's|.*/||' | + grep -E "^${os_type}-[0-9]" | + { [[ -n "$tpl_pattern" ]] && grep "$tpl_pattern" || cat; } | + sed -E "s/^${os_type}-([0-9]+(\.[0-9]+)?).*/\1/" | + sort -u -V + ) + all_versions+=("${_local_vers[@]}") + + if command -v timeout &>/dev/null; then + timeout 30 pveam update >/dev/null 2>&1 || true + else + pveam update >/dev/null 2>&1 || true + fi + mapfile -t _online_vers < <( + pveam available -section system 2>/dev/null | + awk '{print $2}' | + grep -E "^${os_type}-[0-9]" | + { [[ -n "$tpl_pattern" ]] && grep "$tpl_pattern" || cat; } | + sed -E "s/^${os_type}-([0-9]+(\.[0-9]+)?).*/\1/" | + sort -u -V 2>/dev/null || true + ) + all_versions+=("${_online_vers[@]}") + + printf '%s\n' "${all_versions[@]}" | sort -u -V | awk -v cur="$current_ver" ' + { + split($0, a, ".") + split(cur, b, ".") + if (a[1]+0 < b[1]+0) found=1 + } + END { exit found ? 0 : 1 } + ' + } _pvec_i="$(pkg_ver pve-container)" _lxcp_i="$(pkg_ver lxc-pve)" @@ -5403,19 +5449,25 @@ create_lxc_container() { msg_warn "An update for the Proxmox LXC stack is available" echo " pve-container: installed=${_pvec_i:-n/a} candidate=${_pvec_c:-n/a}" echo " lxc-pve : installed=${_lxcp_i:-n/a} candidate=${_lxcp_c:-n/a}" + echo " note : option 1 runs host apt update + apt upgrade" echo # Offer older OS version fallback when template version might be too new for LXC stack local _has_fallback_option=false - if [[ -n "${PCT_OSTYPE:-}" && -n "${PCT_OSVERSION:-}" ]]; then + if [[ "$do_retry" == "yes" ]] && has_previous_os_version_template; then _has_fallback_option=true - echo " [1] Upgrade LXC stack now (recommended)" + echo " [1] Run host upgrade now (recommended). WARNING: this runs apt upgrade and updates all Packeages on your host!" echo " [2] Use an older ${PCT_OSTYPE} template instead (may not work with all scripts)" + echo " [3] Ignore" + echo " [4] Cancel" + echo + read -rp "Select option [1/2/3/4]: " _ans /dev/null; then msg_error "LXC stack upgrade caused PVE tool breakage (likely Perl module incompatibility)." msg_custom "⚠️" "${YW}" "A partial package upgrade has left the PVE stack in an inconsistent state." msg_custom "πŸ”§" "${YW}" "Please run the following on the Proxmox host, then retry:" - echo -e "${TAB} apt update && apt dist-upgrade -y" + echo -e "${TAB} apt update && apt upgrade -y" echo -e "${TAB} reboot" return 3 fi @@ -6061,16 +6126,20 @@ create_lxc_container() { rc=$? case $rc in 0) : ;; # success - container created, continue - 2 | 3) - # Upgrade declined or failed β€” try older OS version as last resort - msg_warn "Attempting older ${PCT_OSTYPE:-} version as last resort" - if fallback_to_previous_os_version; then - : # success - else - msg_error "All recovery options exhausted. Please inspect: $LOGFILE" - _flush_pct_log - exit 231 - fi + 2) + msg_error "LXC stack upgrade ignored. Please inspect: $LOGFILE" + _flush_pct_log + exit 231 + ;; + 3) + msg_error "LXC stack upgrade failed. Please inspect: $LOGFILE" + _flush_pct_log + exit 231 + ;; + 4) + msg_error "Cancelled by user." + _flush_pct_log + exit 231 ;; esac else @@ -6094,16 +6163,20 @@ create_lxc_container() { rc=$? case $rc in 0) : ;; # success - container created, continue - 2 | 3) - # Upgrade declined or failed β€” try older OS version as last resort - msg_warn "Attempting older ${PCT_OSTYPE:-} version as last resort" - if fallback_to_previous_os_version; then - : # success - else - msg_error "All recovery options exhausted. Please inspect: $LOGFILE" - _flush_pct_log - exit 231 - fi + 2) + msg_error "LXC stack upgrade ignored. Please inspect: $LOGFILE" + _flush_pct_log + exit 231 + ;; + 3) + msg_error "LXC stack upgrade failed. Please inspect: $LOGFILE" + _flush_pct_log + exit 231 + ;; + 4) + msg_error "Cancelled by user." + _flush_pct_log + exit 231 ;; esac else From c3c544d5a4942dc806695573a68814df555c8272 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, 23 Apr 2026 18:53:24 +0000 Subject: [PATCH 048/102] Update CHANGELOG.md (#13972) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45d79df98..b9c3308e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -468,6 +468,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - tools.func: upgrade Node.js minor/patch on same major version [@MickLesk](https://github.com/MickLesk) ([#13957](https://github.com/community-scripts/ProxmoxVE/pull/13957)) - core: hotfix - prefer silent mode on PHS env conflict [@MickLesk](https://github.com/MickLesk) ([#13951](https://github.com/community-scripts/ProxmoxVE/pull/13951)) + - #### πŸ”§ Refactor + + - core: improve system update information / lxc stack upgrade [@MickLesk](https://github.com/MickLesk) ([#13970](https://github.com/community-scripts/ProxmoxVE/pull/13970)) + ## 2026-04-22 ### πŸ†• New Scripts From fdab25b09883b982157950ea50ed131d5cc19b40 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Thu, 23 Apr 2026 22:17:25 +0200 Subject: [PATCH 049/102] core: auto-size NODE_OPTIONS heap (#13960) * feat(nodejs): auto-size NODE_OPTIONS heap and apply in Termix updates - setup_nodejs now sets NODE_OPTIONS only when not already set - Heap size is auto-derived from NODE_MAX_OLD_SPACE_SIZE, var_ram, or MemTotal - Auto heap is clamped to 1024..4096 MB to avoid too-small or too-large defaults - Termix update path now calls setup_nodejs before frontend/backend builds so Node heap defaults are applied consistently during updates * feat(error-handler): add actionable Node.js heap OOM guidance Detect probable Node.js heap out-of-memory failures from log patterns and common build exit codes, then print targeted remediation hints instead of only a generic SIGABRT/SIGKILL message. - Detect OOM patterns in last log lines (Reached heap limit, JS heap OOM) - Treat node build contexts with exit 134/137/243 as likely heap issues - Suggest computed --max-old-space-size based on NODE_OPTIONS, var_ram, or MemTotal (clamped to 1024..4096 MB) - Recommend calling setup_nodejs before build steps so defaults apply * refactor(node-heap): raise auto cap to 12GB and simplify OOM hint - Increase setup_nodejs auto heap clamp from 4GB to 12GB for heavy frontend builds - Keep lower bound at 1GB and preserve user override precedence - Simplify error_handler Node OOM output to a single concise hint - Align error_handler heap suggestion clamp to 12GB --- ct/termix.sh | 2 ++ misc/error_handler.func | 45 +++++++++++++++++++++++++++++++++++++++++ misc/tools.func | 32 ++++++++++++++++++++++++++++- 3 files changed, 78 insertions(+), 1 deletion(-) diff --git a/ct/termix.sh b/ct/termix.sh index cac5acfa1..fac375992 100644 --- a/ct/termix.sh +++ b/ct/termix.sh @@ -155,6 +155,8 @@ EOF /opt/termix/nginx/client_body msg_ok "Recreated Directories" + NODE_VERSION="24" setup_nodejs + msg_info "Building Frontend" cd /opt/termix export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 diff --git a/misc/error_handler.func b/misc/error_handler.func index dd816dc22..50e8dac42 100644 --- a/misc/error_handler.func +++ b/misc/error_handler.func @@ -313,6 +313,51 @@ error_handler() { echo -e "${TAB}-----------------------------------\n" fi + # Detect probable Node.js heap OOM and print actionable guidance. + # This avoids generic SIGABRT/SIGKILL confusion for frontend build failures. + local node_oom_detected="false" + local node_build_context="false" + if [[ "$command" =~ (npm|pnpm|yarn|node|vite|turbo) ]]; then + node_build_context="true" + fi + if [[ "$exit_code" == "243" ]]; then + node_oom_detected="true" + elif [[ -n "$active_log" && -s "$active_log" ]]; then + if tail -n 200 "$active_log" 2>/dev/null | grep -Eqi 'Reached heap limit|JavaScript heap out of memory|Allocation failed - JavaScript heap out of memory|FATAL ERROR: Reached heap limit'; then + node_oom_detected="true" + fi + fi + + if [[ "$node_oom_detected" == "true" ]] || { [[ "$node_build_context" == "true" ]] && [[ "$exit_code" =~ ^(134|137)$ ]]; }; then + local heap_hint_mb="" + + # If explicitly configured, prefer the current value for troubleshooting output. + if [[ -n "${NODE_OPTIONS:-}" ]] && [[ "${NODE_OPTIONS}" =~ max-old-space-size=([0-9]+) ]]; then + heap_hint_mb="${BASH_REMATCH[1]}" + elif [[ -n "${var_ram:-}" ]] && [[ "${var_ram}" =~ ^[0-9]+$ ]]; then + heap_hint_mb=$((var_ram * 75 / 100)) + else + local mem_kb="" + mem_kb=$(awk '/^MemTotal:/ {print $2; exit}' /proc/meminfo 2>/dev/null || echo "") + if [[ "$mem_kb" =~ ^[0-9]+$ ]]; then + local mem_mb=$((mem_kb / 1024)) + heap_hint_mb=$((mem_mb * 75 / 100)) + fi + fi + + if [[ -z "$heap_hint_mb" ]] || ((heap_hint_mb < 1024)); then + heap_hint_mb=1024 + elif ((heap_hint_mb > 12288)); then + heap_hint_mb=12288 + fi + + if declare -f msg_warn >/dev/null 2>&1; then + msg_warn "Possible Node.js heap OOM. Try: export NODE_OPTIONS=\"--max-old-space-size=${heap_hint_mb}\" and rerun the build." + else + echo -e "${YW}Possible Node.js heap OOM. Try: export NODE_OPTIONS=\"--max-old-space-size=${heap_hint_mb}\" and rerun the build.${CL}" + fi + fi + # Detect context: Container (INSTALL_LOG set + inside container /root) vs Host if [[ -n "${INSTALL_LOG:-}" && -f "${INSTALL_LOG:-}" && -d /root ]]; then # CONTAINER CONTEXT: Copy log and create flag file for host diff --git a/misc/tools.func b/misc/tools.func index 751210ed9..81621a8f3 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -6423,7 +6423,37 @@ function setup_nodejs() { msg_ok "Setup Node.js $NODE_VERSION" fi - export NODE_OPTIONS="--max-old-space-size=4096" + # Set a safe default heap limit for Node.js builds if not explicitly provided. + # Priority: + # 1) NODE_OPTIONS (caller/user override) + # 2) NODE_MAX_OLD_SPACE_SIZE (explicit MB override) + # 3) var_ram (LXC memory setting, MB) + # 4) /proc/meminfo (runtime memory detection) + # Auto value is clamped to 1024..12288 MB. + if [[ -z "${NODE_OPTIONS:-}" ]]; then + local node_heap_mb="" + + if [[ -n "${NODE_MAX_OLD_SPACE_SIZE:-}" ]] && [[ "${NODE_MAX_OLD_SPACE_SIZE}" =~ ^[0-9]+$ ]]; then + node_heap_mb="${NODE_MAX_OLD_SPACE_SIZE}" + elif [[ -n "${var_ram:-}" ]] && [[ "${var_ram}" =~ ^[0-9]+$ ]]; then + node_heap_mb=$((var_ram * 75 / 100)) + else + local total_mem_kb="" + total_mem_kb=$(awk '/^MemTotal:/ {print $2; exit}' /proc/meminfo 2>/dev/null || echo "") + if [[ "$total_mem_kb" =~ ^[0-9]+$ ]]; then + local total_mem_mb=$((total_mem_kb / 1024)) + node_heap_mb=$((total_mem_mb * 75 / 100)) + fi + fi + + if [[ -z "$node_heap_mb" ]] || ((node_heap_mb < 1024)); then + node_heap_mb=1024 + elif ((node_heap_mb > 12288)); then + node_heap_mb=12288 + fi + + export NODE_OPTIONS="--max-old-space-size=${node_heap_mb}" + fi # Ensure valid working directory for npm (avoids uv_cwd error) if [[ ! -d /opt ]]; then From db2780ff44d2e8c726c78b5fe9af98254250664a 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, 23 Apr 2026 20:17:58 +0000 Subject: [PATCH 050/102] Update CHANGELOG.md (#13975) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9c3308e0..c19de3c6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -454,15 +454,16 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - mealie: start.sh missing after failed update [@MickLesk](https://github.com/MickLesk) ([#13958](https://github.com/community-scripts/ProxmoxVE/pull/13958)) - twingate-connector: perform real apt upgrade during update flow [@MickLesk](https://github.com/MickLesk) ([#13959](https://github.com/community-scripts/ProxmoxVE/pull/13959)) + - #### ✨ New Features + + - core: auto-size NODE_OPTIONS heap [@MickLesk](https://github.com/MickLesk) ([#13960](https://github.com/community-scripts/ProxmoxVE/pull/13960)) + - #### πŸ”§ Refactor - Update scripts to match standard [@tremor021](https://github.com/tremor021) ([#13956](https://github.com/community-scripts/ProxmoxVE/pull/13956)) ### πŸ’Ύ Core - - Revert "core: Add PHS_VERBOSE env var to skip verbose mode prompts" [@MickLesk](https://github.com/MickLesk) ([#13963](https://github.com/community-scripts/ProxmoxVE/pull/13963)) -- Revert "core: hotfix - prefer silent mode on PHS env conflict" [@MickLesk](https://github.com/MickLesk) ([#13962](https://github.com/community-scripts/ProxmoxVE/pull/13962)) - - #### 🐞 Bug Fixes - tools.func: upgrade Node.js minor/patch on same major version [@MickLesk](https://github.com/MickLesk) ([#13957](https://github.com/community-scripts/ProxmoxVE/pull/13957)) From 7a440679f5906bfdb4c2252d13f8b54087e18477 Mon Sep 17 00:00:00 2001 From: Soppster1029 Date: Thu, 23 Apr 2026 19:08:21 -0500 Subject: [PATCH 051/102] Update wger.sh (#13977) --- ct/wger.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ct/wger.sh b/ct/wger.sh index 7417e941e..85637beb8 100644 --- a/ct/wger.sh +++ b/ct/wger.sh @@ -53,6 +53,8 @@ function update_script() { set -a && source /opt/wger/.env && set +a export DJANGO_SETTINGS_MODULE=settings.main $STD uv pip install . + $STD npm install + $STD npm run build:css:sass $STD uv run python manage.py migrate $STD uv run python manage.py collectstatic --no-input msg_ok "Updated wger" From d3efebce67ba36169875c1cc5a7987da15fcffda Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 00:08:48 +0000 Subject: [PATCH 052/102] Update CHANGELOG.md (#13980) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c19de3c6e..cbda2dc5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -445,6 +445,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-04-24 + +### πŸš€ Updated Scripts + + - Update wger.sh [@Soppster1029](https://github.com/Soppster1029) ([#13977](https://github.com/community-scripts/ProxmoxVE/pull/13977)) + ## 2026-04-23 ### πŸš€ Updated Scripts From a36d0cb20c9a19b0cdd4951aae61717635a22746 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 10:10:17 +0200 Subject: [PATCH 053/102] Jitsi-Meet (#13897) * Add jitsi-meet (ct) * Update author in jitsi-meet.sh script * Remove unnecessary newline in jitsi-meet.sh * Refactor setup_deb822_repo command for readability --------- Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com> --- ct/jitsi-meet.sh | 50 +++++++++++++++++++++++++++++++++++ install/jitsi-meet-install.sh | 35 ++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 ct/jitsi-meet.sh create mode 100644 install/jitsi-meet-install.sh diff --git a/ct/jitsi-meet.sh b/ct/jitsi-meet.sh new file mode 100644 index 000000000..1b57f485e --- /dev/null +++ b/ct/jitsi-meet.sh @@ -0,0 +1,50 @@ +#!/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://jitsi.org/ + +APP="Jitsi-Meet" +var_tags="${var_tags:-video;conference;communication}" +var_cpu="${var_cpu:-4}" +var_ram="${var_ram:-4096}" +var_disk="${var_disk:-12}" +var_os="${var_os:-debian}" +var_version="${var_version:-12}" +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 /etc/jitsi ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + msg_info "Updating Jitsi Meet" + $STD apt update + $STD apt install -y --only-upgrade \ + jitsi-meet \ + jicofo \ + jitsi-videobridge2 \ + prosody + msg_ok "Updated Jitsi Meet" + 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}https://${IP}${CL}" diff --git a/install/jitsi-meet-install.sh b/install/jitsi-meet-install.sh new file mode 100644 index 000000000..4d24339d6 --- /dev/null +++ b/install/jitsi-meet-install.sh @@ -0,0 +1,35 @@ +#!/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://jitsi.org/ + +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 +msg_ok "Installed Dependencies" + +source /etc/os-release +setup_deb822_repo "jitsi" \ + "https://download.jitsi.org/jitsi-key.gpg.key" \ + "https://download.jitsi.org" \ + "stable/" \ + "" + +msg_info "Installing Jitsi Meet" +echo "jitsi-videobridge2 jitsi-videobridge/jvb-hostname string ${LOCAL_IP}" | debconf-set-selections +echo "jitsi-meet-web-config jitsi-meet/cert-choice select Generate a new self-signed certificate" | debconf-set-selections +DEBIAN_FRONTEND=noninteractive $STD apt install -y jitsi-meet +msg_ok "Installed Jitsi Meet" + +motd_ssh +customize +cleanup_lxc From 2b288ee6176dfee867b2cc5e0fed74181c3c464d Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 08:10:42 +0000 Subject: [PATCH 054/102] Update CHANGELOG.md (#13985) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbda2dc5a..1d1355af1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -447,6 +447,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-04-24 +### πŸ†• New Scripts + + - Jitsi-Meet ([#13897](https://github.com/community-scripts/ProxmoxVE/pull/13897)) + ### πŸš€ Updated Scripts - Update wger.sh [@Soppster1029](https://github.com/Soppster1029) ([#13977](https://github.com/community-scripts/ProxmoxVE/pull/13977)) From f4a141019e81e40a6b680ab0120a50c05c353eb2 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 10:11:40 +0200 Subject: [PATCH 055/102] Update .app files (#13986) Co-authored-by: GitHub Actions --- ct/headers/jitsi-meet | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ct/headers/jitsi-meet diff --git a/ct/headers/jitsi-meet b/ct/headers/jitsi-meet new file mode 100644 index 000000000..eefeea882 --- /dev/null +++ b/ct/headers/jitsi-meet @@ -0,0 +1,6 @@ + ___ __ _ __ ___ __ + / (_) /______(_) / |/ /__ ___ / /_ + __ / / / __/ ___/ /_____/ /|_/ / _ \/ _ \/ __/ +/ /_/ / / /_(__ ) /_____/ / / / __/ __/ /_ +\____/_/\__/____/_/ /_/ /_/\___/\___/\__/ + From a8c1155caccc9399bdf85f8a35948f7ae1770c8f Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 10:12:49 +0200 Subject: [PATCH 056/102] Transmute (#13935) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add transmute (ct) * Update install/transmute-install.sh Co-authored-by: SlaviΕ‘a AreΕΎina <58952836+tremor021@users.noreply.github.com> * Update author name in transmute.sh * Update ct/transmute.sh Co-authored-by: SlaviΕ‘a AreΕΎina <58952836+tremor021@users.noreply.github.com> * Update author name in transmute-install.sh --------- Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com> Co-authored-by: SlaviΕ‘a AreΕΎina <58952836+tremor021@users.noreply.github.com> --- ct/transmute.sh | 83 ++++++++++++++++++++++++++++++ install/transmute-install.sh | 99 ++++++++++++++++++++++++++++++++++++ 2 files changed, 182 insertions(+) create mode 100644 ct/transmute.sh create mode 100644 install/transmute-install.sh diff --git a/ct/transmute.sh b/ct/transmute.sh new file mode 100644 index 000000000..9d80279a7 --- /dev/null +++ b/ct/transmute.sh @@ -0,0 +1,83 @@ +#!/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/transmute-app/transmute + +APP="Transmute" +var_tags="${var_tags:-files;converter}" +var_cpu="${var_cpu:-4}" +var_ram="${var_ram:-4096}" +var_disk="${var_disk:-16}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +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/transmute ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + fetch_and_deploy_gh_release "calibre" "kovidgoyal/calibre" "prebuild" "latest" "/opt/calibre" "calibre-*-x86_64.txz" + ln -sf /opt/calibre/ebook-convert /usr/bin/ebook-convert + fetch_and_deploy_gh_release "drawio" "jgraph/drawio-desktop" "binary" "latest" "" "drawio-amd64-*.deb" + fetch_and_deploy_gh_release "pandoc" "jgm/pandoc" "binary" "latest" "" "pandoc-*-amd64.deb" + + if check_for_gh_release "transmute" "transmute-app/transmute"; then + msg_info "Stopping Service" + systemctl stop transmute + msg_ok "Stopped Service" + + msg_info "Backing up Data" + cp /opt/transmute/backend/.env /opt/transmute.env.bak + cp -r /opt/transmute/data /opt/transmute_data_bak + msg_ok "Backed up Data" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "transmute" "transmute-app/transmute" "tarball" + + msg_info "Updating Python Dependencies" + cd /opt/transmute + $STD uv venv --clear /opt/transmute/.venv + $STD uv pip install --python /opt/transmute/.venv/bin/python -r requirements.txt + msg_ok "Updated Python Dependencies" + + msg_info "Rebuilding Frontend" + cd /opt/transmute/frontend + $STD npm ci + $STD npm run build + msg_ok "Rebuilt Frontend" + + msg_info "Restoring Data" + cp /opt/transmute.env.bak /opt/transmute/backend/.env + cp -r /opt/transmute_data_bak/. /opt/transmute/data/ + rm -f /opt/transmute.env.bak + rm -rf /opt/transmute_data_bak + msg_ok "Restored Data" + + msg_info "Starting Service" + systemctl start transmute + 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}:3313${CL}" diff --git a/install/transmute-install.sh b/install/transmute-install.sh new file mode 100644 index 000000000..c9f3299eb --- /dev/null +++ b/install/transmute-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/transmute-app/transmute + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +UV_PYTHON="3.13" setup_uv +NODE_VERSION="25" setup_nodejs +setup_ffmpeg +setup_gs + +msg_info "Installing Dependencies" +$STD apt install -y \ + inkscape \ + tesseract-ocr \ + libreoffice-impress \ + libreoffice-common \ + libmagic1 \ + xvfb \ + libsm6 \ + libxext6 \ + libpango-1.0-0 \ + libopengl0 \ + libpangocairo-1.0-0 \ + libgdk-pixbuf-2.0-0 \ + libffi-dev \ + libcairo2 \ + librsvg2-bin \ + unrar-free \ + python3-numpy \ + python3-lxml \ + python3-tinycss2 \ + python3-cssselect +msg_ok "Installed Dependencies" + +fetch_and_deploy_gh_release "pandoc" "jgm/pandoc" "binary" "latest" "" "pandoc-*-amd64.deb" +fetch_and_deploy_gh_release "calibre" "kovidgoyal/calibre" "prebuild" "latest" "/opt/calibre" "calibre-*-x86_64.txz" +ln -sf /opt/calibre/ebook-convert /usr/bin/ebook-convert +fetch_and_deploy_gh_release "drawio" "jgraph/drawio-desktop" "binary" "latest" "" "drawio-amd64-*.deb" +fetch_and_deploy_gh_release "transmute" "transmute-app/transmute" "tarball" + +msg_info "Setting up Python Backend" +cd /opt/transmute +$STD uv venv --clear /opt/transmute/.venv +$STD uv pip install --python /opt/transmute/.venv/bin/python -r requirements.txt +ln -sf /opt/transmute/.venv/bin/weasyprint /usr/bin/weasyprint +msg_ok "Set up Python Backend" + +msg_info "Configuring Transmute" +SECRET_KEY=$(openssl rand -hex 64) +cat </opt/transmute/backend/.env +AUTH_SECRET_KEY=${SECRET_KEY} +HOST=0.0.0.0 +PORT=3313 +DATA_DIR=/opt/transmute/data +WEB_DIR=/opt/transmute/frontend/dist +QT_QPA_PLATFORM=offscreen +EOF +mkdir -p /opt/transmute/data +msg_ok "Configured Transmute" + +msg_info "Building Frontend" +cd /opt/transmute/frontend +$STD npm ci +$STD npm run build +msg_ok "Built Frontend" + +msg_info "Creating Service" +cat </etc/systemd/system/transmute.service +[Unit] +Description=Transmute File Converter +After=network.target + +[Service] +Type=simple +WorkingDirectory=/opt/transmute +EnvironmentFile=/opt/transmute/backend/.env +ExecStart=/usr/bin/xvfb-run -a -s "-screen 0 1024x768x24 -nolisten tcp" /opt/transmute/.venv/bin/python backend/main.py +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now transmute +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc From 47cb50e7cde990ff953240b85273fb433f892841 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 08:13:12 +0000 Subject: [PATCH 057/102] Update CHANGELOG.md (#13987) 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 1d1355af1..603540f63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -449,7 +449,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸ†• New Scripts - - Jitsi-Meet ([#13897](https://github.com/community-scripts/ProxmoxVE/pull/13897)) + - Transmute ([#13935](https://github.com/community-scripts/ProxmoxVE/pull/13935)) +- Jitsi-Meet ([#13897](https://github.com/community-scripts/ProxmoxVE/pull/13897)) ### πŸš€ Updated Scripts From 562ae12972864caf8118daf05064857a4d56ba10 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 10:17:59 +0200 Subject: [PATCH 058/102] Update .app files (#13988) Co-authored-by: GitHub Actions --- ct/headers/transmute | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ct/headers/transmute diff --git a/ct/headers/transmute b/ct/headers/transmute new file mode 100644 index 000000000..1d94eb412 --- /dev/null +++ b/ct/headers/transmute @@ -0,0 +1,6 @@ + ______ __ + /_ __/________ _____ _________ ___ __ __/ /____ + / / / ___/ __ `/ __ \/ ___/ __ `__ \/ / / / __/ _ \ + / / / / / /_/ / / / (__ ) / / / / / /_/ / /_/ __/ +/_/ /_/ \__,_/_/ /_/____/_/ /_/ /_/\__,_/\__/\___/ + From 6ca9569dc36f285838ba053937db4c57d22d5004 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Fri, 24 Apr 2026 12:04:17 +0200 Subject: [PATCH 059/102] Refactor: Ghostfolio (#13990) --- ct/ghostfolio.sh | 1 + install/ghostfolio-install.sh | 17 ++--------------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/ct/ghostfolio.sh b/ct/ghostfolio.sh index a039d760d..3c20e0f2d 100644 --- a/ct/ghostfolio.sh +++ b/ct/ghostfolio.sh @@ -47,6 +47,7 @@ function update_script() { msg_info "Updating Ghostfolio" mv /opt/env.backup /opt/ghostfolio/.env + sed -i -E '/^DATABASE_URL=/ s/[?&]sslmode=prefer//g' /opt/ghostfolio/.env cd /opt/ghostfolio $STD npm ci $STD npm run build:production diff --git a/install/ghostfolio-install.sh b/install/ghostfolio-install.sh index 2461ca3d4..d520e0021 100644 --- a/install/ghostfolio-install.sh +++ b/install/ghostfolio-install.sh @@ -25,25 +25,12 @@ PG_VERSION="17" setup_postgresql NODE_VERSION="24" setup_nodejs msg_info "Setting up Database" -DB_NAME=ghostfolio -DB_USER=ghostfolio -DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) +PG_DB_NAME="ghostfolio" PG_DB_USER="ghostfolio" PG_DB_SCHEMA_PERMS="true" setup_postgresql_db REDIS_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) ACCESS_TOKEN_SALT=$(openssl rand -base64 32) JWT_SECRET_KEY=$(openssl rand -base64 32) -$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME;" -$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH ENCRYPTED PASSWORD '$DB_PASS';" -$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;" -$STD sudo -u postgres psql -c "ALTER USER $DB_USER CREATEDB;" -$STD sudo -u postgres psql -d $DB_NAME -c "GRANT ALL ON SCHEMA public TO $DB_USER;" -$STD sudo -u postgres psql -d $DB_NAME -c "GRANT CREATE ON SCHEMA public TO $DB_USER;" -$STD sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO $DB_USER;" -$STD sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO $DB_USER;" { echo "Ghostfolio Credentials" - echo "Database User: $DB_USER" - echo "Database Password: $DB_PASS" - echo "Database Name: $DB_NAME" echo "Redis Password: $REDIS_PASS" echo "Access Token Salt: $ACCESS_TOKEN_SALT" echo "JWT Secret Key: $JWT_SECRET_KEY" @@ -69,7 +56,7 @@ read -rp "${TAB3}CoinGecko Pro API key (press Enter to skip): " COINGECKO_PRO_KE msg_info "Setting up Environment" cat </opt/ghostfolio/.env -DATABASE_URL=postgresql://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME?connect_timeout=300&sslmode=prefer +DATABASE_URL=postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME?connect_timeout=300 REDIS_HOST=localhost REDIS_PORT=6379 REDIS_PASSWORD=$REDIS_PASS From 2c22e03774da24ce425f2c42a202e4e2d4dfb70d Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 10:04:45 +0000 Subject: [PATCH 060/102] Update CHANGELOG.md (#13991) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 603540f63..c8cb49df7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -456,6 +456,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - Update wger.sh [@Soppster1029](https://github.com/Soppster1029) ([#13977](https://github.com/community-scripts/ProxmoxVE/pull/13977)) + - #### πŸ”§ Refactor + + - Refactor: Ghostfolio [@MickLesk](https://github.com/MickLesk) ([#13990](https://github.com/community-scripts/ProxmoxVE/pull/13990)) + ## 2026-04-23 ### πŸš€ Updated Scripts From bb7b612d5f2d0aa3dca7e322cbf63a166e7af18c Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Fri, 24 Apr 2026 14:21:16 +0200 Subject: [PATCH 061/102] fix ffmpeg path --- misc/tools.func | 5 +++++ tools/pve/post-pbs-install.sh | 18 ++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index 81621a8f3..752302557 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -4014,6 +4014,11 @@ function setup_ffmpeg() { libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev libva-dev libdrm-dev ) + if apt-cache show libsvtav1enc-dev &>/dev/null; then + DEPS+=(libsvtav1enc-dev) + elif apt-cache show libsvtav1-dev &>/dev/null; then + DEPS+=(libsvtav1-dev) + fi ;; *) msg_error "Invalid FFMPEG_TYPE: $TYPE" diff --git a/tools/pve/post-pbs-install.sh b/tools/pve/post-pbs-install.sh index 47100948e..80b3cc838 100644 --- a/tools/pve/post-pbs-install.sh +++ b/tools/pve/post-pbs-install.sh @@ -65,6 +65,14 @@ component_exists_in_sources() { grep -h -E "^[^#]*Components:[^#]*\b${component}\b" /etc/apt/sources.list.d/*.sources 2>/dev/null | grep -q . } +require_whiptail() { + if ! command -v whiptail >/dev/null 2>&1; then + msg_error "Missing dependency: whiptail" + echo -e "Install it first (e.g. apt update && apt install -y whiptail), then re-run this script." + exit 127 + fi +} + # ---- main ---- main() { header_info @@ -90,8 +98,14 @@ main() { CODENAME="$(get_pbs_codename)" case "$CODENAME" in - bookworm) start_routines_3 ;; - trixie) start_routines_4 ;; + bookworm) + require_whiptail + start_routines_3 + ;; + trixie) + require_whiptail + start_routines_4 + ;; *) msg_error "Unsupported Debian codename: $CODENAME" echo -e "Supported: bookworm (PBS 3.x) and trixie (PBS 4.x)" From fecad57187637214ed2732b0da838ce51a456289 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Fri, 24 Apr 2026 14:29:55 +0200 Subject: [PATCH 062/102] fix dep --- misc/tools.func | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/tools.func b/misc/tools.func index 752302557..ea8efaddc 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -4011,7 +4011,7 @@ function setup_ffmpeg() { DEPS+=( libx264-dev libx265-dev libvpx-dev libmp3lame-dev libfreetype6-dev libass-dev libopus-dev libvorbis-dev - libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev + libdav1d-dev zlib1g-dev libnuma-dev libva-dev libdrm-dev ) if apt-cache show libsvtav1enc-dev &>/dev/null; then From 0632f99343ccea0ab1fce94e29018f4c8163ed03 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 16:08:49 +0200 Subject: [PATCH 063/102] fireshare (#13995) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add fireshare (ct) * Update fireshare.sh --------- Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: SlaviΕ‘a AreΕΎina <58952836+tremor021@users.noreply.github.com> --- ct/fireshare.sh | 74 +++++++++++++++ ct/headers/fireshare | 6 ++ install/fireshare-install.sh | 174 +++++++++++++++++++++++++++++++++++ 3 files changed, 254 insertions(+) create mode 100644 ct/fireshare.sh create mode 100644 ct/headers/fireshare create mode 100644 install/fireshare-install.sh diff --git a/ct/fireshare.sh b/ct/fireshare.sh new file mode 100644 index 000000000..c43f9b91e --- /dev/null +++ b/ct/fireshare.sh @@ -0,0 +1,74 @@ +#!/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: SlaviΕ‘a AreΕΎina (tremor021) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/ShaneIsrael/fireshare + +APP="Fireshare" +var_tags="${var_tags:-sharing;video}" +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_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/fireshare ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "fireshare" "ShaneIsrael/fireshare"; then + msg_info "Stopping Service" + systemctl stop fireshare + msg_ok "Stopped Service" + + mv /opt/fireshare/fireshare.env /opt + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "fireshare" "ShaneIsrael/fireshare" "tarball" + mv /opt/fireshare.env /opt/fireshare + rm -f /usr/local/bin/fireshare + + msg_info "Updating Fireshare" + cd /opt/fireshare + $STD uv venv --clear + $STD .venv/bin/python -m ensurepip --upgrade + $STD .venv/bin/python -m pip install --upgrade --break-system-packages pip + $STD .venv/bin/python -m pip install --no-cache-dir --break-system-packages --ignore-installed app/server + cp .venv/bin/fireshare /usr/local/bin/fireshare + export FLASK_APP="/opt/fireshare/app/server/fireshare:create_app()" + export DATA_DIRECTORY=/opt/fireshare-data + export IMAGE_DIRECTORY=/opt/fireshare-images + export VIDEO_DIRECTORY=/opt/fireshare-videos + export PROCESSED_DIRECTORY=/opt/fireshare-processed + $STD uv run flask db upgrade + msg_ok "Updated Fireshare" + + msg_info "Starting Service" + systemctl start fireshare + msg_ok "Started Service" + msg_ok "Updated successfully!" + fi + cleanup_lxc + + 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}${CL}" diff --git a/ct/headers/fireshare b/ct/headers/fireshare new file mode 100644 index 000000000..9a0ccb263 --- /dev/null +++ b/ct/headers/fireshare @@ -0,0 +1,6 @@ + _______ __ + / ____(_)_______ _____/ /_ ____ _________ + / /_ / / ___/ _ \/ ___/ __ \/ __ `/ ___/ _ \ + / __/ / / / / __(__ ) / / / /_/ / / / __/ +/_/ /_/_/ \___/____/_/ /_/\__,_/_/ \___/ + diff --git a/install/fireshare-install.sh b/install/fireshare-install.sh new file mode 100644 index 000000000..982679c6e --- /dev/null +++ b/install/fireshare-install.sh @@ -0,0 +1,174 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: SlaviΕ‘a AreΕΎina (tremor021) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/ShaneIsrael/fireshare + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os +setup_hwaccel + +msg_info "Installing Dependencies" +$STD apt install -y \ + git \ + build-essential \ + cmake \ + pkg-config \ + yasm \ + nasm \ + libx264-dev \ + libx265-dev \ + libvpx-dev \ + libaom-dev \ + libopus-dev \ + libvorbis-dev \ + libass-dev \ + libfreetype6-dev \ + libmp3lame-dev \ + nginx-extras \ + supervisor \ + libldap2-dev \ + libsasl2-dev \ + libssl-dev \ + libffi-dev \ + libc-dev +msg_ok "Installed Dependencies" + +NODE_VERSION=24 setup_nodejs +PYTHON_VERSION=3.14 setup_uv + +fetch_and_deploy_gh_release "fireshare" "ShaneIsrael/fireshare" "tarball" + +msg_info "Compiling SVT-AV1 (Patience)" +cd /tmp +$STD git clone --depth 1 --branch v1.8.0 https://gitlab.com/AOMediaCodec/SVT-AV1.git +cd SVT-AV1/Build +$STD cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release +$STD make -j$(nproc) +$STD make install +msg_ok "Compiled SVT-AV1" + +msg_info "Installing NVDEC headers" +cd /tmp +$STD git clone --depth 1 --branch n12.1.14.0 https://github.com/FFmpeg/nv-codec-headers.git +cd nv-codec-headers +$STD make install +$STD ldconfig +msg_ok "Installed NVDEC headers" + +msg_info "Compiling ffmpeg (Patience)" +cd /tmp +curl -fsSL https://ffmpeg.org/releases/ffmpeg-6.1.tar.xz -o "ffmpeg-6.1.tar.xz" +$STD tar -xf ffmpeg-6.1.tar.xz +cd ffmpeg-6.1 +$STD ./configure \ + --prefix=/usr/local \ + --enable-gpl \ + --enable-version3 \ + --enable-nonfree \ + --enable-ffnvcodec \ + --enable-libx264 \ + --enable-libx265 \ + --enable-libvpx \ + --enable-libaom \ + --enable-libopus \ + --enable-libvorbis \ + --enable-libmp3lame \ + --enable-libass \ + --enable-libfreetype \ + --enable-libsvtav1 \ + --disable-debug \ + --disable-doc +$STD make -j$(nproc) +$STD make install +$STD ldconfig +msg_ok "Compiled ffmpeg" + +msg_info "Configuring Fireshare (Patience)" +ADMIN_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) +SECRET=$(openssl rand -base64 48) +mkdir -p /opt/fireshare-{data,videos,images,processed} +cd /opt/fireshare +$STD uv venv +$STD .venv/bin/python -m ensurepip --upgrade +$STD .venv/bin/python -m pip install --upgrade --break-system-packages pip +ln -sf /usr/local/bin/ffmpeg /usr/bin/ffmpeg +ln -sf /usr/local/bin/ffprobe /usr/bin/ffprobe +echo "/usr/local/lib" >/etc/ld.so.conf.d/usr-local.conf +echo "/usr/local/cuda/lib64" >>/etc/ld.so.conf.d/usr-local.conf +echo "/usr/local/nvidia/lib" >>/etc/ld.so.conf.d/nvidia.conf +echo "/usr/local/nvidia/lib64" >>/etc/ld.so.conf.d/nvidia.conf +ldconfig +$STD .venv/bin/python -m pip install --no-cache-dir --break-system-packages --ignore-installed app/server +cp .venv/bin/fireshare /usr/local/bin/fireshare +export FLASK_APP="/opt/fireshare/app/server/fireshare:create_app()" +export DATA_DIRECTORY=/opt/fireshare-data +export IMAGE_DIRECTORY=/opt/fireshare-images +export VIDEO_DIRECTORY=/opt/fireshare-videos +export PROCESSED_DIRECTORY=/opt/fireshare-processed +$STD uv run flask db upgrade + +cat </opt/fireshare/fireshare.env +FLASK_APP="/opt/fireshare/app/server/fireshare:create_app()" +DOMAIN= +ENVIRONMENT=production +DATA_DIRECTORY=/opt/fireshare-data +IMAGE_DIRECTORY=/opt/fireshare-images +VIDEO_DIRECTORY=/opt/fireshare-videos +PROCESSED_DIRECTORY=/opt/fireshare-processed +TEMPLATE_PATH=/opt/fireshare/app/server/fireshare/templates +SECRET_KEY=${SECRET} +ADMIN_PASSWORD=${ADMIN_PASSWORD} +TZ=UTC +LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64:/usr/local/lib:/usr/local/cuda/lib64:\$LD_LIBRARY_PATH +PATH=/usr/local/bin:$PATH +ENABLE_TRANSCODING= +TRANSCODE_GPU= +NVIDIA_DRIVER_CAPABILITIES= +EOF + +cd /opt/fireshare/app/client +$STD npm install +$STD npm run build +systemctl stop nginx +cp /opt/fireshare/app/nginx/prod.conf /etc/nginx/nginx.conf +sed -i 's|root /processed/|root /opt/fireshare-processed/|g' /etc/nginx/nginx.conf +sed -i 's/^user[[:space:]]\+nginx;/user root;/' /etc/nginx/nginx.conf +sed -i 's|root[[:space:]]\+/app/build;|root /opt/fireshare/app/client/build;|' /etc/nginx/nginx.conf +systemctl start nginx + +cat <~/fireshare.creds +Fireshare Admin Credentials +======================== +Username: admin +Password: ${ADMIN_PASSWORD} +EOF +msg_ok "Configured Fireshare" + +msg_info "Creating services" +cat </etc/systemd/system/fireshare.service +[Unit] +Description=Fireshare Service +After=network.target + +[Service] +WorkingDirectory=/opt/fireshare/app/server +ExecStart=/opt/fireshare/.venv/bin/gunicorn --bind=127.0.0.1:5000 "fireshare:create_app(init_schedule=True)" --workers 3 --threads 3 --preload +Restart=always +EnvironmentFile=/opt/fireshare/fireshare.env + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now fireshare +msg_ok "Created services" + +motd_ssh +customize +cleanup_lxc From 581b332c662e91700c9475795d67edf6bbfb49c5 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 14:09:18 +0000 Subject: [PATCH 064/102] Update CHANGELOG.md (#13999) 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 c8cb49df7..90ebc18c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -449,7 +449,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸ†• New Scripts - - Transmute ([#13935](https://github.com/community-scripts/ProxmoxVE/pull/13935)) + - fireshare ([#13995](https://github.com/community-scripts/ProxmoxVE/pull/13995)) +- Transmute ([#13935](https://github.com/community-scripts/ProxmoxVE/pull/13935)) - Jitsi-Meet ([#13897](https://github.com/community-scripts/ProxmoxVE/pull/13897)) ### πŸš€ Updated Scripts From 6ece8c4de9c0e30fcba8669ed5403cdac4bd0ba9 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 16:09:40 +0200 Subject: [PATCH 065/102] Apprise-API (#13934) * Add apprise-api (ct) * Install nginx and git dependencies Added installation of nginx and git dependencies. --------- Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com> --- ct/apprise-api.sh | 75 ++++++++++++++++++++++++++++++++++ install/apprise-api-install.sh | 66 ++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 ct/apprise-api.sh create mode 100644 install/apprise-api-install.sh diff --git a/ct/apprise-api.sh b/ct/apprise-api.sh new file mode 100644 index 000000000..f3e6f7f0b --- /dev/null +++ b/ct/apprise-api.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: SystemIdleProcess +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/caronc/apprise-api + +APP="Apprise-API" +var_tags="${var_tags:-notification}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-512}" +var_disk="${var_disk:-2}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +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/apprise" ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + if check_for_gh_release "apprise" "caronc/apprise-api"; then + msg_info "Stopping Service" + systemctl stop apprise-api + msg_ok "Stopped Service" + + PYTHON_VERSION="3.12" setup_uv + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "apprise" "caronc/apprise-api" "tarball" + + msg_info "Updating Apprise-API" + cd /opt/apprise + cp ./requirements.txt /etc/requirements.txt + $STD apt install -y nginx git + $STD uv pip install -r requirements.txt gunicorn supervisor --system + cp -fr apprise_api/static /usr/share/nginx/html/s/ + mv apprise_api/ webapp + touch /etc/nginx/server-override.conf + touch /etc/nginx/location-override.conf + mkdir -p /config/store /attach /plugin /tmp/apprise /opt/apprise/logs + chmod 1777 /tmp/apprise && chmod 777 /config /config/store /attach /plugin /opt/apprise/logs + sed -i \ + -e '/[[]program:nginx]/,/^[[]/ s|stdout_logfile=/dev/stdout|stdout_logfile=/opt/apprise/logs/nginx.log|' \ + -e '/[[]program:nginx]/,/^[[]/ s|stderr_logfile=/dev/stderr|stderr_logfile=/opt/apprise/logs/nginx_error.log|' \ + -e '/[[]program:gunicorn]/,/^[[]/ s|stdout_logfile=/dev/stdout|stdout_logfile=/opt/apprise/logs/gunicorn.log|' \ + -e '/[[]program:gunicorn]/,/^[[]/ s|stderr_logfile=/dev/stderr|stderr_logfile=/opt/apprise/logs/gunicorn_error.log|' \ + -e '/[[]supervisord]/,/^[[]/ s|logfile=/dev/null|logfile=/opt/apprise/logs/supervisor.log|' \ + -e 's|_maxbytes=0|_maxbytes=10485760|g' \ + /opt/apprise/webapp/etc/supervisord.conf + msg_ok "Updated Apprise-API" + + msg_info "Starting Service" + systemctl start apprise-api + 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}:8000${CL}" diff --git a/install/apprise-api-install.sh b/install/apprise-api-install.sh new file mode 100644 index 000000000..9ba3b29d6 --- /dev/null +++ b/install/apprise-api-install.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: SystemIdleProcess +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/caronc/apprise-api + +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 \ + git +msg_ok "Installed Dependencies" + +PYTHON_VERSION="3.12" setup_uv +fetch_and_deploy_gh_release "apprise" "caronc/apprise-api" "tarball" + +msg_info "Setup Apprise-API" +cd /opt/apprise +cp ./requirements.txt /etc/requirements.txt +$STD uv pip install -r requirements.txt gunicorn supervisor --system +cp -fr apprise_api/static /usr/share/nginx/html/s/ +mv apprise_api/ webapp +touch /etc/nginx/server-override.conf +touch /etc/nginx/location-override.conf +mkdir -p /config/store /attach /plugin /tmp/apprise /opt/apprise/logs +chmod 1777 /tmp/apprise && chmod 777 /config /config/store /attach /plugin /opt/apprise/logs +sed -i \ + -e '/[[]program:nginx]/,/^[[]/ s|stdout_logfile=/dev/stdout|stdout_logfile=/opt/apprise/logs/nginx.log|' \ + -e '/[[]program:nginx]/,/^[[]/ s|stderr_logfile=/dev/stderr|stderr_logfile=/opt/apprise/logs/nginx_error.log|' \ + -e '/[[]program:gunicorn]/,/^[[]/ s|stdout_logfile=/dev/stdout|stdout_logfile=/opt/apprise/logs/gunicorn.log|' \ + -e '/[[]program:gunicorn]/,/^[[]/ s|stderr_logfile=/dev/stderr|stderr_logfile=/opt/apprise/logs/gunicorn_error.log|' \ + -e '/[[]supervisord]/,/^[[]/ s|logfile=/dev/null|logfile=/opt/apprise/logs/supervisor.log|' \ + -e 's|_maxbytes=0|_maxbytes=10485760|g' \ + /opt/apprise/webapp/etc/supervisord.conf +msg_ok "Setup Apprise-API" + +msg_info "Creating Service" +cat </etc/systemd/system/apprise-api.service +[Unit] +Description=Apprise-API Service +After=network-online.target + +[Service] +Type=simple +WorkingDirectory=/opt/apprise +ExecStart=/opt/apprise/webapp/supervisord-startup +Restart=always +RestartSec=30 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now apprise-api +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc From f5533297545eed4e9a1a742e260e2033bd1119fa Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 14:10:10 +0000 Subject: [PATCH 066/102] Update CHANGELOG.md (#14001) 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 90ebc18c0..ad882f794 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -449,7 +449,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸ†• New Scripts - - fireshare ([#13995](https://github.com/community-scripts/ProxmoxVE/pull/13995)) + - Apprise-API ([#13934](https://github.com/community-scripts/ProxmoxVE/pull/13934)) +- fireshare ([#13995](https://github.com/community-scripts/ProxmoxVE/pull/13995)) - Transmute ([#13935](https://github.com/community-scripts/ProxmoxVE/pull/13935)) - Jitsi-Meet ([#13897](https://github.com/community-scripts/ProxmoxVE/pull/13897)) From 5d59291bb1d510fb8f92cc74ba254dbf7bd1d650 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 16:13:15 +0200 Subject: [PATCH 067/102] Update .app files (#14000) Co-authored-by: GitHub Actions --- ct/headers/apprise-api | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ct/headers/apprise-api diff --git a/ct/headers/apprise-api b/ct/headers/apprise-api new file mode 100644 index 000000000..a1f56c348 --- /dev/null +++ b/ct/headers/apprise-api @@ -0,0 +1,6 @@ + ___ _ ___ ____ ____ + / | ____ ____ _____(_)_______ / | / __ \/ _/ + / /| | / __ \/ __ \/ ___/ / ___/ _ \______/ /| | / /_/ // / + / ___ |/ /_/ / /_/ / / / (__ ) __/_____/ ___ |/ ____// / +/_/ |_/ .___/ .___/_/ /_/____/\___/ /_/ |_/_/ /___/ + /_/ /_/ From a43ac644da89524af02371d397c29ad57369a565 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, 25 Apr 2026 13:14:16 +0200 Subject: [PATCH 068/102] Transmute: Fix ffmpeg detection (#14008) * Fix dependencies * better symlink --- install/transmute-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install/transmute-install.sh b/install/transmute-install.sh index c9f3299eb..a3b83d72d 100644 --- a/install/transmute-install.sh +++ b/install/transmute-install.sh @@ -45,6 +45,7 @@ msg_ok "Installed Dependencies" fetch_and_deploy_gh_release "pandoc" "jgm/pandoc" "binary" "latest" "" "pandoc-*-amd64.deb" fetch_and_deploy_gh_release "calibre" "kovidgoyal/calibre" "prebuild" "latest" "/opt/calibre" "calibre-*-x86_64.txz" ln -sf /opt/calibre/ebook-convert /usr/bin/ebook-convert +ln -sf /usr/local/bin/ffmpeg /usr/bin/ffmpeg fetch_and_deploy_gh_release "drawio" "jgraph/drawio-desktop" "binary" "latest" "" "drawio-amd64-*.deb" fetch_and_deploy_gh_release "transmute" "transmute-app/transmute" "tarball" From ddf05a1c2d5e114f64697e9938aa144e564e60a5 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, 25 Apr 2026 11:14:39 +0000 Subject: [PATCH 069/102] Update CHANGELOG.md (#14011) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad882f794..3f51d2ed7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -445,6 +445,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-04-25 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - Transmute: Fix ffmpeg detection [@tremor021](https://github.com/tremor021) ([#14008](https://github.com/community-scripts/ProxmoxVE/pull/14008)) + ## 2026-04-24 ### πŸ†• New Scripts From 186a03ccb2d30f09c9630dc35b9cf67a2e821476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Taha=20=C3=96ztop?= Date: Sun, 26 Apr 2026 00:34:26 +0300 Subject: [PATCH 070/102] Domain-Monitor: start apache2 after stop instead of reload (#14019) --- ct/domain-monitor.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/domain-monitor.sh b/ct/domain-monitor.sh index 346643d35..86462510f 100644 --- a/ct/domain-monitor.sh +++ b/ct/domain-monitor.sh @@ -60,7 +60,7 @@ function update_script() { msg_ok "Restored backup" msg_info "Restarting Services" - systemctl reload apache2 + systemctl start apache2 msg_ok "Restarted Services" msg_ok "Updated successfully!" fi From 615fc7d6ce49687ffcba15dd494c704fd2f66e7b 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, 25 Apr 2026 21:34:46 +0000 Subject: [PATCH 071/102] Update CHANGELOG.md (#14021) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f51d2ed7..4894e7c01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -451,6 +451,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Domain-Monitor: start apache2 after stop instead of reload [@omertahaoztop](https://github.com/omertahaoztop) ([#14019](https://github.com/community-scripts/ProxmoxVE/pull/14019)) - Transmute: Fix ffmpeg detection [@tremor021](https://github.com/tremor021) ([#14008](https://github.com/community-scripts/ProxmoxVE/pull/14008)) ## 2026-04-24 From 347e0af359f02d30ff0c911b4b9a1caea2dd23d2 Mon Sep 17 00:00:00 2001 From: Kevin O'Brien Date: Sat, 25 Apr 2026 15:34:39 -0700 Subject: [PATCH 072/102] VictoriaMetrics: Stop vmagent/vmalert before update (#14016) Stop vmagent and vmalert services (if present) before deploying the vmutils tarball during updates, and restart them afterward. Running vmutils daemons (vmagent-prod, vmalert-prod) cause cp to fail with ETXTBSY when their binaries are overwritten in /opt/victoriametrics. Fixes #14014 --- ct/victoriametrics.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ct/victoriametrics.sh b/ct/victoriametrics.sh index ca7030714..e3790fc21 100644 --- a/ct/victoriametrics.sh +++ b/ct/victoriametrics.sh @@ -32,6 +32,8 @@ function update_script() { msg_info "Stopping Service" systemctl stop victoriametrics [[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl stop victoriametrics-logs + [[ -f /etc/systemd/system/vmagent.service ]] && systemctl stop vmagent + [[ -f /etc/systemd/system/vmalert.service ]] && systemctl stop vmalert msg_ok "Stopped Service" victoriametrics_release=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases" | @@ -62,6 +64,8 @@ function update_script() { msg_info "Starting Service" systemctl start victoriametrics [[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl start victoriametrics-logs + [[ -f /etc/systemd/system/vmagent.service ]] && systemctl start vmagent + [[ -f /etc/systemd/system/vmalert.service ]] && systemctl start vmalert msg_ok "Started Service" msg_ok "Updated successfully!" fi From 19bae6935cbc22423f347aa59aecbd87822144c6 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, 25 Apr 2026 22:35:03 +0000 Subject: [PATCH 073/102] Update CHANGELOG.md (#14022) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4894e7c01..2bb723f36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -451,6 +451,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - VictoriaMetrics: Stop vmagent/vmalert before update [@irishpadres](https://github.com/irishpadres) ([#14016](https://github.com/community-scripts/ProxmoxVE/pull/14016)) - Domain-Monitor: start apache2 after stop instead of reload [@omertahaoztop](https://github.com/omertahaoztop) ([#14019](https://github.com/community-scripts/ProxmoxVE/pull/14019)) - Transmute: Fix ffmpeg detection [@tremor021](https://github.com/tremor021) ([#14008](https://github.com/community-scripts/ProxmoxVE/pull/14008)) From 0cfc6c89b268095ff3738d190e756e9c7d7e71aa 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, 26 Apr 2026 00:37:19 +0200 Subject: [PATCH 074/102] Refactor: Technitium DNS (#14013) * Refactor * Ensure root user for systemd service --- ct/technitiumdns.sh | 17 +++++++---------- install/technitiumdns-install.sh | 12 ++++-------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/ct/technitiumdns.sh b/ct/technitiumdns.sh index 21a13d306..531fb8b03 100644 --- a/ct/technitiumdns.sh +++ b/ct/technitiumdns.sh @@ -32,8 +32,8 @@ function update_script() { systemctl daemon-reload systemctl enable -q --now technitium fi - if is_package_installed "aspnetcore-runtime-8.0"; then - $STD apt remove -y aspnetcore-runtime-8.0 + if is_package_installed "aspnetcore-runtime-8.0" || is_package_installed "aspnetcore-runtime-9.0"; then + $STD apt remove -y aspnetcore-runtime-* [ -f /etc/apt/sources.list.d/microsoft-prod.list ] && rm -f /etc/apt/sources.list.d/microsoft-prod.list [ -f /usr/share/keyrings/microsoft-prod.gpg ] && rm -f /usr/share/keyrings/microsoft-prod.gpg setup_deb822_repo \ @@ -42,18 +42,15 @@ function update_script() { "https://packages.microsoft.com/debian/13/prod/" \ "trixie" \ "main" - $STD apt install -y aspnetcore-runtime-9.0 + $STD apt install -y aspnetcore-runtime-10.0 fi RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+') - if [[ ! -f ~/.technitium || ${RELEASE} != "$(cat ~/.technitium)" ]]; then - msg_info "Updating Technitium DNS" - curl -fsSL "https://download.technitium.com/dns/DnsServerPortable.tar.gz" -o /opt/DnsServerPortable.tar.gz - $STD tar zxvf /opt/DnsServerPortable.tar.gz -C /opt/technitium/dns/ - rm -f /opt/DnsServerPortable.tar.gz + if [[ ! -f ~/.technitium || ${RELEASE} != "$(cat ~/.technitium 2>/dev/null)" ]]; then + systemctl stop technitium + fetch_and_deploy_from_url "https://download.technitium.com/dns/DnsServerPortable.tar.gz" /opt/technitium/dns echo "${RELEASE}" >~/.technitium - systemctl restart technitium - msg_ok "Updated Technitium DNS" + systemctl start technitium msg_ok "Updated successfully!" else msg_ok "No update required. Technitium DNS is already at v${RELEASE}." diff --git a/install/technitiumdns-install.sh b/install/technitiumdns-install.sh index b26e06071..f0cac6ee0 100644 --- a/install/technitiumdns-install.sh +++ b/install/technitiumdns-install.sh @@ -20,21 +20,17 @@ setup_deb822_repo \ "https://packages.microsoft.com/debian/13/prod/" \ "trixie" \ "main" -$STD apt install -y aspnetcore-runtime-9.0 +$STD apt install -y aspnetcore-runtime-10.0 msg_ok "Installed Dependencies" RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+') -msg_info "Installing Technitium DNS" -mkdir -p /opt/technitium/dns -curl -fsSL "https://download.technitium.com/dns/DnsServerPortable.tar.gz" -o /opt/DnsServerPortable.tar.gz -$STD tar zxvf /opt/DnsServerPortable.tar.gz -C /opt/technitium/dns/ -rm -f /opt/DnsServerPortable.tar.gz +fetch_and_deploy_from_url "https://download.technitium.com/dns/DnsServerPortable.tar.gz" /opt/technitium/dns echo "${RELEASE}" >~/.technitium -msg_ok "Installed Technitium DNS" msg_info "Creating service" +sed -i '/^User=/d;/^Group=/d' /opt/technitium/dns/systemd.service cp /opt/technitium/dns/systemd.service /etc/systemd/system/technitium.service -systemctl enable -q --now technitium +systemctl enable -q --now technitium msg_ok "Service created" motd_ssh From 9a2e6551f1b9ef57b15a614e484a4b8e2a8f181d 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, 25 Apr 2026 22:37:45 +0000 Subject: [PATCH 075/102] Update CHANGELOG.md (#14023) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bb723f36..adddff1a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -455,6 +455,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - Domain-Monitor: start apache2 after stop instead of reload [@omertahaoztop](https://github.com/omertahaoztop) ([#14019](https://github.com/community-scripts/ProxmoxVE/pull/14019)) - Transmute: Fix ffmpeg detection [@tremor021](https://github.com/tremor021) ([#14008](https://github.com/community-scripts/ProxmoxVE/pull/14008)) + - #### πŸ”§ Refactor + + - Refactor: Technitium DNS [@tremor021](https://github.com/tremor021) ([#14013](https://github.com/community-scripts/ProxmoxVE/pull/14013)) + ## 2026-04-24 ### πŸ†• New Scripts From 1c49bab0bcb6e8cb9e5fdc95e8347d2694919a57 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, 26 Apr 2026 00:12:14 +0000 Subject: [PATCH 076/102] Archive old changelog entries (#14025) Co-authored-by: github-actions[bot] --- .github/changelogs/2026/04.md | 140 +++++++++++++++++++++++++++++ CHANGELOG.md | 161 ++-------------------------------- 2 files changed, 145 insertions(+), 156 deletions(-) diff --git a/.github/changelogs/2026/04.md b/.github/changelogs/2026/04.md index 1a83055f0..b51afd73a 100644 --- a/.github/changelogs/2026/04.md +++ b/.github/changelogs/2026/04.md @@ -1,3 +1,143 @@ +## 2026-04-25 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - VictoriaMetrics: Stop vmagent/vmalert before update [@irishpadres](https://github.com/irishpadres) ([#14016](https://github.com/community-scripts/ProxmoxVE/pull/14016)) + - Domain-Monitor: start apache2 after stop instead of reload [@omertahaoztop](https://github.com/omertahaoztop) ([#14019](https://github.com/community-scripts/ProxmoxVE/pull/14019)) + - Transmute: Fix ffmpeg detection [@tremor021](https://github.com/tremor021) ([#14008](https://github.com/community-scripts/ProxmoxVE/pull/14008)) + + - #### πŸ”§ Refactor + + - Refactor: Technitium DNS [@tremor021](https://github.com/tremor021) ([#14013](https://github.com/community-scripts/ProxmoxVE/pull/14013)) + +## 2026-04-24 + +### πŸ†• New Scripts + + - Apprise-API ([#13934](https://github.com/community-scripts/ProxmoxVE/pull/13934)) +- fireshare ([#13995](https://github.com/community-scripts/ProxmoxVE/pull/13995)) +- Transmute ([#13935](https://github.com/community-scripts/ProxmoxVE/pull/13935)) +- Jitsi-Meet ([#13897](https://github.com/community-scripts/ProxmoxVE/pull/13897)) + +### πŸš€ Updated Scripts + + - Update wger.sh [@Soppster1029](https://github.com/Soppster1029) ([#13977](https://github.com/community-scripts/ProxmoxVE/pull/13977)) + + - #### πŸ”§ Refactor + + - Refactor: Ghostfolio [@MickLesk](https://github.com/MickLesk) ([#13990](https://github.com/community-scripts/ProxmoxVE/pull/13990)) + +## 2026-04-23 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - mealie: start.sh missing after failed update [@MickLesk](https://github.com/MickLesk) ([#13958](https://github.com/community-scripts/ProxmoxVE/pull/13958)) + - twingate-connector: perform real apt upgrade during update flow [@MickLesk](https://github.com/MickLesk) ([#13959](https://github.com/community-scripts/ProxmoxVE/pull/13959)) + + - #### ✨ New Features + + - core: auto-size NODE_OPTIONS heap [@MickLesk](https://github.com/MickLesk) ([#13960](https://github.com/community-scripts/ProxmoxVE/pull/13960)) + + - #### πŸ”§ Refactor + + - Update scripts to match standard [@tremor021](https://github.com/tremor021) ([#13956](https://github.com/community-scripts/ProxmoxVE/pull/13956)) + +### πŸ’Ύ Core + + - #### 🐞 Bug Fixes + + - tools.func: upgrade Node.js minor/patch on same major version [@MickLesk](https://github.com/MickLesk) ([#13957](https://github.com/community-scripts/ProxmoxVE/pull/13957)) + - core: hotfix - prefer silent mode on PHS env conflict [@MickLesk](https://github.com/MickLesk) ([#13951](https://github.com/community-scripts/ProxmoxVE/pull/13951)) + + - #### πŸ”§ Refactor + + - core: improve system update information / lxc stack upgrade [@MickLesk](https://github.com/MickLesk) ([#13970](https://github.com/community-scripts/ProxmoxVE/pull/13970)) + +## 2026-04-22 + +### πŸ†• New Scripts + + - Dashy ([#13817](https://github.com/community-scripts/ProxmoxVE/pull/13817)) +- Mini-QR ([#13902](https://github.com/community-scripts/ProxmoxVE/pull/13902)) +- ownfoil ([#13904](https://github.com/community-scripts/ProxmoxVE/pull/13904)) +- ERPNext ([#13921](https://github.com/community-scripts/ProxmoxVE/pull/13921)) + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - add --clear to uv venv in update_script() to prevent interactive prompt [@MickLesk](https://github.com/MickLesk) ([#13926](https://github.com/community-scripts/ProxmoxVE/pull/13926)) + +### πŸ’Ύ Core + + - #### ✨ New Features + + - core: Add PHS_VERBOSE env var to skip verbose mode prompts [@gormanity](https://github.com/gormanity) ([#13797](https://github.com/community-scripts/ProxmoxVE/pull/13797)) + +## 2026-04-21 + +### πŸ†• New Scripts + + - gogs ([#13896](https://github.com/community-scripts/ProxmoxVE/pull/13896)) +- anchor ([#13895](https://github.com/community-scripts/ProxmoxVE/pull/13895)) +- minthcm ([#13903](https://github.com/community-scripts/ProxmoxVE/pull/13903)) +- foldergram ([#13900](https://github.com/community-scripts/ProxmoxVE/pull/13900)) + +### πŸš€ Updated Scripts + + - OpenCloud: Pin version to 6.1.0 [@vhsdream](https://github.com/vhsdream) ([#13890](https://github.com/community-scripts/ProxmoxVE/pull/13890)) + + - #### 🐞 Bug Fixes + + - Domain-Locker: Update dependencies [@tremor021](https://github.com/tremor021) ([#13901](https://github.com/community-scripts/ProxmoxVE/pull/13901)) + - homelable: fix install failure by correcting password-reset chmod target [@Copilot](https://github.com/Copilot) ([#13894](https://github.com/community-scripts/ProxmoxVE/pull/13894)) + + - #### ✨ New Features + + - FileFlows: Update dependencies [@tremor021](https://github.com/tremor021) ([#13917](https://github.com/community-scripts/ProxmoxVE/pull/13917)) + +## 2026-04-20 + +### πŸ†• New Scripts + + - WhoDB ([#13880](https://github.com/community-scripts/ProxmoxVE/pull/13880)) + +### πŸš€ Updated Scripts + + - pangolin: create migration tables before data transfer to prevent role loss [@MickLesk](https://github.com/MickLesk) ([#13874](https://github.com/community-scripts/ProxmoxVE/pull/13874)) + + - #### 🐞 Bug Fixes + + - Pangolin: pre-apply schema migrations to prevent data loss [@MickLesk](https://github.com/MickLesk) ([#13861](https://github.com/community-scripts/ProxmoxVE/pull/13861)) + - ActualBudget: change migration messages to warnings [@MickLesk](https://github.com/MickLesk) ([#13860](https://github.com/community-scripts/ProxmoxVE/pull/13860)) + - slskd: migrate config keys for 0.25.0 breaking change [@MickLesk](https://github.com/MickLesk) ([#13862](https://github.com/community-scripts/ProxmoxVE/pull/13862)) + + - #### ✨ New Features + + - Wanderer: add pocketbase CLI wrapper with env [@MickLesk](https://github.com/MickLesk) ([#13863](https://github.com/community-scripts/ProxmoxVE/pull/13863)) + - feat(homelable): add password reset utility script [@davidsoncabista](https://github.com/davidsoncabista) ([#13798](https://github.com/community-scripts/ProxmoxVE/pull/13798)) + + - #### πŸ”§ Refactor + + - Several Scripts: Bump NodeJS to align Node.js versions with upstream for 5 scripts [@MickLesk](https://github.com/MickLesk) ([#13875](https://github.com/community-scripts/ProxmoxVE/pull/13875)) + - Refactor: PMG Post Install [@MickLesk](https://github.com/MickLesk) ([#13693](https://github.com/community-scripts/ProxmoxVE/pull/13693)) + +### πŸ’Ύ Core + + - #### 🐞 Bug Fixes + + - core: detect Perl breakage after LXC stack upgrade and improve storage validation [@MickLesk](https://github.com/MickLesk) ([#13879](https://github.com/community-scripts/ProxmoxVE/pull/13879)) + +## 2026-04-19 + +### πŸ†• New Scripts + + - nametag ([#13849](https://github.com/community-scripts/ProxmoxVE/pull/13849)) + ## 2026-04-18 ### πŸ†• New Scripts diff --git a/CHANGELOG.md b/CHANGELOG.md index adddff1a3..ec1b43e20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit + + + @@ -54,7 +57,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
-

April (18 entries)

+

April (25 entries)

[View April 2026 Changelog](.github/changelogs/2026/04.md) @@ -1007,158 +1010,4 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### ✨ New Features - - Refactor/Feature-Bump/Security: Update-Cron-LXCs (Now Local Mode!) [@MickLesk](https://github.com/MickLesk) ([#13339](https://github.com/community-scripts/ProxmoxVE/pull/13339)) - -## 2026-03-26 - -### πŸ†• New Scripts - - - BirdNET ([#13313](https://github.com/community-scripts/ProxmoxVE/pull/13313)) - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - Immich: Bump to 2.6.2 | use start.sh in service, ensure DB_HOSTNAME in .env | Fix Rights Issue with ZFS Shares [@MickLesk](https://github.com/MickLesk) ([#13199](https://github.com/community-scripts/ProxmoxVE/pull/13199)) - - - #### ✨ New Features - - - SparkyFitness: add garmin microservice as addon [@tomfrenzel](https://github.com/tomfrenzel) ([#12642](https://github.com/community-scripts/ProxmoxVE/pull/12642)) - - Frigate: bump to v0.17.1 & change build order [@MickLesk](https://github.com/MickLesk) ([#13304](https://github.com/community-scripts/ProxmoxVE/pull/13304)) - -### πŸ’Ύ Core - - - #### 🐞 Bug Fixes - - - tools.func: pin npm to 11.11.0 to work around Node.js 22.22.2 regression [@MickLesk](https://github.com/MickLesk) ([#13296](https://github.com/community-scripts/ProxmoxVE/pull/13296)) - - - #### ✨ New Features - - - core: APT/APK Mirror Fallback for CDN Failures [@MickLesk](https://github.com/MickLesk) ([#13316](https://github.com/community-scripts/ProxmoxVE/pull/13316)) - - core/tools: replace generic return 1 exit_codes with more specific exit_codes [@MickLesk](https://github.com/MickLesk) ([#13311](https://github.com/community-scripts/ProxmoxVE/pull/13311)) - - - #### πŸ”§ Refactor - - - core: use /usr/bin/install to prevent function shadowing [@MickLesk](https://github.com/MickLesk) ([#13299](https://github.com/community-scripts/ProxmoxVE/pull/13299)) - -### 🧰 Tools - - - #### 🐞 Bug Fixes - - - SparkyFitness-Garmin: fix app name [@tomfrenzel](https://github.com/tomfrenzel) ([#13325](https://github.com/community-scripts/ProxmoxVE/pull/13325)) - -## 2026-03-25 - -### πŸš€ Updated Scripts - - - #### ✨ New Features - - - Komodo v2: migrate env vars to v2 and update source [@MickLesk](https://github.com/MickLesk) ([#13262](https://github.com/community-scripts/ProxmoxVE/pull/13262)) - -### πŸ’Ύ Core - - - #### πŸ”§ Refactor - - - core: make shell command substitutions safe with || true [@MickLesk](https://github.com/MickLesk) ([#13279](https://github.com/community-scripts/ProxmoxVE/pull/13279)) - -## 2026-03-24 - -### πŸ†• New Scripts - - - Homebrew (Addon) ([#13249](https://github.com/community-scripts/ProxmoxVE/pull/13249)) -- NextExplorer ([#13252](https://github.com/community-scripts/ProxmoxVE/pull/13252)) - -### πŸš€ Updated Scripts - - - #### ✨ New Features - - - Turnkey: modernize turnkey.sh with shared libraries [@MickLesk](https://github.com/MickLesk) ([#13242](https://github.com/community-scripts/ProxmoxVE/pull/13242)) - - - #### πŸ”§ Refactor - - - chore: replace helper-scripts.com with community-scripts.com [@MickLesk](https://github.com/MickLesk) ([#13244](https://github.com/community-scripts/ProxmoxVE/pull/13244)) - -### πŸ—‘οΈ Deleted Scripts - - - Remove: Booklore [@MickLesk](https://github.com/MickLesk) ([#13265](https://github.com/community-scripts/ProxmoxVE/pull/13265)) - -## 2026-03-23 - -### πŸš€ Updated Scripts - - - #### πŸ”§ Refactor - - - core: harden shell scripts against injection and insecure permissions [@MickLesk](https://github.com/MickLesk) ([#13239](https://github.com/community-scripts/ProxmoxVE/pull/13239)) - -## 2026-03-22 - -### πŸ†• New Scripts - - - versitygw ([#13180](https://github.com/community-scripts/ProxmoxVE/pull/13180)) - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - Adventurelog: pin DRF <3.15 to fix coreapi module removal [@MickLesk](https://github.com/MickLesk) ([#13194](https://github.com/community-scripts/ProxmoxVE/pull/13194)) - - - #### ✨ New Features - - - ConvertX: add libreoffice-writer for ODT/document conversions [@MickLesk](https://github.com/MickLesk) ([#13196](https://github.com/community-scripts/ProxmoxVE/pull/13196)) - - - #### πŸ”§ Refactor - - - iSponsorblockTV: add AVX CPU check before installation [@MickLesk](https://github.com/MickLesk) ([#13197](https://github.com/community-scripts/ProxmoxVE/pull/13197)) - -### πŸ’Ύ Core - - - #### 🐞 Bug Fixes - - - core: guard against empty IPv6 address in static mode [@MickLesk](https://github.com/MickLesk) ([#13195](https://github.com/community-scripts/ProxmoxVE/pull/13195)) - -## 2026-03-21 - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - Anytype-server: wait for MongoDB readiness before rs.initiate() [@MickLesk](https://github.com/MickLesk) ([#13165](https://github.com/community-scripts/ProxmoxVE/pull/13165)) - - Frigate: use correct CPU model fallback path [@MickLesk](https://github.com/MickLesk) ([#13164](https://github.com/community-scripts/ProxmoxVE/pull/13164)) - - iSponsorBlockTV: Fix release fetching [@tremor021](https://github.com/tremor021) ([#13157](https://github.com/community-scripts/ProxmoxVE/pull/13157)) - - Isponsorblocktv: use quoted heredoc to prevent unbound variable error during CLI wrapper creation [@Copilot](https://github.com/Copilot) ([#13146](https://github.com/community-scripts/ProxmoxVE/pull/13146)) - - - #### ✨ New Features - - - Headscale: Enable TUN [@tremor021](https://github.com/tremor021) ([#13158](https://github.com/community-scripts/ProxmoxVE/pull/13158)) - -### πŸ’Ύ Core - - - #### 🐞 Bug Fixes - - - core: add missing -searchdomain/-nameserver prefix in base_settings [@MickLesk](https://github.com/MickLesk) ([#13166](https://github.com/community-scripts/ProxmoxVE/pull/13166)) - -## 2026-03-20 - -### πŸ†• New Scripts - - - iSponsorBlockTV ([#13123](https://github.com/community-scripts/ProxmoxVE/pull/13123)) -- Alpine-Wakapi ([#13119](https://github.com/community-scripts/ProxmoxVE/pull/13119)) -- teleport ([#13086](https://github.com/community-scripts/ProxmoxVE/pull/13086)) - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - Reactive-Resume: add git dependency for v5.0.13+ [@MickLesk](https://github.com/MickLesk) ([#13133](https://github.com/community-scripts/ProxmoxVE/pull/13133)) - - Scanopy: increase default CPU, RAM, and HDD to prevent OOM during Rust build [@Copilot](https://github.com/Copilot) ([#13130](https://github.com/community-scripts/ProxmoxVE/pull/13130)) - - - #### ✨ New Features - - - Immich: v2.6.1 [@vhsdream](https://github.com/vhsdream) ([#13111](https://github.com/community-scripts/ProxmoxVE/pull/13111)) - - VM's: add input validation and hostname sanitization to all VM scripts [@MickLesk](https://github.com/MickLesk) ([#12973](https://github.com/community-scripts/ProxmoxVE/pull/12973)) - -### 🧰 Tools - - - #### πŸ”§ Refactor - - - Harden code-server addon install script [@MickLesk](https://github.com/MickLesk) ([#13116](https://github.com/community-scripts/ProxmoxVE/pull/13116)) \ No newline at end of file + - Refactor/Feature-Bump/Security: Update-Cron-LXCs (Now Local Mode!) [@MickLesk](https://github.com/MickLesk) ([#13339](https://github.com/community-scripts/ProxmoxVE/pull/13339)) \ No newline at end of file From b56e6f9e52f1c4095e9df9630addb6572e6ba123 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, 26 Apr 2026 00:12:39 +0000 Subject: [PATCH 077/102] Update CHANGELOG.md (#14026) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec1b43e20..0b11ea650 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -448,6 +448,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
+## 2026-04-26 + ## 2026-04-25 ### πŸš€ Updated Scripts From 2f6f0880ac04b085cf6114e276f14608ea49cd82 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Sun, 26 Apr 2026 08:48:46 +0200 Subject: [PATCH 078/102] TREK (#14017) * Add trek (ct) * Update success message in trek.sh * Simplify TREK installation script Removed initialization wait and health check for TREK. --------- Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com> --- ct/headers/trek | 6 +++ ct/trek.sh | 84 +++++++++++++++++++++++++++++++++++++++++ install/trek-install.sh | 79 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 ct/headers/trek create mode 100644 ct/trek.sh create mode 100644 install/trek-install.sh diff --git a/ct/headers/trek b/ct/headers/trek new file mode 100644 index 000000000..f02f11b4e --- /dev/null +++ b/ct/headers/trek @@ -0,0 +1,6 @@ + __________ ________ __ + /_ __/ __ \/ ____/ //_/ + / / / /_/ / __/ / ,< + / / / _, _/ /___/ /| | +/_/ /_/ |_/_____/_/ |_| + diff --git a/ct/trek.sh b/ct/trek.sh new file mode 100644 index 000000000..0e3f679a9 --- /dev/null +++ b/ct/trek.sh @@ -0,0 +1,84 @@ +#!/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/mauriceboe/TREK + +APP="TREK" +var_tags="${var_tags:-travel;planning;collaboration}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-8}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +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/trek ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "trek" "mauriceboe/TREK"; then + 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" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "trek" "mauriceboe/TREK" "tarball" + + msg_info "Building Client" + cd /opt/trek/client + $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" + + msg_info "Installing Server Dependencies" + cd /opt/trek/server + $STD npm ci + msg_ok "Installed Server Dependencies" + + 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" + + msg_info "Starting Service" + systemctl start trek + 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/install/trek-install.sh b/install/trek-install.sh new file mode 100644 index 000000000..535597f8a --- /dev/null +++ b/install/trek-install.sh @@ -0,0 +1,79 @@ +#!/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/mauriceboe/TREK + +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 +msg_ok "Installed Dependencies" + +NODE_VERSION="22" setup_nodejs +fetch_and_deploy_gh_release "trek" "mauriceboe/TREK" "tarball" + +msg_info "Building Client" +cd /opt/trek/client +$STD npm ci +$STD npm run build +msg_ok "Built Client" + +msg_info "Setting up Server" +cd /opt/trek/server +$STD npm ci +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 +ln -s /opt/trek/data /opt/trek/server/data +ln -s /opt/trek/uploads /opt/trek/server/uploads +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 +PORT=3000 +ENCRYPTION_KEY=${ENCRYPTION_KEY} +ADMIN_EMAIL=${ADMIN_EMAIL} +ADMIN_PASSWORD=${ADMIN_PASSWORD} +COOKIE_SECURE=false +FORCE_HTTPS=false +LOG_LEVEL=info +TZ=UTC +EOF +chmod 600 /opt/trek/server/.env +msg_ok "Set up Server" + +msg_info "Creating Service" +cat </etc/systemd/system/trek.service +[Unit] +Description=TREK Travel Planner +After=network.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/trek/server +EnvironmentFile=/opt/trek/server/.env +ExecStart=/usr/bin/node --import tsx src/index.ts +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now trek +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc From 799f3bf0fb1f8e4452a3a0c74ca2b374e1109974 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, 26 Apr 2026 06:49:13 +0000 Subject: [PATCH 079/102] Update CHANGELOG.md (#14028) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b11ea650..6fbdcdfd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -450,6 +450,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-04-26 +### πŸ†• New Scripts + + - TREK ([#14017](https://github.com/community-scripts/ProxmoxVE/pull/14017)) + ## 2026-04-25 ### πŸš€ Updated Scripts From 4963385bf9406b5d1bce49c6fe0d6e206277f49f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Taha=20=C3=96ztop?= Date: Sun, 26 Apr 2026 09:51:33 +0300 Subject: [PATCH 080/102] fix(2fauth): make update_script idempotent and preserve ownership (#14018) The update was failing with 'mv: cannot stat /opt/2fauth-backup/.env: No such file or directory' on a system where a previous run had left /opt/2fauth-backup behind. mv would then nest /opt/2fauth inside the existing backup directory (as /opt/2fauth-backup/2fauth/), so the restore step looked at the wrong path. After fixing that, the app returned a 500 ('Key path file:///opt/2fauth/storage/oauth-public.key does not exist or is not readable') because chown/chmod ran before composer install and php artisan 2fauth:install, leaving vendor/, bootstrap/cache/* and the regenerated oauth keys owned by root and unreadable by www-data. - Remove any stale /opt/2fauth-backup before creating the backup, and remove it again at the end so the next run starts clean - Use cp instead of mv when restoring .env/storage so the backup is preserved until the update completes - Move chown/chmod to AFTER composer + artisan, matching the order in install/2fauth-install.sh - Restart php8.4-fpm in addition to nginx so opcache picks up the new cached config - Drop redundant quotes around literal paths to match the rest of the codebase --- ct/2fauth.sh | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/ct/2fauth.sh b/ct/2fauth.sh index deee15371..2d984da37 100644 --- a/ct/2fauth.sh +++ b/ct/2fauth.sh @@ -24,7 +24,7 @@ function update_script() { check_container_storage check_container_resources - if [[ ! -d "/opt/2fauth" ]]; then + if [[ ! -d /opt/2fauth ]]; then msg_error "No ${APP} Installation Found!" exit fi @@ -34,7 +34,8 @@ function update_script() { $STD apt -y upgrade msg_info "Creating Backup" - mv "/opt/2fauth" "/opt/2fauth-backup" + rm -rf /opt/2fauth-backup + mv /opt/2fauth /opt/2fauth-backup if ! dpkg -l | grep -q 'php8.4'; then cp /etc/nginx/conf.d/2fauth.conf /etc/nginx/conf.d/2fauth.conf.bak fi @@ -46,15 +47,17 @@ function update_script() { fi fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth" "tarball" setup_composer - mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env" - mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage" - cd "/opt/2fauth" || return - chown -R www-data: "/opt/2fauth" - chmod -R 755 "/opt/2fauth" + cp /opt/2fauth-backup/.env /opt/2fauth/.env + cp -r /opt/2fauth-backup/storage /opt/2fauth/storage + cd /opt/2fauth || return export COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev --prefer-dist php artisan 2fauth:install + chown -R www-data: /opt/2fauth + chmod -R 755 /opt/2fauth + $STD systemctl restart php8.4-fpm $STD systemctl restart nginx + rm -rf /opt/2fauth-backup msg_ok "Updated successfully!" fi exit From b78cdb4008af0b91e96e6f5c1dc2f39c18f9b6a7 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, 26 Apr 2026 06:52:00 +0000 Subject: [PATCH 081/102] Update CHANGELOG.md (#14029) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fbdcdfd0..5361cae90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -454,6 +454,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - TREK ([#14017](https://github.com/community-scripts/ProxmoxVE/pull/14017)) +### πŸš€ Updated Scripts + + - fix(2fauth): handle stale backup directory on update [@omertahaoztop](https://github.com/omertahaoztop) ([#14018](https://github.com/community-scripts/ProxmoxVE/pull/14018)) + ## 2026-04-25 ### πŸš€ Updated Scripts From 13bd09532ac444e6465d397afd4dfbcb66649e6b 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, 26 Apr 2026 21:04:28 +0200 Subject: [PATCH 082/102] Set up directories and enable Technitium DNS service (#14030) Create necessary directories for Technitium DNS service and update systemd service file. --- install/technitiumdns-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install/technitiumdns-install.sh b/install/technitiumdns-install.sh index f0cac6ee0..f38de6cae 100644 --- a/install/technitiumdns-install.sh +++ b/install/technitiumdns-install.sh @@ -28,6 +28,7 @@ fetch_and_deploy_from_url "https://download.technitium.com/dns/DnsServerPortable echo "${RELEASE}" >~/.technitium msg_info "Creating service" +mkdir -p /etc/dns /var/log/technitium/dns sed -i '/^User=/d;/^Group=/d' /opt/technitium/dns/systemd.service cp /opt/technitium/dns/systemd.service /etc/systemd/system/technitium.service systemctl enable -q --now technitium From 1e1e96b68e74a35cc602ac28464d8982547eebf1 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, 26 Apr 2026 19:04:56 +0000 Subject: [PATCH 083/102] Update CHANGELOG.md (#14040) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5361cae90..6559b2151 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -458,6 +458,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - fix(2fauth): handle stale backup directory on update [@omertahaoztop](https://github.com/omertahaoztop) ([#14018](https://github.com/community-scripts/ProxmoxVE/pull/14018)) + - #### 🐞 Bug Fixes + + - Technitium DNS: Ensure directories exist before running service [@tremor021](https://github.com/tremor021) ([#14030](https://github.com/community-scripts/ProxmoxVE/pull/14030)) + ## 2026-04-25 ### πŸš€ Updated Scripts From df9fa394b82cfb1543ca57e57db0382ef91dc307 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 26 Apr 2026 21:22:00 +0200 Subject: [PATCH 084/102] Increase Frigate default CPU cores from 4 to 8 (#14039) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- ct/frigate.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/frigate.sh b/ct/frigate.sh index 99a3c9184..229722e79 100644 --- a/ct/frigate.sh +++ b/ct/frigate.sh @@ -7,7 +7,7 @@ source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxV APP="Frigate" var_tags="${var_tags:-nvr}" -var_cpu="${var_cpu:-4}" +var_cpu="${var_cpu:-8}" var_ram="${var_ram:-4096}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" From 95f2d24f53b6b46e935f7027a5ed68bd8dd45f86 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, 26 Apr 2026 19:22:27 +0000 Subject: [PATCH 085/102] Update CHANGELOG.md (#14042) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6559b2151..c52872a69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -460,6 +460,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Increase Frigate default CPU cores from 4 to 8 [@MickLesk](https://github.com/MickLesk) ([#14039](https://github.com/community-scripts/ProxmoxVE/pull/14039)) - Technitium DNS: Ensure directories exist before running service [@tremor021](https://github.com/tremor021) ([#14030](https://github.com/community-scripts/ProxmoxVE/pull/14030)) ## 2026-04-25 From ca915da8c17a6da96f3a35625dbdd999da665e18 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 26 Apr 2026 22:12:20 +0200 Subject: [PATCH 086/102] Fix: Correct deb822 repository flat path detection (#14037) The setup_deb822_repo function was only checking for the literal './' suite value, but should reject any suite ending with '/', which indicates a flat repository that must not include Components in the DEB822 format. This fix aligns ProxmoxVE with the correct behavior already present in ProxmoxVED. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- misc/tools.func | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index ea8efaddc..8c2139c4c 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -1924,8 +1924,8 @@ setup_deb822_repo() { echo "Types: deb" echo "URIs: $repo_url" echo "Suites: $suite" - # Flat repositories (suite="./" or absolute path) must not have Components - if [[ "$suite" != "./" && -n "$component" ]]; then + # Flat repositories (suite ending with "/" or "./") must not have Components + if [[ "$suite" != *"/" && -n "$component" ]]; then echo "Components: $component" fi [[ -n "$architectures" ]] && echo "Architectures: $architectures" From 91b03574e4626efd4291252953a48783d6ab8128 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, 26 Apr 2026 20:12:47 +0000 Subject: [PATCH 087/102] Update CHANGELOG.md (#14044) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c52872a69..fae574d68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -463,6 +463,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - Increase Frigate default CPU cores from 4 to 8 [@MickLesk](https://github.com/MickLesk) ([#14039](https://github.com/community-scripts/ProxmoxVE/pull/14039)) - Technitium DNS: Ensure directories exist before running service [@tremor021](https://github.com/tremor021) ([#14030](https://github.com/community-scripts/ProxmoxVE/pull/14030)) +### πŸ’Ύ Core + + - #### 🐞 Bug Fixes + + - core: Correct deb822 repository flat path detection [@MickLesk](https://github.com/MickLesk) ([#14037](https://github.com/community-scripts/ProxmoxVE/pull/14037)) + ## 2026-04-25 ### πŸš€ Updated Scripts From 88397b48dc1ad044bdc78a24e06f06dd3b7009d4 Mon Sep 17 00:00:00 2001 From: Mike <49700735+m1ckywill@users.noreply.github.com> Date: Mon, 27 Apr 2026 17:00:29 +1000 Subject: [PATCH 088/102] Update build.func - fixed spelling mistake (#14047) --- misc/build.func | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/misc/build.func b/misc/build.func index 272dc1f66..20cd33489 100644 --- a/misc/build.func +++ b/misc/build.func @@ -5456,14 +5456,14 @@ create_lxc_container() { local _has_fallback_option=false if [[ "$do_retry" == "yes" ]] && has_previous_os_version_template; then _has_fallback_option=true - echo " [1] Run host upgrade now (recommended). WARNING: this runs apt upgrade and updates all Packeages on your host!" + echo " [1] Run host upgrade now (recommended). WARNING: this runs apt upgrade and updates all Packages on your host!" echo " [2] Use an older ${PCT_OSTYPE} template instead (may not work with all scripts)" echo " [3] Ignore" echo " [4] Cancel" echo read -rp "Select option [1/2/3/4]: " _ans Date: Mon, 27 Apr 2026 07:00:57 +0000 Subject: [PATCH 089/102] Update CHANGELOG.md (#14052) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fae574d68..df3f7cca2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -448,6 +448,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-04-27 + +### πŸ’Ύ Core + + - #### πŸ”§ Refactor + + - Update build.func - fixed spelling mistake [@m1ckywill](https://github.com/m1ckywill) ([#14047](https://github.com/community-scripts/ProxmoxVE/pull/14047)) + ## 2026-04-26 ### πŸ†• New Scripts From 1c169fc7e2632e7d7a4a7358f9f502dc2227d520 Mon Sep 17 00:00:00 2001 From: Joerg Heinemann Date: Mon, 27 Apr 2026 10:17:05 +0200 Subject: [PATCH 090/102] Add patchmon-agent report execution in update script (#14054) --- tools/pve/update-lxcs-cron.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/pve/update-lxcs-cron.sh b/tools/pve/update-lxcs-cron.sh index 15ca40540..d7abc4cae 100644 --- a/tools/pve/update-lxcs-cron.sh +++ b/tools/pve/update-lxcs-cron.sh @@ -66,10 +66,20 @@ for container in $(pct list | awk '{if(NR>1) print $1}'); do pct start "$container" sleep 5 update_container "$container" || echo " [Error] Update failed for $container" + # check if patchmon agent is present in container and run a report if found + if pct exec "$container" -- [ -e "/usr/local/bin/patchmon-agent" ]; then + echo -e "${BL}[Info]${GN} patchmon-agent found in ${BL} $container ${CL}, triggering report. \n" + pct exec "$container" -- "/usr/local/bin/patchmon-agent" "report" + fi echo -e "[Info] Shutting down $container" pct shutdown "$container" --timeout 60 & elif [ "$status" == "status: running" ]; then update_container "$container" || echo " [Error] Update failed for $container" + # check if patchmon agent is present in container and run a report if found + if pct exec "$container" -- [ -e "/usr/local/bin/patchmon-agent" ]; then + echo -e "${BL}[Info]${GN} patchmon-agent found in ${BL} $container ${CL}, triggering report. \n" + pct exec "$container" -- "/usr/local/bin/patchmon-agent" "report" + fi fi fi done From 9b8129abd32c59e585df12a6e62f0f8acfc628f4 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, 27 Apr 2026 08:17:35 +0000 Subject: [PATCH 091/102] Update CHANGELOG.md (#14055) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index df3f7cca2..b0c555234 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -456,6 +456,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - Update build.func - fixed spelling mistake [@m1ckywill](https://github.com/m1ckywill) ([#14047](https://github.com/community-scripts/ProxmoxVE/pull/14047)) +### 🧰 Tools + + - #### ✨ New Features + + - Add patchmon-agent report execution in update script [@heinemannj](https://github.com/heinemannj) ([#14054](https://github.com/community-scripts/ProxmoxVE/pull/14054)) + ## 2026-04-26 ### πŸ†• New Scripts From 782420b4e42ad42dc3bc11ad352d9e8b92df9047 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 27 Apr 2026 06:06:16 -0400 Subject: [PATCH 092/102] PatchMon: v2.0.0 migration (#14015) Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com> --- ct/patchmon.sh | 110 ++++++++++++++++++++---------------- install/patchmon-install.sh | 108 ++++++++++++++++++++--------------- 2 files changed, 123 insertions(+), 95 deletions(-) diff --git a/ct/patchmon.sh b/ct/patchmon.sh index e49324495..99511aaa9 100644 --- a/ct/patchmon.sh +++ b/ct/patchmon.sh @@ -29,63 +29,75 @@ function update_script() { exit fi - if ! grep -q "PORT=3001" /opt/patchmon/backend/.env; then - msg_warn "⚠️ The next PatchMon update will include breaking changes (port changes)." - msg_warn "See details here: https://github.com/community-scripts/ProxmoxVE/pull/11888" - msg_warn "Press Enter to continue with the update, or Ctrl+C to abort..." - read -r - fi - - RELEASE="v1.4.2" - NODE_VERSION="24" setup_nodejs + RELEASE="v2.0.1" if check_for_gh_release "PatchMon" "PatchMon/PatchMon" "${RELEASE}"; then msg_info "Stopping Service" systemctl stop patchmon-server msg_ok "Stopped Service" - msg_info "Creating Backup" - cp /opt/patchmon/backend/.env /opt/backend.env - cp /opt/patchmon/frontend/.env /opt/frontend.env - msg_ok "Backup Created" - - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "${RELEASE}" "/opt/patchmon" - - msg_info "Updating PatchMon" - VERSION=$(get_latest_github_release "PatchMon/PatchMon") - SERVER_PORT="$(sed -n '/SERVER_PORT/s/[^=]*=//p' /opt/backend.env)" - sed -i 's/PORT=3399/PORT=3001/' /opt/backend.env - sed -i -e "s/VERSION=.*/VERSION=$VERSION/" \ - -e '/^VITE_API_URL/d' /opt/frontend.env - export NODE_ENV=production - cd /opt/patchmon - $STD npm install --no-audit --no-fund --no-save --ignore-scripts - cd /opt/patchmon/frontend - mv /opt/frontend.env /opt/patchmon/frontend/.env - $STD npm install --no-audit --no-fund --no-save --ignore-scripts --include=dev - $STD npm run build - cd /opt/patchmon/backend - mv /opt/backend.env /opt/patchmon/backend/.env - $STD npm run db:generate - $STD npx prisma migrate deploy - cp /opt/patchmon/docker/nginx.conf.template /etc/nginx/sites-available/patchmon.conf - sed -i -e 's|proxy_pass .*|proxy_pass http://127.0.0.1:3001;|' \ - -e '\|try_files |i\ root /opt/patchmon/frontend/dist;' \ - -e 's|alias.*|alias /opt/patchmon/frontend/dist/assets;|' \ - -e '\|expires 1y|i\ root /opt/patchmon/frontend/dist;' /etc/nginx/sites-available/patchmon.conf - if [[ -n "$SERVER_PORT" ]] && [[ "$SERVER_PORT" != "443" ]]; then - sed -i "s/listen [[:digit:]].*/listen ${SERVER_PORT};/" /etc/nginx/sites-available/patchmon.conf + if [[ -d /opt/patchmon/backend ]]; then + msg_info "Legacy install detected - creating full backup, please wait..." + $STD tar czf ~/patchmon_legacy.tar.gz /opt/patchmon + cp /opt/patchmon/backend/.env /opt/legacy.env + msg_ok "Full backup saved in /root" + msg_info "Starting migration to PatchMon v2.x.x" + systemctl disable -q --now nginx + $STD npm cache clean --force + $STD apt autoremove --purge -y {nginx,nodejs} + if [[ -f /etc/apt/sources.list.d/nodesource.sources ]]; then + cp /etc/apt/sources.list.d/nodesource.sources /etc/apt/sources.list.d/nodesource.sources.bak + rm -f /etc/apt/sources.list.d/nodesource.sources + elif [[ -f /etc/apt/sources.list.d/nodesource.list ]]; then + cp /etc/apt/sources.list.d/nodesource.list /etc/apt/sources.list.d/nodesource.list.bak + rm -f /etc/apt/sources.list.d/nodesource.list + fi + rm -rf /opt/patchmon + mkdir -p /opt/patchmon/agents + cp /opt/legacy.env /opt/patchmon/.env + sed -i -e 's/^PORT=.*/PORT=3000/' \ + -e 's/^NODE_/APP_/' \ + -e '/^SERVER_*/d' \ + -e '/^# API*/,+2d' /opt/patchmon/.env + { + echo "" + echo "SESSION_SECRET=$(openssl rand -hex 64)" + echo "AI_ENCRYPTION_KEY=$(openssl rand -hex 64)" + echo "AGENT_BINARIES_DIR=/opt/patchmon/agents" + } >>/opt/patchmon/.env + sed -i -e '\|Directory|s|/backend||' \ + -e 's|^ExecStart=.*|ExecStart=/opt/patchmon/patchmon-server|' \ + -e 's|^Environment=NODE_.*|EnvironmentFile=/opt/patchmon/.env|' \ + /etc/systemd/system/patchmon-server.service + systemctl daemon-reload + rm /opt/legacy.env + msg_ok "Migration complete!" fi - ln -sf /etc/nginx/sites-available/patchmon.conf /etc/nginx/sites-enabled/ - rm -f /etc/nginx/sites-enabled/default - $STD nginx -t - systemctl restart nginx - msg_ok "Updated PatchMon" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "singlefile" "${RELEASE}" "/opt/patchmon" "patchmon-server-linux-amd64" + mv /opt/patchmon/PatchMon /opt/patchmon/patchmon-server + + msg_info "Fetching PatchMon agent binaries" + [[ ! -d /opt/patchmon/agents ]] && mkdir -p /opt/patchmon/agents + FILE_URL="https://github.com/PatchMon/PatchMon/releases/download/${RELEASE}/patchmon-agent-" + AGENT_NAME=( + "linux-amd64" + "linux-arm64" + "linux-arm" + "linux-386" + "freebsd-amd64" + "freebsd-arm64" + "freebsd-arm" + "freebsd-386" + "windows-amd64.exe" + "windows-arm64.exe" + ) + for arch in "${AGENT_NAME[@]}"; do + curl_with_retry "${FILE_URL}${arch}" "/opt/patchmon/agents/patchmon-agent-${arch}" + [[ "${arch}" != *.exe ]] && chmod 755 "/opt/patchmon/agents/patchmon-agent-${arch}" + done + msg_ok "Fetched PatchMon agent binaries" msg_info "Starting Service" - if grep -q '/usr/bin/node' /etc/systemd/system/patchmon-server.service; then - sed -i 's|ExecStart=.*|ExecStart=/usr/bin/npm run start|' /etc/systemd/system/patchmon-server.service - systemctl daemon-reload - fi systemctl start patchmon-server msg_ok "Started Service" msg_ok "Updated successfully!" diff --git a/install/patchmon-install.sh b/install/patchmon-install.sh index eb9911591..914591719 100644 --- a/install/patchmon-install.sh +++ b/install/patchmon-install.sh @@ -14,74 +14,90 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt install -y \ - build-essential \ - nginx \ - redis-server +$STD apt install -y redis-server msg_ok "Installed Dependencies" -NODE_VERSION="24" setup_nodejs PG_VERSION="17" setup_postgresql PG_DB_NAME="patchmon_db" PG_DB_USER="patchmon_usr" setup_postgresql_db -fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "v1.4.2" "/opt/patchmon" +RELEASE="v2.0.1" +fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "singlefile" "$RELEASE" "/opt/patchmon" "patchmon-server-linux-amd64" +mv /opt/patchmon/PatchMon /opt/patchmon/patchmon-server msg_info "Configuring PatchMon" -VERSION=$(get_latest_github_release "PatchMon/PatchMon") -export NODE_ENV=production -cd /opt/patchmon -$STD npm install --no-audit --no-fund --no-save --ignore-scripts - -cd /opt/patchmon/frontend -cat <./.env -VITE_APP_NAME=PatchMon -VITE_APP_VERSION=${VERSION} -EOF -$STD npm install --no-audit --no-fund --no-save --ignore-scripts --include=dev -$STD npm run build - +cat </opt/patchmon/.env +DATABASE_URL="postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME" JWT_SECRET="$(openssl rand -hex 64)" -mv /opt/patchmon/backend/env.example /opt/patchmon/backend/.env -sed -i -e "s|DATABASE_URL=.*|DATABASE_URL=\"postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME\"|" \ - -e "/JWT_SECRET/s/[=$].*/=$JWT_SECRET/" \ - -e "\|CORS_ORIGIN|s|localhost|$LOCAL_IP|" \ - -e "/PORT=3001/aSERVER_PROTOCOL=http \\ - SERVER_HOST=$LOCAL_IP \\ - SERVER_PORT=3000" \ - -e '/_ENV=production/aTRUST_PROXY=1' \ - -e '/REDIS_USER=.*/,+1d' /opt/patchmon/backend/.env +SESSION_SECRET="$(openssl rand -hex 64)" +AI_ENCRYPTION_KEY="$(openssl rand -hex 64)" +CORS_ORIGIN=http://${LOCAL_IP}:3000 +PORT=3000 +APP_ENV=production -cd /opt/patchmon/backend -$STD npm run db:generate -$STD npx prisma migrate deploy +# Redis +REDIS_HOST=localhost +REDIS_PORT=6379 + +## OIDC / SSO (when OIDC_ENABLED=true, issuer/client/secret/redirect required) +# OIDC_ENABLED=false +# OIDC_ISSUER_URL= +# OIDC_CLIENT_ID= +# OIDC_CLIENT_SECRET= +# OIDC_REDIRECT_URI= +# OIDC_SCOPES=openid email profile groups +# OIDC_AUTO_CREATE_USERS=false +# OIDC_DEFAULT_ROLE=user +# OIDC_DISABLE_LOCAL_AUTH=false +# OIDC_BUTTON_TEXT=Login with SSO +# OIDC_SESSION_TTL=600 +# OIDC_POST_LOGOUT_URI= +# OIDC_SYNC_ROLES=false +# OIDC_ADMIN_GROUP= +# OIDC_SUPERADMIN_GROUP= +# OIDC_HOST_MANAGER_GROUP= +# OIDC_READONLY_GROUP= +# OIDC_USER_GROUP= +# OIDC_ENFORCE_HTTPS=true + +AGENT_BINARIES_DIR=/opt/patchmon/agents +EOF msg_ok "Configured PatchMon" -msg_info "Configuring Nginx" -cp /opt/patchmon/docker/nginx.conf.template /etc/nginx/sites-available/patchmon.conf -sed -i -e 's|proxy_pass .*|proxy_pass http://127.0.0.1:3001;|' \ - -e '\|try_files |i\ root /opt/patchmon/frontend/dist;' \ - -e 's|alias.*|alias /opt/patchmon/frontend/dist/assets;|' \ - -e '\|expires 1y|i\ root /opt/patchmon/frontend/dist;' /etc/nginx/sites-available/patchmon.conf -ln -sf /etc/nginx/sites-available/patchmon.conf /etc/nginx/sites-enabled/ -rm -f /etc/nginx/sites-enabled/default -$STD nginx -t -systemctl restart nginx -msg_ok "Configured Nginx" +msg_info "Fetching PatchMon agent binaries" +mkdir -p /opt/patchmon/agents +FILE_URL="https://github.com/PatchMon/PatchMon/releases/download/${RELEASE}/patchmon-agent-" +AGENT_NAME=( + "linux-amd64" + "linux-arm64" + "linux-arm" + "linux-386" + "freebsd-amd64" + "freebsd-arm64" + "freebsd-arm" + "freebsd-386" + "windows-amd64.exe" + "windows-arm64.exe" +) +for arch in "${AGENT_NAME[@]}"; do + curl_with_retry "${FILE_URL}${arch}" "/opt/patchmon/agents/patchmon-agent-${arch}" + [[ "${arch}" != *.exe ]] && chmod 755 "/opt/patchmon/agents/patchmon-agent-${arch}" +done +msg_ok "Fetched PatchMon agent binaries" msg_info "Creating service" cat </etc/systemd/system/patchmon-server.service [Unit] -Description=PatchMon Service +Description=PatchMon Server After=network.target postgresql.service [Service] Type=simple -WorkingDirectory=/opt/patchmon/backend -ExecStart=/usr/bin/npm run start +WorkingDirectory=/opt/patchmon +ExecStart=/opt/patchmon/patchmon-server Restart=always RestartSec=10 -Environment=NODE_ENV=production Environment=PATH=/usr/bin:/usr/local/bin +EnvironmentFile=/opt/patchmon/.env NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict From 424575d8c1b9df970b9dd2814dbc9cb578ec255a 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, 27 Apr 2026 10:06:41 +0000 Subject: [PATCH 093/102] Update CHANGELOG.md (#14060) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0c555234..0973ae514 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -450,6 +450,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-04-27 +### πŸš€ Updated Scripts + + - #### πŸ’₯ Breaking Changes + + - PatchMon: v2.0.0 migration [@vhsdream](https://github.com/vhsdream) ([#14015](https://github.com/community-scripts/ProxmoxVE/pull/14015)) + ### πŸ’Ύ Core - #### πŸ”§ Refactor From c32ca537f1d1cd182434b9c4378fcd27c1ea0707 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 27 Apr 2026 13:29:57 +0200 Subject: [PATCH 094/102] fix(technitiumdns): always install .NET 10 if not already present (#14049) Previously the update script only upgraded .NET when aspnetcore-runtime-8.0 or 9.0 was detected via is_package_installed. Containers where detection failed would silently skip the upgrade block, leaving Technitium v15 (requires .NET 10) starting against .NET 8/9 and immediately failing. Changed condition to: install .NET 10 unless it is already installed. Old 8.0/9.0 packages are removed with || true to avoid errors on clean installs. Fixes #14045 --- ct/technitiumdns.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/technitiumdns.sh b/ct/technitiumdns.sh index 531fb8b03..6375c8462 100644 --- a/ct/technitiumdns.sh +++ b/ct/technitiumdns.sh @@ -32,8 +32,8 @@ function update_script() { systemctl daemon-reload systemctl enable -q --now technitium fi - if is_package_installed "aspnetcore-runtime-8.0" || is_package_installed "aspnetcore-runtime-9.0"; then - $STD apt remove -y aspnetcore-runtime-* + if ! is_package_installed "aspnetcore-runtime-10.0"; then + $STD apt remove -y aspnetcore-runtime-8.0 aspnetcore-runtime-9.0 2>/dev/null || true [ -f /etc/apt/sources.list.d/microsoft-prod.list ] && rm -f /etc/apt/sources.list.d/microsoft-prod.list [ -f /usr/share/keyrings/microsoft-prod.gpg ] && rm -f /usr/share/keyrings/microsoft-prod.gpg setup_deb822_repo \ From 585de1ba0cb4e64177787e99ec0af9c179202e2e Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 27 Apr 2026 13:30:20 +0200 Subject: [PATCH 095/102] fix(update-lxcs/apps): avoid pct exec on containers mid-shutdown (#14050) Both update-lxcs.sh and update-apps.sh backgrounded pct shutdown and then immediately called pct exec on the same container, causing 'Error: unexpected status' which terminated the loop after the first container. update-lxcs.sh: wrapped reboot-required and patchmon-agent checks in a guard that only runs them when the container was already running (not one that was started and is now being shut down). update-apps.sh: moved pct set (resource reset) and the pct exec reboot-required check to run before pct shutdown is issued. Fixes #14027 --- tools/pve/update-apps.sh | 10 +++++----- tools/pve/update-lxcs.sh | 20 +++++++++++--------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/tools/pve/update-apps.sh b/tools/pve/update-apps.sh index 4bb668be3..129420f9e 100644 --- a/tools/pve/update-apps.sh +++ b/tools/pve/update-apps.sh @@ -405,11 +405,6 @@ for container in $CHOICE; do esac exit_code=$? - if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then - echo -e "${BL}[Info]${GN} Shutting down${BL} $container ${CL} \n" - pct shutdown $container & - fi - #5) if build resources are different than run resources, then: if [ "$UPDATE_BUILD_RESOURCES" -eq "1" ]; then pct set "$container" --cores "$run_cpu" --memory "$run_ram" @@ -421,6 +416,11 @@ for container in $CHOICE; do containers_needing_reboot+=("$container ($container_hostname)") fi + if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then + echo -e "${BL}[Info]${GN} Shutting down${BL} $container ${CL} \n" + pct shutdown $container &>/dev/null & + fi + if [ $exit_code -eq 0 ]; then msg_ok "Updated container $container" elif [ $exit_code -eq 75 ]; then diff --git a/tools/pve/update-lxcs.sh b/tools/pve/update-lxcs.sh index 66edcd0e9..52e9d2528 100644 --- a/tools/pve/update-lxcs.sh +++ b/tools/pve/update-lxcs.sh @@ -110,15 +110,17 @@ for container in $(pct list | awk '{if(NR>1) print $1}'); do elif [ "$status" == "status: running" ]; then update_container $container fi - if pct exec "$container" -- [ -e "/var/run/reboot-required" ]; then - # Get the container's hostname and add it to the list - container_hostname=$(pct exec "$container" hostname) - containers_needing_reboot+=("$container ($container_hostname)") - fi - # check if patchmon agent is present in container and run a report if found - if pct exec "$container" -- [ -e "/usr/local/bin/patchmon-agent" ]; then - echo -e "${BL}[Info]${GN} patchmon-agent found in ${BL} $container ${CL}, triggering report. \n" - pct exec "$container" -- "/usr/local/bin/patchmon-agent" "report" + if [ "$status" == "status: running" ]; then + if pct exec "$container" -- [ -e "/var/run/reboot-required" ]; then + # Get the container's hostname and add it to the list + container_hostname=$(pct exec "$container" hostname) + containers_needing_reboot+=("$container ($container_hostname)") + fi + # check if patchmon agent is present in container and run a report if found + if pct exec "$container" -- [ -e "/usr/local/bin/patchmon-agent" ]; then + echo -e "${BL}[Info]${GN} patchmon-agent found in ${BL} $container ${CL}, triggering report. \n" + pct exec "$container" -- "/usr/local/bin/patchmon-agent" "report" + fi fi fi done From 5cab784bcb983d295e63bf7143157ca2c356f6f4 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, 27 Apr 2026 11:30:22 +0000 Subject: [PATCH 096/102] Update CHANGELOG.md (#14063) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0973ae514..93e55527e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -452,6 +452,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸš€ Updated Scripts + - #### 🐞 Bug Fixes + + - TechnitiumDNS: always install .NET 10 if not already present [@MickLesk](https://github.com/MickLesk) ([#14049](https://github.com/community-scripts/ProxmoxVE/pull/14049)) + - #### πŸ’₯ Breaking Changes - PatchMon: v2.0.0 migration [@vhsdream](https://github.com/vhsdream) ([#14015](https://github.com/community-scripts/ProxmoxVE/pull/14015)) From 93a53fe16edf3e4ce1e523bbd75e7cc90c54c11f 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, 27 Apr 2026 11:30:48 +0000 Subject: [PATCH 097/102] Update CHANGELOG.md (#14064) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93e55527e..9bb726b15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -468,6 +468,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🧰 Tools + - #### 🐞 Bug Fixes + + - update-lxcs/apps: avoid pct exec on containers mid-shutdown [@MickLesk](https://github.com/MickLesk) ([#14050](https://github.com/community-scripts/ProxmoxVE/pull/14050)) + - #### ✨ New Features - Add patchmon-agent report execution in update script [@heinemannj](https://github.com/heinemannj) ([#14054](https://github.com/community-scripts/ProxmoxVE/pull/14054)) From 6044637f123dfe07b742932788aec616a6bf7263 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 27 Apr 2026 13:31:02 +0200 Subject: [PATCH 098/102] Dawarich: run db:migrate before assets:precompile (#14051) * fix(dawarich): run db:migrate before assets:precompile In Rails production, eager loading during assets:precompile can execute DB queries. Dawarich 1.7.0 adds new tables (monthly digest email preferences, S3 storage settings). Running precompile before migrate causes 'Operation not permitted' / exit code 1 when those tables do not exist yet. Reordered to: db:migrate -> assets:precompile -> data:migrate, which is the correct Rails deployment sequence. Fixes #14048 * add otp key --- ct/dawarich.sh | 6 +++++- install/dawarich-install.sh | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ct/dawarich.sh b/ct/dawarich.sh index d2d260998..3d1ca7e02 100644 --- a/ct/dawarich.sh +++ b/ct/dawarich.sh @@ -53,6 +53,10 @@ function update_script() { export PATH="/root/.rbenv/shims:/root/.rbenv/bin:$PATH" eval "$(/root/.rbenv/bin/rbenv init - bash)" + if ! grep -q "OTP_ENCRYPTION_PRIMARY_KEY" /opt/dawarich/.env; then + echo "OTP_ENCRYPTION_PRIMARY_KEY=$(openssl rand -hex 32)" >>/opt/dawarich/.env + fi + set -a && source /opt/dawarich/.env && set +a $STD bundle config set --local deployment 'true' @@ -67,8 +71,8 @@ function update_script() { $STD npm install fi - $STD bundle exec rake assets:precompile $STD bundle exec rails db:migrate + $STD bundle exec rake assets:precompile $STD bundle exec rake data:migrate msg_ok "Ran Migrations" diff --git a/install/dawarich-install.sh b/install/dawarich-install.sh index 9edf3a296..34e58ded7 100644 --- a/install/dawarich-install.sh +++ b/install/dawarich-install.sh @@ -46,10 +46,12 @@ msg_ok "Set up Directories" msg_info "Configuring Environment" SECRET_KEY_BASE=$(openssl rand -hex 64) +OTP_ENCRYPTION_PRIMARY_KEY=$(openssl rand -hex 32) RELEASE=$(get_latest_github_release "Freika/dawarich") cat </opt/dawarich/.env RAILS_ENV=production SECRET_KEY_BASE=${SECRET_KEY_BASE} +OTP_ENCRYPTION_PRIMARY_KEY=${OTP_ENCRYPTION_PRIMARY_KEY} DATABASE_HOST=localhost DATABASE_USERNAME=${PG_DB_USER} DATABASE_PASSWORD=${PG_DB_PASS} From 6ab9737137fdb9c575b8bdc9d456f6c63d260892 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, 27 Apr 2026 11:31:18 +0000 Subject: [PATCH 099/102] Update CHANGELOG.md (#14065) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bb726b15..6ba678ebb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -454,6 +454,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Dawarich: run db:migrate before assets:precompile [@MickLesk](https://github.com/MickLesk) ([#14051](https://github.com/community-scripts/ProxmoxVE/pull/14051)) - TechnitiumDNS: always install .NET 10 if not already present [@MickLesk](https://github.com/MickLesk) ([#14049](https://github.com/community-scripts/ProxmoxVE/pull/14049)) - #### πŸ’₯ Breaking Changes From b226c87a00c0a0bafa47844f700c8f57b88d3ed2 Mon Sep 17 00:00:00 2001 From: rellek Date: Mon, 27 Apr 2026 17:14:24 -0400 Subject: [PATCH 101/102] Add pamUsername column to userOrgs table (#14075) --- ct/pangolin.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ct/pangolin.sh b/ct/pangolin.sh index 765649083..c135645dd 100644 --- a/ct/pangolin.sh +++ b/ct/pangolin.sh @@ -76,6 +76,7 @@ function update_script() { if [[ -f "$DB" ]]; then sqlite3 "$DB" "ALTER TABLE 'orgs' ADD COLUMN 'settingsLogRetentionDaysConnection' integer DEFAULT 0 NOT NULL;" 2>/dev/null || true sqlite3 "$DB" "ALTER TABLE 'clientSitesAssociationsCache' ADD COLUMN 'isJitMode' integer DEFAULT 0 NOT NULL;" 2>/dev/null || true + sqlite3 "$DB" "ALTER TABLE 'userOrgs' ADD COLUMN 'pamUsername' text;" 2>/dev/null || true # Create new role-mapping tables and migrate data before drizzle-kit # drops the roleId columns from userOrgs and userInvites. From a7b8259022a972c01690fbca9ed0a7247cbc1b30 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, 27 Apr 2026 21:14:53 +0000 Subject: [PATCH 102/102] Update CHANGELOG.md (#14077) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ba678ebb..d9bef7e12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -452,6 +452,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸš€ Updated Scripts + - Add pamUsername column to userOrgs table [@JVKeller](https://github.com/JVKeller) ([#14075](https://github.com/community-scripts/ProxmoxVE/pull/14075)) + - #### 🐞 Bug Fixes - Dawarich: run db:migrate before assets:precompile [@MickLesk](https://github.com/MickLesk) ([#14051](https://github.com/community-scripts/ProxmoxVE/pull/14051))