From be01124d1acc9c59862b4ec9aef86a0f1e343e8d 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, 2 Jul 2025 14:07:47 +0200 Subject: [PATCH 001/229] Update versions.json (#5641) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 130 ++++++++++++++--------------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 3f36ef931..bd56320b8 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,64 @@ [ + { + "name": "wazuh/wazuh", + "version": "coverity-w27-4.13.0", + "date": "2025-07-01T03:17:32Z" + }, + { + "name": "glpi-project/glpi", + "version": "10.0.18", + "date": "2025-02-12T11:07:02Z" + }, + { + "name": "emqx/emqx", + "version": "e5.9.1", + "date": "2025-07-02T08:11:50Z" + }, + { + "name": "apache/tomcat", + "version": "9.0.107", + "date": "2025-07-02T07:12:09Z" + }, + { + "name": "nzbgetcom/nzbget", + "version": "v25.1", + "date": "2025-06-27T09:14:14Z" + }, + { + "name": "qbittorrent/qBittorrent", + "version": "release-5.1.2", + "date": "2025-07-02T06:13:16Z" + }, + { + "name": "home-assistant/core", + "version": "2025.6.3", + "date": "2025-06-24T13:00:12Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.2107", + "date": "2025-07-02T05:53:02Z" + }, + { + "name": "firefly-iii/firefly-iii", + "version": "v6.2.20", + "date": "2025-07-02T04:03:37Z" + }, + { + "name": "diced/zipline", + "version": "v4.2.0", + "date": "2025-07-02T00:45:31Z" + }, + { + "name": "sysadminsmedia/homebox", + "version": "v0.20.2", + "date": "2025-07-02T00:37:07Z" + }, + { + "name": "hyperion-project/hyperion.ng", + "version": "2.1.1", + "date": "2025-06-14T17:45:06Z" + }, { "name": "mongodb/mongo", "version": "r8.1.2", @@ -9,21 +69,11 @@ "version": "1.2.35", "date": "2025-07-01T21:37:20Z" }, - { - "name": "apache/tomcat", - "version": "10.1.43", - "date": "2025-07-01T21:32:34Z" - }, { "name": "actualbudget/actual", "version": "v25.7.0", "date": "2025-07-01T21:02:27Z" }, - { - "name": "home-assistant/core", - "version": "2025.6.3", - "date": "2025-06-24T13:00:12Z" - }, { "name": "TwiN/gatus", "version": "v5.19.0", @@ -34,6 +84,11 @@ "version": "2.5.0", "date": "2025-07-01T18:28:01Z" }, + { + "name": "keycloak/keycloak", + "version": "26.3.0", + "date": "2025-07-01T13:18:12Z" + }, { "name": "hivemq/hivemq-community-edition", "version": "2025.4", @@ -59,16 +114,6 @@ "version": "v1.133.0", "date": "2025-07-01T15:13:42Z" }, - { - "name": "sysadminsmedia/homebox", - "version": "v0.20.1", - "date": "2025-07-01T14:18:32Z" - }, - { - "name": "keycloak/keycloak", - "version": "26.3.0", - "date": "2025-07-01T13:18:12Z" - }, { "name": "syncthing/syncthing", "version": "v1.30.0", @@ -84,11 +129,6 @@ "version": "v99.99.99", "date": "2025-07-01T08:26:41Z" }, - { - "name": "Jackett/Jackett", - "version": "v0.22.2101", - "date": "2025-07-01T05:56:59Z" - }, { "name": "zabbix/zabbix", "version": "7.4.0", @@ -99,11 +139,6 @@ "version": "v0.15.0-rc3", "date": "2025-07-01T04:09:37Z" }, - { - "name": "wazuh/wazuh", - "version": "coverity-w27-4.13.0", - "date": "2025-07-01T03:17:32Z" - }, { "name": "NginxProxyManager/nginx-proxy-manager", "version": "v2.12.4", @@ -179,21 +214,11 @@ "version": "v29.0", "date": "2025-06-30T03:52:33Z" }, - { - "name": "firefly-iii/firefly-iii", - "version": "v6.2.19", - "date": "2025-06-28T06:53:45Z" - }, { "name": "dgtlmoon/changedetection.io", "version": "0.50.5", "date": "2025-06-29T08:54:47Z" }, - { - "name": "emqx/emqx", - "version": "e5.9.1-rc.1", - "date": "2025-06-29T07:27:21Z" - }, { "name": "theonedev/onedev", "version": "v11.11.2", @@ -259,11 +284,6 @@ "version": "flowise@3.0.3", "date": "2025-06-27T09:53:57Z" }, - { - "name": "nzbgetcom/nzbget", - "version": "v25.1", - "date": "2025-06-27T09:14:14Z" - }, { "name": "cockpit-project/cockpit", "version": "341.1", @@ -399,11 +419,6 @@ "version": "2025.6.22", "date": "2025-06-22T22:41:11Z" }, - { - "name": "qbittorrent/qBittorrent", - "version": "release-5.1.1", - "date": "2025-06-22T21:41:17Z" - }, { "name": "clusterzx/paperless-ai", "version": "v3.0.7", @@ -549,11 +564,6 @@ "version": "v1.6.9", "date": "2025-06-17T11:54:50Z" }, - { - "name": "glpi-project/glpi", - "version": "10.0.18", - "date": "2025-02-12T11:07:02Z" - }, { "name": "morpheus65535/bazarr", "version": "v1.5.2", @@ -624,11 +634,6 @@ "version": "v6.7.3", "date": "2025-06-15T05:46:17Z" }, - { - "name": "hyperion-project/hyperion.ng", - "version": "2.1.1", - "date": "2025-06-14T17:45:06Z" - }, { "name": "advplyr/audiobookshelf", "version": "v2.25.1", @@ -709,11 +714,6 @@ "version": "v1.10.0", "date": "2025-06-07T08:31:48Z" }, - { - "name": "diced/zipline", - "version": "v4.1.2", - "date": "2025-06-06T17:44:58Z" - }, { "name": "ioBroker/ioBroker", "version": "2025-05-31", From bf05f4be95a5327d818d95685281c6d3881670ea Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 2 Jul 2025 15:51:22 +0200 Subject: [PATCH 002/229] Refactor & Bump to Node24: Zigbee2MQTT (#5638) --- ct/zigbee2mqtt.sh | 33 ++++++++++++++++----------- frontend/public/json/zigbee2mqtt.json | 2 +- install/zigbee2mqtt-install.sh | 13 ++++------- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/ct/zigbee2mqtt.sh b/ct/zigbee2mqtt.sh index 591cf64a6..b40a3c34f 100644 --- a/ct/zigbee2mqtt.sh +++ b/ct/zigbee2mqtt.sh @@ -9,7 +9,7 @@ APP="Zigbee2MQTT" var_tags="${var_tags:-smarthome;zigbee;mqtt}" var_cpu="${var_cpu:-2}" var_ram="${var_ram:-1024}" -var_disk="${var_disk:-4}" +var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-12}" var_unprivileged="${var_unprivileged:-0}" @@ -27,16 +27,28 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi + + if [[ -f ~/.zigbee2mqtt ]]; then + CURRENT="$(cat ~/.zigbee2mqtt)" + elif [[ -f /opt/${APP}_version.txt ]]; then + CURRENT="$(cat /opt/${APP}_version.txt)" + rm -f /opt/${APP}_version.txt + else + CURRENT="" + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/Koenkk/zigbee2mqtt/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + if [[ "$RELEASE" != "$CURRENT" ]]; then + if ! command -v jq &>/dev/null; then + $STD apt-get update + $STD apt-get install -y jq + fi + NODE_VERSION=24 NODE_MODULE="pnpm@$(curl -fsSL https://raw.githubusercontent.com/Koenkk/zigbee2mqtt/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs + msg_info "Stopping Service" systemctl stop zigbee2mqtt msg_ok "Stopped Service" - msg_info "Updating pnpm" - $STD npm install -g pnpm@10.4.1 - msg_ok "Updated pnpm" - msg_info "Creating Backup" rm -rf /opt/${APP}_backup*.tar.gz mkdir -p /opt/z2m_backup @@ -44,12 +56,9 @@ function update_script() { mv /opt/zigbee2mqtt/data /opt/z2m_backup msg_ok "Backup Created" + fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt" + msg_info "Updating ${APP} to v${RELEASE}" - cd /opt - curl -fsSL "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip") - $STD unzip ${RELEASE}.zip - rm -rf /opt/zigbee2mqtt - mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt rm -rf /opt/zigbee2mqtt/data mv /opt/z2m_backup/data /opt/zigbee2mqtt cd /opt/zigbee2mqtt @@ -63,9 +72,7 @@ function update_script() { msg_info "Cleaning up" rm -rf /opt/z2m_backup - rm -rf /opt/${RELEASE}.zip msg_ok "Cleaned up" - echo "${RELEASE}" >/opt/${APP}_version.txt else msg_ok "No update required. ${APP} is already at v${RELEASE}." fi diff --git a/frontend/public/json/zigbee2mqtt.json b/frontend/public/json/zigbee2mqtt.json index 281d57242..ce3770f17 100644 --- a/frontend/public/json/zigbee2mqtt.json +++ b/frontend/public/json/zigbee2mqtt.json @@ -21,7 +21,7 @@ "resources": { "cpu": 2, "ram": 1024, - "hdd": 4, + "hdd": 5, "os": "debian", "version": "12" } diff --git a/install/zigbee2mqtt-install.sh b/install/zigbee2mqtt-install.sh index 0e6ca49ff..f56b374f3 100644 --- a/install/zigbee2mqtt-install.sh +++ b/install/zigbee2mqtt-install.sh @@ -19,17 +19,15 @@ $STD apt-get install -y \ make \ g++ \ gcc \ - ca-certificates + ca-certificates \ + jq msg_ok "Installed Dependencies" -NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs +NODE_VERSION="24" NODE_MODULE="pnpm@$(curl -fsSL https://raw.githubusercontent.com/Koenkk/zigbee2mqtt/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs + +fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt" msg_info "Setting up Zigbee2MQTT" -cd /opt -RELEASE=$(curl -fsSL https://api.github.com/repos/Koenkk/zigbee2mqtt/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -curl -fsSL "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip" -o "${RELEASE}.zip" -$STD unzip ${RELEASE}.zip -mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt cd /opt/zigbee2mqtt/data mv configuration.example.yaml configuration.yaml cd /opt/zigbee2mqtt @@ -60,7 +58,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -rf /opt/${RELEASE}.zip $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 21f7276c4f89c24419bde22679047b5580c30e13 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, 2 Jul 2025 14:52:06 +0100 Subject: [PATCH 003/229] Update CHANGELOG.md (#5644) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9adf87904..fe24acb9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,12 @@ All LXC instances created using this repository come pre-installed with Midnight ## 2025-07-02 +### 🚀 Updated Scripts + + - #### 🔧 Refactor + + - Refactor & Bump to Node24: Zigbee2MQTT [@MickLesk](https://github.com/MickLesk) ([#5638](https://github.com/community-scripts/ProxmoxVE/pull/5638)) + ## 2025-07-01 ### 🆕 New Scripts From 710c1fd58c69742d2b8d2b8569505ce647eb5dce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Wed, 2 Jul 2025 17:11:17 +0200 Subject: [PATCH 004/229] Update changedetection-install.sh (#5640) --- install/changedetection-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/changedetection-install.sh b/install/changedetection-install.sh index 243775115..8244da692 100644 --- a/install/changedetection-install.sh +++ b/install/changedetection-install.sh @@ -116,7 +116,7 @@ Wants=browserless.service Type=simple WorkingDirectory=/opt/changedetection Environment=WEBDRIVER_URL=http://127.0.0.1:4444/wd/hub -Environment=PLAYWRIGHT_DRIVER_URL=ws://localhost:3000/chrome?launch={"defaultViewport":{"height":720,"width":1280},"headless":false,"stealth":true}&blockAds=true +Environment=PLAYWRIGHT_DRIVER_URL=ws://localhost:3000/chrome?launch=eyJkZWZhdWx0Vmlld3BvcnQiOnsiaGVpZ2h0Ijo3MjAsIndpZHRoIjoxMjgwfSwiaGVhZGxlc3MiOmZhbHNlLCJzdGVhbHRoIjp0cnVlfQ==&blockAds=true ExecStart=changedetection.io -d /opt/changedetection -p 5000 [Install] WantedBy=multi-user.target From 16c48fa41a203b12806c9147409adf338455b6be 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, 2 Jul 2025 16:11:45 +0100 Subject: [PATCH 005/229] Update CHANGELOG.md (#5645) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe24acb9e..adc86d2f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,10 @@ All LXC instances created using this repository come pre-installed with Midnight ### 🚀 Updated Scripts + - #### 🐞 Bug Fixes + + - Changedetection: Base64 encode the launch options [@tremor021](https://github.com/tremor021) ([#5640](https://github.com/community-scripts/ProxmoxVE/pull/5640)) + - #### 🔧 Refactor - Refactor & Bump to Node24: Zigbee2MQTT [@MickLesk](https://github.com/MickLesk) ([#5638](https://github.com/community-scripts/ProxmoxVE/pull/5638)) From ef571559d62f35d9395ad6ebe42bca57aa3192a2 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 2 Jul 2025 17:11:59 +0200 Subject: [PATCH 006/229] Remove: Readarr (#5636) --- frontend/public/json/readarr.json | 35 ------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 frontend/public/json/readarr.json diff --git a/frontend/public/json/readarr.json b/frontend/public/json/readarr.json deleted file mode 100644 index f1745a5c2..000000000 --- a/frontend/public/json/readarr.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "Readarr", - "slug": "readarr", - "categories": [ - 14 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": false, - "privileged": false, - "interface_port": 8787, - "documentation": null, - "website": "https://readarr.com/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/readarr.webp", - "config_path": "", - "description": "Readarr is an eBook and audiobook management tool designed for Usenet and BitTorrent users. It allows users to manage and organize their eBook and audiobook collection with ease. Readarr integrates with popular Usenet and BitTorrent clients, such as Sonarr and Lidarr, to automate the downloading and organizing of eBook and audiobook files. The software provides a web-based interface for managing and organizing eBooks and audiobooks, making it easy to search and find titles, authors, and genres. Readarr also supports metadata management, including cover art and information, making it easy for users to keep their eBook and audiobook collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing eBook and audiobook collections, making it a valuable tool for book and audiobook enthusiasts who want to keep their collection organized and up-to-date. With Readarr, users can enjoy their eBook and audiobook collection from anywhere, making it a powerful tool for managing and sharing book and audiobook files.", - "install_methods": [ - { - "type": "default", - "script": "ct/readarr.sh", - "resources": { - "cpu": 2, - "ram": 1024, - "hdd": 4, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] -} From c8682d5f81d4c60445a4dee1205f78988f285b1d 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, 2 Jul 2025 16:12:28 +0100 Subject: [PATCH 007/229] Update CHANGELOG.md (#5646) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index adc86d2f9..73adb4522 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,12 @@ All LXC instances created using this repository come pre-installed with Midnight - Refactor & Bump to Node24: Zigbee2MQTT [@MickLesk](https://github.com/MickLesk) ([#5638](https://github.com/community-scripts/ProxmoxVE/pull/5638)) +### 🌐 Website + + - #### 💥 Breaking Changes + + - Remove: Readarr [@MickLesk](https://github.com/MickLesk) ([#5636](https://github.com/community-scripts/ProxmoxVE/pull/5636)) + ## 2025-07-01 ### 🆕 New Scripts From 8fee28b690311972e35c73039cc04db105f3245f Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 2 Jul 2025 17:12:42 +0200 Subject: [PATCH 008/229] Remove: Pingvin-Share (#5635) --- frontend/public/json/pingvin.json | 40 ------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 frontend/public/json/pingvin.json diff --git a/frontend/public/json/pingvin.json b/frontend/public/json/pingvin.json deleted file mode 100644 index 0e9515f5c..000000000 --- a/frontend/public/json/pingvin.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "Pingvin Share", - "slug": "pingvin", - "categories": [ - 11 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 3000, - "documentation": "https://stonith404.github.io/pingvin-share/introduction", - "website": "https://github.com/stonith404/pingvin-share", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/pingvin-share.webp", - "config_path": "/opt/pingvin-share/config.yaml", - "description": "Pingvin Share is self-hosted file sharing platform and an alternative for WeTransfer.", - "install_methods": [ - { - "type": "default", - "script": "ct/pingvin.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 8, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "Run `DATA_DIRECTORY=path-to-your-data-directory pm2 restart all --update-env` to update path to your data directory or to update environment variables.", - "type": "info" - } - ] -} From 736802af76e32e630f754179a858c7c84fd136f9 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, 2 Jul 2025 16:13:47 +0100 Subject: [PATCH 009/229] Update CHANGELOG.md (#5647) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73adb4522..e0aded7e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 💥 Breaking Changes + - Remove: Pingvin-Share [@MickLesk](https://github.com/MickLesk) ([#5635](https://github.com/community-scripts/ProxmoxVE/pull/5635)) - Remove: Readarr [@MickLesk](https://github.com/MickLesk) ([#5636](https://github.com/community-scripts/ProxmoxVE/pull/5636)) ## 2025-07-01 From 8ef7efaf7900dba29cd580a0e0c5b5cac7187943 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, 2 Jul 2025 16:14:20 +0100 Subject: [PATCH 010/229] Update CHANGELOG.md (#5648) Co-authored-by: github-actions[bot] From 4784d76d490596120b696d449507547984b23e31 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, 3 Jul 2025 02:18:08 +0200 Subject: [PATCH 011/229] Update versions.json (#5654) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 124 ++++++++++++++--------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index bd56320b8..78d2ec3f2 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,64 @@ [ + { + "name": "emqx/emqx", + "version": "v5.8.7", + "date": "2025-07-02T21:54:54Z" + }, + { + "name": "hargata/lubelog", + "version": "v1.4.8", + "date": "2025-07-02T21:15:13Z" + }, + { + "name": "Koenkk/zigbee2mqtt", + "version": "2.5.1", + "date": "2025-07-02T19:38:06Z" + }, + { + "name": "redis/redis", + "version": "8.2-rc1-int", + "date": "2025-07-02T19:27:08Z" + }, + { + "name": "ollama/ollama", + "version": "v0.9.5", + "date": "2025-07-02T18:39:28Z" + }, + { + "name": "firefly-iii/firefly-iii", + "version": "v6.2.20", + "date": "2025-07-02T04:03:37Z" + }, + { + "name": "home-assistant/core", + "version": "2025.7.0", + "date": "2025-07-02T16:23:42Z" + }, + { + "name": "cross-seed/cross-seed", + "version": "v6.12.7", + "date": "2025-06-18T03:44:24Z" + }, + { + "name": "fuma-nama/fumadocs", + "version": "fumadocs-core@15.6.1", + "date": "2025-07-02T15:29:41Z" + }, + { + "name": "nzbgetcom/nzbget", + "version": "v25.1", + "date": "2025-06-27T09:14:14Z" + }, + { + "name": "Graylog2/graylog2-server", + "version": "6.2.5", + "date": "2025-07-02T13:06:30Z" + }, + { + "name": "keycloak/keycloak", + "version": "26.2.5", + "date": "2025-05-28T06:49:43Z" + }, { "name": "wazuh/wazuh", "version": "coverity-w27-4.13.0", @@ -9,41 +69,21 @@ "version": "10.0.18", "date": "2025-02-12T11:07:02Z" }, - { - "name": "emqx/emqx", - "version": "e5.9.1", - "date": "2025-07-02T08:11:50Z" - }, { "name": "apache/tomcat", "version": "9.0.107", "date": "2025-07-02T07:12:09Z" }, - { - "name": "nzbgetcom/nzbget", - "version": "v25.1", - "date": "2025-06-27T09:14:14Z" - }, { "name": "qbittorrent/qBittorrent", "version": "release-5.1.2", "date": "2025-07-02T06:13:16Z" }, - { - "name": "home-assistant/core", - "version": "2025.6.3", - "date": "2025-06-24T13:00:12Z" - }, { "name": "Jackett/Jackett", "version": "v0.22.2107", "date": "2025-07-02T05:53:02Z" }, - { - "name": "firefly-iii/firefly-iii", - "version": "v6.2.20", - "date": "2025-07-02T04:03:37Z" - }, { "name": "diced/zipline", "version": "v4.2.0", @@ -79,16 +119,6 @@ "version": "v5.19.0", "date": "2025-07-01T19:59:32Z" }, - { - "name": "Koenkk/zigbee2mqtt", - "version": "2.5.0", - "date": "2025-07-01T18:28:01Z" - }, - { - "name": "keycloak/keycloak", - "version": "26.3.0", - "date": "2025-07-01T13:18:12Z" - }, { "name": "hivemq/hivemq-community-edition", "version": "2025.4", @@ -159,11 +189,6 @@ "version": "v0.9.81", "date": "2025-06-30T16:40:33Z" }, - { - "name": "ollama/ollama", - "version": "v0.9.4-rc6", - "date": "2025-06-30T15:59:03Z" - }, { "name": "prometheus/prometheus", "version": "v2.53.5", @@ -179,11 +204,6 @@ "version": "v7.4.4", "date": "2025-06-30T13:04:22Z" }, - { - "name": "Graylog2/graylog2-server", - "version": "6.3.0", - "date": "2025-06-30T11:26:45Z" - }, { "name": "grokability/snipe-it", "version": "v8.1.17", @@ -199,11 +219,6 @@ "version": "1.7.8", "date": "2025-06-30T09:00:54Z" }, - { - "name": "fuma-nama/fumadocs", - "version": "fumadocs-mdx@11.6.10", - "date": "2025-06-30T07:07:36Z" - }, { "name": "mattermost/mattermost", "version": "preview-v0.1", @@ -401,8 +416,8 @@ }, { "name": "runtipi/runtipi", - "version": "v4.2.1", - "date": "2025-06-03T20:04:28Z" + "version": "nightly", + "date": "2025-06-23T19:10:33Z" }, { "name": "VictoriaMetrics/VictoriaMetrics", @@ -479,11 +494,6 @@ "version": "2025.05.1", "date": "2025-06-19T11:28:36Z" }, - { - "name": "redis/redis", - "version": "8.2-m01-int2", - "date": "2025-06-12T08:52:10Z" - }, { "name": "prometheus-pve/prometheus-pve-exporter", "version": "v3.5.5", @@ -534,11 +544,6 @@ "version": "2.0.0-pre3", "date": "2025-06-18T08:01:24Z" }, - { - "name": "cross-seed/cross-seed", - "version": "v6.12.7", - "date": "2025-06-18T03:44:24Z" - }, { "name": "grafana/grafana", "version": "v11.5.6", @@ -949,11 +954,6 @@ "version": "6.8.1", "date": "2025-04-30T16:44:16Z" }, - { - "name": "hargata/lubelog", - "version": "v1.4.7", - "date": "2025-04-29T15:00:18Z" - }, { "name": "henrygd/beszel", "version": "v0.11.1", From 28d3297d6666cc1d2eac6430a7ae455094391b54 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, 3 Jul 2025 01:18:47 +0100 Subject: [PATCH 012/229] Update CHANGELOG.md (#5655) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e0aded7e7..419cceae0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2025-07-03 + ## 2025-07-02 ### 🚀 Updated Scripts From 2a52baf57e51189621e25cd185f9634c735bee3b 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, 3 Jul 2025 11:12:15 +0200 Subject: [PATCH 013/229] Update qbittorrent.sh (#5661) --- ct/qbittorrent.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/qbittorrent.sh b/ct/qbittorrent.sh index 37338c621..833e1eda7 100644 --- a/ct/qbittorrent.sh +++ b/ct/qbittorrent.sh @@ -31,7 +31,7 @@ function update_script() { touch /opt/${APP}_version.txt mkdir -p $HOME/.config/qBittorrent/ mkdir -p /opt/qbittorrent/ - mv /.config/qBittorrent $HOME/.config/ + [ -d "/.config/qBittorrent" ] && mv /.config/qBittorrent "$HOME/.config/" $STD apt-get remove --purge -y qbittorrent-nox sed -i 's@ExecStart=/usr/bin/qbittorrent-nox@ExecStart=/opt/qbittorrent/qbittorrent-nox@g' /etc/systemd/system/qbittorrent-nox.service systemctl daemon-reload @@ -67,4 +67,4 @@ 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}:8090${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}" From e16aac7a8327463aa96d5d3b8b678acb42d0c86b 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, 3 Jul 2025 12:53:30 +0200 Subject: [PATCH 014/229] Fix typo (#5662) --- ct/zipline.sh | 6 +++--- install/zipline-install.sh | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ct/zipline.sh b/ct/zipline.sh index fbcec6f18..113736b83 100644 --- a/ct/zipline.sh +++ b/ct/zipline.sh @@ -40,9 +40,9 @@ function update_script() { msg_info "Updating ${APP} to ${RELEASE}" cp /opt/zipline/.env /opt/ - mkdir -p /opt/zipline-upload - if [ -d /opt/zipline/upload ] && [ "$(ls -A /opt/zipline/upload)" ]; then - cp -R /opt/zipline/upload/* /opt/zipline-upload/ + mkdir -p /opt/zipline-uploads + if [ -d /opt/zipline/uploads ] && [ "$(ls -A /opt/zipline/uploads)" ]; then + cp -R /opt/zipline/uploads/* /opt/zipline-uploads/ fi curl -fsSL "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip") $STD unzip v"${RELEASE}".zip diff --git a/install/zipline-install.sh b/install/zipline-install.sh index c453d6712..bd414f067 100644 --- a/install/zipline-install.sh +++ b/install/zipline-install.sh @@ -50,9 +50,9 @@ CORE_HOSTNAME=0.0.0.0 CORE_PORT=3000 CORE_RETURN_HTTPS=false DATASOURCE_TYPE=local -DATASOURCE_LOCAL_DIRECTORY=/opt/zipline-upload +DATASOURCE_LOCAL_DIRECTORY=/opt/zipline-uploads EOF -mkdir -p /opt/zipline-upload +mkdir -p /opt/zipline-uploads $STD pnpm install $STD pnpm build echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" From 31cda26096d0a36137d02d84b455fdf1953ef9d9 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, 3 Jul 2025 11:54:09 +0100 Subject: [PATCH 015/229] Update CHANGELOG.md (#5663) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 419cceae0..84678e28d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,12 @@ All LXC instances created using this repository come pre-installed with Midnight ## 2025-07-03 +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Zipline: Fix typo in uploads directory path [@tremor021](https://github.com/tremor021) ([#5662](https://github.com/community-scripts/ProxmoxVE/pull/5662)) + ## 2025-07-02 ### 🚀 Updated Scripts From 38e8b708730942ce896b075b1add3d2454e75ffc Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 3 Jul 2025 12:58:26 +0200 Subject: [PATCH 016/229] Bump Icons to selfhst repo | switch svg to webp (#5659) --- frontend/public/json/add-iptag.json | 2 +- frontend/public/json/babybuddy.json | 2 +- frontend/public/json/convertx.json | 2 +- frontend/public/json/huntarr.json | 2 +- frontend/public/json/itsm-ng.json | 2 +- frontend/public/json/librespeed-rust.json | 2 +- frontend/public/json/lyrionmusicserver.json | 2 +- frontend/public/json/oauth2-proxy.json | 2 +- frontend/public/json/pulse.json | 2 +- frontend/public/json/rclone.json | 2 +- frontend/public/json/streamlink-webui.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/frontend/public/json/add-iptag.json b/frontend/public/json/add-iptag.json index 7fd9fd35a..e4cb78a31 100644 --- a/frontend/public/json/add-iptag.json +++ b/frontend/public/json/add-iptag.json @@ -11,7 +11,7 @@ "interface_port": null, "documentation": null, "website": null, - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/proxmox.svg", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp", "config_path": "/opt/iptag/iptag.conf", "description": "This script automatically adds IP address as tags to LXC containers or VM's using a systemd service. The service also updates the tags if a LXC/VM IP address is changed.", "install_methods": [ diff --git a/frontend/public/json/babybuddy.json b/frontend/public/json/babybuddy.json index 9d35859d0..7294decf0 100644 --- a/frontend/public/json/babybuddy.json +++ b/frontend/public/json/babybuddy.json @@ -11,7 +11,7 @@ "interface_port": 80, "documentation": "https://docs.baby-buddy.net/", "website": "https://github.com/babybuddy/babybuddy", - "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/baby-buddy.svg", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/baby-buddy.webp", "config_path": "/opt/babybuddy/babybuddy/settings/production.py", "description": "Baby Buddy is an open-source web application designed to assist caregivers in tracking various aspects of a baby's daily routine, including sleep, feedings, diaper changes, tummy time, and more. By recording this data, caregivers can better understand and anticipate their baby's needs, reducing guesswork in daily care. The application offers a user-friendly dashboard for data entry and visualization, supports multiple users, and provides features like timers and reminders. Additionally, Baby Buddy can be integrated with platforms like Home Assistant and Grafana for enhanced functionality.", "install_methods": [ diff --git a/frontend/public/json/convertx.json b/frontend/public/json/convertx.json index 414084aa2..ae2ee826f 100644 --- a/frontend/public/json/convertx.json +++ b/frontend/public/json/convertx.json @@ -12,7 +12,7 @@ "interface_port": 3000, "documentation": "https://github.com/C4illin/ConvertX", "website": "https://github.com/C4illin/ConvertX", - "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/convertx.svg", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/convertx.webp", "description": "ConvertX is a self-hosted online file converter supporting over 1000 formats, including images, audio, video, documents, and more, powered by FFmpeg, GraphicsMagick, and other libraries.", "install_methods": [ { diff --git a/frontend/public/json/huntarr.json b/frontend/public/json/huntarr.json index ea450a815..41a421f77 100644 --- a/frontend/public/json/huntarr.json +++ b/frontend/public/json/huntarr.json @@ -12,7 +12,7 @@ "documentation": "https://github.com/plexguide/Huntarr.io/wiki", "config_path": "/opt/huntarr", "website": "https://github.com/plexguide/Huntarr.io", - "logo": "https://raw.githubusercontent.com/plexguide/Huntarr.io/refs/heads/main/frontend/static/logo/Huntarr.svg", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/huntarr.webp", "description": "Huntarr is a tool that automates the search for missing or low-quality media content in your collection. It works seamlessly with applications like Sonarr, Radarr, Lidarr, Readarr, and Whisparr, enhancing their functionality with continuous background scans to identify and update missed or outdated content. Through a user-friendly web interface accessible on port 9705, Huntarr provides real-time statistics, log views, and extensive configuration options. The software is especially useful for users who want to keep their media library up to date by automatically searching for missing episodes or higher-quality versions. Huntarr is well-suited for self-hosted environments and can easily run in LXC containers or Docker setups.", "install_methods": [ { diff --git a/frontend/public/json/itsm-ng.json b/frontend/public/json/itsm-ng.json index 6ff7d184c..89a7c62d7 100644 --- a/frontend/public/json/itsm-ng.json +++ b/frontend/public/json/itsm-ng.json @@ -11,7 +11,7 @@ "interface_port": 80, "documentation": "https://wiki.itsm-ng.org/en/home", "website": "https://itsm-ng.com", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/itsm-ng.svg", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/itsm-ng.webp", "config_path": "/etc/itsm-ng", "description": "ITSM-NG is a powerful, open-source IT Service Management (ITSM) solution designed for managing IT assets, software, licenses, and support processes in accordance with ITIL best practices. It offers integrated features for asset inventory, incident tracking, problem management, change requests, and service desk workflows.", "install_methods": [ diff --git a/frontend/public/json/librespeed-rust.json b/frontend/public/json/librespeed-rust.json index 13c2eaf5e..319cb3446 100644 --- a/frontend/public/json/librespeed-rust.json +++ b/frontend/public/json/librespeed-rust.json @@ -12,7 +12,7 @@ "interface_port": 8080, "documentation": "https://github.com/librespeed/speedtest-rust", "website": "https://github.com/librespeed/speedtest-rust", - "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/librespeed.svg", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/librespeed.webp", "description": "Librespeed is a no flash, no java, no websocket speedtest server. This community script deploys the rust version for simplicity and low resource usage.", "install_methods": [ { diff --git a/frontend/public/json/lyrionmusicserver.json b/frontend/public/json/lyrionmusicserver.json index 88dc0a0c9..9119a2133 100644 --- a/frontend/public/json/lyrionmusicserver.json +++ b/frontend/public/json/lyrionmusicserver.json @@ -12,7 +12,7 @@ "interface_port": 9000, "documentation": "https://lyrion.org/", "website": "https://lyrion.org/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/lyrion-media-server.webp", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/lyrion-music-server.webp", "description": "Lyrion Music Server is an open-source server software to stream local music collections, internet radio, and music services to Squeezebox and compatible audio players.", "install_methods": [ { diff --git a/frontend/public/json/oauth2-proxy.json b/frontend/public/json/oauth2-proxy.json index 4981b6889..f12399e02 100644 --- a/frontend/public/json/oauth2-proxy.json +++ b/frontend/public/json/oauth2-proxy.json @@ -12,7 +12,7 @@ "interface_port": null, "documentation": "https://oauth2-proxy.github.io/oauth2-proxy/configuration/overview", "website": "https://oauth2-proxy.github.io/oauth2-proxy/", - "logo": "https://raw.githubusercontent.com/oauth2-proxy/oauth2-proxy/f82e90426a1881d36bf995f25de9b7b1db4c2564/docs/static/img/logos/OAuth2_Proxy_icon.svg", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/oauth2-proxy.webp", "config_path": "/opt/oauth2-proxy/config.toml", "description": "A reverse proxy that provides authentication with Google, Azure, OpenID Connect and many more identity providers.", "install_methods": [ diff --git a/frontend/public/json/pulse.json b/frontend/public/json/pulse.json index e3cae4a9d..db2da7d02 100644 --- a/frontend/public/json/pulse.json +++ b/frontend/public/json/pulse.json @@ -11,7 +11,7 @@ "interface_port": 7655, "documentation": null, "website": "https://github.com/rcourtman/Pulse", - "logo": "https://raw.githubusercontent.com/rcourtman/Pulse/main/src/public/logos/pulse-logo-256x256.png", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/pulse.webp", "config_path": "/opt/pulse/.env", "description": "A lightweight monitoring application for Proxmox VE that displays real-time status for VMs and containers via a simple web interface.", "install_methods": [ diff --git a/frontend/public/json/rclone.json b/frontend/public/json/rclone.json index 41dd2a858..08583f805 100644 --- a/frontend/public/json/rclone.json +++ b/frontend/public/json/rclone.json @@ -11,7 +11,7 @@ "interface_port": 3000, "documentation": "https://rclone.org/docs/", "website": "https://rclone.org/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/rclone.svg", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/rclone.webp", "config_path": "~/.config/rclone/rclone.conf", "description": "Rclone is a command-line program to manage files on cloud storage. It is a feature-rich alternative to cloud vendors' web storage interfaces", "install_methods": [ diff --git a/frontend/public/json/streamlink-webui.json b/frontend/public/json/streamlink-webui.json index db335b475..2aadd95de 100644 --- a/frontend/public/json/streamlink-webui.json +++ b/frontend/public/json/streamlink-webui.json @@ -12,7 +12,7 @@ "documentation": "https://github.com/CrazyWolf13/streamlink-webui", "config_path": "/opt/streamlink-webui.env", "website": "https://github.com/CrazyWolf13/streamlink-webui", - "logo": "https://streamlink.github.io/_static/icon.svg", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/streamlink.webp", "description": "a simple web-ui to the well-known streamlink cli application, which allows you to save twitch streams to your local disk.", "install_methods": [ { From 009178a3dccb187b5bf0a181639cba6882150969 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, 3 Jul 2025 11:59:04 +0100 Subject: [PATCH 017/229] Update CHANGELOG.md (#5664) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84678e28d..a42f12ddf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,12 @@ All LXC instances created using this repository come pre-installed with Midnight - Zipline: Fix typo in uploads directory path [@tremor021](https://github.com/tremor021) ([#5662](https://github.com/community-scripts/ProxmoxVE/pull/5662)) +### 🌐 Website + + - #### 📝 Script Information + + - Bump Icons to selfhst repo | switch svg to webp [@MickLesk](https://github.com/MickLesk) ([#5659](https://github.com/community-scripts/ProxmoxVE/pull/5659)) + ## 2025-07-02 ### 🚀 Updated Scripts From a3ea46701c73ce592cd2cb267b5fba3495ee10d7 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, 3 Jul 2025 14:07:50 +0200 Subject: [PATCH 018/229] Update versions.json (#5667) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 104 ++++++++++++++--------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 78d2ec3f2..d41ca095f 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,49 @@ [ + { + "name": "Dolibarr/dolibarr", + "version": "18.0.7", + "date": "2025-07-03T08:57:21Z" + }, + { + "name": "fuma-nama/fumadocs", + "version": "fumadocs-openapi@9.0.17", + "date": "2025-07-03T06:57:48Z" + }, + { + "name": "mattermost/mattermost", + "version": "preview-v0.1", + "date": "2025-06-27T14:35:47Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.2111", + "date": "2025-07-03T05:50:31Z" + }, + { + "name": "esphome/esphome", + "version": "2025.6.3", + "date": "2025-07-03T01:07:26Z" + }, + { + "name": "actualbudget/actual", + "version": "v25.7.1", + "date": "2025-07-03T01:03:18Z" + }, + { + "name": "mongodb/mongo", + "version": "r6.0.25-rc0", + "date": "2025-07-03T00:44:52Z" + }, + { + "name": "documenso/documenso", + "version": "v1.12.2-rc.0", + "date": "2025-07-03T00:31:22Z" + }, + { + "name": "cross-seed/cross-seed", + "version": "v6.12.7", + "date": "2025-06-18T03:44:24Z" + }, { "name": "emqx/emqx", "version": "v5.8.7", @@ -19,6 +64,11 @@ "version": "8.2-rc1-int", "date": "2025-07-02T19:27:08Z" }, + { + "name": "keycloak/keycloak", + "version": "26.3.0", + "date": "2025-07-02T12:26:44Z" + }, { "name": "ollama/ollama", "version": "v0.9.5", @@ -34,16 +84,6 @@ "version": "2025.7.0", "date": "2025-07-02T16:23:42Z" }, - { - "name": "cross-seed/cross-seed", - "version": "v6.12.7", - "date": "2025-06-18T03:44:24Z" - }, - { - "name": "fuma-nama/fumadocs", - "version": "fumadocs-core@15.6.1", - "date": "2025-07-02T15:29:41Z" - }, { "name": "nzbgetcom/nzbget", "version": "v25.1", @@ -54,11 +94,6 @@ "version": "6.2.5", "date": "2025-07-02T13:06:30Z" }, - { - "name": "keycloak/keycloak", - "version": "26.2.5", - "date": "2025-05-28T06:49:43Z" - }, { "name": "wazuh/wazuh", "version": "coverity-w27-4.13.0", @@ -79,11 +114,6 @@ "version": "release-5.1.2", "date": "2025-07-02T06:13:16Z" }, - { - "name": "Jackett/Jackett", - "version": "v0.22.2107", - "date": "2025-07-02T05:53:02Z" - }, { "name": "diced/zipline", "version": "v4.2.0", @@ -99,21 +129,11 @@ "version": "2.1.1", "date": "2025-06-14T17:45:06Z" }, - { - "name": "mongodb/mongo", - "version": "r8.1.2", - "date": "2025-07-01T22:39:32Z" - }, { "name": "Threadfin/Threadfin", "version": "1.2.35", "date": "2025-07-01T21:37:20Z" }, - { - "name": "actualbudget/actual", - "version": "v25.7.0", - "date": "2025-07-01T21:02:27Z" - }, { "name": "TwiN/gatus", "version": "v5.19.0", @@ -209,21 +229,11 @@ "version": "v8.1.17", "date": "2025-06-30T11:26:27Z" }, - { - "name": "documenso/documenso", - "version": "v1.12.0-rc.8", - "date": "2025-06-30T09:47:37Z" - }, { "name": "PrivateBin/PrivateBin", "version": "1.7.8", "date": "2025-06-30T09:00:54Z" }, - { - "name": "mattermost/mattermost", - "version": "preview-v0.1", - "date": "2025-06-27T14:35:47Z" - }, { "name": "typesense/typesense", "version": "v29.0", @@ -254,11 +264,6 @@ "version": "3.1.0", "date": "2025-06-28T09:02:38Z" }, - { - "name": "esphome/esphome", - "version": "2025.6.2", - "date": "2025-06-28T03:47:16Z" - }, { "name": "plexguide/Huntarr.io", "version": "8.1.11", @@ -349,11 +354,6 @@ "version": "4.1.0-beta.2", "date": "2025-06-26T14:23:26Z" }, - { - "name": "Dolibarr/dolibarr", - "version": "18.0.7", - "date": "2025-06-26T09:16:33Z" - }, { "name": "gristlabs/grist-core", "version": "v1.6.1", @@ -416,8 +416,8 @@ }, { "name": "runtipi/runtipi", - "version": "nightly", - "date": "2025-06-23T19:10:33Z" + "version": "v4.2.1", + "date": "2025-06-03T20:04:28Z" }, { "name": "VictoriaMetrics/VictoriaMetrics", From f401c7cc4c7502c4e5dd8c8ea8152959eab7531c Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 3 Jul 2025 15:16:42 +0200 Subject: [PATCH 019/229] Improve asset matching in fetch_and_deploy_gh_release for prebuild and singlefile modes --- misc/tools.func | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index 0f7c3f145..2da38b4d8 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -819,6 +819,7 @@ function fetch_and_deploy_gh_release() { msg_info "Fetching GitHub release: $app ($version)" + ### Tarball Mode ### if [[ "$mode" == "tarball" || "$mode" == "source" ]]; then url=$(echo "$json" | jq -r '.tarball_url // empty') [[ -z "$url" ]] && url="https://github.com/$repo/archive/refs/tags/v$version.tar.gz" @@ -839,6 +840,7 @@ function fetch_and_deploy_gh_release() { cp -r "$unpack_dir"/* "$target/" shopt -u dotglob nullglob + ### Binary Mode ### elif [[ "$mode" == "binary" ]]; then local arch arch=$(dpkg --print-architecture 2>/dev/null || uname -m) @@ -848,12 +850,14 @@ function fetch_and_deploy_gh_release() { local assets url_match="" assets=$(echo "$json" | jq -r '.assets[].browser_download_url') + # If explicit filename pattern is provided (param $6), match that first if [[ -n "$6" ]]; then for u in $assets; do [[ "$u" =~ $6 || "$u" == *"$6" ]] && url_match="$u" && break done fi + # If no match via explicit pattern, fall back to architecture heuristic if [[ -z "$url_match" ]]; then for u in $assets; do if [[ "$u" =~ ($arch|amd64|x86_64|aarch64|arm64).*\.deb$ ]]; then @@ -863,6 +867,7 @@ function fetch_and_deploy_gh_release() { done fi + # Fallback: any .deb file if [[ -z "$url_match" ]]; then for u in $assets; do [[ "$u" =~ \.deb$ ]] && url_match="$u" && break @@ -891,8 +896,10 @@ function fetch_and_deploy_gh_release() { } } + ### Prebuild Mode ### elif [[ "$mode" == "prebuild" ]]; then - local pattern="$6" + local pattern="${6%\"}" + pattern="${pattern#\"}" [[ -z "$pattern" ]] && { msg_error "Mode 'prebuild' requires 6th parameter (asset filename pattern)" rm -rf "$tmpdir" @@ -901,7 +908,14 @@ function fetch_and_deploy_gh_release() { local asset_url="" for u in $(echo "$json" | jq -r '.assets[].browser_download_url'); do - [[ "$u" =~ $pattern || "$u" == *"$pattern" ]] && asset_url="$u" && break + filename_candidate="${u##*/}" + case "$filename_candidate" in + $pattern) + asset_url="$u" + break + ;; + esac + done [[ -z "$asset_url" ]] && { @@ -923,16 +937,18 @@ function fetch_and_deploy_gh_release() { $STD apt-get install -y unzip fi $STD unzip "$tmpdir/$filename" -d "$target" - elif [[ "$filename" == *.tar.gz ]]; then - tar -xzf "$tmpdir/$filename" -C "$target" + elif [[ "$filename" == *.tar.* ]]; then + tar --strip-components=1 -xf "$tmpdir/$filename" -C "$target" else msg_error "Unsupported archive format: $filename" rm -rf "$tmpdir" return 1 fi + ### Singlefile Mode ### elif [[ "$mode" == "singlefile" ]]; then - local pattern="$6" + local pattern="${6%\"}" + pattern="${pattern#\"}" [[ -z "$pattern" ]] && { msg_error "Mode 'singlefile' requires 6th parameter (asset filename pattern)" rm -rf "$tmpdir" @@ -941,7 +957,13 @@ function fetch_and_deploy_gh_release() { local asset_url="" for u in $(echo "$json" | jq -r '.assets[].browser_download_url'); do - [[ "$u" =~ $pattern || "$u" == *"$pattern" ]] && asset_url="$u" && break + filename_candidate="${u##*/}" + case "$filename_candidate" in + $pattern) + asset_url="$u" + break + ;; + esac done [[ -z "$asset_url" ]] && { From cadeee4deb9611615513a370ce73aedfb4ae3155 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 3 Jul 2025 15:32:12 +0200 Subject: [PATCH 020/229] Improve asset matching in fetch_and_deploy_gh_release for prebuild and singlefile modes (#5669) * Improve asset matching in fetch_and_deploy_gh_release for prebuild and singlefile modes * tar globbing * Update tools.func From c293b058c0e581d6154333693f3f300cb8b4f2f5 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, 3 Jul 2025 14:32:42 +0100 Subject: [PATCH 021/229] Update CHANGELOG.md (#5670) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a42f12ddf..9fcca2939 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,10 @@ All LXC instances created using this repository come pre-installed with Midnight - Zipline: Fix typo in uploads directory path [@tremor021](https://github.com/tremor021) ([#5662](https://github.com/community-scripts/ProxmoxVE/pull/5662)) + - #### ✨ New Features + + - Improve asset matching in fetch_and_deploy_gh_release for prebuild and singlefile modes [@MickLesk](https://github.com/MickLesk) ([#5669](https://github.com/community-scripts/ProxmoxVE/pull/5669)) + ### 🌐 Website - #### 📝 Script Information From 5ac481803005da9916880054975e0e644b32cb73 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 3 Jul 2025 15:49:02 +0200 Subject: [PATCH 022/229] Refactor: Trilium (#5665) * Refactor: Trilium * change name & description of trilium * finalize * Change Logo to new selfhst * Update trilium.sh --------- Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- ct/trilium.sh | 95 +++++++++++++++---------------- frontend/public/json/trilium.json | 8 +-- install/trilium-install.sh | 12 +--- 3 files changed, 51 insertions(+), 64 deletions(-) diff --git a/ct/trilium.sh b/ct/trilium.sh index 76e66dc0b..ddf3cdca3 100644 --- a/ct/trilium.sh +++ b/ct/trilium.sh @@ -3,9 +3,9 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV # Copyright (c) 2021-2025 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://triliumnext.github.io/Docs/ +# Source: https://github.com/TriliumNext/Trilium -APP="Trilium" +APP="Trilium Notes" var_tags="${var_tags:-notes}" var_cpu="${var_cpu:-1}" var_ram="${var_ram:-512}" @@ -27,57 +27,52 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi - RELEASE=$(curl -fsSL https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ "v${RELEASE}" != "$(cat /opt/${APP}_version.txt 2>/dev/null)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then - - if [[ -d /opt/trilium/db ]]; then - DB_PATH="/opt/trilium/db" - DB_RESTORE_PATH="/opt/trilium/db" - elif [[ -d /opt/trilium/assets/db ]]; then - DB_PATH="/opt/trilium/assets/db" - DB_RESTORE_PATH="/opt/trilium/assets/db" + RELEASE=$(curl -fsSL https://api.github.com/repos/TriliumNext/Trilium/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ "${RELEASE}" != "$(cat ~/.Trilium 2>/dev/null)" ]] || [[ ! -f ~/.Trilium ]]; then + + if [[ -d /opt/trilium/db ]]; then + DB_PATH="/opt/trilium/db" + DB_RESTORE_PATH="/opt/trilium/db" + elif [[ -d /opt/trilium/assets/db ]]; then + DB_PATH="/opt/trilium/assets/db" + DB_RESTORE_PATH="/opt/trilium/assets/db" + else + msg_error "Database not found in either /opt/trilium/db or /opt/trilium/assets/db" + exit 1 + fi + + msg_info "Stopping ${APP}" + systemctl stop trilium + sleep 1 + msg_ok "Stopped ${APP}" + + msg_info "Backing up Database" + mkdir -p /opt/trilium_backup + cp -r "${DB_PATH}" /opt/trilium_backup/ + rm -rf /opt/trilium + msg_ok "Backed up Database" + + fetch_and_deploy_gh_release "Trilium" "TriliumNext/Trilium" "prebuild" "latest" "/opt/trilium" "TriliumNotes-Server-*linux-x64.tar.xz" + + msg_info "Restoring Database" + mkdir -p "$(dirname "${DB_RESTORE_PATH}")" + cp -r /opt/trilium_backup/$(basename "${DB_PATH}") "${DB_RESTORE_PATH}" + msg_ok "Restored Database" + + msg_info "Cleaning up" + rm -rf /opt/trilium_backup + msg_ok "Cleaned" + + msg_info "Starting ${APP}" + systemctl start trilium + sleep 1 + msg_ok "Started ${APP}" + msg_ok "Updated Successfully" else - msg_error "Database not found in either /opt/trilium/db or /opt/trilium/assets/db" - exit 1 + msg_ok "No update required. ${APP} is already at ${RELEASE}" fi - msg_info "Stopping ${APP}" - systemctl stop trilium - sleep 1 - msg_ok "Stopped ${APP}" - - msg_info "Updating to ${RELEASE}" - mkdir -p /opt/trilium_backup - cp -r "${DB_PATH}" /opt/trilium_backup/ - rm -rf /opt/trilium - cd /tmp - curl -fsSL "https://github.com/TriliumNext/trilium/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o "TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" - tar -xf "TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" - mv "TriliumNextNotes-Server-${RELEASE}-linux-x64" /opt/trilium - - # Restore database - mkdir -p "$(dirname "${DB_RESTORE_PATH}")" - cp -r /opt/trilium_backup/$(basename "${DB_PATH}") "${DB_RESTORE_PATH}" - - echo "v${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated to ${RELEASE}" - - msg_info "Cleaning up" - rm -rf "/tmp/TriliumNextNotes-Server-${RELEASE}-linux-x64.tar.xz" - rm -rf /opt/trilium_backup - msg_ok "Cleaned" - - msg_info "Starting ${APP}" - systemctl start trilium - sleep 1 - msg_ok "Started ${APP}" - msg_ok "Updated Successfully" -else - msg_ok "No update required. ${APP} is already at ${RELEASE}" -fi - -exit + exit } start diff --git a/frontend/public/json/trilium.json b/frontend/public/json/trilium.json index 44ca9e740..2b42f1ae3 100644 --- a/frontend/public/json/trilium.json +++ b/frontend/public/json/trilium.json @@ -1,5 +1,5 @@ { - "name": "TriliumNext", + "name": "Trilium Notes", "slug": "trilium", "categories": [ 12 @@ -9,11 +9,11 @@ "updateable": true, "privileged": false, "interface_port": 8080, - "documentation": "https://triliumnext.github.io/Docs/", + "documentation": "https://github.com/TriliumNext/trilium/wiki", "website": "https://github.com/TriliumNext/trilium", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/triliumnext.webp", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/trilium-notes.webp", "config_path": "/root/trilium-data/config.ini", - "description": "TriliumNext is an newer Fork of Trilium. TriliumNext is an open-source note-taking and personal knowledge management application. It allows users to organize and manage their notes, ideas, and information in a single place, using a hierarchical tree-like structure. Trilium offers a range of features, including rich text formatting, links, images, and attachments, making it easy to create and structure notes. The software is designed to be flexible and customizable, with a range of customization options and plugins available, including themes, export options, and more. Trilium is a self-hosted solution, and can be run on a local machine or a cloud-based server, providing users with full control over their notes and information.", + "description": "Trilium Notes is the latest and officially maintained version of the powerful, self-hosted note-taking and personal knowledge management application. It enables users to organize information in a hierarchical tree structure and supports rich text editing, internal linking, images, attachments, and powerful scripting capabilities. This version reflects the most current development efforts under the TriliumNext organization and replaces all prior forks or legacy variants. Trilium is ideal for building personal wikis, structured documentation, and long-term knowledge archives, giving users full local control and privacy.", "install_methods": [ { "type": "default", diff --git a/install/trilium-install.sh b/install/trilium-install.sh index 22e473cce..f5ddd0782 100644 --- a/install/trilium-install.sh +++ b/install/trilium-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2025 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://triliumnext.github.io/Docs/ +# Source: https://github.com/TriliumNext/Trilium source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color @@ -13,14 +13,7 @@ setting_up_container network_check update_os -msg_info "Setup TriliumNext" -cd /opt -RELEASE=$(curl -fsSL https://api.github.com/repos/TriliumNext/trilium/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/TriliumNext/trilium/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o "TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -tar -xf TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz -mv TriliumNextNotes-Server-$RELEASE-linux-x64 /opt/trilium -echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" -msg_ok "Setup TriliumNext" +fetch_and_deploy_gh_release "Trilium" "TriliumNext/Trilium" "prebuild" "latest" "/opt/trilium" "TriliumNotes-Server-*linux-x64.tar.xz" msg_info "Creating Service" cat </etc/systemd/system/trilium.service @@ -46,7 +39,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -rf /opt/TriliumNextNotes-Server-${RELEASE}-linux-x64.tar.xz $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From ee6f07b31a550d8fa55a839cff65615c97978b94 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, 3 Jul 2025 14:49:36 +0100 Subject: [PATCH 023/229] Update CHANGELOG.md (#5671) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fcca2939..37f2903cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,10 @@ All LXC instances created using this repository come pre-installed with Midnight - Improve asset matching in fetch_and_deploy_gh_release for prebuild and singlefile modes [@MickLesk](https://github.com/MickLesk) ([#5669](https://github.com/community-scripts/ProxmoxVE/pull/5669)) + - #### 🔧 Refactor + + - Refactor: Trilium [@MickLesk](https://github.com/MickLesk) ([#5665](https://github.com/community-scripts/ProxmoxVE/pull/5665)) + ### 🌐 Website - #### 📝 Script Information From 3533c896a373b41a16bb71989a4abfb8c71042f5 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, 3 Jul 2025 15:54:07 +0200 Subject: [PATCH 024/229] Update .app files (#5672) Co-authored-by: GitHub Actions --- ct/headers/trilium | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ct/headers/trilium b/ct/headers/trilium index 6f02b768e..5f79e7c56 100644 --- a/ct/headers/trilium +++ b/ct/headers/trilium @@ -1,6 +1,6 @@ - ______ _ ___ - /_ __/____(_) (_)_ ______ ___ - / / / ___/ / / / / / / __ `__ \ - / / / / / / / / /_/ / / / / / / -/_/ /_/ /_/_/_/\__,_/_/ /_/ /_/ - + ______ _ ___ _ __ __ + /_ __/____(_) (_)_ ______ ___ / | / /___ / /____ _____ + / / / ___/ / / / / / / __ `__ \ / |/ / __ \/ __/ _ \/ ___/ + / / / / / / / / /_/ / / / / / / / /| / /_/ / /_/ __(__ ) +/_/ /_/ /_/_/_/\__,_/_/ /_/ /_/ /_/ |_/\____/\__/\___/____/ + From 10127650faf212f56f431d0724c5fb66111aa634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Fri, 4 Jul 2025 00:05:24 +0200 Subject: [PATCH 025/229] Update evcc.json (#5676) --- frontend/public/json/evcc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/public/json/evcc.json b/frontend/public/json/evcc.json index 59025f070..e63288366 100644 --- a/frontend/public/json/evcc.json +++ b/frontend/public/json/evcc.json @@ -6,7 +6,7 @@ ], "date_created": "2024-10-15", "type": "ct", - "updateable": false, + "updateable": true, "privileged": false, "interface_port": 7070, "documentation": "https://evcc.io/#devices", From 1ac1aadbe3a3ad0a33f95bae6d9b40cbf27e3f7d 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, 4 Jul 2025 02:15:07 +0200 Subject: [PATCH 026/229] Update versions.json (#5680) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 96 +++++++++++++++--------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index d41ca095f..a556cb958 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,49 @@ [ + { + "name": "outline/outline", + "version": "v0.85.0", + "date": "2025-07-03T23:31:00Z" + }, + { + "name": "home-assistant/operating-system", + "version": "15.2", + "date": "2025-04-14T15:37:12Z" + }, + { + "name": "cloudflare/cloudflared", + "version": "2025.7.0", + "date": "2025-07-03T17:08:15Z" + }, + { + "name": "rabbitmq/rabbitmq-server", + "version": "v4.1.2", + "date": "2025-07-03T16:59:29Z" + }, + { + "name": "bunkerity/bunkerweb", + "version": "v1.6.1", + "date": "2025-03-15T17:29:17Z" + }, + { + "name": "Checkmk/checkmk", + "version": "v2.4.0p6", + "date": "2025-07-03T16:40:42Z" + }, + { + "name": "influxdata/influxdb", + "version": "v3.2.1", + "date": "2025-07-03T16:09:19Z" + }, + { + "name": "cockpit-project/cockpit", + "version": "310.5", + "date": "2025-07-03T14:05:25Z" + }, + { + "name": "n8n-io/n8n", + "version": "n8n@1.100.0", + "date": "2025-06-23T12:48:35Z" + }, { "name": "Dolibarr/dolibarr", "version": "18.0.7", @@ -169,11 +214,6 @@ "version": "v1.30.0", "date": "2025-07-01T11:29:11Z" }, - { - "name": "Checkmk/checkmk", - "version": "v2.2.0p44-rc1", - "date": "2025-07-01T11:10:25Z" - }, { "name": "rcourtman/Pulse", "version": "v99.99.99", @@ -214,11 +254,6 @@ "version": "v2.53.5", "date": "2025-06-30T11:01:12Z" }, - { - "name": "n8n-io/n8n", - "version": "n8n@1.100.0", - "date": "2025-06-23T12:48:35Z" - }, { "name": "jupyter/notebook", "version": "v7.4.4", @@ -305,20 +340,15 @@ "date": "2025-06-27T09:53:57Z" }, { - "name": "cockpit-project/cockpit", - "version": "341.1", - "date": "2025-06-27T08:50:16Z" + "name": "fallenbagel/jellyseerr", + "version": "preview-seerr", + "date": "2025-06-27T06:10:03Z" }, { "name": "MediaBrowser/Emby.Releases", "version": "4.9.1.2", "date": "2025-06-26T22:08:00Z" }, - { - "name": "home-assistant/operating-system", - "version": "15.2", - "date": "2025-04-14T15:37:12Z" - }, { "name": "netbox-community/netbox", "version": "v4.3.3", @@ -364,21 +394,11 @@ "version": "v4.101.2", "date": "2025-06-25T21:18:52Z" }, - { - "name": "influxdata/influxdb", - "version": "v3.2.0", - "date": "2025-06-25T17:31:48Z" - }, { "name": "wavelog/wavelog", "version": "2.0.5", "date": "2025-06-25T14:53:31Z" }, - { - "name": "bunkerity/bunkerweb", - "version": "testing", - "date": "2025-06-16T18:10:42Z" - }, { "name": "moghtech/komodo", "version": "v1.18.4", @@ -404,11 +424,6 @@ "version": "v2.18.0", "date": "2025-06-24T08:29:55Z" }, - { - "name": "fallenbagel/jellyseerr", - "version": "preview-fix-proxy-axios", - "date": "2025-06-24T08:50:22Z" - }, { "name": "minio/minio", "version": "RELEASE.2025-06-13T11-33-47Z", @@ -559,11 +574,6 @@ "version": "v25.05.1", "date": "2025-06-17T14:38:04Z" }, - { - "name": "cloudflare/cloudflared", - "version": "2025.6.1", - "date": "2025-06-17T12:45:39Z" - }, { "name": "crowdsecurity/crowdsec", "version": "v1.6.9", @@ -744,11 +754,6 @@ "version": "mariadb-11.8.2", "date": "2025-06-04T13:35:16Z" }, - { - "name": "rabbitmq/rabbitmq-server", - "version": "v4.1.1", - "date": "2025-06-04T19:10:05Z" - }, { "name": "intri-in/manage-my-damn-life-nextjs", "version": "v0.7.1", @@ -899,11 +904,6 @@ "version": "v2.18.1", "date": "2025-05-12T07:16:12Z" }, - { - "name": "outline/outline", - "version": "v0.84.0", - "date": "2025-05-11T15:50:48Z" - }, { "name": "owncast/owncast", "version": "v0.2.3", From 3371529cce244128ba3539df1d5f80f14cdb99a0 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, 4 Jul 2025 01:15:58 +0100 Subject: [PATCH 027/229] Update CHANGELOG.md (#5681) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37f2903cc..342963da2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2025-07-04 + ## 2025-07-03 ### 🚀 Updated Scripts From 729895e2ed3320987324558f16297877bccec337 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 4 Jul 2025 10:34:35 +0200 Subject: [PATCH 028/229] Update cloudflare-ddns-install.sh (#5682) --- install/cloudflare-ddns-install.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/install/cloudflare-ddns-install.sh b/install/cloudflare-ddns-install.sh index d3ee19d22..6f03a3352 100644 --- a/install/cloudflare-ddns-install.sh +++ b/install/cloudflare-ddns-install.sh @@ -15,16 +15,15 @@ update_os setup_go -msg_info "Configure Application" var_cf_api_token="default" -read -rp "Enter the Cloudflare API token: " var_cf_api_token +read -rp "${TAB3}Enter the Cloudflare API token: " var_cf_api_token var_cf_domains="default" -read -rp "Enter the domains separated with a comma (*.example.org,www.example.org) " var_cf_domains +read -rp "${TAB3}Enter the domains separated with a comma (*.example.org,www.example.org) " var_cf_domains var_cf_proxied="false" while true; do - read -rp "Proxied? (y/n): " answer + read -rp "${TAB3}Proxied? (y/n): " answer case "$answer" in [Yy]*) var_cf_proxied="true" @@ -39,7 +38,7 @@ while true; do done var_cf_ip6_provider="none" while true; do - read -rp "Enable IPv6 support? (y/n): " answer + read -rp "${TAB3}Enable IPv6 support? (y/n): " answer case "$answer" in [Yy]*) var_cf_ip6_provider="auto" From 438eddbde1dc9b30e689db9fe9ec55ba3402c1b1 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, 4 Jul 2025 09:35:11 +0100 Subject: [PATCH 029/229] Update CHANGELOG.md (#5686) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 342963da2..553015b97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,12 @@ All LXC instances created using this repository come pre-installed with Midnight ## 2025-07-04 +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Cloudflare-DDNS: fix unvisible read command at install [@MickLesk](https://github.com/MickLesk) ([#5682](https://github.com/community-scripts/ProxmoxVE/pull/5682)) + ## 2025-07-03 ### 🚀 Updated Scripts From 0e87c4fe34e3bffd4a66f7a1d8cf263124fcb773 Mon Sep 17 00:00:00 2001 From: Desert Gamer <44316028+DesertGamer@users.noreply.github.com> Date: Fri, 4 Jul 2025 11:38:05 +0300 Subject: [PATCH 030/229] Update Iptag (#5677) --- tools/pve/add-iptag.sh | 1484 ++++++++++++++++++++++++++-------------- 1 file changed, 988 insertions(+), 496 deletions(-) diff --git a/tools/pve/add-iptag.sh b/tools/pve/add-iptag.sh index ba81b838e..8a0f42306 100644 --- a/tools/pve/add-iptag.sh +++ b/tools/pve/add-iptag.sh @@ -3,7 +3,6 @@ # Copyright (c) 2021-2025 community-scripts ORG # Author: MickLesk (Canbiz) && Desert_Gamer # License: MIT -# Source: https://github.com/gitsang/iptag function header_info { clear @@ -22,7 +21,7 @@ header_info APP="IP-Tag" hostname=$(hostname) -# Farbvariablen +# Color variables YW=$(echo "\033[33m") GN=$(echo "\033[1;92m") RD=$(echo "\033[01;31m") @@ -32,13 +31,7 @@ HOLD=" " CM=" ✔️ ${CL}" CROSS=" ✖️ ${CL}" -# This function enables error handling in the script by setting options and defining a trap for the ERR signal. -catch_errors() { - set -Eeuo pipefail - trap 'error_handler $LINENO "$BASH_COMMAND"' ERR -} - -# This function is called when an error occurs. It receives the exit code, line number, and command that caused the error, and displays an error message. +# Error handler for displaying error messages error_handler() { if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null @@ -51,7 +44,7 @@ error_handler() { echo -e "\n$error_message\n" } -# This function displays a spinner. +# Spinner for progress indication spinner() { local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏') local spin_i=0 @@ -67,7 +60,7 @@ spinner() { done } -# This function displays an informational message with a yellow color. +# Info message msg_info() { local msg="$1" echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}" @@ -75,7 +68,7 @@ msg_info() { SPINNER_PID=$! } -# This function displays a success message with a green color. +# Success message msg_ok() { if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null @@ -85,7 +78,7 @@ msg_ok() { echo -e "${BFR}${CM}${GN}${msg}${CL}" } -# This function displays a error message with a red color. +# Error message msg_error() { if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null @@ -124,17 +117,122 @@ migrate_config() { update_installation() { msg_info "Updating IP-Tag Scripts" systemctl stop iptag.service &>/dev/null + msg_ok "Stopped IP-Tag service" # Create directory if it doesn't exist if [[ ! -d "/opt/iptag" ]]; then mkdir -p /opt/iptag fi - # Migrate config if needed - migrate_config + # Create new config file (check if exists and ask user) + if [[ -f "/opt/iptag/iptag.conf" ]]; then + echo -e "\n${YW}Configuration file already exists.${CL}" + while true; do + read -p "Do you want to replace it with defaults? (y/n): " yn + case $yn in + [Yy]*) + msg_info "Replacing configuration file" + generate_config >/opt/iptag/iptag.conf + msg_ok "Configuration file replaced with defaults" + break + ;; + [Nn]*) + echo -e "${GN}✔️ Keeping existing configuration file${CL}" + break + ;; + *) + echo -e "${RD}Please answer yes or no.${CL}" + ;; + esac + done + else + msg_info "Creating new configuration file" + generate_config >/opt/iptag/iptag.conf + msg_ok "Created new configuration file at /opt/iptag/iptag.conf" + fi # Update main script - cat <<'EOF' >/opt/iptag/iptag + msg_info "Updating main script" + generate_main_script >/opt/iptag/iptag + chmod +x /opt/iptag/iptag + msg_ok "Updated main script" + + # Update service file + msg_info "Updating service file" + generate_service >/lib/systemd/system/iptag.service + msg_ok "Updated service file" + + msg_info "Restarting service" + systemctl daemon-reload &>/dev/null + systemctl enable -q --now iptag.service &>/dev/null + msg_ok "Updated IP-Tag Scripts" +} + +# Generate configuration file content +generate_config() { + cat <&2 + fi +} + +# Color constants +readonly RED='\033[0;31m' +readonly GREEN='\033[0;32m' +readonly YELLOW='\033[0;33m' +readonly BLUE='\033[0;34m' +readonly PURPLE='\033[0;35m' +readonly CYAN='\033[0;36m' +readonly WHITE='\033[1;37m' +readonly GRAY='\033[0;37m' +readonly NC='\033[0m' # No Color + +# Logging functions with colors +log_success() { + echo -e "${GREEN}✓${NC} $*" +} + +log_info() { + echo -e "${BLUE}ℹ${NC} $*" +} + +log_warning() { + echo -e "${YELLOW}⚠${NC} $*" +} + +log_error() { + echo -e "${RED}✗${NC} $*" +} + +log_change() { + echo -e "${CYAN}~${NC} $*" +} + +log_unchanged() { + echo -e "${GRAY}=${NC} $*" } # Check if IP is in CIDR ip_in_cidr() { local ip="$1" cidr="$2" - ipcalc -c "$ip" "$cidr" >/dev/null 2>&1 || return 1 - - local network prefix ip_parts net_parts - network=$(echo "$cidr" | cut -d/ -f1) - prefix=$(echo "$cidr" | cut -d/ -f2) - IFS=. read -r -a ip_parts <<< "$ip" - IFS=. read -r -a net_parts <<< "$network" - - case $prefix in - 8) [[ "${ip_parts[0]}" == "${net_parts[0]}" ]] ;; - 16) [[ "${ip_parts[0]}.${ip_parts[1]}" == "${net_parts[0]}.${net_parts[1]}" ]] ;; - 24) [[ "${ip_parts[0]}.${ip_parts[1]}.${ip_parts[2]}" == "${net_parts[0]}.${net_parts[1]}.${net_parts[2]}" ]] ;; - 32) [[ "$ip" == "$network" ]] ;; - *) return 1 ;; - esac + debug_log "ip_in_cidr: checking '$ip' against '$cidr'" + + # Manual CIDR check - более надёжный метод + debug_log "ip_in_cidr: using manual check (bypassing ipcalc)" + local network prefix + IFS='/' read -r network prefix <<< "$cidr" + + # Convert IP and network to integers for comparison + local ip_int net_int mask + IFS='.' read -r a b c d <<< "$ip" + ip_int=$(( (a << 24) + (b << 16) + (c << 8) + d )) + + IFS='.' read -r a b c d <<< "$network" + net_int=$(( (a << 24) + (b << 16) + (c << 8) + d )) + + # Create subnet mask + mask=$(( 0xFFFFFFFF << (32 - prefix) )) + + # Apply mask and compare + local ip_masked=$((ip_int & mask)) + local net_masked=$((net_int & mask)) + + debug_log "ip_in_cidr: IP=$ip ($ip_int), Network=$network ($net_int), Prefix=$prefix" + debug_log "ip_in_cidr: Mask=$mask (hex: $(printf '0x%08x' $mask))" + debug_log "ip_in_cidr: IP&Mask=$ip_masked ($(printf '%d.%d.%d.%d' $((ip_masked>>24&255)) $((ip_masked>>16&255)) $((ip_masked>>8&255)) $((ip_masked&255))))" + debug_log "ip_in_cidr: Net&Mask=$net_masked ($(printf '%d.%d.%d.%d' $((net_masked>>24&255)) $((net_masked>>16&255)) $((net_masked>>8&255)) $((net_masked&255))))" + + if (( ip_masked == net_masked )); then + debug_log "ip_in_cidr: manual check PASSED - IP is in CIDR" + return 0 + else + debug_log "ip_in_cidr: manual check FAILED - IP is NOT in CIDR" + return 1 + fi } # Format IP address according to the configuration format_ip_tag() { local ip="$1" + [[ -z "$ip" ]] && return local format="${TAG_FORMAT:-$DEFAULT_TAG_FORMAT}" - case "$format" in "last_octet") echo "${ip##*.}" ;; "last_two_octets") echo "${ip#*.*.}" ;; @@ -192,7 +347,17 @@ ip_in_cidrs() { local ip="$1" cidrs="$2" [[ -z "$cidrs" ]] && return 1 local IFS=' ' - for cidr in $cidrs; do ip_in_cidr "$ip" "$cidr" && return 0; done + debug_log "Checking IP '$ip' against CIDRs: '$cidrs'" + for cidr in $cidrs; do + debug_log "Testing IP '$ip' against CIDR '$cidr'" + if ip_in_cidr "$ip" "$cidr"; then + debug_log "IP '$ip' matches CIDR '$cidr' - PASSED" + return 0 + else + debug_log "IP '$ip' does not match CIDR '$cidr'" + fi + done + debug_log "IP '$ip' failed all CIDR checks" return 1 } @@ -209,76 +374,223 @@ is_valid_ipv4() { return 0 } -lxc_status_changed() { - current_lxc_status=$(pct list 2>/dev/null) - if [ "${last_lxc_status}" == "${current_lxc_status}" ]; then - return 1 - else - last_lxc_status="${current_lxc_status}" - return 0 - fi -} - -vm_status_changed() { - current_vm_status=$(qm list 2>/dev/null) - if [ "${last_vm_status}" == "${current_vm_status}" ]; then - return 1 - else - last_vm_status="${current_vm_status}" - return 0 - fi -} - -fw_net_interface_changed() { - current_net_interface=$(ifconfig | grep "^fw") - if [ "${last_net_interface}" == "${current_net_interface}" ]; then - return 1 - else - last_net_interface="${current_net_interface}" - return 0 - fi -} - -# Get VM IPs using MAC addresses and ARP table +# Get VM IPs using multiple methods with performance optimizations get_vm_ips() { - local vmid=$1 ips="" macs found_ip=false - qm status "$vmid" 2>/dev/null | grep -q "status: running" || return - - macs=$(qm config "$vmid" 2>/dev/null | grep -E 'net[0-9]+' | grep -oE '[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}') - [[ -z "$macs" ]] && return - - for mac in $macs; do - local ip - ip=$(arp -an 2>/dev/null | grep -i "$mac" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}') - [[ -n "$ip" ]] && { ips+="$ip "; found_ip=true; } - done - - if ! $found_ip; then - local agent_ip - agent_ip=$(qm agent "$vmid" network-get-interfaces 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' || true) - [[ -n "$agent_ip" ]] && ips+="$agent_ip " + local vmid=$1 ips="" + local vm_config="/etc/pve/qemu-server/${vmid}.conf" + [[ ! -f "$vm_config" ]] && return + + debug_log "vm $vmid: starting optimized IP detection" + + # Check if VM is running first (avoid expensive operations for stopped VMs) + local vm_status="" + if command -v qm >/dev/null 2>&1; then + vm_status=$(qm status "$vmid" 2>/dev/null | awk '{print $2}') fi - - echo "${ips% }" + + if [[ "$vm_status" != "running" ]]; then + debug_log "vm $vmid: not running (status: $vm_status), skipping expensive detection" + return + fi + + # Cache for this execution + local cache_file="/tmp/iptag_vm_${vmid}_cache" + local cache_ttl=60 # 60 seconds cache + + # Check cache first + if [[ -f "$cache_file" ]] && [[ $(($(date +%s) - $(stat -c %Y "$cache_file" 2>/dev/null || echo 0))) -lt $cache_ttl ]]; then + local cached_ips=$(cat "$cache_file" 2>/dev/null) + if [[ -n "$cached_ips" ]]; then + debug_log "vm $vmid: using cached IPs: $cached_ips" + echo "$cached_ips" + return + fi + fi + + # Method 1: Quick ARP table lookup (fastest) + local mac_addresses=$(grep -E "^net[0-9]+:" "$vm_config" | grep -oE "([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}" | head -3) + debug_log "vm $vmid: found MACs: $mac_addresses" + + # Quick ARP check without forced refresh (most common case) + for mac in $mac_addresses; do + local mac_lower=$(echo "$mac" | tr '[:upper:]' '[:lower:]') + local ip=$(ip neighbor show | grep "$mac_lower" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -1) + if [[ -n "$ip" && "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then + debug_log "vm $vmid: found IP $ip via quick ARP for MAC $mac_lower" + ips+="$ip " + fi + done + + # Early exit if we found IPs via ARP + if [[ -n "$ips" ]]; then + local unique_ips=$(echo "$ips" | tr ' ' '\n' | sort -u | tr '\n' ' ') + unique_ips="${unique_ips% }" + debug_log "vm $vmid: early exit with IPs: '$unique_ips'" + echo "$unique_ips" > "$cache_file" + echo "$unique_ips" + return + fi + + # Method 2: QM guest agent (fast if available) + if command -v qm >/dev/null 2>&1; then + local qm_ips=$(timeout 3 qm guest cmd "$vmid" network-get-interfaces 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | grep -v "127.0.0.1" | head -2) + for qm_ip in $qm_ips; do + if [[ "$qm_ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then + debug_log "vm $vmid: found IP $qm_ip via qm guest cmd" + ips+="$qm_ip " + fi + done + fi + + # Early exit if we found IPs via QM + if [[ -n "$ips" ]]; then + local unique_ips=$(echo "$ips" | tr ' ' '\n' | sort -u | tr '\n' ' ') + unique_ips="${unique_ips% }" + debug_log "vm $vmid: early exit with QM IPs: '$unique_ips'" + echo "$unique_ips" > "$cache_file" + echo "$unique_ips" + return + fi + + # Method 3: DHCP leases check (medium cost) + for mac in $mac_addresses; do + local mac_lower=$(echo "$mac" | tr '[:upper:]' '[:lower:]') + + for dhcp_file in "/var/lib/dhcp/dhcpd.leases" "/var/lib/dhcpcd5/dhcpcd.leases" "/tmp/dhcp.leases"; do + if [[ -f "$dhcp_file" ]]; then + local dhcp_ip=$(timeout 2 grep -A 10 "ethernet $mac_lower" "$dhcp_file" 2>/dev/null | grep "binding state active" -A 5 | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" | head -1) + if [[ -n "$dhcp_ip" && "$dhcp_ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then + debug_log "vm $vmid: found IP $dhcp_ip via DHCP leases for MAC $mac_lower" + ips+="$dhcp_ip " + break 2 + fi + fi + done + done + + # Early exit if we found IPs via DHCP + if [[ -n "$ips" ]]; then + local unique_ips=$(echo "$ips" | tr ' ' '\n' | sort -u | tr '\n' ' ') + unique_ips="${unique_ips% }" + debug_log "vm $vmid: early exit with DHCP IPs: '$unique_ips'" + echo "$unique_ips" > "$cache_file" + echo "$unique_ips" + return + fi + + # Method 4: Limited network discovery (expensive - only if really needed) + debug_log "vm $vmid: falling back to limited network discovery" + + for mac in $mac_addresses; do + local mac_lower=$(echo "$mac" | tr '[:upper:]' '[:lower:]') + + # Get bridge interfaces + local bridges=$(grep -E "^net[0-9]+:" "$vm_config" | grep -oE "bridge=\w+" | cut -d= -f2 | head -1) + for bridge in $bridges; do + if [[ -n "$bridge" && -d "/sys/class/net/$bridge" ]]; then + # Get bridge IP range + local bridge_ip=$(ip addr show "$bridge" 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]+' | head -1) + if [[ -n "$bridge_ip" ]]; then + local network=$(echo "$bridge_ip" | cut -d'/' -f1) + debug_log "vm $vmid: limited scan on bridge $bridge network $bridge_ip" + + # Force ARP refresh with broadcast ping (limited) + IFS='.' read -r a b c d <<< "$network" + local broadcast="$a.$b.$c.255" + timeout 1 ping -c 1 -b "$broadcast" >/dev/null 2>&1 || true + + # Check ARP again after refresh + sleep 0.5 + local ip=$(ip neighbor show | grep "$mac_lower" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -1) + if [[ -n "$ip" && "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then + debug_log "vm $vmid: found IP $ip via ARP after broadcast for MAC $mac_lower" + ips+="$ip " + break 2 + fi + + # Only do very limited ping scan (reduced range) + IFS='.' read -r a b c d <<< "$network" + local base_net="$a.$b.$c" + + # Try only most common ranges (much smaller than before) + for last_octet in {100..105} {200..205}; do + local test_ip="$base_net.$last_octet" + + # Very quick ping test (reduced timeout) + if timeout 0.2 ping -c 1 -W 1 "$test_ip" >/dev/null 2>&1; then + # Check if this IP corresponds to our MAC + sleep 0.1 + local found_mac=$(ip neighbor show "$test_ip" 2>/dev/null | grep -oE "([0-9a-f]{2}:){5}[0-9a-f]{2}") + if [[ "$found_mac" == "$mac_lower" ]]; then + debug_log "vm $vmid: found IP $test_ip via limited ping scan for MAC $mac_lower" + ips+="$test_ip " + break 2 + fi + fi + done + + # Skip extended scanning entirely (too expensive) + debug_log "vm $vmid: skipping extended scan to preserve CPU" + fi + fi + done + done + + # Method 5: Static configuration check (fast) + if [[ -z "$ips" ]]; then + debug_log "vm $vmid: checking for static IP configuration" + + # Check cloud-init configuration if exists + local cloudinit_file="/var/lib/vz/snippets/${vmid}-cloud-init.yml" + if [[ -f "$cloudinit_file" ]]; then + local static_ip=$(grep -E "addresses?:" "$cloudinit_file" 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -1) + if [[ -n "$static_ip" && "$static_ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then + debug_log "vm $vmid: found static IP $static_ip in cloud-init config" + ips+="$static_ip " + fi + fi + + # Check VM config for any IP hints + local config_ip=$(grep -E "(ip=|gw=)" "$vm_config" 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -1) + if [[ -n "$config_ip" && "$config_ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then + debug_log "vm $vmid: found IP hint $config_ip in VM config" + ips+="$config_ip " + fi + fi + + # Remove duplicates and cache result + local unique_ips=$(echo "$ips" | tr ' ' '\n' | sort -u | tr '\n' ' ') + unique_ips="${unique_ips% }" + + # Cache the result (even if empty) + echo "$unique_ips" > "$cache_file" + + debug_log "vm $vmid: final optimized IPs: '$unique_ips'" + echo "$unique_ips" } -# Update tags +# Update tags for container or VM update_tags() { - local type="$1" vmid="$2" config_cmd="pct" - [[ "$type" == "vm" ]] && config_cmd="qm" - + local type="$1" vmid="$2" local current_ips_full + if [[ "$type" == "lxc" ]]; then - current_ips_full=$(lxc-info -n "${vmid}" -i 2>/dev/null | grep -E "^IP:" | awk '{print $2}') + current_ips_full=$(get_lxc_ips "${vmid}") + local current_tags_raw=$(pct config "${vmid}" 2>/dev/null | grep tags | awk '{print $2}') else current_ips_full=$(get_vm_ips "${vmid}") + local vm_config="/etc/pve/qemu-server/${vmid}.conf" + if [[ -f "$vm_config" ]]; then + local current_tags_raw=$(grep "^tags:" "$vm_config" 2>/dev/null | cut -d: -f2 | sed 's/^[[:space:]]*//') + fi fi - [[ -z "$current_ips_full" ]] && return local current_tags=() next_tags=() current_ip_tags=() - mapfile -t current_tags < <($config_cmd config "${vmid}" 2>/dev/null | grep tags | awk '{print $2}' | sed 's/;/\n/g') + if [[ -n "$current_tags_raw" ]]; then + mapfile -t current_tags < <(echo "$current_tags_raw" | sed 's/;/\n/g') + fi - # Separate IP and non-IP tags + # Separate IP/numeric and user tags for tag in "${current_tags[@]}"; do if is_valid_ipv4 "${tag}" || [[ "$tag" =~ ^[0-9]+(\.[0-9]+)*$ ]]; then current_ip_tags+=("${tag}") @@ -287,48 +599,185 @@ update_tags() { fi done - local formatted_ips=() needs_update=false added_ips=() - for ip in ${current_ips_full}; do - if is_valid_ipv4 "$ip" && ip_in_cidrs "$ip" "${CIDR_LIST[*]}"; then - local formatted_ip=$(format_ip_tag "$ip") - formatted_ips+=("$formatted_ip") - if [[ ! " ${current_ip_tags[*]} " =~ " ${formatted_ip} " ]]; then - needs_update=true - added_ips+=("$formatted_ip") - next_tags+=("$formatted_ip") + # Generate new IP tags from current IPs + local formatted_ips=() + debug_log "$type $vmid current_ips_full: '$current_ips_full'" + debug_log "$type $vmid CIDR_LIST: ${CIDR_LIST[*]}" + for ip in $current_ips_full; do + [[ -z "$ip" ]] && continue + debug_log "$type $vmid processing IP: '$ip'" + if is_valid_ipv4 "$ip"; then + debug_log "$type $vmid IP '$ip' is valid" + if ip_in_cidrs "$ip" "${CIDR_LIST[*]}"; then + debug_log "$type $vmid IP '$ip' passed CIDR check" + local formatted_ip=$(format_ip_tag "$ip") + debug_log "$type $vmid formatted '$ip' -> '$formatted_ip'" + [[ -n "$formatted_ip" ]] && formatted_ips+=("$formatted_ip") + else + debug_log "$type $vmid IP '$ip' failed CIDR check" fi + else + debug_log "$type $vmid IP '$ip' is invalid" fi done + debug_log "$type $vmid final formatted_ips: ${formatted_ips[*]}" - [[ ${#formatted_ips[@]} -eq 0 ]] && return + # If LXC and no IPs detected, do not touch tags at all + if [[ "$type" == "lxc" && ${#formatted_ips[@]} -eq 0 ]]; then + log_unchanged "LXC ${GRAY}${vmid}${NC}: No IP detected, tags unchanged" + return + fi - # Add existing IP tags that are still valid - for tag in "${current_ip_tags[@]}"; do - if [[ " ${formatted_ips[*]} " =~ " ${tag} " ]]; then - if [[ ! " ${next_tags[*]} " =~ " ${tag} " ]]; then - next_tags+=("$tag") - fi - fi + # Add new IP tags + for new_ip in "${formatted_ips[@]}"; do + next_tags+=("$new_ip") done - if [[ "$needs_update" == true ]]; then - echo "${type^} ${vmid}: adding IP tags: ${added_ips[*]}" - $config_cmd set "${vmid}" -tags "$(IFS=';'; echo "${next_tags[*]}")" &>/dev/null - elif [[ ${#current_ip_tags[@]} -gt 0 ]]; then - echo "${type^} ${vmid}: IP tags already set: ${current_ip_tags[*]}" + # Update tags if there are changes + local old_tags_str=$(IFS=';'; echo "${current_tags[*]}") + local new_tags_str=$(IFS=';'; echo "${next_tags[*]}") + + debug_log "$type $vmid old_tags: '$old_tags_str'" + debug_log "$type $vmid new_tags: '$new_tags_str'" + debug_log "$type $vmid tags_equal: $([[ "$old_tags_str" == "$new_tags_str" ]] && echo true || echo false)" + + if [[ "$old_tags_str" != "$new_tags_str" ]]; then + # Determine what changed + local old_ip_tags_count=${#current_ip_tags[@]} + local new_ip_tags_count=${#formatted_ips[@]} + + # Build detailed change message + local change_details="" + + if [[ $old_ip_tags_count -eq 0 ]]; then + change_details="added ${new_ip_tags_count} IP tag(s): [${GREEN}${formatted_ips[*]}${NC}]" + else + # Compare old and new IP tags + local added_tags=() removed_tags=() common_tags=() + + # Find removed tags + for old_tag in "${current_ip_tags[@]}"; do + local found=false + for new_tag in "${formatted_ips[@]}"; do + if [[ "$old_tag" == "$new_tag" ]]; then + found=true + break + fi + done + if [[ "$found" == false ]]; then + removed_tags+=("$old_tag") + else + common_tags+=("$old_tag") + fi + done + + # Find added tags + for new_tag in "${formatted_ips[@]}"; do + local found=false + for old_tag in "${current_ip_tags[@]}"; do + if [[ "$new_tag" == "$old_tag" ]]; then + found=true + break + fi + done + if [[ "$found" == false ]]; then + added_tags+=("$new_tag") + fi + done + + # Build change message + local change_parts=() + if [[ ${#added_tags[@]} -gt 0 ]]; then + change_parts+=("added [${GREEN}${added_tags[*]}${NC}]") + fi + if [[ ${#removed_tags[@]} -gt 0 ]]; then + change_parts+=("removed [${YELLOW}${removed_tags[*]}${NC}]") + fi + if [[ ${#common_tags[@]} -gt 0 ]]; then + change_parts+=("kept [${GRAY}${common_tags[*]}${NC}]") + fi + + change_details=$(IFS=', '; echo "${change_parts[*]}") + fi + + log_change "${type^^} ${CYAN}${vmid}${NC}: ${change_details}" + + if [[ "$type" == "lxc" ]]; then + pct set "${vmid}" -tags "$(IFS=';'; echo "${next_tags[*]}")" &>/dev/null + else + local vm_config="/etc/pve/qemu-server/${vmid}.conf" + if [[ -f "$vm_config" ]]; then + sed -i '/^tags:/d' "$vm_config" + if [[ ${#next_tags[@]} -gt 0 ]]; then + echo "tags: $(IFS=';'; echo "${next_tags[*]}")" >> "$vm_config" + fi + fi + fi else - echo "${type^} ${vmid}: setting initial IP tags: ${formatted_ips[*]}" - $config_cmd set "${vmid}" -tags "$(IFS=';'; echo "${formatted_ips[*]}")" &>/dev/null + # Tags unchanged + local ip_count=${#formatted_ips[@]} + local status_msg="" + + if [[ $ip_count -eq 0 ]]; then + status_msg="No IPs detected" + elif [[ $ip_count -eq 1 ]]; then + status_msg="IP tag [${GRAY}${formatted_ips[0]}${NC}] unchanged" + else + status_msg="${ip_count} IP tags [${GRAY}${formatted_ips[*]}${NC}] unchanged" + fi + + log_unchanged "${type^^} ${GRAY}${vmid}${NC}: ${status_msg}" + fi +} + +# Update all instances of specified type +update_all_tags() { + local type="$1" vmids count=0 + + if [[ "$type" == "lxc" ]]; then + vmids=($(pct list 2>/dev/null | grep -v VMID | awk '{print $1}')) + else + local all_vm_configs=($(ls /etc/pve/qemu-server/*.conf 2>/dev/null | sed 's/.*\/\([0-9]*\)\.conf/\1/' | sort -n)) + vmids=("${all_vm_configs[@]}") + fi + + count=${#vmids[@]} + [[ $count -eq 0 ]] && return + + # Display processing header with color + if [[ "$type" == "lxc" ]]; then + log_info "Processing ${WHITE}${count}${NC} LXC container(s) in parallel" + + # Clean up old cache files before processing LXC + cleanup_vm_cache + + # Process LXC containers in parallel for better performance + process_lxc_parallel "${vmids[@]}" + else + log_info "Processing ${WHITE}${count}${NC} virtual machine(s) in parallel" + + # Clean up old cache files before processing VMs + cleanup_vm_cache + + # Process VMs in parallel for better performance + process_vms_parallel "${vmids[@]}" + fi + + # Add completion message + if [[ "$type" == "lxc" ]]; then + log_success "Completed processing LXC containers" + else + log_success "Completed processing virtual machines" fi } # Check if status changed -check_status() { +check_status_changed() { local type="$1" current case "$type" in "lxc") current=$(pct list 2>/dev/null | grep -v VMID) ;; - "vm") current=$(qm list 2>/dev/null | grep -v VMID) ;; - "fw") current=$(ifconfig 2>/dev/null | grep "^fw") ;; + "vm") current=$(ls -la /etc/pve/qemu-server/*.conf 2>/dev/null) ;; + "fw") current=$(ip link show type bridge 2>/dev/null) ;; esac local last_var="last_${type}_status" [[ "${!last_var}" == "$current" ]] && return 1 @@ -336,101 +785,431 @@ check_status() { return 0 } -# Update all instances -update_all() { - local type="$1" list_cmd="pct" vmids count=0 - [[ "$type" == "vm" ]] && list_cmd="qm" - - vmids=$($list_cmd list 2>/dev/null | grep -v VMID | awk '{print $1}') - for vmid in $vmids; do ((count++)); done - - echo "Found ${count} running ${type}s" - [[ $count -eq 0 ]] && return - - for vmid in $vmids; do - update_tags "$type" "$vmid" - done -} - # Main check function check() { local current_time changes_detected=false current_time=$(date +%s) + + # Periodic cache cleanup (every 10 minutes) + local time_since_last_cleanup=$((current_time - ${last_cleanup_time:-0})) + if [[ $time_since_last_cleanup -ge 600 ]]; then + cleanup_vm_cache + last_cleanup_time=$current_time + debug_log "Performed periodic cache cleanup" + fi - for type in "lxc" "vm"; do - local interval_var="${type^^}_STATUS_CHECK_INTERVAL" - local last_check_var="last_${type}_check_time" - local last_update_var="last_update_${type}_time" - - if [[ "${!interval_var}" -gt 0 ]] && (( current_time - ${!last_check_var} >= ${!interval_var} )); then - echo "Checking ${type^^} status..." - eval "${last_check_var}=\$current_time" - if check_status "$type"; then - changes_detected=true - update_all "$type" - eval "${last_update_var}=\$current_time" - fi - fi - - if (( current_time - ${!last_update_var} >= FORCE_UPDATE_INTERVAL )); then - echo "Force updating ${type} tags..." + # Check LXC status + local time_since_last_lxc_check=$((current_time - last_lxc_status_check_time)) + if [[ "${LXC_STATUS_CHECK_INTERVAL:-60}" -gt 0 ]] && \ + [[ "${time_since_last_lxc_check}" -ge "${LXC_STATUS_CHECK_INTERVAL:-60}" ]]; then + last_lxc_status_check_time=${current_time} + if check_status_changed "lxc"; then changes_detected=true - update_all "$type" - eval "${last_update_var}=\$current_time" - fi - done - - if [[ "${FW_NET_INTERFACE_CHECK_INTERVAL}" -gt 0 ]] && \ - (( current_time - last_fw_check_time >= FW_NET_INTERFACE_CHECK_INTERVAL )); then - echo "Checking network interfaces..." - last_fw_check_time=$current_time - if check_status "fw"; then - changes_detected=true - update_all "lxc" - update_all "vm" - last_update_lxc_time=$current_time - last_update_vm_time=$current_time + log_warning "LXC status changes detected, updating tags" + update_all_tags "lxc" + last_update_lxc_time=${current_time} fi fi - $changes_detected || echo "No changes detected in system status" + # Check VM status + local time_since_last_vm_check=$((current_time - last_vm_status_check_time)) + if [[ "${VM_STATUS_CHECK_INTERVAL:-60}" -gt 0 ]] && \ + [[ "${time_since_last_vm_check}" -ge "${VM_STATUS_CHECK_INTERVAL:-60}" ]]; then + last_vm_status_check_time=${current_time} + if check_status_changed "vm"; then + changes_detected=true + log_warning "VM status changes detected, updating tags" + update_all_tags "vm" + last_update_vm_time=${current_time} + fi + fi + + # Check network interface changes + local time_since_last_fw_check=$((current_time - last_fw_net_interface_check_time)) + if [[ "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" -gt 0 ]] && \ + [[ "${time_since_last_fw_check}" -ge "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" ]]; then + last_fw_net_interface_check_time=${current_time} + if check_status_changed "fw"; then + changes_detected=true + log_warning "Network interface changes detected, updating all tags" + update_all_tags "lxc" + update_all_tags "vm" + last_update_lxc_time=${current_time} + last_update_vm_time=${current_time} + fi + fi + + # Force update if needed + for type in "lxc" "vm"; do + local last_update_var="last_update_${type}_time" + local time_since_last_update=$((current_time - ${!last_update_var})) + if [[ ${time_since_last_update} -ge ${FORCE_UPDATE_INTERVAL:-1800} ]]; then + changes_detected=true + local minutes=$((${FORCE_UPDATE_INTERVAL:-1800} / 60)) + if [[ "$type" == "lxc" ]]; then + log_info "Scheduled LXC update (every ${minutes} minutes)" + else + log_info "Scheduled VM update (every ${minutes} minutes)" + fi + update_all_tags "$type" + eval "${last_update_var}=${current_time}" + fi + done } # Initialize time variables declare -g last_lxc_status="" last_vm_status="" last_fw_status="" -declare -g last_lxc_check_time=0 last_vm_check_time=0 last_fw_check_time=0 -declare -g last_update_lxc_time=0 last_update_vm_time=0 +declare -g last_lxc_status_check_time=0 last_vm_status_check_time=0 last_fw_net_interface_check_time=0 +declare -g last_update_lxc_time=0 last_update_vm_time=0 last_cleanup_time=0 # Main loop main() { - while true; do - check - sleep "${LOOP_INTERVAL:-$DEFAULT_CHECK_INTERVAL}" + # Display startup message + echo -e "\n${PURPLE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" + log_success "IP-Tag service started successfully" + echo -e "${BLUE}ℹ${NC} Loop interval: ${WHITE}${LOOP_INTERVAL:-$DEFAULT_CHECK_INTERVAL}${NC} seconds" + echo -e "${BLUE}ℹ${NC} Debug mode: ${WHITE}${DEBUG:-false}${NC}" + echo -e "${BLUE}ℹ${NC} Tag format: ${WHITE}${TAG_FORMAT:-$DEFAULT_TAG_FORMAT}${NC}" + echo -e "${BLUE}ℹ${NC} Allowed CIDRs: ${WHITE}${CIDR_LIST[*]}${NC}" + echo -e "${PURPLE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n" + check +} + +# Cache cleanup function +cleanup_vm_cache() { + local cache_dir="/tmp" + local vm_cache_ttl=${VM_IP_CACHE_TTL:-120} + local lxc_cache_ttl=${LXC_IP_CACHE_TTL:-120} + local status_cache_ttl=${LXC_STATUS_CACHE_TTL:-30} + local current_time=$(date +%s) + + debug_log "Starting extreme cache cleanup" + + # Clean VM cache files + for cache_file in "$cache_dir"/iptag_vm_*_cache; do + if [[ -f "$cache_file" ]]; then + local file_time=$(stat -c %Y "$cache_file" 2>/dev/null || echo 0) + if [[ $((current_time - file_time)) -gt $vm_cache_ttl ]]; then + rm -f "$cache_file" 2>/dev/null + debug_log "Cleaned up expired VM cache file: $cache_file" + fi + fi done + + # Clean LXC IP cache files + for cache_file in "$cache_dir"/iptag_lxc_*_cache; do + if [[ -f "$cache_file" ]]; then + local file_time=$(stat -c %Y "$cache_file" 2>/dev/null || echo 0) + if [[ $((current_time - file_time)) -gt $lxc_cache_ttl ]]; then + rm -f "$cache_file" 2>/dev/null + # Also clean meta files + rm -f "${cache_file}.meta" 2>/dev/null + debug_log "Cleaned up expired LXC cache file: $cache_file" + fi + fi + done + + # Clean LXC status cache files (shorter TTL) + for cache_file in "$cache_dir"/iptag_lxc_status_*_cache; do + if [[ -f "$cache_file" ]]; then + local file_time=$(stat -c %Y "$cache_file" 2>/dev/null || echo 0) + if [[ $((current_time - file_time)) -gt $status_cache_ttl ]]; then + rm -f "$cache_file" 2>/dev/null + debug_log "Cleaned up expired LXC status cache: $cache_file" + fi + fi + done + + # Clean LXC PID cache files (60 second TTL) + for cache_file in "$cache_dir"/iptag_lxc_pid_*_cache; do + if [[ -f "$cache_file" ]]; then + local file_time=$(stat -c %Y "$cache_file" 2>/dev/null || echo 0) + if [[ $((current_time - file_time)) -gt 60 ]]; then + rm -f "$cache_file" 2>/dev/null + debug_log "Cleaned up expired LXC PID cache: $cache_file" + fi + fi + done + + # Clean any orphaned meta files + for meta_file in "$cache_dir"/iptag_*.meta; do + if [[ -f "$meta_file" ]]; then + local base_file="${meta_file%.meta}" + if [[ ! -f "$base_file" ]]; then + rm -f "$meta_file" 2>/dev/null + debug_log "Cleaned up orphaned meta file: $meta_file" + fi + fi + done + + debug_log "Completed extreme cache cleanup" +} + +# Parallel VM processing function +process_vms_parallel() { + local vm_list=("$@") + local max_parallel=${MAX_PARALLEL_VM_CHECKS:-5} + local job_count=0 + local pids=() + local pid_start_times=() + + for vmid in "${vm_list[@]}"; do + if [[ $job_count -ge $max_parallel ]]; then + local pid_to_wait="${pids[0]}" + local start_time="${pid_start_times[0]}" + local waited=0 + while kill -0 "$pid_to_wait" 2>/dev/null && [[ $waited -lt 10 ]]; do + sleep 1 + ((waited++)) + done + if kill -0 "$pid_to_wait" 2>/dev/null; then + kill -9 "$pid_to_wait" 2>/dev/null + log_warning "VM parallel: killed stuck process $pid_to_wait after 10s timeout" + else + wait "$pid_to_wait" + fi + pids=("${pids[@]:1}") + pid_start_times=("${pid_start_times[@]:1}") + ((job_count--)) + fi + # Start background job + (update_tags "vm" "$vmid") & + pids+=($!) + pid_start_times+=("$(date +%s)") + ((job_count++)) + done + for i in "${!pids[@]}"; do + local pid="${pids[$i]}" + local waited=0 + while kill -0 "$pid" 2>/dev/null && [[ $waited -lt 10 ]]; do + sleep 1 + ((waited++)) + done + if kill -0 "$pid" 2>/dev/null; then + kill -9 "$pid" 2>/dev/null + log_warning "VM parallel: killed stuck process $pid after 10s timeout" + else + wait "$pid" + fi + done +} + +# Parallel LXC processing function +process_lxc_parallel() { + local lxc_list=("$@") + local max_parallel=${MAX_PARALLEL_LXC_CHECKS:-7} + local batch_size=${LXC_BATCH_SIZE:-20} + local job_count=0 + local pids=() + local pid_start_times=() + + debug_log "Starting parallel LXC processing: ${#lxc_list[@]} containers, max_parallel=$max_parallel" + + if [[ ${#lxc_list[@]} -gt 5 ]]; then + debug_log "Pre-loading LXC statuses for ${#lxc_list[@]} containers" + local all_statuses=$(pct list 2>/dev/null) + for vmid in "${lxc_list[@]}"; do + local status=$(echo "$all_statuses" | grep "^$vmid" | awk '{print $2}') + if [[ -n "$status" ]]; then + local status_cache_file="/tmp/iptag_lxc_status_${vmid}_cache" + echo "$status" > "$status_cache_file" 2>/dev/null & + fi + done + wait + debug_log "Completed batch status pre-loading" + fi + for vmid in "${lxc_list[@]}"; do + if [[ $job_count -ge $max_parallel ]]; then + local pid_to_wait="${pids[0]}" + local start_time="${pid_start_times[0]}" + local waited=0 + while kill -0 "$pid_to_wait" 2>/dev/null && [[ $waited -lt 10 ]]; do + sleep 1 + ((waited++)) + done + if kill -0 "$pid_to_wait" 2>/dev/null; then + kill -9 "$pid_to_wait" 2>/dev/null + log_warning "LXC parallel: killed stuck process $pid_to_wait after 10s timeout" + else + wait "$pid_to_wait" + fi + pids=("${pids[@]:1}") + pid_start_times=("${pid_start_times[@]:1}") + ((job_count--)) + fi + # Start background job with higher priority + (update_tags "lxc" "$vmid") & + pids+=($!) + pid_start_times+=("$(date +%s)") + ((job_count++)) + done + for i in "${!pids[@]}"; do + local pid="${pids[$i]}" + local waited=0 + while kill -0 "$pid" 2>/dev/null && [[ $waited -lt 10 ]]; do + sleep 1 + ((waited++)) + done + if kill -0 "$pid" 2>/dev/null; then + kill -9 "$pid" 2>/dev/null + log_warning "LXC parallel: killed stuck process $pid after 10s timeout" + else + wait "$pid" + fi + done + debug_log "Completed parallel LXC processing" +} + +# Optimized LXC IP detection with caching and alternative methods +get_lxc_ips() { + local vmid=$1 + local status_cache_file="/tmp/iptag_lxc_status_${vmid}_cache" + local status_cache_ttl=${LXC_STATUS_CACHE_TTL:-30} + + debug_log "lxc $vmid: starting extreme optimized IP detection" + + # Check status cache first (avoid expensive pct status calls) + local lxc_status="" + if [[ -f "$status_cache_file" ]] && [[ $(($(date +%s) - $(stat -c %Y "$status_cache_file" 2>/dev/null || echo 0))) -lt $status_cache_ttl ]]; then + lxc_status=$(cat "$status_cache_file" 2>/dev/null) + debug_log "lxc $vmid: using cached status: $lxc_status" + else + lxc_status=$(pct status "${vmid}" 2>/dev/null | awk '{print $2}') + echo "$lxc_status" > "$status_cache_file" 2>/dev/null + debug_log "lxc $vmid: fetched fresh status: $lxc_status" + fi + + if [[ "$lxc_status" != "running" ]]; then + debug_log "lxc $vmid: not running (status: $lxc_status)" + return + fi + + local ips="" + local method_used="" + + # EXTREME Method 1: Direct Proxmox config inspection (super fast) + debug_log "lxc $vmid: trying direct Proxmox config inspection" + local pve_lxc_config="/etc/pve/lxc/${vmid}.conf" + if [[ -f "$pve_lxc_config" ]]; then + local static_ip=$(grep -E "^net[0-9]+:" "$pve_lxc_config" 2>/dev/null | grep -oE 'ip=([0-9]{1,3}\.){3}[0-9]{1,3}' | cut -d'=' -f2 | head -1) + debug_log "lxc $vmid: [CONFIG] static_ip='$static_ip' (from $pve_lxc_config)" + if [[ -n "$static_ip" && "$static_ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then + debug_log "lxc $vmid: found static IP $static_ip in Proxmox config" + ips="$static_ip" + method_used="proxmox_config" + fi + else + debug_log "lxc $vmid: [CONFIG] config file not found: $pve_lxc_config" + fi + + # EXTREME Method 2: Direct network namespace inspection (fastest dynamic) + if [[ -z "$ips" ]]; then + debug_log "lxc $vmid: trying optimized namespace inspection" + local ns_file="/var/lib/lxc/${vmid}/rootfs/proc/net/fib_trie" + if [[ -f "$ns_file" ]]; then + local ns_ip=$(timeout 1 grep -m1 -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' "$ns_file" 2>/dev/null | grep -v '127.0.0.1' | head -1) + debug_log "lxc $vmid: [NAMESPACE] ns_ip='$ns_ip'" + if [[ -n "$ns_ip" ]] && is_valid_ipv4 "$ns_ip"; then + debug_log "lxc $vmid: found IP $ns_ip via namespace inspection" + ips="$ns_ip" + method_used="namespace" + fi + else + debug_log "lxc $vmid: [NAMESPACE] ns_file not found: $ns_file" + fi + fi + + # EXTREME Method 3: Batch ARP table lookup (if namespace failed) + if [[ -z "$ips" ]]; then + debug_log "lxc $vmid: trying batch ARP lookup" + local bridge_name=""; local mac_addr="" + if [[ -f "$pve_lxc_config" ]]; then + bridge_name=$(grep -Eo 'bridge=[^,]+' "$pve_lxc_config" | head -1 | cut -d'=' -f2) + mac_addr=$(grep -Eo 'hwaddr=([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}' "$pve_lxc_config" | head -1 | cut -d'=' -f2) + debug_log "lxc $vmid: [ARP] bridge_name='$bridge_name' mac_addr='$mac_addr' (from $pve_lxc_config)" + fi + if [[ -z "$bridge_name" || -z "$mac_addr" ]]; then + local lxc_config="/var/lib/lxc/${vmid}/config" + if [[ -f "$lxc_config" ]]; then + [[ -z "$bridge_name" ]] && bridge_name=$(grep "lxc.net.0.link" "$lxc_config" 2>/dev/null | cut -d'=' -f2 | tr -d ' ') + [[ -z "$mac_addr" ]] && mac_addr=$(grep "lxc.net.0.hwaddr" "$lxc_config" 2>/dev/null | cut -d'=' -f2 | tr -d ' ') + debug_log "lxc $vmid: [ARP] bridge_name='$bridge_name' mac_addr='$mac_addr' (from $lxc_config)" + else + debug_log "lxc $vmid: [ARP] lxc config not found: $lxc_config" + fi + fi + if [[ -n "$bridge_name" && -n "$mac_addr" ]]; then + local bridge_ip=$(ip neighbor show dev "$bridge_name" 2>/dev/null | grep "$mac_addr" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -1) + debug_log "lxc $vmid: [ARP] bridge_ip='$bridge_ip'" + if [[ -n "$bridge_ip" && "$bridge_ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then + debug_log "lxc $vmid: found IP $bridge_ip via ARP table" + ips="$bridge_ip" + method_used="arp_table" + fi + fi + fi + + # EXTREME Method 4: Fast process namespace (if ARP failed) + if [[ -z "$ips" ]] && [[ "${LXC_SKIP_SLOW_METHODS:-true}" != "true" ]]; then + debug_log "lxc $vmid: trying fast process namespace" + local pid_cache_file="/tmp/iptag_lxc_pid_${vmid}_cache" + local container_pid="" + if [[ -f "$pid_cache_file" ]] && [[ $(($(date +%s) - $(stat -c %Y "$pid_cache_file" 2>/dev/null || echo 0))) -lt 60 ]]; then + container_pid=$(cat "$pid_cache_file" 2>/dev/null) + else + container_pid=$(pct list 2>/dev/null | grep "^$vmid" | awk '{print $3}') + [[ -n "$container_pid" && "$container_pid" != "-" ]] && echo "$container_pid" > "$pid_cache_file" + fi + debug_log "lxc $vmid: [PROCESS_NS] container_pid='$container_pid'" + if [[ -n "$container_pid" && "$container_pid" != "-" ]]; then + local ns_ip=$(timeout 1 nsenter -t "$container_pid" -n ip -4 addr show 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | grep -v '127.0.0.1' | head -1) + debug_log "lxc $vmid: [PROCESS_NS] ns_ip='$ns_ip'" + if [[ -n "$ns_ip" ]] && is_valid_ipv4 "$ns_ip"; then + debug_log "lxc $vmid: found IP $ns_ip via process namespace" + ips="$ns_ip" + method_used="process_ns" + fi + fi + fi + + # Fallback: always do lxc-attach/pct exec with timeout if nothing found + if [[ -z "$ips" ]]; then + debug_log "lxc $vmid: trying fallback lxc-attach (forced)" + local attach_ip="" + attach_ip=$(timeout 7s lxc-attach -n "$vmid" -- ip -4 addr show 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | grep -v '127.0.0.1' | head -1) + local attach_status=$? + debug_log "lxc $vmid: [LXC_ATTACH] attach_ip='$attach_ip' status=$attach_status" + if [[ $attach_status -eq 124 ]]; then + debug_log "lxc $vmid: lxc-attach timed out after 7s" + fi + if [[ -n "$attach_ip" ]] && is_valid_ipv4 "$attach_ip"; then + debug_log "lxc $vmid: found IP $attach_ip via lxc-attach (forced)" + ips="$attach_ip" + method_used="lxc_attach_forced" + fi + fi + if [[ -z "$ips" ]]; then + debug_log "lxc $vmid: trying fallback pct exec (forced)" + local pct_ip="" + pct_ip=$(timeout 7s pct exec "$vmid" -- ip -4 addr show 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | grep -v '127.0.0.1' | head -1) + local pct_status=$? + debug_log "lxc $vmid: [PCT_EXEC] pct_ip='$pct_ip' status=$pct_status" + if [[ $pct_status -eq 124 ]]; then + debug_log "lxc $vmid: pct exec timed out after 7s" + fi + if [[ -n "$pct_ip" ]] && is_valid_ipv4 "$pct_ip"; then + debug_log "lxc $vmid: found IP $pct_ip via pct exec (forced)" + ips="$pct_ip" + method_used="pct_exec_forced" + fi + fi + + debug_log "lxc $vmid: [RESULT] ips='$ips' method='$method_used'" + echo "$ips" } main EOF - chmod +x /opt/iptag/iptag - - # Update service file - cat </lib/systemd/system/iptag.service -[Unit] -Description=IP-Tag service -After=network.target - -[Service] -Type=simple -ExecStart=/opt/iptag/iptag -Restart=always - -[Install] -WantedBy=multi-user.target -EOF - - systemctl daemon-reload &>/dev/null - systemctl enable -q --now iptag.service &>/dev/null - msg_ok "Updated IP-Tag Scripts" } # Main installation process @@ -497,30 +1276,7 @@ migrate_config msg_info "Setup Default Config" if [[ ! -f /opt/iptag/iptag.conf ]]; then - cat </opt/iptag/iptag.conf -# Configuration file for LXC IP tagging - -# List of allowed CIDRs -CIDR_LIST=( - 192.168.0.0/16 - 172.16.0.0/12 - 10.0.0.0/8 - 100.64.0.0/10 -) - -# Tag format options: -# - "full": full IP address (e.g., 192.168.0.100) -# - "last_octet": only the last octet (e.g., 100) -# - "last_two_octets": last two octets (e.g., 0.100) -TAG_FORMAT="full" - -# Interval settings (in seconds) -LOOP_INTERVAL=60 -VM_STATUS_CHECK_INTERVAL=60 -FW_NET_INTERFACE_CHECK_INTERVAL=60 -LXC_STATUS_CHECK_INTERVAL=60 -FORCE_UPDATE_INTERVAL=1800 -EOF + generate_config >/opt/iptag/iptag.conf msg_ok "Setup default config" else msg_ok "Default config already exists" @@ -528,288 +1284,16 @@ fi msg_info "Setup Main Function" if [[ ! -f /opt/iptag/iptag ]]; then - cat <<'EOF' >/opt/iptag/iptag -#!/bin/bash -# =============== CONFIGURATION =============== # -readonly CONFIG_FILE="/opt/iptag/iptag.conf" -readonly DEFAULT_TAG_FORMAT="full" -readonly DEFAULT_CHECK_INTERVAL=60 - -# Load the configuration file if it exists -if [ -f "$CONFIG_FILE" ]; then - # shellcheck source=./iptag.conf - source "$CONFIG_FILE" -fi - -# Convert IP to integer for comparison -ip_to_int() { - local ip="$1" - local a b c d - IFS=. read -r a b c d <<< "${ip}" - echo "$((a << 24 | b << 16 | c << 8 | d))" -} - -# Check if IP is in CIDR -ip_in_cidr() { - local ip="$1" cidr="$2" - ipcalc -c "$ip" "$cidr" >/dev/null 2>&1 || return 1 - - local network prefix ip_parts net_parts - network=$(echo "$cidr" | cut -d/ -f1) - prefix=$(echo "$cidr" | cut -d/ -f2) - IFS=. read -r -a ip_parts <<< "$ip" - IFS=. read -r -a net_parts <<< "$network" - - case $prefix in - 8) [[ "${ip_parts[0]}" == "${net_parts[0]}" ]] ;; - 16) [[ "${ip_parts[0]}.${ip_parts[1]}" == "${net_parts[0]}.${net_parts[1]}" ]] ;; - 24) [[ "${ip_parts[0]}.${ip_parts[1]}.${ip_parts[2]}" == "${net_parts[0]}.${net_parts[1]}.${net_parts[2]}" ]] ;; - 32) [[ "$ip" == "$network" ]] ;; - *) return 1 ;; - esac -} - -# Format IP address according to the configuration -format_ip_tag() { - local ip="$1" - local format="${TAG_FORMAT:-$DEFAULT_TAG_FORMAT}" - - case "$format" in - "last_octet") echo "${ip##*.}" ;; - "last_two_octets") echo "${ip#*.*.}" ;; - *) echo "$ip" ;; - esac -} - -# Check if IP is in any CIDRs -ip_in_cidrs() { - local ip="$1" cidrs="$2" - [[ -z "$cidrs" ]] && return 1 - local IFS=' ' - for cidr in $cidrs; do - ip_in_cidr "$ip" "$cidr" && return 0 - done - return 1 -} - -# Check if IP is valid -is_valid_ipv4() { - local ip="$1" - [[ "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]] || return 1 - - local IFS='.' parts - read -ra parts <<< "$ip" - for part in "${parts[@]}"; do - (( part >= 0 && part <= 255 )) || return 1 - done - return 0 -} - -# Get VM IPs using MAC addresses and ARP table -get_vm_ips() { - local vmid=$1 ips="" macs found_ip=false - qm status "$vmid" 2>/dev/null | grep -q "status: running" || return - - macs=$(qm config "$vmid" 2>/dev/null | grep -E 'net[0-9]+' | grep -oE '[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}') - [[ -z "$macs" ]] && return - - for mac in $macs; do - local ip - ip=$(arp -an 2>/dev/null | grep -i "$mac" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}') - [[ -n "$ip" ]] && { ips+="$ip "; found_ip=true; } - done - - if ! $found_ip; then - local agent_ip - agent_ip=$(qm agent "$vmid" network-get-interfaces 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' || true) - [[ -n "$agent_ip" ]] && ips+="$agent_ip " - fi - - echo "${ips% }" -} - -# Update tags for container or VM -update_tags() { - local type="$1" vmid="$2" config_cmd="pct" - [[ "$type" == "vm" ]] && config_cmd="qm" - - local current_ips_full - if [[ "$type" == "lxc" ]]; then - current_ips_full=$(lxc-info -n "${vmid}" -i 2>/dev/null | grep -E "^IP:" | awk '{print $2}') - else - current_ips_full=$(get_vm_ips "${vmid}") - fi - [[ -z "$current_ips_full" ]] && return - - local current_tags=() next_tags=() current_ip_tags=() - mapfile -t current_tags < <($config_cmd config "${vmid}" 2>/dev/null | grep tags | awk '{print $2}' | sed 's/;/\n/g') - - # Separate IP and non-IP tags - for tag in "${current_tags[@]}"; do - if is_valid_ipv4 "${tag}" || [[ "$tag" =~ ^[0-9]+(\.[0-9]+)*$ ]]; then - current_ip_tags+=("${tag}") - else - next_tags+=("${tag}") - fi - done - - local formatted_ips=() needs_update=false added_ips=() - for ip in ${current_ips_full}; do - if is_valid_ipv4 "$ip" && ip_in_cidrs "$ip" "${CIDR_LIST[*]}"; then - local formatted_ip=$(format_ip_tag "$ip") - formatted_ips+=("$formatted_ip") - if [[ ! " ${current_ip_tags[*]} " =~ " ${formatted_ip} " ]]; then - needs_update=true - added_ips+=("$formatted_ip") - next_tags+=("$formatted_ip") - fi - fi - done - - [[ ${#formatted_ips[@]} -eq 0 ]] && return - - # Add existing IP tags that are still valid - for tag in "${current_ip_tags[@]}"; do - if [[ " ${formatted_ips[*]} " =~ " ${tag} " ]]; then - if [[ ! " ${next_tags[*]} " =~ " ${tag} " ]]; then - next_tags+=("$tag") - fi - fi - done - - if [[ "$needs_update" == true ]]; then - echo "${type^} ${vmid}: adding IP tags: ${added_ips[*]}" - $config_cmd set "${vmid}" -tags "$(IFS=';'; echo "${next_tags[*]}")" &>/dev/null - fi -} - -# Update all instances of specified type -update_all_tags() { - local type="$1" list_cmd="pct" vmids count=0 - [[ "$type" == "vm" ]] && list_cmd="qm" - - vmids=$($list_cmd list 2>/dev/null | grep -v VMID | awk '{print $1}') - for vmid in $vmids; do ((count++)); done - - echo "Found ${count} running ${type}s" - [[ $count -eq 0 ]] && return - - for vmid in $vmids; do - update_tags "$type" "$vmid" - done -} - -# Check if status changed -check_status_changed() { - local type="$1" current - case "$type" in - "lxc") current=$(pct list 2>/dev/null | grep -v VMID) ;; - "vm") current=$(qm list 2>/dev/null | grep -v VMID) ;; - "fw") current=$(ifconfig 2>/dev/null | grep "^fw") ;; - esac - local last_var="last_${type}_status" - [[ "${!last_var}" == "$current" ]] && return 1 - eval "$last_var='$current'" - return 0 -} - -# Main check function -check() { - local current_time changes_detected=false - current_time=$(date +%s) - - # Check LXC status - local time_since_last_lxc_check=$((current_time - last_lxc_status_check_time)) - if [[ "${LXC_STATUS_CHECK_INTERVAL:-60}" -gt 0 ]] && \ - [[ "${time_since_last_lxc_check}" -ge "${LXC_STATUS_CHECK_INTERVAL:-60}" ]]; then - echo "Checking LXC status..." - last_lxc_status_check_time=${current_time} - if check_status_changed "lxc"; then - changes_detected=true - update_all_tags "lxc" - last_update_lxc_time=${current_time} - fi - fi - - # Check VM status - local time_since_last_vm_check=$((current_time - last_vm_status_check_time)) - if [[ "${VM_STATUS_CHECK_INTERVAL:-60}" -gt 0 ]] && \ - [[ "${time_since_last_vm_check}" -ge "${VM_STATUS_CHECK_INTERVAL:-60}" ]]; then - echo "Checking VM status..." - last_vm_status_check_time=${current_time} - if check_status_changed "vm"; then - changes_detected=true - update_all_tags "vm" - last_update_vm_time=${current_time} - fi - fi - - # Check network interface changes - local time_since_last_fw_check=$((current_time - last_fw_net_interface_check_time)) - if [[ "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" -gt 0 ]] && \ - [[ "${time_since_last_fw_check}" -ge "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" ]]; then - echo "Checking network interfaces..." - last_fw_net_interface_check_time=${current_time} - if check_status_changed "fw"; then - changes_detected=true - update_all_tags "lxc" - update_all_tags "vm" - last_update_lxc_time=${current_time} - last_update_vm_time=${current_time} - fi - fi - - # Force update if needed - for type in "lxc" "vm"; do - local last_update_var="last_update_${type}_time" - local time_since_last_update=$((current_time - ${!last_update_var})) - if [[ ${time_since_last_update} -ge ${FORCE_UPDATE_INTERVAL:-1800} ]]; then - echo "Force updating ${type} tags..." - changes_detected=true - update_all_tags "$type" - eval "${last_update_var}=${current_time}" - fi - done - - $changes_detected || echo "No changes detected in system status" -} - -# Initialize time variables -declare -g last_lxc_status="" last_vm_status="" last_fw_status="" -declare -g last_lxc_status_check_time=0 last_vm_status_check_time=0 last_fw_net_interface_check_time=0 -declare -g last_update_lxc_time=0 last_update_vm_time=0 - -# Main loop -main() { - while true; do - check - sleep "${LOOP_INTERVAL:-$DEFAULT_CHECK_INTERVAL}" - done -} - -main -EOF + generate_main_script >/opt/iptag/iptag + chmod +x /opt/iptag/iptag msg_ok "Setup Main Function" else msg_ok "Main Function already exists" fi -chmod +x /opt/iptag/iptag msg_info "Creating Service" if [[ ! -f /lib/systemd/system/iptag.service ]]; then - cat </lib/systemd/system/iptag.service -[Unit] -Description=IP-Tag service -After=network.target - -[Service] -Type=simple -ExecStart=/opt/iptag/iptag -Restart=always - -[Install] -WantedBy=multi-user.target -EOF + generate_service >/lib/systemd/system/iptag.service msg_ok "Created Service" else msg_ok "Service already exists." @@ -821,5 +1305,13 @@ msg_info "Starting Service" systemctl daemon-reload &>/dev/null systemctl enable -q --now iptag.service &>/dev/null msg_ok "Started Service" + +msg_info "Restarting Service with optimizations" +systemctl restart iptag.service &>/dev/null +msg_ok "Service restarted with CPU optimizations" + SPINNER_PID="" echo -e "\n${APP} installation completed successfully! ${CL}\n" + +# Proper script termination +exit 0 From cb2488011553ef820669ec4ac45756ec95b2bb23 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, 4 Jul 2025 09:38:37 +0100 Subject: [PATCH 031/229] Update CHANGELOG.md (#5687) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 553015b97..d7ed4bd73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,10 @@ All LXC instances created using this repository come pre-installed with Midnight - Cloudflare-DDNS: fix unvisible read command at install [@MickLesk](https://github.com/MickLesk) ([#5682](https://github.com/community-scripts/ProxmoxVE/pull/5682)) +### 💥 Breaking Changes + + - Update Iptag [@DesertGamer](https://github.com/DesertGamer) ([#5677](https://github.com/community-scripts/ProxmoxVE/pull/5677)) + ## 2025-07-03 ### 🚀 Updated Scripts From aad2dd6232def271b5025c9827dbd28c340adff9 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 4 Jul 2025 11:36:15 +0200 Subject: [PATCH 032/229] ESPHome: Fix Linking issue (#5685) --- ct/esphome.sh | 5 +++++ install/esphome-install.sh | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/ct/esphome.sh b/ct/esphome.sh index 127a2d9a5..e21641a32 100644 --- a/ct/esphome.sh +++ b/ct/esphome.sh @@ -73,6 +73,11 @@ EOF msg_ok "Updated systemd service" fi + msg_info "Linking esphome to /usr/local/bin" + rm -f /usr/local/bin/esphome + ln -s /opt/esphome/.venv/bin/esphome /usr/local/bin/esphome + msg_ok "Linked esphome binary" + msg_info "Starting ${APP}" systemctl start esphomeDashboard msg_ok "Started ${APP}" diff --git a/install/esphome-install.sh b/install/esphome-install.sh index 8e8e022c5..b3cf777be 100644 --- a/install/esphome-install.sh +++ b/install/esphome-install.sh @@ -29,6 +29,11 @@ $STD /opt/esphome/.venv/bin/python -m pip install --upgrade pip $STD /opt/esphome/.venv/bin/python -m pip install esphome tornado esptool msg_ok "Setup and Installed ESPHome" +msg_info "Linking esphome to /usr/local/bin" +rm -f /usr/local/bin/esphome +ln -s /opt/esphome/.venv/bin/esphome /usr/local/bin/esphome +msg_ok "Linked esphome binary" + msg_info "Creating Service" mkdir -p /root/config cat </etc/systemd/system/esphomeDashboard.service From 7d6ac731530f380331396c95b8319fad9b0608a7 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, 4 Jul 2025 10:36:49 +0100 Subject: [PATCH 033/229] Update CHANGELOG.md (#5692) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7ed4bd73..fc1f95cbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,12 +20,10 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🐞 Bug Fixes + - ESPHome: Fix Linking issue to prevent version mismatch [@MickLesk](https://github.com/MickLesk) ([#5685](https://github.com/community-scripts/ProxmoxVE/pull/5685)) + - Update Iptag [@DesertGamer](https://github.com/DesertGamer) ([#5677](https://github.com/community-scripts/ProxmoxVE/pull/5677)) - Cloudflare-DDNS: fix unvisible read command at install [@MickLesk](https://github.com/MickLesk) ([#5682](https://github.com/community-scripts/ProxmoxVE/pull/5682)) -### 💥 Breaking Changes - - - Update Iptag [@DesertGamer](https://github.com/DesertGamer) ([#5677](https://github.com/community-scripts/ProxmoxVE/pull/5677)) - ## 2025-07-03 ### 🚀 Updated Scripts From e981c42517ac4f1658a6eb639ea67dcae792aff2 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 4 Jul 2025 11:40:07 +0200 Subject: [PATCH 034/229] Komodo: Update Script to use FerretDB / remove psql & sqlite options (#5690) --- ct/alpine-komodo.sh | 9 +++++++++ ct/komodo.sh | 9 +++++++++ install/alpine-komodo-install.sh | 8 ++------ install/komodo-install.sh | 8 ++------ 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/ct/alpine-komodo.sh b/ct/alpine-komodo.sh index 19d100a5e..50912fe06 100644 --- a/ct/alpine-komodo.sh +++ b/ct/alpine-komodo.sh @@ -32,6 +32,15 @@ function update_script() { exit 1 fi COMPOSE_BASENAME=$(basename "$COMPOSE_FILE") + + if [[ "$COMPOSE_BASENAME" == "sqlite.compose.yaml" || "$COMPOSE_BASENAME" == "postgres.compose.yaml" ]]; then + msg_error "❌ Detected outdated Komodo setup using SQLite or PostgreSQL (FerretDB v1)." + echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}" + echo -e "${YW}Please follow the migration guide:${CL}" + echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n" + exit 1 + fi + BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)" cp "$COMPOSE_FILE" "$BACKUP_FILE" || { msg_error "Failed to create backup of ${COMPOSE_BASENAME}!" diff --git a/ct/komodo.sh b/ct/komodo.sh index 6196e5b7d..5149c7fd3 100644 --- a/ct/komodo.sh +++ b/ct/komodo.sh @@ -36,6 +36,15 @@ function update_script() { exit 1 fi COMPOSE_BASENAME=$(basename "$COMPOSE_FILE") + + if [[ "$COMPOSE_BASENAME" == "sqlite.compose.yaml" || "$COMPOSE_BASENAME" == "postgres.compose.yaml" ]]; then + msg_error "❌ Detected outdated Komodo setup using SQLite or PostgreSQL (FerretDB v1)." + echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}" + echo -e "${YW}Please follow the migration guide:${CL}" + echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n" + exit 1 + fi + BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)" cp "$COMPOSE_FILE" "$BACKUP_FILE" || { msg_error "Failed to create backup of ${COMPOSE_BASENAME}!" diff --git a/install/alpine-komodo-install.sh b/install/alpine-komodo-install.sh index e87bf6876..fcf8f838f 100644 --- a/install/alpine-komodo-install.sh +++ b/install/alpine-komodo-install.sh @@ -28,8 +28,7 @@ msg_ok "Enabled Docker Service" echo "${TAB3}Choose the database for Komodo installation:" echo "${TAB3}1) MongoDB (recommended)" -echo "${TAB3}2) SQLite" -echo "${TAB3}3) PostgreSQL" +echo "${TAB3}2) FerretDB" read -rp "${TAB3}Enter your choice (default: 1): " DB_CHOICE DB_CHOICE=${DB_CHOICE:-1} @@ -38,10 +37,7 @@ case $DB_CHOICE in DB_COMPOSE_FILE="mongo.compose.yaml" ;; 2) - DB_COMPOSE_FILE="sqlite.compose.yaml" - ;; -3) - DB_COMPOSE_FILE="postgres.compose.yaml" + DB_COMPOSE_FILE="ferretdb.compose.yaml" ;; *) echo "Invalid choice. Defaulting to MongoDB." diff --git a/install/komodo-install.sh b/install/komodo-install.sh index 99771b97f..7717b281f 100644 --- a/install/komodo-install.sh +++ b/install/komodo-install.sh @@ -39,8 +39,7 @@ msg_ok "Installed Docker" echo "${TAB3}Choose the database for Komodo installation:" echo "${TAB3}1) MongoDB (recommended)" -echo "${TAB3}2) SQLite" -echo "${TAB3}3) PostgreSQL" +echo "${TAB3}2) FerretDB" read -rp "${TAB3}Enter your choice (default: 1): " DB_CHOICE DB_CHOICE=${DB_CHOICE:-1} @@ -49,10 +48,7 @@ case $DB_CHOICE in DB_COMPOSE_FILE="mongo.compose.yaml" ;; 2) - DB_COMPOSE_FILE="sqlite.compose.yaml" - ;; -3) - DB_COMPOSE_FILE="postgres.compose.yaml" + DB_COMPOSE_FILE="ferretdb.compose.yaml" ;; *) echo "Invalid choice. Defaulting to MongoDB." From 85758f8b911db4b18d9f262a0549962bcb17c98a 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, 4 Jul 2025 10:40:33 +0100 Subject: [PATCH 035/229] Update CHANGELOG.md (#5693) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc1f95cbc..7fac1b923 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🐞 Bug Fixes + - Komodo: Update Script to use FerretDB / remove psql & sqlite options [@MickLesk](https://github.com/MickLesk) ([#5690](https://github.com/community-scripts/ProxmoxVE/pull/5690)) - ESPHome: Fix Linking issue to prevent version mismatch [@MickLesk](https://github.com/MickLesk) ([#5685](https://github.com/community-scripts/ProxmoxVE/pull/5685)) - Update Iptag [@DesertGamer](https://github.com/DesertGamer) ([#5677](https://github.com/community-scripts/ProxmoxVE/pull/5677)) - Cloudflare-DDNS: fix unvisible read command at install [@MickLesk](https://github.com/MickLesk) ([#5682](https://github.com/community-scripts/ProxmoxVE/pull/5682)) From f68f19aa3da5c3a494a8b60574cde4bbca43cd70 Mon Sep 17 00:00:00 2001 From: Austin Date: Fri, 4 Jul 2025 05:47:43 -0400 Subject: [PATCH 036/229] MySQL phpMyAdmin Access Information (#5679) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updating MySQL CT with phpMyAdmin access information * Update mysql.json --------- Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com> --- frontend/public/json/mysql.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/public/json/mysql.json b/frontend/public/json/mysql.json index 8b4d29a2b..cf7a2f964 100644 --- a/frontend/public/json/mysql.json +++ b/frontend/public/json/mysql.json @@ -39,6 +39,10 @@ { "text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0", "type": "info" + }, + { + "text": "If installed, access phpMyAdmin at `http:///phpMyAdmin`, case sensitive.", + "type": "info" } ] } From 9b8657fbb373f2d505734d79437c3bf527e6a513 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, 4 Jul 2025 10:48:12 +0100 Subject: [PATCH 037/229] Update CHANGELOG.md (#5694) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fac1b923..b0ef4ebf4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,12 @@ All LXC instances created using this repository come pre-installed with Midnight - Update Iptag [@DesertGamer](https://github.com/DesertGamer) ([#5677](https://github.com/community-scripts/ProxmoxVE/pull/5677)) - Cloudflare-DDNS: fix unvisible read command at install [@MickLesk](https://github.com/MickLesk) ([#5682](https://github.com/community-scripts/ProxmoxVE/pull/5682)) +### 🌐 Website + + - #### 📝 Script Information + + - MySQL phpMyAdmin Access Information [@austinpilz](https://github.com/austinpilz) ([#5679](https://github.com/community-scripts/ProxmoxVE/pull/5679)) + ## 2025-07-03 ### 🚀 Updated Scripts From f8c1d7bde8b55ce6b5dc1b6da85845daa294021f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Fri, 4 Jul 2025 12:46:07 +0200 Subject: [PATCH 038/229] Update outline-install.sh (#5688) --- install/outline-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/outline-install.sh b/install/outline-install.sh index 5715804b7..1d83d1c22 100644 --- a/install/outline-install.sh +++ b/install/outline-install.sh @@ -55,7 +55,7 @@ sed -i 's/NODE_ENV=production/NODE_ENV=development/g' /opt/outline/.env sed -i "s/generate_a_new_key/${SECRET_KEY}/g" /opt/outline/.env sed -i "s/user:pass@postgres/${DB_USER}:${DB_PASS}@localhost/g" /opt/outline/.env sed -i 's/redis:6379/localhost:6379/g' /opt/outline/.env -sed -i "32s#URL=#URL=http://${LOCAL_IP}#g" /opt/outline/.env +sed -i "5s#URL=#URL=http://${LOCAL_IP}#g" /opt/outline/.env sed -i 's/FORCE_HTTPS=true/FORCE_HTTPS=false/g' /opt/outline/.env $STD yarn install --frozen-lockfile export NODE_OPTIONS="--max-old-space-size=3584" From 45fbc30cc5fb0b42d9c3443971814e27d9ef4069 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, 4 Jul 2025 11:46:44 +0100 Subject: [PATCH 039/229] Update CHANGELOG.md (#5695) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0ef4ebf4..dda18d7ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🐞 Bug Fixes + - Outline: Fix sed command for v0.85.0 [@tremor021](https://github.com/tremor021) ([#5688](https://github.com/community-scripts/ProxmoxVE/pull/5688)) - Komodo: Update Script to use FerretDB / remove psql & sqlite options [@MickLesk](https://github.com/MickLesk) ([#5690](https://github.com/community-scripts/ProxmoxVE/pull/5690)) - ESPHome: Fix Linking issue to prevent version mismatch [@MickLesk](https://github.com/MickLesk) ([#5685](https://github.com/community-scripts/ProxmoxVE/pull/5685)) - Update Iptag [@DesertGamer](https://github.com/DesertGamer) ([#5677](https://github.com/community-scripts/ProxmoxVE/pull/5677)) From 524a2a422d8e89cad2972816ef4c7459a581ee85 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, 4 Jul 2025 14:07:48 +0200 Subject: [PATCH 040/229] Update versions.json (#5698) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 116 ++++++++++++++--------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index a556cb958..96058cead 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,14 +1,69 @@ [ + { + "name": "Graylog2/graylog2-server", + "version": "6.3.1", + "date": "2025-07-04T11:20:48Z" + }, + { + "name": "mattermost/mattermost", + "version": "preview-v0.1", + "date": "2025-06-27T14:35:47Z" + }, + { + "name": "theonedev/onedev", + "version": "v11.11.3", + "date": "2025-07-04T09:04:46Z" + }, + { + "name": "nzbgetcom/nzbget", + "version": "v25.2", + "date": "2025-07-04T08:21:42Z" + }, + { + "name": "bunkerity/bunkerweb", + "version": "v1.6.2", + "date": "2025-07-04T08:43:44Z" + }, + { + "name": "Checkmk/checkmk", + "version": "v2.2.0p44", + "date": "2025-07-04T06:44:06Z" + }, + { + "name": "redis/redis", + "version": "8.2-rc1-int", + "date": "2025-07-02T19:27:08Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.2117", + "date": "2025-07-04T05:56:05Z" + }, + { + "name": "hyperion-project/hyperion.ng", + "version": "2.1.1", + "date": "2025-06-14T17:45:06Z" + }, + { + "name": "steveiliop56/tinyauth", + "version": "v3.4.1", + "date": "2025-06-11T07:53:44Z" + }, { "name": "outline/outline", "version": "v0.85.0", - "date": "2025-07-03T23:31:00Z" + "date": "2025-07-04T00:06:47Z" }, { "name": "home-assistant/operating-system", "version": "15.2", "date": "2025-04-14T15:37:12Z" }, + { + "name": "keycloak/keycloak", + "version": "26.3.0", + "date": "2025-07-02T12:26:44Z" + }, { "name": "cloudflare/cloudflared", "version": "2025.7.0", @@ -19,16 +74,6 @@ "version": "v4.1.2", "date": "2025-07-03T16:59:29Z" }, - { - "name": "bunkerity/bunkerweb", - "version": "v1.6.1", - "date": "2025-03-15T17:29:17Z" - }, - { - "name": "Checkmk/checkmk", - "version": "v2.4.0p6", - "date": "2025-07-03T16:40:42Z" - }, { "name": "influxdata/influxdb", "version": "v3.2.1", @@ -54,16 +99,6 @@ "version": "fumadocs-openapi@9.0.17", "date": "2025-07-03T06:57:48Z" }, - { - "name": "mattermost/mattermost", - "version": "preview-v0.1", - "date": "2025-06-27T14:35:47Z" - }, - { - "name": "Jackett/Jackett", - "version": "v0.22.2111", - "date": "2025-07-03T05:50:31Z" - }, { "name": "esphome/esphome", "version": "2025.6.3", @@ -104,16 +139,6 @@ "version": "2.5.1", "date": "2025-07-02T19:38:06Z" }, - { - "name": "redis/redis", - "version": "8.2-rc1-int", - "date": "2025-07-02T19:27:08Z" - }, - { - "name": "keycloak/keycloak", - "version": "26.3.0", - "date": "2025-07-02T12:26:44Z" - }, { "name": "ollama/ollama", "version": "v0.9.5", @@ -129,16 +154,6 @@ "version": "2025.7.0", "date": "2025-07-02T16:23:42Z" }, - { - "name": "nzbgetcom/nzbget", - "version": "v25.1", - "date": "2025-06-27T09:14:14Z" - }, - { - "name": "Graylog2/graylog2-server", - "version": "6.2.5", - "date": "2025-07-02T13:06:30Z" - }, { "name": "wazuh/wazuh", "version": "coverity-w27-4.13.0", @@ -169,11 +184,6 @@ "version": "v0.20.2", "date": "2025-07-02T00:37:07Z" }, - { - "name": "hyperion-project/hyperion.ng", - "version": "2.1.1", - "date": "2025-06-14T17:45:06Z" - }, { "name": "Threadfin/Threadfin", "version": "1.2.35", @@ -279,11 +289,6 @@ "version": "0.50.5", "date": "2025-06-29T08:54:47Z" }, - { - "name": "theonedev/onedev", - "version": "v11.11.2", - "date": "2025-06-29T01:40:39Z" - }, { "name": "linkwarden/linkwarden", "version": "v2.11.2", @@ -431,8 +436,8 @@ }, { "name": "runtipi/runtipi", - "version": "v4.2.1", - "date": "2025-06-03T20:04:28Z" + "version": "nightly", + "date": "2025-06-23T19:10:33Z" }, { "name": "VictoriaMetrics/VictoriaMetrics", @@ -679,11 +684,6 @@ "version": "v1.63.1", "date": "2025-06-11T11:05:42Z" }, - { - "name": "steveiliop56/tinyauth", - "version": "v3.4.1", - "date": "2025-06-11T07:53:44Z" - }, { "name": "OctoPrint/OctoPrint", "version": "1.11.2", From f5be1d270ae1cee81836c90f2abff13d94d31cf0 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, 4 Jul 2025 13:08:22 +0100 Subject: [PATCH 041/229] Update CHANGELOG.md (#5699) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dda18d7ce..150b213ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,9 +23,12 @@ All LXC instances created using this repository come pre-installed with Midnight - Outline: Fix sed command for v0.85.0 [@tremor021](https://github.com/tremor021) ([#5688](https://github.com/community-scripts/ProxmoxVE/pull/5688)) - Komodo: Update Script to use FerretDB / remove psql & sqlite options [@MickLesk](https://github.com/MickLesk) ([#5690](https://github.com/community-scripts/ProxmoxVE/pull/5690)) - ESPHome: Fix Linking issue to prevent version mismatch [@MickLesk](https://github.com/MickLesk) ([#5685](https://github.com/community-scripts/ProxmoxVE/pull/5685)) - - Update Iptag [@DesertGamer](https://github.com/DesertGamer) ([#5677](https://github.com/community-scripts/ProxmoxVE/pull/5677)) - Cloudflare-DDNS: fix unvisible read command at install [@MickLesk](https://github.com/MickLesk) ([#5682](https://github.com/community-scripts/ProxmoxVE/pull/5682)) + - #### 💥 Breaking Changes + + - Update Iptag [@DesertGamer](https://github.com/DesertGamer) ([#5677](https://github.com/community-scripts/ProxmoxVE/pull/5677)) + ### 🌐 Website - #### 📝 Script Information From 9ab50d42480db9304f19b87741fd325c569e7ae1 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 4 Jul 2025 17:29:35 +0200 Subject: [PATCH 042/229] Update trilium.sh --- ct/trilium.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/trilium.sh b/ct/trilium.sh index ddf3cdca3..22461f552 100644 --- a/ct/trilium.sh +++ b/ct/trilium.sh @@ -5,7 +5,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/TriliumNext/Trilium -APP="Trilium Notes" +APP="Trilium" var_tags="${var_tags:-notes}" var_cpu="${var_cpu:-1}" var_ram="${var_ram:-512}" From a95be13c953875da524824531da6206ad61f5f80 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, 4 Jul 2025 17:53:15 +0200 Subject: [PATCH 043/229] Update .app files (#5706) Co-authored-by: GitHub Actions --- ct/headers/trilium | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ct/headers/trilium b/ct/headers/trilium index 5f79e7c56..6f02b768e 100644 --- a/ct/headers/trilium +++ b/ct/headers/trilium @@ -1,6 +1,6 @@ - ______ _ ___ _ __ __ - /_ __/____(_) (_)_ ______ ___ / | / /___ / /____ _____ - / / / ___/ / / / / / / __ `__ \ / |/ / __ \/ __/ _ \/ ___/ - / / / / / / / / /_/ / / / / / / / /| / /_/ / /_/ __(__ ) -/_/ /_/ /_/_/_/\__,_/_/ /_/ /_/ /_/ |_/\____/\__/\___/____/ - + ______ _ ___ + /_ __/____(_) (_)_ ______ ___ + / / / ___/ / / / / / / __ `__ \ + / / / / / / / / /_/ / / / / / / +/_/ /_/ /_/_/_/\__,_/_/ /_/ /_/ + From 7561e26c0a18b40987c8e78ca480cbd0f7ec0592 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 4 Jul 2025 21:22:50 +0200 Subject: [PATCH 044/229] Core layer refactor: centralized error traps and msg_* consistency (#5705) --- misc/alpine-install.func | 5 - misc/build.func | 132 +++++++++---- misc/core.func | 400 ++++++++++++--------------------------- misc/create_lxc.sh | 196 +++++++++++++------ misc/install.func | 18 +- misc/tools.func | 8 +- 6 files changed, 375 insertions(+), 384 deletions(-) diff --git a/misc/alpine-install.func b/misc/alpine-install.func index 909b51043..b7381947a 100644 --- a/misc/alpine-install.func +++ b/misc/alpine-install.func @@ -83,11 +83,6 @@ update_os() { msg_info "Updating Container OS" $STD apk -U upgrade msg_ok "Updated Container OS" - - msg_info "Installing core dependencies" - $STD apk update - $STD apk add newt curl openssh nano mc ncurses gpg - msg_ok "Core dependencies installed" } # This function modifies the message of the day (motd) and SSH settings diff --git a/misc/build.func b/misc/build.func index 863cf50e0..d6ecf70ba 100644 --- a/misc/build.func +++ b/misc/build.func @@ -304,13 +304,12 @@ echo_default() { fi # Output the selected values with icons - echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}" - echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}" + echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}${CT_ID}${CL}" + echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os ($var_version)${CL}" echo -e "${CONTAINERTYPE}${BOLD}${DGN}Container Type: ${BGN}$CT_TYPE_DESC${CL}" echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE} GB${CL}" echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}" echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE} MiB${CL}" - echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}${CT_ID}${CL}" if [ "$VERB" == "yes" ]; then echo -e "${SEARCH}${BOLD}${DGN}Verbose Mode: ${BGN}Enabled${CL}" fi @@ -1095,7 +1094,9 @@ build_container() { # This executes create_lxc.sh and creates the container and .conf file bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/create_lxc.sh)" $? - LXC_CONFIG=/etc/pve/lxc/${CTID}.conf + LXC_CONFIG="/etc/pve/lxc/${CTID}.conf" + + # USB passthrough for privileged LXC (CT_TYPE=0) if [ "$CT_TYPE" == "0" ]; then cat <>"$LXC_CONFIG" # USB passthrough @@ -1111,38 +1112,98 @@ lxc.mount.entry: /dev/ttyACM1 dev/ttyACM1 none bind,optional,create= EOF fi - if [ "$CT_TYPE" == "0" ]; then - if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "immich" || "$APP" == "Tdarr" || "$APP" == "Open WebUI" || "$APP" == "Unmanic" || "$APP" == "Ollama" || "$APP" == "FileFlows" ]]; then - cat <>"$LXC_CONFIG" -# VAAPI hardware transcoding -lxc.cgroup2.devices.allow: c 226:0 rwm -lxc.cgroup2.devices.allow: c 226:128 rwm -lxc.cgroup2.devices.allow: c 29:0 rwm -lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file -lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir -lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file -EOF + # VAAPI passthrough for privileged containers or known apps + VAAPI_APPS=( + "immich" + "Channels" + "Emby" + "ErsatzTV" + "Frigate" + "Jellyfin" + "Plex" + "Scrypted" + "Tdarr" + "Unmanic" + "Ollama" + "FileFlows" + "Open WebUI" + ) + + is_vaapi_app=false + for vaapi_app in "${VAAPI_APPS[@]}"; do + if [[ "$APP" == "$vaapi_app" ]]; then + is_vaapi_app=true + break fi - else - if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "immich" || "$APP" == "Tdarr" || "$APP" == "Open WebUI" || "$APP" == "Unmanic" || "$APP" == "Ollama" || "$APP" == "FileFlows" ]]; then - if [[ -e "/dev/dri/renderD128" ]]; then - if [[ -e "/dev/dri/card0" ]]; then - cat <>"$LXC_CONFIG" -# VAAPI hardware transcoding -dev0: /dev/dri/card0,gid=44 -dev1: /dev/dri/renderD128,gid=104 -EOF - else - cat <>"$LXC_CONFIG" -# VAAPI hardware transcoding -dev0: /dev/dri/card1,gid=44 -dev1: /dev/dri/renderD128,gid=104 -EOF + done + + if ([ "$CT_TYPE" == "0" ] || [ "$is_vaapi_app" == "true" ]) && + ([[ -e /dev/dri/renderD128 ]] || [[ -e /dev/dri/card0 ]] || [[ -e /dev/fb0 ]]); then + + echo "" + msg_custom "⚙️ " "\e[96m" "Configuring VAAPI passthrough for LXC container" + + if [ "$CT_TYPE" != "0" ]; then + msg_custom "⚠️ " "\e[33m" "Container is unprivileged – VAAPI passthrough may not work without additional host configuration (e.g., idmap)." + fi + + msg_custom "ℹ️ " "\e[96m" "VAAPI enables GPU hardware acceleration (e.g., for video transcoding in Jellyfin or Plex)." + + echo "" + read -rp "➤ Automatically mount all available VAAPI devices? [Y/n]: " VAAPI_ALL + + if [[ "$VAAPI_ALL" =~ ^[Yy]$|^$ ]]; then + # Mount all devices automatically + if [[ -e /dev/dri/renderD128 ]]; then + echo "lxc.cgroup2.devices.allow: c 226:128 rwm" >>"$LXC_CONFIG" + echo "lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file" >>"$LXC_CONFIG" + fi + if [[ -e /dev/dri/card0 ]]; then + echo "lxc.cgroup2.devices.allow: c 226:0 rwm" >>"$LXC_CONFIG" + + echo "lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file" >>"$LXC_CONFIG" + fi + if [[ -e /dev/fb0 ]]; then + echo "lxc.cgroup2.devices.allow: c 29:0 rwm" >>"$LXC_CONFIG" + echo "lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file" >>"$LXC_CONFIG" + fi + if [[ -d /dev/dri ]]; then + echo "lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir" >>"$LXC_CONFIG" + fi + else + # Manual selection per device + if [[ -e /dev/dri/renderD128 ]]; then + read -rp "➤ Mount /dev/dri/renderD128 (GPU rendering)? [y/N]: " MOUNT_D128 + if [[ "$MOUNT_D128" =~ ^[Yy]$ ]]; then + echo "lxc.cgroup2.devices.allow: c 226:128 rwm" >>"$LXC_CONFIG" + echo "lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file" >>"$LXC_CONFIG" fi fi + + if [[ -e /dev/dri/card0 ]]; then + read -rp "➤ Mount /dev/dri/card0 (GPU hardware interface)? [y/N]: " MOUNT_CARD0 + if [[ "$MOUNT_CARD0" =~ ^[Yy]$ ]]; then + echo "lxc.cgroup2.devices.allow: c 226:0 rwm" >>"$LXC_CONFIG" + echo "lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file" >>"$LXC_CONFIG" + + fi + fi + + if [[ -e /dev/fb0 ]]; then + read -rp "➤ Mount /dev/fb0 (Framebuffer, GUI)? [y/N]: " MOUNT_FB0 + if [[ "$MOUNT_FB0" =~ ^[Yy]$ ]]; then + echo "lxc.cgroup2.devices.allow: c 29:0 rwm" >>"$LXC_CONFIG" + echo "lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file" >>"$LXC_CONFIG" + fi + fi + + if [[ -d /dev/dri ]]; then + echo "lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir" >>"$LXC_CONFIG" + fi fi fi + # TUN device passthrough if [ "$ENABLE_TUN" == "yes" ]; then cat <>"$LXC_CONFIG" lxc.cgroup2.devices.allow: c 10:200 rwm @@ -1172,10 +1233,13 @@ EOF' locale-gen >/dev/null && \ export LANG=\$locale_line" + if [[ -z "${tz:-}" ]]; then + tz=$(timedatectl show --property=Timezone --value 2>/dev/null || echo "Etc/UTC") + fi if pct exec "$CTID" -- test -e "/usr/share/zoneinfo/$tz"; then - pct exec "$CTID" -- bash -c "echo $tz >/etc/timezone && ln -sf /usr/share/zoneinfo/$tz /etc/localtime" + pct exec "$CTID" -- bash -c "tz='$tz'; echo \"\$tz\" >/etc/timezone && ln -sf \"/usr/share/zoneinfo/\$tz\" /etc/localtime" else - msg_info "Skipping timezone setup – zone '$tz' not found in container" + msg_warn "Skipping timezone setup – zone '$tz' not found in container" fi pct exec "$CTID" -- bash -c "apt-get update >/dev/null && apt-get install -y sudo curl mc gnupg2 >/dev/null" @@ -1255,7 +1319,9 @@ api_exit_script() { fi } -trap 'api_exit_script' EXIT +if command -v pveversion >/dev/null 2>&1; then + trap 'api_exit_script' EXIT +fi trap 'post_update_to_api "failed" "$BASH_COMMAND"' ERR trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM diff --git a/misc/core.func b/misc/core.func index 1a904f9ab..9b0c128af 100644 --- a/misc/core.func +++ b/misc/core.func @@ -1,30 +1,6 @@ # Copyright (c) 2021-2025 community-scripts ORG # License: MIT | https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/LICENSE -# if ! declare -f wait_for >/dev/null; then -# echo "[DEBUG] Undefined function 'wait_for' used from: ${BASH_SOURCE[*]}" >&2 -# wait_for() { -# echo "[DEBUG] Fallback: wait_for called with: $*" >&2 -# true -# } -# fi - -trap 'on_error $? $LINENO' ERR -trap 'on_exit' EXIT -trap 'on_interrupt' INT -trap 'on_terminate' TERM - -if ! declare -f wait_for >/dev/null; then - wait_for() { - true - } -fi - -declare -A MSG_INFO_SHOWN=() -SPINNER_PID="" -SPINNER_ACTIVE=0 -SPINNER_MSG="" - # ------------------------------------------------------------------------------ # Loads core utility groups once (colors, formatting, icons, defaults). # ------------------------------------------------------------------------------ @@ -43,100 +19,51 @@ load_functions() { # add more } -on_error() { - local exit_code="$1" - local lineno="$2" +# ============================================================================ +# Error & Signal Handling – robust, universal, subshell-safe +# ============================================================================ - stop_spinner - - case "$exit_code" in - 1) msg_error "Generic error occurred (line $lineno)" ;; - 2) msg_error "Shell misuse (line $lineno)" ;; - 126) msg_error "Command cannot execute (line $lineno)" ;; - 127) msg_error "Command not found (line $lineno)" ;; - 128) msg_error "Invalid exit argument (line $lineno)" ;; - 130) msg_error "Script aborted by user (CTRL+C)" ;; - 143) msg_error "Script terminated by SIGTERM" ;; - *) msg_error "Script failed at line $lineno with exit code $exit_code" ;; - esac - - exit "$exit_code" -} - -on_exit() { - cleanup_spinner || true - [[ "${VERBOSE:-no}" == "yes" ]] && msg_info "Script exited" -} - -on_interrupt() { - msg_error "Interrupted by user (CTRL+C)" - exit 130 -} - -on_terminate() { - msg_error "Terminated by signal (TERM)" - exit 143 -} - -setup_trap_abort_handling() { - trap '__handle_signal_abort SIGINT' SIGINT - trap '__handle_signal_abort SIGTERM' SIGTERM - trap '__handle_unexpected_error $?' ERR -} - -__handle_signal_abort() { - local signal="$1" - echo - [ -n "${SPINNER_PID:-}" ] && kill "$SPINNER_PID" 2>/dev/null && wait "$SPINNER_PID" 2>/dev/null - - case "$signal" in - SIGINT) - msg_error "Script aborted by user (CTRL+C)" - exit 130 +_tool_error_hint() { + local cmd="$1" + local code="$2" + case "$cmd" in + curl) + case "$code" in + 6) echo "Curl: Could not resolve host (DNS problem)" ;; + 7) echo "Curl: Failed to connect to host (connection refused)" ;; + 22) echo "Curl: HTTP error (404/403 etc)" ;; + 28) echo "Curl: Operation timeout" ;; + *) echo "Curl: Unknown error ($code)" ;; + esac ;; - SIGTERM) - msg_error "Script terminated (SIGTERM)" - exit 143 + wget) + echo "Wget failed – URL unreachable or permission denied" ;; - *) - msg_error "Script interrupted (unknown signal: $signal)" - exit 1 + systemctl) + echo "Systemd unit failure – check service name and permissions" ;; + jq) + echo "jq parse error – malformed JSON or missing key" + ;; + mariadb | mysql) + echo "MySQL/MariaDB command failed – check credentials or DB" + ;; + unzip) + echo "unzip failed – corrupt file or missing permission" + ;; + tar) + echo "tar failed – invalid format or missing binary" + ;; + node | npm | pnpm | yarn) + echo "Node tool failed – check version compatibility or package.json" + ;; + *) echo "" ;; esac } -__handle_unexpected_error() { - local exit_code="$1" - echo - [ -n "${SPINNER_PID:-}" ] && kill "$SPINNER_PID" 2>/dev/null && wait "$SPINNER_PID" 2>/dev/null - - case "$exit_code" in - 1) - msg_error "Generic error occurred (exit code 1)" - ;; - 2) - msg_error "Misuse of shell builtins (exit code 2)" - ;; - 126) - msg_error "Command invoked cannot execute (exit code 126)" - ;; - 127) - msg_error "Command not found (exit code 127)" - ;; - 128) - msg_error "Invalid exit argument (exit code 128)" - ;; - 130) - msg_error "Script aborted by user (CTRL+C)" - ;; - 143) - msg_error "Script terminated by SIGTERM" - ;; - *) - msg_error "Unexpected error occurred (exit code $exit_code)" - ;; - esac - exit "$exit_code" +catch_errors() { + set -Eeuo pipefail + trap 'error_handler $LINENO "$BASH_COMMAND"' ERR } # ------------------------------------------------------------------------------ @@ -153,6 +80,13 @@ color() { CL=$(echo "\033[m") } +# Special for spinner and colorized output via printf +color_spinner() { + CS_YW=$'\033[33m' + CS_YWB=$'\033[93m' + CS_CL=$'\033[m' +} + # ------------------------------------------------------------------------------ # Defines formatting helpers like tab, bold, and line reset sequences. # ------------------------------------------------------------------------------ @@ -196,6 +130,7 @@ icons() { ADVANCED="${TAB}🧩${TAB}${CL}" FUSE="${TAB}🗂️${TAB}${CL}" HOURGLASS="${TAB}⏳${TAB}" + } # ------------------------------------------------------------------------------ @@ -227,7 +162,7 @@ silent() { # Function to download & save header files get_header() { local app_name=$(echo "${APP,,}" | tr -d ' ') - local app_type=${APP_TYPE:-ct} # Default 'ct' + local app_type=${APP_TYPE:-ct} local header_url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/${app_type}/headers/${app_name}" local local_header_path="/usr/local/community-scripts/headers/${app_type}/${app_name}" @@ -257,77 +192,39 @@ header_info() { fi } -# ------------------------------------------------------------------------------ -# Performs a curl request with retry logic and inline feedback. -# ------------------------------------------------------------------------------ - -run_curl() { - if [ "$VERBOSE" = "no" ]; then - $STD curl "$@" - else - curl "$@" +ensure_tput() { + if ! command -v tput >/dev/null 2>&1; then + if grep -qi 'alpine' /etc/os-release; then + apk add --no-cache ncurses >/dev/null 2>&1 + elif command -v apt-get >/dev/null 2>&1; then + apt-get update -qq >/dev/null + apt-get install -y -qq ncurses-bin >/dev/null 2>&1 + fi fi } -curl_handler() { - set +e - trap 'set -e' RETURN - local args=() - local url="" - local max_retries=3 - local delay=2 - local attempt=1 - local exit_code - local has_output_file=false - local result="" +is_alpine() { + local os_id="${var_os:-${PCT_OSTYPE:-}}" - # Parse arguments - for arg in "$@"; do - if [[ "$arg" != -* && -z "$url" ]]; then - url="$arg" - fi - [[ "$arg" == "-o" || "$arg" == --output ]] && has_output_file=true - args+=("$arg") - done - - if [[ -z "$url" ]]; then - msg_error "No valid URL or option entered for curl_handler" - return 1 + if [[ -z "$os_id" && -f /etc/os-release ]]; then + os_id="$( + . /etc/os-release 2>/dev/null + echo "${ID:-}" + )" fi - $STD msg_info "Fetching: $url" + [[ "$os_id" == "alpine" ]] +} - while [[ $attempt -le $max_retries ]]; do - if $has_output_file; then - $STD run_curl "${args[@]}" - exit_code=$? - else - result=$(run_curl "${args[@]}") - exit_code=$? - fi - - if [[ $exit_code -eq 0 ]]; then - $STD msg_ok "Fetched: $url" - $has_output_file || printf '%s' "$result" - return 0 - fi - - if ((attempt >= max_retries)); then - # Read error log if it exists - if [ -s /tmp/curl_error.log ]; then - local curl_stderr - curl_stderr=$(&2 - sleep "$delay" - ((attempt++)) - done - set -e +is_verbose_mode() { + local verbose="${VERBOSE:-${var_verbose:-no}}" + local tty_status + if [[ -t 2 ]]; then + tty_status="interactive" + else + tty_status="not-a-tty" + fi + [[ "$verbose" != "no" || ! -t 2 ]] } # ------------------------------------------------------------------------------ @@ -372,144 +269,93 @@ fatal() { kill -INT $$ } -# Ensure POSIX compatibility across Alpine and Debian/Ubuntu -# === Spinner Start === -# Trap cleanup on various signals -trap 'cleanup_spinner' EXIT INT TERM HUP - -spinner_frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏') - -# === Spinner Start === -start_spinner() { - local msg="$1" - local spin_i=0 - local interval=0.1 - - stop_spinner - SPINNER_MSG="$msg" - SPINNER_ACTIVE=1 - - { - while [[ "$SPINNER_ACTIVE" -eq 1 ]]; do - if [[ -t 2 ]]; then - printf "\r\e[2K%s %b" "${TAB}${spinner_frames[spin_i]}${TAB}" "${YW}${SPINNER_MSG}${CL}" >&2 - else - printf "%s...\n" "$SPINNER_MSG" >&2 - break - fi - spin_i=$(((spin_i + 1) % ${#spinner_frames[@]})) - sleep "$interval" - done - } & - - local pid=$! - if ps -p "$pid" >/dev/null 2>&1; then - SPINNER_PID="$pid" - else - SPINNER_ACTIVE=0 - SPINNER_PID="" - fi +spinner() { + local chars=(⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏) + local i=0 + while true; do + local index=$((i++ % ${#chars[@]})) + printf "\r\033[2K%s %b" "${CS_YWB}${chars[$index]}${CS_CL}" "${CS_YWB}${SPINNER_MSG:-}${CS_CL}" + sleep 0.1 + done +} + +clear_line() { + tput cr 2>/dev/null || echo -en "\r" + tput el 2>/dev/null || echo -en "\033[K" } -# === Spinner Stop === stop_spinner() { - if [[ "$SPINNER_ACTIVE" -eq 1 && -n "$SPINNER_PID" ]]; then - SPINNER_ACTIVE=0 + local pid="${SPINNER_PID:-}" + [[ -z "$pid" && -f /tmp/.spinner.pid ]] && pid=$(/dev/null; then - kill "$SPINNER_PID" 2>/dev/null || true - for _ in $(seq 1 10); do - sleep 0.05 - kill -0 "$SPINNER_PID" 2>/dev/null || break - done + if [[ -n "$pid" && "$pid" =~ ^[0-9]+$ ]]; then + if kill "$pid" 2>/dev/null; then + sleep 0.05 + kill -9 "$pid" 2>/dev/null || true + wait "$pid" 2>/dev/null || true fi - - if [[ "$SPINNER_PID" =~ ^[0-9]+$ ]]; then - ps -p "$SPINNER_PID" -o pid= >/dev/null 2>&1 && wait "$SPINNER_PID" 2>/dev/null || true - fi - - printf "\r\e[2K" >&2 - SPINNER_PID="" + rm -f /tmp/.spinner.pid fi -} -cleanup_spinner() { - stop_spinner + unset SPINNER_PID SPINNER_MSG + stty sane 2>/dev/null || true } msg_info() { local msg="$1" - [[ -z "$msg" || -n "${MSG_INFO_SHOWN["$msg"]+x}" ]] && return + [[ -z "$msg" ]] && return + + if ! declare -p MSG_INFO_SHOWN &>/dev/null || ! declare -A MSG_INFO_SHOWN &>/dev/null; then + declare -gA MSG_INFO_SHOWN=() + fi + [[ -n "${MSG_INFO_SHOWN["$msg"]+x}" ]] && return MSG_INFO_SHOWN["$msg"]=1 stop_spinner + SPINNER_MSG="$msg" - if [[ "${VERBOSE:-no}" == "no" && -t 2 ]]; then - start_spinner "$msg" - else + if is_verbose_mode || is_alpine; then + local HOURGLASS="${TAB}⏳${TAB}" printf "\r\e[2K%s %b" "$HOURGLASS" "${YW}${msg}${CL}" >&2 + return fi + + color_spinner + spinner & + SPINNER_PID=$! + echo "$SPINNER_PID" >/tmp/.spinner.pid + disown "$SPINNER_PID" 2>/dev/null || true } msg_ok() { local msg="$1" [[ -z "$msg" ]] && return stop_spinner - printf "\r\e[2K%s %b\n" "$CM" "${GN}${msg}${CL}" >&2 + clear_line + printf "%s %b\n" "$CM" "${GN}${msg}${CL}" >&2 unset MSG_INFO_SHOWN["$msg"] } msg_error() { - local msg="$1" - [[ -z "$msg" ]] && return stop_spinner - printf "\r\e[2K%s %b\n" "$CROSS" "${RD}${msg}${CL}" >&2 + local msg="$1" + echo -e "${BFR:-} ${CROSS:-✖️} ${RD}${msg}${CL}" } msg_warn() { - local msg="$1" - [[ -z "$msg" ]] && return stop_spinner - printf "\r\e[2K%s %b\n" "$INFO" "${YWB}${msg}${CL}" >&2 - unset MSG_INFO_SHOWN["$msg"] + local msg="$1" + echo -e "${BFR:-} ${INFO:-ℹ️} ${YWB}${msg}${CL}" } msg_custom() { local symbol="${1:-"[*]"}" - local color="${2:-"\e[36m"}" # Default: Cyan + local color="${2:-"\e[36m"}" local msg="${3:-}" - [[ -z "$msg" ]] && return - stop_spinner 2>/dev/null || true - printf "\r\e[2K%s %b\n" "$symbol" "${color}${msg}${CL:-\e[0m}" >&2 -} - -msg_progress() { - local current="$1" - local total="$2" - local label="$3" - local width=40 - local filled percent bar empty - local fill_char="#" - local empty_char="-" - - if ! [[ "$current" =~ ^[0-9]+$ ]] || ! [[ "$total" =~ ^[0-9]+$ ]] || [[ "$total" -eq 0 ]]; then - printf "\r\e[2K%s %b\n" "$CROSS" "${RD}Invalid progress input${CL}" >&2 - return - fi - - percent=$(((current * 100) / total)) - filled=$(((current * width) / total)) - empty=$((width - filled)) - - bar=$(printf "%${filled}s" | tr ' ' "$fill_char") - bar+=$(printf "%${empty}s" | tr ' ' "$empty_char") - - printf "\r\e[2K%s [%s] %3d%% %s" "${TAB}" "$bar" "$percent" "$label" >&2 - - if [[ "$current" -eq "$total" ]]; then - printf "\n" >&2 - fi + stop_spinner + echo -e "${BFR:-} ${symbol} ${color}${msg}${CL:-\e[0m}" + printf "\r\033[K\e[?25h\n" } run_container_safe() { @@ -560,3 +406,5 @@ check_or_create_swap() { return 1 fi } + +trap 'stop_spinner' EXIT INT TERM diff --git a/misc/create_lxc.sh b/misc/create_lxc.sh index 2fce5b826..21f1a5123 100644 --- a/misc/create_lxc.sh +++ b/misc/create_lxc.sh @@ -21,36 +21,67 @@ fi # This sets error handling options and defines the error_handler function to handle errors set -Eeuo pipefail trap 'error_handler $LINENO "$BASH_COMMAND"' ERR +trap on_exit EXIT +trap on_interrupt INT +trap on_terminate TERM + +function on_exit() { + local exit_code="$?" + [[ -n "${lockfile:-}" && -e "$lockfile" ]] && rm -f "$lockfile" + exit "$exit_code" +} -# This function handles errors function error_handler() { - printf "\e[?25h" + local exit_code="$?" local line_number="$1" local command="$2" - local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}" - echo -e "\n$error_message\n" - exit 200 + printf "\e[?25h" + echo -e "\n${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}\n" + exit "$exit_code" +} + +function on_interrupt() { + echo -e "\n${RD}Interrupted by user (SIGINT)${CL}" + exit 130 +} + +function on_terminate() { + echo -e "\n${RD}Terminated by signal (SIGTERM)${CL}" + exit 143 +} + +function check_storage_support() { + local CONTENT="$1" + local -a VALID_STORAGES=() + + while IFS= read -r line; do + local STORAGE=$(awk '{print $1}' <<<"$line") + [[ "$STORAGE" == "storage" || -z "$STORAGE" ]] && continue + VALID_STORAGES+=("$STORAGE") + done < <(pvesm status -content "$CONTENT" 2>/dev/null | awk 'NR>1') + + [[ ${#VALID_STORAGES[@]} -gt 0 ]] } # This checks for the presence of valid Container Storage and Template Storage locations msg_info "Validating Storage" -VALIDCT=$(pvesm status -content rootdir | awk 'NR>1') -if [ -z "$VALIDCT" ]; then - msg_error "Unable to detect a valid Container Storage location." +if ! check_storage_support "rootdir"; then + + msg_error "No valid storage found for 'rootdir' (Container)." exit 1 fi -VALIDTMP=$(pvesm status -content vztmpl | awk 'NR>1') -if [ -z "$VALIDTMP" ]; then - msg_error "Unable to detect a valid Template Storage location." +if ! check_storage_support "vztmpl"; then + + msg_error "No valid storage found for 'vztmpl' (Template)." exit 1 fi +msg_ok "Validated Storage (rootdir / vztmpl)." # This function is used to select the storage class and determine the corresponding storage content type and label. function select_storage() { - local CLASS=$1 - local CONTENT - local CONTENT_LABEL + local CLASS=$1 CONTENT CONTENT_LABEL + case $CLASS in container) CONTENT='rootdir' @@ -60,50 +91,74 @@ function select_storage() { CONTENT='vztmpl' CONTENT_LABEL='Container template' ;; - *) false || { - msg_error "Invalid storage class." - exit 201 - } ;; + iso) + CONTENT='iso' + CONTENT_LABEL='ISO image' + ;; + images) + CONTENT='images' + CONTENT_LABEL='VM Disk image' + ;; + backup) + CONTENT='backup' + CONTENT_LABEL='Backup' + ;; + snippets) + CONTENT='snippets' + CONTENT_LABEL='Snippets' + ;; + *) + msg_error "Invalid storage class '$CLASS'" + return 1 + ;; esac - # Collect storage options local -a MENU - local MSG_MAX_LENGTH=0 - - while read -r TAG TYPE _ _ _ FREE _; do - local TYPE_PADDED - local FREE_FMT - - TYPE_PADDED=$(printf "%-10s" "$TYPE") - FREE_FMT=$(numfmt --to=iec --from-unit=K --format %.2f <<<"$FREE")B - local ITEM="Type: $TYPE_PADDED Free: $FREE_FMT" - - ((${#ITEM} + 2 > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=$((${#ITEM} + 2)) - - MENU+=("$TAG" "$ITEM" "OFF") + local -A STORAGE_MAP + local COL_WIDTH=0 + while read -r TAG TYPE _ TOTAL USED FREE _; do + [[ -n "$TAG" && -n "$TYPE" ]] || continue + local DISPLAY="${TAG} (${TYPE})" + local USED_FMT=$(numfmt --to=iec --from-unit=K --format %.1f <<<"$USED") + local FREE_FMT=$(numfmt --to=iec --from-unit=K --format %.1f <<<"$FREE") + local INFO="Free: ${FREE_FMT}B Used: ${USED_FMT}B" + STORAGE_MAP["$DISPLAY"]="$TAG" + MENU+=("$DISPLAY" "$INFO" "OFF") + ((${#DISPLAY} > COL_WIDTH)) && COL_WIDTH=${#DISPLAY} done < <(pvesm status -content "$CONTENT" | awk 'NR>1') - local OPTION_COUNT=$((${#MENU[@]} / 3)) + if [ ${#MENU[@]} -eq 0 ]; then + msg_error "No storage found for content type '$CONTENT'." + return 2 + fi + + if [ $((${#MENU[@]} / 3)) -eq 1 ]; then + STORAGE_RESULT="${STORAGE_MAP[${MENU[0]}]}" - # Auto-select if only one option available - if [[ "$OPTION_COUNT" -eq 1 ]]; then - echo "${MENU[0]}" return 0 fi - # Display selection menu - local STORAGE - while [[ -z "${STORAGE:+x}" ]]; do - STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ - "Select the storage pool to use for the ${CONTENT_LABEL,,}.\nUse the spacebar to make a selection.\n" \ - 16 $((MSG_MAX_LENGTH + 23)) 6 \ - "${MENU[@]}" 3>&1 1>&2 2>&3) || { - msg_error "Storage selection cancelled." - exit 202 - } - done + local WIDTH=$((COL_WIDTH + 42)) - echo "$STORAGE" + while true; do + local DISPLAY_SELECTED=$( + whiptail --backtitle "Proxmox VE Helper Scripts" \ + --title "Storage Pools" \ + --radiolist "Which storage pool for ${CONTENT_LABEL,,}?\n(Spacebar to select)" + + 16 "$WIDTH" 6 "${MENU[@]}" 3>&1 1>&2 2>&3 + ) + + [[ $? -ne 0 ]] && return 3 + + if [[ -z "$DISPLAY_SELECTED" || -z "${STORAGE_MAP[$DISPLAY_SELECTED]+_}" ]]; then + whiptail --msgbox "No valid storage selected. Please try again." 8 58 + continue + fi + + STORAGE_RESULT="${STORAGE_MAP[$DISPLAY_SELECTED]}" + return 0 + done } # Test if required variables are set [[ "${CTID:-}" ]] || { @@ -137,6 +192,19 @@ msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage." CONTAINER_STORAGE=$(select_storage container) msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage." +while true; do + if select_storage template; then + TEMPLATE_STORAGE="$STORAGE_RESULT" + break + fi +done + +while true; do + if select_storage container; then + CONTAINER_STORAGE="$STORAGE_RESULT" + break + fi +done # Check free space on selected container storage STORAGE_FREE=$(pvesm status | awk -v s="$CONTAINER_STORAGE" '$1 == s { print $6 }') REQUIRED_KB=$((${PCT_DISK_SIZE:-8} * 1024 * 1024)) @@ -205,6 +273,8 @@ if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE" || ! zstdcat "$TEMPLAT fi msg_ok "LXC Template '$TEMPLATE' is ready to use." + +msg_info "Creating LXC Container" # Check and fix subuid/subgid grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >>/etc/subuid grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >>/etc/subgid @@ -215,12 +285,15 @@ PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}}) # Secure creation of the LXC container with lock and template check lockfile="/tmp/template.${TEMPLATE}.lock" -exec 9>"$lockfile" +exec 9>"$lockfile" >/dev/null 2>&1 || { + msg_error "Failed to create lock file '$lockfile'." + exit 200 +} flock -w 60 9 || { msg_error "Timeout while waiting for template lock" exit 211 } -msg_info "Creating LXC Container" + if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then msg_error "Container creation failed. Checking if template is corrupted or incomplete." @@ -252,16 +325,23 @@ if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[ sleep 1 # I/O-Sync-Delay msg_ok "Re-downloaded LXC Template" +fi - if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then - msg_error "Container creation failed after re-downloading template." - exit 200 +if ! pct list | awk '{print $1}' | grep -qx "$CTID"; then + msg_error "Container ID $CTID not listed in 'pct list' – unexpected failure." + exit 215 +fi + +if ! grep -q '^rootfs:' "/etc/pve/lxc/$CTID.conf"; then + msg_error "RootFS entry missing in container config – storage not correctly assigned." + exit 216 +fi + +if grep -q '^hostname:' "/etc/pve/lxc/$CTID.conf"; then + CT_HOSTNAME=$(grep '^hostname:' "/etc/pve/lxc/$CTID.conf" | awk '{print $2}') + if [[ ! "$CT_HOSTNAME" =~ ^[a-z0-9-]+$ ]]; then + msg_warn "Hostname '$CT_HOSTNAME' contains invalid characters – may cause issues with networking or DNS." fi fi -if ! pct status "$CTID" &>/dev/null; then - msg_error "Container not found after pct create – assuming failure." - exit 210 -fi - msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created." diff --git a/misc/install.func b/misc/install.func index 6ec040a1c..4dac430a4 100644 --- a/misc/install.func +++ b/misc/install.func @@ -61,8 +61,7 @@ setting_up_container() { fi rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED systemctl disable -q --now systemd-networkd-wait-online.service - msg_ok "Set up Container OS" - msg_custom "${CM}" "${GN}" "Network Connected: ${BL}$(hostname -I)" + msg_ok "Set up Container OS | Network Connected: ${BL}$(hostname -I" } # This function checks the network connection by pinging a known IP address and prompts the user to continue if the internet is not connected @@ -100,25 +99,26 @@ network_check() { fi # DNS resolution checks for GitHub-related domains (IPv4 and/or IPv6) - GITHUB_HOSTS=("github.com" "raw.githubusercontent.com" "api.github.com") - GITHUB_STATUS="GitHub DNS:" + GIT_HOSTS=("github.com" "raw.githubusercontent.com" "api.github.com" "git.community-scripts.org") + GIT_STATUS="Git DNS:" DNS_FAILED=false - for HOST in "${GITHUB_HOSTS[@]}"; do + for HOST in "${GIT_HOSTS[@]}"; do RESOLVEDIP=$(getent hosts "$HOST" | awk '{ print $1 }' | grep -E '(^([0-9]{1,3}\.){3}[0-9]{1,3}$)|(^[a-fA-F0-9:]+$)' | head -n1) if [[ -z "$RESOLVEDIP" ]]; then - GITHUB_STATUS+="$HOST:($DNSFAIL)" + GIT_STATUS+="$HOST:($DNSFAIL)" DNS_FAILED=true else - GITHUB_STATUS+=" $HOST:($DNSOK)" + GIT_STATUS+=" $HOST:($DNSOK)" fi done if [[ "$DNS_FAILED" == true ]]; then - fatal "$GITHUB_STATUS" + fatal "$GIT_STATUS" else - msg_ok "$GITHUB_STATUS" + msg_ok "$GIT_STATUS" fi + set -e trap 'error_handler $LINENO "$BASH_COMMAND"' ERR } diff --git a/misc/tools.func b/misc/tools.func index 2da38b4d8..d060740bf 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -239,10 +239,14 @@ setup_mariadb() { DISTRO_CODENAME="$(awk -F= '/^VERSION_CODENAME=/{print $2}' /etc/os-release)" CURRENT_OS="$(awk -F= '/^ID=/{print $2}' /etc/os-release)" + if ! curl -fsI http://mirror.mariadb.org/repo/ >/dev/null; then + msg_error "MariaDB mirror not reachable" + return 1 + fi + msg_info "Setting up MariaDB $MARIADB_VERSION" # grab dynamic latest LTS version if [[ "$MARIADB_VERSION" == "latest" ]]; then - $STD msg_info "Resolving latest GA MariaDB version" MARIADB_VERSION=$(curl -fsSL http://mirror.mariadb.org/repo/ | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+/' | grep -vE 'rc/|rolling/' | @@ -253,7 +257,6 @@ setup_mariadb() { msg_error "Could not determine latest GA MariaDB version" return 1 fi - $STD msg_ok "Latest GA MariaDB version is $MARIADB_VERSION" fi local CURRENT_VERSION="" @@ -278,7 +281,6 @@ setup_mariadb() { $STD msg_info "Setup MariaDB $MARIADB_VERSION" fi - $STD msg_info "Setting up MariaDB Repository" curl -fsSL "https://mariadb.org/mariadb_release_signing_key.asc" | gpg --dearmor -o /etc/apt/trusted.gpg.d/mariadb.gpg From f494e68016b06a6428d4764b87dcd55366fd882b Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 4 Jul 2025 21:43:17 +0200 Subject: [PATCH 045/229] Update create_lxc.sh --- misc/create_lxc.sh | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/misc/create_lxc.sh b/misc/create_lxc.sh index 21f1a5123..32f2207a0 100644 --- a/misc/create_lxc.sh +++ b/misc/create_lxc.sh @@ -116,6 +116,7 @@ function select_storage() { local -a MENU local -A STORAGE_MAP local COL_WIDTH=0 + while read -r TAG TYPE _ TOTAL USED FREE _; do [[ -n "$TAG" && -n "$TYPE" ]] || continue local DISPLAY="${TAG} (${TYPE})" @@ -134,20 +135,15 @@ function select_storage() { if [ $((${#MENU[@]} / 3)) -eq 1 ]; then STORAGE_RESULT="${STORAGE_MAP[${MENU[0]}]}" - return 0 fi local WIDTH=$((COL_WIDTH + 42)) - while true; do - local DISPLAY_SELECTED=$( - whiptail --backtitle "Proxmox VE Helper Scripts" \ - --title "Storage Pools" \ - --radiolist "Which storage pool for ${CONTENT_LABEL,,}?\n(Spacebar to select)" - - 16 "$WIDTH" 6 "${MENU[@]}" 3>&1 1>&2 2>&3 - ) + local DISPLAY_SELECTED=$(whiptail --backtitle "Proxmox VE Helper Scripts" \ + --title "Storage Pools" \ + --radiolist "Which storage pool for ${CONTENT_LABEL,,}?\n(Spacebar to select)" \ + 16 "$WIDTH" 6 "${MENU[@]}" 3>&1 1>&2 2>&3) [[ $? -ne 0 ]] && return 3 @@ -160,6 +156,7 @@ function select_storage() { return 0 done } + # Test if required variables are set [[ "${CTID:-}" ]] || { msg_error "You need to set 'CTID' variable." From 569089cb73cd912e8e8d2a18ef15d118ab133ea9 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 4 Jul 2025 21:47:23 +0200 Subject: [PATCH 046/229] Update create_lxc.sh --- misc/create_lxc.sh | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/misc/create_lxc.sh b/misc/create_lxc.sh index 32f2207a0..1e18fc13f 100644 --- a/misc/create_lxc.sh +++ b/misc/create_lxc.sh @@ -113,7 +113,7 @@ function select_storage() { ;; esac - local -a MENU +local -a MENU local -A STORAGE_MAP local COL_WIDTH=0 @@ -181,13 +181,41 @@ if qm status "$CTID" &>/dev/null || pct status "$CTID" &>/dev/null; then exit 206 fi -# Get template storage -TEMPLATE_STORAGE=$(select_storage template) -msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage." +# DEFAULT_FILE="/usr/local/community-scripts/default_storage" +# if [[ -f "$DEFAULT_FILE" ]]; then +# source "$DEFAULT_FILE" +# if [[ -n "$TEMPLATE_STORAGE" && -n "$CONTAINER_STORAGE" ]]; then +# msg_info "Using default storage configuration from: $DEFAULT_FILE" +# msg_ok "Template Storage: ${BL}$TEMPLATE_STORAGE${CL} ${GN}|${CL} Container Storage: ${BL}$CONTAINER_STORAGE${CL}" +# else +# msg_warn "Default storage file exists but is incomplete – falling back to manual selection" +# TEMPLATE_STORAGE=$(select_storage template) +# msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage." +# CONTAINER_STORAGE=$(select_storage container) +# msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage." +# fi +# else +# # TEMPLATE STORAGE SELECTION +# # Template Storage +# while true; do +# TEMPLATE_STORAGE=$(select_storage template) +# if [[ -n "$TEMPLATE_STORAGE" ]]; then +# msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage." +# break +# fi +# msg_warn "No valid template storage selected. Please try again." +# done -# Get container storage -CONTAINER_STORAGE=$(select_storage container) -msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage." +# while true; do +# CONTAINER_STORAGE=$(select_storage container) +# if [[ -n "$CONTAINER_STORAGE" ]]; then +# msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage." +# break +# fi +# msg_warn "No valid container storage selected. Please try again." +# done + +# fi while true; do if select_storage template; then @@ -202,6 +230,7 @@ while true; do break fi done + # Check free space on selected container storage STORAGE_FREE=$(pvesm status | awk -v s="$CONTAINER_STORAGE" '$1 == s { print $6 }') REQUIRED_KB=$((${PCT_DISK_SIZE:-8} * 1024 * 1024)) @@ -269,8 +298,6 @@ if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE" || ! zstdcat "$TEMPLAT done fi -msg_ok "LXC Template '$TEMPLATE' is ready to use." - msg_info "Creating LXC Container" # Check and fix subuid/subgid grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >>/etc/subuid From 32d6194ade603eeeb89656573d6972c670d05fe9 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 4 Jul 2025 21:54:15 +0200 Subject: [PATCH 047/229] Update install.func --- misc/install.func | 1 + 1 file changed, 1 insertion(+) diff --git a/misc/install.func b/misc/install.func index 4dac430a4..755e9886c 100644 --- a/misc/install.func +++ b/misc/install.func @@ -123,6 +123,7 @@ network_check() { trap 'error_handler $LINENO "$BASH_COMMAND"' ERR } + # This function updates the Container OS by running apt-get update and upgrade update_os() { msg_info "Updating Container OS" From 8882a17b6f5340a521f2729a676918b3c3ecc468 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, 4 Jul 2025 20:54:41 +0100 Subject: [PATCH 048/229] Update CHANGELOG.md (#5711) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 150b213ee..afcad7f59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ All LXC instances created using this repository come pre-installed with Midnight ### 🚀 Updated Scripts + - Core layer refactor: centralized error traps and msg_* consistency [@MickLesk](https://github.com/MickLesk) ([#5705](https://github.com/community-scripts/ProxmoxVE/pull/5705)) + - #### 🐞 Bug Fixes - Outline: Fix sed command for v0.85.0 [@tremor021](https://github.com/tremor021) ([#5688](https://github.com/community-scripts/ProxmoxVE/pull/5688)) From af9475d280400276f489ee8fda30008bf79aae33 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, 4 Jul 2025 20:54:51 +0100 Subject: [PATCH 049/229] Update CHANGELOG.md (#5712) Co-authored-by: github-actions[bot] From 7403470bd7674598d0796a15779c8a694824bf33 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 4 Jul 2025 21:55:35 +0200 Subject: [PATCH 050/229] Update install.func --- misc/install.func | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/misc/install.func b/misc/install.func index 755e9886c..4b1079618 100644 --- a/misc/install.func +++ b/misc/install.func @@ -64,6 +64,7 @@ setting_up_container() { msg_ok "Set up Container OS | Network Connected: ${BL}$(hostname -I" } +# This function checks the network connection by pinging a known IP address and prompts the user to continue if the internet is not connected # This function checks the network connection by pinging a known IP address and prompts the user to continue if the internet is not connected network_check() { set +e @@ -71,6 +72,7 @@ network_check() { ipv4_connected=false ipv6_connected=false sleep 1 + # Check IPv4 connectivity to Google, Cloudflare & Quad9 DNS servers. if ping -c 1 -W 1 1.1.1.1 &>/dev/null || ping -c 1 -W 1 8.8.8.8 &>/dev/null || ping -c 1 -W 1 9.9.9.9 &>/dev/null; then msg_ok "IPv4 Internet Connected" @@ -123,7 +125,6 @@ network_check() { trap 'error_handler $LINENO "$BASH_COMMAND"' ERR } - # This function updates the Container OS by running apt-get update and upgrade update_os() { msg_info "Updating Container OS" From ebfb6a4e34625c9ca5662dd8cdaf5462ec7c4ab8 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 4 Jul 2025 22:07:23 +0200 Subject: [PATCH 051/229] Update install.func --- misc/install.func | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/misc/install.func b/misc/install.func index 4b1079618..2e4aebdc4 100644 --- a/misc/install.func +++ b/misc/install.func @@ -61,7 +61,9 @@ setting_up_container() { fi rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED systemctl disable -q --now systemd-networkd-wait-online.service - msg_ok "Set up Container OS | Network Connected: ${BL}$(hostname -I" + msg_ok "Set up Container OS" + #msg_custom "${CM}" "${GN}" "Network Connected: ${BL}$(hostname -I)" + msg_ok "Network Connected: ${BL}$(hostname -I)" } # This function checks the network connection by pinging a known IP address and prompts the user to continue if the internet is not connected From d2cbfcd69a2a0c571427c97b27adf0c5b8d458d7 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 4 Jul 2025 22:12:37 +0200 Subject: [PATCH 052/229] Update install.func --- misc/install.func | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/misc/install.func b/misc/install.func index 2e4aebdc4..fe0460ffc 100644 --- a/misc/install.func +++ b/misc/install.func @@ -101,30 +101,6 @@ network_check() { exit 1 fi fi - - # DNS resolution checks for GitHub-related domains (IPv4 and/or IPv6) - GIT_HOSTS=("github.com" "raw.githubusercontent.com" "api.github.com" "git.community-scripts.org") - GIT_STATUS="Git DNS:" - DNS_FAILED=false - - for HOST in "${GIT_HOSTS[@]}"; do - RESOLVEDIP=$(getent hosts "$HOST" | awk '{ print $1 }' | grep -E '(^([0-9]{1,3}\.){3}[0-9]{1,3}$)|(^[a-fA-F0-9:]+$)' | head -n1) - if [[ -z "$RESOLVEDIP" ]]; then - GIT_STATUS+="$HOST:($DNSFAIL)" - DNS_FAILED=true - else - GIT_STATUS+=" $HOST:($DNSOK)" - fi - done - - if [[ "$DNS_FAILED" == true ]]; then - fatal "$GIT_STATUS" - else - msg_ok "$GIT_STATUS" - fi - - set -e - trap 'error_handler $LINENO "$BASH_COMMAND"' ERR } # This function updates the Container OS by running apt-get update and upgrade From 3e504cf48f34f497ad192512ded65e29a7357f4e Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 4 Jul 2025 22:19:35 +0200 Subject: [PATCH 053/229] final fixes --- misc/install.func | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/misc/install.func b/misc/install.func index fe0460ffc..2e4aebdc4 100644 --- a/misc/install.func +++ b/misc/install.func @@ -101,6 +101,30 @@ network_check() { exit 1 fi fi + + # DNS resolution checks for GitHub-related domains (IPv4 and/or IPv6) + GIT_HOSTS=("github.com" "raw.githubusercontent.com" "api.github.com" "git.community-scripts.org") + GIT_STATUS="Git DNS:" + DNS_FAILED=false + + for HOST in "${GIT_HOSTS[@]}"; do + RESOLVEDIP=$(getent hosts "$HOST" | awk '{ print $1 }' | grep -E '(^([0-9]{1,3}\.){3}[0-9]{1,3}$)|(^[a-fA-F0-9:]+$)' | head -n1) + if [[ -z "$RESOLVEDIP" ]]; then + GIT_STATUS+="$HOST:($DNSFAIL)" + DNS_FAILED=true + else + GIT_STATUS+=" $HOST:($DNSOK)" + fi + done + + if [[ "$DNS_FAILED" == true ]]; then + fatal "$GIT_STATUS" + else + msg_ok "$GIT_STATUS" + fi + + set -e + trap 'error_handler $LINENO "$BASH_COMMAND"' ERR } # This function updates the Container OS by running apt-get update and upgrade From 3d699316750f99c90b9913ee6b43aa89a286ad94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Fri, 4 Jul 2025 22:24:12 +0200 Subject: [PATCH 054/229] Refactor: Mafl (#5702) * Refactor: Mafl * Update mafl.sh --- ct/mafl.sh | 35 ++++++++++++++++++++++++----------- install/mafl-install.sh | 13 ++++--------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/ct/mafl.sh b/ct/mafl.sh index aafb60b50..2d30c6674 100644 --- a/ct/mafl.sh +++ b/ct/mafl.sh @@ -27,18 +27,31 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi + RELEASE=$(curl -fsSL https://api.github.com/repos/hywax/mafl/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - msg_info "Updating Mafl to v${RELEASE} (Patience)" - systemctl stop mafl - curl -fsSL "https://github.com/hywax/mafl/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/hywax/mafl/archive/refs/tags/v${RELEASE}.tar.gz") - tar -xzf v${RELEASE}.tar.gz - cp -r mafl-${RELEASE}/* /opt/mafl/ - rm -rf mafl-${RELEASE} - cd /opt/mafl - yarn install - yarn build - systemctl start mafl - msg_ok "Updated Mafl to v${RELEASE}" + if [[ "${RELEASE}" != "$(cat ~/.mafl 2>/dev/null)" ]] || [[ ! -f ~/.mafl ]]; then + msg_info "Stopping Mafl service" + systemctl stop mafl + msg_ok "Service stopped" + + msg_info "Performing backup" + mkdir -p /opt/mafl-backup/data + mv /opt/mafl/data /opt/mafl-backup/data + rm /opt/mafl + msg_ok "Backup complete" + + fetch_and_deploy_gh_release "mafl" "hywax/mafl" + + msg_info "Updating Mafl to v${RELEASE}" + cd /opt/mafl + yarn install + yarn build + systemctl start mafl + mv /opt/mafl-backup/data /opt/mafl/data + msg_ok "Updated Mafl to v${RELEASE}" + else + msg_ok "No update required. ${APP} is already at v${RELEASE}" + fi exit } diff --git a/install/mafl-install.sh b/install/mafl-install.sh index 574949dbb..47cf7bbb6 100644 --- a/install/mafl-install.sh +++ b/install/mafl-install.sh @@ -14,22 +14,17 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y make -$STD apt-get install -y g++ -$STD apt-get install -y gcc -$STD apt-get install -y ca-certificates +$STD apt-get install -y \ + ca-certificates \ + build-essential msg_ok "Installed Dependencies" NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs +fetch_and_deploy_gh_release "mafl" "hywax/mafl" -RELEASE=$(curl -fsSL https://api.github.com/repos/hywax/mafl/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') msg_info "Installing Mafl v${RELEASE}" -curl -fsSL "https://github.com/hywax/mafl/archive/refs/tags/v${RELEASE}.tar.gz" -o "v${RELEASE}.tar.gz" -tar -xzf v${RELEASE}.tar.gz mkdir -p /opt/mafl/data curl -fsSL "https://raw.githubusercontent.com/hywax/mafl/main/.example/config.yml" -o "/opt/mafl/data/config.yml" -mv mafl-${RELEASE}/* /opt/mafl -rm -rf mafl-${RELEASE} cd /opt/mafl export NUXT_TELEMETRY_DISABLED=true $STD yarn install From 2b848ff1d8c355e2908a501934b54cbf785fa949 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, 4 Jul 2025 21:24:37 +0100 Subject: [PATCH 055/229] Update CHANGELOG.md (#5714) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index afcad7f59..b308bdb96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,15 +18,18 @@ All LXC instances created using this repository come pre-installed with Midnight ### 🚀 Updated Scripts - - Core layer refactor: centralized error traps and msg_* consistency [@MickLesk](https://github.com/MickLesk) ([#5705](https://github.com/community-scripts/ProxmoxVE/pull/5705)) - - #### 🐞 Bug Fixes + - Refactor: Mafl [@tremor021](https://github.com/tremor021) ([#5702](https://github.com/community-scripts/ProxmoxVE/pull/5702)) - Outline: Fix sed command for v0.85.0 [@tremor021](https://github.com/tremor021) ([#5688](https://github.com/community-scripts/ProxmoxVE/pull/5688)) - Komodo: Update Script to use FerretDB / remove psql & sqlite options [@MickLesk](https://github.com/MickLesk) ([#5690](https://github.com/community-scripts/ProxmoxVE/pull/5690)) - ESPHome: Fix Linking issue to prevent version mismatch [@MickLesk](https://github.com/MickLesk) ([#5685](https://github.com/community-scripts/ProxmoxVE/pull/5685)) - Cloudflare-DDNS: fix unvisible read command at install [@MickLesk](https://github.com/MickLesk) ([#5682](https://github.com/community-scripts/ProxmoxVE/pull/5682)) + - #### ✨ New Features + + - Core layer refactor: centralized error traps and msg_* consistency [@MickLesk](https://github.com/MickLesk) ([#5705](https://github.com/community-scripts/ProxmoxVE/pull/5705)) + - #### 💥 Breaking Changes - Update Iptag [@DesertGamer](https://github.com/DesertGamer) ([#5677](https://github.com/community-scripts/ProxmoxVE/pull/5677)) From 301a23e5f42c2538a6ea62ef21718ecab7fdcc27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Fri, 4 Jul 2025 22:49:36 +0200 Subject: [PATCH 056/229] Update mafl.sh (#5715) --- ct/mafl.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/mafl.sh b/ct/mafl.sh index 2d30c6674..9c6a81dd3 100644 --- a/ct/mafl.sh +++ b/ct/mafl.sh @@ -46,8 +46,8 @@ function update_script() { cd /opt/mafl yarn install yarn build - systemctl start mafl mv /opt/mafl-backup/data /opt/mafl/data + systemctl start mafl msg_ok "Updated Mafl to v${RELEASE}" else msg_ok "No update required. ${APP} is already at v${RELEASE}" From 9128b9dd122cd49fd16cc6df02a29627a55cd651 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, 5 Jul 2025 02:14:40 +0200 Subject: [PATCH 057/229] Update versions.json (#5718) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 70 +++++++++++++++--------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 96058cead..b5c8acc9f 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,39 @@ [ + { + "name": "cross-seed/cross-seed", + "version": "v6.12.7", + "date": "2025-06-18T03:44:24Z" + }, + { + "name": "home-assistant/core", + "version": "2025.7.1", + "date": "2025-07-04T20:02:52Z" + }, + { + "name": "Luligu/matterbridge", + "version": "3.1.1", + "date": "2025-07-04T19:50:37Z" + }, + { + "name": "homarr-labs/homarr", + "version": "v1.27.0", + "date": "2025-07-04T19:16:16Z" + }, + { + "name": "zitadel/zitadel", + "version": "v3.3.0", + "date": "2025-06-12T06:54:48Z" + }, + { + "name": "bunkerity/bunkerweb", + "version": "v1.6.2", + "date": "2025-07-04T15:21:18Z" + }, + { + "name": "kimai/kimai", + "version": "2.37.0", + "date": "2025-07-04T14:49:43Z" + }, { "name": "Graylog2/graylog2-server", "version": "6.3.1", @@ -19,11 +54,6 @@ "version": "v25.2", "date": "2025-07-04T08:21:42Z" }, - { - "name": "bunkerity/bunkerweb", - "version": "v1.6.2", - "date": "2025-07-04T08:43:44Z" - }, { "name": "Checkmk/checkmk", "version": "v2.2.0p44", @@ -119,11 +149,6 @@ "version": "v1.12.2-rc.0", "date": "2025-07-03T00:31:22Z" }, - { - "name": "cross-seed/cross-seed", - "version": "v6.12.7", - "date": "2025-06-18T03:44:24Z" - }, { "name": "emqx/emqx", "version": "v5.8.7", @@ -149,11 +174,6 @@ "version": "v6.2.20", "date": "2025-07-02T04:03:37Z" }, - { - "name": "home-assistant/core", - "version": "2025.7.0", - "date": "2025-07-02T16:23:42Z" - }, { "name": "wazuh/wazuh", "version": "coverity-w27-4.13.0", @@ -299,11 +319,6 @@ "version": "v1.22.5", "date": "2025-06-28T16:06:19Z" }, - { - "name": "Luligu/matterbridge", - "version": "3.1.0", - "date": "2025-06-28T09:02:38Z" - }, { "name": "plexguide/Huntarr.io", "version": "8.1.11", @@ -319,11 +334,6 @@ "version": "v1.5.0", "date": "2025-06-27T22:04:32Z" }, - { - "name": "homarr-labs/homarr", - "version": "v1.26.0", - "date": "2025-06-27T19:15:24Z" - }, { "name": "goauthentik/authentik", "version": "version/2025.6.3", @@ -599,11 +609,6 @@ "version": "2.402", "date": "2025-06-17T05:20:42Z" }, - { - "name": "kimai/kimai", - "version": "2.36.1", - "date": "2025-06-16T19:20:54Z" - }, { "name": "open-webui/open-webui", "version": "v0.6.15", @@ -674,11 +679,6 @@ "version": "v2025-06-12", "date": "2025-06-12T20:59:47Z" }, - { - "name": "zitadel/zitadel", - "version": "v3.3.0", - "date": "2025-06-12T06:54:48Z" - }, { "name": "autobrr/autobrr", "version": "v1.63.1", From 0c98308b60935e53f8114953df2d522f538b528f 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, 5 Jul 2025 01:15:20 +0100 Subject: [PATCH 058/229] Update CHANGELOG.md (#5719) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b308bdb96..e676f5b58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2025-07-05 + ## 2025-07-04 ### 🚀 Updated Scripts From 28ed2da95f8d8cf62e71d51b5baf5123492f0b05 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, 5 Jul 2025 14:07:02 +0200 Subject: [PATCH 059/229] Update versions.json (#5721) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 74 +++++++++++++++--------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index b5c8acc9f..52a6debb4 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,34 @@ [ + { + "name": "fuma-nama/fumadocs", + "version": "fumadocs-openapi@9.0.18", + "date": "2025-07-05T09:36:45Z" + }, + { + "name": "theonedev/onedev", + "version": "v11.11.4", + "date": "2025-07-05T09:23:25Z" + }, + { + "name": "Paymenter/Paymenter", + "version": "v1.2.0", + "date": "2025-07-05T08:58:05Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.2120", + "date": "2025-07-05T05:58:02Z" + }, + { + "name": "linkwarden/linkwarden", + "version": "v2.11.3", + "date": "2025-07-05T04:34:46Z" + }, + { + "name": "steveiliop56/tinyauth", + "version": "v3.4.1", + "date": "2025-06-11T07:53:44Z" + }, { "name": "cross-seed/cross-seed", "version": "v6.12.7", @@ -34,6 +64,11 @@ "version": "2.37.0", "date": "2025-07-04T14:49:43Z" }, + { + "name": "keycloak/keycloak", + "version": "26.3.0", + "date": "2025-07-02T12:26:44Z" + }, { "name": "Graylog2/graylog2-server", "version": "6.3.1", @@ -44,11 +79,6 @@ "version": "preview-v0.1", "date": "2025-06-27T14:35:47Z" }, - { - "name": "theonedev/onedev", - "version": "v11.11.3", - "date": "2025-07-04T09:04:46Z" - }, { "name": "nzbgetcom/nzbget", "version": "v25.2", @@ -64,21 +94,11 @@ "version": "8.2-rc1-int", "date": "2025-07-02T19:27:08Z" }, - { - "name": "Jackett/Jackett", - "version": "v0.22.2117", - "date": "2025-07-04T05:56:05Z" - }, { "name": "hyperion-project/hyperion.ng", "version": "2.1.1", "date": "2025-06-14T17:45:06Z" }, - { - "name": "steveiliop56/tinyauth", - "version": "v3.4.1", - "date": "2025-06-11T07:53:44Z" - }, { "name": "outline/outline", "version": "v0.85.0", @@ -89,11 +109,6 @@ "version": "15.2", "date": "2025-04-14T15:37:12Z" }, - { - "name": "keycloak/keycloak", - "version": "26.3.0", - "date": "2025-07-02T12:26:44Z" - }, { "name": "cloudflare/cloudflared", "version": "2025.7.0", @@ -124,11 +139,6 @@ "version": "18.0.7", "date": "2025-07-03T08:57:21Z" }, - { - "name": "fuma-nama/fumadocs", - "version": "fumadocs-openapi@9.0.17", - "date": "2025-07-03T06:57:48Z" - }, { "name": "esphome/esphome", "version": "2025.6.3", @@ -309,11 +319,6 @@ "version": "0.50.5", "date": "2025-06-29T08:54:47Z" }, - { - "name": "linkwarden/linkwarden", - "version": "v2.11.2", - "date": "2025-06-28T17:33:38Z" - }, { "name": "msgbyte/tianji", "version": "v1.22.5", @@ -446,8 +451,8 @@ }, { "name": "runtipi/runtipi", - "version": "nightly", - "date": "2025-06-23T19:10:33Z" + "version": "v4.2.1", + "date": "2025-06-03T20:04:28Z" }, { "name": "VictoriaMetrics/VictoriaMetrics", @@ -879,11 +884,6 @@ "version": "v25.05.2", "date": "2025-05-17T12:53:29Z" }, - { - "name": "Paymenter/Paymenter", - "version": "v1.1.1", - "date": "2025-05-17T10:10:36Z" - }, { "name": "Ombi-app/Ombi", "version": "v4.47.1", From 16ac51b551511f705185bfaba1dfb7249529a1d1 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, 5 Jul 2025 16:37:54 +0200 Subject: [PATCH 060/229] Fixes (#5726) --- install/agentdvr-install.sh | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/install/agentdvr-install.sh b/install/agentdvr-install.sh index ffd2fabe2..d09912a23 100644 --- a/install/agentdvr-install.sh +++ b/install/agentdvr-install.sh @@ -14,11 +14,12 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y apt-transport-https -$STD apt-get install -y alsa-utils -$STD apt-get install -y libxext-dev -$STD apt-get install -y fontconfig -$STD apt-get install -y libva-drm2 +$STD apt-get install -y \ + apt-transport-https \ + alsa-utils \ + libxext-dev \ + fontconfig \ + libva-drm2 msg_ok "Installed Dependencies" msg_info "Installing AgentDVR" @@ -27,7 +28,6 @@ RELEASE=$(curl -fsSL "https://www.ispyconnect.com/api/Agent/DownloadLocation4?pl cd /opt/agentdvr/agent curl -fsSL "$RELEASE" -o $(basename "$RELEASE") $STD unzip Agent_Linux64*.zip -rm -rf Agent_Linux64*.zip chmod +x ./Agent msg_ok "Installed AgentDVR" @@ -54,6 +54,7 @@ motd_ssh customize msg_info "Cleaning up" +rm -rf Agent_Linux64*.zip $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 1cefb1b8422526e921a4ecbb969cfba5b5d12c64 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, 5 Jul 2025 15:38:19 +0100 Subject: [PATCH 061/229] Update CHANGELOG.md (#5727) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e676f5b58..7864e49cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,12 @@ All LXC instances created using this repository come pre-installed with Midnight ## 2025-07-05 +### 🚀 Updated Scripts + + - #### 🔧 Refactor + + - Refactor: AgentDVR [@tremor021](https://github.com/tremor021) ([#5726](https://github.com/community-scripts/ProxmoxVE/pull/5726)) + ## 2025-07-04 ### 🚀 Updated Scripts From 66a5730288ad328c8bcc783800a6ca344922baa6 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, 5 Jul 2025 18:02:26 +0200 Subject: [PATCH 062/229] Refactor (#5722) --- ct/authelia.sh | 46 ++++++++++++++++++------------------- install/authelia-install.sh | 9 ++------ 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/ct/authelia.sh b/ct/authelia.sh index 2ab3bce03..4dbd69fa2 100644 --- a/ct/authelia.sh +++ b/ct/authelia.sh @@ -22,30 +22,30 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d "/etc/authelia/" ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -fsSL https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - if [[ "${RELEASE}" != "$(/usr/bin/authelia -v | awk '{print substr($3, 2, length($2)) }')" ]]; then - msg_info "Updating $APP to ${RELEASE}" - $STD apt-get update - $STD apt-get -y upgrade - curl -fsSL "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb" -o $(basename "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb") - $STD dpkg -i "authelia_${RELEASE}_amd64.deb" - msg_info "Cleaning Up" - rm -f "authelia_${RELEASE}_amd64.deb" - $STD apt-get -y autoremove - $STD apt-get -y autoclean - msg_ok "Cleanup Completed" - msg_ok "Updated $APP to ${RELEASE}" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi + header_info + check_container_storage + check_container_resources + if [[ ! -d "/etc/authelia/" ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + if [[ "${RELEASE}" != "$(/usr/bin/authelia -v | awk '{print substr($3, 2, length($2)) }')" ]]; then + $STD apt-get update + $STD apt-get -y upgrade + + fetch_and_deploy_gh_release "authelia" "authelia/authelia" "binary" + + msg_info "Cleaning Up" + $STD apt-get -y autoremove + $STD apt-get -y autoclean + msg_ok "Cleanup Completed" + + msg_ok "Updated $APP to ${RELEASE}" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + exit } start diff --git a/install/authelia-install.sh b/install/authelia-install.sh index fb3d348b0..d1e850483 100644 --- a/install/authelia-install.sh +++ b/install/authelia-install.sh @@ -13,13 +13,9 @@ setting_up_container network_check update_os -msg_info "Installing Authelia" -RELEASE=$(curl -fsSL https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -curl -fsSL "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb" -o "authelia_${RELEASE}_amd64.deb" -$STD dpkg -i "authelia_${RELEASE}_amd64.deb" -msg_ok "Install Authelia completed" +fetch_and_deploy_gh_release "authelia" "authelia/authelia" "binary" -read -p "${TAB3}Enter your domain (ex. example.com): " DOMAIN +read -rp "${TAB3}Enter your domain (ex. example.com): " DOMAIN msg_info "Setting Authelia up" touch /etc/authelia/emails.txt @@ -72,7 +68,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -f "authelia_${RELEASE}_amd64.deb" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From f7e9fbc4731b1ff29dc0e8a34817767138621660 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, 5 Jul 2025 17:02:52 +0100 Subject: [PATCH 063/229] Update CHANGELOG.md (#5728) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7864e49cc..2631e6eb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🔧 Refactor + - Refactor: Authelia [@tremor021](https://github.com/tremor021) ([#5722](https://github.com/community-scripts/ProxmoxVE/pull/5722)) - Refactor: AgentDVR [@tremor021](https://github.com/tremor021) ([#5726](https://github.com/community-scripts/ProxmoxVE/pull/5726)) ## 2025-07-04 From e5bea1f49af17906c04554f6034b2d30334de126 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, 5 Jul 2025 18:02:58 +0200 Subject: [PATCH 064/229] Refactor (#5723) --- ct/dashy.sh | 10 +++++----- install/dashy-install.sh | 5 +---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/ct/dashy.sh b/ct/dashy.sh index e841ba7c2..2bd30a1f0 100644 --- a/ct/dashy.sh +++ b/ct/dashy.sh @@ -29,7 +29,7 @@ function update_script() { fi RELEASE=$(curl -fsSL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep '"tag_name":' | cut -d'"' -f4) - if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then + if [[ "${RELEASE}" != "$(cat ~/.dashy 2>/dev/null)" ]] || [[ ! -f ~/.dashy ]]; then msg_info "Stopping ${APP}" systemctl stop dashy msg_ok "Stopped ${APP}" @@ -43,14 +43,13 @@ function update_script() { fi msg_ok "Backed up conf.yml" - msg_info "Updating ${APP} to ${RELEASE}" rm -rf /opt/dashy - mkdir -p /opt/dashy - curl -fsSL "https://github.com/Lissy93/dashy/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz -C /opt/dashy --strip-components=1 + fetch_and_deploy_gh_release "dashy" "Lissy93/dashy" + + msg_info "Updating ${APP} to ${RELEASE}" cd /opt/dashy npm install npm run build - echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated ${APP} to ${RELEASE}" msg_info "Restoring conf.yml" @@ -65,6 +64,7 @@ function update_script() { msg_info "Starting Dashy" systemctl start dashy msg_ok "Started Dashy" + msg_ok "Updated Successfully" else msg_ok "No update required. ${APP} is already at ${RELEASE}" diff --git a/install/dashy-install.sh b/install/dashy-install.sh index 3bda31cfb..a93434585 100644 --- a/install/dashy-install.sh +++ b/install/dashy-install.sh @@ -14,15 +14,12 @@ network_check update_os NODE_VERSION="22" setup_nodejs +fetch_and_deploy_gh_release "dashy" "Lissy93/dashy" -RELEASE=$(curl -fsSL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') msg_info "Installing Dashy ${RELEASE} (Patience)" -mkdir -p /opt/dashy -curl -fsSL "https://github.com/Lissy93/dashy/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz -C /opt/dashy --strip-components=1 cd /opt/dashy $STD npm install $STD npm run build -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt msg_ok "Installed Dashy ${RELEASE}" msg_info "Creating Service" From c2f9737435582231fc768f60038c8b6e4c59547f 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, 5 Jul 2025 17:03:33 +0100 Subject: [PATCH 065/229] Update CHANGELOG.md (#5729) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2631e6eb7..d62098cd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🔧 Refactor + - Refactor: Dashy [@tremor021](https://github.com/tremor021) ([#5723](https://github.com/community-scripts/ProxmoxVE/pull/5723)) - Refactor: Authelia [@tremor021](https://github.com/tremor021) ([#5722](https://github.com/community-scripts/ProxmoxVE/pull/5722)) - Refactor: AgentDVR [@tremor021](https://github.com/tremor021) ([#5726](https://github.com/community-scripts/ProxmoxVE/pull/5726)) From 9072459066315236b6c42f83880153dc1763ffff 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, 5 Jul 2025 18:03:36 +0200 Subject: [PATCH 066/229] Refactor (#5724) --- ct/cryptpad.sh | 78 ++++++++++++++++++------------------- install/cryptpad-install.sh | 13 ++----- 2 files changed, 41 insertions(+), 50 deletions(-) diff --git a/ct/cryptpad.sh b/ct/cryptpad.sh index ebb21fa58..466af1c0c 100644 --- a/ct/cryptpad.sh +++ b/ct/cryptpad.sh @@ -20,48 +20,46 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources + header_info + check_container_storage + check_container_resources - if [[ ! -d "/opt/cryptpad" ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -fsSL https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then - msg_info "Stopping $APP" - systemctl stop cryptpad - msg_ok "Stopped $APP" - - msg_info "Updating $APP to ${RELEASE}" - temp_dir=$(mktemp -d) - cp -f /opt/cryptpad/config/config.js /opt/config.js - curl -fsSL "https://github.com/cryptpad/cryptpad/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_dir/cryptpad-${RELEASE}.tar.gz" - cd "$temp_dir" - tar zxf "cryptpad-${RELEASE}.tar.gz" - cp -rf "cryptpad-${RELEASE}"/* /opt/cryptpad - cd /opt/cryptpad - $STD npm ci - $STD npm run install:components - $STD npm run build - cp -f /opt/config.js /opt/cryptpad/config/config.js - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated $APP to ${RELEASE}" - - msg_info "Cleaning Up" - rm -rf $temp_dir - msg_ok "Cleanup Completed" - - msg_info "Starting $APP" - systemctl start cryptpad - msg_ok "Started $APP" - - msg_ok "Update Successful" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi + if [[ ! -d "/opt/cryptpad" ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + if [[ "${RELEASE}" != "$(cat ~/.cryptpad 2>/dev/null)" ]] || [[ ! -f ~/.cryptpad ]]; then + msg_info "Stopping $APP" + systemctl stop cryptpad + msg_ok "Stopped $APP" + + msg_info "Backing up configuration" + [ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/ + msg_ok "Backed up configuration" + + fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" + + msg_info "Updating $APP to ${RELEASE}" + cd /opt/cryptpad + $STD npm ci + $STD npm run install:components + $STD npm run build + msg_ok "Updated $APP to ${RELEASE}" + + msg_info "Restoring configuration" + mv /opt/config.js /opt/cryptpad/config/ + msg_ok "Configuration restored" + + msg_info "Starting $APP" + systemctl start cryptpad + msg_ok "Started $APP" + + msg_ok "Update Successful" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + exit } start diff --git a/install/cryptpad-install.sh b/install/cryptpad-install.sh index 044c8f3ee..d7615a71b 100644 --- a/install/cryptpad-install.sh +++ b/install/cryptpad-install.sh @@ -14,20 +14,15 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y \ - git +$STD apt-get install -y git msg_ok "Installed Dependencies" NODE_VERSION="22" setup_nodejs -read -p "${TAB3}Install OnlyOffice components instead of CKEditor? (Y/N): " onlyoffice +read -rp "${TAB3}Install OnlyOffice components instead of CKEditor? (Y/N): " onlyoffice +fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" msg_info "Setup ${APPLICATION}" -temp_file=$(mktemp) -RELEASE=$(curl -fsSL https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -curl -fsSL "https://github.com/cryptpad/cryptpad/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_file" -tar zxf $temp_file -mv cryptpad-$RELEASE /opt/cryptpad cd /opt/cryptpad $STD npm ci $STD npm run install:components @@ -39,7 +34,6 @@ sed -i "80s#//httpAddress: 'localhost'#httpAddress: '0.0.0.0'#g" /opt/cryptpad/c if [[ "$onlyoffice" =~ ^[Yy]$ ]]; then $STD bash -c "./install-onlyoffice.sh --accept-license" fi -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt msg_ok "Setup ${APPLICATION}" msg_info "Creating Service" @@ -69,7 +63,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -f $temp_file $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 115b21f72927dee605f80e98fc6dbaf1e13c088e 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, 5 Jul 2025 17:04:31 +0100 Subject: [PATCH 067/229] Update CHANGELOG.md (#5730) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d62098cd2..4929ab14a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🔧 Refactor + - Refactor: CryptPad [@tremor021](https://github.com/tremor021) ([#5724](https://github.com/community-scripts/ProxmoxVE/pull/5724)) - Refactor: Dashy [@tremor021](https://github.com/tremor021) ([#5723](https://github.com/community-scripts/ProxmoxVE/pull/5723)) - Refactor: Authelia [@tremor021](https://github.com/tremor021) ([#5722](https://github.com/community-scripts/ProxmoxVE/pull/5722)) - Refactor: AgentDVR [@tremor021](https://github.com/tremor021) ([#5726](https://github.com/community-scripts/ProxmoxVE/pull/5726)) From cb7d58b9b0d6345d47b874bafadf29614537fdb8 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, 5 Jul 2025 18:15:37 +0200 Subject: [PATCH 068/229] Refactor (#5725) --- ct/bytestash.sh | 80 ++++++++++++++++++------------------ install/bytestash-install.sh | 10 +---- 2 files changed, 42 insertions(+), 48 deletions(-) diff --git a/ct/bytestash.sh b/ct/bytestash.sh index 3d733faeb..bac7f28fc 100644 --- a/ct/bytestash.sh +++ b/ct/bytestash.sh @@ -20,47 +20,47 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/bytestash ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -fsSL https://api.github.com/repos/jordan-dalby/ByteStash/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then - msg_info "Stopping Services" - systemctl stop bytestash-backend - systemctl stop bytestash-frontend - msg_ok "Services Stopped" + header_info + check_container_storage + check_container_resources - msg_info "Updating ${APP} to ${RELEASE}" - temp_file=$(mktemp) -curl -fsSL "https://github.com/jordan-dalby/ByteStash/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" - tar zxf $temp_file - rm -rf /opt/bytestash/server/node_modules - rm -rf /opt/bytestash/client/node_modules - cp -rf ByteStash-${RELEASE}/* /opt/bytestash - cd /opt/bytestash/server - $STD npm install - cd /opt/bytestash/client - $STD npm install - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated ${APP}" - - msg_info "Starting Services" - systemctl start bytestash-backend - systemctl start bytestash-frontend - msg_ok "Started Services" - - msg_info "Cleaning Up" - rm -f $temp_file - msg_ok "Cleaned" - msg_ok "Updated Successfully" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi + if [[ ! -d /opt/bytestash ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/jordan-dalby/ByteStash/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ "${RELEASE}" != "$(cat ~/.bytestash 2>/dev/null)" ]] || [[ ! -f ~/.bytestash ]]; then + + read -rp "${TAB3}Did you make a backup via application WebUI? (y/n): " backuped + if [[ "$backuped" =~ ^[Yy]$ ]]; then + msg_info "Stopping Services" + systemctl stop bytestash-backend + systemctl stop bytestash-frontend + msg_ok "Services Stopped" + + rm -rf /opt/bytestash + fetch_and_deploy_gh_release "bytestash" "jordan-dalby/ByteStash" + + msg_info "Configuring ByteStash" + cd /opt/bytestash/server + $STD npm install + cd /opt/bytestash/client + $STD npm install + msg_ok "Updated ${APP}" + + msg_info "Starting Services" + systemctl start bytestash-backend + systemctl start bytestash-frontend + msg_ok "Started Services" + else + msg_error "PLEASE MAKE A BACKUP FIRST!" + exit + fi + msg_ok "Updated Successfully" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + exit } start @@ -70,4 +70,4 @@ 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}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/install/bytestash-install.sh b/install/bytestash-install.sh index 03689e994..d6e4e393d 100644 --- a/install/bytestash-install.sh +++ b/install/bytestash-install.sh @@ -14,22 +14,17 @@ network_check update_os NODE_VERSION="22" setup_nodejs +fetch_and_deploy_gh_release "bytestash" "jordan-dalby/ByteStash" msg_info "Installing ByteStash" JWT_SECRET=$(openssl rand -base64 32 | tr -d '/+=') -temp_file=$(mktemp) -RELEASE=$(curl -fsSL https://api.github.com/repos/jordan-dalby/ByteStash/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/jordan-dalby/ByteStash/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" -tar zxf $temp_file -mv ByteStash-${RELEASE} /opt/bytestash cd /opt/bytestash/server $STD npm install cd /opt/bytestash/client $STD npm install -echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" msg_ok "Installed ByteStash" -read -p "${TAB3}Do you want to allow registration of multiple accounts? [y/n]: " allowreg +read -rp "${TAB3}Do you want to allow registration of multiple accounts? [y/n]: " allowreg msg_info "Creating Service" cat </etc/systemd/system/bytestash-backend.service @@ -73,7 +68,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -f $temp_file $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From ae24b56c61333bda6de7abb2c778dde0f6e923a5 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, 5 Jul 2025 17:16:01 +0100 Subject: [PATCH 069/229] Update CHANGELOG.md (#5731) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4929ab14a..531df0877 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🔧 Refactor + - Refactor: ByteStash [@tremor021](https://github.com/tremor021) ([#5725](https://github.com/community-scripts/ProxmoxVE/pull/5725)) - Refactor: CryptPad [@tremor021](https://github.com/tremor021) ([#5724](https://github.com/community-scripts/ProxmoxVE/pull/5724)) - Refactor: Dashy [@tremor021](https://github.com/tremor021) ([#5723](https://github.com/community-scripts/ProxmoxVE/pull/5723)) - Refactor: Authelia [@tremor021](https://github.com/tremor021) ([#5722](https://github.com/community-scripts/ProxmoxVE/pull/5722)) From e14063176077f4da2fc7aa12c746f8d57c6298f5 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, 5 Jul 2025 22:30:08 +0200 Subject: [PATCH 070/229] Refactor (#5732) --- ct/bookstack.sh | 19 ++++++++++++------- install/bookstack-install.sh | 22 ++++++++-------------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/ct/bookstack.sh b/ct/bookstack.sh index 5a7fda1f2..b1710edd2 100644 --- a/ct/bookstack.sh +++ b/ct/bookstack.sh @@ -23,25 +23,31 @@ function update_script() { header_info check_container_storage check_container_resources + if [[ ! -d /opt/bookstack ]]; then msg_error "No ${APP} Installation Found!" exit fi RELEASE=$(curl -fsSL https://api.github.com/repos/BookStackApp/BookStack/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + if [[ "${RELEASE}" != "$(cat ~/.bookstack 2>/dev/null)" ]] || [[ ! -f ~/.bookstack ]]; then msg_info "Stopping Apache2" systemctl stop apache2 msg_ok "Services Stopped" - msg_info "Updating ${APP} to v${RELEASE}" + msg_info "Backing up data" mv /opt/bookstack /opt/bookstack-backup - curl -fsSL "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip" -o "/opt/BookStack-${RELEASE}.zip" - $STD unzip "/opt/BookStack-${RELEASE}.zip" -d /opt - mv "/opt/BookStack-${RELEASE}" /opt/bookstack + msg_ok "Backup finished" + + fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack" + + msg_info "Restoring backup" cp /opt/bookstack-backup/.env /opt/bookstack/.env [[ -d /opt/bookstack-backup/public/uploads ]] && cp -a /opt/bookstack-backup/public/uploads/. /opt/bookstack/public/uploads/ [[ -d /opt/bookstack-backup/storage/uploads ]] && cp -a /opt/bookstack-backup/storage/uploads/. /opt/bookstack/storage/uploads/ [[ -d /opt/bookstack-backup/themes ]] && cp -a /opt/bookstack-backup/themes/. /opt/bookstack/themes/ + msg_ok "Backup restored" + + msg_info "Configuring BookStack" cd /opt/bookstack export COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev @@ -51,7 +57,7 @@ function update_script() { chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads chmod -R 640 /opt/bookstack/.env echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated ${APP} to v${RELEASE}" + msg_ok "Configured BookStack" msg_info "Starting Apache2" systemctl start apache2 @@ -59,7 +65,6 @@ function update_script() { msg_info "Cleaning Up" rm -rf /opt/bookstack-backup - rm -rf "/opt/BookStack-${RELEASE}.zip" msg_ok "Cleaned" msg_ok "Updated Successfully" else diff --git a/install/bookstack-install.sh b/install/bookstack-install.sh index 0b3ebbd50..b2f2cc126 100644 --- a/install/bookstack-install.sh +++ b/install/bookstack-install.sh @@ -15,13 +15,12 @@ update_os msg_info "Installing Dependencies (Patience)" $STD apt-get install -y \ - apache2 \ - php8.2-{mbstring,gd,fpm,curl,intl,ldap,tidy,bz2,mysql,zip,xml} \ - composer \ - libapache2-mod-php \ - make + apache2 +make msg_ok "Installed Dependencies" +PHP_MODULE="fpm, ldap, tidy, bz2, mysql" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.2" setup_php +setup_composer setup_mariadb msg_info "Setting up Database" @@ -39,13 +38,10 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS } >>~/bookstack.creds msg_ok "Set up database" -msg_info "Setup Bookstack (Patience)" +fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack" LOCAL_IP="$(hostname -I | awk '{print $1}')" -cd /opt -RELEASE=$(curl -fsSL https://api.github.com/repos/BookStackApp/BookStack/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip" -$STD unzip v${RELEASE}.zip -mv BookStack-${RELEASE} /opt/bookstack + +msg_info "Configuring Bookstack (Patience)" cd /opt/bookstack cp .env.example .env sudo sed -i "s|APP_URL=.*|APP_URL=http://$LOCAL_IP|g" /opt/bookstack/.env @@ -61,8 +57,7 @@ chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstac chmod -R 640 /opt/bookstack/.env $STD a2enmod rewrite $STD a2enmod php8.2 -echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" -msg_ok "Installed Bookstack" +msg_ok "Configured Bookstack" msg_info "Creating Service" cat </etc/apache2/sites-available/bookstack.conf @@ -111,7 +106,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -rf /opt/v${RELEASE}.zip $STD apt-get autoremove $STD apt-get autoclean msg_ok "Cleaned" From 5eaee5054fc4b15557be5bd73cb8f5b2963aad02 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, 5 Jul 2025 21:30:43 +0100 Subject: [PATCH 071/229] Update CHANGELOG.md (#5738) 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 531df0877..b7bb4a3b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,10 +20,11 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🔧 Refactor - - Refactor: ByteStash [@tremor021](https://github.com/tremor021) ([#5725](https://github.com/community-scripts/ProxmoxVE/pull/5725)) - - Refactor: CryptPad [@tremor021](https://github.com/tremor021) ([#5724](https://github.com/community-scripts/ProxmoxVE/pull/5724)) - - Refactor: Dashy [@tremor021](https://github.com/tremor021) ([#5723](https://github.com/community-scripts/ProxmoxVE/pull/5723)) + - Refactor: BookStack [@tremor021](https://github.com/tremor021) ([#5732](https://github.com/community-scripts/ProxmoxVE/pull/5732)) - Refactor: Authelia [@tremor021](https://github.com/tremor021) ([#5722](https://github.com/community-scripts/ProxmoxVE/pull/5722)) + - Refactor: Dashy [@tremor021](https://github.com/tremor021) ([#5723](https://github.com/community-scripts/ProxmoxVE/pull/5723)) + - Refactor: CryptPad [@tremor021](https://github.com/tremor021) ([#5724](https://github.com/community-scripts/ProxmoxVE/pull/5724)) + - Refactor: ByteStash [@tremor021](https://github.com/tremor021) ([#5725](https://github.com/community-scripts/ProxmoxVE/pull/5725)) - Refactor: AgentDVR [@tremor021](https://github.com/tremor021) ([#5726](https://github.com/community-scripts/ProxmoxVE/pull/5726)) ## 2025-07-04 From f1eda9a2705c7fb5a99648fff1b01fb055163a0e 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, 5 Jul 2025 22:30:52 +0200 Subject: [PATCH 072/229] Fix spacing (#5734) --- install/immich-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/immich-install.sh b/install/immich-install.sh index 5e31af0d2..a8867f74b 100644 --- a/install/immich-install.sh +++ b/install/immich-install.sh @@ -93,7 +93,7 @@ if [[ "$CTTYPE" == "0" ]]; then fi msg_ok "Dependencies Installed" -read -r -p "Install OpenVINO dependencies for Intel HW-accelerated machine-learning? y/N " prompt +read -r -p "${TAB3}Install OpenVINO dependencies for Intel HW-accelerated machine-learning? y/N " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then msg_info "Installing OpenVINO dependencies" touch ~/.openvino From 798a7b323ea449ad0a7bdd43225cd8e0250f1902 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, 6 Jul 2025 02:16:46 +0200 Subject: [PATCH 073/229] Update versions.json (#5744) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 70 +++++++++++++++--------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 52a6debb4..4f51bab90 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,39 @@ [ + { + "name": "steveiliop56/tinyauth", + "version": "v3.4.1", + "date": "2025-06-11T07:53:44Z" + }, + { + "name": "Kareadita/Kavita", + "version": "v0.8.7", + "date": "2025-07-05T20:08:58Z" + }, + { + "name": "msgbyte/tianji", + "version": "v1.22.6", + "date": "2025-07-05T18:38:31Z" + }, + { + "name": "cross-seed/cross-seed", + "version": "v6.12.7", + "date": "2025-06-18T03:44:24Z" + }, + { + "name": "fallenbagel/jellyseerr", + "version": "preview-seerr", + "date": "2025-07-05T16:51:13Z" + }, + { + "name": "nicolargo/glances", + "version": "v4.3.2", + "date": "2025-07-05T16:00:15Z" + }, + { + "name": "runtipi/runtipi", + "version": "v4.3.0", + "date": "2025-07-05T12:14:52Z" + }, { "name": "fuma-nama/fumadocs", "version": "fumadocs-openapi@9.0.18", @@ -24,16 +59,6 @@ "version": "v2.11.3", "date": "2025-07-05T04:34:46Z" }, - { - "name": "steveiliop56/tinyauth", - "version": "v3.4.1", - "date": "2025-06-11T07:53:44Z" - }, - { - "name": "cross-seed/cross-seed", - "version": "v6.12.7", - "date": "2025-06-18T03:44:24Z" - }, { "name": "home-assistant/core", "version": "2025.7.1", @@ -319,11 +344,6 @@ "version": "0.50.5", "date": "2025-06-29T08:54:47Z" }, - { - "name": "msgbyte/tianji", - "version": "v1.22.5", - "date": "2025-06-28T16:06:19Z" - }, { "name": "plexguide/Huntarr.io", "version": "8.1.11", @@ -359,11 +379,6 @@ "version": "flowise@3.0.3", "date": "2025-06-27T09:53:57Z" }, - { - "name": "fallenbagel/jellyseerr", - "version": "preview-seerr", - "date": "2025-06-27T06:10:03Z" - }, { "name": "MediaBrowser/Emby.Releases", "version": "4.9.1.2", @@ -449,11 +464,6 @@ "version": "RELEASE.2025-06-13T11-33-47Z", "date": "2025-06-23T20:58:42Z" }, - { - "name": "runtipi/runtipi", - "version": "v4.2.1", - "date": "2025-06-03T20:04:28Z" - }, { "name": "VictoriaMetrics/VictoriaMetrics", "version": "pmm-6401-v1.120.0", @@ -1009,11 +1019,6 @@ "version": "v4.3.0", "date": "2025-04-21T17:44:40Z" }, - { - "name": "Kareadita/Kavita", - "version": "v0.8.6.2", - "date": "2025-04-20T16:55:38Z" - }, { "name": "caddyserver/caddy", "version": "v2.10.0", @@ -1109,11 +1114,6 @@ "version": "v2.5.307", "date": "2025-03-24T01:33:31Z" }, - { - "name": "nicolargo/glances", - "version": "v4.3.1", - "date": "2025-03-23T09:02:54Z" - }, { "name": "Donkie/Spoolman", "version": "v0.22.1", From 32a724ac8a61f205ca4c40376e9f9ecd4d4c76e7 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, 6 Jul 2025 01:17:29 +0100 Subject: [PATCH 074/229] Update CHANGELOG.md (#5745) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7bb4a3b9..0fc470365 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2025-07-06 + ## 2025-07-05 ### 🚀 Updated Scripts From 679699e6af858d64e8892c55b26d8ac4b0776d52 Mon Sep 17 00:00:00 2001 From: John Sturgeon Date: Sun, 6 Jul 2025 01:37:45 -0700 Subject: [PATCH 075/229] Resolves incorrect URL at end of Pocket ID script (#5743) --- ct/pocketid.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/pocketid.sh b/ct/pocketid.sh index 8c0ae928b..000b4b45c 100755 --- a/ct/pocketid.sh +++ b/ct/pocketid.sh @@ -86,4 +86,4 @@ msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Configure your reverse proxy to point to:${BGN} ${IP}:1411${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}https://{PUBLIC_URL}/login/setup${CL}" +echo -e "${TAB}${GATEWAY}${BGN}https://{PUBLIC_URL}/setup${CL}" From c38b4c2ef3bdd4aabc183ebc71324e8e642e38bb 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, 6 Jul 2025 09:38:10 +0100 Subject: [PATCH 076/229] Update CHANGELOG.md (#5747) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fc470365..197d7879b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,12 @@ All LXC instances created using this repository come pre-installed with Midnight ## 2025-07-06 +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Resolves incorrect URL at end of Pocket ID script [@johnsturgeon](https://github.com/johnsturgeon) ([#5743](https://github.com/community-scripts/ProxmoxVE/pull/5743)) + ## 2025-07-05 ### 🚀 Updated Scripts From 1a8a34b533c6c7eeafea9b2d3d8263f259e63832 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, 6 Jul 2025 10:43:18 +0200 Subject: [PATCH 077/229] Typo fix (#5746) --- install/bookstack-install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/bookstack-install.sh b/install/bookstack-install.sh index b2f2cc126..b279a87e9 100644 --- a/install/bookstack-install.sh +++ b/install/bookstack-install.sh @@ -15,8 +15,8 @@ update_os msg_info "Installing Dependencies (Patience)" $STD apt-get install -y \ - apache2 -make + apache2 \ + make msg_ok "Installed Dependencies" PHP_MODULE="fpm, ldap, tidy, bz2, mysql" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.2" setup_php From 5e7eb4ae3a6902a92006543b7a14788206817073 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, 6 Jul 2025 09:43:42 +0100 Subject: [PATCH 078/229] Update CHANGELOG.md (#5748) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 197d7879b..bc4f725b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🐞 Bug Fixes + - BookStack: Typo fix [@tremor021](https://github.com/tremor021) ([#5746](https://github.com/community-scripts/ProxmoxVE/pull/5746)) - Resolves incorrect URL at end of Pocket ID script [@johnsturgeon](https://github.com/johnsturgeon) ([#5743](https://github.com/community-scripts/ProxmoxVE/pull/5743)) ## 2025-07-05 From e492a9b5d92858c46ccb0fd3ef9f0c20319c1afa 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, 6 Jul 2025 10:43:54 +0200 Subject: [PATCH 079/229] Refactor (#5736) --- ct/baikal.sh | 17 +++++++++-------- install/baikal-install.sh | 15 ++++----------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/ct/baikal.sh b/ct/baikal.sh index 5d71b1a66..252d8c24e 100644 --- a/ct/baikal.sh +++ b/ct/baikal.sh @@ -23,34 +23,35 @@ function update_script() { header_info check_container_storage check_container_resources + if [[ ! -d /opt/baikal ]]; then msg_error "No ${APP} Installation Found!" exit fi RELEASE=$(curl -fsSL https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + if [[ "${RELEASE}" != "$(cat ~/.baikal 2>/dev/null)" ]] || [[ ! -f ~/.baikal ]]; then msg_info "Stopping Service" systemctl stop apache2 msg_ok "Stopped Service" - msg_info "Updating ${APP} to v${RELEASE}" - cd /opt - curl -fsSL "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip" -o $(basename "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip") + msg_info "Backing up data" mv /opt/baikal /opt/baikal-backup - $STD unzip -o "baikal-${RELEASE}.zip" + msg_ok "Backed up data" + + fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal" + + msg_info "Configuring Baikal" cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/ cp -r /opt/baikal-backup/Specific/ /opt/baikal/ chown -R www-data:www-data /opt/baikal/ chmod -R 755 /opt/baikal/ - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated $APP to v${RELEASE}" + msg_ok "Configured Baikal" msg_info "Starting Service" systemctl start apache2 msg_ok "Started Service" msg_info "Cleaning up" - rm -rf "/opt/baikal-${RELEASE}.zip" rm -rf /opt/baikal-backup msg_ok "Cleaned" msg_ok "Updated Successfully" diff --git a/install/baikal-install.sh b/install/baikal-install.sh index 93d68fabc..c054bdd50 100644 --- a/install/baikal-install.sh +++ b/install/baikal-install.sh @@ -14,13 +14,12 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y \ - apache2 \ - libapache2-mod-php \ - php-{pgsql,dom} +$STD apt-get install -y apache2 msg_ok "Installed Dependencies" PG_VERSION="16" setup_postgresql +PHP_APACHE="YES" PHP_MODULE="pgsql, dom" PHP_VERSION="8.2" setup_php +fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal" msg_info "Setting up PostgreSQL Database" DB_NAME=baikal @@ -36,11 +35,7 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP } >>~/baikal.creds msg_ok "Set up PostgreSQL Database" -msg_info "Installing Baikal" -RELEASE=$(curl -fsSL https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -cd /opt -curl -fsSL "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip" -o "baikal-${RELEASE}.zip" -$STD unzip "baikal-${RELEASE}.zip" +msg_info "Configuring Baikal" cat </opt/baikal/config/baikal.yaml database: backend: pgsql @@ -51,7 +46,6 @@ database: EOF chown -R www-data:www-data /opt/baikal/ chmod -R 755 /opt/baikal/ -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt msg_ok "Installed Baikal" msg_info "Creating Service" @@ -90,7 +84,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -rf "/opt/baikal-${RELEASE}.zip" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From a6517f4d7e8071c43656c64ebfc5d87b24222ceb 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, 6 Jul 2025 10:44:16 +0200 Subject: [PATCH 080/229] Refactor (#5735) --- ct/barcode-buddy.sh | 18 +++++++++--------- install/barcode-buddy-install.sh | 18 ++++++------------ 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/ct/barcode-buddy.sh b/ct/barcode-buddy.sh index d683db808..b6c30de0d 100644 --- a/ct/barcode-buddy.sh +++ b/ct/barcode-buddy.sh @@ -23,27 +23,28 @@ function update_script() { header_info check_container_storage check_container_resources + if [[ ! -d /opt/barcodebuddy ]]; then msg_error "No ${APP} Installation Found!" exit fi RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + if [[ "${RELEASE}" != "$(cat ~/.barcodebuddy 2>/dev/null)" ]] || [[ ! -f ~/.barcodebuddy ]]; then msg_info "Stopping Service" systemctl stop apache2 systemctl stop barcodebuddy msg_ok "Stopped Service" - msg_info "Updating ${APP} to v${RELEASE}" - cd /opt + msg_info "Backing up data" mv /opt/barcodebuddy/ /opt/barcodebuddy-backup - curl -fsSL "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip") - $STD unzip "v${RELEASE}.zip" - mv "/opt/barcodebuddy-${RELEASE}" /opt/barcodebuddy + msg_ok "Backed up data" + + fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy" + + msg_info "Configuring ${APP}" cp -r /opt/barcodebuddy-backup/data/. /opt/barcodebuddy/data chown -R www-data:www-data /opt/barcodebuddy/data - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated $APP to v${RELEASE}" + msg_ok "Configured ${APP}" msg_info "Starting Service" systemctl start apache2 @@ -51,7 +52,6 @@ function update_script() { msg_ok "Started Service" msg_info "Cleaning up" - rm -r "/opt/v${RELEASE}.zip" rm -r /opt/barcodebuddy-backup msg_ok "Cleaned" msg_ok "Updated Successfully" diff --git a/install/barcode-buddy-install.sh b/install/barcode-buddy-install.sh index d9f02d9f1..3af350e8b 100644 --- a/install/barcode-buddy-install.sh +++ b/install/barcode-buddy-install.sh @@ -16,20 +16,15 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y \ apache2 \ - redis \ - php-{curl,date,json,mbstring,redis,sqlite3,sockets} \ - libapache2-mod-php + redis msg_ok "Installed Dependencies" -msg_info "Installing barcodebuddy" -RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -cd /opt -curl -fsSL "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip" -$STD unzip "v${RELEASE}.zip" -mv "/opt/barcodebuddy-${RELEASE}" /opt/barcodebuddy +PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="date, json, redis, sqlite3, sockets" setup_php +fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy" + +msg_info "Configuring barcodebuddy" chown -R www-data:www-data /opt/barcodebuddy/data -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt -msg_ok "Installed barcodebuddy" +msg_ok "Configured barcodebuddy" msg_info "Creating Services" cat </etc/systemd/system/barcodebuddy.service @@ -73,7 +68,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -rf "/opt/v${RELEASE}.zip" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 2cbf0f744fdde5cc2fc71f62592a18a86307ad33 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, 6 Jul 2025 09:44:43 +0100 Subject: [PATCH 081/229] Update CHANGELOG.md (#5749) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc4f725b3..bba98a23b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,11 +18,17 @@ All LXC instances created using this repository come pre-installed with Midnight ### 🚀 Updated Scripts + - Refactor: Barcodebuddy [@tremor021](https://github.com/tremor021) ([#5735](https://github.com/community-scripts/ProxmoxVE/pull/5735)) + - #### 🐞 Bug Fixes - BookStack: Typo fix [@tremor021](https://github.com/tremor021) ([#5746](https://github.com/community-scripts/ProxmoxVE/pull/5746)) - Resolves incorrect URL at end of Pocket ID script [@johnsturgeon](https://github.com/johnsturgeon) ([#5743](https://github.com/community-scripts/ProxmoxVE/pull/5743)) + - #### 🔧 Refactor + + - Refactor: Baikal [@tremor021](https://github.com/tremor021) ([#5736](https://github.com/community-scripts/ProxmoxVE/pull/5736)) + ## 2025-07-05 ### 🚀 Updated Scripts From 73f1c261abb530789e947a338f558c6a693bc4a9 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, 6 Jul 2025 10:44:53 +0200 Subject: [PATCH 082/229] Refactor (#5733) --- ct/bitmagnet.sh | 21 ++++++++------------- install/bitmagnet-install.sh | 22 ++++++++++------------ 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/ct/bitmagnet.sh b/ct/bitmagnet.sh index f0012ebb1..c450395df 100644 --- a/ct/bitmagnet.sh +++ b/ct/bitmagnet.sh @@ -28,12 +28,12 @@ function update_script() { exit fi RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + if [[ "${RELEASE}" != "$(cat ~/.bitmagnet 2>/dev/null)" ]] || [[ ! -f ~/.bitmagnet ]]; then msg_info "Stopping Service" systemctl stop bitmagnet-web msg_ok "Stopped Service" - msg_info "Backing up database" + msg_info "Backing up data" rm -f /tmp/backup.sql $STD sudo -u postgres pg_dump \ --column-inserts \ @@ -56,31 +56,26 @@ function update_script() { bitmagnet \ >/tmp/backup.sql mv /tmp/backup.sql /opt/ - msg_ok "Database backed up" - - msg_info "Updating ${APP} to v${RELEASE}" [ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/ [ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/ - rm -rf /opt/bitmagnet/* - temp_file=$(mktemp) - curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" - tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet + msg_ok "Data backed up" + + rm -rf /opt/bitmagnet + fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" + + msg_info "Updating ${APP} to v${RELEASE}" cd /opt/bitmagnet VREL=v$RELEASE $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL" chmod +x bitmagnet [ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/ [ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/ - echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated $APP to v${RELEASE}" msg_info "Starting Service" systemctl start bitmagnet-web msg_ok "Started Service" - msg_info "Cleaning up" - rm -f "$temp_file" - msg_ok "Cleaned" msg_ok "Updated Successfully" else msg_ok "No update required. ${APP} is already at v${RELEASE}" diff --git a/install/bitmagnet-install.sh b/install/bitmagnet-install.sh index 69ecde640..31bf31b99 100644 --- a/install/bitmagnet-install.sh +++ b/install/bitmagnet-install.sh @@ -22,17 +22,10 @@ msg_ok "Installed Dependencies" PG_VERSION="16" setup_postgresql setup_go +fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -msg_info "Installing bitmagnet v${RELEASE}" -mkdir -p /opt/bitmagnet -temp_file=$(mktemp) -curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" -tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet -cd /opt/bitmagnet -VREL=v$RELEASE -$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL" -chmod +x bitmagnet +msg_info "Setting up database" POSTGRES_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) $STD sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '$POSTGRES_PASSWORD';" $STD sudo -u postgres psql -c "CREATE DATABASE bitmagnet;" @@ -41,8 +34,14 @@ $STD sudo -u postgres psql -c "CREATE DATABASE bitmagnet;" echo "" echo "postgres user password: $POSTGRES_PASSWORD" } >>~/postgres.creds -echo "${RELEASE}" >/opt/bitmagnet_version.txt -msg_ok "Installed bitmagnet v${RELEASE}" +msg_ok "Database set up" + +msg_info "Configuring bitmagnet v${RELEASE}" +cd /opt/bitmagnet +VREL=v$RELEASE +$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL" +chmod +x bitmagnet +msg_ok "Configured bitmagnet v${RELEASE}" read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey @@ -72,7 +71,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -f "$temp_file" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 067b3c2f024f660e935085f2fc5d3950d033e30e 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, 6 Jul 2025 09:45:00 +0100 Subject: [PATCH 083/229] Update CHANGELOG.md (#5750) Co-authored-by: github-actions[bot] From e2396f6667b6e80ac6bfcf23cb2717e41c8933c7 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, 6 Jul 2025 09:45:18 +0100 Subject: [PATCH 084/229] Update CHANGELOG.md (#5751) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bba98a23b..c00fcf04b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🔧 Refactor + - Refactor: Bitmagnet [@tremor021](https://github.com/tremor021) ([#5733](https://github.com/community-scripts/ProxmoxVE/pull/5733)) - Refactor: Baikal [@tremor021](https://github.com/tremor021) ([#5736](https://github.com/community-scripts/ProxmoxVE/pull/5736)) ## 2025-07-05 From ace106051b7fd18825df9a4c1b4c1d9ae45d69be 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, 6 Jul 2025 09:45:31 +0100 Subject: [PATCH 085/229] Update CHANGELOG.md (#5752) Co-authored-by: github-actions[bot] From 06ec9593dadbe07918607f4b3fbe0b536fdb9821 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, 6 Jul 2025 09:46:17 +0100 Subject: [PATCH 086/229] Update CHANGELOG.md (#5753) Co-authored-by: github-actions[bot] From 5c4abb6d1d682d600ec6b881b801940108562b99 Mon Sep 17 00:00:00 2001 From: Oleh Formaniuk Date: Sun, 6 Jul 2025 01:47:14 -0700 Subject: [PATCH 087/229] [Feature] Add option to expose Docker via TCP port (#5716) --- install/alpine-docker-install.sh | 9 +++++++++ install/docker-install.sh | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/install/alpine-docker-install.sh b/install/alpine-docker-install.sh index 46745d782..1ae4585da 100644 --- a/install/alpine-docker-install.sh +++ b/install/alpine-docker-install.sh @@ -67,5 +67,14 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" fi +read -r -p "${TAB3}Would you like to expose the Docker TCP socket? " prompt +if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + msg_info "Exposing Docker TCP socket" + $STD mkdir -p /etc/docker + $STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json + $STD rc-service docker restart + msg_ok "Exposed Docker TCP socket at tcp://+:2375" +fi + motd_ssh customize diff --git a/install/docker-install.sh b/install/docker-install.sh index 6997225ca..193a947d7 100644 --- a/install/docker-install.sh +++ b/install/docker-install.sh @@ -57,6 +57,15 @@ else fi fi +read -r -p "${TAB3}Would you like to expose the Docker TCP socket? " prompt +if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + msg_info "Exposing Docker TCP socket" + $STD mkdir -p /etc/docker + $STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json + $STD rc-service docker restart + msg_ok "Exposed Docker TCP socket at tcp://+:2375" +fi + motd_ssh customize From 993b01fa83907a9062db3de58df27b8b61f722de 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, 6 Jul 2025 09:47:34 +0100 Subject: [PATCH 088/229] Update CHANGELOG.md (#5754) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c00fcf04b..23632a59b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,10 @@ All LXC instances created using this repository come pre-installed with Midnight - BookStack: Typo fix [@tremor021](https://github.com/tremor021) ([#5746](https://github.com/community-scripts/ProxmoxVE/pull/5746)) - Resolves incorrect URL at end of Pocket ID script [@johnsturgeon](https://github.com/johnsturgeon) ([#5743](https://github.com/community-scripts/ProxmoxVE/pull/5743)) + - #### ✨ New Features + + - [Feature] Add option to expose Docker via TCP port (alpine docker) [@oformaniuk](https://github.com/oformaniuk) ([#5716](https://github.com/community-scripts/ProxmoxVE/pull/5716)) + - #### 🔧 Refactor - Refactor: Bitmagnet [@tremor021](https://github.com/tremor021) ([#5733](https://github.com/community-scripts/ProxmoxVE/pull/5733)) From 3ce5893fe37f224cb9d8186914bfe450b14fe128 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, 6 Jul 2025 09:47:45 +0100 Subject: [PATCH 089/229] Update CHANGELOG.md (#5755) Co-authored-by: github-actions[bot] From 4d4726ccbef4d88086b3720076344c2abe7985b8 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, 6 Jul 2025 14:07:08 +0200 Subject: [PATCH 090/229] Update versions.json (#5760) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 4f51bab90..23c608aa7 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,9 +1,24 @@ [ + { + "name": "Jackett/Jackett", + "version": "v0.22.2123", + "date": "2025-07-06T06:01:32Z" + }, + { + "name": "hyperion-project/hyperion.ng", + "version": "2.1.1", + "date": "2025-06-14T17:45:06Z" + }, { "name": "steveiliop56/tinyauth", "version": "v3.4.1", "date": "2025-06-11T07:53:44Z" }, + { + "name": "slskd/slskd", + "version": "0.23.0", + "date": "2025-07-06T00:02:35Z" + }, { "name": "Kareadita/Kavita", "version": "v0.8.7", @@ -49,11 +64,6 @@ "version": "v1.2.0", "date": "2025-07-05T08:58:05Z" }, - { - "name": "Jackett/Jackett", - "version": "v0.22.2120", - "date": "2025-07-05T05:58:02Z" - }, { "name": "linkwarden/linkwarden", "version": "v2.11.3", @@ -119,11 +129,6 @@ "version": "8.2-rc1-int", "date": "2025-07-02T19:27:08Z" }, - { - "name": "hyperion-project/hyperion.ng", - "version": "2.1.1", - "date": "2025-06-14T17:45:06Z" - }, { "name": "outline/outline", "version": "v0.85.0", @@ -1029,11 +1034,6 @@ "version": "v0.4.15", "date": "2024-12-19T03:19:49Z" }, - { - "name": "slskd/slskd", - "version": "0.22.5", - "date": "2025-04-15T02:52:26Z" - }, { "name": "Tautulli/Tautulli", "version": "v2.15.2", From 14cb9f097d2f79d311283bdf9dc58a1fd1a522a4 Mon Sep 17 00:00:00 2001 From: Jonas Albrecht <68380809+jonalbr@users.noreply.github.com> Date: Sun, 6 Jul 2025 14:46:15 +0200 Subject: [PATCH 091/229] Fix update script for Mafl: ensure directory is removed recursively (#5759) --- ct/mafl.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/mafl.sh b/ct/mafl.sh index 9c6a81dd3..1bb540ec2 100644 --- a/ct/mafl.sh +++ b/ct/mafl.sh @@ -37,7 +37,7 @@ function update_script() { msg_info "Performing backup" mkdir -p /opt/mafl-backup/data mv /opt/mafl/data /opt/mafl-backup/data - rm /opt/mafl + rm -rf /opt/mafl msg_ok "Backup complete" fetch_and_deploy_gh_release "mafl" "hywax/mafl" From ca6b1a95dd59d43f14f2e6fb9aba33453fb95c69 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, 6 Jul 2025 13:46:56 +0100 Subject: [PATCH 092/229] Update CHANGELOG.md (#5762) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23632a59b..77511325b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🐞 Bug Fixes + - Fix update script for Mafl: ensure directory is removed recursively [@jonalbr](https://github.com/jonalbr) ([#5759](https://github.com/community-scripts/ProxmoxVE/pull/5759)) - BookStack: Typo fix [@tremor021](https://github.com/tremor021) ([#5746](https://github.com/community-scripts/ProxmoxVE/pull/5746)) - Resolves incorrect URL at end of Pocket ID script [@johnsturgeon](https://github.com/johnsturgeon) ([#5743](https://github.com/community-scripts/ProxmoxVE/pull/5743)) From 4d2fcb2c661e57410b3a2adde4ce9be193b7c419 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Sun, 6 Jul 2025 20:31:17 +0200 Subject: [PATCH 093/229] add missing local pattern --- misc/tools.func | 1 + 1 file changed, 1 insertion(+) diff --git a/misc/tools.func b/misc/tools.func index d060740bf..f1aa7a8e7 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -759,6 +759,7 @@ function fetch_and_deploy_gh_release() { local mode="${3:-tarball}" # tarball | binary | prebuild | singlefile local version="${4:-latest}" local target="${5:-/opt/$app}" + local asset_pattern="${6:-}" local app_lc=$(echo "${app,,}" | tr -d ' ') local version_file="$HOME/.${app_lc}" From 29d3015314ad10f0951e3acc46d8783b60f1ae02 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Sun, 6 Jul 2025 20:39:15 +0200 Subject: [PATCH 094/229] add pattern for binary mode --- misc/tools.func | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index f1aa7a8e7..ba474dbb7 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -854,9 +854,9 @@ function fetch_and_deploy_gh_release() { assets=$(echo "$json" | jq -r '.assets[].browser_download_url') # If explicit filename pattern is provided (param $6), match that first - if [[ -n "$6" ]]; then + if [[ -n "$asset_pattern" ]]; then for u in $assets; do - [[ "$u" =~ $6 || "$u" == *"$6" ]] && url_match="$u" && break + [[ "$u" =~ $asset_pattern || "$u" == *"$asset_pattern" ]] && url_match="$u" && break done fi From 4bac3063daecd60ffc9db9833ef568865f54998a 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, 7 Jul 2025 02:16:05 +0200 Subject: [PATCH 095/229] Update versions.json (#5774) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 130 ++++++++++++++--------------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 23c608aa7..b725ea030 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,9 +1,74 @@ [ + { + "name": "pelican-dev/panel", + "version": "v1.0.0-beta22", + "date": "2025-07-06T21:16:00Z" + }, + { + "name": "pelican-dev/wings", + "version": "v1.0.0-beta14", + "date": "2025-07-06T21:07:07Z" + }, + { + "name": "pocket-id/pocket-id", + "version": "v1.6.1", + "date": "2025-07-06T20:59:34Z" + }, + { + "name": "Luligu/matterbridge", + "version": "3.1.2", + "date": "2025-07-06T20:55:23Z" + }, + { + "name": "bluenviron/mediamtx", + "version": "v1.13.0", + "date": "2025-07-06T19:23:55Z" + }, + { + "name": "syncthing/syncthing", + "version": "v1.30.0", + "date": "2025-07-01T11:29:11Z" + }, + { + "name": "traccar/traccar", + "version": "v6.8.0", + "date": "2025-07-06T18:19:05Z" + }, + { + "name": "firefly-iii/firefly-iii", + "version": "v6.2.20", + "date": "2025-07-02T04:03:37Z" + }, + { + "name": "msgbyte/tianji", + "version": "v1.23.0", + "date": "2025-07-06T16:01:58Z" + }, + { + "name": "TandoorRecipes/recipes", + "version": "1.5.35", + "date": "2025-06-22T08:30:10Z" + }, + { + "name": "Part-DB/Part-DB-server", + "version": "v1.17.2", + "date": "2025-07-06T12:21:52Z" + }, + { + "name": "redis/redis", + "version": "8.0.3", + "date": "2025-07-06T12:19:24Z" + }, { "name": "Jackett/Jackett", "version": "v0.22.2123", "date": "2025-07-06T06:01:32Z" }, + { + "name": "fallenbagel/jellyseerr", + "version": "preview-OIDC", + "date": "2025-07-06T00:51:06Z" + }, { "name": "hyperion-project/hyperion.ng", "version": "2.1.1", @@ -24,21 +89,11 @@ "version": "v0.8.7", "date": "2025-07-05T20:08:58Z" }, - { - "name": "msgbyte/tianji", - "version": "v1.22.6", - "date": "2025-07-05T18:38:31Z" - }, { "name": "cross-seed/cross-seed", "version": "v6.12.7", "date": "2025-06-18T03:44:24Z" }, - { - "name": "fallenbagel/jellyseerr", - "version": "preview-seerr", - "date": "2025-07-05T16:51:13Z" - }, { "name": "nicolargo/glances", "version": "v4.3.2", @@ -74,11 +129,6 @@ "version": "2025.7.1", "date": "2025-07-04T20:02:52Z" }, - { - "name": "Luligu/matterbridge", - "version": "3.1.1", - "date": "2025-07-04T19:50:37Z" - }, { "name": "homarr-labs/homarr", "version": "v1.27.0", @@ -124,11 +174,6 @@ "version": "v2.2.0p44", "date": "2025-07-04T06:44:06Z" }, - { - "name": "redis/redis", - "version": "8.2-rc1-int", - "date": "2025-07-02T19:27:08Z" - }, { "name": "outline/outline", "version": "v0.85.0", @@ -209,11 +254,6 @@ "version": "v0.9.5", "date": "2025-07-02T18:39:28Z" }, - { - "name": "firefly-iii/firefly-iii", - "version": "v6.2.20", - "date": "2025-07-02T04:03:37Z" - }, { "name": "wazuh/wazuh", "version": "coverity-w27-4.13.0", @@ -279,11 +319,6 @@ "version": "v1.133.0", "date": "2025-07-01T15:13:42Z" }, - { - "name": "syncthing/syncthing", - "version": "v1.30.0", - "date": "2025-07-01T11:29:11Z" - }, { "name": "rcourtman/Pulse", "version": "v99.99.99", @@ -359,11 +394,6 @@ "version": "v3.2.4", "date": "2025-06-28T02:47:31Z" }, - { - "name": "pocket-id/pocket-id", - "version": "v1.5.0", - "date": "2025-06-27T22:04:32Z" - }, { "name": "goauthentik/authentik", "version": "version/2025.6.3", @@ -489,11 +519,6 @@ "version": "v3.0.7", "date": "2025-06-22T17:49:29Z" }, - { - "name": "TandoorRecipes/recipes", - "version": "1.5.35", - "date": "2025-06-22T08:30:10Z" - }, { "name": "inventree/InvenTree", "version": "0.17.14", @@ -674,11 +699,6 @@ "version": "v5.26.2.10099", "date": "2025-06-11T20:10:39Z" }, - { - "name": "traccar/traccar", - "version": "v6.7.3", - "date": "2025-06-15T05:46:17Z" - }, { "name": "advplyr/audiobookshelf", "version": "v2.25.1", @@ -834,11 +854,6 @@ "version": "5.10.0", "date": "2025-05-28T05:48:20Z" }, - { - "name": "bluenviron/mediamtx", - "version": "v1.12.3", - "date": "2025-05-27T20:43:10Z" - }, { "name": "dani-garcia/vaultwarden", "version": "1.34.1", @@ -874,11 +889,6 @@ "version": "v0.46.2", "date": "2025-05-20T11:21:04Z" }, - { - "name": "Part-DB/Part-DB-server", - "version": "v1.17.1", - "date": "2025-05-18T21:06:41Z" - }, { "name": "sbondCo/Watcharr", "version": "v2.1.0", @@ -924,16 +934,6 @@ "version": "v0.2.3", "date": "2025-05-10T21:14:45Z" }, - { - "name": "pelican-dev/wings", - "version": "v1.0.0-beta13", - "date": "2025-05-09T23:14:41Z" - }, - { - "name": "pelican-dev/panel", - "version": "v1.0.0-beta21", - "date": "2025-05-09T23:14:23Z" - }, { "name": "getumbrel/umbrel", "version": "1.4.2", From fafb7501c53c1aa295a78fd272ecacf849d0da9c 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, 7 Jul 2025 01:16:48 +0100 Subject: [PATCH 096/229] Update CHANGELOG.md (#5775) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 77511325b..bb21d6463 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2025-07-07 + ## 2025-07-06 ### 🚀 Updated Scripts From 2be5d83a6dab99822027e422cd2a6ae9cedc69fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Mon, 7 Jul 2025 08:15:48 +0200 Subject: [PATCH 097/229] Add warning (#5770) --- frontend/public/json/emqx.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/public/json/emqx.json b/frontend/public/json/emqx.json index f53e5155d..fbd78367a 100644 --- a/frontend/public/json/emqx.json +++ b/frontend/public/json/emqx.json @@ -35,6 +35,10 @@ { "text": "Setup-Steps: Access Control ➡ Authentication ➡ Create ➡ Next ➡ Next ➡ Create ➡ Users ➡ Add ➡ Username / Password (to authenicate with MQTT) ➡ Save. You're now ready to enjoy a high-performance MQTT Broker.", "type": "info" + }, + { + "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.", + "type": "warning" } ] } From f0b645c894608297422f9f865905875fd2e4ddf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Mon, 7 Jul 2025 08:16:20 +0200 Subject: [PATCH 098/229] Mark updateable (#5773) --- frontend/public/json/dockge.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/public/json/dockge.json b/frontend/public/json/dockge.json index b4308ebc7..ad6e55541 100644 --- a/frontend/public/json/dockge.json +++ b/frontend/public/json/dockge.json @@ -6,7 +6,7 @@ ], "date_created": "2024-05-02", "type": "ct", - "updateable": false, + "updateable": true, "privileged": false, "interface_port": 5001, "documentation": null, From 8a178b6f454045b0e9dc3751459df3ae3ed969cd 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, 7 Jul 2025 07:16:29 +0100 Subject: [PATCH 099/229] Update CHANGELOG.md (#5777) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb21d6463..44523a415 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,12 @@ All LXC instances created using this repository come pre-installed with Midnight ## 2025-07-07 +### 🌐 Website + + - #### 📝 Script Information + + - EMQX: Add warning to website [@tremor021](https://github.com/tremor021) ([#5770](https://github.com/community-scripts/ProxmoxVE/pull/5770)) + ## 2025-07-06 ### 🚀 Updated Scripts From 9ae95d1eb5c3b94ed1798fdc24bb210fdba59ca2 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, 7 Jul 2025 07:16:50 +0100 Subject: [PATCH 100/229] Update CHANGELOG.md (#5778) Co-authored-by: github-actions[bot] From 9893379eef51c74689cc2362b4eddbf61452ff6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= <57175294+TheophileDiot@users.noreply.github.com> Date: Mon, 7 Jul 2025 10:04:01 +0200 Subject: [PATCH 101/229] Refactor: Changed the way we install BunkerWeb by leveraging the brand new install-bunkerweb.sh (#5707) Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> --- ct/bunkerweb.sh | 4 ++-- frontend/public/json/bunkerweb.json | 7 ++++++- install/bunkerweb-install.sh | 15 ++++----------- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/ct/bunkerweb.sh b/ct/bunkerweb.sh index 5383c9ea9..c58d3680c 100644 --- a/ct/bunkerweb.sh +++ b/ct/bunkerweb.sh @@ -37,8 +37,8 @@ Pin: version ${RELEASE} Pin-Priority: 1001 EOF apt-get update - apt-get install -y nginx=1.26.3* - apt-get install -y bunkerweb=${RELEASE} + apt-mark unhold bunkerweb nginx + apt-get install -y --allow-downgrades bunkerweb=${RELEASE} echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated ${APP} to ${RELEASE}" diff --git a/frontend/public/json/bunkerweb.json b/frontend/public/json/bunkerweb.json index 3cb7ca70d..9fe806f6d 100644 --- a/frontend/public/json/bunkerweb.json +++ b/frontend/public/json/bunkerweb.json @@ -31,5 +31,10 @@ "username": null, "password": null }, - "notes": [] + "notes": [ + { + "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.", + "type": "warning" + } + ] } diff --git a/install/bunkerweb-install.sh b/install/bunkerweb-install.sh index ac6c0fc58..6dab4dfba 100644 --- a/install/bunkerweb-install.sh +++ b/install/bunkerweb-install.sh @@ -18,19 +18,12 @@ $STD apt-get install -y apt-transport-https $STD apt-get install -y lsb-release msg_ok "Installed Dependencies" -msg_info "Installing Nginx" -curl -fsSL "https://nginx.org/keys/nginx_signing.key" | gpg --dearmor >/usr/share/keyrings/nginx-archive-keyring.gpg -echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian $(lsb_release -cs) nginx" >/etc/apt/sources.list.d/nginx.list -$STD apt-get update -$STD apt-get install -y nginx=1.26.3* -msg_ok "Installed Nginx" - RELEASE=$(curl -fsSL https://api.github.com/repos/bunkerity/bunkerweb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') msg_info "Installing BunkerWeb v${RELEASE} (Patience)" -curl -fsSL "https://repo.bunkerweb.io/bunkerity/bunkerweb/gpgkey" | gpg --dearmor >/etc/apt/keyrings/bunkerity_bunkerweb-archive-keyring.gpg -echo "deb [signed-by=/etc/apt/keyrings/bunkerity_bunkerweb-archive-keyring.gpg] https://repo.bunkerweb.io/bunkerity/bunkerweb/debian/ bookworm main" >/etc/apt/sources.list.d/bunkerity_bunkerweb.list -$STD apt-get update -$STD apt-get install -y bunkerweb=${RELEASE} +curl -fsSL -o install-bunkerweb.sh https://github.com/bunkerity/bunkerweb/raw/v${RELEASE}/misc/install-bunkerweb.sh +chmod +x install-bunkerweb.sh +$STD ./install-bunkerweb.sh --yes +$STD apt-mark unhold bunkerweb nginx cat </etc/apt/preferences.d/bunkerweb Package: bunkerweb Pin: version ${RELEASE} From 2ce64b50045c6d6e7d15e1609ea83b5dd373cd43 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, 7 Jul 2025 09:05:32 +0100 Subject: [PATCH 102/229] Update CHANGELOG.md (#5782) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44523a415..f0da5e294 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,12 @@ All LXC instances created using this repository come pre-installed with Midnight ## 2025-07-07 +### 🚀 Updated Scripts + + - #### 🔧 Refactor + + - Refactor: Changed the way we install BunkerWeb by leveraging the brand new install-bunkerweb.sh [@TheophileDiot](https://github.com/TheophileDiot) ([#5707](https://github.com/community-scripts/ProxmoxVE/pull/5707)) + ### 🌐 Website - #### 📝 Script Information From e58ad9237a7e8aa071c6e752a1b711020ba75592 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 7 Jul 2025 10:45:49 +0200 Subject: [PATCH 103/229] Improve AutoLabler --- .github/autolabeler-config.json | 27 +++++++++++++++++++++++ .github/workflows/autolabeler.yml | 36 +++++++++++++++---------------- 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/.github/autolabeler-config.json b/.github/autolabeler-config.json index ad9ce69e5..1b30e419b 100644 --- a/.github/autolabeler-config.json +++ b/.github/autolabeler-config.json @@ -121,5 +121,32 @@ ], "excludeGlobs": [] } + ], + "addon": [ + { + "fileStatus": null, + "includeGlobs": [ + "tools/addon/**" + ], + "excludeGlobs": [] + } + ], + "pve-tool": [ + { + "fileStatus": null, + "includeGlobs": [ + "tools/pve/**" + ], + "excludeGlobs": [] + } + ], + "vm": [ + { + "fileStatus": null, + "includeGlobs": [ + "vm/**" + ], + "excludeGlobs": [] + } ] } diff --git a/.github/workflows/autolabeler.yml b/.github/workflows/autolabeler.yml index 568158c19..a14cc7768 100644 --- a/.github/workflows/autolabeler.yml +++ b/.github/workflows/autolabeler.yml @@ -19,7 +19,7 @@ jobs: - name: Install dependencies run: npm install minimatch - + - name: Label PR based on file changes and PR template uses: actions/github-script@v7 with: @@ -43,51 +43,51 @@ jobs: pull_number: prNumber, }); const prFiles = prListFilesResponse.data; - - - // Apply labels based on file changes for (const [label, rules] of Object.entries(autolabelerConfig)) { const shouldAddLabel = prFiles.some((prFile) => { return rules.some((rule) => { const isFileStatusMatch = rule.fileStatus ? rule.fileStatus === prFile.status : true; const isIncludeGlobMatch = rule.includeGlobs.some((glob) => minimatch(prFile.filename, glob)); const isExcludeGlobMatch = rule.excludeGlobs.some((glob) => minimatch(prFile.filename, glob)); - return isFileStatusMatch && isIncludeGlobMatch && !isExcludeGlobMatch; }); }); if (shouldAddLabel) { labelsToAdd.add(label); + if (label === "update script") { + for (const prFile of prFiles) { + const filename = prFile.filename; + if (filename.startsWith("vm/")) labelsToAdd.add("vm"); + if (filename.startsWith("tools/addon/")) labelsToAdd.add("addon"); + if (filename.startsWith("tools/pve/")) labelsToAdd.add("pve-tool"); + } + } } } - //if two labels or more are added, return - if (labelsToAdd.size < 2) { - const templateLabelMappings = { + + if (labelsToAdd.size < 2) { + const templateLabelMappings = { "🐞 **Bug fix**": "bugfix", "✨ **New feature**": "feature", "💥 **Breaking change**": "breaking change", + "🆕 **New script**": "new script", + "🌍 **Website update**": "website", "🔧 **Refactoring / Code Cleanup**": "refactor", + "📝 **Documentation update**": "documentation" }; for (const [checkbox, label] of Object.entries(templateLabelMappings)) { - const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); - const regex = new RegExp(`- \\[(x|X)\\]\\s*.*${escapedCheckbox}`, "i"); - const match = prBody.match(regex); - if (match) { - console.log(`Match: ${match}`); + const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1"); + const regex = new RegExp(`- \[(x|X)\]\s*.*${escapedCheckbox}`, "i"); + if (regex.test(prBody)) { labelsToAdd.add(label); } } } - - - console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`); - if (labelsToAdd.size > 0) { - console.log(`Adding labels ${Array.from(labelsToAdd).join(", ")} to PR ${prNumber}`); await github.rest.issues.addLabels({ owner: context.repo.owner, repo: context.repo.repo, From e63128625e6a47944db9e614cec77425919b6194 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 7 Jul 2025 10:55:07 +0200 Subject: [PATCH 104/229] Bookstack: Fix PHP Issue & Bump to PHP 8.3 (#5779) --- ct/bookstack.sh | 1 + install/bookstack-install.sh | 3 ++- misc/tools.func | 15 +++++++++++---- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/ct/bookstack.sh b/ct/bookstack.sh index b1710edd2..97161a27c 100644 --- a/ct/bookstack.sh +++ b/ct/bookstack.sh @@ -39,6 +39,7 @@ function update_script() { msg_ok "Backup finished" fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack" + PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php msg_info "Restoring backup" cp /opt/bookstack-backup/.env /opt/bookstack/.env diff --git a/install/bookstack-install.sh b/install/bookstack-install.sh index b279a87e9..917af8bea 100644 --- a/install/bookstack-install.sh +++ b/install/bookstack-install.sh @@ -19,7 +19,8 @@ $STD apt-get install -y \ make msg_ok "Installed Dependencies" -PHP_MODULE="fpm, ldap, tidy, bz2, mysql" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.2" setup_php +PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php + setup_composer setup_mariadb diff --git a/misc/tools.func b/misc/tools.func index ba474dbb7..92cffe55e 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -434,6 +434,13 @@ function setup_php() { $STD apt-get update fi + for pkg in $MODULE_LIST; do + if ! apt-cache show "$pkg" >/dev/null 2>&1; then + msg_error "Package not found: $pkg" + exit 1 + fi + done + local MODULE_LIST="php${PHP_VERSION}" IFS=',' read -ra MODULES <<<"$COMBINED_MODULES" for mod in "${MODULES[@]}"; do @@ -443,6 +450,10 @@ function setup_php() { if [[ "$PHP_FPM" == "YES" ]]; then MODULE_LIST+=" php${PHP_VERSION}-fpm" fi + if [[ "$PHP_APACHE" == "YES" ]]; then + $STD apt-get install -y apache2 + $STD systemctl restart apache2 || true + fi if [[ "$PHP_APACHE" == "YES" ]] && [[ -n "$CURRENT_PHP" ]]; then if [[ -f /etc/apache2/mods-enabled/php${CURRENT_PHP}.load ]]; then @@ -458,10 +469,6 @@ function setup_php() { $STD apt-get install -y $MODULE_LIST msg_ok "Setup PHP $PHP_VERSION" - if [[ "$PHP_APACHE" == "YES" ]]; then - $STD systemctl restart apache2 || true - fi - if [[ "$PHP_FPM" == "YES" ]]; then $STD systemctl enable php${PHP_VERSION}-fpm $STD systemctl restart php${PHP_VERSION}-fpm From 160846e98bd6ce2f0671798fc54f6e0a6dd15b69 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, 7 Jul 2025 09:55:33 +0100 Subject: [PATCH 105/229] Update CHANGELOG.md (#5784) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0da5e294..434689ed1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,10 @@ All LXC instances created using this repository come pre-installed with Midnight ### 🚀 Updated Scripts + - #### 🐞 Bug Fixes + + - Bookstack: Fix PHP Issue & Bump to PHP 8.3 [@MickLesk](https://github.com/MickLesk) ([#5779](https://github.com/community-scripts/ProxmoxVE/pull/5779)) + - #### 🔧 Refactor - Refactor: Changed the way we install BunkerWeb by leveraging the brand new install-bunkerweb.sh [@TheophileDiot](https://github.com/TheophileDiot) ([#5707](https://github.com/community-scripts/ProxmoxVE/pull/5707)) From be6a63cd03c31756e6bf05cc7449539ff5276aa6 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 7 Jul 2025 10:59:20 +0200 Subject: [PATCH 106/229] tools.func: add AVX check for MongoDB (#5780) --- misc/tools.func | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/misc/tools.func b/misc/tools.func index 92cffe55e..0e0a5ea0d 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -658,6 +658,15 @@ function setup_mongodb() { DISTRO_ID=$(awk -F= '/^ID=/{ gsub(/"/,"",$2); print $2 }' /etc/os-release) DISTRO_CODENAME=$(awk -F= '/^VERSION_CODENAME=/{ print $2 }' /etc/os-release) + # Check AVX support + if ! grep -qm1 'avx[^ ]*' /proc/cpuinfo; then + local major="${MONGO_VERSION%%.*}" + if ((major > 5)); then + msg_error "MongoDB ${MONGO_VERSION} requires AVX support, which is not available on this system." + return 1 + fi + fi + case "$DISTRO_ID" in ubuntu) MONGO_BASE_URL="https://repo.mongodb.org/apt/ubuntu" From 3336f6a6f5c1e030461f2f5b77b095615a1e155e 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, 7 Jul 2025 09:59:55 +0100 Subject: [PATCH 107/229] Update CHANGELOG.md (#5785) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 434689ed1..8351415e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,10 @@ All LXC instances created using this repository come pre-installed with Midnight - Bookstack: Fix PHP Issue & Bump to PHP 8.3 [@MickLesk](https://github.com/MickLesk) ([#5779](https://github.com/community-scripts/ProxmoxVE/pull/5779)) + - #### ✨ New Features + + - tools.func: add AVX check for MongoDB [@MickLesk](https://github.com/MickLesk) ([#5780](https://github.com/community-scripts/ProxmoxVE/pull/5780)) + - #### 🔧 Refactor - Refactor: Changed the way we install BunkerWeb by leveraging the brand new install-bunkerweb.sh [@TheophileDiot](https://github.com/TheophileDiot) ([#5707](https://github.com/community-scripts/ProxmoxVE/pull/5707)) From 6996111473ea7c1ae03d413d81dceab96c269258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Mon, 7 Jul 2025 11:00:19 +0200 Subject: [PATCH 108/229] Refactor: Baby Buddy (#5769) * Refactor * Update babybuddy.sh --- ct/babybuddy.sh | 12 +++--------- install/babybuddy-install.sh | 8 ++------ 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/ct/babybuddy.sh b/ct/babybuddy.sh index 741dbc84f..2b34ade96 100644 --- a/ct/babybuddy.sh +++ b/ct/babybuddy.sh @@ -29,7 +29,7 @@ function update_script() { fi RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/babybuddy_version.txt)" ]]; then + if [[ "${RELEASE}" != "$(cat ~/.babybuddy 2>/dev/null)" ]] || [[ ! -f ~/.babybuddy ]]; then setup_uv msg_info "Stopping Services" @@ -42,17 +42,14 @@ function update_script() { find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} + msg_ok "Cleaned old files" + fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy" + msg_info "Updating ${APP} to v${RELEASE}" - temp_file=$(mktemp) - curl -fsSL "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" cd /opt/babybuddy - tar zxf "$temp_file" --strip-components=1 -C /opt/babybuddy mv /tmp/production.py.bak babybuddy/settings/production.py - cd /opt/babybuddy source .venv/bin/activate $STD uv pip install -r requirements.txt $STD python manage.py migrate - echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated ${APP} to v${RELEASE}" msg_info "Fixing permissions" @@ -66,9 +63,6 @@ function update_script() { systemctl start nginx msg_ok "Services Started" - msg_info "Cleaning up" - rm -f "$temp_file" - msg_ok "Cleaned" msg_ok "Updated Successfully" else msg_ok "No update required. ${APP} is already at v${RELEASE}" diff --git a/install/babybuddy-install.sh b/install/babybuddy-install.sh index 424edaa11..16b6e72d4 100644 --- a/install/babybuddy-install.sh +++ b/install/babybuddy-install.sh @@ -24,13 +24,10 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" setup_uv +fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy" msg_info "Installing Babybuddy" -RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -temp_file=$(mktemp) -mkdir -p /opt/{babybuddy,data} -curl -fsSL "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" -tar zxf "$temp_file" --strip-components=1 -C /opt/babybuddy +mkdir -p /opt/data cd /opt/babybuddy $STD uv venv .venv $STD source .venv/bin/activate @@ -102,7 +99,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -f "$temp_file" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 3847442ca53d276fa681ce72c522765ee2034587 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, 7 Jul 2025 10:00:44 +0100 Subject: [PATCH 109/229] Update CHANGELOG.md (#5786) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8351415e6..7cee0c142 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🔧 Refactor + - Refactor: Baby Buddy [@tremor021](https://github.com/tremor021) ([#5769](https://github.com/community-scripts/ProxmoxVE/pull/5769)) - Refactor: Changed the way we install BunkerWeb by leveraging the brand new install-bunkerweb.sh [@TheophileDiot](https://github.com/TheophileDiot) ([#5707](https://github.com/community-scripts/ProxmoxVE/pull/5707)) ### 🌐 Website From c2a7e990bd38e7646cfe1de3104c0b362817b841 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 7 Jul 2025 11:01:39 +0200 Subject: [PATCH 110/229] tools.func: better handling when unpacking tarfiles in prebuild mode (#5781) --- misc/tools.func | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/misc/tools.func b/misc/tools.func index 0e0a5ea0d..e59602162 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -957,7 +957,11 @@ function fetch_and_deploy_gh_release() { fi $STD unzip "$tmpdir/$filename" -d "$target" elif [[ "$filename" == *.tar.* ]]; then - tar --strip-components=1 -xf "$tmpdir/$filename" -C "$target" + if tar -tf "$tmpdir/$filename" | grep -qE '^([^/]+/){2}'; then + tar --strip-components=1 -xf "$tmpdir/$filename" -C "$target" + else + tar -xf "$tmpdir/$filename" -C "$target" + fi else msg_error "Unsupported archive format: $filename" rm -rf "$tmpdir" From 5c5d5d52ce925b7bdb0bbb7fc8baae0edd7a8807 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, 7 Jul 2025 10:02:09 +0100 Subject: [PATCH 111/229] Update CHANGELOG.md (#5787) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cee0c142..a6e4447bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### ✨ New Features + - tools.func: better handling when unpacking tarfiles in prebuild mode [@MickLesk](https://github.com/MickLesk) ([#5781](https://github.com/community-scripts/ProxmoxVE/pull/5781)) - tools.func: add AVX check for MongoDB [@MickLesk](https://github.com/MickLesk) ([#5780](https://github.com/community-scripts/ProxmoxVE/pull/5780)) - #### 🔧 Refactor From 2586c9f385a0454f01ff55344737922f6fe5f9bf Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 7 Jul 2025 13:17:03 +0200 Subject: [PATCH 112/229] Refactor: Threadfin (+ updateble) (#5783) --- ct/threadfin.sh | 24 ++++++++++++++++++------ frontend/public/json/threadfin.json | 2 +- install/threadfin-install.sh | 12 ++++-------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/ct/threadfin.sh b/ct/threadfin.sh index f996d3192..e328fe7ca 100644 --- a/ct/threadfin.sh +++ b/ct/threadfin.sh @@ -27,12 +27,24 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - msg_info "Updating $APP" - systemctl stop threadfin.service - curl -fsSL "https://github.com/Threadfin/Threadfin/releases/latest/download/Threadfin_linux_amd64" -o "/opt/threadfin/threadfin" - chmod +x /opt/threadfin/threadfin - systemctl start threadfin.service - msg_ok "Updated $APP" + + RELEASE=$(curl -fsSL https://api.github.com/repos/threadfin/threadfin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + if [[ "${RELEASE}" != "$(cat ~/.threadfin 2>/dev/null)" ]] || [[ ! -f ~/.threadfin ]]; then + + msg_info "Stopping $APP" + systemctl stop threadfin + msg_ok "Stopped $APP" + + fetch_and_deploy_gh_release "threadfin" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64" + + msg_info "Starting $APP" + systemctl start threadfin + msg_ok "Started $APP" + + msg_ok "Updated Successfully" + else + msg_ok "No update required. ${APP} is already at v${RELEASE}" + fi exit } diff --git a/frontend/public/json/threadfin.json b/frontend/public/json/threadfin.json index 04774f663..81dd3cb9d 100644 --- a/frontend/public/json/threadfin.json +++ b/frontend/public/json/threadfin.json @@ -6,7 +6,7 @@ ], "date_created": "2024-06-12", "type": "ct", - "updateable": false, + "updateable": true, "privileged": false, "interface_port": 34400, "documentation": null, diff --git a/install/threadfin-install.sh b/install/threadfin-install.sh index 5e4b92a6d..9db423bd3 100644 --- a/install/threadfin-install.sh +++ b/install/threadfin-install.sh @@ -14,16 +14,12 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y ffmpeg -$STD apt-get install -y vlc +$STD apt-get install -y \ + ffmpeg \ + vlc msg_ok "Installed Dependencies" -msg_info "Installing Threadfin" -mkdir -p /opt/threadfin -curl -fsSL "https://github.com/Threadfin/Threadfin/releases/latest/download/Threadfin_linux_amd64" -o "/opt/threadfin/threadfin" -chmod +x /opt/threadfin/threadfin - -msg_ok "Installed Threadfin" +fetch_and_deploy_gh_release "threadfin" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64" msg_info "Creating Service" cat </etc/systemd/system/threadfin.service From 372b52f64da840b1247741add3e4f452e0bc8d8c 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, 7 Jul 2025 12:17:43 +0100 Subject: [PATCH 113/229] Update CHANGELOG.md (#5789) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6e4447bc..e99eab997 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### ✨ New Features + - Refactor: Threadfin (+ updatable) [@MickLesk](https://github.com/MickLesk) ([#5783](https://github.com/community-scripts/ProxmoxVE/pull/5783)) - tools.func: better handling when unpacking tarfiles in prebuild mode [@MickLesk](https://github.com/MickLesk) ([#5781](https://github.com/community-scripts/ProxmoxVE/pull/5781)) - tools.func: add AVX check for MongoDB [@MickLesk](https://github.com/MickLesk) ([#5780](https://github.com/community-scripts/ProxmoxVE/pull/5780)) From 59f99a27d2ad58246ebdc9eb6b945aee263549ce Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 7 Jul 2025 13:21:44 +0200 Subject: [PATCH 114/229] PBS: add hint for advanced installs (#5788) --- frontend/public/json/proxmox-backup-server.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/public/json/proxmox-backup-server.json b/frontend/public/json/proxmox-backup-server.json index 8cebbf0f2..4fd37eeed 100644 --- a/frontend/public/json/proxmox-backup-server.json +++ b/frontend/public/json/proxmox-backup-server.json @@ -35,6 +35,10 @@ { "text": "Set a root password if using autologin. This will be the PBS password. `passwd root`", "type": "warning" + }, + { + "text": "Advanced Install is only possible without root password and root SSH access, you can configure this after installation.", + "type": "warning" } ] } From 69d2835c73dfb330e9a57829d87c19da87f1efd4 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, 7 Jul 2025 12:22:18 +0100 Subject: [PATCH 115/229] Update CHANGELOG.md (#5792) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e99eab997..517990f54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 📝 Script Information + - PBS: add hint for advanced installs [@MickLesk](https://github.com/MickLesk) ([#5788](https://github.com/community-scripts/ProxmoxVE/pull/5788)) - EMQX: Add warning to website [@tremor021](https://github.com/tremor021) ([#5770](https://github.com/community-scripts/ProxmoxVE/pull/5770)) ## 2025-07-06 From 9ddf10f82e43b5ba7abfc4a8e3f25b858e086b3e 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, 7 Jul 2025 14:07:47 +0200 Subject: [PATCH 116/229] Update versions.json (#5795) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 140 ++++++++++++++--------------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index b725ea030..881acdf69 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,69 @@ [ + { + "name": "VictoriaMetrics/VictoriaMetrics", + "version": "v1.121.0", + "date": "2025-07-07T11:32:39Z" + }, + { + "name": "meilisearch/meilisearch", + "version": "prototype-incremental-vector-store-3", + "date": "2025-07-07T10:27:19Z" + }, + { + "name": "Paymenter/Paymenter", + "version": "v1.2.1", + "date": "2025-07-07T10:11:26Z" + }, + { + "name": "Checkmk/checkmk", + "version": "v2.4.0p7-rc1", + "date": "2025-07-07T09:25:01Z" + }, + { + "name": "nzbgetcom/nzbget", + "version": "v25.2", + "date": "2025-07-04T08:21:42Z" + }, + { + "name": "zwave-js/zwave-js-ui", + "version": "v10.8.0", + "date": "2025-07-07T08:37:45Z" + }, + { + "name": "morpheus65535/bazarr", + "version": "v1.5.2", + "date": "2025-05-11T16:40:55Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.2125", + "date": "2025-07-07T05:56:33Z" + }, + { + "name": "mattermost/mattermost", + "version": "preview-v0.1", + "date": "2025-06-27T14:35:47Z" + }, + { + "name": "MediaBrowser/Emby.Releases", + "version": "4.9.1.2", + "date": "2025-06-26T22:08:00Z" + }, + { + "name": "firefly-iii/firefly-iii", + "version": "v6.2.20", + "date": "2025-07-02T04:03:37Z" + }, + { + "name": "steveiliop56/tinyauth", + "version": "v3.4.1", + "date": "2025-06-11T07:53:44Z" + }, + { + "name": "slskd/slskd", + "version": "0.23.1", + "date": "2025-07-06T23:57:52Z" + }, { "name": "pelican-dev/panel", "version": "v1.0.0-beta22", @@ -34,11 +99,6 @@ "version": "v6.8.0", "date": "2025-07-06T18:19:05Z" }, - { - "name": "firefly-iii/firefly-iii", - "version": "v6.2.20", - "date": "2025-07-02T04:03:37Z" - }, { "name": "msgbyte/tianji", "version": "v1.23.0", @@ -59,11 +119,6 @@ "version": "8.0.3", "date": "2025-07-06T12:19:24Z" }, - { - "name": "Jackett/Jackett", - "version": "v0.22.2123", - "date": "2025-07-06T06:01:32Z" - }, { "name": "fallenbagel/jellyseerr", "version": "preview-OIDC", @@ -74,16 +129,6 @@ "version": "2.1.1", "date": "2025-06-14T17:45:06Z" }, - { - "name": "steveiliop56/tinyauth", - "version": "v3.4.1", - "date": "2025-06-11T07:53:44Z" - }, - { - "name": "slskd/slskd", - "version": "0.23.0", - "date": "2025-07-06T00:02:35Z" - }, { "name": "Kareadita/Kavita", "version": "v0.8.7", @@ -114,11 +159,6 @@ "version": "v11.11.4", "date": "2025-07-05T09:23:25Z" }, - { - "name": "Paymenter/Paymenter", - "version": "v1.2.0", - "date": "2025-07-05T08:58:05Z" - }, { "name": "linkwarden/linkwarden", "version": "v2.11.3", @@ -144,6 +184,11 @@ "version": "v1.6.2", "date": "2025-07-04T15:21:18Z" }, + { + "name": "emqx/emqx", + "version": "e6.0.0-M1.202507-alpha.1", + "date": "2025-07-04T14:58:23Z" + }, { "name": "kimai/kimai", "version": "2.37.0", @@ -159,21 +204,6 @@ "version": "6.3.1", "date": "2025-07-04T11:20:48Z" }, - { - "name": "mattermost/mattermost", - "version": "preview-v0.1", - "date": "2025-06-27T14:35:47Z" - }, - { - "name": "nzbgetcom/nzbget", - "version": "v25.2", - "date": "2025-07-04T08:21:42Z" - }, - { - "name": "Checkmk/checkmk", - "version": "v2.2.0p44", - "date": "2025-07-04T06:44:06Z" - }, { "name": "outline/outline", "version": "v0.85.0", @@ -234,11 +264,6 @@ "version": "v1.12.2-rc.0", "date": "2025-07-03T00:31:22Z" }, - { - "name": "emqx/emqx", - "version": "v5.8.7", - "date": "2025-07-02T21:54:54Z" - }, { "name": "hargata/lubelog", "version": "v1.4.8", @@ -414,11 +439,6 @@ "version": "flowise@3.0.3", "date": "2025-06-27T09:53:57Z" }, - { - "name": "MediaBrowser/Emby.Releases", - "version": "4.9.1.2", - "date": "2025-06-26T22:08:00Z" - }, { "name": "netbox-community/netbox", "version": "v4.3.3", @@ -439,11 +459,6 @@ "version": "v3.5.0-rc1", "date": "2025-06-26T15:08:43Z" }, - { - "name": "meilisearch/meilisearch", - "version": "prototype-no-simd-x86-arroy-0", - "date": "2025-06-26T14:54:18Z" - }, { "name": "AdguardTeam/AdGuardHome", "version": "v0.107.63", @@ -499,11 +514,6 @@ "version": "RELEASE.2025-06-13T11-33-47Z", "date": "2025-06-23T20:58:42Z" }, - { - "name": "VictoriaMetrics/VictoriaMetrics", - "version": "pmm-6401-v1.120.0", - "date": "2025-06-23T15:12:12Z" - }, { "name": "gotson/komga", "version": "1.22.0", @@ -604,11 +614,6 @@ "version": "v5.6.0", "date": "2025-06-18T12:19:54Z" }, - { - "name": "zwave-js/zwave-js-ui", - "version": "v10.7.0", - "date": "2025-06-18T11:57:05Z" - }, { "name": "forgejo/forgejo", "version": "v11.0.2", @@ -639,11 +644,6 @@ "version": "v1.6.9", "date": "2025-06-17T11:54:50Z" }, - { - "name": "morpheus65535/bazarr", - "version": "v1.5.2", - "date": "2025-05-11T16:40:55Z" - }, { "name": "donaldzou/WGDashboard", "version": "v4.2.4", From d59aa0527ab2eb54ec2f607575ee1cff8a9381ed Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 7 Jul 2025 14:26:07 +0200 Subject: [PATCH 117/229] IP-Tag: Optimizations / Guide / Manual Execution (#5791) * IP-Tag: Optimizations / Guide / Manual Execution * warning > info * Update add-iptag.json --- frontend/public/json/add-iptag.json | 6 ++++- tools/pve/add-iptag.sh | 37 ++++++++++++++++++++++------- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/frontend/public/json/add-iptag.json b/frontend/public/json/add-iptag.json index e4cb78a31..1545e0f51 100644 --- a/frontend/public/json/add-iptag.json +++ b/frontend/public/json/add-iptag.json @@ -37,12 +37,16 @@ "type": "info" }, { - "text": "Configuration: `nano /opt/iptag/iptag.conf`. iptag.service must be restarted after change.", + "text": "Configuration: `nano /opt/iptag/iptag.conf`. iptag Service must be restarted after change. See here for full documentation: `https://github.com/community-scripts/ProxmoxVE/discussions/5790`", "type": "info" }, { "text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`", "type": "warning" + }, + { + "text": "You can execute the ip tool manually with `iptag-run`", + "type": "info" } ] } diff --git a/tools/pve/add-iptag.sh b/tools/pve/add-iptag.sh index 8a0f42306..dbfed2787 100644 --- a/tools/pve/add-iptag.sh +++ b/tools/pve/add-iptag.sh @@ -194,16 +194,16 @@ LXC_STATUS_CHECK_INTERVAL=300 FORCE_UPDATE_INTERVAL=7200 # Performance optimizations -VM_IP_CACHE_TTL=120 -MAX_PARALLEL_VM_CHECKS=5 +VM_IP_CACHE_TTL=300 +MAX_PARALLEL_VM_CHECKS=2 # LXC performance optimizations -LXC_IP_CACHE_TTL=0 -MAX_PARALLEL_LXC_CHECKS=7 +LXC_IP_CACHE_TTL=300 +MAX_PARALLEL_LXC_CHECKS=2 # Extreme LXC optimizations -LXC_BATCH_SIZE=20 -LXC_STATUS_CACHE_TTL=30 +LXC_BATCH_SIZE=3 +LXC_STATUS_CACHE_TTL=300 LXC_AGGRESSIVE_CACHING=true LXC_SKIP_SLOW_METHODS=true @@ -222,8 +222,8 @@ After=network.target [Service] Type=simple ExecStart=/opt/iptag/iptag -Restart=always -RestartSec=1 +Restart=on-failure +RestartSec=10 [Install] WantedBy=multi-user.target @@ -872,7 +872,11 @@ main() { echo -e "${BLUE}ℹ${NC} Tag format: ${WHITE}${TAG_FORMAT:-$DEFAULT_TAG_FORMAT}${NC}" echo -e "${BLUE}ℹ${NC} Allowed CIDRs: ${WHITE}${CIDR_LIST[*]}${NC}" echo -e "${PURPLE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n" - check + + while true; do + check + sleep "${LOOP_INTERVAL:-300}" + done } # Cache cleanup function @@ -1310,6 +1314,21 @@ msg_info "Restarting Service with optimizations" systemctl restart iptag.service &>/dev/null msg_ok "Service restarted with CPU optimizations" +msg_info "Creating manual run command" +cat <<'EOF' >/usr/local/bin/iptag-run +#!/usr/bin/env bash +CONFIG_FILE="/opt/iptag/iptag.conf" +SCRIPT_FILE="/opt/iptag/iptag" +if [[ ! -f "$SCRIPT_FILE" ]]; then + echo "❌ Main script not found: $SCRIPT_FILE" + exit 1 +fi +export FORCE_SINGLE_RUN=true +exec "$SCRIPT_FILE" +EOF +chmod +x /usr/local/bin/iptag-run +msg_ok "Created iptag-run executable - You can execute this manually by entering “iptag-run” in the Proxmox host, so the script is executed by hand." + SPINNER_PID="" echo -e "\n${APP} installation completed successfully! ${CL}\n" From 37d466103d2e1fdbba3d699f4a8a942677cb2702 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 7 Jul 2025 14:41:23 +0200 Subject: [PATCH 118/229] little cpu fixes --- tools/pve/add-iptag.sh | 91 ++++++++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 34 deletions(-) diff --git a/tools/pve/add-iptag.sh b/tools/pve/add-iptag.sh index dbfed2787..21b0d7104 100644 --- a/tools/pve/add-iptag.sh +++ b/tools/pve/add-iptag.sh @@ -162,6 +162,21 @@ update_installation() { generate_service >/lib/systemd/system/iptag.service msg_ok "Updated service file" + msg_info "Creating manual run command" + cat <<'EOF' >/usr/local/bin/iptag-run +#!/usr/bin/env bash +CONFIG_FILE="/opt/iptag/iptag.conf" +SCRIPT_FILE="/opt/iptag/iptag" +if [[ ! -f "$SCRIPT_FILE" ]]; then + echo "❌ Main script not found: $SCRIPT_FILE" + exit 1 +fi +export FORCE_SINGLE_RUN=true +exec "$SCRIPT_FILE" +EOF + chmod +x /usr/local/bin/iptag-run + msg_ok "Created iptag-run executable - You can execute this manually by entering “iptag-run” in the Proxmox host, so the script is executed by hand." + msg_info "Restarting service" systemctl daemon-reload &>/dev/null systemctl enable -q --now iptag.service &>/dev/null @@ -195,7 +210,7 @@ FORCE_UPDATE_INTERVAL=7200 # Performance optimizations VM_IP_CACHE_TTL=300 -MAX_PARALLEL_VM_CHECKS=2 +MAX_PARALLEL_VM_CHECKS=1 # LXC performance optimizations LXC_IP_CACHE_TTL=300 @@ -206,6 +221,7 @@ LXC_BATCH_SIZE=3 LXC_STATUS_CACHE_TTL=300 LXC_AGGRESSIVE_CACHING=true LXC_SKIP_SLOW_METHODS=true +LXC_ALLOW_FORCED_COMMANDS=false # Debug settings (set to true to enable debugging) DEBUG=false @@ -576,7 +592,9 @@ update_tags() { if [[ "$type" == "lxc" ]]; then current_ips_full=$(get_lxc_ips "${vmid}") - local current_tags_raw=$(pct config "${vmid}" 2>/dev/null | grep tags | awk '{print $2}') + while IFS= read -r line; do + [[ "$line" == tags:* ]] && current_tags_raw="${line#tags: }" && break + done < <(pct config "$vmid" 2>/dev/null) else current_ips_full=$(get_vm_ips "${vmid}") local vm_config="/etc/pve/qemu-server/${vmid}.conf" @@ -789,7 +807,10 @@ check_status_changed() { check() { local current_time changes_detected=false current_time=$(date +%s) - + + local update_lxc=false + local update_vm=false + # Periodic cache cleanup (every 10 minutes) local time_since_last_cleanup=$((current_time - ${last_cleanup_time:-0})) if [[ $time_since_last_cleanup -ge 600 ]]; then @@ -801,60 +822,56 @@ check() { # Check LXC status local time_since_last_lxc_check=$((current_time - last_lxc_status_check_time)) if [[ "${LXC_STATUS_CHECK_INTERVAL:-60}" -gt 0 ]] && \ - [[ "${time_since_last_lxc_check}" -ge "${LXC_STATUS_CHECK_INTERVAL:-60}" ]]; then - last_lxc_status_check_time=${current_time} + [[ "$time_since_last_lxc_check" -ge "${LXC_STATUS_CHECK_INTERVAL:-60}" ]]; then + last_lxc_status_check_time=$current_time if check_status_changed "lxc"; then - changes_detected=true - log_warning "LXC status changes detected, updating tags" - update_all_tags "lxc" - last_update_lxc_time=${current_time} + update_lxc=true + log_warning "LXC status changes detected" fi fi # Check VM status local time_since_last_vm_check=$((current_time - last_vm_status_check_time)) if [[ "${VM_STATUS_CHECK_INTERVAL:-60}" -gt 0 ]] && \ - [[ "${time_since_last_vm_check}" -ge "${VM_STATUS_CHECK_INTERVAL:-60}" ]]; then - last_vm_status_check_time=${current_time} + [[ "$time_since_last_vm_check" -ge "${VM_STATUS_CHECK_INTERVAL:-60}" ]]; then + last_vm_status_check_time=$current_time if check_status_changed "vm"; then - changes_detected=true - log_warning "VM status changes detected, updating tags" - update_all_tags "vm" - last_update_vm_time=${current_time} + update_vm=true + log_warning "VM status changes detected" fi fi # Check network interface changes local time_since_last_fw_check=$((current_time - last_fw_net_interface_check_time)) if [[ "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" -gt 0 ]] && \ - [[ "${time_since_last_fw_check}" -ge "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" ]]; then - last_fw_net_interface_check_time=${current_time} + [[ "$time_since_last_fw_check" -ge "${FW_NET_INTERFACE_CHECK_INTERVAL:-60}" ]]; then + last_fw_net_interface_check_time=$current_time if check_status_changed "fw"; then - changes_detected=true - log_warning "Network interface changes detected, updating all tags" - update_all_tags "lxc" - update_all_tags "vm" - last_update_lxc_time=${current_time} - last_update_vm_time=${current_time} + update_lxc=true + update_vm=true + log_warning "Network interface changes detected" fi fi - # Force update if needed + # Force update if interval exceeded for type in "lxc" "vm"; do local last_update_var="last_update_${type}_time" local time_since_last_update=$((current_time - ${!last_update_var})) - if [[ ${time_since_last_update} -ge ${FORCE_UPDATE_INTERVAL:-1800} ]]; then - changes_detected=true - local minutes=$((${FORCE_UPDATE_INTERVAL:-1800} / 60)) + if [[ $time_since_last_update -ge ${FORCE_UPDATE_INTERVAL:-1800} ]]; then if [[ "$type" == "lxc" ]]; then - log_info "Scheduled LXC update (every ${minutes} minutes)" + update_lxc=true + log_info "Scheduled LXC update (every $((FORCE_UPDATE_INTERVAL / 60)) minutes)" else - log_info "Scheduled VM update (every ${minutes} minutes)" + update_vm=true + log_info "Scheduled VM update (every $((FORCE_UPDATE_INTERVAL / 60)) minutes)" fi - update_all_tags "$type" eval "${last_update_var}=${current_time}" fi done + + # Final execution + $update_lxc && update_all_tags "lxc" + $update_vm && update_all_tags "vm" } # Initialize time variables @@ -872,13 +889,19 @@ main() { echo -e "${BLUE}ℹ${NC} Tag format: ${WHITE}${TAG_FORMAT:-$DEFAULT_TAG_FORMAT}${NC}" echo -e "${BLUE}ℹ${NC} Allowed CIDRs: ${WHITE}${CIDR_LIST[*]}${NC}" echo -e "${PURPLE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n" - + + if [[ "$FORCE_SINGLE_RUN" == "true" ]]; then + check + exit 0 + fi + while true; do check sleep "${LOOP_INTERVAL:-300}" done } + # Cache cleanup function cleanup_vm_cache() { local cache_dir="/tmp" @@ -1001,7 +1024,7 @@ process_vms_parallel() { # Parallel LXC processing function process_lxc_parallel() { local lxc_list=("$@") - local max_parallel=${MAX_PARALLEL_LXC_CHECKS:-7} + local max_parallel=${MAX_PARALLEL_LXC_CHECKS:-2} local batch_size=${LXC_BATCH_SIZE:-20} local job_count=0 local pids=() @@ -1177,7 +1200,7 @@ get_lxc_ips() { fi # Fallback: always do lxc-attach/pct exec with timeout if nothing found - if [[ -z "$ips" ]]; then + if [[ -z "$ips" && "${LXC_ALLOW_FORCED_COMMANDS:-true}" == "true" ]]; then debug_log "lxc $vmid: trying fallback lxc-attach (forced)" local attach_ip="" attach_ip=$(timeout 7s lxc-attach -n "$vmid" -- ip -4 addr show 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | grep -v '127.0.0.1' | head -1) @@ -1192,7 +1215,7 @@ get_lxc_ips() { method_used="lxc_attach_forced" fi fi - if [[ -z "$ips" ]]; then + if [[ -z "$ips" && "${LXC_ALLOW_FORCED_COMMANDS:-true}" == "true" ]]; then debug_log "lxc $vmid: trying fallback pct exec (forced)" local pct_ip="" pct_ip=$(timeout 7s pct exec "$vmid" -- ip -4 addr show 2>/dev/null | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | grep -v '127.0.0.1' | head -1) From 2d77790b6498a171f4e8179822cf665ea54a2294 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 7 Jul 2025 14:53:56 +0200 Subject: [PATCH 119/229] remove uneeded hint --- CHANGELOG.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 517990f54..cf0418f2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,10 +10,6 @@ > [!CAUTION] Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. -> [!NOTE] -All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. - - ## 2025-07-07 ### 🚀 Updated Scripts From c567b75aa7ce86a4ffe6baa0dad29f247903b13b Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 7 Jul 2025 14:55:33 +0200 Subject: [PATCH 120/229] fix broken repo logo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d538a2ca..bb1303ae7 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ From b2bccd9501279ff2ee866947fa6e3fdb26436d77 Mon Sep 17 00:00:00 2001 From: Tobias <96661824+CrazyWolf13@users.noreply.github.com> Date: Mon, 7 Jul 2025 15:12:04 +0200 Subject: [PATCH 121/229] gitea-mirror: update repo-url (#5794) --- ct/gitea-mirror.sh | 6 +++--- frontend/public/json/gitea-mirror.json | 4 ++-- install/gitea-mirror-install.sh | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ct/gitea-mirror.sh b/ct/gitea-mirror.sh index 008830a5a..3866514ca 100644 --- a/ct/gitea-mirror.sh +++ b/ct/gitea-mirror.sh @@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV # Copyright (c) 2021-2025 community-scripts ORG # Author: CrazyWolf13 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/arunavo4/gitea-mirror +# Source: https://github.com/RayLabsHQ/gitea-mirror APP="gitea-mirror" var_tags="${var_tags:-mirror;gitea}" @@ -28,7 +28,7 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -fsSL https://api.github.com/repos/arunavo4/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -fsSL https://api.github.com/repos/RayLabsHQ/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then msg_info "Stopping Services" @@ -48,7 +48,7 @@ function update_script() { msg_ok "Installed Bun" rm -rf /opt/gitea-mirror - fetch_and_deploy_gh_release "gitea-mirror" "arunavo4/gitea-mirror" + fetch_and_deploy_gh_release "gitea-mirror" "RayLabsHQ/gitea-mirror" msg_info "Updating and rebuilding ${APP} to v${RELEASE}" cd /opt/gitea-mirror diff --git a/frontend/public/json/gitea-mirror.json b/frontend/public/json/gitea-mirror.json index 5be5cc905..937007748 100644 --- a/frontend/public/json/gitea-mirror.json +++ b/frontend/public/json/gitea-mirror.json @@ -9,9 +9,9 @@ "updateable": true, "privileged": false, "interface_port": 4321, - "documentation": "https://github.com/arunavo4/gitea-mirror/", + "documentation": "https://github.com/RayLabsHQ/gitea-mirror/", "config_path": "/etc/systemd/system/gitea-mirror.service", - "website": "https://github.com/arunavo4/gitea-mirror/", + "website": "https://github.com/RayLabsHQ/gitea-mirror/", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/gitea-mirror.webp", "description": "Gitea Mirror auto-syncs GitHub repos to your self-hosted Gitea, with a sleek Web UI and easy Docker deployment. ", "install_methods": [ diff --git a/install/gitea-mirror-install.sh b/install/gitea-mirror-install.sh index d1f3dd78f..467608cf0 100644 --- a/install/gitea-mirror-install.sh +++ b/install/gitea-mirror-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2025 community-scripts ORG # Author: CrazyWolf13 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/arunavo4/gitea-mirror +# Source: https://github.com/RayLabsHQ/gitea-mirror source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color @@ -28,7 +28,7 @@ ln -sf /opt/bun/bin/bun /usr/local/bin/bun ln -sf /opt/bun/bin/bun /usr/local/bin/bunx msg_ok "Installed Bun" -fetch_and_deploy_gh_release "gitea-mirror" "arunavo4/gitea-mirror" +fetch_and_deploy_gh_release "gitea-mirror" "RayLabsHQ/gitea-mirror" msg_info "Installing gitea-mirror" cd /opt/gitea-mirror From 74166f97f94809555a6c111655aa6171e7701044 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, 7 Jul 2025 14:12:49 +0100 Subject: [PATCH 122/229] Update CHANGELOG.md (#5796) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf0418f2f..c704e53ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts + - gitea-mirror: update repo-url [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5794](https://github.com/community-scripts/ProxmoxVE/pull/5794)) + - #### 🐞 Bug Fixes - Bookstack: Fix PHP Issue & Bump to PHP 8.3 [@MickLesk](https://github.com/MickLesk) ([#5779](https://github.com/community-scripts/ProxmoxVE/pull/5779)) From 12bd6754ab2c3e8906cd582d92ef74226bb9114d Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:56:45 +0200 Subject: [PATCH 123/229] quickfix globbing issue --- misc/tools.func | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index e59602162..10eb693a6 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -951,13 +951,28 @@ function fetch_and_deploy_gh_release() { } mkdir -p "$target" - if [[ "$filename" == *.zip ]]; then + if [[ "$filename" == *.zip ]]; then if ! command -v unzip &>/dev/null; then $STD apt-get install -y unzip fi - $STD unzip "$tmpdir/$filename" -d "$target" + + local top_level_entries + top_level_entries=$(unzip -l "$tmpdir/$filename" | awk '{print $4}' | grep -v '^$' | cut -d/ -f1 | sort -u) + + if [[ $(wc -l <<<"$top_level_entries") -eq 1 ]]; then + unzip -q "$tmpdir/$filename" -d "$tmpdir/unzip" + shopt -s dotglob nullglob + cp -r "$tmpdir/unzip/"* "$target/" + shopt -u dotglob nullglob + else + unzip -q "$tmpdir/$filename" -d "$target" + fi + elif [[ "$filename" == *.tar.* ]]; then - if tar -tf "$tmpdir/$filename" | grep -qE '^([^/]+/){2}'; then + local top_level_entries + top_level_entries=$(tar -tf "$tmpdir/$filename" | cut -d/ -f1 | sort -u) + + if [[ $(wc -l <<<"$top_level_entries") -eq 1 ]]; then tar --strip-components=1 -xf "$tmpdir/$filename" -C "$target" else tar -xf "$tmpdir/$filename" -C "$target" From b2a8a9bd00e769775216c8a5adfa763dadcc5667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jc=20Mi=C3=B1arro?= Date: Mon, 7 Jul 2025 20:04:51 +0200 Subject: [PATCH 124/229] Fix/stirling pdf script (#5803) --- ct/stirling-pdf.sh | 6 ++++-- install/stirling-pdf-install.sh | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ct/stirling-pdf.sh b/ct/stirling-pdf.sh index d94ae6f29..f31a2c607 100644 --- a/ct/stirling-pdf.sh +++ b/ct/stirling-pdf.sh @@ -38,10 +38,12 @@ function update_script() { tar -xzf v$RELEASE.tar.gz cd Stirling-PDF-$RELEASE chmod +x ./gradlew - $STD ./gradlew build + $STD ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube rm -rf /opt/Stirling-PDF/Stirling-PDF-*.jar - cp -r ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/ + cp -r ./stirling-pdf/build/libs/*.jar /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar cp -r scripts /opt/Stirling-PDF/ + cp -r pipeline /opt/Stirling-PDF/ + cp -r stirling-pdf/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/ cd ~ rm -rf Stirling-PDF-$RELEASE v$RELEASE.tar.gz ln -sf /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar diff --git a/install/stirling-pdf-install.sh b/install/stirling-pdf-install.sh index c058ab7be..c2fcf58ab 100644 --- a/install/stirling-pdf-install.sh +++ b/install/stirling-pdf-install.sh @@ -80,11 +80,13 @@ curl -fsSL "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v${ tar -xzf v${RELEASE}.tar.gz cd Stirling-PDF-$RELEASE chmod +x ./gradlew -$STD ./gradlew build +$STD ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube mkdir -p /opt/Stirling-PDF touch /opt/Stirling-PDF/.env -mv ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/ +mv ./stirling-pdf/build/libs/*.jar /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar mv scripts /opt/Stirling-PDF/ +mv pipeline /opt/Stirling-PDF/ +mv stirling-pdf/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/ ln -s /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar ln -s /usr/share/tesseract-ocr/5/tessdata/ /usr/share/tessdata msg_ok "Installed Stirling-PDF" From 722f7e14d7d19b33c02e2abd1a0374e9c2f3fa68 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, 7 Jul 2025 19:05:27 +0100 Subject: [PATCH 125/229] Update CHANGELOG.md (#5805) 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 c704e53ab..1d5d07dae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts - - gitea-mirror: update repo-url [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5794](https://github.com/community-scripts/ProxmoxVE/pull/5794)) + - Fix/stirling pdf script [@JcMinarro](https://github.com/JcMinarro) ([#5803](https://github.com/community-scripts/ProxmoxVE/pull/5803)) +- gitea-mirror: update repo-url [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5794](https://github.com/community-scripts/ProxmoxVE/pull/5794)) - #### 🐞 Bug Fixes From 9dc0fc80b97b08a32f083b26a66f9fb237f0d590 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 7 Jul 2025 20:13:00 +0200 Subject: [PATCH 126/229] motd ssh --- install/alpine-tinyauth-install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install/alpine-tinyauth-install.sh b/install/alpine-tinyauth-install.sh index 9aea59a69..2b0142d2f 100644 --- a/install/alpine-tinyauth-install.sh +++ b/install/alpine-tinyauth-install.sh @@ -82,9 +82,9 @@ chmod +x /etc/init.d/tinyauth $STD rc-update add tinyauth default msg_ok "Enabled Tinyauth Service" +motd_ssh +customize + msg_info "Starting Tinyauth" $STD service tinyauth start msg_ok "Started Tinyauth" - -motd_ssh -customize From 26365561dc6f376a85d30a389969b54ac504107f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Mon, 7 Jul 2025 20:37:57 +0200 Subject: [PATCH 127/229] Refactor (#5806) --- ct/docmost.sh | 29 ++++++++--------------------- frontend/public/json/docmost.json | 7 ++++++- install/docmost-install.sh | 12 +++--------- 3 files changed, 17 insertions(+), 31 deletions(-) diff --git a/ct/docmost.sh b/ct/docmost.sh index 52ef04edf..edb21b0ae 100644 --- a/ct/docmost.sh +++ b/ct/docmost.sh @@ -27,48 +27,35 @@ function update_script() { exit fi if ! command -v node >/dev/null || [[ "$(/usr/bin/env node -v | grep -oP '^v\K[0-9]+')" != "22" ]]; then - msg_info "Installing Node.js 22" - $STD apt-get purge -y nodejs - rm -f /etc/apt/sources.list.d/nodesource.list - rm -f /etc/apt/keyrings/nodesource.gpg - mkdir -p /etc/apt/keyrings - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list - $STD apt-get update - $STD apt-get install -y nodejs - $STD npm install -g pnpm@10.4.0 - msg_ok "Node.js 22 installed" + NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs fi export NODE_OPTIONS="--max_old_space_size=4096" RELEASE=$(curl -fsSL https://api.github.com/repos/docmost/docmost/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + if [[ "${RELEASE}" != "$(cat ~/.docmost 2>/dev/null)" ]] || [[ ! -f ~/.docmost ]]; then msg_info "Stopping ${APP}" systemctl stop docmost msg_ok "${APP} Stopped" - msg_info "Updating ${APP} to v${RELEASE}" + msg_info "Backing up data" cp /opt/docmost/.env /opt/ cp -r /opt/docmost/data /opt/ rm -rf /opt/docmost - temp_file=$(mktemp) - curl -fsSL "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" - tar -xzf "$temp_file" - mv docmost-${RELEASE} /opt/docmost + msg_ok "Data backed up" + + fetch_and_deploy_gh_release "docmost" "docmost/docmost" + + msg_info "Updating ${APP} to v${RELEASE}" cd /opt/docmost mv /opt/.env /opt/docmost/.env mv /opt/data /opt/docmost/data $STD pnpm install --force $STD pnpm build - echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated ${APP}" msg_info "Starting ${APP}" systemctl start docmost msg_ok "Started ${APP}" - msg_info "Cleaning Up" - rm -f ${temp_file} - msg_ok "Cleaned" msg_ok "Updated Successfully" else msg_ok "No update required. ${APP} is already at ${RELEASE}" diff --git a/frontend/public/json/docmost.json b/frontend/public/json/docmost.json index 2d6260ed7..6b7d5bdf8 100644 --- a/frontend/public/json/docmost.json +++ b/frontend/public/json/docmost.json @@ -31,5 +31,10 @@ "username": null, "password": null }, - "notes": [] + "notes": [ + { + "text": "Use `cat ~/docmost.creds` to see database credentials.", + "type": "info" + } + ] } diff --git a/install/docmost-install.sh b/install/docmost-install.sh index e1b3a1368..43c0a8ffb 100644 --- a/install/docmost-install.sh +++ b/install/docmost-install.sh @@ -22,6 +22,7 @@ msg_ok "Installed Dependencies" NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs PG_VERSION="16" setup_postgresql +fetch_and_deploy_gh_release "docmost" "docmost/docmost" msg_info "Setting up PostgreSQL" DB_NAME="docmost_db" @@ -40,12 +41,7 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'" } >>~/docmost.creds msg_ok "Set up PostgreSQL" -msg_info "Installing Docmost (Patience)" -temp_file=$(mktemp) -RELEASE=$(curl -fsSL https://api.github.com/repos/docmost/docmost/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file"" -tar -xzf "$temp_file" -mv docmost-${RELEASE} /opt/docmost +msg_info "Configuring Docmost (Patience)" cd /opt/docmost mv .env.example .env mkdir data @@ -56,8 +52,7 @@ sed -i -e "s|APP_SECRET=.*|APP_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z export NODE_OPTIONS="--max-old-space-size=2048" $STD pnpm install $STD pnpm build -echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" -msg_ok "Installed Docmost" +msg_ok "Configured Docmost" msg_info "Creating Service" cat </etc/systemd/system/docmost.service @@ -81,7 +76,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -f "$temp_file" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 137a41f67c9ff9b63657fd23d1bde6ec6dba721d 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, 7 Jul 2025 19:38:34 +0100 Subject: [PATCH 128/229] Update CHANGELOG.md (#5808) 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 1d5d07dae..aea4d20ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts - - Fix/stirling pdf script [@JcMinarro](https://github.com/JcMinarro) ([#5803](https://github.com/community-scripts/ProxmoxVE/pull/5803)) + - Refactor: Docmost [@tremor021](https://github.com/tremor021) ([#5806](https://github.com/community-scripts/ProxmoxVE/pull/5806)) +- Fix/stirling pdf script [@JcMinarro](https://github.com/JcMinarro) ([#5803](https://github.com/community-scripts/ProxmoxVE/pull/5803)) - gitea-mirror: update repo-url [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5794](https://github.com/community-scripts/ProxmoxVE/pull/5794)) - #### 🐞 Bug Fixes From 54f2f9819310efd08ab71874f62bb332cc56dc1a Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Mon, 7 Jul 2025 20:39:17 +0200 Subject: [PATCH 129/229] Update pulse.sh (#5807) --- ct/pulse.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ct/pulse.sh b/ct/pulse.sh index c0379b3b7..c5dced532 100644 --- a/ct/pulse.sh +++ b/ct/pulse.sh @@ -58,6 +58,7 @@ function update_script() { else msg_ok "No update required. ${APP} is already at ${RELEASE}." fi + exit } start From 5516aa493dfe55973584007540b7c4c395872016 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, 7 Jul 2025 19:39:38 +0100 Subject: [PATCH 130/229] Update CHANGELOG.md (#5809) 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 aea4d20ad..1fd5ff895 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts - - Refactor: Docmost [@tremor021](https://github.com/tremor021) ([#5806](https://github.com/community-scripts/ProxmoxVE/pull/5806)) + - Fix unbound var in pulse.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5807](https://github.com/community-scripts/ProxmoxVE/pull/5807)) +- Refactor: Docmost [@tremor021](https://github.com/tremor021) ([#5806](https://github.com/community-scripts/ProxmoxVE/pull/5806)) - Fix/stirling pdf script [@JcMinarro](https://github.com/JcMinarro) ([#5803](https://github.com/community-scripts/ProxmoxVE/pull/5803)) - gitea-mirror: update repo-url [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5794](https://github.com/community-scripts/ProxmoxVE/pull/5794)) From fc728bcca78ba798c5b36c5fb6408abff291c285 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, 7 Jul 2025 19:40:09 +0100 Subject: [PATCH 131/229] Update CHANGELOG.md (#5810) Co-authored-by: github-actions[bot] From 16786a83046224bd6ca7bdfab6dcc81c889e8c2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Mon, 7 Jul 2025 20:47:14 +0200 Subject: [PATCH 132/229] Fix autologin (#5811) --- install/alpine-tinyauth-install.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/install/alpine-tinyauth-install.sh b/install/alpine-tinyauth-install.sh index 2b0142d2f..0354474e1 100644 --- a/install/alpine-tinyauth-install.sh +++ b/install/alpine-tinyauth-install.sh @@ -24,13 +24,13 @@ RELEASE=$(curl -s https://api.github.com/repos/steveiliop56/tinyauth/releases/la curl -fsSL "https://github.com/steveiliop56/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth chmod +x /opt/tinyauth/tinyauth -PASSWORD=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8) -USER=$(htpasswd -Bbn "tinyauth" "${PASSWORD}") +PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8) +USER=$(htpasswd -Bbn "tinyauth" "${PASS}") -cat < /opt/tinyauth/credentials.txt +cat </opt/tinyauth/credentials.txt Tinyauth Credentials Username: tinyauth -Password: ${PASSWORD} +Password: ${PASS} EOF echo "${RELEASE}" >/opt/tinyauth_version.txt From c5e831dadcb5c51faa62835f5d82b7402f150969 Mon Sep 17 00:00:00 2001 From: Tobias <96661824+CrazyWolf13@users.noreply.github.com> Date: Mon, 7 Jul 2025 20:52:42 +0200 Subject: [PATCH 133/229] fix func order (#5812) --- install/alpine-tinyauth-install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install/alpine-tinyauth-install.sh b/install/alpine-tinyauth-install.sh index 0354474e1..baf19a53b 100644 --- a/install/alpine-tinyauth-install.sh +++ b/install/alpine-tinyauth-install.sh @@ -82,9 +82,9 @@ chmod +x /etc/init.d/tinyauth $STD rc-update add tinyauth default msg_ok "Enabled Tinyauth Service" -motd_ssh -customize - msg_info "Starting Tinyauth" $STD service tinyauth start msg_ok "Started Tinyauth" + +motd_ssh +customize From f40218aa073b91786c8bfddd9a1a3d248fe85417 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, 7 Jul 2025 19:56:02 +0100 Subject: [PATCH 134/229] Update CHANGELOG.md (#5814) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fd5ff895..66d170fb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,13 +14,11 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts - - Fix unbound var in pulse.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5807](https://github.com/community-scripts/ProxmoxVE/pull/5807)) -- Refactor: Docmost [@tremor021](https://github.com/tremor021) ([#5806](https://github.com/community-scripts/ProxmoxVE/pull/5806)) -- Fix/stirling pdf script [@JcMinarro](https://github.com/JcMinarro) ([#5803](https://github.com/community-scripts/ProxmoxVE/pull/5803)) -- gitea-mirror: update repo-url [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5794](https://github.com/community-scripts/ProxmoxVE/pull/5794)) - - #### 🐞 Bug Fixes + - Fix/stirling pdf script [@JcMinarro](https://github.com/JcMinarro) ([#5803](https://github.com/community-scripts/ProxmoxVE/pull/5803)) + - gitea-mirror: update repo-url [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5794](https://github.com/community-scripts/ProxmoxVE/pull/5794)) + - Fix unbound var in pulse.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5807](https://github.com/community-scripts/ProxmoxVE/pull/5807)) - Bookstack: Fix PHP Issue & Bump to PHP 8.3 [@MickLesk](https://github.com/MickLesk) ([#5779](https://github.com/community-scripts/ProxmoxVE/pull/5779)) - #### ✨ New Features @@ -31,6 +29,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🔧 Refactor + - Refactor: Docmost [@tremor021](https://github.com/tremor021) ([#5806](https://github.com/community-scripts/ProxmoxVE/pull/5806)) - Refactor: Baby Buddy [@tremor021](https://github.com/tremor021) ([#5769](https://github.com/community-scripts/ProxmoxVE/pull/5769)) - Refactor: Changed the way we install BunkerWeb by leveraging the brand new install-bunkerweb.sh [@TheophileDiot](https://github.com/TheophileDiot) ([#5707](https://github.com/community-scripts/ProxmoxVE/pull/5707)) From 046acc75db5a23ba066a5113a2955a2bd3c67e50 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 7 Jul 2025 22:48:56 +0200 Subject: [PATCH 135/229] php locale --- misc/tools.func | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/misc/tools.func b/misc/tools.func index 10eb693a6..010483c24 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -434,6 +434,7 @@ function setup_php() { $STD apt-get update fi + local MODULE_LIST="php${PHP_VERSION}" for pkg in $MODULE_LIST; do if ! apt-cache show "$pkg" >/dev/null 2>&1; then msg_error "Package not found: $pkg" @@ -441,7 +442,7 @@ function setup_php() { fi done - local MODULE_LIST="php${PHP_VERSION}" + IFS=',' read -ra MODULES <<<"$COMBINED_MODULES" for mod in "${MODULES[@]}"; do MODULE_LIST+=" php${PHP_VERSION}-${mod}" From 451f6aff8edec1731fa0a7ca7dae3e86ce131294 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, 8 Jul 2025 02:15:09 +0200 Subject: [PATCH 136/229] Update versions.json (#5820) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 94 +++++++++++++++--------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 881acdf69..05ed92f33 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,8 +1,53 @@ [ + { + "name": "Stirling-Tools/Stirling-PDF", + "version": "v1.0.1", + "date": "2025-07-07T23:01:28Z" + }, + { + "name": "duplicati/duplicati", + "version": "v2.1.0.122-2.1.0.122_canary_2025-07-07", + "date": "2025-07-07T17:54:52Z" + }, + { + "name": "msgbyte/tianji", + "version": "v1.23.2", + "date": "2025-07-07T16:51:43Z" + }, + { + "name": "TandoorRecipes/recipes", + "version": "1.5.35", + "date": "2025-06-22T08:30:10Z" + }, { "name": "VictoriaMetrics/VictoriaMetrics", - "version": "v1.121.0", - "date": "2025-07-07T11:32:39Z" + "version": "pmm-6401-v1.121.0", + "date": "2025-07-07T16:16:13Z" + }, + { + "name": "n8n-io/n8n", + "version": "n8n@1.100.0", + "date": "2025-06-23T12:48:35Z" + }, + { + "name": "photoprism/photoprism", + "version": "250707-d28b3101e", + "date": "2025-07-07T15:15:21Z" + }, + { + "name": "Checkmk/checkmk", + "version": "v2.4.0p7-rc2", + "date": "2025-07-07T15:07:57Z" + }, + { + "name": "traccar/traccar", + "version": "v6.8.1", + "date": "2025-07-07T14:40:11Z" + }, + { + "name": "BookStackApp/BookStack", + "version": "v25.05.2", + "date": "2025-07-07T14:08:25Z" }, { "name": "meilisearch/meilisearch", @@ -14,11 +59,6 @@ "version": "v1.2.1", "date": "2025-07-07T10:11:26Z" }, - { - "name": "Checkmk/checkmk", - "version": "v2.4.0p7-rc1", - "date": "2025-07-07T09:25:01Z" - }, { "name": "nzbgetcom/nzbget", "version": "v25.2", @@ -94,21 +134,6 @@ "version": "v1.30.0", "date": "2025-07-01T11:29:11Z" }, - { - "name": "traccar/traccar", - "version": "v6.8.0", - "date": "2025-07-06T18:19:05Z" - }, - { - "name": "msgbyte/tianji", - "version": "v1.23.0", - "date": "2025-07-06T16:01:58Z" - }, - { - "name": "TandoorRecipes/recipes", - "version": "1.5.35", - "date": "2025-06-22T08:30:10Z" - }, { "name": "Part-DB/Part-DB-server", "version": "v1.17.2", @@ -234,11 +259,6 @@ "version": "310.5", "date": "2025-07-03T14:05:25Z" }, - { - "name": "n8n-io/n8n", - "version": "n8n@1.100.0", - "date": "2025-06-23T12:48:35Z" - }, { "name": "Dolibarr/dolibarr", "version": "18.0.7", @@ -489,11 +509,6 @@ "version": "v1.18.4", "date": "2025-06-25T00:06:56Z" }, - { - "name": "duplicati/duplicati", - "version": "v2.1.0.120-2.1.0.120_canary_2025-06-24", - "date": "2025-06-24T22:39:50Z" - }, { "name": "evcc-io/evcc", "version": "0.204.5", @@ -634,11 +649,6 @@ "version": "v2.1.5", "date": "2025-06-17T18:04:11Z" }, - { - "name": "BookStackApp/BookStack", - "version": "v25.05.1", - "date": "2025-06-17T14:38:04Z" - }, { "name": "crowdsecurity/crowdsec", "version": "v1.6.9", @@ -884,11 +894,6 @@ "version": "0.5", "date": "2025-05-21T20:19:14Z" }, - { - "name": "Stirling-Tools/Stirling-PDF", - "version": "v0.46.2", - "date": "2025-05-20T11:21:04Z" - }, { "name": "sbondCo/Watcharr", "version": "v2.1.0", @@ -989,11 +994,6 @@ "version": "v2.6.3", "date": "2025-04-27T09:05:42Z" }, - { - "name": "photoprism/photoprism", - "version": "250426-27ec7a128", - "date": "2025-04-26T11:51:39Z" - }, { "name": "TechnitiumSoftware/DnsServer", "version": "v13.6.0", From 1530e521080f1cb6ed9de19be14d2188590565b1 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, 8 Jul 2025 01:15:52 +0100 Subject: [PATCH 137/229] Update CHANGELOG.md (#5821) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 66d170fb3..2dd1e1dfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ > [!CAUTION] Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. +## 2025-07-08 + ## 2025-07-07 ### 🚀 Updated Scripts From 396e0c6523e8cee25476f1812c1dcb0ad48773aa Mon Sep 17 00:00:00 2001 From: Luca Comellini Date: Mon, 7 Jul 2025 22:56:58 -0700 Subject: [PATCH 138/229] Ollama: fix update script (#5819) --- ct/ollama.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ct/ollama.sh b/ct/ollama.sh index 1470a499e..d942ee27e 100644 --- a/ct/ollama.sh +++ b/ct/ollama.sh @@ -40,6 +40,7 @@ function update_script() { msg_info "Updating Ollama to ${RELEASE}" rm -rf /usr/local/lib/ollama rm -rf /usr/local/bin/ollama + mkdir -p /usr/local/lib/ollama tar -xzf "${TMP_TAR}" -C /usr/local/lib/ollama ln -sf /usr/local/lib/ollama/bin/ollama /usr/local/bin/ollama echo "${RELEASE}" >/opt/Ollama_version.txt From 7bafa864d0bc7583bf911ce1374cf09ad1649298 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, 8 Jul 2025 06:57:25 +0100 Subject: [PATCH 139/229] Update CHANGELOG.md (#5824) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dd1e1dfe..b9e2e27bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2025-07-08 +### 🚀 Updated Scripts + + - Ollama: fix update script [@lucacome](https://github.com/lucacome) ([#5819](https://github.com/community-scripts/ProxmoxVE/pull/5819)) + ## 2025-07-07 ### 🚀 Updated Scripts From bb33002c2ae9a53d0caa31af45422047cccc9067 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, 8 Jul 2025 09:06:52 +0200 Subject: [PATCH 140/229] Update bookstack-install.sh (#5825) --- install/bookstack-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/bookstack-install.sh b/install/bookstack-install.sh index 917af8bea..4a3050483 100644 --- a/install/bookstack-install.sh +++ b/install/bookstack-install.sh @@ -57,7 +57,7 @@ chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads chmod -R 640 /opt/bookstack/.env $STD a2enmod rewrite -$STD a2enmod php8.2 +$STD a2enmod php8.3 msg_ok "Configured Bookstack" msg_info "Creating Service" From 000b7d4a8547b7fe74f78f1874198f013108f3cd 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, 8 Jul 2025 14:07:50 +0200 Subject: [PATCH 141/229] Update versions.json (#5831) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 80 +++++++++++++++--------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 05ed92f33..a1dfb01a0 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,9 +1,49 @@ [ + { + "name": "mattermost/mattermost", + "version": "preview-v0.1", + "date": "2025-06-27T14:35:47Z" + }, + { + "name": "docker/compose", + "version": "v2.38.2", + "date": "2025-07-08T09:35:14Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.2132", + "date": "2025-07-08T05:52:22Z" + }, + { + "name": "Checkmk/checkmk", + "version": "v2.4.0p7", + "date": "2025-07-08T05:51:08Z" + }, + { + "name": "ollama/ollama", + "version": "v0.9.5", + "date": "2025-07-02T18:39:28Z" + }, + { + "name": "steveiliop56/tinyauth", + "version": "v3.4.1", + "date": "2025-06-11T07:53:44Z" + }, + { + "name": "mongodb/mongo", + "version": "r8.0.12-rc0", + "date": "2025-07-07T23:35:35Z" + }, { "name": "Stirling-Tools/Stirling-PDF", "version": "v1.0.1", "date": "2025-07-07T23:01:28Z" }, + { + "name": "keycloak/keycloak", + "version": "26.3.0", + "date": "2025-07-02T12:26:44Z" + }, { "name": "duplicati/duplicati", "version": "v2.1.0.122-2.1.0.122_canary_2025-07-07", @@ -34,11 +74,6 @@ "version": "250707-d28b3101e", "date": "2025-07-07T15:15:21Z" }, - { - "name": "Checkmk/checkmk", - "version": "v2.4.0p7-rc2", - "date": "2025-07-07T15:07:57Z" - }, { "name": "traccar/traccar", "version": "v6.8.1", @@ -74,16 +109,6 @@ "version": "v1.5.2", "date": "2025-05-11T16:40:55Z" }, - { - "name": "Jackett/Jackett", - "version": "v0.22.2125", - "date": "2025-07-07T05:56:33Z" - }, - { - "name": "mattermost/mattermost", - "version": "preview-v0.1", - "date": "2025-06-27T14:35:47Z" - }, { "name": "MediaBrowser/Emby.Releases", "version": "4.9.1.2", @@ -94,11 +119,6 @@ "version": "v6.2.20", "date": "2025-07-02T04:03:37Z" }, - { - "name": "steveiliop56/tinyauth", - "version": "v3.4.1", - "date": "2025-06-11T07:53:44Z" - }, { "name": "slskd/slskd", "version": "0.23.1", @@ -219,11 +239,6 @@ "version": "2.37.0", "date": "2025-07-04T14:49:43Z" }, - { - "name": "keycloak/keycloak", - "version": "26.3.0", - "date": "2025-07-02T12:26:44Z" - }, { "name": "Graylog2/graylog2-server", "version": "6.3.1", @@ -274,11 +289,6 @@ "version": "v25.7.1", "date": "2025-07-03T01:03:18Z" }, - { - "name": "mongodb/mongo", - "version": "r6.0.25-rc0", - "date": "2025-07-03T00:44:52Z" - }, { "name": "documenso/documenso", "version": "v1.12.2-rc.0", @@ -294,11 +304,6 @@ "version": "2.5.1", "date": "2025-07-02T19:38:06Z" }, - { - "name": "ollama/ollama", - "version": "v0.9.5", - "date": "2025-07-02T18:39:28Z" - }, { "name": "wazuh/wazuh", "version": "coverity-w27-4.13.0", @@ -389,11 +394,6 @@ "version": "v2.32.0", "date": "2025-06-30T22:12:48Z" }, - { - "name": "docker/compose", - "version": "v2.38.1", - "date": "2025-06-30T20:07:35Z" - }, { "name": "jhuckaby/Cronicle", "version": "v0.9.81", From 08eb914e3ce09122b431601a09fafd9130a8687b Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Tue, 8 Jul 2025 17:19:51 +0200 Subject: [PATCH 142/229] tools.func: add ffmpeg + minor improvement (#5834) --- misc/tools.func | 165 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 161 insertions(+), 4 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index 010483c24..b3ddbc638 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -442,7 +442,6 @@ function setup_php() { fi done - IFS=',' read -ra MODULES <<<"$COMBINED_MODULES" for mod in "${MODULES[@]}"; do MODULE_LIST+=" php${PHP_VERSION}-${mod}" @@ -952,7 +951,7 @@ function fetch_and_deploy_gh_release() { } mkdir -p "$target" - if [[ "$filename" == *.zip ]]; then + if [[ "$filename" == *.zip ]]; then if ! command -v unzip &>/dev/null; then $STD apt-get install -y unzip fi @@ -1013,13 +1012,20 @@ function fetch_and_deploy_gh_release() { filename="${asset_url##*/}" mkdir -p "$target" - curl $download_timeout -fsSL -o "$target/$app" "$asset_url" || { + + local use_filename="${USE_ORIGINAL_FILENAME:-false}" + local target_file="$app" + [[ "$use_filename" == "true" ]] && target_file="$filename" + + curl $download_timeout -fsSL -o "$target/$target_file" "$asset_url" || { msg_error "Download failed: $asset_url" rm -rf "$tmpdir" return 1 } - chmod +x "$target/$app" + if [[ "$target_file" != *.jar && -f "$target/$target_file" ]]; then + chmod +x "$target/$target_file" + fi else msg_error "Unknown mode: $mode" @@ -1698,3 +1704,154 @@ function setup_imagemagick() { ensure_usr_local_bin_persist msg_ok "Setup ImageMagick $VERSION" } + +# ------------------------------------------------------------------------------ +# Installs FFmpeg from source or prebuilt binary (Debian/Ubuntu only). +# +# Description: +# - Downloads and builds FFmpeg from GitHub (https://github.com/FFmpeg/FFmpeg) +# - Supports specific version override via FFMPEG_VERSION (e.g. n7.1.1) +# - Supports build profile via FFMPEG_TYPE: +# - minimal : x264, vpx, mp3 only +# - medium : adds subtitles, fonts, opus, vorbis +# - full : adds dav1d, svt-av1, zlib, numa +# - binary : downloads static build (johnvansickle.com) +# - Defaults to latest stable version and full feature set +# +# Notes: +# - Requires: curl, jq, build-essential, and matching codec libraries +# - Result is installed to /usr/local/bin/ffmpeg +# ------------------------------------------------------------------------------ + +function setup_ffmpeg() { + local TMP_DIR + TMP_DIR=$(mktemp -d) + local GITHUB_REPO="FFmpeg/FFmpeg" + local VERSION="${FFMPEG_VERSION:-latest}" + local TYPE="${FFMPEG_TYPE:-full}" + local BIN_PATH="/usr/local/bin/ffmpeg" + + # Binary fallback mode + if [[ "$TYPE" == "binary" ]]; then + msg_info "Installing FFmpeg (static binary)" + curl -fsSL https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -o "$TMP_DIR/ffmpeg.tar.xz" + tar -xf "$TMP_DIR/ffmpeg.tar.xz" -C "$TMP_DIR" + local EXTRACTED_DIR + EXTRACTED_DIR=$(find "$TMP_DIR" -maxdepth 1 -type d -name "ffmpeg-*") + cp "$EXTRACTED_DIR/ffmpeg" "$BIN_PATH" + cp "$EXTRACTED_DIR/ffprobe" /usr/local/bin/ffprobe + chmod +x "$BIN_PATH" /usr/local/bin/ffprobe + rm -rf "$TMP_DIR" + msg_ok "Installed FFmpeg binary ($($BIN_PATH -version | head -n1))" + return + fi + + if ! command -v jq &>/dev/null; then + $STD apt-get update + $STD apt-get install -y jq + fi + + # Auto-detect latest stable version if none specified + if [[ "$VERSION" == "latest" || -z "$VERSION" ]]; then + msg_info "Resolving latest FFmpeg tag" + VERSION=$(curl -fsSL "https://api.github.com/repos/${GITHUB_REPO}/tags" | + jq -r '.[].name' | + grep -E '^n[0-9]+\.[0-9]+\.[0-9]+$' | + sort -V | tail -n1) + fi + + if [[ -z "$VERSION" ]]; then + msg_error "Could not determine FFmpeg version" + rm -rf "$TMP_DIR" + return 1 + fi + + msg_info "Installing FFmpeg ${VERSION} ($TYPE)" + + # Dependency selection + local DEPS=(build-essential yasm nasm pkg-config) + case "$TYPE" in + minimal) + DEPS+=(libx264-dev libvpx-dev libmp3lame-dev) + ;; + medium) + DEPS+=(libx264-dev libvpx-dev libmp3lame-dev libfreetype6-dev libass-dev libopus-dev libvorbis-dev) + ;; + full) + 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 + ) + ;; + *) + msg_error "Invalid FFMPEG_TYPE: $TYPE" + rm -rf "$TMP_DIR" + return 1 + ;; + esac + + $STD apt-get update + $STD apt-get install -y "${DEPS[@]}" + + curl -fsSL "https://github.com/${GITHUB_REPO}/archive/refs/tags/${VERSION}.tar.gz" -o "$TMP_DIR/ffmpeg.tar.gz" + tar -xzf "$TMP_DIR/ffmpeg.tar.gz" -C "$TMP_DIR" + cd "$TMP_DIR/FFmpeg-"* || { + msg_error "Source extraction failed" + rm -rf "$TMP_DIR" + return 1 + } + + local args=( + --enable-gpl + --enable-shared + --enable-nonfree + --disable-static + --enable-libx264 + --enable-libvpx + --enable-libmp3lame + ) + + if [[ "$TYPE" != "minimal" ]]; then + args+=(--enable-libfreetype --enable-libass --enable-libopus --enable-libvorbis) + fi + + if [[ "$TYPE" == "full" ]]; then + args+=(--enable-libx265 --enable-libdav1d --enable-zlib) + fi + + if [[ ${#args[@]} -eq 0 ]]; then + msg_error "FFmpeg configure args array is empty – aborting." + rm -rf "$TMP_DIR" + return 1 + fi + + ./configure "${args[@]}" >"$TMP_DIR/configure.log" 2>&1 || { + msg_error "FFmpeg ./configure failed (see $TMP_DIR/configure.log)" + cat "$TMP_DIR/configure.log" | tail -n 20 + rm -rf "$TMP_DIR" + return 1 + } + + $STD make -j"$(nproc)" + $STD make install + echo "/usr/local/lib" >/etc/ld.so.conf.d/ffmpeg.conf + ldconfig + + ldconfig -p | grep libavdevice >/dev/null || { + msg_error "libavdevice not registered with dynamic linker" + return 1 + } + + if ! command -v ffmpeg &>/dev/null; then + msg_error "FFmpeg installation failed" + rm -rf "$TMP_DIR" + return 1 + fi + + local FINAL_VERSION + FINAL_VERSION=$(ffmpeg -version | head -n1 | awk '{print $3}') + rm -rf "$TMP_DIR" + ensure_usr_local_bin_persist + msg_ok "Setup FFmpeg $FINAL_VERSION" +} From e4252a58ee436face4025b1b0c46f71d3f37b249 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, 8 Jul 2025 16:20:27 +0100 Subject: [PATCH 143/229] Update CHANGELOG.md (#5836) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9e2e27bf..dc879b454 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,13 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts - - Ollama: fix update script [@lucacome](https://github.com/lucacome) ([#5819](https://github.com/community-scripts/ProxmoxVE/pull/5819)) + - #### 🐞 Bug Fixes + + - Ollama: fix update script [@lucacome](https://github.com/lucacome) ([#5819](https://github.com/community-scripts/ProxmoxVE/pull/5819)) + + - #### ✨ New Features + + - tools.func: add ffmpeg + minor improvement [@MickLesk](https://github.com/MickLesk) ([#5834](https://github.com/community-scripts/ProxmoxVE/pull/5834)) ## 2025-07-07 From 9cbcf4435a79c7dee9512a5d1b66683d7657c157 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Tue, 8 Jul 2025 17:21:46 +0200 Subject: [PATCH 144/229] Refactor: ErsatzTV (#5835) --- ct/ersatztv.sh | 21 ++++----------------- frontend/public/json/ersatztv.json | 2 +- install/ersatztv-install.sh | 25 ++++--------------------- 3 files changed, 9 insertions(+), 39 deletions(-) diff --git a/ct/ersatztv.sh b/ct/ersatztv.sh index 562eb5722..e11739826 100644 --- a/ct/ersatztv.sh +++ b/ct/ersatztv.sh @@ -7,7 +7,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="ErsatzTV" var_tags="${var_tags:-iptv}" -var_cpu="${var_cpu:-1}" +var_cpu="${var_cpu:-2}" var_ram="${var_ram:-1024}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" @@ -27,31 +27,18 @@ function update_script() { exit fi RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1) - if [[ ! -f /opt/${APP}_version.txt && $(echo "x.x.x" >/opt/${APP}_version.txt) || "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + if [[ "${RELEASE}" != "$(cat ~/.ersatztv 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv ]]; then msg_info "Stopping ErsatzTV" systemctl stop ersatzTV msg_ok "Stopped ErsatzTV" - msg_info "Updating ErsatzTV" - cp -R /opt/ErsatzTV/ ErsatzTV-backup - rm ErsatzTV-backup/ErsatzTV - rm -rf /opt/ErsatzTV - temp_file=$(mktemp) - curl -fsSL "https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-x64.tar.gz" -o "$temp_file" - tar -xzf "$temp_file" - mv ErsatzTV-${RELEASE}-linux-x64 /opt/ErsatzTV - cp -R ErsatzTV-backup/* /opt/ErsatzTV/ - rm -rf ErsatzTV-backup - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated ErsatzTV" + FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg + fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz" msg_info "Starting ErsatzTV" systemctl start ersatzTV msg_ok "Started ErsatzTV" - msg_info "Cleaning Up" - rm -f ${temp_file} - msg_ok "Cleaned" msg_ok "Updated Successfully" else msg_ok "No update required. ${APP} is already at ${RELEASE}" diff --git a/frontend/public/json/ersatztv.json b/frontend/public/json/ersatztv.json index 099821048..4924e6a6b 100644 --- a/frontend/public/json/ersatztv.json +++ b/frontend/public/json/ersatztv.json @@ -19,7 +19,7 @@ "type": "default", "script": "ct/ersatztv.sh", "resources": { - "cpu": 1, + "cpu": 2, "ram": 1024, "hdd": 5, "os": "debian", diff --git a/install/ersatztv-install.sh b/install/ersatztv-install.sh index 2d7f2bb24..eb0cc2f6a 100644 --- a/install/ersatztv-install.sh +++ b/install/ersatztv-install.sh @@ -13,15 +13,7 @@ setting_up_container network_check update_os -msg_info "Installing FFmpeg (Patience)" -cd /usr/local/bin -curl -fsSL "https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz" -o "ffmpeg-release-amd64-static.tar.xz" -$STD tar -xvf ffmpeg-release-amd64-static.tar.xz -rm -f ffmpeg-*.tar.xz -cd ffmpeg-* -mv ffmpeg ffprobe /usr/local/bin/ -rm -rf /usr/local/bin/ffmpeg-* -msg_ok "Installed FFmpeg" +FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg msg_info "Setting Up Hardware Acceleration" $STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} @@ -34,15 +26,7 @@ if [[ "$CTTYPE" == "0" ]]; then fi msg_ok "Set Up Hardware Acceleration" -msg_info "Installing ErsatzTV" -temp_file=$(mktemp) -cd /opt -RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1) -curl -fsSL "https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-x64.tar.gz" -o "$temp_file" -tar -xzf "$temp_file" -mv /opt/ErsatzTV-${RELEASE}-linux-x64 /opt/ErsatzTV -echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" -msg_ok "Installed ErsatzTV" +fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz" msg_info "Creating Service" cat </etc/systemd/system/ersatzTV.service @@ -53,8 +37,8 @@ After=multi-user.target [Service] Type=simple User=root -WorkingDirectory=/opt/ErsatzTV -ExecStart=/opt/ErsatzTV/ErsatzTV +WorkingDirectory=/opt/ErsatzTV +ExecStart=/opt/ErsatzTV/ErsatzTV Restart=always RestartSec=30 @@ -68,7 +52,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -f ${temp_file} $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 08b89eb28544c52c405fa7ba7b541e046e5009dc 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, 8 Jul 2025 16:22:15 +0100 Subject: [PATCH 145/229] Update CHANGELOG.md (#5837) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc879b454..e875d68b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - tools.func: add ffmpeg + minor improvement [@MickLesk](https://github.com/MickLesk) ([#5834](https://github.com/community-scripts/ProxmoxVE/pull/5834)) + - #### 🔧 Refactor + + - Refactor: ErsatzTV [@MickLesk](https://github.com/MickLesk) ([#5835](https://github.com/community-scripts/ProxmoxVE/pull/5835)) + ## 2025-07-07 ### 🚀 Updated Scripts From 0b300fb9ab2c3296ce6f943def7b6293609a2f6d 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, 8 Jul 2025 21:26:13 +0200 Subject: [PATCH 146/229] Refactor: Emby (#5839) --- ct/emby.sh | 28 ++++++++++++++-------------- install/emby-install.sh | 9 +++------ 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/ct/emby.sh b/ct/emby.sh index ad9ca562d..7f98da10b 100644 --- a/ct/emby.sh +++ b/ct/emby.sh @@ -23,26 +23,26 @@ function update_script() { header_info check_container_storage check_container_resources + if [[ ! -d /opt/emby-server ]]; then msg_error "No ${APP} Installation Found!" exit fi - LATEST=$(curl -fsSL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4) - msg_info "Stopping ${APP}" - systemctl stop emby-server - msg_ok "Stopped ${APP}" + RELEASE=$(curl -fsSL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4) + if [[ "${RELEASE}" != "$(cat ~/.emby 2>/dev/null)" ]] || [[ ! -f ~/.emby ]]; then + msg_info "Stopping ${APP}" + systemctl stop emby-server + msg_ok "Stopped ${APP}" - msg_info "Updating ${APP}" - $STD curl -fsSL "https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb" -o "emby-server-deb_${LATEST}_amd64.deb" - $STD dpkg -i "emby-server-deb_${LATEST}_amd64.deb" - rm "emby-server-deb_${LATEST}_amd64.deb" - msg_ok "Updated ${APP}" + fetch_and_deploy_gh_release "emby" "MediaBrowser/Emby.Releases" "binary" - msg_info "Starting ${APP}" - systemctl start emby-server - msg_ok "Started ${APP}" - msg_ok "Updated Successfully" - exit + msg_info "Starting ${APP}" + systemctl start emby-server + msg_ok "Started ${APP}" + + msg_ok "Updated Successfully" + exit + fi } start diff --git a/install/emby-install.sh b/install/emby-install.sh index 8dda80eb7..99f87b532 100644 --- a/install/emby-install.sh +++ b/install/emby-install.sh @@ -24,17 +24,15 @@ if [[ "$CTTYPE" == "0" ]]; then fi msg_ok "Set Up Hardware Acceleration" -LATEST=$(curl -fsSL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4) +fetch_and_deploy_gh_release "emby" "MediaBrowser/Emby.Releases" "binary" -msg_info "Installing Emby" -curl -fsSL "https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb" -o "emby-server-deb_${LATEST}_amd64.deb" -$STD dpkg -i emby-server-deb_${LATEST}_amd64.deb +msg_info "Configuring Emby" if [[ "$CTTYPE" == "0" ]]; then sed -i -e 's/^ssl-cert:x:104:$/render:x:104:root,emby/' -e 's/^render:x:108:root,emby$/ssl-cert:x:108:/' /etc/group else sed -i -e 's/^ssl-cert:x:104:$/render:x:104:emby/' -e 's/^render:x:108:emby$/ssl-cert:x:108:/' /etc/group fi -msg_ok "Installed Emby" +msg_ok "Configured Emby" motd_ssh customize @@ -42,5 +40,4 @@ customize msg_info "Cleaning up" $STD apt-get -y autoremove $STD apt-get -y autoclean -rm emby-server-deb_${LATEST}_amd64.deb msg_ok "Cleaned" From 0faf06f4e245b712c8a4a0add1d66d284088f5ab 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, 8 Jul 2025 20:52:00 +0100 Subject: [PATCH 147/229] Update CHANGELOG.md (#5842) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e875d68b0..44a92dced 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts + - Refactor: Emby [@tremor021](https://github.com/tremor021) ([#5839](https://github.com/community-scripts/ProxmoxVE/pull/5839)) + - #### 🐞 Bug Fixes - Ollama: fix update script [@lucacome](https://github.com/lucacome) ([#5819](https://github.com/community-scripts/ProxmoxVE/pull/5819)) From 4412b39d213f61b998b476c0d8097d84f1bef186 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, 9 Jul 2025 02:15:26 +0200 Subject: [PATCH 148/229] Update versions.json (#5851) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 114 ++++++++++++++--------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index a1dfb01a0..16e76589d 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,59 @@ [ + { + "name": "Prowlarr/Prowlarr", + "version": "v1.37.0.5076", + "date": "2025-06-04T11:04:53Z" + }, + { + "name": "Radarr/Radarr", + "version": "v5.26.2.10099", + "date": "2025-06-11T20:10:39Z" + }, + { + "name": "ipfs/kubo", + "version": "v0.35.0", + "date": "2025-05-21T18:00:32Z" + }, + { + "name": "steveiliop56/tinyauth", + "version": "v3.4.1", + "date": "2025-06-11T07:53:44Z" + }, + { + "name": "rcourtman/Pulse", + "version": "v3.40.1", + "date": "2025-07-08T21:06:54Z" + }, + { + "name": "grokability/snipe-it", + "version": "v8.1.18", + "date": "2025-07-08T20:36:37Z" + }, + { + "name": "Stirling-Tools/Stirling-PDF", + "version": "v1.0.2", + "date": "2025-07-08T19:14:31Z" + }, + { + "name": "TwiN/gatus", + "version": "v5.20.0", + "date": "2025-07-08T16:27:11Z" + }, + { + "name": "fuma-nama/fumadocs", + "version": "create-fumadocs-app@15.6.2", + "date": "2025-07-08T14:26:05Z" + }, + { + "name": "jenkinsci/jenkins", + "version": "jenkins-2.518", + "date": "2025-07-08T13:52:55Z" + }, + { + "name": "bunkerity/bunkerweb", + "version": "v1.6.2", + "date": "2025-07-08T13:52:33Z" + }, { "name": "mattermost/mattermost", "version": "preview-v0.1", @@ -21,24 +76,14 @@ }, { "name": "ollama/ollama", - "version": "v0.9.5", - "date": "2025-07-02T18:39:28Z" - }, - { - "name": "steveiliop56/tinyauth", - "version": "v3.4.1", - "date": "2025-06-11T07:53:44Z" + "version": "v0.9.6", + "date": "2025-07-08T01:26:29Z" }, { "name": "mongodb/mongo", "version": "r8.0.12-rc0", "date": "2025-07-07T23:35:35Z" }, - { - "name": "Stirling-Tools/Stirling-PDF", - "version": "v1.0.1", - "date": "2025-07-07T23:01:28Z" - }, { "name": "keycloak/keycloak", "version": "26.3.0", @@ -194,11 +239,6 @@ "version": "v4.3.0", "date": "2025-07-05T12:14:52Z" }, - { - "name": "fuma-nama/fumadocs", - "version": "fumadocs-openapi@9.0.18", - "date": "2025-07-05T09:36:45Z" - }, { "name": "theonedev/onedev", "version": "v11.11.4", @@ -224,11 +264,6 @@ "version": "v3.3.0", "date": "2025-06-12T06:54:48Z" }, - { - "name": "bunkerity/bunkerweb", - "version": "v1.6.2", - "date": "2025-07-04T15:21:18Z" - }, { "name": "emqx/emqx", "version": "e6.0.0-M1.202507-alpha.1", @@ -339,11 +374,6 @@ "version": "1.2.35", "date": "2025-07-01T21:37:20Z" }, - { - "name": "TwiN/gatus", - "version": "v5.19.0", - "date": "2025-07-01T19:59:32Z" - }, { "name": "hivemq/hivemq-community-edition", "version": "2025.4", @@ -359,21 +389,11 @@ "version": "v0.57.0", "date": "2025-07-01T16:47:46Z" }, - { - "name": "jenkinsci/jenkins", - "version": "jenkins-2.517", - "date": "2025-07-01T16:08:23Z" - }, { "name": "element-hq/synapse", "version": "v1.133.0", "date": "2025-07-01T15:13:42Z" }, - { - "name": "rcourtman/Pulse", - "version": "v99.99.99", - "date": "2025-07-01T08:26:41Z" - }, { "name": "zabbix/zabbix", "version": "7.4.0", @@ -409,11 +429,6 @@ "version": "v7.4.4", "date": "2025-06-30T13:04:22Z" }, - { - "name": "grokability/snipe-it", - "version": "v8.1.17", - "date": "2025-06-30T11:26:27Z" - }, { "name": "PrivateBin/PrivateBin", "version": "1.7.8", @@ -604,11 +619,6 @@ "version": "v0.21.0", "date": "2025-06-18T21:43:27Z" }, - { - "name": "ipfs/kubo", - "version": "v0.35.0", - "date": "2025-05-21T18:00:32Z" - }, { "name": "pterodactyl/panel", "version": "v1.11.11", @@ -689,11 +699,6 @@ "version": "cli/v0.25.0", "date": "2025-06-15T17:48:29Z" }, - { - "name": "Prowlarr/Prowlarr", - "version": "v1.37.0.5076", - "date": "2025-06-04T11:04:53Z" - }, { "name": "Readarr/Readarr", "version": "v2.0.0.4645", @@ -704,11 +709,6 @@ "version": "v2.12.4.4658", "date": "2025-06-09T17:27:45Z" }, - { - "name": "Radarr/Radarr", - "version": "v5.26.2.10099", - "date": "2025-06-11T20:10:39Z" - }, { "name": "advplyr/audiobookshelf", "version": "v2.25.1", From 3b7036ae5853d5d9bbf79149cf58dd560b901861 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, 9 Jul 2025 01:16:10 +0100 Subject: [PATCH 149/229] Update CHANGELOG.md (#5852) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44a92dced..4679b3897 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ > [!CAUTION] Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. +## 2025-07-09 + ## 2025-07-08 ### 🚀 Updated Scripts From 42e8623f39bbd619138a8c6042e043e67549527a Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 07:38:29 +0200 Subject: [PATCH 150/229] fix autolabler regex --- .github/workflows/autolabeler.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/autolabeler.yml b/.github/workflows/autolabeler.yml index a14cc7768..27e004734 100644 --- a/.github/workflows/autolabeler.yml +++ b/.github/workflows/autolabeler.yml @@ -80,7 +80,7 @@ jobs: for (const [checkbox, label] of Object.entries(templateLabelMappings)) { const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1"); - const regex = new RegExp(`- \[(x|X)\]\s*.*${escapedCheckbox}`, "i"); + const regex = new RegExp(`- \\[(x|X)\\]\\s*${escapedCheckbox}`, "i"); if (regex.test(prBody)) { labelsToAdd.add(label); } From e856b3630630c57c287f6e0cd50925491d93d8a2 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 07:39:32 +0200 Subject: [PATCH 151/229] add workflow_dispatch --- .github/workflows/autolabeler.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/autolabeler.yml b/.github/workflows/autolabeler.yml index 27e004734..831cc1867 100644 --- a/.github/workflows/autolabeler.yml +++ b/.github/workflows/autolabeler.yml @@ -1,6 +1,7 @@ name: Auto Label Pull Requests on: + workflow_dispatch: pull_request_target: branches: ["main"] types: [opened, synchronize, reopened, edited] From 4f569c67ebae2ff80b63985ee90a537d1215366c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Wed, 9 Jul 2025 07:42:06 +0200 Subject: [PATCH 152/229] Refactor (#5849) --- ct/gatus.sh | 16 +++++----------- install/gatus-install.sh | 15 +++------------ 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/ct/gatus.sh b/ct/gatus.sh index ee361ba17..b4c85b3bb 100644 --- a/ct/gatus.sh +++ b/ct/gatus.sh @@ -29,35 +29,29 @@ function update_script() { exit fi RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then + if [[ "${RELEASE}" != "$(cat ~/.gatus 2>/dev/null)" ]] || [[ ! -f ~/.gatus ]]; then msg_info "Updating $APP" msg_info "Stopping $APP" systemctl stop gatus msg_ok "Stopped $APP" - msg_info "Updating $APP to v${RELEASE}" mv /opt/gatus/config/config.yaml /opt - rm -rf /opt/gatus/* - temp_file=$(mktemp) - curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" - tar zxf "$temp_file" --strip-components=1 -C /opt/gatus + rm -rf /opt/gatus + fetch_and_deploy_gh_release "gatus" "TwiN/gatus" + + msg_info "Updating $APP to v${RELEASE}" cd /opt/gatus $STD go mod tidy CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . setcap CAP_NET_RAW+ep gatus mv /opt/config.yaml config - echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated $APP to v${RELEASE}" msg_info "Starting $APP" systemctl start gatus msg_ok "Started $APP" - msg_info "Cleaning Up" - rm -f "$temp_file" - msg_ok "Cleanup Completed" - msg_ok "Update Successful" else msg_ok "No update required. ${APP} is already at v${RELEASE}" diff --git a/install/gatus-install.sh b/install/gatus-install.sh index 3b5cd563b..ea3e75d45 100644 --- a/install/gatus-install.sh +++ b/install/gatus-install.sh @@ -20,20 +20,15 @@ $STD apt-get install -y \ msg_ok "Installed Dependencies" setup_go +fetch_and_deploy_gh_release "gatus" "TwiN/gatus" -RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -msg_info "Setting up gatus v${RELEASE}" -temp_file=$(mktemp) -mkdir -p /opt/gatus -curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" -tar zxf "$temp_file" --strip-components=1 -C /opt/gatus +msg_info "Configuring gatus" cd /opt/gatus $STD go mod tidy CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . setcap CAP_NET_RAW+ep gatus mv config.yaml config -echo "${RELEASE}" >/opt/gatus_version.txt -msg_ok "Done setting up gatus" +msg_ok "Configured gatus" msg_info "Creating Service" cat </etc/systemd/system/gatus.service @@ -58,10 +53,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -f "$temp_file" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" - -motd_ssh -customize From 96a8f9df89ac03f5ff979a9e393e8b4f7113d62d 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, 9 Jul 2025 06:42:31 +0100 Subject: [PATCH 153/229] Update CHANGELOG.md (#5855) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4679b3897..b73c96961 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2025-07-09 +### 🚀 Updated Scripts + + - #### 🔧 Refactor + + - Refactor: gatus [@tremor021](https://github.com/tremor021) ([#5849](https://github.com/community-scripts/ProxmoxVE/pull/5849)) + ## 2025-07-08 ### 🚀 Updated Scripts From 0e2c793f921e444f59b25a8a0265ccc838a6d6e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Wed, 9 Jul 2025 10:53:35 +0200 Subject: [PATCH 154/229] Refactor (#5841) --- ct/excalidraw.sh | 17 ++++------------- install/excalidraw-install.sh | 13 +++---------- 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/ct/excalidraw.sh b/ct/excalidraw.sh index 1744439a0..b93b62377 100644 --- a/ct/excalidraw.sh +++ b/ct/excalidraw.sh @@ -28,20 +28,16 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -fsSL https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ "${RELEASE}" != "$(cat /opt/excalidraw_version.txt)" ]] || [[ ! -f /opt/excalidraw_version.txt ]]; then + if [[ "${RELEASE}" != "$(cat ~/.excalidraw 2>/dev/null)" ]] || [[ ! -f ~/.excalidraw ]]; then msg_info "Stopping $APP" systemctl stop excalidraw msg_ok "Stopped $APP" - msg_info "Updating $APP to v${RELEASE}" - cd /tmp - temp_file=$(mktemp) - curl -fsSL "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" - tar xzf $temp_file rm -rf /opt/excalidraw - mv excalidraw-${RELEASE} /opt/excalidraw + fetch_and_deploy_gh_release "excalidraw" "excalidraw/excalidraw" + + msg_info "Updating $APP to v${RELEASE}" cd /opt/excalidraw $STD yarn msg_ok "Updated $APP to v${RELEASE}" @@ -50,11 +46,6 @@ function update_script() { systemctl start excalidraw msg_ok "Started $APP" - msg_info "Cleaning Up" - rm -rf $temp_file - msg_ok "Cleanup Completed" - - echo "${RELEASE}" >/opt/excalidraw_version.txt msg_ok "Update Successful" else msg_ok "No update required. ${APP} is already at v${RELEASE}" diff --git a/install/excalidraw-install.sh b/install/excalidraw-install.sh index 885a39c91..39e30bd1b 100644 --- a/install/excalidraw-install.sh +++ b/install/excalidraw-install.sh @@ -14,21 +14,15 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y \ - xdg-utils +$STD apt-get install -y xdg-utils msg_ok "Installed Dependencies" NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs +fetch_and_deploy_gh_release "excalidraw" "excalidraw/excalidraw" -msg_info "Setup Excalidraw" -temp_file=$(mktemp) -RELEASE=$(curl -fsSL https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" -tar xzf $temp_file -mv excalidraw-${RELEASE} /opt/excalidraw +msg_info "Configuring Excalidraw" cd /opt/excalidraw $STD yarn -echo "${RELEASE}" >/opt/excalidraw_version.txt msg_ok "Setup Excalidraw" msg_info "Creating Service" @@ -53,7 +47,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -f $temp_file $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 5b869b61fc7a4e90ea01a93817ff86a855573cb0 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, 9 Jul 2025 09:54:01 +0100 Subject: [PATCH 155/229] Update CHANGELOG.md (#5858) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b73c96961..03d182632 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🔧 Refactor + - Refactor: Excalidraw [@tremor021](https://github.com/tremor021) ([#5841](https://github.com/community-scripts/ProxmoxVE/pull/5841)) - Refactor: gatus [@tremor021](https://github.com/tremor021) ([#5849](https://github.com/community-scripts/ProxmoxVE/pull/5849)) ## 2025-07-08 From e58e50fc15541df73c9c54ffc1e01a4ab50dc905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Wed, 9 Jul 2025 10:57:15 +0200 Subject: [PATCH 156/229] Refactor (#5840) --- frontend/public/json/emqx.json | 4 ---- install/emqx-install.sh | 15 +++++++++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/frontend/public/json/emqx.json b/frontend/public/json/emqx.json index fbd78367a..f53e5155d 100644 --- a/frontend/public/json/emqx.json +++ b/frontend/public/json/emqx.json @@ -35,10 +35,6 @@ { "text": "Setup-Steps: Access Control ➡ Authentication ➡ Create ➡ Next ➡ Next ➡ Create ➡ Users ➡ Add ➡ Username / Password (to authenicate with MQTT) ➡ Save. You're now ready to enjoy a high-performance MQTT Broker.", "type": "info" - }, - { - "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.", - "type": "warning" } ] } diff --git a/install/emqx-install.sh b/install/emqx-install.sh index 755d1190b..9659806f5 100644 --- a/install/emqx-install.sh +++ b/install/emqx-install.sh @@ -13,16 +13,23 @@ setting_up_container network_check update_os +msg_info "Installing dependencies" +$STD apt-get install -y \ + apt-transport-https \ + ca-certificates \ + lsb-release +msg_ok "Installed dependencies" + msg_info "Installing EMQX" -$STD bash <(curl -fsSL https://packagecloud.io/install/repositories/emqx/emqx/script.deb.sh) +curl -fsSL https://packagecloud.io/emqx/emqx/gpgkey | gpg --dearmor -o /usr/share/keyrings/emqx-archive-keyring.gpg +echo "deb [arch=amd64 signed-by=/usr/share/keyrings/emqx-archive-keyring.gpg] https://packagecloud.io/emqx/emqx/debian/ bookworm main" >/etc/apt/sources.list.d/emqx.list $STD apt-get install -y emqx -$STD systemctl enable --now emqx msg_ok "Installed EMQX" motd_ssh customize msg_info "Cleaning up" -apt-get autoremove >/dev/null -apt-get autoclean >/dev/null +$STD apt-get autoremove +$STD apt-get autoclean msg_ok "Cleaned" From fd248e072c6e01af2fcf0facd7534fefe328d3d0 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, 9 Jul 2025 09:57:43 +0100 Subject: [PATCH 157/229] Update CHANGELOG.md (#5859) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03d182632..bf28d39c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🔧 Refactor + - Refactor: EMQX [@tremor021](https://github.com/tremor021) ([#5840](https://github.com/community-scripts/ProxmoxVE/pull/5840)) - Refactor: Excalidraw [@tremor021](https://github.com/tremor021) ([#5841](https://github.com/community-scripts/ProxmoxVE/pull/5841)) - Refactor: gatus [@tremor021](https://github.com/tremor021) ([#5849](https://github.com/community-scripts/ProxmoxVE/pull/5849)) From 0b949c815186c089b56d153bf0ed303c4c60a70c Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 11:00:15 +0200 Subject: [PATCH 158/229] tools.func: fix an bug while php libapache2-mod breaks (#5857) --- misc/tools.func | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/misc/tools.func b/misc/tools.func index b3ddbc638..b3561a650 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -451,7 +451,7 @@ function setup_php() { MODULE_LIST+=" php${PHP_VERSION}-fpm" fi if [[ "$PHP_APACHE" == "YES" ]]; then - $STD apt-get install -y apache2 + $STD apt-get install -y apache2 libapache2-mod-php${PHP_VERSION} $STD systemctl restart apache2 || true fi @@ -459,6 +459,8 @@ function setup_php() { if [[ -f /etc/apache2/mods-enabled/php${CURRENT_PHP}.load ]]; then $STD a2dismod php${CURRENT_PHP} || true fi + $STD a2enmod php${PHP_VERSION} + $STD systemctl restart apache2 || true fi if [[ "$PHP_FPM" == "YES" ]] && [[ -n "$CURRENT_PHP" ]]; then From 387f2c7bd1c4ac957cebced804af10d3974ea791 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, 9 Jul 2025 10:00:43 +0100 Subject: [PATCH 159/229] Update CHANGELOG.md (#5860) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf28d39c9..9670db04e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts + - #### 🐞 Bug Fixes + + - tools.func: fix an bug while php libapache2-mod breaks [@MickLesk](https://github.com/MickLesk) ([#5857](https://github.com/community-scripts/ProxmoxVE/pull/5857)) + - #### 🔧 Refactor - Refactor: EMQX [@tremor021](https://github.com/tremor021) ([#5840](https://github.com/community-scripts/ProxmoxVE/pull/5840)) From 1f37fbb83e9ca3bdcaf6f91503b619f146a84620 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 11:01:01 +0200 Subject: [PATCH 160/229] BabyBuddy: fix path issues (#5856) --- ct/babybuddy.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/babybuddy.sh b/ct/babybuddy.sh index 2b34ade96..8f87cea85 100644 --- a/ct/babybuddy.sh +++ b/ct/babybuddy.sh @@ -38,7 +38,7 @@ function update_script() { msg_ok "Services Stopped" msg_info "Cleaning old files" - cp babybuddy/settings/production.py /tmp/production.py.bak + cp /opt/babybuddy/babybuddy/settings/production.py /tmp/production.py.bak find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} + msg_ok "Cleaned old files" @@ -46,7 +46,7 @@ function update_script() { msg_info "Updating ${APP} to v${RELEASE}" cd /opt/babybuddy - mv /tmp/production.py.bak babybuddy/settings/production.py + mv /tmp/production.py.bak /opt/babybuddy/babybuddy/settings/production.py source .venv/bin/activate $STD uv pip install -r requirements.txt $STD python manage.py migrate From 4886196cfa9b56a28a4d143c85207bdbcfef0a73 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, 9 Jul 2025 10:01:18 +0100 Subject: [PATCH 161/229] Update CHANGELOG.md (#5861) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9670db04e..850a84829 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - BabyBuddy: fix path issues for update [@MickLesk](https://github.com/MickLesk) ([#5856](https://github.com/community-scripts/ProxmoxVE/pull/5856)) - tools.func: fix an bug while php libapache2-mod breaks [@MickLesk](https://github.com/MickLesk) ([#5857](https://github.com/community-scripts/ProxmoxVE/pull/5857)) - #### 🔧 Refactor From df52a2d0575bdbc0a204ba23a3a1a4f8e86abd40 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, 9 Jul 2025 10:01:52 +0100 Subject: [PATCH 162/229] Update CHANGELOG.md (#5862) Co-authored-by: github-actions[bot] From d0877195711a23133ad3192a81b732d7877766d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Wed, 9 Jul 2025 11:12:22 +0200 Subject: [PATCH 163/229] Refactor: Fluid-Calendar (#5846) * Refactor * Update fluid-calendar.sh --------- Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- ct/fluid-calendar.sh | 78 ++++++++++++++----------------- install/fluid-calendar-install.sh | 24 +++------- 2 files changed, 41 insertions(+), 61 deletions(-) diff --git a/ct/fluid-calendar.sh b/ct/fluid-calendar.sh index e43e28a17..f9b53474c 100644 --- a/ct/fluid-calendar.sh +++ b/ct/fluid-calendar.sh @@ -20,51 +20,43 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources + header_info + check_container_storage + check_container_resources - if [[ ! -d /opt/fluid-calendar ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - RELEASE=$(curl -fsSL https://api.github.com/repos/dotnetfactory/fluid-calendar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then - msg_info "Stopping $APP" - systemctl stop fluid-calendar.service - msg_ok "Stopped $APP" - - msg_info "Updating $APP to v${RELEASE}" - cp /opt/fluid-calendar/.env /opt/fluid.env - rm -rf /opt/fluid-calendar - tmp_file=$(mktemp) - curl -fsSL "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -o "$tmp_file" - $STD unzip $tmp_file - mv ${APP}-${RELEASE}/ /opt/fluid-calendar - mv /opt/fluid.env /opt/fluid-calendar/.env - cd /opt/fluid-calendar - export NEXT_TELEMETRY_DISABLED=1 - $STD npm install --legacy-peer-deps - $STD npm run prisma:generate - $STD npx prisma migrate deploy - $STD npm run build:os - msg_ok "Updated $APP to v${RELEASE}" - - msg_info "Starting $APP" - systemctl start fluid-calendar.service - msg_ok "Started $APP" - - msg_info "Cleaning Up" - rm -rf $tmp_file - msg_ok "Cleanup Completed" - - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Update Successful" - else - msg_ok "No update required. ${APP} is already at v${RELEASE}" - fi + if [[ ! -d /opt/fluid-calendar ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/dotnetfactory/fluid-calendar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ "${RELEASE}" != "$(cat ~/.fluid-calendar 2>/dev/null)" ]] || [[ ! -f ~/.fluid-calendar ]]; then + msg_info "Stopping $APP" + systemctl stop fluid-calendar + msg_ok "Stopped $APP" + + cp /opt/fluid-calendar/.env /opt/fluid.env + rm -rf /opt/fluid-calendar + fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" + + msg_info "Updating $APP to v${RELEASE}" + mv /opt/fluid.env /opt/fluid-calendar/.env + cd /opt/fluid-calendar + export NEXT_TELEMETRY_DISABLED=1 + $STD npm install --legacy-peer-deps + $STD npm run prisma:generate + $STD npx prisma migrate deploy + $STD npm run build:os + msg_ok "Updated $APP to v${RELEASE}" + + msg_info "Starting $APP" + systemctl start fluid-calendar + msg_ok "Started $APP" + + msg_ok "Update Successful" + else + msg_ok "No update required. ${APP} is already at v${RELEASE}" + fi + exit } start diff --git a/install/fluid-calendar-install.sh b/install/fluid-calendar-install.sh index 5dca3c133..687759acb 100644 --- a/install/fluid-calendar-install.sh +++ b/install/fluid-calendar-install.sh @@ -14,17 +14,11 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y \ - zip \ - postgresql-common +$STD apt-get install -y zip msg_ok "Installed Dependencies" -msg_info "Installing Additional Dependencies" -curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg -echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list -echo "YES" | /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh &>/dev/null -$STD apt-get install -y postgresql-17 nodejs -msg_ok "Installed Additional Dependencies" +PG_VERSION="17" setup_postgresql +NODE_VERSION="20" setup_nodejs msg_info "Setting up Postgresql Database" DB_NAME="fluiddb" @@ -44,14 +38,9 @@ $STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;" } >>~/$APPLICATION.creds msg_ok "Set up Postgresql Database" -msg_info "Setup ${APPLICATION}" -tmp_file=$(mktemp) -RELEASE=$(curl -fsSL https://api.github.com/repos/dotnetfactory/fluid-calendar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -o "$tmp_file" -$STD unzip $tmp_file -mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION} -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt +fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" +msg_info "Configuring ${APPLICATION}" cat </opt/fluid-calendar/.env DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}" @@ -72,7 +61,7 @@ $STD npm install --legacy-peer-deps $STD npm run prisma:generate $STD npx prisma migrate deploy $STD npm run build:os -msg_ok "Setup ${APPLICATION}" +msg_ok "Configuring ${APPLICATION}" msg_info "Creating Service" cat </etc/systemd/system/fluid-calendar.service @@ -95,7 +84,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -f $tmp_file $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 8d419616a65a957a155573d38b77ba9f027fa0f8 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, 9 Jul 2025 10:12:49 +0100 Subject: [PATCH 164/229] Update CHANGELOG.md (#5863) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 850a84829..14a605ff3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🔧 Refactor + - Refactor: Fluid-Calendar [@tremor021](https://github.com/tremor021) ([#5846](https://github.com/community-scripts/ProxmoxVE/pull/5846)) - Refactor: EMQX [@tremor021](https://github.com/tremor021) ([#5840](https://github.com/community-scripts/ProxmoxVE/pull/5840)) - Refactor: Excalidraw [@tremor021](https://github.com/tremor021) ([#5841](https://github.com/community-scripts/ProxmoxVE/pull/5841)) - Refactor: gatus [@tremor021](https://github.com/tremor021) ([#5849](https://github.com/community-scripts/ProxmoxVE/pull/5849)) From 475c666eb0cd531011705d1c7acd5dbd2c090f0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Wed, 9 Jul 2025 11:36:03 +0200 Subject: [PATCH 165/229] Refactor: FreshRSS (#5847) * Refactor * Update freshrss-install.sh --- install/freshrss-install.sh | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/install/freshrss-install.sh b/install/freshrss-install.sh index 25251d13c..bd188b340 100644 --- a/install/freshrss-install.sh +++ b/install/freshrss-install.sh @@ -13,13 +13,7 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y \ - apache2 \ - php-{curl,dom,json,ctype,pgsql,gmp,mbstring,iconv,zip} \ - libapache2-mod-php -msg_ok "Installed Dependencies" - +PHP_VERSION="8.2" PHP_MODULE="dom,json,ctype,pgsql,gmp,iconv" PHP_APACHE="YES" setup_php PG_VERSION="16" setup_postgresql msg_info "Setting up PostgreSQL" @@ -36,17 +30,14 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP } >>~/freshrss.creds msg_ok "Set up PostgreSQL" -msg_info "Installing FreshRSS" -RELEASE=$(curl -fsSL https://api.github.com/repos/FreshRSS/FreshRSS/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -cd /opt -curl -fsSL "https://github.com/FreshRSS/FreshRSS/archive/refs/tags/${RELEASE}.zip" -o "${RELEASE}.zip" -$STD unzip "${RELEASE}.zip" -mv "/opt/FreshRSS-${RELEASE}" /opt/freshrss +fetch_and_deploy_gh_release "freshrss" "FreshRSS/FreshRSS" + +msg_info "Configuring FreshRSS" cd /opt/freshrss chown -R www-data:www-data /opt/freshrss chmod -R g+rX /opt/freshrss chmod -R g+w /opt/freshrss/data/ -msg_ok "Installed FreshRSS" +msg_ok "Configured FreshRSS" msg_info "Setting up cron job for feed refresh" cat </etc/cron.d/freshrss-actualize @@ -83,7 +74,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -rf "/opt/${RELEASE}.zip" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From b9ec651a8bf4ea27fee1a6aae51f8ff186c9df7f 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, 9 Jul 2025 10:36:31 +0100 Subject: [PATCH 166/229] Update CHANGELOG.md (#5864) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14a605ff3..4e57ec953 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🔧 Refactor + - Refactor: FreshRSS [@tremor021](https://github.com/tremor021) ([#5847](https://github.com/community-scripts/ProxmoxVE/pull/5847)) - Refactor: Fluid-Calendar [@tremor021](https://github.com/tremor021) ([#5846](https://github.com/community-scripts/ProxmoxVE/pull/5846)) - Refactor: EMQX [@tremor021](https://github.com/tremor021) ([#5840](https://github.com/community-scripts/ProxmoxVE/pull/5840)) - Refactor: Excalidraw [@tremor021](https://github.com/tremor021) ([#5841](https://github.com/community-scripts/ProxmoxVE/pull/5841)) From c8797ba1353564bb11769b0135b5e1addd0067d0 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 14:06:33 +0200 Subject: [PATCH 167/229] tools.func: strip leading folders for prebuild assets (#5865) --- misc/tools.func | 69 +++++++++++++++++++------------------------------ 1 file changed, 26 insertions(+), 43 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index b3561a650..a98c802f6 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -368,25 +368,6 @@ function setup_mysql() { # PHP_MAX_EXECUTION_TIME - (default: 300) # ------------------------------------------------------------------------------ -# ------------------------------------------------------------------------------ -# Installs PHP with selected modules and configures Apache/FPM support. -# -# Description: -# - Adds Sury PHP repo if needed -# - Installs default and user-defined modules -# - Patches php.ini for CLI, Apache, and FPM as needed -# -# Variables: -# PHP_VERSION - PHP version to install (default: 8.4) -# PHP_MODULE - Additional comma-separated modules -# PHP_APACHE - Set YES to enable PHP with Apache -# PHP_FPM - Set YES to enable PHP-FPM -# PHP_MEMORY_LIMIT - (default: 512M) -# PHP_UPLOAD_MAX_FILESIZE - (default: 128M) -# PHP_POST_MAX_SIZE - (default: 128M) -# PHP_MAX_EXECUTION_TIME - (default: 300) -# ------------------------------------------------------------------------------ - function setup_php() { local PHP_VERSION="${PHP_VERSION:-8.4}" local PHP_MODULE="${PHP_MODULE:-}" @@ -917,7 +898,7 @@ function fetch_and_deploy_gh_release() { } } - ### Prebuild Mode ### + ### Prebuild Mode ### elif [[ "$mode" == "prebuild" ]]; then local pattern="${6%\"}" pattern="${pattern#\"}" @@ -936,7 +917,6 @@ function fetch_and_deploy_gh_release() { break ;; esac - done [[ -z "$asset_url" ]] && { @@ -952,39 +932,42 @@ function fetch_and_deploy_gh_release() { return 1 } + local unpack_tmp + unpack_tmp=$(mktemp -d) mkdir -p "$target" + if [[ "$filename" == *.zip ]]; then if ! command -v unzip &>/dev/null; then $STD apt-get install -y unzip fi - - local top_level_entries - top_level_entries=$(unzip -l "$tmpdir/$filename" | awk '{print $4}' | grep -v '^$' | cut -d/ -f1 | sort -u) - - if [[ $(wc -l <<<"$top_level_entries") -eq 1 ]]; then - unzip -q "$tmpdir/$filename" -d "$tmpdir/unzip" - shopt -s dotglob nullglob - cp -r "$tmpdir/unzip/"* "$target/" - shopt -u dotglob nullglob - else - unzip -q "$tmpdir/$filename" -d "$target" - fi - + unzip -q "$tmpdir/$filename" -d "$unpack_tmp" elif [[ "$filename" == *.tar.* ]]; then - local top_level_entries - top_level_entries=$(tar -tf "$tmpdir/$filename" | cut -d/ -f1 | sort -u) - - if [[ $(wc -l <<<"$top_level_entries") -eq 1 ]]; then - tar --strip-components=1 -xf "$tmpdir/$filename" -C "$target" - else - tar -xf "$tmpdir/$filename" -C "$target" - fi + tar -xf "$tmpdir/$filename" -C "$unpack_tmp" else msg_error "Unsupported archive format: $filename" - rm -rf "$tmpdir" + rm -rf "$tmpdir" "$unpack_tmp" return 1 fi + local top_dirs + top_dirs=$(find "$unpack_tmp" -mindepth 1 -maxdepth 1 -type d | wc -l) + + if [[ "$top_dirs" -eq 1 ]]; then + # Strip leading folder + local inner_dir + inner_dir=$(find "$unpack_tmp" -mindepth 1 -maxdepth 1 -type d) + shopt -s dotglob nullglob + cp -r "$inner_dir"/* "$target/" + shopt -u dotglob nullglob + else + # Copy all contents + shopt -s dotglob nullglob + cp -r "$unpack_tmp"/* "$target/" + shopt -u dotglob nullglob + fi + + rm -rf "$unpack_tmp" + ### Singlefile Mode ### elif [[ "$mode" == "singlefile" ]]; then local pattern="${6%\"}" From b306a31235452fe25655c05f106dead775588773 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, 9 Jul 2025 13:07:01 +0100 Subject: [PATCH 168/229] Update CHANGELOG.md (#5866) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e57ec953..daedde9bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - BabyBuddy: fix path issues for update [@MickLesk](https://github.com/MickLesk) ([#5856](https://github.com/community-scripts/ProxmoxVE/pull/5856)) - tools.func: fix an bug while php libapache2-mod breaks [@MickLesk](https://github.com/MickLesk) ([#5857](https://github.com/community-scripts/ProxmoxVE/pull/5857)) + - #### ✨ New Features + + - tools.func: strip leading folders for prebuild assets [@MickLesk](https://github.com/MickLesk) ([#5865](https://github.com/community-scripts/ProxmoxVE/pull/5865)) + - #### 🔧 Refactor - Refactor: FreshRSS [@tremor021](https://github.com/tremor021) ([#5847](https://github.com/community-scripts/ProxmoxVE/pull/5847)) From 5d1f0ab13e7b3c7d6264912c8bc2f276bc90f432 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, 9 Jul 2025 14:08:07 +0200 Subject: [PATCH 169/229] Update versions.json (#5867) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 110 ++++++++++++++--------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 16e76589d..c49b8c1c6 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,54 @@ [ + { + "name": "n8n-io/n8n", + "version": "n8n@1.102.0", + "date": "2025-07-07T15:32:29Z" + }, + { + "name": "rclone/rclone", + "version": "v1.70.3", + "date": "2025-07-09T10:02:39Z" + }, + { + "name": "fuma-nama/fumadocs", + "version": "fumadocs-ui@15.6.3", + "date": "2025-07-09T09:28:42Z" + }, + { + "name": "cockpit-project/cockpit", + "version": "342", + "date": "2025-07-09T08:48:21Z" + }, + { + "name": "esphome/esphome", + "version": "2025.6.3", + "date": "2025-07-03T01:07:26Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.2135", + "date": "2025-07-09T05:58:50Z" + }, + { + "name": "MediaBrowser/Emby.Releases", + "version": "4.9.1.2", + "date": "2025-06-26T22:08:00Z" + }, + { + "name": "NginxProxyManager/nginx-proxy-manager", + "version": "v2.14.5", + "date": "2025-07-09T04:41:02Z" + }, + { + "name": "henrygd/beszel", + "version": "v0.11.1", + "date": "2025-04-29T01:14:35Z" + }, + { + "name": "steveiliop56/tinyauth", + "version": "v3.4.1", + "date": "2025-06-11T07:53:44Z" + }, { "name": "Prowlarr/Prowlarr", "version": "v1.37.0.5076", @@ -14,11 +64,6 @@ "version": "v0.35.0", "date": "2025-05-21T18:00:32Z" }, - { - "name": "steveiliop56/tinyauth", - "version": "v3.4.1", - "date": "2025-06-11T07:53:44Z" - }, { "name": "rcourtman/Pulse", "version": "v3.40.1", @@ -34,16 +79,16 @@ "version": "v1.0.2", "date": "2025-07-08T19:14:31Z" }, + { + "name": "keycloak/keycloak", + "version": "26.3.0", + "date": "2025-07-02T12:26:44Z" + }, { "name": "TwiN/gatus", "version": "v5.20.0", "date": "2025-07-08T16:27:11Z" }, - { - "name": "fuma-nama/fumadocs", - "version": "create-fumadocs-app@15.6.2", - "date": "2025-07-08T14:26:05Z" - }, { "name": "jenkinsci/jenkins", "version": "jenkins-2.518", @@ -64,11 +109,6 @@ "version": "v2.38.2", "date": "2025-07-08T09:35:14Z" }, - { - "name": "Jackett/Jackett", - "version": "v0.22.2132", - "date": "2025-07-08T05:52:22Z" - }, { "name": "Checkmk/checkmk", "version": "v2.4.0p7", @@ -84,11 +124,6 @@ "version": "r8.0.12-rc0", "date": "2025-07-07T23:35:35Z" }, - { - "name": "keycloak/keycloak", - "version": "26.3.0", - "date": "2025-07-02T12:26:44Z" - }, { "name": "duplicati/duplicati", "version": "v2.1.0.122-2.1.0.122_canary_2025-07-07", @@ -109,11 +144,6 @@ "version": "pmm-6401-v1.121.0", "date": "2025-07-07T16:16:13Z" }, - { - "name": "n8n-io/n8n", - "version": "n8n@1.100.0", - "date": "2025-06-23T12:48:35Z" - }, { "name": "photoprism/photoprism", "version": "250707-d28b3101e", @@ -154,11 +184,6 @@ "version": "v1.5.2", "date": "2025-05-11T16:40:55Z" }, - { - "name": "MediaBrowser/Emby.Releases", - "version": "4.9.1.2", - "date": "2025-06-26T22:08:00Z" - }, { "name": "firefly-iii/firefly-iii", "version": "v6.2.20", @@ -304,21 +329,11 @@ "version": "v3.2.1", "date": "2025-07-03T16:09:19Z" }, - { - "name": "cockpit-project/cockpit", - "version": "310.5", - "date": "2025-07-03T14:05:25Z" - }, { "name": "Dolibarr/dolibarr", "version": "18.0.7", "date": "2025-07-03T08:57:21Z" }, - { - "name": "esphome/esphome", - "version": "2025.6.3", - "date": "2025-07-03T01:07:26Z" - }, { "name": "actualbudget/actual", "version": "v25.7.1", @@ -404,11 +419,6 @@ "version": "v0.15.0-rc3", "date": "2025-07-01T04:09:37Z" }, - { - "name": "NginxProxyManager/nginx-proxy-manager", - "version": "v2.12.4", - "date": "2025-07-01T01:45:42Z" - }, { "name": "MagicMirrorOrg/MagicMirror", "version": "v2.32.0", @@ -459,11 +469,6 @@ "version": "version/2025.6.3", "date": "2025-06-27T14:01:06Z" }, - { - "name": "rclone/rclone", - "version": "v1.70.2", - "date": "2025-06-27T13:21:17Z" - }, { "name": "sabnzbd/sabnzbd", "version": "4.5.1", @@ -974,11 +979,6 @@ "version": "6.8.1", "date": "2025-04-30T16:44:16Z" }, - { - "name": "henrygd/beszel", - "version": "v0.11.1", - "date": "2025-04-29T01:14:35Z" - }, { "name": "deluge-torrent/deluge", "version": "deluge-2.2.0", From 2ff778db9ab88c4c8a6f4612489c0e09cc88934c Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 14:09:11 +0200 Subject: [PATCH 170/229] Github: AutoLabler | ChangeLog (Refactor) (#5868) --- .github/autolabeler-config.json | 57 ++++++-------- .github/changelog-pr-config.json | 120 +++++++++++++++++++---------- .github/workflows/autolabeler.yml | 24 +++++- .github/workflows/changelog-pr.yml | 2 +- 4 files changed, 124 insertions(+), 79 deletions(-) diff --git a/.github/autolabeler-config.json b/.github/autolabeler-config.json index 1b30e419b..d93bcfcb0 100644 --- a/.github/autolabeler-config.json +++ b/.github/autolabeler-config.json @@ -4,6 +4,7 @@ "fileStatus": "added", "includeGlobs": [ "ct/**", + "tools/**", "install/**", "misc/**", "turnkey/**", @@ -17,16 +18,13 @@ "fileStatus": "modified", "includeGlobs": [ "ct/**", + "tools/**", "install/**", "misc/**", "turnkey/**", "vm/**" ], - "excludeGlobs": [ - "misc/build.func", - "misc/install.func", - "misc/api.func" - ] + "excludeGlobs": [] } ], "delete script": [ @@ -34,6 +32,21 @@ "fileStatus": "removed", "includeGlobs": [ "ct/**", + "tools/**", + "install/**", + "misc/**", + "turnkey/**", + "vm/**" + ], + "excludeGlobs": [] + } + ], + "breaking change": [ + { + "fileStatus": null, + "includeGlobs": [ + "ct/**", + "tools/**", "install/**", "misc/**", "turnkey/**", @@ -46,11 +59,7 @@ { "fileStatus": null, "includeGlobs": [ - "*.md", - ".github/**", - "misc/*.func", - "misc/create_lxc.sh", - "api/**" + "*.md" ], "excludeGlobs": [] } @@ -62,7 +71,9 @@ "misc/*.func", "misc/create_lxc.sh" ], - "excludeGlobs": [] + "excludeGlobs": [ + "misc/api.func" + ] } ], "website": [ @@ -71,7 +82,9 @@ "includeGlobs": [ "frontend/**" ], - "excludeGlobs": [] + "excludeGlobs": [ + "frontend/public/json/**" + ] } ], "api": [ @@ -102,26 +115,6 @@ "excludeGlobs": [] } ], - "high risk": [ - { - "fileStatus": null, - "includeGlobs": [ - "misc/build.func", - "misc/install.func", - "misc/create_lxc.sh" - ], - "excludeGlobs": [] - } - ], - "documentation": [ - { - "fileStatus": null, - "includeGlobs": [ - "*.md" - ], - "excludeGlobs": [] - } - ], "addon": [ { "fileStatus": null, diff --git a/.github/changelog-pr-config.json b/.github/changelog-pr-config.json index 2f4eae06e..e556703d0 100644 --- a/.github/changelog-pr-config.json +++ b/.github/changelog-pr-config.json @@ -1,112 +1,148 @@ [ { "title": "🆕 New Scripts", - "labels": ["new script"] + "labels": [ + "new script" + ] }, { "title": "🚀 Updated Scripts", - "labels": ["update script"], + "labels": [ + "update script" + ], "subCategories": [ { "title": "🐞 Bug Fixes", - "labels": ["bugfix"], - "notes" : [] + "labels": [ + "bugfix" + ], + "notes": [] }, { "title": "✨ New Features", - "labels": ["feature"], - "notes" : [] + "labels": [ + "feature" + ], + "notes": [] }, { "title": "💥 Breaking Changes", - "labels": ["breaking change"], - "notes" : [] + "labels": [ + "breaking change" + ], + "notes": [] }, { "title": "🔧 Refactor", - "labels": ["refactor"], - "notes" : [] + "labels": [ + "refactor" + ], + "notes": [] } ] }, { "title": "🧰 Maintenance", - "labels": ["maintenance"], + "labels": [ + "maintenance" + ], "subCategories": [ { "title": "🐞 Bug Fixes", - "labels": ["bugfix"], - "notes" : [] + "labels": [ + "bugfix" + ], + "notes": [] }, { "title": "✨ New Features", - "labels": ["feature"], - "notes" : [] + "labels": [ + "feature" + ], + "notes": [] }, { "title": "💥 Breaking Changes", - "labels": ["breaking change"], - "notes" : [] + "labels": [ + "breaking change" + ], + "notes": [] }, { "title": "📡 API", - "labels": ["api"], - "notes" : [] + "labels": [ + "api" + ], + "notes": [] }, { "title": "💾 Core", - "labels": ["core"], - "notes" : [] + "labels": [ + "core" + ], + "notes": [] }, { "title": "📂 Github", - "labels": ["github"], - "notes" : [] + "labels": [ + "github" + ], + "notes": [] }, { - "title" :"📝 Documentation", - "labels": ["documentation"], - "notes" : [] + "title": "📝 Documentation", + "labels": [ + "maintenance" + ], + "notes": [] }, { - "title" :"🔧 Refactor", - "labels": ["refactor"], - "notes" : [] + "title": "🔧 Refactor", + "labels": [ + "refactor" + ], + "notes": [] } ] }, { "title": "🌐 Website", - "labels": ["website"], + "labels": [ + "website" + ], "subCategories": [ { "title": "🐞 Bug Fixes", - "labels": ["bugfix"], - "notes" : [] + "labels": [ + "bugfix" + ], + "notes": [] }, { "title": "✨ New Features", - "labels": ["feature"], - "notes" : [] + "labels": [ + "feature" + ], + "notes": [] }, { "title": "💥 Breaking Changes", - "labels": ["breaking change"], - "notes" : [] + "labels": [ + "breaking change" + ], + "notes": [] }, { "title": "📝 Script Information", - "labels": ["json"], - "notes" : [] + "labels": [ + "json" + ], + "notes": [] } ] }, { "title": "❔ Unlabelled", "labels": [] - }, - { - "title": "💥 Breaking Changes", - "labels": ["breaking change"] } ] diff --git a/.github/workflows/autolabeler.yml b/.github/workflows/autolabeler.yml index 831cc1867..6c6b564c6 100644 --- a/.github/workflows/autolabeler.yml +++ b/.github/workflows/autolabeler.yml @@ -34,7 +34,7 @@ jobs: const autolabelerConfig = JSON.parse(fileContent); const prNumber = context.payload.pull_request.number; - const prBody = context.payload.pull_request.body.toLowerCase(); + const prBody = context.payload.pull_request.body || ""; let labelsToAdd = new Set(); @@ -74,19 +74,35 @@ jobs: "✨ **New feature**": "feature", "💥 **Breaking change**": "breaking change", "🆕 **New script**": "new script", - "🌍 **Website update**": "website", + "🌍 **Website update**": "website", // handled special "🔧 **Refactoring / Code Cleanup**": "refactor", - "📝 **Documentation update**": "documentation" + "📝 **Documentation update**": "documentation" // mapped to maintenance }; for (const [checkbox, label] of Object.entries(templateLabelMappings)) { const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1"); const regex = new RegExp(`- \\[(x|X)\\]\\s*${escapedCheckbox}`, "i"); + if (regex.test(prBody)) { - labelsToAdd.add(label); + if (label === "website") { + const hasJson = prFiles.some((f) => f.filename.startsWith("frontend/public/json/")); + const hasUpdateScript = labelsToAdd.has("update script"); + const hasContentLabel = ["bugfix", "feature", "refactor"].some((l) => labelsToAdd.has(l)); + + if (!(hasUpdateScript && hasContentLabel)) { + labelsToAdd.add(hasJson ? "json" : "website"); + } + } else if (label === "documentation") { + labelsToAdd.add("maintenance"); + } else { + labelsToAdd.add(label); + } } } } + if (labelsToAdd.size === 0) { + labelsToAdd.add("needs triage"); + } if (labelsToAdd.size > 0) { await github.rest.issues.addLabels({ diff --git a/.github/workflows/changelog-pr.yml b/.github/workflows/changelog-pr.yml index dd23df0ea..812b80538 100644 --- a/.github/workflows/changelog-pr.yml +++ b/.github/workflows/changelog-pr.yml @@ -80,7 +80,7 @@ jobs: { title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] }, { title: "📡 API", labels: ["api"], notes: [] }, { title: "Github", labels: ["github"], notes: [] }, - { title: "📝 Documentation", labels: ["documentation"], notes: [] }, + { title: "📝 Documentation", labels: ["maintenance"], notes: [] }, { title: "🔧 Refactor", labels: ["refactor"], notes: [] } ] : obj.labels.includes("website") ? [ From 54cd7dd669f50cebe07a61de2645daaa8326bb88 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, 9 Jul 2025 13:10:09 +0100 Subject: [PATCH 171/229] Update CHANGELOG.md (#5869) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index daedde9bc..4b15ff3f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - Refactor: Excalidraw [@tremor021](https://github.com/tremor021) ([#5841](https://github.com/community-scripts/ProxmoxVE/pull/5841)) - Refactor: gatus [@tremor021](https://github.com/tremor021) ([#5849](https://github.com/community-scripts/ProxmoxVE/pull/5849)) +### 🧰 Maintenance + + - #### 📂 Github + + - Github: AutoLabler | ChangeLog (Refactor) [@MickLesk](https://github.com/MickLesk) ([#5868](https://github.com/community-scripts/ProxmoxVE/pull/5868)) + ## 2025-07-08 ### 🚀 Updated Scripts From 8c09216691e272b4b7c0b3fc9c1518e181f695c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Wed, 9 Jul 2025 14:22:41 +0200 Subject: [PATCH 172/229] Refactor: Commafeed (#5802) --- ct/commafeed.sh | 17 ++++++++++------- install/commafeed-install.sh | 19 ++----------------- 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/ct/commafeed.sh b/ct/commafeed.sh index 37cc45d14..f5635a372 100644 --- a/ct/commafeed.sh +++ b/ct/commafeed.sh @@ -23,12 +23,13 @@ function update_script() { header_info check_container_storage check_container_resources + if [[ ! -d /opt/commafeed ]]; then msg_error "No ${APP} Installation Found!" exit fi RELEASE=$(curl -fsSL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4) - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + if [[ "${RELEASE}" != "$(cat ~/.commafeed 2>/dev/null)" ]] || [[ ! -f ~/.commafeed ]]; then msg_info "Stopping ${APP}" systemctl stop commafeed msg_ok "Stopped ${APP}" @@ -39,13 +40,15 @@ function update_script() { $STD apt-get install -y rsync msg_ok "Installed Dependencies" fi - + if [ -d /opt/commafeed/data ] && [ "$(ls -A /opt/commafeed/data)" ]; then + mv /opt/commafeed/data /opt/data.bak + fi + fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip" + msg_info "Updating ${APP} to ${RELEASE}" - curl -fsSL "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip" -o $(basename "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip") - $STD unzip commafeed-"${RELEASE}"-h2-jvm.zip - rsync -a --exclude 'data/' commafeed-"${RELEASE}"-h2/ /opt/commafeed/ - rm -rf commafeed-"${RELEASE}"-h2 commafeed-"${RELEASE}"-h2-jvm.zip - echo "${RELEASE}" >/opt/${APP}_version.txt + if [ -d /opt/commafeed/data.bak ] && [ "$(ls -A /opt/commafeed/data.bak)" ]; then + mv /opt/commafeed/data.bak /opt/commafeed/data + fi msg_ok "Updated ${APP} to ${RELEASE}" msg_info "Starting ${APP}" diff --git a/install/commafeed-install.sh b/install/commafeed-install.sh index 5162ab4ab..fb1154ccd 100644 --- a/install/commafeed-install.sh +++ b/install/commafeed-install.sh @@ -17,22 +17,8 @@ msg_info "Installing Dependencies" $STD apt-get install -y rsync msg_ok "Installed Dependencies" -msg_info "Installing Azul Zulu" -curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB1998361219BD9C9" -o "/etc/apt/trusted.gpg.d/zulu-repo.asc" -curl -fsSL "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb" -o "zulu-repo_1.0.0-3_all.deb" -$STD dpkg -i zulu-repo_1.0.0-3_all.deb -$STD apt-get update -$STD apt-get -y install zulu17-jdk -msg_ok "Installed Azul Zulu" - -RELEASE=$(curl -fsSL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4) -msg_info "Installing CommaFeed ${RELEASE}" -mkdir /opt/commafeed -curl -fsSL "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip" -o "commafeed-${RELEASE}-h2-jvm.zip" -$STD unzip commafeed-${RELEASE}-h2-jvm.zip -mv commafeed-${RELEASE}-h2/* /opt/commafeed/ -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt -msg_ok "Installed CommaFeed ${RELEASE}" +JAVA_VERSION="17" setup_java +fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip" msg_info "Creating Service" cat </etc/systemd/system/commafeed.service @@ -55,7 +41,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -rf commafeed-${RELEASE}-h2 commafeed-${RELEASE}-h2-jvm.zip zulu-repo_1.0.0-3_all.deb $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 0a37d1b00467ad341ab66096d8574e9c0dbc15e4 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, 9 Jul 2025 13:23:23 +0100 Subject: [PATCH 173/229] Update CHANGELOG.md (#5870) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b15ff3f4..b7f1ace1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### ✨ New Features + - Refactor: Commafeed [@tremor021](https://github.com/tremor021) ([#5802](https://github.com/community-scripts/ProxmoxVE/pull/5802)) - tools.func: strip leading folders for prebuild assets [@MickLesk](https://github.com/MickLesk) ([#5865](https://github.com/community-scripts/ProxmoxVE/pull/5865)) - #### 🔧 Refactor From acc500fe9de074b6ac920a5655d23aa3ee21e797 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 14:28:44 +0200 Subject: [PATCH 174/229] remove breaking change in autolabler --- .github/autolabeler-config.json | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.github/autolabeler-config.json b/.github/autolabeler-config.json index d93bcfcb0..342a1e38f 100644 --- a/.github/autolabeler-config.json +++ b/.github/autolabeler-config.json @@ -41,20 +41,6 @@ "excludeGlobs": [] } ], - "breaking change": [ - { - "fileStatus": null, - "includeGlobs": [ - "ct/**", - "tools/**", - "install/**", - "misc/**", - "turnkey/**", - "vm/**" - ], - "excludeGlobs": [] - } - ], "maintenance": [ { "fileStatus": null, From 661a58ae29a5ea206b23894c0727731e7f919eb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Wed, 9 Jul 2025 16:03:57 +0200 Subject: [PATCH 175/229] Refactor (#5876) --- ct/gitea.sh | 45 ++++++++++++++++++++++++---------------- install/gitea-install.sh | 9 ++++---- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/ct/gitea.sh b/ct/gitea.sh index def9044b1..f5a7119a3 100644 --- a/ct/gitea.sh +++ b/ct/gitea.sh @@ -20,24 +20,33 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -f /usr/local/bin/gitea ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//') - msg_info "Updating $APP to ${RELEASE}" - FILENAME="gitea-$RELEASE-linux-amd64" - curl -fsSL "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64" -o $FILENAME - systemctl stop gitea - rm -rf /usr/local/bin/gitea - mv $FILENAME /usr/local/bin/gitea - chmod +x /usr/local/bin/gitea - systemctl start gitea - msg_ok "Updated $APP Successfully" - exit + header_info + check_container_storage + check_container_resources + + if [[ ! -f /usr/local/bin/gitea ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//') + if [[ "${RELEASE}" != "$(cat ~/.gitea 2>/dev/null)" ]] || [[ ! -f ~/.gitea ]]; then + msg_info "Stopping service" + systemctl stop gitea + msg_ok "Service stopped" + + rm -rf /usr/local/bin/gitea + fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-amd64" + chmod +x /usr/local/bin/gitea + + msg_info "Starting service" + systemctl start gitea + msg_ok "Started service" + + msg_ok "Update Successful" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + exit } start diff --git a/install/gitea-install.sh b/install/gitea-install.sh index 1af12b6da..88af785f8 100644 --- a/install/gitea-install.sh +++ b/install/gitea-install.sh @@ -19,10 +19,9 @@ $STD apt-get install -y git $STD apt-get install -y sqlite3 msg_ok "Installed Dependencies" -msg_info "Installing Gitea" -RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//') -curl -fsSL "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64" -o "gitea-$RELEASE-linux-amd64" -mv gitea* /usr/local/bin/gitea +fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-amd64" + +msg_info "Configuring Gitea" chmod +x /usr/local/bin/gitea adduser --system --group --disabled-password --shell /bin/bash --home /etc/gitea gitea >/dev/null mkdir -p /var/lib/gitea/{custom,data,log} @@ -31,7 +30,7 @@ chmod -R 750 /var/lib/gitea/ chown root:gitea /etc/gitea chmod 770 /etc/gitea sudo -u gitea ln -s /var/lib/gitea/data/.ssh/ /etc/gitea/.ssh -msg_ok "Installed Gitea" +msg_ok "Configured Gitea" msg_info "Creating Service" cat </etc/systemd/system/gitea.service From 89498f4205e8c866f32455eba94f55085e3f6464 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, 9 Jul 2025 15:04:36 +0100 Subject: [PATCH 176/229] Update CHANGELOG.md (#5878) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7f1ace1f..0ec8578a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,16 +16,17 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes - - BabyBuddy: fix path issues for update [@MickLesk](https://github.com/MickLesk) ([#5856](https://github.com/community-scripts/ProxmoxVE/pull/5856)) - tools.func: fix an bug while php libapache2-mod breaks [@MickLesk](https://github.com/MickLesk) ([#5857](https://github.com/community-scripts/ProxmoxVE/pull/5857)) + - BabyBuddy: fix path issues for update [@MickLesk](https://github.com/MickLesk) ([#5856](https://github.com/community-scripts/ProxmoxVE/pull/5856)) - #### ✨ New Features - - Refactor: Commafeed [@tremor021](https://github.com/tremor021) ([#5802](https://github.com/community-scripts/ProxmoxVE/pull/5802)) - tools.func: strip leading folders for prebuild assets [@MickLesk](https://github.com/MickLesk) ([#5865](https://github.com/community-scripts/ProxmoxVE/pull/5865)) + - Refactor: Commafeed [@tremor021](https://github.com/tremor021) ([#5802](https://github.com/community-scripts/ProxmoxVE/pull/5802)) - #### 🔧 Refactor + - Refactor: Gitea [@tremor021](https://github.com/tremor021) ([#5876](https://github.com/community-scripts/ProxmoxVE/pull/5876)) - Refactor: FreshRSS [@tremor021](https://github.com/tremor021) ([#5847](https://github.com/community-scripts/ProxmoxVE/pull/5847)) - Refactor: Fluid-Calendar [@tremor021](https://github.com/tremor021) ([#5846](https://github.com/community-scripts/ProxmoxVE/pull/5846)) - Refactor: EMQX [@tremor021](https://github.com/tremor021) ([#5840](https://github.com/community-scripts/ProxmoxVE/pull/5840)) From 5bad80e148627a834c2864df6bd7e1c9444dd535 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Wed, 9 Jul 2025 16:05:31 +0200 Subject: [PATCH 177/229] Refactor: FlareSolverr (#5845) * Refactor * Update flaresolverr.sh * Update flaresolverr.sh * Update flaresolverr-install.sh --- ct/flaresolverr.sh | 19 +++++++++++-------- install/flaresolverr-install.sh | 13 ++++--------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/ct/flaresolverr.sh b/ct/flaresolverr.sh index 36f08d1fe..84339b938 100644 --- a/ct/flaresolverr.sh +++ b/ct/flaresolverr.sh @@ -23,20 +23,23 @@ function update_script() { header_info check_container_storage check_container_resources + if [[ ! -f /etc/systemd/system/flaresolverr.service ]]; then msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -fsSL https://github.com/FlareSolverr/FlareSolverr/releases/latest | grep "title>Release" | cut -d " " -f 4) - if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then - msg_info "Updating $APP LXC" + RELEASE=$(curl -fsSL https://api.github.com/repos/FlareSolverr/FlareSolverr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') + if [[ "${RELEASE}" != "$(cat ~/.flaresolverr 2>/dev/null)" ]] || [[ ! -f ~/.flaresolverr ]]; then + msg_info "Stopping service" systemctl stop flaresolverr - curl -fsSL "https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz" -o $(basename "https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz") - tar -xzf flaresolverr_linux_x64.tar.gz -C /opt - rm flaresolverr_linux_x64.tar.gz + msg_ok "Stopped service" + + rm -rf /opt/flaresolverr + fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz" + + msg_info "Starting service" systemctl start flaresolverr - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated $APP LXC" + msg_ok "Started service" else msg_ok "No update required. ${APP} is already at ${RELEASE}" fi diff --git a/install/flaresolverr-install.sh b/install/flaresolverr-install.sh index c293545ab..ba1e2292f 100644 --- a/install/flaresolverr-install.sh +++ b/install/flaresolverr-install.sh @@ -15,8 +15,9 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y apt-transport-https -$STD apt-get install -y xvfb +$STD apt-get install -y \ + apt-transport-https \ + xvfb msg_ok "Installed Dependencies" msg_info "Installing Chrome" @@ -26,13 +27,7 @@ $STD apt update $STD apt install -y google-chrome-stable msg_ok "Installed Chrome" -msg_info "Installing FlareSolverr" -RELEASE=$(curl -fsSL https://github.com/FlareSolverr/FlareSolverr/releases/latest | grep "title>Release" | cut -d " " -f 4) -$STD curl -fsSL "https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz" -o "flaresolverr_linux_x64.tar.gz" -$STD tar -xzf flaresolverr_linux_x64.tar.gz -C /opt -$STD rm flaresolverr_linux_x64.tar.gz -echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt -msg_ok "Installed FlareSolverr" +fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz" msg_info "Creating Service" cat </etc/systemd/system/flaresolverr.service From 54d534a5d28f55887c897e6eaa780c68d8f4dc33 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, 9 Jul 2025 15:05:57 +0100 Subject: [PATCH 178/229] Update CHANGELOG.md (#5879) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ec8578a7..16a20100f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🔧 Refactor + - Refactor: FlareSolverr [@tremor021](https://github.com/tremor021) ([#5845](https://github.com/community-scripts/ProxmoxVE/pull/5845)) - Refactor: Gitea [@tremor021](https://github.com/tremor021) ([#5876](https://github.com/community-scripts/ProxmoxVE/pull/5876)) - Refactor: FreshRSS [@tremor021](https://github.com/tremor021) ([#5847](https://github.com/community-scripts/ProxmoxVE/pull/5847)) - Refactor: Fluid-Calendar [@tremor021](https://github.com/tremor021) ([#5846](https://github.com/community-scripts/ProxmoxVE/pull/5846)) From 24be3b43b13040a84290530247bbcdcf1f2e70e4 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 16:10:13 +0200 Subject: [PATCH 179/229] core: Fix VAAPI passthrough for unprivileged LXC containers via devX (#5875) --- misc/build.func | 68 +++++++++++++++++++------------------------------ misc/core.func | 1 - 2 files changed, 26 insertions(+), 43 deletions(-) diff --git a/misc/build.func b/misc/build.func index d6ecf70ba..65f912c0d 100644 --- a/misc/build.func +++ b/misc/build.func @@ -1142,64 +1142,48 @@ EOF echo "" msg_custom "⚙️ " "\e[96m" "Configuring VAAPI passthrough for LXC container" - if [ "$CT_TYPE" != "0" ]; then msg_custom "⚠️ " "\e[33m" "Container is unprivileged – VAAPI passthrough may not work without additional host configuration (e.g., idmap)." fi - msg_custom "ℹ️ " "\e[96m" "VAAPI enables GPU hardware acceleration (e.g., for video transcoding in Jellyfin or Plex)." - echo "" read -rp "➤ Automatically mount all available VAAPI devices? [Y/n]: " VAAPI_ALL if [[ "$VAAPI_ALL" =~ ^[Yy]$|^$ ]]; then - # Mount all devices automatically - if [[ -e /dev/dri/renderD128 ]]; then - echo "lxc.cgroup2.devices.allow: c 226:128 rwm" >>"$LXC_CONFIG" - echo "lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file" >>"$LXC_CONFIG" - fi - if [[ -e /dev/dri/card0 ]]; then - echo "lxc.cgroup2.devices.allow: c 226:0 rwm" >>"$LXC_CONFIG" - - echo "lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file" >>"$LXC_CONFIG" - fi - if [[ -e /dev/fb0 ]]; then - echo "lxc.cgroup2.devices.allow: c 29:0 rwm" >>"$LXC_CONFIG" - echo "lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file" >>"$LXC_CONFIG" - fi - if [[ -d /dev/dri ]]; then - echo "lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir" >>"$LXC_CONFIG" - fi - else - # Manual selection per device - if [[ -e /dev/dri/renderD128 ]]; then - read -rp "➤ Mount /dev/dri/renderD128 (GPU rendering)? [y/N]: " MOUNT_D128 - if [[ "$MOUNT_D128" =~ ^[Yy]$ ]]; then + if [ "$CT_TYPE" == "0" ]; then + # PRV Container → alles zulässig + [[ -e /dev/dri/renderD128 ]] && { echo "lxc.cgroup2.devices.allow: c 226:128 rwm" >>"$LXC_CONFIG" echo "lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file" >>"$LXC_CONFIG" - fi - fi - - if [[ -e /dev/dri/card0 ]]; then - read -rp "➤ Mount /dev/dri/card0 (GPU hardware interface)? [y/N]: " MOUNT_CARD0 - if [[ "$MOUNT_CARD0" =~ ^[Yy]$ ]]; then + } + [[ -e /dev/dri/card0 ]] && { echo "lxc.cgroup2.devices.allow: c 226:0 rwm" >>"$LXC_CONFIG" echo "lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file" >>"$LXC_CONFIG" - - fi - fi - - if [[ -e /dev/fb0 ]]; then - read -rp "➤ Mount /dev/fb0 (Framebuffer, GUI)? [y/N]: " MOUNT_FB0 - if [[ "$MOUNT_FB0" =~ ^[Yy]$ ]]; then + } + [[ -e /dev/fb0 ]] && { echo "lxc.cgroup2.devices.allow: c 29:0 rwm" >>"$LXC_CONFIG" echo "lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file" >>"$LXC_CONFIG" - fi + } + [[ -d /dev/dri ]] && { + echo "lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir" >>"$LXC_CONFIG" + } + else + # UNPRV Container → nur devX für UI + [[ -e /dev/dri/card0 ]] && echo "dev0: /dev/dri/card0,gid=44" >>"$LXC_CONFIG" + [[ -e /dev/dri/card1 ]] && echo "dev0: /dev/dri/card1,gid=44" >>"$LXC_CONFIG" + [[ -e /dev/dri/renderD128 ]] && echo "dev1: /dev/dri/renderD128,gid=104" >>"$LXC_CONFIG" fi + fi - if [[ -d /dev/dri ]]; then - echo "lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir" >>"$LXC_CONFIG" - fi + fi + if [ "$CT_TYPE" == "1" ] && [ "$is_vaapi_app" == "true" ]; then + if [[ -e /dev/dri/card0 ]]; then + echo "dev0: /dev/dri/card0,gid=44" >>"$LXC_CONFIG" + elif [[ -e /dev/dri/card1 ]]; then + echo "dev0: /dev/dri/card1,gid=44" >>"$LXC_CONFIG" + fi + if [[ -e /dev/dri/renderD128 ]]; then + echo "dev1: /dev/dri/renderD128,gid=104" >>"$LXC_CONFIG" fi fi diff --git a/misc/core.func b/misc/core.func index 9b0c128af..71c13764f 100644 --- a/misc/core.func +++ b/misc/core.func @@ -355,7 +355,6 @@ msg_custom() { [[ -z "$msg" ]] && return stop_spinner echo -e "${BFR:-} ${symbol} ${color}${msg}${CL:-\e[0m}" - printf "\r\033[K\e[?25h\n" } run_container_safe() { From 24eff9dbbd353fb1982b2e0490f9e4e6230b470f 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, 9 Jul 2025 15:10:41 +0100 Subject: [PATCH 180/229] Update CHANGELOG.md (#5880) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16a20100f..a7db43c31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - core: Fix VAAPI passthrough for unprivileged LXC containers via devX [@MickLesk](https://github.com/MickLesk) ([#5875](https://github.com/community-scripts/ProxmoxVE/pull/5875)) - tools.func: fix an bug while php libapache2-mod breaks [@MickLesk](https://github.com/MickLesk) ([#5857](https://github.com/community-scripts/ProxmoxVE/pull/5857)) - BabyBuddy: fix path issues for update [@MickLesk](https://github.com/MickLesk) ([#5856](https://github.com/community-scripts/ProxmoxVE/pull/5856)) From b56504898565e746e319ab4843a1819b650d9f7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Wed, 9 Jul 2025 17:12:02 +0200 Subject: [PATCH 181/229] Refactor (#5874) --- ct/glance.sh | 15 +++------------ install/glance-install.sh | 14 ++++---------- 2 files changed, 7 insertions(+), 22 deletions(-) diff --git a/ct/glance.sh b/ct/glance.sh index eb237c82d..41bb6f5a6 100644 --- a/ct/glance.sh +++ b/ct/glance.sh @@ -28,28 +28,19 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -fsSL https://api.github.com/repos/glanceapp/glance/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + if [[ "${RELEASE}" != "$(cat ~/.glance 2>/dev/null)" ]] || [[ ! -f ~/.glance ]]; then msg_info "Stopping Service" systemctl stop glance msg_ok "Stopped Service" - msg_info "Updating ${APP} to v${RELEASE}" - cd /opt - curl -fsSL "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz" -o $(basename "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz") - rm -rf /opt/glance/glance - tar -xzf glance-linux-amd64.tar.gz -C /opt/glance - echo "${RELEASE}" >"/opt/${APP}_version.txt" - msg_ok "Updated ${APP} to v${RELEASE}" + rm -f /opt/glance/glance + fetch_and_deploy_gh_release "glance" "glanceapp/glance" "prebuild" "latest" "/opt/glance" "glance-linux-amd64.tar.gz" msg_info "Starting Service" systemctl start glance msg_ok "Started Service" - msg_info "Cleaning up" - rm -rf /opt/glance-linux-amd64.tar.gz - msg_ok "Cleaned" msg_ok "Updated Successfully" else msg_ok "No update required. ${APP} is already at v${RELEASE}." diff --git a/install/glance-install.sh b/install/glance-install.sh index 84f65908c..23850e784 100644 --- a/install/glance-install.sh +++ b/install/glance-install.sh @@ -13,12 +13,9 @@ setting_up_container network_check update_os -msg_info "Installing Glance" -RELEASE=$(curl -fsSL https://api.github.com/repos/glanceapp/glance/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -cd /opt -curl -fsSL "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz" -o "glance-linux-amd64.tar.gz" -mkdir -p /opt/glance -tar -xzf glance-linux-amd64.tar.gz -C /opt/glance +fetch_and_deploy_gh_release "glance" "glanceapp/glance" "prebuild" "latest" "/opt/glance" "glance-linux-amd64.tar.gz" + +msg_info "Configuring Glance" cat </opt/glance/glance.yml pages: - name: Startpage @@ -39,9 +36,7 @@ pages: - title: Helper Scripts url: https://github.com/community-scripts/ProxmoxVE EOF - -echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" -msg_ok "Installed Glance" +msg_ok "Configured Glance" msg_info "Creating Service" service_path="/etc/systemd/system/glance.service" @@ -67,7 +62,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -rf /opt/glance-linux-amd64.tar.gz $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 6acf854f3e1b36a9b327f0d2d3aabc161697a292 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, 9 Jul 2025 16:12:38 +0100 Subject: [PATCH 182/229] Update CHANGELOG.md (#5882) 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 a7db43c31..921a45b5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,10 +23,11 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### ✨ New Features - tools.func: strip leading folders for prebuild assets [@MickLesk](https://github.com/MickLesk) ([#5865](https://github.com/community-scripts/ProxmoxVE/pull/5865)) - - Refactor: Commafeed [@tremor021](https://github.com/tremor021) ([#5802](https://github.com/community-scripts/ProxmoxVE/pull/5802)) - #### 🔧 Refactor + - Refactor: Glance [@tremor021](https://github.com/tremor021) ([#5874](https://github.com/community-scripts/ProxmoxVE/pull/5874)) + - Refactor: Commafeed [@tremor021](https://github.com/tremor021) ([#5802](https://github.com/community-scripts/ProxmoxVE/pull/5802)) - Refactor: FlareSolverr [@tremor021](https://github.com/tremor021) ([#5845](https://github.com/community-scripts/ProxmoxVE/pull/5845)) - Refactor: Gitea [@tremor021](https://github.com/tremor021) ([#5876](https://github.com/community-scripts/ProxmoxVE/pull/5876)) - Refactor: FreshRSS [@tremor021](https://github.com/tremor021) ([#5847](https://github.com/community-scripts/ProxmoxVE/pull/5847)) From e8aa450d069f2d533e910978496a0b668700ecd9 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 17:40:14 +0200 Subject: [PATCH 183/229] Refactor: Ghost (use now MySQL) (#5871) * Refactor: Ghost * update mysql --- ct/ghost.sh | 39 ++++++++++++++++++++++----------------- install/ghost-install.sh | 14 +++++++------- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/ct/ghost.sh b/ct/ghost.sh index 51e6d1d7d..8b37605c6 100644 --- a/ct/ghost.sh +++ b/ct/ghost.sh @@ -20,26 +20,31 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - msg_info "Updating ${APP} LXC" + header_info + check_container_storage + check_container_resources - if command -v ghost &>/dev/null; then - current_version=$(ghost version | grep 'Ghost-CLI version' | awk '{print $3}') - latest_version=$(npm show ghost-cli version) - if [ "$current_version" != "$latest_version" ]; then - msg_info "Updating ${APP} from version v${current_version} to v${latest_version}" - $STD npm install -g ghost-cli@latest - msg_ok "Updated Successfully" - else - msg_ok "${APP} is already at v${current_version}" - fi + if ! dpkg-query -W -f='${Status}' mariadb-server 2>/dev/null | grep -q "install ok installed"; then + setup_mysql + fi + NODE_VERSION="22" setup_nodejs + + msg_info "Updating ${APP} LXC" + if command -v ghost &>/dev/null; then + current_version=$(ghost version | grep 'Ghost-CLI version' | awk '{print $3}') + latest_version=$(npm show ghost-cli version) + if [ "$current_version" != "$latest_version" ]; then + msg_info "Updating ${APP} from version v${current_version} to v${latest_version}" + $STD npm install -g ghost-cli@latest + msg_ok "Updated Successfully" else - msg_error "No ${APP} Installation Found!" - exit + msg_ok "${APP} is already at v${current_version}" fi + else + msg_error "No ${APP} Installation Found!" exit + fi + exit } start @@ -49,4 +54,4 @@ 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}:2368${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2368${CL}" diff --git a/install/ghost-install.sh b/install/ghost-install.sh index cee4f3d58..6d3015309 100644 --- a/install/ghost-install.sh +++ b/install/ghost-install.sh @@ -16,19 +16,19 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y \ nginx \ - ca-certificates + ca-certificates \ + libjemalloc2 msg_ok "Installed Dependencies" -setup_mariadb +setup_mysql msg_info "Configuring Database" DB_NAME=ghost DB_USER=ghostuser DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) -$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;" -$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';" -$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;" - +$STD mysql -u root -e "CREATE DATABASE $DB_NAME;" +$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';" +$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;" { echo "Ghost-Credentials" echo "Ghost Database User: $DB_USER" @@ -37,7 +37,7 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS } >>~/ghost.creds msg_ok "Configured MySQL" -NODE_VERSION="20" setup_nodejs +NODE_VERSION="22" setup_nodejs msg_info "Installing Ghost CLI" $STD npm install ghost-cli@latest -g From f01046133ef6e64c93de0934aca1a8e19640de90 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, 9 Jul 2025 16:40:39 +0100 Subject: [PATCH 184/229] Update CHANGELOG.md (#5883) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 921a45b5b..255c64821 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🔧 Refactor + - Refactor: Ghost (use now MySQL) [@MickLesk](https://github.com/MickLesk) ([#5871](https://github.com/community-scripts/ProxmoxVE/pull/5871)) - Refactor: Glance [@tremor021](https://github.com/tremor021) ([#5874](https://github.com/community-scripts/ProxmoxVE/pull/5874)) - Refactor: Commafeed [@tremor021](https://github.com/tremor021) ([#5802](https://github.com/community-scripts/ProxmoxVE/pull/5802)) - Refactor: FlareSolverr [@tremor021](https://github.com/tremor021) ([#5845](https://github.com/community-scripts/ProxmoxVE/pull/5845)) From 1a53b749da4e3014e60ffde46b9ac8874a4f7e5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Wed, 9 Jul 2025 17:42:28 +0200 Subject: [PATCH 185/229] Refactor (#5844) --- ct/firefly.sh | 17 ++++++++--------- install/firefly-install.sh | 25 +++++++------------------ 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/ct/firefly.sh b/ct/firefly.sh index 1c646e3aa..ead098e0a 100644 --- a/ct/firefly.sh +++ b/ct/firefly.sh @@ -29,17 +29,20 @@ function update_script() { exit fi RELEASE=$(curl -fsSL https://api.github.com/repos/firefly-iii/firefly-iii/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + if [[ "${RELEASE}" != "$(cat ~/.firefly 2>/dev/null)" ]] || [[ ! -f ~/.firefly ]]; then msg_info "Stopping Apache2" systemctl stop apache2 msg_ok "Stopped Apache2" - msg_info "Updating ${APP} to v${RELEASE}" + msg_info "Backing up data" cp /opt/firefly/.env /opt/.env cp -r /opt/firefly/storage /opt/storage - cd /opt - curl -fsSL "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz" -o $(basename "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz") - tar -xzf FireflyIII-v${RELEASE}.tar.gz -C /opt/firefly --exclude='storage' + msg_ok "Backed up data" + + fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" + + msg_info "Updating ${APP} to v${RELEASE}" + rm -rf /opt/firefly/storage cp /opt/.env /opt/firefly/.env cp -r /opt/storage /opt/firefly/storage cd /opt/firefly @@ -50,16 +53,12 @@ function update_script() { $STD php artisan view:clear $STD php artisan firefly-iii:upgrade-database $STD php artisan firefly-iii:laravel-passport-keys - echo "${RELEASE}" >"/opt/${APP}_version.txt" msg_ok "Updated ${APP} to v${RELEASE}" msg_info "Starting Apache2" systemctl start apache2 msg_ok "Started Apache2" - msg_info "Cleaning up" - rm -rf /opt/FireflyIII-v${RELEASE}.tar.gz - msg_ok "Cleaned" msg_ok "Updated Successfully" else msg_ok "No update required. ${APP} is already at v${RELEASE}." diff --git a/install/firefly-install.sh b/install/firefly-install.sh index 1c8e57041..9e9b55853 100644 --- a/install/firefly-install.sh +++ b/install/firefly-install.sh @@ -14,17 +14,14 @@ network_check update_os msg_info "Installing Dependencies" -curl -fsSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg -echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ bookworm main" >/etc/apt/sources.list.d/php.list -$STD apt-get update -$STD apt-get install -y \ - apache2 \ - libapache2-mod-php8.4 \ - php8.4-{bcmath,cli,intl,curl,zip,gd,xml,mbstring,mysql} \ - composer +$STD apt-get install -y apache2 msg_ok "Installed Dependencies" +PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="mysql" setup_php +setup_composer setup_mariadb +fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" +LOCAL_IP=$(hostname -I | awk '{print $1}') msg_info "Setting up database" DB_NAME=firefly @@ -41,13 +38,7 @@ mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRI } >>~/firefly.creds msg_ok "Set up database" -msg_info "Installing Firefly III (Patience)" -LOCAL_IP=$(hostname -I | awk '{print $1}') -RELEASE=$(curl -fsSL https://api.github.com/repos/firefly-iii/firefly-iii/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') -cd /opt -curl -fsSL "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz" -o "FireflyIII-v${RELEASE}.tar.gz" -mkdir -p /opt/firefly -tar -xzf FireflyIII-v${RELEASE}.tar.gz -C /opt/firefly +msg_info "Configuring Firefly III (Patience)" chown -R www-data:www-data /opt/firefly chmod -R 775 /opt/firefly/storage cd /opt/firefly @@ -69,8 +60,7 @@ tar -xzf "DataImporter-v${IMPORTER_RELEASE}.tar.gz" -C /opt/firefly/dataimporter cp /opt/firefly/dataimporter/.env.example /opt/firefly/dataimporter/.env sed -i "s#FIREFLY_III_URL=#FIREFLY_III_URL=http://${LOCAL_IP}#g" /opt/firefly/dataimporter/.env chown -R www-data:www-data /opt/firefly -echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" -msg_ok "Installed Firefly III" +msg_ok "Configured Firefly III" msg_info "Creating Service" cat </etc/apache2/sites-available/firefly.conf @@ -112,7 +102,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -rf "/opt/FireflyIII-v${RELEASE}.tar.gz" rm -rf "/opt/DataImporter-v${IMPORTER_RELEASE}.tar.gz" $STD apt-get -y autoremove $STD apt-get -y autoclean From 3914c0f7b929eaa7825fcb6e7d44f1db4eedae8b 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, 9 Jul 2025 16:43:07 +0100 Subject: [PATCH 186/229] Update CHANGELOG.md (#5884) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 255c64821..2d3e2cc91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🔧 Refactor + - Refactor: Firefly [@tremor021](https://github.com/tremor021) ([#5844](https://github.com/community-scripts/ProxmoxVE/pull/5844)) - Refactor: Ghost (use now MySQL) [@MickLesk](https://github.com/MickLesk) ([#5871](https://github.com/community-scripts/ProxmoxVE/pull/5871)) - Refactor: Glance [@tremor021](https://github.com/tremor021) ([#5874](https://github.com/community-scripts/ProxmoxVE/pull/5874)) - Refactor: Commafeed [@tremor021](https://github.com/tremor021) ([#5802](https://github.com/community-scripts/ProxmoxVE/pull/5802)) From 7b380253eea4f268b469b1f28f59e3850c6896df Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 17:43:30 +0200 Subject: [PATCH 187/229] Refactor: Stirling-PDF (#5872) --- ct/stirling-pdf.sh | 54 ++++++---- frontend/public/json/stirling-pdf.json | 66 ++++++------ install/stirling-pdf-install.sh | 141 ++++++++++++++++--------- 3 files changed, 159 insertions(+), 102 deletions(-) diff --git a/ct/stirling-pdf.sh b/ct/stirling-pdf.sh index f31a2c607..8daac2496 100644 --- a/ct/stirling-pdf.sh +++ b/ct/stirling-pdf.sh @@ -27,31 +27,41 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - msg_info "Updating ${APP}" - systemctl stop stirlingpdf - if [[ -n $(dpkg -l | grep -w ocrmypdf) ]] && [[ -z $(dpkg -l | grep -w qpdf) ]]; then - $STD apt-get remove -y ocrmypdf - $STD apt-get install -y qpdf + RELEASE=$(curl -fsSL https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + if [[ "${RELEASE}" != "$(cat ~/.stirling-pdf 2>/dev/null)" ]] || [[ ! -f ~/.stirling-pdf ]]; then + if [[ ! -f /etc/systemd/system/unoserver.service ]]; then + msg_custom "⚠️ " "\e[33m" "Legacy installation detected – please recreate the container using the latest install script." + exit 0 + fi + + PYTHON_VERSION="3.12" setup_uv + JAVA_VERSION="21" setup_java + + msg_info "Stopping Services" + systemctl stop stirlingpdf libreoffice-listener unoserver + msg_ok "Stopped Services" + + if [[ -f ~/.Stirling-PDF-login ]]; then + USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF-with-login.jar" + mv /opt/Stirling-PDF/Stirling-PDF-with-login.jar /opt/Stirling-PDF/Stirling-PDF.jar + else + USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF.jar" + fi + + msg_info "Refreshing Font Cache" + $STD fc-cache -fv + msg_ok "Font Cache Updated" + + msg_info "Starting Services" + systemctl start stirlingpdf libreoffice-listener unoserver + msg_ok "Started Services" + + msg_ok "Update Successful" + else + msg_ok "No update required. ${APP} is already at v${RELEASE}" fi - RELEASE=$(curl -fsSL https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - curl -fsSL "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz" -o $(basename "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz") - tar -xzf v$RELEASE.tar.gz - cd Stirling-PDF-$RELEASE - chmod +x ./gradlew - $STD ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube - rm -rf /opt/Stirling-PDF/Stirling-PDF-*.jar - cp -r ./stirling-pdf/build/libs/*.jar /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar - cp -r scripts /opt/Stirling-PDF/ - cp -r pipeline /opt/Stirling-PDF/ - cp -r stirling-pdf/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/ - cd ~ - rm -rf Stirling-PDF-$RELEASE v$RELEASE.tar.gz - ln -sf /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar - systemctl start stirlingpdf - msg_ok "Updated ${APP} to v$RELEASE" exit } - start build_container description diff --git a/frontend/public/json/stirling-pdf.json b/frontend/public/json/stirling-pdf.json index efe3e3d86..e590c8cab 100644 --- a/frontend/public/json/stirling-pdf.json +++ b/frontend/public/json/stirling-pdf.json @@ -1,35 +1,35 @@ { - "name": "Stirling-PDF", - "slug": "stirling-pdf", - "categories": [ - 12 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8080, - "documentation": null, - "website": "https://github.com/Stirling-Tools/Stirling-PDF", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/stirling-pdf.webp", - "config_path": "/opt/Stirling-PDF/.env", - "description": "Stirling-PDF is a powerful locally hosted web based PDF manipulation tool that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more.", - "install_methods": [ - { - "type": "default", - "script": "ct/stirling-pdf.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 8, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] + "name": "Stirling-PDF", + "slug": "stirling-pdf", + "categories": [ + 12 + ], + "date_created": "2024-05-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8080, + "documentation": null, + "website": "https://github.com/Stirling-Tools/Stirling-PDF", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/stirling-pdf.webp", + "config_path": "/opt/Stirling-PDF/.env", + "description": "Stirling-PDF is a powerful locally hosted web based PDF manipulation tool that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more.", + "install_methods": [ + { + "type": "default", + "script": "ct/stirling-pdf.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 8, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": "admin", + "password": "stirling" + }, + "notes": [] } diff --git a/install/stirling-pdf-install.sh b/install/stirling-pdf-install.sh index c2fcf58ab..5a87a57ac 100644 --- a/install/stirling-pdf-install.sh +++ b/install/stirling-pdf-install.sh @@ -15,7 +15,6 @@ update_os msg_info "Installing Dependencies (Patience)" $STD apt-get install -y \ - git \ automake \ autoconf \ libtool \ @@ -25,10 +24,26 @@ $STD apt-get install -y \ make \ g++ \ unpaper \ + fonts-urw-base35 \ qpdf \ poppler-utils msg_ok "Installed Dependencies" +PYTHON_VERSION="3.12" setup_uv +JAVA_VERSION="21" setup_java + +read -r -p "${TAB3}Do you want to Stirling-PDF with Login? (no/n = without Login) [Y/n] " response +response=${response,,} # Convert to lowercase +login_mode="false" +if [[ "$response" == "y" || "$response" == "yes" || -z "$response" ]]; then + USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF-with-login.jar" + mv /opt/Stirling-PDF/Stirling-PDF-with-login.jar /opt/Stirling-PDF/Stirling-PDF.jar + touch ~/.Stirling-PDF-login + login_mode="true" +else + USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF.jar" +fi + msg_info "Installing LibreOffice Components" $STD apt-get install -y \ libreoffice-writer \ @@ -37,32 +52,35 @@ $STD apt-get install -y \ libreoffice-core \ libreoffice-common \ libreoffice-base-core \ - python3-uno + libreoffice-script-provider-python \ + libreoffice-java-common \ + unoconv \ + pngquant \ + weasyprint msg_ok "Installed LibreOffice Components" msg_info "Installing Python Dependencies" -$STD apt-get install -y \ - python3 \ - python3-pip -rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED -$STD pip3 install \ - uno \ +mkdir -p /tmp/stirling-pdf +$STD uv venv /opt/.venv +export PATH="/opt/.venv/bin:$PATH" +source /opt/.venv/bin/activate +$STD uv pip install --upgrade pip +$STD uv pip install \ opencv-python-headless \ - unoconv \ - pngquant \ - WeasyPrint + ocrmypdf \ + pillow \ + pdf2image + +$STD apt-get install -y python3-uno python3-pip +$STD pip3 install --break-system-packages unoserver +ln -sf /opt/.venv/bin/python3 /usr/local/bin/python3 +ln -sf /opt/.venv/bin/pip /usr/local/bin/pip msg_ok "Installed Python Dependencies" -msg_info "Installing Azul Zulu" -curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB1998361219BD9C9" -o "/etc/apt/trusted.gpg.d/zulu-repo.asc" -curl -fsSL "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb" -o "/zulu-repo_1.0.0-3_all.deb" -$STD dpkg -i zulu-repo_1.0.0-3_all.deb -$STD apt-get update -$STD apt-get -y install zulu17-jdk -msg_ok "Installed Azul Zulu" - msg_info "Installing JBIG2" -$STD git clone https://github.com/agl/jbig2enc /opt/jbig2enc +$STD curl -fsSL -o /tmp/jbig2enc.tar.gz https://github.com/agl/jbig2enc/archive/refs/tags/0.30.tar.gz +mkdir -p /opt/jbig2enc +tar -xzf /tmp/jbig2enc.tar.gz -C /opt/jbig2enc --strip-components=1 cd /opt/jbig2enc $STD bash ./autogen.sh $STD bash ./configure @@ -74,25 +92,46 @@ msg_info "Installing Language Packs (Patience)" $STD apt-get install -y 'tesseract-ocr-*' msg_ok "Installed Language Packs" -msg_info "Installing Stirling-PDF (Additional Patience)" -RELEASE=$(curl -fsSL https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v${RELEASE}.tar.gz" -o "v${RELEASE}.tar.gz" -tar -xzf v${RELEASE}.tar.gz -cd Stirling-PDF-$RELEASE -chmod +x ./gradlew -$STD ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube -mkdir -p /opt/Stirling-PDF -touch /opt/Stirling-PDF/.env -mv ./stirling-pdf/build/libs/*.jar /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar -mv scripts /opt/Stirling-PDF/ -mv pipeline /opt/Stirling-PDF/ -mv stirling-pdf/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/ -ln -s /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar -ln -s /usr/share/tesseract-ocr/5/tessdata/ /usr/share/tessdata -msg_ok "Installed Stirling-PDF" +msg_info "Creating Environment Variables" +cat </opt/Stirling-PDF/.env +# Java tuning +JAVA_BASE_OPTS="-XX:+UnlockExperimentalVMOptions -XX:MaxRAMPercentage=75 -XX:InitiatingHeapOccupancyPercent=20 -XX:+G1PeriodicGCInvokesConcurrent -XX:G1PeriodicGCInterval=10000 -XX:+UseStringDeduplication -XX:G1PeriodicGCSystemLoadThreshold=70" +JAVA_CUSTOM_OPTS="" + +# LibreOffice +PATH=/opt/.venv/bin:/usr/lib/libreoffice/program:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +UNO_PATH=/usr/lib/libreoffice/program +URE_BOOTSTRAP=file:///usr/lib/libreoffice/program/fundamentalrc +PYTHONPATH=/usr/lib/libreoffice/program:/opt/.venv/lib/python3.12/site-packages +LD_LIBRARY_PATH=/usr/lib/libreoffice/program + +STIRLING_TEMPFILES_DIRECTORY=/tmp/stirling-pdf +TMPDIR=/tmp/stirling-pdf +TEMP=/tmp/stirling-pdf +TMP=/tmp/stirling-pdf + +# Paths +PATH=/opt/.venv/bin:/usr/lib/libreoffice/program:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +EOF + +if [[ "$login_mode" == "true" ]]; then + cat <>/opt/Stirling-PDF/.env +# activate Login +DISABLE_ADDITIONAL_FEATURES=false +SECURITY_ENABLELOGIN=true + +# login credentials +SECURITY_INITIALLOGIN_USERNAME=admin +SECURITY_INITIALLOGIN_PASSWORD=stirling +EOF +fi +msg_ok "Created Environment Variables" + +msg_info "Refreshing Font Cache" +$STD fc-cache -fv +msg_ok "Font Cache Updated" msg_info "Creating Service" -# Create LibreOffice listener service cat </etc/systemd/system/libreoffice-listener.service [Unit] Description=LibreOffice Headless Listener Service @@ -109,14 +148,6 @@ Restart=always WantedBy=multi-user.target EOF -# Set up environment variables -cat </opt/Stirling-PDF/.env -PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/libreoffice/program -UNO_PATH=/usr/lib/libreoffice/program -PYTHONPATH=/usr/lib/python3/dist-packages:/usr/lib/libreoffice/program -LD_LIBRARY_PATH=/usr/lib/libreoffice/program -EOF - cat </etc/systemd/system/stirlingpdf.service [Unit] Description=Stirling-PDF service @@ -139,16 +170,32 @@ RestartSec=10 WantedBy=multi-user.target EOF -# Enable and start services +cat </etc/systemd/system/unoserver.service +[Unit] +Description=UnoServer RPC Interface +After=libreoffice-listener.service +Requires=libreoffice-listener.service + +[Service] +Type=simple +ExecStart=/usr/local/bin/unoserver --port 2003 --interface 127.0.0.1 +Restart=always +EnvironmentFile=/opt/Stirling-PDF/.env + +[Install] +WantedBy=multi-user.target +EOF + systemctl enable -q --now libreoffice-listener systemctl enable -q --now stirlingpdf +systemctl enable -q --now unoserver msg_ok "Created Service" motd_ssh customize msg_info "Cleaning up" -rm -rf v${RELEASE}.tar.gz /zulu-repo_1.0.0-3_all.deb +rm -f /tmp/jbig2enc.tar.gz $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 786c9178f91971cca243f44e0bc2ce36aaee07b0 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, 9 Jul 2025 16:43:58 +0100 Subject: [PATCH 188/229] Update CHANGELOG.md (#5885) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d3e2cc91..3fcedb8bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - tools.func: strip leading folders for prebuild assets [@MickLesk](https://github.com/MickLesk) ([#5865](https://github.com/community-scripts/ProxmoxVE/pull/5865)) + - #### 💥 Breaking Changes + + - Refactor: Stirling-PDF [@MickLesk](https://github.com/MickLesk) ([#5872](https://github.com/community-scripts/ProxmoxVE/pull/5872)) + - #### 🔧 Refactor - Refactor: Firefly [@tremor021](https://github.com/tremor021) ([#5844](https://github.com/community-scripts/ProxmoxVE/pull/5844)) From 64fac95a0311527653f33b54d5fe047da5dedfeb Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 19:00:33 +0200 Subject: [PATCH 189/229] FreshRSS: fix needed php modules (#5886) --- install/freshrss-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/freshrss-install.sh b/install/freshrss-install.sh index bd188b340..3b958c04c 100644 --- a/install/freshrss-install.sh +++ b/install/freshrss-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -PHP_VERSION="8.2" PHP_MODULE="dom,json,ctype,pgsql,gmp,iconv" PHP_APACHE="YES" setup_php +PHP_VERSION="8.2" PHP_MODULE="curl,xml,mbstring,intl,zip,pgsql,gmp" PHP_APACHE="YES" setup_php PG_VERSION="16" setup_postgresql msg_info "Setting up PostgreSQL" From 2e4c185ee1eb734dcaa78dfee13f75b53e5b0370 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, 9 Jul 2025 18:01:03 +0100 Subject: [PATCH 190/229] Update CHANGELOG.md (#5887) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fcedb8bc..b5cee93c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - FreshRSS: fix needed php modules [@MickLesk](https://github.com/MickLesk) ([#5886](https://github.com/community-scripts/ProxmoxVE/pull/5886)) - core: Fix VAAPI passthrough for unprivileged LXC containers via devX [@MickLesk](https://github.com/MickLesk) ([#5875](https://github.com/community-scripts/ProxmoxVE/pull/5875)) - tools.func: fix an bug while php libapache2-mod breaks [@MickLesk](https://github.com/MickLesk) ([#5857](https://github.com/community-scripts/ProxmoxVE/pull/5857)) - BabyBuddy: fix path issues for update [@MickLesk](https://github.com/MickLesk) ([#5856](https://github.com/community-scripts/ProxmoxVE/pull/5856)) From 4f08b4609b1e2a73c8d1ab9f2df91c0a33cb51b0 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 19:09:41 +0200 Subject: [PATCH 191/229] breaking fix docker --- install/docker-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/docker-install.sh b/install/docker-install.sh index 193a947d7..21b26abf7 100644 --- a/install/docker-install.sh +++ b/install/docker-install.sh @@ -62,7 +62,7 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then msg_info "Exposing Docker TCP socket" $STD mkdir -p /etc/docker $STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json - $STD rc-service docker restart + $STD systemctl restart docker msg_ok "Exposed Docker TCP socket at tcp://+:2375" fi From d596ced79378c1978753814c950d87c6d5921290 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 19:19:18 +0200 Subject: [PATCH 192/229] fix tcp issue docker --- install/docker-install.sh | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/install/docker-install.sh b/install/docker-install.sh index 21b26abf7..5156f4d36 100644 --- a/install/docker-install.sh +++ b/install/docker-install.sh @@ -57,15 +57,32 @@ else fi fi -read -r -p "${TAB3}Would you like to expose the Docker TCP socket? " prompt +read -r -p "${TAB3}Expose Docker TCP socket (⚠️ insecure)? " prompt if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Exposing Docker TCP socket" - $STD mkdir -p /etc/docker - $STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json - $STD systemctl restart docker - msg_ok "Exposed Docker TCP socket at tcp://+:2375" + msg_info "Enabling Docker TCP socket on port 2375 (insecure)" + + mkdir -p /etc/docker + echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json + + mkdir -p /etc/systemd/system/docker.service.d + cat < /etc/systemd/system/docker.service.d/override.conf +[Service] +ExecStart= +ExecStart=/usr/bin/dockerd +EOF + + $STD systemctl daemon-reexec + $STD systemctl daemon-reload + + if systemctl restart docker; then + msg_ok "Docker TCP socket now available on tcp://0.0.0.0:2375" + else + msg_error "Docker failed to restart. Check journalctl -xeu docker.service" + exit 1 + fi fi + motd_ssh customize From 043ca117327bd5868e2b0fd26cf180375bea4d8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Wed, 9 Jul 2025 21:19:49 +0200 Subject: [PATCH 193/229] Update baikal-install.sh (#5891) --- install/baikal-install.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/install/baikal-install.sh b/install/baikal-install.sh index c054bdd50..db88df7d3 100644 --- a/install/baikal-install.sh +++ b/install/baikal-install.sh @@ -13,12 +13,8 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y apache2 -msg_ok "Installed Dependencies" - PG_VERSION="16" setup_postgresql -PHP_APACHE="YES" PHP_MODULE="pgsql, dom" PHP_VERSION="8.2" setup_php +PHP_APACHE="YES" PHP_MODULE="pgsql" PHP_VERSION="8.2" setup_php fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal" msg_info "Setting up PostgreSQL Database" From cd98fddc05e61ea00e35e55893dbc5ad22415bbd 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, 9 Jul 2025 20:20:14 +0100 Subject: [PATCH 194/229] Update CHANGELOG.md (#5892) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5cee93c0..37f5b111b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,17 +31,17 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🔧 Refactor - - Refactor: Firefly [@tremor021](https://github.com/tremor021) ([#5844](https://github.com/community-scripts/ProxmoxVE/pull/5844)) - - Refactor: Ghost (use now MySQL) [@MickLesk](https://github.com/MickLesk) ([#5871](https://github.com/community-scripts/ProxmoxVE/pull/5871)) - - Refactor: Glance [@tremor021](https://github.com/tremor021) ([#5874](https://github.com/community-scripts/ProxmoxVE/pull/5874)) - - Refactor: Commafeed [@tremor021](https://github.com/tremor021) ([#5802](https://github.com/community-scripts/ProxmoxVE/pull/5802)) - - Refactor: FlareSolverr [@tremor021](https://github.com/tremor021) ([#5845](https://github.com/community-scripts/ProxmoxVE/pull/5845)) - - Refactor: Gitea [@tremor021](https://github.com/tremor021) ([#5876](https://github.com/community-scripts/ProxmoxVE/pull/5876)) - - Refactor: FreshRSS [@tremor021](https://github.com/tremor021) ([#5847](https://github.com/community-scripts/ProxmoxVE/pull/5847)) - - Refactor: Fluid-Calendar [@tremor021](https://github.com/tremor021) ([#5846](https://github.com/community-scripts/ProxmoxVE/pull/5846)) - Refactor: EMQX [@tremor021](https://github.com/tremor021) ([#5840](https://github.com/community-scripts/ProxmoxVE/pull/5840)) - Refactor: Excalidraw [@tremor021](https://github.com/tremor021) ([#5841](https://github.com/community-scripts/ProxmoxVE/pull/5841)) + - Refactor: Firefly [@tremor021](https://github.com/tremor021) ([#5844](https://github.com/community-scripts/ProxmoxVE/pull/5844)) - Refactor: gatus [@tremor021](https://github.com/tremor021) ([#5849](https://github.com/community-scripts/ProxmoxVE/pull/5849)) + - Refactor: FreshRSS [@tremor021](https://github.com/tremor021) ([#5847](https://github.com/community-scripts/ProxmoxVE/pull/5847)) + - Refactor: Fluid-Calendar [@tremor021](https://github.com/tremor021) ([#5846](https://github.com/community-scripts/ProxmoxVE/pull/5846)) + - Refactor: Commafeed [@tremor021](https://github.com/tremor021) ([#5802](https://github.com/community-scripts/ProxmoxVE/pull/5802)) + - Refactor: FlareSolverr [@tremor021](https://github.com/tremor021) ([#5845](https://github.com/community-scripts/ProxmoxVE/pull/5845)) + - Refactor: Glance [@tremor021](https://github.com/tremor021) ([#5874](https://github.com/community-scripts/ProxmoxVE/pull/5874)) + - Refactor: Gitea [@tremor021](https://github.com/tremor021) ([#5876](https://github.com/community-scripts/ProxmoxVE/pull/5876)) + - Refactor: Ghost (use now MySQL) [@MickLesk](https://github.com/MickLesk) ([#5871](https://github.com/community-scripts/ProxmoxVE/pull/5871)) ### 🧰 Maintenance From 787d749340cbf30b9eca031989f10346a02554aa Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 9 Jul 2025 21:58:33 +0200 Subject: [PATCH 195/229] omada fix (#5894) --- ct/omada.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ct/omada.sh b/ct/omada.sh index 10e37ba3f..643b10c5c 100644 --- a/ct/omada.sh +++ b/ct/omada.sh @@ -66,6 +66,7 @@ function update_script() { $STD dpkg -i "$OMADA_PKG" rm -f "$OMADA_PKG" msg_ok "Updated Omada Controller" + exit 0 } start From ce5b17e210fe5596d26136f1db1cc326e48eda0a 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, 9 Jul 2025 20:59:08 +0100 Subject: [PATCH 196/229] Update CHANGELOG.md (#5895) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37f5b111b..b2bb05a8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Omada Update: add missing exit [@MickLesk](https://github.com/MickLesk) ([#5894](https://github.com/community-scripts/ProxmoxVE/pull/5894)) - FreshRSS: fix needed php modules [@MickLesk](https://github.com/MickLesk) ([#5886](https://github.com/community-scripts/ProxmoxVE/pull/5886)) - core: Fix VAAPI passthrough for unprivileged LXC containers via devX [@MickLesk](https://github.com/MickLesk) ([#5875](https://github.com/community-scripts/ProxmoxVE/pull/5875)) - tools.func: fix an bug while php libapache2-mod breaks [@MickLesk](https://github.com/MickLesk) ([#5857](https://github.com/community-scripts/ProxmoxVE/pull/5857)) From 1c05a843bba6ec4853496af0f62eed7c8d5bd50f 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, 10 Jul 2025 02:15:25 +0200 Subject: [PATCH 197/229] Update versions.json (#5901) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 168 ++++++++++++++--------------- 1 file changed, 84 insertions(+), 84 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index c49b8c1c6..9654357e2 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,13 +1,88 @@ [ { - "name": "n8n-io/n8n", - "version": "n8n@1.102.0", - "date": "2025-07-07T15:32:29Z" + "name": "steveiliop56/tinyauth", + "version": "v3.6.0", + "date": "2025-07-09T23:15:25Z" + }, + { + "name": "pocket-id/pocket-id", + "version": "v1.6.2", + "date": "2025-07-09T22:14:10Z" + }, + { + "name": "NginxProxyManager/nginx-proxy-manager", + "version": "v2.12.6", + "date": "2025-07-09T21:52:15Z" + }, + { + "name": "apache/tika", + "version": "3.2.1", + "date": "2025-07-09T20:47:29Z" + }, + { + "name": "sabnzbd/sabnzbd", + "version": "4.5.2", + "date": "2025-07-09T19:08:28Z" + }, + { + "name": "raydak-labs/configarr", + "version": "v1.13.6", + "date": "2025-07-09T17:23:01Z" + }, + { + "name": "msgbyte/tianji", + "version": "v1.23.3", + "date": "2025-07-09T16:39:30Z" + }, + { + "name": "hargata/lubelog", + "version": "v1.4.9", + "date": "2025-07-09T16:27:46Z" + }, + { + "name": "duplicati/duplicati", + "version": "v2.1.0.123-2.1.0.123_canary_2025-07-09", + "date": "2025-07-09T16:08:36Z" + }, + { + "name": "keycloak/keycloak", + "version": "26.3.1", + "date": "2025-07-09T15:41:43Z" + }, + { + "name": "nicolargo/glances", + "version": "v4.3.3", + "date": "2025-07-09T15:35:44Z" }, { "name": "rclone/rclone", "version": "v1.70.3", - "date": "2025-07-09T10:02:39Z" + "date": "2025-07-09T15:06:31Z" + }, + { + "name": "home-assistant/operating-system", + "version": "16.0", + "date": "2025-07-09T13:28:43Z" + }, + { + "name": "element-hq/synapse", + "version": "v1.133.0", + "date": "2025-07-01T15:13:42Z" + }, + { + "name": "AdguardTeam/AdGuardHome", + "version": "v0.107.63", + "date": "2025-06-26T14:34:19Z" + }, + { + "name": "crowdsecurity/crowdsec", + "version": "v1.6.9", + "date": "2025-06-17T11:54:50Z" + }, + { + "name": "n8n-io/n8n", + "version": "n8n@1.102.0", + "date": "2025-07-07T15:32:29Z" }, { "name": "fuma-nama/fumadocs", @@ -34,21 +109,11 @@ "version": "4.9.1.2", "date": "2025-06-26T22:08:00Z" }, - { - "name": "NginxProxyManager/nginx-proxy-manager", - "version": "v2.14.5", - "date": "2025-07-09T04:41:02Z" - }, { "name": "henrygd/beszel", "version": "v0.11.1", "date": "2025-04-29T01:14:35Z" }, - { - "name": "steveiliop56/tinyauth", - "version": "v3.4.1", - "date": "2025-06-11T07:53:44Z" - }, { "name": "Prowlarr/Prowlarr", "version": "v1.37.0.5076", @@ -79,11 +144,6 @@ "version": "v1.0.2", "date": "2025-07-08T19:14:31Z" }, - { - "name": "keycloak/keycloak", - "version": "26.3.0", - "date": "2025-07-02T12:26:44Z" - }, { "name": "TwiN/gatus", "version": "v5.20.0", @@ -99,6 +159,11 @@ "version": "v1.6.2", "date": "2025-07-08T13:52:33Z" }, + { + "name": "wazuh/wazuh", + "version": "coverity-w28-4.13.0", + "date": "2025-07-08T11:25:24Z" + }, { "name": "mattermost/mattermost", "version": "preview-v0.1", @@ -124,16 +189,6 @@ "version": "r8.0.12-rc0", "date": "2025-07-07T23:35:35Z" }, - { - "name": "duplicati/duplicati", - "version": "v2.1.0.122-2.1.0.122_canary_2025-07-07", - "date": "2025-07-07T17:54:52Z" - }, - { - "name": "msgbyte/tianji", - "version": "v1.23.2", - "date": "2025-07-07T16:51:43Z" - }, { "name": "TandoorRecipes/recipes", "version": "1.5.35", @@ -204,11 +259,6 @@ "version": "v1.0.0-beta14", "date": "2025-07-06T21:07:07Z" }, - { - "name": "pocket-id/pocket-id", - "version": "v1.6.1", - "date": "2025-07-06T20:59:34Z" - }, { "name": "Luligu/matterbridge", "version": "3.1.2", @@ -254,11 +304,6 @@ "version": "v6.12.7", "date": "2025-06-18T03:44:24Z" }, - { - "name": "nicolargo/glances", - "version": "v4.3.2", - "date": "2025-07-05T16:00:15Z" - }, { "name": "runtipi/runtipi", "version": "v4.3.0", @@ -309,11 +354,6 @@ "version": "v0.85.0", "date": "2025-07-04T00:06:47Z" }, - { - "name": "home-assistant/operating-system", - "version": "15.2", - "date": "2025-04-14T15:37:12Z" - }, { "name": "cloudflare/cloudflared", "version": "2025.7.0", @@ -344,21 +384,11 @@ "version": "v1.12.2-rc.0", "date": "2025-07-03T00:31:22Z" }, - { - "name": "hargata/lubelog", - "version": "v1.4.8", - "date": "2025-07-02T21:15:13Z" - }, { "name": "Koenkk/zigbee2mqtt", "version": "2.5.1", "date": "2025-07-02T19:38:06Z" }, - { - "name": "wazuh/wazuh", - "version": "coverity-w27-4.13.0", - "date": "2025-07-01T03:17:32Z" - }, { "name": "glpi-project/glpi", "version": "10.0.18", @@ -404,11 +434,6 @@ "version": "v0.57.0", "date": "2025-07-01T16:47:46Z" }, - { - "name": "element-hq/synapse", - "version": "v1.133.0", - "date": "2025-07-01T15:13:42Z" - }, { "name": "zabbix/zabbix", "version": "7.4.0", @@ -469,11 +494,6 @@ "version": "version/2025.6.3", "date": "2025-06-27T14:01:06Z" }, - { - "name": "sabnzbd/sabnzbd", - "version": "4.5.1", - "date": "2025-04-11T09:57:47Z" - }, { "name": "FlowiseAI/Flowise", "version": "flowise@3.0.3", @@ -484,11 +504,6 @@ "version": "v4.3.3", "date": "2025-06-26T18:42:56Z" }, - { - "name": "apache/tika", - "version": "3.2.1-rc2", - "date": "2025-06-26T17:10:25Z" - }, { "name": "tailscale/tailscale", "version": "v1.84.3", @@ -499,11 +514,6 @@ "version": "v3.5.0-rc1", "date": "2025-06-26T15:08:43Z" }, - { - "name": "AdguardTeam/AdGuardHome", - "version": "v0.107.63", - "date": "2025-06-26T14:34:19Z" - }, { "name": "node-red/node-red", "version": "4.1.0-beta.2", @@ -664,11 +674,6 @@ "version": "v2.1.5", "date": "2025-06-17T18:04:11Z" }, - { - "name": "crowdsecurity/crowdsec", - "version": "v1.6.9", - "date": "2025-06-17T11:54:50Z" - }, { "name": "donaldzou/WGDashboard", "version": "v4.2.4", @@ -969,11 +974,6 @@ "version": "3.5.0", "date": "2025-05-05T16:28:24Z" }, - { - "name": "raydak-labs/configarr", - "version": "v1.13.5", - "date": "2025-05-03T09:48:44Z" - }, { "name": "WordPress/WordPress", "version": "6.8.1", From 5c6573152d4f3eb8581e752b5ede965a5e652ffa 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, 10 Jul 2025 01:16:04 +0100 Subject: [PATCH 198/229] Update CHANGELOG.md (#5902) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2bb05a8a..721b02987 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ > [!CAUTION] Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. +## 2025-07-10 + ## 2025-07-09 ### 🚀 Updated Scripts From ee182fe8676d674b6f992b0480d0b7cd4a4705dd 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, 10 Jul 2025 07:35:03 +0200 Subject: [PATCH 199/229] Fix planka (#5900) --- ct/planka.sh | 22 +++++++++++----------- install/planka-install.sh | 10 +++++----- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ct/planka.sh b/ct/planka.sh index b08b0ab1c..7c5e77787 100644 --- a/ct/planka.sh +++ b/ct/planka.sh @@ -40,20 +40,20 @@ function update_script() { mkdir -p /opt/planka-backup/user-avatars mkdir -p /opt/planka-backup/background-images mkdir -p /opt/planka-backup/attachments - mv /opt/planka/planka/.env /opt/planka-backup - [ -n "$(ls -A /opt/planka/planka/public/favicons 2>/dev/null)" ] && mv /opt/planka/planka/public/favicons/* /opt/planka-backup/favicons/ - [ -n "$(ls -A /opt/planka/planka/public/user-avatars 2>/dev/null)" ] && mv /opt/planka/planka/public/user-avatars/* /opt/planka-backup/user-avatars/ - [ -n "$(ls -A /opt/planka/planka/public/background-images 2>/dev/null)" ] && mv /opt/planka/planka/public/background-images/* /opt/planka-backup/background-images/ - [ -n "$(ls -A /opt/planka/planka/private/attachments 2>/dev/null)" ] && mv /opt/planka/planka/private/attachments/* /opt/planka-backup/attachments/ + mv /opt/planka/.env /opt/planka-backup + [ -n "$(ls -A /opt/planka/public/favicons 2>/dev/null)" ] && mv /opt/planka/public/favicons/* /opt/planka-backup/favicons/ + [ -n "$(ls -A /opt/planka/public/user-avatars 2>/dev/null)" ] && mv /opt/planka/public/user-avatars/* /opt/planka-backup/user-avatars/ + [ -n "$(ls -A /opt/planka/public/background-images 2>/dev/null)" ] && mv /opt/planka/public/background-images/* /opt/planka-backup/background-images/ + [ -n "$(ls -A /opt/planka/private/attachments 2>/dev/null)" ] && mv /opt/planka/private/attachments/* /opt/planka-backup/attachments/ rm -rf /opt/planka fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip" - cd /opt/planka/planka + cd /opt/planka $STD npm install - mv /opt/planka-backup/.env /opt/planka/planka/ - [ -n "$(ls -A /opt/planka-backup/favicons 2>/dev/null)" ] && mv /opt/planka-backup/favicons/* /opt/planka/planka/public/favicons/ - [ -n "$(ls -A /opt/planka-backup/user-avatars 2>/dev/null)" ] && mv /opt/planka-backup/user-avatars/* /opt/planka/planka/public/user-avatars/ - [ -n "$(ls -A /opt/planka-backup/background-images 2>/dev/null)" ] && mv /opt/planka-backup/background-images/* /opt/planka/planka/public/background-images/ - [ -n "$(ls -A /opt/planka-backup/attachments 2>/dev/null)" ] && mv /opt/planka-backup/attachments/* /opt/planka/planka/private/attachments/ + mv /opt/planka-backup/.env /opt/planka/ + [ -n "$(ls -A /opt/planka-backup/favicons 2>/dev/null)" ] && mv /opt/planka-backup/favicons/* /opt/planka/public/favicons/ + [ -n "$(ls -A /opt/planka-backup/user-avatars 2>/dev/null)" ] && mv /opt/planka-backup/user-avatars/* /opt/planka/public/user-avatars/ + [ -n "$(ls -A /opt/planka-backup/background-images 2>/dev/null)" ] && mv /opt/planka-backup/background-images/* /opt/planka/public/background-images/ + [ -n "$(ls -A /opt/planka-backup/attachments 2>/dev/null)" ] && mv /opt/planka-backup/attachments/* /opt/planka/private/attachments/ msg_ok "Updated $APP to ${RELEASE}" msg_info "Starting $APP" diff --git a/install/planka-install.sh b/install/planka-install.sh index 03f8b984e..81bc9c0e5 100644 --- a/install/planka-install.sh +++ b/install/planka-install.sh @@ -45,12 +45,12 @@ fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/o msg_info "Configuring PLANKA" LOCAL_IP=$(hostname -I | awk '{print $1}') SECRET_KEY=$(openssl rand -hex 64) -cd /opt/planka/planka +cd /opt/planka $STD npm install cp .env.sample .env -sed -i "s#http://localhost:1337#http://$LOCAL_IP:1337#g" /opt/planka/planka/.env -sed -i "s#postgres@localhost#planka:$DB_PASS@localhost#g" /opt/planka/planka/.env -sed -i "s#notsecretkey#$SECRET_KEY#g" /opt/planka/planka/.env +sed -i "s#http://localhost:1337#http://$LOCAL_IP:1337#g" /opt/planka/.env +sed -i "s#postgres@localhost#planka:$DB_PASS@localhost#g" /opt/planka/.env +sed -i "s#notsecretkey#$SECRET_KEY#g" /opt/planka/.env $STD npm run db:init msg_ok "Configured PLANKA" @@ -84,7 +84,7 @@ Description=planka Service After=network.target [Service] -WorkingDirectory=/opt/planka/planka +WorkingDirectory=/opt/planka ExecStart=/usr/bin/npm start --prod Restart=always From 12b9e163bcc716964b01d81adaea7d1e25da708d 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, 10 Jul 2025 06:35:30 +0100 Subject: [PATCH 200/229] Update CHANGELOG.md (#5905) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 721b02987..e16600309 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2025-07-10 +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - PLANKA: Fix paths to application directory [@tremor021](https://github.com/tremor021) ([#5900](https://github.com/community-scripts/ProxmoxVE/pull/5900)) + ## 2025-07-09 ### 🚀 Updated Scripts From bb00b9f545d749261fdedfac42daa86ccaa887ea Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 10 Jul 2025 11:17:01 +0200 Subject: [PATCH 201/229] core: fix breaking redownload for lxc containers (#5906) --- misc/create_lxc.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/misc/create_lxc.sh b/misc/create_lxc.sh index 1e18fc13f..52c43cdd7 100644 --- a/misc/create_lxc.sh +++ b/misc/create_lxc.sh @@ -253,7 +253,7 @@ fi TEMPLATE_SEARCH="${PCT_OSTYPE}-${PCT_OSVERSION:-}" msg_info "Updating LXC Template List" -if ! timeout 15 pveam update >/dev/null 2>&1; then +if ! pveam update >/dev/null 2>&1; then TEMPLATE_FALLBACK=$(pveam list "$TEMPLATE_STORAGE" | awk "/$TEMPLATE_SEARCH/ {print \$2}" | sort -t - -k 2 -V | tail -n1) if [[ -z "$TEMPLATE_FALLBACK" ]]; then msg_error "Failed to update LXC template list and no local template matching '$TEMPLATE_SEARCH' found." @@ -284,7 +284,7 @@ if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE" || ! zstdcat "$TEMPLAT for attempt in {1..3}; do msg_info "Attempt $attempt: Downloading LXC template..." - if timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null 2>&1; then + if pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null 2>&1; then msg_ok "Template download successful." break fi From 3140438b2f2e17dbf4e7f8f449bd31ef47fc2f76 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, 10 Jul 2025 10:17:31 +0100 Subject: [PATCH 202/229] Update CHANGELOG.md (#5908) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e16600309..d5920d575 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - core: fix breaking re-download of lxc containers [@MickLesk](https://github.com/MickLesk) ([#5906](https://github.com/community-scripts/ProxmoxVE/pull/5906)) - PLANKA: Fix paths to application directory [@tremor021](https://github.com/tremor021) ([#5900](https://github.com/community-scripts/ProxmoxVE/pull/5900)) ## 2025-07-09 From 90b6712453564655d3fbc6401b9226b9ec3ecd5b Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 10 Jul 2025 13:58:20 +0200 Subject: [PATCH 203/229] Refactor: EMQX + Update-Function + Improved NodeJS Crawling (#5907) --- ct/emqx.sh | 47 ++++++++++++++++++++++++---------- frontend/public/json/emqx.json | 2 +- install/emqx-install.sh | 30 +++++++++++++++++----- misc/tools.func | 18 ++++++++++++- 4 files changed, 75 insertions(+), 22 deletions(-) diff --git a/ct/emqx.sh b/ct/emqx.sh index c1d83f546..3df25efed 100644 --- a/ct/emqx.sh +++ b/ct/emqx.sh @@ -20,18 +20,39 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /var ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating $APP LXC" - $STD apt-get update - $STD apt-get -y upgrade - msg_ok "Updated $APP LXC" - exit + header_info + check_container_storage + check_container_resources + + RELEASE=$(curl -fsSL https://www.emqx.com/en/downloads/enterprise | grep -oP '/en/downloads/enterprise/v\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n1) + if [[ "$RELEASE" != "$(cat ~/.emqx 2>/dev/null)" ]] || [[ ! -f ~/.emqx ]]; then + msg_info "Stopping EMQX" + systemctl stop emqx + msg_ok "Stopped EMQX" + + msg_info "Downloading EMQX v${RELEASE}" + DEB_FILE="/tmp/emqx-enterprise-${RELEASE}-debian12-amd64.deb" + curl -fsSL -o "$DEB_FILE" "https://www.emqx.com/en/downloads/enterprise/v${RELEASE}/emqx-enterprise-${RELEASE}-debian12-amd64.deb" + msg_ok "Downloaded EMQX" + + msg_info "Installing EMQX" + $STD apt-get install -y "$DEB_FILE" + msg_ok "Installed EMQX v${RELEASE}" + + msg_info "Starting EMQX" + systemctl start emqx + echo "$RELEASE" >~/.emqx + msg_ok "Started EMQX" + + msg_info "Cleaning Up" + rm -f "$DEB_FILE" + msg_ok "Cleanup Completed" + msg_ok "Update Successful" + else + msg_ok "No update required. EMQX is already at v${RELEASE}" + fi + + exit } start @@ -41,4 +62,4 @@ 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}:18083${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:18083${CL}" diff --git a/frontend/public/json/emqx.json b/frontend/public/json/emqx.json index f53e5155d..7e57d45cc 100644 --- a/frontend/public/json/emqx.json +++ b/frontend/public/json/emqx.json @@ -6,7 +6,7 @@ ], "date_created": "2024-05-02", "type": "ct", - "updateable": false, + "updateable": true, "privileged": false, "interface_port": 18083, "documentation": "https://docs.emqx.com/en/emqx/latest/", diff --git a/install/emqx-install.sh b/install/emqx-install.sh index 9659806f5..3592add7d 100644 --- a/install/emqx-install.sh +++ b/install/emqx-install.sh @@ -14,22 +14,38 @@ network_check update_os msg_info "Installing dependencies" -$STD apt-get install -y \ - apt-transport-https \ - ca-certificates \ - lsb-release +$STD apt-get install -y ca-certificates msg_ok "Installed dependencies" +msg_info "Fetching latest EMQX Enterprise version" +LATEST_VERSION=$(curl -fsSL https://www.emqx.com/en/downloads/enterprise | grep -oP '/en/downloads/enterprise/v\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n1) +if [[ -z "$LATEST_VERSION" ]]; then + msg_error "Failed to determine latest EMQX version" + exit 1 +fi +msg_ok "Latest version: v$LATEST_VERSION" + +DOWNLOAD_URL="https://www.emqx.com/en/downloads/enterprise/v$LATEST_VERSION/emqx-enterprise-${LATEST_VERSION}-debian12-amd64.deb" +DEB_FILE="/tmp/emqx-enterprise-${LATEST_VERSION}-debian12-amd64.deb" + +msg_info "Downloading EMQX v$LATEST_VERSION" +$STD curl -fsSL -o "$DEB_FILE" "$DOWNLOAD_URL" +msg_ok "Downloaded EMQX" + msg_info "Installing EMQX" -curl -fsSL https://packagecloud.io/emqx/emqx/gpgkey | gpg --dearmor -o /usr/share/keyrings/emqx-archive-keyring.gpg -echo "deb [arch=amd64 signed-by=/usr/share/keyrings/emqx-archive-keyring.gpg] https://packagecloud.io/emqx/emqx/debian/ bookworm main" >/etc/apt/sources.list.d/emqx.list -$STD apt-get install -y emqx +$STD apt-get install -y "$DEB_FILE" +echo "$LATEST_VERSION" >~/.emqx msg_ok "Installed EMQX" +msg_info "Starting EMQX service" +$STD systemctl enable -q --now emqx +msg_ok "Enabled EMQX service" + motd_ssh customize msg_info "Cleaning up" +rm -f "$DEB_FILE" $STD apt-get autoremove $STD apt-get autoclean msg_ok "Cleaned" diff --git a/misc/tools.func b/misc/tools.func index a98c802f6..5210b9519 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -54,8 +54,24 @@ function setup_nodejs() { echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_VERSION}.x nodistro main" \ >/etc/apt/sources.list.d/nodesource.list + sleep 2 if ! apt-get update >/dev/null 2>&1; then - msg_error "Failed to update APT repositories after adding NodeSource" + msg_warn "APT update failed – retrying in 5s" + sleep 5 + if ! apt-get update >/dev/null 2>&1; then + msg_error "Failed to update APT repositories after adding NodeSource" + exit 1 + fi + fi + + if ! apt-cache policy nodejs | grep -q 'Candidate:'; then + msg_error "Node.js package not found – repository might be broken or too fresh" + apt-cache policy nodejs >&2 + exit 1 + fi + + if ! apt-get install -y nodejs >/dev/null 2>&1; then + msg_error "Failed to install Node.js ${NODE_VERSION} from NodeSource" exit 1 fi From d30c0718da11e318dd110700c0843a97f5438de6 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, 10 Jul 2025 12:59:02 +0100 Subject: [PATCH 204/229] Update CHANGELOG.md (#5913) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5920d575..f4b638227 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - core: fix breaking re-download of lxc containers [@MickLesk](https://github.com/MickLesk) ([#5906](https://github.com/community-scripts/ProxmoxVE/pull/5906)) - PLANKA: Fix paths to application directory [@tremor021](https://github.com/tremor021) ([#5900](https://github.com/community-scripts/ProxmoxVE/pull/5900)) + - #### 🔧 Refactor + + - Refactor: EMQX + Update-Function + Improved NodeJS Crawling [@MickLesk](https://github.com/MickLesk) ([#5907](https://github.com/community-scripts/ProxmoxVE/pull/5907)) + ## 2025-07-09 ### 🚀 Updated Scripts From edb8ee5980d19157e8333db591896ef6a042dabc Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 10 Jul 2025 14:00:04 +0200 Subject: [PATCH 205/229] Refactor: Habitica (#5911) --- ct/habitica.sh | 95 +++++++++++++++++------------- frontend/public/json/habitica.json | 2 +- install/habitica-install.sh | 13 ++-- 3 files changed, 60 insertions(+), 50 deletions(-) diff --git a/ct/habitica.sh b/ct/habitica.sh index 5c1f29289..75c64648c 100644 --- a/ct/habitica.sh +++ b/ct/habitica.sh @@ -20,48 +20,61 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources + header_info + check_container_storage + check_container_resources - if [[ ! -d "/opt/habitica" ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -fsSL https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then - msg_info "Stopping $APP" - systemctl stop habitica-mongodb - systemctl stop habitica - systemctl stop habitica-client - msg_ok "Stopped $APP" - - msg_info "Updating $APP to ${RELEASE}" - temp_file=$(mktemp) -curl -fsSL "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" - tar zxf $temp_file - cp -rf habitica-${RELEASE}/* /opt/habitica - cd /opt/habitica - $STD npm i - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated $APP to ${RELEASE}" - - msg_info "Starting $APP" - systemctl start habitica-mongodb - systemctl start habitica - systemctl start habitica-client - msg_ok "Started $APP" - - msg_info "Cleaning Up" - rm -f $temp_file - rm -rf ~/habitica-${RELEASE} - msg_ok "Cleanup Completed" - - msg_ok "Update Successful" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi + if [[ ! -d "/opt/habitica" ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha" setup_nodejs + RELEASE=$(curl -fsSL https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [[ "${RELEASE}" != "$(cat ~/.habitica 2>/dev/null)" ]] || [[ ! -f ~/.habitica ]]; then + + msg_info "Stopping $APP" + systemctl stop habitica-mongodb + systemctl stop habitica + systemctl stop habitica-client + msg_ok "Stopped $APP" + + msg_info "Save configuration" + if [[ -f /opt/habitica/config.json ]]; then + cp /opt/habitica/config.json ~/config.json + msg_ok "Saved configuration" + else + msg_warn "No configuration file found, skipping save" + fi + + fetch_and_deploy_gh_release "habitica" "HabitRPG/habitica" "tarball" "latest" "/opt/habitica" + + msg_info "Updating $APP to ${RELEASE}" + cd /opt/habitica + $STD npm i + $STD npm run postinstall + $STD npm run client:build + $STD gulp build:prod + msg_ok "Updated $APP to ${RELEASE}" + + msg_info "Restoring configuration" + if [[ -f ~/config.json ]]; then + cp ~/config.json /opt/habitica/config.json + msg_ok "Restored configuration" + else + msg_warn "No configuration file found to restore" + fi + + msg_info "Starting $APP" + systemctl start habitica-mongodb + systemctl start habitica + systemctl start habitica-client + msg_ok "Started $APP" + + msg_ok "Update Successful" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi + exit } start @@ -71,4 +84,4 @@ description msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/frontend/public/json/habitica.json b/frontend/public/json/habitica.json index f4305ff51..76690b9dc 100644 --- a/frontend/public/json/habitica.json +++ b/frontend/public/json/habitica.json @@ -8,7 +8,7 @@ "type": "ct", "updateable": true, "privileged": false, - "interface_port": 8080, + "interface_port": 3000, "documentation": "https://github.com/HabitRPG/habitica/wiki", "website": "https://habitica.com/", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/habitica.webp", diff --git a/install/habitica-install.sh b/install/habitica-install.sh index 17443d621..d1915be03 100644 --- a/install/habitica-install.sh +++ b/install/habitica-install.sh @@ -22,18 +22,16 @@ curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1 $STD dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb msg_ok "Installed Dependencies" -NODE_VERSION="20" setup_nodejs +NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha" setup_nodejs +fetch_and_deploy_gh_release "habitica" "HabitRPG/habitica" "tarball" "latest" "/opt/habitica" msg_info "Setup ${APPLICATION}" -temp_file=$(mktemp) -RELEASE=$(curl -fsSL https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" -tar zxf $temp_file -mv habitica-${RELEASE}/ /opt/habitica cd /opt/habitica $STD npm i +$STD npm run postinstall +$STD npm run client:build +$STD gulp build:prod cp config.json.example config.json -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt msg_ok "Setup ${APPLICATION}" msg_info "Creating Service" @@ -91,7 +89,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -f $temp_file $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From b865be5e45ef8714a776ba317c396080585d9091 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, 10 Jul 2025 13:00:20 +0100 Subject: [PATCH 206/229] Update CHANGELOG.md (#5914) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4b638227..5dd18c59c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts + - Refactor: Habitica [@MickLesk](https://github.com/MickLesk) ([#5911](https://github.com/community-scripts/ProxmoxVE/pull/5911)) + - #### 🐞 Bug Fixes - core: fix breaking re-download of lxc containers [@MickLesk](https://github.com/MickLesk) ([#5906](https://github.com/community-scripts/ProxmoxVE/pull/5906)) From 1a66ca2683c208528757bc11d785ae27a64fe15e 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, 10 Jul 2025 13:01:54 +0100 Subject: [PATCH 207/229] Update CHANGELOG.md (#5915) Co-authored-by: github-actions[bot] From 66d2f96b16901a62781b397a9d8ebb86e3b1b9c8 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, 10 Jul 2025 14:08:52 +0200 Subject: [PATCH 208/229] Update versions.json (#5916) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 40 +++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 9654357e2..40a7d3685 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,24 @@ [ + { + "name": "meilisearch/meilisearch", + "version": "prototype-incremental-vector-store-3", + "date": "2025-07-07T10:27:19Z" + }, + { + "name": "mattermost/mattermost", + "version": "preview-v0.1", + "date": "2025-06-27T14:35:47Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.2140", + "date": "2025-07-10T05:54:59Z" + }, + { + "name": "firefly-iii/firefly-iii", + "version": "v6.2.20", + "date": "2025-07-02T04:03:37Z" + }, { "name": "steveiliop56/tinyauth", "version": "v3.6.0", @@ -99,11 +119,6 @@ "version": "2025.6.3", "date": "2025-07-03T01:07:26Z" }, - { - "name": "Jackett/Jackett", - "version": "v0.22.2135", - "date": "2025-07-09T05:58:50Z" - }, { "name": "MediaBrowser/Emby.Releases", "version": "4.9.1.2", @@ -164,11 +179,6 @@ "version": "coverity-w28-4.13.0", "date": "2025-07-08T11:25:24Z" }, - { - "name": "mattermost/mattermost", - "version": "preview-v0.1", - "date": "2025-06-27T14:35:47Z" - }, { "name": "docker/compose", "version": "v2.38.2", @@ -214,11 +224,6 @@ "version": "v25.05.2", "date": "2025-07-07T14:08:25Z" }, - { - "name": "meilisearch/meilisearch", - "version": "prototype-incremental-vector-store-3", - "date": "2025-07-07T10:27:19Z" - }, { "name": "Paymenter/Paymenter", "version": "v1.2.1", @@ -239,11 +244,6 @@ "version": "v1.5.2", "date": "2025-05-11T16:40:55Z" }, - { - "name": "firefly-iii/firefly-iii", - "version": "v6.2.20", - "date": "2025-07-02T04:03:37Z" - }, { "name": "slskd/slskd", "version": "0.23.1", From b9ac02e74f23863e5d3fbddc8749a51207f826ae Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 10 Jul 2025 14:39:33 +0200 Subject: [PATCH 209/229] Update tools.func --- misc/tools.func | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index 5210b9519..b3e078bb6 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -64,17 +64,6 @@ function setup_nodejs() { fi fi - if ! apt-cache policy nodejs | grep -q 'Candidate:'; then - msg_error "Node.js package not found – repository might be broken or too fresh" - apt-cache policy nodejs >&2 - exit 1 - fi - - if ! apt-get install -y nodejs >/dev/null 2>&1; then - msg_error "Failed to install Node.js ${NODE_VERSION} from NodeSource" - exit 1 - fi - if ! apt-get install -y nodejs >/dev/null 2>&1; then msg_error "Failed to install Node.js ${NODE_VERSION} from NodeSource" exit 1 From 295b419fbc17f3cbe3c3250a53252a008f820718 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, 11 Jul 2025 02:15:34 +0200 Subject: [PATCH 210/229] Update versions.json (#5922) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 100 ++++++++++++++--------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 40a7d3685..27308ba02 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,54 @@ [ + { + "name": "jenkinsci/jenkins", + "version": "jenkins-2.518", + "date": "2025-07-08T13:52:55Z" + }, + { + "name": "rcourtman/Pulse", + "version": "v3.41.1", + "date": "2025-07-10T17:10:46Z" + }, + { + "name": "LibreTranslate/LibreTranslate", + "version": "v1.7.2", + "date": "2025-07-10T19:29:26Z" + }, + { + "name": "binwiederhier/ntfy", + "version": "v2.13.0", + "date": "2025-07-10T19:27:54Z" + }, + { + "name": "ollama/ollama", + "version": "v0.9.6", + "date": "2025-07-08T01:26:29Z" + }, + { + "name": "msgbyte/tianji", + "version": "v1.23.4", + "date": "2025-07-10T18:13:38Z" + }, + { + "name": "mongodb/mongo", + "version": "r6.0.25", + "date": "2025-07-10T16:59:44Z" + }, + { + "name": "forgejo/forgejo", + "version": "v11.0.3", + "date": "2025-07-10T13:12:00Z" + }, + { + "name": "crowdsecurity/crowdsec", + "version": "v1.6.10", + "date": "2025-07-10T12:04:30Z" + }, + { + "name": "neo4j/neo4j", + "version": "5.26.9", + "date": "2025-07-10T10:04:29Z" + }, { "name": "meilisearch/meilisearch", "version": "prototype-incremental-vector-store-3", @@ -49,11 +99,6 @@ "version": "v1.13.6", "date": "2025-07-09T17:23:01Z" }, - { - "name": "msgbyte/tianji", - "version": "v1.23.3", - "date": "2025-07-09T16:39:30Z" - }, { "name": "hargata/lubelog", "version": "v1.4.9", @@ -94,11 +139,6 @@ "version": "v0.107.63", "date": "2025-06-26T14:34:19Z" }, - { - "name": "crowdsecurity/crowdsec", - "version": "v1.6.9", - "date": "2025-06-17T11:54:50Z" - }, { "name": "n8n-io/n8n", "version": "n8n@1.102.0", @@ -144,11 +184,6 @@ "version": "v0.35.0", "date": "2025-05-21T18:00:32Z" }, - { - "name": "rcourtman/Pulse", - "version": "v3.40.1", - "date": "2025-07-08T21:06:54Z" - }, { "name": "grokability/snipe-it", "version": "v8.1.18", @@ -164,11 +199,6 @@ "version": "v5.20.0", "date": "2025-07-08T16:27:11Z" }, - { - "name": "jenkinsci/jenkins", - "version": "jenkins-2.518", - "date": "2025-07-08T13:52:55Z" - }, { "name": "bunkerity/bunkerweb", "version": "v1.6.2", @@ -189,16 +219,6 @@ "version": "v2.4.0p7", "date": "2025-07-08T05:51:08Z" }, - { - "name": "ollama/ollama", - "version": "v0.9.6", - "date": "2025-07-08T01:26:29Z" - }, - { - "name": "mongodb/mongo", - "version": "r8.0.12-rc0", - "date": "2025-07-07T23:35:35Z" - }, { "name": "TandoorRecipes/recipes", "version": "1.5.35", @@ -619,11 +639,6 @@ "version": "v0.21.0", "date": "2025-06-19T11:54:59Z" }, - { - "name": "neo4j/neo4j", - "version": "2025.05.1", - "date": "2025-06-19T11:28:36Z" - }, { "name": "prometheus-pve/prometheus-pve-exporter", "version": "v3.5.5", @@ -654,11 +669,6 @@ "version": "v5.6.0", "date": "2025-06-18T12:19:54Z" }, - { - "name": "forgejo/forgejo", - "version": "v11.0.2", - "date": "2025-06-18T09:38:19Z" - }, { "name": "silverbulletmd/silverbullet", "version": "2.0.0-pre3", @@ -849,11 +859,6 @@ "version": "v0.14.1", "date": "2024-08-29T22:32:51Z" }, - { - "name": "binwiederhier/ntfy", - "version": "v2.12.0", - "date": "2025-05-30T00:26:27Z" - }, { "name": "release-argus/Argus", "version": "0.26.3", @@ -1099,11 +1104,6 @@ "version": "v1.34.0", "date": "2025-03-26T08:48:34Z" }, - { - "name": "LibreTranslate/LibreTranslate", - "version": "v1.6.5", - "date": "2025-03-25T20:27:29Z" - }, { "name": "nextcloud/nextcloudpi", "version": "v1.55.4", From 6fcca2bfdbebee43c86752364b87942fffb92275 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, 11 Jul 2025 01:16:20 +0100 Subject: [PATCH 211/229] Update CHANGELOG.md (#5923) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dd18c59c..50e03c12d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ > [!CAUTION] Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. +## 2025-07-11 + ## 2025-07-10 ### 🚀 Updated Scripts From 8595d48cec579daf9c378c8d6c01821c3e7bfbaf Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 11 Jul 2025 02:35:45 -0400 Subject: [PATCH 212/229] Immich: handle custom library dependency updates; other fixes (#5896) - Adds libaom-dev to the installer; checks for it and installs during update - Refactor immich.sh to simplify custom library recompilations into functions - Move installation of packages from Testing repo before Postgresql install to avoid DB collation issue --- ct/immich.sh | 271 ++++++++++++++++++++------------------ install/immich-install.sh | 41 +++--- 2 files changed, 162 insertions(+), 150 deletions(-) diff --git a/ct/immich.sh b/ct/immich.sh index 92a843909..d5cd2d89c 100644 --- a/ct/immich.sh +++ b/ct/immich.sh @@ -51,134 +51,12 @@ function update_script() { fi if [[ -f ~/.immich_library_revisions ]]; then libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips") - readarray -d '' NEW_REVISIONS < <(for library in "${libraries[@]}"; do - echo "$library: $(curl -fsSL https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/sources/"$library".json | jq -cr '.revision' -)" - done) - UPDATED_REVISIONS="$(comm -13 <(sort ~/.immich_library_revisions) <(echo -n "${NEW_REVISIONS[@]}" | sort))" - if [[ "$UPDATED_REVISIONS" ]]; then - readarray -t NAMES < <(echo "$UPDATED_REVISIONS" | awk -F ':' '{print $1}') - rm -rf "$SOURCE_DIR" - mkdir -p "$SOURCE_DIR" - cd "$BASE_DIR" - $STD git pull - cd "$STAGING_DIR" - for name in "${NAMES[@]}"; do - if [[ "$name" == "libjxl" ]]; then - msg_info "Recompiling libjxl" - SOURCE=${SOURCE_DIR}/libjxl - JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62" - JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0" - : "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}" - $STD git clone https://github.com/libjxl/libjxl.git "$SOURCE" - cd "$SOURCE" - $STD git reset --hard "$LIBJXL_REVISION" - $STD git submodule update --init --recursive --depth 1 --recommend-shallow - $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch - $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch - mkdir build - cd build - $STD cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_TESTING=OFF \ - -DJPEGXL_ENABLE_DOXYGEN=OFF \ - -DJPEGXL_ENABLE_MANPAGES=OFF \ - -DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \ - -DJPEGXL_ENABLE_BENCHMARK=OFF \ - -DJPEGXL_ENABLE_EXAMPLES=OFF \ - -DJPEGXL_FORCE_SYSTEM_BROTLI=ON \ - -DJPEGXL_FORCE_SYSTEM_HWY=ON \ - -DJPEGXL_ENABLE_JPEGLI=ON \ - -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \ - -DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \ - -DJPEGXL_ENABLE_PLUGINS=ON \ - -DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \ - -DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \ - -DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \ - .. - $STD cmake --build . -- -j"$(nproc)" - $STD cmake --install . - ldconfig /usr/local/lib - $STD make clean - cd "$STAGING_DIR" - rm -rf "$SOURCE"/{build,third_party} - msg_ok "Recompiled libjxl" - fi - if [[ "$name" == "libheif" ]]; then - msg_info "Recompiling libheif" - SOURCE=${SOURCE_DIR}/libheif - : "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}" - $STD git clone https://github.com/strukturag/libheif.git "$SOURCE" - cd "$SOURCE" - $STD git reset --hard "$LIBHEIF_REVISION" - mkdir build - cd build - $STD cmake --preset=release-noplugins \ - -DWITH_DAV1D=ON \ - -DENABLE_PARALLEL_TILE_DECODING=ON \ - -DWITH_LIBSHARPYUV=ON \ - -DWITH_LIBDE265=ON \ - -DWITH_AOM_DECODER=OFF \ - -DWITH_AOM_ENCODER=OFF \ - -DWITH_X265=OFF \ - -DWITH_EXAMPLES=OFF \ - .. - $STD make install -j "$(nproc)" - ldconfig /usr/local/lib - $STD make clean - cd "$STAGING_DIR" - rm -rf "$SOURCE"/build - msg_ok "Recompiled libheif" - fi - if [[ "$name" == "libraw" ]]; then - msg_info "Recompiling libraw" - SOURCE=${SOURCE_DIR}/libraw - : "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}" - $STD git clone https://github.com/libraw/libraw.git "$SOURCE" - cd "$SOURCE" - $STD git reset --hard "$LIBRAW_REVISION" - $STD autoreconf --install - $STD ./configure - $STD make -j"$(nproc)" - $STD make install - ldconfig /usr/local/lib - $STD make clean - cd "$STAGING_DIR" - msg_ok "Recompiled libraw" - fi - if [[ "$name" == "imagemagick" ]]; then - msg_info "Recompiling ImageMagick" - SOURCE=$SOURCE_DIR/imagemagick - : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}" - $STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE" - cd "$SOURCE" - $STD git reset --hard "$IMAGEMAGICK_REVISION" - $STD ./configure --with-modules - $STD make -j"$(nproc)" - $STD make install - ldconfig /usr/local/lib - $STD make clean - cd "$STAGING_DIR" - msg_ok "Recompiled ImageMagick" - fi - if [[ "$name" == "libvips" ]]; then - msg_info "Recompiling libvips" - SOURCE=$SOURCE_DIR/libvips - : "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}" - $STD git clone https://github.com/libvips/libvips.git "$SOURCE" - cd "$SOURCE" - $STD git reset --hard "$LIBVIPS_REVISION" - $STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled - cd build - $STD ninja install - ldconfig /usr/local/lib - cd "$STAGING_DIR" - rm -rf "$SOURCE"/build - msg_ok "Recompiled libvips" - fi - done - echo -n "${NEW_REVISIONS[@]}" >~/.immich_library_revisions - msg_ok "Image-processing libraries compiled" - fi + cd "$BASE_DIR" + $STD git pull + for library in "${libraries[@]}"; do + compile_"$library" + done + msg_ok "Image-processing libraries updated" fi RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then @@ -293,6 +171,143 @@ function update_script() { exit } +function compile_libjxl() { + SOURCE=${SOURCE_DIR}/libjxl + JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62" + JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0" + : "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}" + if [[ "${update:-}" ]] || [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then + msg_info "Recompiling libjxl" + if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi + $STD git clone https://github.com/libjxl/libjxl.git "$SOURCE" + cd "$SOURCE" + $STD git reset --hard "$LIBJXL_REVISION" + $STD git submodule update --init --recursive --depth 1 --recommend-shallow + $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch + $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch + mkdir build + cd build + $STD cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_TESTING=OFF \ + -DJPEGXL_ENABLE_DOXYGEN=OFF \ + -DJPEGXL_ENABLE_MANPAGES=OFF \ + -DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \ + -DJPEGXL_ENABLE_BENCHMARK=OFF \ + -DJPEGXL_ENABLE_EXAMPLES=OFF \ + -DJPEGXL_FORCE_SYSTEM_BROTLI=ON \ + -DJPEGXL_FORCE_SYSTEM_HWY=ON \ + -DJPEGXL_ENABLE_JPEGLI=ON \ + -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \ + -DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \ + -DJPEGXL_ENABLE_PLUGINS=ON \ + -DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \ + -DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \ + -DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \ + .. + $STD cmake --build . -- -j"$(nproc)" + $STD cmake --install . + ldconfig /usr/local/lib + $STD make clean + cd "$STAGING_DIR" + rm -rf "$SOURCE"/{build,third_party} + msg_ok "Recompiled libjxl" + fi +} + +function compile_libheif() { + SOURCE=${SOURCE_DIR}/libheif + if ! dpkg -l | grep -q libaom; then + $STD apt-get install -y libaom-dev + local update="required" + fi + : "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}" + if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then + msg_info "Recompiling libheif" + if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi + $STD git clone https://github.com/strukturag/libheif.git "$SOURCE" + cd "$SOURCE" + $STD git reset --hard "$LIBHEIF_REVISION" + mkdir build + cd build + $STD cmake --preset=release-noplugins \ + -DWITH_DAV1D=ON \ + -DENABLE_PARALLEL_TILE_DECODING=ON \ + -DWITH_LIBSHARPYUV=ON \ + -DWITH_LIBDE265=ON \ + -DWITH_AOM_DECODER=OFF \ + -DWITH_AOM_ENCODER=ON \ + -DWITH_X265=OFF \ + -DWITH_EXAMPLES=OFF \ + .. + $STD make install -j "$(nproc)" + ldconfig /usr/local/lib + $STD make clean + cd "$STAGING_DIR" + rm -rf "$SOURCE"/build + msg_ok "Recompiled libheif" + fi +} + +function compile_libraw() { + SOURCE=${SOURCE_DIR}/libraw + local update + : "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}" + if [[ "${update:-}" ]] || [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then + msg_info "Recompiling libraw" + if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi + $STD git clone https://github.com/libraw/libraw.git "$SOURCE" + cd "$SOURCE" + $STD git reset --hard "$LIBRAW_REVISION" + $STD autoreconf --install + $STD ./configure + $STD make -j"$(nproc)" + $STD make install + ldconfig /usr/local/lib + $STD make clean + cd "$STAGING_DIR" + msg_ok "Recompiled libraw" + fi +} + +function compile_imagemagick() { + SOURCE=$SOURCE_DIR/imagemagick + : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/imagemagick.json)}" + if [[ "${update:-}" ]] || [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]]; then + msg_info "Recompiling ImageMagick" + if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi + $STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE" + cd "$SOURCE" + $STD git reset --hard "$IMAGEMAGICK_REVISION" + $STD ./configure --with-modules + $STD make -j"$(nproc)" + $STD make install + ldconfig /usr/local/lib + $STD make clean + cd "$STAGING_DIR" + msg_ok "Recompiled ImageMagick" + fi +} + +function compile_libvips() { + SOURCE=$SOURCE_DIR/libvips + : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}" + if [[ "${update:-}" ]] || [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then + msg_info "Recompiling libvips" + if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi + $STD git clone https://github.com/libvips/libvips.git "$SOURCE" + cd "$SOURCE" + $STD git reset --hard "$LIBVIPS_REVISION" + $STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled + cd build + $STD ninja install + ldconfig /usr/local/lib + cd "$STAGING_DIR" + rm -rf "$SOURCE"/build + msg_ok "Recompiled libvips" + fi +} + start build_container description diff --git a/install/immich-install.sh b/install/immich-install.sh index a8867f74b..cacd9b631 100644 --- a/install/immich-install.sh +++ b/install/immich-install.sh @@ -66,6 +66,7 @@ $STD apt-get install --no-install-recommends -y \ mesa-vulkan-drivers \ ocl-icd-libopencl1 \ tini \ + libaom-dev \ zlib1g $STD apt-get install -y \ libgdk-pixbuf-2.0-dev librsvg2-dev libtool @@ -110,6 +111,23 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then msg_ok "Installed OpenVINO dependencies" fi +msg_info "Installing Packages from Testing Repo" +export APT_LISTCHANGES_FRONTEND=none +export DEBIAN_FRONTEND=noninteractive +$STD apt-get install -t testing --no-install-recommends -y \ + libio-compress-brotli-perl \ + libwebp7 \ + libwebpdemux2 \ + libwebpmux3 \ + libhwy1t64 \ + libdav1d-dev \ + libhwy-dev \ + libwebp-dev +if [[ -f ~/.openvino ]]; then + $STD apt-get install -t testing -y patchelf +fi +msg_ok "Packages from Testing Repo Installed" + NODE_VERSION="22" setup_nodejs PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql @@ -136,27 +154,6 @@ $STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;" } >>~/"$APPLICATION".creds msg_ok "Set up Postgresql Database" -msg_info "Installing Packages from Testing Repo" -export APT_LISTCHANGES_FRONTEND=none -export DEBIAN_FRONTEND=noninteractive -$STD apt-get install -t testing --no-install-recommends -y \ - libio-compress-brotli-perl \ - libwebp7 \ - libwebpdemux2 \ - libwebpmux3 \ - libhwy1t64 \ - libdav1d-dev \ - libhwy-dev \ - libwebp-dev -if [[ -f ~/.openvino ]]; then - $STD apt-get install -t testing -y patchelf -fi -msg_ok "Packages from Testing Repo Installed" - -# Fix default DB collation issue after libc update -$STD sudo -u postgres psql -c "ALTER DATABASE postgres REFRESH COLLATION VERSION;" -$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME REFRESH COLLATION VERSION;" - msg_info "Compiling Custom Photo-processing Library (extreme patience)" LD_LIBRARY_PATH=/usr/local/lib export LD_RUN_PATH=/usr/local/lib @@ -218,7 +215,7 @@ $STD cmake --preset=release-noplugins \ -DWITH_LIBSHARPYUV=ON \ -DWITH_LIBDE265=ON \ -DWITH_AOM_DECODER=OFF \ - -DWITH_AOM_ENCODER=OFF \ + -DWITH_AOM_ENCODER=ON \ -DWITH_X265=OFF \ -DWITH_EXAMPLES=OFF \ .. From 93e204850beaa868a6c8433e1234f977e9cbf98b 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, 11 Jul 2025 07:36:12 +0100 Subject: [PATCH 213/229] Update CHANGELOG.md (#5925) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50e03c12d..5fe44d812 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2025-07-11 +### 🚀 Updated Scripts + + - #### 🔧 Refactor + + - Immich: handle custom library dependency updates; other fixes [@vhsdream](https://github.com/vhsdream) ([#5896](https://github.com/community-scripts/ProxmoxVE/pull/5896)) + ## 2025-07-10 ### 🚀 Updated Scripts From 3ca53067a7a4c9ef13bac0969125a55aef6e8dfb Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 11 Jul 2025 11:39:50 +0200 Subject: [PATCH 214/229] Refactor & Function Bump: Docker (#5889) * Refactor: Docker * add more features * update_script * Update docker.sh --- ct/docker.sh | 76 ++++++++++++++++++++++++++++++++------- install/docker-install.sh | 46 +++++++++++++++++------- 2 files changed, 97 insertions(+), 25 deletions(-) diff --git a/ct/docker.sh b/ct/docker.sh index 531e04e8d..5b8589ae5 100644 --- a/ct/docker.sh +++ b/ct/docker.sh @@ -20,18 +20,68 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /var ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating ${APP} LXC" - $STD apt-get update - $STD apt-get -y upgrade - msg_ok "Updated ${APP} LXC" - exit + header_info + check_container_storage + check_container_resources + + get_latest_release() { + curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4 + } + + msg_info "Updating base system" + $STD apt-get update + $STD apt-get -y upgrade + msg_ok "Base system updated" + + msg_info "Updating Docker Engine" + $STD apt-get install --only-upgrade -y docker-ce docker-ce-cli containerd.io + msg_ok "Docker Engine updated" + + if [[ -f /usr/local/lib/docker/cli-plugins/docker-compose ]]; then + COMPOSE_BIN="/usr/local/lib/docker/cli-plugins/docker-compose" + COMPOSE_NEW_VERSION=$(get_latest_release "docker/compose") + msg_info "Updating Docker Compose to $COMPOSE_NEW_VERSION" + curl -fsSL "https://github.com/docker/compose/releases/download/${COMPOSE_NEW_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \ + -o "$COMPOSE_BIN" + chmod +x "$COMPOSE_BIN" + msg_ok "Docker Compose updated" + fi + + if docker ps -a --format '{{.Names}}' | grep -q '^portainer$'; then + msg_info "Updating Portainer" + $STD docker pull portainer/portainer-ce:latest + $STD docker stop portainer && docker rm portainer + $STD docker volume create portainer_data >/dev/null 2>&1 + $STD docker run -d \ + -p 8000:8000 \ + -p 9443:9443 \ + --name=portainer \ + --restart=always \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v portainer_data:/data \ + portainer/portainer-ce:latest + msg_ok "Updated Portainer" + fi + + if docker ps -a --format '{{.Names}}' | grep -q '^portainer_agent$'; then + msg_info "Updating Portainer Agent" + $STD docker pull portainer/agent:latest + $STD docker stop portainer_agent && docker rm portainer_agent + $STD docker run -d \ + -p 9001:9001 \ + --name=portainer_agent \ + --restart=always \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /var/lib/docker/volumes:/var/lib/docker/volumes \ + portainer/agent + msg_ok "Updated Portainer Agent" + fi + + msg_info "Cleaning up" + $STD apt-get -y autoremove + $STD apt-get -y autoclean + msg_ok "Cleanup complete" + exit } start @@ -39,4 +89,4 @@ build_container description msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" \ No newline at end of file +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" diff --git a/install/docker-install.sh b/install/docker-install.sh index 5156f4d36..238a84046 100644 --- a/install/docker-install.sh +++ b/install/docker-install.sh @@ -29,7 +29,17 @@ echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json $STD sh <(curl -fsSL https://get.docker.com) msg_ok "Installed Docker $DOCKER_LATEST_VERSION" -read -r -p "${TAB3}Would you like to add Portainer? " prompt +read -r -p "${TAB3}Install Docker Compose v2 plugin? " prompt_compose +if [[ ${prompt_compose,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" + mkdir -p /usr/local/lib/docker/cli-plugins + curl -fsSL "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_LATEST_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \ + -o /usr/local/lib/docker/cli-plugins/docker-compose + chmod +x /usr/local/lib/docker/cli-plugins/docker-compose + msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" +fi + +read -r -p "${TAB3}Would you like to add Portainer (UI)? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then msg_info "Installing Portainer $PORTAINER_LATEST_VERSION" docker volume create portainer_data >/dev/null @@ -43,9 +53,9 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then portainer/portainer-ce:latest msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION" else - read -r -p "${TAB3}Would you like to add the Portainer Agent? " prompt - if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION" + read -r -p "${TAB3}Would you like to install the Portainer Agent (for remote management)? " prompt_agent + if [[ ${prompt_agent,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" $STD docker run -d \ -p 9001:9001 \ --name portainer_agent \ @@ -57,12 +67,25 @@ else fi fi -read -r -p "${TAB3}Expose Docker TCP socket (⚠️ insecure)? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Enabling Docker TCP socket on port 2375 (insecure)" - - mkdir -p /etc/docker - echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json +read -r -p "${TAB3}Expose Docker TCP socket (insecure) ? [n = No, l = Local only (127.0.0.1), a = All interfaces (0.0.0.0)] : " socket_choice +case "${socket_choice,,}" in + l) + socket="tcp://127.0.0.1:2375" + ;; + a) + socket="tcp://0.0.0.0:2375" + ;; + *) + socket="" + ;; +esac + +if [[ -n "$socket" ]]; then + msg_info "Enabling Docker TCP socket on $socket" + $STD apt-get install -y jq + + tmpfile=$(mktemp) + jq --arg sock "$socket" '. + { "hosts": ["unix:///var/run/docker.sock", $sock] }' /etc/docker/daemon.json > "$tmpfile" && mv "$tmpfile" /etc/docker/daemon.json mkdir -p /etc/systemd/system/docker.service.d cat < /etc/systemd/system/docker.service.d/override.conf @@ -75,14 +98,13 @@ EOF $STD systemctl daemon-reload if systemctl restart docker; then - msg_ok "Docker TCP socket now available on tcp://0.0.0.0:2375" + msg_ok "Docker TCP socket available on $socket" else msg_error "Docker failed to restart. Check journalctl -xeu docker.service" exit 1 fi fi - motd_ssh customize From d693c9361b912916ada7bd786cc14b00d73f2f64 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, 11 Jul 2025 10:40:20 +0100 Subject: [PATCH 215/229] Update CHANGELOG.md (#5927) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fe44d812..3b3f28d1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts + - #### ✨ New Features + + - Refactor & Function Bump: Docker [@MickLesk](https://github.com/MickLesk) ([#5889](https://github.com/community-scripts/ProxmoxVE/pull/5889)) + - #### 🔧 Refactor - Immich: handle custom library dependency updates; other fixes [@vhsdream](https://github.com/vhsdream) ([#5896](https://github.com/community-scripts/ProxmoxVE/pull/5896)) From ebea43f29973ef21e3fa4fb6311b4619cf445e27 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 11 Jul 2025 07:56:20 -0400 Subject: [PATCH 216/229] Immich: revert install sequence (#5932) - apparently the Postgresql-16 install does not like running after packages from Testing are installed. Reverted the change and restored running the DB Collation queries --- install/immich-install.sh | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/install/immich-install.sh b/install/immich-install.sh index cacd9b631..a6dec4468 100644 --- a/install/immich-install.sh +++ b/install/immich-install.sh @@ -111,23 +111,6 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then msg_ok "Installed OpenVINO dependencies" fi -msg_info "Installing Packages from Testing Repo" -export APT_LISTCHANGES_FRONTEND=none -export DEBIAN_FRONTEND=noninteractive -$STD apt-get install -t testing --no-install-recommends -y \ - libio-compress-brotli-perl \ - libwebp7 \ - libwebpdemux2 \ - libwebpmux3 \ - libhwy1t64 \ - libdav1d-dev \ - libhwy-dev \ - libwebp-dev -if [[ -f ~/.openvino ]]; then - $STD apt-get install -t testing -y patchelf -fi -msg_ok "Packages from Testing Repo Installed" - NODE_VERSION="22" setup_nodejs PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql @@ -154,6 +137,26 @@ $STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;" } >>~/"$APPLICATION".creds msg_ok "Set up Postgresql Database" +msg_info "Installing Packages from Testing Repo" +export APT_LISTCHANGES_FRONTEND=none +export DEBIAN_FRONTEND=noninteractive +$STD apt-get install -t testing --no-install-recommends -y \ + libio-compress-brotli-perl \ + libwebp7 \ + libwebpdemux2 \ + libwebpmux3 \ + libhwy1t64 \ + libdav1d-dev \ + libhwy-dev \ + libwebp-dev +if [[ -f ~/.openvino ]]; then + $STD apt-get install -t testing -y patchelf +fi +msg_ok "Packages from Testing Repo Installed" + +$STD sudo -u postgres psql -c "ALTER DATABASE postgres REFRESH COLLATION VERSION;" +$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME REFRESH COLLATION VERSION;" + msg_info "Compiling Custom Photo-processing Library (extreme patience)" LD_LIBRARY_PATH=/usr/local/lib export LD_RUN_PATH=/usr/local/lib From f9429ecf5a5c9dd103433870315e08d197161529 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, 11 Jul 2025 12:56:53 +0100 Subject: [PATCH 217/229] Update CHANGELOG.md (#5933) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b3f28d1c..275e12d96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts + - #### 🐞 Bug Fixes + + - Quickfix: Immich: revert install sequence [@vhsdream](https://github.com/vhsdream) ([#5932](https://github.com/community-scripts/ProxmoxVE/pull/5932)) + - #### ✨ New Features - Refactor & Function Bump: Docker [@MickLesk](https://github.com/MickLesk) ([#5889](https://github.com/community-scripts/ProxmoxVE/pull/5889)) From b115fe9120adadd7ae8e54ed963e8f059530296e 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, 11 Jul 2025 14:07:46 +0200 Subject: [PATCH 218/229] Update versions.json (#5934) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 90 +++++++++++++++--------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 27308ba02..cfa0b81e9 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,44 @@ [ + { + "name": "prometheus/prometheus", + "version": "v2.53.5", + "date": "2025-06-30T11:01:12Z" + }, + { + "name": "Paymenter/Paymenter", + "version": "v1.2.2", + "date": "2025-07-11T10:09:47Z" + }, + { + "name": "traefik/traefik", + "version": "v3.4.4", + "date": "2025-07-11T08:41:34Z" + }, + { + "name": "mattermost/mattermost", + "version": "preview-v0.1", + "date": "2025-06-27T14:35:47Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.2145", + "date": "2025-07-11T05:49:32Z" + }, + { + "name": "documenso/documenso", + "version": "v1.12.2-rc.1", + "date": "2025-07-11T02:55:56Z" + }, + { + "name": "outline/outline", + "version": "v0.85.1", + "date": "2025-07-11T01:17:53Z" + }, + { + "name": "steveiliop56/tinyauth", + "version": "v3.6.0", + "date": "2025-07-09T23:15:25Z" + }, { "name": "jenkinsci/jenkins", "version": "jenkins-2.518", @@ -24,6 +64,11 @@ "version": "v0.9.6", "date": "2025-07-08T01:26:29Z" }, + { + "name": "keycloak/keycloak", + "version": "26.3.1", + "date": "2025-07-09T15:41:43Z" + }, { "name": "msgbyte/tianji", "version": "v1.23.4", @@ -54,26 +99,11 @@ "version": "prototype-incremental-vector-store-3", "date": "2025-07-07T10:27:19Z" }, - { - "name": "mattermost/mattermost", - "version": "preview-v0.1", - "date": "2025-06-27T14:35:47Z" - }, - { - "name": "Jackett/Jackett", - "version": "v0.22.2140", - "date": "2025-07-10T05:54:59Z" - }, { "name": "firefly-iii/firefly-iii", "version": "v6.2.20", "date": "2025-07-02T04:03:37Z" }, - { - "name": "steveiliop56/tinyauth", - "version": "v3.6.0", - "date": "2025-07-09T23:15:25Z" - }, { "name": "pocket-id/pocket-id", "version": "v1.6.2", @@ -109,11 +139,6 @@ "version": "v2.1.0.123-2.1.0.123_canary_2025-07-09", "date": "2025-07-09T16:08:36Z" }, - { - "name": "keycloak/keycloak", - "version": "26.3.1", - "date": "2025-07-09T15:41:43Z" - }, { "name": "nicolargo/glances", "version": "v4.3.3", @@ -244,11 +269,6 @@ "version": "v25.05.2", "date": "2025-07-07T14:08:25Z" }, - { - "name": "Paymenter/Paymenter", - "version": "v1.2.1", - "date": "2025-07-07T10:11:26Z" - }, { "name": "nzbgetcom/nzbget", "version": "v25.2", @@ -369,11 +389,6 @@ "version": "6.3.1", "date": "2025-07-04T11:20:48Z" }, - { - "name": "outline/outline", - "version": "v0.85.0", - "date": "2025-07-04T00:06:47Z" - }, { "name": "cloudflare/cloudflared", "version": "2025.7.0", @@ -399,11 +414,6 @@ "version": "v25.7.1", "date": "2025-07-03T01:03:18Z" }, - { - "name": "documenso/documenso", - "version": "v1.12.2-rc.0", - "date": "2025-07-03T00:31:22Z" - }, { "name": "Koenkk/zigbee2mqtt", "version": "2.5.1", @@ -474,11 +484,6 @@ "version": "v0.9.81", "date": "2025-06-30T16:40:33Z" }, - { - "name": "prometheus/prometheus", - "version": "v2.53.5", - "date": "2025-06-30T11:01:12Z" - }, { "name": "jupyter/notebook", "version": "v7.4.4", @@ -529,11 +534,6 @@ "version": "v1.84.3", "date": "2025-06-26T16:31:57Z" }, - { - "name": "traefik/traefik", - "version": "v3.5.0-rc1", - "date": "2025-06-26T15:08:43Z" - }, { "name": "node-red/node-red", "version": "4.1.0-beta.2", From f3a4bd461db384da442821afb9b6554233621582 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 11 Jul 2025 15:05:26 +0200 Subject: [PATCH 219/229] bookstack: add setup_composer in update (#5935) --- ct/bookstack.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ct/bookstack.sh b/ct/bookstack.sh index 97161a27c..2c0bdadf9 100644 --- a/ct/bookstack.sh +++ b/ct/bookstack.sh @@ -40,6 +40,7 @@ function update_script() { fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack" PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php + setup_composer msg_info "Restoring backup" cp /opt/bookstack-backup/.env /opt/bookstack/.env From 471e2f758fa443ab562e8f520b894fe428da87a7 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, 11 Jul 2025 14:06:04 +0100 Subject: [PATCH 220/229] Update CHANGELOG.md (#5936) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 275e12d96..ba0acdc86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - bookstack: add setup_composer in update [@MickLesk](https://github.com/MickLesk) ([#5935](https://github.com/community-scripts/ProxmoxVE/pull/5935)) - Quickfix: Immich: revert install sequence [@vhsdream](https://github.com/vhsdream) ([#5932](https://github.com/community-scripts/ProxmoxVE/pull/5932)) - #### ✨ New Features From 599d65768e48bd9d51240a71058bbe79b94545e0 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 11 Jul 2025 14:24:06 -0400 Subject: [PATCH 221/229] immich: hotfix 5821 (#5938) --- ct/immich.sh | 9 ++++++--- install/immich-install.sh | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/ct/immich.sh b/ct/immich.sh index d5cd2d89c..bfc61c8de 100644 --- a/ct/immich.sh +++ b/ct/immich.sh @@ -123,6 +123,10 @@ function update_script() { cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/ cp -a web/build "$APP_DIR"/www cp LICENSE "$APP_DIR" + cd "$APP_DIR" + export SHARP_FORCE_GLOBAL_LIBVIPS=true + $STD npm install sharp + rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64} msg_ok "Updated ${APP} web and microservices" cd "$SRC_DIR"/machine-learning @@ -154,8 +158,6 @@ function update_script() { ln -s "$GEO_DIR" "$APP_DIR" msg_info "Updating Immich CLI" - $STD npm install --build-from-source sharp - rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64} $STD npm i -g @immich/cli msg_ok "Updated Immich CLI" @@ -291,7 +293,8 @@ function compile_imagemagick() { function compile_libvips() { SOURCE=$SOURCE_DIR/libvips - : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}" + # : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}" + : "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}" if [[ "${update:-}" ]] || [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then msg_info "Recompiling libvips" if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi diff --git a/install/immich-install.sh b/install/immich-install.sh index a6dec4468..7dac15f1a 100644 --- a/install/immich-install.sh +++ b/install/immich-install.sh @@ -254,7 +254,8 @@ $STD make clean cd "$STAGING_DIR" SOURCE=$SOURCE_DIR/libvips -: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}" +# : "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}" +: "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}" $STD git clone https://github.com/libvips/libvips.git "$SOURCE" cd "$SOURCE" $STD git reset --hard "$LIBVIPS_REVISION" @@ -301,6 +302,10 @@ cd "$SRC_DIR" cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/ cp -a web/build "$APP_DIR"/www cp LICENSE "$APP_DIR" +cd "$APP_DIR" +export SHARP_FORCE_GLOBAL_LIBVIPS=true +$STD npm install sharp +rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64} msg_ok "Installed Immich Web Components" cd "$SRC_DIR"/machine-learning @@ -331,8 +336,6 @@ ln -s "$UPLOAD_DIR" "$APP_DIR"/upload ln -s "$UPLOAD_DIR" "$ML_DIR"/upload msg_info "Installing Immich CLI" -$STD npm install --build-from-source sharp -rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64} $STD npm i -g @immich/cli msg_ok "Installed Immich CLI" From ba00a1d3f0a2ecf3869664df63e27f4f4c858570 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, 11 Jul 2025 19:24:43 +0100 Subject: [PATCH 222/229] Update CHANGELOG.md (#5939) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba0acdc86..9d9af6a38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - immich: hotfix #5921 [@vhsdream](https://github.com/vhsdream) ([#5938](https://github.com/community-scripts/ProxmoxVE/pull/5938)) - bookstack: add setup_composer in update [@MickLesk](https://github.com/MickLesk) ([#5935](https://github.com/community-scripts/ProxmoxVE/pull/5935)) - Quickfix: Immich: revert install sequence [@vhsdream](https://github.com/vhsdream) ([#5932](https://github.com/community-scripts/ProxmoxVE/pull/5932)) From 8f79823c95ab3e98914a77840ab38485ca866e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Fri, 11 Jul 2025 22:04:41 +0200 Subject: [PATCH 223/229] Fix dependencies (#5940) --- install/barcode-buddy-install.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/install/barcode-buddy-install.sh b/install/barcode-buddy-install.sh index 3af350e8b..bdbf3b5a0 100644 --- a/install/barcode-buddy-install.sh +++ b/install/barcode-buddy-install.sh @@ -14,12 +14,10 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y \ - apache2 \ - redis +$STD apt-get install -y redis msg_ok "Installed Dependencies" -PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="date, json, redis, sqlite3, sockets" setup_php +PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="redis, sqlite3" setup_php fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy" msg_info "Configuring barcodebuddy" From 5dcd39231f69bb28425e53aade27413e3539763c 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, 12 Jul 2025 02:15:06 +0200 Subject: [PATCH 224/229] Update versions.json (#5941) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 120 ++++++++++++++--------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index cfa0b81e9..4be4a6d49 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,4 +1,64 @@ [ + { + "name": "Ombi-app/Ombi", + "version": "v4.47.1", + "date": "2025-01-05T21:14:23Z" + }, + { + "name": "eclipse-mosquitto/mosquitto", + "version": "v2.0.22", + "date": "2025-07-11T21:34:20Z" + }, + { + "name": "steveiliop56/tinyauth", + "version": "v3.6.0", + "date": "2025-07-09T23:15:25Z" + }, + { + "name": "mongodb/mongo", + "version": "r8.2.0-alpha0", + "date": "2025-07-11T21:06:26Z" + }, + { + "name": "duplicati/duplicati", + "version": "v2.1.0.124-2.1.0.124_canary_2025-07-11", + "date": "2025-07-11T20:09:08Z" + }, + { + "name": "TandoorRecipes/recipes", + "version": "1.5.35", + "date": "2025-06-22T08:30:10Z" + }, + { + "name": "MediaBrowser/Emby.Releases", + "version": "4.9.1.2", + "date": "2025-06-26T22:08:00Z" + }, + { + "name": "homarr-labs/homarr", + "version": "v1.28.0", + "date": "2025-07-11T19:16:26Z" + }, + { + "name": "n8n-io/n8n", + "version": "n8n@1.101.2", + "date": "2025-07-11T12:03:41Z" + }, + { + "name": "FlowiseAI/Flowise", + "version": "flowise@3.0.4", + "date": "2025-07-11T13:26:54Z" + }, + { + "name": "zwave-js/zwave-js-ui", + "version": "v10.9.0", + "date": "2025-07-11T12:57:54Z" + }, + { + "name": "zitadel/zitadel", + "version": "v3.3.1", + "date": "2025-07-11T11:51:48Z" + }, { "name": "prometheus/prometheus", "version": "v2.53.5", @@ -34,11 +94,6 @@ "version": "v0.85.1", "date": "2025-07-11T01:17:53Z" }, - { - "name": "steveiliop56/tinyauth", - "version": "v3.6.0", - "date": "2025-07-09T23:15:25Z" - }, { "name": "jenkinsci/jenkins", "version": "jenkins-2.518", @@ -74,11 +129,6 @@ "version": "v1.23.4", "date": "2025-07-10T18:13:38Z" }, - { - "name": "mongodb/mongo", - "version": "r6.0.25", - "date": "2025-07-10T16:59:44Z" - }, { "name": "forgejo/forgejo", "version": "v11.0.3", @@ -134,11 +184,6 @@ "version": "v1.4.9", "date": "2025-07-09T16:27:46Z" }, - { - "name": "duplicati/duplicati", - "version": "v2.1.0.123-2.1.0.123_canary_2025-07-09", - "date": "2025-07-09T16:08:36Z" - }, { "name": "nicolargo/glances", "version": "v4.3.3", @@ -164,11 +209,6 @@ "version": "v0.107.63", "date": "2025-06-26T14:34:19Z" }, - { - "name": "n8n-io/n8n", - "version": "n8n@1.102.0", - "date": "2025-07-07T15:32:29Z" - }, { "name": "fuma-nama/fumadocs", "version": "fumadocs-ui@15.6.3", @@ -184,11 +224,6 @@ "version": "2025.6.3", "date": "2025-07-03T01:07:26Z" }, - { - "name": "MediaBrowser/Emby.Releases", - "version": "4.9.1.2", - "date": "2025-06-26T22:08:00Z" - }, { "name": "henrygd/beszel", "version": "v0.11.1", @@ -244,11 +279,6 @@ "version": "v2.4.0p7", "date": "2025-07-08T05:51:08Z" }, - { - "name": "TandoorRecipes/recipes", - "version": "1.5.35", - "date": "2025-06-22T08:30:10Z" - }, { "name": "VictoriaMetrics/VictoriaMetrics", "version": "pmm-6401-v1.121.0", @@ -274,11 +304,6 @@ "version": "v25.2", "date": "2025-07-04T08:21:42Z" }, - { - "name": "zwave-js/zwave-js-ui", - "version": "v10.8.0", - "date": "2025-07-07T08:37:45Z" - }, { "name": "morpheus65535/bazarr", "version": "v1.5.2", @@ -364,16 +389,6 @@ "version": "2025.7.1", "date": "2025-07-04T20:02:52Z" }, - { - "name": "homarr-labs/homarr", - "version": "v1.27.0", - "date": "2025-07-04T19:16:16Z" - }, - { - "name": "zitadel/zitadel", - "version": "v3.3.0", - "date": "2025-06-12T06:54:48Z" - }, { "name": "emqx/emqx", "version": "e6.0.0-M1.202507-alpha.1", @@ -519,11 +534,6 @@ "version": "version/2025.6.3", "date": "2025-06-27T14:01:06Z" }, - { - "name": "FlowiseAI/Flowise", - "version": "flowise@3.0.3", - "date": "2025-06-27T09:53:57Z" - }, { "name": "netbox-community/netbox", "version": "v4.3.3", @@ -929,11 +939,6 @@ "version": "v25.05.2", "date": "2025-05-17T12:53:29Z" }, - { - "name": "Ombi-app/Ombi", - "version": "v4.47.1", - "date": "2025-01-05T21:14:23Z" - }, { "name": "motioneye-project/motioneye", "version": "0.42.1", @@ -1154,11 +1159,6 @@ "version": "v0.28.1", "date": "2025-03-07T15:41:35Z" }, - { - "name": "eclipse-mosquitto/mosquitto", - "version": "v2.0.21", - "date": "2025-03-06T16:24:56Z" - }, { "name": "toniebox-reverse-engineering/teddycloud", "version": "tc_v0.6.4", From ee5cd20915792a43c612e25f0816f77dfea09766 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, 12 Jul 2025 01:15:38 +0100 Subject: [PATCH 225/229] Update CHANGELOG.md (#5942) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d9af6a38..8519808a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ > [!CAUTION] Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. +## 2025-07-12 + ## 2025-07-11 ### 🚀 Updated Scripts From 20e9e9efe8856bd7694b162d326adbe136b864fd Mon Sep 17 00:00:00 2001 From: smhc Date: Sat, 12 Jul 2025 19:37:09 +1000 Subject: [PATCH 226/229] Fix url to gpg key (#5946) --- install/mqtt-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/mqtt-install.sh b/install/mqtt-install.sh index 7d1360cd0..00c2e01e4 100644 --- a/install/mqtt-install.sh +++ b/install/mqtt-install.sh @@ -15,7 +15,7 @@ update_os msg_info "Installing Mosquitto MQTT Broker" source /etc/os-release -curl -fsSL http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key >/usr/share/keyrings/mosquitto-repo.gpg.key +curl -fsSL http://repo.mosquitto.org/debian/mosquitto-repo.gpg >/usr/share/keyrings/mosquitto-repo.gpg.key chmod go+r /usr/share/keyrings/mosquitto-repo.gpg.key echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mosquitto-repo.gpg.key] http://repo.mosquitto.org/debian ${VERSION_CODENAME} main" >/etc/apt/sources.list.d/mosquitto.list $STD apt-get update From f4ac341c158a93a328c346efe9d531820fa642e6 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, 12 Jul 2025 13:22:58 +0200 Subject: [PATCH 227/229] Add composer (#5947) --- ct/baikal.sh | 2 ++ install/baikal-install.sh | 3 +++ 2 files changed, 5 insertions(+) diff --git a/ct/baikal.sh b/ct/baikal.sh index 252d8c24e..7dcefd519 100644 --- a/ct/baikal.sh +++ b/ct/baikal.sh @@ -45,6 +45,8 @@ function update_script() { cp -r /opt/baikal-backup/Specific/ /opt/baikal/ chown -R www-data:www-data /opt/baikal/ chmod -R 755 /opt/baikal/ + cd /opt/baikal + $STD composer install msg_ok "Configured Baikal" msg_info "Starting Service" diff --git a/install/baikal-install.sh b/install/baikal-install.sh index db88df7d3..67db918c8 100644 --- a/install/baikal-install.sh +++ b/install/baikal-install.sh @@ -15,6 +15,7 @@ update_os PG_VERSION="16" setup_postgresql PHP_APACHE="YES" PHP_MODULE="pgsql" PHP_VERSION="8.2" setup_php +setup_composer fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal" msg_info "Setting up PostgreSQL Database" @@ -32,6 +33,8 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP msg_ok "Set up PostgreSQL Database" msg_info "Configuring Baikal" +cd /opt/baikal +$STD composer install cat </opt/baikal/config/baikal.yaml database: backend: pgsql From 4d236e63823b1bbf2a49a840c835528a95b6e93a 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, 13 Jul 2025 09:58:47 +0200 Subject: [PATCH 228/229] Firefly: Move to prebuild archive as installation source (#5952) --- ct/firefly.sh | 2 +- install/firefly-install.sh | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/ct/firefly.sh b/ct/firefly.sh index ead098e0a..87d12709d 100644 --- a/ct/firefly.sh +++ b/ct/firefly.sh @@ -39,7 +39,7 @@ function update_script() { cp -r /opt/firefly/storage /opt/storage msg_ok "Backed up data" - fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" + fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip" msg_info "Updating ${APP} to v${RELEASE}" rm -rf /opt/firefly/storage diff --git a/install/firefly-install.sh b/install/firefly-install.sh index 9e9b55853..f0c714e73 100644 --- a/install/firefly-install.sh +++ b/install/firefly-install.sh @@ -13,14 +13,9 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt-get install -y apache2 -msg_ok "Installed Dependencies" - PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="mysql" setup_php setup_composer setup_mariadb -fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" LOCAL_IP=$(hostname -I | awk '{print $1}') msg_info "Setting up database" @@ -38,6 +33,8 @@ mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRI } >>~/firefly.creds msg_ok "Set up database" +fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip" + msg_info "Configuring Firefly III (Patience)" chown -R www-data:www-data /opt/firefly chmod -R 775 /opt/firefly/storage @@ -45,8 +42,6 @@ cd /opt/firefly cp .env.example .env sed -i "s/DB_HOST=.*/DB_HOST=localhost/" /opt/firefly/.env sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" /opt/firefly/.env -echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc -source ~/.bashrc $STD composer install --no-dev --no-plugins --no-interaction $STD php artisan firefly:upgrade-database $STD php artisan firefly:correct-database From 17e671cae95f5b39cc40874a98fec560a265abf6 Mon Sep 17 00:00:00 2001 From: Calvin Li <65045619+calvin-li-developer@users.noreply.github.com> Date: Sun, 13 Jul 2025 14:00:59 -0400 Subject: [PATCH 229/229] Update nic-offloading-fix: add Intel as search Text (#5954) * Update nic-offloading-fix.json * Update nic-offloading-fix.json --- frontend/public/json/nic-offloading-fix.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/public/json/nic-offloading-fix.json b/frontend/public/json/nic-offloading-fix.json index 7d976e29e..261a67aaa 100644 --- a/frontend/public/json/nic-offloading-fix.json +++ b/frontend/public/json/nic-offloading-fix.json @@ -1,5 +1,5 @@ { - "name": "NIC Offloading Fix", + "name": "Intel e1000e NIC Offloading Fix", "slug": "nic-offloading-fix", "categories": [ 1