mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-02-05 21:03:24 +01:00
Compare commits
4 Commits
main
...
fix/versio
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4e8021e6fd | ||
|
|
29cf802a9a | ||
|
|
649ad2cc8b | ||
|
|
760603da54 |
12
.github/changelogs/2025/12.md
generated
vendored
12
.github/changelogs/2025/12.md
generated
vendored
@@ -794,15 +794,3 @@
|
|||||||
- #### 📝 Script Information
|
- #### 📝 Script Information
|
||||||
|
|
||||||
- update selfhst icon-URLs to use @master path [@MickLesk](https://github.com/MickLesk) ([#9543](https://github.com/community-scripts/ProxmoxVE/pull/9543))
|
- update selfhst icon-URLs to use @master path [@MickLesk](https://github.com/MickLesk) ([#9543](https://github.com/community-scripts/ProxmoxVE/pull/9543))
|
||||||
|
|
||||||
|
|
||||||
## 2025-12-31
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- fix(wazuh): add LXC rootcheck exclusion to prevent false positives [@brettlyons](https://github.com/brettlyons) ([#10436](https://github.com/community-scripts/ProxmoxVE/pull/10436))
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Increase BentoPDF RAM requirement from 2GB to 4GB [@Copilot](https://github.com/Copilot) ([#10449](https://github.com/community-scripts/ProxmoxVE/pull/10449))
|
|
||||||
- fix(swizzin): Use HTTPS and add curl error handling [@fmcglinn](https://github.com/fmcglinn) ([#10440](https://github.com/community-scripts/ProxmoxVE/pull/10440))
|
|
||||||
156
.github/changelogs/2026/01.md
generated
vendored
156
.github/changelogs/2026/01.md
generated
vendored
@@ -1,156 +1,14 @@
|
|||||||
## 2026-01-31
|
## 2026-01-27
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- shelfmark ([#11371](https://github.com/community-scripts/ProxmoxVE/pull/11371))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix: yubal: add git [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11394](https://github.com/community-scripts/ProxmoxVE/pull/11394))
|
|
||||||
|
|
||||||
## 2026-01-30
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- languagetool ([#11370](https://github.com/community-scripts/ProxmoxVE/pull/11370))
|
|
||||||
- Ampache ([#11369](https://github.com/community-scripts/ProxmoxVE/pull/11369))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: remove redundant PHP_MODULE entries in several scripts [@MickLesk](https://github.com/MickLesk) ([#11362](https://github.com/community-scripts/ProxmoxVE/pull/11362))
|
|
||||||
- Refactor: Koillection [@MickLesk](https://github.com/MickLesk) ([#11361](https://github.com/community-scripts/ProxmoxVE/pull/11361))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core: meilisearch - add data migration for version upgrades [@MickLesk](https://github.com/MickLesk) ([#11356](https://github.com/community-scripts/ProxmoxVE/pull/11356))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [tools] Add `fetch_and_deploy_from_url()` [@tremor021](https://github.com/tremor021) ([#11376](https://github.com/community-scripts/ProxmoxVE/pull/11376))
|
|
||||||
- core: php - improve module handling and prevent installation failures [@MickLesk](https://github.com/MickLesk) ([#11358](https://github.com/community-scripts/ProxmoxVE/pull/11358))
|
|
||||||
|
|
||||||
## 2026-01-29
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Alpine-Valkey [@MickLesk](https://github.com/MickLesk) ([#11320](https://github.com/community-scripts/ProxmoxVE/pull/11320))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Immich: Pin version to 2.5.2 [@vhsdream](https://github.com/vhsdream) ([#11335](https://github.com/community-scripts/ProxmoxVE/pull/11335))
|
|
||||||
- Kollection: Update to php 8.5 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11315](https://github.com/community-scripts/ProxmoxVE/pull/11315))
|
|
||||||
- Notifiarr: change installation check from apt to systemd service [@MickLesk](https://github.com/MickLesk) ([#11319](https://github.com/community-scripts/ProxmoxVE/pull/11319))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [FEAT] Immich: Enable Maintenance Mode before update [@vhsdream](https://github.com/vhsdream) ([#11342](https://github.com/community-scripts/ProxmoxVE/pull/11342))
|
|
||||||
- jellyfin: add logrotate instead of reducing log level [@MickLesk](https://github.com/MickLesk) ([#11326](https://github.com/community-scripts/ProxmoxVE/pull/11326))
|
|
||||||
- core: Add config file handling options | Fix Vikunja update with interactive overwrite [@MickLesk](https://github.com/MickLesk) ([#11317](https://github.com/community-scripts/ProxmoxVE/pull/11317))
|
|
||||||
- Immich: v2.5.0 [@vhsdream](https://github.com/vhsdream) ([#11240](https://github.com/community-scripts/ProxmoxVE/pull/11240))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- fix: vikunja v1 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11308](https://github.com/community-scripts/ProxmoxVE/pull/11308))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: Byparr [@vhsdream](https://github.com/vhsdream) ([#11338](https://github.com/community-scripts/ProxmoxVE/pull/11338))
|
|
||||||
- cloudflare: Remove deprecated DNS-over-HTTPS proxy option [@MickLesk](https://github.com/MickLesk) ([#11068](https://github.com/community-scripts/ProxmoxVE/pull/11068))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- build.func: Replace storage variable with searchdomain variable [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11322](https://github.com/community-scripts/ProxmoxVE/pull/11322))
|
|
||||||
|
|
||||||
### 📂 Github
|
|
||||||
|
|
||||||
- Add workflow to lock closed issues [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11316](https://github.com/community-scripts/ProxmoxVE/pull/11316))
|
|
||||||
|
|
||||||
## 2026-01-28
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- nodecast-tv ([#11287](https://github.com/community-scripts/ProxmoxVE/pull/11287))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Ubuntu 25.04 VM - Change default start from yes to no [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11292](https://github.com/community-scripts/ProxmoxVE/pull/11292))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- various scripts: use setup_meilisearch function [@MickLesk](https://github.com/MickLesk) ([#11259](https://github.com/community-scripts/ProxmoxVE/pull/11259))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: NPMPlus / Default Login [@MickLesk](https://github.com/MickLesk) ([#11262](https://github.com/community-scripts/ProxmoxVE/pull/11262))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core: sed patch for ram [@lavacano](https://github.com/lavacano) ([#11285](https://github.com/community-scripts/ProxmoxVE/pull/11285))
|
|
||||||
- Fix installer loop caused by invalid whiptail menu separator [@Mesteriis](https://github.com/Mesteriis) ([#11237](https://github.com/community-scripts/ProxmoxVE/pull/11237))
|
|
||||||
- core: fix Debian 13 LXC template root ownership bug [@MickLesk](https://github.com/MickLesk) ([#11277](https://github.com/community-scripts/ProxmoxVE/pull/11277))
|
|
||||||
- tools.func: prevent systemd-tmpfiles failure in unprivileged LXC during deb install [@MickLesk](https://github.com/MickLesk) ([#11271](https://github.com/community-scripts/ProxmoxVE/pull/11271))
|
|
||||||
- tools.func: fix php "wait_for" hint [@MickLesk](https://github.com/MickLesk) ([#11254](https://github.com/community-scripts/ProxmoxVE/pull/11254))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: update dynamic values in LXC profile on update_motd_ip [@MickLesk](https://github.com/MickLesk) ([#11268](https://github.com/community-scripts/ProxmoxVE/pull/11268))
|
|
||||||
- tools.func: add new function - setup_meilisearch [@MickLesk](https://github.com/MickLesk) ([#11258](https://github.com/community-scripts/ProxmoxVE/pull/11258))
|
|
||||||
|
|
||||||
### 📂 Github
|
|
||||||
|
|
||||||
- github: add GitHub-based versions.json updater [@MickLesk](https://github.com/MickLesk) ([#10021](https://github.com/community-scripts/ProxmoxVE/pull/10021))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Frontend: use github-versions.json for version display [@MickLesk](https://github.com/MickLesk) ([#11281](https://github.com/community-scripts/ProxmoxVE/pull/11281))
|
|
||||||
|
|
||||||
- #### 📝 Script Information
|
|
||||||
|
|
||||||
- fix: homarr: conf location [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11253](https://github.com/community-scripts/ProxmoxVE/pull/11253))
|
|
||||||
|
|
||||||
## 2026-01-27
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
- [FIX] Jotty: backup and restore custom config [@vhsdream](https://github.com/vhsdream) ([#11212](https://github.com/community-scripts/ProxmoxVE/pull/11212))
|
- [FIX] Jotty: backup and restore custom config [@vhsdream](https://github.com/vhsdream) ([#11212](https://github.com/community-scripts/ProxmoxVE/pull/11212))
|
||||||
- Immich: update libraw [@vhsdream](https://github.com/vhsdream) ([#11233](https://github.com/community-scripts/ProxmoxVE/pull/11233))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- grist: enable optional enterprise features toggle [@MickLesk](https://github.com/MickLesk) ([#11239](https://github.com/community-scripts/ProxmoxVE/pull/11239))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Termix: use nginx.conf from upstream repo [@MickLesk](https://github.com/MickLesk) ([#11228](https://github.com/community-scripts/ProxmoxVE/pull/11228))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- feat: add NVIDIA driver install prompt for GPU-enabled containers [@devdecrux](https://github.com/devdecrux) ([#11184](https://github.com/community-scripts/ProxmoxVE/pull/11184))
|
|
||||||
|
|
||||||
### 📚 Documentation
|
### 📚 Documentation
|
||||||
|
|
||||||
- doc setup_deb822_repo arg order [@chrnie](https://github.com/chrnie) ([#11215](https://github.com/community-scripts/ProxmoxVE/pull/11215))
|
- doc setup_deb822_repo arg order [@chrnie](https://github.com/chrnie) ([#11215](https://github.com/community-scripts/ProxmoxVE/pull/11215))
|
||||||
- changelog: archive old entries to year/month files [@MickLesk](https://github.com/MickLesk) ([#11225](https://github.com/community-scripts/ProxmoxVE/pull/11225))
|
|
||||||
|
|
||||||
## 2026-01-26
|
## 2026-01-26
|
||||||
|
|
||||||
@@ -242,7 +100,7 @@
|
|||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|
||||||
- Tracearr ([#11079](https://github.com/community-scripts/ProxmoxVE/pull/11079))
|
- Tracearr ([#11079](https://github.com/community-scripts/ProxmoxVE/pull/11079))
|
||||||
- Dawarich ([#11075](https://github.com/community-scripts/ProxmoxVE/pull/11075))
|
- Dawarich ([#11075](https://github.com/community-scripts/ProxmoxVE/pull/11075))
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
@@ -392,7 +250,7 @@
|
|||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|
||||||
- Termix ([#10887](https://github.com/community-scripts/ProxmoxVE/pull/10887))
|
- Termix ([#10887](https://github.com/community-scripts/ProxmoxVE/pull/10887))
|
||||||
- ThingsBoard ([#10904](https://github.com/community-scripts/ProxmoxVE/pull/10904))
|
- ThingsBoard ([#10904](https://github.com/community-scripts/ProxmoxVE/pull/10904))
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
@@ -461,7 +319,7 @@
|
|||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|
||||||
- Flatnotes ([#10857](https://github.com/community-scripts/ProxmoxVE/pull/10857))
|
- Flatnotes ([#10857](https://github.com/community-scripts/ProxmoxVE/pull/10857))
|
||||||
- Unifi OS Server ([#10856](https://github.com/community-scripts/ProxmoxVE/pull/10856))
|
- Unifi OS Server ([#10856](https://github.com/community-scripts/ProxmoxVE/pull/10856))
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
@@ -527,7 +385,7 @@
|
|||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|
||||||
- Investbrain ([#10774](https://github.com/community-scripts/ProxmoxVE/pull/10774))
|
- Investbrain ([#10774](https://github.com/community-scripts/ProxmoxVE/pull/10774))
|
||||||
- Fladder ([#10768](https://github.com/community-scripts/ProxmoxVE/pull/10768))
|
- Fladder ([#10768](https://github.com/community-scripts/ProxmoxVE/pull/10768))
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
@@ -716,7 +574,7 @@
|
|||||||
### 📚 Documentation
|
### 📚 Documentation
|
||||||
|
|
||||||
- [gh] New Script template update [@tremor021](https://github.com/tremor021) ([#10607](https://github.com/community-scripts/ProxmoxVE/pull/10607))
|
- [gh] New Script template update [@tremor021](https://github.com/tremor021) ([#10607](https://github.com/community-scripts/ProxmoxVE/pull/10607))
|
||||||
- chore: bump copyright to 2026 - happy new year [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10585](https://github.com/community-scripts/ProxmoxVE/pull/10585))
|
- chore: bump copyright to 2026 - happy new year [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10585](https://github.com/community-scripts/ProxmoxVE/pull/10585))
|
||||||
|
|
||||||
### 📂 Github
|
### 📂 Github
|
||||||
|
|
||||||
@@ -797,7 +655,7 @@
|
|||||||
### ❔ Uncategorized
|
### ❔ Uncategorized
|
||||||
|
|
||||||
- Wireguard: Update WGDashboard notes URL to the new link [@tremor021](https://github.com/tremor021) ([#10496](https://github.com/community-scripts/ProxmoxVE/pull/10496))
|
- Wireguard: Update WGDashboard notes URL to the new link [@tremor021](https://github.com/tremor021) ([#10496](https://github.com/community-scripts/ProxmoxVE/pull/10496))
|
||||||
- InvoiceNinja: Update database credentias information [@tremor021](https://github.com/tremor021) ([#10497](https://github.com/community-scripts/ProxmoxVE/pull/10497))
|
- InvoiceNinja: Update database credentias information [@tremor021](https://github.com/tremor021) ([#10497](https://github.com/community-scripts/ProxmoxVE/pull/10497))
|
||||||
|
|
||||||
## 2026-01-02
|
## 2026-01-02
|
||||||
|
|
||||||
|
|||||||
121
.github/changelogs/2026/02.md
generated
vendored
121
.github/changelogs/2026/02.md
generated
vendored
@@ -1,121 +0,0 @@
|
|||||||
## 2026-02-04
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Wishlist ([#11527](https://github.com/community-scripts/ProxmoxVE/pull/11527))
|
|
||||||
- WriteFreely ([#11524](https://github.com/community-scripts/ProxmoxVE/pull/11524))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: create vm-core.func from dev [@MickLesk](https://github.com/MickLesk) ([#11528](https://github.com/community-scripts/ProxmoxVE/pull/11528))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix(frontend): implement weighted search scoring for command menu [@ls-root](https://github.com/ls-root) ([#11534](https://github.com/community-scripts/ProxmoxVE/pull/11534))
|
|
||||||
|
|
||||||
## 2026-02-03
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Wealthfolio ([#11511](https://github.com/community-scripts/ProxmoxVE/pull/11511))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- [FIX] Shelfmark: unpin Chromium version [@vhsdream](https://github.com/vhsdream) ([#11505](https://github.com/community-scripts/ProxmoxVE/pull/11505))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [FEAT] Scanopy: automatically update integrated daemon [@vhsdream](https://github.com/vhsdream) ([#11506](https://github.com/community-scripts/ProxmoxVE/pull/11506))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- [FIX] tools.func: trim spaces in app_lc when checking for gh release [@vhsdream](https://github.com/vhsdream) ([#11512](https://github.com/community-scripts/ProxmoxVE/pull/11512))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix(frontend): decouple table pagination from summary fetching [@ls-root](https://github.com/ls-root) ([#11495](https://github.com/community-scripts/ProxmoxVE/pull/11495))
|
|
||||||
|
|
||||||
## 2026-02-02
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- rustypaste | Alpine-rustypaste ([#11457](https://github.com/community-scripts/ProxmoxVE/pull/11457))
|
|
||||||
- KitchenOwl ([#11453](https://github.com/community-scripts/ProxmoxVE/pull/11453))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Grist: Update dependencies [@tremor021](https://github.com/tremor021) ([#11489](https://github.com/community-scripts/ProxmoxVE/pull/11489))
|
|
||||||
- Allow "downgrade" of libigdgmm12 [@vhsdream](https://github.com/vhsdream) ([#11478](https://github.com/community-scripts/ProxmoxVE/pull/11478))
|
|
||||||
- Disable NPM install and update due to OpenResty SHA-1 signature issues [@MickLesk](https://github.com/MickLesk) ([#11471](https://github.com/community-scripts/ProxmoxVE/pull/11471))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Refactor: Forgejo & readeck - migrate to codeberg functions [@MickLesk](https://github.com/MickLesk) ([#11460](https://github.com/community-scripts/ProxmoxVE/pull/11460))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- [FIX] Scanopy: remove daemon build [@vhsdream](https://github.com/vhsdream) ([#11444](https://github.com/community-scripts/ProxmoxVE/pull/11444))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: Vaultwarden [@MickLesk](https://github.com/MickLesk) ([#11445](https://github.com/community-scripts/ProxmoxVE/pull/11445))
|
|
||||||
- various scripts: use ensure_dependencies instead of apt [@MickLesk](https://github.com/MickLesk) ([#11463](https://github.com/community-scripts/ProxmoxVE/pull/11463))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- cleanup(frontend): remove unused /category-view route [@ls-root](https://github.com/ls-root) ([#11461](https://github.com/community-scripts/ProxmoxVE/pull/11461))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- feat(frontend): preview tab [@ls-root](https://github.com/ls-root) ([#11475](https://github.com/community-scripts/ProxmoxVE/pull/11475))
|
|
||||||
|
|
||||||
## 2026-02-01
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- fix headers [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11422](https://github.com/community-scripts/ProxmoxVE/pull/11422))
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- 2fauth: export PHP_VERSION for nginx config [@MickLesk](https://github.com/MickLesk) ([#11441](https://github.com/community-scripts/ProxmoxVE/pull/11441))
|
|
||||||
- Prometheus Paperless NGX Exporter: Set correct binary path in systemd unit file [@andygrunwald](https://github.com/andygrunwald) ([#11438](https://github.com/community-scripts/ProxmoxVE/pull/11438))
|
|
||||||
- tracearr: install/update new prestart script from upstream [@durzo](https://github.com/durzo) ([#11433](https://github.com/community-scripts/ProxmoxVE/pull/11433))
|
|
||||||
- n8n: Fix dependencies [@tremor021](https://github.com/tremor021) ([#11429](https://github.com/community-scripts/ProxmoxVE/pull/11429))
|
|
||||||
- [Hotfix] Bunkerweb update [@vhsdream](https://github.com/vhsdream) ([#11402](https://github.com/community-scripts/ProxmoxVE/pull/11402))
|
|
||||||
- [Hotfix] Immich: revert healthcheck feature [@vhsdream](https://github.com/vhsdream) ([#11427](https://github.com/community-scripts/ProxmoxVE/pull/11427))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- tools.func: add codeberg functions & autocaliweb: migrate from GitHub to Codeberg [@MickLesk](https://github.com/MickLesk) ([#11440](https://github.com/community-scripts/ProxmoxVE/pull/11440))
|
|
||||||
- Immich Refactor #2 [@vhsdream](https://github.com/vhsdream) ([#11375](https://github.com/community-scripts/ProxmoxVE/pull/11375))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- WordPress: Refactor [@tremor021](https://github.com/tremor021) ([#11408](https://github.com/community-scripts/ProxmoxVE/pull/11408))
|
|
||||||
- Refactor: Whisparr [@tremor021](https://github.com/tremor021) ([#11411](https://github.com/community-scripts/ProxmoxVE/pull/11411))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [tools]: Update `fetch_and_deply_from_url()` [@tremor021](https://github.com/tremor021) ([#11410](https://github.com/community-scripts/ProxmoxVE/pull/11410))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- feat(frontend): implement UX refinements and syntax highlighting [@ls-root](https://github.com/ls-root) ([#11423](https://github.com/community-scripts/ProxmoxVE/pull/11423))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- feat(frontend): add contribution CTA to empty search state [@ls-root](https://github.com/ls-root) ([#11412](https://github.com/community-scripts/ProxmoxVE/pull/11412))
|
|
||||||
95
.github/workflows/changelog-archive.yml
generated
vendored
95
.github/workflows/changelog-archive.yml
generated
vendored
@@ -54,9 +54,8 @@ jobs:
|
|||||||
|
|
||||||
console.log(`Cutoff date: ${cutoffDate.toISOString().split('T')[0]}`);
|
console.log(`Cutoff date: ${cutoffDate.toISOString().split('T')[0]}`);
|
||||||
|
|
||||||
// Read changelog and normalize line endings
|
// Read changelog
|
||||||
let content = await fs.readFile(CHANGELOG_PATH, 'utf-8');
|
const content = await fs.readFile(CHANGELOG_PATH, 'utf-8');
|
||||||
content = content.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
||||||
const lines = content.split('\n');
|
const lines = content.split('\n');
|
||||||
|
|
||||||
// Parse entries
|
// Parse entries
|
||||||
@@ -67,39 +66,9 @@ jobs:
|
|||||||
let currentDate = null;
|
let currentDate = null;
|
||||||
let currentContent = [];
|
let currentContent = [];
|
||||||
let inHeader = true;
|
let inHeader = true;
|
||||||
let inOldHistory = false;
|
|
||||||
let historyDetailsDepth = 0;
|
|
||||||
|
|
||||||
for (let i = 0; i < lines.length; i++) {
|
for (const line of lines) {
|
||||||
const line = lines[i];
|
|
||||||
const match = line.match(datePattern);
|
const match = line.match(datePattern);
|
||||||
|
|
||||||
// Detect the start of History section: <details> followed by line with 📜 History
|
|
||||||
if (inHeader && !inOldHistory && line.trim() === '<details>') {
|
|
||||||
// Look ahead to see if this is the History section
|
|
||||||
const nextLine = lines[i + 1] || '';
|
|
||||||
if (nextLine.includes('📜 History')) {
|
|
||||||
inOldHistory = true;
|
|
||||||
historyDetailsDepth = 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Track nested details tags to find the end of History section
|
|
||||||
if (inOldHistory) {
|
|
||||||
if (line.trim() === '<details>') {
|
|
||||||
historyDetailsDepth++;
|
|
||||||
}
|
|
||||||
if (line.trim() === '</details>') {
|
|
||||||
historyDetailsDepth--;
|
|
||||||
if (historyDetailsDepth === 0) {
|
|
||||||
// We've closed the main History details tag
|
|
||||||
inOldHistory = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (match) {
|
if (match) {
|
||||||
inHeader = false;
|
inHeader = false;
|
||||||
|
|
||||||
@@ -179,55 +148,30 @@ jobs:
|
|||||||
let existingContent = '';
|
let existingContent = '';
|
||||||
try {
|
try {
|
||||||
existingContent = await fs.readFile(monthPath, 'utf-8');
|
existingContent = await fs.readFile(monthPath, 'utf-8');
|
||||||
// Normalize line endings to prevent regex issues
|
|
||||||
existingContent = existingContent.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// File doesn't exist
|
// File doesn't exist
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse existing entries into a Map (date -> content) for deduplication
|
// Merge new entries with existing (avoid duplicates)
|
||||||
const allEntries = new Map();
|
const existingDates = new Set();
|
||||||
|
const existingDatePattern = /^## (\d{4}-\d{2}-\d{2})$/gm;
|
||||||
// Helper function to parse entries from content
|
let match;
|
||||||
const parseEntries = (content) => {
|
while ((match = existingDatePattern.exec(existingContent)) !== null) {
|
||||||
const entries = new Map();
|
existingDates.add(match[1]);
|
||||||
const parts = content.split(/(?=^## \d{4}-\d{2}-\d{2}$)/m);
|
|
||||||
for (const part of parts) {
|
|
||||||
const trimmed = part.trim();
|
|
||||||
if (!trimmed) continue;
|
|
||||||
const dateMatch = trimmed.match(/^## (\d{4}-\d{2}-\d{2})/);
|
|
||||||
if (dateMatch) {
|
|
||||||
entries.set(dateMatch[1], trimmed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return entries;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Parse existing content
|
|
||||||
if (existingContent) {
|
|
||||||
const existingEntries = parseEntries(existingContent);
|
|
||||||
for (const [date, content] of existingEntries) {
|
|
||||||
allEntries.set(date, content);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add new entries (existing entries take precedence to avoid overwriting)
|
const newEntries = archiveData[year][month].filter(entry => {
|
||||||
let addedCount = 0;
|
|
||||||
for (const entry of archiveData[year][month]) {
|
|
||||||
const dateMatch = entry.match(/^## (\d{4}-\d{2}-\d{2})/);
|
const dateMatch = entry.match(/^## (\d{4}-\d{2}-\d{2})/);
|
||||||
if (dateMatch && !allEntries.has(dateMatch[1])) {
|
return dateMatch && !existingDates.has(dateMatch[1]);
|
||||||
allEntries.set(dateMatch[1], entry.trim());
|
});
|
||||||
addedCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sort entries by date (newest first) and write
|
if (newEntries.length > 0) {
|
||||||
const sortedDates = [...allEntries.keys()].sort().reverse();
|
const allContent = existingContent
|
||||||
const sortedContent = sortedDates.map(date => allEntries.get(date)).join('\n\n');
|
? existingContent + '\n\n' + newEntries.join('\n\n')
|
||||||
|
: newEntries.join('\n\n');
|
||||||
|
|
||||||
if (addedCount > 0 || !existingContent) {
|
await fs.writeFile(monthPath, allContent, 'utf-8');
|
||||||
await fs.writeFile(monthPath, sortedContent + '\n', 'utf-8');
|
console.log(`Updated: ${monthPath} (+${newEntries.length} entries)`);
|
||||||
console.log(`Updated: ${monthPath} (${allEntries.size} total entries, +${addedCount} new)`);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -274,8 +218,7 @@ jobs:
|
|||||||
// Count entries in month file
|
// Count entries in month file
|
||||||
let entryCount = 0;
|
let entryCount = 0;
|
||||||
try {
|
try {
|
||||||
let monthContent = await fs.readFile(monthPath, 'utf-8');
|
const monthContent = await fs.readFile(monthPath, 'utf-8');
|
||||||
monthContent = monthContent.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
||||||
entryCount = (monthContent.match(/^## \d{4}-\d{2}-\d{2}$/gm) || []).length;
|
entryCount = (monthContent.match(/^## \d{4}-\d{2}-\d{2}$/gm) || []).length;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
entryCount = (archiveData[year]?.[month] || []).length;
|
entryCount = (archiveData[year]?.[month] || []).length;
|
||||||
|
|||||||
77
.github/workflows/lock-issue.yaml
generated
vendored
77
.github/workflows/lock-issue.yaml
generated
vendored
@@ -1,77 +0,0 @@
|
|||||||
name: Lock closed issues
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: "0 0 * * *" # Run daily at midnight
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lock:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Lock old issues and PRs
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const daysBeforeLock = 3;
|
|
||||||
const lockDate = new Date();
|
|
||||||
lockDate.setDate(lockDate.getDate() - daysBeforeLock);
|
|
||||||
|
|
||||||
// Exclude patterns (case-insensitive)
|
|
||||||
const excludePatterns = [
|
|
||||||
/automated pr/i,
|
|
||||||
/\[bot\]/i,
|
|
||||||
/dependabot/i
|
|
||||||
];
|
|
||||||
|
|
||||||
// Search for closed, unlocked issues older than 3 days (paginated, oldest first)
|
|
||||||
let page = 1;
|
|
||||||
let totalLocked = 0;
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
const issues = await github.rest.search.issuesAndPullRequests({
|
|
||||||
q: `repo:${context.repo.owner}/${context.repo.repo} is:closed is:unlocked updated:<${lockDate.toISOString().split('T')[0]}`,
|
|
||||||
sort: 'updated',
|
|
||||||
order: 'asc',
|
|
||||||
per_page: 100,
|
|
||||||
page: page
|
|
||||||
});
|
|
||||||
|
|
||||||
if (issues.data.items.length === 0) break;
|
|
||||||
|
|
||||||
console.log(`Page ${page}: ${issues.data.items.length} items (total available: ${issues.data.total_count})`);
|
|
||||||
|
|
||||||
for (const item of issues.data.items) {
|
|
||||||
// Skip excluded items
|
|
||||||
const shouldExclude = excludePatterns.some(pattern => pattern.test(item.title));
|
|
||||||
if (shouldExclude) {
|
|
||||||
console.log(`Skipped #${item.number}: "${item.title}" (matches exclude pattern)`);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Lock the issue/PR silently
|
|
||||||
await github.rest.issues.lock({
|
|
||||||
...context.repo,
|
|
||||||
issue_number: item.number,
|
|
||||||
lock_reason: 'resolved'
|
|
||||||
});
|
|
||||||
|
|
||||||
totalLocked++;
|
|
||||||
console.log(`Locked #${item.number} (${item.pull_request ? 'PR' : 'Issue'})`);
|
|
||||||
} catch (error) {
|
|
||||||
console.log(`Failed to lock #${item.number}: ${error.message}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
page++;
|
|
||||||
|
|
||||||
// GitHub search API limit: max 10000 results (100 pages * 100) - temporarily increased
|
|
||||||
if (page > 100) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(`Total locked: ${totalLocked} issues/PRs`);
|
|
||||||
424
CHANGELOG.md
424
CHANGELOG.md
@@ -21,14 +21,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><h4>February (4 entries)</h4></summary>
|
<summary><h4>January - 27 entries</h4></summary>
|
||||||
|
|
||||||
[View February 2026 Changelog](.github/changelogs/2026/02.md)
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h4>January (31 entries)</h4></summary>
|
|
||||||
|
|
||||||
[View January 2026 Changelog](.github/changelogs/2026/01.md)
|
[View January 2026 Changelog](.github/changelogs/2026/01.md)
|
||||||
|
|
||||||
@@ -398,271 +391,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## 2026-02-05
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- OpenCloud ([#11538](https://github.com/community-scripts/ProxmoxVE/pull/11538))
|
|
||||||
- Nginx-UI ([#11573](https://github.com/community-scripts/ProxmoxVE/pull/11573))
|
|
||||||
- New: SQL-Server 2025 | Refactor SQL-Server 2022 [@MickLesk](https://github.com/MickLesk) ([#11546](https://github.com/community-scripts/ProxmoxVE/pull/11546))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- OpenCloud: pin version to 5.0.2; Collabora CSP fix [@vhsdream](https://github.com/vhsdream) ([#11585](https://github.com/community-scripts/ProxmoxVE/pull/11585))
|
|
||||||
- Wanderer: Fix repo [@tremor021](https://github.com/tremor021) ([#11567](https://github.com/community-scripts/ProxmoxVE/pull/11567))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Refactor: Docker-VM (Multi-OS / Cloud-Init / Stabilization) [@MickLesk](https://github.com/MickLesk) ([#9047](https://github.com/community-scripts/ProxmoxVE/pull/9047))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- cloud-init: add interactive SSH key discovery and selection [@MickLesk](https://github.com/MickLesk) ([#11547](https://github.com/community-scripts/ProxmoxVE/pull/11547))
|
|
||||||
|
|
||||||
### 📚 Documentation
|
|
||||||
|
|
||||||
- github: extend docs / contribution / templates [@MickLesk](https://github.com/MickLesk) ([#10921](https://github.com/community-scripts/ProxmoxVE/pull/10921))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix(frontend): theme respective syntax highlighting [@ls-root](https://github.com/ls-root) ([#11565](https://github.com/community-scripts/ProxmoxVE/pull/11565))
|
|
||||||
|
|
||||||
## 2026-02-04
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Wishlist ([#11527](https://github.com/community-scripts/ProxmoxVE/pull/11527))
|
|
||||||
- WriteFreely ([#11524](https://github.com/community-scripts/ProxmoxVE/pull/11524))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- Add log directory and permissions for koillection [@shineangelic](https://github.com/shineangelic) ([#11553](https://github.com/community-scripts/ProxmoxVE/pull/11553))
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- [FIX] Scanopy: ensure Scanopy Daemon update [@vhsdream](https://github.com/vhsdream) ([#11541](https://github.com/community-scripts/ProxmoxVE/pull/11541))
|
|
||||||
- Immich: pin version to 2.5.3 [@vhsdream](https://github.com/vhsdream) ([#11515](https://github.com/community-scripts/ProxmoxVE/pull/11515))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: create vm-core.func from dev [@MickLesk](https://github.com/MickLesk) ([#11528](https://github.com/community-scripts/ProxmoxVE/pull/11528))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [ADDON] Immich Public Proxy addon [@vhsdream](https://github.com/vhsdream) ([#11518](https://github.com/community-scripts/ProxmoxVE/pull/11518))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix(frontend): implement weighted search scoring for command menu [@ls-root](https://github.com/ls-root) ([#11534](https://github.com/community-scripts/ProxmoxVE/pull/11534))
|
|
||||||
|
|
||||||
### ❔ Uncategorized
|
|
||||||
|
|
||||||
- [FIX] Immich Public Proxy docs link [@vhsdream](https://github.com/vhsdream) ([#11543](https://github.com/community-scripts/ProxmoxVE/pull/11543))
|
|
||||||
|
|
||||||
## 2026-02-03
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Wealthfolio ([#11511](https://github.com/community-scripts/ProxmoxVE/pull/11511))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- [FIX] Shelfmark: unpin Chromium version [@vhsdream](https://github.com/vhsdream) ([#11505](https://github.com/community-scripts/ProxmoxVE/pull/11505))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [FEAT] Scanopy: automatically update integrated daemon [@vhsdream](https://github.com/vhsdream) ([#11506](https://github.com/community-scripts/ProxmoxVE/pull/11506))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- [FIX] tools.func: trim spaces in app_lc when checking for gh release [@vhsdream](https://github.com/vhsdream) ([#11512](https://github.com/community-scripts/ProxmoxVE/pull/11512))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix(frontend): decouple table pagination from summary fetching [@ls-root](https://github.com/ls-root) ([#11495](https://github.com/community-scripts/ProxmoxVE/pull/11495))
|
|
||||||
|
|
||||||
## 2026-02-02
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- rustypaste | Alpine-rustypaste ([#11457](https://github.com/community-scripts/ProxmoxVE/pull/11457))
|
|
||||||
- KitchenOwl ([#11453](https://github.com/community-scripts/ProxmoxVE/pull/11453))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Grist: Update dependencies [@tremor021](https://github.com/tremor021) ([#11489](https://github.com/community-scripts/ProxmoxVE/pull/11489))
|
|
||||||
- Allow "downgrade" of libigdgmm12 [@vhsdream](https://github.com/vhsdream) ([#11478](https://github.com/community-scripts/ProxmoxVE/pull/11478))
|
|
||||||
- Disable NPM install and update due to OpenResty SHA-1 signature issues [@MickLesk](https://github.com/MickLesk) ([#11471](https://github.com/community-scripts/ProxmoxVE/pull/11471))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Refactor: Forgejo & readeck - migrate to codeberg functions [@MickLesk](https://github.com/MickLesk) ([#11460](https://github.com/community-scripts/ProxmoxVE/pull/11460))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- [FIX] Scanopy: remove daemon build [@vhsdream](https://github.com/vhsdream) ([#11444](https://github.com/community-scripts/ProxmoxVE/pull/11444))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: Vaultwarden [@MickLesk](https://github.com/MickLesk) ([#11445](https://github.com/community-scripts/ProxmoxVE/pull/11445))
|
|
||||||
- various scripts: use ensure_dependencies instead of apt [@MickLesk](https://github.com/MickLesk) ([#11463](https://github.com/community-scripts/ProxmoxVE/pull/11463))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- cleanup(frontend): remove unused /category-view route [@ls-root](https://github.com/ls-root) ([#11461](https://github.com/community-scripts/ProxmoxVE/pull/11461))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- feat(frontend): preview tab [@ls-root](https://github.com/ls-root) ([#11475](https://github.com/community-scripts/ProxmoxVE/pull/11475))
|
|
||||||
|
|
||||||
## 2026-02-01
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- fix headers [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11422](https://github.com/community-scripts/ProxmoxVE/pull/11422))
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- 2fauth: export PHP_VERSION for nginx config [@MickLesk](https://github.com/MickLesk) ([#11441](https://github.com/community-scripts/ProxmoxVE/pull/11441))
|
|
||||||
- Prometheus Paperless NGX Exporter: Set correct binary path in systemd unit file [@andygrunwald](https://github.com/andygrunwald) ([#11438](https://github.com/community-scripts/ProxmoxVE/pull/11438))
|
|
||||||
- tracearr: install/update new prestart script from upstream [@durzo](https://github.com/durzo) ([#11433](https://github.com/community-scripts/ProxmoxVE/pull/11433))
|
|
||||||
- n8n: Fix dependencies [@tremor021](https://github.com/tremor021) ([#11429](https://github.com/community-scripts/ProxmoxVE/pull/11429))
|
|
||||||
- [Hotfix] Bunkerweb update [@vhsdream](https://github.com/vhsdream) ([#11402](https://github.com/community-scripts/ProxmoxVE/pull/11402))
|
|
||||||
- [Hotfix] Immich: revert healthcheck feature [@vhsdream](https://github.com/vhsdream) ([#11427](https://github.com/community-scripts/ProxmoxVE/pull/11427))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- tools.func: add codeberg functions & autocaliweb: migrate from GitHub to Codeberg [@MickLesk](https://github.com/MickLesk) ([#11440](https://github.com/community-scripts/ProxmoxVE/pull/11440))
|
|
||||||
- Immich Refactor #2 [@vhsdream](https://github.com/vhsdream) ([#11375](https://github.com/community-scripts/ProxmoxVE/pull/11375))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- WordPress: Refactor [@tremor021](https://github.com/tremor021) ([#11408](https://github.com/community-scripts/ProxmoxVE/pull/11408))
|
|
||||||
- Refactor: Whisparr [@tremor021](https://github.com/tremor021) ([#11411](https://github.com/community-scripts/ProxmoxVE/pull/11411))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [tools]: Update `fetch_and_deply_from_url()` [@tremor021](https://github.com/tremor021) ([#11410](https://github.com/community-scripts/ProxmoxVE/pull/11410))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- feat(frontend): implement UX refinements and syntax highlighting [@ls-root](https://github.com/ls-root) ([#11423](https://github.com/community-scripts/ProxmoxVE/pull/11423))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- feat(frontend): add contribution CTA to empty search state [@ls-root](https://github.com/ls-root) ([#11412](https://github.com/community-scripts/ProxmoxVE/pull/11412))
|
|
||||||
|
|
||||||
## 2026-01-31
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- shelfmark ([#11371](https://github.com/community-scripts/ProxmoxVE/pull/11371))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix: yubal: add git [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11394](https://github.com/community-scripts/ProxmoxVE/pull/11394))
|
|
||||||
|
|
||||||
## 2026-01-30
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- languagetool ([#11370](https://github.com/community-scripts/ProxmoxVE/pull/11370))
|
|
||||||
- Ampache ([#11369](https://github.com/community-scripts/ProxmoxVE/pull/11369))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: remove redundant PHP_MODULE entries in several scripts [@MickLesk](https://github.com/MickLesk) ([#11362](https://github.com/community-scripts/ProxmoxVE/pull/11362))
|
|
||||||
- Refactor: Koillection [@MickLesk](https://github.com/MickLesk) ([#11361](https://github.com/community-scripts/ProxmoxVE/pull/11361))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core: meilisearch - add data migration for version upgrades [@MickLesk](https://github.com/MickLesk) ([#11356](https://github.com/community-scripts/ProxmoxVE/pull/11356))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [tools] Add `fetch_and_deploy_from_url()` [@tremor021](https://github.com/tremor021) ([#11376](https://github.com/community-scripts/ProxmoxVE/pull/11376))
|
|
||||||
- core: php - improve module handling and prevent installation failures [@MickLesk](https://github.com/MickLesk) ([#11358](https://github.com/community-scripts/ProxmoxVE/pull/11358))
|
|
||||||
|
|
||||||
## 2026-01-29
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Alpine-Valkey [@MickLesk](https://github.com/MickLesk) ([#11320](https://github.com/community-scripts/ProxmoxVE/pull/11320))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Immich: Pin version to 2.5.2 [@vhsdream](https://github.com/vhsdream) ([#11335](https://github.com/community-scripts/ProxmoxVE/pull/11335))
|
|
||||||
- Kollection: Update to php 8.5 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11315](https://github.com/community-scripts/ProxmoxVE/pull/11315))
|
|
||||||
- Notifiarr: change installation check from apt to systemd service [@MickLesk](https://github.com/MickLesk) ([#11319](https://github.com/community-scripts/ProxmoxVE/pull/11319))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [FEAT] Immich: Enable Maintenance Mode before update [@vhsdream](https://github.com/vhsdream) ([#11342](https://github.com/community-scripts/ProxmoxVE/pull/11342))
|
|
||||||
- jellyfin: add logrotate instead of reducing log level [@MickLesk](https://github.com/MickLesk) ([#11326](https://github.com/community-scripts/ProxmoxVE/pull/11326))
|
|
||||||
- core: Add config file handling options | Fix Vikunja update with interactive overwrite [@MickLesk](https://github.com/MickLesk) ([#11317](https://github.com/community-scripts/ProxmoxVE/pull/11317))
|
|
||||||
- Immich: v2.5.0 [@vhsdream](https://github.com/vhsdream) ([#11240](https://github.com/community-scripts/ProxmoxVE/pull/11240))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- fix: vikunja v1 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11308](https://github.com/community-scripts/ProxmoxVE/pull/11308))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: Byparr [@vhsdream](https://github.com/vhsdream) ([#11338](https://github.com/community-scripts/ProxmoxVE/pull/11338))
|
|
||||||
- cloudflare: Remove deprecated DNS-over-HTTPS proxy option [@MickLesk](https://github.com/MickLesk) ([#11068](https://github.com/community-scripts/ProxmoxVE/pull/11068))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- build.func: Replace storage variable with searchdomain variable [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11322](https://github.com/community-scripts/ProxmoxVE/pull/11322))
|
|
||||||
|
|
||||||
### 📂 Github
|
|
||||||
|
|
||||||
- Add workflow to lock closed issues [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11316](https://github.com/community-scripts/ProxmoxVE/pull/11316))
|
|
||||||
|
|
||||||
## 2026-01-28
|
## 2026-01-28
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- nodecast-tv ([#11287](https://github.com/community-scripts/ProxmoxVE/pull/11287))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Ubuntu 25.04 VM - Change default start from yes to no [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11292](https://github.com/community-scripts/ProxmoxVE/pull/11292))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
- #### ✨ New Features
|
||||||
|
|
||||||
- various scripts: use setup_meilisearch function [@MickLesk](https://github.com/MickLesk) ([#11259](https://github.com/community-scripts/ProxmoxVE/pull/11259))
|
- various scripts: use setup_meilisearch function [@MickLesk](https://github.com/MickLesk) ([#11259](https://github.com/community-scripts/ProxmoxVE/pull/11259))
|
||||||
@@ -675,8 +407,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
- core: sed patch for ram [@lavacano](https://github.com/lavacano) ([#11285](https://github.com/community-scripts/ProxmoxVE/pull/11285))
|
|
||||||
- Fix installer loop caused by invalid whiptail menu separator [@Mesteriis](https://github.com/Mesteriis) ([#11237](https://github.com/community-scripts/ProxmoxVE/pull/11237))
|
|
||||||
- core: fix Debian 13 LXC template root ownership bug [@MickLesk](https://github.com/MickLesk) ([#11277](https://github.com/community-scripts/ProxmoxVE/pull/11277))
|
- core: fix Debian 13 LXC template root ownership bug [@MickLesk](https://github.com/MickLesk) ([#11277](https://github.com/community-scripts/ProxmoxVE/pull/11277))
|
||||||
- tools.func: prevent systemd-tmpfiles failure in unprivileged LXC during deb install [@MickLesk](https://github.com/MickLesk) ([#11271](https://github.com/community-scripts/ProxmoxVE/pull/11271))
|
- tools.func: prevent systemd-tmpfiles failure in unprivileged LXC during deb install [@MickLesk](https://github.com/MickLesk) ([#11271](https://github.com/community-scripts/ProxmoxVE/pull/11271))
|
||||||
- tools.func: fix php "wait_for" hint [@MickLesk](https://github.com/MickLesk) ([#11254](https://github.com/community-scripts/ProxmoxVE/pull/11254))
|
- tools.func: fix php "wait_for" hint [@MickLesk](https://github.com/MickLesk) ([#11254](https://github.com/community-scripts/ProxmoxVE/pull/11254))
|
||||||
@@ -692,10 +422,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
### 🌐 Website
|
### 🌐 Website
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Frontend: use github-versions.json for version display [@MickLesk](https://github.com/MickLesk) ([#11281](https://github.com/community-scripts/ProxmoxVE/pull/11281))
|
|
||||||
|
|
||||||
- #### 📝 Script Information
|
- #### 📝 Script Information
|
||||||
|
|
||||||
- fix: homarr: conf location [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11253](https://github.com/community-scripts/ProxmoxVE/pull/11253))
|
- fix: homarr: conf location [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11253](https://github.com/community-scripts/ProxmoxVE/pull/11253))
|
||||||
@@ -1324,3 +1050,151 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
- #### 🔧 Refactor
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
- Refactor: IP-Tag (Multiple IP / Performance / Execution Time) [@MickLesk](https://github.com/MickLesk) ([#10558](https://github.com/community-scripts/ProxmoxVE/pull/10558))
|
- Refactor: IP-Tag (Multiple IP / Performance / Execution Time) [@MickLesk](https://github.com/MickLesk) ([#10558](https://github.com/community-scripts/ProxmoxVE/pull/10558))
|
||||||
|
|
||||||
|
## 2026-01-04
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- PocketID: Update PocketID for 2.x [@tremor021](https://github.com/tremor021) ([#10506](https://github.com/community-scripts/ProxmoxVE/pull/10506))
|
||||||
|
- fix: reitti: nginx [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10511](https://github.com/community-scripts/ProxmoxVE/pull/10511))
|
||||||
|
- MagicMirror: bump to nodejs 24 [@MickLesk](https://github.com/MickLesk) ([#10534](https://github.com/community-scripts/ProxmoxVE/pull/10534))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: SFTPGo [@tremor021](https://github.com/tremor021) ([#10518](https://github.com/community-scripts/ProxmoxVE/pull/10518))
|
||||||
|
- Refactor: Pelican Wings [@tremor021](https://github.com/tremor021) ([#10517](https://github.com/community-scripts/ProxmoxVE/pull/10517))
|
||||||
|
- Refactor: Pelican Panel [@tremor021](https://github.com/tremor021) ([#10516](https://github.com/community-scripts/ProxmoxVE/pull/10516))
|
||||||
|
- Refactor: Audiobookshelf [@tremor021](https://github.com/tremor021) ([#10519](https://github.com/community-scripts/ProxmoxVE/pull/10519))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Export IPV6_METHOD to trigger verb_ip6() function [@remz1337](https://github.com/remz1337) ([#10538](https://github.com/community-scripts/ProxmoxVE/pull/10538))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Prowlarr: Update config_path [@tremor021](https://github.com/tremor021) ([#10504](https://github.com/community-scripts/ProxmoxVE/pull/10504))
|
||||||
|
|
||||||
|
## 2026-01-03
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix ownership and permissions for InvoiceNinja setup [@twinzdragonz](https://github.com/twinzdragonz) ([#10298](https://github.com/community-scripts/ProxmoxVE/pull/10298))
|
||||||
|
- Fix headscale Caddyfile to pass non-API URLs [@IlyaSemenov](https://github.com/IlyaSemenov) ([#10493](https://github.com/community-scripts/ProxmoxVE/pull/10493))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- [core]: Preserve log files [@tremor021](https://github.com/tremor021) ([#10509](https://github.com/community-scripts/ProxmoxVE/pull/10509))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- Wireguard: Update WGDashboard notes URL to the new link [@tremor021](https://github.com/tremor021) ([#10496](https://github.com/community-scripts/ProxmoxVE/pull/10496))
|
||||||
|
- InvoiceNinja: Update database credentias information [@tremor021](https://github.com/tremor021) ([#10497](https://github.com/community-scripts/ProxmoxVE/pull/10497))
|
||||||
|
|
||||||
|
## 2026-01-02
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix Intel Level Zero package conflict on Debian 13 [@Copilot](https://github.com/Copilot) ([#10467](https://github.com/community-scripts/ProxmoxVE/pull/10467))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- Extend guidance for changing the immich upload location for #10447 [@jshprentz](https://github.com/jshprentz) ([#10475](https://github.com/community-scripts/ProxmoxVE/pull/10475))
|
||||||
|
|
||||||
|
## 2026-01-01
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix(sabnzbd): update script now migrates old service files to use venv Python [@vidonnus](https://github.com/vidonnus) ([#10466](https://github.com/community-scripts/ProxmoxVE/pull/10466))
|
||||||
|
- fix(bazarr): update script now migrates old service files to use venv Python [@vidonnus](https://github.com/vidonnus) ([#10459](https://github.com/community-scripts/ProxmoxVE/pull/10459))
|
||||||
|
- fix #10453 broken sonarqube update [@Karlito83](https://github.com/Karlito83) ([#10456](https://github.com/community-scripts/ProxmoxVE/pull/10456))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix MariaDB runtime directory persistence on container reboot [@Copilot](https://github.com/Copilot) ([#10468](https://github.com/community-scripts/ProxmoxVE/pull/10468))
|
||||||
|
|
||||||
|
## 2025-12-31
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- fix(wazuh): add LXC rootcheck exclusion to prevent false positives [@brettlyons](https://github.com/brettlyons) ([#10436](https://github.com/community-scripts/ProxmoxVE/pull/10436))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Increase BentoPDF RAM requirement from 2GB to 4GB [@Copilot](https://github.com/Copilot) ([#10449](https://github.com/community-scripts/ProxmoxVE/pull/10449))
|
||||||
|
- fix(swizzin): Use HTTPS and add curl error handling [@fmcglinn](https://github.com/fmcglinn) ([#10440](https://github.com/community-scripts/ProxmoxVE/pull/10440))
|
||||||
|
|
||||||
|
## 2025-12-30
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Unlink default nginx config [@iLikeToCode](https://github.com/iLikeToCode) ([#10432](https://github.com/community-scripts/ProxmoxVE/pull/10432))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Firefly [@tremor021](https://github.com/tremor021) ([#10421](https://github.com/community-scripts/ProxmoxVE/pull/10421))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Remove: GoAway [@MickLesk](https://github.com/MickLesk) ([#10429](https://github.com/community-scripts/ProxmoxVE/pull/10429))
|
||||||
|
|
||||||
|
## 2025-12-29
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- syncthing: check for deb822 source [@MickLesk](https://github.com/MickLesk) ([#10414](https://github.com/community-scripts/ProxmoxVE/pull/10414))
|
||||||
|
- speedtest-tracker: add external IP URL and internet check hostname in .env [@MickLesk](https://github.com/MickLesk) ([#10078](https://github.com/community-scripts/ProxmoxVE/pull/10078))
|
||||||
|
- Pelican-panel: prevent composer superuser prompt [@MickLesk](https://github.com/MickLesk) ([#10418](https://github.com/community-scripts/ProxmoxVE/pull/10418))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- add libmfx-gen1.2 for intel gpu hwaccel [@jcnix](https://github.com/jcnix) ([#10400](https://github.com/community-scripts/ProxmoxVE/pull/10400))
|
||||||
|
|
||||||
|
## 2025-12-28
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Mail-Archiver ([#10393](https://github.com/community-scripts/ProxmoxVE/pull/10393))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix mongodb update logic [@durzo](https://github.com/durzo) ([#10388](https://github.com/community-scripts/ProxmoxVE/pull/10388))
|
||||||
|
- fix pulse downloading incorrect tarball [@durzo](https://github.com/durzo) ([#10383](https://github.com/community-scripts/ProxmoxVE/pull/10383))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Linkwarden: enable Corepack and prepare Yarn v4 before running yarn [@MickLesk](https://github.com/MickLesk) ([#10390](https://github.com/community-scripts/ProxmoxVE/pull/10390))
|
||||||
|
- metube: use pnpm + corepack for frontend build [@MickLesk](https://github.com/MickLesk) ([#10392](https://github.com/community-scripts/ProxmoxVE/pull/10392))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Set default LANG in locale configuration [@jamezpolley](https://github.com/jamezpolley) ([#10378](https://github.com/community-scripts/ProxmoxVE/pull/10378))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- Updated Frontend Debian and Ubuntu VM notes so links can be copied quickly. [@mzb2xeo](https://github.com/mzb2xeo) ([#10379](https://github.com/community-scripts/ProxmoxVE/pull/10379))
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ function update_script() {
|
|||||||
msg_ok "Backup Created"
|
msg_ok "Backup Created"
|
||||||
|
|
||||||
if ! dpkg -l | grep -q 'php8.4'; then
|
if ! dpkg -l | grep -q 'php8.4'; then
|
||||||
PHP_VERSION="8.4" PHP_FPM="YES" setup_php
|
PHP_VERSION="8.4" PHP_MODULE="common,ctype,fileinfo,mysql,cli,tokenizer,dom,redis,session,openssl" PHP_FPM="YES" setup_php
|
||||||
sed -i 's/php8\.[0-9]/php8.4/g' /etc/nginx/conf.d/2fauth.conf
|
sed -i 's/php8\.[0-9]/php8.4/g' /etc/nginx/conf.d/2fauth.conf
|
||||||
fi
|
fi
|
||||||
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth" "tarball"
|
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth" "tarball"
|
||||||
|
|||||||
@@ -27,7 +27,10 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
ensure_dependencies memcached libmemcached-tools
|
if ! command -v memcached >/dev/null 2>&1; then
|
||||||
|
$STD apt update
|
||||||
|
$STD apt install -y memcached libmemcached-tools
|
||||||
|
fi
|
||||||
if check_for_gh_release "adventurelog" "seanmorley15/adventurelog"; then
|
if check_for_gh_release "adventurelog" "seanmorley15/adventurelog"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop adventurelog-backend
|
systemctl stop adventurelog-backend
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: hoholms
|
# Author: hoholms
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/grafana/loki
|
# Source: https://github.com/grafana/loki
|
||||||
|
|||||||
@@ -1,51 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: MickLesk (CanbiZ)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/orhun/rustypaste
|
|
||||||
|
|
||||||
APP="Alpine-RustyPaste"
|
|
||||||
var_tags="${var_tags:-alpine;pastebin;storage}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-256}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
var_os="${var_os:-alpine}"
|
|
||||||
var_version="${var_version:-3.23}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if ! apk info -e rustypaste >/dev/null 2>&1; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Updating RustyPaste"
|
|
||||||
$STD apk update
|
|
||||||
$STD apk upgrade rustypaste --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
|
|
||||||
msg_ok "Updated RustyPaste"
|
|
||||||
|
|
||||||
msg_info "Restarting Services"
|
|
||||||
$STD rc-service rustypaste restart
|
|
||||||
msg_ok "Restarted Services"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: pshankinclarke (lazarillo)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://valkey.io/
|
|
||||||
|
|
||||||
APP="Alpine-Valkey"
|
|
||||||
var_tags="${var_tags:-alpine;database}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-256}"
|
|
||||||
var_disk="${var_disk:-1}"
|
|
||||||
var_os="${var_os:-alpine}"
|
|
||||||
var_version="${var_version:-3.23}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
if ! apk -e info newt >/dev/null 2>&1; then
|
|
||||||
apk add -q newt
|
|
||||||
fi
|
|
||||||
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
|
||||||
while true; do
|
|
||||||
CHOICE=$(
|
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Valkey Management" --menu "Select option" 11 58 3 \
|
|
||||||
"1" "Update Valkey" \
|
|
||||||
"2" "Allow 0.0.0.0 for listening" \
|
|
||||||
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
|
|
||||||
)
|
|
||||||
exit_status=$?
|
|
||||||
if [ $exit_status == 1 ]; then
|
|
||||||
clear
|
|
||||||
exit-script
|
|
||||||
fi
|
|
||||||
header_info
|
|
||||||
case $CHOICE in
|
|
||||||
1)
|
|
||||||
msg_info "Updating Valkey"
|
|
||||||
apk update && apk upgrade valkey
|
|
||||||
rc-service valkey restart
|
|
||||||
msg_ok "Updated Valkey"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
2)
|
|
||||||
msg_info "Setting Valkey to listen on all interfaces"
|
|
||||||
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf
|
|
||||||
rc-service valkey restart
|
|
||||||
msg_ok "Valkey now listens on all interfaces!"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
3)
|
|
||||||
msg_info "Setting Valkey to listen only on ${LXCIP}"
|
|
||||||
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/valkey/valkey.conf
|
|
||||||
rc-service valkey restart
|
|
||||||
msg_ok "Valkey now listens only on ${LXCIP}!"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${APP} should be reachable on port 6379.
|
|
||||||
${BL}valkey-cli -h ${IP} -p 6379${CL} \n"
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: MickLesk (Canbiz)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/ampache/ampache
|
|
||||||
|
|
||||||
APP="Ampache"
|
|
||||||
var_tags="${var_tags:-music}"
|
|
||||||
var_disk="${var_disk:-5}"
|
|
||||||
var_cpu="${var_cpu:-4}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /opt/ampache ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
if check_for_gh_release "Ampache" "ampache/ampache"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop apache2
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Creating Backup"
|
|
||||||
cp /opt/ampache/config/ampache.cfg.php /tmp/ampache.cfg.php.backup
|
|
||||||
cp /opt/ampache/public/rest/.htaccess /tmp/ampache_rest.htaccess.backup
|
|
||||||
cp /opt/ampache/public/play/.htaccess /tmp/ampache_play.htaccess.backup
|
|
||||||
rm -rf /opt/ampache_backup
|
|
||||||
mv /opt/ampache /opt/ampache_backup
|
|
||||||
msg_ok "Created Backup"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "Ampache" "ampache/ampache" "prebuild" "latest" "/opt/ampache" "ampache-*_all_php8.4.zip"
|
|
||||||
|
|
||||||
msg_info "Restoring Backup"
|
|
||||||
cp /tmp/ampache.cfg.php.backup /opt/ampache/config/ampache.cfg.php
|
|
||||||
cp /tmp/ampache_rest.htaccess.backup /opt/ampache/public/rest/.htaccess
|
|
||||||
cp /tmp/ampache_play.htaccess.backup /opt/ampache/public/play/.htaccess
|
|
||||||
chmod 664 /opt/ampache/public/rest/.htaccess /opt/ampache/public/play/.htaccess
|
|
||||||
chown -R www-data:www-data /opt/ampache
|
|
||||||
rm -f /tmp/ampache*.backup
|
|
||||||
msg_ok "Restored Configuration"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start apache2
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
msg_custom "⚠️" "${YW}" "Complete database update by visiting: http://${LOCAL_IP}/update.php"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/install.php${CL}"
|
|
||||||
@@ -31,7 +31,11 @@ function update_script() {
|
|||||||
NODE_VERSION="22" NODE_MODULE="@postlight/parser@latest,single-file-cli@latest" setup_nodejs
|
NODE_VERSION="22" NODE_MODULE="@postlight/parser@latest,single-file-cli@latest" setup_nodejs
|
||||||
PYTHON_VERSION="3.13" setup_uv
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
|
|
||||||
ensure_dependencies chromium
|
if ! dpkg -l | grep -q "^ii chromium "; then
|
||||||
|
msg_info "Installing System Dependencies"
|
||||||
|
$STD apt-get install -y chromium
|
||||||
|
msg_ok "Installed System Dependencies"
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop archivebox
|
systemctl stop archivebox
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
# Author: vhsdream
|
# Author: vhsdream
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://codeberg.org/gelbphoenix/autocaliweb
|
# Source: https://github.com/gelbphoenix/autocaliweb
|
||||||
|
|
||||||
APP="Autocaliweb"
|
APP="Autocaliweb"
|
||||||
var_tags="${var_tags:-ebooks}"
|
var_tags="${var_tags:-ebooks}"
|
||||||
@@ -30,8 +30,8 @@ function update_script() {
|
|||||||
|
|
||||||
setup_uv
|
setup_uv
|
||||||
|
|
||||||
RELEASE=$(get_latest_codeberg_release "gelbphoenix/autocaliweb")
|
RELEASE=$(get_latest_github_release "gelbphoenix/autocaliweb")
|
||||||
if check_for_codeberg_release "autocaliweb" "gelbphoenix/autocaliweb"; then
|
if check_for_gh_release "autocaliweb" "gelbphoenix/autocaliweb"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop autocaliweb metadata-change-detector acw-ingest-service acw-auto-zipper
|
systemctl stop autocaliweb metadata-change-detector acw-ingest-service acw-auto-zipper
|
||||||
msg_ok "Stopped Services"
|
msg_ok "Stopped Services"
|
||||||
@@ -39,7 +39,7 @@ function update_script() {
|
|||||||
INSTALL_DIR="/opt/autocaliweb"
|
INSTALL_DIR="/opt/autocaliweb"
|
||||||
export VIRTUAL_ENV="${INSTALL_DIR}/venv"
|
export VIRTUAL_ENV="${INSTALL_DIR}/venv"
|
||||||
$STD tar -cf ~/autocaliweb_bkp.tar "$INSTALL_DIR"/{metadata_change_logs,dirs.json,.env,scripts/ingest_watcher.sh,scripts/auto_zipper_wrapper.sh,scripts/metadata_change_detector_wrapper.sh}
|
$STD tar -cf ~/autocaliweb_bkp.tar "$INSTALL_DIR"/{metadata_change_logs,dirs.json,.env,scripts/ingest_watcher.sh,scripts/auto_zipper_wrapper.sh,scripts/metadata_change_detector_wrapper.sh}
|
||||||
fetch_and_deploy_codeberg_release "autocaliweb" "gelbphoenix/autocaliweb" "tarball" "latest" "/opt/autocaliweb"
|
fetch_and_deploy_gh_release "autocaliweb" "gelbphoenix/autocaliweb" "tarball" "latest" "/opt/autocaliweb"
|
||||||
|
|
||||||
msg_info "Updating Autocaliweb"
|
msg_info "Updating Autocaliweb"
|
||||||
cd "$INSTALL_DIR"
|
cd "$INSTALL_DIR"
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ function update_script() {
|
|||||||
mv /opt/baikal /opt/baikal-backup
|
mv /opt/baikal /opt/baikal-backup
|
||||||
msg_ok "Backed up data"
|
msg_ok "Backed up data"
|
||||||
|
|
||||||
PHP_APACHE="YES" PHP_VERSION="8.3" setup_php
|
PHP_APACHE="YES" PHP_MODULE="pgsql,curl" PHP_VERSION="8.3" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal" "tarball"
|
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal" "tarball"
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ function update_script() {
|
|||||||
systemctl stop nginx
|
systemctl stop nginx
|
||||||
msg_ok "Stopped nginx"
|
msg_ok "Stopped nginx"
|
||||||
|
|
||||||
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="pdo-sqlite" setup_php
|
PHP_VERSION="8.4" PHP_FPM=YES PHP_MODULE="ffi,redis,pdo-sqlite" setup_php
|
||||||
|
|
||||||
msg_info "Backing up Bar Assistant"
|
msg_info "Backing up Bar Assistant"
|
||||||
mv /opt/bar-assistant /opt/bar-assistant-backup
|
mv /opt/bar-assistant /opt/bar-assistant-backup
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) community-scripts ORG
|
||||||
# Author: Michelle Zitzerman (Sinofage)
|
# Author: Michelle Zitzerman (Sinofage)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://beszel.dev/
|
# Source: https://beszel.dev/
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ function update_script() {
|
|||||||
msg_ok "Backup finished"
|
msg_ok "Backup finished"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack" "tarball"
|
fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack" "tarball"
|
||||||
PHP_VERSION="8.3" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="ldap,tidy,mysqli" setup_php
|
PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
|
|
||||||
msg_info "Restoring backup"
|
msg_info "Restoring backup"
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ function update_script() {
|
|||||||
|
|
||||||
if check_for_gh_release "bunkerweb" "bunkerity/bunkerweb"; then
|
if check_for_gh_release "bunkerweb" "bunkerity/bunkerweb"; then
|
||||||
msg_info "Updating BunkerWeb"
|
msg_info "Updating BunkerWeb"
|
||||||
RELEASE=$(get_latest_github_release "bunkerity/bunkerweb")
|
RELEASE=$(get_latest_github_release "bunkerweb" "bunkerity/bunkerweb")
|
||||||
cat <<EOF >/etc/apt/preferences.d/bunkerweb
|
cat <<EOF >/etc/apt/preferences.d/bunkerweb
|
||||||
Package: bunkerweb
|
Package: bunkerweb
|
||||||
Pin: version ${RELEASE}
|
Pin: version ${RELEASE}
|
||||||
|
|||||||
48
ct/byparr.sh
48
ct/byparr.sh
@@ -35,54 +35,6 @@ function update_script() {
|
|||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Byparr" "ThePhaseless/Byparr" "tarball" "latest"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Byparr" "ThePhaseless/Byparr" "tarball" "latest"
|
||||||
|
|
||||||
if ! dpkg -l | grep -q ffmpeg; then
|
|
||||||
msg_info "Installing dependencies"
|
|
||||||
$STD apt install -y --no-install-recommends \
|
|
||||||
ffmpeg \
|
|
||||||
libatk1.0-0 \
|
|
||||||
libcairo-gobject2 \
|
|
||||||
libcairo2 \
|
|
||||||
libdbus-glib-1-2 \
|
|
||||||
libfontconfig1 \
|
|
||||||
libfreetype6 \
|
|
||||||
libgdk-pixbuf-xlib-2.0-0 \
|
|
||||||
libglib2.0-0 \
|
|
||||||
libgtk-3-0 \
|
|
||||||
libpango-1.0-0 \
|
|
||||||
libpangocairo-1.0-0 \
|
|
||||||
libpangoft2-1.0-0 \
|
|
||||||
libx11-6 \
|
|
||||||
libx11-xcb1 \
|
|
||||||
libxcb-shm0 \
|
|
||||||
libxcb1 \
|
|
||||||
libxcomposite1 \
|
|
||||||
libxcursor1 \
|
|
||||||
libxdamage1 \
|
|
||||||
libxext6 \
|
|
||||||
libxfixes3 \
|
|
||||||
libxi6 \
|
|
||||||
libxrender1 \
|
|
||||||
libxt6 \
|
|
||||||
libxtst6 \
|
|
||||||
xvfb \
|
|
||||||
fonts-noto-color-emoji \
|
|
||||||
fonts-unifont \
|
|
||||||
xfonts-cyrillic \
|
|
||||||
xfonts-scalable \
|
|
||||||
fonts-liberation \
|
|
||||||
fonts-ipafont-gothic \
|
|
||||||
fonts-wqy-zenhei \
|
|
||||||
fonts-tlwg-loma-otf
|
|
||||||
$STD apt autoremove -y chromium
|
|
||||||
msg_ok "Installed dependencies"
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Configuring Byparr"
|
|
||||||
cd /opt/Byparr
|
|
||||||
$STD uv sync --link-mode copy
|
|
||||||
$STD uv run camoufox fetch
|
|
||||||
msg_ok "Configured Byparr"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start byparr
|
systemctl start byparr
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|||||||
@@ -29,7 +29,12 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ensure_dependencies libjpeg-dev
|
if ! dpkg -s libjpeg-dev >/dev/null 2>&1; then
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y libjpeg-dev
|
||||||
|
msg_ok "Updated Dependencies"
|
||||||
|
fi
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,12 @@ function update_script() {
|
|||||||
systemctl stop commafeed
|
systemctl stop commafeed
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
ensure_dependencies rsync
|
if ! [[ $(dpkg -s rsync 2>/dev/null) ]]; then
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt install -y rsync
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -d /opt/commafeed/data ] && [ "$(ls -A /opt/commafeed/data)" ]; then
|
if [ -d /opt/commafeed/data ] && [ "$(ls -A /opt/commafeed/data)" ]; then
|
||||||
msg_info "Backing up existing data"
|
msg_info "Backing up existing data"
|
||||||
|
|||||||
@@ -44,7 +44,10 @@ function update_script() {
|
|||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
if check_for_gh_release "cronicle" "jhuckaby/Cronicle"; then
|
if check_for_gh_release "cronicle" "jhuckaby/Cronicle"; then
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
ensure_dependencies git build-essential ca-certificates
|
$STD apt install -y \
|
||||||
|
git \
|
||||||
|
build-essential \
|
||||||
|
ca-certificates
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|||||||
@@ -38,7 +38,9 @@ function update_script() {
|
|||||||
systemctl reload nginx
|
systemctl reload nginx
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ensure_dependencies vlc-bin vlc-plugin-base
|
if ! dpkg -s vlc-bin vlc-plugin-base &>/dev/null; then
|
||||||
|
$STD apt update && $STD apt install -y vlc-bin vlc-plugin-base
|
||||||
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "Dispatcharr" "Dispatcharr/Dispatcharr"; then
|
if check_for_gh_release "Dispatcharr" "Dispatcharr/Dispatcharr"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: wendyliga
|
# Author: wendyliga
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/DonutWare/Fladder
|
# Source: https://github.com/DonutWare/Fladder
|
||||||
|
|||||||
@@ -27,28 +27,35 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if check_for_codeberg_release "forgejo" "forgejo/forgejo"; then
|
msg_info "Stopping Service"
|
||||||
msg_info "Stopping Service"
|
systemctl stop forgejo
|
||||||
systemctl stop forgejo
|
msg_ok "Stopped Service"
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
fetch_and_deploy_codeberg_release "forgejo" "forgejo/forgejo" "singlefile" "latest" "/opt/forgejo" "forgejo-*-linux-amd64"
|
msg_info "Updating ${APP}"
|
||||||
ln -sf /opt/forgejo/forgejo /usr/local/bin/forgejo
|
RELEASE=$(curl -fsSL https://codeberg.org/api/v1/repos/forgejo/forgejo/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/^v//')
|
||||||
|
curl -fsSL "https://codeberg.org/forgejo/forgejo/releases/download/v${RELEASE}/forgejo-${RELEASE}-linux-amd64" -o "forgejo-$RELEASE-linux-amd64"
|
||||||
|
rm -rf /opt/forgejo/*
|
||||||
|
cp -r forgejo-$RELEASE-linux-amd64 /opt/forgejo/forgejo-$RELEASE-linux-amd64
|
||||||
|
chmod +x /opt/forgejo/forgejo-$RELEASE-linux-amd64
|
||||||
|
ln -sf /opt/forgejo/forgejo-$RELEASE-linux-amd64 /usr/local/bin/forgejo
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
if grep -q "GITEA_WORK_DIR" /etc/systemd/system/forgejo.service; then
|
msg_info "Cleaning"
|
||||||
msg_info "Updating Service File"
|
rm -rf forgejo-$RELEASE-linux-amd64
|
||||||
sed -i "s/GITEA_WORK_DIR/FORGEJO_WORK_DIR/g" /etc/systemd/system/forgejo.service
|
msg_ok "Cleaned"
|
||||||
systemctl daemon-reload
|
|
||||||
msg_ok "Updated Service File"
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
# Fix env var from older version of community script
|
||||||
systemctl start forgejo
|
if grep -q "GITEA_WORK_DIR" /etc/systemd/system/forgejo.service; then
|
||||||
msg_ok "Started Service"
|
msg_info "Updating Service File"
|
||||||
msg_ok "Updated successfully!"
|
sed -i "s/GITEA_WORK_DIR/FORGEJO_WORK_DIR/g" /etc/systemd/system/forgejo.service
|
||||||
else
|
systemctl daemon-reload
|
||||||
msg_ok "No update required. ${APP} is already at the latest version."
|
msg_ok "Updated Service File"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start forgejo
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,9 @@ function update_script() {
|
|||||||
msg_error "Project directory does not exist: $PROJECT_DIR"
|
msg_error "Project directory does not exist: $PROJECT_DIR"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
ensure_dependencies git
|
if ! command -v git &>/dev/null; then
|
||||||
|
$STD apt install -y git
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Stopping service $SERVICE_NAME"
|
msg_info "Stopping service $SERVICE_NAME"
|
||||||
systemctl stop "$SERVICE_NAME"
|
systemctl stop "$SERVICE_NAME"
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ function update_script() {
|
|||||||
curl -fsSL "https://packages.graylog2.org/repo/packages/graylog-7.0-repository_latest.deb" -o "graylog-7.0-repository_latest.deb"
|
curl -fsSL "https://packages.graylog2.org/repo/packages/graylog-7.0-repository_latest.deb" -o "graylog-7.0-repository_latest.deb"
|
||||||
$STD dpkg -i graylog-7.0-repository_latest.deb
|
$STD dpkg -i graylog-7.0-repository_latest.deb
|
||||||
$STD apt update
|
$STD apt update
|
||||||
ensure_dependencies graylog-server graylog-datanode
|
$STD apt install -y graylog-server graylog-datanode
|
||||||
rm -f graylog-7.0-repository_latest.deb
|
rm -f graylog-7.0-repository_latest.deb
|
||||||
msg_ok "Updated Graylog"
|
msg_ok "Updated Graylog"
|
||||||
elif dpkg --compare-versions "$CURRENT_VERSION" ge "7.0"; then
|
elif dpkg --compare-versions "$CURRENT_VERSION" ge "7.0"; then
|
||||||
|
|||||||
@@ -29,8 +29,6 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ensure_dependencies git
|
|
||||||
|
|
||||||
if check_for_gh_release "grist" "gristlabs/grist-core"; then
|
if check_for_gh_release "grist" "gristlabs/grist-core"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop grist
|
systemctl stop grist
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
php_ver=$(php -v | head -n 1 | awk '{print $2}')
|
php_ver=$(php -v | head -n 1 | awk '{print $2}')
|
||||||
if [[ ! $php_ver == "8.3"* ]]; then
|
if [[ ! $php_ver == "8.3"* ]]; then
|
||||||
PHP_VERSION="8.3" PHP_APACHE="YES" setup_php
|
PHP_VERSION="8.3" PHP_MODULE="sqlite3,bz2" PHP_APACHE="yes" setup_php
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "grocy" "grocy/grocy"; then
|
if check_for_gh_release "grocy" "grocy/grocy"; then
|
||||||
msg_info "Updating grocy"
|
msg_info "Updating grocy"
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
___ __ _ ____ __ ____ __
|
|
||||||
/ | / /___ (_)___ ___ / __ \__ _______/ /___ __/ __ \____ ______/ /____
|
|
||||||
/ /| | / / __ \/ / __ \/ _ \______/ /_/ / / / / ___/ __/ / / / /_/ / __ `/ ___/ __/ _ \
|
|
||||||
/ ___ |/ / /_/ / / / / / __/_____/ _, _/ /_/ (__ ) /_/ /_/ / ____/ /_/ (__ ) /_/ __/
|
|
||||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\__,_/____/\__/\__, /_/ \__,_/____/\__/\___/
|
|
||||||
/_/ /____/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
___ __ _ _ __ ____
|
|
||||||
/ | / /___ (_)___ ___ | | / /___ _/ / /_____ __ __
|
|
||||||
/ /| | / / __ \/ / __ \/ _ \_____| | / / __ `/ / //_/ _ \/ / / /
|
|
||||||
/ ___ |/ / /_/ / / / / / __/_____/ |/ / /_/ / / ,< / __/ /_/ /
|
|
||||||
/_/ |_/_/ .___/_/_/ /_/\___/ |___/\__,_/_/_/|_|\___/\__, /
|
|
||||||
/_/ /____/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
___ __
|
|
||||||
/ | ____ ___ ____ ____ ______/ /_ ___
|
|
||||||
/ /| | / __ `__ \/ __ \/ __ `/ ___/ __ \/ _ \
|
|
||||||
/ ___ |/ / / / / / /_/ / /_/ / /__/ / / / __/
|
|
||||||
/_/ |_/_/ /_/ /_/ .___/\__,_/\___/_/ /_/\___/
|
|
||||||
/_/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
__ __ _ __ __ ____ __
|
|
||||||
/ //_/(_) /______/ /_ ___ ____ / __ \_ __/ /
|
|
||||||
/ ,< / / __/ ___/ __ \/ _ \/ __ \/ / / / | /| / / /
|
|
||||||
/ /| |/ / /_/ /__/ / / / __/ / / / /_/ /| |/ |/ / /
|
|
||||||
/_/ |_/_/\__/\___/_/ /_/\___/_/ /_/\____/ |__/|__/_/
|
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
__ ______ __
|
|
||||||
/ / ____ _____ ____ ___ ______ _____ ____/_ __/___ ____ / /
|
|
||||||
/ / / __ `/ __ \/ __ `/ / / / __ `/ __ `/ _ \/ / / __ \/ __ \/ /
|
|
||||||
/ /___/ /_/ / / / / /_/ / /_/ / /_/ / /_/ / __/ / / /_/ / /_/ / /
|
|
||||||
/_____/\__,_/_/ /_/\__, /\__,_/\__,_/\__, /\___/_/ \____/\____/_/
|
|
||||||
/____/ /____/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
_ __ _ __ ______
|
|
||||||
/ | / /___ _(_)___ _ __ / / / / _/
|
|
||||||
/ |/ / __ `/ / __ \| |/_/_____/ / / // /
|
|
||||||
/ /| / /_/ / / / / /> </_____/ /_/ // /
|
|
||||||
/_/ |_/\__, /_/_/ /_/_/|_| \____/___/
|
|
||||||
/____/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
__ __ __
|
|
||||||
____ ____ ____/ /__ _________ ______/ /_ / /__ __
|
|
||||||
/ __ \/ __ \/ __ / _ \/ ___/ __ `/ ___/ __/_____/ __/ | / /
|
|
||||||
/ / / / /_/ / /_/ / __/ /__/ /_/ (__ ) /_/_____/ /_ | |/ /
|
|
||||||
/_/ /_/\____/\__,_/\___/\___/\__,_/____/\__/ \__/ |___/
|
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
____ ________ __
|
|
||||||
/ __ \____ ___ ____ / ____/ /___ __ ______/ /
|
|
||||||
/ / / / __ \/ _ \/ __ \/ / / / __ \/ / / / __ /
|
|
||||||
/ /_/ / /_/ / __/ / / / /___/ / /_/ / /_/ / /_/ /
|
|
||||||
\____/ .___/\___/_/ /_/\____/_/\____/\__,_/\__,_/
|
|
||||||
/_/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
__ __
|
|
||||||
_______ _______/ /___ ______ ____ ______/ /____
|
|
||||||
/ ___/ / / / ___/ __/ / / / __ \/ __ `/ ___/ __/ _ \
|
|
||||||
/ / / /_/ (__ ) /_/ /_/ / /_/ / /_/ (__ ) /_/ __/
|
|
||||||
/_/ \__,_/____/\__/\__, / .___/\__,_/____/\__/\___/
|
|
||||||
/____/_/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
__ ______ __
|
|
||||||
_____/ /_ ___ / / __/___ ___ ____ ______/ /__
|
|
||||||
/ ___/ __ \/ _ \/ / /_/ __ `__ \/ __ `/ ___/ //_/
|
|
||||||
(__ ) / / / __/ / __/ / / / / / /_/ / / / ,<
|
|
||||||
/____/_/ /_/\___/_/_/ /_/ /_/ /_/\__,_/_/ /_/|_|
|
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
_____ ____ __ _____ ___ ____ ___ ______
|
|
||||||
/ ___// __ \ / / / ___/___ ______ _____ _____ |__ \ / __ \__ \ / ____/
|
|
||||||
\__ \/ / / / / / \__ \/ _ \/ ___/ | / / _ \/ ___/ __/ // / / /_/ //___ \
|
|
||||||
___/ / /_/ / / /___ ___/ / __/ / | |/ / __/ / / __// /_/ / __/____/ /
|
|
||||||
/____/\___\_\/_____/ /____/\___/_/ |___/\___/_/ /____/\____/____/_____/
|
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
_ __ ____ __ ____ ___
|
|
||||||
| | / /__ ____ _/ / /_/ /_ / __/___ / (_)___
|
|
||||||
| | /| / / _ \/ __ `/ / __/ __ \/ /_/ __ \/ / / __ \
|
|
||||||
| |/ |/ / __/ /_/ / / /_/ / / / __/ /_/ / / / /_/ /
|
|
||||||
|__/|__/\___/\__,_/_/\__/_/ /_/_/ \____/_/_/\____/
|
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
_ ___ __ ___ __
|
|
||||||
| | / (_)____/ /_ / (_)____/ /_
|
|
||||||
| | /| / / / ___/ __ \/ / / ___/ __/
|
|
||||||
| |/ |/ / (__ ) / / / / (__ ) /_
|
|
||||||
|__/|__/_/____/_/ /_/_/_/____/\__/
|
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
_ __ _ __ ______ __
|
|
||||||
| | / /____(_) /____ / ____/_______ ___ / /_ __
|
|
||||||
| | /| / / ___/ / __/ _ \/ /_ / ___/ _ \/ _ \/ / / / /
|
|
||||||
| |/ |/ / / / / /_/ __/ __/ / / / __/ __/ / /_/ /
|
|
||||||
|__/|__/_/ /_/\__/\___/_/ /_/ \___/\___/_/\__, /
|
|
||||||
/____/
|
|
||||||
@@ -30,7 +30,14 @@ function update_script() {
|
|||||||
|
|
||||||
get_lxc_ip
|
get_lxc_ip
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||||
ensure_dependencies jq
|
if ! command -v jq &>/dev/null; then
|
||||||
|
$STD msg_info "Installing jq..."
|
||||||
|
$STD apt-get update -qq &>/dev/null
|
||||||
|
$STD apt-get install -y jq &>/dev/null || {
|
||||||
|
msg_error "Failed to install jq"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "homepage" "gethomepage/homepage"; then
|
if check_for_gh_release "homepage" "gethomepage/homepage"; then
|
||||||
msg_info "Stopping service"
|
msg_info "Stopping service"
|
||||||
|
|||||||
95
ct/immich.sh
95
ct/immich.sh
@@ -36,6 +36,10 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
setup_uv
|
||||||
|
PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')"
|
||||||
|
NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||||
|
|
||||||
if [[ ! -f /etc/apt/preferences.d/preferences ]]; then
|
if [[ ! -f /etc/apt/preferences.d/preferences ]]; then
|
||||||
msg_info "Adding Debian Testing repo"
|
msg_info "Adding Debian Testing repo"
|
||||||
sed -i 's/ trixie-updates/ trixie-updates testing/g' /etc/apt/sources.list.d/debian.sources
|
sed -i 's/ trixie-updates/ trixie-updates testing/g' /etc/apt/sources.list.d/debian.sources
|
||||||
@@ -48,7 +52,9 @@ Package: *
|
|||||||
Pin:release a=testing
|
Pin:release a=testing
|
||||||
Pin-Priority: 450
|
Pin-Priority: 450
|
||||||
EOF
|
EOF
|
||||||
[[ -f /etc/apt/preferences.d/immich ]] && rm /etc/apt/preferences.d/immich
|
if [[ -f /etc/apt/preferences.d/immich ]]; then
|
||||||
|
rm /etc/apt/preferences.d/immich
|
||||||
|
fi
|
||||||
$STD apt update
|
$STD apt update
|
||||||
msg_ok "Added Debian Testing repo"
|
msg_ok "Added Debian Testing repo"
|
||||||
fi
|
fi
|
||||||
@@ -62,8 +68,9 @@ EOF
|
|||||||
if [[ ! -f /etc/apt/sources.list.d/mise.list ]]; then
|
if [[ ! -f /etc/apt/sources.list.d/mise.list ]]; then
|
||||||
msg_info "Installing Mise"
|
msg_info "Installing Mise"
|
||||||
curl -fSs https://mise.jdx.dev/gpg-key.pub | tee /etc/apt/keyrings/mise-archive-keyring.pub 1>/dev/null
|
curl -fSs https://mise.jdx.dev/gpg-key.pub | tee /etc/apt/keyrings/mise-archive-keyring.pub 1>/dev/null
|
||||||
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=amd64] https://mise.jdx.dev/deb stable main" >/etc/apt/sources.list.d/mise.list
|
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=amd64] https://mise.jdx.dev/deb stable main" | tee /etc/apt/sources.list.d/mise.list
|
||||||
ensure_dependencies mise
|
$STD apt update
|
||||||
|
$STD apt install -y mise
|
||||||
msg_ok "Installed Mise"
|
msg_ok "Installed Mise"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -84,7 +91,7 @@ EOF
|
|||||||
curl -fsSLO "$url"
|
curl -fsSLO "$url"
|
||||||
done
|
done
|
||||||
$STD apt-mark unhold libigdgmm12
|
$STD apt-mark unhold libigdgmm12
|
||||||
$STD apt install -y --allow-downgrades ./libigdgmm12*.deb
|
$STD apt install -y ./libigdgmm12*.deb
|
||||||
rm ./libigdgmm12*.deb
|
rm ./libigdgmm12*.deb
|
||||||
$STD apt install -y ./*.deb
|
$STD apt install -y ./*.deb
|
||||||
rm ./*.deb
|
rm ./*.deb
|
||||||
@@ -105,31 +112,29 @@ EOF
|
|||||||
msg_ok "Image-processing libraries up to date"
|
msg_ok "Image-processing libraries up to date"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE="2.5.3"
|
RELEASE="2.4.1"
|
||||||
if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
|
if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
|
||||||
if [[ $(cat ~/.immich) > "2.5.1" ]]; then
|
|
||||||
msg_info "Enabling Maintenance Mode"
|
|
||||||
cd /opt/immich/app/bin
|
|
||||||
$STD ./immich-admin enable-maintenance-mode
|
|
||||||
export MAINT_MODE=1
|
|
||||||
$STD cd -
|
|
||||||
msg_ok "Enabled Maintenance Mode"
|
|
||||||
fi
|
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop immich-web
|
systemctl stop immich-web
|
||||||
systemctl stop immich-ml
|
systemctl stop immich-ml
|
||||||
msg_ok "Stopped Services"
|
msg_ok "Stopped Services"
|
||||||
VCHORD_RELEASE="0.5.3"
|
VCHORD_RELEASE="0.5.3"
|
||||||
[[ -f ~/.vchord_version ]] && mv ~/.vchord_version ~/.vectorchord
|
if [[ ! -f ~/.vchord_version ]] || [[ "$VCHORD_RELEASE" != "$(cat ~/.vchord_version)" ]]; then
|
||||||
if check_for_gh_release "VectorChord" "tensorchord/VectorChord" "${VCHORD_RELEASE}"; then
|
msg_info "Upgrading VectorChord"
|
||||||
fetch_and_deploy_gh_release "VectorChord" "tensorchord/VectorChord" "binary" "${VCHORD_RELEASE}" "/tmp" "postgresql-16-vchord_*_amd64.deb"
|
curl -fsSL "https://github.com/tensorchord/vectorchord/releases/download/${VCHORD_RELEASE}/postgresql-16-vchord_${VCHORD_RELEASE}-1_amd64.deb" -o vchord.deb
|
||||||
|
$STD apt install -y ./vchord.deb
|
||||||
systemctl restart postgresql
|
systemctl restart postgresql
|
||||||
$STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vector UPDATE;"
|
$STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vector UPDATE;"
|
||||||
$STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;"
|
$STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;"
|
||||||
$STD sudo -u postgres psql -d immich -c "REINDEX INDEX face_index;"
|
$STD sudo -u postgres psql -d immich -c "REINDEX INDEX face_index;"
|
||||||
$STD sudo -u postgres psql -d immich -c "REINDEX INDEX clip_index;"
|
$STD sudo -u postgres psql -d immich -c "REINDEX INDEX clip_index;"
|
||||||
|
echo "$VCHORD_RELEASE" >~/.vchord_version
|
||||||
|
rm ./vchord.deb
|
||||||
|
msg_ok "Upgraded VectorChord to v${VCHORD_RELEASE}"
|
||||||
|
fi
|
||||||
|
if ! dpkg -l | grep -q ccache; then
|
||||||
|
$STD apt install -yqq ccache
|
||||||
fi
|
fi
|
||||||
ensure_dependencies ccache
|
|
||||||
|
|
||||||
INSTALL_DIR="/opt/${APP}"
|
INSTALL_DIR="/opt/${APP}"
|
||||||
UPLOAD_DIR="$(sed -n '/^IMMICH_MEDIA_LOCATION/s/[^=]*=//p' /opt/immich/.env)"
|
UPLOAD_DIR="$(sed -n '/^IMMICH_MEDIA_LOCATION/s/[^=]*=//p' /opt/immich/.env)"
|
||||||
@@ -139,7 +144,7 @@ EOF
|
|||||||
ML_DIR="${APP_DIR}/machine-learning"
|
ML_DIR="${APP_DIR}/machine-learning"
|
||||||
GEO_DIR="${INSTALL_DIR}/geodata"
|
GEO_DIR="${INSTALL_DIR}/geodata"
|
||||||
|
|
||||||
[[ -f "$ML_DIR"/ml_start.sh ]] && cp "$ML_DIR"/ml_start.sh "$INSTALL_DIR"
|
cp "$ML_DIR"/ml_start.sh "$INSTALL_DIR"
|
||||||
if grep -qs "set -a" "$APP_DIR"/bin/start.sh; then
|
if grep -qs "set -a" "$APP_DIR"/bin/start.sh; then
|
||||||
cp "$APP_DIR"/bin/start.sh "$INSTALL_DIR"
|
cp "$APP_DIR"/bin/start.sh "$INSTALL_DIR"
|
||||||
else
|
else
|
||||||
@@ -160,12 +165,9 @@ EOF
|
|||||||
rm -rf "${APP_DIR:?}"/*
|
rm -rf "${APP_DIR:?}"/*
|
||||||
)
|
)
|
||||||
|
|
||||||
setup_uv
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v${RELEASE}" "$SRC_DIR"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v${RELEASE}" "$SRC_DIR"
|
||||||
PNPM_VERSION="$(jq -r '.packageManager | split("@")[1]' ${SRC_DIR}/package.json)"
|
|
||||||
NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
|
||||||
|
|
||||||
msg_info "Updating Immich web and microservices"
|
msg_info "Updating ${APP} web and microservices"
|
||||||
cd "$SRC_DIR"/server
|
cd "$SRC_DIR"/server
|
||||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||||
export CI=1
|
export CI=1
|
||||||
@@ -178,7 +180,7 @@ EOF
|
|||||||
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
||||||
$STD pnpm --filter immich --frozen-lockfile --prod --no-optional deploy "$APP_DIR"
|
$STD pnpm --filter immich --frozen-lockfile --prod --no-optional deploy "$APP_DIR"
|
||||||
cp "$APP_DIR"/package.json "$APP_DIR"/bin
|
cp "$APP_DIR"/package.json "$APP_DIR"/bin
|
||||||
sed -i "s|^start|${APP_DIR}/bin/start|" "$APP_DIR"/bin/immich-admin
|
sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
|
||||||
|
|
||||||
# openapi & web build
|
# openapi & web build
|
||||||
cd "$SRC_DIR"
|
cd "$SRC_DIR"
|
||||||
@@ -194,7 +196,8 @@ EOF
|
|||||||
$STD pnpm --filter @immich/sdk --filter @immich/cli --frozen-lockfile install
|
$STD pnpm --filter @immich/sdk --filter @immich/cli --frozen-lockfile install
|
||||||
$STD pnpm --filter @immich/sdk --filter @immich/cli build
|
$STD pnpm --filter @immich/sdk --filter @immich/cli build
|
||||||
$STD pnpm --filter @immich/cli --prod --no-optional deploy "$APP_DIR"/cli
|
$STD pnpm --filter @immich/cli --prod --no-optional deploy "$APP_DIR"/cli
|
||||||
[[ -f "$INSTALL_DIR"/start.sh ]] && mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
|
cd "$APP_DIR"
|
||||||
|
mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
|
||||||
|
|
||||||
# plugins
|
# plugins
|
||||||
cd "$SRC_DIR"
|
cd "$SRC_DIR"
|
||||||
@@ -206,7 +209,7 @@ EOF
|
|||||||
mkdir -p "$PLUGIN_DIR"
|
mkdir -p "$PLUGIN_DIR"
|
||||||
cp -r ./dist "$PLUGIN_DIR"/dist
|
cp -r ./dist "$PLUGIN_DIR"/dist
|
||||||
cp ./manifest.json "$PLUGIN_DIR"
|
cp ./manifest.json "$PLUGIN_DIR"
|
||||||
msg_ok "Updated Immich server, web, cli and plugins"
|
msg_ok "Updated ${APP} server, web, cli and plugins"
|
||||||
|
|
||||||
cd "$SRC_DIR"/machine-learning
|
cd "$SRC_DIR"/machine-learning
|
||||||
mkdir -p "$ML_DIR" && chown -R immich:immich "$ML_DIR"
|
mkdir -p "$ML_DIR" && chown -R immich:immich "$ML_DIR"
|
||||||
@@ -214,19 +217,20 @@ EOF
|
|||||||
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
||||||
if [[ -f ~/.openvino ]]; then
|
if [[ -f ~/.openvino ]]; then
|
||||||
msg_info "Updating HW-accelerated machine-learning"
|
msg_info "Updating HW-accelerated machine-learning"
|
||||||
$STD uv add --no-sync --optional openvino onnxruntime-openvino==1.20.0 --active -n -p python3.12 --managed-python
|
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --active -n -p python3.11 --managed-python
|
||||||
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p python3.12 --managed-python
|
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so"
|
||||||
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.12/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-312-x86_64-linux-gnu.so"
|
|
||||||
msg_ok "Updated HW-accelerated machine-learning"
|
msg_ok "Updated HW-accelerated machine-learning"
|
||||||
else
|
else
|
||||||
msg_info "Updating machine-learning"
|
msg_info "Updating machine-learning"
|
||||||
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra cpu --no-dev --active --link-mode copy -n -p python3.11 --managed-python
|
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra cpu --active -n -p python3.11 --managed-python
|
||||||
msg_ok "Updated machine-learning"
|
msg_ok "Updated machine-learning"
|
||||||
fi
|
fi
|
||||||
cd "$SRC_DIR"
|
cd "$SRC_DIR"
|
||||||
cp -a machine-learning/{ann,immich_ml} "$ML_DIR"
|
cp -a machine-learning/{ann,immich_ml} "$ML_DIR"
|
||||||
[[ -f "$INSTALL_DIR"/ml_start.sh ]] && mv "$INSTALL_DIR"/ml_start.sh "$ML_DIR"
|
mv "$INSTALL_DIR"/ml_start.sh "$ML_DIR"
|
||||||
[[ -f ~/.openvino ]] && sed -i "/intra_op/s/int = 0/int = os.cpu_count() or 0/" "$ML_DIR"/immich_ml/config.py
|
if [[ -f ~/.openvino ]]; then
|
||||||
|
sed -i "/intra_op/s/int = 0/int = os.cpu_count() or 0/" "$ML_DIR"/immich_ml/config.py
|
||||||
|
fi
|
||||||
ln -sf "$APP_DIR"/resources "$INSTALL_DIR"
|
ln -sf "$APP_DIR"/resources "$INSTALL_DIR"
|
||||||
cd "$APP_DIR"
|
cd "$APP_DIR"
|
||||||
grep -rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
|
grep -rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
|
||||||
@@ -235,20 +239,10 @@ EOF
|
|||||||
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$APP_DIR"/upload
|
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$APP_DIR"/upload
|
||||||
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
|
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
|
||||||
ln -s "$GEO_DIR" "$APP_DIR"
|
ln -s "$GEO_DIR" "$APP_DIR"
|
||||||
[[ ! -f /usr/bin/immich ]] && ln -sf "$APP_DIR"/cli/bin/immich /usr/bin/immich
|
|
||||||
[[ ! -f /usr/bin/immich-admin ]] && ln -sf "$APP_DIR"/bin/immich-admin /usr/bin/immich-admin
|
|
||||||
|
|
||||||
chown -R immich:immich "$INSTALL_DIR"
|
chown -R immich:immich "$INSTALL_DIR"
|
||||||
if [[ "${MAINT_MODE:-0}" == 1 ]]; then
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
msg_info "Disabling Maintenance Mode"
|
|
||||||
cd /opt/immich/app/bin
|
|
||||||
$STD ./immich-admin disable-maintenance-mode
|
|
||||||
unset MAINT_MODE
|
|
||||||
$STD cd -
|
|
||||||
msg_ok "Disabled Maintenance Mode"
|
|
||||||
fi
|
|
||||||
systemctl restart immich-ml immich-web
|
systemctl restart immich-ml immich-web
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
@@ -260,7 +254,7 @@ function compile_libjxl() {
|
|||||||
: "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}"
|
: "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}"
|
||||||
if [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
if [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
msg_info "Recompiling libjxl"
|
msg_info "Recompiling libjxl"
|
||||||
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
|
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
|
||||||
cd "$SOURCE"
|
cd "$SOURCE"
|
||||||
$STD git reset --hard "$LIBJXL_REVISION"
|
$STD git reset --hard "$LIBJXL_REVISION"
|
||||||
@@ -300,11 +294,14 @@ function compile_libjxl() {
|
|||||||
|
|
||||||
function compile_libheif() {
|
function compile_libheif() {
|
||||||
SOURCE=${SOURCE_DIR}/libheif
|
SOURCE=${SOURCE_DIR}/libheif
|
||||||
ensure_dependencies libaom-dev
|
if ! dpkg -l | grep -q libaom; then
|
||||||
|
$STD apt install -y libaom-dev
|
||||||
|
local update="required"
|
||||||
|
fi
|
||||||
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
|
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
|
||||||
if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
msg_info "Recompiling libheif"
|
msg_info "Recompiling libheif"
|
||||||
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
|
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
|
||||||
cd "$SOURCE"
|
cd "$SOURCE"
|
||||||
$STD git reset --hard "$LIBHEIF_REVISION"
|
$STD git reset --hard "$LIBHEIF_REVISION"
|
||||||
@@ -320,7 +317,7 @@ function compile_libheif() {
|
|||||||
-DWITH_X265=OFF \
|
-DWITH_X265=OFF \
|
||||||
-DWITH_EXAMPLES=OFF \
|
-DWITH_EXAMPLES=OFF \
|
||||||
..
|
..
|
||||||
$STD make install -j"$(nproc)"
|
$STD make install -j "$(nproc)"
|
||||||
ldconfig /usr/local/lib
|
ldconfig /usr/local/lib
|
||||||
$STD make clean
|
$STD make clean
|
||||||
cd "$STAGING_DIR"
|
cd "$STAGING_DIR"
|
||||||
@@ -335,7 +332,7 @@ function compile_libraw() {
|
|||||||
: "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}"
|
: "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}"
|
||||||
if [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
if [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
msg_info "Recompiling libraw"
|
msg_info "Recompiling libraw"
|
||||||
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
|
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
|
||||||
cd "$SOURCE"
|
cd "$SOURCE"
|
||||||
$STD git reset --hard "$LIBRAW_REVISION"
|
$STD git reset --hard "$LIBRAW_REVISION"
|
||||||
@@ -357,7 +354,7 @@ function compile_imagemagick() {
|
|||||||
if [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]] ||
|
if [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]] ||
|
||||||
! grep -q 'DMAGICK_LIBRAW' /usr/local/lib/ImageMagick-7*/config-Q16HDRI/configure.xml; then
|
! grep -q 'DMAGICK_LIBRAW' /usr/local/lib/ImageMagick-7*/config-Q16HDRI/configure.xml; then
|
||||||
msg_info "Recompiling ImageMagick"
|
msg_info "Recompiling ImageMagick"
|
||||||
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
|
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
|
||||||
cd "$SOURCE"
|
cd "$SOURCE"
|
||||||
$STD git reset --hard "$IMAGEMAGICK_REVISION"
|
$STD git reset --hard "$IMAGEMAGICK_REVISION"
|
||||||
@@ -377,7 +374,7 @@ function compile_libvips() {
|
|||||||
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
|
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
|
||||||
if [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
if [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
msg_info "Recompiling libvips"
|
msg_info "Recompiling libvips"
|
||||||
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
|
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
|
||||||
cd "$SOURCE"
|
cd "$SOURCE"
|
||||||
$STD git reset --hard "$LIBVIPS_REVISION"
|
$STD git reset --hard "$LIBVIPS_REVISION"
|
||||||
|
|||||||
@@ -40,7 +40,9 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating Jellyfin"
|
msg_info "Updating Jellyfin"
|
||||||
ensure_dependencies libjemalloc2
|
if ! dpkg -s libjemalloc2 >/dev/null 2>&1; then
|
||||||
|
$STD apt install -y libjemalloc2
|
||||||
|
fi
|
||||||
if [[ ! -f /usr/lib/libjemalloc.so ]]; then
|
if [[ ! -f /usr/lib/libjemalloc.so ]]; then
|
||||||
ln -sf /usr/lib/x86_64-linux-gnu/libjemalloc.so.2 /usr/lib/libjemalloc.so
|
ln -sf /usr/lib/x86_64-linux-gnu/libjemalloc.so.2 /usr/lib/libjemalloc.so
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ function update_script() {
|
|||||||
msg_ok "Updated yt-dlp"
|
msg_ok "Updated yt-dlp"
|
||||||
|
|
||||||
msg_info "Prepare update"
|
msg_info "Prepare update"
|
||||||
ensure_dependencies graphicsmagick ghostscript
|
$STD apt install -y graphicsmagick ghostscript
|
||||||
if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
|
if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
|
||||||
mkdir -p /etc/karakeep
|
mkdir -p /etc/karakeep
|
||||||
mv /opt/karakeep/.env /etc/karakeep/karakeep.env
|
mv /opt/karakeep/.env /etc/karakeep/karakeep.env
|
||||||
|
|||||||
@@ -23,14 +23,16 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
ensure_dependencies lsb-release
|
if ! command -v lsb_release; then
|
||||||
|
apt install -y lsb-release
|
||||||
|
fi
|
||||||
if [[ ! -d /opt/kimai ]]; then
|
if [[ ! -d /opt/kimai ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
|
|
||||||
PHP_VERSION="8.4" PHP_APACHE="YES" setup_php
|
PHP_VERSION="8.4" PHP_MODULE="mysql" PHP_APACHE="YES" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
|
|
||||||
if check_for_gh_release "kimai" "kimai/kimai"; then
|
if check_for_gh_release "kimai" "kimai/kimai"; then
|
||||||
|
|||||||
@@ -1,79 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: snazzybean
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/TomBursch/kitchenowl
|
|
||||||
|
|
||||||
APP="KitchenOwl"
|
|
||||||
var_tags="${var_tags:-food;recipes}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-6}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /opt/kitchenowl ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "kitchenowl" "TomBursch/kitchenowl"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop kitchenowl
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Creating Backup"
|
|
||||||
mkdir -p /opt/kitchenowl_backup
|
|
||||||
cp -r /opt/kitchenowl/data /opt/kitchenowl_backup/
|
|
||||||
cp -f /opt/kitchenowl/kitchenowl.env /opt/kitchenowl_backup/
|
|
||||||
msg_ok "Created Backup"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kitchenowl" "TomBursch/kitchenowl" "tarball" "latest" "/opt/kitchenowl"
|
|
||||||
rm -rf /opt/kitchenowl/web
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kitchenowl-web" "TomBursch/kitchenowl" "prebuild" "latest" "/opt/kitchenowl/web" "kitchenowl_Web.tar.gz"
|
|
||||||
|
|
||||||
msg_info "Restoring data"
|
|
||||||
sed -i 's/default=True/default=False/' /opt/kitchenowl/backend/wsgi.py
|
|
||||||
cp -r /opt/kitchenowl_backup/data /opt/kitchenowl/
|
|
||||||
cp -f /opt/kitchenowl_backup/kitchenowl.env /opt/kitchenowl/
|
|
||||||
rm -rf /opt/kitchenowl_backup
|
|
||||||
msg_ok "Restored data"
|
|
||||||
|
|
||||||
msg_info "Updating KitchenOwl"
|
|
||||||
cd /opt/kitchenowl/backend
|
|
||||||
$STD uv sync --frozen
|
|
||||||
cd /opt/kitchenowl/backend
|
|
||||||
set -a
|
|
||||||
source /opt/kitchenowl/kitchenowl.env
|
|
||||||
set +a
|
|
||||||
$STD uv run flask db upgrade
|
|
||||||
msg_ok "Updated KitchenOwl"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start kitchenowl
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:80${CL}"
|
|
||||||
@@ -32,8 +32,6 @@ function update_script() {
|
|||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
PHP_VERSION="8.5" PHP_APACHE="YES" setup_php
|
|
||||||
|
|
||||||
msg_info "Creating a backup"
|
msg_info "Creating a backup"
|
||||||
mv /opt/koillection/ /opt/koillection-backup
|
mv /opt/koillection/ /opt/koillection-backup
|
||||||
msg_ok "Backup created"
|
msg_ok "Backup created"
|
||||||
@@ -44,30 +42,15 @@ function update_script() {
|
|||||||
cd /opt/koillection
|
cd /opt/koillection
|
||||||
cp -r /opt/koillection-backup/.env.local /opt/koillection
|
cp -r /opt/koillection-backup/.env.local /opt/koillection
|
||||||
cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/
|
cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/
|
||||||
|
|
||||||
# Ensure APP_RUNTIME is in .env.local for CLI commands (upgrades from older versions)
|
|
||||||
if ! grep -q "APP_RUNTIME" /opt/koillection/.env.local 2>/dev/null; then
|
|
||||||
echo 'APP_RUNTIME="Symfony\Component\Runtime\SymfonyRuntime"' >> /opt/koillection/.env.local
|
|
||||||
fi
|
|
||||||
|
|
||||||
export COMPOSER_ALLOW_SUPERUSER=1
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
export APP_RUNTIME='Symfony\Component\Runtime\SymfonyRuntime'
|
|
||||||
$STD composer install --no-dev -o --no-interaction --classmap-authoritative
|
$STD composer install --no-dev -o --no-interaction --classmap-authoritative
|
||||||
$STD php bin/console doctrine:migrations:migrate --no-interaction
|
$STD php bin/console doctrine:migrations:migrate --no-interaction
|
||||||
$STD php bin/console app:translations:dump
|
$STD php bin/console app:translations:dump
|
||||||
cd assets/
|
cd assets/
|
||||||
$STD yarn install
|
$STD yarn install
|
||||||
$STD yarn build
|
$STD yarn build
|
||||||
mkdir -p /opt/koillection/public/uploads
|
|
||||||
mkdir -p /opt/koillection/var/log
|
|
||||||
chown -R www-data:www-data /opt/koillection/var/log
|
|
||||||
chown -R www-data:www-data /opt/koillection/public/uploads
|
chown -R www-data:www-data /opt/koillection/public/uploads
|
||||||
rm -r /opt/koillection-backup
|
rm -r /opt/koillection-backup
|
||||||
|
|
||||||
# Ensure APP_RUNTIME is set in Apache config (for upgrades from older versions)
|
|
||||||
if ! grep -q "APP_RUNTIME" /etc/apache2/sites-available/koillection.conf 2>/dev/null; then
|
|
||||||
sed -i '/<VirtualHost/a\ SetEnv APP_RUNTIME "Symfony\\Component\\Runtime\\SymfonyRuntime"' /etc/apache2/sites-available/koillection.conf
|
|
||||||
fi
|
|
||||||
msg_ok "Updated Koillection"
|
msg_ok "Updated Koillection"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: Slaviša Arežina (tremor021)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://languagetool.org/
|
|
||||||
|
|
||||||
APP="LanguageTool"
|
|
||||||
var_tags="${var_tags:-spellcheck}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-4096}"
|
|
||||||
var_disk="${var_disk:-16}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /opt/LanguageTool ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://languagetool.org/download/ | grep -oP 'LanguageTool-\K[0-9]+\.[0-9]+(\.[0-9]+)?(?=\.zip)' | sort -V | tail -n1)
|
|
||||||
if [[ "${RELEASE}" != "$(cat ~/.languagetool 2>/dev/null)" ]] || [[ ! -f ~/.languagetool ]]; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop language-tool
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Creating Backup"
|
|
||||||
cp /opt/LanguageTool/server.properties /opt/server.properties
|
|
||||||
msg_ok "Created Backup"
|
|
||||||
|
|
||||||
msg_info "Updating LanguageTool"
|
|
||||||
rm -rf /opt/LanguageTool
|
|
||||||
download_file "https://languagetool.org/download/LanguageTool-stable.zip" /tmp/LanguageTool-stable.zip
|
|
||||||
unzip -q /tmp/LanguageTool-stable.zip -d /opt
|
|
||||||
mv /opt/LanguageTool-*/ /opt/LanguageTool/
|
|
||||||
mv /opt/server.properties /opt/LanguageTool/server.properties
|
|
||||||
rm -f /tmp/LanguageTool-stable.zip
|
|
||||||
echo "${RELEASE}" >~/.languagetool
|
|
||||||
msg_ok "Updated LanguageTool"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start language-tool
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfuly!"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!"
|
|
||||||
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}:8081/v2${CL}"
|
|
||||||
@@ -28,7 +28,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
PHP_VERSION="8.3" PHP_APACHE="YES" setup_php
|
PHP_VERSION="8.3" PHP_MODULE="sqlite3" PHP_APACHE="YES" setup_php
|
||||||
msg_warn "LinkStack should be updated via the user interface."
|
msg_warn "LinkStack should be updated via the user interface."
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: hoholms
|
# Author: hoholms
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/grafana/loki
|
# Source: https://github.com/grafana/loki
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
ensure_dependencies graphicsmagick
|
|
||||||
if [ ! -f /opt/n8n.env ]; then
|
if [ ! -f /opt/n8n.env ]; then
|
||||||
sed -i 's|^Environment="N8N_SECURE_COOKIE=false"$|EnvironmentFile=/opt/n8n.env|' /etc/systemd/system/n8n.service
|
sed -i 's|^Environment="N8N_SECURE_COOKIE=false"$|EnvironmentFile=/opt/n8n.env|' /etc/systemd/system/n8n.service
|
||||||
mkdir -p /opt
|
mkdir -p /opt
|
||||||
@@ -38,7 +37,6 @@ N8N_PROTOCOL=http
|
|||||||
N8N_HOST=$LOCAL_IP
|
N8N_HOST=$LOCAL_IP
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
msg_info "Updating ${APP} LXC"
|
msg_info "Updating ${APP} LXC"
|
||||||
|
|||||||
@@ -27,8 +27,9 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
JAVA_VERSION="21" setup_java
|
if ! dpkg -l | grep -q temurin-21-jre; then
|
||||||
|
JAVA_VERSION="21" setup_java
|
||||||
|
fi
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt -y upgrade
|
$STD apt -y upgrade
|
||||||
|
|||||||
@@ -36,7 +36,12 @@ function update_script() {
|
|||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "scanopy" "scanopy/scanopy" "tarball" "latest" "/opt/scanopy"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "scanopy" "scanopy/scanopy" "tarball" "latest" "/opt/scanopy"
|
||||||
|
|
||||||
ensure_dependencies pkg-config libssl-dev
|
if ! dpkg -l | grep -q "pkg-config"; then
|
||||||
|
$STD apt install -y pkg-config
|
||||||
|
fi
|
||||||
|
if ! dpkg -l | grep -q "libssl-dev"; then
|
||||||
|
$STD apt install -y libssl-dev
|
||||||
|
fi
|
||||||
TOOLCHAIN="$(grep "channel" /opt/scanopy/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
|
TOOLCHAIN="$(grep "channel" /opt/scanopy/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
|
||||||
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
|
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
|
||||||
|
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: MickLesk (CanbiZ)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://nginxui.com
|
|
||||||
|
|
||||||
APP="Nginx-UI"
|
|
||||||
var_tags="${var_tags:-webserver;nginx;proxy}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-512}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -f /usr/local/bin/nginx-ui ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "nginx-ui" "0xJacky/nginx-ui"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop nginx-ui
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up Configuration"
|
|
||||||
cp /usr/local/etc/nginx-ui/app.ini /tmp/nginx-ui-app.ini.bak
|
|
||||||
msg_ok "Backed up Configuration"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nginx-ui" "0xJacky/nginx-ui" "prebuild" "latest" "/opt/nginx-ui" "nginx-ui-linux-64.tar.gz"
|
|
||||||
|
|
||||||
msg_info "Updating Binary"
|
|
||||||
cp /opt/nginx-ui/nginx-ui /usr/local/bin/nginx-ui
|
|
||||||
chmod +x /usr/local/bin/nginx-ui
|
|
||||||
rm -rf /opt/nginx-ui
|
|
||||||
msg_ok "Updated Binary"
|
|
||||||
|
|
||||||
msg_info "Restoring Configuration"
|
|
||||||
mv /tmp/nginx-ui-app.ini.bak /usr/local/etc/nginx-ui/app.ini
|
|
||||||
msg_ok "Restored Configuration"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start nginx-ui
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
|
|
||||||
@@ -28,12 +28,6 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_error "This script is currently disabled due to an external issue with the OpenResty APT repository."
|
|
||||||
msg_error "The repository's GPG key uses SHA-1 signatures, which are no longer accepted by Debian as of February 1, 2026."
|
|
||||||
msg_error "The issue is tracked in openresty/openresty#1097"
|
|
||||||
msg_error "For more details, see: https://github.com/community-scripts/ProxmoxVE/issues/11406"
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
|
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
|
||||||
msg_error "Wrong Debian version detected!"
|
msg_error "Wrong Debian version detected!"
|
||||||
msg_error "Please create a snapshot first. You must upgrade your LXC to Debian Trixie before updating. Visit: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
|
msg_error "Please create a snapshot first. You must upgrade your LXC to Debian Trixie before updating. Visit: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
|
||||||
|
|||||||
@@ -1,60 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: luismco
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/technomancer702/nodecast-tv
|
|
||||||
|
|
||||||
APP="nodecast-tv"
|
|
||||||
var_tags="${var_tags:-media}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
var_gpu="${var_gpu:-yes}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /opt/nodecast-tv ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "nodecast-tv" "technomancer702/nodecast-tv"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop nodecast-tv
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv"
|
|
||||||
|
|
||||||
msg_info "Updating Modules"
|
|
||||||
cd /opt/nodecast-tv
|
|
||||||
$STD npm install
|
|
||||||
msg_ok "Updated Modules"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start nodecast-tv
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /usr/lib/systemd/system/notifiarr.service ]]; then
|
if [[ ! -f /etc/apt/sources.list.d/golift.list ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
ensure_dependencies python3-lxml
|
|
||||||
if ! [[ $(dpkg -s python3-lxml-html-clean 2>/dev/null) ]]; then
|
if ! [[ $(dpkg -s python3-lxml-html-clean 2>/dev/null) ]]; then
|
||||||
|
$STD apt install python3-lxml
|
||||||
curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/universe/l/lxml-html-clean/python3-lxml-html-clean_0.1.1-1_all.deb" -o /opt/python3-lxml-html-clean.deb
|
curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/universe/l/lxml-html-clean/python3-lxml-html-clean_0.1.1-1_all.deb" -o /opt/python3-lxml-html-clean.deb
|
||||||
$STD dpkg -i /opt/python3-lxml-html-clean.deb
|
$STD dpkg -i /opt/python3-lxml-html-clean.deb
|
||||||
rm -f /opt/python3-lxml-html-clean.deb
|
rm -f /opt/python3-lxml-html-clean.deb
|
||||||
|
|||||||
@@ -32,7 +32,11 @@ function update_script() {
|
|||||||
if [[ ! -f /opt/Ollama_version.txt ]]; then
|
if [[ ! -f /opt/Ollama_version.txt ]]; then
|
||||||
touch /opt/Ollama_version.txt
|
touch /opt/Ollama_version.txt
|
||||||
fi
|
fi
|
||||||
ensure_dependencies zstd
|
if ! command -v zstd &>/dev/null; then
|
||||||
|
msg_info "Installing zstd"
|
||||||
|
$STD apt install -y zstd
|
||||||
|
msg_ok "Installed zstd"
|
||||||
|
fi
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop ollama
|
systemctl stop ollama
|
||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|||||||
@@ -1,60 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: vhsdream
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://opencloud.eu
|
|
||||||
|
|
||||||
APP="OpenCloud"
|
|
||||||
var_tags="${var_tags:-files;cloud}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-20}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /etc/opencloud ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
RELEASE="v5.0.2"
|
|
||||||
if check_for_gh_release "opencloud" "opencloud-eu/opencloud" "${RELEASE}"; then
|
|
||||||
msg_info "Stopping services"
|
|
||||||
systemctl stop opencloud opencloud-wopi
|
|
||||||
msg_ok "Stopped services"
|
|
||||||
|
|
||||||
msg_info "Updating packages"
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get dist-upgrade -y
|
|
||||||
msg_ok "Updated packages"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "opencloud" "opencloud-eu/opencloud" "singlefile" "${RELEASE}" "/usr/bin" "opencloud-*-linux-amd64"
|
|
||||||
|
|
||||||
msg_info "Starting services"
|
|
||||||
systemctl start opencloud opencloud-wopi
|
|
||||||
msg_ok "Started services"
|
|
||||||
msg_ok "Updated successfully"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}https://<your-OpenCloud-FQDN>${CL}"
|
|
||||||
@@ -92,7 +92,11 @@ EOF
|
|||||||
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
|
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
||||||
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
|
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
|
||||||
ensure_dependencies zstd
|
if ! command -v zstd &>/dev/null; then
|
||||||
|
msg_info "Installing zstd"
|
||||||
|
$STD apt install -y zstd
|
||||||
|
msg_ok "Installed zstd"
|
||||||
|
fi
|
||||||
msg_info "Ollama update available: v$OLLAMA_VERSION -> v$RELEASE"
|
msg_info "Ollama update available: v$OLLAMA_VERSION -> v$RELEASE"
|
||||||
msg_info "Downloading Ollama v$RELEASE \n"
|
msg_info "Downloading Ollama v$RELEASE \n"
|
||||||
curl -fS#LO https://github.com/ollama/ollama/releases/download/v${RELEASE}/ollama-linux-amd64.tar.zst
|
curl -fS#LO https://github.com/ollama/ollama/releases/download/v${RELEASE}/ollama-linux-amd64.tar.zst
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ function update_script() {
|
|||||||
if [ "$VERSION_CODENAME" = "bookworm" ]; then
|
if [ "$VERSION_CODENAME" = "bookworm" ]; then
|
||||||
setup_gs
|
setup_gs
|
||||||
else
|
else
|
||||||
ensure_dependencies ghostscript
|
$STD apt install -y ghostscript
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating Paperless-ngx"
|
msg_info "Updating Paperless-ngx"
|
||||||
@@ -145,7 +145,7 @@ function update_script() {
|
|||||||
setup_gs
|
setup_gs
|
||||||
else
|
else
|
||||||
msg_info "Installing Ghostscript"
|
msg_info "Installing Ghostscript"
|
||||||
ensure_dependencies ghostscript
|
$STD apt install -y ghostscript
|
||||||
msg_ok "Installed Ghostscript"
|
msg_ok "Installed Ghostscript"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ function update_script() {
|
|||||||
|
|
||||||
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
|
||||||
if [[ "$CURRENT_PHP" != "8.3" ]]; then
|
if [[ "$CURRENT_PHP" != "8.3" ]]; then
|
||||||
PHP_VERSION="8.3" PHP_FPM="YES" setup_php
|
PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="mysql,redis" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
sed -i 's|php8\.2-fpm\.sock|php8.3-fpm.sock|g' /etc/nginx/sites-available/paymenter.conf
|
sed -i 's|php8\.2-fpm\.sock|php8.3-fpm.sock|g' /etc/nginx/sites-available/paymenter.conf
|
||||||
$STD systemctl reload nginx
|
$STD systemctl reload nginx
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ function update_script() {
|
|||||||
if [[ "$CURRENT_PHP" != "8.4" ]]; then
|
if [[ "$CURRENT_PHP" != "8.4" ]]; then
|
||||||
msg_info "Migrating PHP $CURRENT_PHP to 8.4"
|
msg_info "Migrating PHP $CURRENT_PHP to 8.4"
|
||||||
$STD apt remove -y php"${CURRENT_PHP//./}"*
|
$STD apt remove -y php"${CURRENT_PHP//./}"*
|
||||||
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_FPM="YES" setup_php
|
PHP_VERSION="8.4" PHP_MODULE="mysql,sqlite3" PHP_APACHE="YES" PHP_FPM="YES" setup_php
|
||||||
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
|
msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ function update_script() {
|
|||||||
LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-bookworm-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1)
|
LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-bookworm-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1)
|
||||||
if [[ "${LIBHEIF_URL}" != "$(cat ~/.photoprism_libheif 2>/dev/null)" ]] || [[ ! -f ~/.photoprism_libheif ]]; then
|
if [[ "${LIBHEIF_URL}" != "$(cat ~/.photoprism_libheif 2>/dev/null)" ]] || [[ ! -f ~/.photoprism_libheif ]]; then
|
||||||
msg_info "Updating PhotoPrism LibHeif"
|
msg_info "Updating PhotoPrism LibHeif"
|
||||||
ensure_dependencies libvips42
|
$STD apt install -y libvips42
|
||||||
curl -fsSL "https://dl.photoprism.app/dist/libheif/$LIBHEIF_URL" -o /tmp/libheif.tar.gz
|
curl -fsSL "https://dl.photoprism.app/dist/libheif/$LIBHEIF_URL" -o /tmp/libheif.tar.gz
|
||||||
tar -xzf /tmp/libheif.tar.gz -C /usr/local
|
tar -xzf /tmp/libheif.tar.gz -C /usr/local
|
||||||
ldconfig
|
ldconfig
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ function update_script() {
|
|||||||
|
|
||||||
php_ver=$(php -v | head -n 1 | awk '{print $2}')
|
php_ver=$(php -v | head -n 1 | awk '{print $2}')
|
||||||
if [[ ! $php_ver == "8.4"* ]]; then
|
if [[ ! $php_ver == "8.4"* ]]; then
|
||||||
PHP_VERSION="8.4" PHP_APACHE="YES" setup_php
|
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="pdo,mysql,gettext,fileinfo" setup_php
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mv /opt/projectsend/includes/sys.config.php /opt/sys.config.php
|
mv /opt/projectsend/includes/sys.config.php /opt/sys.config.php
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ function update_script() {
|
|||||||
cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/
|
cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/
|
||||||
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
|
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
|
||||||
$STD apt remove --purge -y dotnet-sdk-8.0
|
$STD apt remove --purge -y dotnet-sdk-8.0
|
||||||
ensure_dependencies aspnetcore-runtime-9.0
|
$STD apt install -y aspnetcore-runtime-9.0
|
||||||
fi
|
fi
|
||||||
rm -rf /opt/rdtc-backup
|
rm -rf /opt/rdtc-backup
|
||||||
|
|
||||||
|
|||||||
@@ -27,20 +27,22 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if check_for_codeberg_release "readeck" "readeck/readeck"; then
|
msg_info "Stopping Service"
|
||||||
msg_info "Stopping Service"
|
systemctl stop readeck
|
||||||
systemctl stop readeck
|
msg_ok "Stopped Service"
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
fetch_and_deploy_codeberg_release "readeck" "readeck/readeck" "singlefile" "latest" "/opt/readeck" "readeck-*-linux-amd64"
|
msg_info "Updating Readeck"
|
||||||
|
LATEST=$(curl -fsSL https://codeberg.org/readeck/readeck/releases/ | grep -oP '/releases/tag/\K\d+\.\d+\.\d+' | head -1)
|
||||||
|
rm -rf /opt/readeck/readeck
|
||||||
|
cd /opt/readeck
|
||||||
|
curl -fsSL "https://codeberg.org/readeck/readeck/releases/download/${LATEST}/readeck-${LATEST}-linux-amd64" -o "readeck"
|
||||||
|
chmod a+x readeck
|
||||||
|
msg_ok "Updated Readeck"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start readeck
|
systemctl start readeck
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at the latest version."
|
|
||||||
fi
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,69 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: GoldenSpringness
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/orhun/rustypaste
|
|
||||||
|
|
||||||
APP="rustypaste"
|
|
||||||
var_tags="${var_tags:-pastebin;storage}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-1024}"
|
|
||||||
var_disk="${var_disk:-20}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -f /opt/rustypaste/rustypaste ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "rustypaste" "orhun/rustypaste"; then
|
|
||||||
msg_info "Stopping Services"
|
|
||||||
systemctl stop rustypaste
|
|
||||||
msg_ok "Stopped Services"
|
|
||||||
|
|
||||||
msg_info "Creating Backup"
|
|
||||||
tar -czf "/opt/rustypaste_backup_$(date +%F).tar.gz" /opt/rustypaste/upload 2>/dev/null || true
|
|
||||||
cp /opt/rustypaste/config.toml /tmp/rustypaste_config.toml.bak
|
|
||||||
msg_ok "Backup Created"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "rustypaste" "orhun/rustypaste" "prebuild" "latest" "/opt/rustypaste" "*x86_64-unknown-linux-gnu.tar.gz"
|
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
|
||||||
mv /tmp/rustypaste_config.toml.bak /opt/rustypaste/config.toml
|
|
||||||
tar -xzf "/opt/rustypaste_backup_$(date +%F).tar.gz" -C /opt/rustypaste/upload 2>/dev/null || true
|
|
||||||
rm -rf /opt/rustypaste_backup_$(date +%F).tar.gz
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Services"
|
|
||||||
systemctl start rustypaste
|
|
||||||
msg_ok "Started Services"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "rustypaste-cli" "orhun/rustypaste-cli"; then
|
|
||||||
fetch_and_deploy_gh_release "rustypaste-cli" "orhun/rustypaste-cli" "prebuild" "latest" "/usr/local/bin" "*x86_64-unknown-linux-gnu.tar.gz"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}rustypaste setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
|
||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "Scanopy" "scanopy/scanopy"; then
|
if check_for_gh_release "scanopy" "scanopy/scanopy"; then
|
||||||
msg_info "Stopping services"
|
msg_info "Stopping services"
|
||||||
systemctl stop scanopy-server
|
systemctl stop scanopy-server
|
||||||
[[ -f /etc/systemd/system/scanopy-daemon.service ]] && systemctl stop scanopy-daemon
|
[[ -f /etc/systemd/system/scanopy-daemon.service ]] && systemctl stop scanopy-daemon
|
||||||
@@ -40,9 +40,14 @@ function update_script() {
|
|||||||
[[ -f /opt/scanopy/oidc.toml ]] && cp /opt/scanopy/oidc.toml /opt/scanopy.oidc.toml
|
[[ -f /opt/scanopy/oidc.toml ]] && cp /opt/scanopy/oidc.toml /opt/scanopy.oidc.toml
|
||||||
msg_ok "Backed up configurations"
|
msg_ok "Backed up configurations"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Scanopy" "scanopy/scanopy" "tarball" "latest" "/opt/scanopy"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "scanopy" "scanopy/scanopy" "tarball" "latest" "/opt/scanopy"
|
||||||
|
|
||||||
ensure_dependencies pkg-config libssl-dev
|
if ! dpkg -l | grep -q "pkg-config"; then
|
||||||
|
$STD apt install -y pkg-config
|
||||||
|
fi
|
||||||
|
if ! dpkg -l | grep -q "libssl-dev"; then
|
||||||
|
$STD apt install -y libssl-dev
|
||||||
|
fi
|
||||||
TOOLCHAIN="$(grep "channel" /opt/scanopy/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
|
TOOLCHAIN="$(grep "channel" /opt/scanopy/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
|
||||||
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
|
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
|
||||||
|
|
||||||
@@ -61,22 +66,16 @@ function update_script() {
|
|||||||
$STD npm run build
|
$STD npm run build
|
||||||
msg_ok "Created frontend UI"
|
msg_ok "Created frontend UI"
|
||||||
|
|
||||||
msg_info "Building Scanopy Server (patience)"
|
msg_info "Building scanopy-server (patience)"
|
||||||
cd /opt/scanopy/backend
|
cd /opt/scanopy/backend
|
||||||
$STD cargo build --release --bin server
|
$STD cargo build --release --bin server
|
||||||
mv ./target/release/server /usr/bin/scanopy-server
|
mv ./target/release/server /usr/bin/scanopy-server
|
||||||
msg_ok "Built Scanopy Server"
|
msg_ok "Built scanopy-server"
|
||||||
|
|
||||||
if [[ -f /etc/systemd/system/scanopy-daemon.service ]]; then
|
msg_info "Building scanopy-daemon"
|
||||||
fetch_and_deploy_gh_release "Scanopy Daemon" "scanopy/scanopy" "singlefile" "latest" "/usr/local/bin" "scanopy-daemon-linux-amd64"
|
$STD cargo build --release --bin daemon
|
||||||
mv "/usr/local/bin/Scanopy Daemon" /usr/local/bin/scanopy-daemon
|
cp ./target/release/daemon /usr/bin/scanopy-daemon
|
||||||
rm -f /usr/bin/scanopy-daemon ~/configure_daemon.sh
|
msg_ok "Built scanopy-daemon"
|
||||||
sed -i -e 's|usr/bin|usr/local/bin|' \
|
|
||||||
-e 's/push/daemon_poll/' \
|
|
||||||
-e 's/pull/server_poll/' /etc/systemd/system/scanopy-daemon.service
|
|
||||||
systemctl daemon-reload
|
|
||||||
msg_ok "Updated Scanopy Daemon"
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Starting services"
|
msg_info "Starting services"
|
||||||
systemctl start scanopy-server
|
systemctl start scanopy-server
|
||||||
|
|||||||
@@ -1,90 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: vhsdream
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/calibrain/shelfmark
|
|
||||||
|
|
||||||
APP="shelfmark"
|
|
||||||
var_tags="${var_tags:-ebooks}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-8}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /opt/shelfmark ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
|
||||||
|
|
||||||
if check_for_gh_release "shelfmark" "calibrain/shelfmark"; then
|
|
||||||
msg_info "Stopping Service(s)"
|
|
||||||
systemctl stop shelfmark
|
|
||||||
[[ -f /etc/systemd/system/chromium.service ]] && systemctl stop chromium
|
|
||||||
msg_ok "Stopped Service(s)"
|
|
||||||
|
|
||||||
[[ -f /etc/systemd/system/flaresolverr.service ]] && if check_for_gh_release "flaresolverr" "Flaresolverr/Flaresolverr"; then
|
|
||||||
msg_info "Stopping FlareSolverr service"
|
|
||||||
systemctl stop flaresolverr
|
|
||||||
msg_ok "Stopped FlareSolverr service"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
|
|
||||||
|
|
||||||
msg_info "Starting FlareSolverr Service"
|
|
||||||
systemctl start flaresolverr
|
|
||||||
msg_ok "Started FlareSolverr Service"
|
|
||||||
msg_ok "Updated FlareSolverr"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cp /opt/shelfmark/start.sh /opt/start.sh.bak
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "shelfmark" "calibrain/shelfmark" "tarball" "latest" "/opt/shelfmark"
|
|
||||||
RELEASE_VERSION=$(cat "$HOME/.shelfmark")
|
|
||||||
|
|
||||||
msg_info "Updating Shelfmark"
|
|
||||||
sed -i "s/^RELEASE_VERSION=.*/RELEASE_VERSION=$RELEASE_VERSION/" /etc/shelfmark/.env
|
|
||||||
cd /opt/shelfmark/src/frontend
|
|
||||||
$STD npm ci
|
|
||||||
$STD npm run build
|
|
||||||
mv /opt/shelfmark/src/frontend/dist /opt/shelfmark/frontend-dist
|
|
||||||
cd /opt/shelfmark
|
|
||||||
$STD uv venv -c ./venv
|
|
||||||
$STD source ./venv/bin/activate
|
|
||||||
$STD uv pip install -r ./requirements-base.txt
|
|
||||||
if [[ $(sed -n '/_BYPASS=/s/[^=]*=//p' /etc/shelfmark/.env) == "true" ]] && [[ $(sed -n '/BYPASSER=/s/[^=]*=//p' /etc/shelfmark/.env) == "false" ]]; then
|
|
||||||
$STD uv pip install -r ./requirements-shelfmark.txt
|
|
||||||
fi
|
|
||||||
mv /opt/start.sh.bak /opt/shelfmark/start.sh
|
|
||||||
msg_ok "Updated Shelfmark"
|
|
||||||
|
|
||||||
msg_info "Starting Service(s)"
|
|
||||||
systemctl start shelfmark
|
|
||||||
[[ -f /etc/systemd/system/chromium.service ]] && systemctl start chromium
|
|
||||||
msg_ok "Started Service(s)"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8084${CL}"
|
|
||||||
@@ -42,7 +42,7 @@ function update_script() {
|
|||||||
msg_ok "Created Backup"
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "snipe-it" "grokability/snipe-it" "tarball"
|
fetch_and_deploy_gh_release "snipe-it" "grokability/snipe-it" "tarball"
|
||||||
[[ "$(php -v 2>/dev/null)" == PHP\ 8.2* ]] && PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="ldap,soap,xsl" setup_php
|
[[ "$(php -v 2>/dev/null)" == PHP\ 8.2* ]] && PHP_VERSION="8.3" PHP_MODULE="common,ctype,ldap,fileinfo,iconv,mysql,soap,xsl" PHP_FPM="YES" setup_php
|
||||||
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/snipeit.conf
|
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/snipeit.conf
|
||||||
setup_composer
|
setup_composer
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "speedtest-tracker" "alexjustesen/speedtest-tracker"; then
|
if check_for_gh_release "speedtest-tracker" "alexjustesen/speedtest-tracker"; then
|
||||||
PHP_VERSION="8.4" PHP_FPM="YES" setup_php
|
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="common,sqlite3,redis" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
setcap cap_net_raw+ep /bin/ping
|
setcap cap_net_raw+ep /bin/ping
|
||||||
|
|||||||
@@ -27,8 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating SQL Server 2022"
|
msg_info "Updating ${APP} LXC"
|
||||||
rm -f /etc/profile.d/debuginfod.sh /etc/profile.d/debuginfod.csh
|
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt -y upgrade
|
$STD apt -y upgrade
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: MickLesk (CanbiZ)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://www.microsoft.com/en-us/sql-server/sql-server-2025
|
|
||||||
|
|
||||||
APP="SQL Server 2025"
|
|
||||||
var_tags="${var_tags:-sql;database}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-10}"
|
|
||||||
var_os="${var_os:-ubuntu}"
|
|
||||||
var_version="${var_version:-24.04}"
|
|
||||||
var_unprivileged="${var_unprivileged:-0}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /opt/mssql ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Updating SQL Server 2025"
|
|
||||||
rm -f /etc/profile.d/debuginfod.sh /etc/profile.d/debuginfod.csh
|
|
||||||
$STD apt update
|
|
||||||
$STD apt -y upgrade
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}:1433${CL}"
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: durzo
|
# Author: durzo
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/connorgallopo/Tracearr
|
# Source: https://github.com/connorgallopo/Tracearr
|
||||||
@@ -30,55 +30,6 @@ function update_script() {
|
|||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
msg_info "Updating prestart script"
|
|
||||||
cat <<EOF >/data/tracearr/prestart.sh
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
# =============================================================================
|
|
||||||
# Tune PostgreSQL for available resources (runs every startup)
|
|
||||||
# =============================================================================
|
|
||||||
# timescaledb-tune automatically optimizes PostgreSQL settings based on
|
|
||||||
# available RAM and CPU. Safe to run repeatedly - recalculates if resources change.
|
|
||||||
if command -v timescaledb-tune &> /dev/null; then
|
|
||||||
total_ram_kb=\$(grep MemTotal /proc/meminfo | awk '{print \$2}')
|
|
||||||
ram_for_tsdb=\$((total_ram_kb / 1024 / 2))
|
|
||||||
timescaledb-tune -yes -memory "\$ram_for_tsdb"MB --quiet 2>/dev/null \
|
|
||||||
|| echo "Warning: timescaledb-tune failed (non-fatal)"
|
|
||||||
fi
|
|
||||||
# =============================================================================
|
|
||||||
# Ensure required PostgreSQL settings for Tracearr
|
|
||||||
# =============================================================================
|
|
||||||
pg_config_file="/etc/postgresql/18/main/postgresql.conf"
|
|
||||||
if [ -f \$pg_config_file ]; then
|
|
||||||
# Ensure max_tuples_decompressed_per_dml_transaction is set
|
|
||||||
if grep -q "^timescaledb\.max_tuples_decompressed_per_dml_transaction" \$pg_config_file; then
|
|
||||||
# Setting exists (uncommented) - update if not 0
|
|
||||||
current_value=\$(grep "^timescaledb\.max_tuples_decompressed_per_dml_transaction" \$pg_config_file | grep -oE '[0-9]+' | head -1)
|
|
||||||
if [ -n "\$current_value" ] && [ "\$current_value" -ne 0 ]; then
|
|
||||||
sed -i "s/^timescaledb\.max_tuples_decompressed_per_dml_transaction.*/timescaledb.max_tuples_decompressed_per_dml_transaction = 0/" \$pg_config_file
|
|
||||||
fi
|
|
||||||
elif ! grep -q "^timescaledb\.max_tuples_decompressed_per_dml_transaction" \$pg_config_file; then
|
|
||||||
echo "" >> \$pg_config_file
|
|
||||||
echo "# Allow unlimited tuple decompression for migrations on compressed hypertables" >> \$pg_config_file
|
|
||||||
echo "timescaledb.max_tuples_decompressed_per_dml_transaction = 0" >> \$pg_config_file
|
|
||||||
fi
|
|
||||||
# Ensure max_locks_per_transaction is set (for existing databases)
|
|
||||||
if grep -q "^max_locks_per_transaction" \$pg_config_file; then
|
|
||||||
# Setting exists (uncommented) - update if below 4096
|
|
||||||
current_value=\$(grep "^max_locks_per_transaction" \$pg_config_file | grep -oE '[0-9]+' | head -1)
|
|
||||||
if [ -n "\$current_value" ] && [ "\$current_value" -lt 4096 ]; then
|
|
||||||
sed -i "s/^max_locks_per_transaction.*/max_locks_per_transaction = 4096/" \$pg_config_file
|
|
||||||
fi
|
|
||||||
elif ! grep -q "^max_locks_per_transaction" \$pg_config_file; then
|
|
||||||
echo "" >> \$pg_config_file
|
|
||||||
echo "# Increase lock table size for TimescaleDB hypertables with many chunks" >> \$pg_config_file
|
|
||||||
echo "max_locks_per_transaction = 4096" >> \$pg_config_file
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
systemctl restart postgresql
|
|
||||||
EOF
|
|
||||||
chmod +x /data/tracearr/prestart.sh
|
|
||||||
msg_ok "Updated prestart script"
|
|
||||||
|
|
||||||
if check_for_gh_release "tracearr" "connorgallopo/Tracearr"; then
|
if check_for_gh_release "tracearr" "connorgallopo/Tracearr"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop tracearr postgresql redis
|
systemctl stop tracearr postgresql redis
|
||||||
@@ -123,15 +74,10 @@ EOF
|
|||||||
chown -R tracearr:tracearr /data/tracearr
|
chown -R tracearr:tracearr /data/tracearr
|
||||||
msg_ok "Configured Tracearr"
|
msg_ok "Configured Tracearr"
|
||||||
|
|
||||||
msg_info "Starting services"
|
msg_info "Starting Services"
|
||||||
systemctl start postgresql redis tracearr
|
systemctl start postgresql redis tracearr
|
||||||
msg_ok "Started services"
|
msg_ok "Started Services"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
|
||||||
# no new release, just restart service to apply prestart changes
|
|
||||||
msg_info "Restarting service"
|
|
||||||
systemctl restart tracearr
|
|
||||||
msg_ok "Restarted service"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
ensure_dependencies twingate-connector
|
$STD apt update
|
||||||
|
$STD apt install -yq twingate-connector
|
||||||
$STD systemctl restart twingate-connector
|
$STD systemctl restart twingate-connector
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
$STD apt update --allow-releaseinfo-change
|
$STD apt update --allow-releaseinfo-change
|
||||||
ensure_dependencies unifi
|
$STD apt install -y unifi
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,9 +30,12 @@ function update_script() {
|
|||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
ensure_dependencies chromium
|
if ! dpkg -s chromium >/dev/null 2>&1; then
|
||||||
if [[ ! -L /opt/uptime-kuma/chromium ]]; then
|
msg_info "Installing Chromium"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt install -y chromium
|
||||||
ln -s /usr/bin/chromium /opt/uptime-kuma/chromium
|
ln -s /usr/bin/chromium /opt/uptime-kuma/chromium
|
||||||
|
msg_ok "Installed Chromium"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "uptime-kuma" "louislam/uptime-kuma"; then
|
if check_for_gh_release "uptime-kuma" "louislam/uptime-kuma"; then
|
||||||
|
|||||||
@@ -28,8 +28,12 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
VAULT=$(get_latest_github_release "dani-garcia/vaultwarden")
|
VAULT=$(curl -fsSL https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest |
|
||||||
WVRELEASE=$(get_latest_github_release "dani-garcia/bw_web_builds")
|
grep "tag_name" |
|
||||||
|
awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
WVRELEASE=$(curl -fsSL https://api.github.com/repos/dani-garcia/bw_web_builds/releases/latest |
|
||||||
|
grep "tag_name" |
|
||||||
|
awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
|
||||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 3 \
|
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 3 \
|
||||||
"1" "VaultWarden $VAULT" ON \
|
"1" "VaultWarden $VAULT" ON \
|
||||||
@@ -38,70 +42,57 @@ function update_script() {
|
|||||||
3>&1 1>&2 2>&3)
|
3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
if [ "$UPD" == "1" ]; then
|
if [ "$UPD" == "1" ]; then
|
||||||
if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then
|
msg_info "Stopping Service"
|
||||||
msg_info "Stopping Service"
|
systemctl stop vaultwarden
|
||||||
systemctl stop vaultwarden
|
msg_ok "Stopped Service"
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "vaultwarden" "dani-garcia/vaultwarden" "tarball" "latest" "/tmp/vaultwarden-src"
|
msg_info "Updating VaultWarden to $VAULT (Patience)"
|
||||||
|
cd ~ && rm -rf vaultwarden
|
||||||
msg_info "Updating VaultWarden to $VAULT (Patience)"
|
$STD git clone https://github.com/dani-garcia/vaultwarden
|
||||||
cd /tmp/vaultwarden-src
|
cd vaultwarden
|
||||||
$STD cargo build --features "sqlite,mysql,postgresql" --release
|
$STD cargo build --features "sqlite,mysql,postgresql" --release
|
||||||
if [[ -f /usr/bin/vaultwarden ]]; then
|
DIR=/usr/bin/vaultwarden
|
||||||
cp target/release/vaultwarden /usr/bin/
|
if [ -d "$DIR" ]; then
|
||||||
else
|
cp target/release/vaultwarden /usr/bin/
|
||||||
cp target/release/vaultwarden /opt/vaultwarden/bin/
|
|
||||||
fi
|
|
||||||
cd ~ && rm -rf /tmp/vaultwarden-src
|
|
||||||
msg_ok "Updated VaultWarden to ${VAULT}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start vaultwarden
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
else
|
else
|
||||||
msg_ok "VaultWarden is already up-to-date"
|
cp target/release/vaultwarden /opt/vaultwarden/bin/
|
||||||
fi
|
fi
|
||||||
|
cd ~ && rm -rf vaultwarden
|
||||||
|
msg_ok "Updated VaultWarden"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start vaultwarden
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$UPD" == "2" ]; then
|
if [ "$UPD" == "2" ]; then
|
||||||
if check_for_gh_release "vaultwarden_webvault" "dani-garcia/bw_web_builds"; then
|
msg_info "Stopping Service"
|
||||||
msg_info "Stopping Service"
|
systemctl stop vaultwarden
|
||||||
systemctl stop vaultwarden
|
msg_ok "Stopped Service"
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Updating Web-Vault to $WVRELEASE"
|
msg_info "Updating Web-Vault to $WVRELEASE"
|
||||||
rm -rf /opt/vaultwarden/web-vault
|
$STD curl -fsSLO https://github.com/dani-garcia/bw_web_builds/releases/download/"$WVRELEASE"/bw_web_"$WVRELEASE".tar.gz
|
||||||
mkdir -p /opt/vaultwarden/web-vault
|
$STD tar -zxf bw_web_"$WVRELEASE".tar.gz -C /opt/vaultwarden/
|
||||||
|
rm bw_web_"$WVRELEASE".tar.gz
|
||||||
|
msg_ok "Updated Web-Vault"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "vaultwarden_webvault" "dani-garcia/bw_web_builds" "prebuild" "latest" "/opt/vaultwarden/web-vault" "bw_web_*.tar.gz"
|
msg_info "Starting Service"
|
||||||
|
systemctl start vaultwarden
|
||||||
chown -R root:root /opt/vaultwarden/web-vault/
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated Web-Vault to ${WVRELEASE}"
|
msg_ok "Updated successfully!"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start vaultwarden
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
else
|
|
||||||
msg_ok "Web-Vault is already up-to-date"
|
|
||||||
fi
|
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$UPD" == "3" ]; then
|
if [ "$UPD" == "3" ]; then
|
||||||
if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Set the ADMIN_TOKEN" 10 58 3>&1 1>&2 2>&3); then
|
if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Set the ADMIN_TOKEN" 10 58 3>&1 1>&2 2>&3); then
|
||||||
if [[ -z "$NEWTOKEN" ]]; then exit; fi
|
if [[ -z "$NEWTOKEN" ]]; then exit; fi
|
||||||
ensure_dependencies argon2
|
if ! command -v argon2 >/dev/null 2>&1; then $STD apt-get install -y argon2; fi
|
||||||
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -t 2 -m 16 -p 4 -l 64 -e)
|
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -t 2 -m 16 -p 4 -l 64 -e)
|
||||||
sed -i "s|ADMIN_TOKEN=.*|ADMIN_TOKEN='${TOKEN}'|" /opt/vaultwarden/.env
|
sed -i "s|ADMIN_TOKEN=.*|ADMIN_TOKEN='${TOKEN}'|" /opt/vaultwarden/.env
|
||||||
if [[ -f /opt/vaultwarden/data/config.json ]]; then
|
if [[ -f /opt/vaultwarden/data/config.json ]]; then
|
||||||
sed -i "s|\"admin_token\":.*|\"admin_token\": \"${TOKEN}\"|" /opt/vaultwarden/data/config.json
|
sed -i "s|\"admin_token\":.*|\"admin_token\": \"${TOKEN}\"|" /opt/vaultwarden/data/config.json
|
||||||
fi
|
fi
|
||||||
systemctl restart vaultwarden
|
systemctl restart vaultwarden
|
||||||
msg_ok "Admin token updated"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
# Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
|
# Author: MickLesk (Canbiz)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://vikunja.io/
|
# Source: https://vikunja.io/
|
||||||
|
|
||||||
@@ -27,51 +27,30 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
RELEASE=$(curl -fsSL https://dl.vikunja.io/vikunja/ | grep -oP 'href="/vikunja/\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
|
||||||
RELEASE="$( [[ -f "$HOME/.vikunja" ]] && cat "$HOME/.vikunja" 2>/dev/null || [[ -f /opt/Vikunja_version ]] && cat /opt/Vikunja_version 2>/dev/null || true)"
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
if [[ -z "$RELEASE" ]] || [[ "$RELEASE" == "unstable" ]] || dpkg --compare-versions "${RELEASE:-0.0.0}" lt "1.0.0"; then
|
|
||||||
msg_warn "You are upgrading from Vikunja '$RELEASE'."
|
|
||||||
msg_warn "This requires MANUAL config changes in /etc/vikunja/config.yml."
|
|
||||||
msg_warn "See: https://vikunja.io/changelog/whats-new-in-vikunja-1.0.0/#config-changes"
|
|
||||||
|
|
||||||
read -rp "Continue with update? (y to proceed): " -t 30 CONFIRM1 || exit 1
|
|
||||||
[[ "$CONFIRM1" =~ ^[yY]$ ]] || exit 0
|
|
||||||
|
|
||||||
echo
|
|
||||||
msg_warn "Vikunja may not start after the update until you manually adjust the config."
|
|
||||||
msg_warn "Details: https://vikunja.io/changelog/whats-new-in-vikunja-1.0.0/#config-changes"
|
|
||||||
|
|
||||||
read -rp "Acknowledge and continue? (y): " -t 30 CONFIRM2 || exit 1
|
|
||||||
[[ "$CONFIRM2" =~ ^[yY]$ ]] || exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "vikunja" "go-vikunja/vikunja"; then
|
|
||||||
echo
|
|
||||||
msg_warn "The package update may include config file changes."
|
|
||||||
echo -e "${TAB}${YW}How do you want to handle /etc/vikunja/config.yml?${CL}"
|
|
||||||
echo -e "${TAB} 1) Keep your current config"
|
|
||||||
echo -e "${TAB} 2) Install the new package maintainer's config"
|
|
||||||
read -rp " Choose [1/2] (default: 1): " -t 60 CONFIG_CHOICE || CONFIG_CHOICE="1"
|
|
||||||
[[ -z "$CONFIG_CHOICE" ]] && CONFIG_CHOICE="1"
|
|
||||||
|
|
||||||
if [[ "$CONFIG_CHOICE" == "2" ]]; then
|
|
||||||
export DPKG_FORCE_CONFNEW="1"
|
|
||||||
else
|
|
||||||
export DPKG_FORCE_CONFOLD="1"
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop vikunja
|
systemctl stop vikunja
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "vikunja" "go-vikunja/vikunja" "binary"
|
msg_info "Updating ${APP} to ${RELEASE}"
|
||||||
|
cd /opt
|
||||||
|
rm -rf /opt/vikunja/vikunja
|
||||||
|
curl -fsSL "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb" -o $(basename "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb")
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
$STD dpkg -i vikunja-"$RELEASE"-amd64.deb
|
||||||
|
rm -rf /opt/vikunja-"$RELEASE"-amd64.deb
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start vikunja
|
systemctl start vikunja
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
fi
|
fi
|
||||||
exit 0
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -20,50 +20,50 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -f /opt/wanderer/start.sh ]]; then
|
if [[ ! -f /opt/wanderer/start.sh ]]; then
|
||||||
msg_error "No wanderer Installation Found!"
|
msg_error "No wanderer Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "wanderer" "Flomp/wanderer"; then
|
||||||
|
msg_info "Stopping service"
|
||||||
|
systemctl stop wanderer-web
|
||||||
|
msg_ok "Stopped service"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "wanderer" "Flomp/wanderer" "tarball" "latest" "/opt/wanderer/source"
|
||||||
|
|
||||||
|
msg_info "Updating wanderer"
|
||||||
|
cd /opt/wanderer/source/db
|
||||||
|
$STD go mod tidy
|
||||||
|
$STD go build
|
||||||
|
cd /opt/wanderer/source/web
|
||||||
|
$STD npm ci --omit=dev
|
||||||
|
$STD npm run build
|
||||||
|
msg_ok "Updated wanderer"
|
||||||
|
|
||||||
|
msg_info "Starting service"
|
||||||
|
systemctl start wanderer-web
|
||||||
|
msg_ok "Started service"
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
fi
|
||||||
|
if check_for_gh_release "meilisearch" "meilisearch/meilisearch"; then
|
||||||
|
msg_info "Stopping service"
|
||||||
|
systemctl stop wanderer-web
|
||||||
|
msg_ok "Stopped service"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary" "latest" "/opt/wanderer/source/search"
|
||||||
|
grep -q -- '--experimental-dumpless-upgrade' /opt/wanderer/start.sh || sed -i 's|meilisearch --master-key|meilisearch --experimental-dumpless-upgrade --master-key|' /opt/wanderer/start.sh
|
||||||
|
|
||||||
|
msg_info "Starting service"
|
||||||
|
systemctl start wanderer-web
|
||||||
|
msg_ok "Started service"
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "wanderer" "Flomp/wanderer"; then
|
|
||||||
msg_info "Stopping service"
|
|
||||||
systemctl stop wanderer-web
|
|
||||||
msg_ok "Stopped service"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "wanderer" "open-wanderer/wanderer" "tarball" "latest" "/opt/wanderer/source"
|
|
||||||
|
|
||||||
msg_info "Updating wanderer"
|
|
||||||
cd /opt/wanderer/source/db
|
|
||||||
$STD go mod tidy
|
|
||||||
$STD go build
|
|
||||||
cd /opt/wanderer/source/web
|
|
||||||
$STD npm ci --omit=dev
|
|
||||||
$STD npm run build
|
|
||||||
msg_ok "Updated wanderer"
|
|
||||||
|
|
||||||
msg_info "Starting service"
|
|
||||||
systemctl start wanderer-web
|
|
||||||
msg_ok "Started service"
|
|
||||||
msg_ok "Update Successful"
|
|
||||||
fi
|
|
||||||
if check_for_gh_release "meilisearch" "meilisearch/meilisearch"; then
|
|
||||||
msg_info "Stopping service"
|
|
||||||
systemctl stop wanderer-web
|
|
||||||
msg_ok "Stopped service"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary" "latest" "/opt/wanderer/source/search"
|
|
||||||
grep -q -- '--experimental-dumpless-upgrade' /opt/wanderer/start.sh || sed -i 's|meilisearch --master-key|meilisearch --experimental-dumpless-upgrade --master-key|' /opt/wanderer/start.sh
|
|
||||||
|
|
||||||
msg_info "Starting service"
|
|
||||||
systemctl start wanderer-web
|
|
||||||
msg_ok "Started service"
|
|
||||||
msg_ok "Update Successful"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -27,7 +27,10 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
ensure_dependencies zstd
|
if ! [[ $(dpkg -s zstd 2>/dev/null) ]]; then
|
||||||
|
$STD apt update
|
||||||
|
$STD apt install -y zstd
|
||||||
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
# Dirty-Fix 03/2025 for missing APP_version.txt on old installations, set to pre-latest release
|
# Dirty-Fix 03/2025 for missing APP_version.txt on old installations, set to pre-latest release
|
||||||
msg_info "Running Migration"
|
msg_info "Running Migration"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2025 community-scripts ORG
|
||||||
# Author: Omar Minaya
|
# Author: Omar Minaya
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://wazuh.com/
|
# Source: https://wazuh.com/
|
||||||
|
|||||||
@@ -1,86 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: CrazyWolf13
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://wealthfolio.app/
|
|
||||||
|
|
||||||
APP="Wealthfolio"
|
|
||||||
var_tags="${var_tags:-finance;portfolio}"
|
|
||||||
var_cpu="${var_cpu:-4}"
|
|
||||||
var_ram="${var_ram:-4096}"
|
|
||||||
var_disk="${var_disk:-10}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /opt/wealthfolio ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "wealthfolio" "afadil/wealthfolio"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop wealthfolio
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
|
||||||
cp -r /opt/wealthfolio_data /opt/wealthfolio_data_backup
|
|
||||||
cp /opt/wealthfolio/.env /opt/wealthfolio_env_backup
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wealthfolio" "afadil/wealthfolio" "tarball"
|
|
||||||
|
|
||||||
msg_info "Building Frontend (patience)"
|
|
||||||
cd /opt/wealthfolio
|
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
$STD pnpm tsc
|
|
||||||
$STD pnpm vite build
|
|
||||||
msg_ok "Built Frontend"
|
|
||||||
|
|
||||||
msg_info "Building Backend (patience)"
|
|
||||||
cd /opt/wealthfolio/src-server
|
|
||||||
source ~/.cargo/env
|
|
||||||
$STD cargo build --release --manifest-path Cargo.toml
|
|
||||||
cp /opt/wealthfolio/src-server/target/release/wealthfolio-server /usr/local/bin/wealthfolio-server
|
|
||||||
chmod +x /usr/local/bin/wealthfolio-server
|
|
||||||
msg_ok "Built Backend"
|
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
|
||||||
cp -r /opt/wealthfolio_data_backup/. /opt/wealthfolio_data
|
|
||||||
cp /opt/wealthfolio_env_backup /opt/wealthfolio/.env
|
|
||||||
rm -rf /opt/wealthfolio_data_backup /opt/wealthfolio_env_backup
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf /opt/wealthfolio/src-server/target
|
|
||||||
rm -rf /root/.cargo/registry
|
|
||||||
rm -rf /opt/wealthfolio/node_modules
|
|
||||||
msg_ok "Cleaned Up"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start wealthfolio
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
|
||||||
@@ -27,8 +27,11 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
msg_info "Updating Whisparr"
|
||||||
msg_custom "🚀" "${GN}" "The app offers a built-in updater. Please use it."
|
$STD apt update
|
||||||
|
$STD apt -y upgrade
|
||||||
|
msg_ok "Updated Whisparr"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,82 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: Dunky13
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/cmintey/wishlist
|
|
||||||
|
|
||||||
APP="Wishlist"
|
|
||||||
var_tags="${var_tags:-sharing}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-5}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /opt/wishlist ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "wishlist" "cmintey/wishlist"; then
|
|
||||||
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
|
|
||||||
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop wishlist
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Creating Backup"
|
|
||||||
mkdir -p /opt/wishlist-backup
|
|
||||||
cp /opt/wishlist/.env /opt/wishlist-backup/.env
|
|
||||||
cp -a /opt/wishlist/uploads /opt/wishlist-backup
|
|
||||||
cp -a /opt/wishlist/data /opt/wishlist-backup
|
|
||||||
msg_ok "Created Backup"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wishlist" "cmintey/wishlist" "tarball"
|
|
||||||
LATEST_APP_VERSION=$(get_latest_github_release "cmintey/wishlist")
|
|
||||||
|
|
||||||
msg_info "Updating Wishlist"
|
|
||||||
cd /opt/wishlist
|
|
||||||
$STD pnpm install
|
|
||||||
$STD pnpm svelte-kit sync
|
|
||||||
$STD pnpm prisma generate
|
|
||||||
sed -i 's|/usr/src/app/|/opt/wishlist/|g' $(grep -rl '/usr/src/app/' /opt/wishlist)
|
|
||||||
export VERSION="v${LATEST_APP_VERSION}"
|
|
||||||
export SHA="v${LATEST_APP_VERSION}"
|
|
||||||
$STD pnpm run build
|
|
||||||
$STD pnpm prune --prod
|
|
||||||
chmod +x /opt/wishlist/entrypoint.sh
|
|
||||||
|
|
||||||
msg_info "Restoring Backup"
|
|
||||||
cp /opt/wishlist-backup/.env /opt/wishlist/.env
|
|
||||||
cp -a /opt/wishlist-backup/uploads /opt/wishlist
|
|
||||||
cp -a /opt/wishlist-backup/data /opt/wishlist
|
|
||||||
rm -rf /opt/wishlist-backup
|
|
||||||
msg_ok "Restored Backup"
|
|
||||||
|
|
||||||
msg_ok "Updated Wishlist"
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start wishlist
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3280${CL}"
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: StellaeAlis
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/writefreely/writefreely
|
|
||||||
|
|
||||||
APP="WriteFreely"
|
|
||||||
var_tags="${var_tags:-writing}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-1024}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /opt/writefreely ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "writefreely" "writefreely/writefreely"; then
|
|
||||||
msg_info "Stopping Services"
|
|
||||||
systemctl stop writefreely
|
|
||||||
msg_ok "Stopped Services"
|
|
||||||
|
|
||||||
msg_info "Creating Backup"
|
|
||||||
mkdir -p /tmp/writefreely_backup
|
|
||||||
cp /opt/writefreely/keys /tmp/writefreely_backup/ 2>/dev/null
|
|
||||||
cp /opt/writefreely/config.ini /tmp/writefreely_backup/ 2>/dev/null
|
|
||||||
msg_ok "Created Backup"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "writefreely" "writefreely/writefreely" "prebuild" "latest" "/opt/writefreely" "writefreely_*_linux_amd64.tar.gz"
|
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
|
||||||
cp /tmp/writefreely_backup/config.ini /opt/writefreely/ 2>/dev/null
|
|
||||||
cp /tmp/writefreely_backup/keys/* /opt/writefreely/keys/ 2>/dev/null
|
|
||||||
rm -rf /tmp/writefreely_backup
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Running Post-Update Tasks"
|
|
||||||
cd /opt/writefreely
|
|
||||||
$STD ./writefreely db migrate
|
|
||||||
ln -s /opt/writefreely/writefreely /usr/local/bin/writefreely
|
|
||||||
msg_ok "Ran Post-Update Tasks"
|
|
||||||
|
|
||||||
msg_info "Starting Services"
|
|
||||||
systemctl start writefreely
|
|
||||||
msg_ok "Started Services"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
|
||||||
@@ -29,8 +29,6 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ensure_dependencies git
|
|
||||||
|
|
||||||
if check_for_gh_release "yubal" "guillevc/yubal"; then
|
if check_for_gh_release "yubal" "guillevc/yubal"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop yubal
|
systemctl stop yubal
|
||||||
|
|||||||
@@ -1,868 +0,0 @@
|
|||||||
# 🤖 AI Contribution Guidelines for ProxmoxVE
|
|
||||||
|
|
||||||
> **This documentation is intended for all AI assistants (GitHub Copilot, Claude, ChatGPT, etc.) contributing to this project.**
|
|
||||||
|
|
||||||
## 🎯 Core Principles
|
|
||||||
|
|
||||||
### 1. **Maximum Use of `tools.func` Functions**
|
|
||||||
|
|
||||||
We have an extensive library of helper functions. **NEVER** implement your own solutions when a function already exists!
|
|
||||||
|
|
||||||
### 2. **No Pointless Variables**
|
|
||||||
|
|
||||||
Only create variables when they:
|
|
||||||
|
|
||||||
- Are used multiple times
|
|
||||||
- Improve readability
|
|
||||||
- Are intended for configuration
|
|
||||||
|
|
||||||
### 3. **Consistent Script Structure**
|
|
||||||
|
|
||||||
All scripts follow an identical structure. Deviations are not acceptable.
|
|
||||||
|
|
||||||
### 4. **Bare-Metal Installation**
|
|
||||||
|
|
||||||
We do **NOT use Docker** for our installation scripts. All applications are installed directly on the system.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📁 Script Types and Their Structure
|
|
||||||
|
|
||||||
### CT Script (`ct/AppName.sh`)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: AuthorName (GitHubUsername)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://application-url.com
|
|
||||||
|
|
||||||
APP="AppName"
|
|
||||||
var_tags="${var_tags:-tag1;tag2;tag3}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-8}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /opt/appname ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "appname" "YourUsername/YourRepo"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop appname
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
|
||||||
cp -r /opt/appname/data /opt/appname_data_backup
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/appname"
|
|
||||||
|
|
||||||
# Build steps...
|
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
|
||||||
cp -r /opt/appname_data_backup/. /opt/appname/data
|
|
||||||
rm -rf /opt/appname_data_backup
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start appname
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:PORT${CL}"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Install Script (`install/AppName-install.sh`)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: AuthorName (GitHubUsername)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://application-url.com
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apt-get install -y \
|
|
||||||
dependency1 \
|
|
||||||
dependency2
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
# Runtime Setup (ALWAYS use our functions!)
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
|
||||||
# or
|
|
||||||
PG_VERSION="16" setup_postgresql
|
|
||||||
# or
|
|
||||||
setup_uv
|
|
||||||
# etc.
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/appname"
|
|
||||||
|
|
||||||
msg_info "Setting up Application"
|
|
||||||
cd /opt/appname
|
|
||||||
# Build/Setup Schritte...
|
|
||||||
msg_ok "Set up Application"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/appname.service
|
|
||||||
[Unit]
|
|
||||||
Description=AppName Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=root
|
|
||||||
WorkingDirectory=/opt/appname
|
|
||||||
ExecStart=/path/to/executable
|
|
||||||
Restart=on-failure
|
|
||||||
RestartSec=5
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now appname
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
cleanup_lxc
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔧 Available Helper Functions
|
|
||||||
|
|
||||||
### Release Management
|
|
||||||
|
|
||||||
| Function | Description | Example |
|
|
||||||
| ----------------------------- | ----------------------------------- | ------------------------------------------------------------- |
|
|
||||||
| `fetch_and_deploy_gh_release` | Fetches and installs GitHub Release | `fetch_and_deploy_gh_release "app" "owner/repo"` |
|
|
||||||
| `check_for_gh_release` | Checks for new version | `if check_for_gh_release "app" "YourUsername/YourRepo"; then` |
|
|
||||||
|
|
||||||
**Modes for `fetch_and_deploy_gh_release`:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Tarball/Source (Standard)
|
|
||||||
fetch_and_deploy_gh_release "appname" "owner/repo"
|
|
||||||
|
|
||||||
# Binary (.deb)
|
|
||||||
fetch_and_deploy_gh_release "appname" "owner/repo" "binary"
|
|
||||||
|
|
||||||
# Prebuilt Archive
|
|
||||||
fetch_and_deploy_gh_release "appname" "owner/repo" "prebuild" "latest" "/opt/appname" "filename.tar.gz"
|
|
||||||
|
|
||||||
# Single Binary
|
|
||||||
fetch_and_deploy_gh_release "appname" "owner/repo" "singlefile" "latest" "/opt/appname" "binary-linux-amd64"
|
|
||||||
```
|
|
||||||
|
|
||||||
**Clean Install Flag:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "appname" "owner/repo"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Runtime/Language Setup
|
|
||||||
|
|
||||||
| Function | Variable(s) | Example |
|
|
||||||
| -------------- | ----------------------------- | ---------------------------------------------------- |
|
|
||||||
| `setup_nodejs` | `NODE_VERSION`, `NODE_MODULE` | `NODE_VERSION="22" setup_nodejs` |
|
|
||||||
| `setup_uv` | `PYTHON_VERSION` | `PYTHON_VERSION="3.12" setup_uv` |
|
|
||||||
| `setup_go` | `GO_VERSION` | `GO_VERSION="1.22" setup_go` |
|
|
||||||
| `setup_rust` | `RUST_VERSION`, `RUST_CRATES` | `RUST_CRATES="monolith" setup_rust` |
|
|
||||||
| `setup_ruby` | `RUBY_VERSION` | `RUBY_VERSION="3.3" setup_ruby` |
|
|
||||||
| `setup_java` | `JAVA_VERSION` | `JAVA_VERSION="21" setup_java` |
|
|
||||||
| `setup_php` | `PHP_VERSION`, `PHP_MODULES` | `PHP_VERSION="8.3" PHP_MODULES="redis,gd" setup_php` |
|
|
||||||
|
|
||||||
### Database Setup
|
|
||||||
|
|
||||||
| Function | Variable(s) | Example |
|
|
||||||
| --------------------- | ------------------------------------ | ----------------------------------------------------------- |
|
|
||||||
| `setup_postgresql` | `PG_VERSION`, `PG_MODULES` | `PG_VERSION="16" setup_postgresql` |
|
|
||||||
| `setup_postgresql_db` | `PG_DB_NAME`, `PG_DB_USER` | `PG_DB_NAME="mydb" PG_DB_USER="myuser" setup_postgresql_db` |
|
|
||||||
| `setup_mariadb_db` | `MARIADB_DB_NAME`, `MARIADB_DB_USER` | `MARIADB_DB_NAME="mydb" setup_mariadb_db` |
|
|
||||||
| `setup_mysql` | `MYSQL_VERSION` | `setup_mysql` |
|
|
||||||
| `setup_mongodb` | `MONGO_VERSION` | `setup_mongodb` |
|
|
||||||
| `setup_clickhouse` | - | `setup_clickhouse` |
|
|
||||||
|
|
||||||
### Tools & Utilities
|
|
||||||
|
|
||||||
| Function | Description |
|
|
||||||
| ------------------- | ---------------------------------- |
|
|
||||||
| `setup_adminer` | Installs Adminer for DB management |
|
|
||||||
| `setup_composer` | Install PHP Composer |
|
|
||||||
| `setup_ffmpeg` | Install FFmpeg |
|
|
||||||
| `setup_imagemagick` | Install ImageMagick |
|
|
||||||
| `setup_gs` | Install Ghostscript |
|
|
||||||
| `setup_hwaccel` | Configure hardware acceleration |
|
|
||||||
|
|
||||||
### Helper Utilities
|
|
||||||
|
|
||||||
| Function | Description | Example |
|
|
||||||
| ----------------------------- | ---------------------------- | ----------------------------------------- |
|
|
||||||
| `import_local_ip` | Sets `$LOCAL_IP` variable | `import_local_ip` |
|
|
||||||
| `ensure_dependencies` | Checks/installs dependencies | `ensure_dependencies curl jq` |
|
|
||||||
| `install_packages_with_retry` | APT install with retry | `install_packages_with_retry nginx redis` |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ❌ Anti-Patterns (NEVER use!)
|
|
||||||
|
|
||||||
### 1. Pointless Variables
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - unnecessary variables
|
|
||||||
APP_NAME="myapp"
|
|
||||||
APP_DIR="/opt/${APP_NAME}"
|
|
||||||
APP_USER="root"
|
|
||||||
APP_PORT="3000"
|
|
||||||
cd $APP_DIR
|
|
||||||
|
|
||||||
# ✅ CORRECT - use directly
|
|
||||||
cd /opt/myapp
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Custom Download Logic
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - custom wget/curl logic
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/YourUsername/YourRepo/releases/latest | jq -r '.tag_name')
|
|
||||||
wget https://github.com/YourUsername/YourRepo/archive/${RELEASE}.tar.gz
|
|
||||||
tar -xzf ${RELEASE}.tar.gz
|
|
||||||
mv repo-${RELEASE} /opt/myapp
|
|
||||||
|
|
||||||
# ✅ CORRECT - use our function
|
|
||||||
fetch_and_deploy_gh_release "myapp" "YourUsername/YourRepo" "tarball" "latest" "/opt/myapp"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. Custom Version-Check Logic
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - custom version check
|
|
||||||
CURRENT=$(cat /opt/myapp/version.txt)
|
|
||||||
LATEST=$(curl -s https://api.github.com/repos/YourUsername/YourRepo/releases/latest | jq -r '.tag_name')
|
|
||||||
if [[ "$CURRENT" != "$LATEST" ]]; then
|
|
||||||
# update...
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ✅ CORRECT - use our function
|
|
||||||
if check_for_gh_release "myapp" "YourUsername/YourRepo"; then
|
|
||||||
# update...
|
|
||||||
fi
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. Docker-based Installation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - using Docker
|
|
||||||
docker pull myapp/myapp:latest
|
|
||||||
docker run -d --name myapp myapp/myapp:latest
|
|
||||||
|
|
||||||
# ✅ CORRECT - Bare-Metal Installation
|
|
||||||
fetch_and_deploy_gh_release "myapp" "YourUsername/YourRepo"
|
|
||||||
npm install && npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5. Custom Runtime Installation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - custom Node.js installation
|
|
||||||
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
|
|
||||||
apt install -y nodejs
|
|
||||||
|
|
||||||
# ✅ CORRECT - use our function
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
|
||||||
```
|
|
||||||
|
|
||||||
### 6. Redundant echo Statements
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - custom logging messages
|
|
||||||
echo "Installing dependencies..."
|
|
||||||
apt install -y curl
|
|
||||||
echo "Done!"
|
|
||||||
|
|
||||||
# ✅ CORRECT - use msg_info/msg_ok
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD apt install -y curl
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 7. Missing $STD Usage
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - apt without $STD
|
|
||||||
apt install -y nginx
|
|
||||||
|
|
||||||
# ✅ CORRECT - with $STD for silent output
|
|
||||||
$STD apt install -y nginx
|
|
||||||
```
|
|
||||||
|
|
||||||
### 8. Wrapping `tools.func` Functions in msg Blocks
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - tools.func functions have their own msg_info/msg_ok!
|
|
||||||
msg_info "Installing Node.js"
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
|
||||||
msg_ok "Installed Node.js"
|
|
||||||
|
|
||||||
msg_info "Updating Application"
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/appname"
|
|
||||||
msg_ok "Updated Application"
|
|
||||||
|
|
||||||
# ✅ CORRECT - call directly without msg wrapper
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/appname"
|
|
||||||
```
|
|
||||||
|
|
||||||
**Functions with built-in messages (NEVER wrap in msg blocks):**
|
|
||||||
|
|
||||||
- `fetch_and_deploy_gh_release`
|
|
||||||
- `check_for_gh_release`
|
|
||||||
- `setup_nodejs`
|
|
||||||
- `setup_postgresql` / `setup_postgresql_db`
|
|
||||||
- `setup_mariadb` / `setup_mariadb_db`
|
|
||||||
- `setup_mongodb`
|
|
||||||
- `setup_mysql`
|
|
||||||
- `setup_ruby`
|
|
||||||
- `setup_go`
|
|
||||||
- `setup_java`
|
|
||||||
- `setup_php`
|
|
||||||
- `setup_uv`
|
|
||||||
- `setup_rust`
|
|
||||||
- `setup_composer`
|
|
||||||
- `setup_ffmpeg`
|
|
||||||
- `setup_imagemagick`
|
|
||||||
- `setup_gs`
|
|
||||||
- `setup_adminer`
|
|
||||||
- `setup_hwaccel`
|
|
||||||
|
|
||||||
### 9. Creating Unnecessary System Users
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - LXC containers run as root, no separate user needed
|
|
||||||
useradd -m -s /usr/bin/bash appuser
|
|
||||||
chown -R appuser:appuser /opt/appname
|
|
||||||
sudo -u appuser npm install
|
|
||||||
|
|
||||||
# ✅ CORRECT - run directly as root
|
|
||||||
cd /opt/appname
|
|
||||||
$STD npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
### 10. Using `export` in .env Files
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - export is unnecessary in .env files
|
|
||||||
cat <<EOF >/opt/appname/.env
|
|
||||||
export DATABASE_URL=postgres://...
|
|
||||||
export SECRET_KEY=abc123
|
|
||||||
export NODE_ENV=production
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# ✅ CORRECT - simple KEY=VALUE format (files are sourced with set -a)
|
|
||||||
cat <<EOF >/opt/appname/.env
|
|
||||||
DATABASE_URL=postgres://...
|
|
||||||
SECRET_KEY=abc123
|
|
||||||
NODE_ENV=production
|
|
||||||
EOF
|
|
||||||
```
|
|
||||||
|
|
||||||
### 11. Using External Shell Scripts
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - external script that gets executed
|
|
||||||
cat <<'EOF' >/opt/appname/install_script.sh
|
|
||||||
#!/bin/bash
|
|
||||||
cd /opt/appname
|
|
||||||
npm install
|
|
||||||
npm run build
|
|
||||||
EOF
|
|
||||||
chmod +x /opt/appname/install_script.sh
|
|
||||||
$STD bash /opt/appname/install_script.sh
|
|
||||||
rm -f /opt/appname/install_script.sh
|
|
||||||
|
|
||||||
# ✅ CORRECT - run commands directly
|
|
||||||
cd /opt/appname
|
|
||||||
$STD npm install
|
|
||||||
$STD npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
### 12. Using `sudo` in LXC Containers
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - sudo is unnecessary in LXC (already root)
|
|
||||||
sudo -u postgres psql -c "CREATE DATABASE mydb;"
|
|
||||||
sudo -u appuser npm install
|
|
||||||
|
|
||||||
# ✅ CORRECT - use functions or run directly as root
|
|
||||||
PG_DB_NAME="mydb" PG_DB_USER="myuser" setup_postgresql_db
|
|
||||||
|
|
||||||
cd /opt/appname
|
|
||||||
$STD npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
### 13. Unnecessary `systemctl daemon-reload`
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - daemon-reload is only needed when MODIFYING existing services
|
|
||||||
cat <<EOF >/etc/systemd/system/appname.service
|
|
||||||
# ... service config ...
|
|
||||||
EOF
|
|
||||||
systemctl daemon-reload # Unnecessary for new services!
|
|
||||||
systemctl enable -q --now appname
|
|
||||||
|
|
||||||
# ✅ CORRECT - new services don't need daemon-reload
|
|
||||||
cat <<EOF >/etc/systemd/system/appname.service
|
|
||||||
# ... service config ...
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now appname
|
|
||||||
```
|
|
||||||
|
|
||||||
### 14. Creating Custom Credentials Files
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - custom credentials file is not part of the standard template
|
|
||||||
msg_info "Saving Credentials"
|
|
||||||
cat <<EOF >~/appname.creds
|
|
||||||
Database User: ${DB_USER}
|
|
||||||
Database Pass: ${DB_PASS}
|
|
||||||
EOF
|
|
||||||
msg_ok "Saved Credentials"
|
|
||||||
|
|
||||||
# ✅ CORRECT - credentials are stored in .env or shown in final message only
|
|
||||||
# If you use setup_postgresql_db / setup_mariadb_db, a standard ~/[appname].creds is created automatically
|
|
||||||
```
|
|
||||||
|
|
||||||
### 15. Wrong Footer Pattern
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - old cleanup pattern with msg blocks
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
$STD apt-get -y autoremove
|
|
||||||
$STD apt-get -y autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
|
|
||||||
# ✅ CORRECT - use cleanup_lxc function
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
cleanup_lxc
|
|
||||||
```
|
|
||||||
|
|
||||||
### 16. Manual Database Creation Instead of Functions
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - manual database creation
|
|
||||||
DB_USER="myuser"
|
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
|
||||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
|
||||||
$STD sudo -u postgres psql -c "CREATE DATABASE mydb WITH OWNER $DB_USER;"
|
|
||||||
$STD sudo -u postgres psql -d mydb -c "CREATE EXTENSION IF NOT EXISTS postgis;"
|
|
||||||
|
|
||||||
# ✅ CORRECT - use setup_postgresql_db function
|
|
||||||
# This sets PG_DB_USER, PG_DB_PASS, PG_DB_NAME automatically
|
|
||||||
PG_DB_NAME="mydb" PG_DB_USER="myuser" PG_DB_EXTENSIONS="postgis" setup_postgresql_db
|
|
||||||
```
|
|
||||||
|
|
||||||
### 17. Writing Files Without Heredocs
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ❌ WRONG - echo / printf / tee
|
|
||||||
echo "# Config" > /opt/app/config.yml
|
|
||||||
echo "port: 3000" >> /opt/app/config.yml
|
|
||||||
|
|
||||||
printf "# Config\nport: 3000\n" > /opt/app/config.yml
|
|
||||||
cat config.yml | tee /opt/app/config.yml
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ✅ CORRECT - always use a single heredoc
|
|
||||||
cat <<EOF >/opt/app/config.yml
|
|
||||||
# Config
|
|
||||||
port: 3000
|
|
||||||
EOF
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📝 Important Rules
|
|
||||||
|
|
||||||
### Variable Declarations (CT Script)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Standard declarations (ALWAYS present)
|
|
||||||
APP="AppName"
|
|
||||||
var_tags="${var_tags:-tag1;tag2}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-8}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Update-Script Pattern
|
|
||||||
|
|
||||||
```bash
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
# 1. Check if installation exists
|
|
||||||
if [[ ! -d /opt/appname ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. Check for update
|
|
||||||
if check_for_gh_release "appname" "YourUsername/YourRepo"; then
|
|
||||||
# 3. Stop service
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop appname
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
# 4. Backup data (if present)
|
|
||||||
msg_info "Backing up Data"
|
|
||||||
cp -r /opt/appname/data /opt/appname_data_backup
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
# 5. Perform clean install
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/appname"
|
|
||||||
|
|
||||||
# 6. Rebuild (if needed)
|
|
||||||
cd /opt/appname
|
|
||||||
$STD npm install
|
|
||||||
$STD npm run build
|
|
||||||
|
|
||||||
# 7. Restore data
|
|
||||||
msg_info "Restoring Data"
|
|
||||||
cp -r /opt/appname_data_backup/. /opt/appname/data
|
|
||||||
rm -rf /opt/appname_data_backup
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
# 8. Start service
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start appname
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit # IMPORTANT: Always end with exit!
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Systemd Service Pattern
|
|
||||||
|
|
||||||
```bash
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/appname.service
|
|
||||||
[Unit]
|
|
||||||
Description=AppName Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=root
|
|
||||||
WorkingDirectory=/opt/appname
|
|
||||||
Environment=NODE_ENV=production
|
|
||||||
ExecStart=/usr/bin/node /opt/appname/server.js
|
|
||||||
Restart=on-failure
|
|
||||||
RestartSec=5
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now appname
|
|
||||||
msg_ok "Created Service"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Installation Script Footer
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ALWAYS at the end of the install script:
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
cleanup_lxc
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📖 Reference: Good Example Scripts
|
|
||||||
|
|
||||||
Look at these recent well-implemented applications as reference:
|
|
||||||
|
|
||||||
### Container Scripts (Latest 10)
|
|
||||||
|
|
||||||
- [ct/thingsboard.sh](../ct/thingsboard.sh) - IoT platform with proper update_script
|
|
||||||
- [ct/unifi-os-server.sh](../ct/unifi-os-server.sh) - Complex setup with podman
|
|
||||||
- [ct/trip.sh](../ct/trip.sh) - Simple Ruby app
|
|
||||||
- [ct/fladder.sh](../ct/fladder.sh) - Media app with database
|
|
||||||
- [ct/qui.sh](../ct/qui.sh) - Lightweight utility
|
|
||||||
- [ct/kutt.sh](../ct/kutt.sh) - Node.js with PostgreSQL
|
|
||||||
- [ct/flatnotes.sh](../ct/flatnotes.sh) - Python notes app
|
|
||||||
- [ct/investbrain.sh](../ct/investbrain.sh) - Finance app
|
|
||||||
- [ct/gwn-manager.sh](../ct/gwn-manager.sh) - Network management
|
|
||||||
- [ct/sportarr.sh](../ct/sportarr.sh) - Specialized \*Arr variant
|
|
||||||
|
|
||||||
### Install Scripts (Latest)
|
|
||||||
|
|
||||||
- [install/unifi-os-server-install.sh](../install/unifi-os-server-install.sh) - Complex setup with API integration
|
|
||||||
- [install/trip-install.sh](../install/trip-install.sh) - Rails application setup
|
|
||||||
- [install/mail-archiver-install.sh](../install/mail-archiver-install.sh) - Email-related service
|
|
||||||
|
|
||||||
**Key things to notice:**
|
|
||||||
|
|
||||||
- Proper error handling with `catch_errors`
|
|
||||||
- Use of `check_for_gh_release` and `fetch_and_deploy_gh_release`
|
|
||||||
- Correct backup/restore patterns in `update_script`
|
|
||||||
- Footer always ends with `motd_ssh`, `customize`, `cleanup_lxc`
|
|
||||||
- JSON metadata files created for each app
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## <20> JSON Metadata Files
|
|
||||||
|
|
||||||
Every application requires a JSON metadata file in `frontend/public/json/<appname>.json`.
|
|
||||||
|
|
||||||
### JSON Structure
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"name": "AppName",
|
|
||||||
"slug": "appname",
|
|
||||||
"categories": [1],
|
|
||||||
"date_created": "2026-01-16",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 3000,
|
|
||||||
"documentation": "https://docs.appname.com/",
|
|
||||||
"website": "https://appname.com/",
|
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/appname.webp",
|
|
||||||
"config_path": "/opt/appname/.env",
|
|
||||||
"description": "Short description of the application and its purpose.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/appname.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 2,
|
|
||||||
"ram": 2048,
|
|
||||||
"hdd": 8,
|
|
||||||
"os": "Debian",
|
|
||||||
"version": "13"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": []
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Required Fields
|
|
||||||
|
|
||||||
| Field | Type | Description |
|
|
||||||
| --------------------- | ------- | -------------------------------------------------- |
|
|
||||||
| `name` | string | Display name of the application |
|
|
||||||
| `slug` | string | Lowercase, no spaces, used for filenames |
|
|
||||||
| `categories` | array | Category ID(s) - see category list below |
|
|
||||||
| `date_created` | string | Creation date (YYYY-MM-DD) |
|
|
||||||
| `type` | string | `ct` for container, `vm` for virtual machine |
|
|
||||||
| `updateable` | boolean | Whether update_script is implemented |
|
|
||||||
| `privileged` | boolean | Whether container needs privileged mode |
|
|
||||||
| `interface_port` | number | Primary web interface port (or `null`) |
|
|
||||||
| `documentation` | string | Link to official docs |
|
|
||||||
| `website` | string | Link to official website |
|
|
||||||
| `logo` | string | URL to application logo (preferably selfhst icons) |
|
|
||||||
| `config_path` | string | Path to main config file (or empty string) |
|
|
||||||
| `description` | string | Brief description of the application |
|
|
||||||
| `install_methods` | array | Installation configurations |
|
|
||||||
| `default_credentials` | object | Default username/password (or null) |
|
|
||||||
| `notes` | array | Additional notes/warnings |
|
|
||||||
|
|
||||||
### Categories
|
|
||||||
|
|
||||||
| ID | Category |
|
|
||||||
| --- | ------------------------- |
|
|
||||||
| 0 | Miscellaneous |
|
|
||||||
| 1 | Proxmox & Virtualization |
|
|
||||||
| 2 | Operating Systems |
|
|
||||||
| 3 | Containers & Docker |
|
|
||||||
| 4 | Network & Firewall |
|
|
||||||
| 5 | Adblock & DNS |
|
|
||||||
| 6 | Authentication & Security |
|
|
||||||
| 7 | Backup & Recovery |
|
|
||||||
| 8 | Databases |
|
|
||||||
| 9 | Monitoring & Analytics |
|
|
||||||
| 10 | Dashboards & Frontends |
|
|
||||||
| 11 | Files & Downloads |
|
|
||||||
| 12 | Documents & Notes |
|
|
||||||
| 13 | Media & Streaming |
|
|
||||||
| 14 | \*Arr Suite |
|
|
||||||
| 15 | NVR & Cameras |
|
|
||||||
| 16 | IoT & Smart Home |
|
|
||||||
| 17 | ZigBee, Z-Wave & Matter |
|
|
||||||
| 18 | MQTT & Messaging |
|
|
||||||
| 19 | Automation & Scheduling |
|
|
||||||
| 20 | AI / Coding & Dev-Tools |
|
|
||||||
| 21 | Webservers & Proxies |
|
|
||||||
| 22 | Bots & ChatOps |
|
|
||||||
| 23 | Finance & Budgeting |
|
|
||||||
| 24 | Gaming & Leisure |
|
|
||||||
| 25 | Business & ERP |
|
|
||||||
|
|
||||||
### Notes Format
|
|
||||||
|
|
||||||
```json
|
|
||||||
"notes": [
|
|
||||||
{
|
|
||||||
"text": "Change the default password after first login!",
|
|
||||||
"type": "warning"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "Requires at least 4GB RAM for optimal performance.",
|
|
||||||
"type": "info"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
```
|
|
||||||
|
|
||||||
**Note types:** `info`, `warning`, `error`
|
|
||||||
|
|
||||||
### Examples with Credentials
|
|
||||||
|
|
||||||
```json
|
|
||||||
"default_credentials": {
|
|
||||||
"username": "admin",
|
|
||||||
"password": "admin"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Or no credentials:
|
|
||||||
|
|
||||||
```json
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔍 Checklist Before PR Creation
|
|
||||||
|
|
||||||
- [ ] No Docker installation used
|
|
||||||
- [ ] `fetch_and_deploy_gh_release` used for GitHub releases
|
|
||||||
- [ ] `check_for_gh_release` used for update checks
|
|
||||||
- [ ] `setup_*` functions used for runtimes (nodejs, postgresql, etc.)
|
|
||||||
- [ ] **`tools.func` functions NOT wrapped in msg_info/msg_ok blocks**
|
|
||||||
- [ ] No redundant variables (only when used multiple times)
|
|
||||||
- [ ] `$STD` before all apt/npm/build commands
|
|
||||||
- [ ] `msg_info`/`msg_ok`/`msg_error` for logging (only for custom code)
|
|
||||||
- [ ] Correct script structure followed (see templates)
|
|
||||||
- [ ] Update function present and functional (CT scripts)
|
|
||||||
- [ ] Data backup implemented in update function (if applicable)
|
|
||||||
- [ ] `motd_ssh`, `customize`, `cleanup_lxc` at the end of install scripts
|
|
||||||
- [ ] No custom download/version-check logic
|
|
||||||
- [ ] All links point to `community-scripts/ProxmoxVE` (not `ProxmoxVED`!)
|
|
||||||
- [ ] JSON metadata file created in `frontend/public/json/<appname>.json`
|
|
||||||
- [ ] Category IDs are valid (0-25)
|
|
||||||
- [ ] Default OS version is Debian 13 or newer (unless special requirement)
|
|
||||||
- [ ] Default resources are reasonable for the application
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 💡 Tips for AI Assistants
|
|
||||||
|
|
||||||
1. **ALWAYS search `tools.func` first** before implementing custom solutions
|
|
||||||
2. **Use recent scripts as reference** (Thingsboard, UniFi OS, Trip, Flatnotes, etc.)
|
|
||||||
3. **Ask when uncertain** instead of introducing wrong patterns
|
|
||||||
4. **Test via GitHub** - push to your fork and test with curl (not local bash)
|
|
||||||
```bash
|
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"
|
|
||||||
# Wait 10-30 seconds after pushing - GitHub takes time to update files
|
|
||||||
```
|
|
||||||
5. **Consistency > Creativity** - follow established patterns strictly
|
|
||||||
6. **Check the templates** - they show the correct structure
|
|
||||||
7. **Don't wrap tools.func functions** - they handle their own msg_info/msg_ok output
|
|
||||||
8. **Minimal variables** - only create variables that are truly reused multiple times
|
|
||||||
9. **Always use $STD** - ensures silent/non-interactive execution
|
|
||||||
10. **Reference good examples** - look at recent additions in each category
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🍒 Important: Cherry-Picking Your Files for PR Submission
|
|
||||||
|
|
||||||
⚠️ **CRITICAL**: When you submit your PR, you must use git cherry-pick to send ONLY your 3-4 files!
|
|
||||||
|
|
||||||
Why? Because `setup-fork.sh` modifies 600+ files to update links. If you commit all changes, your PR will be impossible to merge.
|
|
||||||
|
|
||||||
**See**: [README.md - Cherry-Pick Section](README.md#-cherry-pick-submitting-only-your-changes) for complete instructions on:
|
|
||||||
|
|
||||||
- Creating a clean submission branch
|
|
||||||
- Cherry-picking only your files (ct/myapp.sh, install/myapp-install.sh, frontend/public/json/myapp.json)
|
|
||||||
- Verifying your PR has only 3 file changes (not 600+)
|
|
||||||
|
|
||||||
**Quick reference**:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Create clean branch from upstream
|
|
||||||
git fetch upstream
|
|
||||||
git checkout -b submit/myapp upstream/main
|
|
||||||
|
|
||||||
# Cherry-pick your commit(s) or manually add your 3-4 files
|
|
||||||
# Then push to your fork and create PR
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📚 Further Documentation
|
|
||||||
|
|
||||||
- [CONTRIBUTING.md](CONTRIBUTING.md) - General contribution guidelines
|
|
||||||
- [GUIDE.md](GUIDE.md) - Detailed developer documentation
|
|
||||||
- [HELPER_FUNCTIONS.md](HELPER_FUNCTIONS.md) - Complete tools.func reference
|
|
||||||
- [README.md](README.md) - Cherry-pick guide and workflow instructions
|
|
||||||
- [../TECHNICAL_REFERENCE.md](../TECHNICAL_REFERENCE.md) - Technical deep dive
|
|
||||||
- [../EXIT_CODES.md](../EXIT_CODES.md) - Exit code reference
|
|
||||||
- [templates_ct/](templates_ct/) - CT script templates
|
|
||||||
- [templates_install/](templates_install/) - Install script templates
|
|
||||||
- [templates_json/](templates_json/) - JSON metadata templates
|
|
||||||
@@ -1,41 +1,14 @@
|
|||||||
# 🧪 Code Audit: LXC Script Flow
|
<div align="center">
|
||||||
|
<img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo.png" height="100px" />
|
||||||
|
</div>
|
||||||
|
<h2><div align="center">Exploring the Scripts and Steps Involved in an Application LXC Installation</div></h2>
|
||||||
|
|
||||||
This guide explains the current execution flow and what to verify during reviews.
|
1) [adguard.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/adguard.sh): This script collects system parameters. (Also holds the function to update the application.)
|
||||||
|
2) [build.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/build.func): Adds user settings and integrates collected information.
|
||||||
|
3) [create_lxc.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/create_lxc.sh): Constructs the LXC container.
|
||||||
|
4) [adguard-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/install/adguard-install.sh): Executes functions from [install.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/install.func), and installs the application.
|
||||||
|
5) [adguard.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/adguard.sh) (again): To display the completion message.
|
||||||
|
|
||||||
## Execution Flow (CT + Install)
|
The installation process uses reusable scripts: [build.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/build.func), [create_lxc.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/create_lxc.sh), and [install.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/install.func), which are not specific to any particular application.
|
||||||
|
|
||||||
1. `ct/appname.sh` runs on the Proxmox host and sources `misc/build.func`.
|
To gain a better understanding, focus on reviewing [adguard-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/install/adguard-install.sh). This script contains the commands and configurations for installing and configuring AdGuard Home within the LXC container.
|
||||||
2. `build.func` orchestrates prompts, container creation, and invokes the install script.
|
|
||||||
3. Inside the container, `misc/install.func` exposes helper functions via `$FUNCTIONS_FILE_PATH`.
|
|
||||||
4. `install/appname-install.sh` performs the application install.
|
|
||||||
5. The CT script prints the completion message.
|
|
||||||
|
|
||||||
## Audit Checklist
|
|
||||||
|
|
||||||
### CT Script (ct/)
|
|
||||||
|
|
||||||
- Sources `misc/build.func` from `community-scripts/ProxmoxVE/main` (setup-fork.sh updates for forks).
|
|
||||||
- Uses `check_for_gh_release` + `fetch_and_deploy_gh_release` for updates.
|
|
||||||
- No Docker-based installs.
|
|
||||||
|
|
||||||
### Install Script (install/)
|
|
||||||
|
|
||||||
- Sources `$FUNCTIONS_FILE_PATH`.
|
|
||||||
- Uses `tools.func` helpers (setup\_\*).
|
|
||||||
- Ends with `motd_ssh`, `customize`, `cleanup_lxc`.
|
|
||||||
|
|
||||||
### JSON Metadata
|
|
||||||
|
|
||||||
- File in `frontend/public/json/<appname>.json` matches template schema.
|
|
||||||
|
|
||||||
### Testing
|
|
||||||
|
|
||||||
- Test via curl from your fork (CT script only).
|
|
||||||
- Wait 10-30 seconds after push.
|
|
||||||
|
|
||||||
## References
|
|
||||||
|
|
||||||
- `docs/contribution/templates_ct/AppName.sh`
|
|
||||||
- `docs/contribution/templates_install/AppName-install.sh`
|
|
||||||
- `docs/contribution/templates_json/AppName.json`
|
|
||||||
- `docs/contribution/GUIDE.md`
|
|
||||||
|
|||||||
@@ -81,22 +81,11 @@ git clone https://github.com/yourUserName/ForkName
|
|||||||
git switch -c your-feature-branch
|
git switch -c your-feature-branch
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4. Run setup-fork.sh to auto-configure your fork
|
### 4. Change paths in build.func install.func and AppName.sh
|
||||||
|
|
||||||
```bash
|
To be able to develop from your own branch you need to change `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main` to `https://raw.githubusercontent.com/[USER]/[REPOSITORY]/refs/heads/[BRANCH]`. You need to make this change atleast in misc/build.func misc/install.func and in your ct/AppName.sh. This change is only for testing. Before opening a Pull Request you should change this line change all this back to point to `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main`.
|
||||||
bash docs/contribution/setup-fork.sh --full
|
|
||||||
```
|
|
||||||
|
|
||||||
This script automatically:
|
### 4. Commit changes (without build.func and install.func!)
|
||||||
|
|
||||||
- Detects your GitHub username
|
|
||||||
- Updates ALL curl URLs to point to your fork (for testing)
|
|
||||||
- Creates `.git-setup-info` with your config
|
|
||||||
- Backs up all modified files (\*.backup)
|
|
||||||
|
|
||||||
**IMPORTANT**: This modifies 600+ files! Use cherry-pick when submitting your PR (see below).
|
|
||||||
|
|
||||||
### 5. Commit ONLY your new application files
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git commit -m "Your commit message"
|
git commit -m "Your commit message"
|
||||||
@@ -108,66 +97,9 @@ git commit -m "Your commit message"
|
|||||||
git push origin your-feature-branch
|
git push origin your-feature-branch
|
||||||
```
|
```
|
||||||
|
|
||||||
### 6. Cherry-Pick: Submit Only Your Files for PR
|
### 6. Create a Pull Request
|
||||||
|
|
||||||
⚠️ **IMPORTANT**: setup-fork.sh modified 600+ files. You MUST only submit your 3 new files!
|
Open a Pull Request from your feature branch to the main repository branch. You must only include your **$AppName.sh**, **$AppName-install.sh** and **$AppName.json** files in the pull request.
|
||||||
|
|
||||||
See [README.md - Cherry-Pick Guide](README.md#-cherry-pick-submitting-only-your-changes) for step-by-step instructions.
|
|
||||||
|
|
||||||
Quick version:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Create clean branch from upstream
|
|
||||||
git fetch upstream
|
|
||||||
git checkout -b submit/myapp upstream/main
|
|
||||||
|
|
||||||
# Copy only your files
|
|
||||||
cp ../your-work-branch/ct/myapp.sh ct/myapp.sh
|
|
||||||
cp ../your-work-branch/install/myapp-install.sh install/myapp-install.sh
|
|
||||||
cp ../your-work-branch/frontend/public/json/myapp.json frontend/public/json/myapp.json
|
|
||||||
|
|
||||||
# Commit and verify
|
|
||||||
git add ct/myapp.sh install/myapp-install.sh frontend/public/json/myapp.json
|
|
||||||
git commit -m "feat: add MyApp"
|
|
||||||
git diff upstream/main --name-only # Should show ONLY your 3 files
|
|
||||||
|
|
||||||
# Push and create PR
|
|
||||||
git push origin submit/myapp
|
|
||||||
```
|
|
||||||
|
|
||||||
### 7. Create a Pull Request
|
|
||||||
|
|
||||||
Open a Pull Request from `submit/myapp` → `community-scripts/ProxmoxVE/main`.
|
|
||||||
|
|
||||||
Verify the PR shows ONLY these 3 files:
|
|
||||||
|
|
||||||
- `ct/myapp.sh`
|
|
||||||
- `install/myapp-install.sh`
|
|
||||||
- `frontend/public/json/myapp.json`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# 🛠️ Developer Mode & Debugging
|
|
||||||
|
|
||||||
When building or testing scripts, you can use the `dev_mode` variable to enable powerful debugging features. These flags can be combined (comma-separated).
|
|
||||||
|
|
||||||
**Usage**:
|
|
||||||
```bash
|
|
||||||
# Example: Run with trace and keep the container even if it fails
|
|
||||||
dev_mode="trace,keep" bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/myapp.sh)"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Available Flags:
|
|
||||||
|
|
||||||
| Flag | Description |
|
|
||||||
| :--- | :--- |
|
|
||||||
| `trace` | Enables `set -x` for maximum verbosity during execution. |
|
|
||||||
| `keep` | Prevents the container from being deleted if the build fails. |
|
|
||||||
| `pause` | Pauses execution at key points (e.g., before customization). |
|
|
||||||
| `breakpoint` | Allows hardcoded `breakpoint` calls in scripts to drop to a shell. |
|
|
||||||
| `logs` | Saves detailed build logs to `/var/log/community-scripts/`. |
|
|
||||||
| `dryrun` | Bypasses actual container creation (limited support). |
|
|
||||||
| `motd` | Forces an update of the Message of the Day (MOTD). |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ git clone https://github.com/YOUR_USERNAME/ProxmoxVE.git
|
|||||||
cd ProxmoxVE
|
cd ProxmoxVE
|
||||||
|
|
||||||
# Run setup script (auto-detects your username from git)
|
# Run setup script (auto-detects your username from git)
|
||||||
bash docs/contribution/setup-fork.sh --full
|
bash setup-fork.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
That's it! ✅
|
That's it! ✅
|
||||||
@@ -22,101 +22,64 @@ That's it! ✅
|
|||||||
The `setup-fork.sh` script automatically:
|
The `setup-fork.sh` script automatically:
|
||||||
|
|
||||||
1. **Detects** your GitHub username from git config
|
1. **Detects** your GitHub username from git config
|
||||||
2. **Updates ALL hardcoded links** to point to your fork:
|
2. **Updates** 22 hardcoded links in documentation to point to your fork
|
||||||
- Documentation links pointing to `community-scripts/ProxmoxVE`
|
3. **Creates** `.git-setup-info` with recommended git workflows
|
||||||
- **Curl download URLs** in scripts (e.g., `curl ... github.com/community-scripts/ProxmoxVE/main/...`)
|
4. **Backs up** all modified files (*.backup)
|
||||||
3. **Creates** `.git-setup-info` with your configuration details
|
|
||||||
4. **Backs up** all modified files (\*.backup for safety)
|
|
||||||
|
|
||||||
### Why Updating Curl Links Matters
|
|
||||||
|
|
||||||
Your scripts contain `curl` commands that download dependencies from GitHub (build.func, tools.func, etc.):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# First line of ct/myapp.sh
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
```
|
|
||||||
|
|
||||||
**WITHOUT setup-fork.sh:**
|
|
||||||
|
|
||||||
- Script URLs still point to `community-scripts/ProxmoxVE/main`
|
|
||||||
- If you test locally with `bash ct/myapp.sh`, you're testing local files, but the script's curl commands would download from **upstream** repo
|
|
||||||
- Your modifications aren't actually being tested via the curl commands! ❌
|
|
||||||
|
|
||||||
**AFTER setup-fork.sh:**
|
|
||||||
|
|
||||||
- Script URLs are updated to `YourUsername/ProxmoxVE/main`
|
|
||||||
- When you test via curl from GitHub: `bash -c "$(curl ... YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"`, it downloads from **your fork**
|
|
||||||
- The script's curl commands also point to your fork, so you're actually testing your changes! ✅
|
|
||||||
- ⏱️ **Important:** GitHub takes 10-30 seconds to recognize pushed files - wait before testing!
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Example: What setup-fork.sh changes
|
|
||||||
|
|
||||||
# BEFORE (points to upstream):
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
|
|
||||||
# AFTER (points to your fork):
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/john/ProxmoxVE/main/misc/build.func)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### Auto-Detect (Recommended)
|
### Auto-Detect (Recommended)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash docs/contribution/setup-fork.sh --full
|
bash setup-fork.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Automatically reads your GitHub username from `git remote origin url`
|
Automatically reads your GitHub username from `git remote origin url`
|
||||||
|
|
||||||
### Specify Username
|
### Specify Username
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash docs/contribution/setup-fork.sh --full john
|
bash setup-fork.sh john
|
||||||
```
|
```
|
||||||
|
|
||||||
Updates links to `github.com/john/ProxmoxVE`
|
Updates links to `github.com/john/ProxmoxVE`
|
||||||
|
|
||||||
### Custom Repository Name
|
### Custom Repository Name
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash docs/contribution/setup-fork.sh --full john my-fork
|
bash setup-fork.sh john my-fork
|
||||||
```
|
```
|
||||||
|
|
||||||
Updates links to `github.com/john/my-fork`
|
Updates links to `github.com/john/my-fork`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## What Gets Updated?
|
## What Gets Updated?
|
||||||
|
|
||||||
The script updates hardcoded links in these areas when using `--full`:
|
The script updates these documentation files:
|
||||||
|
- `docs/CONTRIBUTION_GUIDE.md` (4 links)
|
||||||
- `ct/`, `install/`, `vm/` scripts
|
- `docs/README.md` (1 link)
|
||||||
- `misc/` function libraries
|
- `docs/INDEX.md` (3 links)
|
||||||
- `docs/` (including `docs/contribution/`)
|
- `docs/EXIT_CODES.md` (2 links)
|
||||||
- Code examples in documentation
|
- `docs/DEFAULTS_SYSTEM_GUIDE.md` (2 links)
|
||||||
|
- `docs/api/README.md` (1 link)
|
||||||
|
- `docs/APP-ct.md` (1 link)
|
||||||
|
- `docs/APP-install.md` (1 link)
|
||||||
|
- `docs/alpine-install.func.md` (2 links)
|
||||||
|
- `docs/install.func.md` (1 link)
|
||||||
|
- And code examples in documentation
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## After Setup
|
## After Setup
|
||||||
|
|
||||||
1. **Review changes**
|
1. **Review changes**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git diff docs/
|
git diff docs/
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Read git workflow tips**
|
2. **Read git workflow tips**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat .git-setup-info
|
cat .git-setup-info
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Start contributing**
|
3. **Start contributing**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git checkout -b feature/my-app
|
git checkout -b feature/my-app
|
||||||
# Make your changes...
|
# Make your changes...
|
||||||
@@ -125,7 +88,7 @@ The script updates hardcoded links in these areas when using `--full`:
|
|||||||
|
|
||||||
4. **Follow the guide**
|
4. **Follow the guide**
|
||||||
```bash
|
```bash
|
||||||
cat docs/contribution/GUIDE.md
|
cat docs/CONTRIBUTION_GUIDE.md
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -133,7 +96,6 @@ The script updates hardcoded links in these areas when using `--full`:
|
|||||||
## Common Workflows
|
## Common Workflows
|
||||||
|
|
||||||
### Keep Your Fork Updated
|
### Keep Your Fork Updated
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Add upstream if you haven't already
|
# Add upstream if you haven't already
|
||||||
git remote add upstream https://github.com/community-scripts/ProxmoxVE.git
|
git remote add upstream https://github.com/community-scripts/ProxmoxVE.git
|
||||||
@@ -145,7 +107,6 @@ git push origin main
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Create a Feature Branch
|
### Create a Feature Branch
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git checkout -b feature/docker-improvements
|
git checkout -b feature/docker-improvements
|
||||||
# Make changes...
|
# Make changes...
|
||||||
@@ -154,7 +115,6 @@ git push origin feature/docker-improvements
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Sync Before Contributing
|
### Sync Before Contributing
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git fetch upstream
|
git fetch upstream
|
||||||
git rebase upstream/main
|
git rebase upstream/main
|
||||||
@@ -167,16 +127,14 @@ git checkout -b feature/my-feature
|
|||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
### "Git is not installed" or "not a git repository"
|
### "Git is not installed" or "not a git repository"
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Make sure you cloned the repo first
|
# Make sure you cloned the repo first
|
||||||
git clone https://github.com/YOUR_USERNAME/ProxmoxVE.git
|
git clone https://github.com/YOUR_USERNAME/ProxmoxVE.git
|
||||||
cd ProxmoxVE
|
cd ProxmoxVE
|
||||||
bash docs/contribution/setup-fork.sh --full
|
bash setup-fork.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### "Could not auto-detect GitHub username"
|
### "Could not auto-detect GitHub username"
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Your git origin URL isn't set up correctly
|
# Your git origin URL isn't set up correctly
|
||||||
git remote -v
|
git remote -v
|
||||||
@@ -184,32 +142,29 @@ git remote -v
|
|||||||
|
|
||||||
# Fix it:
|
# Fix it:
|
||||||
git remote set-url origin https://github.com/YOUR_USERNAME/ProxmoxVE.git
|
git remote set-url origin https://github.com/YOUR_USERNAME/ProxmoxVE.git
|
||||||
bash docs/contribution/setup-fork.sh --full
|
bash setup-fork.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### "Permission denied"
|
### "Permission denied"
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Make script executable
|
# Make script executable
|
||||||
chmod +x docs/contribution/setup-fork.sh
|
chmod +x setup-fork.sh
|
||||||
bash docs/contribution/setup-fork.sh --full
|
bash setup-fork.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### Reverted Changes by Accident?
|
### Reverted Changes by Accident?
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Backups are created automatically
|
# Backups are created automatically
|
||||||
git checkout docs/*.backup
|
git checkout docs/*.backup
|
||||||
# Or just re-run setup-fork.sh
|
# Or just re-run setup-fork.sh
|
||||||
bash docs/contribution/setup-fork.sh --full
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Next Steps
|
## Next Steps
|
||||||
|
|
||||||
1. ✅ Run `bash docs/contribution/setup-fork.sh --full`
|
1. ✅ Run `bash setup-fork.sh`
|
||||||
2. 📖 Read [docs/contribution/GUIDE.md](GUIDE.md)
|
2. 📖 Read [docs/CONTRIBUTION_GUIDE.md](docs/CONTRIBUTION_GUIDE.md)
|
||||||
3. 🍴 Choose your contribution path:
|
3. 🍴 Choose your contribution path:
|
||||||
- **Containers** → [docs/ct/README.md](docs/ct/README.md)
|
- **Containers** → [docs/ct/README.md](docs/ct/README.md)
|
||||||
- **Installation** → [docs/install/README.md](docs/install/README.md)
|
- **Installation** → [docs/install/README.md](docs/install/README.md)
|
||||||
@@ -222,10 +177,10 @@ bash docs/contribution/setup-fork.sh --full
|
|||||||
## Questions?
|
## Questions?
|
||||||
|
|
||||||
- **Fork Setup Issues?** → See [Troubleshooting](#troubleshooting) above
|
- **Fork Setup Issues?** → See [Troubleshooting](#troubleshooting) above
|
||||||
- **How to Contribute?** → [docs/contribution/GUIDE.md](GUIDE.md)
|
- **How to Contribute?** → [docs/CONTRIBUTION_GUIDE.md](docs/CONTRIBUTION_GUIDE.md)
|
||||||
- **Git Workflows?** → `cat .git-setup-info`
|
- **Git Workflows?** → `cat .git-setup-info`
|
||||||
- **Project Structure?** → [docs/README.md](docs/README.md)
|
- **Project Structure?** → [docs/README.md](docs/README.md)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Happy Contributing! 🚀
|
**Happy Contributing! 🚀**
|
||||||
|
|||||||
@@ -38,8 +38,8 @@ git clone https://github.com/YOUR_USERNAME/ProxmoxVE.git
|
|||||||
cd ProxmoxVE
|
cd ProxmoxVE
|
||||||
|
|
||||||
# 3. Run fork setup script (automatically configures everything)
|
# 3. Run fork setup script (automatically configures everything)
|
||||||
bash docs/contribution/setup-fork.sh --full
|
bash setup-fork.sh
|
||||||
# --full updates ct/, install/, vm/, docs/, misc/ links for fork testing
|
# This auto-detects your username and updates all documentation links
|
||||||
|
|
||||||
# 4. Read the git workflow tips
|
# 4. Read the git workflow tips
|
||||||
cat .git-setup-info
|
cat .git-setup-info
|
||||||
@@ -51,29 +51,28 @@ cat .git-setup-info
|
|||||||
# 1. Create feature branch
|
# 1. Create feature branch
|
||||||
git checkout -b add/my-awesome-app
|
git checkout -b add/my-awesome-app
|
||||||
|
|
||||||
# 2. Create application scripts from templates
|
# 2. Create application scripts
|
||||||
cp docs/contribution/templates_ct/AppName.sh ct/myapp.sh
|
cp ct/example.sh ct/myapp.sh
|
||||||
cp docs/contribution/templates_install/AppName-install.sh install/myapp-install.sh
|
cp install/example-install.sh install/myapp-install.sh
|
||||||
cp docs/contribution/templates_json/AppName.json frontend/public/json/myapp.json
|
|
||||||
|
|
||||||
# 3. Edit your scripts
|
# 3. Edit your scripts
|
||||||
nano ct/myapp.sh
|
nano ct/myapp.sh
|
||||||
nano install/myapp-install.sh
|
nano install/myapp-install.sh
|
||||||
nano frontend/public/json/myapp.json
|
|
||||||
|
|
||||||
# 4. Commit and push to your fork
|
# 4. Test locally
|
||||||
git add ct/myapp.sh install/myapp-install.sh frontend/public/json/myapp.json
|
bash ct/myapp.sh # Will prompt for container creation
|
||||||
git commit -m "feat: add MyApp container and install scripts"
|
|
||||||
|
# 5. Commit and push
|
||||||
|
git add ct/myapp.sh install/myapp-install.sh
|
||||||
|
git commit -m "feat: add MyApp container"
|
||||||
git push origin add/my-awesome-app
|
git push origin add/my-awesome-app
|
||||||
|
|
||||||
# 5. Test via curl from your fork (GitHub may take 10-30 seconds)
|
# 6. Open Pull Request on GitHub
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"
|
# Click: New Pull Request (GitHub will show this automatically)
|
||||||
|
|
||||||
# 6. Use cherry-pick to submit only your files (see Cherry-Pick section)
|
# 7. Keep your fork updated
|
||||||
# DO NOT submit the 600+ files modified by setup-fork.sh!
|
git fetch upstream
|
||||||
|
git rebase upstream/main
|
||||||
# 7. Open Pull Request on GitHub
|
|
||||||
# Create PR from: your-fork/add/my-awesome-app → community-scripts/ProxmoxVE/main
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**💡 Tip**: See `../FORK_SETUP.md` for detailed fork setup and troubleshooting
|
**💡 Tip**: See `../FORK_SETUP.md` for detailed fork setup and troubleshooting
|
||||||
@@ -113,9 +112,9 @@ ProxmoxVE/
|
|||||||
│ └── alpine-tools.func # Alpine tools
|
│ └── alpine-tools.func # Alpine tools
|
||||||
│
|
│
|
||||||
├── docs/ # 📚 Documentation
|
├── docs/ # 📚 Documentation
|
||||||
│ ├── ct/DETAILED_GUIDE.md # Container script guide
|
│ ├── UPDATED_APP-ct.md # Container script guide
|
||||||
│ ├── install/DETAILED_GUIDE.md # Install script guide
|
│ ├── UPDATED_APP-install.md # Install script guide
|
||||||
│ └── contribution/README.md # Contribution overview
|
│ └── CONTRIBUTING.md # (This file!)
|
||||||
│
|
│
|
||||||
├── tools/ # 🔧 Proxmox management tools
|
├── tools/ # 🔧 Proxmox management tools
|
||||||
│ └── pve/
|
│ └── pve/
|
||||||
@@ -138,7 +137,6 @@ Examples:
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Rules**:
|
**Rules**:
|
||||||
|
|
||||||
- Container script name: **Title Case** (PiHole, Docker, NextCloud)
|
- Container script name: **Title Case** (PiHole, Docker, NextCloud)
|
||||||
- Install script name: **lowercase** with **hyphens** (pihole-install, docker-install)
|
- Install script name: **lowercase** with **hyphens** (pihole-install, docker-install)
|
||||||
- Must match: `ct/AppName.sh` ↔ `install/appname-install.sh`
|
- Must match: `ct/AppName.sh` ↔ `install/appname-install.sh`
|
||||||
@@ -158,7 +156,6 @@ Examples:
|
|||||||
- Ubuntu 20.04 / Debian 11+ on host
|
- Ubuntu 20.04 / Debian 11+ on host
|
||||||
|
|
||||||
2. **Git** installed
|
2. **Git** installed
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
apt-get install -y git
|
apt-get install -y git
|
||||||
```
|
```
|
||||||
@@ -201,33 +198,32 @@ git rebase upstream/main
|
|||||||
git push origin feat/add-myapp
|
git push origin feat/add-myapp
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Option B: Testing on a Proxmox Host (still via curl)
|
#### Option B: Local Testing on Proxmox Host
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. SSH into Proxmox host
|
# 1. SSH into Proxmox host
|
||||||
ssh root@192.168.1.100
|
ssh root@192.168.1.100
|
||||||
|
|
||||||
# 2. Test via curl from your fork (CT script only)
|
# 2. Download your script
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"
|
curl -O https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/feat/myapp/ct/myapp.sh
|
||||||
# ⏱️ Wait 10-30 seconds after pushing - GitHub takes time to update
|
|
||||||
|
# 3. Make it executable
|
||||||
|
chmod +x myapp.sh
|
||||||
|
|
||||||
|
# 4. Update URLs to your fork
|
||||||
|
# Edit: curl -s https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/feat/myapp/...
|
||||||
|
|
||||||
|
# 5. Run and test
|
||||||
|
bash myapp.sh
|
||||||
|
|
||||||
|
# 6. If container created successfully, script is working!
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Note:** Do not edit URLs manually or run install scripts directly. The CT script calls the install script inside the container.
|
#### Option C: Docker Testing (Without Proxmox)
|
||||||
|
|
||||||
#### Option C: Using Curl (Recommended for Real Testing)
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Always test via curl from your fork (GitHub takes 10-30 seconds after push)
|
# You can test script syntax/functionality locally
|
||||||
git push origin feature/myapp
|
# Note: Won't fully test (no Proxmox, no actual container)
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"
|
|
||||||
# This tests the actual GitHub URLs, not local files
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Option D: Static Checks (Without Proxmox)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# You can validate syntax and linting locally (limited)
|
|
||||||
# Note: This does NOT replace real Proxmox testing
|
|
||||||
|
|
||||||
# Run ShellCheck
|
# Run ShellCheck
|
||||||
shellcheck ct/myapp.sh
|
shellcheck ct/myapp.sh
|
||||||
@@ -245,18 +241,18 @@ bash -n install/myapp-install.sh
|
|||||||
### Step 1: Choose Your Template
|
### Step 1: Choose Your Template
|
||||||
|
|
||||||
**For Simple Web Apps** (Node.js, Python, PHP):
|
**For Simple Web Apps** (Node.js, Python, PHP):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp ct/example.sh ct/myapp.sh
|
cp ct/example.sh ct/myapp.sh
|
||||||
cp install/example-install.sh install/myapp-install.sh
|
cp install/example-install.sh install/myapp-install.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
**For Database Apps** (PostgreSQL, MariaDB, MongoDB):
|
**For Database Apps** (PostgreSQL, MongoDB):
|
||||||
|
```bash
|
||||||
Use the standard templates and the database helpers from `tools.func` (no Docker).
|
cp ct/docker.sh ct/myapp.sh # Use Docker container
|
||||||
|
# OR manual setup for more control
|
||||||
|
```
|
||||||
|
|
||||||
**For Alpine Linux Apps** (lightweight):
|
**For Alpine Linux Apps** (lightweight):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Use ct/alpine.sh as reference
|
# Use ct/alpine.sh as reference
|
||||||
# Edit install script to use Alpine packages (apk not apt)
|
# Edit install script to use Alpine packages (apk not apt)
|
||||||
@@ -268,7 +264,7 @@ Use the standard templates and the database helpers from `tools.func` (no Docker
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/feat/myapp/misc/build.func)
|
||||||
|
|
||||||
# Update these:
|
# Update these:
|
||||||
APP="MyAwesomeApp" # Display name
|
APP="MyAwesomeApp" # Display name
|
||||||
@@ -295,19 +291,17 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "myapp" "owner/repo"; then
|
# Get latest version
|
||||||
msg_info "Stopping Service"
|
RELEASE=$(curl -fsSL https://api.github.com/repos/user/repo/releases/latest | \
|
||||||
systemctl stop myapp
|
grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "myapp" "owner/repo" "tarball" "latest" "/opt/myapp"
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
# ... update logic (migrations, rebuilds, etc.) ...
|
# ... update logic ...
|
||||||
|
echo "${RELEASE}" > /opt/${APP}_version.txt
|
||||||
msg_info "Starting Service"
|
msg_ok "Updated ${APP}"
|
||||||
systemctl start myapp
|
else
|
||||||
msg_ok "Started Service"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
@@ -323,7 +317,6 @@ echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:PORT${CL}"
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Checklist**:
|
**Checklist**:
|
||||||
|
|
||||||
- [ ] APP variable matches filename
|
- [ ] APP variable matches filename
|
||||||
- [ ] var_tags semicolon-separated (no spaces)
|
- [ ] var_tags semicolon-separated (no spaces)
|
||||||
- [ ] Realistic CPU/RAM/disk values
|
- [ ] Realistic CPU/RAM/disk values
|
||||||
@@ -352,12 +345,24 @@ update_os
|
|||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
|
curl \
|
||||||
|
wget \
|
||||||
|
git \
|
||||||
build-essential
|
build-essential
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting up Node.js"
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
msg_ok "Node.js installed"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "myapp" "owner/repo" "tarball" "latest" "/opt/myapp"
|
msg_info "Downloading Application"
|
||||||
|
cd /opt
|
||||||
|
wget -q "https://github.com/user/repo/releases/download/v1.0.0/myapp.tar.gz"
|
||||||
|
tar -xzf myapp.tar.gz
|
||||||
|
rm -f myapp.tar.gz
|
||||||
|
msg_ok "Application installed"
|
||||||
|
|
||||||
|
echo "1.0.0" > /opt/${APP}_version.txt
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
@@ -365,7 +370,6 @@ cleanup_lxc
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Checklist**:
|
**Checklist**:
|
||||||
|
|
||||||
- [ ] Functions loaded from `$FUNCTIONS_FILE_PATH`
|
- [ ] Functions loaded from `$FUNCTIONS_FILE_PATH`
|
||||||
- [ ] All installation phases present (deps, tools, app, config, cleanup)
|
- [ ] All installation phases present (deps, tools, app, config, cleanup)
|
||||||
- [ ] Using `$STD` for output suppression
|
- [ ] Using `$STD` for output suppression
|
||||||
@@ -433,44 +437,26 @@ $STD apt-get install -y newdependency
|
|||||||
# 4. Test thoroughly before committing
|
# 4. Test thoroughly before committing
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step 3: The Standard Update Pattern
|
### Step 3: Update Update Function (if applicable)
|
||||||
|
|
||||||
The `update_script()` function in `ct/appname.sh` should follow a robust pattern:
|
|
||||||
|
|
||||||
1. **Check for updates**: Use `check_for_gh_release` to skip logic if no new version exists.
|
|
||||||
2. **Stop services**: Stop all relevant services (`systemctl stop appname`).
|
|
||||||
3. **Backup existing installation**: Move the old folder (e.g., `mv /opt/app /opt/app_bak`).
|
|
||||||
4. **Deploy new version**: Use `CLEAN_INSTALL=1 fetch_and_deploy_gh_release`.
|
|
||||||
5. **Restore configuration**: Copy `.env` or config files back from the backup.
|
|
||||||
6. **Rebuild/Migrate**: Run `npm install`, `composer install`, or DB migrations.
|
|
||||||
7. **Start services**: Restart services and cleanup the backup.
|
|
||||||
|
|
||||||
**Example from `ct/bookstack.sh`**:
|
|
||||||
```bash
|
```bash
|
||||||
function update_script() {
|
# Edit: ct/existingapp.sh → update_script()
|
||||||
if check_for_gh_release "bookstack" "BookStackApp/BookStack"; then
|
|
||||||
msg_info "Stopping Services"
|
|
||||||
systemctl stop apache2
|
|
||||||
|
|
||||||
msg_info "Backing up data"
|
# 1. Update GitHub API URL if repo changed
|
||||||
mv /opt/bookstack /opt/bookstack-backup
|
RELEASE=$(curl -fsSL https://api.github.com/repos/user/repo/releases/latest | ...)
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack" "tarball"
|
# 2. Update backup/restore logic (if structure changed)
|
||||||
|
# 3. Update cleanup paths
|
||||||
|
|
||||||
msg_info "Restoring backup"
|
# 4. Test update on existing installation
|
||||||
cp /opt/bookstack-backup/.env /opt/bookstack/.env
|
```
|
||||||
# ... restore uploads ...
|
|
||||||
|
|
||||||
msg_info "Configuring"
|
### Step 4: Document Your Changes
|
||||||
cd /opt/bookstack
|
|
||||||
$STD composer install --no-dev
|
|
||||||
$STD php artisan migrate --force
|
|
||||||
|
|
||||||
systemctl start apache2
|
```bash
|
||||||
rm -rf /opt/bookstack-backup
|
# Add comment at top of script
|
||||||
msg_ok "Updated successfully!"
|
# Co-Author: YourUsername
|
||||||
fi
|
# Updated: YYYY-MM-DD - Description of changes
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -670,19 +656,27 @@ shellcheck install/myapp-install.sh
|
|||||||
# 1. SSH into Proxmox host
|
# 1. SSH into Proxmox host
|
||||||
ssh root@YOUR_PROXMOX_IP
|
ssh root@YOUR_PROXMOX_IP
|
||||||
|
|
||||||
# 2. Test via curl from your fork (CT script only)
|
# 2. Download your script
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"
|
curl -O https://raw.githubusercontent.com/YOUR_USER/ProxmoxVE/feat/myapp/ct/myapp.sh
|
||||||
# ⏱️ Wait 10-30 seconds after pushing - GitHub takes time to update
|
|
||||||
|
|
||||||
# 3. Test interaction:
|
# 3. Make executable
|
||||||
|
chmod +x myapp.sh
|
||||||
|
|
||||||
|
# 4. UPDATE URLS IN SCRIPT to point to your fork
|
||||||
|
sed -i 's|community-scripts|YOUR_USER|g' myapp.sh
|
||||||
|
|
||||||
|
# 5. Run script
|
||||||
|
bash myapp.sh
|
||||||
|
|
||||||
|
# 6. Test interaction:
|
||||||
# - Select installation mode
|
# - Select installation mode
|
||||||
# - Confirm settings
|
# - Confirm settings
|
||||||
# - Monitor installation
|
# - Monitor installation
|
||||||
|
|
||||||
# 4. Verify container created
|
# 7. Verify container created
|
||||||
pct list | grep myapp
|
pct list | grep myapp
|
||||||
|
|
||||||
# 5. Log into container and verify app
|
# 8. Log into container and verify app
|
||||||
pct exec 100 bash
|
pct exec 100 bash
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -703,9 +697,9 @@ pct exec 100 bash
|
|||||||
# Verify script handles gracefully
|
# Verify script handles gracefully
|
||||||
|
|
||||||
# Test 4: Update function
|
# Test 4: Update function
|
||||||
# Create initial container (via curl from fork)
|
# Create initial container
|
||||||
# Wait for new release
|
# Wait for new release
|
||||||
# Test update: bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"
|
# Run update: bash ct/myapp.sh
|
||||||
# Verify it detects and applies update
|
# Verify it detects and applies update
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -780,19 +774,16 @@ Use this template:
|
|||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
Brief description of what this PR adds/fixes
|
Brief description of what this PR adds/fixes
|
||||||
|
|
||||||
## Type of Change
|
## Type of Change
|
||||||
|
|
||||||
- [ ] New application (ct/AppName.sh + install/appname-install.sh)
|
- [ ] New application (ct/AppName.sh + install/appname-install.sh)
|
||||||
- [ ] Update existing application
|
- [ ] Update existing application
|
||||||
- [ ] Bug fix
|
- [ ] Bug fix
|
||||||
- [ ] Documentation update
|
- [ ] Documentation update
|
||||||
- [ ] Other: **\_\_\_**
|
- [ ] Other: _______
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
- [ ] Tested on Proxmox VE 8.x
|
- [ ] Tested on Proxmox VE 8.x
|
||||||
- [ ] Container creation successful
|
- [ ] Container creation successful
|
||||||
- [ ] Application installation successful
|
- [ ] Application installation successful
|
||||||
@@ -801,7 +792,6 @@ Brief description of what this PR adds/fixes
|
|||||||
- [ ] No temporary files left after installation
|
- [ ] No temporary files left after installation
|
||||||
|
|
||||||
## Application Details (for new apps only)
|
## Application Details (for new apps only)
|
||||||
|
|
||||||
- **App Name**: MyApp
|
- **App Name**: MyApp
|
||||||
- **Source**: https://github.com/app/repo
|
- **Source**: https://github.com/app/repo
|
||||||
- **Default OS**: Debian 12
|
- **Default OS**: Debian 12
|
||||||
@@ -810,11 +800,9 @@ Brief description of what this PR adds/fixes
|
|||||||
- **Access URL**: http://IP:PORT/path
|
- **Access URL**: http://IP:PORT/path
|
||||||
|
|
||||||
## Checklist
|
## Checklist
|
||||||
|
|
||||||
- [ ] My code follows the style guidelines
|
- [ ] My code follows the style guidelines
|
||||||
- [ ] I have performed a self-review
|
- [ ] I have performed a self-review
|
||||||
- [ ] I have tested the script via curl from my fork (after git push)
|
- [ ] I have tested the script locally
|
||||||
- [ ] GitHub had time to update (waited 10-30 seconds)
|
|
||||||
- [ ] ShellCheck shows no critical warnings
|
- [ ] ShellCheck shows no critical warnings
|
||||||
- [ ] Documentation is accurate and complete
|
- [ ] Documentation is accurate and complete
|
||||||
- [ ] I have added/updated relevant documentation
|
- [ ] I have added/updated relevant documentation
|
||||||
@@ -823,7 +811,6 @@ Brief description of what this PR adds/fixes
|
|||||||
### Step 5: Respond to Review Comments
|
### Step 5: Respond to Review Comments
|
||||||
|
|
||||||
**Maintainers may request changes**:
|
**Maintainers may request changes**:
|
||||||
|
|
||||||
- Fix syntax/style issues
|
- Fix syntax/style issues
|
||||||
- Add better error handling
|
- Add better error handling
|
||||||
- Optimize resource usage
|
- Optimize resource usage
|
||||||
@@ -935,7 +922,6 @@ pct exec CTID netstat -tlnp | grep LISTEN
|
|||||||
### Q: Can I test without a Proxmox system?
|
### Q: Can I test without a Proxmox system?
|
||||||
|
|
||||||
**A**: Partially. You can verify syntax and ShellCheck compliance locally, but real container testing requires Proxmox. Consider using:
|
**A**: Partially. You can verify syntax and ShellCheck compliance locally, but real container testing requires Proxmox. Consider using:
|
||||||
|
|
||||||
- Proxmox in a VM (VirtualBox/KVM)
|
- Proxmox in a VM (VirtualBox/KVM)
|
||||||
- Test instances on Hetzner/DigitalOcean
|
- Test instances on Hetzner/DigitalOcean
|
||||||
- Ask maintainers to test for you
|
- Ask maintainers to test for you
|
||||||
@@ -943,7 +929,6 @@ pct exec CTID netstat -tlnp | grep LISTEN
|
|||||||
### Q: My update function is very complex - is that OK?
|
### Q: My update function is very complex - is that OK?
|
||||||
|
|
||||||
**A**: Yes! Update functions can be complex if needed. Just ensure:
|
**A**: Yes! Update functions can be complex if needed. Just ensure:
|
||||||
|
|
||||||
- Backup user data before updating
|
- Backup user data before updating
|
||||||
- Restore user data after update
|
- Restore user data after update
|
||||||
- Test thoroughly before submitting
|
- Test thoroughly before submitting
|
||||||
@@ -952,7 +937,6 @@ pct exec CTID netstat -tlnp | grep LISTEN
|
|||||||
### Q: Can I add new dependencies to build.func?
|
### Q: Can I add new dependencies to build.func?
|
||||||
|
|
||||||
**A**: Generally no. build.func is the orchestrator and should remain stable. New functions should go in:
|
**A**: Generally no. build.func is the orchestrator and should remain stable. New functions should go in:
|
||||||
|
|
||||||
- `tools.func` - Tool installation
|
- `tools.func` - Tool installation
|
||||||
- `core.func` - Utility functions
|
- `core.func` - Utility functions
|
||||||
- `install.func` - Container setup
|
- `install.func` - Container setup
|
||||||
@@ -964,13 +948,11 @@ Ask in an issue first if you're unsure.
|
|||||||
**A**: You have options:
|
**A**: You have options:
|
||||||
|
|
||||||
**Option 1**: Use Advanced mode (19-step wizard)
|
**Option 1**: Use Advanced mode (19-step wizard)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Extend advanced_settings() if app needs special vars
|
# Extend advanced_settings() if app needs special vars
|
||||||
```
|
```
|
||||||
|
|
||||||
**Option 2**: Create custom setup menu
|
**Option 2**: Create custom setup menu
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
function custom_config() {
|
function custom_config() {
|
||||||
OPTION=$(whiptail --inputbox "Enter database name:" 8 60)
|
OPTION=$(whiptail --inputbox "Enter database name:" 8 60)
|
||||||
@@ -979,7 +961,6 @@ function custom_config() {
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Option 3**: Leave as defaults + documentation
|
**Option 3**: Leave as defaults + documentation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# In success message:
|
# In success message:
|
||||||
echo "Edit /opt/myapp/config.json to customize settings"
|
echo "Edit /opt/myapp/config.json to customize settings"
|
||||||
@@ -988,10 +969,9 @@ echo "Edit /opt/myapp/config.json to customize settings"
|
|||||||
### Q: Can I contribute Windows/macOS/ARM support?
|
### Q: Can I contribute Windows/macOS/ARM support?
|
||||||
|
|
||||||
**A**:
|
**A**:
|
||||||
|
|
||||||
- **Windows**: Not planned (ProxmoxVE is Linux/Proxmox focused)
|
- **Windows**: Not planned (ProxmoxVE is Linux/Proxmox focused)
|
||||||
- **macOS**: Can contribute Docker-based alternatives
|
- **macOS**: Can contribute Docker-based alternatives
|
||||||
- **ARM**: Yes! Many apps work on ARM. Add to vm/pimox-\*.sh scripts
|
- **ARM**: Yes! Many apps work on ARM. Add to vm/pimox-*.sh scripts
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -1015,7 +995,6 @@ echo "Edit /opt/myapp/config.json to customize settings"
|
|||||||
### Report Bugs
|
### Report Bugs
|
||||||
|
|
||||||
When reporting bugs, include:
|
When reporting bugs, include:
|
||||||
|
|
||||||
- Which application
|
- Which application
|
||||||
- What happened (error message)
|
- What happened (error message)
|
||||||
- What you expected
|
- What you expected
|
||||||
@@ -1023,7 +1002,6 @@ When reporting bugs, include:
|
|||||||
- Container OS and version
|
- Container OS and version
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```
|
||||||
Title: pihole-install.sh fails on Alpine 3.20
|
Title: pihole-install.sh fails on Alpine 3.20
|
||||||
|
|
||||||
@@ -1047,7 +1025,6 @@ Error Output:
|
|||||||
## Contribution Statistics
|
## Contribution Statistics
|
||||||
|
|
||||||
**ProxmoxVE by the Numbers**:
|
**ProxmoxVE by the Numbers**:
|
||||||
|
|
||||||
- 🎯 40+ applications supported
|
- 🎯 40+ applications supported
|
||||||
- 👥 100+ contributors
|
- 👥 100+ contributors
|
||||||
- 📊 10,000+ GitHub stars
|
- 📊 10,000+ GitHub stars
|
||||||
@@ -1061,7 +1038,6 @@ Error Output:
|
|||||||
## Code of Conduct
|
## Code of Conduct
|
||||||
|
|
||||||
By contributing, you agree to:
|
By contributing, you agree to:
|
||||||
|
|
||||||
- ✅ Be respectful and inclusive
|
- ✅ Be respectful and inclusive
|
||||||
- ✅ Follow the style guidelines
|
- ✅ Follow the style guidelines
|
||||||
- ✅ Test your changes thoroughly
|
- ✅ Test your changes thoroughly
|
||||||
|
|||||||
@@ -30,79 +30,61 @@
|
|||||||
|
|
||||||
> ⚠️ **Both files are ALWAYS required!** The CT script calls the install script automatically during container creation.
|
> ⚠️ **Both files are ALWAYS required!** The CT script calls the install script automatically during container creation.
|
||||||
|
|
||||||
Install scripts are **not** run directly by users; they are invoked by the CT script inside the container.
|
|
||||||
|
|
||||||
### Node.js + PostgreSQL
|
### Node.js + PostgreSQL
|
||||||
|
|
||||||
**Koel** - Music streaming with PHP + Node.js + PostgreSQL
|
**Koel** - Music streaming with PHP + Node.js + PostgreSQL
|
||||||
| File | Link |
|
| File | Link |
|
||||||
| ----------------- | -------------------------------------------------------- |
|
| ----------------- | -------------------------------------------------------- |
|
||||||
| CT (update logic) | [ct/koel.sh](../../ct/koel.sh) |
|
| CT (update logic) | [ct/koel.sh](../../ct/koel.sh) |
|
||||||
| Install | [install/koel-install.sh](../../install/koel-install.sh) |
|
| Install | [install/koel-install.sh](../../install/koel-install.sh) |
|
||||||
|
|
||||||
**Actual Budget** - Finance app with npm global install
|
**Actual Budget** - Finance app with npm global install
|
||||||
| File | Link |
|
| File | Link |
|
||||||
| ----------------- | ------------------------------------------------------------------------ |
|
| ----------------- | ------------------------------------------------------------------------ |
|
||||||
| CT (update logic) | [ct/actualbudget.sh](../../ct/actualbudget.sh) |
|
| CT (update logic) | [ct/actualbudget.sh](../../ct/actualbudget.sh) |
|
||||||
| Install | [install/actualbudget-install.sh](../../install/actualbudget-install.sh) |
|
| Install | [install/actualbudget-install.sh](../../install/actualbudget-install.sh) |
|
||||||
|
|
||||||
### Python + uv
|
### Python + uv
|
||||||
|
|
||||||
**MeTube** - YouTube downloader with Python uv + Node.js + Deno
|
**MeTube** - YouTube downloader with Python uv + Node.js + Deno
|
||||||
| File | Link |
|
| File | Link |
|
||||||
| ----------------- | ------------------------------------------------------------ |
|
| ----------------- | ------------------------------------------------------------ |
|
||||||
| CT (update logic) | [ct/metube.sh](../../ct/metube.sh) |
|
| CT (update logic) | [ct/metube.sh](../../ct/metube.sh) |
|
||||||
| Install | [install/metube-install.sh](../../install/metube-install.sh) |
|
| Install | [install/metube-install.sh](../../install/metube-install.sh) |
|
||||||
|
|
||||||
**Endurain** - Fitness tracker with Python uv + PostgreSQL/PostGIS
|
**Endurain** - Fitness tracker with Python uv + PostgreSQL/PostGIS
|
||||||
| File | Link |
|
| File | Link |
|
||||||
| ----------------- | ---------------------------------------------------------------- |
|
| ----------------- | ---------------------------------------------------------------- |
|
||||||
| CT (update logic) | [ct/endurain.sh](../../ct/endurain.sh) |
|
| CT (update logic) | [ct/endurain.sh](../../ct/endurain.sh) |
|
||||||
| Install | [install/endurain-install.sh](../../install/endurain-install.sh) |
|
| Install | [install/endurain-install.sh](../../install/endurain-install.sh) |
|
||||||
|
|
||||||
### Java + Gradle
|
|
||||||
|
|
||||||
**BookLore** - Book management with Java 21 + Gradle + MariaDB + Nginx
|
|
||||||
| File | Link |
|
|
||||||
| ----------------- | -------------------------------------------------------------- |
|
|
||||||
| CT (update logic) | [ct/booklore.sh](../../ct/booklore.sh) |
|
|
||||||
| Install | [install/booklore-install.sh](../../install/booklore-install.sh) |
|
|
||||||
|
|
||||||
### Pnpm + Meilisearch
|
|
||||||
|
|
||||||
**KaraKeep** - Bookmark manager with Pnpm + Meilisearch + Puppeteer
|
|
||||||
| File | Link |
|
|
||||||
| ----------------- | -------------------------------------------------------------- |
|
|
||||||
| CT (update logic) | [ct/karakeep.sh](../../ct/karakeep.sh) |
|
|
||||||
| Install | [install/karakeep-install.sh](../../install/karakeep-install.sh) |
|
|
||||||
|
|
||||||
### PHP + MariaDB/MySQL
|
### PHP + MariaDB/MySQL
|
||||||
|
|
||||||
**Wallabag** - Read-it-later with PHP + MariaDB + Redis + Nginx
|
**Wallabag** - Read-it-later with PHP + MariaDB + Redis + Nginx
|
||||||
| File | Link |
|
| File | Link |
|
||||||
| ----------------- | ---------------------------------------------------------------- |
|
| ----------------- | ---------------------------------------------------------------- |
|
||||||
| CT (update logic) | [ct/wallabag.sh](../../ct/wallabag.sh) |
|
| CT (update logic) | [ct/wallabag.sh](../../ct/wallabag.sh) |
|
||||||
| Install | [install/wallabag-install.sh](../../install/wallabag-install.sh) |
|
| Install | [install/wallabag-install.sh](../../install/wallabag-install.sh) |
|
||||||
|
|
||||||
**InvoiceNinja** - Invoicing with PHP + MariaDB + Supervisor
|
**InvoiceNinja** - Invoicing with PHP + MariaDB + Supervisor
|
||||||
| File | Link |
|
| File | Link |
|
||||||
| ----------------- | ------------------------------------------------------------------------ |
|
| ----------------- | ------------------------------------------------------------------------ |
|
||||||
| CT (update logic) | [ct/invoiceninja.sh](../../ct/invoiceninja.sh) |
|
| CT (update logic) | [ct/invoiceninja.sh](../../ct/invoiceninja.sh) |
|
||||||
| Install | [install/invoiceninja-install.sh](../../install/invoiceninja-install.sh) |
|
| Install | [install/invoiceninja-install.sh](../../install/invoiceninja-install.sh) |
|
||||||
|
|
||||||
**BookStack** - Wiki/Docs with PHP + MariaDB + Apache
|
**BookStack** - Wiki/Docs with PHP + MariaDB + Apache
|
||||||
| File | Link |
|
| File | Link |
|
||||||
| ----------------- | ------------------------------------------------------------------ |
|
| ----------------- | ------------------------------------------------------------------ |
|
||||||
| CT (update logic) | [ct/bookstack.sh](../../ct/bookstack.sh) |
|
| CT (update logic) | [ct/bookstack.sh](../../ct/bookstack.sh) |
|
||||||
| Install | [install/bookstack-install.sh](../../install/bookstack-install.sh) |
|
| Install | [install/bookstack-install.sh](../../install/bookstack-install.sh) |
|
||||||
|
|
||||||
### PHP + SQLite (Simple)
|
### PHP + SQLite (Simple)
|
||||||
|
|
||||||
**Speedtest Tracker** - Speedtest with PHP + SQLite + Nginx
|
**Speedtest Tracker** - Speedtest with PHP + SQLite + Nginx
|
||||||
| File | Link |
|
| File | Link |
|
||||||
| ----------------- | ---------------------------------------------------------------------------------- |
|
| ----------------- | ---------------------------------------------------------------------------------- |
|
||||||
| CT (update logic) | [ct/speedtest-tracker.sh](../../ct/speedtest-tracker.sh) |
|
| CT (update logic) | [ct/speedtest-tracker.sh](../../ct/speedtest-tracker.sh) |
|
||||||
| Install | [install/speedtest-tracker-install.sh](../../install/speedtest-tracker-install.sh) |
|
| Install | [install/speedtest-tracker-install.sh](../../install/speedtest-tracker-install.sh) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -113,7 +95,7 @@ Install scripts are **not** run directly by users; they are invoked by the CT sc
|
|||||||
Install Node.js from NodeSource repository.
|
Install Node.js from NodeSource repository.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Default (Node.js 24)
|
# Default (Node.js 22)
|
||||||
setup_nodejs
|
setup_nodejs
|
||||||
|
|
||||||
# Specific version
|
# Specific version
|
||||||
@@ -153,12 +135,8 @@ $STD cargo build --release
|
|||||||
Install Python uv package manager (fast pip/venv replacement).
|
Install Python uv package manager (fast pip/venv replacement).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Default
|
|
||||||
setup_uv
|
setup_uv
|
||||||
|
|
||||||
# Install a specific Python version
|
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
|
||||||
|
|
||||||
# Use in script
|
# Use in script
|
||||||
setup_uv
|
setup_uv
|
||||||
cd /opt/myapp
|
cd /opt/myapp
|
||||||
@@ -182,7 +160,7 @@ Install PHP with configurable modules and FPM/Apache support.
|
|||||||
setup_php
|
setup_php
|
||||||
|
|
||||||
# Full configuration
|
# Full configuration
|
||||||
PHP_VERSION="8.4" \
|
PHP_VERSION="8.3" \
|
||||||
PHP_MODULE="mysqli,gd,curl,mbstring,xml,zip,ldap" \
|
PHP_MODULE="mysqli,gd,curl,mbstring,xml,zip,ldap" \
|
||||||
PHP_FPM="YES" \
|
PHP_FPM="YES" \
|
||||||
PHP_APACHE="YES" \
|
PHP_APACHE="YES" \
|
||||||
@@ -190,12 +168,12 @@ setup_php
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Environment Variables:**
|
**Environment Variables:**
|
||||||
| Variable | Default | Description |
|
| Variable | Default | Description |
|
||||||
| ------------- | ------- | ------------------------------- |
|
| ------------- | ------- | ------------------------------- |
|
||||||
| `PHP_VERSION` | `8.4` | PHP version to install |
|
| `PHP_VERSION` | `8.3` | PHP version to install |
|
||||||
| `PHP_MODULE` | `""` | Comma-separated list of modules |
|
| `PHP_MODULE` | `""` | Comma-separated list of modules |
|
||||||
| `PHP_FPM` | `NO` | Install PHP-FPM |
|
| `PHP_FPM` | `NO` | Install PHP-FPM |
|
||||||
| `PHP_APACHE` | `NO` | Install Apache module |
|
| `PHP_APACHE` | `NO` | Install Apache module |
|
||||||
|
|
||||||
### `setup_composer`
|
### `setup_composer`
|
||||||
|
|
||||||
@@ -261,12 +239,12 @@ setup_mysql
|
|||||||
Install PostgreSQL server.
|
Install PostgreSQL server.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Default (PostgreSQL 16)
|
# Default (PostgreSQL 17)
|
||||||
setup_postgresql
|
setup_postgresql
|
||||||
|
|
||||||
# Specific version
|
# Specific version
|
||||||
PG_VERSION="16" setup_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
PG_VERSION="16" setup_postgresql
|
PG_VERSION="17" setup_postgresql
|
||||||
```
|
```
|
||||||
|
|
||||||
### `setup_postgresql_db`
|
### `setup_postgresql_db`
|
||||||
@@ -301,43 +279,6 @@ setup_clickhouse
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Advanced Repository Management
|
|
||||||
|
|
||||||
### `setup_deb822_repo`
|
|
||||||
|
|
||||||
The modern standard (Debian 12+) for adding external repositories. Automatically handles GPG keys and sources.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
setup_deb822_repo \
|
|
||||||
"nodejs" \
|
|
||||||
"https://deb.nodesource.com/gpgkey/nodesource.gpg.key" \
|
|
||||||
"https://deb.nodesource.com/node_22.x" \
|
|
||||||
"bookworm" \
|
|
||||||
"main"
|
|
||||||
```
|
|
||||||
|
|
||||||
### `prepare_repository_setup`
|
|
||||||
|
|
||||||
A high-level helper that performs three critical tasks before adding a new repo:
|
|
||||||
1. Cleans up old repo files matching the names provided.
|
|
||||||
2. Removes old GPG keyrings from all standard locations.
|
|
||||||
3. Ensures APT is in a working state (fixes locks, runs update).
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Clean up old mysql/mariadb artifacts before setup
|
|
||||||
prepare_repository_setup "mariadb" "mysql"
|
|
||||||
```
|
|
||||||
|
|
||||||
### `cleanup_tool_keyrings`
|
|
||||||
|
|
||||||
Force-removes GPG keys for specific tools from `/usr/share/keyrings/`, `/etc/apt/keyrings/`, and `/etc/apt/trusted.gpg.d/`.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cleanup_tool_keyrings "docker" "kubernetes"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## GitHub Release Helpers
|
## GitHub Release Helpers
|
||||||
|
|
||||||
> **Note**: `fetch_and_deploy_gh_release` is the **preferred method** for downloading GitHub releases. It handles version tracking automatically. Only use `get_latest_github_release` if you need the version number separately.
|
> **Note**: `fetch_and_deploy_gh_release` is the **preferred method** for downloading GitHub releases. It handles version tracking automatically. Only use `get_latest_github_release` if you need the version number separately.
|
||||||
@@ -361,17 +302,17 @@ CLEAN_INSTALL=1 fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "la
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
| Parameter | Default | Description |
|
| Parameter | Default | Description |
|
||||||
| --------------- | ------------- | ----------------------------------------------------------------- |
|
| --------------- | ------------- | ----------------------------------------------------------------- |
|
||||||
| `name` | required | App name (for version tracking) |
|
| `name` | required | App name (for version tracking) |
|
||||||
| `repo` | required | GitHub repo (`owner/repo`) |
|
| `repo` | required | GitHub repo (`owner/repo`) |
|
||||||
| `type` | `tarball` | Release type: `tarball`, `zipball`, `prebuild`, `binary` |
|
| `type` | `tarball` | Release type: `tarball`, `zipball`, `prebuild`, `binary` |
|
||||||
| `version` | `latest` | Version tag or `latest` |
|
| `version` | `latest` | Version tag or `latest` |
|
||||||
| `dest` | `/opt/[name]` | Destination directory |
|
| `dest` | `/opt/[name]` | Destination directory |
|
||||||
| `asset_pattern` | `""` | For `prebuild`: glob pattern to match asset (e.g. `app-*.tar.gz`) |
|
| `asset_pattern` | `""` | For `prebuild`: glob pattern to match asset (e.g. `app-*.tar.gz`) |
|
||||||
|
|
||||||
**Environment Variables:**
|
**Environment Variables:**
|
||||||
| Variable | Description |
|
| Variable | Description |
|
||||||
| ----------------- | ------------------------------------------------------------ |
|
| ----------------- | ------------------------------------------------------------ |
|
||||||
| `CLEAN_INSTALL=1` | Remove destination directory before extracting (for updates) |
|
| `CLEAN_INSTALL=1` | Remove destination directory before extracting (for updates) |
|
||||||
|
|
||||||
@@ -398,21 +339,26 @@ RELEASE=$(get_latest_github_release "owner/repo")
|
|||||||
echo "Latest version: $RELEASE"
|
echo "Latest version: $RELEASE"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Examples
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack"
|
||||||
|
fetch_and_deploy_gh_release "appname" "owner/repo" "tarball" "latest" "/opt/myapp"
|
||||||
|
|
||||||
|
````
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
| Parameter | Default | Description |
|
||||||
|
| --------- | ------------- | -------------------------------------------- |
|
||||||
|
| `name` | required | App name (for version tracking) |
|
||||||
|
| `repo` | required | GitHub repo (`owner/repo`) |
|
||||||
|
| `type` | `tarball` | Release type: `tarball`, `zipball`, `binary` |
|
||||||
|
| `version` | `latest` | Version tag or `latest` |
|
||||||
|
| `dest` | `/opt/[name]` | Destination directory |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Tools & Utilities
|
## Tools & Utilities
|
||||||
|
|
||||||
### `setup_meilisearch`
|
|
||||||
|
|
||||||
Install Meilisearch, a lightning-fast search engine.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
setup_meilisearch
|
|
||||||
|
|
||||||
# Use in script
|
|
||||||
$STD php artisan scout:sync-index-settings
|
|
||||||
```
|
|
||||||
|
|
||||||
### `setup_yq`
|
### `setup_yq`
|
||||||
|
|
||||||
Install yq YAML processor.
|
Install yq YAML processor.
|
||||||
@@ -488,15 +434,6 @@ create_self_signed_cert
|
|||||||
|
|
||||||
## Utility Functions
|
## Utility Functions
|
||||||
|
|
||||||
### `verify_tool_version`
|
|
||||||
|
|
||||||
Validate that the installed major version matches the expected version. Useful during upgrades or troubleshooting.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Verify Node.js is version 22
|
|
||||||
verify_tool_version "nodejs" "22" "$(node -v | grep -oP '^v\K[0-9]+')"
|
|
||||||
```
|
|
||||||
|
|
||||||
### `get_lxc_ip`
|
### `get_lxc_ip`
|
||||||
|
|
||||||
Set the `$LOCAL_IP` variable with the container's IP address.
|
Set the `$LOCAL_IP` variable with the container's IP address.
|
||||||
@@ -589,7 +526,7 @@ msg_ok "Installed Dependencies"
|
|||||||
|
|
||||||
# Setup runtimes and databases FIRST
|
# Setup runtimes and databases FIRST
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
PG_VERSION="16" setup_postgresql
|
PG_VERSION="17" setup_postgresql
|
||||||
PG_DB_NAME="myapp" PG_DB_USER="myapp" setup_postgresql_db
|
PG_DB_NAME="myapp" PG_DB_USER="myapp" setup_postgresql_db
|
||||||
get_lxc_ip
|
get_lxc_ip
|
||||||
|
|
||||||
|
|||||||
@@ -17,9 +17,7 @@ Complete guide to contributing to the ProxmoxVE project - from your first fork t
|
|||||||
|
|
||||||
## 🚀 Quick Start
|
## 🚀 Quick Start
|
||||||
|
|
||||||
### 60 Seconds to Contributing (Development)
|
### 60 Seconds to Contributing
|
||||||
|
|
||||||
When developing and testing **in your fork**:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Fork on GitHub
|
# 1. Fork on GitHub
|
||||||
@@ -29,8 +27,8 @@ When developing and testing **in your fork**:
|
|||||||
git clone https://github.com/YOUR_USERNAME/ProxmoxVE.git
|
git clone https://github.com/YOUR_USERNAME/ProxmoxVE.git
|
||||||
cd ProxmoxVE
|
cd ProxmoxVE
|
||||||
|
|
||||||
# 3. Auto-configure your fork (IMPORTANT - updates all links!)
|
# 3. Auto-configure your fork
|
||||||
bash docs/contribution/setup-fork.sh --full
|
bash docs/contribution/setup-fork.sh
|
||||||
|
|
||||||
# 4. Create a feature branch
|
# 4. Create a feature branch
|
||||||
git checkout -b feature/my-awesome-app
|
git checkout -b feature/my-awesome-app
|
||||||
@@ -41,73 +39,19 @@ cat docs/ct/DETAILED_GUIDE.md # For container scripts
|
|||||||
cat docs/install/DETAILED_GUIDE.md # For install scripts
|
cat docs/install/DETAILED_GUIDE.md # For install scripts
|
||||||
|
|
||||||
# 6. Create your contribution
|
# 6. Create your contribution
|
||||||
cp docs/contribution/templates_ct/AppName.sh ct/myapp.sh
|
cp ct/example.sh ct/myapp.sh
|
||||||
cp docs/contribution/templates_install/AppName-install.sh install/myapp-install.sh
|
cp install/example-install.sh install/myapp-install.sh
|
||||||
# ... edit files ...
|
# ... edit files ...
|
||||||
|
|
||||||
# 7. Push to your fork and test via GitHub
|
# 7. Test and commit
|
||||||
git push origin feature/my-awesome-app
|
bash ct/myapp.sh
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"
|
git add ct/myapp.sh install/myapp-install.sh
|
||||||
# ⏱️ GitHub may take 10-30 seconds to update files - be patient!
|
git commit -m "feat: add MyApp"
|
||||||
|
|
||||||
# 8. Create your JSON metadata file
|
|
||||||
cp docs/contribution/templates_json/AppName.json frontend/public/json/myapp.json
|
|
||||||
# Edit metadata: name, slug, categories, description, resources, etc.
|
|
||||||
|
|
||||||
# 9. No direct install-script test
|
|
||||||
# Install scripts are executed by the CT script inside the container
|
|
||||||
|
|
||||||
# 10. Commit ONLY your new files (see Cherry-Pick section below!)
|
|
||||||
git add ct/myapp.sh install/myapp-install.sh frontend/public/json/myapp.json
|
|
||||||
git commit -m "feat: add MyApp container and install scripts"
|
|
||||||
git push origin feature/my-awesome-app
|
git push origin feature/my-awesome-app
|
||||||
|
|
||||||
# 11. Create Pull Request on GitHub
|
# 8. Create Pull Request on GitHub
|
||||||
```
|
```
|
||||||
|
|
||||||
⚠️ **IMPORTANT: After setup-fork.sh, many files are modified!**
|
|
||||||
|
|
||||||
See the **Cherry-Pick: Submitting Only Your Changes** section below to learn how to push ONLY your 3-4 files instead of 600+ modified files!
|
|
||||||
|
|
||||||
### How Users Run Scripts (After Merged)
|
|
||||||
|
|
||||||
Once your script is merged to the main repository, users download and run it from GitHub like this:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ✅ Users run from GitHub (normal usage after PR merged)
|
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/myapp.sh)"
|
|
||||||
|
|
||||||
# Install scripts are called by the CT script and are not run directly by users
|
|
||||||
```
|
|
||||||
|
|
||||||
### Development vs. Production Execution
|
|
||||||
|
|
||||||
**During Development (you, in your fork):**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# You MUST test via curl from your GitHub fork (not local files!)
|
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"
|
|
||||||
|
|
||||||
# The script's curl commands are updated by setup-fork.sh to point to YOUR fork
|
|
||||||
# This ensures you're testing your actual changes
|
|
||||||
# ⏱️ Wait 10-30 seconds after pushing - GitHub updates slowly
|
|
||||||
```
|
|
||||||
|
|
||||||
**After Merge (users, from GitHub):**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Users download the script from upstream via curl
|
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/myapp.sh)"
|
|
||||||
|
|
||||||
# The script's curl commands now point back to upstream (community-scripts)
|
|
||||||
# This is the stable, tested version
|
|
||||||
```
|
|
||||||
|
|
||||||
**Summary:**
|
|
||||||
|
|
||||||
- **Development**: Push to fork, test via curl → setup-fork.sh changes curl URLs to your fork
|
|
||||||
- **Production**: curl | bash from upstream → curl URLs point to community-scripts repo
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🍴 Setting Up Your Fork
|
## 🍴 Setting Up Your Fork
|
||||||
@@ -117,35 +61,14 @@ bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/Proxmo
|
|||||||
When you clone your fork, run the setup script to automatically configure everything:
|
When you clone your fork, run the setup script to automatically configure everything:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash docs/contribution/setup-fork.sh --full
|
bash docs/contribution/setup-fork.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
**What it does:**
|
This will:
|
||||||
|
|
||||||
- Auto-detects your GitHub username from git config
|
- Auto-detect your GitHub username
|
||||||
- Auto-detects your fork repository name
|
- Update all documentation links to point to your fork
|
||||||
- Updates **ALL** hardcoded links to point to your fork instead of the main repo (`--full`)
|
- Create `.git-setup-info` with recommended git workflows
|
||||||
- Creates `.git-setup-info` with your configuration
|
|
||||||
- Allows you to develop and test independently in your fork
|
|
||||||
|
|
||||||
**Why this matters:**
|
|
||||||
|
|
||||||
Without running this script, all links in your fork will still point to the upstream repository (community-scripts). This is a problem when testing because:
|
|
||||||
|
|
||||||
- Installation links will pull from upstream, not your fork
|
|
||||||
- Updates will target the wrong repository
|
|
||||||
- Your contributions won't be properly tested
|
|
||||||
|
|
||||||
**After running setup-fork.sh:**
|
|
||||||
|
|
||||||
Your fork is fully configured and ready to develop. You can:
|
|
||||||
|
|
||||||
- Push changes to your fork
|
|
||||||
- Test via curl: `bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"`
|
|
||||||
- All links will reference your fork for development
|
|
||||||
- ⏱️ Wait 10-30 seconds after pushing - GitHub takes time to update
|
|
||||||
- Commit and push with confidence
|
|
||||||
- Create a PR to merge into upstream
|
|
||||||
|
|
||||||
**See**: [FORK_SETUP.md](FORK_SETUP.md) for detailed instructions
|
**See**: [FORK_SETUP.md](FORK_SETUP.md) for detailed instructions
|
||||||
|
|
||||||
@@ -158,12 +81,11 @@ If the script doesn't work, manually configure:
|
|||||||
git config user.name "Your Name"
|
git config user.name "Your Name"
|
||||||
git config user.email "your.email@example.com"
|
git config user.email "your.email@example.com"
|
||||||
|
|
||||||
# Add upstream remote for syncing with main repo
|
# Add upstream remote for syncing
|
||||||
git remote add upstream https://github.com/community-scripts/ProxmoxVE.git
|
git remote add upstream https://github.com/community-scripts/ProxmoxVE.git
|
||||||
|
|
||||||
# Verify remotes
|
# Verify remotes
|
||||||
git remote -v
|
git remote -v
|
||||||
# Should show: origin (your fork) and upstream (main repo)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -180,7 +102,7 @@ All scripts and configurations must follow our coding standards to ensure consis
|
|||||||
- **[HELPER_FUNCTIONS.md](HELPER_FUNCTIONS.md)** - Reference for all tools.func helper functions
|
- **[HELPER_FUNCTIONS.md](HELPER_FUNCTIONS.md)** - Reference for all tools.func helper functions
|
||||||
- **Container Scripts** - `/ct/` templates and guidelines
|
- **Container Scripts** - `/ct/` templates and guidelines
|
||||||
- **Install Scripts** - `/install/` templates and guidelines
|
- **Install Scripts** - `/install/` templates and guidelines
|
||||||
- **JSON Configurations** - `frontend/public/json/` structure and format
|
- **JSON Configurations** - `/json/` structure and format
|
||||||
|
|
||||||
### Quick Checklist
|
### Quick Checklist
|
||||||
|
|
||||||
@@ -190,7 +112,7 @@ All scripts and configurations must follow our coding standards to ensure consis
|
|||||||
- ✅ Include proper shebang: `#!/usr/bin/env bash`
|
- ✅ Include proper shebang: `#!/usr/bin/env bash`
|
||||||
- ✅ Add copyright header with author
|
- ✅ Add copyright header with author
|
||||||
- ✅ Handle errors properly with `msg_error`, `msg_ok`, etc.
|
- ✅ Handle errors properly with `msg_error`, `msg_ok`, etc.
|
||||||
- ✅ Test before submitting PR (via curl from your fork, not local bash)
|
- ✅ Test before submitting PR
|
||||||
- ✅ Update documentation if needed
|
- ✅ Update documentation if needed
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -211,172 +133,7 @@ Key points:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🍒 Cherry-Pick: Submitting Only Your Changes
|
## 📚 Guides & Resources
|
||||||
|
|
||||||
**Problem**: `setup-fork.sh` modifies 600+ files to update links. You don't want to submit all of those changes - only your new 3-4 files!
|
|
||||||
|
|
||||||
**Solution**: Use git cherry-pick to select only YOUR files.
|
|
||||||
|
|
||||||
### Step-by-Step Cherry-Pick Guide
|
|
||||||
|
|
||||||
#### 1. Check what changed
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# See all modified files
|
|
||||||
git status
|
|
||||||
|
|
||||||
# Verify your files are there
|
|
||||||
git status | grep -E "ct/myapp|install/myapp|json/myapp"
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 2. Create a clean feature branch for submission
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Go back to upstream main (clean slate)
|
|
||||||
git fetch upstream
|
|
||||||
git checkout -b submit/myapp upstream/main
|
|
||||||
|
|
||||||
# Don't use your modified main branch!
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 3. Cherry-pick ONLY your files
|
|
||||||
|
|
||||||
Cherry-picking extracts specific changes from commits:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Option A: Cherry-pick commits that added your files
|
|
||||||
# (if you committed your files separately)
|
|
||||||
git cherry-pick <commit-hash-of-your-files>
|
|
||||||
|
|
||||||
# Option B: Manually copy and commit only your files
|
|
||||||
# From your work branch, get the file contents
|
|
||||||
git show feature/my-awesome-app:ct/myapp.sh > /tmp/myapp.sh
|
|
||||||
git show feature/my-awesome-app:install/myapp-install.sh > /tmp/myapp-install.sh
|
|
||||||
git show feature/my-awesome-app:frontend/public/json/myapp.json > /tmp/myapp.json
|
|
||||||
|
|
||||||
# Add them to the clean branch
|
|
||||||
cp /tmp/myapp.sh ct/myapp.sh
|
|
||||||
cp /tmp/myapp-install.sh install/myapp-install.sh
|
|
||||||
cp /tmp/myapp.json frontend/public/json/myapp.json
|
|
||||||
|
|
||||||
# Commit
|
|
||||||
git add ct/myapp.sh install/myapp-install.sh frontend/public/json/myapp.json
|
|
||||||
git commit -m "feat: add MyApp"
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 4. Verify only your files are in the PR
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Check git diff against upstream
|
|
||||||
git diff upstream/main --name-only
|
|
||||||
# Should show ONLY:
|
|
||||||
# ct/myapp.sh
|
|
||||||
# install/myapp-install.sh
|
|
||||||
# frontend/public/json/myapp.json
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 5. Push and create PR
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Push your clean submission branch
|
|
||||||
git push origin submit/myapp
|
|
||||||
|
|
||||||
# Create PR on GitHub from: submit/myapp → main
|
|
||||||
```
|
|
||||||
|
|
||||||
### Why This Matters
|
|
||||||
|
|
||||||
- ✅ Clean PR with only your changes
|
|
||||||
- ✅ Easier for maintainers to review
|
|
||||||
- ✅ Faster merge without conflicts
|
|
||||||
- ❌ Without cherry-pick: PR has 600+ file changes (won't merge!)
|
|
||||||
|
|
||||||
### If You Made a Mistake
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Delete the messy branch
|
|
||||||
git branch -D submit/myapp
|
|
||||||
|
|
||||||
# Go back to clean branch
|
|
||||||
git checkout -b submit/myapp upstream/main
|
|
||||||
|
|
||||||
# Try cherry-picking again
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
If you're using **Visual Studio Code** with an AI assistant, you can leverage our detailed guidelines to generate high-quality contributions automatically.
|
|
||||||
|
|
||||||
### How to Use AI Assistance
|
|
||||||
|
|
||||||
1. **Open the AI Guidelines**
|
|
||||||
|
|
||||||
```
|
|
||||||
docs/contribution/AI.md
|
|
||||||
```
|
|
||||||
|
|
||||||
This file contains all requirements, patterns, and examples for writing proper scripts.
|
|
||||||
|
|
||||||
2. **Prepare Your Information**
|
|
||||||
|
|
||||||
Before asking the AI to generate code, gather:
|
|
||||||
- **Repository URL**: e.g., `https://github.com/owner/myapp`
|
|
||||||
- **Dockerfile/Script**: Paste the app's installation instructions (if available)
|
|
||||||
- **Dependencies**: What packages does it need? (Node, Python, Java, PostgreSQL, etc.)
|
|
||||||
- **Ports**: What port does it listen on? (e.g., 3000, 8080, 5000)
|
|
||||||
- **Configuration**: Any environment variables or config files?
|
|
||||||
|
|
||||||
3. **Tell the AI Assistant**
|
|
||||||
|
|
||||||
Share with the AI:
|
|
||||||
- The repository URL
|
|
||||||
- The Dockerfile or install instructions
|
|
||||||
- Link to [docs/contribution/AI.md](AI.md) with instructions to follow
|
|
||||||
|
|
||||||
**Example prompt:**
|
|
||||||
|
|
||||||
```
|
|
||||||
I want to contribute a container script for MyApp to ProxmoxVE.
|
|
||||||
Repository: https://github.com/owner/myapp
|
|
||||||
|
|
||||||
Here's the Dockerfile:
|
|
||||||
[paste Dockerfile content]
|
|
||||||
|
|
||||||
Please follow the guidelines in docs/contribution/AI.md to create:
|
|
||||||
1. ct/myapp.sh (container script)
|
|
||||||
2. install/myapp-install.sh (installation script)
|
|
||||||
3. frontend/public/json/myapp.json (metadata)
|
|
||||||
```
|
|
||||||
|
|
||||||
4. **AI Will Generate**
|
|
||||||
|
|
||||||
The AI will produce scripts that:
|
|
||||||
- Follow all ProxmoxVE patterns and conventions
|
|
||||||
- Use helper functions from `tools.func` correctly
|
|
||||||
- Include proper error handling and messages
|
|
||||||
- Have correct update mechanisms
|
|
||||||
- Are ready to submit as a PR
|
|
||||||
|
|
||||||
### Key Points for AI Assistants
|
|
||||||
|
|
||||||
- **Templates Location**: `docs/contribution/templates_ct/AppName.sh`, `templates_install/`, `templates_json/`
|
|
||||||
- **Guidelines**: Must follow `docs/contribution/AI.md` exactly
|
|
||||||
- **Helper Functions**: Use only functions from `misc/tools.func` - never write custom ones
|
|
||||||
- **Testing**: Always test before submission via curl from your fork
|
|
||||||
```bash
|
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"
|
|
||||||
# Wait 10-30 seconds after pushing changes
|
|
||||||
```
|
|
||||||
- **No Docker**: Container scripts must be bare-metal, not Docker-based
|
|
||||||
|
|
||||||
### Benefits
|
|
||||||
|
|
||||||
- **Speed**: AI generates boilerplate in seconds
|
|
||||||
- **Consistency**: Follows same patterns as 200+ existing scripts
|
|
||||||
- **Quality**: Less bugs and more maintainable code
|
|
||||||
- **Learning**: See how your app should be structured
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Documentation
|
### Documentation
|
||||||
|
|
||||||
@@ -464,15 +221,15 @@ git push origin feature/my-feature
|
|||||||
git rebase upstream/main
|
git rebase upstream/main
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Test your changes** (via curl from your fork)
|
2. **Test your changes**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/my-app.sh)"
|
bash ct/my-app.sh
|
||||||
# Follow prompts and test the container
|
# Follow prompts and test the container
|
||||||
# ⏱️ Wait 10-30 seconds after pushing - GitHub takes time to update
|
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Check code standards**
|
3. **Check code standards**
|
||||||
|
|
||||||
- [ ] Follows template structure
|
- [ ] Follows template structure
|
||||||
- [ ] Proper error handling
|
- [ ] Proper error handling
|
||||||
- [ ] Documentation updated (if needed)
|
- [ ] Documentation updated (if needed)
|
||||||
@@ -503,66 +260,23 @@ Before opening a PR:
|
|||||||
|
|
||||||
## ❓ FAQ
|
## ❓ FAQ
|
||||||
|
|
||||||
### ❌ Why can't I test with `bash ct/myapp.sh` locally?
|
### How do I test my changes?
|
||||||
|
|
||||||
You might try:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# ❌ WRONG - This won't test your actual changes!
|
# For container scripts
|
||||||
bash ct/myapp.sh
|
bash ct/my-app.sh
|
||||||
./ct/myapp.sh
|
|
||||||
sh ct/myapp.sh
|
# For install scripts (runs inside container)
|
||||||
|
# The ct script will call it automatically
|
||||||
|
|
||||||
|
# For advanced debugging
|
||||||
|
VERBOSE=yes bash ct/my-app.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
**Why this fails:**
|
|
||||||
|
|
||||||
- `bash ct/myapp.sh` uses the LOCAL clone file
|
|
||||||
- The LOCAL file doesn't execute the curl commands - it's already on disk
|
|
||||||
- The curl URLs INSIDE the script are modified by setup-fork.sh, but they're not executed
|
|
||||||
- So you can't verify if your curl URLs actually work
|
|
||||||
- Users will get the curl URL version (which may be broken)
|
|
||||||
|
|
||||||
**Solution:** Always test via curl from GitHub:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# ✅ CORRECT - Tests the actual GitHub URLs
|
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"
|
|
||||||
```
|
|
||||||
|
|
||||||
### ❓ How do I test my changes?
|
|
||||||
|
|
||||||
You **cannot** test locally with `bash ct/myapp.sh` from your cloned directory!
|
|
||||||
|
|
||||||
You **must** push to GitHub and test via curl from your fork:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 1. Push your changes to your fork
|
|
||||||
git push origin feature/my-awesome-app
|
|
||||||
|
|
||||||
# 2. Test via curl (this loads the script from GitHub, not local files)
|
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/my-app.sh)"
|
|
||||||
|
|
||||||
# 3. For verbose/debug output, pass environment variables
|
|
||||||
VERBOSE=yes bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/my-app.sh)"
|
|
||||||
DEV_MODE_LOGS=true bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/my-app.sh)"
|
|
||||||
```
|
|
||||||
|
|
||||||
**Why?**
|
|
||||||
|
|
||||||
- Local `bash ct/myapp.sh` uses local files from your clone
|
|
||||||
- But the script's INTERNAL curl commands have been modified by setup-fork.sh to point to your fork
|
|
||||||
- This discrepancy means you're not actually testing the curl URLs
|
|
||||||
- Testing via curl ensures the script downloads from YOUR fork GitHub URLs
|
|
||||||
- ⏱️ **Important:** GitHub takes 10-30 seconds to recognize newly pushed files. Wait before testing!
|
|
||||||
|
|
||||||
**What if local bash worked?**
|
|
||||||
|
|
||||||
You'd be testing local files only, not the actual GitHub URLs that users will download. This means broken curl links wouldn't be caught during testing.
|
|
||||||
|
|
||||||
### What if my PR has conflicts?
|
### What if my PR has conflicts?
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Sync with upstream main repository
|
# Sync with upstream
|
||||||
git fetch upstream
|
git fetch upstream
|
||||||
git rebase upstream/main
|
git rebase upstream/main
|
||||||
|
|
||||||
@@ -574,27 +288,17 @@ git push -f origin your-branch
|
|||||||
|
|
||||||
### How do I keep my fork updated?
|
### How do I keep my fork updated?
|
||||||
|
|
||||||
Two ways:
|
See "Keep Your Fork Updated" section above, or run:
|
||||||
|
|
||||||
**Option 1: Run setup script again**
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash docs/contribution/setup-fork.sh --full
|
bash docs/contribution/setup-fork.sh
|
||||||
```
|
|
||||||
|
|
||||||
**Option 2: Manual sync**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git fetch upstream
|
|
||||||
git rebase upstream/main
|
|
||||||
git push -f origin main
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Where do I ask questions?
|
### Where do I ask questions?
|
||||||
|
|
||||||
- **GitHub Issues**: For bugs and feature requests
|
- **GitHub Issues**: For bugs and feature requests
|
||||||
- **GitHub Discussions**: For general questions and ideas
|
- **GitHub Discussions**: For general questions
|
||||||
- **Discord**: Community-scripts server for real-time chat
|
- **Discord**: Community-scripts server
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -603,7 +307,7 @@ git push -f origin main
|
|||||||
### For First-Time Contributors
|
### For First-Time Contributors
|
||||||
|
|
||||||
1. Read: [docs/README.md](../README.md) - Documentation overview
|
1. Read: [docs/README.md](../README.md) - Documentation overview
|
||||||
2. Read: [CONTRIBUTING.md](CONTRIBUTING.md) - Essential coding standards
|
2. Read: [docs/contribution/FORK_SETUP.md](FORK_SETUP.md) - Fork setup guide
|
||||||
3. Choose your path:
|
3. Choose your path:
|
||||||
- Containers → [docs/ct/DETAILED_GUIDE.md](../ct/DETAILED_GUIDE.md)
|
- Containers → [docs/ct/DETAILED_GUIDE.md](../ct/DETAILED_GUIDE.md)
|
||||||
- Installation → [docs/install/DETAILED_GUIDE.md](../install/DETAILED_GUIDE.md)
|
- Installation → [docs/install/DETAILED_GUIDE.md](../install/DETAILED_GUIDE.md)
|
||||||
@@ -614,24 +318,21 @@ git push -f origin main
|
|||||||
|
|
||||||
1. Review [CONTRIBUTING.md](CONTRIBUTING.md) - Coding standards
|
1. Review [CONTRIBUTING.md](CONTRIBUTING.md) - Coding standards
|
||||||
2. Review [CODE_AUDIT.md](CODE_AUDIT.md) - Audit checklist
|
2. Review [CODE_AUDIT.md](CODE_AUDIT.md) - Audit checklist
|
||||||
3. Check templates in `/docs/contribution/templates_*/`
|
3. Check templates in `/ct/` and `/install/`
|
||||||
4. Use AI assistants with [AI.md](AI.md) for code generation
|
4. Submit PR with confidence
|
||||||
5. Submit PR with confidence
|
|
||||||
|
|
||||||
### For Using AI Assistants
|
### For Reviewers/Maintainers
|
||||||
|
|
||||||
See "Using AI Assistants" section above for:
|
1. Use [CODE_AUDIT.md](CODE_AUDIT.md) as review guide
|
||||||
|
2. Reference [docs/TECHNICAL_REFERENCE.md](../TECHNICAL_REFERENCE.md) for architecture
|
||||||
- How to structure prompts
|
3. Check [docs/EXIT_CODES.md](../EXIT_CODES.md) for error handling
|
||||||
- What information to provide
|
|
||||||
- How to validate AI output
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚀 Ready to Contribute?
|
## 🚀 Ready to Contribute?
|
||||||
|
|
||||||
1. **Fork** the repository
|
1. **Fork** the repository
|
||||||
2. **Clone** your fork and **setup** with `bash docs/contribution/setup-fork.sh --full`
|
2. **Clone** your fork and **setup** with `bash docs/contribution/setup-fork.sh`
|
||||||
3. **Choose** your contribution type (container, installation, tools, etc.)
|
3. **Choose** your contribution type (container, installation, tools, etc.)
|
||||||
4. **Read** the appropriate detailed guide
|
4. **Read** the appropriate detailed guide
|
||||||
5. **Create** your feature branch
|
5. **Create** your feature branch
|
||||||
@@ -644,9 +345,9 @@ See "Using AI Assistants" section above for:
|
|||||||
|
|
||||||
## 📞 Contact & Support
|
## 📞 Contact & Support
|
||||||
|
|
||||||
- **GitHub**: [community-scripts/ProxmoxVE](https://github.com/community-scripts/ProxmoxVE)
|
- **GitHub**: https://github.com/community-scripts/ProxmoxVE
|
||||||
- **Issues**: [GitHub Issues](https://github.com/community-scripts/ProxmoxVE/issues)
|
- **Issues**: https://github.com/community-scripts/ProxmoxVE/issues
|
||||||
- **Discussions**: [GitHub Discussions](https://github.com/community-scripts/ProxmoxVE/discussions)
|
- **Discussions**: https://github.com/community-scripts/ProxmoxVE/discussions
|
||||||
- **Discord**: [Join Server](https://discord.gg/UHrpNWGwkH)
|
- **Discord**: [Join Server](https://discord.gg/UHrpNWGwkH)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user