mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-04-23 18:35:05 +02:00
Compare commits
1 Commits
github-act
...
fix/crafty
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
363bed8e0d |
18
.gitattributes
vendored
18
.gitattributes
vendored
@@ -4,29 +4,35 @@
|
|||||||
*.sh linguist-detectable=true
|
*.sh linguist-detectable=true
|
||||||
*.bash linguist-language=Shell
|
*.bash linguist-language=Shell
|
||||||
*.func linguist-language=Shell
|
*.func linguist-language=Shell
|
||||||
*.func linguist-detectable=true
|
|
||||||
*.install linguist-language=Shell
|
*.install linguist-language=Shell
|
||||||
|
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
# Exclude header art from stats
|
# Treat Golang files as Go (for /api/)
|
||||||
|
api/**/*.go linguist-language=Go
|
||||||
|
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
ct/headers/* linguist-documentation
|
# Treat frontend as JavaScript/TypeScript (optional)
|
||||||
|
frontend/**/*.ts linguist-language=TypeScript
|
||||||
|
frontend/**/*.js linguist-language=JavaScript
|
||||||
|
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
# Exclude documentation from stats
|
# Exclude documentation from stats
|
||||||
# ---------------------------------------
|
|
||||||
*.md linguist-documentation
|
*.md linguist-documentation
|
||||||
|
docs/** linguist-documentation
|
||||||
README.md linguist-documentation
|
README.md linguist-documentation
|
||||||
CONTRIBUTING.md linguist-documentation
|
CONTRIBUTING.md linguist-documentation
|
||||||
SECURITY.md linguist-documentation
|
SECURITY.md linguist-documentation
|
||||||
|
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
# Exclude generated/config files
|
# Exclude generated/config files
|
||||||
# ---------------------------------------
|
*.json linguist-generated
|
||||||
|
frontend/public/json/*.json linguist-generated=false
|
||||||
|
*.lock linguist-generated
|
||||||
|
*.yml linguist-generated
|
||||||
|
*.yaml linguist-generated
|
||||||
.github/** linguist-generated
|
.github/** linguist-generated
|
||||||
.vscode/** linguist-generated
|
.vscode/** linguist-generated
|
||||||
|
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
# Standard text handling
|
# Standard text handling
|
||||||
# ---------------------------------------
|
|
||||||
* text=auto eol=lf
|
* text=auto eol=lf
|
||||||
|
|||||||
3
.github/CODEOWNERS
generated
vendored
3
.github/CODEOWNERS
generated
vendored
@@ -12,3 +12,6 @@
|
|||||||
|
|
||||||
# Set default reviewers
|
# Set default reviewers
|
||||||
* @community-scripts/Contributor
|
* @community-scripts/Contributor
|
||||||
|
|
||||||
|
# All changes in frontend
|
||||||
|
/frontend/ @community-scripts/Frontend-Dev
|
||||||
|
|||||||
42
.github/changelogs/2026/03.md
generated
vendored
42
.github/changelogs/2026/03.md
generated
vendored
@@ -1,45 +1,3 @@
|
|||||||
## 2026-03-31
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Graylog: set vm.max_map_count on host for OpenSearch [@MickLesk](https://github.com/MickLesk) ([#13441](https://github.com/community-scripts/ProxmoxVE/pull/13441))
|
|
||||||
- Koillection: ensure newline before appending to .env.local [@MickLesk](https://github.com/MickLesk) ([#13440](https://github.com/community-scripts/ProxmoxVE/pull/13440))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- core: skip empty gateway value in network config [@MickLesk](https://github.com/MickLesk) ([#13442](https://github.com/community-scripts/ProxmoxVE/pull/13442))
|
|
||||||
|
|
||||||
## 2026-03-30
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Bambuddy ([#13411](https://github.com/community-scripts/ProxmoxVE/pull/13411))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- Rename: BirdNET > BirdNET-Go [@MickLesk](https://github.com/MickLesk) ([#13410](https://github.com/community-scripts/ProxmoxVE/pull/13410))
|
|
||||||
|
|
||||||
## 2026-03-29
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- YOURLS ([#13379](https://github.com/community-scripts/ProxmoxVE/pull/13379))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix(victoriametrics): use jq to filter releases [@Joery-M](https://github.com/Joery-M) ([#13393](https://github.com/community-scripts/ProxmoxVE/pull/13393))
|
|
||||||
- Ollama: add error handling for Intel GPG key imports [@MickLesk](https://github.com/MickLesk) ([#13397](https://github.com/community-scripts/ProxmoxVE/pull/13397))
|
|
||||||
- Immich: ignore Redis connection error on maintenance mode disable [@MickLesk](https://github.com/MickLesk) ([#13398](https://github.com/community-scripts/ProxmoxVE/pull/13398))
|
|
||||||
- NPM: unmask openresty after migration from package [@MickLesk](https://github.com/MickLesk) ([#13399](https://github.com/community-scripts/ProxmoxVE/pull/13399))
|
|
||||||
|
|
||||||
## 2026-03-28
|
## 2026-03-28
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|||||||
343
.github/changelogs/2026/04.md
generated
vendored
343
.github/changelogs/2026/04.md
generated
vendored
@@ -1,343 +0,0 @@
|
|||||||
## 2026-04-18
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Dagu ([#13830](https://github.com/community-scripts/ProxmoxVE/pull/13830))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- BabyBuddy: set DJANGO_SETTINGS_MODULE before migrate in update [@MickLesk](https://github.com/MickLesk) ([#13836](https://github.com/community-scripts/ProxmoxVE/pull/13836))
|
|
||||||
- litellm: add prisma generate and use venv binary directly [@MickLesk](https://github.com/MickLesk) ([#13835](https://github.com/community-scripts/ProxmoxVE/pull/13835))
|
|
||||||
- yamtrack: add missing nginx.conf sed edits to update script [@MickLesk](https://github.com/MickLesk) ([#13834](https://github.com/community-scripts/ProxmoxVE/pull/13834))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- SparkyFitness Garmin Microservice: fix update function [@tomfrenzel](https://github.com/tomfrenzel) ([#13824](https://github.com/community-scripts/ProxmoxVE/pull/13824))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Clean-Orphan-LVM: check all cluster nodes for VM/CT configs [@MickLesk](https://github.com/MickLesk) ([#13837](https://github.com/community-scripts/ProxmoxVE/pull/13837))
|
|
||||||
|
|
||||||
## 2026-04-17
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- step-ca ([#13775](https://github.com/community-scripts/ProxmoxVE/pull/13775))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core: pin IGC version to compute-runtime compatible tag (Intel GPU) [@MickLesk](https://github.com/MickLesk) ([#13814](https://github.com/community-scripts/ProxmoxVE/pull/13814))
|
|
||||||
- Fix for bambuddy community script update [@abbasegbeyemi](https://github.com/abbasegbeyemi) ([#13816](https://github.com/community-scripts/ProxmoxVE/pull/13816))
|
|
||||||
- Umami: Fix update procedure [@tremor021](https://github.com/tremor021) ([#13807](https://github.com/community-scripts/ProxmoxVE/pull/13807))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core: sanitize mount_fs input — strip spaces and trailing commas [@MickLesk](https://github.com/MickLesk) ([#13806](https://github.com/community-scripts/ProxmoxVE/pull/13806))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- core: fix some pct create issues (telemetry) + cleanup [@MickLesk](https://github.com/MickLesk) ([#13810](https://github.com/community-scripts/ProxmoxVE/pull/13810))
|
|
||||||
|
|
||||||
## 2026-04-16
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Add pnpm as a dependency to ghost-cli install [@YourFavoriteKyle](https://github.com/YourFavoriteKyle) ([#13789](https://github.com/community-scripts/ProxmoxVE/pull/13789))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: wire ENABLE_MKNOD and ALLOW_MOUNT_FS into LXC features [@MickLesk](https://github.com/MickLesk) ([#13796](https://github.com/community-scripts/ProxmoxVE/pull/13796))
|
|
||||||
|
|
||||||
## 2026-04-15
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- iGotify ([#13773](https://github.com/community-scripts/ProxmoxVE/pull/13773))
|
|
||||||
- GitHub-Runner ([#13709](https://github.com/community-scripts/ProxmoxVE/pull/13709))
|
|
||||||
- Revert "Remove low-install-count CT scripts and installers (#13570)" [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13752](https://github.com/community-scripts/ProxmoxVE/pull/13752))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- [alpine-nextcloud] Update Nginx MIME types to support .mjs files [@GuiltyFox](https://github.com/GuiltyFox) ([#13771](https://github.com/community-scripts/ProxmoxVE/pull/13771))
|
|
||||||
- Domain Monitor: Fix file ownership after update [@tremor021](https://github.com/tremor021) ([#13759](https://github.com/community-scripts/ProxmoxVE/pull/13759))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- Reitti: refactor scripts for v4 - remove RabbitMQ and Photon [@MickLesk](https://github.com/MickLesk) ([#13728](https://github.com/community-scripts/ProxmoxVE/pull/13728))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Semaphore: add BoltDB to SQLite migration [@tremor021](https://github.com/tremor021) ([#13779](https://github.com/community-scripts/ProxmoxVE/pull/13779))
|
|
||||||
|
|
||||||
### 📚 Documentation
|
|
||||||
|
|
||||||
- cleanup: remove docs/, update README & CONTRIBUTING, fix repo config [@MickLesk](https://github.com/MickLesk) ([#13770](https://github.com/community-scripts/ProxmoxVE/pull/13770))
|
|
||||||
|
|
||||||
## 2026-04-14
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- Immich: Pin photo-processing library revisions [@vhsdream](https://github.com/vhsdream) ([#13748](https://github.com/community-scripts/ProxmoxVE/pull/13748))
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- BentoPDF: Nginx fixes [@tremor021](https://github.com/tremor021) ([#13741](https://github.com/community-scripts/ProxmoxVE/pull/13741))
|
|
||||||
- Zerobyte: add git to dependencies to fix bun install failure [@Copilot](https://github.com/Copilot) ([#13721](https://github.com/community-scripts/ProxmoxVE/pull/13721))
|
|
||||||
- alpine-nextcloud-install: do not use deprecated nginx config [@AlexanderStein](https://github.com/AlexanderStein) ([#13726](https://github.com/community-scripts/ProxmoxVE/pull/13726))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Mealie: support v3.15+ Nuxt 4 migration [@MickLesk](https://github.com/MickLesk) ([#13731](https://github.com/community-scripts/ProxmoxVE/pull/13731))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Lyrion: correct service name and version file in update script [@MickLesk](https://github.com/MickLesk) ([#13734](https://github.com/community-scripts/ProxmoxVE/pull/13734))
|
|
||||||
- Changedetection: move env vars from service file to .env [@tremor021](https://github.com/tremor021) ([#13732](https://github.com/community-scripts/ProxmoxVE/pull/13732))
|
|
||||||
|
|
||||||
## 2026-04-13
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Slskd: Remove stale Soularr lock file on startup and redirect logs to stderr [@MickLesk](https://github.com/MickLesk) ([#13669](https://github.com/community-scripts/ProxmoxVE/pull/13669))
|
|
||||||
- Bambuddy: preserve database and archive on update [@Copilot](https://github.com/Copilot) ([#13706](https://github.com/community-scripts/ProxmoxVE/pull/13706))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Immich: Pin version to 2.7.5 [@vhsdream](https://github.com/vhsdream) ([#13715](https://github.com/community-scripts/ProxmoxVE/pull/13715))
|
|
||||||
- Bytestash: auto backup/restore data on update [@MickLesk](https://github.com/MickLesk) ([#13707](https://github.com/community-scripts/ProxmoxVE/pull/13707))
|
|
||||||
- OpenCloud: pin version to 6.0.0 [@vhsdream](https://github.com/vhsdream) ([#13691](https://github.com/community-scripts/ProxmoxVE/pull/13691))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- Mealie: pin version to v3.14.0 in install and update scripts [@Copilot](https://github.com/Copilot) ([#13724](https://github.com/community-scripts/ProxmoxVE/pull/13724))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- core: remove unused TEMP_DIR mktemp leak in build_container / clean sonarqube [@MickLesk](https://github.com/MickLesk) ([#13708](https://github.com/community-scripts/ProxmoxVE/pull/13708))
|
|
||||||
|
|
||||||
## 2026-04-12
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Alpine-Wakapi: Remove container checks in update_script function [@MickLesk](https://github.com/MickLesk) ([#13694](https://github.com/community-scripts/ProxmoxVE/pull/13694))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- IronClaw: Install keychain dependencies and launch in a DBus session [@MickLesk](https://github.com/MickLesk) ([#13692](https://github.com/community-scripts/ProxmoxVE/pull/13692))
|
|
||||||
- MeTube: Allow pnpm build scripts to fix ERR_PNPM_IGNORED_BUILDS [@MickLesk](https://github.com/MickLesk) ([#13668](https://github.com/community-scripts/ProxmoxVE/pull/13668))
|
|
||||||
|
|
||||||
## 2026-04-11
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Immich: Ensure newline before appending IMMICH_HELMET_FILE to .env [@MickLesk](https://github.com/MickLesk) ([#13667](https://github.com/community-scripts/ProxmoxVE/pull/13667))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- BentoPDF: replace http-server with nginx to fix WASM initialization timeout [@MickLesk](https://github.com/MickLesk) ([#13625](https://github.com/community-scripts/ProxmoxVE/pull/13625))
|
|
||||||
- Element Synapse: Add MatrixRTC configuration for Element Call support [@MickLesk](https://github.com/MickLesk) ([#13665](https://github.com/community-scripts/ProxmoxVE/pull/13665))
|
|
||||||
- RomM: Use ROMM_BASE_PATH from .env for symlinks and nginx config [@MickLesk](https://github.com/MickLesk) ([#13666](https://github.com/community-scripts/ProxmoxVE/pull/13666))
|
|
||||||
- Immich: Pin version to 2.7.4 [@vhsdream](https://github.com/vhsdream) ([#13661](https://github.com/community-scripts/ProxmoxVE/pull/13661))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Crafty Controller: Wait for credentials file instead of fixed sleep [@MickLesk](https://github.com/MickLesk) ([#13670](https://github.com/community-scripts/ProxmoxVE/pull/13670))
|
|
||||||
- Refactor: Alpine-Wakapi [@tremor021](https://github.com/tremor021) ([#13656](https://github.com/community-scripts/ProxmoxVE/pull/13656))
|
|
||||||
|
|
||||||
## 2026-04-10
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix: ensure trailing newline in redis.conf before appending bind directive [@Copilot](https://github.com/Copilot) ([#13647](https://github.com/community-scripts/ProxmoxVE/pull/13647))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Immich: Pin version to 2.7.3 [@vhsdream](https://github.com/vhsdream) ([#13631](https://github.com/community-scripts/ProxmoxVE/pull/13631))
|
|
||||||
- Homarr: bind Redis to localhost only [@MickLesk](https://github.com/MickLesk) ([#13552](https://github.com/community-scripts/ProxmoxVE/pull/13552))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- tools.func: prevent script crash when entering GitHub token after rate limit [@MickLesk](https://github.com/MickLesk) ([#13638](https://github.com/community-scripts/ProxmoxVE/pull/13638))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- addons: Filebrowser & Filebrowser-Quantum get warning if host install [@MickLesk](https://github.com/MickLesk) ([#13639](https://github.com/community-scripts/ProxmoxVE/pull/13639))
|
|
||||||
|
|
||||||
## 2026-04-09
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- boostack: add: git [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13620](https://github.com/community-scripts/ProxmoxVE/pull/13620))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Update OPNsense version from 25.7 to 26.1 [@tdn131](https://github.com/tdn131) ([#13626](https://github.com/community-scripts/ProxmoxVE/pull/13626))
|
|
||||||
- CheckMK: Bump Default OS to 13 (trixie) + dynamic codename + fix RELEASE-Tag Fetching [@MickLesk](https://github.com/MickLesk) ([#13610](https://github.com/community-scripts/ProxmoxVE/pull/13610))
|
|
||||||
|
|
||||||
## 2026-04-08
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- IronClaw | Alpine-IronClaw ([#13591](https://github.com/community-scripts/ProxmoxVE/pull/13591))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- immich: disable upgrade-insecure-requests CSP directive [@MickLesk](https://github.com/MickLesk) ([#13600](https://github.com/community-scripts/ProxmoxVE/pull/13600))
|
|
||||||
- Immich: v2.7.2 [@vhsdream](https://github.com/vhsdream) ([#13579](https://github.com/community-scripts/ProxmoxVE/pull/13579))
|
|
||||||
- Update flaresolverr-install.sh [@maztheman](https://github.com/maztheman) ([#13584](https://github.com/community-scripts/ProxmoxVE/pull/13584))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- bambuddy: add mkdir before data restore & add ffmpeg dependency [@MickLesk](https://github.com/MickLesk) ([#13601](https://github.com/community-scripts/ProxmoxVE/pull/13601))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- feat: update UHF Server script to use setup_ffmpeg [@zackwithak13](https://github.com/zackwithak13) ([#13564](https://github.com/community-scripts/ProxmoxVE/pull/13564))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: add script page badges to descriptions | change donate URL [@MickLesk](https://github.com/MickLesk) ([#13596](https://github.com/community-scripts/ProxmoxVE/pull/13596))
|
|
||||||
|
|
||||||
## 2026-04-07
|
|
||||||
|
|
||||||
### 🗑️ Deleted Scripts
|
|
||||||
|
|
||||||
- Remove low-install-count CT scripts and installers [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#13570](https://github.com/community-scripts/ProxmoxVE/pull/13570))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: improve resilience for top Proxmox error codes (209, 215, 118, 206) [@MickLesk](https://github.com/MickLesk) ([#13575](https://github.com/community-scripts/ProxmoxVE/pull/13575))
|
|
||||||
|
|
||||||
## 2026-04-06
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- OpenThread Border Router ([#13536](https://github.com/community-scripts/ProxmoxVE/pull/13536))
|
|
||||||
- Homelable ([#13539](https://github.com/community-scripts/ProxmoxVE/pull/13539))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Papra: check env before copy [@MickLesk](https://github.com/MickLesk) ([#13553](https://github.com/community-scripts/ProxmoxVE/pull/13553))
|
|
||||||
- changedetection: fix: typing_extensions error [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13548](https://github.com/community-scripts/ProxmoxVE/pull/13548))
|
|
||||||
- kasm: fix: fetch latest version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13547](https://github.com/community-scripts/ProxmoxVE/pull/13547))
|
|
||||||
|
|
||||||
## 2026-04-05
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Grist: remove install:ee step (private repo, not needed for grist-core) [@MickLesk](https://github.com/MickLesk) ([#13526](https://github.com/community-scripts/ProxmoxVE/pull/13526))
|
|
||||||
- Nginx Proxy Manager: ensure /tmp/nginx/body exists via openresty service [@MickLesk](https://github.com/MickLesk) ([#13528](https://github.com/community-scripts/ProxmoxVE/pull/13528))
|
|
||||||
- MotionEye: run as root to enable SMB share support [@MickLesk](https://github.com/MickLesk) ([#13527](https://github.com/community-scripts/ProxmoxVE/pull/13527))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- core: silent() function - use return instead of exit to allow || true error handling [@MickLesk](https://github.com/MickLesk) ([#13529](https://github.com/community-scripts/ProxmoxVE/pull/13529))
|
|
||||||
|
|
||||||
## 2026-04-04
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- komodo: set `PERIPHERY_CORE_PUBLIC_KEYS` to default value if absent [@4ndv](https://github.com/4ndv) ([#13519](https://github.com/community-scripts/ProxmoxVE/pull/13519))
|
|
||||||
|
|
||||||
## 2026-04-03
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- netboot.xyz ([#13480](https://github.com/community-scripts/ProxmoxVE/pull/13480))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- OpenWRT-VM: use poweroff instead of halt to properly stop VM [@MickLesk](https://github.com/MickLesk) ([#13504](https://github.com/community-scripts/ProxmoxVE/pull/13504))
|
|
||||||
- NginxProxyManager: fix openresty restart by setting user root before reload [@MickLesk](https://github.com/MickLesk) ([#13500](https://github.com/community-scripts/ProxmoxVE/pull/13500))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Crafty Controller: add Java 25 for Minecraft 1.26.1+ [@MickLesk](https://github.com/MickLesk) ([#13502](https://github.com/community-scripts/ProxmoxVE/pull/13502))
|
|
||||||
- Wealthfolio: update to v3.2.1 and Node.js 24 [@afadil](https://github.com/afadil) ([#13486](https://github.com/community-scripts/ProxmoxVE/pull/13486))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core.func: prevent profile.d scripts from aborting on non-zero exit [@MickLesk](https://github.com/MickLesk) ([#13503](https://github.com/community-scripts/ProxmoxVE/pull/13503))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- APT Proxy: Support full URLs (http/https with custom ports) [@MickLesk](https://github.com/MickLesk) ([#13474](https://github.com/community-scripts/ProxmoxVE/pull/13474))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- PVE LXC-Updater: pipe apt list through cat to prevent pager hang [@MickLesk](https://github.com/MickLesk) ([#13501](https://github.com/community-scripts/ProxmoxVE/pull/13501))
|
|
||||||
|
|
||||||
## 2026-04-02
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Grist: Guard backup restore for empty docs/db files [@MickLesk](https://github.com/MickLesk) ([#13472](https://github.com/community-scripts/ProxmoxVE/pull/13472))
|
|
||||||
- fix(zigbee2mqtt): suppress grep error when pnpm-workspace.yaml is absent on update [@Copilot](https://github.com/Copilot) ([#13476](https://github.com/community-scripts/ProxmoxVE/pull/13476))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Cron LXC Updater: Add full PATH for cron environment [@MickLesk](https://github.com/MickLesk) ([#13473](https://github.com/community-scripts/ProxmoxVE/pull/13473))
|
|
||||||
|
|
||||||
## 2026-04-01
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- DrawDB ([#13454](https://github.com/community-scripts/ProxmoxVE/pull/13454))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Filebrowser: make noauth setup use correct database [@MickLesk](https://github.com/MickLesk) ([#13457](https://github.com/community-scripts/ProxmoxVE/pull/13457))
|
|
||||||
2
.github/pull_request_template.md
generated
vendored
2
.github/pull_request_template.md
generated
vendored
@@ -22,6 +22,6 @@ Fixes #
|
|||||||
- [ ] ✨ **New feature** – Adds new, non-breaking functionality.
|
- [ ] ✨ **New feature** – Adds new, non-breaking functionality.
|
||||||
- [ ] 💥 **Breaking change** – Alters existing functionality in a way that may require updates.
|
- [ ] 💥 **Breaking change** – Alters existing functionality in a way that may require updates.
|
||||||
- [ ] 🆕 **New script** – A fully functional and tested script or script set.
|
- [ ] 🆕 **New script** – A fully functional and tested script or script set.
|
||||||
- [ ] 🌍 **Website update** – Changes to script metadata (PocketBase/website data).
|
- [ ] 🌍 **Website update** – Changes to website-related JSON files or metadata.
|
||||||
- [ ] 🔧 **Refactoring / Code Cleanup** – Improves readability or maintainability without changing functionality.
|
- [ ] 🔧 **Refactoring / Code Cleanup** – Improves readability or maintainability without changing functionality.
|
||||||
- [ ] 📝 **Documentation update** – Changes to `README`, `AppName.md`, `CONTRIBUTING.md`, or other docs.
|
- [ ] 📝 **Documentation update** – Changes to `README`, `AppName.md`, `CONTRIBUTING.md`, or other docs.
|
||||||
|
|||||||
482
.github/workflows/pocketbase-bot.yml
generated
vendored
482
.github/workflows/pocketbase-bot.yml
generated
vendored
@@ -31,8 +31,6 @@ jobs:
|
|||||||
ACTOR: ${{ github.event.comment.user.login }}
|
ACTOR: ${{ github.event.comment.user.login }}
|
||||||
ACTOR_ASSOCIATION: ${{ github.event.comment.author_association }}
|
ACTOR_ASSOCIATION: ${{ github.event.comment.author_association }}
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
FRONTEND_URL: ${{ secrets.FRONTEND_URL }}
|
|
||||||
REVALIDATE_SECRET: ${{ secrets.REVALIDATE_SECRET }}
|
|
||||||
run: |
|
run: |
|
||||||
node << 'ENDSCRIPT'
|
node << 'ENDSCRIPT'
|
||||||
(async function () {
|
(async function () {
|
||||||
@@ -115,6 +113,7 @@ jobs:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ── Permission check ───────────────────────────────────────────────
|
// ── Permission check ───────────────────────────────────────────────
|
||||||
|
// author_association: OWNER = repo/org owner, MEMBER = org member (includes Contributors team)
|
||||||
const association = process.env.ACTOR_ASSOCIATION;
|
const association = process.env.ACTOR_ASSOCIATION;
|
||||||
if (association !== 'OWNER' && association !== 'MEMBER') {
|
if (association !== 'OWNER' && association !== 'MEMBER') {
|
||||||
await addReaction('-1');
|
await addReaction('-1');
|
||||||
@@ -129,11 +128,18 @@ jobs:
|
|||||||
await addReaction('eyes');
|
await addReaction('eyes');
|
||||||
|
|
||||||
// ── Parse command ──────────────────────────────────────────────────
|
// ── Parse command ──────────────────────────────────────────────────
|
||||||
|
// Formats (first line of comment):
|
||||||
|
// /pocketbase <slug> field=value [field=value ...] ← field updates (simple values)
|
||||||
|
// /pocketbase <slug> set <field> ← value from code block below
|
||||||
|
// /pocketbase <slug> note list|add|edit|remove ... ← note management
|
||||||
|
// /pocketbase <slug> method list ← list install methods
|
||||||
|
// /pocketbase <slug> method <type> cpu=N ram=N hdd=N ← edit install method resources
|
||||||
const commentBody = process.env.COMMENT_BODY || '';
|
const commentBody = process.env.COMMENT_BODY || '';
|
||||||
const lines = commentBody.trim().split('\n');
|
const lines = commentBody.trim().split('\n');
|
||||||
const firstLine = lines[0].trim();
|
const firstLine = lines[0].trim();
|
||||||
const withoutCmd = firstLine.replace(/^\/pocketbase\s+/, '').trim();
|
const withoutCmd = firstLine.replace(/^\/pocketbase\s+/, '').trim();
|
||||||
|
|
||||||
|
// Extract code block content from comment body (```...``` or ```lang\n...```)
|
||||||
function extractCodeBlock(body) {
|
function extractCodeBlock(body) {
|
||||||
const m = body.match(/```[^\n]*\n([\s\S]*?)```/);
|
const m = body.match(/```[^\n]*\n([\s\S]*?)```/);
|
||||||
return m ? m[1].trim() : null;
|
return m ? m[1].trim() : null;
|
||||||
@@ -141,8 +147,6 @@ jobs:
|
|||||||
const codeBlockValue = extractCodeBlock(commentBody);
|
const codeBlockValue = extractCodeBlock(commentBody);
|
||||||
|
|
||||||
const HELP_TEXT =
|
const HELP_TEXT =
|
||||||
'**Show current state:**\n' +
|
|
||||||
'```\n/pocketbase <slug> info\n```\n\n' +
|
|
||||||
'**Field update (simple):** `/pocketbase <slug> field=value [field=value ...]`\n\n' +
|
'**Field update (simple):** `/pocketbase <slug> field=value [field=value ...]`\n\n' +
|
||||||
'**Field update (HTML/multiline) — value from code block:**\n' +
|
'**Field update (HTML/multiline) — value from code block:**\n' +
|
||||||
'````\n' +
|
'````\n' +
|
||||||
@@ -158,16 +162,12 @@ jobs:
|
|||||||
'/pocketbase <slug> note edit <type> "<old text>" "<new text>"\n' +
|
'/pocketbase <slug> note edit <type> "<old text>" "<new text>"\n' +
|
||||||
'/pocketbase <slug> note remove <type> "<text>"\n' +
|
'/pocketbase <slug> note remove <type> "<text>"\n' +
|
||||||
'```\n\n' +
|
'```\n\n' +
|
||||||
'**Install method management:**\n' +
|
'**Install method resources:**\n' +
|
||||||
'```\n' +
|
'```\n' +
|
||||||
'/pocketbase <slug> method list\n' +
|
'/pocketbase <slug> method list\n' +
|
||||||
|
'/pocketbase <slug> method <type> hdd=10\n' +
|
||||||
'/pocketbase <slug> method <type> cpu=4 ram=2048 hdd=20\n' +
|
'/pocketbase <slug> method <type> cpu=4 ram=2048 hdd=20\n' +
|
||||||
'/pocketbase <slug> method <type> config_path="/opt/app/.env"\n' +
|
'```\n\n' +
|
||||||
'/pocketbase <slug> method <type> os=debian version=13\n' +
|
|
||||||
'/pocketbase <slug> method add <type> cpu=2 ram=2048 hdd=8 os=debian version=13\n' +
|
|
||||||
'/pocketbase <slug> method remove <type>\n' +
|
|
||||||
'```\n' +
|
|
||||||
'Method fields: `cpu` `ram` `hdd` `os` `version` `config_path` `script`\n\n' +
|
|
||||||
'**Editable fields:** `name` `description` `logo` `documentation` `website` `project_url` `github` ' +
|
'**Editable fields:** `name` `description` `logo` `documentation` `website` `project_url` `github` ' +
|
||||||
'`config_path` `port` `default_user` `default_passwd` ' +
|
'`config_path` `port` `default_user` `default_passwd` ' +
|
||||||
'`updateable` `privileged` `has_arm` `is_dev` ' +
|
'`updateable` `privileged` `has_arm` `is_dev` ' +
|
||||||
@@ -189,7 +189,8 @@ jobs:
|
|||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── PocketBase: authenticate ───────────────────────────────────────
|
// ── Allowed fields and their types ─────────────────────────────────
|
||||||
|
// ── PocketBase: authenticate (shared by all paths) ─────────────────
|
||||||
const raw = process.env.POCKETBASE_URL.replace(/\/$/, '');
|
const raw = process.env.POCKETBASE_URL.replace(/\/$/, '');
|
||||||
const apiBase = /\/api$/i.test(raw) ? raw : raw + '/api';
|
const apiBase = /\/api$/i.test(raw) ? raw : raw + '/api';
|
||||||
const coll = process.env.POCKETBASE_COLLECTION;
|
const coll = process.env.POCKETBASE_COLLECTION;
|
||||||
@@ -209,7 +210,7 @@ jobs:
|
|||||||
}
|
}
|
||||||
const token = JSON.parse(authRes.body).token;
|
const token = JSON.parse(authRes.body).token;
|
||||||
|
|
||||||
// ── PocketBase: find record by slug ────────────────────────────────
|
// ── PocketBase: find record by slug (shared by all paths) ──────────
|
||||||
const recordsUrl = apiBase + '/collections/' + encodeURIComponent(coll) + '/records';
|
const recordsUrl = apiBase + '/collections/' + encodeURIComponent(coll) + '/records';
|
||||||
const filter = "(slug='" + slug.replace(/'/g, "''") + "')";
|
const filter = "(slug='" + slug.replace(/'/g, "''") + "')";
|
||||||
const listRes = await request(recordsUrl + '?filter=' + encodeURIComponent(filter) + '&perPage=1', {
|
const listRes = await request(recordsUrl + '?filter=' + encodeURIComponent(filter) + '&perPage=1', {
|
||||||
@@ -227,172 +228,65 @@ jobs:
|
|||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── Shared helpers ─────────────────────────────────────────────────
|
|
||||||
|
|
||||||
// Key=value parser: handles unquoted and "quoted" values
|
|
||||||
function parseKVPairs(str) {
|
|
||||||
const fields = {};
|
|
||||||
let pos = 0;
|
|
||||||
while (pos < str.length) {
|
|
||||||
while (pos < str.length && /\s/.test(str[pos])) pos++;
|
|
||||||
if (pos >= str.length) break;
|
|
||||||
let keyStart = pos;
|
|
||||||
while (pos < str.length && str[pos] !== '=' && !/\s/.test(str[pos])) pos++;
|
|
||||||
const key = str.substring(keyStart, pos).trim();
|
|
||||||
if (!key || pos >= str.length || str[pos] !== '=') { pos++; continue; }
|
|
||||||
pos++;
|
|
||||||
let value;
|
|
||||||
if (pos < str.length && str[pos] === '"') {
|
|
||||||
pos++;
|
|
||||||
let valStart = pos;
|
|
||||||
while (pos < str.length && str[pos] !== '"') {
|
|
||||||
if (str[pos] === '\\') pos++;
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
value = str.substring(valStart, pos).replace(/\\"/g, '"');
|
|
||||||
if (pos < str.length) pos++;
|
|
||||||
} else {
|
|
||||||
let valStart = pos;
|
|
||||||
while (pos < str.length && !/\s/.test(str[pos])) pos++;
|
|
||||||
value = str.substring(valStart, pos);
|
|
||||||
}
|
|
||||||
fields[key] = value;
|
|
||||||
}
|
|
||||||
return fields;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Token parser for note commands: unquoted-word OR "quoted string"
|
|
||||||
function parseTokens(str) {
|
|
||||||
const tokens = [];
|
|
||||||
let pos = 0;
|
|
||||||
while (pos < str.length) {
|
|
||||||
while (pos < str.length && /\s/.test(str[pos])) pos++;
|
|
||||||
if (pos >= str.length) break;
|
|
||||||
if (str[pos] === '"') {
|
|
||||||
pos++;
|
|
||||||
let start = pos;
|
|
||||||
while (pos < str.length && str[pos] !== '"') {
|
|
||||||
if (str[pos] === '\\') pos++;
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
tokens.push(str.substring(start, pos).replace(/\\"/g, '"'));
|
|
||||||
if (pos < str.length) pos++;
|
|
||||||
} else {
|
|
||||||
let start = pos;
|
|
||||||
while (pos < str.length && !/\s/.test(str[pos])) pos++;
|
|
||||||
tokens.push(str.substring(start, pos));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return tokens;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read JSON blob from record (handles parsed objects and strings)
|
|
||||||
function readJsonBlob(val) {
|
|
||||||
if (Array.isArray(val)) return val;
|
|
||||||
try { return JSON.parse(val || '[]'); } catch (e) { return []; }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Frontend cache revalidation (silent, best-effort)
|
|
||||||
async function revalidate(s) {
|
|
||||||
const frontendUrl = process.env.FRONTEND_URL;
|
|
||||||
const secret = process.env.REVALIDATE_SECRET;
|
|
||||||
if (!frontendUrl || !secret) return;
|
|
||||||
try {
|
|
||||||
await request(frontendUrl.replace(/\/$/, '') + '/api/revalidate', {
|
|
||||||
method: 'POST',
|
|
||||||
headers: { 'Authorization': 'Bearer ' + secret, 'Content-Type': 'application/json' },
|
|
||||||
body: JSON.stringify({ tags: ['scripts', 'script-' + s] })
|
|
||||||
});
|
|
||||||
} catch (e) { console.warn('Revalidation skipped:', e.message); }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Format notes list for display
|
|
||||||
function formatNotesList(arr) {
|
|
||||||
if (arr.length === 0) return '*None*';
|
|
||||||
return arr.map(function (n, i) {
|
|
||||||
return (i + 1) + '. **`' + (n.type || '?') + '`**: ' + (n.text || '');
|
|
||||||
}).join('\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Format install methods list for display
|
|
||||||
function formatMethodsList(arr) {
|
|
||||||
if (arr.length === 0) return '*None*';
|
|
||||||
return arr.map(function (im, i) {
|
|
||||||
const r = im.resources || {};
|
|
||||||
const parts = [
|
|
||||||
(r.os || '?') + ' ' + (r.version || '?'),
|
|
||||||
(r.cpu != null ? r.cpu : '?') + 'C / ' + (r.ram != null ? r.ram : '?') + ' MB / ' + (r.hdd != null ? r.hdd : '?') + ' GB'
|
|
||||||
];
|
|
||||||
if (im.config_path) parts.push('config: `' + im.config_path + '`');
|
|
||||||
if (im.script) parts.push('script: `' + im.script + '`');
|
|
||||||
return (i + 1) + '. **`' + (im.type || '?') + '`** — ' + parts.join(', ');
|
|
||||||
}).join('\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
// ── Route: dispatch to subcommand handler ──────────────────────────
|
// ── Route: dispatch to subcommand handler ──────────────────────────
|
||||||
const infoMatch = rest.match(/^info$/i);
|
|
||||||
const noteMatch = rest.match(/^note\s+(list|add|edit|remove)\b/i);
|
const noteMatch = rest.match(/^note\s+(list|add|edit|remove)\b/i);
|
||||||
const methodMatch = rest.match(/^method\b/i);
|
const methodMatch = rest.match(/^method\b/i);
|
||||||
const setMatch = rest.match(/^set\s+(\S+)/i);
|
const setMatch = rest.match(/^set\s+(\S+)/i);
|
||||||
|
|
||||||
if (infoMatch) {
|
if (noteMatch) {
|
||||||
// ── INFO SUBCOMMAND ──────────────────────────────────────────────
|
// ── NOTE SUBCOMMAND (reads/writes notes_json on script record) ────
|
||||||
const notesArr = readJsonBlob(record.notes);
|
|
||||||
const methodsArr = readJsonBlob(record.install_methods);
|
|
||||||
|
|
||||||
const out = [];
|
|
||||||
out.push('ℹ️ **PocketBase Bot**: Info for **`' + slug + '`**\n');
|
|
||||||
|
|
||||||
out.push('**Basic info:**');
|
|
||||||
out.push('- **Name:** ' + (record.name || '—'));
|
|
||||||
out.push('- **Slug:** `' + slug + '`');
|
|
||||||
out.push('- **Port:** ' + (record.port != null ? '`' + record.port + '`' : '—'));
|
|
||||||
out.push('- **Updateable:** ' + (record.updateable ? 'Yes' : 'No'));
|
|
||||||
out.push('- **Privileged:** ' + (record.privileged ? 'Yes' : 'No'));
|
|
||||||
out.push('- **ARM:** ' + (record.has_arm ? 'Yes' : 'No'));
|
|
||||||
if (record.is_dev) out.push('- **Dev:** Yes');
|
|
||||||
if (record.is_disabled) out.push('- **Disabled:** Yes' + (record.disable_message ? ' — ' + record.disable_message : ''));
|
|
||||||
if (record.is_deleted) out.push('- **Deleted:** Yes' + (record.deleted_message ? ' — ' + record.deleted_message : ''));
|
|
||||||
out.push('');
|
|
||||||
|
|
||||||
out.push('**Links:**');
|
|
||||||
out.push('- **Website:** ' + (record.website || '—'));
|
|
||||||
out.push('- **Docs:** ' + (record.documentation || '—'));
|
|
||||||
out.push('- **Logo:** ' + (record.logo ? '[link](' + record.logo + ')' : '—'));
|
|
||||||
out.push('- **GitHub:** ' + (record.github || '—'));
|
|
||||||
if (record.config_path) out.push('- **Config:** `' + record.config_path + '`');
|
|
||||||
out.push('');
|
|
||||||
|
|
||||||
out.push('**Credentials:**');
|
|
||||||
out.push('- **User:** ' + (record.default_user || '—'));
|
|
||||||
out.push('- **Password:** ' + (record.default_passwd ? '*(set)*' : '—'));
|
|
||||||
out.push('');
|
|
||||||
|
|
||||||
out.push('**Install methods** (' + methodsArr.length + '):');
|
|
||||||
out.push(formatMethodsList(methodsArr));
|
|
||||||
out.push('');
|
|
||||||
|
|
||||||
out.push('**Notes** (' + notesArr.length + '):');
|
|
||||||
out.push(formatNotesList(notesArr));
|
|
||||||
|
|
||||||
await addReaction('+1');
|
|
||||||
await postComment(out.join('\n'));
|
|
||||||
|
|
||||||
} else if (noteMatch) {
|
|
||||||
// ── NOTE SUBCOMMAND ──────────────────────────────────────────────
|
|
||||||
const noteAction = noteMatch[1].toLowerCase();
|
const noteAction = noteMatch[1].toLowerCase();
|
||||||
const noteArgsStr = rest.substring(noteMatch[0].length).trim();
|
const noteArgsStr = rest.substring(noteMatch[0].length).trim();
|
||||||
let notesArr = readJsonBlob(record.notes);
|
|
||||||
|
|
||||||
async function patchNotes(arr) {
|
// Parse notes_json from the already-fetched script record
|
||||||
|
// PocketBase may return JSON fields as already-parsed objects
|
||||||
|
let notesArr = [];
|
||||||
|
try {
|
||||||
|
const rawNotes = record.notes_json;
|
||||||
|
notesArr = Array.isArray(rawNotes) ? rawNotes : JSON.parse(rawNotes || '[]');
|
||||||
|
} catch (e) { notesArr = []; }
|
||||||
|
|
||||||
|
// Token parser: unquoted-word OR "quoted string" (supports \" escapes)
|
||||||
|
function parseNoteTokens(str) {
|
||||||
|
const tokens = [];
|
||||||
|
let pos = 0;
|
||||||
|
while (pos < str.length) {
|
||||||
|
while (pos < str.length && /\s/.test(str[pos])) pos++;
|
||||||
|
if (pos >= str.length) break;
|
||||||
|
if (str[pos] === '"') {
|
||||||
|
pos++;
|
||||||
|
let start = pos;
|
||||||
|
while (pos < str.length && str[pos] !== '"') {
|
||||||
|
if (str[pos] === '\\') pos++;
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
tokens.push(str.substring(start, pos).replace(/\\"/g, '"'));
|
||||||
|
if (pos < str.length) pos++;
|
||||||
|
} else {
|
||||||
|
let start = pos;
|
||||||
|
while (pos < str.length && !/\s/.test(str[pos])) pos++;
|
||||||
|
tokens.push(str.substring(start, pos));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatNotesList(arr) {
|
||||||
|
if (arr.length === 0) return '*None*';
|
||||||
|
return arr.map(function (n, i) {
|
||||||
|
return (i + 1) + '. **`' + (n.type || '?') + '`**: ' + (n.text || '');
|
||||||
|
}).join('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
async function patchNotesJson(arr) {
|
||||||
const res = await request(recordsUrl + '/' + record.id, {
|
const res = await request(recordsUrl + '/' + record.id, {
|
||||||
method: 'PATCH',
|
method: 'PATCH',
|
||||||
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify({ notes: arr })
|
body: JSON.stringify({ notes_json: JSON.stringify(arr) })
|
||||||
});
|
});
|
||||||
if (!res.ok) {
|
if (!res.ok) {
|
||||||
await addReaction('-1');
|
await addReaction('-1');
|
||||||
await postComment('❌ **PocketBase Bot**: Failed to update notes:\n```\n' + res.body + '\n```');
|
await postComment('❌ **PocketBase Bot**: Failed to update `notes_json`:\n```\n' + res.body + '\n```');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -405,7 +299,7 @@ jobs:
|
|||||||
);
|
);
|
||||||
|
|
||||||
} else if (noteAction === 'add') {
|
} else if (noteAction === 'add') {
|
||||||
const tokens = parseTokens(noteArgsStr);
|
const tokens = parseNoteTokens(noteArgsStr);
|
||||||
if (tokens.length < 2) {
|
if (tokens.length < 2) {
|
||||||
await addReaction('-1');
|
await addReaction('-1');
|
||||||
await postComment(
|
await postComment(
|
||||||
@@ -417,8 +311,7 @@ jobs:
|
|||||||
const noteType = tokens[0].toLowerCase();
|
const noteType = tokens[0].toLowerCase();
|
||||||
const noteText = tokens.slice(1).join(' ');
|
const noteText = tokens.slice(1).join(' ');
|
||||||
notesArr.push({ type: noteType, text: noteText });
|
notesArr.push({ type: noteType, text: noteText });
|
||||||
await patchNotes(notesArr);
|
await patchNotesJson(notesArr);
|
||||||
await revalidate(slug);
|
|
||||||
await addReaction('+1');
|
await addReaction('+1');
|
||||||
await postComment(
|
await postComment(
|
||||||
'✅ **PocketBase Bot**: Added note to **`' + slug + '`**\n\n' +
|
'✅ **PocketBase Bot**: Added note to **`' + slug + '`**\n\n' +
|
||||||
@@ -428,7 +321,7 @@ jobs:
|
|||||||
);
|
);
|
||||||
|
|
||||||
} else if (noteAction === 'edit') {
|
} else if (noteAction === 'edit') {
|
||||||
const tokens = parseTokens(noteArgsStr);
|
const tokens = parseNoteTokens(noteArgsStr);
|
||||||
if (tokens.length < 3) {
|
if (tokens.length < 3) {
|
||||||
await addReaction('-1');
|
await addReaction('-1');
|
||||||
await postComment(
|
await postComment(
|
||||||
@@ -453,8 +346,7 @@ jobs:
|
|||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
notesArr[idx].text = newText;
|
notesArr[idx].text = newText;
|
||||||
await patchNotes(notesArr);
|
await patchNotesJson(notesArr);
|
||||||
await revalidate(slug);
|
|
||||||
await addReaction('+1');
|
await addReaction('+1');
|
||||||
await postComment(
|
await postComment(
|
||||||
'✅ **PocketBase Bot**: Edited note in **`' + slug + '`**\n\n' +
|
'✅ **PocketBase Bot**: Edited note in **`' + slug + '`**\n\n' +
|
||||||
@@ -465,7 +357,7 @@ jobs:
|
|||||||
);
|
);
|
||||||
|
|
||||||
} else if (noteAction === 'remove') {
|
} else if (noteAction === 'remove') {
|
||||||
const tokens = parseTokens(noteArgsStr);
|
const tokens = parseNoteTokens(noteArgsStr);
|
||||||
if (tokens.length < 2) {
|
if (tokens.length < 2) {
|
||||||
await addReaction('-1');
|
await addReaction('-1');
|
||||||
await postComment(
|
await postComment(
|
||||||
@@ -489,8 +381,7 @@ jobs:
|
|||||||
);
|
);
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
await patchNotes(notesArr);
|
await patchNotesJson(notesArr);
|
||||||
await revalidate(slug);
|
|
||||||
await addReaction('+1');
|
await addReaction('+1');
|
||||||
await postComment(
|
await postComment(
|
||||||
'✅ **PocketBase Bot**: Removed note from **`' + slug + '`**\n\n' +
|
'✅ **PocketBase Bot**: Removed note from **`' + slug + '`**\n\n' +
|
||||||
@@ -501,36 +392,36 @@ jobs:
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else if (methodMatch) {
|
} else if (methodMatch) {
|
||||||
// ── METHOD SUBCOMMAND ────────────────────────────────────────────
|
// ── METHOD SUBCOMMAND (reads/writes install_methods_json on script record) ──
|
||||||
const methodArgs = rest.replace(/^method\s*/i, '').trim();
|
const methodArgs = rest.replace(/^method\s*/i, '').trim();
|
||||||
const methodListMode = !methodArgs || methodArgs.toLowerCase() === 'list';
|
const methodListMode = !methodArgs || methodArgs.toLowerCase() === 'list';
|
||||||
let methodsArr = readJsonBlob(record.install_methods);
|
|
||||||
|
|
||||||
// Method field classification
|
// Parse install_methods_json from the already-fetched script record
|
||||||
const RESOURCE_KEYS = { cpu: 'number', ram: 'number', hdd: 'number', os: 'string', version: 'string' };
|
// PocketBase may return JSON fields as already-parsed objects
|
||||||
const METHOD_KEYS = { config_path: 'string', script: 'string' };
|
let methodsArr = [];
|
||||||
const ALL_METHOD_KEYS = Object.assign({}, RESOURCE_KEYS, METHOD_KEYS);
|
try {
|
||||||
|
const rawMethods = record.install_methods_json;
|
||||||
|
methodsArr = Array.isArray(rawMethods) ? rawMethods : JSON.parse(rawMethods || '[]');
|
||||||
|
} catch (e) { methodsArr = []; }
|
||||||
|
|
||||||
function applyMethodChanges(method, parsed) {
|
function formatMethodsList(arr) {
|
||||||
if (!method.resources) method.resources = {};
|
if (arr.length === 0) return '*None*';
|
||||||
for (const [k, v] of Object.entries(parsed)) {
|
return arr.map(function (im, i) {
|
||||||
if (RESOURCE_KEYS[k]) {
|
const r = im.resources || {};
|
||||||
method.resources[k] = RESOURCE_KEYS[k] === 'number' ? parseInt(v, 10) : v;
|
return (i + 1) + '. **`' + (im.type || '?') + '`** — CPU: `' + (r.cpu != null ? r.cpu : '?') +
|
||||||
} else if (METHOD_KEYS[k]) {
|
'` · RAM: `' + (r.ram != null ? r.ram : '?') + ' MB` · HDD: `' + (r.hdd != null ? r.hdd : '?') + ' GB`';
|
||||||
method[k] = v === '' ? null : v;
|
}).join('\n');
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function patchMethods(arr) {
|
async function patchInstallMethodsJson(arr) {
|
||||||
const res = await request(recordsUrl + '/' + record.id, {
|
const res = await request(recordsUrl + '/' + record.id, {
|
||||||
method: 'PATCH',
|
method: 'PATCH',
|
||||||
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify({ install_methods: arr })
|
body: JSON.stringify({ install_methods_json: JSON.stringify(arr) })
|
||||||
});
|
});
|
||||||
if (!res.ok) {
|
if (!res.ok) {
|
||||||
await addReaction('-1');
|
await addReaction('-1');
|
||||||
await postComment('❌ **PocketBase Bot**: Failed to update install methods:\n```\n' + res.body + '\n```');
|
await postComment('❌ **PocketBase Bot**: Failed to update `install_methods_json`:\n```\n' + res.body + '\n```');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -541,122 +432,70 @@ jobs:
|
|||||||
'ℹ️ **PocketBase Bot**: Install methods for **`' + slug + '`** (' + methodsArr.length + ' total)\n\n' +
|
'ℹ️ **PocketBase Bot**: Install methods for **`' + slug + '`** (' + methodsArr.length + ' total)\n\n' +
|
||||||
formatMethodsList(methodsArr)
|
formatMethodsList(methodsArr)
|
||||||
);
|
);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Check for add / remove sub-actions
|
// Parse: <type> cpu=N ram=N hdd=N
|
||||||
const addMatch = methodArgs.match(/^add\s+(\S+)(?:\s+(.+))?$/i);
|
const methodParts = methodArgs.match(/^(\S+)\s+(.+)$/);
|
||||||
const removeMatch = methodArgs.match(/^remove\s+(\S+)$/i);
|
if (!methodParts) {
|
||||||
|
await addReaction('-1');
|
||||||
if (addMatch) {
|
|
||||||
// ── METHOD ADD ───────────────────────────────────────────────
|
|
||||||
const newType = addMatch[1];
|
|
||||||
if (methodsArr.some(function (im) { return (im.type || '').toLowerCase() === newType.toLowerCase(); })) {
|
|
||||||
await addReaction('-1');
|
|
||||||
await postComment('❌ **PocketBase Bot**: Install method `' + newType + '` already exists for `' + slug + '`.\n\nUse `/pocketbase ' + slug + ' method list` to see all methods.');
|
|
||||||
process.exit(0);
|
|
||||||
}
|
|
||||||
const newMethod = { type: newType, resources: { cpu: 1, ram: 512, hdd: 4, os: 'debian', version: '13' } };
|
|
||||||
if (addMatch[2]) {
|
|
||||||
const parsed = parseKVPairs(addMatch[2]);
|
|
||||||
const unknown = Object.keys(parsed).filter(function (k) { return !ALL_METHOD_KEYS[k]; });
|
|
||||||
if (unknown.length > 0) {
|
|
||||||
await addReaction('-1');
|
|
||||||
await postComment('❌ **PocketBase Bot**: Unknown method field(s): `' + unknown.join('`, `') + '`\n\n**Allowed:** `' + Object.keys(ALL_METHOD_KEYS).join('`, `') + '`');
|
|
||||||
process.exit(0);
|
|
||||||
}
|
|
||||||
applyMethodChanges(newMethod, parsed);
|
|
||||||
}
|
|
||||||
methodsArr.push(newMethod);
|
|
||||||
await patchMethods(methodsArr);
|
|
||||||
await revalidate(slug);
|
|
||||||
await addReaction('+1');
|
|
||||||
await postComment(
|
await postComment(
|
||||||
'✅ **PocketBase Bot**: Added install method **`' + newType + '`** to **`' + slug + '`**\n\n' +
|
'❌ **PocketBase Bot**: Invalid `method` syntax.\n\n' +
|
||||||
formatMethodsList([newMethod]) + '\n\n' +
|
'**Usage:**\n```\n/pocketbase ' + slug + ' method list\n/pocketbase ' + slug + ' method <type> hdd=10\n/pocketbase ' + slug + ' method <type> cpu=4 ram=2048 hdd=20\n```'
|
||||||
'*Executed by @' + actor + '*'
|
|
||||||
);
|
|
||||||
|
|
||||||
} else if (removeMatch) {
|
|
||||||
// ── METHOD REMOVE ────────────────────────────────────────────
|
|
||||||
const removeType = removeMatch[1].toLowerCase();
|
|
||||||
const removed = methodsArr.filter(function (im) { return (im.type || '').toLowerCase() === removeType; });
|
|
||||||
if (removed.length === 0) {
|
|
||||||
await addReaction('-1');
|
|
||||||
const available = methodsArr.map(function (im) { return im.type || '?'; });
|
|
||||||
await postComment('❌ **PocketBase Bot**: No install method `' + removeType + '` found.\n\n**Available:** `' + (available.length ? available.join('`, `') : '(none)') + '`');
|
|
||||||
process.exit(0);
|
|
||||||
}
|
|
||||||
methodsArr = methodsArr.filter(function (im) { return (im.type || '').toLowerCase() !== removeType; });
|
|
||||||
await patchMethods(methodsArr);
|
|
||||||
await revalidate(slug);
|
|
||||||
await addReaction('+1');
|
|
||||||
await postComment(
|
|
||||||
'✅ **PocketBase Bot**: Removed install method **`' + removed[0].type + '`** from **`' + slug + '`**\n\n' +
|
|
||||||
'*Executed by @' + actor + '*'
|
|
||||||
);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// ── METHOD EDIT ──────────────────────────────────────────────
|
|
||||||
const editParts = methodArgs.match(/^(\S+)\s+(.+)$/);
|
|
||||||
if (!editParts) {
|
|
||||||
await addReaction('-1');
|
|
||||||
await postComment(
|
|
||||||
'❌ **PocketBase Bot**: Invalid `method` syntax.\n\n' +
|
|
||||||
'**Usage:**\n```\n/pocketbase ' + slug + ' method list\n' +
|
|
||||||
'/pocketbase ' + slug + ' method <type> cpu=4 ram=2048 hdd=20\n' +
|
|
||||||
'/pocketbase ' + slug + ' method <type> config_path="/opt/app/.env"\n' +
|
|
||||||
'/pocketbase ' + slug + ' method add <type> cpu=2 ram=2048 hdd=8\n' +
|
|
||||||
'/pocketbase ' + slug + ' method remove <type>\n```'
|
|
||||||
);
|
|
||||||
process.exit(0);
|
|
||||||
}
|
|
||||||
const targetType = editParts[1].toLowerCase();
|
|
||||||
const parsed = parseKVPairs(editParts[2]);
|
|
||||||
|
|
||||||
const unknown = Object.keys(parsed).filter(function (k) { return !ALL_METHOD_KEYS[k]; });
|
|
||||||
if (unknown.length > 0) {
|
|
||||||
await addReaction('-1');
|
|
||||||
await postComment('❌ **PocketBase Bot**: Unknown method field(s): `' + unknown.join('`, `') + '`\n\n**Allowed:** `' + Object.keys(ALL_METHOD_KEYS).join('`, `') + '`');
|
|
||||||
process.exit(0);
|
|
||||||
}
|
|
||||||
if (Object.keys(parsed).length === 0) {
|
|
||||||
await addReaction('-1');
|
|
||||||
await postComment('❌ **PocketBase Bot**: No valid `key=value` pairs found.\n\n**Allowed:** `' + Object.keys(ALL_METHOD_KEYS).join('`, `') + '`');
|
|
||||||
process.exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
const idx = methodsArr.findIndex(function (im) { return (im.type || '').toLowerCase() === targetType; });
|
|
||||||
if (idx === -1) {
|
|
||||||
await addReaction('-1');
|
|
||||||
const available = methodsArr.map(function (im) { return im.type || '?'; });
|
|
||||||
await postComment(
|
|
||||||
'❌ **PocketBase Bot**: No install method `' + targetType + '` found for `' + slug + '`.\n\n' +
|
|
||||||
'**Available:** `' + (available.length ? available.join('`, `') : '(none)') + '`\n\n' +
|
|
||||||
'Use `/pocketbase ' + slug + ' method list` to see all methods.'
|
|
||||||
);
|
|
||||||
process.exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
applyMethodChanges(methodsArr[idx], parsed);
|
|
||||||
await patchMethods(methodsArr);
|
|
||||||
await revalidate(slug);
|
|
||||||
|
|
||||||
const changesLines = Object.entries(parsed)
|
|
||||||
.map(function ([k, v]) {
|
|
||||||
const unit = k === 'ram' ? ' MB' : k === 'hdd' ? ' GB' : '';
|
|
||||||
return '- `' + k + '` → `' + v + unit + '`';
|
|
||||||
}).join('\n');
|
|
||||||
await addReaction('+1');
|
|
||||||
await postComment(
|
|
||||||
'✅ **PocketBase Bot**: Updated install method **`' + methodsArr[idx].type + '`** for **`' + slug + '`**\n\n' +
|
|
||||||
'**Changes applied:**\n' + changesLines + '\n\n' +
|
|
||||||
'*Executed by @' + actor + '*'
|
|
||||||
);
|
);
|
||||||
|
process.exit(0);
|
||||||
}
|
}
|
||||||
|
const targetType = methodParts[1].toLowerCase();
|
||||||
|
const resourcesStr = methodParts[2];
|
||||||
|
|
||||||
|
// Parse resource fields (only cpu/ram/hdd allowed)
|
||||||
|
const RESOURCE_FIELDS = { cpu: true, ram: true, hdd: true };
|
||||||
|
const resourceChanges = {};
|
||||||
|
const rePairs = /([a-z]+)=(\d+)/gi;
|
||||||
|
let m;
|
||||||
|
while ((m = rePairs.exec(resourcesStr)) !== null) {
|
||||||
|
const key = m[1].toLowerCase();
|
||||||
|
if (RESOURCE_FIELDS[key]) resourceChanges[key] = parseInt(m[2], 10);
|
||||||
|
}
|
||||||
|
if (Object.keys(resourceChanges).length === 0) {
|
||||||
|
await addReaction('-1');
|
||||||
|
await postComment('❌ **PocketBase Bot**: No valid resource fields found. Use `cpu=N`, `ram=N`, `hdd=N`.');
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find matching method by type name (case-insensitive)
|
||||||
|
const idx = methodsArr.findIndex(function (im) {
|
||||||
|
return (im.type || '').toLowerCase() === targetType;
|
||||||
|
});
|
||||||
|
if (idx === -1) {
|
||||||
|
await addReaction('-1');
|
||||||
|
const availableTypes = methodsArr.map(function (im) { return im.type || '?'; });
|
||||||
|
await postComment(
|
||||||
|
'❌ **PocketBase Bot**: No install method with type `' + targetType + '` found for `' + slug + '`.\n\n' +
|
||||||
|
'**Available types:** `' + (availableTypes.length ? availableTypes.join('`, `') : '(none)') + '`\n\n' +
|
||||||
|
'Use `/pocketbase ' + slug + ' method list` to see all methods.'
|
||||||
|
);
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!methodsArr[idx].resources) methodsArr[idx].resources = {};
|
||||||
|
if (resourceChanges.cpu != null) methodsArr[idx].resources.cpu = resourceChanges.cpu;
|
||||||
|
if (resourceChanges.ram != null) methodsArr[idx].resources.ram = resourceChanges.ram;
|
||||||
|
if (resourceChanges.hdd != null) methodsArr[idx].resources.hdd = resourceChanges.hdd;
|
||||||
|
|
||||||
|
await patchInstallMethodsJson(methodsArr);
|
||||||
|
|
||||||
|
const changesLines = Object.entries(resourceChanges)
|
||||||
|
.map(function ([k, v]) { return '- `' + k + '` → `' + v + (k === 'ram' ? ' MB' : k === 'hdd' ? ' GB' : '') + '`'; })
|
||||||
|
.join('\n');
|
||||||
|
await addReaction('+1');
|
||||||
|
await postComment(
|
||||||
|
'✅ **PocketBase Bot**: Updated install method **`' + methodsArr[idx].type + '`** for **`' + slug + '`**\n\n' +
|
||||||
|
'**Changes applied:**\n' + changesLines + '\n\n' +
|
||||||
|
'*Executed by @' + actor + '*'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (setMatch) {
|
} else if (setMatch) {
|
||||||
// ── SET SUBCOMMAND (value from code block) ───────────────────────
|
// ── SET SUBCOMMAND (multi-line / HTML / special chars via code block) ──
|
||||||
const fieldName = setMatch[1].toLowerCase();
|
const fieldName = setMatch[1].toLowerCase();
|
||||||
const SET_ALLOWED = {
|
const SET_ALLOWED = {
|
||||||
name: 'string', description: 'string', logo: 'string',
|
name: 'string', description: 'string', logo: 'string',
|
||||||
@@ -692,7 +531,6 @@ jobs:
|
|||||||
await postComment('❌ **PocketBase Bot**: PATCH failed for `' + slug + '`:\n```\n' + setPatchRes.body + '\n```');
|
await postComment('❌ **PocketBase Bot**: PATCH failed for `' + slug + '`:\n```\n' + setPatchRes.body + '\n```');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
await revalidate(slug);
|
|
||||||
const preview = codeBlockValue.length > 300 ? codeBlockValue.substring(0, 300) + '…' : codeBlockValue;
|
const preview = codeBlockValue.length > 300 ? codeBlockValue.substring(0, 300) + '…' : codeBlockValue;
|
||||||
await addReaction('+1');
|
await addReaction('+1');
|
||||||
await postComment(
|
await postComment(
|
||||||
@@ -703,6 +541,11 @@ jobs:
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
// ── FIELD=VALUE PATH ─────────────────────────────────────────────
|
// ── FIELD=VALUE PATH ─────────────────────────────────────────────
|
||||||
|
const fieldsStr = rest;
|
||||||
|
|
||||||
|
// Skipped: slug, script_created/updated, created (auto), categories/
|
||||||
|
// install_methods/notes/type (relations), github_data/install_methods_json/
|
||||||
|
// notes_json (auto-generated), execute_in (select relation), last_update_commit (auto)
|
||||||
const ALLOWED_FIELDS = {
|
const ALLOWED_FIELDS = {
|
||||||
name: 'string',
|
name: 'string',
|
||||||
description: 'string',
|
description: 'string',
|
||||||
@@ -725,7 +568,39 @@ jobs:
|
|||||||
deleted_message: 'string',
|
deleted_message: 'string',
|
||||||
};
|
};
|
||||||
|
|
||||||
const parsedFields = parseKVPairs(rest);
|
// Field=value parser (handles quoted values and empty=null)
|
||||||
|
function parseFields(str) {
|
||||||
|
const fields = {};
|
||||||
|
let pos = 0;
|
||||||
|
while (pos < str.length) {
|
||||||
|
while (pos < str.length && /\s/.test(str[pos])) pos++;
|
||||||
|
if (pos >= str.length) break;
|
||||||
|
let keyStart = pos;
|
||||||
|
while (pos < str.length && str[pos] !== '=' && !/\s/.test(str[pos])) pos++;
|
||||||
|
const key = str.substring(keyStart, pos).trim();
|
||||||
|
if (!key || pos >= str.length || str[pos] !== '=') { pos++; continue; }
|
||||||
|
pos++;
|
||||||
|
let value;
|
||||||
|
if (str[pos] === '"') {
|
||||||
|
pos++;
|
||||||
|
let valStart = pos;
|
||||||
|
while (pos < str.length && str[pos] !== '"') {
|
||||||
|
if (str[pos] === '\\') pos++;
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
value = str.substring(valStart, pos).replace(/\\"/g, '"');
|
||||||
|
if (pos < str.length) pos++;
|
||||||
|
} else {
|
||||||
|
let valStart = pos;
|
||||||
|
while (pos < str.length && !/\s/.test(str[pos])) pos++;
|
||||||
|
value = str.substring(valStart, pos);
|
||||||
|
}
|
||||||
|
fields[key] = value;
|
||||||
|
}
|
||||||
|
return fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
const parsedFields = parseFields(fieldsStr);
|
||||||
|
|
||||||
const unknownFields = Object.keys(parsedFields).filter(function (f) { return !ALLOWED_FIELDS[f]; });
|
const unknownFields = Object.keys(parsedFields).filter(function (f) { return !ALLOWED_FIELDS[f]; });
|
||||||
if (unknownFields.length > 0) {
|
if (unknownFields.length > 0) {
|
||||||
@@ -780,7 +655,6 @@ jobs:
|
|||||||
await postComment('❌ **PocketBase Bot**: PATCH failed for `' + slug + '`:\n```\n' + patchRes.body + '\n```');
|
await postComment('❌ **PocketBase Bot**: PATCH failed for `' + slug + '`:\n```\n' + patchRes.body + '\n```');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
await revalidate(slug);
|
|
||||||
await addReaction('+1');
|
await addReaction('+1');
|
||||||
const changesLines = Object.entries(payload)
|
const changesLines = Object.entries(payload)
|
||||||
.map(function ([k, v]) { return '- `' + k + '` → `' + JSON.stringify(v) + '`'; })
|
.map(function ([k, v]) { return '- `' + k + '` → `' + JSON.stringify(v) + '`'; })
|
||||||
|
|||||||
1
.github/workflows/push-json-to-pocketbase.yml
generated
vendored
1
.github/workflows/push-json-to-pocketbase.yml
generated
vendored
@@ -170,6 +170,7 @@ jobs:
|
|||||||
website: data.website,
|
website: data.website,
|
||||||
logo: data.logo,
|
logo: data.logo,
|
||||||
description: data.description,
|
description: data.description,
|
||||||
|
config_path: data.config_path,
|
||||||
default_user: (data.default_credentials && data.default_credentials.username) || data.default_user || null,
|
default_user: (data.default_credentials && data.default_credentials.username) || data.default_user || null,
|
||||||
default_passwd: (data.default_credentials && data.default_credentials.password) || data.default_passwd || null,
|
default_passwd: (data.default_credentials && data.default_credentials.password) || data.default_passwd || null,
|
||||||
is_dev: false
|
is_dev: false
|
||||||
|
|||||||
43
.gitignore
vendored
43
.gitignore
vendored
@@ -2,14 +2,32 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
|
||||||
# Editor & IDE files
|
# Editor & IDE files (keeping .vscode settings but ignoring unnecessary metadata)
|
||||||
!.vscode/
|
!.vscode/
|
||||||
.vscode/*.workspace
|
.vscode/*.workspace
|
||||||
.vscode/*.tmp
|
.vscode/*.tmp
|
||||||
|
|
||||||
# Log files
|
# Log and Cache files
|
||||||
logs/
|
logs/
|
||||||
*.log
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Python-specific exclusions
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
*.pyd
|
||||||
|
*.venv/
|
||||||
|
venv/
|
||||||
|
env/
|
||||||
|
*.env
|
||||||
|
|
||||||
|
# API and Backend specific exclusions
|
||||||
|
api/.env
|
||||||
|
api/__pycache__/
|
||||||
|
api/*.sqlite3
|
||||||
|
|
||||||
# Install scripts and temporary files
|
# Install scripts and temporary files
|
||||||
install/tmp/
|
install/tmp/
|
||||||
@@ -23,7 +41,7 @@ vm/*.vmdk
|
|||||||
vm/*.iso
|
vm/*.iso
|
||||||
vm/*.bak
|
vm/*.bak
|
||||||
|
|
||||||
# Miscellaneous temporary files
|
# Miscellaneous temporary or unnecessary files
|
||||||
*.bak
|
*.bak
|
||||||
*.swp
|
*.swp
|
||||||
*.swo
|
*.swo
|
||||||
@@ -31,7 +49,22 @@ vm/*.bak
|
|||||||
*.tmp
|
*.tmp
|
||||||
*.backup
|
*.backup
|
||||||
|
|
||||||
# JSON temporary files
|
# JSON configuration backups
|
||||||
json/
|
|
||||||
json/*.bak
|
json/*.bak
|
||||||
json/*.tmp
|
json/*.tmp
|
||||||
|
json/.vscode/
|
||||||
|
|
||||||
|
# Ignore compiled binaries or packaged artifacts
|
||||||
|
*.exe
|
||||||
|
*.dll
|
||||||
|
*.bin
|
||||||
|
*.deb
|
||||||
|
*.rpm
|
||||||
|
*.tar.gz
|
||||||
|
*.zip
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Ignore repository metadata or Git itself
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.vscode/settings.json
|
||||||
|
|||||||
16
.vscode/.editorconfig
generated
vendored
Normal file
16
.vscode/.editorconfig
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
; editorconfig.org
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
continuation_indent_size = 2
|
||||||
|
end_of_line = lf
|
||||||
|
indent_size = 2
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
max_line_length = 120
|
||||||
|
tab_width = 2
|
||||||
|
; trim_trailing_whitespace = true ; disabled until files are cleaned up
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
0
.shellcheckrc → .vscode/.shellcheckrc
generated
vendored
0
.shellcheckrc → .vscode/.shellcheckrc
generated
vendored
954
CHANGELOG.md
954
CHANGELOG.md
@@ -26,15 +26,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -54,14 +45,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><h4>April (18 entries)</h4></summary>
|
<summary><h4>March (28 entries)</h4></summary>
|
||||||
|
|
||||||
[View April 2026 Changelog](.github/changelogs/2026/04.md)
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h4>March (31 entries)</h4></summary>
|
|
||||||
|
|
||||||
[View March 2026 Changelog](.github/changelogs/2026/03.md)
|
[View March 2026 Changelog](.github/changelogs/2026/03.md)
|
||||||
|
|
||||||
@@ -445,393 +429,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## 2026-04-23
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- mealie: start.sh missing after failed update [@MickLesk](https://github.com/MickLesk) ([#13958](https://github.com/community-scripts/ProxmoxVE/pull/13958))
|
|
||||||
- twingate-connector: perform real apt upgrade during update flow [@MickLesk](https://github.com/MickLesk) ([#13959](https://github.com/community-scripts/ProxmoxVE/pull/13959))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Update scripts to match standard [@tremor021](https://github.com/tremor021) ([#13956](https://github.com/community-scripts/ProxmoxVE/pull/13956))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- Revert "core: Add PHS_VERBOSE env var to skip verbose mode prompts" [@MickLesk](https://github.com/MickLesk) ([#13963](https://github.com/community-scripts/ProxmoxVE/pull/13963))
|
|
||||||
- Revert "core: hotfix - prefer silent mode on PHS env conflict" [@MickLesk](https://github.com/MickLesk) ([#13962](https://github.com/community-scripts/ProxmoxVE/pull/13962))
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- tools.func: upgrade Node.js minor/patch on same major version [@MickLesk](https://github.com/MickLesk) ([#13957](https://github.com/community-scripts/ProxmoxVE/pull/13957))
|
|
||||||
- core: hotfix - prefer silent mode on PHS env conflict [@MickLesk](https://github.com/MickLesk) ([#13951](https://github.com/community-scripts/ProxmoxVE/pull/13951))
|
|
||||||
|
|
||||||
## 2026-04-22
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Dashy ([#13817](https://github.com/community-scripts/ProxmoxVE/pull/13817))
|
|
||||||
- Mini-QR ([#13902](https://github.com/community-scripts/ProxmoxVE/pull/13902))
|
|
||||||
- ownfoil ([#13904](https://github.com/community-scripts/ProxmoxVE/pull/13904))
|
|
||||||
- ERPNext ([#13921](https://github.com/community-scripts/ProxmoxVE/pull/13921))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- add --clear to uv venv in update_script() to prevent interactive prompt [@MickLesk](https://github.com/MickLesk) ([#13926](https://github.com/community-scripts/ProxmoxVE/pull/13926))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: Add PHS_VERBOSE env var to skip verbose mode prompts [@gormanity](https://github.com/gormanity) ([#13797](https://github.com/community-scripts/ProxmoxVE/pull/13797))
|
|
||||||
|
|
||||||
## 2026-04-21
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- gogs ([#13896](https://github.com/community-scripts/ProxmoxVE/pull/13896))
|
|
||||||
- anchor ([#13895](https://github.com/community-scripts/ProxmoxVE/pull/13895))
|
|
||||||
- minthcm ([#13903](https://github.com/community-scripts/ProxmoxVE/pull/13903))
|
|
||||||
- foldergram ([#13900](https://github.com/community-scripts/ProxmoxVE/pull/13900))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- OpenCloud: Pin version to 6.1.0 [@vhsdream](https://github.com/vhsdream) ([#13890](https://github.com/community-scripts/ProxmoxVE/pull/13890))
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Domain-Locker: Update dependencies [@tremor021](https://github.com/tremor021) ([#13901](https://github.com/community-scripts/ProxmoxVE/pull/13901))
|
|
||||||
- homelable: fix install failure by correcting password-reset chmod target [@Copilot](https://github.com/Copilot) ([#13894](https://github.com/community-scripts/ProxmoxVE/pull/13894))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- FileFlows: Update dependencies [@tremor021](https://github.com/tremor021) ([#13917](https://github.com/community-scripts/ProxmoxVE/pull/13917))
|
|
||||||
|
|
||||||
## 2026-04-20
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- WhoDB ([#13880](https://github.com/community-scripts/ProxmoxVE/pull/13880))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- pangolin: create migration tables before data transfer to prevent role loss [@MickLesk](https://github.com/MickLesk) ([#13874](https://github.com/community-scripts/ProxmoxVE/pull/13874))
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Pangolin: pre-apply schema migrations to prevent data loss [@MickLesk](https://github.com/MickLesk) ([#13861](https://github.com/community-scripts/ProxmoxVE/pull/13861))
|
|
||||||
- ActualBudget: change migration messages to warnings [@MickLesk](https://github.com/MickLesk) ([#13860](https://github.com/community-scripts/ProxmoxVE/pull/13860))
|
|
||||||
- slskd: migrate config keys for 0.25.0 breaking change [@MickLesk](https://github.com/MickLesk) ([#13862](https://github.com/community-scripts/ProxmoxVE/pull/13862))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Wanderer: add pocketbase CLI wrapper with env [@MickLesk](https://github.com/MickLesk) ([#13863](https://github.com/community-scripts/ProxmoxVE/pull/13863))
|
|
||||||
- feat(homelable): add password reset utility script [@davidsoncabista](https://github.com/davidsoncabista) ([#13798](https://github.com/community-scripts/ProxmoxVE/pull/13798))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Several Scripts: Bump NodeJS to align Node.js versions with upstream for 5 scripts [@MickLesk](https://github.com/MickLesk) ([#13875](https://github.com/community-scripts/ProxmoxVE/pull/13875))
|
|
||||||
- Refactor: PMG Post Install [@MickLesk](https://github.com/MickLesk) ([#13693](https://github.com/community-scripts/ProxmoxVE/pull/13693))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core: detect Perl breakage after LXC stack upgrade and improve storage validation [@MickLesk](https://github.com/MickLesk) ([#13879](https://github.com/community-scripts/ProxmoxVE/pull/13879))
|
|
||||||
|
|
||||||
## 2026-04-19
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- nametag ([#13849](https://github.com/community-scripts/ProxmoxVE/pull/13849))
|
|
||||||
|
|
||||||
## 2026-04-18
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Dagu ([#13830](https://github.com/community-scripts/ProxmoxVE/pull/13830))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- BabyBuddy: set DJANGO_SETTINGS_MODULE before migrate in update [@MickLesk](https://github.com/MickLesk) ([#13836](https://github.com/community-scripts/ProxmoxVE/pull/13836))
|
|
||||||
- litellm: add prisma generate and use venv binary directly [@MickLesk](https://github.com/MickLesk) ([#13835](https://github.com/community-scripts/ProxmoxVE/pull/13835))
|
|
||||||
- yamtrack: add missing nginx.conf sed edits to update script [@MickLesk](https://github.com/MickLesk) ([#13834](https://github.com/community-scripts/ProxmoxVE/pull/13834))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- SparkyFitness Garmin Microservice: fix update function [@tomfrenzel](https://github.com/tomfrenzel) ([#13824](https://github.com/community-scripts/ProxmoxVE/pull/13824))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Clean-Orphan-LVM: check all cluster nodes for VM/CT configs [@MickLesk](https://github.com/MickLesk) ([#13837](https://github.com/community-scripts/ProxmoxVE/pull/13837))
|
|
||||||
|
|
||||||
## 2026-04-17
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- step-ca ([#13775](https://github.com/community-scripts/ProxmoxVE/pull/13775))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core: pin IGC version to compute-runtime compatible tag (Intel GPU) [@MickLesk](https://github.com/MickLesk) ([#13814](https://github.com/community-scripts/ProxmoxVE/pull/13814))
|
|
||||||
- Fix for bambuddy community script update [@abbasegbeyemi](https://github.com/abbasegbeyemi) ([#13816](https://github.com/community-scripts/ProxmoxVE/pull/13816))
|
|
||||||
- Umami: Fix update procedure [@tremor021](https://github.com/tremor021) ([#13807](https://github.com/community-scripts/ProxmoxVE/pull/13807))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core: sanitize mount_fs input — strip spaces and trailing commas [@MickLesk](https://github.com/MickLesk) ([#13806](https://github.com/community-scripts/ProxmoxVE/pull/13806))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- core: fix some pct create issues (telemetry) + cleanup [@MickLesk](https://github.com/MickLesk) ([#13810](https://github.com/community-scripts/ProxmoxVE/pull/13810))
|
|
||||||
|
|
||||||
## 2026-04-16
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Add pnpm as a dependency to ghost-cli install [@YourFavoriteKyle](https://github.com/YourFavoriteKyle) ([#13789](https://github.com/community-scripts/ProxmoxVE/pull/13789))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: wire ENABLE_MKNOD and ALLOW_MOUNT_FS into LXC features [@MickLesk](https://github.com/MickLesk) ([#13796](https://github.com/community-scripts/ProxmoxVE/pull/13796))
|
|
||||||
|
|
||||||
## 2026-04-15
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- iGotify ([#13773](https://github.com/community-scripts/ProxmoxVE/pull/13773))
|
|
||||||
- GitHub-Runner ([#13709](https://github.com/community-scripts/ProxmoxVE/pull/13709))
|
|
||||||
- Revert "Remove low-install-count CT scripts and installers (#13570)" [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13752](https://github.com/community-scripts/ProxmoxVE/pull/13752))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- [alpine-nextcloud] Update Nginx MIME types to support .mjs files [@GuiltyFox](https://github.com/GuiltyFox) ([#13771](https://github.com/community-scripts/ProxmoxVE/pull/13771))
|
|
||||||
- Domain Monitor: Fix file ownership after update [@tremor021](https://github.com/tremor021) ([#13759](https://github.com/community-scripts/ProxmoxVE/pull/13759))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- Reitti: refactor scripts for v4 - remove RabbitMQ and Photon [@MickLesk](https://github.com/MickLesk) ([#13728](https://github.com/community-scripts/ProxmoxVE/pull/13728))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Semaphore: add BoltDB to SQLite migration [@tremor021](https://github.com/tremor021) ([#13779](https://github.com/community-scripts/ProxmoxVE/pull/13779))
|
|
||||||
|
|
||||||
### 📚 Documentation
|
|
||||||
|
|
||||||
- cleanup: remove docs/, update README & CONTRIBUTING, fix repo config [@MickLesk](https://github.com/MickLesk) ([#13770](https://github.com/community-scripts/ProxmoxVE/pull/13770))
|
|
||||||
|
|
||||||
## 2026-04-14
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- Immich: Pin photo-processing library revisions [@vhsdream](https://github.com/vhsdream) ([#13748](https://github.com/community-scripts/ProxmoxVE/pull/13748))
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- BentoPDF: Nginx fixes [@tremor021](https://github.com/tremor021) ([#13741](https://github.com/community-scripts/ProxmoxVE/pull/13741))
|
|
||||||
- Zerobyte: add git to dependencies to fix bun install failure [@Copilot](https://github.com/Copilot) ([#13721](https://github.com/community-scripts/ProxmoxVE/pull/13721))
|
|
||||||
- alpine-nextcloud-install: do not use deprecated nginx config [@AlexanderStein](https://github.com/AlexanderStein) ([#13726](https://github.com/community-scripts/ProxmoxVE/pull/13726))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Mealie: support v3.15+ Nuxt 4 migration [@MickLesk](https://github.com/MickLesk) ([#13731](https://github.com/community-scripts/ProxmoxVE/pull/13731))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Lyrion: correct service name and version file in update script [@MickLesk](https://github.com/MickLesk) ([#13734](https://github.com/community-scripts/ProxmoxVE/pull/13734))
|
|
||||||
- Changedetection: move env vars from service file to .env [@tremor021](https://github.com/tremor021) ([#13732](https://github.com/community-scripts/ProxmoxVE/pull/13732))
|
|
||||||
|
|
||||||
## 2026-04-13
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Slskd: Remove stale Soularr lock file on startup and redirect logs to stderr [@MickLesk](https://github.com/MickLesk) ([#13669](https://github.com/community-scripts/ProxmoxVE/pull/13669))
|
|
||||||
- Bambuddy: preserve database and archive on update [@Copilot](https://github.com/Copilot) ([#13706](https://github.com/community-scripts/ProxmoxVE/pull/13706))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Immich: Pin version to 2.7.5 [@vhsdream](https://github.com/vhsdream) ([#13715](https://github.com/community-scripts/ProxmoxVE/pull/13715))
|
|
||||||
- Bytestash: auto backup/restore data on update [@MickLesk](https://github.com/MickLesk) ([#13707](https://github.com/community-scripts/ProxmoxVE/pull/13707))
|
|
||||||
- OpenCloud: pin version to 6.0.0 [@vhsdream](https://github.com/vhsdream) ([#13691](https://github.com/community-scripts/ProxmoxVE/pull/13691))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- Mealie: pin version to v3.14.0 in install and update scripts [@Copilot](https://github.com/Copilot) ([#13724](https://github.com/community-scripts/ProxmoxVE/pull/13724))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- core: remove unused TEMP_DIR mktemp leak in build_container / clean sonarqube [@MickLesk](https://github.com/MickLesk) ([#13708](https://github.com/community-scripts/ProxmoxVE/pull/13708))
|
|
||||||
|
|
||||||
## 2026-04-12
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Alpine-Wakapi: Remove container checks in update_script function [@MickLesk](https://github.com/MickLesk) ([#13694](https://github.com/community-scripts/ProxmoxVE/pull/13694))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- IronClaw: Install keychain dependencies and launch in a DBus session [@MickLesk](https://github.com/MickLesk) ([#13692](https://github.com/community-scripts/ProxmoxVE/pull/13692))
|
|
||||||
- MeTube: Allow pnpm build scripts to fix ERR_PNPM_IGNORED_BUILDS [@MickLesk](https://github.com/MickLesk) ([#13668](https://github.com/community-scripts/ProxmoxVE/pull/13668))
|
|
||||||
|
|
||||||
## 2026-04-11
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Immich: Ensure newline before appending IMMICH_HELMET_FILE to .env [@MickLesk](https://github.com/MickLesk) ([#13667](https://github.com/community-scripts/ProxmoxVE/pull/13667))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- BentoPDF: replace http-server with nginx to fix WASM initialization timeout [@MickLesk](https://github.com/MickLesk) ([#13625](https://github.com/community-scripts/ProxmoxVE/pull/13625))
|
|
||||||
- Element Synapse: Add MatrixRTC configuration for Element Call support [@MickLesk](https://github.com/MickLesk) ([#13665](https://github.com/community-scripts/ProxmoxVE/pull/13665))
|
|
||||||
- RomM: Use ROMM_BASE_PATH from .env for symlinks and nginx config [@MickLesk](https://github.com/MickLesk) ([#13666](https://github.com/community-scripts/ProxmoxVE/pull/13666))
|
|
||||||
- Immich: Pin version to 2.7.4 [@vhsdream](https://github.com/vhsdream) ([#13661](https://github.com/community-scripts/ProxmoxVE/pull/13661))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Crafty Controller: Wait for credentials file instead of fixed sleep [@MickLesk](https://github.com/MickLesk) ([#13670](https://github.com/community-scripts/ProxmoxVE/pull/13670))
|
|
||||||
- Refactor: Alpine-Wakapi [@tremor021](https://github.com/tremor021) ([#13656](https://github.com/community-scripts/ProxmoxVE/pull/13656))
|
|
||||||
|
|
||||||
## 2026-04-10
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix: ensure trailing newline in redis.conf before appending bind directive [@Copilot](https://github.com/Copilot) ([#13647](https://github.com/community-scripts/ProxmoxVE/pull/13647))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Immich: Pin version to 2.7.3 [@vhsdream](https://github.com/vhsdream) ([#13631](https://github.com/community-scripts/ProxmoxVE/pull/13631))
|
|
||||||
- Homarr: bind Redis to localhost only [@MickLesk](https://github.com/MickLesk) ([#13552](https://github.com/community-scripts/ProxmoxVE/pull/13552))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- tools.func: prevent script crash when entering GitHub token after rate limit [@MickLesk](https://github.com/MickLesk) ([#13638](https://github.com/community-scripts/ProxmoxVE/pull/13638))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- addons: Filebrowser & Filebrowser-Quantum get warning if host install [@MickLesk](https://github.com/MickLesk) ([#13639](https://github.com/community-scripts/ProxmoxVE/pull/13639))
|
|
||||||
|
|
||||||
## 2026-04-09
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- boostack: add: git [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13620](https://github.com/community-scripts/ProxmoxVE/pull/13620))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Update OPNsense version from 25.7 to 26.1 [@tdn131](https://github.com/tdn131) ([#13626](https://github.com/community-scripts/ProxmoxVE/pull/13626))
|
|
||||||
- CheckMK: Bump Default OS to 13 (trixie) + dynamic codename + fix RELEASE-Tag Fetching [@MickLesk](https://github.com/MickLesk) ([#13610](https://github.com/community-scripts/ProxmoxVE/pull/13610))
|
|
||||||
|
|
||||||
## 2026-04-08
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- IronClaw | Alpine-IronClaw ([#13591](https://github.com/community-scripts/ProxmoxVE/pull/13591))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- immich: disable upgrade-insecure-requests CSP directive [@MickLesk](https://github.com/MickLesk) ([#13600](https://github.com/community-scripts/ProxmoxVE/pull/13600))
|
|
||||||
- Immich: v2.7.2 [@vhsdream](https://github.com/vhsdream) ([#13579](https://github.com/community-scripts/ProxmoxVE/pull/13579))
|
|
||||||
- Update flaresolverr-install.sh [@maztheman](https://github.com/maztheman) ([#13584](https://github.com/community-scripts/ProxmoxVE/pull/13584))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- bambuddy: add mkdir before data restore & add ffmpeg dependency [@MickLesk](https://github.com/MickLesk) ([#13601](https://github.com/community-scripts/ProxmoxVE/pull/13601))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- feat: update UHF Server script to use setup_ffmpeg [@zackwithak13](https://github.com/zackwithak13) ([#13564](https://github.com/community-scripts/ProxmoxVE/pull/13564))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: add script page badges to descriptions | change donate URL [@MickLesk](https://github.com/MickLesk) ([#13596](https://github.com/community-scripts/ProxmoxVE/pull/13596))
|
|
||||||
|
|
||||||
## 2026-04-07
|
|
||||||
|
|
||||||
### 🗑️ Deleted Scripts
|
|
||||||
|
|
||||||
- Remove low-install-count CT scripts and installers [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#13570](https://github.com/community-scripts/ProxmoxVE/pull/13570))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: improve resilience for top Proxmox error codes (209, 215, 118, 206) [@MickLesk](https://github.com/MickLesk) ([#13575](https://github.com/community-scripts/ProxmoxVE/pull/13575))
|
|
||||||
|
|
||||||
## 2026-04-06
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- OpenThread Border Router ([#13536](https://github.com/community-scripts/ProxmoxVE/pull/13536))
|
|
||||||
- Homelable ([#13539](https://github.com/community-scripts/ProxmoxVE/pull/13539))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Papra: check env before copy [@MickLesk](https://github.com/MickLesk) ([#13553](https://github.com/community-scripts/ProxmoxVE/pull/13553))
|
|
||||||
- changedetection: fix: typing_extensions error [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13548](https://github.com/community-scripts/ProxmoxVE/pull/13548))
|
|
||||||
- kasm: fix: fetch latest version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13547](https://github.com/community-scripts/ProxmoxVE/pull/13547))
|
|
||||||
|
|
||||||
## 2026-04-05
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Grist: remove install:ee step (private repo, not needed for grist-core) [@MickLesk](https://github.com/MickLesk) ([#13526](https://github.com/community-scripts/ProxmoxVE/pull/13526))
|
|
||||||
- Nginx Proxy Manager: ensure /tmp/nginx/body exists via openresty service [@MickLesk](https://github.com/MickLesk) ([#13528](https://github.com/community-scripts/ProxmoxVE/pull/13528))
|
|
||||||
- MotionEye: run as root to enable SMB share support [@MickLesk](https://github.com/MickLesk) ([#13527](https://github.com/community-scripts/ProxmoxVE/pull/13527))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- core: silent() function - use return instead of exit to allow || true error handling [@MickLesk](https://github.com/MickLesk) ([#13529](https://github.com/community-scripts/ProxmoxVE/pull/13529))
|
|
||||||
|
|
||||||
## 2026-04-04
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- komodo: set `PERIPHERY_CORE_PUBLIC_KEYS` to default value if absent [@4ndv](https://github.com/4ndv) ([#13519](https://github.com/community-scripts/ProxmoxVE/pull/13519))
|
|
||||||
|
|
||||||
## 2026-04-03
|
## 2026-04-03
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
@@ -840,32 +437,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- OpenWRT-VM: use poweroff instead of halt to properly stop VM [@MickLesk](https://github.com/MickLesk) ([#13504](https://github.com/community-scripts/ProxmoxVE/pull/13504))
|
|
||||||
- NginxProxyManager: fix openresty restart by setting user root before reload [@MickLesk](https://github.com/MickLesk) ([#13500](https://github.com/community-scripts/ProxmoxVE/pull/13500))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
- #### ✨ New Features
|
||||||
|
|
||||||
- Crafty Controller: add Java 25 for Minecraft 1.26.1+ [@MickLesk](https://github.com/MickLesk) ([#13502](https://github.com/community-scripts/ProxmoxVE/pull/13502))
|
|
||||||
- Wealthfolio: update to v3.2.1 and Node.js 24 [@afadil](https://github.com/afadil) ([#13486](https://github.com/community-scripts/ProxmoxVE/pull/13486))
|
- Wealthfolio: update to v3.2.1 and Node.js 24 [@afadil](https://github.com/afadil) ([#13486](https://github.com/community-scripts/ProxmoxVE/pull/13486))
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core.func: prevent profile.d scripts from aborting on non-zero exit [@MickLesk](https://github.com/MickLesk) ([#13503](https://github.com/community-scripts/ProxmoxVE/pull/13503))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- APT Proxy: Support full URLs (http/https with custom ports) [@MickLesk](https://github.com/MickLesk) ([#13474](https://github.com/community-scripts/ProxmoxVE/pull/13474))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- PVE LXC-Updater: pipe apt list through cat to prevent pager hang [@MickLesk](https://github.com/MickLesk) ([#13501](https://github.com/community-scripts/ProxmoxVE/pull/13501))
|
|
||||||
|
|
||||||
## 2026-04-02
|
## 2026-04-02
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
@@ -1126,3 +701,530 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
- #### 🔧 Refactor
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
- Harden code-server addon install script [@MickLesk](https://github.com/MickLesk) ([#13116](https://github.com/community-scripts/ProxmoxVE/pull/13116))
|
- Harden code-server addon install script [@MickLesk](https://github.com/MickLesk) ([#13116](https://github.com/community-scripts/ProxmoxVE/pull/13116))
|
||||||
|
|
||||||
|
## 2026-03-19
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Owncast: increase default disk size from 2GB to 10GB [@Copilot](https://github.com/Copilot) ([#13079](https://github.com/community-scripts/ProxmoxVE/pull/13079))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: remove extra backslash to match single quoted here-doc [@Zelnes](https://github.com/Zelnes) ([#13108](https://github.com/community-scripts/ProxmoxVE/pull/13108))
|
||||||
|
- Reactive-Resume: Upgrade Node to 24 and enable Corepack [@MickLesk](https://github.com/MickLesk) ([#13093](https://github.com/community-scripts/ProxmoxVE/pull/13093))
|
||||||
|
- Increase Tracearr RAM; derive APP_VERSION [@MickLesk](https://github.com/MickLesk) ([#13087](https://github.com/community-scripts/ProxmoxVE/pull/13087))
|
||||||
|
- ProjectSend: Update application access URL [@tremor021](https://github.com/tremor021) ([#13078](https://github.com/community-scripts/ProxmoxVE/pull/13078))
|
||||||
|
- Dispatcharr: use npm install --no-audit --progress=false [@MickLesk](https://github.com/MickLesk) ([#13074](https://github.com/community-scripts/ProxmoxVE/pull/13074))
|
||||||
|
- core: reorder hwaccel setup and adjust GPU group usermod [@MickLesk](https://github.com/MickLesk) ([#13072](https://github.com/community-scripts/ProxmoxVE/pull/13072))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: display pin reason in release-check messages [@MickLesk](https://github.com/MickLesk) ([#13095](https://github.com/community-scripts/ProxmoxVE/pull/13095))
|
||||||
|
- NocoDB: Unpin Version to latest [@MickLesk](https://github.com/MickLesk) ([#13094](https://github.com/community-scripts/ProxmoxVE/pull/13094))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func: use dpkg-query for reliable JDK version detection [@MickLesk](https://github.com/MickLesk) ([#13101](https://github.com/community-scripts/ProxmoxVE/pull/13101))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- Update link from helper-scripts.com to community-scripts.org [@adnanvaldes](https://github.com/adnanvaldes) ([#13098](https://github.com/community-scripts/ProxmoxVE/pull/13098))
|
||||||
|
- github: add PocketBase bot workflow [@MickLesk](https://github.com/MickLesk) ([#13075](https://github.com/community-scripts/ProxmoxVE/pull/13075))
|
||||||
|
|
||||||
|
## 2026-03-18
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Alpine-Ntfy [@MickLesk](https://github.com/MickLesk) ([#13048](https://github.com/community-scripts/ProxmoxVE/pull/13048))
|
||||||
|
- Split-Pro ([#12975](https://github.com/community-scripts/ProxmoxVE/pull/12975))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Tdarr: use curl_with_retry and correct exit code [@MickLesk](https://github.com/MickLesk) ([#13060](https://github.com/community-scripts/ProxmoxVE/pull/13060))
|
||||||
|
- reitti: fix: v4 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13039](https://github.com/community-scripts/ProxmoxVE/pull/13039))
|
||||||
|
- Paperless-NGX: increase default RAM to 3GB [@MickLesk](https://github.com/MickLesk) ([#13018](https://github.com/community-scripts/ProxmoxVE/pull/13018))
|
||||||
|
- Plex: restart service after update to apply new version [@MickLesk](https://github.com/MickLesk) ([#13017](https://github.com/community-scripts/ProxmoxVE/pull/13017))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools: centralize GPU group setup via setup_hwaccel [@MickLesk](https://github.com/MickLesk) ([#13044](https://github.com/community-scripts/ProxmoxVE/pull/13044))
|
||||||
|
- Termix: add guacd build and systemd integration [@MickLesk](https://github.com/MickLesk) ([#12999](https://github.com/community-scripts/ProxmoxVE/pull/12999))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Podman: replace deprecated commands with Quadlets [@MickLesk](https://github.com/MickLesk) ([#13052](https://github.com/community-scripts/ProxmoxVE/pull/13052))
|
||||||
|
- Refactor: Jellyfin repo, ffmpeg package and symlinks [@MickLesk](https://github.com/MickLesk) ([#13045](https://github.com/community-scripts/ProxmoxVE/pull/13045))
|
||||||
|
- pve-scripts-local: Increase default disk size from 4GB to 10GB [@MickLesk](https://github.com/MickLesk) ([#13009](https://github.com/community-scripts/ProxmoxVE/pull/13009))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func Implement pg_cron setup for setup_postgresql [@MickLesk](https://github.com/MickLesk) ([#13053](https://github.com/community-scripts/ProxmoxVE/pull/13053))
|
||||||
|
- tools.func: Implement check_for_gh_tag function [@MickLesk](https://github.com/MickLesk) ([#12998](https://github.com/community-scripts/ProxmoxVE/pull/12998))
|
||||||
|
- tools.func: Implement fetch_and_deploy_gh_tag function [@MickLesk](https://github.com/MickLesk) ([#13000](https://github.com/community-scripts/ProxmoxVE/pull/13000))
|
||||||
|
|
||||||
|
## 2026-03-17
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Gluetun: add OpenVPN process user and cleanup stale config [@MickLesk](https://github.com/MickLesk) ([#13016](https://github.com/community-scripts/ProxmoxVE/pull/13016))
|
||||||
|
- Frigate: check OpenVino model files exist before configuring detector and use curl_with_retry instead of default wget [@MickLesk](https://github.com/MickLesk) ([#13019](https://github.com/community-scripts/ProxmoxVE/pull/13019))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- tools.func: Update `create_self_signed_cert()` [@tremor021](https://github.com/tremor021) ([#13008](https://github.com/community-scripts/ProxmoxVE/pull/13008))
|
||||||
|
|
||||||
|
## 2026-03-16
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Gluetun ([#12976](https://github.com/community-scripts/ProxmoxVE/pull/12976))
|
||||||
|
- Anytype-Server ([#12974](https://github.com/community-scripts/ProxmoxVE/pull/12974))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Immich: use gcc-13 for compilation & add uv python pre-install with retry logic [@MickLesk](https://github.com/MickLesk) ([#12935](https://github.com/community-scripts/ProxmoxVE/pull/12935))
|
||||||
|
- Tautulli: add setuptools<81 constraint to update script [@MickLesk](https://github.com/MickLesk) ([#12959](https://github.com/community-scripts/ProxmoxVE/pull/12959))
|
||||||
|
- Seerr: add missing build deps [@MickLesk](https://github.com/MickLesk) ([#12960](https://github.com/community-scripts/ProxmoxVE/pull/12960))
|
||||||
|
- fix: yubal update [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12961](https://github.com/community-scripts/ProxmoxVE/pull/12961))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- hwaccel: remove ROCm install from AMD APU setup [@MickLesk](https://github.com/MickLesk) ([#12958](https://github.com/community-scripts/ProxmoxVE/pull/12958))
|
||||||
|
|
||||||
|
## 2026-03-15
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Yamtrack ([#12936](https://github.com/community-scripts/ProxmoxVE/pull/12936))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Wishlist: use --frozen-lockfile for pnpm install [@MickLesk](https://github.com/MickLesk) ([#12892](https://github.com/community-scripts/ProxmoxVE/pull/12892))
|
||||||
|
- SparkyFitness: use --legacy-peer-deps for npm install [@MickLesk](https://github.com/MickLesk) ([#12888](https://github.com/community-scripts/ProxmoxVE/pull/12888))
|
||||||
|
- Frigate: add fallback for OpenVino labelmap file [@MickLesk](https://github.com/MickLesk) ([#12889](https://github.com/community-scripts/ProxmoxVE/pull/12889))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: ITSM-NG [@MickLesk](https://github.com/MickLesk) ([#12918](https://github.com/community-scripts/ProxmoxVE/pull/12918))
|
||||||
|
- core: unify RELEASE variable for check_for_gh_release and fetch_and_deploy [@MickLesk](https://github.com/MickLesk) ([#12917](https://github.com/community-scripts/ProxmoxVE/pull/12917))
|
||||||
|
- Standardize NSAPP names across VM scripts [@MickLesk](https://github.com/MickLesk) ([#12924](https://github.com/community-scripts/ProxmoxVE/pull/12924))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: retry downloads with exponential backoff [@MickLesk](https://github.com/MickLesk) ([#12896](https://github.com/community-scripts/ProxmoxVE/pull/12896))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- [go2rtc] Add ffmpeg dependency to install script [@Copilot](https://github.com/Copilot) ([#12944](https://github.com/community-scripts/ProxmoxVE/pull/12944))
|
||||||
|
|
||||||
|
## 2026-03-14
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Patchmon: remove v prefix from pinned version [@MickLesk](https://github.com/MickLesk) ([#12891](https://github.com/community-scripts/ProxmoxVE/pull/12891))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func: don't abort on AMD repo apt update failure [@MickLesk](https://github.com/MickLesk) ([#12890](https://github.com/community-scripts/ProxmoxVE/pull/12890))
|
||||||
|
|
||||||
|
## 2026-03-13
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Hotfix: Removed clean install usage from original script. [@nickheyer](https://github.com/nickheyer) ([#12870](https://github.com/community-scripts/ProxmoxVE/pull/12870))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Discopanel: V2 Support + Script rewrite [@nickheyer](https://github.com/nickheyer) ([#12763](https://github.com/community-scripts/ProxmoxVE/pull/12763))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- update-apps: fix restore path, add PBS support and improve restore messages [@omertahaoztop](https://github.com/omertahaoztop) ([#12528](https://github.com/community-scripts/ProxmoxVE/pull/12528))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix(pve-privilege-converter): handle already stopped container in manage_states [@liuqitoday](https://github.com/liuqitoday) ([#12765](https://github.com/community-scripts/ProxmoxVE/pull/12765))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- Update: Docs/website metadata workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12858](https://github.com/community-scripts/ProxmoxVE/pull/12858))
|
||||||
|
|
||||||
|
## 2026-03-12
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- manyfold: fix incorrect port in upstream requests by forwarding original host [@anlopo](https://github.com/anlopo) ([#12812](https://github.com/community-scripts/ProxmoxVE/pull/12812))
|
||||||
|
- SparkyFitness: install pnpm dependencies from workspace root [@MickLesk](https://github.com/MickLesk) ([#12792](https://github.com/community-scripts/ProxmoxVE/pull/12792))
|
||||||
|
- n8n: add build-essential to update dependencies [@MickLesk](https://github.com/MickLesk) ([#12795](https://github.com/community-scripts/ProxmoxVE/pull/12795))
|
||||||
|
- Frigate openvino labelmap patch [@semtex1987](https://github.com/semtex1987) ([#12751](https://github.com/community-scripts/ProxmoxVE/pull/12751))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Pin Patchmon to 1.4.2 [@vhsdream](https://github.com/vhsdream) ([#12789](https://github.com/community-scripts/ProxmoxVE/pull/12789))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func: correct PATH escaping in ROCm profile script [@MickLesk](https://github.com/MickLesk) ([#12793](https://github.com/community-scripts/ProxmoxVE/pull/12793))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: add mode=generated for unattended frontend installs [@MickLesk](https://github.com/MickLesk) ([#12807](https://github.com/community-scripts/ProxmoxVE/pull/12807))
|
||||||
|
- core: validate storage availability when loading defaults [@MickLesk](https://github.com/MickLesk) ([#12794](https://github.com/community-scripts/ProxmoxVE/pull/12794))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- tools.func: support older NVIDIA driver versions with 2 segments (xxx.xxx) [@MickLesk](https://github.com/MickLesk) ([#12796](https://github.com/community-scripts/ProxmoxVE/pull/12796))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix PBS microcode naming [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12834](https://github.com/community-scripts/ProxmoxVE/pull/12834))
|
||||||
|
|
||||||
|
### 📂 Github
|
||||||
|
|
||||||
|
- Cleanup: remove old workflow files [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12818](https://github.com/community-scripts/ProxmoxVE/pull/12818))
|
||||||
|
- Cleanup: remove frontend, move JSONs to json/ top-level [@MickLesk](https://github.com/MickLesk) ([#12813](https://github.com/community-scripts/ProxmoxVE/pull/12813))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- Remove json files [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12830](https://github.com/community-scripts/ProxmoxVE/pull/12830))
|
||||||
|
|
||||||
|
## 2026-03-11
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: Init telemetry in addon scripts [@MickLesk](https://github.com/MickLesk) ([#12777](https://github.com/community-scripts/ProxmoxVE/pull/12777))
|
||||||
|
- Tracearr: Increase default disk variable from 5 to 10 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12762](https://github.com/community-scripts/ProxmoxVE/pull/12762))
|
||||||
|
- Fix Wireguard Dashboard update [@odin568](https://github.com/odin568) ([#12767](https://github.com/community-scripts/ProxmoxVE/pull/12767))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Coder-Code-Server: Check if config file exists [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12758](https://github.com/community-scripts/ProxmoxVE/pull/12758))
|
||||||
|
|
||||||
|
## 2026-03-10
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [Fix] Immich: Pin libvips to 8.17.3 [@vhsdream](https://github.com/vhsdream) ([#12744](https://github.com/community-scripts/ProxmoxVE/pull/12744))
|
||||||
|
|
||||||
|
## 2026-03-09
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Pin Opencloud to 5.2.0 [@vhsdream](https://github.com/vhsdream) ([#12721](https://github.com/community-scripts/ProxmoxVE/pull/12721))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [Hotfix] qBittorrent: Disable UPnP port forwarding by default [@vhsdream](https://github.com/vhsdream) ([#12728](https://github.com/community-scripts/ProxmoxVE/pull/12728))
|
||||||
|
- [Quickfix] Opencloud: ensure correct case for binary [@vhsdream](https://github.com/vhsdream) ([#12729](https://github.com/community-scripts/ProxmoxVE/pull/12729))
|
||||||
|
- Omada: Bump libssl [@MickLesk](https://github.com/MickLesk) ([#12724](https://github.com/community-scripts/ProxmoxVE/pull/12724))
|
||||||
|
- openwebui: Ensure required dependencies [@MickLesk](https://github.com/MickLesk) ([#12717](https://github.com/community-scripts/ProxmoxVE/pull/12717))
|
||||||
|
- Frigate: try an OpenVino model build fallback [@MickLesk](https://github.com/MickLesk) ([#12704](https://github.com/community-scripts/ProxmoxVE/pull/12704))
|
||||||
|
- Change cronjob setup to use www-data user [@opastorello](https://github.com/opastorello) ([#12695](https://github.com/community-scripts/ProxmoxVE/pull/12695))
|
||||||
|
- RustDesk Server: Fix check_for_gh_release function call [@tremor021](https://github.com/tremor021) ([#12694](https://github.com/community-scripts/ProxmoxVE/pull/12694))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- feat: improve zigbee2mqtt backup handler [@MickLesk](https://github.com/MickLesk) ([#12714](https://github.com/community-scripts/ProxmoxVE/pull/12714))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Reactive Resume: rewrite for v5 using original repo amruthpilla/reactive-resume [@MickLesk](https://github.com/MickLesk) ([#12705](https://github.com/community-scripts/ProxmoxVE/pull/12705))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools: add Alpine (apk) support to ensure_dependencies and is_package_installed [@MickLesk](https://github.com/MickLesk) ([#12703](https://github.com/community-scripts/ProxmoxVE/pull/12703))
|
||||||
|
- tools.func: extend hwaccel with ROCm [@MickLesk](https://github.com/MickLesk) ([#12707](https://github.com/community-scripts/ProxmoxVE/pull/12707))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- feat: add CopycatWarningToast component for user warnings [@BramSuurdje](https://github.com/BramSuurdje) ([#12733](https://github.com/community-scripts/ProxmoxVE/pull/12733))
|
||||||
|
|
||||||
|
## 2026-03-08
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [Fix] Immich: chown install dir before machine-learning update [@vhsdream](https://github.com/vhsdream) ([#12684](https://github.com/community-scripts/ProxmoxVE/pull/12684))
|
||||||
|
- [Fix] Scanopy: Build generate-fixtures [@vhsdream](https://github.com/vhsdream) ([#12686](https://github.com/community-scripts/ProxmoxVE/pull/12686))
|
||||||
|
- fix: rustdeskserver: use correct repo string [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12682](https://github.com/community-scripts/ProxmoxVE/pull/12682))
|
||||||
|
- NZBGet: Fixes for RAR5 handling [@tremor021](https://github.com/tremor021) ([#12675](https://github.com/community-scripts/ProxmoxVE/pull/12675))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- LXC-Execute: Fix slug [@tremor021](https://github.com/tremor021) ([#12681](https://github.com/community-scripts/ProxmoxVE/pull/12681))
|
||||||
|
|
||||||
|
## 2026-03-07
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- ImmichFrame ([#12653](https://github.com/community-scripts/ProxmoxVE/pull/12653))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Grocy: bump PHP version from 8.3 to 8.5 [@MickLesk](https://github.com/MickLesk) ([#12651](https://github.com/community-scripts/ProxmoxVE/pull/12651))
|
||||||
|
- Check for influxdb3 installation in update_script [@odin568](https://github.com/odin568) ([#12648](https://github.com/community-scripts/ProxmoxVE/pull/12648))
|
||||||
|
- Update Rdtclient to dotnet 10.0 [@asylumexp](https://github.com/asylumexp) ([#12638](https://github.com/community-scripts/ProxmoxVE/pull/12638))
|
||||||
|
- fix(immich): fix update script failing to add Debian testing repo when preferences file already exists [@Copilot](https://github.com/Copilot) ([#12631](https://github.com/community-scripts/ProxmoxVE/pull/12631))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools: add interactive GitHub PAT prompt on rate limit / auth failure [@MickLesk](https://github.com/MickLesk) ([#12652](https://github.com/community-scripts/ProxmoxVE/pull/12652))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Papra: update repository URL to papra-hq/papra [@MickLesk](https://github.com/MickLesk) ([#12650](https://github.com/community-scripts/ProxmoxVE/pull/12650))
|
||||||
|
|
||||||
|
## 2026-03-06
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- RustDesk Server: Fix update script [@tremor021](https://github.com/tremor021) ([#12625](https://github.com/community-scripts/ProxmoxVE/pull/12625))
|
||||||
|
- [Node-RED] Restart service after update [@Aurelien30000](https://github.com/Aurelien30000) ([#12621](https://github.com/community-scripts/ProxmoxVE/pull/12621))
|
||||||
|
- wealthfolio: update cors [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12617](https://github.com/community-scripts/ProxmoxVE/pull/12617))
|
||||||
|
- CryptPad: Better update handling [@tremor021](https://github.com/tremor021) ([#12611](https://github.com/community-scripts/ProxmoxVE/pull/12611))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- RustDesk Server: Switch to updated repository [@tremor021](https://github.com/tremor021) ([#12083](https://github.com/community-scripts/ProxmoxVE/pull/12083))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Semaphore: Move from BoltDB to SQLite [@tremor021](https://github.com/tremor021) ([#12624](https://github.com/community-scripts/ProxmoxVE/pull/12624))
|
||||||
|
|
||||||
|
## 2026-03-05
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- ddclient ([#12587](https://github.com/community-scripts/ProxmoxVE/pull/12587))
|
||||||
|
- Netbird ([#12585](https://github.com/community-scripts/ProxmoxVE/pull/12585))
|
||||||
|
- Papra ([#12577](https://github.com/community-scripts/ProxmoxVE/pull/12577))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fluid-calendar: add build-essential to install and update dependencies [@Copilot](https://github.com/Copilot) ([#12602](https://github.com/community-scripts/ProxmoxVE/pull/12602))
|
||||||
|
- Refactor: BentoPDF [@vhsdream](https://github.com/vhsdream) ([#12597](https://github.com/community-scripts/ProxmoxVE/pull/12597))
|
||||||
|
- Tianji: Fix the bug introduced by the refactor [@tremor021](https://github.com/tremor021) ([#12564](https://github.com/community-scripts/ProxmoxVE/pull/12564))
|
||||||
|
- PowerDNS: use 'launch=' instead of 'launch+=' for gsqlite3 backend [@MickLesk](https://github.com/MickLesk) ([#12579](https://github.com/community-scripts/ProxmoxVE/pull/12579))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Suwayomi-Server: remove due to inactivity and very low usage [@MickLesk](https://github.com/MickLesk) ([#12596](https://github.com/community-scripts/ProxmoxVE/pull/12596))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- core: add var_os / var_version to whitelist for app.vars [@MickLesk](https://github.com/MickLesk) ([#12576](https://github.com/community-scripts/ProxmoxVE/pull/12576))
|
||||||
|
|
||||||
|
## 2026-03-04
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: gitea-mirror [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12549](https://github.com/community-scripts/ProxmoxVE/pull/12549))
|
||||||
|
- fix(immich): correct LibRaw clone URL to official upstream [@DenislavDenev](https://github.com/DenislavDenev) ([#12526](https://github.com/community-scripts/ProxmoxVE/pull/12526))
|
||||||
|
- update: stirling-pdf: java 25 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12552](https://github.com/community-scripts/ProxmoxVE/pull/12552))
|
||||||
|
- Docmost: register NoopAuditService globally when EE submodule is missing [@MickLesk](https://github.com/MickLesk) ([#12551](https://github.com/community-scripts/ProxmoxVE/pull/12551))
|
||||||
|
- jellyseer/overseer migration corrupting /usr/bin/update [@MickLesk](https://github.com/MickLesk) ([#12539](https://github.com/community-scripts/ProxmoxVE/pull/12539))
|
||||||
|
- PowerDNS: use gsqlite3 backend instead of BIND [@MickLesk](https://github.com/MickLesk) ([#12538](https://github.com/community-scripts/ProxmoxVE/pull/12538))
|
||||||
|
- addon migrations: /usr/bin/update replacement to prevent syntax error [@MickLesk](https://github.com/MickLesk) ([#12540](https://github.com/community-scripts/ProxmoxVE/pull/12540))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Fluid-Calendar: NodeJS bump [@tremor021](https://github.com/tremor021) ([#12558](https://github.com/community-scripts/ProxmoxVE/pull/12558))
|
||||||
|
- Refactor: LiteLLM [@tremor021](https://github.com/tremor021) ([#12550](https://github.com/community-scripts/ProxmoxVE/pull/12550))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools: fall back to distro packages for psql [@MickLesk](https://github.com/MickLesk) ([#12542](https://github.com/community-scripts/ProxmoxVE/pull/12542))
|
||||||
|
- fix: whitelist var_searchdomain and fix the handling of var_ns and va… [@tommoyer](https://github.com/tommoyer) ([#12521](https://github.com/community-scripts/ProxmoxVE/pull/12521))
|
||||||
|
|
||||||
|
## 2026-03-03
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Tinyauth: v5 Support & add Debian Version [@MickLesk](https://github.com/MickLesk) ([#12501](https://github.com/community-scripts/ProxmoxVE/pull/12501))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- cross-seed: install build-essential to resolve missing `make` error [@Copilot](https://github.com/Copilot) ([#12522](https://github.com/community-scripts/ProxmoxVE/pull/12522))
|
||||||
|
- meshcentral: increased disk space to 4GB [@MickLesk](https://github.com/MickLesk) ([#12509](https://github.com/community-scripts/ProxmoxVE/pull/12509))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- opnsense-vm: harden temp dir, bridge detection and network selection [@MickLesk](https://github.com/MickLesk) ([#12513](https://github.com/community-scripts/ProxmoxVE/pull/12513))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Remove Unifi Network Server scripts (dead APT repo) [@Copilot](https://github.com/Copilot) ([#12500](https://github.com/community-scripts/ProxmoxVE/pull/12500))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: recovery - add ENOSPC disk-full detection with auto-retry using * 2 hdd [@MickLesk](https://github.com/MickLesk) ([#12511](https://github.com/community-scripts/ProxmoxVE/pull/12511))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- Fix config_path casing in reactive-resume.json [@ScubyG](https://github.com/ScubyG) ([#12525](https://github.com/community-scripts/ProxmoxVE/pull/12525))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Revert #11534 PR that messed up search [@BramSuurdje](https://github.com/BramSuurdje) ([#12492](https://github.com/community-scripts/ProxmoxVE/pull/12492))
|
||||||
|
|
||||||
|
## 2026-03-02
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- PowerDNS ([#12481](https://github.com/community-scripts/ProxmoxVE/pull/12481))
|
||||||
|
- Profilarr ([#12441](https://github.com/community-scripts/ProxmoxVE/pull/12441))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Tracearr: prepare for imminent v1.4.19 release [@durzo](https://github.com/durzo) ([#12413](https://github.com/community-scripts/ProxmoxVE/pull/12413))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Frigate: Bump to v0.17 [@MickLesk](https://github.com/MickLesk) ([#12474](https://github.com/community-scripts/ProxmoxVE/pull/12474))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Migrate: DokPloy, Komodo, Coolify, Dockge, Runtipi to Addons [@MickLesk](https://github.com/MickLesk) ([#12275](https://github.com/community-scripts/ProxmoxVE/pull/12275))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- ref: replace generic exit 1 with specific exit codes in ct & install [@MickLesk](https://github.com/MickLesk) ([#12475](https://github.com/community-scripts/ProxmoxVE/pull/12475))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: Improve stability with retry logic, caching, and debug mode [@MickLesk](https://github.com/MickLesk) ([#10351](https://github.com/community-scripts/ProxmoxVE/pull/10351))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- core: standardize exit codes and add mappings [@MickLesk](https://github.com/MickLesk) ([#12467](https://github.com/community-scripts/ProxmoxVE/pull/12467))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- frontend: improve detail view badges, addon texts, and HTML title [@MickLesk](https://github.com/MickLesk) ([#12461](https://github.com/community-scripts/ProxmoxVE/pull/12461))
|
||||||
|
|
||||||
|
## 2026-03-01
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Sparkyfitness: use pnpm [@tomfrenzel](https://github.com/tomfrenzel) ([#12445](https://github.com/community-scripts/ProxmoxVE/pull/12445))
|
||||||
|
- OpenArchiver: Fix installation [@tremor021](https://github.com/tremor021) ([#12447](https://github.com/community-scripts/ProxmoxVE/pull/12447))
|
||||||
|
|
||||||
|
## 2026-02-28
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Update Reactive Resume install script with useful .env information for reverse proxy setup [@Mazianni](https://github.com/Mazianni) ([#12401](https://github.com/community-scripts/ProxmoxVE/pull/12401))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- gramps-web: install addons (FilterRules) for relationship diagram [@MickLesk](https://github.com/MickLesk) ([#12387](https://github.com/community-scripts/ProxmoxVE/pull/12387))
|
||||||
|
- [Fix] Immich: Change `sed` command to fully replace line in postgresql.conf [@vhsdream](https://github.com/vhsdream) ([#12429](https://github.com/community-scripts/ProxmoxVE/pull/12429))
|
||||||
|
- [FIX] Immich: fix Openvino memory leak during OCR; improve HW-accelerated ML performance [@vhsdream](https://github.com/vhsdream) ([#12426](https://github.com/community-scripts/ProxmoxVE/pull/12426))
|
||||||
|
- Fix default tag for ioBroker LXC install [@josefglatz](https://github.com/josefglatz) ([#12423](https://github.com/community-scripts/ProxmoxVE/pull/12423))
|
||||||
|
- Ombi: Add database.json [@hraphael](https://github.com/hraphael) ([#12412](https://github.com/community-scripts/ProxmoxVE/pull/12412))
|
||||||
|
- Dawarich: add missing build deps and handle seed failure [@MickLesk](https://github.com/MickLesk) ([#12410](https://github.com/community-scripts/ProxmoxVE/pull/12410))
|
||||||
|
- pangolin: increase hdd to 10G [@MickLesk](https://github.com/MickLesk) ([#12409](https://github.com/community-scripts/ProxmoxVE/pull/12409))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- BookLore: add additional JVM flags [@vhsdream](https://github.com/vhsdream) ([#12421](https://github.com/community-scripts/ProxmoxVE/pull/12421))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Delete Palmr [@vhsdream](https://github.com/vhsdream) ([#12399](https://github.com/community-scripts/ProxmoxVE/pull/12399))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- core: read from /dev/tty in all interactive prompts | fix empty or cropped logs due build process [@MickLesk](https://github.com/MickLesk) ([#12406](https://github.com/community-scripts/ProxmoxVE/pull/12406))
|
||||||
|
|
||||||
|
## 2026-02-27
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Strapi ([#12320](https://github.com/community-scripts/ProxmoxVE/pull/12320))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- TrueNAS VM: filter out new nightlies with MASTER [@juronja](https://github.com/juronja) ([#12355](https://github.com/community-scripts/ProxmoxVE/pull/12355))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: graceful fallback for apt-get update failures [@MickLesk](https://github.com/MickLesk) ([#12386](https://github.com/community-scripts/ProxmoxVE/pull/12386))
|
||||||
|
- core: Improve error outputs across core functions [@MickLesk](https://github.com/MickLesk) ([#12378](https://github.com/community-scripts/ProxmoxVE/pull/12378))
|
||||||
137
CONTRIBUTING.md
137
CONTRIBUTING.md
@@ -1,137 +0,0 @@
|
|||||||
# Contributing to Proxmox VE Helper-Scripts
|
|
||||||
|
|
||||||
Welcome! We're glad you want to contribute. This guide covers everything you need to add new scripts, improve existing ones, or help in other ways.
|
|
||||||
|
|
||||||
For detailed coding standards and full documentation, visit **[community-scripts.org/docs](https://community-scripts.org/docs)**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## How Can I Help?
|
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> **New scripts** must always be submitted to [ProxmoxVED](https://github.com/community-scripts/ProxmoxVED) first — not to this repository.
|
|
||||||
> PRs with new scripts opened directly against ProxmoxVE **will be closed without review**.
|
|
||||||
> **Bug fixes, improvements, and features for existing scripts** go here (ProxmoxVE).
|
|
||||||
|
|
||||||
| I want to… | Where to go |
|
|
||||||
| :------------------------------------------ | :------------------------------------------------------------------------------------------- |
|
|
||||||
| **Add a brand-new script** | [ProxmoxVED](https://github.com/community-scripts/ProxmoxVED) — testing repo for new scripts |
|
|
||||||
| **Fix a bug or improve an existing script** | This repo (ProxmoxVE) — open a PR here |
|
|
||||||
| **Add a feature to an existing script** | This repo (ProxmoxVE) — open a PR here |
|
|
||||||
| Report a bug or broken script | [Open an Issue](https://github.com/community-scripts/ProxmoxVE/issues) |
|
|
||||||
| Request a new script or feature | [Start a Discussion](https://github.com/community-scripts/ProxmoxVE/discussions) |
|
|
||||||
| Report a security vulnerability | [Security Policy](SECURITY.md) |
|
|
||||||
| Chat with contributors | [Discord](https://discord.gg/3AnUqsXnmK) |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
Before writing scripts, we recommend setting up:
|
|
||||||
|
|
||||||
- **Visual Studio Code** with these extensions:
|
|
||||||
- [Shell Syntax](https://marketplace.visualstudio.com/items?itemName=bmalehorn.shell-syntax)
|
|
||||||
- [ShellCheck](https://marketplace.visualstudio.com/items?itemName=timonwong.shellcheck)
|
|
||||||
- [Shell Format](https://marketplace.visualstudio.com/items?itemName=foxundermoon.shell-format)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Script Structure
|
|
||||||
|
|
||||||
Every script consists of two files:
|
|
||||||
|
|
||||||
| File | Purpose |
|
|
||||||
| :--------------------------- | :------------------------------------------------------ |
|
|
||||||
| `ct/AppName.sh` | Container creation, variable setup, and update handling |
|
|
||||||
| `install/AppName-install.sh` | Application installation logic |
|
|
||||||
|
|
||||||
Use existing scripts in [`ct/`](ct/) and [`install/`](install/) as reference. Full coding standards and annotated templates are at **[community-scripts.org/docs/contribution](https://community-scripts.org/docs/contribution)**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Contribution Process
|
|
||||||
|
|
||||||
### Adding a new script
|
|
||||||
|
|
||||||
New scripts are **not accepted directly in this repository**. The workflow is:
|
|
||||||
|
|
||||||
1. Fork [ProxmoxVED](https://github.com/community-scripts/ProxmoxVED) and clone it
|
|
||||||
2. Create a branch: `git switch -c feat/myapp`
|
|
||||||
3. Write your two script files:
|
|
||||||
- `ct/myapp.sh`
|
|
||||||
- `install/myapp-install.sh`
|
|
||||||
4. Test thoroughly in ProxmoxVED — run the script against a real Proxmox instance
|
|
||||||
5. Open a PR in **ProxmoxVED** for review and testing
|
|
||||||
6. Once accepted and verified there, the script will be promoted to ProxmoxVE by maintainers
|
|
||||||
|
|
||||||
Follow the coding standards at [community-scripts.org/docs/contribution](https://community-scripts.org/docs/contribution).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Fixing a bug or improving an existing script
|
|
||||||
|
|
||||||
Changes to scripts that already exist in ProxmoxVE go directly here:
|
|
||||||
|
|
||||||
1. Fork **this repository** (ProxmoxVE) and clone it:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone https://github.com/YOUR_USERNAME/ProxmoxVE
|
|
||||||
cd ProxmoxVE
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Create a branch:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git switch -c fix/myapp-description
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Make your changes to the relevant files in `ct/` and/or `install/`
|
|
||||||
|
|
||||||
4. Open a PR from your fork to `community-scripts/ProxmoxVE/main`
|
|
||||||
|
|
||||||
Your PR should only contain the files you changed. Do not include unrelated modifications.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Code Standards
|
|
||||||
|
|
||||||
Key rules at a glance:
|
|
||||||
|
|
||||||
- One script per service — keep them focused
|
|
||||||
- Naming convention: lowercase, hyphen-separated (`my-app.sh`)
|
|
||||||
- Shebang: `#!/usr/bin/env bash`
|
|
||||||
- Quote all variables: `"$VAR"` not `$VAR`
|
|
||||||
- Use lowercase variable names
|
|
||||||
- Do not hardcode credentials or sensitive values
|
|
||||||
|
|
||||||
Full standards and examples: **[community-scripts.org/docs/contribution](https://community-scripts.org/docs/contribution)**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Developer Mode & Debugging
|
|
||||||
|
|
||||||
Set the `dev_mode` variable to enable debugging features when testing. Flags can be combined (comma-separated):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
dev_mode="trace,keep" bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/myapp.sh)"
|
|
||||||
```
|
|
||||||
|
|
||||||
| 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 before customization |
|
|
||||||
| `breakpoint` | Drops to a shell at hardcoded `breakpoint` calls in scripts |
|
|
||||||
| `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 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Notes
|
|
||||||
|
|
||||||
- **Website metadata** (name, description, logo, tags) is managed via the website — use the "Report Issue" link on any script page to request changes. Do not submit metadata changes via repo files.
|
|
||||||
- **JSON files** in `json/` define script properties used by the website. See existing files for structure reference.
|
|
||||||
- Keep PRs small and focused. One fix or feature per PR is ideal.
|
|
||||||
- PRs with **new scripts** opened against ProxmoxVE will be closed — submit them to [ProxmoxVED](https://github.com/community-scripts/ProxmoxVED) instead.
|
|
||||||
- PRs that fail CI checks will not be merged.
|
|
||||||
398
README.md
398
README.md
@@ -1,209 +1,283 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png" height="112px" alt="Proxmox VE Helper-Scripts Logo" />
|
<img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png" height="120px" alt="Proxmox VE Helper-Scripts Logo" />
|
||||||
|
|
||||||
<h1>Proxmox VE Helper-Scripts</h1>
|
<h1>Proxmox VE Helper-Scripts</h1>
|
||||||
<p><strong>One-command installations for services, containers, and VMs on Proxmox VE</strong><br/>
|
<p><em>A Community Legacy in Memory of @tteck</em></p>
|
||||||
A community project — built on the foundation of <a href="https://github.com/tteck">@tteck</a>'s original work</p>
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a href="https://community-scripts.org"><img src="https://img.shields.io/badge/Website-community--scripts.org-4c9b3f?style=flat-square" /></a>
|
<a href="https://community-scripts.org">
|
||||||
<a href="https://discord.gg/3AnUqsXnmK"><img src="https://img.shields.io/badge/Discord-Join_us-7289da?style=flat-square&logo=discord&logoColor=white" /></a>
|
<img src="https://img.shields.io/badge/🌐_Website-Visit-4c9b3f?style=for-the-badge&labelColor=2d3748" alt="Website" />
|
||||||
<a href="https://github.com/community-scripts/ProxmoxVE/stargazers"><img src="https://img.shields.io/github/stars/community-scripts/ProxmoxVE?style=flat-square&label=Stars&color=f5a623" /></a>
|
</a>
|
||||||
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md"><img src="https://img.shields.io/badge/Changelog-view-6c5ce7?style=flat-square" /></a>
|
<a href="https://discord.gg/3AnUqsXnmK">
|
||||||
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue?style=flat-square" /></a>
|
<img src="https://img.shields.io/badge/💬_Discord-Join-7289da?style=for-the-badge&labelColor=2d3748" alt="Discord" />
|
||||||
|
</a>
|
||||||
|
<a href="https://ko-fi.com/community_scripts">
|
||||||
|
<img src="https://img.shields.io/badge/❤️_Support-Donate-FF5F5F?style=for-the-badge&labelColor=2d3748" alt="Donate" />
|
||||||
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/README.md">
|
||||||
|
<img src="https://img.shields.io/badge/🤝_Contribute-Guidelines-ff4785?style=for-the-badge&labelColor=2d3748" alt="Contribute" />
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/USER_SUBMITTED_GUIDES.md">
|
||||||
|
<img src="https://img.shields.io/badge/📚_Guides-Read-0077b5?style=for-the-badge&labelColor=2d3748" alt="Guides" />
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md">
|
||||||
|
<img src="https://img.shields.io/badge/📋_Changelog-View-6c5ce7?style=for-the-badge&labelColor=2d3748" alt="Changelog" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
**Simplify your Proxmox VE setup with community-driven automation scripts**
|
||||||
|
Originally created by tteck, now maintained and expanded by the community
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
<sub>🙌 <strong>Shoutout to</strong></sub>
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<a href="https://selfh.st/">
|
||||||
|
<img src="https://img.shields.io/badge/selfh.st-Icons_for_Self--Hosted-2563eb?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6IiBmaWxsPSJ3aGl0ZSIvPjwvc3ZnPg==&labelColor=1e3a8a" alt="selfh.st Icons" />
|
||||||
|
</a>
|
||||||
|
<br />
|
||||||
|
<sub><a href="https://github.com/selfhst/icons">View on GitHub</a> • Consistent, beautiful icons for 5000+ self-hosted apps</sub>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## What is this?
|
## 🎯 Key Features
|
||||||
|
|
||||||
**Simplify your Proxmox VE setup with community-driven automation scripts.**
|
<div align="center">
|
||||||
|
|
||||||
Install and configure popular self-hosted services with a single command — no manual package hunting, no config file archaeology. Paste a command into your Proxmox shell, answer a few prompts, and your container or VM is up and running.
|
<table>
|
||||||
|
|
||||||
The collection covers hundreds of services across categories like home automation, media servers, networking tools, databases, monitoring stacks, and more.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Requirements
|
|
||||||
|
|
||||||
| Component | Details |
|
|
||||||
| -------------- | ------------------------------------------------ |
|
|
||||||
| **Proxmox VE** | Version 8.4, 9.0, or 9.1 |
|
|
||||||
| **Host OS** | Proxmox VE (Debian-based) |
|
|
||||||
| **Access** | Root shell access on the Proxmox host |
|
|
||||||
| **Network** | Internet connection required during installation |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Getting Started
|
|
||||||
|
|
||||||
The fastest way to find and run scripts:
|
|
||||||
|
|
||||||
1. Go to **[community-scripts.org](https://community-scripts.org)**
|
|
||||||
2. Search for the service you want (e.g. "Home Assistant", "Nginx Proxy Manager", "Jellyfin")
|
|
||||||
3. Copy the one-line install command from the script page
|
|
||||||
4. Open your **Proxmox Shell** and paste it
|
|
||||||
5. Choose between **Default** or **Advanced** setup and follow the prompts
|
|
||||||
|
|
||||||
Each script page documents what the container includes, default resource allocation, and post-install notes.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## How Scripts Work
|
|
||||||
|
|
||||||
Every script follows the same pattern:
|
|
||||||
|
|
||||||
**Default mode** — Picks sensible resource defaults (CPU, RAM, storage) and asks only the minimum required questions. Most installs finish in under five minutes.
|
|
||||||
|
|
||||||
**Advanced mode** — Gives you full control over container settings, networking, storage backends, and application-level configuration before anything is installed.
|
|
||||||
|
|
||||||
After installation, each container ships with a **post-install helper** accessible from the Proxmox shell. It handles common tasks like:
|
|
||||||
|
|
||||||
- Applying updates to the installed service
|
|
||||||
- Changing application settings without manually editing config files
|
|
||||||
- Basic troubleshooting and log access
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## What's Included
|
|
||||||
|
|
||||||
The repository covers a wide range of categories. A few examples:
|
|
||||||
|
|
||||||
| Category | Examples |
|
|
||||||
| --------------- | --------------------------------------------------- |
|
|
||||||
| Home Automation | Home Assistant, Zigbee2MQTT, ESPHome, Node-RED |
|
|
||||||
| Media | Jellyfin, Plex, Radarr, Sonarr, Immich |
|
|
||||||
| Networking | AdGuard Home, Nginx Proxy Manager, Pi-hole, Traefik |
|
|
||||||
| Monitoring | Grafana, Prometheus, Uptime Kuma, Netdata |
|
|
||||||
| Databases | PostgreSQL, MariaDB, Redis, InfluxDB |
|
|
||||||
| Security | Vaultwarden, CrowdSec, Authentik |
|
|
||||||
| Dev & Tools | Gitea, Portainer, VS Code Server, n8n |
|
|
||||||
|
|
||||||
> Browse the full list at **[community-scripts.org/categories](https://community-scripts.org/categories)** — new scripts are added regularly.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
This project runs on community contributions. Whether you want to write new scripts, improve existing ones, or just report a bug — every bit helps.
|
|
||||||
|
|
||||||
### Where to start
|
|
||||||
|
|
||||||
| I want to… | Go here |
|
|
||||||
| ------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
||||||
| Add a **new** script | [ProxmoxVED](https://github.com/community-scripts/ProxmoxVED) — new scripts are tested here first |
|
|
||||||
| Fix or improve an **existing** script | [Contributing Guidelines](CONTRIBUTING.md) — open a PR in this repo |
|
|
||||||
| Report a bug or broken script | [Issues](https://github.com/community-scripts/ProxmoxVE/issues) |
|
|
||||||
| Request a new script or feature | [Discussions](https://github.com/community-scripts/ProxmoxVE/discussions) |
|
|
||||||
| Report a security vulnerability | [Security Policy](SECURITY.md) |
|
|
||||||
| Get help or chat with other users | [Discord](https://discord.gg/3AnUqsXnmK) |
|
|
||||||
|
|
||||||
### Before you open a PR
|
|
||||||
|
|
||||||
- **New scripts go to [ProxmoxVED](https://github.com/community-scripts/ProxmoxVED), not here.** PRs with new scripts opened directly against this repo will be closed.
|
|
||||||
- Bug fixes and improvements to existing scripts belong in this repo — read the [Contributing Guidelines](CONTRIBUTING.md) first.
|
|
||||||
- Keep PRs focused. One fix or feature per PR.
|
|
||||||
- Document what your script installs and any non-obvious decisions in the corresponding JSON metadata file.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Core Team
|
|
||||||
|
|
||||||
<table align="center">
|
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center">
|
<td align="center" width="25%">
|
||||||
<a href="https://github.com/MickLesk">
|
<h3>⚡ Quick Setup</h3>
|
||||||
<img src="https://github.com/MickLesk.png" width="80" height="80" style="border-radius:50%" alt="MickLesk" /><br/>
|
<p>One-command installations for popular services and containers</p>
|
||||||
<sub><b>MickLesk</b></sub>
|
</td>
|
||||||
|
<td align="center" width="25%">
|
||||||
|
<h3>⚙️ Flexible Config</h3>
|
||||||
|
<p>Simple mode for beginners, advanced options for power users</p>
|
||||||
|
</td>
|
||||||
|
<td align="center" width="25%">
|
||||||
|
<h3>🔄 Auto Updates</h3>
|
||||||
|
<p>Keep your installations current with built-in update mechanisms</p>
|
||||||
|
</td>
|
||||||
|
<td align="center" width="25%">
|
||||||
|
<h3>🛠️ Easy Management</h3>
|
||||||
|
<p>Post-install scripts for configuration and troubleshooting</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center" width="25%">
|
||||||
|
<h3>👥 Community Driven</h3>
|
||||||
|
<p>Actively maintained with contributions from users worldwide</p>
|
||||||
|
</td>
|
||||||
|
<td align="center" width="25%">
|
||||||
|
<h3>📖 Well Documented</h3>
|
||||||
|
<p>Comprehensive guides and community support</p>
|
||||||
|
</td>
|
||||||
|
<td align="center" width="25%">
|
||||||
|
<h3>🔒 Secure</h3>
|
||||||
|
<p>Regular security updates and best practices</p>
|
||||||
|
</td>
|
||||||
|
<td align="center" width="25%">
|
||||||
|
<h3>⚡ Performance</h3>
|
||||||
|
<p>Optimized configurations for best performance</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Requirements
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td align="center" width="33%">
|
||||||
|
<h3>🖥️ Proxmox VE</h3>
|
||||||
|
<p>Version: 8.4.x | 9.0.x | 9.1.x</p>
|
||||||
|
</td>
|
||||||
|
<td align="center" width="33%">
|
||||||
|
<h3>🐧 Operating System</h3>
|
||||||
|
<p>Debian-based with Proxmox Tools</p>
|
||||||
|
</td>
|
||||||
|
<td align="center" width="33%">
|
||||||
|
<h3>🌐 Network</h3>
|
||||||
|
<p>Internet connection required</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📥 Getting Started
|
||||||
|
|
||||||
|
Choose your preferred installation method:
|
||||||
|
|
||||||
|
### Method 1: One-Click Web Installer
|
||||||
|
|
||||||
|
The fastest way to get started:
|
||||||
|
|
||||||
|
1. Visit **[community-scripts.org](https://community-scripts.org/)** 🌐
|
||||||
|
2. Search for your desired script (e.g., "Home Assistant", "Docker")
|
||||||
|
3. Copy the bash command displayed on the script page
|
||||||
|
4. Open your **Proxmox Shell** and paste the command
|
||||||
|
5. Press Enter and follow the interactive prompts
|
||||||
|
|
||||||
|
### Method 2: PVEScripts-Local
|
||||||
|
|
||||||
|
Install a convenient script manager directly in your Proxmox UI:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/pve-scripts-local.sh)"
|
||||||
|
```
|
||||||
|
|
||||||
|
This adds a menu to your Proxmox interface for easy script access without visiting the website.
|
||||||
|
|
||||||
|
📖 **Learn more:** [ProxmoxVE-Local Repository](https://github.com/community-scripts/ProxmoxVE-Local)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💬 Join the Community
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td align="center" width="33%">
|
||||||
|
<h3>💬 Discord</h3>
|
||||||
|
<p>Real-time chat, support, and discussions</p>
|
||||||
|
<a href="https://discord.gg/3AnUqsXnmK">
|
||||||
|
<img src="https://img.shields.io/badge/Join-7289da?style=for-the-badge&logo=discord&logoColor=white" alt="Discord" />
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td align="center">
|
<td align="center" width="33%">
|
||||||
<a href="https://github.com/michelroegl-brunner">
|
<h3>💭 Discussions</h3>
|
||||||
<img src="https://github.com/michelroegl-brunner.png" width="80" height="80" style="border-radius:50%" alt="michelroegl-brunner" /><br/>
|
<p>Feature requests, Q&A, and ideas</p>
|
||||||
<sub><b>michelroegl-brunner</b></sub>
|
<a href="https://github.com/community-scripts/ProxmoxVE/discussions">
|
||||||
|
<img src="https://img.shields.io/badge/Discuss-238636?style=for-the-badge&logo=github&logoColor=white" alt="Discussions" />
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td align="center">
|
<td align="center" width="33%">
|
||||||
<a href="https://github.com/BramSuurdje">
|
<h3>🐛 Issues</h3>
|
||||||
<img src="https://github.com/BramSuurdje.png" width="80" height="80" style="border-radius:50%" alt="BramSuurdje" /><br/>
|
<p>Bug reports and issue tracking</p>
|
||||||
<sub><b>BramSuurdje</b></sub>
|
<a href="https://github.com/community-scripts/ProxmoxVE/issues">
|
||||||
</a>
|
<img src="https://img.shields.io/badge/Report-d73a4a?style=for-the-badge&logo=github&logoColor=white" alt="Issues" />
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<a href="https://github.com/CrazyWolf13">
|
|
||||||
<img src="https://github.com/CrazyWolf13.png" width="80" height="80" style="border-radius:50%" alt="CrazyWolf13" /><br/>
|
|
||||||
<sub><b>CrazyWolf13</b></sub>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<a href="https://github.com/tremor021">
|
|
||||||
<img src="https://github.com/tremor021.png" width="80" height="80" style="border-radius:50%" alt="tremor021" /><br/>
|
|
||||||
<sub><b>tremor021</b></sub>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<a href="https://github.com/vhsdream">
|
|
||||||
<img src="https://github.com/vhsdream.png" width="80" height="80" style="border-radius:50%" alt="vhsdream" /><br/>
|
|
||||||
<sub><b>vhsdream</b></sub>
|
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Project Activity
|
## 🛠️ Contribute
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td align="center" width="25%">
|
||||||
|
<h3>💻 Code</h3>
|
||||||
|
<p>Add new scripts or improve existing ones</p>
|
||||||
|
</td>
|
||||||
|
<td align="center" width="25%">
|
||||||
|
<h3>📝 Documentation</h3>
|
||||||
|
<p>Write guides, improve READMEs, translate content</p>
|
||||||
|
</td>
|
||||||
|
<td align="center" width="25%">
|
||||||
|
<h3>🧪 Testing</h3>
|
||||||
|
<p>Test scripts and report compatibility issues</p>
|
||||||
|
</td>
|
||||||
|
<td align="center" width="25%">
|
||||||
|
<h3>💡 Ideas</h3>
|
||||||
|
<p>Suggest features or workflow improvements</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
<br />
|
||||||
|
|
||||||
|
👉 Check our **[Contributing Guidelines](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/README.md)** to get started
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ❤️ Support the Project
|
||||||
|
|
||||||
|
This project is maintained by volunteers in memory of tteck. Your support helps us maintain infrastructure, improve documentation, and give back to important causes.
|
||||||
|
|
||||||
|
**🎗️ 30% of all donations go directly to cancer research and hospice care**
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
<a href="https://ko-fi.com/community_scripts">
|
||||||
|
<img src="https://img.shields.io/badge/☕_Buy_us_a_coffee-Support_on_Ko--fi-FF5F5F?style=for-the-badge&labelColor=2d3748" alt="Support on Ko-fi" />
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<sub>Every contribution helps keep this project alive and supports meaningful causes</sub>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📈 Project Statistics
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img
|
<img
|
||||||
src="https://repobeats.axiom.co/api/embed/57edde03e00f88d739bdb5b844ff7d07dd079375.svg"
|
src="https://repobeats.axiom.co/api/embed/57edde03e00f88d739bdb5b844ff7d07dd079375.svg"
|
||||||
alt="Repository activity"
|
alt="Repobeats analytics"
|
||||||
width="700"
|
width="650"
|
||||||
/>
|
/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
|
<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
|
||||||
<picture>
|
<picture>
|
||||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" />
|
<source
|
||||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
|
media="(prefers-color-scheme: dark)"
|
||||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" width="700" />
|
srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark"
|
||||||
|
/>
|
||||||
|
<source
|
||||||
|
media="(prefers-color-scheme: light)"
|
||||||
|
srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date"
|
||||||
|
/>
|
||||||
|
<img
|
||||||
|
alt="Star History Chart"
|
||||||
|
src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date"
|
||||||
|
width="650"
|
||||||
|
/>
|
||||||
</picture>
|
</picture>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Support the Project
|
## 📜 License
|
||||||
|
|
||||||
This project is maintained by volunteers. All infrastructure costs come out of pocket, and the work is done in people's spare time.
|
This project is licensed under the **[MIT License](LICENSE)** - feel free to use, modify, and distribute.
|
||||||
|
|
||||||
**30% of all donations are forwarded directly to cancer research and hospice care** — a cause that was important to tteck.
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
<a href="https://ko-fi.com/community_scripts">
|
|
||||||
<img src="https://img.shields.io/badge/Support_on_Ko--fi-FF5F5F?style=for-the-badge&logo=ko-fi&logoColor=white" alt="Support on Ko-fi" />
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a href="https://community-scripts.org/donate">
|
|
||||||
<img src="https://img.shields.io/badge/Donate-community--scripts.org%2Fdonate-4c9b3f?style=for-the-badge" alt="Donate via community-scripts.org" />
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
This project is licensed under the [MIT License](LICENSE) — free to use, modify, and redistribute for personal and commercial purposes.
|
|
||||||
|
|
||||||
See the full license text in [LICENSE](LICENSE).
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<sub>Built on the foundation of <a href="https://github.com/tteck">tteck</a>'s original work · <a href="https://github.com/tteck/Proxmox">Original Repository</a></sub><br/>
|
<sub>Made with ❤️ by the Proxmox community in memory of tteck</sub>
|
||||||
<sub>Maintained and expanded by the community · In memory of tteck</sub><br/>
|
<br />
|
||||||
<sub><i>Proxmox® is a registered trademark of <a href="https://www.proxmox.com/en/about/company">Proxmox Server Solutions GmbH</a></i></sub>
|
<sub><i>Proxmox® is a registered trademark of <a href="https://www.proxmox.com/en/about/company">Proxmox Server Solutions GmbH</a></i></sub>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -48,9 +48,9 @@ function update_script() {
|
|||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
msg_warn "Old Installation Found, you need to migrate your data and recreate to a new container"
|
msg_info "Old Installation Found, you need to migrate your data and recreate to a new container"
|
||||||
msg_warn "Please follow the instructions on the Actual Budget website to migrate your data"
|
msg_info "Please follow the instructions on the Actual Budget website to migrate your data"
|
||||||
msg_warn "https://actualbudget.org/docs/backup-restore/backup"
|
msg_info "https://actualbudget.org/docs/backup-restore/backup"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
|
|||||||
@@ -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/nearai/ironclaw
|
|
||||||
|
|
||||||
APP="Alpine-IronClaw"
|
|
||||||
var_tags="${var_tags:-ai;agent;alpine}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-1024}"
|
|
||||||
var_disk="${var_disk:-8}"
|
|
||||||
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 [[ ! -f /usr/local/bin/ironclaw ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "ironclaw-bin" "nearai/ironclaw"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
rc-service ironclaw stop 2>/dev/null || true
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up Configuration"
|
|
||||||
cp /root/.ironclaw/.env /root/ironclaw.env.bak
|
|
||||||
msg_ok "Backed up Configuration"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "latest" "/usr/local/bin" \
|
|
||||||
"ironclaw-$(uname -m)-unknown-linux-musl.tar.gz"
|
|
||||||
chmod +x /usr/local/bin/ironclaw
|
|
||||||
|
|
||||||
msg_info "Restoring Configuration"
|
|
||||||
cp /root/ironclaw.env.bak /root/.ironclaw/.env
|
|
||||||
rm -f /root/ironclaw.env.bak
|
|
||||||
msg_ok "Restored Configuration"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
rc-service ironclaw start
|
|
||||||
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} Complete setup by running:${CL}"
|
|
||||||
echo -e "${TAB}${BGN}ironclaw onboard${CL}"
|
|
||||||
echo -e "${INFO}${YW} Then start the service:${CL}"
|
|
||||||
echo -e "${TAB}${BGN}rc-service ironclaw start${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access the Web UI at:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
|
||||||
echo -e "${INFO}${YW} Auth token and database credentials:${CL}"
|
|
||||||
echo -e "${TAB}${BGN}cat /root/.ironclaw/.env${CL}"
|
|
||||||
@@ -22,6 +22,8 @@ catch_errors
|
|||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
if [[ ! -d /opt/wakapi ]]; then
|
if [[ ! -d /opt/wakapi ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
@@ -42,10 +44,12 @@ function update_script() {
|
|||||||
cp /opt/wakapi/config.yml /opt/wakapi/wakapi_db.db /opt/wakapi-backup/
|
cp /opt/wakapi/config.yml /opt/wakapi/wakapi_db.db /opt/wakapi-backup/
|
||||||
msg_ok "Created backup"
|
msg_ok "Created backup"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wakapi" "muety/wakapi" "prebuild" "latest" "/opt/wakapi" "wakapi_linux_amd64.zip"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wakapi" "muety/wakapi" "tarball"
|
||||||
|
|
||||||
msg_info "Configuring Wakapi"
|
msg_info "Configuring Wakapi"
|
||||||
cd /opt/wakapi
|
cd /opt/wakapi
|
||||||
|
$STD go mod download
|
||||||
|
$STD go build -o wakapi
|
||||||
cp /opt/wakapi-backup/config.yml /opt/wakapi/
|
cp /opt/wakapi-backup/config.yml /opt/wakapi/
|
||||||
cp /opt/wakapi-backup/wakapi_db.db /opt/wakapi/
|
cp /opt/wakapi-backup/wakapi_db.db /opt/wakapi/
|
||||||
rm -rf /opt/wakapi-backup
|
rm -rf /opt/wakapi-backup
|
||||||
|
|||||||
83
ct/anchor.sh
83
ct/anchor.sh
@@ -1,83 +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/ZhFahim/anchor
|
|
||||||
|
|
||||||
APP="Anchor"
|
|
||||||
var_tags="${var_tags:-notes;productivity;sync}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-10}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -f ~/.anchor ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "anchor" "ZhFahim/anchor"; then
|
|
||||||
msg_info "Stopping Services"
|
|
||||||
systemctl stop anchor-web anchor-server
|
|
||||||
msg_ok "Stopped Services"
|
|
||||||
|
|
||||||
msg_info "Backing up Configuration"
|
|
||||||
cp /opt/anchor/.env /opt/anchor.env.bak
|
|
||||||
msg_ok "Backed up Configuration"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "anchor" "ZhFahim/anchor" "tarball"
|
|
||||||
|
|
||||||
msg_info "Building Server"
|
|
||||||
cd /opt/anchor/server
|
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
$STD pnpm prisma generate
|
|
||||||
$STD pnpm build
|
|
||||||
[[ -d src/generated ]] && mkdir -p dist/src && cp -R src/generated dist/src/
|
|
||||||
msg_ok "Built Server"
|
|
||||||
|
|
||||||
msg_info "Building Web Interface"
|
|
||||||
cd /opt/anchor/web
|
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
SERVER_URL=http://127.0.0.1:3001 $STD pnpm build
|
|
||||||
cp -r .next/static .next/standalone/.next/static
|
|
||||||
cp -r public .next/standalone/public
|
|
||||||
msg_ok "Built Web Interface"
|
|
||||||
|
|
||||||
cp /opt/anchor.env.bak /opt/anchor/.env
|
|
||||||
rm -f /opt/anchor.env.bak
|
|
||||||
|
|
||||||
msg_info "Running Database Migrations"
|
|
||||||
cd /opt/anchor/server
|
|
||||||
set -a && source /opt/anchor/.env && set +a
|
|
||||||
$STD pnpm prisma migrate deploy
|
|
||||||
msg_ok "Ran Database Migrations"
|
|
||||||
|
|
||||||
msg_info "Starting Services"
|
|
||||||
systemctl start anchor-server anchor-web
|
|
||||||
msg_ok "Started Services"
|
|
||||||
msg_ok "Updated ${APP}"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
|
||||||
@@ -48,7 +48,6 @@ function update_script() {
|
|||||||
mv /tmp/production.py.bak /opt/babybuddy/babybuddy/settings/production.py
|
mv /tmp/production.py.bak /opt/babybuddy/babybuddy/settings/production.py
|
||||||
source .venv/bin/activate
|
source .venv/bin/activate
|
||||||
$STD uv pip install -r requirements.txt
|
$STD uv pip install -r requirements.txt
|
||||||
export DJANGO_SETTINGS_MODULE=babybuddy.settings.production
|
|
||||||
$STD python manage.py migrate
|
$STD python manage.py migrate
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
|
|||||||
@@ -29,8 +29,6 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ensure_dependencies ffmpeg
|
|
||||||
|
|
||||||
if check_for_gh_release "bambuddy" "maziggy/bambuddy"; then
|
if check_for_gh_release "bambuddy" "maziggy/bambuddy"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop bambuddy
|
systemctl stop bambuddy
|
||||||
@@ -39,16 +37,13 @@ function update_script() {
|
|||||||
msg_info "Backing up Configuration and Data"
|
msg_info "Backing up Configuration and Data"
|
||||||
cp /opt/bambuddy/.env /opt/bambuddy.env.bak
|
cp /opt/bambuddy/.env /opt/bambuddy.env.bak
|
||||||
cp -r /opt/bambuddy/data /opt/bambuddy_data_bak
|
cp -r /opt/bambuddy/data /opt/bambuddy_data_bak
|
||||||
[[ -f /opt/bambuddy/bambuddy.db ]] && cp /opt/bambuddy/bambuddy.db /opt/bambuddy.db.bak
|
|
||||||
[[ -f /opt/bambuddy/bambutrack.db ]] && cp /opt/bambuddy/bambutrack.db /opt/bambutrack.db.bak
|
|
||||||
[[ -d /opt/bambuddy/archive ]] && cp -r /opt/bambuddy/archive /opt/bambuddy_archive_bak
|
|
||||||
msg_ok "Backed up Configuration and Data"
|
msg_ok "Backed up Configuration and Data"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bambuddy" "maziggy/bambuddy" "tarball" "latest" "/opt/bambuddy"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bambuddy" "maziggy/bambuddy" "tarball" "latest" "/opt/bambuddy"
|
||||||
|
|
||||||
msg_info "Updating Python Dependencies"
|
msg_info "Updating Python Dependencies"
|
||||||
cd /opt/bambuddy
|
cd /opt/bambuddy
|
||||||
$STD uv venv --clear
|
$STD uv venv
|
||||||
$STD uv pip install -r requirements.txt
|
$STD uv pip install -r requirements.txt
|
||||||
msg_ok "Updated Python Dependencies"
|
msg_ok "Updated Python Dependencies"
|
||||||
|
|
||||||
@@ -59,17 +54,10 @@ function update_script() {
|
|||||||
msg_ok "Rebuilt Frontend"
|
msg_ok "Rebuilt Frontend"
|
||||||
|
|
||||||
msg_info "Restoring Configuration and Data"
|
msg_info "Restoring Configuration and Data"
|
||||||
mkdir -p /opt/bambuddy/data
|
|
||||||
cp /opt/bambuddy.env.bak /opt/bambuddy/.env
|
cp /opt/bambuddy.env.bak /opt/bambuddy/.env
|
||||||
cp -r /opt/bambuddy_data_bak/. /opt/bambuddy/data/
|
cp -r /opt/bambuddy_data_bak/. /opt/bambuddy/data/
|
||||||
[[ -f /opt/bambuddy.db.bak ]] && cp /opt/bambuddy.db.bak /opt/bambuddy/bambuddy.db
|
rm -f /opt/bambuddy.env.bak
|
||||||
[[ -f /opt/bambutrack.db.bak ]] && cp /opt/bambutrack.db.bak /opt/bambuddy/bambutrack.db
|
rm -rf /opt/bambuddy_data_bak
|
||||||
if [[ -d /opt/bambuddy_archive_bak ]]; then
|
|
||||||
mkdir -p /opt/bambuddy/archive
|
|
||||||
cp -r /opt/bambuddy_archive_bak/. /opt/bambuddy/archive/
|
|
||||||
fi
|
|
||||||
rm -f /opt/bambuddy.env.bak /opt/bambuddy.db.bak /opt/bambutrack.db.bak
|
|
||||||
rm -rf /opt/bambuddy_data_bak /opt/bambuddy_archive_bak
|
|
||||||
msg_ok "Restored Configuration and Data"
|
msg_ok "Restored Configuration and Data"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ function update_script() {
|
|||||||
msg_info "Updating BentoPDF"
|
msg_info "Updating BentoPDF"
|
||||||
cd /opt/bentopdf
|
cd /opt/bentopdf
|
||||||
$STD npm ci --no-audit --no-fund
|
$STD npm ci --no-audit --no-fund
|
||||||
|
$STD npm install http-server -g
|
||||||
if [[ -f /opt/production.env ]]; then
|
if [[ -f /opt/production.env ]]; then
|
||||||
mv /opt/production.env ./.env.production
|
mv /opt/production.env ./.env.production
|
||||||
else
|
else
|
||||||
@@ -51,97 +52,15 @@ function update_script() {
|
|||||||
export SIMPLE_MODE=true
|
export SIMPLE_MODE=true
|
||||||
export VITE_USE_CDN=true
|
export VITE_USE_CDN=true
|
||||||
$STD npm run build:all
|
$STD npm run build:all
|
||||||
if [[ ! -f /opt/bentopdf/dist/config.json ]]; then
|
|
||||||
cat <<'EOF' >/opt/bentopdf/dist/config.json
|
|
||||||
{}
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
msg_ok "Updated BentoPDF"
|
msg_ok "Updated BentoPDF"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
ensure_dependencies nginx openssl
|
if grep -q '8080' /etc/systemd/system/bentopdf.service; then
|
||||||
if [[ ! -f /etc/ssl/private/bentopdf-selfsigned.key || ! -f /etc/ssl/certs/bentopdf-selfsigned.crt ]]; then
|
sed -i -e 's|/bentopdf|/bentopdf/dist|' \
|
||||||
CERT_CN="$(hostname -I | awk '{print $1}')"
|
-e 's|npx.*|npx http-server -g -b -d false -r --no-dotfiles|' \
|
||||||
$STD openssl req -x509 -nodes -newkey rsa:2048 -days 3650 \
|
/etc/systemd/system/bentopdf.service
|
||||||
-keyout /etc/ssl/private/bentopdf-selfsigned.key \
|
systemctl daemon-reload
|
||||||
-out /etc/ssl/certs/bentopdf-selfsigned.crt \
|
|
||||||
-subj "/CN=${CERT_CN}"
|
|
||||||
fi
|
fi
|
||||||
cat <<'EOF' >/etc/nginx/sites-available/bentopdf
|
|
||||||
server {
|
|
||||||
listen 8080;
|
|
||||||
server_name _;
|
|
||||||
return 301 https://$host:8443$request_uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
listen 8443 ssl;
|
|
||||||
server_name _;
|
|
||||||
ssl_certificate /etc/ssl/certs/bentopdf-selfsigned.crt;
|
|
||||||
ssl_certificate_key /etc/ssl/private/bentopdf-selfsigned.key;
|
|
||||||
root /opt/bentopdf/dist;
|
|
||||||
index index.html;
|
|
||||||
|
|
||||||
# Required for LibreOffice WASM (Word/Excel/PowerPoint to PDF via SharedArrayBuffer)
|
|
||||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
|
||||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
|
||||||
add_header Cross-Origin-Resource-Policy "cross-origin" always;
|
|
||||||
add_header X-Content-Type-Options "nosniff" always;
|
|
||||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
|
||||||
|
|
||||||
gzip_static on;
|
|
||||||
|
|
||||||
location ~* /libreoffice-wasm/soffice\.wasm\.gz$ {
|
|
||||||
gzip off;
|
|
||||||
types {} default_type application/wasm;
|
|
||||||
add_header Content-Encoding gzip;
|
|
||||||
add_header Vary "Accept-Encoding";
|
|
||||||
add_header Cache-Control "public, immutable";
|
|
||||||
}
|
|
||||||
|
|
||||||
location ~* /libreoffice-wasm/soffice\.data\.gz$ {
|
|
||||||
gzip off;
|
|
||||||
types {} default_type application/octet-stream;
|
|
||||||
add_header Content-Encoding gzip;
|
|
||||||
add_header Vary "Accept-Encoding";
|
|
||||||
add_header Cache-Control "public, immutable";
|
|
||||||
}
|
|
||||||
|
|
||||||
location ~* \.wasm$ {
|
|
||||||
types {} default_type application/wasm;
|
|
||||||
expires 1y;
|
|
||||||
add_header Cache-Control "public, immutable";
|
|
||||||
}
|
|
||||||
|
|
||||||
location ~* \.(wasm\.gz|data\.gz|data)$ {
|
|
||||||
expires 1y;
|
|
||||||
add_header Cache-Control "public, immutable";
|
|
||||||
}
|
|
||||||
|
|
||||||
location / {
|
|
||||||
try_files $uri $uri/ $uri.html =404;
|
|
||||||
}
|
|
||||||
|
|
||||||
error_page 404 /404.html;
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
rm -f /etc/nginx/sites-enabled/default
|
|
||||||
ln -sf /etc/nginx/sites-available/bentopdf /etc/nginx/sites-enabled/bentopdf
|
|
||||||
cat <<'EOF' >/etc/systemd/system/bentopdf.service
|
|
||||||
[Unit]
|
|
||||||
Description=BentoPDF Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
ExecStart=/usr/sbin/nginx -g "daemon off;"
|
|
||||||
ExecReload=/bin/kill -HUP $MAINPID
|
|
||||||
Restart=always
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl start bentopdf
|
systemctl start bentopdf
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
@@ -156,4 +75,4 @@ description
|
|||||||
msg_ok "Completed successfully!\n"
|
msg_ok "Completed successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:8443${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
ensure_dependencies git
|
|
||||||
if check_for_gh_release "bookstack" "BookStackApp/BookStack"; then
|
if check_for_gh_release "bookstack" "BookStackApp/BookStack"; then
|
||||||
msg_info "Stopping Apache2"
|
msg_info "Stopping Apache2"
|
||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
|
|||||||
@@ -29,41 +29,28 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "bytestash" "jordan-dalby/ByteStash"; then
|
if check_for_gh_release "bytestash" "jordan-dalby/ByteStash"; then
|
||||||
msg_info "Stopping Services"
|
read -rp "${TAB3}Did you make a backup via application WebUI? (y/n): " backuped
|
||||||
systemctl stop bytestash-backend bytestash-frontend
|
if [[ "$backuped" =~ ^[Yy]$ ]]; then
|
||||||
msg_ok "Services Stopped"
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop bytestash-backend bytestash-frontend
|
||||||
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
msg_info "Backing up data"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bytestash" "jordan-dalby/ByteStash" "tarball"
|
||||||
tmp_dir="/opt/bytestash-data-backup"
|
|
||||||
mkdir -p "$tmp_dir"
|
msg_info "Configuring ByteStash"
|
||||||
if [[ -d /opt/bytestash/data ]]; then
|
cd /opt/bytestash/server
|
||||||
cp -r /opt/bytestash/data "$tmp_dir"/data
|
$STD npm install
|
||||||
elif [[ -d /opt/data ]]; then
|
cd /opt/bytestash/client
|
||||||
cp -r /opt/data "$tmp_dir"/data
|
$STD npm install
|
||||||
|
msg_ok "Updated ByteStash"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start bytestash-backend bytestash-frontend
|
||||||
|
msg_ok "Started Services"
|
||||||
|
else
|
||||||
|
msg_error "PLEASE MAKE A BACKUP FIRST!"
|
||||||
|
exit
|
||||||
fi
|
fi
|
||||||
msg_ok "Data backed up"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bytestash" "jordan-dalby/ByteStash" "tarball"
|
|
||||||
|
|
||||||
msg_info "Restoring data"
|
|
||||||
if [[ -d "$tmp_dir"/data ]]; then
|
|
||||||
mkdir -p /opt/bytestash/data
|
|
||||||
cp -r "$tmp_dir"/data/* /opt/bytestash/data/
|
|
||||||
rm -rf "$tmp_dir"
|
|
||||||
fi
|
|
||||||
msg_ok "Data restored"
|
|
||||||
|
|
||||||
msg_info "Configuring ByteStash"
|
|
||||||
cd /opt/bytestash/server
|
|
||||||
$STD npm install
|
|
||||||
cd /opt/bytestash/client
|
|
||||||
$STD npm install
|
|
||||||
msg_ok "Updated ByteStash"
|
|
||||||
|
|
||||||
msg_info "Starting Services"
|
|
||||||
systemctl start bytestash-backend bytestash-frontend
|
|
||||||
msg_ok "Started Services"
|
|
||||||
|
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
cd /opt/calibre-web
|
cd /opt/calibre-web
|
||||||
$STD uv venv --clear /opt/calibre-web/.venv
|
$STD uv venv
|
||||||
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir --upgrade pip setuptools wheel
|
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir --upgrade pip setuptools wheel
|
||||||
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir -r requirements.txt
|
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir -r requirements.txt
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|||||||
@@ -34,11 +34,11 @@ function update_script() {
|
|||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
$STD pip3 install changedetection.io --upgrade --break-system-packages --ignore-installed typing_extensions
|
$STD pip3 install changedetection.io --upgrade
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
msg_info "Updating Playwright"
|
msg_info "Updating Playwright"
|
||||||
$STD pip3 install playwright --upgrade --break-system-packages
|
$STD pip3 install playwright --upgrade
|
||||||
msg_ok "Updated Playwright"
|
msg_ok "Updated Playwright"
|
||||||
|
|
||||||
if [[ -f /etc/systemd/system/browserless.service ]]; then
|
if [[ -f /etc/systemd/system/browserless.service ]]; then
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ function update_script() {
|
|||||||
[ -f /opt/checkmate/client/.env.local ] && cp /opt/checkmate/client/.env.local /opt/checkmate_client.env.local.bak
|
[ -f /opt/checkmate/client/.env.local ] && cp /opt/checkmate/client/.env.local /opt/checkmate_client.env.local.bak
|
||||||
msg_ok "Backed up Data"
|
msg_ok "Backed up Data"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" "tarball"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate"
|
||||||
|
|
||||||
msg_info "Updating Checkmate Server"
|
msg_info "Updating Checkmate Server"
|
||||||
cd /opt/checkmate/server
|
cd /opt/checkmate/server
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
|||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-6}"
|
var_disk="${var_disk:-6}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -29,11 +29,10 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -Ev 'rc|b' | sort -V | tail -n 1)
|
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -Ev 'rc|b' | sort -V | tail -n 1)
|
||||||
RELEASE="${RELEASE%%+*}"
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
$STD omd stop monitoring
|
$STD omd stop monitoring
|
||||||
$STD omd cp monitoring monitoringbackup
|
$STD omd cp monitoring monitoringbackup
|
||||||
curl -fsSL "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.$(get_os_info codename)_amd64.deb" -o "/opt/checkmk.deb"
|
curl -fsSL "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb" -o "/opt/checkmk.deb"
|
||||||
$STD apt-get install -y /opt/checkmk.deb
|
$STD apt-get install -y /opt/checkmk.deb
|
||||||
$STD omd --force -V ${RELEASE}.cre update --conflict=install monitoring
|
$STD omd --force -V ${RELEASE}.cre update --conflict=install monitoring
|
||||||
$STD omd start monitoring
|
$STD omd start monitoring
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
#!/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 tteck
|
||||||
# Author: MintHCM
|
# Author: tteck (tteckster)
|
||||||
# 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/minthcm/minthcm
|
# Source: https://daemonsync.me/
|
||||||
|
|
||||||
APP="MintHCM"
|
APP="Daemon Sync"
|
||||||
var_tags="${var_tags:-hcm}"
|
var_tags="${var_tags:-sync}"
|
||||||
var_disk="${var_disk:-20}"
|
var_cpu="${var_cpu:-1}"
|
||||||
var_cpu="${var_cpu:-4}"
|
var_ram="${var_ram:-512}"
|
||||||
var_ram="${var_ram:-4096}"
|
var_disk="${var_disk:-8}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
@@ -18,16 +18,20 @@ header_info "$APP"
|
|||||||
variables
|
variables
|
||||||
color
|
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 [[ ! -d /var/www/MintHCM ]]; then
|
if [[ ! -d /var ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
msg_info "Updating LXC"
|
||||||
msg_custom "🚀" "${GN}" "The app offers a built-in updater. Please use it."
|
$STD apt update
|
||||||
|
$STD apt -y upgrade
|
||||||
|
msg_ok "Updated LXC"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,4 +42,4 @@ description
|
|||||||
msg_ok "Completed successfully!\n"
|
msg_ok "Completed successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8084${CL}"
|
||||||
64
ct/dagu.sh
64
ct/dagu.sh
@@ -1,64 +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://dagu.sh/
|
|
||||||
|
|
||||||
APP="Dagu"
|
|
||||||
var_tags="${var_tags:-automation;workflow;scheduler}"
|
|
||||||
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 /opt/dagu/dagu ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "dagu" "dagucloud/dagu"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop dagu
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
|
||||||
cp -r /opt/dagu/data /opt/dagu_data_backup
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "dagu" "dagucloud/dagu" "prebuild" "latest" "/opt/dagu" "dagu_*_linux_amd64.tar.gz"
|
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
|
||||||
mkdir -p /opt/dagu/data
|
|
||||||
cp -r /opt/dagu_data_backup/. /opt/dagu/data
|
|
||||||
rm -rf /opt/dagu_data_backup
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start dagu
|
|
||||||
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}"
|
|
||||||
73
ct/dashy.sh
73
ct/dashy.sh
@@ -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: tteck (tteckster) | Co-Author: CrazyWolf13
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://dashy.to/
|
|
||||||
|
|
||||||
APP="Dashy"
|
|
||||||
var_tags="${var_tags:-dashboard}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-6}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /opt/dashy/public/ ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
if check_for_gh_release "dashy" "Lissy93/dashy"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop dashy
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up conf.yml"
|
|
||||||
if [[ -f /opt/dashy/public/conf.yml ]]; then
|
|
||||||
cp -R /opt/dashy/public/conf.yml /opt/dashy_conf_backup.yml
|
|
||||||
else
|
|
||||||
cp -R /opt/dashy/user-data/conf.yml /opt/dashy_conf_backup.yml
|
|
||||||
fi
|
|
||||||
msg_ok "Backed up conf.yml"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dashy" "Lissy93/dashy" "prebuild" "latest" "/opt/dashy" "dashy-*.tar.gz"
|
|
||||||
|
|
||||||
msg_info "Updating Dashy"
|
|
||||||
cd /opt/dashy
|
|
||||||
$STD yarn install --ignore-engines --network-timeout 300000
|
|
||||||
msg_ok "Updated Dashy"
|
|
||||||
|
|
||||||
msg_info "Restoring conf.yml"
|
|
||||||
cp -R /opt/dashy_conf_backup.yml /opt/dashy/user-data
|
|
||||||
msg_ok "Restored conf.yml"
|
|
||||||
|
|
||||||
msg_info "Cleaning"
|
|
||||||
rm -rf /opt/dashy_conf_backup.yml /opt/dashy/public/conf.yml
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
|
|
||||||
msg_info "Starting Dashy"
|
|
||||||
systemctl start dashy
|
|
||||||
msg_ok "Started Dashy"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}"
|
|
||||||
@@ -20,43 +20,41 @@ 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 [[ ! -d /opt/domain-locker ]]; then
|
if [[ ! -d /opt/domain-locker ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "domain-locker" "Lissy93/domain-locker"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop domain-locker
|
||||||
|
msg_info "Service stopped"
|
||||||
|
|
||||||
|
PG_VERSION="17" setup_postgresql
|
||||||
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-locker" "Lissy93/domain-locker" "tarball"
|
||||||
|
|
||||||
|
msg_info "Installing Modules (patience)"
|
||||||
|
cd /opt/domain-locker
|
||||||
|
$STD npm install
|
||||||
|
msg_ok "Installed Modules"
|
||||||
|
|
||||||
|
msg_info "Building Domain-Locker (a lot of patience)"
|
||||||
|
set -a
|
||||||
|
source /opt/domain-locker.env
|
||||||
|
set +a
|
||||||
|
$STD npm run build
|
||||||
|
msg_info "Built Domain-Locker"
|
||||||
|
|
||||||
|
msg_info "Restarting Services"
|
||||||
|
systemctl start domain-locker
|
||||||
|
msg_ok "Restarted Services"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
fi
|
|
||||||
|
|
||||||
ensure_dependencies whois
|
|
||||||
|
|
||||||
if check_for_gh_release "domain-locker" "Lissy93/domain-locker"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop domain-locker
|
|
||||||
msg_info "Service stopped"
|
|
||||||
|
|
||||||
PG_VERSION="17" setup_postgresql
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-locker" "Lissy93/domain-locker" "tarball"
|
|
||||||
|
|
||||||
msg_info "Installing Modules (patience)"
|
|
||||||
cd /opt/domain-locker
|
|
||||||
$STD npm install
|
|
||||||
msg_ok "Installed Modules"
|
|
||||||
|
|
||||||
msg_info "Building Domain-Locker (a lot of patience)"
|
|
||||||
set -a
|
|
||||||
source /opt/domain-locker.env
|
|
||||||
set +a
|
|
||||||
$STD npm run build
|
|
||||||
msg_info "Built Domain-Locker"
|
|
||||||
|
|
||||||
msg_info "Restarting Services"
|
|
||||||
systemctl start domain-locker
|
|
||||||
msg_ok "Restarted Services"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if ! grep -Fq "www-data /usr/bin/php /opt/domain-monitor/cron/check_domains.php" /etc/crontab; then
|
if ! grep -Fq "www-data /usr/bin/php /opt/domain-monitor/cron/check_domains.php" /etc/crontab; then
|
||||||
echo "0 0 * * * www-data /usr/bin/php /opt/domain-monitor/cron/check_domains.php" >>/etc/crontab
|
echo "0 0 * * * www-data /usr/bin/php /opt/domain-monitor/cron/check_domains.php" >> /etc/crontab
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "domain-monitor" "Hosteroid/domain-monitor"; then
|
if check_for_gh_release "domain-monitor" "Hosteroid/domain-monitor"; then
|
||||||
@@ -52,7 +52,6 @@ function update_script() {
|
|||||||
msg_info "Updating Domain Monitor"
|
msg_info "Updating Domain Monitor"
|
||||||
cd /opt/domain-monitor
|
cd /opt/domain-monitor
|
||||||
$STD composer install
|
$STD composer install
|
||||||
chown -R www-data:www-data /opt/domain-monitor
|
|
||||||
msg_ok "Updated Domain Monitor"
|
msg_ok "Updated Domain Monitor"
|
||||||
|
|
||||||
msg_info "Restoring backup"
|
msg_info "Restoring backup"
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ function update_script() {
|
|||||||
cp -r /opt/flatnotes/data /opt/flatnotes_data_backup
|
cp -r /opt/flatnotes/data /opt/flatnotes_data_backup
|
||||||
msg_ok "Backed up Configuration and Data"
|
msg_ok "Backed up Configuration and Data"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes" "tarball"
|
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes"
|
||||||
|
|
||||||
msg_info "Updating Flatnotes"
|
msg_info "Updating Flatnotes"
|
||||||
cd /opt/flatnotes/client
|
cd /opt/flatnotes/client
|
||||||
|
|||||||
@@ -1,61 +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://github.com/foldergram/foldergram
|
|
||||||
|
|
||||||
APP="Foldergram"
|
|
||||||
var_tags="${var_tags:-photos}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-2048}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /opt/foldergram ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "foldergram" "foldergram/foldergram"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop foldergram
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "foldergram" "foldergram/foldergram" "tarball"
|
|
||||||
|
|
||||||
msg_info "Installing Foldergram"
|
|
||||||
cd /opt/foldergram
|
|
||||||
$STD pnpm install --frozen-lockfile
|
|
||||||
$STD pnpm run build
|
|
||||||
msg_ok "Installed Foldergram"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start foldergram
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
cleanup_lxc
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4141${CL}"
|
|
||||||
@@ -25,7 +25,7 @@ function update_script() {
|
|||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
ensure_dependencies git
|
ensure_dependencies git
|
||||||
|
|
||||||
msg_info "Updating Ghost"
|
msg_info "Updating Ghost"
|
||||||
|
|||||||
@@ -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/actions/runner
|
|
||||||
|
|
||||||
APP="GitHub-Runner"
|
|
||||||
var_tags="${var_tags:-ci}"
|
|
||||||
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}"
|
|
||||||
var_nesting="${var_nesting:-1}"
|
|
||||||
var_keyctl="${var_keyctl:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -f /opt/actions-runner/run.sh ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "actions-runner" "actions/runner"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop actions-runner
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up runner configuration"
|
|
||||||
BACKUP_DIR="/opt/actions-runner.backup"
|
|
||||||
mkdir -p "$BACKUP_DIR"
|
|
||||||
for f in .runner .credentials .credentials_rsaparams .env .path; do
|
|
||||||
[[ -f /opt/actions-runner/$f ]] && cp -a /opt/actions-runner/$f "$BACKUP_DIR/"
|
|
||||||
done
|
|
||||||
msg_ok "Backed up configuration"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "actions-runner" "actions/runner" "prebuild" "latest" "/opt/actions-runner" "actions-runner-linux-x64-*.tar.gz"
|
|
||||||
|
|
||||||
msg_info "Restoring runner configuration"
|
|
||||||
for f in .runner .credentials .credentials_rsaparams .env .path; do
|
|
||||||
[[ -f "$BACKUP_DIR/$f" ]] && cp -a "$BACKUP_DIR/$f" /opt/actions-runner/
|
|
||||||
done
|
|
||||||
rm -rf "$BACKUP_DIR"
|
|
||||||
msg_ok "Restored configuration"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start actions-runner
|
|
||||||
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} After first boot, run config.sh with your token and start the service.${CL}"
|
|
||||||
65
ct/gogs.sh
65
ct/gogs.sh
@@ -1,65 +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://gogs.io/
|
|
||||||
|
|
||||||
APP="Gogs"
|
|
||||||
var_tags="${var_tags:-git;code;devops}"
|
|
||||||
var_cpu="${var_cpu:-2}"
|
|
||||||
var_ram="${var_ram:-1024}"
|
|
||||||
var_disk="${var_disk:-8}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -f /opt/gogs/gogs ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "gogs" "gogs/gogs"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop gogs
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
|
||||||
cp -r /opt/gogs/custom /opt/gogs_custom_backup
|
|
||||||
cp -r /opt/gogs/data /opt/gogs_data_backup
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gogs" "gogs/gogs" "prebuild" "latest" "/opt/gogs" "gogs_*_linux_amd64.tar.gz"
|
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
|
||||||
cp -r /opt/gogs_custom_backup/. /opt/gogs/custom
|
|
||||||
cp -r /opt/gogs_data_backup/. /opt/gogs/data
|
|
||||||
rm -rf /opt/gogs_custom_backup /opt/gogs_data_backup
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start gogs
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
|
||||||
@@ -53,6 +53,7 @@ function update_script() {
|
|||||||
[[ -f /opt/grist_bak/landing.db ]] && cp /opt/grist_bak/landing.db /opt/grist/landing.db
|
[[ -f /opt/grist_bak/landing.db ]] && cp /opt/grist_bak/landing.db /opt/grist/landing.db
|
||||||
cd /opt/grist
|
cd /opt/grist
|
||||||
$STD yarn install
|
$STD yarn install
|
||||||
|
$STD yarn run install:ee
|
||||||
$STD yarn run build:prod
|
$STD yarn run build:prod
|
||||||
$STD yarn run install:python
|
$STD yarn run install:python
|
||||||
msg_ok "Updated Grist"
|
msg_ok "Updated Grist"
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
___ __ _ ____ ________
|
|
||||||
/ | / /___ (_)___ ___ / _/________ ____ / ____/ /___ __ __
|
|
||||||
/ /| | / / __ \/ / __ \/ _ \______ / // ___/ __ \/ __ \/ / / / __ `/ | /| / /
|
|
||||||
/ ___ |/ / /_/ / / / / / __/_____// // / / /_/ / / / / /___/ / /_/ /| |/ |/ /
|
|
||||||
/_/ |_/_/ .___/_/_/ /_/\___/ /___/_/ \____/_/ /_/\____/_/\__,_/ |__/|__/
|
|
||||||
/_/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
___ __
|
|
||||||
/ | ____ _____/ /_ ____ _____
|
|
||||||
/ /| | / __ \/ ___/ __ \/ __ \/ ___/
|
|
||||||
/ ___ |/ / / / /__/ / / / /_/ / /
|
|
||||||
/_/ |_/_/ /_/\___/_/ /_/\____/_/
|
|
||||||
|
|
||||||
6
ct/headers/daemonsync
Normal file
6
ct/headers/daemonsync
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ _____
|
||||||
|
/ __ \____ ____ ____ ___ ____ ____ / ___/__ ______ _____
|
||||||
|
/ / / / __ `/ _ \/ __ `__ \/ __ \/ __ \ \__ \/ / / / __ \/ ___/
|
||||||
|
/ /_/ / /_/ / __/ / / / / / /_/ / / / / ___/ / /_/ / / / / /__
|
||||||
|
/_____/\__,_/\___/_/ /_/ /_/\____/_/ /_/ /____/\__, /_/ /_/\___/
|
||||||
|
/____/
|
||||||
@@ -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 @@
|
|||||||
____ _ __
|
|
||||||
____ _ ______ / __/___ (_) /
|
|
||||||
/ __ \ | /| / / __ \/ /_/ __ \/ / /
|
|
||||||
/ /_/ / |/ |/ / / / / __/ /_/ / / /
|
|
||||||
\____/|__/|__/_/ /_/_/ \____/_/_/
|
|
||||||
|
|
||||||
6
ct/headers/pf2etools
Normal file
6
ct/headers/pf2etools
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ _______ ______ __
|
||||||
|
/ __ \/ __/__ \ ___/_ __/___ ____ / /____
|
||||||
|
/ /_/ / /_ __/ // _ \/ / / __ \/ __ \/ / ___/
|
||||||
|
/ ____/ __// __// __/ / / /_/ / /_/ / (__ )
|
||||||
|
/_/ /_/ /____/\___/_/ \____/\____/_/____/
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
__
|
|
||||||
_____/ /____ ____ _________ _
|
|
||||||
/ ___/ __/ _ \/ __ \______/ ___/ __ `/
|
|
||||||
(__ ) /_/ __/ /_/ /_____/ /__/ /_/ /
|
|
||||||
/____/\__/\___/ .___/ \___/\__,_/
|
|
||||||
/_/
|
|
||||||
6
ct/headers/typesense
Normal file
6
ct/headers/typesense
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
______ _____
|
||||||
|
/_ __/_ ______ ___ / ___/___ ____ ________
|
||||||
|
/ / / / / / __ \/ _ \\__ \/ _ \/ __ \/ ___/ _ \
|
||||||
|
/ / / /_/ / /_/ / __/__/ / __/ / / (__ ) __/
|
||||||
|
/_/ \__, / .___/\___/____/\___/_/ /_/____/\___/
|
||||||
|
/____/_/
|
||||||
6
ct/headers/verdaccio
Normal file
6
ct/headers/verdaccio
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_ __ __ _
|
||||||
|
| | / /__ _________/ /___ ___________(_)___
|
||||||
|
| | / / _ \/ ___/ __ / __ `/ ___/ ___/ / __ \
|
||||||
|
| |/ / __/ / / /_/ / /_/ / /__/ /__/ / /_/ /
|
||||||
|
|___/\___/_/ \__,_/\__,_/\___/\___/_/\____/
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
_ ____ ____ ____
|
|
||||||
| | / / /_ ____ / __ \/ __ )
|
|
||||||
| | /| / / __ \/ __ \/ / / / __ |
|
|
||||||
| |/ |/ / / / / /_/ / /_/ / /_/ /
|
|
||||||
|__/|__/_/ /_/\____/_____/_____/
|
|
||||||
|
|
||||||
@@ -65,8 +65,6 @@ EOF
|
|||||||
|
|
||||||
msg_info "Updating Homarr"
|
msg_info "Updating Homarr"
|
||||||
cp /opt/homarr/redis.conf /etc/redis/redis.conf
|
cp /opt/homarr/redis.conf /etc/redis/redis.conf
|
||||||
sed -i -e '$a\' /etc/redis/redis.conf
|
|
||||||
grep -q '^bind 127.0.0.1 -::1$' /etc/redis/redis.conf || echo "bind 127.0.0.1 -::1" >> /etc/redis/redis.conf
|
|
||||||
rm /etc/nginx/nginx.conf
|
rm /etc/nginx/nginx.conf
|
||||||
cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
|
cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
|
||||||
msg_ok "Updated Homarr"
|
msg_ok "Updated Homarr"
|
||||||
|
|||||||
@@ -1,78 +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
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/Pouzor/homelable
|
|
||||||
|
|
||||||
APP="Homelable"
|
|
||||||
var_tags="${var_tags:-monitoring;network;visualization}"
|
|
||||||
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/homelable ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "homelable" "Pouzor/homelable"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop homelable
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up Configuration and Data"
|
|
||||||
cp /opt/homelable/backend/.env /opt/homelable.env.bak
|
|
||||||
cp -r /opt/homelable/data /opt/homelable_data_bak
|
|
||||||
msg_ok "Backed up Configuration and Data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homelable" "Pouzor/homelable" "tarball" "latest" "/opt/homelable"
|
|
||||||
|
|
||||||
msg_info "Updating Python Dependencies"
|
|
||||||
cd /opt/homelable/backend
|
|
||||||
$STD uv venv --clear /opt/homelable/backend/.venv
|
|
||||||
$STD uv pip install --python /opt/homelable/backend/.venv/bin/python -r requirements.txt
|
|
||||||
msg_ok "Updated Python Dependencies"
|
|
||||||
|
|
||||||
msg_info "Rebuilding Frontend"
|
|
||||||
cd /opt/homelable/frontend
|
|
||||||
$STD npm ci
|
|
||||||
$STD npm run build
|
|
||||||
msg_ok "Rebuilt Frontend"
|
|
||||||
|
|
||||||
msg_info "Restoring Configuration and Data"
|
|
||||||
cp /opt/homelable.env.bak /opt/homelable/backend/.env
|
|
||||||
cp -r /opt/homelable_data_bak/. /opt/homelable/data/
|
|
||||||
rm -f /opt/homelable.env.bak
|
|
||||||
rm -rf /opt/homelable_data_bak
|
|
||||||
msg_ok "Restored Configuration and Data"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start homelable
|
|
||||||
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}"
|
|
||||||
@@ -1,63 +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: pfassina
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/androidseb25/iGotify-Notification-Assistent
|
|
||||||
|
|
||||||
APP="iGotify"
|
|
||||||
var_tags="${var_tags:-notifications;gotify}"
|
|
||||||
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}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /opt/igotify ]]; then
|
|
||||||
msg_error "No iGotify Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "igotify" "androidseb25/iGotify-Notification-Assistent"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop igotify
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up Configuration"
|
|
||||||
cp /opt/igotify/.env /opt/igotify.env.bak
|
|
||||||
msg_ok "Backed up Configuration"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "igotify" "androidseb25/iGotify-Notification-Assistent" "prebuild" "latest" "/opt/igotify" "iGotify-Notification-Service-amd64-v*.zip"
|
|
||||||
|
|
||||||
msg_info "Restoring Configuration"
|
|
||||||
cp /opt/igotify.env.bak /opt/igotify/.env
|
|
||||||
rm -f /opt/igotify.env.bak
|
|
||||||
msg_ok "Restored Configuration"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start igotify
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
|
||||||
21
ct/immich.sh
21
ct/immich.sh
@@ -109,7 +109,7 @@ EOF
|
|||||||
msg_ok "Image-processing libraries up to date"
|
msg_ok "Image-processing libraries up to date"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE="v2.7.5"
|
RELEASE="v2.6.3"
|
||||||
if check_for_gh_release "Immich" "immich-app/immich" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
|
if check_for_gh_release "Immich" "immich-app/immich" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
|
||||||
if [[ $(cat ~/.immich) > "2.5.1" ]]; then
|
if [[ $(cat ~/.immich) > "2.5.1" ]]; then
|
||||||
msg_info "Enabling Maintenance Mode"
|
msg_info "Enabling Maintenance Mode"
|
||||||
@@ -181,12 +181,6 @@ EOF
|
|||||||
unset SHARP_IGNORE_GLOBAL_LIBVIPS
|
unset SHARP_IGNORE_GLOBAL_LIBVIPS
|
||||||
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"
|
||||||
|
|
||||||
# Patch helmet.json: disable upgrade-insecure-requests for HTTP access
|
|
||||||
if [[ -f "$APP_DIR/helmet.json" ]]; then
|
|
||||||
jq '.contentSecurityPolicy.directives["upgrade-insecure-requests"] = null' "$APP_DIR/helmet.json" >"$APP_DIR/helmet.json.tmp" && mv "$APP_DIR/helmet.json.tmp" "$APP_DIR/helmet.json"
|
|
||||||
fi
|
|
||||||
|
|
||||||
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|${APP_DIR}/bin/start|" "$APP_DIR"/bin/immich-admin
|
||||||
|
|
||||||
@@ -275,10 +269,6 @@ EOF
|
|||||||
if ! grep -q '^DB_HOSTNAME=' "$INSTALL_DIR"/.env; then
|
if ! grep -q '^DB_HOSTNAME=' "$INSTALL_DIR"/.env; then
|
||||||
sed -i '/^DB_DATABASE_NAME/a DB_HOSTNAME=127.0.0.1' "$INSTALL_DIR"/.env
|
sed -i '/^DB_DATABASE_NAME/a DB_HOSTNAME=127.0.0.1' "$INSTALL_DIR"/.env
|
||||||
fi
|
fi
|
||||||
if ! grep -q 'HELMET_FILE' "$INSTALL_DIR"/.env; then
|
|
||||||
sed -i -e '$a\' "$INSTALL_DIR"/.env
|
|
||||||
echo "IMMICH_HELMET_FILE=true" >>"$INSTALL_DIR"/.env
|
|
||||||
fi
|
|
||||||
|
|
||||||
if grep -q 'ExecStart=/usr/bin/node' /etc/systemd/system/immich-web.service; then
|
if grep -q 'ExecStart=/usr/bin/node' /etc/systemd/system/immich-web.service; then
|
||||||
sed -i '/^EnvironmentFile=/d' /etc/systemd/system/immich-web.service
|
sed -i '/^EnvironmentFile=/d' /etc/systemd/system/immich-web.service
|
||||||
@@ -309,8 +299,7 @@ function compile_libjxl() {
|
|||||||
SOURCE=${SOURCE_DIR}/libjxl
|
SOURCE=${SOURCE_DIR}/libjxl
|
||||||
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
|
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
|
||||||
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
|
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
|
||||||
LIBJXL_REVISION="794a5dcf0d54f9f0b20d288a12e87afb91d20dfc"
|
: "${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"
|
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
|
||||||
@@ -354,8 +343,7 @@ function compile_libjxl() {
|
|||||||
function compile_libheif() {
|
function compile_libheif() {
|
||||||
SOURCE=${SOURCE_DIR}/libheif
|
SOURCE=${SOURCE_DIR}/libheif
|
||||||
ensure_dependencies libaom-dev
|
ensure_dependencies libaom-dev
|
||||||
LIBHEIF_REVISION="35dad50a9145332a7bfdf1ff6aef6801fb613d68"
|
: "${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"
|
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
|
||||||
@@ -386,8 +374,7 @@ function compile_libheif() {
|
|||||||
|
|
||||||
function compile_libraw() {
|
function compile_libraw() {
|
||||||
SOURCE=${SOURCE_DIR}/libraw
|
SOURCE=${SOURCE_DIR}/libraw
|
||||||
LIBRAW_REVISION="0b56545a4f828743f28a4345cdfdd4c49f9f9a2a"
|
: "${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"
|
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
|
||||||
|
|||||||
@@ -27,9 +27,6 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
|
||||||
|
|
||||||
msg_info "Updating ${APP} LXC"
|
msg_info "Updating ${APP} LXC"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt -y upgrade
|
$STD apt -y upgrade
|
||||||
|
|||||||
@@ -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/nearai/ironclaw
|
|
||||||
|
|
||||||
APP="IronClaw"
|
|
||||||
var_tags="${var_tags:-ai;agent;security}"
|
|
||||||
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 [[ ! -f /usr/local/bin/ironclaw ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "ironclaw-bin" "nearai/ironclaw"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop ironclaw
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up Configuration"
|
|
||||||
cp /root/.ironclaw/.env /root/ironclaw.env.bak
|
|
||||||
msg_ok "Backed up Configuration"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "latest" "/usr/local/bin" \
|
|
||||||
"ironclaw-$(uname -m)-unknown-linux-$([[ -f /etc/alpine-release ]] && echo "musl" || echo "gnu").tar.gz"
|
|
||||||
chmod +x /usr/local/bin/ironclaw
|
|
||||||
|
|
||||||
msg_info "Restoring Configuration"
|
|
||||||
cp /root/ironclaw.env.bak /root/.ironclaw/.env
|
|
||||||
rm -f /root/ironclaw.env.bak
|
|
||||||
msg_ok "Restored Configuration"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start ironclaw
|
|
||||||
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} Complete setup by running:${CL}"
|
|
||||||
echo -e "${TAB}${BGN}ironclaw onboard${CL}"
|
|
||||||
echo -e "${INFO}${YW} Then start the service:${CL}"
|
|
||||||
echo -e "${TAB}${BGN}systemctl start ironclaw${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access the Web UI at:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
|
||||||
echo -e "${INFO}${YW} Auth token and database credentials:${CL}"
|
|
||||||
echo -e "${TAB}${BGN}cat /root/.ironclaw/.env${CL}"
|
|
||||||
@@ -32,16 +32,10 @@ function update_script() {
|
|||||||
if ! grep -qEi 'ubuntu' /etc/os-release; then
|
if ! grep -qEi 'ubuntu' /etc/os-release; then
|
||||||
msg_info "Updating Intel Dependencies"
|
msg_info "Updating Intel Dependencies"
|
||||||
rm -f ~/.intel-* || true
|
rm -f ~/.intel-* || true
|
||||||
|
fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb"
|
||||||
# Fetch compute-runtime first so /tmp/gh_rel.json is populated for IGC tag resolution
|
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
|
||||||
fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
|
fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
|
||||||
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb"
|
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb"
|
||||||
|
|
||||||
local igc_tag
|
|
||||||
_resolve_igc_tag igc_tag
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-core-2_*_amd64.deb"
|
|
||||||
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-opencl-2_*_amd64.deb"
|
|
||||||
msg_ok "Updated Intel Dependencies"
|
msg_ok "Updated Intel Dependencies"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
26
ct/kasm.sh
26
ct/kasm.sh
@@ -15,7 +15,6 @@ var_version="${var_version:-13}"
|
|||||||
var_unprivileged="${var_unprivileged:-0}"
|
var_unprivileged="${var_unprivileged:-0}"
|
||||||
var_fuse="${var_fuse:-yes}"
|
var_fuse="${var_fuse:-yes}"
|
||||||
var_tun="${var_tun:-yes}"
|
var_tun="${var_tun:-yes}"
|
||||||
var_kasm_version="${var_kasm_version:-}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
variables
|
variables
|
||||||
@@ -33,21 +32,18 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Checking for new version"
|
msg_info "Checking for new version"
|
||||||
CURRENT_VERSION=$(readlink -f /opt/kasm/current | awk -F'/' '{print $4}')
|
CURRENT_VERSION=$(readlink -f /opt/kasm/current | awk -F'/' '{print $4}')
|
||||||
KASM_VERSION=$(curl -s https://kasm.com/downloads | grep -oP '<h1[^>]*>.*?</h1>' | sed -E 's/<\/?h1[^>]*>//g' | grep -oP '\d+\.\d+\.\d+')
|
KASM_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_[0-9]+\.[0-9]+\.[0-9]+\.[a-z0-9]+\.tar\.gz' | head -n 1)
|
||||||
KASM_URL="https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION:-var_kasm_version}.tar.gz"
|
if [[ -z "$KASM_URL" ]]; then
|
||||||
|
SERVICE_IMAGE_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_service_images_amd64_[0-9]+\.[0-9]+\.[0-9]+\.tar\.gz' | head -n 1)
|
||||||
|
if [[ -n "$SERVICE_IMAGE_URL" ]]; then
|
||||||
|
KASM_VERSION=$(echo "$SERVICE_IMAGE_URL" | sed -E 's/.*kasm_release_service_images_amd64_([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
|
||||||
|
KASM_URL="https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}.tar.gz"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
KASM_VERSION=$(echo "$KASM_URL" | sed -E 's/.*kasm_release_([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
|
||||||
|
fi
|
||||||
|
|
||||||
# KASM_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_[0-9]+\.[0-9]+\.[0-9]+\.[a-z0-9]+\.tar\.gz' | head -n 1)
|
if [[ -z "$KASM_URL" ]] || [[ -z "$KASM_VERSION" ]]; then
|
||||||
# if [[ -z "$KASM_URL" ]]; then
|
|
||||||
# SERVICE_IMAGE_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_service_images_amd64_[0-9]+\.[0-9]+\.[0-9]+\.tar\.gz' | head -n 1)
|
|
||||||
# if [[ -n "$SERVICE_IMAGE_URL" ]]; then
|
|
||||||
# KASM_VERSION=$(echo "$SERVICE_IMAGE_URL" | sed -E 's/.*kasm_release_service_images_amd64_([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
|
|
||||||
# KASM_URL="https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}.tar.gz"
|
|
||||||
# fi
|
|
||||||
# else
|
|
||||||
# KASM_VERSION=$(echo "$KASM_URL" | sed -E 's/.*kasm_release_([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
|
|
||||||
# fi
|
|
||||||
|
|
||||||
if [[ -z "$KASM_VERSION" ]] || [[ -z "$KASM_URL" ]]; then
|
|
||||||
msg_error "Unable to detect latest Kasm release URL."
|
msg_error "Unable to detect latest Kasm release URL."
|
||||||
exit 250
|
exit 250
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -29,8 +29,6 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
|
||||||
|
|
||||||
if check_for_gh_release "kima-hub" "Chevron7Locked/kima-hub"; then
|
if check_for_gh_release "kima-hub" "Chevron7Locked/kima-hub"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop kima-frontend kima-backend kima-analyzer kima-analyzer-clap
|
systemctl stop kima-frontend kima-backend kima-analyzer kima-analyzer-clap
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ function update_script() {
|
|||||||
cp /opt/linkding/.env /opt/linkding_env_backup
|
cp /opt/linkding/.env /opt/linkding_env_backup
|
||||||
msg_ok "Backed up Data"
|
msg_ok "Backed up Data"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" "tarball"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding"
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
msg_info "Restoring Data"
|
||||||
cp -r /opt/linkding_data_backup/. /opt/linkding/data
|
cp -r /opt/linkding_data_backup/. /opt/linkding/data
|
||||||
|
|||||||
@@ -38,18 +38,12 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating LiteLLM"
|
msg_info "Updating LiteLLM"
|
||||||
$STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma
|
$STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma
|
||||||
$STD "$VENV_PATH/bin/prisma" generate
|
|
||||||
msg_ok "LiteLLM updated"
|
msg_ok "LiteLLM updated"
|
||||||
|
|
||||||
msg_info "Updating DB Schema"
|
msg_info "Updating DB Schema"
|
||||||
$STD /opt/litellm/.venv/bin/litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
|
$STD uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
|
||||||
msg_ok "DB Schema Updated"
|
msg_ok "DB Schema Updated"
|
||||||
|
|
||||||
msg_info "Updating Service"
|
|
||||||
sed -i 's|ExecStart=uv --directory=/opt/litellm run litellm|ExecStart=/opt/litellm/.venv/bin/litellm|' /etc/systemd/system/litellm.service
|
|
||||||
systemctl daemon-reload
|
|
||||||
msg_ok "Updated Service"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start litellm
|
systemctl start litellm
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|||||||
@@ -30,16 +30,16 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
DEB_URL=$(curl_with_retry 'https://lyrion.org/getting-started/' | grep -oP '<a\s[^>]*href="\K[^"]*amd64\.deb(?="[^>]*>)' | head -n 1)
|
DEB_URL=$(curl -s 'https://lyrion.org/getting-started/' | grep -oP '<a\s[^>]*href="\K[^"]*amd64\.deb(?="[^>]*>)' | head -n 1)
|
||||||
RELEASE=$(echo "$DEB_URL" | grep -oP 'lyrionmusicserver_\K[0-9.]+(?=_amd64\.deb)')
|
RELEASE=$(echo "$DEB_URL" | grep -oP 'lyrionmusicserver_\K[0-9.]+(?=_amd64\.deb)')
|
||||||
DEB_FILE="/tmp/lyrionmusicserver_${RELEASE}_amd64.deb"
|
DEB_FILE="/tmp/lyrionmusicserver_${RELEASE}_amd64.deb"
|
||||||
if [[ ! -f /opt/lyrion_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/lyrion_version.txt)" ]]; then
|
if [[ ! -f /opt/lyrion_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/lyrion_version.txt)" ]]; then
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
curl_with_retry "$DEB_URL" "$DEB_FILE"
|
curl -fsSL -o "$DEB_FILE" "$DEB_URL"
|
||||||
$STD apt install "$DEB_FILE" -y
|
$STD apt install "$DEB_FILE" -y
|
||||||
systemctl restart lyrionmusicserver
|
systemctl restart lyrion
|
||||||
rm -f "$DEB_FILE"
|
$STD rm -f "$DEB_FILE"
|
||||||
echo "${RELEASE}" >/opt/lyrion_version.txt
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
msg_ok "Updated $APP to ${RELEASE}"
|
msg_ok "Updated $APP to ${RELEASE}"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
else
|
else
|
||||||
|
|||||||
39
ct/mealie.sh
39
ct/mealie.sh
@@ -38,26 +38,9 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Backing up Configuration"
|
msg_info "Backing up Configuration"
|
||||||
cp -f /opt/mealie/mealie.env /opt/mealie.env
|
cp -f /opt/mealie/mealie.env /opt/mealie.env
|
||||||
[[ -f /opt/mealie/start.sh ]] && cp -f /opt/mealie/start.sh /opt/mealie.start.sh
|
|
||||||
msg_ok "Backup completed"
|
msg_ok "Backup completed"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
|
||||||
|
|
||||||
msg_info "Restoring Configuration"
|
|
||||||
mv -f /opt/mealie.env /opt/mealie/mealie.env
|
|
||||||
if [[ -f /opt/mealie.start.sh ]]; then
|
|
||||||
mv -f /opt/mealie.start.sh /opt/mealie/start.sh
|
|
||||||
else
|
|
||||||
cat <<'STARTEOF' >/opt/mealie/start.sh
|
|
||||||
#!/bin/bash
|
|
||||||
set -a
|
|
||||||
source /opt/mealie/mealie.env
|
|
||||||
set +a
|
|
||||||
exec uv run mealie
|
|
||||||
STARTEOF
|
|
||||||
fi
|
|
||||||
chmod +x /opt/mealie/start.sh
|
|
||||||
msg_ok "Configuration restored"
|
|
||||||
|
|
||||||
msg_info "Installing Python Dependencies with uv"
|
msg_info "Installing Python Dependencies with uv"
|
||||||
cd /opt/mealie
|
cd /opt/mealie
|
||||||
@@ -66,10 +49,9 @@ STARTEOF
|
|||||||
|
|
||||||
msg_info "Building Frontend"
|
msg_info "Building Frontend"
|
||||||
MEALIE_VERSION=$(<$HOME/.mealie)
|
MEALIE_VERSION=$(<$HOME/.mealie)
|
||||||
SITE_SETTINGS=$(find /opt/mealie/frontend -name "site-settings.vue" -path "*/admin/*" | head -1)
|
$STD sed -i "s|https://github.com/mealie-recipes/mealie/commit/|https://github.com/mealie-recipes/mealie/releases/tag/|g" /opt/mealie/frontend/pages/admin/site-settings.vue
|
||||||
$STD sed -i "s|https://github.com/mealie-recipes/mealie/commit/|https://github.com/mealie-recipes/mealie/releases/tag/|g" "$SITE_SETTINGS"
|
$STD sed -i "s|value: data.buildId,|value: \"v${MEALIE_VERSION}\",|g" /opt/mealie/frontend/pages/admin/site-settings.vue
|
||||||
$STD sed -i "s|value: data.buildId,|value: \"v${MEALIE_VERSION}\",|g" "$SITE_SETTINGS"
|
$STD sed -i "s|value: data.production ? i18n.t(\"about.production\") : i18n.t(\"about.development\"),|value: \"bare-metal\",|g" /opt/mealie/frontend/pages/admin/site-settings.vue
|
||||||
$STD sed -i "s|value: data.production ? i18n.t(\"about.production\") : i18n.t(\"about.development\"),|value: \"bare-metal\",|g" "$SITE_SETTINGS"
|
|
||||||
export NUXT_TELEMETRY_DISABLED=1
|
export NUXT_TELEMETRY_DISABLED=1
|
||||||
cd /opt/mealie/frontend
|
cd /opt/mealie/frontend
|
||||||
$STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
|
$STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
|
||||||
@@ -87,6 +69,18 @@ STARTEOF
|
|||||||
$STD uv run python -m nltk.downloader -d /nltk_data averaged_perceptron_tagger_eng
|
$STD uv run python -m nltk.downloader -d /nltk_data averaged_perceptron_tagger_eng
|
||||||
msg_ok "Updated NLTK Data"
|
msg_ok "Updated NLTK Data"
|
||||||
|
|
||||||
|
msg_info "Restoring Configuration"
|
||||||
|
mv -f /opt/mealie.env /opt/mealie/mealie.env
|
||||||
|
cat <<'STARTEOF' >/opt/mealie/start.sh
|
||||||
|
#!/bin/bash
|
||||||
|
set -a
|
||||||
|
source /opt/mealie/mealie.env
|
||||||
|
set +a
|
||||||
|
exec uv run mealie
|
||||||
|
STARTEOF
|
||||||
|
chmod +x /opt/mealie/start.sh
|
||||||
|
msg_ok "Configuration restored"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start mealie
|
systemctl start mealie
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
@@ -103,3 +97,4 @@ msg_ok "Completed successfully!\n"
|
|||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,6 @@ function update_script() {
|
|||||||
$STD corepack enable
|
$STD corepack enable
|
||||||
$STD corepack prepare pnpm --activate || true
|
$STD corepack prepare pnpm --activate || true
|
||||||
fi
|
fi
|
||||||
echo 'onlyBuiltDependencies=*' >> .npmrc
|
|
||||||
$STD pnpm install --frozen-lockfile
|
$STD pnpm install --frozen-lockfile
|
||||||
$STD pnpm run build
|
$STD pnpm run build
|
||||||
msg_ok "Built Frontend"
|
msg_ok "Built Frontend"
|
||||||
|
|||||||
@@ -28,8 +28,6 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
|
||||||
|
|
||||||
if check_for_gh_release "myip" "jason5ng32/MyIP"; then
|
if check_for_gh_release "myip" "jason5ng32/MyIP"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop myip
|
systemctl stop myip
|
||||||
|
|||||||
@@ -1,83 +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
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/mattogodoy/nametag
|
|
||||||
|
|
||||||
APP="Nametag"
|
|
||||||
var_tags="${var_tags:-contacts;crm}"
|
|
||||||
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/nametag ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "nametag" "mattogodoy/nametag"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop nametag
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
|
||||||
cp /opt/nametag/.env /opt/nametag.env.bak
|
|
||||||
cp -r /opt/nametag/data /opt/nametag_data_bak
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nametag" "mattogodoy/nametag" "tarball" "latest" "/opt/nametag"
|
|
||||||
|
|
||||||
msg_info "Rebuilding Application"
|
|
||||||
cd /opt/nametag
|
|
||||||
$STD npm ci
|
|
||||||
set -a
|
|
||||||
source /opt/nametag/.env
|
|
||||||
set +a
|
|
||||||
$STD npx prisma generate
|
|
||||||
$STD npm run build
|
|
||||||
cp -r /opt/nametag/.next/static /opt/nametag/.next/standalone/.next/static
|
|
||||||
cp -r /opt/nametag/public /opt/nametag/.next/standalone/public
|
|
||||||
msg_ok "Rebuilt Application"
|
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
|
||||||
cp /opt/nametag.env.bak /opt/nametag/.env
|
|
||||||
cp -r /opt/nametag_data_bak/. /opt/nametag/data/
|
|
||||||
rm -f /opt/nametag.env.bak
|
|
||||||
rm -rf /opt/nametag_data_bak
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Running Migrations"
|
|
||||||
cd /opt/nametag
|
|
||||||
$STD npx prisma migrate deploy
|
|
||||||
msg_ok "Ran Migrations"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start nametag
|
|
||||||
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}"
|
|
||||||
@@ -86,14 +86,12 @@ Wants=network-online.target
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
ExecStartPre=-/bin/mkdir -p /tmp/nginx/body /run/nginx
|
|
||||||
ExecStartPre=/usr/local/openresty/nginx/sbin/nginx -t
|
ExecStartPre=/usr/local/openresty/nginx/sbin/nginx -t
|
||||||
ExecStart=/usr/local/openresty/nginx/sbin/nginx -g 'daemon off;'
|
ExecStart=/usr/local/openresty/nginx/sbin/nginx -g 'daemon off;'
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
sed -i 's/user npm/user root/g; s/^pid/#pid/g' /usr/local/openresty/nginx/conf/nginx.conf
|
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl unmask openresty 2>/dev/null || true
|
systemctl unmask openresty 2>/dev/null || true
|
||||||
systemctl restart openresty
|
systemctl restart openresty
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ function update_script() {
|
|||||||
systemctl stop nodecast-tv
|
systemctl stop nodecast-tv
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv" "tarball"
|
fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv"
|
||||||
|
|
||||||
msg_info "Updating Modules"
|
msg_info "Updating Modules"
|
||||||
cd /opt/nodecast-tv
|
cd /opt/nodecast-tv
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE="v6.1.0"
|
RELEASE="v5.2.0"
|
||||||
if check_for_gh_release "OpenCloud" "opencloud-eu/opencloud" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
|
if check_for_gh_release "OpenCloud" "opencloud-eu/opencloud" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
|
||||||
msg_info "Stopping services"
|
msg_info "Stopping services"
|
||||||
systemctl stop opencloud opencloud-wopi
|
systemctl stop opencloud opencloud-wopi
|
||||||
|
|||||||
@@ -1,87 +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://openthread.io/guides/border-router
|
|
||||||
|
|
||||||
APP="OpenThread-BR"
|
|
||||||
var_tags="${var_tags:-thread;iot;border-router;matter}"
|
|
||||||
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:-0}"
|
|
||||||
var_tun="${var_tun:-yes}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /opt/ot-br-posix ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd /opt/ot-br-posix
|
|
||||||
LOCAL_COMMIT=$(git rev-parse HEAD)
|
|
||||||
$STD git fetch --depth 1 origin main
|
|
||||||
REMOTE_COMMIT=$(git rev-parse origin/main)
|
|
||||||
|
|
||||||
if [[ "${LOCAL_COMMIT}" == "${REMOTE_COMMIT}" ]]; then
|
|
||||||
msg_ok "Already up to date (${LOCAL_COMMIT:0:7})"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Stopping Services"
|
|
||||||
systemctl stop otbr-web
|
|
||||||
systemctl stop otbr-agent
|
|
||||||
msg_ok "Stopped Services"
|
|
||||||
|
|
||||||
msg_info "Updating Source"
|
|
||||||
$STD git reset --hard origin/main
|
|
||||||
$STD git submodule update --depth 1 --init --recursive
|
|
||||||
msg_ok "Updated Source"
|
|
||||||
|
|
||||||
msg_info "Rebuilding OpenThread Border Router (Patience)"
|
|
||||||
cd /opt/ot-br-posix/build
|
|
||||||
$STD cmake -GNinja \
|
|
||||||
-DBUILD_TESTING=OFF \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
|
||||||
-DOTBR_DBUS=ON \
|
|
||||||
-DOTBR_MDNS=openthread \
|
|
||||||
-DOTBR_REST=ON \
|
|
||||||
-DOTBR_WEB=ON \
|
|
||||||
-DOTBR_BORDER_ROUTING=ON \
|
|
||||||
-DOTBR_BACKBONE_ROUTER=ON \
|
|
||||||
-DOT_FIREWALL=ON \
|
|
||||||
-DOT_POSIX_NAT64_CIDR="192.168.255.0/24" \
|
|
||||||
..
|
|
||||||
$STD ninja
|
|
||||||
$STD ninja install
|
|
||||||
msg_ok "Rebuilt OpenThread Border Router"
|
|
||||||
|
|
||||||
msg_info "Starting Services"
|
|
||||||
systemctl start otbr-agent
|
|
||||||
systemctl start otbr-web
|
|
||||||
msg_ok "Started 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}${CL}"
|
|
||||||
@@ -28,7 +28,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
if check_for_gh_release "outline" "outline/outline"; then
|
if check_for_gh_release "outline" "outline/outline"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
|
|||||||
@@ -1,69 +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: pajjski
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/a1ex4/ownfoil
|
|
||||||
|
|
||||||
APP="ownfoil"
|
|
||||||
var_tags="${var_tags:-gaming}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-1024}"
|
|
||||||
var_disk="${var_disk:-4}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
|
|
||||||
if [[ ! -d /opt/ownfoil ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_for_gh_release "ownfoil" "a1ex4/ownfoil"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop ownfoil
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
msg_info "Backing up Data"
|
|
||||||
cp -r /opt/ownfoil/app/config /opt/ownfoil_data_backup
|
|
||||||
msg_ok "Backed up Data"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball"
|
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
cd /opt/ownfoil
|
|
||||||
$STD source .venv/bin/activate
|
|
||||||
$STD uv pip install -r requirements.txt
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
|
||||||
cp -r /opt/ownfoil_data_backup /opt/ownfoil/app/config
|
|
||||||
rm -rf /opt/ownfoil_data_backup
|
|
||||||
msg_ok "Restored Data"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start ownfoil
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8465${CL}"
|
|
||||||
@@ -69,33 +69,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Running database migrations"
|
msg_info "Running database migrations"
|
||||||
cd /opt/pangolin
|
cd /opt/pangolin
|
||||||
|
ENVIRONMENT=prod $STD npx drizzle-kit push --config drizzle.sqlite.config.ts
|
||||||
# Pre-apply potentially destructive schema changes safely so drizzle-kit
|
|
||||||
# does not recreate tables (which would delete all rows).
|
|
||||||
local DB="/opt/pangolin/config/db/db.sqlite"
|
|
||||||
if [[ -f "$DB" ]]; then
|
|
||||||
sqlite3 "$DB" "ALTER TABLE 'orgs' ADD COLUMN 'settingsLogRetentionDaysConnection' integer DEFAULT 0 NOT NULL;" 2>/dev/null || true
|
|
||||||
sqlite3 "$DB" "ALTER TABLE 'clientSitesAssociationsCache' ADD COLUMN 'isJitMode' integer DEFAULT 0 NOT NULL;" 2>/dev/null || true
|
|
||||||
|
|
||||||
# Create new role-mapping tables and migrate data before drizzle-kit
|
|
||||||
# drops the roleId columns from userOrgs and userInvites.
|
|
||||||
sqlite3 "$DB" "CREATE TABLE IF NOT EXISTS 'userOrgRoles' (
|
|
||||||
'userId' text NOT NULL REFERENCES 'user'('id') ON DELETE CASCADE,
|
|
||||||
'orgId' text NOT NULL REFERENCES 'orgs'('orgId') ON DELETE CASCADE,
|
|
||||||
'roleId' integer NOT NULL REFERENCES 'roles'('roleId') ON DELETE CASCADE,
|
|
||||||
UNIQUE('userId', 'orgId', 'roleId')
|
|
||||||
);" 2>/dev/null || true
|
|
||||||
sqlite3 "$DB" "INSERT OR IGNORE INTO 'userOrgRoles' (userId, orgId, roleId) SELECT userId, orgId, roleId FROM 'userOrgs' WHERE roleId IS NOT NULL;" 2>/dev/null || true
|
|
||||||
|
|
||||||
sqlite3 "$DB" "CREATE TABLE IF NOT EXISTS 'userInviteRoles' (
|
|
||||||
'inviteId' text NOT NULL REFERENCES 'userInvites'('inviteId') ON DELETE CASCADE,
|
|
||||||
'roleId' integer NOT NULL REFERENCES 'roles'('roleId') ON DELETE CASCADE,
|
|
||||||
PRIMARY KEY('inviteId', 'roleId')
|
|
||||||
);" 2>/dev/null || true
|
|
||||||
sqlite3 "$DB" "INSERT OR IGNORE INTO 'userInviteRoles' (inviteId, roleId) SELECT inviteId, roleId FROM 'userInvites' WHERE roleId IS NOT NULL;" 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
ENVIRONMENT=prod $STD npx drizzle-kit push --force --config drizzle.sqlite.config.ts
|
|
||||||
msg_ok "Ran database migrations"
|
msg_ok "Ran database migrations"
|
||||||
|
|
||||||
msg_info "Updating Badger plugin version"
|
msg_info "Updating Badger plugin version"
|
||||||
|
|||||||
27
ct/papra.sh
27
ct/papra.sh
@@ -35,37 +35,14 @@ function update_script() {
|
|||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up Configuration"
|
msg_info "Backing up Configuration"
|
||||||
if [[ -f /opt/papra/apps/papra-server/.env ]]; then
|
cp /opt/papra/apps/papra-server/.env /opt/papra_env.bak
|
||||||
cp /opt/papra/apps/papra-server/.env /opt/papra_env.bak
|
|
||||||
fi
|
|
||||||
msg_ok "Backed up Configuration"
|
msg_ok "Backed up Configuration"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball"
|
||||||
|
|
||||||
msg_info "Building Application"
|
msg_info "Building Application"
|
||||||
cd /opt/papra
|
cd /opt/papra
|
||||||
if [[ -f /opt/papra_env.bak ]]; then
|
cp /opt/papra_env.bak /opt/papra/apps/papra-server/.env
|
||||||
cp /opt/papra_env.bak /opt/papra/apps/papra-server/.env
|
|
||||||
else
|
|
||||||
msg_warn ".env missing, regenerating from defaults"
|
|
||||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
|
||||||
cat <<EOF >/opt/papra/apps/papra-server/.env
|
|
||||||
NODE_ENV=production
|
|
||||||
SERVER_SERVE_PUBLIC_DIR=true
|
|
||||||
PORT=1221
|
|
||||||
DATABASE_URL=file:/opt/papra_data/db/db.sqlite
|
|
||||||
DOCUMENT_STORAGE_FILESYSTEM_ROOT=/opt/papra_data/documents
|
|
||||||
PAPRA_CONFIG_DIR=/opt/papra_data
|
|
||||||
AUTH_SECRET=$(cat /opt/papra_data/.secret)
|
|
||||||
BETTER_AUTH_SECRET=$(cat /opt/papra_data/.secret)
|
|
||||||
BETTER_AUTH_TELEMETRY=0
|
|
||||||
CLIENT_BASE_URL=http://${LOCAL_IP}:1221
|
|
||||||
SERVER_BASE_URL=http://${LOCAL_IP}:1221
|
|
||||||
EMAILS_DRY_RUN=true
|
|
||||||
INGESTION_FOLDER_IS_ENABLED=true
|
|
||||||
INGESTION_FOLDER_ROOT_PATH=/opt/papra_data/ingestion
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
$STD pnpm install --frozen-lockfile
|
$STD pnpm install --frozen-lockfile
|
||||||
$STD pnpm --filter "@papra/app-client..." run build
|
$STD pnpm --filter "@papra/app-client..." run build
|
||||||
$STD pnpm --filter "@papra/app-server..." run build
|
$STD pnpm --filter "@papra/app-server..." run build
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
#!/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: doge0420
|
# Author: TheRealVira
|
||||||
# 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/lyqht/mini-qr
|
# Source: https://pf2etools.com/ | Github: https://github.com/Pf2eToolsOrg/Pf2eTools
|
||||||
|
|
||||||
APP="Mini-QR"
|
APP="Pf2eTools"
|
||||||
var_tags="${var_tags:-QRcode;}"
|
var_tags="${var_tags:-wiki}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-1}"
|
||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="${var_disk:-6}"
|
var_disk="${var_disk:-6}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
@@ -24,30 +24,26 @@ function update_script() {
|
|||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d /opt/mini-qr ]]; then
|
if [[ ! -d "/opt/${APP}" ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if check_for_gh_release "pf2etools" "Pf2eToolsOrg/Pf2eTools"; then
|
||||||
|
msg_info "Updating System"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt -y upgrade
|
||||||
|
msg_ok "Updated System"
|
||||||
|
|
||||||
if check_for_gh_release "mini-qr" "lyqht/mini-qr"; then
|
rm -rf /opt/Pf2eTools
|
||||||
msg_info "Stopping Service"
|
fetch_and_deploy_gh_release "pf2etools" "Pf2eToolsOrg/Pf2eTools" "tarball" "latest" "/opt/Pf2eTools"
|
||||||
systemctl stop caddy
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mini-qr" "lyqht/mini-qr" "tarball"
|
msg_info "Updating ${APP}"
|
||||||
|
cd /opt/Pf2eTools
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
cd /opt/mini-qr
|
|
||||||
$STD npm install
|
$STD npm install
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
msg_info "Building MiniQR"
|
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
msg_ok "Built MiniQR"
|
chown -R www-data: "/opt/${APP}"
|
||||||
|
chmod -R 755 "/opt/${APP}"
|
||||||
msg_info "Starting Service"
|
msg_ok "Updated ${APP}"
|
||||||
systemctl start caddy
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
@@ -44,7 +44,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Installing Python Dependencies"
|
msg_info "Installing Python Dependencies"
|
||||||
cd /opt/profilarr/backend
|
cd /opt/profilarr/backend
|
||||||
$STD uv venv --clear /opt/profilarr/backend/.venv
|
$STD uv venv /opt/profilarr/backend/.venv
|
||||||
sed 's/==/>=/g' requirements.txt >requirements-relaxed.txt
|
sed 's/==/>=/g' requirements.txt >requirements-relaxed.txt
|
||||||
$STD uv pip install --python /opt/profilarr/backend/.venv/bin/python -r requirements-relaxed.txt
|
$STD uv pip install --python /opt/profilarr/backend/.venv/bin/python -r requirements-relaxed.txt
|
||||||
rm -f requirements-relaxed.txt
|
rm -f requirements-relaxed.txt
|
||||||
|
|||||||
206
ct/reitti.sh
206
ct/reitti.sh
@@ -37,134 +37,37 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Migrate v3 -> v4: Remove RabbitMQ (no longer required) / Photon / Spring Settings
|
if [ ! -d /var/cache/nginx/tiles ]; then
|
||||||
if systemctl is-enabled --quiet rabbitmq-server 2>/dev/null; then
|
msg_info "Installing Nginx Tile Cache"
|
||||||
msg_info "Migrating to v4: Removing RabbitMQ"
|
mkdir -p /var/cache/nginx/tiles
|
||||||
systemctl stop rabbitmq-server
|
$STD apt install -y nginx
|
||||||
systemctl disable rabbitmq-server
|
cat <<EOF >/etc/nginx/nginx.conf
|
||||||
$STD apt-get purge -y rabbitmq-server erlang-base
|
user www-data;
|
||||||
$STD apt-get autoremove -y
|
|
||||||
msg_ok "Removed RabbitMQ"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if systemctl is-enabled --quiet photon 2>/dev/null; then
|
events {
|
||||||
msg_info "Migrating to v4: Removing Photon service"
|
worker_connections 1024;
|
||||||
systemctl stop photon
|
}
|
||||||
systemctl disable photon
|
http {
|
||||||
rm -f /etc/systemd/system/photon.service
|
proxy_cache_path /var/cache/nginx/tiles levels=1:2 keys_zone=tiles:10m max_size=1g inactive=30d use_temp_path=off;
|
||||||
systemctl daemon-reload
|
server {
|
||||||
msg_ok "Removed Photon service"
|
listen 80;
|
||||||
fi
|
location / {
|
||||||
|
proxy_pass https://tile.openstreetmap.org/;
|
||||||
if grep -q "spring.rabbitmq\|PHOTON_BASE_URL\|PROCESSING_WAIT_TIME\|DANGEROUS_LIFE" /opt/reitti/application.properties 2>/dev/null; then
|
proxy_set_header Host tile.openstreetmap.org;
|
||||||
msg_info "Migrating to v4: Rewriting application.properties"
|
proxy_set_header User-Agent "Reitti/1.0";
|
||||||
local DB_URL DB_USER DB_PASS
|
proxy_cache tiles;
|
||||||
DB_URL=$(grep '^spring.datasource.url=' /opt/reitti/application.properties | cut -d'=' -f2-)
|
proxy_cache_valid 200 30d;
|
||||||
DB_USER=$(grep '^spring.datasource.username=' /opt/reitti/application.properties | cut -d'=' -f2-)
|
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
|
||||||
DB_PASS=$(grep '^spring.datasource.password=' /opt/reitti/application.properties | cut -d'=' -f2-)
|
}
|
||||||
cp /opt/reitti/application.properties /opt/reitti/application.properties.bak
|
}
|
||||||
cat <<PROPEOF >/opt/reitti/application.properties
|
}
|
||||||
# Server configuration
|
EOF
|
||||||
server.port=8080
|
chown -R www-data:www-data /var/cache/nginx
|
||||||
server.servlet.context-path=/
|
chmod -R 750 /var/cache/nginx
|
||||||
server.forward-headers-strategy=framework
|
systemctl restart nginx
|
||||||
server.compression.enabled=true
|
echo "reitti.ui.tiles.cache.url=http://127.0.0.1" >> /opt/reitti/application.properties
|
||||||
server.compression.min-response-size=1024
|
systemctl restart reitti
|
||||||
server.compression.mime-types=text/plain,application/json
|
msg_info "Installed Nginx Tile Cache"
|
||||||
|
|
||||||
# Logging configuration
|
|
||||||
logging.level.root=INFO
|
|
||||||
logging.level.org.hibernate.engine.jdbc.spi.SqlExceptionHelper=FATAL
|
|
||||||
logging.level.com.dedicatedcode.reitti=INFO
|
|
||||||
|
|
||||||
# Internationalization
|
|
||||||
spring.messages.basename=messages
|
|
||||||
spring.messages.encoding=UTF-8
|
|
||||||
spring.messages.cache-duration=3600
|
|
||||||
spring.messages.fallback-to-system-locale=false
|
|
||||||
|
|
||||||
# PostgreSQL configuration
|
|
||||||
spring.datasource.url=${DB_URL}
|
|
||||||
spring.datasource.username=${DB_USER}
|
|
||||||
spring.datasource.password=${DB_PASS}
|
|
||||||
spring.datasource.hikari.maximum-pool-size=20
|
|
||||||
|
|
||||||
# Redis configuration
|
|
||||||
spring.data.redis.host=127.0.0.1
|
|
||||||
spring.data.redis.port=6379
|
|
||||||
spring.data.redis.username=
|
|
||||||
spring.data.redis.password=
|
|
||||||
spring.data.redis.database=0
|
|
||||||
spring.cache.redis.key-prefix=
|
|
||||||
|
|
||||||
spring.cache.cache-names=processed-visits,significant-places,users,magic-links,configurations,transport-mode-configs,avatarThumbnails,avatarData,user-settings
|
|
||||||
spring.cache.redis.time-to-live=1d
|
|
||||||
|
|
||||||
# Upload configuration
|
|
||||||
spring.servlet.multipart.max-file-size=5GB
|
|
||||||
spring.servlet.multipart.max-request-size=5GB
|
|
||||||
server.tomcat.max-part-count=100
|
|
||||||
|
|
||||||
# Rqueue configuration
|
|
||||||
rqueue.web.enable=false
|
|
||||||
rqueue.job.enabled=false
|
|
||||||
rqueue.message.durability.in-terminal-state=0
|
|
||||||
rqueue.key.prefix=\${spring.cache.redis.key-prefix}
|
|
||||||
rqueue.message.converter.provider.class=com.dedicatedcode.reitti.config.RQueueCustomMessageConverter
|
|
||||||
|
|
||||||
# Application-specific settings
|
|
||||||
reitti.server.advertise-uri=
|
|
||||||
|
|
||||||
reitti.security.local-login.disable=false
|
|
||||||
|
|
||||||
# OIDC / Security Settings
|
|
||||||
reitti.security.oidc.enabled=false
|
|
||||||
reitti.security.oidc.registration.enabled=false
|
|
||||||
|
|
||||||
reitti.import.batch-size=10000
|
|
||||||
reitti.import.processing-idle-start-time=10
|
|
||||||
|
|
||||||
reitti.geo-point-filter.max-speed-kmh=1000
|
|
||||||
reitti.geo-point-filter.max-accuracy-meters=100
|
|
||||||
reitti.geo-point-filter.history-lookback-hours=24
|
|
||||||
reitti.geo-point-filter.window-size=50
|
|
||||||
|
|
||||||
reitti.process-data.schedule=0 */10 * * * *
|
|
||||||
reitti.process-data.refresh-views.schedule=0 0 4 * * *
|
|
||||||
reitti.imports.schedule=0 5/10 * * * *
|
|
||||||
reitti.imports.owntracks-recorder.schedule=\${reitti.imports.schedule}
|
|
||||||
|
|
||||||
# Geocoding service configuration
|
|
||||||
reitti.geocoding.max-errors=10
|
|
||||||
reitti.geocoding.photon.base-url=
|
|
||||||
|
|
||||||
# Tiles Configuration
|
|
||||||
reitti.ui.tiles.cache.url=http://127.0.0.1
|
|
||||||
reitti.ui.tiles.default.service=https://tile.openstreetmap.org/{z}/{x}/{y}.png
|
|
||||||
reitti.ui.tiles.default.attribution=© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors
|
|
||||||
|
|
||||||
# Data management configuration
|
|
||||||
reitti.data-management.enabled=false
|
|
||||||
reitti.data-management.preview-cleanup.cron=0 0 4 * * *
|
|
||||||
|
|
||||||
reitti.storage.path=data/
|
|
||||||
reitti.storage.cleanup.cron=0 0 4 * * *
|
|
||||||
|
|
||||||
# Location data density normalization
|
|
||||||
reitti.location.density.target-points-per-minute=4
|
|
||||||
|
|
||||||
# Logging buffer
|
|
||||||
reitti.logging.buffer-size=1000
|
|
||||||
reitti.logging.max-buffer-size=10000
|
|
||||||
|
|
||||||
spring.config.import=optional:oidc.properties
|
|
||||||
PROPEOF
|
|
||||||
# Update reitti.service dependencies
|
|
||||||
if [[ -f /etc/systemd/system/reitti.service ]]; then
|
|
||||||
sed -i 's/ rabbitmq-server\.service//g; s/ photon\.service//g' /etc/systemd/system/reitti.service
|
|
||||||
systemctl daemon-reload
|
|
||||||
fi
|
|
||||||
msg_ok "Rewrote application.properties (backup: application.properties.bak)"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "reitti" "dedicatedcode/reitti"; then
|
if check_for_gh_release "reitti" "dedicatedcode/reitti"; then
|
||||||
@@ -180,6 +83,55 @@ PROPEOF
|
|||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start reitti
|
systemctl start reitti
|
||||||
|
chown -R www-data:www-data /var/cache/nginx
|
||||||
|
chmod -R 750 /var/cache/nginx
|
||||||
|
systemctl restart nginx
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "photon" "komoot/photon"; then
|
||||||
|
if [[ -f "$HOME/.photon" ]] && [[ "$(cat "$HOME/.photon")" == 0.7 ]]; then
|
||||||
|
CURRENT_VERSION="$(<"$HOME/.photon")"
|
||||||
|
echo
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
echo "Photon v1 upgrade detected (breaking change)"
|
||||||
|
echo
|
||||||
|
echo "Your current version: $CURRENT_VERSION"
|
||||||
|
echo
|
||||||
|
echo "Photon v1 requires a manual migration before updating."
|
||||||
|
echo
|
||||||
|
echo "You need to:"
|
||||||
|
echo " 1. Remove existing geocoding data (not actual reitti data):"
|
||||||
|
echo " rm -rf /opt/photon_data"
|
||||||
|
echo
|
||||||
|
echo " 2. Follow the inial setup guide again:"
|
||||||
|
echo " https://github.com/community-scripts/ProxmoxVE/discussions/8737"
|
||||||
|
echo
|
||||||
|
echo " 3. Re-download and import Photon data for v1"
|
||||||
|
echo
|
||||||
|
read -rp "Do you want to continue anyway? (y/N): " CONTINUE
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [[ ! "$CONTINUE" =~ ^[Yy]$ ]]; then
|
||||||
|
msg_info "Migration required. Update cancelled."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_warn "Continuing without migration may break Photon in the future!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop photon
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
rm -f /opt/photon/photon.jar
|
||||||
|
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "photon" "komoot/photon" "singlefile" "latest" "/opt/photon" "photon-*.jar"
|
||||||
|
mv /opt/photon/photon-*.jar /opt/photon/photon.jar
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start photon
|
||||||
|
systemctl restart nginx
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -54,12 +54,8 @@ function update_script() {
|
|||||||
# Merge static assets into dist folder
|
# Merge static assets into dist folder
|
||||||
cp -rf /opt/romm/frontend/assets/* /opt/romm/frontend/dist/assets/
|
cp -rf /opt/romm/frontend/assets/* /opt/romm/frontend/dist/assets/
|
||||||
mkdir -p /opt/romm/frontend/dist/assets/romm
|
mkdir -p /opt/romm/frontend/dist/assets/romm
|
||||||
ROMM_BASE=$(grep '^ROMM_BASE_PATH=' /opt/romm/.env | cut -d'=' -f2)
|
ln -sfn /var/lib/romm/resources /opt/romm/frontend/dist/assets/romm/resources
|
||||||
ROMM_BASE=${ROMM_BASE:-/var/lib/romm}
|
ln -sfn /var/lib/romm/assets /opt/romm/frontend/dist/assets/romm/assets
|
||||||
ln -sfn "$ROMM_BASE"/resources /opt/romm/frontend/dist/assets/romm/resources
|
|
||||||
ln -sfn "$ROMM_BASE"/assets /opt/romm/frontend/dist/assets/romm/assets
|
|
||||||
sed -i "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" /etc/nginx/sites-available/romm
|
|
||||||
systemctl reload nginx
|
|
||||||
msg_ok "Updated ROMM"
|
msg_ok "Updated ROMM"
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
|
|||||||
@@ -29,38 +29,40 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "semaphore" "semaphoreui/semaphore"; then
|
if [[ -f /opt/semaphore/semaphore_db.bolt ]]; then
|
||||||
if [[ -f /opt/semaphore/semaphore_db.bolt ]]; then
|
msg_warn "WARNING: Due to bugs with BoltDB database, update script will move your application"
|
||||||
msg_warn "WARNING: Due to bugs with BoltDB database, update script will move your application"
|
msg_warn "to use SQLite database instead. Unfortunately, this will reset your application and make it a fresh"
|
||||||
msg_warn "to use SQLite database instead. Make sure you have a backup of your data!"
|
msg_warn "installation. All your data will be lost!"
|
||||||
echo ""
|
echo ""
|
||||||
read -r -p "${TAB3}Do you want to continue? (y/N): " CONFIRM
|
read -r -p "${TAB3}Do you want to continue? (y/N): " CONFIRM
|
||||||
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
|
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
msg_info "Moving from BoltDB to SQLite"
|
msg_info "Moving from BoltDB to SQLite"
|
||||||
sed -i \
|
systemctl stop semaphore
|
||||||
-e 's|"bolt": {|"sqlite": {|' \
|
rm -rf /opt/semaphore/semaphore_db.bolt
|
||||||
-e 's|/semaphore_db.bolt"|/database.sqlite"|' \
|
sed -i \
|
||||||
-e '/semaphore_db.bolt/d' \
|
-e 's|"bolt": {|"sqlite": {|' \
|
||||||
-e '/"dialect"/d' \
|
-e 's|/semaphore_db.bolt"|/database.sqlite"|' \
|
||||||
-e '/^ },$/a\ "dialect": "sqlite",' \
|
-e '/semaphore_db.bolt/d' \
|
||||||
/opt/semaphore/config.json
|
-e '/"dialect"/d' \
|
||||||
msg_ok "Moved from BoltDB to SQLite"
|
-e '/^ },$/a\ "dialect": "sqlite",' \
|
||||||
fi
|
/opt/semaphore/config.json
|
||||||
fi
|
SEM_PW=$(cat ~/semaphore.creds)
|
||||||
|
systemctl start semaphore
|
||||||
|
$STD semaphore user add --admin --login admin --email admin@community-scripts.org --name Administrator --password "${SEM_PW}" --config /opt/semaphore/config.json
|
||||||
|
|
||||||
|
msg_ok "Moved from BoltDB to SQLite"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "semaphore" "semaphoreui/semaphore"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop semaphore
|
systemctl stop semaphore
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary" "latest" "/opt/semaphore" "semaphore_*_linux_amd64.deb"
|
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary" "latest" "/opt/semaphore" "semaphore_*_linux_amd64.deb"
|
||||||
|
|
||||||
if [[ -f /opt/semaphore/semaphore_db.bolt ]]; then
|
|
||||||
$STD semaphore migrate --from-boltdb /opt/semaphore/semaphore_db.bolt --config /opt/semaphore/config.json
|
|
||||||
rm -f /opt/semaphore/semaphore_db.bolt
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start semaphore
|
systemctl start semaphore
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
|
|
||||||
if check_for_gh_release "shelfmark" "calibrain/shelfmark"; then
|
if check_for_gh_release "shelfmark" "calibrain/shelfmark"; then
|
||||||
|
|||||||
@@ -43,10 +43,6 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Restoring config"
|
msg_info "Restoring config"
|
||||||
mv /opt/slskd.yml.bak /opt/slskd/config/slskd.yml
|
mv /opt/slskd.yml.bak /opt/slskd/config/slskd.yml
|
||||||
|
|
||||||
# Migrate 0.25.0 breaking config key renames
|
|
||||||
sed -i 's/^global:/transfers:/' /opt/slskd/config/slskd.yml
|
|
||||||
sed -i 's/^integration:/integrations:/' /opt/slskd/config/slskd.yml
|
|
||||||
msg_ok "Restored config"
|
msg_ok "Restored config"
|
||||||
|
|
||||||
msg_info "Starting Service(s)"
|
msg_info "Starting Service(s)"
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ function update_script() {
|
|||||||
RELEASE=$(get_latest_github_release "SonarSource/sonarqube")
|
RELEASE=$(get_latest_github_release "SonarSource/sonarqube")
|
||||||
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
|
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
|
||||||
unzip -q "$temp_file" -d /opt
|
unzip -q "$temp_file" -d /opt
|
||||||
rm -f "$temp_file"
|
|
||||||
mv /opt/sonarqube-${RELEASE} /opt/sonarqube
|
mv /opt/sonarqube-${RELEASE} /opt/sonarqube
|
||||||
echo "${RELEASE}" > ~/.sonarqube
|
echo "${RELEASE}" > ~/.sonarqube
|
||||||
msg_ok "Updated SonarQube"
|
msg_ok "Updated SonarQube"
|
||||||
|
|||||||
@@ -1,50 +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: Joerg Heinemann (heinemannj)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/smallstep/certificates
|
|
||||||
|
|
||||||
APP="step-ca"
|
|
||||||
var_tags="${var_tags:-certificate-authority;pki;acme-server}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-512}"
|
|
||||||
var_disk="${var_disk:-2}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -f /etc/apt/sources.list.d/smallstep.sources ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Updating step-ca and step-cli"
|
|
||||||
$STD apt update
|
|
||||||
$STD apt upgrade -y step-ca step-cli
|
|
||||||
$STD systemctl restart step-ca
|
|
||||||
msg_ok "Updated step-ca and step-cli"
|
|
||||||
|
|
||||||
if check_for_gh_release "step-badger" "lukasz-lobocki/step-badger"; then
|
|
||||||
fetch_and_deploy_gh_release "step-badger" "lukasz-lobocki/step-badger" "prebuild" "latest" "/opt/step-badger" "step-badger_Linux_x86_64.tar.gz"
|
|
||||||
msg_ok "Updated step-badger"
|
|
||||||
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://${IP}/provisioners${CL}"
|
|
||||||
@@ -145,7 +145,7 @@ EOF
|
|||||||
cp -r /opt/termix/uploads /opt/termix_uploads_backup
|
cp -r /opt/termix/uploads /opt/termix_uploads_backup
|
||||||
msg_ok "Backed up Data"
|
msg_ok "Backed up Data"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" "tarball"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix"
|
||||||
|
|
||||||
msg_info "Recreating Directories"
|
msg_info "Recreating Directories"
|
||||||
mkdir -p /opt/termix/html \
|
mkdir -p /opt/termix/html \
|
||||||
|
|||||||
@@ -29,9 +29,8 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating Twingate Connector"
|
msg_info "Updating ${APP}"
|
||||||
$STD apt update
|
ensure_dependencies twingate-connector
|
||||||
$STD apt install -y --only-upgrade twingate-connector
|
|
||||||
$STD systemctl restart twingate-connector
|
$STD systemctl restart twingate-connector
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
#!/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)
|
# Author: tlissak | Co-Author MickLesk
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://whodb.com/
|
# Source: https://typesense.org/
|
||||||
|
|
||||||
APP="WhoDB"
|
APP="TypeSense"
|
||||||
var_tags="${var_tags:-database;management;gui}"
|
var_tags="${var_tags:-database}"
|
||||||
var_cpu="${var_cpu:-1}"
|
var_cpu="${var_cpu:-1}"
|
||||||
var_ram="${var_ram:-512}"
|
var_ram="${var_ram:-1024}"
|
||||||
var_disk="${var_disk:-2}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
@@ -23,22 +23,14 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
if [[ ! -f /etc/typesense/typesense-server.ini ]]; then
|
||||||
if [[ ! -f /opt/whodb/whodb ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if check_for_gh_release "typesense" "typesense/typesense"; then
|
||||||
if check_for_gh_release "whodb" "clidey/whodb"; then
|
msg_info "Updating Typesense"
|
||||||
msg_info "Stopping Service"
|
$STD apt update
|
||||||
systemctl stop whodb
|
$STD apt -y upgrade
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "whodb" "clidey/whodb" "singlefile" "latest" "/opt/whodb" "whodb-*-linux-amd64"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start whodb
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
@@ -48,7 +40,7 @@ start
|
|||||||
build_container
|
build_container
|
||||||
description
|
description
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}${IP}:8108${CL}"
|
||||||
@@ -38,14 +38,8 @@ function update_script() {
|
|||||||
$STD apt -y upgrade
|
$STD apt -y upgrade
|
||||||
msg_ok "Updated LXC"
|
msg_ok "Updated LXC"
|
||||||
|
|
||||||
msg_info "Updating UHF Server"
|
|
||||||
if dpkg -l ffmpeg 2>&1 | grep -q "ii"; then
|
|
||||||
apt remove ffmpeg -y && apt autoremove -y
|
|
||||||
fi
|
|
||||||
setup_ffmpeg
|
|
||||||
fetch_and_deploy_gh_release "comskip" "swapplications/comskip" "prebuild" "latest" "/opt/comskip" "comskip-x64-*.zip"
|
fetch_and_deploy_gh_release "comskip" "swapplications/comskip" "prebuild" "latest" "/opt/comskip" "comskip-x64-*.zip"
|
||||||
fetch_and_deploy_gh_release "uhf-server" "swapplications/uhf-server-dist" "prebuild" "latest" "/opt/uhf-server" "UHF.Server-linux-x64-*.zip"
|
fetch_and_deploy_gh_release "uhf-server" "swapplications/uhf-server-dist" "prebuild" "latest" "/opt/uhf-server" "UHF.Server-linux-x64-*.zip"
|
||||||
msg_ok "Updated UHF Server"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start uhf-server
|
systemctl start uhf-server
|
||||||
|
|||||||
@@ -33,9 +33,7 @@ function update_script() {
|
|||||||
systemctl stop umami
|
systemctl stop umami
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
mv /opt/umami/.env /opt/.env.bak
|
fetch_and_deploy_gh_release "umami" "umami-software/umami" "tarball"
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "umami" "umami-software/umami" "tarball"
|
|
||||||
mv /opt/.env.bak /opt/umami/.env
|
|
||||||
|
|
||||||
msg_info "Updating Umami"
|
msg_info "Updating Umami"
|
||||||
cd /opt/umami
|
cd /opt/umami
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
#!/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)
|
# Author: BrynnJKnight
|
||||||
# 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/frappe/erpnext
|
# Source: https://verdaccio.org/ | Github: https://github.com/verdaccio/verdaccio
|
||||||
|
|
||||||
APP="ERPNext"
|
APP="Verdaccio"
|
||||||
var_tags="${var_tags:-erp;business;accounting}"
|
var_tags="${var_tags:-dev-tools;npm;registry}"
|
||||||
var_cpu="${var_cpu:-4}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-4096}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-20}"
|
var_disk="${var_disk:-8}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
@@ -24,13 +23,19 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -d /opt/frappe-bench ]]; then
|
if [[ ! -f /etc/systemd/system/verdaccio.service ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating ERPNext"
|
|
||||||
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:$PATH"; cd /opt/frappe-bench && bench update --reset'
|
msg_info "Updating LXC Container"
|
||||||
msg_ok "Updated ERPNext"
|
$STD apt update
|
||||||
|
$STD apt upgrade -y
|
||||||
|
msg_ok "Updated LXC Container"
|
||||||
|
|
||||||
|
NODE_VERSION="24" NODE_MODULE="verdaccio" setup_nodejs
|
||||||
|
systemctl restart verdaccio
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,10 +43,7 @@ start
|
|||||||
build_container
|
build_container
|
||||||
description
|
description
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4873${CL}"
|
||||||
echo -e "${INFO}${YW} Credentials:${CL}"
|
|
||||||
echo -e "${TAB}${BGN}Username: Administrator${CL}"
|
|
||||||
echo -e "${TAB}${BGN}Password: see ~/erpnext.creds${CL}"
|
|
||||||
@@ -43,7 +43,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Installing Python Dependencies"
|
msg_info "Installing Python Dependencies"
|
||||||
cd /opt/yamtrack
|
cd /opt/yamtrack
|
||||||
$STD uv venv --clear .venv
|
$STD uv venv .venv
|
||||||
$STD uv pip install --no-cache-dir -r requirements.txt
|
$STD uv pip install --no-cache-dir -r requirements.txt
|
||||||
msg_ok "Installed Python Dependencies"
|
msg_ok "Installed Python Dependencies"
|
||||||
|
|
||||||
@@ -61,10 +61,7 @@ function update_script() {
|
|||||||
msg_info "Updating Nginx Configuration"
|
msg_info "Updating Nginx Configuration"
|
||||||
cp /opt/yamtrack/nginx.conf /etc/nginx/nginx.conf
|
cp /opt/yamtrack/nginx.conf /etc/nginx/nginx.conf
|
||||||
sed -i 's|user abc;|user www-data;|' /etc/nginx/nginx.conf
|
sed -i 's|user abc;|user www-data;|' /etc/nginx/nginx.conf
|
||||||
sed -i 's|pid /tmp/nginx.pid;|pid /run/nginx.pid;|' /etc/nginx/nginx.conf
|
|
||||||
sed -i 's|/yamtrack/staticfiles/|/opt/yamtrack/src/staticfiles/|' /etc/nginx/nginx.conf
|
sed -i 's|/yamtrack/staticfiles/|/opt/yamtrack/src/staticfiles/|' /etc/nginx/nginx.conf
|
||||||
sed -i 's|error_log /dev/stderr|error_log /var/log/nginx/error.log|' /etc/nginx/nginx.conf
|
|
||||||
sed -i 's|access_log /dev/stdout|access_log /var/log/nginx/access.log|' /etc/nginx/nginx.conf
|
|
||||||
$STD systemctl reload nginx
|
$STD systemctl reload nginx
|
||||||
msg_ok "Updated Nginx Configuration"
|
msg_ok "Updated Nginx Configuration"
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ function update_script() {
|
|||||||
cp /opt/zerobyte/.env /opt/zerobyte.env.bak
|
cp /opt/zerobyte/.env /opt/zerobyte.env.bak
|
||||||
msg_ok "Backed up Configuration"
|
msg_ok "Backed up Configuration"
|
||||||
|
|
||||||
ensure_dependencies git
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "zerobyte" "nicotsx/zerobyte" "tarball"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "zerobyte" "nicotsx/zerobyte" "tarball"
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user