Compare commits

..

30 Commits

Author SHA1 Message Date
CanbiZ (MickLesk) 65af476e7b Update Node.js version from 22 to 24 2026-08-03 09:34:06 +02:00
CanbiZ (MickLesk) f602705af3 Update Node.js version from 22 to 24 2026-08-03 09:33:56 +02:00
CanbiZ (MickLesk) bbfe6af0d3 Add NODE_VERSION setup for Node.js in watcharr.sh 2026-08-03 09:31:25 +02:00
CanbiZ (MickLesk) 21accbbe61 Update Node.js version to 24 in installation script 2026-08-03 09:31:17 +02:00
CanbiZ (MickLesk) 362fb62733 Add NODE_VERSION setup for Node.js 2026-08-03 09:29:21 +02:00
CanbiZ (MickLesk) cc3f61c431 Bump NodeJS Versions of several scripts 2026-08-03 09:27:23 +02:00
community-scripts-pr-app[bot] 6ce8062e3d Update .app files (#16227)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-08-02 20:52:56 +02:00
community-scripts-pr-app[bot] 213c342625 Update CHANGELOG.md (#16226)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-02 17:58:23 +00:00
community-scripts-pr-app[bot] b7f5ba1833 Update CHANGELOG.md (#16225)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-02 17:58:05 +00:00
CanbiZ (MickLesk) a6196990a6 chore: remove portainer setup from several scripts (moved to addon) (#16201)
* remove portainer from tools.func

* remove comment in tools.func and remove portainer from docker setup

* remove portainer from alpine-docker

* formatting alpine docker

* remove portainer update in docker ct and homeassistant
2026-08-02 19:57:57 +02:00
CanbiZ (MickLesk) 753f74c67d Portainer as Addon (#16200)
* New Script: Portainer

* author
2026-08-02 19:57:42 +02:00
community-scripts-pr-app[bot] aa4cd6a5ba Update CHANGELOG.md (#16223)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-02 17:33:36 +00:00
community-scripts-pr-app[bot] 92bc6915b1 Update CHANGELOG.md (#16222)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-02 17:33:27 +00:00
Slaviša Arežina 915226fa3c LibreNMS: Ensure ipmitool dependency is installed (#16219) 2026-08-02 19:33:09 +02:00
community-scripts-pr-app[bot] f8c7af7115 Update CHANGELOG.md (#16221)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-02 17:32:59 +00:00
Slaviša Arežina 97aa6b39cb Bitfocus Companion: add libatomic1 dependency (#16212) 2026-08-02 19:32:33 +02:00
community-scripts-pr-app[bot] bc944d90e2 Update CHANGELOG.md (#16214)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-02 08:15:42 +00:00
eXistC 4264cb46f4 fix(dispatcharr): add recordings and dvr queues to celery worker (#16204) 2026-08-02 10:15:21 +02:00
community-scripts-pr-app[bot] c29d71f5c0 Update CHANGELOG.md (#16213)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-02 07:46:30 +00:00
Sam Heinz cb458b93f5 add retry for uv - same as immich (#16203) 2026-08-02 09:46:02 +02:00
community-scripts-pr-app[bot] da77587831 Update CHANGELOG.md (#16211)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-02 07:12:28 +00:00
Torin 72380779d4 Fix for cross-seed node version (#16209) 2026-08-02 09:11:59 +02:00
community-scripts-pr-app[bot] b518978402 Update CHANGELOG.md (#16207)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-02 00:20:00 +00:00
community-scripts-pr-app[bot] f2ef2776e7 Archive old changelog entries (#16206)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-02 00:19:31 +00:00
community-scripts-pr-app[bot] 382ef231d8 Update CHANGELOG.md (#16199)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-01 19:19:51 +00:00
community-scripts-pr-app[bot] de122d075f Update CHANGELOG.md (#16198)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-01 19:19:37 +00:00
Sam Heinz cffbe03b20 Update bazarr-install.sh (#16191) 2026-08-01 21:19:28 +02:00
community-scripts-pr-app[bot] f11aab9f17 Update CHANGELOG.md (#16197)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-01 19:19:15 +00:00
Sam Heinz f12751cbd9 add CLEANUPARR_CONFIG_PATH, CLEANUPARR_LOGS_PATH vars (#16193) 2026-08-01 21:19:08 +02:00
Sam Heinz 73b804bce7 fix romm missing 7z (#16194) 2026-08-01 21:18:48 +02:00
33 changed files with 522 additions and 298 deletions
+162
View File
@@ -1,3 +1,165 @@
## 2026-07-31
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Docmost: cleanup folder at update [@MickLesk](https://github.com/MickLesk) ([#16177](https://github.com/community-scripts/ProxmoxVE/pull/16177))
- Firecrawl: Add dependency [@tremor021](https://github.com/tremor021) ([#16174](https://github.com/community-scripts/ProxmoxVE/pull/16174))
## 2026-07-30
### 🆕 New Scripts
- Firecrawl ([#16156](https://github.com/community-scripts/ProxmoxVE/pull/16156))
- OmniRoute ([#16155](https://github.com/community-scripts/ProxmoxVE/pull/16155))
- PegaProx ([#16154](https://github.com/community-scripts/ProxmoxVE/pull/16154))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: Pin version to 3.1.0 [@vhsdream](https://github.com/vhsdream) ([#16170](https://github.com/community-scripts/ProxmoxVE/pull/16170))
- romm: remove stale 1.x alembic migrations on update [@Darkatek7](https://github.com/Darkatek7) ([#16101](https://github.com/community-scripts/ProxmoxVE/pull/16101))
- #### 🔧 Refactor
- Medusa: convert the non-free unrar source to deb822 format [@angusmaul](https://github.com/angusmaul) ([#16093](https://github.com/community-scripts/ProxmoxVE/pull/16093))
### 💾 Core
- #### ✨ New Features
- tools.func: support dynamic gitlab URL | add setup_mysql_db function [@MickLesk](https://github.com/MickLesk) ([#16166](https://github.com/community-scripts/ProxmoxVE/pull/16166))
- core: add configurable host CA inheritance during bootstrap [@MickLesk](https://github.com/MickLesk) ([#15889](https://github.com/community-scripts/ProxmoxVE/pull/15889))
## 2026-07-29
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- backup virtual printer in bambuddy [@asylumexp](https://github.com/asylumexp) ([#16142](https://github.com/community-scripts/ProxmoxVE/pull/16142))
- ImmichFrame: check .NET SDK before update deployment [@aidaskni](https://github.com/aidaskni) ([#16104](https://github.com/community-scripts/ProxmoxVE/pull/16104))
- #### ✨ New Features
- Bichon: Migration for V2 Release [@MickLesk](https://github.com/MickLesk) ([#16145](https://github.com/community-scripts/ProxmoxVE/pull/16145))
### 💾 Core
- #### ✨ New Features
- core: Harden remote func bootstrapping with dns issues [@MickLesk](https://github.com/MickLesk) ([#16146](https://github.com/community-scripts/ProxmoxVE/pull/16146))
## 2026-07-28
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Create search directory in wanderer-install.sh [@Isnubi](https://github.com/Isnubi) ([#16134](https://github.com/community-scripts/ProxmoxVE/pull/16134))
- npmplus: Remove duplicate msg_info for container recreation [@MickLesk](https://github.com/MickLesk) ([#16122](https://github.com/community-scripts/ProxmoxVE/pull/16122))
- fix Node.js version drift [@asylumexp](https://github.com/asylumexp) ([#16111](https://github.com/community-scripts/ProxmoxVE/pull/16111))
- UmlautAdaptarr: use the Debian 13 Microsoft repo with its 2025 signing key [@angusmaul](https://github.com/angusmaul) ([#16077](https://github.com/community-scripts/ProxmoxVE/pull/16077))
- fix(bazarr): store data in /var/lib/bazarr instead of inside /opt/bazarr [@angusmaul](https://github.com/angusmaul) ([#16098](https://github.com/community-scripts/ProxmoxVE/pull/16098))
- Cloudflare-DDNS: store API token in a 600 env file and build the binary at install time [@angusmaul](https://github.com/angusmaul) ([#16100](https://github.com/community-scripts/ProxmoxVE/pull/16100))
- #### ✨ New Features
- tools.func: add nginx site helper and PHP socket resolver [@MickLesk](https://github.com/MickLesk) ([#16118](https://github.com/community-scripts/ProxmoxVE/pull/16118))
- #### 💥 Breaking Changes
- Migrate Musicseerr to DroppedNeedle [@vhsdream](https://github.com/vhsdream) ([#15751](https://github.com/community-scripts/ProxmoxVE/pull/15751))
### 💾 Core
- #### 🐞 Bug Fixes
- core: fix read prompt input directly from /dev/tty [@MickLesk](https://github.com/MickLesk) ([#16126](https://github.com/community-scripts/ProxmoxVE/pull/16126))
### 🧰 Tools
- actual-budget-prometheus-exporter ([#16109](https://github.com/community-scripts/ProxmoxVE/pull/16109))
- #### 🐞 Bug Fixes
- fix: prometheus-paperless-exporter incompatibility with paperless v3 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#16119](https://github.com/community-scripts/ProxmoxVE/pull/16119))
### 📂 Github
- fix keep-open for close invalid pr [@asylumexp](https://github.com/asylumexp) ([#16105](https://github.com/community-scripts/ProxmoxVE/pull/16105))
- Bump GitHub Actions across workflows [@MickLesk](https://github.com/MickLesk) ([#16091](https://github.com/community-scripts/ProxmoxVE/pull/16091))
## 2026-07-27
### 🆕 New Scripts
- Unpackerr ([#16034](https://github.com/community-scripts/ProxmoxVE/pull/16034))
- CookCLI ([#16028](https://github.com/community-scripts/ProxmoxVE/pull/16028))
- Discourse ([#16024](https://github.com/community-scripts/ProxmoxVE/pull/16024))
- Mastodon ([#16029](https://github.com/community-scripts/ProxmoxVE/pull/16029))
- Docspell ([#16033](https://github.com/community-scripts/ProxmoxVE/pull/16033))
- Poznote ([#16030](https://github.com/community-scripts/ProxmoxVE/pull/16030))
- Shiori ([#16026](https://github.com/community-scripts/ProxmoxVE/pull/16026))
- Nezha ([#16025](https://github.com/community-scripts/ProxmoxVE/pull/16025))
- PasswordPusher ([#16031](https://github.com/community-scripts/ProxmoxVE/pull/16031))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Update MeiliSearch command for database upgrade [@Isnubi](https://github.com/Isnubi) ([#16081](https://github.com/community-scripts/ProxmoxVE/pull/16081))
- Mylar3 & Medusa: use trixie non-free for unrar, not bookworm [@angusmaul](https://github.com/angusmaul) ([#16072](https://github.com/community-scripts/ProxmoxVE/pull/16072))
- Vikunja: pin install/update to v2.3.0 due upstream issues [@MickLesk](https://github.com/MickLesk) ([#16059](https://github.com/community-scripts/ProxmoxVE/pull/16059))
- #### ✨ New Features
- OpenThread-BR: Add runtime configuration options [@tomfrenzel](https://github.com/tomfrenzel) ([#16038](https://github.com/community-scripts/ProxmoxVE/pull/16038))
### 💾 Core
- #### 🐞 Bug Fixes
- core: Handle LXC upgrade prompt cancellation [@MickLesk](https://github.com/MickLesk) ([#16058](https://github.com/community-scripts/ProxmoxVE/pull/16058))
- #### ✨ New Features
- core: fix OS version fallback when the host catalog lacks the requested version & harden template validation [@MickLesk](https://github.com/MickLesk) ([#16068](https://github.com/community-scripts/ProxmoxVE/pull/16068))
## 2026-07-26
### 🆕 New Scripts
- Satisfactory ([#16023](https://github.com/community-scripts/ProxmoxVE/pull/16023))
- OmniTools ([#16032](https://github.com/community-scripts/ProxmoxVE/pull/16032))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Apache Tika: Remove software-properties-common from Apache Tika install [@andygrunwald](https://github.com/andygrunwald) ([#16054](https://github.com/community-scripts/ProxmoxVE/pull/16054))
- Fix inventree missing db engine (upstream issue / postinstall) [@MickLesk](https://github.com/MickLesk) ([#16022](https://github.com/community-scripts/ProxmoxVE/pull/16022))
- OPNsense VM: answer console password prompt explicitly, add inter-key delay [@MickLesk](https://github.com/MickLesk) ([#16021](https://github.com/community-scripts/ProxmoxVE/pull/16021))
- [endurain] add node update to update script [@johanngrobe](https://github.com/johanngrobe) ([#16014](https://github.com/community-scripts/ProxmoxVE/pull/16014))
- #### 🔧 Refactor
- Apache Tika: Switch from Debian Bookworm to Debian Trixie and replace manual install of OpenJDK with setup_java [@andygrunwald](https://github.com/andygrunwald) ([#16036](https://github.com/community-scripts/ProxmoxVE/pull/16036))
### 💾 Core
- #### 🔧 Refactor
- core: improve OS mismatch message [@MickLesk](https://github.com/MickLesk) ([#16035](https://github.com/community-scripts/ProxmoxVE/pull/16035))
### 🧰 Tools
- #### 🔧 Refactor
- Improve command description for disabling pve-enterprise repo [@Marcondiro](https://github.com/Marcondiro) ([#16020](https://github.com/community-scripts/ProxmoxVE/pull/16020))
## 2026-07-25 ## 2026-07-25
### 🚀 Updated Scripts ### 🚀 Updated Scripts
+12
View File
@@ -0,0 +1,12 @@
## 2026-08-01
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Update bazarr-install.sh [@asylumexp](https://github.com/asylumexp) ([#16191](https://github.com/community-scripts/ProxmoxVE/pull/16191))
- fix romm missing 7z [@asylumexp](https://github.com/asylumexp) ([#16194](https://github.com/community-scripts/ProxmoxVE/pull/16194))
- #### 🔧 Refactor
- add CLEANUPARR_CONFIG_PATH, CLEANUPARR_LOGS_PATH vars [@asylumexp](https://github.com/asylumexp) ([#16193](https://github.com/community-scripts/ProxmoxVE/pull/16193))
+44 -154
View File
@@ -83,6 +83,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
@@ -96,7 +99,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
<details> <details>
<summary><h4>July (25 entries)</h4></summary> <summary><h4>August (1 entries)</h4></summary>
[View August 2026 Changelog](.github/changelogs/2026/08.md)
</details>
<details>
<summary><h4>July (31 entries)</h4></summary>
[View July 2026 Changelog](.github/changelogs/2026/07.md) [View July 2026 Changelog](.github/changelogs/2026/07.md)
@@ -508,6 +518,39 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details> </details>
## 2026-08-02
### 🆕 New Scripts
- Portainer as Addon [@MickLesk](https://github.com/MickLesk) ([#16200](https://github.com/community-scripts/ProxmoxVE/pull/16200))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- LibreNMS: Ensure ipmitool dependency is installed [@tremor021](https://github.com/tremor021) ([#16219](https://github.com/community-scripts/ProxmoxVE/pull/16219))
- Bitfocus Companion: add libatomic1 dependency [@tremor021](https://github.com/tremor021) ([#16212](https://github.com/community-scripts/ProxmoxVE/pull/16212))
- fix(dispatcharr): add recordings and dvr queues to celery worker [@eXistC](https://github.com/eXistC) ([#16204](https://github.com/community-scripts/ProxmoxVE/pull/16204))
- add retry for uv - same as immich [@asylumexp](https://github.com/asylumexp) ([#16203](https://github.com/community-scripts/ProxmoxVE/pull/16203))
- Fix for cross-seed node version regression [@TorinFrancis](https://github.com/TorinFrancis) ([#16209](https://github.com/community-scripts/ProxmoxVE/pull/16209))
- #### 🔧 Refactor
- chore: remove portainer setup from several scripts (moved to addon) [@MickLesk](https://github.com/MickLesk) ([#16201](https://github.com/community-scripts/ProxmoxVE/pull/16201))
## 2026-08-01
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Update bazarr-install.sh [@asylumexp](https://github.com/asylumexp) ([#16191](https://github.com/community-scripts/ProxmoxVE/pull/16191))
- fix romm missing 7z [@asylumexp](https://github.com/asylumexp) ([#16194](https://github.com/community-scripts/ProxmoxVE/pull/16194))
- #### 🔧 Refactor
- add CLEANUPARR_CONFIG_PATH, CLEANUPARR_LOGS_PATH vars [@asylumexp](https://github.com/asylumexp) ([#16193](https://github.com/community-scripts/ProxmoxVE/pull/16193))
## 2026-07-31 ## 2026-07-31
### 🚀 Updated Scripts ### 🚀 Updated Scripts
@@ -1095,156 +1138,3 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### 🐞 Bug Fixes - #### 🐞 Bug Fixes
- Removed deprecated parameter in Filebrowser Quantum configuration [@alpargatagazer](https://github.com/alpargatagazer) ([#15573](https://github.com/community-scripts/ProxmoxVE/pull/15573)) - Removed deprecated parameter in Filebrowser Quantum configuration [@alpargatagazer](https://github.com/alpargatagazer) ([#15573](https://github.com/community-scripts/ProxmoxVE/pull/15573))
## 2026-07-02
### 🆕 New Scripts
- Rackula ([#15465](https://github.com/community-scripts/ProxmoxVE/pull/15465))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- typo: fix npm update to npm install for n8n [@MickLesk](https://github.com/MickLesk) ([#15545](https://github.com/community-scripts/ProxmoxVE/pull/15545))
- #### ✨ New Features
- Frigate: bump to v0.17.2 [@MickLesk](https://github.com/MickLesk) ([#15536](https://github.com/community-scripts/ProxmoxVE/pull/15536))
- #### 💥 Breaking Changes
- Revert "Immich v3.0.0" [@MickLesk](https://github.com/MickLesk) ([#15558](https://github.com/community-scripts/ProxmoxVE/pull/15558))
- Immich v3.0.0 [@vhsdream](https://github.com/vhsdream) ([#15153](https://github.com/community-scripts/ProxmoxVE/pull/15153))
### 💾 Core
- #### 🐞 Bug Fixes
- tools.func: configure pnpm to allow all build scripts for environments [@MickLesk](https://github.com/MickLesk) ([#15532](https://github.com/community-scripts/ProxmoxVE/pull/15532))
- #### ✨ New Features
- feat(build.func): add var_ignore_disable to bypass disabled-script guard [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15544](https://github.com/community-scripts/ProxmoxVE/pull/15544))
## 2026-07-01
### 🆕 New Scripts
- iVentoy ([#15503](https://github.com/community-scripts/ProxmoxVE/pull/15503))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Stirling-PDF: patch libicudata execstack flag for LXC container compatibility [@MickLesk](https://github.com/MickLesk) ([#15531](https://github.com/community-scripts/ProxmoxVE/pull/15531))
- FlowiseAI: align install to use pnpm instead of npm to fix missing dependencies [@MickLesk](https://github.com/MickLesk) ([#15530](https://github.com/community-scripts/ProxmoxVE/pull/15530))
- Vaultwarden: handle version detection failure gracefully in update [@MickLesk](https://github.com/MickLesk) ([#15526](https://github.com/community-scripts/ProxmoxVE/pull/15526))
- homarr: fix: update-fail [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15512](https://github.com/community-scripts/ProxmoxVE/pull/15512))
- n8n: pin version to 2.27.5 [@tremor021](https://github.com/tremor021) ([#15516](https://github.com/community-scripts/ProxmoxVE/pull/15516))
- #### ✨ New Features
- [arm64] feat: iventory arm64 support [@asylumexp](https://github.com/asylumexp) ([#15521](https://github.com/community-scripts/ProxmoxVE/pull/15521))
### 💾 Core
- #### 🐞 Bug Fixes
- core: fix SDN vnet network parameter to use bridge instead of vnet [@MickLesk](https://github.com/MickLesk) ([#15527](https://github.com/community-scripts/ProxmoxVE/pull/15527))
- tools.func: use safe variable expansion in check_for_gh_release RETURN trap [@MickLesk](https://github.com/MickLesk) ([#15529](https://github.com/community-scripts/ProxmoxVE/pull/15529))
## 2026-06-30
### 🚀 Updated Scripts
- #### 🔧 Refactor
- Refactor: Use heredoc when creating env files and creds/other [@tremor021](https://github.com/tremor021) ([#15469](https://github.com/community-scripts/ProxmoxVE/pull/15469))
### 🧰 Tools
- #### 🐞 Bug Fixes
- [tools/pve/*.sh] https://download.proxmox.com -> http://download.proxmox.com (PVE8 Only) [@galeksandrp](https://github.com/galeksandrp) ([#15498](https://github.com/community-scripts/ProxmoxVE/pull/15498))
## 2026-06-29
### 🆕 New Scripts
- Koffan ([#15467](https://github.com/community-scripts/ProxmoxVE/pull/15467))
- Etherpad ([#15468](https://github.com/community-scripts/ProxmoxVE/pull/15468))
- Flame ([#15464](https://github.com/community-scripts/ProxmoxVE/pull/15464))
### 🚀 Updated Scripts
- chore(ct): sync snapotter defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15472](https://github.com/community-scripts/ProxmoxVE/pull/15472))
- #### 🐞 Bug Fixes
- feat: update nginx proxy manager to trixie [@asylumexp](https://github.com/asylumexp) ([#15457](https://github.com/community-scripts/ProxmoxVE/pull/15457))
### 💾 Core
- #### ✨ New Features
- [tools.func]: add edit_yaml_config function [@tremor021](https://github.com/tremor021) ([#15484](https://github.com/community-scripts/ProxmoxVE/pull/15484))
## 2026-06-28
### 🚀 Updated Scripts
- #### 💥 Breaking Changes
- remove: promtail as EOL and other fixes [@asylumexp](https://github.com/asylumexp) ([#15455](https://github.com/community-scripts/ProxmoxVE/pull/15455))
## 2026-06-27
### 🆕 New Scripts
- tool: add disk-health tool (SMART + NVMe) [@MickLesk](https://github.com/MickLesk) ([#15417](https://github.com/community-scripts/ProxmoxVE/pull/15417))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Deluge openssl fix [@asylumexp](https://github.com/asylumexp) ([#15435](https://github.com/community-scripts/ProxmoxVE/pull/15435))
- fix command syntax in tunarr.sh [@asylumexp](https://github.com/asylumexp) ([#15434](https://github.com/community-scripts/ProxmoxVE/pull/15434))
- #### 🔧 Refactor
- Storyteller: bump Node.js version to Node 24 [@thinusn](https://github.com/thinusn) ([#15439](https://github.com/community-scripts/ProxmoxVE/pull/15439))
### ❔ Uncategorized
- fix(endurain): replace Poetry/uv-pip backend setup with uv sync --frozen --no-dev [@Copilot](https://github.com/Copilot) ([#15429](https://github.com/community-scripts/ProxmoxVE/pull/15429))
## 2026-06-26
### 🚀 Updated Scripts
- Termix: Update Nginx configuration file paths [@xyzulu](https://github.com/xyzulu) ([#15397](https://github.com/community-scripts/ProxmoxVE/pull/15397))
- #### 🐞 Bug Fixes
- Docuseal: use real SECRET_KEY_BASE for db:migrate on update [@MickLesk](https://github.com/MickLesk) ([#15411](https://github.com/community-scripts/ProxmoxVE/pull/15411))
- bun: correct install for degoog [@MickLesk](https://github.com/MickLesk) ([#15412](https://github.com/community-scripts/ProxmoxVE/pull/15412))
- fix databasus update/install errors [@asylumexp](https://github.com/asylumexp) ([#15403](https://github.com/community-scripts/ProxmoxVE/pull/15403))
### 💾 Core
- #### 🐞 Bug Fixes
- tools.func: fix setup_docker - don't abort update on docker pull failure [@MickLesk](https://github.com/MickLesk) ([#15410](https://github.com/community-scripts/ProxmoxVE/pull/15410))
- fix(build.func): set /dev/kfd GID in fix_gpu_gids for AMD ROCm [@jamiej](https://github.com/jamiej) ([#15401](https://github.com/community-scripts/ProxmoxVE/pull/15401))
- fix alpine mktmp error [@asylumexp](https://github.com/asylumexp) ([#15398](https://github.com/community-scripts/ProxmoxVE/pull/15398))
### 🧰 Tools
- #### 🔧 Refactor
- Refactor: reduce IP-Tag resource usage and clean up ShellCheck findings [@MickLesk](https://github.com/MickLesk) ([#15418](https://github.com/community-scripts/ProxmoxVE/pull/15418))
- QoL: kernel-clean: Validate kernel selection input [@MickLesk](https://github.com/MickLesk) ([#15414](https://github.com/community-scripts/ProxmoxVE/pull/15414))
- QoL: clean-lxcs exclude matching and set -e cancel handling [@MickLesk](https://github.com/MickLesk) ([#15413](https://github.com/community-scripts/ProxmoxVE/pull/15413))
- QoL: Harden microcode download/install in microcode and pbs-microcode [@MickLesk](https://github.com/MickLesk) ([#15415](https://github.com/community-scripts/ProxmoxVE/pull/15415))
- QoL: scaling-governor extend selection and guard missing cpufreq [@MickLesk](https://github.com/MickLesk) ([#15416](https://github.com/community-scripts/ProxmoxVE/pull/15416))
+1 -1
View File
@@ -30,7 +30,7 @@ function update_script() {
exit exit
fi fi
NODE_VERSION="22" setup_nodejs NODE_VERSION="24" setup_nodejs
RELEASE=$(get_latest_github_release "actualbudget/actual") RELEASE=$(get_latest_github_release "actualbudget/actual")
if [[ -f /opt/actualbudget-data/config.json ]]; then if [[ -f /opt/actualbudget-data/config.json ]]; then
if check_for_gh_release "actualbudget" "actualbudget/actual"; then if check_for_gh_release "actualbudget" "actualbudget/actual"; then
+10 -1
View File
@@ -118,10 +118,19 @@ function update_script() {
export UV_COMPILE_BYTECODE="1" export UV_COMPILE_BYTECODE="1"
export UV_LINK_MODE="copy" export UV_LINK_MODE="copy"
export UV_NATIVE_TLS="1" export UV_NATIVE_TLS="1"
export UV_HTTP_TIMEOUT="300"
export RUSTUP_PERMIT_COPY_RENAME="true" export RUSTUP_PERMIT_COPY_RENAME="true"
export UV_PYTHON_INSTALL_DIR="/usr/local/bin" export UV_PYTHON_INSTALL_DIR="/usr/local/bin"
cd /opt/authentik cd /opt/authentik
$STD uv sync --frozen --no-install-project --no-dev for attempt in 1 2 3; do
if [[ $attempt -eq 3 ]]; then
$STD uv sync --frozen --no-install-project --no-dev
break
fi
$STD uv sync --frozen --no-install-project --no-dev && break
msg_warn "uv sync attempt $attempt failed, retrying..."
sleep $((attempt * 15))
done
chown -R authentik:authentik /opt/authentik chown -R authentik:authentik /opt/authentik
msg_ok "Updated python server" msg_ok "Updated python server"
+2
View File
@@ -30,6 +30,8 @@ function update_script() {
exit 1 exit 1
fi fi
ensure_dependencies libatomic1
RELEASE_JSON=$(curl -fsSL "https://api.bitfocus.io/v1/product/companion/packages?limit=20") RELEASE_JSON=$(curl -fsSL "https://api.bitfocus.io/v1/product/companion/packages?limit=20")
PACKAGE_JSON=$(echo "$RELEASE_JSON" | jq -c \ PACKAGE_JSON=$(echo "$RELEASE_JSON" | jq -c \
--arg target "linux-$(arch_resolve "tgz" "arm64-tgz")" \ --arg target "linux-$(arch_resolve "tgz" "arm64-tgz")" \
+13 -1
View File
@@ -33,7 +33,19 @@ function update_script() {
systemctl stop cleanuparr systemctl stop cleanuparr
msg_ok "Stopped Service" msg_ok "Stopped Service"
create_backup /opt/cleanuparr/config if [[ ! -d /etc/cleanuparr ]]; then
msg_info "Migrating Configuration to /etc/cleanuparr"
mv /opt/cleanuparr/config /etc/cleanuparr
mkdir -p /etc/cleanuparr /var/log/cleanuparr
rm -rf /etc/cleanuparr/logs
sed -i -e 's|^Environment="CONFIG_DIR=.*|Environment="CLEANUPARR_CONFIG_PATH=/etc/cleanuparr"|' \
-e '/^Environment="CLEANUPARR_CONFIG_PATH=/a Environment="CLEANUPARR_LOGS_PATH=/var/log/cleanuparr"' \
/etc/systemd/system/cleanuparr.service
systemctl daemon-reload
msg_ok "Migrated Configuration to /etc/cleanuparr"
fi
create_backup /etc/cleanuparr
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-$(arch_resolve).zip" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-$(arch_resolve).zip"
+1 -1
View File
@@ -25,7 +25,7 @@ function update_script() {
check_container_storage check_container_storage
check_container_resources check_container_resources
NODE_VERSION="26" setup_nodejs NODE_VERSION="24" setup_nodejs
ensure_dependencies build-essential ensure_dependencies build-essential
if command -v cross-seed &>/dev/null; then if command -v cross-seed &>/dev/null; then
+5 -16
View File
@@ -37,20 +37,9 @@ function update_script() {
fi fi
if docker ps -a --format '{{.Image}}' | grep -q '^portainer/portainer-ce:latest$'; then if docker ps -a --format '{{.Image}}' | grep -q '^portainer/portainer-ce:latest$'; then
msg_info "Updating Portainer" msg_warn "Portainer is now managed by a dedicated addon script and is no longer updated here."
$STD docker pull portainer/portainer-ce:latest echo -e "${TAB}Update/migrate it with:"
$STD docker stop portainer echo -e "${TAB}${TAB}${GN}bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)\"${CL}"
$STD 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 fi
if docker ps -a --format '{{.Names}}' | grep -q '^portainer_agent$'; then if docker ps -a --format '{{.Names}}' | grep -q '^portainer_agent$'; then
@@ -77,5 +66,5 @@ description
msg_ok "Completed successfully!\n" msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} If you installed Portainer, access it at the following URL:${CL}" echo -e "${INFO}${YW} Portainer is available as a separate addon. Install it with:${CL}"
echo -e "${GATEWAY}${BGN}https://${IP}:9443${CL}" echo -e "${GATEWAY}${BGN}bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)\"${CL}"
+3
View File
@@ -28,6 +28,9 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
ensure_dependencies ipmitool
if check_for_gh_release "librenms" "librenms/librenms"; then if check_for_gh_release "librenms" "librenms/librenms"; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop php8.4-fpm librenms-scheduler.timer systemctl stop php8.4-fpm librenms-scheduler.timer
+2
View File
@@ -43,6 +43,8 @@ function update_script() {
fi fi
msg_ok "New version available: ${LATEST}" msg_ok "New version available: ${LATEST}"
NODE_VERSION="26" setup_nodejs
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop omniroute systemctl stop omniroute
msg_ok "Stopped Service" msg_ok "Stopped Service"
+6
View File
@@ -30,6 +30,12 @@ function update_script() {
exit exit
fi fi
if [[ ! -x /usr/bin/7zz || ! -x /usr/bin/bsdtar ]]; then
msg_info "Installing Archive Tools"
$STD apt install -y 7zip-standalone libarchive-tools
msg_ok "Installed Archive Tools"
fi
NODE_VERSION="24" setup_nodejs NODE_VERSION="24" setup_nodejs
if check_for_gh_release "romm" "rommapp/romm"; then if check_for_gh_release "romm" "rommapp/romm"; then
+2
View File
@@ -34,6 +34,8 @@ function update_script() {
systemctl stop watcharr systemctl stop watcharr
msg_ok "Stopped Service" msg_ok "Stopped Service"
NODE_VERSION="24" setup_nodejs
create_backup /opt/watcharr/server/data create_backup /opt/watcharr/server/data
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "watcharr" "sbondCo/Watcharr" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "watcharr" "sbondCo/Watcharr" "tarball"
restore_backup restore_backup
+1 -1
View File
@@ -19,7 +19,7 @@ $STD apt install -y \
g++ g++
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs NODE_VERSION="24" setup_nodejs
create_self_signed_cert create_self_signed_cert
msg_info "Installing Actual Budget" msg_info "Installing Actual Budget"
+12 -23
View File
@@ -26,23 +26,21 @@ msg_ok "Installed Docker"
get_latest_release() { get_latest_release() {
curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4 curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4
} }
PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer")
DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose") DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose")
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent") PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent")
read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt read -r -p "${TAB3}Would you like to add Docker Compose? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION" msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
docker volume create portainer_data >/dev/null DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
$STD docker run -d \ mkdir -p "$DOCKER_CONFIG"/cli-plugins
-p 8000:8000 \ curl -fsSL https://github.com/docker/compose/releases/download/"$DOCKER_COMPOSE_LATEST_VERSION"/docker-compose-linux-$(arch_resolve "x86_64" "aarch64") -o ~/.docker/cli-plugins/docker-compose
-p 9443:9443 \ chmod +x "$DOCKER_CONFIG"/cli-plugins/docker-compose
--name=portainer \ msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
--restart=always \ fi
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \ if prompt_confirm "${TAB3}Would you like to install Portainer (UI) via the community-scripts addon?" "n" 60; then
portainer/portainer-ce:latest bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)" <<<"y"
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
else else
read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
@@ -57,21 +55,12 @@ else
msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION"
fi fi
fi fi
read -r -p "${TAB3}Would you like to add Docker Compose? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p "$DOCKER_CONFIG"/cli-plugins
curl -fsSL https://github.com/docker/compose/releases/download/"$DOCKER_COMPOSE_LATEST_VERSION"/docker-compose-linux-$(arch_resolve "x86_64" "aarch64") -o ~/.docker/cli-plugins/docker-compose
chmod +x "$DOCKER_CONFIG"/cli-plugins/docker-compose
msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
fi
read -r -p "${TAB3}Would you like to expose the Docker TCP socket? <y/N> " prompt read -r -p "${TAB3}Would you like to expose the Docker TCP socket? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Exposing Docker TCP socket" msg_info "Exposing Docker TCP socket"
$STD mkdir -p /etc/docker $STD mkdir -p /etc/docker
$STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json $STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' >/etc/docker/daemon.json
$STD rc-service docker restart $STD rc-service docker restart
msg_ok "Exposed Docker TCP socket at tcp://+:2375" msg_ok "Exposed Docker TCP socket at tcp://+:2375"
fi fi
+10 -1
View File
@@ -122,9 +122,18 @@ export UV_NO_BINARY_PACKAGE="cryptography lxml python-kadmin-rs xmlsec"
export UV_COMPILE_BYTECODE="1" export UV_COMPILE_BYTECODE="1"
export UV_LINK_MODE="copy" export UV_LINK_MODE="copy"
export UV_NATIVE_TLS="1" export UV_NATIVE_TLS="1"
export UV_HTTP_TIMEOUT="300"
export UV_PYTHON_INSTALL_DIR="/usr/local/bin" export UV_PYTHON_INSTALL_DIR="/usr/local/bin"
cd /opt/authentik cd /opt/authentik
$STD uv sync --frozen --no-install-project --no-dev for attempt in 1 2 3; do
if [[ $attempt -eq 3 ]]; then
$STD uv sync --frozen --no-install-project --no-dev
break
fi
$STD uv sync --frozen --no-install-project --no-dev && break
msg_warn "uv sync attempt $attempt failed, retrying..."
sleep $((attempt * 15))
done
cp /opt/authentik/authentik/sources/kerberos/krb5.conf /etc/krb5.conf cp /opt/authentik/authentik/sources/kerberos/krb5.conf /etc/krb5.conf
msg_ok "Setup python server" msg_ok "Setup python server"
+1
View File
@@ -22,6 +22,7 @@ chmod 775 /opt/bazarr /var/lib/bazarr/
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
$STD uv venv --clear /opt/bazarr/venv --python 3.12 $STD uv venv --clear /opt/bazarr/venv --python 3.12
$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3 $STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
$STD uv pip install psycopg2-binary --python /opt/bazarr/venv/bin/python3
msg_ok "Installed Bazarr" msg_ok "Installed Bazarr"
msg_info "Creating Service" msg_info "Creating Service"
+3 -1
View File
@@ -14,7 +14,9 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt install -y libusb-1.0-0 $STD apt install -y \
libusb-1.0-0 \
libatomic1
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Fetching Latest Bitfocus Companion Release" msg_info "Fetching Latest Bitfocus Companion Release"
+3 -1
View File
@@ -16,6 +16,7 @@ update_os
fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-$(arch_resolve).zip" fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-$(arch_resolve).zip"
msg_info "Creating Service" msg_info "Creating Service"
mkdir -p /etc/cleanuparr /var/log/cleanuparr
cat <<EOF >/etc/systemd/system/cleanuparr.service cat <<EOF >/etc/systemd/system/cleanuparr.service
[Unit] [Unit]
Description=Cleanuparr Daemon Description=Cleanuparr Daemon
@@ -29,7 +30,8 @@ ExecStart=/opt/cleanuparr/Cleanuparr
Restart=on-failure Restart=on-failure
RestartSec=5 RestartSec=5
Environment="PORT=11011" Environment="PORT=11011"
Environment="CONFIG_DIR=/opt/cleanuparr/config" Environment="CLEANUPARR_CONFIG_PATH=/etc/cleanuparr"
Environment="CLEANUPARR_LOGS_PATH=/var/log/cleanuparr"
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
+1 -1
View File
@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
$STD apt install -y build-essential $STD apt install -y build-essential
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
NODE_VERSION="26" setup_nodejs NODE_VERSION="24" setup_nodejs
msg_info "Setup Cross-Seed" msg_info "Setup Cross-Seed"
$STD npm install cross-seed@latest -g $STD npm install cross-seed@latest -g
+1 -1
View File
@@ -174,7 +174,7 @@ cd /opt/dispatcharr
set -a set -a
source .env source .env
set +a set +a
exec uv run celery -A dispatcharr worker -l info -c 4 exec uv run celery -A dispatcharr worker -l info -c 4 -Q celery,recordings,dvr,default
EOF EOF
chmod +x /opt/dispatcharr/start-celery.sh chmod +x /opt/dispatcharr/start-celery.sh
+4 -4
View File
@@ -15,11 +15,11 @@ update_os
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_github_release "portainer/agent") PORTAINER_AGENT_LATEST_VERSION=$(get_latest_github_release "portainer/agent")
read -r -p "${TAB3}Would you like to add Portainer (UI)? <y/N> " prompt setup_docker
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
DOCKER_PORTAINER="true" setup_docker if prompt_confirm "${TAB3}Would you like to install Portainer (UI) via the community-scripts addon?" "n" 60; then
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)" <<<"y"
else else
setup_docker
read -r -p "${TAB3}Would you like to install the Portainer Agent (for remote management)? <y/N> " prompt_agent read -r -p "${TAB3}Would you like to install the Portainer Agent (for remote management)? <y/N> " prompt_agent
if [[ ${prompt_agent,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt_agent,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" msg_info "Installing Portainer Agent $PORTAINER_AGENT_LATEST_VERSION"
+2 -1
View File
@@ -32,7 +32,8 @@ get_latest_release() {
CORE_LATEST_VERSION=$(get_latest_release "home-assistant/core") CORE_LATEST_VERSION=$(get_latest_release "home-assistant/core")
DOCKER_PORTAINER="true" setup_docker setup_docker
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)" <<<"y"
msg_info "Pulling Home Assistant $CORE_LATEST_VERSION Image" msg_info "Pulling Home Assistant $CORE_LATEST_VERSION Image"
$STD docker pull ghcr.io/home-assistant/home-assistant:stable $STD docker pull ghcr.io/home-assistant/home-assistant:stable
+2 -1
View File
@@ -25,7 +25,8 @@ $STD apt install -y \
rrdtool \ rrdtool \
snmp \ snmp \
snmpd \ snmpd \
whois whois \
ipmitool
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Installing Python Dependencies" msg_info "Installing Python Dependencies"
+1 -1
View File
@@ -13,7 +13,7 @@ setting_up_container
network_check network_check
update_os update_os
NODE_VERSION="24" setup_nodejs NODE_VERSION="26" setup_nodejs
msg_info "Installing OmniRoute" msg_info "Installing OmniRoute"
$STD npm install -g omniroute@latest $STD npm install -g omniroute@latest
+2
View File
@@ -37,6 +37,8 @@ $STD apt install -y \
redis-server \ redis-server \
redis-tools \ redis-tools \
p7zip-full \ p7zip-full \
7zip-standalone \
libarchive-tools \
tzdata tzdata
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
+1 -1
View File
@@ -18,7 +18,7 @@ $STD apt install -y gcc
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
setup_go setup_go
NODE_VERSION="22" setup_nodejs NODE_VERSION="24" setup_nodejs
fetch_and_deploy_gh_release "watcharr" "sbondCo/Watcharr" "tarball" fetch_and_deploy_gh_release "watcharr" "sbondCo/Watcharr" "tarball"
msg_info "Setup Watcharr" msg_info "Setup Watcharr"
+2 -60
View File
@@ -4599,20 +4599,17 @@ setup_composer() {
# - By default uses distro repository (docker.io) for stability # - By default uses distro repository (docker.io) for stability
# - Optionally uses official Docker repository for latest features # - Optionally uses official Docker repository for latest features
# - Detects and migrates old Docker installations # - Detects and migrates old Docker installations
# - Optional: Installs/Updates Portainer CE
# - Updates running containers interactively # - Updates running containers interactively
# - Cleans up legacy repository files # - Cleans up legacy repository files
# #
# Usage: # Usage:
# setup_docker # Uses official Docker repo (recommended) # setup_docker # Uses official Docker repo (recommended)
# USE_DOCKER_REPO=false setup_docker # Uses distro docker.io package # USE_DOCKER_REPO=false setup_docker # Uses distro docker.io package
# DOCKER_PORTAINER="true" setup_docker
# DOCKER_LOG_DRIVER="json-file" setup_docker # DOCKER_LOG_DRIVER="json-file" setup_docker
# #
# Variables: # Variables:
# USE_DOCKER_REPO - Set to "false" to use distro docker.io package # USE_DOCKER_REPO - Set to "false" to use distro docker.io package
# (default: true, uses official Docker repository) # (default: true, uses official Docker repository)
# DOCKER_PORTAINER - Install Portainer CE (optional, "true" to enable)
# DOCKER_LOG_DRIVER - Log driver (optional, default: "journald") # DOCKER_LOG_DRIVER - Log driver (optional, default: "journald")
# DOCKER_SKIP_UPDATES - Skip container update check (optional, "true" to skip) # DOCKER_SKIP_UPDATES - Skip container update check (optional, "true" to skip)
# #
@@ -4623,7 +4620,7 @@ setup_composer() {
# - Interactive per-container update prompt (Y/N, 60 s auto-no) # - Interactive per-container update prompt (Y/N, 60 s auto-no)
# - Compose-managed containers: full restart via docker compose # - Compose-managed containers: full restart via docker compose
# - Standalone containers: image pull only, no destructive stop/rm # - Standalone containers: image pull only, no destructive stop/rm
# - Portainer installation and update support # - Portainer is no longer managed here; use tools/addon/portainer.sh
# - Set DOCKER_NONINTERACTIVE=1 to skip interactive prompts (CI/unattended) # - Set DOCKER_NONINTERACTIVE=1 to skip interactive prompts (CI/unattended)
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
_docker_is_noninteractive() { _docker_is_noninteractive() {
@@ -4632,7 +4629,6 @@ _docker_is_noninteractive() {
setup_docker() { setup_docker() {
local docker_installed=false local docker_installed=false
local portainer_installed=false
local USE_DOCKER_REPO="${USE_DOCKER_REPO:-true}" local USE_DOCKER_REPO="${USE_DOCKER_REPO:-true}"
# Check if Docker is already installed # Check if Docker is already installed
@@ -4642,12 +4638,6 @@ setup_docker() {
msg_info "Docker $DOCKER_CURRENT_VERSION detected" msg_info "Docker $DOCKER_CURRENT_VERSION detected"
fi fi
# Check if Portainer is running
if docker ps --format '{{.Names}}' 2>/dev/null | grep -q '^portainer$'; then
portainer_installed=true
msg_info "Portainer container detected"
fi
# Scenario 1: Use distro repository (opt-out via USE_DOCKER_REPO=false) # Scenario 1: Use distro repository (opt-out via USE_DOCKER_REPO=false)
if [[ "$USE_DOCKER_REPO" != "true" && "$USE_DOCKER_REPO" != "TRUE" && "$USE_DOCKER_REPO" != "1" ]]; then if [[ "$USE_DOCKER_REPO" != "true" && "$USE_DOCKER_REPO" != "TRUE" && "$USE_DOCKER_REPO" != "1" ]]; then
@@ -4761,54 +4751,6 @@ EOF
systemctl enable -q --now docker systemctl enable -q --now docker
fi fi
# Portainer Management (common for both modes)
if [[ "${DOCKER_PORTAINER:-}" == "true" ]]; then
if [ "$portainer_installed" = true ]; then
msg_info "Checking for Portainer updates"
PORTAINER_CURRENT=$(docker inspect portainer --format='{{.Config.Image}}' 2>/dev/null | cut -d':' -f2)
PORTAINER_LATEST=$(curl -fsSL https://registry.hub.docker.com/v2/repositories/portainer/portainer-ce/tags?page_size=100 | grep -oP '"name":"\K[0-9]+\.[0-9]+\.[0-9]+"' | head -1 | tr -d '"')
if [ "$PORTAINER_CURRENT" != "$PORTAINER_LATEST" ]; then
if _docker_is_noninteractive; then
msg_info "Skipping Portainer update prompt (non-interactive)"
else
read -r -p "${TAB3}Update Portainer $PORTAINER_CURRENT$PORTAINER_LATEST? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Updating Portainer"
docker stop portainer
docker rm portainer
docker pull portainer/portainer-ce:latest
docker run -d \
-p 9000:9000 \
-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 to $PORTAINER_LATEST"
fi
fi
else
msg_ok "Portainer is up-to-date ($PORTAINER_CURRENT)"
fi
else
msg_info "Installing Portainer"
docker volume create portainer_data
docker run -d \
-p 9000:9000 \
-p 9443:9443 \
--name=portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
LOCAL_IP=$(hostname -I | awk '{print $1}')
msg_ok "Installed Portainer (http://${LOCAL_IP}:9000)"
fi
fi
# Container Update Check # Container Update Check
# - Skipped entirely when running unattended / non-interactive # - Skipped entirely when running unattended / non-interactive
# - Compose-managed containers: offered via Y/N → docker compose pull + up -d # - Compose-managed containers: offered via Y/N → docker compose pull + up -d
@@ -4824,7 +4766,7 @@ EOF
name=$(echo "$line" | awk '{print $1}') name=$(echo "$line" | awk '{print $1}')
image=$(echo "$line" | awk '{print $2}') image=$(echo "$line" | awk '{print $2}')
# Portainer containers are handled by the dedicated block above # Portainer is managed by its own addon script, not this generic loop
[[ "$name" == "portainer" || "$name" == "portainer_agent" ]] && continue [[ "$name" == "portainer" || "$name" == "portainer_agent" ]] && continue
current_digest=$(docker inspect "$name" --format='{{.Image}}' 2>/dev/null | cut -d':' -f2 | cut -c1-12) current_digest=$(docker inspect "$name" --format='{{.Image}}' 2>/dev/null | cut -d':' -f2 | cut -c1-12)
+190
View File
@@ -0,0 +1,190 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/portainer/portainer
if ! command -v curl &>/dev/null; then
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
apt-get update >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1
fi
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) 2>/dev/null || true
declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "portainer" "addon"
# Enable error handling
set -Eeuo pipefail
trap 'error_handler' ERR
# ==============================================================================
# CONFIGURATION
# ==============================================================================
APP="Portainer"
APP_TYPE="addon"
INSTALL_PATH="/opt/portainer"
COMPOSE_FILE="${INSTALL_PATH}/compose.yaml"
DEFAULT_PORT=9443
# Initialize all core functions (colors, formatting, icons, STD mode)
load_functions
# ==============================================================================
# UNINSTALL
# ==============================================================================
function uninstall() {
msg_info "Uninstalling ${APP}"
if [[ -f "$COMPOSE_FILE" ]]; then
msg_info "Stopping and removing Docker containers"
cd "$INSTALL_PATH"
$STD docker compose down --volumes --remove-orphans
msg_ok "Stopped and removed Docker containers"
fi
rm -rf "$INSTALL_PATH"
rm -f "/usr/local/bin/update_portainer"
msg_ok "${APP} has been uninstalled"
}
# ==============================================================================
# UPDATE
# ==============================================================================
function update() {
msg_info "Pulling latest ${APP} image"
cd "$INSTALL_PATH"
$STD docker compose pull
msg_ok "Pulled latest image"
msg_info "Restarting ${APP}"
$STD docker compose up -d --remove-orphans
msg_ok "Restarted ${APP}"
msg_ok "Updated successfully"
exit
}
# ==============================================================================
# CHECK DOCKER
# ==============================================================================
function check_docker() {
if ! command -v docker &>/dev/null; then
msg_error "Docker is not installed. This script requires an existing Docker LXC. Exiting."
exit 10
fi
if ! docker compose version &>/dev/null; then
msg_error "Docker Compose plugin is not available. Please install it before running this script. Exiting."
exit 10
fi
msg_ok "Docker $(docker --version | cut -d' ' -f3 | tr -d ',') and Docker Compose are available"
}
# ==============================================================================
# CHECK EXISTING CONTAINER
# ==============================================================================
function check_existing_container() {
# Guards against clobbering a Portainer container not managed by this addon
# (e.g. Business/Enterprise Edition installed manually or via the legacy docker.sh flow)
if docker ps -a --format '{{.Names}}' | grep -q '^portainer$'; then
msg_error "A container named 'portainer' already exists but is not managed by this addon."
msg_error "This may be a Portainer Business/Enterprise Edition install or a manual setup."
msg_error "Remove/rename that container first, or manage it manually. Exiting."
exit 10
fi
}
# ==============================================================================
# INSTALL
# ==============================================================================
function install() {
check_docker
check_existing_container
msg_info "Creating install directory"
mkdir -p "$INSTALL_PATH"
msg_ok "Created ${INSTALL_PATH}"
msg_info "Downloading Docker Compose file"
curl -fsSL "https://downloads.portainer.io/ce-sts/portainer-compose.yaml" -o "$COMPOSE_FILE"
msg_ok "Downloaded Docker Compose file"
msg_info "Starting ${APP}"
cd "$INSTALL_PATH"
$STD docker compose up -d
msg_ok "Started ${APP}"
# Create update script
msg_info "Creating update script"
cat <<'UPDATEEOF' >/usr/local/bin/update_portainer
#!/usr/bin/env bash
# Portainer Update Script
type=update bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)"
UPDATEEOF
chmod +x /usr/local/bin/update_portainer
msg_ok "Created update script (/usr/local/bin/update_portainer)"
echo ""
msg_ok "${APP} is reachable at: ${BL}https://${LOCAL_IP}:${DEFAULT_PORT}${CL}"
echo ""
msg_warn "On first access, you'll be prompted to create an admin account."
}
# ==============================================================================
# MAIN
# ==============================================================================
# Handle type=update (called from update script)
if [[ "${type:-}" == "update" ]]; then
header_info
if [[ -f "$COMPOSE_FILE" ]]; then
update
else
msg_error "${APP} is not installed. Nothing to update."
exit 233
fi
exit 0
fi
header_info
get_lxc_ip
# Check if already installed
if [[ -f "$COMPOSE_FILE" ]]; then
msg_warn "${APP} is already installed."
echo ""
echo -n "${TAB}Uninstall ${APP}? (y/N): "
read -r uninstall_prompt
if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then
uninstall
exit 0
fi
echo -n "${TAB}Update ${APP}? (y/N): "
read -r update_prompt
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
update
exit 0
fi
msg_warn "No action selected. Exiting."
exit 0
fi
# Fresh installation
msg_warn "${APP} is not installed."
echo ""
echo -e "${TAB}${INFO} This will install:"
echo -e "${TAB} - Portainer (via Docker Compose)"
echo ""
echo -n "${TAB}Install ${APP}? (y/N): "
read -r install_prompt
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
install
else
msg_warn "Installation cancelled. Exiting."
exit 0
fi
+6
View File
@@ -0,0 +1,6 @@
____ __ _
/ __ \____ _____/ /_____ _(_)___ ___ _____
/ /_/ / __ \/ ___/ __/ __ `/ / __ \/ _ \/ ___/
/ ____/ /_/ / / / /_/ /_/ / / / / / __/ /
/_/ \____/_/ \__/\__,_/_/_/ /_/\___/_/
+7 -7
View File
@@ -578,13 +578,6 @@ fi
msg_ok "Customized image" msg_ok "Customized image"
msg_info "Expanding root filesystem to ${DISK_SIZE}"
GROWN_FILE=$(mktemp --suffix=.qcow2)
qemu-img create -f qcow2 "$GROWN_FILE" "$DISK_SIZE" >/dev/null
virt-resize --quiet --expand /dev/sda1 "$WORK_FILE" "$GROWN_FILE" >/dev/null
mv -f "$GROWN_FILE" "$WORK_FILE"
msg_ok "Expanded root filesystem to ${DISK_SIZE}"
STORAGE_TYPE=$(pvesm status -storage "$STORAGE" | awk 'NR>1 {print $2}') STORAGE_TYPE=$(pvesm status -storage "$STORAGE" | awk 'NR>1 {print $2}')
case $STORAGE_TYPE in case $STORAGE_TYPE in
nfs | dir) nfs | dir)
@@ -666,6 +659,13 @@ DESCRIPTION=$(
EOF EOF
) )
qm set $VMID -description "$DESCRIPTION" >/dev/null qm set $VMID -description "$DESCRIPTION" >/dev/null
if [ -n "$DISK_SIZE" ]; then
msg_info "Resizing disk to $DISK_SIZE GB"
qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null
else
msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB"
qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null
fi
msg_ok "Created a Debian 13 VM ${CL}${BL}(${HN})" msg_ok "Created a Debian 13 VM ${CL}${BL}(${HN})"
if [ "$START_VM" == "yes" ]; then if [ "$START_VM" == "yes" ]; then
+7 -14
View File
@@ -519,20 +519,6 @@ echo -en "\e[1A\e[0K"
FILE=$(basename $URL) FILE=$(basename $URL)
msg_ok "Downloaded ${CL}${BL}${FILE}${CL}" msg_ok "Downloaded ${CL}${BL}${FILE}${CL}"
if ! command -v virt-resize &>/dev/null; then
msg_info "Installing libguestfs-tools"
apt-get update >/dev/null 2>&1
apt-get install -y libguestfs-tools >/dev/null 2>&1
msg_ok "Installed libguestfs-tools"
fi
msg_info "Expanding root filesystem to ${DISK_SIZE}"
GROWN_FILE=$(mktemp --suffix=.qcow2)
qemu-img create -f qcow2 "$GROWN_FILE" "$DISK_SIZE" >/dev/null
virt-resize --quiet --expand /dev/sda1 "$FILE" "$GROWN_FILE" >/dev/null
mv -f "$GROWN_FILE" "$FILE"
msg_ok "Expanded root filesystem to ${DISK_SIZE}"
STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}') STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}')
case $STORAGE_TYPE in case $STORAGE_TYPE in
nfs | dir) nfs | dir)
@@ -610,6 +596,13 @@ DESCRIPTION=$(
EOF EOF
) )
qm set "$VMID" -description "$DESCRIPTION" >/dev/null qm set "$VMID" -description "$DESCRIPTION" >/dev/null
if [ -n "$DISK_SIZE" ]; then
msg_info "Resizing disk to $DISK_SIZE GB"
qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null
else
msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB"
qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null
fi
msg_ok "Created a Debian 12 VM ${CL}${BL}(${HN})" msg_ok "Created a Debian 12 VM ${CL}${BL}(${HN})"
if [ "$START_VM" == "yes" ]; then if [ "$START_VM" == "yes" ]; then
+2 -5
View File
@@ -659,11 +659,8 @@ fi
# Resize disk to target size # Resize disk to target size
msg_info "Resizing disk image to ${DISK_SIZE}" msg_info "Resizing disk image to ${DISK_SIZE}"
GROWN_FILE=$(mktemp --suffix=.qcow2) qemu-img resize "$WORK_FILE" "${DISK_SIZE}" >/dev/null 2>&1
qemu-img create -f qcow2 "$GROWN_FILE" "${DISK_SIZE}" >/dev/null msg_ok "Resized disk image"
virt-resize --quiet --expand /dev/sda1 "$WORK_FILE" "$GROWN_FILE" >/dev/null
mv -f "$GROWN_FILE" "$WORK_FILE"
msg_ok "Resized disk image and expanded root filesystem"
# ============================================================================== # ==============================================================================
# VM CREATION # VM CREATION