mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-09-24 11:08:07 +00:00
Compare commits
85
Commits
Generated
+152
@@ -1,3 +1,155 @@
|
||||
## 2026-09-19
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- qBit-Manage ([#17377](https://github.com/community-scripts/ProxmoxVE/pull/17377))
|
||||
- Ubuntu-VM: AIO | new core | performance | remove old wrappers [@MickLesk](https://github.com/MickLesk) ([#17354](https://github.com/community-scripts/ProxmoxVE/pull/17354))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- Fall back to the unversioned banner slug [@MickLesk](https://github.com/MickLesk) ([core#48](https://github.com/community-scripts/core/pull/48))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- chore(ct): sync immichframe defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#17373](https://github.com/community-scripts/ProxmoxVE/pull/17373))
|
||||
|
||||
## 2026-09-18
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Almalinux-VM ([#17349](https://github.com/community-scripts/ProxmoxVE/pull/17349))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- update authentik to 2026.8.3 [@thieneret](https://github.com/thieneret) ([#17366](https://github.com/community-scripts/ProxmoxVE/pull/17366))
|
||||
- crafty-controller: chown after restore_backup so restored data keeps ownership [@MickLesk](https://github.com/MickLesk) ([#17348](https://github.com/community-scripts/ProxmoxVE/pull/17348))
|
||||
- databasus, domain-monitor, poznote: chown after restore_backup so restored data keeps its owner [@MickLesk](https://github.com/MickLesk) ([#17350](https://github.com/community-scripts/ProxmoxVE/pull/17350))
|
||||
- alpine-vm: ask for the Cloud-Init credentials [@MickLesk](https://github.com/MickLesk) ([#17355](https://github.com/community-scripts/ProxmoxVE/pull/17355))
|
||||
- suggestarr: keep the data where the app actually reads it [@MickLesk](https://github.com/MickLesk) ([#17317](https://github.com/community-scripts/ProxmoxVE/pull/17317))
|
||||
- immichframe: set the admin password the new admin UI requires [@MickLesk](https://github.com/MickLesk) ([#17315](https://github.com/community-scripts/ProxmoxVE/pull/17315))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- pangolin: Bump to 1.23.0 [@MickLesk](https://github.com/MickLesk) ([#17343](https://github.com/community-scripts/ProxmoxVE/pull/17343))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Oxicloud [@MickLesk](https://github.com/MickLesk) ([#17338](https://github.com/community-scripts/ProxmoxVE/pull/17338))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- Stop a modified conffile from aborting the whole update [@MickLesk](https://github.com/MickLesk) ([core#47](https://github.com/community-scripts/core/pull/47))
|
||||
- Generate app headers [@github-actions[bot]](https://github.com/github-actions[bot]) ([core#46](https://github.com/community-scripts/core/pull/46))
|
||||
- github api: retry a 200 that is not a usable release payload [@MickLesk](https://github.com/MickLesk) ([core#45](https://github.com/community-scripts/core/pull/45))
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
- chore: fix PR template help [@CrazyWolf13](https://github.com/CrazyWolf13) ([#17364](https://github.com/community-scripts/ProxmoxVE/pull/17364))
|
||||
|
||||
## 2026-09-17
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Alpine-VM ([#17324](https://github.com/community-scripts/ProxmoxVE/pull/17324))
|
||||
- Allstarlink ([#17321](https://github.com/community-scripts/ProxmoxVE/pull/17321))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- changedetection: update: various fixes [@CrazyWolf13](https://github.com/CrazyWolf13) ([#17331](https://github.com/community-scripts/ProxmoxVE/pull/17331))
|
||||
- sparkyfitness: run the Better Auth migration during the update [@MickLesk](https://github.com/MickLesk) ([#17318](https://github.com/community-scripts/ProxmoxVE/pull/17318))
|
||||
- poznote: follow init.sh into docker/ [@MickLesk](https://github.com/MickLesk) ([#17316](https://github.com/community-scripts/ProxmoxVE/pull/17316))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- romm: make the library paths follow ROMM_BASE_PATH [@MickLesk](https://github.com/MickLesk) ([#17279](https://github.com/community-scripts/ProxmoxVE/pull/17279))
|
||||
- Debian-VM: Refactor | Support Debian 11, 12, 13 [@MickLesk](https://github.com/MickLesk) ([#17325](https://github.com/community-scripts/ProxmoxVE/pull/17325))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- Ask before replacing a cached image that no longer matches [@MickLesk](https://github.com/MickLesk) ([core#44](https://github.com/community-scripts/core/pull/44))
|
||||
|
||||
## 2026-09-16
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Immich: Pin to v3.2.2 [@vhsdream](https://github.com/vhsdream) ([#17307](https://github.com/community-scripts/ProxmoxVE/pull/17307))
|
||||
- Dispatcharr: Bump to 4G RAM [@github-actions[bot]](https://github.com/github-actions[bot]) ([#17302](https://github.com/community-scripts/ProxmoxVE/pull/17302))
|
||||
- navidrome: repair root-owned data folders left by 0.61.x [@MickLesk](https://github.com/MickLesk) ([#17275](https://github.com/community-scripts/ProxmoxVE/pull/17275))
|
||||
- tor-snowflake: read the Go version from the module root [@MickLesk](https://github.com/MickLesk) ([#17276](https://github.com/community-scripts/ProxmoxVE/pull/17276))
|
||||
- docmost: stop corepack asking for confirmation during the build [@MickLesk](https://github.com/MickLesk) ([#17282](https://github.com/community-scripts/ProxmoxVE/pull/17282))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Refactor: TrueNAS VM (core / improve functions / performance) [@MickLesk](https://github.com/MickLesk) ([#17277](https://github.com/community-scripts/ProxmoxVE/pull/17277))
|
||||
- Frigate: Bump to 0.18.0 [@MickLesk](https://github.com/MickLesk) ([#17273](https://github.com/community-scripts/ProxmoxVE/pull/17273))
|
||||
- Refactor: HomeAssistant-OS (core / improve functions / performance) [@MickLesk](https://github.com/MickLesk) ([#17281](https://github.com/community-scripts/ProxmoxVE/pull/17281))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- Read the IGC version compute-runtime pins, instead of taking the newest [@MickLesk](https://github.com/MickLesk) ([core#43](https://github.com/community-scripts/core/pull/43))
|
||||
- Install the Intel driver dependency before the .deb that needs it [@MickLesk](https://github.com/MickLesk) ([core#42](https://github.com/community-scripts/core/pull/42))
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
- pocketbase-bot: accept the var_ names and two missing fields [@MickLesk](https://github.com/MickLesk) ([#17305](https://github.com/community-scripts/ProxmoxVE/pull/17305))
|
||||
|
||||
## 2026-09-15
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- valhalla ([#17231](https://github.com/community-scripts/ProxmoxVE/pull/17231))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- borg-ui: missing dependency `sshpass` [@christian-forgacs](https://github.com/christian-forgacs) ([#17286](https://github.com/community-scripts/ProxmoxVE/pull/17286))
|
||||
- tracearr: copy packages/emails into the deploy tree [@connorgallopo](https://github.com/connorgallopo) ([#17268](https://github.com/community-scripts/ProxmoxVE/pull/17268))
|
||||
- Immich: Pin to v3.2.1 [@vhsdream](https://github.com/vhsdream) ([#17264](https://github.com/community-scripts/ProxmoxVE/pull/17264))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- Add vm_extract_image, which two VM scripts already call [@MickLesk](https://github.com/MickLesk) ([core#40](https://github.com/community-scripts/core/pull/40))
|
||||
- Releases: rank releases on their numbers, not on sort -V over the raw tag [@MickLesk](https://github.com/MickLesk) ([core#39](https://github.com/community-scripts/core/pull/39))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: monitor-all (decide on flag values, not on key presence) [@MickLesk](https://github.com/MickLesk) ([#17261](https://github.com/community-scripts/ProxmoxVE/pull/17261))
|
||||
|
||||
## 2026-09-14
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Borg-UI ([#17258](https://github.com/community-scripts/ProxmoxVE/pull/17258))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- SparkyFitness: substitute NGINX_RATE_LIMIT in nginx config [@RafBorrelli](https://github.com/RafBorrelli) ([#17256](https://github.com/community-scripts/ProxmoxVE/pull/17256))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- spliit: bump Node.js from 24 to 26 [@github-actions[bot]](https://github.com/github-actions[bot]) ([#17250](https://github.com/community-scripts/ProxmoxVE/pull/17250))
|
||||
|
||||
## 2026-09-13
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Downgrade iobroker to Node 24 [@Copilot](https://github.com/Copilot) ([#17229](https://github.com/community-scripts/ProxmoxVE/pull/17229))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- Pick the highest release version, not the newest published one [@MickLesk](https://github.com/MickLesk) ([core#38](https://github.com/community-scripts/core/pull/38))
|
||||
|
||||
## 2026-09-12
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
Generated
+3
-3
@@ -8,7 +8,7 @@ PRs without prior testing will be closed. If you are an AI agent writing this pu
|
||||
|
||||
Fixes #
|
||||
|
||||
## ✅ Prerequisites (**X** in brackets)
|
||||
## ✅ Prerequisites (**x** in brackets)
|
||||
|
||||
- [ ] **Self-review completed** – Code follows project standards.
|
||||
- [ ] **Tested thoroughly** – Changes work as expected.
|
||||
@@ -43,13 +43,13 @@ Fixes #
|
||||
|
||||
## 💥 Breaking Change Advisory (only if you checked "Breaking change")
|
||||
|
||||
If this PR changes existing behaviour in a way that may require action before an
|
||||
<!-- If this PR changes existing behaviour in a way that may require action before an
|
||||
update, add a `breaking-change` advisory block to this PR body. The website and
|
||||
the in-container update guard read it to tell operators exactly what to expect,
|
||||
what to do first, and — with `action: block` — to stop an update until it's
|
||||
handled. Every field is optional; the advisory auto-expires 30 days after merge.
|
||||
|
||||
Copy the block out of the comment below, fill it in, and paste it here:
|
||||
Copy the block out of the comment below, fill it in, and paste it here: -->
|
||||
|
||||
<!--
|
||||
```breaking-change
|
||||
|
||||
+3
-1
@@ -22,7 +22,9 @@ generate_headers() {
|
||||
for script in "${file_list[@]}"; do
|
||||
[[ -f "$script" ]] || continue
|
||||
|
||||
app_name=$(grep -oP '^APP="\K[^"]+' "$script" 2>/dev/null)
|
||||
# -m1: a script that sets APP twice (the second carrying ${var_version})
|
||||
# otherwise yields both lines, and the filename gets a newline in it.
|
||||
app_name=$(grep -m1 -oP '^APP="\K[^"]+' "$script" 2>/dev/null)
|
||||
if [[ -n "$app_name" ]]; then
|
||||
# core.func/vm-core.func look the header up as "${APP,,}" without spaces,
|
||||
# so the generated file has to be named after APP - not after the script.
|
||||
|
||||
+138
-146
@@ -104,6 +104,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -117,7 +120,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
|
||||
<details>
|
||||
<summary><h4>September (12 entries)</h4></summary>
|
||||
<summary><h4>September (19 entries)</h4></summary>
|
||||
|
||||
[View September 2026 Changelog](.github/changelogs/2026/09.md)
|
||||
|
||||
@@ -543,6 +546,139 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
</details>
|
||||
|
||||
## 2026-09-23
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix(signoz): install the histogramQuantile ClickHouse function [@maksimtech](https://github.com/maksimtech) ([#17386](https://github.com/community-scripts/ProxmoxVE/pull/17386))
|
||||
- omniroute: bump to 4 GB for the npm install [@MickLesk](https://github.com/MickLesk) ([#17461](https://github.com/community-scripts/ProxmoxVE/pull/17461))
|
||||
- Run Borg-UI with a single gunicorn worker [@MickLesk](https://github.com/MickLesk) ([#17445](https://github.com/community-scripts/ProxmoxVE/pull/17445))
|
||||
- immich: keep geodata linked and the build deps present on update [@MickLesk](https://github.com/MickLesk) ([#17438](https://github.com/community-scripts/ProxmoxVE/pull/17438))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Scanopy [@MickLesk](https://github.com/MickLesk) ([#16797](https://github.com/community-scripts/ProxmoxVE/pull/16797))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- stop a partial find from aborting the caller under pipefail [@MickLesk](https://github.com/MickLesk) ([core#68](https://github.com/community-scripts/core/pull/68))
|
||||
- core: give RHEL-family containers an ostype PVE accepts [@MickLesk](https://github.com/MickLesk) ([core#67](https://github.com/community-scripts/core/pull/67))
|
||||
- core: do not abort on a failed apt update [@MickLesk](https://github.com/MickLesk) ([core#66](https://github.com/community-scripts/core/pull/66))
|
||||
- VM's: report a finished VM as done, not aborted [@MickLesk](https://github.com/MickLesk) ([core#65](https://github.com/community-scripts/core/pull/65))
|
||||
- VM-Core: decide console autologin from the image, not USE_CLOUD_INIT [@MickLesk](https://github.com/MickLesk) ([core#63](https://github.com/community-scripts/core/pull/63))
|
||||
- VM-Core: report failed image steps and restore tty1 autologin without cloud-init [@MickLesk](https://github.com/MickLesk) ([core#62](https://github.com/community-scripts/core/pull/62))
|
||||
- tools: raise pnpm/yarn fetch timeout and lower network concurrency [@MickLesk](https://github.com/MickLesk) ([core#59](https://github.com/community-scripts/core/pull/59))
|
||||
- VM-Core: stop discarding cloud-init error messages [@MickLesk](https://github.com/MickLesk) ([core#60](https://github.com/community-scripts/core/pull/60))
|
||||
|
||||
## 2026-09-22
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix(invoiceshelf): re-link storage during update [@owenvoke](https://github.com/owenvoke) ([#17431](https://github.com/community-scripts/ProxmoxVE/pull/17431))
|
||||
- fix(alpine-it-tools): write the version file after a successful update [@Houtek](https://github.com/Houtek) ([#17421](https://github.com/community-scripts/ProxmoxVE/pull/17421))
|
||||
- Umami: Align pnpm with engines.pnpm on update [@ReneNulschDE](https://github.com/ReneNulschDE) ([#17404](https://github.com/community-scripts/ProxmoxVE/pull/17404))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- several scripts: let uv see the project before syncing it | refactor some scripts that use uv [@MickLesk](https://github.com/MickLesk) ([#17436](https://github.com/community-scripts/ProxmoxVE/pull/17436))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- setup_uv: honour a project's required-version pin [@MickLesk](https://github.com/MickLesk) ([core#58](https://github.com/community-scripts/core/pull/58))
|
||||
- fix(motd): repair legacy 00_lxc-details.sh header and dead color placeholders [@BadFlo](https://github.com/BadFlo) ([core#53](https://github.com/community-scripts/core/pull/53))
|
||||
- meilisearch: take the raw binary, not the .deb [@MickLesk](https://github.com/MickLesk) ([core#57](https://github.com/community-scripts/core/pull/57))
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
- github: Stop generating header filenames with a newline in them [@MickLesk](https://github.com/MickLesk) ([#17435](https://github.com/community-scripts/ProxmoxVE/pull/17435))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- chore(ct): sync cloudflare-ddns defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#17446](https://github.com/community-scripts/ProxmoxVE/pull/17446))
|
||||
|
||||
## 2026-09-21
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- AudioMuse-AI ([#17415](https://github.com/community-scripts/ProxmoxVE/pull/17415))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix(portabase): meet the default admin password rules [@maksimtech](https://github.com/maksimtech) ([#17384](https://github.com/community-scripts/ProxmoxVE/pull/17384))
|
||||
- truenas-vm: strip the G before the storage allocation [@MickLesk](https://github.com/MickLesk) ([#17407](https://github.com/community-scripts/ProxmoxVE/pull/17407))
|
||||
- Librenms - Fix local snmpd community string setup [@dopch](https://github.com/dopch) ([#17363](https://github.com/community-scripts/ProxmoxVE/pull/17363))
|
||||
- fix(iventoy): preserve release data and migrate legacy service launchers [@Msprg](https://github.com/Msprg) ([#17161](https://github.com/community-scripts/ProxmoxVE/pull/17161))
|
||||
- xyops: bump Node.js from 22 to 24 [@github-actions[bot]](https://github.com/github-actions[bot]) ([#17398](https://github.com/community-scripts/ProxmoxVE/pull/17398))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- Generate app headers [@github-actions[bot]](https://github.com/github-actions[bot]) ([core#56](https://github.com/community-scripts/core/pull/56))
|
||||
- github-api: take the release the maintainer marked as latest [@MickLesk](https://github.com/MickLesk) ([core#55](https://github.com/community-scripts/core/pull/55))
|
||||
- general: prune old Rust toolchains [@MickLesk](https://github.com/MickLesk) ([core#52](https://github.com/community-scripts/core/pull/52))
|
||||
- Ask when the preselected storage cannot hold the content [@MickLesk](https://github.com/MickLesk) ([core#51](https://github.com/community-scripts/core/pull/51))
|
||||
|
||||
## 2026-09-20
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Your-Spotify ([#17376](https://github.com/community-scripts/ProxmoxVE/pull/17376))
|
||||
|
||||
## 2026-09-19
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- qBit-Manage ([#17377](https://github.com/community-scripts/ProxmoxVE/pull/17377))
|
||||
- Ubuntu-VM: AIO | new core | performance | remove old wrappers [@MickLesk](https://github.com/MickLesk) ([#17354](https://github.com/community-scripts/ProxmoxVE/pull/17354))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- Fall back to the unversioned banner slug [@MickLesk](https://github.com/MickLesk) ([core#48](https://github.com/community-scripts/core/pull/48))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- chore(ct): sync immichframe defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#17373](https://github.com/community-scripts/ProxmoxVE/pull/17373))
|
||||
|
||||
## 2026-09-18
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Almalinux-VM ([#17349](https://github.com/community-scripts/ProxmoxVE/pull/17349))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- update authentik to 2026.8.3 [@thieneret](https://github.com/thieneret) ([#17366](https://github.com/community-scripts/ProxmoxVE/pull/17366))
|
||||
- crafty-controller: chown after restore_backup so restored data keeps ownership [@MickLesk](https://github.com/MickLesk) ([#17348](https://github.com/community-scripts/ProxmoxVE/pull/17348))
|
||||
- databasus, domain-monitor, poznote: chown after restore_backup so restored data keeps its owner [@MickLesk](https://github.com/MickLesk) ([#17350](https://github.com/community-scripts/ProxmoxVE/pull/17350))
|
||||
- alpine-vm: ask for the Cloud-Init credentials [@MickLesk](https://github.com/MickLesk) ([#17355](https://github.com/community-scripts/ProxmoxVE/pull/17355))
|
||||
- suggestarr: keep the data where the app actually reads it [@MickLesk](https://github.com/MickLesk) ([#17317](https://github.com/community-scripts/ProxmoxVE/pull/17317))
|
||||
- immichframe: set the admin password the new admin UI requires [@MickLesk](https://github.com/MickLesk) ([#17315](https://github.com/community-scripts/ProxmoxVE/pull/17315))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- pangolin: Bump to 1.23.0 [@MickLesk](https://github.com/MickLesk) ([#17343](https://github.com/community-scripts/ProxmoxVE/pull/17343))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Oxicloud [@MickLesk](https://github.com/MickLesk) ([#17338](https://github.com/community-scripts/ProxmoxVE/pull/17338))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- Stop a modified conffile from aborting the whole update [@MickLesk](https://github.com/MickLesk) ([core#47](https://github.com/community-scripts/core/pull/47))
|
||||
- Generate app headers [@github-actions[bot]](https://github.com/github-actions[bot]) ([core#46](https://github.com/community-scripts/core/pull/46))
|
||||
- github api: retry a 200 that is not a usable release payload [@MickLesk](https://github.com/MickLesk) ([core#45](https://github.com/community-scripts/core/pull/45))
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
- chore: fix PR template help [@CrazyWolf13](https://github.com/CrazyWolf13) ([#17364](https://github.com/community-scripts/ProxmoxVE/pull/17364))
|
||||
|
||||
## 2026-09-17
|
||||
|
||||
### 🆕 New Scripts
|
||||
@@ -1147,148 +1283,4 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
- bookorbit: bump default RAM to prevent tsc OOM segfault during nest build [@MickLesk](https://github.com/MickLesk) ([#16649](https://github.com/community-scripts/ProxmoxVE/pull/16649))
|
||||
- immich: split jpegli into its own build step, resolve library revisions dynamically [@MickLesk](https://github.com/MickLesk) ([#16656](https://github.com/community-scripts/ProxmoxVE/pull/16656))
|
||||
- tdarr: make unzip non-interactive to prevent hang [@MickLesk](https://github.com/MickLesk) ([#16648](https://github.com/community-scripts/ProxmoxVE/pull/16648))
|
||||
- immich: fix jpegli patch path after upstream base-images split jpegli from libjxl [@MickLesk](https://github.com/MickLesk) ([#16647](https://github.com/community-scripts/ProxmoxVE/pull/16647))
|
||||
|
||||
## 2026-08-20
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Umbraco ([#16621](https://github.com/community-scripts/ProxmoxVE/pull/16621))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- storyteller: fix build paths for upstream applications/web/ monorepo restructure [@MickLesk](https://github.com/MickLesk) ([#16627](https://github.com/community-scripts/ProxmoxVE/pull/16627))
|
||||
- tubearchivist: add bgutil POT provider and update yt-dlp to nightly [@CrazyWolf13](https://github.com/CrazyWolf13) ([#16622](https://github.com/community-scripts/ProxmoxVE/pull/16622))
|
||||
- networkoptimizer: preseed iperf3 debconf question to prevent hang install [@MickLesk](https://github.com/MickLesk) ([#16626](https://github.com/community-scripts/ProxmoxVE/pull/16626))
|
||||
- scanopy: limit cargo build parallelism to prevent OOM kill [@MickLesk](https://github.com/MickLesk) ([#16623](https://github.com/community-scripts/ProxmoxVE/pull/16623))
|
||||
- baikal: fall back to composer update when lock doesn't match [@MickLesk](https://github.com/MickLesk) ([#16625](https://github.com/community-scripts/ProxmoxVE/pull/16625))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- update: various script to debian 13 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#16525](https://github.com/community-scripts/ProxmoxVE/pull/16525))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- copyparty: use fetch_and_deploy_gh_release for version tracking [@MickLesk](https://github.com/MickLesk) ([#16624](https://github.com/community-scripts/ProxmoxVE/pull/16624))
|
||||
|
||||
## 2026-08-19
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix: clean yarn cache after mealie frontend build to prevent disk growth [@bferd](https://github.com/bferd) ([#16609](https://github.com/community-scripts/ProxmoxVE/pull/16609))
|
||||
- VictoriaMetrics: use github_api_call for release lookups so GITHUB_TOKEN is honored [@angusmaul](https://github.com/angusmaul) ([#16607](https://github.com/community-scripts/ProxmoxVE/pull/16607))
|
||||
- Increase default RAM allocation for Gatus [@rmpratt1](https://github.com/rmpratt1) ([#16601](https://github.com/community-scripts/ProxmoxVE/pull/16601))
|
||||
|
||||
## 2026-08-18
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- romm: add missing /decode and /cache Angie locations for multi-file downloads [@MickLesk](https://github.com/MickLesk) ([#16589](https://github.com/community-scripts/ProxmoxVE/pull/16589))
|
||||
- odoo: use patched wkhtmltopdf build [@MickLesk](https://github.com/MickLesk) ([#16590](https://github.com/community-scripts/ProxmoxVE/pull/16590))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Breaking Change: Migrate all "Alpine" Scripts to Normal CT's [@MickLesk](https://github.com/MickLesk) ([#16587](https://github.com/community-scripts/ProxmoxVE/pull/16587))
|
||||
|
||||
## 2026-08-17
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- keycloak: remove invalid ExecStop, kc.sh has no stop subcommand [@MickLesk](https://github.com/MickLesk) ([#16563](https://github.com/community-scripts/ProxmoxVE/pull/16563))
|
||||
- Pin ownfoil release to version 2.3.0 [@MickLesk](https://github.com/MickLesk) ([#16574](https://github.com/community-scripts/ProxmoxVE/pull/16574))
|
||||
- kometa: add git, needed by requirements.txt's git dependency [@MickLesk](https://github.com/MickLesk) ([#16562](https://github.com/community-scripts/ProxmoxVE/pull/16562))
|
||||
- fix romm: deploy EmulatorJS and Ruffle after the frontend build [@angusmaul](https://github.com/angusmaul) ([#16571](https://github.com/community-scripts/ProxmoxVE/pull/16571))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- patchmon: fetch only SCAP datastream XMLs [@MickLesk](https://github.com/MickLesk) ([#16565](https://github.com/community-scripts/ProxmoxVE/pull/16565))
|
||||
- teslamate: use precompiled Elixir [@MickLesk](https://github.com/MickLesk) ([#16561](https://github.com/community-scripts/ProxmoxVE/pull/16561))
|
||||
|
||||
## 2026-08-16
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- [FIX] Shelfmark: internal bypasser never starts under the gevent worker [@robbiet480](https://github.com/robbiet480) ([#16495](https://github.com/community-scripts/ProxmoxVE/pull/16495))
|
||||
- tubearchivist: fix: enhance update script [@CrazyWolf13](https://github.com/CrazyWolf13) ([#16521](https://github.com/community-scripts/ProxmoxVE/pull/16521))
|
||||
- tracktor: build with pnpm using upstream's frozen lockfile [@MickLesk](https://github.com/MickLesk) ([#16530](https://github.com/community-scripts/ProxmoxVE/pull/16530))
|
||||
- wallos: run db migration after apache reload on update [@MickLesk](https://github.com/MickLesk) ([#16528](https://github.com/community-scripts/ProxmoxVE/pull/16528))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- networkoptimizer: also build uwnspeedtest binary for server arch [@MickLesk](https://github.com/MickLesk) ([#16531](https://github.com/community-scripts/ProxmoxVE/pull/16531))
|
||||
|
||||
### 🗑️ Deleted Scripts
|
||||
|
||||
- Remove: Jeedom [@MickLesk](https://github.com/MickLesk) ([#16536](https://github.com/community-scripts/ProxmoxVE/pull/16536))
|
||||
- Remove: Swizzin [@MickLesk](https://github.com/MickLesk) ([#16535](https://github.com/community-scripts/ProxmoxVE/pull/16535))
|
||||
- Remove: NocoDB [@MickLesk](https://github.com/MickLesk) ([#16533](https://github.com/community-scripts/ProxmoxVE/pull/16533))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- core: skip mount points during backup and clean installs [@MickLesk](https://github.com/MickLesk) ([#16532](https://github.com/community-scripts/ProxmoxVE/pull/16532))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- cronmaster: back up scripts, data and snippets folders on update [@MickLesk](https://github.com/MickLesk) ([#16529](https://github.com/community-scripts/ProxmoxVE/pull/16529))
|
||||
|
||||
## 2026-08-15
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Securo ([#16518](https://github.com/community-scripts/ProxmoxVE/pull/16518))
|
||||
- ntopng ([#16387](https://github.com/community-scripts/ProxmoxVE/pull/16387))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- AdventureLog: remove pnpm build-allowlist override causing pnpm 10.33 conflict [@MickLesk](https://github.com/MickLesk) ([#16478](https://github.com/community-scripts/ProxmoxVE/pull/16478))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- PatchMon: add ssg-content [@MickLesk](https://github.com/MickLesk) ([#16481](https://github.com/community-scripts/ProxmoxVE/pull/16481))
|
||||
|
||||
## 2026-08-14
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- RSS-Bridge ([#16471](https://github.com/community-scripts/ProxmoxVE/pull/16471))
|
||||
- GoDoxy ([#16470](https://github.com/community-scripts/ProxmoxVE/pull/16470))
|
||||
- Mumble ([#16474](https://github.com/community-scripts/ProxmoxVE/pull/16474))
|
||||
- Fleet ([#16472](https://github.com/community-scripts/ProxmoxVE/pull/16472))
|
||||
- Newt ([#16473](https://github.com/community-scripts/ProxmoxVE/pull/16473))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- calibre-web: install as package for 0.6.27's src-layout restructure [@MickLesk](https://github.com/MickLesk) ([#16480](https://github.com/community-scripts/ProxmoxVE/pull/16480))
|
||||
- Wanderer: Refactor of Services / Installation / Paths [@johanngrobe](https://github.com/johanngrobe) ([#16487](https://github.com/community-scripts/ProxmoxVE/pull/16487))
|
||||
- pelican-panel: set APP_URL to container IP [@MickLesk](https://github.com/MickLesk) ([#16488](https://github.com/community-scripts/ProxmoxVE/pull/16488))
|
||||
- fix(ampache): update to PHP 8.5 asset, auto-upgrade PHP on update [@CervezaStallone](https://github.com/CervezaStallone) ([#16484](https://github.com/community-scripts/ProxmoxVE/pull/16484))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- projectsend: rewrite for 2.0.0 (Laravel, nginx, MariaDB) [@MickLesk](https://github.com/MickLesk) ([#16477](https://github.com/community-scripts/ProxmoxVE/pull/16477))
|
||||
- Homepage v2.0 [@vhsdream](https://github.com/vhsdream) ([#16500](https://github.com/community-scripts/ProxmoxVE/pull/16500))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: PowerDNS move poweradmin database outside the web root [@MickLesk](https://github.com/MickLesk) ([#16476](https://github.com/community-scripts/ProxmoxVE/pull/16476))
|
||||
- paperless-ngx: run services with uv --no-sync to avoid startup network dependency [@MickLesk](https://github.com/MickLesk) ([#16479](https://github.com/community-scripts/ProxmoxVE/pull/16479))
|
||||
- immich: fix jpegli patch path after upstream base-images split jpegli from libjxl [@MickLesk](https://github.com/MickLesk) ([#16647](https://github.com/community-scripts/ProxmoxVE/pull/16647))
|
||||
@@ -40,6 +40,7 @@ function update_script() {
|
||||
cp -r /tmp/dist/* /usr/share/nginx/html
|
||||
rm -rf /tmp/dist
|
||||
rm -f it-tools.zip
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env bash
|
||||
_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main"
|
||||
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
|
||||
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/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/NeptuneHub/AudioMuse-AI
|
||||
|
||||
APP="AudioMuse-AI"
|
||||
var_tags="${var_tags:-music;ai}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-8192}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
#var_arm64="${var_arm64:-no}"
|
||||
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/audiomuse-ai ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "audiomuse-ai" "NeptuneHub/AudioMuse-AI"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop audiomuse-ai audiomuse-ai-worker audiomuse-ai-worker-high audiomuse-ai-janitor audiomuse-ai-control
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "audiomuse-ai" "NeptuneHub/AudioMuse-AI" "tarball"
|
||||
|
||||
AUDIOMUSE_BACKEND="$(cat /opt/audiomuse-ai_data/.backend 2>/dev/null || echo cpu)"
|
||||
REQ_COMMON="common.txt"
|
||||
case "$AUDIOMUSE_BACKEND" in
|
||||
gpu)
|
||||
REQ_ACCEL="gpu.txt"
|
||||
[[ "$(uname -m)" == "aarch64" ]] && REQ_ACCEL="gpu-arm64.txt"
|
||||
;;
|
||||
cpu-noavx2)
|
||||
REQ_COMMON="common-noavx2.txt"
|
||||
REQ_ACCEL="cpu-noavx2.txt"
|
||||
;;
|
||||
*)
|
||||
REQ_ACCEL="cpu.txt"
|
||||
;;
|
||||
esac
|
||||
|
||||
msg_info "Updating Python Environment (${AUDIOMUSE_BACKEND})"
|
||||
cd /opt/audiomuse-ai
|
||||
$STD uv venv --seed --python 3.12 /opt/audiomuse-ai/.venv
|
||||
$STD uv pip install --python /opt/audiomuse-ai/.venv \
|
||||
-r "/opt/audiomuse-ai/requirements/${REQ_COMMON}" \
|
||||
-r "/opt/audiomuse-ai/requirements/${REQ_ACCEL}"
|
||||
msg_ok "Updated Python Environment (${AUDIOMUSE_BACKEND})"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start audiomuse-ai audiomuse-ai-worker audiomuse-ai-worker-high audiomuse-ai-janitor audiomuse-ai-control
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||
echo -e "${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
||||
+4
-4
@@ -43,13 +43,12 @@ function update_script() {
|
||||
ensure_dependencies crossbuild-essential-$(arch_resolve) gcc-$(arch_resolve "x86-64" "aarch64")-linux-gnu cmake clang libunwind-18-dev
|
||||
msg_ok "Update dependencies"
|
||||
|
||||
NODE_VERSION="26" NODE_MODULE=pnpm@11 setup_nodejs
|
||||
NODE_VERSION="26" NODE_MODULE=pnpm@12 setup_nodejs
|
||||
$STD uv cache clean
|
||||
UV_PYTHON_INSTALL_DIR="/usr/local/bin" PYTHON_VERSION="3.14.7" setup_uv
|
||||
RUST_PROFILE="minimal" RUST_TOOLCHAIN="stable" setup_rust
|
||||
setup_yq
|
||||
|
||||
AUTHENTIK_VERSION="version/2026.8.2"
|
||||
AUTHENTIK_VERSION="version/2026.8.3"
|
||||
# Source: https://github.com/goauthentik/fips/blob/main/Makefile#L26
|
||||
XMLSEC_VERSION="1.3.12"
|
||||
|
||||
@@ -95,6 +94,7 @@ function update_script() {
|
||||
fi
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "authentik" "goauthentik/authentik" "tarball" "${AUTHENTIK_VERSION}" "/opt/authentik"
|
||||
UV_PYTHON_INSTALL_DIR="/usr/local/bin" PYTHON_VERSION="3.14.7" UV_PROJECT_DIR="/opt/authentik" setup_uv
|
||||
GO_VERSION="$(grep -m1 '^go ' /opt/authentik/go.mod | awk '{print $2}')" setup_go
|
||||
|
||||
msg_info "Configuring rust"
|
||||
@@ -106,7 +106,7 @@ function update_script() {
|
||||
msg_info "Updating web"
|
||||
export NODE_ENV="production"
|
||||
cd /opt/authentik
|
||||
$STD node ./scripts/node/lint-runtime.mjs ./web
|
||||
$STD node ./scripts/node/lint-runtime.ts ./web
|
||||
cd /opt/authentik/web
|
||||
$STD pnpm install --frozen-lockfile
|
||||
$STD pnpm run build
|
||||
|
||||
+1
-2
@@ -31,8 +31,6 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
setup_uv
|
||||
|
||||
RELEASE=$(get_latest_codeberg_release "gelbphoenix/autocaliweb")
|
||||
if check_for_codeberg_release "autocaliweb" "gelbphoenix/autocaliweb"; then
|
||||
msg_info "Stopping Services"
|
||||
@@ -43,6 +41,7 @@ function update_script() {
|
||||
export VIRTUAL_ENV="${INSTALL_DIR}/venv"
|
||||
$STD tar -cf ~/autocaliweb_bkp.tar "$INSTALL_DIR"/{metadata_change_logs,dirs.json,.env,scripts/ingest_watcher.sh,scripts/auto_zipper_wrapper.sh,scripts/metadata_change_detector_wrapper.sh}
|
||||
fetch_and_deploy_codeberg_release "autocaliweb" "gelbphoenix/autocaliweb" "tarball" "latest" "/opt/autocaliweb"
|
||||
setup_uv $INSTALL_DIR
|
||||
|
||||
msg_info "Updating Autocaliweb"
|
||||
cd "$INSTALL_DIR"
|
||||
|
||||
@@ -39,6 +39,7 @@ function update_script() {
|
||||
|
||||
create_backup /opt/baserow/.env
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "baserow" "baserow/baserow" "tarball"
|
||||
UV_PROJECT_DIR="/opt/baserow/backend" setup_uv
|
||||
restore_backup
|
||||
|
||||
msg_info "Configuring Baserow"
|
||||
|
||||
@@ -40,6 +40,7 @@ function update_script() {
|
||||
create_backup /opt/beaverhabits/.user
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "beaverhabits" "daya0576/beaverhabits" "tarball"
|
||||
PYTHON_VERSION="3.14" UV_PROJECT_DIR="/opt/beaverhabits" setup_uv
|
||||
|
||||
msg_info "Syncing Dependencies"
|
||||
cd /opt/beaverhabits
|
||||
|
||||
@@ -32,6 +32,14 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
if grep -q -- '--workers 2' /etc/systemd/system/borg-ui.service 2>/dev/null; then
|
||||
msg_info "Reducing Service to a single worker"
|
||||
sed -i 's/--workers 2/--workers 1/' /etc/systemd/system/borg-ui.service
|
||||
systemctl daemon-reload
|
||||
systemctl try-restart borg-ui
|
||||
msg_ok "Reduced Service to a single worker"
|
||||
fi
|
||||
|
||||
if check_for_gh_release "borg-ui" "karanhudia/borg-ui"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop borg-ui
|
||||
|
||||
@@ -37,6 +37,7 @@ function update_script() {
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Byparr" "ThePhaseless/Byparr" "tarball" "latest"
|
||||
UV_PROJECT_DIR="/opt/Byparr" setup_uv
|
||||
|
||||
if ! dpkg -l | grep -q ffmpeg; then
|
||||
msg_info "Installing dependencies"
|
||||
|
||||
@@ -9,8 +9,8 @@ source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_
|
||||
|
||||
APP="Cloudflare-DDNS"
|
||||
var_tags="${var_tags:-network}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-3}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
|
||||
@@ -46,8 +46,8 @@ function update_script() {
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gl_release "Crafty-Controller" "crafty-controller/crafty-4" "tarball" "latest" "/opt/crafty-controller/crafty/crafty-4"
|
||||
|
||||
chown -R crafty:crafty /opt/crafty-controller
|
||||
restore_backup
|
||||
chown -R crafty:crafty /opt/crafty-controller
|
||||
|
||||
msg_info "Updating TemurinJDK"
|
||||
setup_java
|
||||
|
||||
+1
-1
@@ -87,10 +87,10 @@ function update_script() {
|
||||
mkdir -p /opt/databasus/ui/build
|
||||
cp -r /opt/databasus/frontend/dist/* /opt/databasus/ui/build/
|
||||
cp -r /opt/databasus/backend/migrations /opt/databasus/
|
||||
chown -R postgres:postgres /opt/databasus
|
||||
msg_ok "Updated Databasus"
|
||||
|
||||
restore_backup
|
||||
chown -R postgres:postgres /opt/databasus
|
||||
|
||||
if ! grep -q "EnvironmentFile=/.env" /etc/systemd/system/databasus.service; then
|
||||
msg_info "Updating Service"
|
||||
|
||||
+1
-1
@@ -32,7 +32,6 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
setup_uv
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
if [[ -f "/etc/nginx/sites-available/dispatcharr.conf" ]] && ! grep -q "real_forwarded_proto" "/etc/nginx/sites-available/dispatcharr.conf"; then
|
||||
msg_info "Migrating Nginx Configuration"
|
||||
@@ -146,6 +145,7 @@ EOF
|
||||
msg_ok "Backup created: $BACKUP_FILE"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr" "tarball"
|
||||
UV_PROJECT_DIR="/opt/dispatcharr" setup_uv
|
||||
|
||||
restore_backup
|
||||
|
||||
|
||||
@@ -53,10 +53,10 @@ function update_script() {
|
||||
msg_info "Updating Domain Monitor"
|
||||
cd /opt/domain-monitor
|
||||
$STD composer install
|
||||
chown -R www-data:www-data /opt/domain-monitor
|
||||
msg_ok "Updated Domain Monitor"
|
||||
|
||||
restore_backup
|
||||
chown -R www-data:www-data /opt/domain-monitor
|
||||
|
||||
msg_info "Restarting Services"
|
||||
systemctl start apache2
|
||||
|
||||
@@ -39,6 +39,7 @@ function update_script() {
|
||||
|
||||
create_backup /opt/fireshare/fireshare.env
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "fireshare" "ShaneIsrael/fireshare" "tarball"
|
||||
UV_PROJECT_DIR="/opt/fireshare" setup_uv
|
||||
restore_backup
|
||||
rm -f /usr/local/bin/fireshare
|
||||
|
||||
|
||||
+1
-1
@@ -38,10 +38,10 @@ function update_script() {
|
||||
|
||||
create_backup /opt/flatnotes/.env /opt/flatnotes/data
|
||||
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes" "tarball"
|
||||
PYTHON_VERSION="3.13" UV_PROJECT_DIR="/opt/flatnotes" setup_uv
|
||||
|
||||
restore_backup
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
___ ___ __ ___ ___ ____
|
||||
/ | __ ______/ (_)___ / |/ /_ __________ / | / _/
|
||||
/ /| |/ / / / __ / / __ \/ /|_/ / / / / ___/ _ \______/ /| | / /
|
||||
/ ___ / /_/ / /_/ / / /_/ / / / / /_/ (__ ) __/_____/ ___ |_/ /
|
||||
/_/ |_\__,_/\__,_/_/\____/_/ /_/\__,_/____/\___/ /_/ |_/___/
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
____ _ __ __ ___
|
||||
____ _/ __ )(_) /_ / |/ /___ _____ ____ _____ ____
|
||||
/ __ `/ __ / / __/_____/ /|_/ / __ `/ __ \/ __ `/ __ `/ _ \
|
||||
/ /_/ / /_/ / / /_/_____/ / / / /_/ / / / / /_/ / /_/ / __/
|
||||
\__, /_____/_/\__/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/
|
||||
/_/ /____/
|
||||
@@ -0,0 +1,6 @@
|
||||
__ __ _____ __ _ ____
|
||||
\ \/ /___ __ _______ / ___/____ ____ / /_(_) __/_ __
|
||||
\ / __ \/ / / / ___/_____\__ \/ __ \/ __ \/ __/ / /_/ / / /
|
||||
/ / /_/ / /_/ / / /_____/__/ / /_/ / /_/ / /_/ / __/ /_/ /
|
||||
/_/\____/\__,_/_/ /____/ .___/\____/\__/_/_/ \__, /
|
||||
/_/ /____/
|
||||
@@ -105,6 +105,7 @@ EOF
|
||||
libraries=("libjxl" "jpegli" "libheif" "libraw" "imagemagick" "libvips")
|
||||
cd "$BASE_DIR"
|
||||
msg_warn "Checking for updates to custom image-processing libraries (recompile time: 2-15min per library)"
|
||||
ensure_dependencies liblcms2-dev libjpeg62-turbo-dev libspng-dev libexif-dev
|
||||
$STD git pull
|
||||
for library in "${libraries[@]}"; do
|
||||
compile_"$library"
|
||||
@@ -192,6 +193,8 @@ EOF
|
||||
export SHARP_FORCE_GLOBAL_LIBVIPS=true
|
||||
$STD pnpm --dir "$APP_DIR/node_modules/sharp" exec npm run build
|
||||
|
||||
ln -sfn "$GEO_DIR" "$APP_DIR/geodata"
|
||||
|
||||
# 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"
|
||||
|
||||
+12
-1
@@ -10,7 +10,7 @@ source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_
|
||||
APP="ImmichFrame"
|
||||
var_tags="${var_tags:-photos;slideshow}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
@@ -79,6 +79,17 @@ function update_script() {
|
||||
restore_backup
|
||||
chown -R immichframe:immichframe /opt/immichframe
|
||||
|
||||
if ! grep -q '^Environment=IMMICHFRAME_ADMIN_PASSWORD=' /etc/systemd/system/immichframe.service; then
|
||||
msg_info "Setting Admin Password"
|
||||
ADMIN_PASSWORD=$(openssl rand -hex 16)
|
||||
sed -i "/^Environment=DOTNET_CONTENTROOT=/a Environment=IMMICHFRAME_ADMIN_PASSWORD=${ADMIN_PASSWORD}" /etc/systemd/system/immichframe.service
|
||||
cat <<EOF >>~/immichframe.creds
|
||||
ImmichFrame Admin User: admin
|
||||
ImmichFrame Admin Password: $ADMIN_PASSWORD
|
||||
EOF
|
||||
systemctl daemon-reload
|
||||
msg_ok "Set Admin Password (see ~/immichframe.creds)"
|
||||
fi
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start immichframe
|
||||
|
||||
@@ -54,6 +54,7 @@ function update_script() {
|
||||
$STD pnpm run build
|
||||
fi
|
||||
$STD php artisan migrate --force
|
||||
$STD php artisan storage:link
|
||||
$STD php artisan optimize:clear
|
||||
chown -R www-data:www-data /opt/invoiceshelf
|
||||
msg_ok "Updated Application"
|
||||
|
||||
+31
-3
@@ -33,15 +33,43 @@ function update_script() {
|
||||
|
||||
if check_for_gh_release "iventoy" "ventoy/PXE"; then
|
||||
msg_info "Stopping iVentoy"
|
||||
$STD /opt/iventoy/iventoy.sh stop
|
||||
systemctl stop iventoy
|
||||
msg_ok "Stopped iVentoy"
|
||||
|
||||
create_backup /opt/iventoy/data /opt/iventoy/iso
|
||||
# Only preserve user state; data/iventoy.dat must match the new executable.
|
||||
create_backup /opt/iventoy/data/config.dat /opt/iventoy/iso /opt/iventoy/user
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "iventoy" "ventoy/PXE" "prebuild" "latest" "/opt/iventoy" "iventoy-*-linux-$(arch_resolve x86_64-free arm64-trial).tar.gz"
|
||||
restore_backup
|
||||
|
||||
# Migrate existing services that invoke the Bash launcher with sh.
|
||||
mkdir -p /etc/systemd/system/iventoy.service.d
|
||||
cat <<EOF >/etc/systemd/system/iventoy.service.d/launcher.conf
|
||||
[Service]
|
||||
ExecStart=
|
||||
ExecStart=/bin/bash /opt/iventoy/iventoy.sh -R start
|
||||
ExecStop=
|
||||
ExecStop=/bin/bash /opt/iventoy/iventoy.sh stop
|
||||
PIDFile=/run/iventoy.pid
|
||||
RestartSec=5
|
||||
EOF
|
||||
systemctl daemon-reload
|
||||
|
||||
msg_info "Starting iVentoy"
|
||||
$STD /opt/iventoy/iventoy.sh -R start
|
||||
systemctl reset-failed iventoy
|
||||
systemctl start iventoy
|
||||
# The launcher can return success before the daemon fails initialization.
|
||||
local i ready=0
|
||||
for ((i = 0; i < 90; i++)); do
|
||||
if systemctl is-active --quiet iventoy && curl -fsS --max-time 2 "${IVENTOY_HEALTH_URL:-http://127.0.0.1:26000/}" >/dev/null 2>&1; then
|
||||
ready=1
|
||||
break
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
if [[ "$ready" -ne 1 ]]; then
|
||||
msg_error "iVentoy did not become ready; check journalctl -u iventoy and /opt/iventoy/log/log.txt"
|
||||
exit 1
|
||||
fi
|
||||
msg_ok "Started iVentoy"
|
||||
msg_ok "Updated Successfully"
|
||||
fi
|
||||
|
||||
@@ -38,6 +38,7 @@ function update_script() {
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "journiv" "journiv/journiv-app" "tarball"
|
||||
UV_PROJECT_DIR="/opt/journiv" setup_uv
|
||||
|
||||
msg_info "Updating Python Environment"
|
||||
cd /opt/journiv
|
||||
|
||||
@@ -42,6 +42,7 @@ function update_script() {
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kitchenowl" "TomBursch/kitchenowl" "tarball" "latest" "/opt/kitchenowl"
|
||||
rm -rf /opt/kitchenowl/web
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kitchenowl-web" "TomBursch/kitchenowl" "prebuild" "latest" "/opt/kitchenowl/web" "kitchenowl_Web.tar.gz"
|
||||
PYTHON_VERSION="3.14" UV_PROJECT_DIR="/opt/kitchenowl/backend" setup_uv
|
||||
|
||||
restore_backup
|
||||
sed -i 's/default=True/default=False/' /opt/kitchenowl/backend/wsgi.py
|
||||
|
||||
@@ -40,6 +40,7 @@ function update_script() {
|
||||
create_backup /opt/linkding/data /opt/linkding/.env
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" "tarball"
|
||||
UV_PROJECT_DIR="/opt/linkding" setup_uv
|
||||
|
||||
restore_backup
|
||||
ln -sf /usr/lib/$(arch_resolve "x86_64-linux-gnu" "aarch64-linux-gnu")/mod_icu.so /opt/linkding/libicu.so
|
||||
|
||||
+1
-1
@@ -32,7 +32,6 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
if check_for_gh_release "mealie" "mealie-recipes/mealie"; then
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop mealie
|
||||
@@ -44,6 +43,7 @@ function update_script() {
|
||||
msg_ok "Backup completed"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball"
|
||||
PYTHON_VERSION="3.12" UV_PROJECT_DIR="/opt/mealie" setup_uv
|
||||
|
||||
msg_info "Restoring Configuration"
|
||||
mv -f /opt/mealie.env /opt/mealie/mealie.env
|
||||
|
||||
+1
-2
@@ -31,14 +31,13 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
setup_uv
|
||||
|
||||
if check_for_gh_release "mediamanager" "maxdorninger/MediaManager"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop mediamanager
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
fetch_and_deploy_gh_release "MediaManager" "maxdorninger/MediaManager" "tarball" "latest" "/opt/mediamanager"
|
||||
UV_PROJECT_DIR="/opt/mediamanager" setup_uv
|
||||
msg_info "Updating MediaManager"
|
||||
MM_DIR="/opt/mm"
|
||||
export CONFIG_DIR="${MM_DIR}/config"
|
||||
|
||||
@@ -53,6 +53,7 @@ function update_script() {
|
||||
create_backup /opt/metube/.env
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "metube" "alexta69/metube" "tarball" "latest"
|
||||
UV_PROJECT_DIR="/opt/metube" setup_uv
|
||||
|
||||
restore_backup
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ function update_script() {
|
||||
create_backup /opt/notediscovery/data /opt/notediscovery/config.yaml
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "notediscovery" "gamosoft/NoteDiscovery" "tarball"
|
||||
UV_PROJECT_DIR="/opt/notediscovery" setup_uv
|
||||
|
||||
msg_info "Syncing Dependencies"
|
||||
cd /opt/notediscovery
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_
|
||||
APP="OmniRoute"
|
||||
var_tags="${var_tags:-ai;gateway;llm}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
|
||||
+8
-31
@@ -10,8 +10,8 @@ source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_
|
||||
|
||||
APP="OxiCloud"
|
||||
var_tags="${var_tags:-files;documents}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-6144}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
@@ -33,42 +33,19 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
NODE_VERSION="26" setup_nodejs
|
||||
ensure_dependencies ffmpeg
|
||||
|
||||
if check_for_gh_release "OxiCloud" "DioCrafts/OxiCloud"; then
|
||||
msg_info "Stopping OxiCloud"
|
||||
systemctl stop oxicloud
|
||||
msg_ok "Stopped OxiCloud"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "OxiCloud" "DioCrafts/OxiCloud" "tarball" "latest" "/opt/oxicloud"
|
||||
TOOLCHAIN="$(grep -oP 'FROM\s+rust:\K[0-9]+\.[0-9]+(\.[0-9]+)?' /opt/oxicloud/Dockerfile | head -1)"
|
||||
RUST_TOOLCHAIN="${TOOLCHAIN:-stable}" setup_rust
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "OxiCloud" "DioCrafts/OxiCloud" "prebuild" "latest" "/opt/oxicloud" "oxicloud-*-$(arch_resolve x86_64 aarch64)-unknown-linux-musl.tar.gz"
|
||||
|
||||
msg_info "Building Frontend SPA"
|
||||
cd /opt/oxicloud/frontend
|
||||
$STD npm ci
|
||||
$STD npm run build
|
||||
msg_ok "Built Frontend SPA"
|
||||
|
||||
msg_info "Updating OxiCloud (Patience)"
|
||||
set -a
|
||||
source /etc/oxicloud/.env
|
||||
set +a
|
||||
cd /opt/oxicloud
|
||||
export DATABASE_URL
|
||||
export RUSTFLAGS="-C target-cpu=native"
|
||||
RAM_MB=$(awk '/MemTotal/ {print int($2/1024)}' /proc/meminfo)
|
||||
CARGO_JOBS=$((RAM_MB / 2560))
|
||||
[[ $CARGO_JOBS -lt 1 ]] && CARGO_JOBS=1
|
||||
[[ $CARGO_JOBS -gt $(nproc) ]] && CARGO_JOBS=$(nproc)
|
||||
$STD cargo build --release -j "$CARGO_JOBS" --bin oxicloud --bin migrate-nfc-filenames
|
||||
mv target/release/oxicloud /usr/local/bin/oxicloud
|
||||
mv target/release/migrate-nfc-filenames /usr/local/bin/migrate-nfc-filenames
|
||||
chmod +x /usr/local/bin/oxicloud /usr/local/bin/migrate-nfc-filenames
|
||||
rm -f /usr/bin/oxicloud
|
||||
rm -rf /opt/oxicloud/static
|
||||
mv /opt/oxicloud/static-dist /opt/oxicloud/static
|
||||
rm -rf /opt/oxicloud/target /opt/oxicloud/frontend/node_modules
|
||||
msg_info "Updating OxiCloud"
|
||||
install -m 755 /opt/oxicloud/oxicloud /usr/local/bin/oxicloud
|
||||
rm -f /usr/local/bin/migrate-nfc-filenames /usr/bin/oxicloud
|
||||
sed -i 's|^OXICLOUD_STATIC_PATH=|#OXICLOUD_STATIC_PATH=|' /etc/oxicloud/.env
|
||||
msg_ok "Updated OxiCloud"
|
||||
|
||||
msg_info "Starting OxiCloud"
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_
|
||||
# Source: https://pangolin.net/ | Github: https://github.com/fosrl/pangolin
|
||||
|
||||
APP="Pangolin"
|
||||
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.21.0}"
|
||||
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.23.0}"
|
||||
var_tags="${var_tags:-proxy}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
|
||||
+1
-1
@@ -83,13 +83,13 @@ function update_script() {
|
||||
[[ -f /opt/paperless/paperless.conf ]] && cp /opt/paperless/paperless.conf "$BACKUP_DIR/"
|
||||
msg_ok "Backup completed to $BACKUP_DIR"
|
||||
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
if ((BRIDGE_UPDATE)); then
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "v2.20.15" "/opt/paperless" "paperless*tar.xz"
|
||||
else
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
fi
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||
PYTHON_VERSION="3.13" UV_PROJECT_DIR="/opt/paperless" setup_uv
|
||||
|
||||
. /etc/os-release
|
||||
if [ "$VERSION_CODENAME" = "bookworm" ]; then
|
||||
|
||||
+1
-1
@@ -44,10 +44,10 @@ function update_script() {
|
||||
|
||||
msg_info "Deploying New Version"
|
||||
cp -r /opt/poznote/src/. /var/www/html/
|
||||
chown -R www-data:www-data /var/www/html
|
||||
msg_ok "Deployed New Version"
|
||||
|
||||
restore_backup
|
||||
chown -R www-data:www-data /var/www/html
|
||||
|
||||
msg_info "Running Poznote Initialization"
|
||||
POZNOTE_INIT=/opt/poznote/docker/init.sh
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env bash
|
||||
_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main"
|
||||
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
|
||||
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/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/StuffAnThings/qbit_manage
|
||||
|
||||
APP="qBit-Manage"
|
||||
var_tags="${var_tags:-arr;torrent}"
|
||||
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_arm64="${var_arm64:-yes}"
|
||||
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/qbit-manage ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "qbit-manage" "StuffAnThings/qbit_manage"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop qbit-manage
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
fetch_and_deploy_gh_release "qbit-manage" "StuffAnThings/qbit_manage" "singlefile" "latest" "/opt/qbit-manage" "qbit-manage-linux-$(arch_resolve amd64 arm64)"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start qbit-manage
|
||||
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 "${GATEWAY}${BGN}http://${IP}:8181${CL}"
|
||||
echo -e "${INFO}${YW}Point it at your qBittorrent in /opt/qbit-manage_data/config.yml${CL}"
|
||||
@@ -51,6 +51,7 @@ function update_script() {
|
||||
/opt/romm/frontend/dist/assets/ruffle
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball" "latest" "/opt/romm"
|
||||
PYTHON_VERSION="3.13" UV_PROJECT_DIR="/opt/romm" setup_uv
|
||||
echo "__version__ = \"$(cat ~/.romm)\"" >/opt/romm/backend/__version__.py
|
||||
|
||||
find /opt/romm/backend/alembic/versions -maxdepth 1 -type f -name '1.*.py' -delete 2>/dev/null || true
|
||||
|
||||
+29
-24
@@ -38,35 +38,20 @@ function update_script() {
|
||||
[[ -f /etc/systemd/system/scanopy-daemon.service ]] && systemctl stop scanopy-daemon
|
||||
msg_ok "Stopped services"
|
||||
|
||||
create_backup /opt/scanopy/.env /opt/scanopy/oidc.toml
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Scanopy" "scanopy/scanopy" "tarball" "latest" "/opt/scanopy"
|
||||
|
||||
restore_backup
|
||||
|
||||
ensure_dependencies pkg-config libssl-dev
|
||||
TOOLCHAIN="$(grep "channel" /opt/scanopy/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
|
||||
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
|
||||
cp -f /usr/bin/scanopy-server /usr/bin/scanopy-server.bak 2>/dev/null || true
|
||||
cp -f /opt/scanopy/.env /opt/scanopy/.env.bak
|
||||
cp -f /etc/systemd/system/scanopy-server.service /etc/systemd/system/scanopy-server.service.bak
|
||||
|
||||
if ! grep -q "PUBLIC_URL" /opt/scanopy/.env; then
|
||||
sed -i "\|_PATH=|a\\scanopy_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/scanopy/.env
|
||||
sed -i "\|_PATH=|a\\SCANOPY_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/scanopy/.env
|
||||
fi
|
||||
sed -i 's|_TARGET=.*$|_URL=http://127.0.0.1:60072|' /opt/scanopy/.env
|
||||
sed -i '/^SCANOPY_WEB_EXTERNAL_PATH=/d' /opt/scanopy/.env
|
||||
sed -i 's|^WorkingDirectory=/opt/scanopy/backend$|WorkingDirectory=/opt/scanopy|' /etc/systemd/system/scanopy-server.service
|
||||
systemctl daemon-reload
|
||||
|
||||
msg_info "Building Scanopy Server (patience)"
|
||||
cd /opt/scanopy/backend
|
||||
CARGO_BUILD_JOBS="$(get_parallel_jobs)" $STD cargo build --release --bin server --bin generate-fixtures
|
||||
$STD ./target/release/generate-fixtures --output-dir /opt/scanopy/ui/src/lib/data
|
||||
mv ./target/release/server /usr/bin/scanopy-server
|
||||
msg_ok "Built Scanopy Server"
|
||||
|
||||
msg_info "Creating frontend UI"
|
||||
export PUBLIC_SERVER_HOSTNAME=default
|
||||
export PUBLIC_SERVER_PORT=""
|
||||
cd /opt/scanopy/ui
|
||||
$STD npm ci --no-fund --no-audit
|
||||
$STD npm run build
|
||||
msg_ok "Created frontend UI"
|
||||
fetch_and_deploy_gh_release "Scanopy" "scanopy/scanopy" "singlefile" "latest" "/usr/bin" "scanopy-server-linux-$(arch_resolve)"
|
||||
mv -f /usr/bin/Scanopy /usr/bin/scanopy-server
|
||||
|
||||
if [[ -f /etc/systemd/system/scanopy-daemon.service ]]; then
|
||||
fetch_and_deploy_gh_release "Scanopy Daemon" "scanopy/scanopy" "singlefile" "latest" "/usr/local/bin" "scanopy-daemon-linux-$(arch_resolve)"
|
||||
@@ -81,6 +66,26 @@ function update_script() {
|
||||
|
||||
msg_info "Starting services"
|
||||
systemctl start scanopy-server
|
||||
healthy=0
|
||||
for _ in {1..30}; do
|
||||
if curl -fsS -o /dev/null http://127.0.0.1:60072/api/health 2>/dev/null; then
|
||||
healthy=1
|
||||
break
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
if [[ "$healthy" -ne 1 ]]; then
|
||||
systemctl stop scanopy-server
|
||||
[[ -f /usr/bin/scanopy-server.bak ]] && mv -f /usr/bin/scanopy-server.bak /usr/bin/scanopy-server
|
||||
mv -f /opt/scanopy/.env.bak /opt/scanopy/.env
|
||||
mv -f /etc/systemd/system/scanopy-server.service.bak /etc/systemd/system/scanopy-server.service
|
||||
systemctl daemon-reload
|
||||
systemctl start scanopy-server
|
||||
msg_error "New server did not answer /api/health, restored the previous version"
|
||||
exit 1
|
||||
fi
|
||||
rm -rf /opt/scanopy/backend /opt/scanopy/ui
|
||||
rm -f /usr/bin/scanopy-server.bak /opt/scanopy/.env.bak /etc/systemd/system/scanopy-server.service.bak
|
||||
[[ -f /etc/systemd/system/scanopy-daemon.service ]] && systemctl start scanopy-daemon
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
|
||||
+1
-1
@@ -33,7 +33,6 @@ function update_script() {
|
||||
fi
|
||||
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
PYTHON_VERSION="3.14" setup_uv
|
||||
|
||||
if check_for_gh_release "shelfmark" "calibrain/shelfmark"; then
|
||||
msg_info "Stopping Service(s)"
|
||||
@@ -68,6 +67,7 @@ function update_script() {
|
||||
$STD apt remove -y chromium-driver
|
||||
fi
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "shelfmark" "calibrain/shelfmark" "tarball" "latest" "/opt/shelfmark"
|
||||
PYTHON_VERSION="3.14" UV_PROJECT_DIR="/opt/shelfmark" setup_uv
|
||||
restore_backup
|
||||
RELEASE_VERSION=$(cat "$HOME/.shelfmark")
|
||||
|
||||
|
||||
@@ -31,6 +31,31 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ ! -f /var/lib/clickhouse/user_scripts/histogramQuantile ]]; then
|
||||
fetch_and_deploy_gh_release "histogram-quantile" "SigNoz/signoz" "prebuild" "histogram-quantile/v0.0.1" "/opt/histogram-quantile" "histogram-quantile_linux_$(arch_resolve).tar.gz"
|
||||
|
||||
msg_info "Adding ClickHouse histogramQuantile Function"
|
||||
mkdir -p /var/lib/clickhouse/user_scripts
|
||||
install -m 755 -o clickhouse -g clickhouse /opt/histogram-quantile/histogram-quantile /var/lib/clickhouse/user_scripts/histogramQuantile
|
||||
cat <<EOF >/etc/clickhouse-server/histogram_quantile_function.yaml
|
||||
functions:
|
||||
name: histogramQuantile
|
||||
type: executable
|
||||
format: CSV
|
||||
command: ./histogramQuantile
|
||||
return_type: Float64
|
||||
argument:
|
||||
- name: buckets
|
||||
type: Array(Float64)
|
||||
- name: counts
|
||||
type: Array(Float64)
|
||||
- name: quantile
|
||||
type: Float64
|
||||
EOF
|
||||
systemctl restart clickhouse-server
|
||||
msg_ok "Added ClickHouse histogramQuantile Function"
|
||||
fi
|
||||
|
||||
if check_for_gh_release "signoz" "SigNoz/signoz"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop signoz
|
||||
|
||||
+1
-2
@@ -31,8 +31,6 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
PYTHON_VERSION="3.14" setup_uv
|
||||
|
||||
if check_for_gh_release "spoolman" "Donkie/Spoolman"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop spoolman
|
||||
@@ -41,6 +39,7 @@ function update_script() {
|
||||
create_backup /opt/spoolman/.env
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "spoolman" "Donkie/Spoolman" "prebuild" "latest" "/opt/spoolman" "spoolman.zip"
|
||||
PYTHON_VERSION="3.14" UV_PROJECT_DIR="/opt/spoolman" setup_uv
|
||||
|
||||
restore_backup
|
||||
|
||||
|
||||
@@ -37,8 +37,19 @@ function update_script() {
|
||||
systemctl stop suggestarr
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
mkdir -p /opt/suggestarr_data
|
||||
if [[ -d /opt/suggestarr/config/config_files && ! -L /opt/suggestarr/config/config_files ]]; then
|
||||
msg_info "Migrating Configuration"
|
||||
cp -an /opt/suggestarr/config/config_files/. /opt/suggestarr_data/
|
||||
msg_ok "Migrated Configuration to /opt/suggestarr_data"
|
||||
fi
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "suggestarr" "giuseppe99barchetta/SuggestArr" "tarball"
|
||||
|
||||
mkdir -p /opt/suggestarr/config
|
||||
rm -rf /opt/suggestarr/config/config_files
|
||||
ln -sfn /opt/suggestarr_data /opt/suggestarr/config/config_files
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/suggestarr/client
|
||||
$STD npm install
|
||||
|
||||
@@ -40,6 +40,9 @@ function update_script() {
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "umami" "umami-software/umami" "tarball"
|
||||
restore_backup
|
||||
|
||||
PNPM_VERSION=$(jq -r '.engines.pnpm // "latest"' /opt/umami/package.json)
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||
|
||||
msg_info "Updating Umami"
|
||||
cd /opt/umami
|
||||
$STD pnpm install
|
||||
|
||||
+1
-2
@@ -32,8 +32,6 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
setup_uv
|
||||
|
||||
if check_for_gh_release "wizarr" "wizarrrr/wizarr"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop wizarr
|
||||
@@ -46,6 +44,7 @@ function update_script() {
|
||||
msg_ok "Backup Created"
|
||||
|
||||
fetch_and_deploy_gh_release "wizarr" "wizarrrr/wizarr" "tarball"
|
||||
UV_PROJECT_DIR="/opt/wizarr" setup_uv
|
||||
|
||||
msg_info "Updating Wizarr"
|
||||
cd /opt/wizarr
|
||||
|
||||
@@ -41,6 +41,7 @@ function update_script() {
|
||||
create_backup /opt/yamtrack/src/.env
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "yamtrack" "FuzzyGrim/Yamtrack" "tarball"
|
||||
PYTHON_VERSION="3.12" UV_PROJECT_DIR="/opt/yamtrack" setup_uv
|
||||
|
||||
restore_backup
|
||||
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env bash
|
||||
_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main"
|
||||
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
|
||||
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/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/Yooooomi/your_spotify
|
||||
|
||||
APP="Your-Spotify"
|
||||
var_tags="${var_tags:-music;analytics}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-3072}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
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/your-spotify ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "your-spotify" "Yooooomi/your_spotify"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop your-spotify your-spotify-web
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "your-spotify" "Yooooomi/your_spotify" "tarball"
|
||||
|
||||
msg_info "Building Your Spotify"
|
||||
cd /opt/your-spotify
|
||||
$STD pnpm install --frozen-lockfile
|
||||
$STD pnpm --filter @your_spotify/server build
|
||||
$STD pnpm --filter @your_spotify/client build
|
||||
msg_ok "Built Your Spotify"
|
||||
|
||||
msg_info "Applying Client Configuration"
|
||||
API_ENDPOINT=$(grep '^API_ENDPOINT=' /opt/your-spotify.env | cut -d= -f2-)
|
||||
cp /opt/your-spotify/apps/client/build/variables-template.js /opt/your-spotify/apps/client/build/variables.js
|
||||
sed -i "s;__API_ENDPOINT__;${API_ENDPOINT};g" /opt/your-spotify/apps/client/build/variables.js
|
||||
sed -i "s#connect-src \(.*\);#connect-src 'self' ${API_ENDPOINT}/;#g" /opt/your-spotify/apps/client/build/index.html
|
||||
msg_ok "Applied Client Configuration"
|
||||
|
||||
msg_info "Restarting Services"
|
||||
systemctl restart your-spotify your-spotify-web
|
||||
msg_ok "Restarted Services"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||
echo -e "${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||
echo -e "${INFO}${YW}Add your Spotify app keys to /opt/your-spotify.env first${CL}"
|
||||
echo -e "${INFO}${YW}Spotify rejects plain http redirect URIs on a LAN address.${CL}"
|
||||
echo -e "${INFO}${YW}Put this behind a TLS reverse proxy and register:${CL}"
|
||||
echo -e "${TAB}${DEFAULT}${BGN}https://your.domain/oauth/spotify/callback${CL}"
|
||||
echo -e "${INFO}${YW}Then set API_ENDPOINT to that https URL and rerun the update.${CL}"
|
||||
@@ -40,6 +40,7 @@ function update_script() {
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "yubal" "guillevc/yubal" "tarball" "latest" "/opt/yubal"
|
||||
PYTHON_VERSION="3.12" UV_PROJECT_DIR="/opt/yubal" setup_uv
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/yubal/web
|
||||
|
||||
@@ -22,7 +22,7 @@ $STD apt install -y \
|
||||
python3-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
UV_PYTHON="3.12" setup_uv
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="airflow" PG_DB_USER="airflow" setup_postgresql_db
|
||||
|
||||
|
||||
@@ -0,0 +1,250 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/NeptuneHub/AudioMuse-AI
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
build-essential \
|
||||
git \
|
||||
ffmpeg \
|
||||
libchromaprint-tools \
|
||||
libsndfile1 \
|
||||
libgomp1
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="audiomuse" PG_DB_USER="audiomuse" setup_postgresql_db
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
setup_hwaccel
|
||||
|
||||
fetch_and_deploy_gh_release "audiomuse-ai" "NeptuneHub/AudioMuse-AI" "tarball"
|
||||
|
||||
var_backend="${var_backend:-auto}"
|
||||
if [[ "$var_backend" == "auto" ]]; then
|
||||
if ! grep -qm1 avx2 /proc/cpuinfo; then
|
||||
var_backend="cpu-noavx2"
|
||||
elif [[ "${HWACCEL_VENDOR:-none}" == "nvidia" ]]; then
|
||||
var_backend="gpu"
|
||||
else
|
||||
var_backend="cpu"
|
||||
fi
|
||||
fi
|
||||
|
||||
REQ_COMMON="common.txt"
|
||||
case "$var_backend" in
|
||||
gpu)
|
||||
REQ_ACCEL="gpu.txt"
|
||||
[[ "$(uname -m)" == "aarch64" ]] && REQ_ACCEL="gpu-arm64.txt"
|
||||
;;
|
||||
cpu)
|
||||
REQ_ACCEL="cpu.txt"
|
||||
;;
|
||||
cpu-noavx2)
|
||||
REQ_COMMON="common-noavx2.txt"
|
||||
REQ_ACCEL="cpu-noavx2.txt"
|
||||
;;
|
||||
*)
|
||||
msg_error "Unknown var_backend '${var_backend}' (expected auto, gpu, cpu or cpu-noavx2)"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
msg_info "Setting up Python Environment (${var_backend}, Patience)"
|
||||
cd /opt/audiomuse-ai
|
||||
$STD uv venv --seed --python 3.12 /opt/audiomuse-ai/.venv
|
||||
$STD uv pip install --python /opt/audiomuse-ai/.venv \
|
||||
-r "/opt/audiomuse-ai/requirements/${REQ_COMMON}" \
|
||||
-r "/opt/audiomuse-ai/requirements/${REQ_ACCEL}"
|
||||
mkdir -p /opt/audiomuse-ai_data
|
||||
echo "$var_backend" >/opt/audiomuse-ai_data/.backend
|
||||
msg_ok "Set up Python Environment (${var_backend})"
|
||||
|
||||
MODEL_DIR="/opt/audiomuse-ai_data/model"
|
||||
MODEL_URL="https://github.com/NeptuneHub/AudioMuse-AI/releases/download/v5.0.0-model"
|
||||
DCLAP_URL="https://github.com/NeptuneHub/AudioMuse-AI-DCLAP/releases/download/v1"
|
||||
|
||||
msg_info "Downloading ML Models (Patience)"
|
||||
mkdir -p "$MODEL_DIR/huggingface"
|
||||
for FILE in musicnn_embedding.onnx musicnn_prediction.onnx clap_text_model.onnx; do
|
||||
curl -fsSL "${MODEL_URL}/${FILE}" -o "${MODEL_DIR}/${FILE}"
|
||||
done
|
||||
for FILE in model_epoch_36.onnx model_epoch_36.onnx.data; do
|
||||
curl -fsSL "${DCLAP_URL}/${FILE}" -o "${MODEL_DIR}/${FILE}"
|
||||
done
|
||||
for BUNDLE in lyrics_model_whisper lyrics_model_silero_vad lyrics_model_gte_vnni; do
|
||||
curl -fsSL "${MODEL_URL}/${BUNDLE}.tar.gz" -o "/tmp/${BUNDLE}.tar.gz"
|
||||
tar -xzf "/tmp/${BUNDLE}.tar.gz" -C "$MODEL_DIR"
|
||||
rm -f "/tmp/${BUNDLE}.tar.gz"
|
||||
done
|
||||
curl -fsSL "${MODEL_URL}/huggingface_models.tar.gz" -o /tmp/huggingface_models.tar.gz
|
||||
tar -xzf /tmp/huggingface_models.tar.gz -C "${MODEL_DIR}/huggingface"
|
||||
rm -f /tmp/huggingface_models.tar.gz
|
||||
HF_HUB_DIR="${MODEL_DIR}/huggingface/hub"
|
||||
rm -rf "${HF_HUB_DIR}/models--bert-base-uncased" "${HF_HUB_DIR}/models--facebook--bart-base"
|
||||
if [[ -d "${HF_HUB_DIR}/models--roberta-base" ]]; then
|
||||
find "${HF_HUB_DIR}/models--roberta-base/blobs" -type f -size +10M -delete
|
||||
find "${HF_HUB_DIR}/models--roberta-base/snapshots" \( -name "model.safetensors" -o -name "pytorch_model.bin" \) -delete
|
||||
fi
|
||||
msg_ok "Downloaded ML Models"
|
||||
|
||||
msg_info "Configuring AudioMuse-AI"
|
||||
mkdir -p /opt/audiomuse-ai_data/{temp_audio,ivf_cache,plugins,backup} /opt/audiomuse-ai_data/cache/numba
|
||||
AUDIOMUSE_PASSWORD=$(openssl rand -base64 18)
|
||||
JWT_SECRET=$(openssl rand -hex 32)
|
||||
API_TOKEN=$(openssl rand -hex 32)
|
||||
cat <<EOF >/opt/audiomuse-ai_data/audiomuse.env
|
||||
POSTGRES_USER=audiomuse
|
||||
POSTGRES_PASSWORD=${PG_DB_PASS}
|
||||
POSTGRES_DB=audiomuse
|
||||
POSTGRES_HOST=127.0.0.1
|
||||
POSTGRES_PORT=5432
|
||||
TZ=UTC
|
||||
AUTH_ENABLED=true
|
||||
AUDIOMUSE_USER=admin
|
||||
AUDIOMUSE_PASSWORD=${AUDIOMUSE_PASSWORD}
|
||||
JWT_SECRET=${JWT_SECRET}
|
||||
API_TOKEN=${API_TOKEN}
|
||||
MEDIASERVER_TYPE=jellyfin
|
||||
JELLYFIN_URL=http://YOUR_JELLYFIN_IP:8096
|
||||
JELLYFIN_USER_ID=
|
||||
JELLYFIN_TOKEN=
|
||||
AI_MODEL_PROVIDER=NONE
|
||||
APP_DATA_DIR=/opt/audiomuse-ai_data
|
||||
TEMP_DIR=/opt/audiomuse-ai_data/temp_audio
|
||||
BACKUP_DIR=/opt/audiomuse-ai_data/backup
|
||||
RESTORE_LOG_DIR=/opt/audiomuse-ai_data/backup
|
||||
XDG_CACHE_HOME=/opt/audiomuse-ai_data/cache
|
||||
NUMBA_CACHE_DIR=/opt/audiomuse-ai_data/cache/numba
|
||||
HF_HOME=${MODEL_DIR}/huggingface
|
||||
HF_HUB_DISABLE_XET=1
|
||||
HF_XET_DISABLE=1
|
||||
EMBEDDING_MODEL_PATH=${MODEL_DIR}/musicnn_embedding.onnx
|
||||
PREDICTION_MODEL_PATH=${MODEL_DIR}/musicnn_prediction.onnx
|
||||
CLAP_AUDIO_MODEL_PATH=${MODEL_DIR}/model_epoch_36.onnx
|
||||
CLAP_TEXT_MODEL_PATH=${MODEL_DIR}/clap_text_model.onnx
|
||||
LYRICS_MODEL_DIR=${MODEL_DIR}
|
||||
LYRICS_WHISPER_MODEL_DIR=${MODEL_DIR}/whisper-small-onnx
|
||||
SILERO_VAD_ONNX_PATH=${MODEL_DIR}/silero_vad.onnx
|
||||
LYRICS_GTE_ONNX_PATH=${MODEL_DIR}/gte-multilingual-base-int8.onnx
|
||||
LYRICS_GTE_TOKENIZER_DIR=${MODEL_DIR}/gte-multilingual-base
|
||||
EOF
|
||||
{
|
||||
echo ""
|
||||
echo "AudioMuse-AI-Credentials"
|
||||
echo "Web UI User: admin"
|
||||
echo "Web UI Password: ${AUDIOMUSE_PASSWORD}"
|
||||
} >>~/audiomuse-ai.creds
|
||||
msg_ok "Configured AudioMuse-AI"
|
||||
|
||||
msg_info "Creating Services"
|
||||
cat <<EOF >/etc/systemd/system/audiomuse-ai.service
|
||||
[Unit]
|
||||
Description=AudioMuse-AI Web (Flask)
|
||||
After=network-online.target postgresql.service
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/audiomuse-ai
|
||||
EnvironmentFile=/opt/audiomuse-ai_data/audiomuse.env
|
||||
ExecStart=/opt/audiomuse-ai/.venv/bin/gunicorn --bind 0.0.0.0:8000 --workers 1 --threads 4 --worker-class gthread --keep-alive 5 --timeout 300 app:app
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/audiomuse-ai-worker.service
|
||||
[Unit]
|
||||
Description=AudioMuse-AI Queue Worker (default)
|
||||
After=network-online.target postgresql.service audiomuse-ai.service
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/audiomuse-ai
|
||||
EnvironmentFile=/opt/audiomuse-ai_data/audiomuse.env
|
||||
ExecStart=/opt/audiomuse-ai/.venv/bin/python -u -m taskqueue.worker --queue default
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/audiomuse-ai-worker-high.service
|
||||
[Unit]
|
||||
Description=AudioMuse-AI Queue Worker (high)
|
||||
After=network-online.target postgresql.service audiomuse-ai.service
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/audiomuse-ai
|
||||
EnvironmentFile=/opt/audiomuse-ai_data/audiomuse.env
|
||||
ExecStart=/opt/audiomuse-ai/.venv/bin/python -u -m taskqueue.worker --queue high
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/audiomuse-ai-janitor.service
|
||||
[Unit]
|
||||
Description=AudioMuse-AI Queue Maintenance
|
||||
After=network-online.target postgresql.service audiomuse-ai.service
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/audiomuse-ai
|
||||
EnvironmentFile=/opt/audiomuse-ai_data/audiomuse.env
|
||||
ExecStart=/opt/audiomuse-ai/.venv/bin/python -u -m taskqueue.maintenance
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/audiomuse-ai-control.service
|
||||
[Unit]
|
||||
Description=AudioMuse-AI Config Restart Listener
|
||||
After=network-online.target postgresql.service audiomuse-ai.service
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/audiomuse-ai
|
||||
EnvironmentFile=/opt/audiomuse-ai_data/audiomuse.env
|
||||
ExecStart=/opt/audiomuse-ai/.venv/bin/python -u -m taskqueue.control
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now audiomuse-ai audiomuse-ai-worker audiomuse-ai-worker-high audiomuse-ai-janitor audiomuse-ai-control
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -50,19 +50,19 @@ $STD apt install -y \
|
||||
git
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="26" NODE_MODULE=pnpm@11 setup_nodejs
|
||||
NODE_VERSION="26" NODE_MODULE=pnpm@12 setup_nodejs
|
||||
setup_yq
|
||||
RUST_PROFILE="minimal" RUST_TOOLCHAIN="stable" setup_rust
|
||||
UV_PYTHON_INSTALL_DIR="/usr/local/bin" PYTHON_VERSION="3.14.7" setup_uv
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="authentik" PG_DB_USER="authentik" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
|
||||
|
||||
XMLSEC_VERSION="1.3.12"
|
||||
AUTHENTIK_VERSION="version/2026.8.2"
|
||||
AUTHENTIK_VERSION="version/2026.8.3"
|
||||
fetch_and_deploy_gh_release "xmlsec" "lsh123/xmlsec" "tarball" "${XMLSEC_VERSION}" "/opt/xmlsec"
|
||||
fetch_and_deploy_gh_release "authentik" "goauthentik/authentik" "tarball" "${AUTHENTIK_VERSION}" "/opt/authentik"
|
||||
GO_VERSION="$(grep -m1 '^go ' /opt/authentik/go.mod | awk '{print $2}')" setup_go
|
||||
fetch_and_deploy_gh_release "geoipupdate" "maxmind/geoipupdate" "binary"
|
||||
UV_PYTHON_INSTALL_DIR="/usr/local/bin" PYTHON_VERSION="3.14.7" UV_PROJECT_DIR="/opt/authentik" setup_uv
|
||||
|
||||
msg_info "Setting up xmlsec"
|
||||
cd /opt/xmlsec
|
||||
@@ -82,7 +82,7 @@ msg_ok "Configured rust"
|
||||
msg_info "Setting up web"
|
||||
export NODE_ENV="production"
|
||||
cd /opt/authentik
|
||||
$STD node ./scripts/node/lint-runtime.mjs ./web
|
||||
$STD node ./scripts/node/lint-runtime.ts ./web
|
||||
cd /opt/authentik/web
|
||||
$STD pnpm install --frozen-lockfile
|
||||
$STD pnpm run build
|
||||
|
||||
@@ -54,9 +54,8 @@ $STD /opt/calibre/calibre_postinstall
|
||||
CALIBRE_VERSION=$(cat ~/.calibre)
|
||||
msg_ok "Installed Calibre"
|
||||
|
||||
setup_uv
|
||||
|
||||
fetch_and_deploy_codeberg_release "autocaliweb" "gelbphoenix/autocaliweb" "tarball" "latest" "/opt/autocaliweb"
|
||||
setup_uv $INSTALL_DIR
|
||||
|
||||
msg_info "Configuring Autocaliweb"
|
||||
INSTALL_DIR="/opt/autocaliweb"
|
||||
|
||||
@@ -33,9 +33,9 @@ msg_ok "Installed Dependencies"
|
||||
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
|
||||
PG_DB_NAME="baserow" PG_DB_USER="baserow" setup_postgresql_db
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
setup_uv
|
||||
|
||||
fetch_and_deploy_gh_release "baserow" "baserow/baserow" "tarball"
|
||||
UV_PROJECT_DIR="/opt/baserow/backend" setup_uv
|
||||
|
||||
msg_info "Installing Backend Dependencies"
|
||||
cd /opt/baserow/backend
|
||||
|
||||
@@ -13,9 +13,8 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
PYTHON_VERSION="3.14" setup_uv
|
||||
|
||||
fetch_and_deploy_gh_release "beaverhabits" "daya0576/beaverhabits" "tarball"
|
||||
PYTHON_VERSION="3.14" UV_PROJECT_DIR="/opt/beaverhabits" setup_uv
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
cd /opt/beaverhabits
|
||||
|
||||
@@ -32,7 +32,7 @@ $STD apt install -y \
|
||||
sshpass
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
UV_PYTHON="3.12" setup_uv
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
fetch_and_deploy_gh_release "borg-ui" "karanhudia/borg-ui" "tarball"
|
||||
@@ -111,7 +111,7 @@ Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/borg-ui
|
||||
EnvironmentFile=/opt/borg-ui/.env
|
||||
ExecStart=/opt/borg-ui/.venv/bin/gunicorn app.main:app --bind 0.0.0.0:8081 --workers 2 --worker-class uvicorn.workers.UvicornWorker --timeout 300
|
||||
ExecStart=/opt/borg-ui/.venv/bin/gunicorn app.main:app --bind 0.0.0.0:8081 --workers 1 --worker-class uvicorn.workers.UvicornWorker --timeout 300
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
|
||||
@@ -52,8 +52,8 @@ $STD apt -y install --no-install-recommends \
|
||||
fonts-tlwg-loma-otf
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_uv
|
||||
fetch_and_deploy_gh_release "Byparr" "ThePhaseless/Byparr" "tarball" "latest"
|
||||
UV_PROJECT_DIR="/opt/Byparr" setup_uv
|
||||
|
||||
msg_info "Configuring Byparr"
|
||||
cd /opt/Byparr
|
||||
|
||||
@@ -34,12 +34,12 @@ $STD apt install -y \
|
||||
libswscale-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_uv
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="dispatcharr_db" PG_DB_USER="dispatcharr_usr" setup_postgresql_db
|
||||
fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr" "tarball"
|
||||
fetch_and_deploy_gh_release "Comskip" "erikkaashoek/Comskip" "tarball"
|
||||
UV_PROJECT_DIR="/opt/dispatcharr" setup_uv
|
||||
|
||||
msg_info "Compiling Comskip"
|
||||
cd /opt/Comskip
|
||||
|
||||
@@ -36,7 +36,7 @@ $STD apt install -y \
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs
|
||||
UV_PYTHON="3.14" setup_uv
|
||||
PYTHON_VERSION="3.14" setup_uv
|
||||
setup_mariadb
|
||||
|
||||
msg_info "Configuring MariaDB for ERPNext"
|
||||
|
||||
@@ -44,6 +44,7 @@ NODE_VERSION=24 setup_nodejs
|
||||
PYTHON_VERSION=3.14 setup_uv
|
||||
|
||||
fetch_and_deploy_gh_release "fireshare" "ShaneIsrael/fireshare" "tarball"
|
||||
UV_PROJECT_DIR="/opt/fireshare" setup_uv
|
||||
|
||||
msg_info "Compiling SVT-AV1 (Patience)"
|
||||
cd /tmp
|
||||
|
||||
@@ -14,6 +14,7 @@ network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes" "tarball"
|
||||
UV_PROJECT_DIR="/opt/flatnotes" setup_uv
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ $STD apt install -y \
|
||||
caddy
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
UV_PYTHON="3.13" setup_uv
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
NODE_VERSION="20" setup_nodejs
|
||||
fetch_and_deploy_gh_release "homelable" "Pouzor/homelable" "tarball" "latest" "/opt/homelable"
|
||||
|
||||
|
||||
@@ -60,6 +60,11 @@ chown -R immichframe:immichframe /opt/immichframe
|
||||
msg_ok "Setup ImmichFrame"
|
||||
|
||||
msg_info "Creating Service"
|
||||
ADMIN_PASSWORD=$(openssl rand -hex 16)
|
||||
cat <<EOF >~/immichframe.creds
|
||||
ImmichFrame Admin User: admin
|
||||
ImmichFrame Admin Password: $ADMIN_PASSWORD
|
||||
EOF
|
||||
cat <<EOF >/etc/systemd/system/immichframe.service
|
||||
[Unit]
|
||||
Description=ImmichFrame Digital Photo Frame
|
||||
@@ -74,6 +79,7 @@ ExecStart=/usr/bin/dotnet /opt/immichframe/ImmichFrame.WebApi.dll
|
||||
Environment=ASPNETCORE_URLS=http://0.0.0.0:8080
|
||||
Environment=ASPNETCORE_ENVIRONMENT=Production
|
||||
Environment=DOTNET_CONTENTROOT=/opt/immichframe
|
||||
Environment=IMMICHFRAME_ADMIN_PASSWORD=$ADMIN_PASSWORD
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
StandardOutput=journal
|
||||
|
||||
@@ -30,9 +30,9 @@ msg_ok "Installed Dependencies"
|
||||
setup_ffmpeg
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="journiv" PG_DB_USER="journiv" setup_postgresql_db
|
||||
UV_PYTHON="3.12" setup_uv
|
||||
|
||||
fetch_and_deploy_gh_release "journiv" "journiv/journiv-app" "tarball"
|
||||
PYTHON_VERSION="3.12" UV_PROJECT_DIR="/opt/journiv" setup_uv
|
||||
|
||||
msg_info "Setting up Python Environment"
|
||||
cd /opt/journiv
|
||||
|
||||
@@ -38,10 +38,10 @@ $STD apt install -y \
|
||||
libicu-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PYTHON_VERSION="3.14" setup_uv
|
||||
fetch_and_deploy_gh_release "kitchenowl" "TomBursch/kitchenowl" "tarball" "latest" "/opt/kitchenowl"
|
||||
rm -rf /opt/kitchenowl/web
|
||||
fetch_and_deploy_gh_release "kitchenowl-web" "TomBursch/kitchenowl" "prebuild" "latest" "/opt/kitchenowl/web" "kitchenowl_Web.tar.gz"
|
||||
PYTHON_VERSION="3.14" UV_PROJECT_DIR="/opt/kitchenowl/backend" setup_uv
|
||||
|
||||
msg_info "Setting up KitchenOwl"
|
||||
cd /opt/kitchenowl/backend
|
||||
|
||||
@@ -18,7 +18,7 @@ setup_meilisearch
|
||||
PG_VERSION="17" PG_MODULES="pgvector" setup_postgresql
|
||||
PG_DB_NAME="ragapi" PG_DB_USER="ragapi" PG_DB_EXTENSIONS="vector" setup_postgresql_db
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
UV_PYTHON="3.12" setup_uv
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
|
||||
fetch_and_deploy_gh_tag "librechat" "danny-avila/LibreChat"
|
||||
fetch_and_deploy_gh_release "rag-api" "danny-avila/rag_api" "tarball"
|
||||
|
||||
@@ -129,7 +129,7 @@ $STD su - librenms -s /bin/bash -c "cd /opt/librenms && lnms db:seed --force"
|
||||
$STD su - librenms -s /bin/bash -c "cd /opt/librenms && lnms user:add -p ${APP_PASSWORD} ${APP_USER} --role=admin"
|
||||
|
||||
RANDOM_STRING=$(openssl rand -base64 16 | tr -dc 'a-zA-Z0-9')
|
||||
sed -i "s/RANDOMSTRINGHERE/$RANDOM_STRING/g" /etc/snmp/snmpd.conf
|
||||
sed -i "s/RANDOMSTRINGGOESHERE/$RANDOM_STRING/g" /etc/snmp/snmpd.conf
|
||||
echo "SNMP Community String: $RANDOM_STRING" >>~/librenms.creds
|
||||
curl -qso /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
|
||||
chmod +x /usr/bin/distro
|
||||
|
||||
@@ -26,8 +26,8 @@ $STD apt install -y \
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
setup_uv
|
||||
fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" "tarball"
|
||||
UV_PROJECT_DIR="/opt/linkding" setup_uv
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/linkding
|
||||
|
||||
@@ -23,7 +23,7 @@ $STD apt install -y \
|
||||
iproute2
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
UV_PYTHON="3.12" setup_uv
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
|
||||
msg_info "Setting up Matter Server"
|
||||
mkdir -p /opt/matter-server/data/credentials
|
||||
|
||||
@@ -27,9 +27,9 @@ $STD apt install -y \
|
||||
iproute2
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
PG_VERSION="16" setup_postgresql
|
||||
fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball"
|
||||
PYTHON_VERSION="3.12" UV_PROJECT_DIR="/opt/mealie" setup_uv
|
||||
PG_DB_NAME="mealie_db" PG_DB_USER="mealie_user" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
|
||||
|
||||
if [[ -f /opt/mealie/frontend/pnpm-lock.yaml ]]; then
|
||||
|
||||
@@ -20,7 +20,6 @@ fi
|
||||
|
||||
setup_yq
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
setup_uv
|
||||
PG_VERSION="17" setup_postgresql
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
@@ -39,6 +38,7 @@ EOF
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
fetch_and_deploy_gh_release "MediaManager" "maxdorninger/MediaManager" "tarball" "latest" "/opt/mediamanager"
|
||||
UV_PROJECT_DIR="/opt/mediamanager" setup_uv
|
||||
|
||||
msg_info "Configuring MediaManager"
|
||||
MM_DIR="/opt/mm"
|
||||
|
||||
@@ -22,7 +22,6 @@ $STD apt install -y \
|
||||
ffmpeg
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
NODE_VERSION="24" NODE_MODULE="corepack,pnpm" setup_nodejs
|
||||
|
||||
msg_info "Installing Deno"
|
||||
@@ -34,6 +33,7 @@ curl -fsSL https://deno.land/install.sh | $STD sh -s -- -y
|
||||
msg_ok "Installed Deno"
|
||||
|
||||
fetch_and_deploy_gh_release "metube" "alexta69/metube" "tarball" "latest"
|
||||
PYTHON_VERSION="3.13" UV_PROJECT_DIR="/opt/metube" setup_uv
|
||||
|
||||
msg_info "Installing MeTube"
|
||||
cd /opt/metube/ui
|
||||
|
||||
@@ -13,9 +13,8 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
setup_uv
|
||||
|
||||
fetch_and_deploy_gh_release "notediscovery" "gamosoft/NoteDiscovery" "tarball"
|
||||
UV_PROJECT_DIR="/opt/notediscovery" setup_uv
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
cd /opt/notediscovery
|
||||
|
||||
@@ -14,43 +14,20 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y build-essential
|
||||
$STD apt install -y ffmpeg
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="26" setup_nodejs
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="oxicloud" PG_DB_USER="oxicloud" setup_postgresql_db
|
||||
fetch_and_deploy_gh_release "OxiCloud" "DioCrafts/OxiCloud" "tarball" "latest" "/opt/oxicloud"
|
||||
TOOLCHAIN="$(grep -oP 'FROM\s+rust:\K[0-9]+\.[0-9]+(\.[0-9]+)?' /opt/oxicloud/Dockerfile | head -1)"
|
||||
RUST_TOOLCHAIN="${TOOLCHAIN:-stable}" setup_rust
|
||||
|
||||
msg_info "Building Frontend SPA"
|
||||
cd /opt/oxicloud/frontend
|
||||
$STD npm ci
|
||||
$STD npm run build
|
||||
msg_ok "Built Frontend SPA"
|
||||
|
||||
msg_info "Building OxiCloud (Patience)"
|
||||
cd /opt/oxicloud
|
||||
export DATABASE_URL="postgres://${PG_DB_USER}:${PG_DB_PASS}@localhost/${PG_DB_NAME}"
|
||||
export RUSTFLAGS="-C target-cpu=native"
|
||||
RAM_MB=$(awk '/MemTotal/ {print int($2/1024)}' /proc/meminfo)
|
||||
CARGO_JOBS=$((RAM_MB / 2560))
|
||||
[[ $CARGO_JOBS -lt 1 ]] && CARGO_JOBS=1
|
||||
[[ $CARGO_JOBS -gt $(nproc) ]] && CARGO_JOBS=$(nproc)
|
||||
$STD cargo build --release -j "$CARGO_JOBS" --bin oxicloud --bin migrate-nfc-filenames
|
||||
mv target/release/oxicloud /usr/local/bin/oxicloud
|
||||
mv target/release/migrate-nfc-filenames /usr/local/bin/migrate-nfc-filenames
|
||||
rm -rf /opt/oxicloud/static
|
||||
mv /opt/oxicloud/static-dist /opt/oxicloud/static
|
||||
rm -rf /opt/oxicloud/target /opt/oxicloud/frontend/node_modules
|
||||
msg_ok "Built OxiCloud"
|
||||
fetch_and_deploy_gh_release "OxiCloud" "DioCrafts/OxiCloud" "prebuild" "latest" "/opt/oxicloud" "oxicloud-*-$(arch_resolve x86_64 aarch64)-unknown-linux-musl.tar.gz"
|
||||
install -m 755 /opt/oxicloud/oxicloud /usr/local/bin/oxicloud
|
||||
|
||||
msg_info "Configuring OxiCloud"
|
||||
mkdir -p {/mnt/oxicloud,/etc/oxicloud}
|
||||
DATABASE_URL="postgres://${PG_DB_USER}:${PG_DB_PASS}@localhost/${PG_DB_NAME}"
|
||||
sed -e 's|OXICLOUD_STORAGE_PATH=.*|OXICLOUD_STORAGE_PATH=/mnt/oxicloud|' \
|
||||
-e 's|OXICLOUD_SERVER_HOST=.*|OXICLOUD_SERVER_HOST=0.0.0.0|' \
|
||||
-e 's|OXICLOUD_STATIC_PATH=.*|OXICLOUD_STATIC_PATH=/opt/oxicloud/static|' \
|
||||
-e 's|^OXICLOUD_STATIC_PATH=|#OXICLOUD_STATIC_PATH=|' \
|
||||
-e "s|^#OXICLOUD_BASE_URL=.*|OXICLOUD_BASE_URL=http://${LOCAL_IP}:8086|" \
|
||||
-e "s|OXICLOUD_DB_CONNECTION_STRING=.*|OXICLOUD_DB_CONNECTION_STRING=${DATABASE_URL}|" \
|
||||
-e "s|^DATABASE_URL=.*|DATABASE_URL=${DATABASE_URL}|" \
|
||||
|
||||
@@ -22,7 +22,7 @@ msg_ok "Installed Dependencies"
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PG_DB_NAME="pangolin" PG_DB_USER="pangolin" setup_postgresql_db
|
||||
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.21.0}"
|
||||
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.23.0}"
|
||||
fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball" "$PANGOLIN_VERSION"
|
||||
fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_$(arch_resolve)"
|
||||
fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_$(arch_resolve).tar.gz"
|
||||
|
||||
@@ -45,8 +45,8 @@ msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="18" setup_postgresql
|
||||
PG_DB_NAME="paperlessdb" PG_DB_USER="paperless" setup_postgresql_db
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||
PYTHON_VERSION="3.13" UV_PROJECT_DIR="/opt/paperless" setup_uv
|
||||
|
||||
msg_info "Setup Paperless-ngx"
|
||||
cd /opt/paperless
|
||||
|
||||
@@ -33,7 +33,10 @@ mv -f "/opt/tusd/tusd_linux_$(arch_resolve)/tusd" /opt/tusd/tusd
|
||||
rm -rf "/opt/tusd/tusd_linux_$(arch_resolve)"
|
||||
chmod +x /opt/tusd/tusd
|
||||
PROJECT_SECRET=$(openssl rand -hex 32)
|
||||
ADMIN_PASSWORD=$(openssl rand -base64 18 | tr -dc 'A-Za-z0-9' | head -c 16)
|
||||
ADMIN_PASSWORD=""
|
||||
until [[ "$ADMIN_PASSWORD" =~ [a-z] && "$ADMIN_PASSWORD" =~ [A-Z] && "$ADMIN_PASSWORD" =~ [0-9] && "$ADMIN_PASSWORD" =~ [^a-zA-Z0-9] ]]; do
|
||||
ADMIN_PASSWORD=$(head -c 256 /dev/urandom | LC_ALL=C tr -dc 'A-Za-z0-9@%+=_-' | head -c 16)
|
||||
done
|
||||
cat <<EOF >/opt/portabase/.env
|
||||
LOG_LEVEL=info
|
||||
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}
|
||||
|
||||
@@ -20,7 +20,7 @@ $STD apt install -y \
|
||||
tesseract-ocr
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
UV_PYTHON="3.13" setup_uv
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
|
||||
msg_info "Setting up pyLoad"
|
||||
mkdir -p /opt/pyload_data/{userdir,downloads}
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/StuffAnThings/qbit_manage
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "qbit-manage" "StuffAnThings/qbit_manage" "singlefile" "latest" "/opt/qbit-manage" "qbit-manage-linux-$(arch_resolve amd64 arm64)"
|
||||
|
||||
msg_info "Configuring qBit Manage"
|
||||
mkdir -p /opt/qbit-manage_data
|
||||
curl -fsSL "https://raw.githubusercontent.com/StuffAnThings/qbit_manage/master/config/config.yml.sample" -o /opt/qbit-manage_data/config.yml
|
||||
cat <<EOF >/opt/qbit-manage.env
|
||||
QBT_CONFIG_DIR=/opt/qbit-manage_data
|
||||
QBT_WEB_SERVER=true
|
||||
QBT_HOST=0.0.0.0
|
||||
QBT_PORT=8181
|
||||
QBT_SCHEDULE=1440
|
||||
EOF
|
||||
chmod 600 /opt/qbit-manage.env
|
||||
msg_ok "Configured qBit Manage"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/qbit-manage.service
|
||||
[Unit]
|
||||
Description=qBit Manage
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/qbit-manage_data
|
||||
EnvironmentFile=/opt/qbit-manage.env
|
||||
ExecStart=/opt/qbit-manage/qbit-manage
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now qbit-manage
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -76,7 +76,6 @@ function decodeBase64(r) {
|
||||
export default { decodeBase64 };
|
||||
EOF
|
||||
msg_ok "Installed Angie with mod_zip and njs modules"
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
setup_mariadb
|
||||
MARIADB_DB_NAME="romm" MARIADB_DB_USER="romm" setup_mariadb_db
|
||||
@@ -161,6 +160,7 @@ else
|
||||
fi
|
||||
|
||||
fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball"
|
||||
PYTHON_VERSION="3.13" UV_PROJECT_DIR="/opt/romm" setup_uv
|
||||
echo "__version__ = \"$(cat ~/.romm)\"" >/opt/romm/backend/__version__.py
|
||||
|
||||
msg_info "Creating environment file"
|
||||
|
||||
@@ -13,40 +13,16 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
build-essential \
|
||||
libssl-dev \
|
||||
pkg-config
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION=17 setup_postgresql
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
PG_DB_NAME="scanopy_db" PG_DB_USER="scanopy" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
|
||||
fetch_and_deploy_gh_release "Scanopy" "scanopy/scanopy" "tarball" "latest" "/opt/scanopy"
|
||||
TOOLCHAIN="$(grep "channel" /opt/scanopy/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
|
||||
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
|
||||
fetch_and_deploy_gh_release "Scanopy" "scanopy/scanopy" "singlefile" "latest" "/usr/bin" "scanopy-server-linux-$(arch_resolve)"
|
||||
mv -f /usr/bin/Scanopy /usr/bin/scanopy-server
|
||||
|
||||
msg_info "Building Scanopy Server (patience)"
|
||||
cd /opt/scanopy/backend
|
||||
CARGO_BUILD_JOBS="$(get_parallel_jobs)" $STD cargo build --release --bin server --bin generate-fixtures
|
||||
$STD ./target/release/generate-fixtures --output-dir /opt/scanopy/ui/src/lib/data
|
||||
mv ./target/release/server /usr/bin/scanopy-server
|
||||
msg_ok "Built Scanopy Server"
|
||||
|
||||
msg_info "Creating frontend UI"
|
||||
export PUBLIC_SERVER_HOSTNAME=default
|
||||
export PUBLIC_SERVER_PORT=""
|
||||
cd /opt/scanopy/ui
|
||||
$STD npm ci --no-fund --no-audit
|
||||
$STD npm run build
|
||||
msg_ok "Created frontend UI"
|
||||
|
||||
msg_info "Configuring server for first-run"
|
||||
msg_info "Configuring Scanopy"
|
||||
mkdir -p /opt/scanopy
|
||||
cat <<EOF >/opt/scanopy/.env
|
||||
### - SERVER
|
||||
SCANOPY_DATABASE_URL=postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME
|
||||
SCANOPY_WEB_EXTERNAL_PATH="/opt/scanopy/ui/build"
|
||||
SCANOPY_PUBLIC_URL=http://${LOCAL_IP}:60072
|
||||
SCANOPY_SERVER_PORT=60072
|
||||
SCANOPY_LOG_LEVEL=info
|
||||
@@ -73,7 +49,9 @@ SCANOPY_HEARTBEAT_INTERVAL=30
|
||||
|
||||
### - see https://github.com/scanopy/scanopy/blob/main/docs/CONFIGURATION.md for more options
|
||||
EOF
|
||||
msg_ok "Configured Scanopy"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/scanopy-server.service
|
||||
[Unit]
|
||||
Description=Scanopy Network Discovery Server
|
||||
@@ -81,7 +59,7 @@ After=network.target postgresql.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/scanopy/backend
|
||||
WorkingDirectory=/opt/scanopy
|
||||
EnvironmentFile=/opt/scanopy/.env
|
||||
ExecStart=/usr/bin/scanopy-server
|
||||
Restart=always
|
||||
@@ -92,43 +70,8 @@ StandardError=journal
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable -q --now scanopy-server
|
||||
|
||||
# Creating short script to configure scanopy-daemon
|
||||
# cat <<EOF >~/configure_daemon.sh
|
||||
# #!/usr/bin/env bash
|
||||
#
|
||||
# echo "Auto-configuring integrated daemon..."
|
||||
#
|
||||
# NETWORK_ID="\$(sudo -u postgres psql -1 -t -d "${PG_DB_NAME}" -c 'SELECT id FROM networks;')"
|
||||
# API_KEY="\$(sudo -u postgres psql -1 -t -d "${PG_DB_NAME}" -c 'SELECT key FROM api_keys;')"
|
||||
#
|
||||
# cat <<END >/etc/systemd/system/scanopy-daemon.service
|
||||
# [Unit]
|
||||
# Description=Scanopy Network Discovery Daemon
|
||||
# After=network-online.target
|
||||
# Wants=network-online.target
|
||||
#
|
||||
# [Service]
|
||||
# Type=simple
|
||||
# User=root
|
||||
# ExecStart=/usr/bin/scanopy-daemon --server-url http://127.0.0.1:60072 --network-id \${NETWORK_ID} --daemon-api-key \${API_KEY} --mode push
|
||||
# Restart=always
|
||||
# RestartSec=10
|
||||
# StandardOutput=journal
|
||||
# StandardError=journal
|
||||
#
|
||||
# [Install]
|
||||
# WantedBy=multi-user.target
|
||||
# END
|
||||
#
|
||||
# systemctl enable -q --now scanopy-daemon
|
||||
# echo "Scanopy daemon configured and running"
|
||||
#
|
||||
# EOF
|
||||
# chmod +x ~/configure_daemon.sh
|
||||
msg_ok "Scanopy server running - please create an account, daemon API key and daemon in the Scanopy UI."
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
||||
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
|
||||
PG_DB_NAME="securo" PG_DB_USER="securo" PG_DB_EXTENSIONS="vector" setup_postgresql_db
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
UV_PYTHON="3.12" setup_uv
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
|
||||
fetch_and_deploy_gh_release "securo" "securo-finance/securo" "tarball"
|
||||
|
||||
|
||||
@@ -121,9 +121,9 @@ else
|
||||
fi
|
||||
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
PYTHON_VERSION="3.14" setup_uv
|
||||
|
||||
fetch_and_deploy_gh_release "shelfmark" "calibrain/shelfmark" "tarball" "latest" "/opt/shelfmark"
|
||||
PYTHON_VERSION="3.14" UV_PROJECT_DIR="/opt/shelfmark" setup_uv
|
||||
RELEASE_VERSION=$(cat "$HOME/.shelfmark")
|
||||
|
||||
msg_info "Building Shelfmark frontend"
|
||||
|
||||
@@ -36,6 +36,28 @@ export DEBIAN_FRONTEND=noninteractive
|
||||
$STD apt install -y clickhouse-server clickhouse-client
|
||||
msg_ok "Setup ClickHouse"
|
||||
|
||||
fetch_and_deploy_gh_release "histogram-quantile" "SigNoz/signoz" "prebuild" "histogram-quantile/v0.0.1" "/opt/histogram-quantile" "histogram-quantile_linux_$(arch_resolve).tar.gz"
|
||||
|
||||
msg_info "Setting up ClickHouse histogramQuantile Function"
|
||||
mkdir -p /var/lib/clickhouse/user_scripts
|
||||
install -m 755 -o clickhouse -g clickhouse /opt/histogram-quantile/histogram-quantile /var/lib/clickhouse/user_scripts/histogramQuantile
|
||||
cat <<EOF >/etc/clickhouse-server/histogram_quantile_function.yaml
|
||||
functions:
|
||||
name: histogramQuantile
|
||||
type: executable
|
||||
format: CSV
|
||||
command: ./histogramQuantile
|
||||
return_type: Float64
|
||||
argument:
|
||||
- name: buckets
|
||||
type: Array(Float64)
|
||||
- name: counts
|
||||
type: Array(Float64)
|
||||
- name: quantile
|
||||
type: Float64
|
||||
EOF
|
||||
msg_ok "Setup ClickHouse histogramQuantile Function"
|
||||
|
||||
msg_info "Setting up Zookeeper"
|
||||
ZOOURL=$(curl -fsSL https://dlcdn.apache.org/zookeeper/current/ | grep -o 'apache-zookeeper-[0-9.]\+-bin\.tar\.gz' | head -n1)
|
||||
curl -fsSL "https://dlcdn.apache.org/zookeeper/current/$ZOOURL" -o ~/zookeeper.tar.gz
|
||||
|
||||
@@ -22,7 +22,7 @@ $STD apt install -y \
|
||||
ffmpeg
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
UV_PYTHON="3.11" setup_uv
|
||||
PYTHON_VERSION="3.11" setup_uv
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
fetch_and_deploy_gh_release "soulsync" "Nezreka/SoulSync" "tarball"
|
||||
|
||||
@@ -22,6 +22,7 @@ $STD apt install -y \
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
fetch_and_deploy_gh_release "spoolman" "Donkie/Spoolman" "prebuild" "latest" "/opt/spoolman" "spoolman.zip"
|
||||
UV_PROJECT_DIR="/opt/spoolman" setup_uv
|
||||
PYTHON_VERSION="3.14" setup_uv
|
||||
|
||||
msg_info "Setting up Spoolman"
|
||||
|
||||
@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
|
||||
$STD apt install -y build-essential
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
UV_PYTHON="3.12" setup_uv
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
fetch_and_deploy_gh_release "suggestarr" "giuseppe99barchetta/SuggestArr" "tarball"
|
||||
@@ -38,7 +38,9 @@ $STD uv pip install --python /opt/suggestarr/.venv -r /opt/suggestarr/api_servic
|
||||
msg_ok "Set up Python Environment"
|
||||
|
||||
msg_info "Configuring SuggestArr"
|
||||
mkdir -p /opt/suggestarr_data
|
||||
mkdir -p /opt/suggestarr_data /opt/suggestarr/config
|
||||
rm -rf /opt/suggestarr/config/config_files
|
||||
ln -sfn /opt/suggestarr_data /opt/suggestarr/config/config_files
|
||||
cat <<EOF >/opt/suggestarr.env
|
||||
SUGGESTARR_PORT=5000
|
||||
LOG_LEVEL=info
|
||||
|
||||
@@ -13,7 +13,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
UV_PYTHON="3.13" setup_uv
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
NODE_VERSION="25" setup_nodejs
|
||||
setup_ffmpeg
|
||||
setup_gs
|
||||
|
||||
@@ -34,7 +34,7 @@ $STD apt install -y \
|
||||
pkg-config
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
UV_PYTHON="3.13" setup_uv
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
fetch_and_deploy_gh_release "deno" "denoland/deno" "prebuild" "latest" "/usr/local/bin" "deno-$(arch_resolve "x86_64" "aarch64")-unknown-linux-gnu.zip"
|
||||
|
||||
@@ -17,10 +17,10 @@ msg_info "Installing Dependencies"
|
||||
$STD apt install -y sqlite3
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_uv
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
fetch_and_deploy_gh_release "wizarr" "wizarrrr/wizarr" "tarball"
|
||||
UV_PROJECT_DIR="/opt/wizarr" setup_uv
|
||||
|
||||
msg_info "Configure Wizarr"
|
||||
cd /opt/wizarr
|
||||
|
||||
@@ -23,7 +23,7 @@ $STD apt install -y \
|
||||
zlib1g-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
fetch_and_deploy_gh_release "xyops" "pixlcore/xyops" "tarball"
|
||||
|
||||
|
||||
@@ -21,9 +21,9 @@ msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="yamtrack" PG_DB_USER="yamtrack" setup_postgresql_db
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
|
||||
fetch_and_deploy_gh_release "yamtrack" "FuzzyGrim/Yamtrack" "tarball"
|
||||
PYTHON_VERSION="3.12" UV_PROJECT_DIR="/opt/yamtrack" setup_uv
|
||||
|
||||
msg_info "Installing Python Dependencies"
|
||||
cd /opt/yamtrack
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/Yooooomi/your_spotify
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
setup_mongodb
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@^10,serve" setup_nodejs
|
||||
|
||||
fetch_and_deploy_gh_release "your-spotify" "Yooooomi/your_spotify" "tarball"
|
||||
|
||||
msg_info "Building Your Spotify"
|
||||
cd /opt/your-spotify
|
||||
$STD pnpm install --frozen-lockfile
|
||||
$STD pnpm --filter @your_spotify/server build
|
||||
$STD pnpm --filter @your_spotify/client build
|
||||
msg_ok "Built Your Spotify"
|
||||
|
||||
var_api_endpoint="${var_api_endpoint:-http://${LOCAL_IP}:8080}"
|
||||
var_client_endpoint="${var_client_endpoint:-http://${LOCAL_IP}:3000}"
|
||||
var_spotify_public="${var_spotify_public:-CHANGE_ME}"
|
||||
var_spotify_secret="${var_spotify_secret:-CHANGE_ME}"
|
||||
|
||||
msg_info "Configuring Your Spotify"
|
||||
cat <<EOF >/opt/your-spotify.env
|
||||
API_ENDPOINT=${var_api_endpoint}
|
||||
CLIENT_ENDPOINT=${var_client_endpoint}
|
||||
SPOTIFY_PUBLIC=${var_spotify_public}
|
||||
SPOTIFY_SECRET=${var_spotify_secret}
|
||||
MONGO_ENDPOINT=mongodb://127.0.0.1:27017/your_spotify
|
||||
TIMEZONE=UTC
|
||||
LOG_LEVEL=info
|
||||
PORT=8080
|
||||
EOF
|
||||
chmod 600 /opt/your-spotify.env
|
||||
|
||||
cp /opt/your-spotify/apps/client/build/variables-template.js /opt/your-spotify/apps/client/build/variables.js
|
||||
sed -i "s;__API_ENDPOINT__;${var_api_endpoint};g" /opt/your-spotify/apps/client/build/variables.js
|
||||
sed -i "s#connect-src \(.*\);#connect-src 'self' ${var_api_endpoint}/;#g" /opt/your-spotify/apps/client/build/index.html
|
||||
msg_ok "Configured Your Spotify"
|
||||
|
||||
msg_info "Creating Services"
|
||||
cat <<EOF >/etc/systemd/system/your-spotify.service
|
||||
[Unit]
|
||||
Description=Your Spotify Server
|
||||
Wants=network-online.target
|
||||
After=network-online.target mongod.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/your-spotify/apps/server
|
||||
EnvironmentFile=/opt/your-spotify.env
|
||||
ExecStartPre=/usr/bin/node build/index.js --migrate
|
||||
ExecStart=/usr/bin/node build/index.js
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/your-spotify-web.service
|
||||
[Unit]
|
||||
Description=Your Spotify Web
|
||||
Wants=network-online.target
|
||||
After=network-online.target your-spotify.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/your-spotify/apps/client
|
||||
ExecStart=serve -s -l tcp://0.0.0.0:3000 /opt/your-spotify/apps/client/build
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now your-spotify your-spotify-web
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -30,8 +30,6 @@ ln -sf /opt/bun/bin/bun /usr/local/bin/bun
|
||||
ln -sf /opt/bun/bin/bunx /usr/local/bin/bunx
|
||||
msg_ok "Installed Bun"
|
||||
|
||||
UV_VERSION="0.7.19" PYTHON_VERSION="3.12" setup_uv
|
||||
|
||||
msg_info "Installing Deno"
|
||||
$STD sh -c "curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh -s -- -y"
|
||||
msg_ok "Installed Deno"
|
||||
@@ -43,6 +41,7 @@ mkdir -p /opt/yubal \
|
||||
msg_ok "Created directories"
|
||||
|
||||
fetch_and_deploy_gh_release "yubal" "guillevc/yubal" "tarball" "latest" "/opt/yubal"
|
||||
PYTHON_VERSION="3.12" UV_PROJECT_DIR="/opt/yubal" setup_uv
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/yubal/web
|
||||
|
||||
@@ -0,0 +1,239 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: Agent-Fennec
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
COMMUNITY_SCRIPTS_URL="${COMMUNITY_SCRIPTS_URL:-https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main}"
|
||||
source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/api/api.func")
|
||||
source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/pve/vm-core.func")
|
||||
source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/vm/cloud-init.func") || true
|
||||
load_functions
|
||||
|
||||
APP="AlmaLinux"
|
||||
APP_TYPE="vm"
|
||||
NSAPP="almalinux-vm"
|
||||
var_os="almalinux"
|
||||
var_version="10"
|
||||
|
||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||
METHOD=""
|
||||
THIN="discard=on,ssd=1,"
|
||||
|
||||
set -e
|
||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||
trap cleanup EXIT
|
||||
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
|
||||
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
|
||||
|
||||
function error_handler() {
|
||||
local exit_code="$?"
|
||||
local line_number="$1"
|
||||
local command="$2"
|
||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||
post_update_to_api "failed" "${command}"
|
||||
echo -e "\n$error_message\n"
|
||||
cleanup_vmid
|
||||
}
|
||||
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
pushd "$TEMP_DIR" >/dev/null
|
||||
|
||||
if [[ "${VM_UNATTENDED:-0}" == "1" ]]; then
|
||||
var_version="${VM_OS_VERSION:-$var_version}"
|
||||
elif vm_dialog radiolist "ALMALINUX VERSION" "Choose the AlmaLinux release to install" --cancel-button Exit-Script 12 58 3 \
|
||||
"10" "AlmaLinux 10 (Purple Lion)" ON \
|
||||
"9" "AlmaLinux 9 (Seafoam Ocelot)" OFF \
|
||||
"8" "AlmaLinux 8 (Sapphire Caracal)" OFF; then
|
||||
var_version="$VM_DIALOG_RESULT"
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
|
||||
# glibc aborts with exit 127 when the CPU is below the release baseline, which
|
||||
# the kernel then reports as "Attempted to kill init". kvm64 is only v1, so 9
|
||||
# and 10 both need a model named here. The baselines are x86-only, so on
|
||||
# aarch64 the default model stands.
|
||||
case "$var_version" in
|
||||
10) ALMA_CPU="$(vm_arch_resolve " -cpu x86-64-v3" "")" ;;
|
||||
9) ALMA_CPU="$(vm_arch_resolve " -cpu x86-64-v2-AES" "")" ;;
|
||||
8) ALMA_CPU="" ;;
|
||||
*)
|
||||
msg_error "Unsupported AlmaLinux version '${var_version}'"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
APP="AlmaLinux ${var_version} VM"
|
||||
|
||||
# The GenericCloud image sets no password and has no console login, so the only
|
||||
# question is which credentials.
|
||||
CLOUDINIT_REQUIRED=1
|
||||
vm_prompt_cloud_init "almalinux"
|
||||
|
||||
function default_settings() {
|
||||
vm_apply_machine_type "q35"
|
||||
VMID=$(get_valid_nextid)
|
||||
DISK_SIZE="10G"
|
||||
DISK_CACHE=""
|
||||
HN="almalinux"
|
||||
CPU_TYPE="$ALMA_CPU"
|
||||
CORE_COUNT="2"
|
||||
RAM_SIZE="2048"
|
||||
BRG="vmbr0"
|
||||
MAC="$GEN_MAC"
|
||||
VLAN=""
|
||||
MTU=""
|
||||
START_VM="yes"
|
||||
METHOD="default"
|
||||
echo -e "${CLOUD}${BOLD}${DGN}Cloud-Init: ${BGN}${USE_CLOUD_INIT}${CL}"
|
||||
vm_echo_default_settings
|
||||
}
|
||||
|
||||
function advanced_settings() {
|
||||
METHOD="advanced"
|
||||
vm_prompt_vmid "${VMID:-$(get_valid_nextid)}"
|
||||
vm_prompt_machine_type "q35"
|
||||
vm_prompt_disk_size "10G"
|
||||
vm_prompt_disk_cache "none"
|
||||
vm_prompt_hostname "almalinux"
|
||||
vm_prompt_cpu_model "kvm64"
|
||||
if [[ -z "${CPU_TYPE:-}" && -n "$ALMA_CPU" ]]; then
|
||||
CPU_TYPE="$ALMA_CPU"
|
||||
msg_warn "AlmaLinux ${var_version} will not boot on kvm64 - keeping ${CPU_TYPE# -cpu }"
|
||||
fi
|
||||
vm_prompt_cpu_cores "2"
|
||||
vm_prompt_ram "2048"
|
||||
vm_prompt_bridge "vmbr0"
|
||||
vm_prompt_mac "$GEN_MAC"
|
||||
vm_prompt_vlan
|
||||
vm_prompt_mtu
|
||||
vm_prompt_verbose "no"
|
||||
vm_prompt_start_vm "yes"
|
||||
|
||||
if vm_confirm_advanced_settings "Ready to create a ${APP}?"; then
|
||||
echo -e "${CREATING}${BOLD}${DGN}Creating a ${APP} using the above advanced settings${CL}"
|
||||
else
|
||||
header_info
|
||||
echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
|
||||
advanced_settings
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
vm_start_script "Use Default Settings?\n\nDefaults:\n• 2 CPU Cores\n• 2 GB RAM\n• 10 GB Disk\n• Cloud-Init enabled" 14 58
|
||||
post_to_api_vm
|
||||
|
||||
vm_select_storage "$HN"
|
||||
|
||||
# ==============================================================================
|
||||
# PREREQUISITES
|
||||
# ==============================================================================
|
||||
if ! command -v virt-customize &>/dev/null; then
|
||||
msg_info "Installing libguestfs-tools"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y libguestfs-tools
|
||||
msg_ok "Installed libguestfs-tools"
|
||||
fi
|
||||
|
||||
msg_info "Retrieving the URL for the ${APP} Qcow2 Disk Image"
|
||||
ALMA_ARCH="$(vm_arch_resolve x86_64 aarch64)"
|
||||
URL="https://repo.almalinux.org/almalinux/${var_version}/cloud/${ALMA_ARCH}/images/AlmaLinux-${var_version}-GenericCloud-latest.${ALMA_ARCH}.qcow2"
|
||||
sleep 2
|
||||
msg_ok "${CL}${BL}${URL}${CL}"
|
||||
CACHE_FILE="$(vm_image_cache_path "$URL")"
|
||||
vm_fetch_image "$URL" "$CACHE_FILE" --cache --min-bytes $((100 * 1024 * 1024)) || exit 115
|
||||
FILE="$(basename "$CACHE_FILE")"
|
||||
|
||||
# ==============================================================================
|
||||
# IMAGE CUSTOMIZATION
|
||||
# ==============================================================================
|
||||
WORK_FILE=$(mktemp --suffix=.qcow2)
|
||||
cp "$CACHE_FILE" "$WORK_FILE"
|
||||
popd >/dev/null
|
||||
rm -rf "$TEMP_DIR"
|
||||
# vm_prepare_cloud_image draws its own spinner, so this one has to start after
|
||||
# it -- otherwise the three calls below run with nothing on screen.
|
||||
vm_prepare_cloud_image "$WORK_FILE" "$HN" || true
|
||||
|
||||
msg_info "Customizing ${FILE} image"
|
||||
virt-customize -q -a "$WORK_FILE" --run-command "systemctl disable systemd-firstboot.service 2>/dev/null; rm -f /etc/systemd/system/sysinit.target.wants/systemd-firstboot.service; ln -sf /dev/null /etc/systemd/system/systemd-firstboot.service" >/dev/null 2>&1 || true
|
||||
virt-customize -q -a "$WORK_FILE" --run-command "systemctl enable serial-getty@ttyS0.service" >/dev/null 2>&1 || true
|
||||
virt-customize -q -a "$WORK_FILE" --selinux-relabel >/dev/null 2>&1 || true
|
||||
msg_ok "Customized image"
|
||||
|
||||
STORAGE_TYPE=$(pvesm status -storage "$STORAGE" | awk 'NR>1 {print $2}')
|
||||
case $STORAGE_TYPE in
|
||||
nfs | dir)
|
||||
DISK_EXT=".qcow2"
|
||||
DISK_REF="$VMID/"
|
||||
DISK_IMPORT="-format qcow2"
|
||||
THIN=""
|
||||
;;
|
||||
btrfs)
|
||||
DISK_EXT=".raw"
|
||||
DISK_REF="$VMID/"
|
||||
DISK_IMPORT="-format raw"
|
||||
FORMAT=",efitype=4m"
|
||||
THIN=""
|
||||
;;
|
||||
*)
|
||||
DISK_EXT=""
|
||||
DISK_REF=""
|
||||
DISK_IMPORT="-format raw"
|
||||
;;
|
||||
esac
|
||||
for i in {0,1,2}; do
|
||||
disk="DISK$i"
|
||||
eval DISK"${i}"=vm-"${VMID}"-disk-"${i}"${DISK_EXT:-}
|
||||
eval DISK"${i}"_REF="${STORAGE}":"${DISK_REF:-}""${!disk}"
|
||||
done
|
||||
|
||||
if [[ "$STORAGE_TYPE" != "nfs" && "$STORAGE_TYPE" != "dir" ]]; then
|
||||
msg_info "Converting image to raw format"
|
||||
RAW_FILE=$(mktemp --suffix=.raw)
|
||||
qemu-img convert -f qcow2 -O raw "$WORK_FILE" "$RAW_FILE"
|
||||
rm -f "$WORK_FILE"
|
||||
WORK_FILE="$RAW_FILE"
|
||||
msg_ok "Converted image to raw format"
|
||||
fi
|
||||
|
||||
msg_info "Creating an ${APP}"
|
||||
qm create "$VMID" -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores "$CORE_COUNT" -memory "$RAM_SIZE" \
|
||||
-name "$HN" -tags community-script -net0 virtio,bridge="$BRG",macaddr="$MAC""$VLAN""$MTU" -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
|
||||
vm_alloc_efi_disk "$DISK0"
|
||||
pvesm alloc "$STORAGE" "$VMID" "$DISK2" 4M 1>&/dev/null
|
||||
qm importdisk "$VMID" "${WORK_FILE}" "$STORAGE" ${DISK_IMPORT:-} 1>&/dev/null
|
||||
qm set "$VMID" \
|
||||
-efidisk0 "${DISK0_REF}"${FORMAT} \
|
||||
-scsi0 "${DISK1_REF}",${DISK_CACHE}${THIN}size="${DISK_SIZE}" \
|
||||
-tpmstate0 "${DISK2_REF}",version=v2.0 \
|
||||
-boot order=scsi0 \
|
||||
-serial0 socket >/dev/null
|
||||
|
||||
rm -f "$WORK_FILE"
|
||||
set_description
|
||||
msg_ok "Created an ${APP} ${CL}${BL}(${HN})"
|
||||
|
||||
vm_resize_disk
|
||||
|
||||
vm_provision "$VMID" || true
|
||||
|
||||
if [ "$START_VM" == "yes" ]; then
|
||||
msg_info "Starting ${APP}"
|
||||
$STD qm start "$VMID"
|
||||
msg_ok "Started ${APP}"
|
||||
fi
|
||||
|
||||
post_update_to_api "done" "none"
|
||||
|
||||
echo -e "\n${INFO}${BOLD}${GN}${APP} Configuration Summary:${CL}"
|
||||
echo -e "${TAB}${DGN}VM ID: ${BGN}${VMID}${CL}"
|
||||
echo -e "${TAB}${DGN}Hostname: ${BGN}${HN}${CL}"
|
||||
echo -e "${TAB}${DGN}Release: ${BGN}AlmaLinux ${var_version} (${ALMA_ARCH})${CL}"
|
||||
if [ -n "${CLOUDINIT_CRED_FILE:-}" ]; then
|
||||
echo -e "${TAB}${DGN}Cloud-Init credentials: ${BGN}${CLOUDINIT_CRED_FILE}${CL}"
|
||||
fi
|
||||
|
||||
msg_ok "Completed successfully!\n"
|
||||
|
||||
+5
-2
@@ -34,6 +34,10 @@ pushd "$TEMP_DIR" >/dev/null
|
||||
|
||||
vm_preflight
|
||||
|
||||
# The cloud image sets no password, so the only question is which credentials.
|
||||
CLOUDINIT_REQUIRED=1
|
||||
vm_prompt_cloud_init "alpine"
|
||||
|
||||
function default_settings() {
|
||||
VMID=$(get_valid_nextid)
|
||||
vm_apply_machine_type "q35"
|
||||
@@ -49,7 +53,7 @@ function default_settings() {
|
||||
MTU=""
|
||||
START_VM="yes"
|
||||
METHOD="default"
|
||||
USE_CLOUD_INIT="yes"
|
||||
echo -e "${CLOUD}${BOLD}${DGN}Cloud-Init: ${BGN}${USE_CLOUD_INIT}${CL}"
|
||||
vm_echo_default_settings
|
||||
}
|
||||
|
||||
@@ -67,7 +71,6 @@ function advanced_settings() {
|
||||
vm_prompt_mac "$GEN_MAC"
|
||||
vm_prompt_vlan
|
||||
vm_prompt_mtu
|
||||
vm_prompt_cloud_init "alpine"
|
||||
vm_prompt_verbose "no"
|
||||
vm_prompt_start_vm "yes"
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ __ _
|
||||
/ | / /___ ___ ____ _/ / (_)___ __ ___ __
|
||||
/ /| | / / __ `__ \/ __ `/ / / / __ \/ / / / |/_/
|
||||
/ ___ |/ / / / / / / /_/ / /___/ / / / / /_/ /> <
|
||||
/_/ |_/_/_/ /_/ /_/\__,_/_____/_/_/ /_/\__,_/_/|_|
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _
|
||||
/ | / /___ (_)___ ___
|
||||
/ /| | / / __ \/ / __ \/ _ \
|
||||
/ ___ |/ / /_/ / / / / / __/
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
____ __ _
|
||||
/ __ \___ / /_ (_)___ _____
|
||||
/ / / / _ \/ __ \/ / __ `/ __ \
|
||||
/ /_/ / __/ /_/ / / /_/ / / / /
|
||||
/_____/\___/_.___/_/\__,_/_/ /_/
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user