mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-03-02 17:05:55 +01:00
Compare commits
74 Commits
fix/improv
...
refactor/t
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
82eac757d6 | ||
|
|
31c7a86a4d | ||
|
|
cc7461d959 | ||
|
|
0fc12576c0 | ||
|
|
02337ad9be | ||
|
|
90c0ea3b2d | ||
|
|
37c1502f5b | ||
|
|
193c3b305a | ||
|
|
4dfa649a81 | ||
|
|
3233646831 | ||
|
|
b122de1f99 | ||
|
|
c3d34736e8 | ||
|
|
a77c95750c | ||
|
|
e10b7fba82 | ||
|
|
dd37770b86 | ||
|
|
c85809e512 | ||
|
|
edb86a7150 | ||
|
|
d0e107d707 | ||
|
|
187ccc4f1c | ||
|
|
20cecec4ad | ||
|
|
8c28126479 | ||
|
|
85213ea8b0 | ||
|
|
1858aeee03 | ||
|
|
7ce4313ba4 | ||
|
|
fd498b0efb | ||
|
|
cdbcf098d2 | ||
|
|
fddc47064d | ||
|
|
16ae89cd88 | ||
|
|
f2d88b7b4f | ||
|
|
187c96f777 | ||
|
|
f974ac4773 | ||
|
|
869985dc60 | ||
|
|
1e391e22ce | ||
|
|
dae03cf80e | ||
|
|
1edcc106e3 | ||
|
|
34eb094143 | ||
|
|
683c0d4e8b | ||
|
|
9d8c544f83 | ||
|
|
5967d51769 | ||
|
|
c37af920df | ||
|
|
5f08bf2e98 | ||
|
|
a2dc3f44d3 | ||
|
|
9e9dfd6947 | ||
|
|
774bbbc6d5 | ||
|
|
c7a1d4bd13 | ||
|
|
a6d56700d9 | ||
|
|
ed22dc806d | ||
|
|
b129614679 | ||
|
|
154374a2d1 | ||
|
|
5ec5f980dc | ||
|
|
b83c378667 | ||
|
|
981e62d53d | ||
|
|
03028a9a9b | ||
|
|
c080821e31 | ||
|
|
2f546ec277 | ||
|
|
56d8ed38b0 | ||
|
|
c0fde54d73 | ||
|
|
95a7cb1242 | ||
|
|
7d79a15ddf | ||
|
|
86f54e3244 | ||
|
|
06e81e1077 | ||
|
|
6c545e962a | ||
|
|
9c4f82db66 | ||
|
|
1dd067924a | ||
|
|
6565e20dc1 | ||
|
|
950b32fef8 | ||
|
|
01ba7356e0 | ||
|
|
ef7015e232 | ||
|
|
c118377665 | ||
|
|
8022525b49 | ||
|
|
c8dbce6e58 | ||
|
|
0d821dd704 | ||
|
|
52061ea0db | ||
|
|
5c82757c69 |
250
.github/changelogs/2026/02.md
generated
vendored
250
.github/changelogs/2026/02.md
generated
vendored
@@ -1,3 +1,253 @@
|
|||||||
|
## 2026-02-28
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Update Reactive Resume install script with useful .env information for reverse proxy setup [@Mazianni](https://github.com/Mazianni) ([#12401](https://github.com/community-scripts/ProxmoxVE/pull/12401))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- gramps-web: install addons (FilterRules) for relationship diagram [@MickLesk](https://github.com/MickLesk) ([#12387](https://github.com/community-scripts/ProxmoxVE/pull/12387))
|
||||||
|
- [Fix] Immich: Change `sed` command to fully replace line in postgresql.conf [@vhsdream](https://github.com/vhsdream) ([#12429](https://github.com/community-scripts/ProxmoxVE/pull/12429))
|
||||||
|
- [FIX] Immich: fix Openvino memory leak during OCR; improve HW-accelerated ML performance [@vhsdream](https://github.com/vhsdream) ([#12426](https://github.com/community-scripts/ProxmoxVE/pull/12426))
|
||||||
|
- Fix default tag for ioBroker LXC install [@josefglatz](https://github.com/josefglatz) ([#12423](https://github.com/community-scripts/ProxmoxVE/pull/12423))
|
||||||
|
- Ombi: Add database.json [@hraphael](https://github.com/hraphael) ([#12412](https://github.com/community-scripts/ProxmoxVE/pull/12412))
|
||||||
|
- Dawarich: add missing build deps and handle seed failure [@MickLesk](https://github.com/MickLesk) ([#12410](https://github.com/community-scripts/ProxmoxVE/pull/12410))
|
||||||
|
- pangolin: increase hdd to 10G [@MickLesk](https://github.com/MickLesk) ([#12409](https://github.com/community-scripts/ProxmoxVE/pull/12409))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- BookLore: add additional JVM flags [@vhsdream](https://github.com/vhsdream) ([#12421](https://github.com/community-scripts/ProxmoxVE/pull/12421))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Delete Palmr [@vhsdream](https://github.com/vhsdream) ([#12399](https://github.com/community-scripts/ProxmoxVE/pull/12399))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- core: read from /dev/tty in all interactive prompts | fix empty or cropped logs due build process [@MickLesk](https://github.com/MickLesk) ([#12406](https://github.com/community-scripts/ProxmoxVE/pull/12406))
|
||||||
|
|
||||||
|
## 2026-02-27
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Strapi ([#12320](https://github.com/community-scripts/ProxmoxVE/pull/12320))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- TrueNAS VM: filter out new nightlies with MASTER [@juronja](https://github.com/juronja) ([#12355](https://github.com/community-scripts/ProxmoxVE/pull/12355))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: graceful fallback for apt-get update failures [@MickLesk](https://github.com/MickLesk) ([#12386](https://github.com/community-scripts/ProxmoxVE/pull/12386))
|
||||||
|
- core: Improve error outputs across core functions [@MickLesk](https://github.com/MickLesk) ([#12378](https://github.com/community-scripts/ProxmoxVE/pull/12378))
|
||||||
|
|
||||||
|
## 2026-02-26
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Kima-Hub ([#12319](https://github.com/community-scripts/ProxmoxVE/pull/12319))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func: update glx alternatives / nvidia alternative if nvidia glx are missing [@MickLesk](https://github.com/MickLesk) ([#12372](https://github.com/community-scripts/ProxmoxVE/pull/12372))
|
||||||
|
- hotfix: overseer version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12366](https://github.com/community-scripts/ProxmoxVE/pull/12366))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Add ffmpeg for booklore (ffprobe) [@MickLesk](https://github.com/MickLesk) ([#12371](https://github.com/community-scripts/ProxmoxVE/pull/12371))
|
||||||
|
- [QOL] Immich: add warning regarding library compilation time [@vhsdream](https://github.com/vhsdream) ([#12345](https://github.com/community-scripts/ProxmoxVE/pull/12345))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Improves adguardhome-sync addon when running on alpine LXCs [@Darkangeel-hd](https://github.com/Darkangeel-hd) ([#12362](https://github.com/community-scripts/ProxmoxVE/pull/12362))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Add Alpine support and improve Tailscale install [@MickLesk](https://github.com/MickLesk) ([#12370](https://github.com/community-scripts/ProxmoxVE/pull/12370))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- fix wrong link on contributions README.md [@Darkangeel-hd](https://github.com/Darkangeel-hd) ([#12363](https://github.com/community-scripts/ProxmoxVE/pull/12363))
|
||||||
|
|
||||||
|
### 📂 Github
|
||||||
|
|
||||||
|
- github: add workflow to autom. close unauthorized new-script PRs [@MickLesk](https://github.com/MickLesk) ([#12356](https://github.com/community-scripts/ProxmoxVE/pull/12356))
|
||||||
|
|
||||||
|
## 2026-02-25
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Zerobyte ([#12321](https://github.com/community-scripts/ProxmoxVE/pull/12321))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: overseer migration [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12340](https://github.com/community-scripts/ProxmoxVE/pull/12340))
|
||||||
|
- add: vikunja: daemon reload [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12323](https://github.com/community-scripts/ProxmoxVE/pull/12323))
|
||||||
|
- opnsense-VM: Use ip link to verify bridge existence [@MickLesk](https://github.com/MickLesk) ([#12329](https://github.com/community-scripts/ProxmoxVE/pull/12329))
|
||||||
|
- wger: Use $http_host for proxy Host header [@MickLesk](https://github.com/MickLesk) ([#12327](https://github.com/community-scripts/ProxmoxVE/pull/12327))
|
||||||
|
- Passbolt: Update Nginx config `client_max_body_size` [@tremor021](https://github.com/tremor021) ([#12313](https://github.com/community-scripts/ProxmoxVE/pull/12313))
|
||||||
|
- Zammad: configure Elasticsearch before zammad start [@MickLesk](https://github.com/MickLesk) ([#12308](https://github.com/community-scripts/ProxmoxVE/pull/12308))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- OpenProject: Various fixes [@tremor021](https://github.com/tremor021) ([#12246](https://github.com/community-scripts/ProxmoxVE/pull/12246))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix detection of ssh keys [@1-tempest](https://github.com/1-tempest) ([#12230](https://github.com/community-scripts/ProxmoxVE/pull/12230))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: Improve GitHub/Codeberg API error handling and error output [@MickLesk](https://github.com/MickLesk) ([#12330](https://github.com/community-scripts/ProxmoxVE/pull/12330))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- core: remove duplicate traps, consolidate error handling and harden signal traps [@MickLesk](https://github.com/MickLesk) ([#12316](https://github.com/community-scripts/ProxmoxVE/pull/12316))
|
||||||
|
|
||||||
|
### 📂 Github
|
||||||
|
|
||||||
|
- github: improvements for node drift wf [@MickLesk](https://github.com/MickLesk) ([#12309](https://github.com/community-scripts/ProxmoxVE/pull/12309))
|
||||||
|
|
||||||
|
## 2026-02-24
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- several scripts: add additional github link in source [@MickLesk](https://github.com/MickLesk) ([#12282](https://github.com/community-scripts/ProxmoxVE/pull/12282))
|
||||||
|
- adds further documentation during the installation script. [@d12rio](https://github.com/d12rio) ([#12248](https://github.com/community-scripts/ProxmoxVE/pull/12248))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [Fix] PatchMon: remove VITE_API_URL from frontend env [@vhsdream](https://github.com/vhsdream) ([#12294](https://github.com/community-scripts/ProxmoxVE/pull/12294))
|
||||||
|
- fix(searxng): remove orphaned fi causing syntax error [@mark-jeffrey](https://github.com/mark-jeffrey) ([#12283](https://github.com/community-scripts/ProxmoxVE/pull/12283))
|
||||||
|
- Refactor n8n [@MickLesk](https://github.com/MickLesk) ([#12264](https://github.com/community-scripts/ProxmoxVE/pull/12264))
|
||||||
|
- Firefly: PHP bump [@tremor021](https://github.com/tremor021) ([#12247](https://github.com/community-scripts/ProxmoxVE/pull/12247))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Databasus: add mariadb path for mysql/mariadb backups | add mongodb database tools [@MickLesk](https://github.com/MickLesk) ([#12259](https://github.com/community-scripts/ProxmoxVE/pull/12259))
|
||||||
|
- make searxng updateable [@shtefko](https://github.com/shtefko) ([#12207](https://github.com/community-scripts/ProxmoxVE/pull/12207))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- fix: wealthfolio for v3 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11765](https://github.com/community-scripts/ProxmoxVE/pull/11765))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- bump various scripts from Node 22 to 24 [@MickLesk](https://github.com/MickLesk) ([#12265](https://github.com/community-scripts/ProxmoxVE/pull/12265))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- core: fix broken "command not found" after err_trap [@MickLesk](https://github.com/MickLesk) ([#12280](https://github.com/community-scripts/ProxmoxVE/pull/12280))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: add get_latest_gh_tag helper function [@MickLesk](https://github.com/MickLesk) ([#12261](https://github.com/community-scripts/ProxmoxVE/pull/12261))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- Arcane ([#12263](https://github.com/community-scripts/ProxmoxVE/pull/12263))
|
||||||
|
|
||||||
|
### 📂 Github
|
||||||
|
|
||||||
|
- github: add weekly Node.js version drift check workflow [@MickLesk](https://github.com/MickLesk) ([#12267](https://github.com/community-scripts/ProxmoxVE/pull/12267))
|
||||||
|
- add: workflow to close stale PRs [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12243](https://github.com/community-scripts/ProxmoxVE/pull/12243))
|
||||||
|
|
||||||
|
## 2026-02-23
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- SeaweedFS ([#12220](https://github.com/community-scripts/ProxmoxVE/pull/12220))
|
||||||
|
- Sonobarr ([#12221](https://github.com/community-scripts/ProxmoxVE/pull/12221))
|
||||||
|
- SparkyFitness ([#12185](https://github.com/community-scripts/ProxmoxVE/pull/12185))
|
||||||
|
- Frigate v16.4 [@MickLesk](https://github.com/MickLesk) ([#11887](https://github.com/community-scripts/ProxmoxVE/pull/11887))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- memos: unpin version due new release artifacts [@MickLesk](https://github.com/MickLesk) ([#12224](https://github.com/community-scripts/ProxmoxVE/pull/12224))
|
||||||
|
- core: Enhance signal handling, reported "status" and logs [@MickLesk](https://github.com/MickLesk) ([#12216](https://github.com/community-scripts/ProxmoxVE/pull/12216))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- booklore v2: embed frontend, bump Java to 25, remove nginx [@MickLesk](https://github.com/MickLesk) ([#12223](https://github.com/community-scripts/ProxmoxVE/pull/12223))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Remove: Huntarr (deprecated & Security) [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12226](https://github.com/community-scripts/ProxmoxVE/pull/12226))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- core: Improve error handling and logging for LXC builds [@MickLesk](https://github.com/MickLesk) ([#12208](https://github.com/community-scripts/ProxmoxVE/pull/12208))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- calibre-web: update default credentials [@LaevaertK](https://github.com/LaevaertK) ([#12201](https://github.com/community-scripts/ProxmoxVE/pull/12201))
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- chore: update Frigate documentation and website URLs [@JohnICB](https://github.com/JohnICB) ([#12218](https://github.com/community-scripts/ProxmoxVE/pull/12218))
|
||||||
|
|
||||||
|
## 2026-02-22
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Gramps-Web ([#12157](https://github.com/community-scripts/ProxmoxVE/pull/12157))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: Apache Guacamole - bump to Temurin JDK 17 to resolve Debian 13 (Trixie) install failure [@Copilot](https://github.com/Copilot) ([#12161](https://github.com/community-scripts/ProxmoxVE/pull/12161))
|
||||||
|
- Docker-VM: add error handling for virt-customize finalization [@MickLesk](https://github.com/MickLesk) ([#12127](https://github.com/community-scripts/ProxmoxVE/pull/12127))
|
||||||
|
- [Fix] Sure: add Sidekiq service [@vhsdream](https://github.com/vhsdream) ([#12186](https://github.com/community-scripts/ProxmoxVE/pull/12186))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Refactor & Bump to v2: Plex [@MickLesk](https://github.com/MickLesk) ([#12179](https://github.com/community-scripts/ProxmoxVE/pull/12179))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- karakeep: bump to node 24 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12183](https://github.com/community-scripts/ProxmoxVE/pull/12183))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: add GitHub API rate-limit detection and GITHUB_TOKEN support [@MickLesk](https://github.com/MickLesk) ([#12176](https://github.com/community-scripts/ProxmoxVE/pull/12176))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- CR*NMASTER ([#12065](https://github.com/community-scripts/ProxmoxVE/pull/12065))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Update package management commands in clean-lxcs.sh [@heinemannj](https://github.com/heinemannj) ([#12166](https://github.com/community-scripts/ProxmoxVE/pull/12166))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- calibre-web: Update logo URL [@MickLesk](https://github.com/MickLesk) ([#12178](https://github.com/community-scripts/ProxmoxVE/pull/12178))
|
||||||
|
|
||||||
## 2026-02-21
|
## 2026-02-21
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|||||||
309
CHANGELOG.md
309
CHANGELOG.md
@@ -21,6 +21,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><h2>📜 History</h2></summary>
|
<summary><h2>📜 History</h2></summary>
|
||||||
|
|
||||||
@@ -30,7 +33,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><h4>February (21 entries)</h4></summary>
|
<summary><h4>February (28 entries)</h4></summary>
|
||||||
|
|
||||||
[View February 2026 Changelog](.github/changelogs/2026/02.md)
|
[View February 2026 Changelog](.github/changelogs/2026/02.md)
|
||||||
|
|
||||||
@@ -407,6 +410,57 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
## 2026-03-01
|
||||||
|
|
||||||
|
## 2026-02-28
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Update Reactive Resume install script with useful .env information for reverse proxy setup [@Mazianni](https://github.com/Mazianni) ([#12401](https://github.com/community-scripts/ProxmoxVE/pull/12401))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- gramps-web: install addons (FilterRules) for relationship diagram [@MickLesk](https://github.com/MickLesk) ([#12387](https://github.com/community-scripts/ProxmoxVE/pull/12387))
|
||||||
|
- [Fix] Immich: Change `sed` command to fully replace line in postgresql.conf [@vhsdream](https://github.com/vhsdream) ([#12429](https://github.com/community-scripts/ProxmoxVE/pull/12429))
|
||||||
|
- [FIX] Immich: fix Openvino memory leak during OCR; improve HW-accelerated ML performance [@vhsdream](https://github.com/vhsdream) ([#12426](https://github.com/community-scripts/ProxmoxVE/pull/12426))
|
||||||
|
- Fix default tag for ioBroker LXC install [@josefglatz](https://github.com/josefglatz) ([#12423](https://github.com/community-scripts/ProxmoxVE/pull/12423))
|
||||||
|
- Ombi: Add database.json [@hraphael](https://github.com/hraphael) ([#12412](https://github.com/community-scripts/ProxmoxVE/pull/12412))
|
||||||
|
- Dawarich: add missing build deps and handle seed failure [@MickLesk](https://github.com/MickLesk) ([#12410](https://github.com/community-scripts/ProxmoxVE/pull/12410))
|
||||||
|
- pangolin: increase hdd to 10G [@MickLesk](https://github.com/MickLesk) ([#12409](https://github.com/community-scripts/ProxmoxVE/pull/12409))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- BookLore: add additional JVM flags [@vhsdream](https://github.com/vhsdream) ([#12421](https://github.com/community-scripts/ProxmoxVE/pull/12421))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Delete Palmr [@vhsdream](https://github.com/vhsdream) ([#12399](https://github.com/community-scripts/ProxmoxVE/pull/12399))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- core: read from /dev/tty in all interactive prompts | fix empty or cropped logs due build process [@MickLesk](https://github.com/MickLesk) ([#12406](https://github.com/community-scripts/ProxmoxVE/pull/12406))
|
||||||
|
|
||||||
|
## 2026-02-27
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Strapi ([#12320](https://github.com/community-scripts/ProxmoxVE/pull/12320))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- TrueNAS VM: filter out new nightlies with MASTER [@juronja](https://github.com/juronja) ([#12355](https://github.com/community-scripts/ProxmoxVE/pull/12355))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: graceful fallback for apt-get update failures [@MickLesk](https://github.com/MickLesk) ([#12386](https://github.com/community-scripts/ProxmoxVE/pull/12386))
|
||||||
|
- core: Improve error outputs across core functions [@MickLesk](https://github.com/MickLesk) ([#12378](https://github.com/community-scripts/ProxmoxVE/pull/12378))
|
||||||
|
|
||||||
## 2026-02-26
|
## 2026-02-26
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
@@ -417,12 +471,28 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func: update glx alternatives / nvidia alternative if nvidia glx are missing [@MickLesk](https://github.com/MickLesk) ([#12372](https://github.com/community-scripts/ProxmoxVE/pull/12372))
|
||||||
- hotfix: overseer version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12366](https://github.com/community-scripts/ProxmoxVE/pull/12366))
|
- hotfix: overseer version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12366](https://github.com/community-scripts/ProxmoxVE/pull/12366))
|
||||||
|
|
||||||
- #### ✨ New Features
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Add ffmpeg for booklore (ffprobe) [@MickLesk](https://github.com/MickLesk) ([#12371](https://github.com/community-scripts/ProxmoxVE/pull/12371))
|
||||||
- [QOL] Immich: add warning regarding library compilation time [@vhsdream](https://github.com/vhsdream) ([#12345](https://github.com/community-scripts/ProxmoxVE/pull/12345))
|
- [QOL] Immich: add warning regarding library compilation time [@vhsdream](https://github.com/vhsdream) ([#12345](https://github.com/community-scripts/ProxmoxVE/pull/12345))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Improves adguardhome-sync addon when running on alpine LXCs [@Darkangeel-hd](https://github.com/Darkangeel-hd) ([#12362](https://github.com/community-scripts/ProxmoxVE/pull/12362))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Add Alpine support and improve Tailscale install [@MickLesk](https://github.com/MickLesk) ([#12370](https://github.com/community-scripts/ProxmoxVE/pull/12370))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- fix wrong link on contributions README.md [@Darkangeel-hd](https://github.com/Darkangeel-hd) ([#12363](https://github.com/community-scripts/ProxmoxVE/pull/12363))
|
||||||
|
|
||||||
### 📂 Github
|
### 📂 Github
|
||||||
|
|
||||||
- github: add workflow to autom. close unauthorized new-script PRs [@MickLesk](https://github.com/MickLesk) ([#12356](https://github.com/community-scripts/ProxmoxVE/pull/12356))
|
- github: add workflow to autom. close unauthorized new-script PRs [@MickLesk](https://github.com/MickLesk) ([#12356](https://github.com/community-scripts/ProxmoxVE/pull/12356))
|
||||||
@@ -1280,240 +1350,3 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
- [tools] Add `fetch_and_deploy_from_url()` [@tremor021](https://github.com/tremor021) ([#11376](https://github.com/community-scripts/ProxmoxVE/pull/11376))
|
- [tools] Add `fetch_and_deploy_from_url()` [@tremor021](https://github.com/tremor021) ([#11376](https://github.com/community-scripts/ProxmoxVE/pull/11376))
|
||||||
- core: php - improve module handling and prevent installation failures [@MickLesk](https://github.com/MickLesk) ([#11358](https://github.com/community-scripts/ProxmoxVE/pull/11358))
|
- core: php - improve module handling and prevent installation failures [@MickLesk](https://github.com/MickLesk) ([#11358](https://github.com/community-scripts/ProxmoxVE/pull/11358))
|
||||||
|
|
||||||
## 2026-01-29
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Alpine-Valkey [@MickLesk](https://github.com/MickLesk) ([#11320](https://github.com/community-scripts/ProxmoxVE/pull/11320))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Immich: Pin version to 2.5.2 [@vhsdream](https://github.com/vhsdream) ([#11335](https://github.com/community-scripts/ProxmoxVE/pull/11335))
|
|
||||||
- Kollection: Update to php 8.5 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11315](https://github.com/community-scripts/ProxmoxVE/pull/11315))
|
|
||||||
- Notifiarr: change installation check from apt to systemd service [@MickLesk](https://github.com/MickLesk) ([#11319](https://github.com/community-scripts/ProxmoxVE/pull/11319))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [FEAT] Immich: Enable Maintenance Mode before update [@vhsdream](https://github.com/vhsdream) ([#11342](https://github.com/community-scripts/ProxmoxVE/pull/11342))
|
|
||||||
- jellyfin: add logrotate instead of reducing log level [@MickLesk](https://github.com/MickLesk) ([#11326](https://github.com/community-scripts/ProxmoxVE/pull/11326))
|
|
||||||
- core: Add config file handling options | Fix Vikunja update with interactive overwrite [@MickLesk](https://github.com/MickLesk) ([#11317](https://github.com/community-scripts/ProxmoxVE/pull/11317))
|
|
||||||
- Immich: v2.5.0 [@vhsdream](https://github.com/vhsdream) ([#11240](https://github.com/community-scripts/ProxmoxVE/pull/11240))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- fix: vikunja v1 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11308](https://github.com/community-scripts/ProxmoxVE/pull/11308))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: Byparr [@vhsdream](https://github.com/vhsdream) ([#11338](https://github.com/community-scripts/ProxmoxVE/pull/11338))
|
|
||||||
- cloudflare: Remove deprecated DNS-over-HTTPS proxy option [@MickLesk](https://github.com/MickLesk) ([#11068](https://github.com/community-scripts/ProxmoxVE/pull/11068))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- build.func: Replace storage variable with searchdomain variable [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11322](https://github.com/community-scripts/ProxmoxVE/pull/11322))
|
|
||||||
|
|
||||||
### 📂 Github
|
|
||||||
|
|
||||||
- Add workflow to lock closed issues [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11316](https://github.com/community-scripts/ProxmoxVE/pull/11316))
|
|
||||||
|
|
||||||
## 2026-01-28
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- nodecast-tv ([#11287](https://github.com/community-scripts/ProxmoxVE/pull/11287))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Ubuntu 25.04 VM - Change default start from yes to no [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11292](https://github.com/community-scripts/ProxmoxVE/pull/11292))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- various scripts: use setup_meilisearch function [@MickLesk](https://github.com/MickLesk) ([#11259](https://github.com/community-scripts/ProxmoxVE/pull/11259))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: NPMPlus / Default Login [@MickLesk](https://github.com/MickLesk) ([#11262](https://github.com/community-scripts/ProxmoxVE/pull/11262))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core: sed patch for ram [@lavacano](https://github.com/lavacano) ([#11285](https://github.com/community-scripts/ProxmoxVE/pull/11285))
|
|
||||||
- Fix installer loop caused by invalid whiptail menu separator [@Mesteriis](https://github.com/Mesteriis) ([#11237](https://github.com/community-scripts/ProxmoxVE/pull/11237))
|
|
||||||
- core: fix Debian 13 LXC template root ownership bug [@MickLesk](https://github.com/MickLesk) ([#11277](https://github.com/community-scripts/ProxmoxVE/pull/11277))
|
|
||||||
- tools.func: prevent systemd-tmpfiles failure in unprivileged LXC during deb install [@MickLesk](https://github.com/MickLesk) ([#11271](https://github.com/community-scripts/ProxmoxVE/pull/11271))
|
|
||||||
- tools.func: fix php "wait_for" hint [@MickLesk](https://github.com/MickLesk) ([#11254](https://github.com/community-scripts/ProxmoxVE/pull/11254))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: update dynamic values in LXC profile on update_motd_ip [@MickLesk](https://github.com/MickLesk) ([#11268](https://github.com/community-scripts/ProxmoxVE/pull/11268))
|
|
||||||
- tools.func: add new function - setup_meilisearch [@MickLesk](https://github.com/MickLesk) ([#11258](https://github.com/community-scripts/ProxmoxVE/pull/11258))
|
|
||||||
|
|
||||||
### 📂 Github
|
|
||||||
|
|
||||||
- github: add GitHub-based versions.json updater [@MickLesk](https://github.com/MickLesk) ([#10021](https://github.com/community-scripts/ProxmoxVE/pull/10021))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Frontend: use github-versions.json for version display [@MickLesk](https://github.com/MickLesk) ([#11281](https://github.com/community-scripts/ProxmoxVE/pull/11281))
|
|
||||||
|
|
||||||
- #### 📝 Script Information
|
|
||||||
|
|
||||||
- fix: homarr: conf location [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11253](https://github.com/community-scripts/ProxmoxVE/pull/11253))
|
|
||||||
|
|
||||||
## 2026-01-27
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Immich: update libraw [@vhsdream](https://github.com/vhsdream) ([#11233](https://github.com/community-scripts/ProxmoxVE/pull/11233))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- grist: enable optional enterprise features toggle [@MickLesk](https://github.com/MickLesk) ([#11239](https://github.com/community-scripts/ProxmoxVE/pull/11239))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Termix: use nginx.conf from upstream repo [@MickLesk](https://github.com/MickLesk) ([#11228](https://github.com/community-scripts/ProxmoxVE/pull/11228))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- feat: add NVIDIA driver install prompt for GPU-enabled containers [@devdecrux](https://github.com/devdecrux) ([#11184](https://github.com/community-scripts/ProxmoxVE/pull/11184))
|
|
||||||
|
|
||||||
### 📚 Documentation
|
|
||||||
|
|
||||||
- doc setup_deb822_repo arg order [@chrnie](https://github.com/chrnie) ([#11215](https://github.com/community-scripts/ProxmoxVE/pull/11215))
|
|
||||||
- changelog: archive old entries to year/month files [@MickLesk](https://github.com/MickLesk) ([#11225](https://github.com/community-scripts/ProxmoxVE/pull/11225))
|
|
||||||
|
|
||||||
## 2026-01-26
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Ghost: Fix missing dependency [@tremor021](https://github.com/tremor021) ([#11196](https://github.com/community-scripts/ProxmoxVE/pull/11196))
|
|
||||||
- tracearr: fix install check and update node to version 24 [@durzo](https://github.com/durzo) ([#11188](https://github.com/community-scripts/ProxmoxVE/pull/11188))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- jotty: full refactor / prebuild package [@MickLesk](https://github.com/MickLesk) ([#11059](https://github.com/community-scripts/ProxmoxVE/pull/11059))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- Termix: Fixing Nginx configuration for 1.11.0 installs (read description for fix!) [@8b1th3r0](https://github.com/8b1th3r0) ([#11207](https://github.com/community-scripts/ProxmoxVE/pull/11207))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core: refine cleanup_lxc to safely clear caches [@MickLesk](https://github.com/MickLesk) ([#11197](https://github.com/community-scripts/ProxmoxVE/pull/11197))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: add nesting warning for systemd-based distributions [@MickLesk](https://github.com/MickLesk) ([#11208](https://github.com/community-scripts/ProxmoxVE/pull/11208))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- jellystat: correct WorkingDirectory to /backend [@MickLesk](https://github.com/MickLesk) ([#11201](https://github.com/community-scripts/ProxmoxVE/pull/11201))
|
|
||||||
|
|
||||||
## 2026-01-25
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- [FIX] Tautulli: ensure virtualenv is recreated during update; backup tautulli.db [@vhsdream](https://github.com/vhsdream) ([#11182](https://github.com/community-scripts/ProxmoxVE/pull/11182))
|
|
||||||
- [Fix] Pangolin: ensure additional JSON files are in place [@vhsdream](https://github.com/vhsdream) ([#11183](https://github.com/community-scripts/ProxmoxVE/pull/11183))
|
|
||||||
- Manyfold: fix permissions error [@vhsdream](https://github.com/vhsdream) ([#11165](https://github.com/community-scripts/ProxmoxVE/pull/11165))
|
|
||||||
- Termix: recreate nginx dirs and backup uploads on update [@MickLesk](https://github.com/MickLesk) ([#11169](https://github.com/community-scripts/ProxmoxVE/pull/11169))
|
|
||||||
- Deluge: correct service paths to /usr/local/bin [@MickLesk](https://github.com/MickLesk) ([#11170](https://github.com/community-scripts/ProxmoxVE/pull/11170))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Karakeep: Add the FFmpeg option to the installation script [@vonhyou](https://github.com/vonhyou) ([#11157](https://github.com/community-scripts/ProxmoxVE/pull/11157))
|
|
||||||
- apt-cacher-ng: add avahi-daemon for mDNS service discovery [@MickLesk](https://github.com/MickLesk) ([#11140](https://github.com/community-scripts/ProxmoxVE/pull/11140))
|
|
||||||
|
|
||||||
## 2026-01-24
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Manyfold ([#11143](https://github.com/community-scripts/ProxmoxVE/pull/11143))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- elementsynapse: correct parameter order in fetch_and_deploy_gh_release [@MickLesk](https://github.com/MickLesk) ([#11145](https://github.com/community-scripts/ProxmoxVE/pull/11145))
|
|
||||||
- leantime: fix backup file naming [@MickLesk](https://github.com/MickLesk) ([#11137](https://github.com/community-scripts/ProxmoxVE/pull/11137))
|
|
||||||
- [Hotfix] Element Synapse [@vhsdream](https://github.com/vhsdream) ([#11135](https://github.com/community-scripts/ProxmoxVE/pull/11135))
|
|
||||||
- authelia: use POSIX-safe arithmetic to avoid exit code 1 with set -e in subshells [@MickLesk](https://github.com/MickLesk) ([#11125](https://github.com/community-scripts/ProxmoxVE/pull/11125))
|
|
||||||
- Bitmagnet: PostgreSQL and environment variable fixes [@tremor021](https://github.com/tremor021) ([#11119](https://github.com/community-scripts/ProxmoxVE/pull/11119))
|
|
||||||
- Spoolman: move to uv [@vhsdream](https://github.com/vhsdream) ([#11121](https://github.com/community-scripts/ProxmoxVE/pull/11121))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- bump crafty-controller to debian 13 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11094](https://github.com/community-scripts/ProxmoxVE/pull/11094))
|
|
||||||
- Netbox: Refactor [@vhsdream](https://github.com/vhsdream) ([#11126](https://github.com/community-scripts/ProxmoxVE/pull/11126))
|
|
||||||
- Flatnotes: Standard enforcing [@tremor021](https://github.com/tremor021) ([#11109](https://github.com/community-scripts/ProxmoxVE/pull/11109))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- nvidia: use versioned nvidia-utils package for Ubuntu fallback [@MickLesk](https://github.com/MickLesk) ([#11139](https://github.com/community-scripts/ProxmoxVE/pull/11139))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### 📝 Script Information
|
|
||||||
|
|
||||||
- Byparr: Add config file path to website [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11120](https://github.com/community-scripts/ProxmoxVE/pull/11120))
|
|
||||||
|
|
||||||
## 2026-01-23
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Tracearr ([#11079](https://github.com/community-scripts/ProxmoxVE/pull/11079))
|
|
||||||
- Dawarich ([#11075](https://github.com/community-scripts/ProxmoxVE/pull/11075))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix: homarr: more ram [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11102](https://github.com/community-scripts/ProxmoxVE/pull/11102))
|
|
||||||
- plant-it: re-add JWT_SECRET [@MickLesk](https://github.com/MickLesk) ([#11098](https://github.com/community-scripts/ProxmoxVE/pull/11098))
|
|
||||||
- Tautulli: fix config backup and restore logic [@MickLesk](https://github.com/MickLesk) ([#11099](https://github.com/community-scripts/ProxmoxVE/pull/11099))
|
|
||||||
- Scanopy: remove integrated daemon script [@vhsdream](https://github.com/vhsdream) ([#11100](https://github.com/community-scripts/ProxmoxVE/pull/11100))
|
|
||||||
- fix: reitti start nginx [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11095](https://github.com/community-scripts/ProxmoxVE/pull/11095))
|
|
||||||
- add: uptime-kuma: chromium [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11081](https://github.com/community-scripts/ProxmoxVE/pull/11081))
|
|
||||||
- fix(install): Add typing_extensions to SearXNG Python dependencies [@ZarenOFF](https://github.com/ZarenOFF) ([#11074](https://github.com/community-scripts/ProxmoxVE/pull/11074))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Bump various scripts to Debian 13 (Trixie) [@MickLesk](https://github.com/MickLesk) ([#11093](https://github.com/community-scripts/ProxmoxVE/pull/11093))
|
|
||||||
- several scripts: bump default Alpine version to 3.23 [@MickLesk](https://github.com/MickLesk) ([#11082](https://github.com/community-scripts/ProxmoxVE/pull/11082))
|
|
||||||
- PDM: avoid installing useless package [@LongQT-sea](https://github.com/LongQT-sea) ([#10833](https://github.com/community-scripts/ProxmoxVE/pull/10833))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- FHEM: Bump to Debian 13 [@tremor021](https://github.com/tremor021) ([#11061](https://github.com/community-scripts/ProxmoxVE/pull/11061))
|
|
||||||
- Duplicati: Bump to Debian 13 [@tremor021](https://github.com/tremor021) ([#11060](https://github.com/community-scripts/ProxmoxVE/pull/11060))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: add IPv6 fallback support to get_current_ip functions | add check for SSH_KEYS_FILE in user_defaults [@MickLesk](https://github.com/MickLesk) ([#11067](https://github.com/community-scripts/ProxmoxVE/pull/11067))
|
|
||||||
@@ -34,6 +34,7 @@ function update_script() {
|
|||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
setup_yq
|
setup_yq
|
||||||
|
ensure_dependencies ffmpeg
|
||||||
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop booklore
|
systemctl stop booklore
|
||||||
@@ -90,7 +91,7 @@ function update_script() {
|
|||||||
echo "SERVER_PORT=6060" >>/opt/booklore_storage/.env
|
echo "SERVER_PORT=6060" >>/opt/booklore_storage/.env
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sed -i 's|ExecStart=/usr/bin/java -jar|ExecStart=/usr/bin/java -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompactObjectHeaders -jar|' /etc/systemd/system/booklore.service
|
sed -i 's|ExecStart=.*|ExecStart=/usr/bin/java -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompactObjectHeaders -XX:MaxRAMPercentage=75.0 -XX:+ExitOnOutOfMemoryError -jar /opt/booklore/dist/app.jar|' /etc/systemd/system/booklore.service
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
ensure_dependencies libgeos++-dev libxml2-dev libxslt-dev libjemalloc-dev
|
||||||
|
|
||||||
if check_for_gh_release "dawarich" "Freika/dawarich"; then
|
if check_for_gh_release "dawarich" "Freika/dawarich"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop dawarich-web dawarich-worker
|
systemctl stop dawarich-web dawarich-worker
|
||||||
|
|||||||
@@ -51,11 +51,23 @@ function update_script() {
|
|||||||
cd /opt/gramps-web-api
|
cd /opt/gramps-web-api
|
||||||
GRAMPS_API_CONFIG=/opt/gramps-web/config/config.cfg \
|
GRAMPS_API_CONFIG=/opt/gramps-web/config/config.cfg \
|
||||||
ALEMBIC_CONFIG=/opt/gramps-web-api/alembic.ini \
|
ALEMBIC_CONFIG=/opt/gramps-web-api/alembic.ini \
|
||||||
GRAMPSHOME=/opt/gramps-web/data/gramps \
|
GRAMPSHOME=/opt/gramps-web/data \
|
||||||
GRAMPS_DATABASE_PATH=/opt/gramps-web/data/gramps/grampsdb \
|
GRAMPS_DATABASE_PATH=/opt/gramps-web/data/gramps/grampsdb \
|
||||||
$STD /opt/gramps-web/venv/bin/python3 -m gramps_webapi user migrate
|
$STD /opt/gramps-web/venv/bin/python3 -m gramps_webapi user migrate
|
||||||
msg_ok "Applied Database Migration"
|
msg_ok "Applied Database Migration"
|
||||||
|
|
||||||
|
msg_info "Updating Gramps Addons"
|
||||||
|
GRAMPS_VERSION=$(/opt/gramps-web/venv/bin/python3 -c "import gramps.version; print('%s%s' % (gramps.version.VERSION_TUPLE[0], gramps.version.VERSION_TUPLE[1]))" 2>/dev/null || echo "60")
|
||||||
|
GRAMPS_PLUGINS_DIR="/opt/gramps-web/data/gramps/gramps${GRAMPS_VERSION}/plugins"
|
||||||
|
mkdir -p "$GRAMPS_PLUGINS_DIR"
|
||||||
|
$STD wget -q https://github.com/gramps-project/addons/archive/refs/heads/master.zip -O /tmp/gramps-addons.zip
|
||||||
|
for addon in FilterRules JSON; do
|
||||||
|
unzip -p /tmp/gramps-addons.zip "addons-master/gramps${GRAMPS_VERSION}/download/${addon}.addon.tgz" |
|
||||||
|
tar -xz -C "$GRAMPS_PLUGINS_DIR"
|
||||||
|
done
|
||||||
|
rm -f /tmp/gramps-addons.zip
|
||||||
|
msg_ok "Updated Gramps Addons"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start gramps-web
|
systemctl start gramps-web
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
____ __
|
|
||||||
/ __ \____ _/ /___ ___ _____
|
|
||||||
/ /_/ / __ `/ / __ `__ \/ ___/
|
|
||||||
/ ____/ /_/ / / / / / / / /
|
|
||||||
/_/ \__,_/_/_/ /_/ /_/_/
|
|
||||||
|
|
||||||
6
ct/headers/strapi
Normal file
6
ct/headers/strapi
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_____ __ _
|
||||||
|
/ ___// /__________ _____ (_)
|
||||||
|
\__ \/ __/ ___/ __ `/ __ \/ /
|
||||||
|
___/ / /_/ / / /_/ / /_/ / /
|
||||||
|
/____/\__/_/ \__,_/ .___/_/
|
||||||
|
/_/
|
||||||
10
ct/immich.sh
10
ct/immich.sh
@@ -72,9 +72,9 @@ EOF
|
|||||||
SOURCE_DIR=${STAGING_DIR}/image-source
|
SOURCE_DIR=${STAGING_DIR}/image-source
|
||||||
cd /tmp
|
cd /tmp
|
||||||
if [[ -f ~/.intel_version ]]; then
|
if [[ -f ~/.intel_version ]]; then
|
||||||
curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/Dockerfile
|
curl -fsSLO https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/machine-learning/Dockerfile
|
||||||
readarray -t INTEL_URLS < <(
|
readarray -t INTEL_URLS < <(
|
||||||
sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $2}'
|
sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $3}'
|
||||||
sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}'
|
sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}'
|
||||||
)
|
)
|
||||||
INTEL_RELEASE="$(grep "intel-opencl-icd_" ./Dockerfile | awk -F '_' '{print $2}')"
|
INTEL_RELEASE="$(grep "intel-opencl-icd_" ./Dockerfile | awk -F '_' '{print $2}')"
|
||||||
@@ -214,9 +214,9 @@ EOF
|
|||||||
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
||||||
if [[ -f ~/.openvino ]]; then
|
if [[ -f ~/.openvino ]]; then
|
||||||
msg_info "Updating HW-accelerated machine-learning"
|
msg_info "Updating HW-accelerated machine-learning"
|
||||||
$STD uv add --no-sync --optional openvino onnxruntime-openvino==1.20.0 --active -n -p python3.12 --managed-python
|
$STD uv add --no-sync --optional openvino onnxruntime-openvino==1.24.1 --active -n -p python3.13 --managed-python
|
||||||
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p python3.12 --managed-python
|
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p python3.13 --managed-python
|
||||||
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.12/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-312-x86_64-linux-gnu.so"
|
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.13/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-313-x86_64-linux-gnu.so"
|
||||||
msg_ok "Updated HW-accelerated machine-learning"
|
msg_ok "Updated HW-accelerated machine-learning"
|
||||||
else
|
else
|
||||||
msg_info "Updating machine-learning"
|
msg_info "Updating machine-learning"
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
# Source: https://www.iobroker.net/#en/intro | Github: https://github.com/ioBroker/ioBroker.js-controller
|
# Source: https://www.iobroker.net/#en/intro | Github: https://github.com/ioBroker/ioBroker.js-controller
|
||||||
|
|
||||||
APP="ioBroker"
|
APP="ioBroker"
|
||||||
var_tags="${var_tags:-automtation}"
|
var_tags="${var_tags:-automation}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-8}"
|
var_disk="${var_disk:-8}"
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ function update_script() {
|
|||||||
[[ -f /opt/ombi/Ombi.db ]] && mv /opt/ombi/Ombi.db /opt
|
[[ -f /opt/ombi/Ombi.db ]] && mv /opt/ombi/Ombi.db /opt
|
||||||
[[ -f /opt/ombi/OmbiExternal.db ]] && mv /opt/ombi/OmbiExternal.db /opt
|
[[ -f /opt/ombi/OmbiExternal.db ]] && mv /opt/ombi/OmbiExternal.db /opt
|
||||||
[[ -f /opt/ombi/OmbiSettings.db ]] && mv /opt/ombi/OmbiSettings.db /opt
|
[[ -f /opt/ombi/OmbiSettings.db ]] && mv /opt/ombi/OmbiSettings.db /opt
|
||||||
|
[[ -f /opt/ombi/database.json ]] && mv /opt/ombi/database.json /opt
|
||||||
msg_ok "Backup created"
|
msg_ok "Backup created"
|
||||||
|
|
||||||
rm -rf /opt/ombi
|
rm -rf /opt/ombi
|
||||||
@@ -43,6 +44,7 @@ function update_script() {
|
|||||||
[[ -f /opt/Ombi.db ]] && mv /opt/Ombi.db /opt/ombi
|
[[ -f /opt/Ombi.db ]] && mv /opt/Ombi.db /opt/ombi
|
||||||
[[ -f /opt/OmbiExternal.db ]] && mv /opt/OmbiExternal.db /opt/ombi
|
[[ -f /opt/OmbiExternal.db ]] && mv /opt/OmbiExternal.db /opt/ombi
|
||||||
[[ -f /opt/OmbiSettings.db ]] && mv /opt/OmbiSettings.db /opt/ombi
|
[[ -f /opt/OmbiSettings.db ]] && mv /opt/OmbiSettings.db /opt/ombi
|
||||||
|
[[ -f /opt/database.json ]] && mv /opt/database.json /opt/ombi
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start ombi
|
systemctl start ombi
|
||||||
|
|||||||
75
ct/palmr.sh
75
ct/palmr.sh
@@ -1,75 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: vhsdream
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/kyantech/Palmr
|
|
||||||
|
|
||||||
APP="Palmr"
|
|
||||||
var_tags="${var_tags:-files}"
|
|
||||||
var_cpu="${var_cpu:-4}"
|
|
||||||
var_ram="${var_ram:-6144}"
|
|
||||||
var_disk="${var_disk:-6}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /opt/palmr_data ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
if check_for_gh_release "palmr" "kyantech/Palmr"; then
|
|
||||||
msg_info "Stopping Services"
|
|
||||||
systemctl stop palmr-frontend palmr-backend
|
|
||||||
msg_ok "Stopped Services"
|
|
||||||
|
|
||||||
cp /opt/palmr/apps/server/.env /opt/palmr.env
|
|
||||||
rm -rf /opt/palmr
|
|
||||||
fetch_and_deploy_gh_release "Palmr" "kyantech/Palmr" "tarball" "latest" "/opt/palmr"
|
|
||||||
|
|
||||||
PNPM="$(jq -r '.packageManager' /opt/palmr/package.json)"
|
|
||||||
NODE_VERSION="24" NODE_MODULE="$PNPM" setup_nodejs
|
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
|
||||||
cd /opt/palmr/apps/server
|
|
||||||
mv /opt/palmr.env /opt/palmr/apps/server/.env
|
|
||||||
$STD pnpm install
|
|
||||||
$STD npx prisma generate
|
|
||||||
$STD npx prisma migrate deploy
|
|
||||||
$STD npx prisma db push
|
|
||||||
$STD pnpm build
|
|
||||||
|
|
||||||
cd /opt/palmr/apps/web
|
|
||||||
export NODE_ENV=production
|
|
||||||
export NEXT_TELEMETRY_DISABLED=1
|
|
||||||
mv ./.env.example ./.env
|
|
||||||
$STD pnpm install
|
|
||||||
$STD pnpm build
|
|
||||||
chown -R palmr:palmr /opt/palmr_data /opt/palmr
|
|
||||||
msg_ok "Updated ${APP}"
|
|
||||||
|
|
||||||
msg_info "Starting Services"
|
|
||||||
systemctl start palmr-backend palmr-frontend
|
|
||||||
msg_ok "Started Services"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
|
||||||
@@ -9,7 +9,7 @@ APP="Pangolin"
|
|||||||
var_tags="${var_tags:-proxy}"
|
var_tags="${var_tags:-proxy}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-4096}"
|
var_ram="${var_ram:-4096}"
|
||||||
var_disk="${var_disk:-5}"
|
var_disk="${var_disk:-10}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
@@ -29,6 +29,8 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
ensure_dependencies build-essential python3
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
if check_for_gh_release "pangolin" "fosrl/pangolin"; then
|
if check_for_gh_release "pangolin" "fosrl/pangolin"; then
|
||||||
|
|||||||
61
ct/strapi.sh
Executable file
61
ct/strapi.sh
Executable file
@@ -0,0 +1,61 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: pespinel
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://strapi.io/
|
||||||
|
|
||||||
|
APP="Strapi"
|
||||||
|
var_tags="${var_tags:-cms}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -f /etc/systemd/system/strapi.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
|
msg_info "Stopping Strapi"
|
||||||
|
systemctl stop strapi
|
||||||
|
msg_ok "Stopped Strapi"
|
||||||
|
|
||||||
|
msg_info "Updating Strapi"
|
||||||
|
cd /opt/strapi
|
||||||
|
$STD npx @strapi/upgrade minor --yes
|
||||||
|
msg_ok "Updated Strapi"
|
||||||
|
|
||||||
|
msg_info "Building Strapi"
|
||||||
|
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||||
|
$STD npm run build
|
||||||
|
msg_ok "Built Strapi"
|
||||||
|
|
||||||
|
msg_info "Starting Strapi"
|
||||||
|
systemctl start strapi
|
||||||
|
msg_ok "Started Strapi"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:1337${CL}"
|
||||||
@@ -175,7 +175,7 @@ All scripts and configurations must follow our coding standards to ensure consis
|
|||||||
### Available Guides
|
### Available Guides
|
||||||
|
|
||||||
- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Essential coding standards and best practices
|
- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Essential coding standards and best practices
|
||||||
- **[CODE_AUDIT.md](CODE_AUDIT.md)** - Code review checklist and audit procedures
|
- **[CODE-AUDIT.md](CODE-AUDIT.md)** - Code review checklist and audit procedures
|
||||||
- **[GUIDE.md](GUIDE.md)** - Comprehensive contribution guide
|
- **[GUIDE.md](GUIDE.md)** - Comprehensive contribution guide
|
||||||
- **[HELPER_FUNCTIONS.md](HELPER_FUNCTIONS.md)** - Reference for all tools.func helper functions
|
- **[HELPER_FUNCTIONS.md](HELPER_FUNCTIONS.md)** - Reference for all tools.func helper functions
|
||||||
- **Container Scripts** - `/ct/` templates and guidelines
|
- **Container Scripts** - `/ct/` templates and guidelines
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"generated": "2026-02-26T18:16:20Z",
|
"generated": "2026-03-01T18:07:06Z",
|
||||||
"versions": [
|
"versions": [
|
||||||
{
|
{
|
||||||
"slug": "2fauth",
|
"slug": "2fauth",
|
||||||
@@ -18,9 +18,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "adguardhome-sync",
|
"slug": "adguardhome-sync",
|
||||||
"repo": "bakito/adguardhome-sync",
|
"repo": "bakito/adguardhome-sync",
|
||||||
"version": "v0.8.2",
|
"version": "v0.9.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-10-24T17:13:47Z"
|
"date": "2026-02-27T18:37:37Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "adventurelog",
|
"slug": "adventurelog",
|
||||||
@@ -116,9 +116,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "bentopdf",
|
"slug": "bentopdf",
|
||||||
"repo": "alam00000/bentopdf",
|
"repo": "alam00000/bentopdf",
|
||||||
"version": "v2.3.1",
|
"version": "v2.4.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-21T09:04:27Z"
|
"date": "2026-03-01T14:25:43Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "beszel",
|
"slug": "beszel",
|
||||||
@@ -144,23 +144,23 @@
|
|||||||
{
|
{
|
||||||
"slug": "blocky",
|
"slug": "blocky",
|
||||||
"repo": "0xERR0R/blocky",
|
"repo": "0xERR0R/blocky",
|
||||||
"version": "v0.28.2",
|
"version": "v0.29.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-11-18T05:51:46Z"
|
"date": "2026-02-27T15:48:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "booklore",
|
"slug": "booklore",
|
||||||
"repo": "booklore-app/BookLore",
|
"repo": "booklore-app/BookLore",
|
||||||
"version": "v2.0.2",
|
"version": "v2.0.5",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-25T19:59:20Z"
|
"date": "2026-03-01T16:13:13Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "bookstack",
|
"slug": "bookstack",
|
||||||
"repo": "BookStackApp/BookStack",
|
"repo": "BookStackApp/BookStack",
|
||||||
"version": "v25.12.7",
|
"version": "v25.12.8",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-19T23:36:55Z"
|
"date": "2026-02-27T10:33:14Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "byparr",
|
"slug": "byparr",
|
||||||
@@ -200,9 +200,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "cleanuparr",
|
"slug": "cleanuparr",
|
||||||
"repo": "Cleanuparr/Cleanuparr",
|
"repo": "Cleanuparr/Cleanuparr",
|
||||||
"version": "v2.7.5",
|
"version": "v2.7.6",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-24T17:11:50Z"
|
"date": "2026-02-27T19:32:02Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "cloudreve",
|
"slug": "cloudreve",
|
||||||
@@ -214,9 +214,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "comfyui",
|
"slug": "comfyui",
|
||||||
"repo": "comfyanonymous/ComfyUI",
|
"repo": "comfyanonymous/ComfyUI",
|
||||||
"version": "v0.15.0",
|
"version": "v0.15.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-24T20:56:09Z"
|
"date": "2026-02-26T22:01:35Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "commafeed",
|
"slug": "commafeed",
|
||||||
@@ -242,9 +242,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "cosmos",
|
"slug": "cosmos",
|
||||||
"repo": "azukaar/Cosmos-Server",
|
"repo": "azukaar/Cosmos-Server",
|
||||||
"version": "v0.21.2",
|
"version": "v0.21.6",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-26T11:32:33Z"
|
"date": "2026-02-28T22:00:49Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "cronicle",
|
"slug": "cronicle",
|
||||||
@@ -270,16 +270,16 @@
|
|||||||
{
|
{
|
||||||
"slug": "databasus",
|
"slug": "databasus",
|
||||||
"repo": "databasus/databasus",
|
"repo": "databasus/databasus",
|
||||||
"version": "v3.16.3",
|
"version": "v3.16.4",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-25T19:57:26Z"
|
"date": "2026-03-01T08:20:17Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "dawarich",
|
"slug": "dawarich",
|
||||||
"repo": "Freika/dawarich",
|
"repo": "Freika/dawarich",
|
||||||
"version": "1.3.0",
|
"version": "1.3.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-25T19:30:25Z"
|
"date": "2026-02-27T19:47:40Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "discopanel",
|
"slug": "discopanel",
|
||||||
@@ -291,9 +291,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "dispatcharr",
|
"slug": "dispatcharr",
|
||||||
"repo": "Dispatcharr/Dispatcharr",
|
"repo": "Dispatcharr/Dispatcharr",
|
||||||
"version": "v0.19.0",
|
"version": "v0.20.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-10T21:18:10Z"
|
"date": "2026-02-26T21:38:19Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "docmost",
|
"slug": "docmost",
|
||||||
@@ -361,9 +361,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "endurain",
|
"slug": "endurain",
|
||||||
"repo": "endurain-project/endurain",
|
"repo": "endurain-project/endurain",
|
||||||
"version": "v0.17.5",
|
"version": "v0.17.6",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-24T14:51:03Z"
|
"date": "2026-02-27T23:08:50Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "ersatztv",
|
"slug": "ersatztv",
|
||||||
@@ -382,9 +382,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "firefly",
|
"slug": "firefly",
|
||||||
"repo": "firefly-iii/firefly-iii",
|
"repo": "firefly-iii/firefly-iii",
|
||||||
"version": "v6.5.0",
|
"version": "v6.5.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-23T19:19:00Z"
|
"date": "2026-02-27T20:55:55Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "fladder",
|
"slug": "fladder",
|
||||||
@@ -438,9 +438,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "ghostfolio",
|
"slug": "ghostfolio",
|
||||||
"repo": "ghostfolio/ghostfolio",
|
"repo": "ghostfolio/ghostfolio",
|
||||||
"version": "2.243.0",
|
"version": "2.245.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-23T19:31:36Z"
|
"date": "2026-03-01T09:09:57Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "gitea",
|
"slug": "gitea",
|
||||||
@@ -452,9 +452,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "gitea-mirror",
|
"slug": "gitea-mirror",
|
||||||
"repo": "RayLabsHQ/gitea-mirror",
|
"repo": "RayLabsHQ/gitea-mirror",
|
||||||
"version": "v3.9.5",
|
"version": "v3.10.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-26T05:32:12Z"
|
"date": "2026-03-01T03:08:07Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "glance",
|
"slug": "glance",
|
||||||
@@ -480,9 +480,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "gotify",
|
"slug": "gotify",
|
||||||
"repo": "gotify/server",
|
"repo": "gotify/server",
|
||||||
"version": "v2.9.0",
|
"version": "v2.9.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-13T15:22:31Z"
|
"date": "2026-02-28T19:07:07Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "gramps-web",
|
"slug": "gramps-web",
|
||||||
@@ -494,9 +494,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "grist",
|
"slug": "grist",
|
||||||
"repo": "gristlabs/grist-core",
|
"repo": "gristlabs/grist-core",
|
||||||
"version": "v1.7.10",
|
"version": "v1.7.11",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-12T20:50:50Z"
|
"date": "2026-02-27T17:13:50Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "grocy",
|
"slug": "grocy",
|
||||||
@@ -550,9 +550,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "homarr",
|
"slug": "homarr",
|
||||||
"repo": "homarr-labs/homarr",
|
"repo": "homarr-labs/homarr",
|
||||||
"version": "v1.53.2",
|
"version": "v1.54.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-20T19:41:55Z"
|
"date": "2026-02-27T19:38:50Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "homebox",
|
"slug": "homebox",
|
||||||
@@ -606,16 +606,16 @@
|
|||||||
{
|
{
|
||||||
"slug": "invoiceninja",
|
"slug": "invoiceninja",
|
||||||
"repo": "invoiceninja/invoiceninja",
|
"repo": "invoiceninja/invoiceninja",
|
||||||
"version": "v5.12.68",
|
"version": "v5.12.69",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-25T19:38:19Z"
|
"date": "2026-02-26T22:23:32Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "jackett",
|
"slug": "jackett",
|
||||||
"repo": "Jackett/Jackett",
|
"repo": "Jackett/Jackett",
|
||||||
"version": "v0.24.1218",
|
"version": "v0.24.1234",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-26T05:55:11Z"
|
"date": "2026-03-01T05:55:44Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "jellystat",
|
"slug": "jellystat",
|
||||||
@@ -669,16 +669,16 @@
|
|||||||
{
|
{
|
||||||
"slug": "kima-hub",
|
"slug": "kima-hub",
|
||||||
"repo": "Chevron7Locked/kima-hub",
|
"repo": "Chevron7Locked/kima-hub",
|
||||||
"version": "v1.5.7",
|
"version": "v1.6.0-rc.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-23T23:58:59Z"
|
"date": "2026-03-01T05:38:32Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "kimai",
|
"slug": "kimai",
|
||||||
"repo": "kimai/kimai",
|
"repo": "kimai/kimai",
|
||||||
"version": "2.50.0",
|
"version": "2.51.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-25T20:13:51Z"
|
"date": "2026-03-01T15:56:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "kitchenowl",
|
"slug": "kitchenowl",
|
||||||
@@ -718,9 +718,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "kubo",
|
"slug": "kubo",
|
||||||
"repo": "ipfs/kubo",
|
"repo": "ipfs/kubo",
|
||||||
"version": "v0.40.0",
|
"version": "v0.40.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-25T23:16:17Z"
|
"date": "2026-02-27T17:58:22Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "kutt",
|
"slug": "kutt",
|
||||||
@@ -795,9 +795,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "lubelogger",
|
"slug": "lubelogger",
|
||||||
"repo": "hargata/lubelog",
|
"repo": "hargata/lubelog",
|
||||||
"version": "v1.6.0",
|
"version": "v1.6.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-10T20:16:32Z"
|
"date": "2026-02-26T20:01:24Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "mafl",
|
"slug": "mafl",
|
||||||
@@ -851,9 +851,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "mediamtx",
|
"slug": "mediamtx",
|
||||||
"repo": "bluenviron/mediamtx",
|
"repo": "bluenviron/mediamtx",
|
||||||
"version": "v1.16.2",
|
"version": "v1.16.3",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-22T17:31:41Z"
|
"date": "2026-03-01T15:49:12Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "meilisearch",
|
"slug": "meilisearch",
|
||||||
@@ -872,9 +872,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "metube",
|
"slug": "metube",
|
||||||
"repo": "alexta69/metube",
|
"repo": "alexta69/metube",
|
||||||
"version": "2026.02.22",
|
"version": "2026.02.27",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-22T00:58:45Z"
|
"date": "2026-02-27T11:47:02Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "miniflux",
|
"slug": "miniflux",
|
||||||
@@ -942,9 +942,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "nightscout",
|
"slug": "nightscout",
|
||||||
"repo": "nightscout/cgm-remote-monitor",
|
"repo": "nightscout/cgm-remote-monitor",
|
||||||
"version": "15.0.3",
|
"version": "15.0.4",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-05-08T22:12:34Z"
|
"date": "2026-02-28T17:07:02Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "nocodb",
|
"slug": "nocodb",
|
||||||
@@ -956,9 +956,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "nodebb",
|
"slug": "nodebb",
|
||||||
"repo": "NodeBB/NodeBB",
|
"repo": "NodeBB/NodeBB",
|
||||||
"version": "v4.8.1",
|
"version": "v4.9.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-28T14:19:11Z"
|
"date": "2026-02-27T19:20:51Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "nodecast-tv",
|
"slug": "nodecast-tv",
|
||||||
@@ -1037,19 +1037,12 @@
|
|||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-02-24T19:47:06Z"
|
"date": "2025-02-24T19:47:06Z"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"slug": "palmr",
|
|
||||||
"repo": "kyantech/Palmr",
|
|
||||||
"version": "v3.3.2-beta",
|
|
||||||
"pinned": false,
|
|
||||||
"date": "2025-12-10T05:42:43Z"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"slug": "pangolin",
|
"slug": "pangolin",
|
||||||
"repo": "fosrl/pangolin",
|
"repo": "fosrl/pangolin",
|
||||||
"version": "1.15.4",
|
"version": "1.16.2",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-13T23:01:29Z"
|
"date": "2026-02-28T20:35:52Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "paperless-ai",
|
"slug": "paperless-ai",
|
||||||
@@ -1068,9 +1061,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "paperless-ngx",
|
"slug": "paperless-ngx",
|
||||||
"repo": "paperless-ngx/paperless-ngx",
|
"repo": "paperless-ngx/paperless-ngx",
|
||||||
"version": "v2.20.8",
|
"version": "v2.20.9",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-22T01:40:54Z"
|
"date": "2026-02-28T10:17:35Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "patchmon",
|
"slug": "patchmon",
|
||||||
@@ -1131,9 +1124,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "planka",
|
"slug": "planka",
|
||||||
"repo": "plankanban/planka",
|
"repo": "plankanban/planka",
|
||||||
"version": "v2.0.2",
|
"version": "v2.0.3",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-23T17:47:15Z"
|
"date": "2026-03-01T16:03:23Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "plant-it",
|
"slug": "plant-it",
|
||||||
@@ -1222,9 +1215,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "pulse",
|
"slug": "pulse",
|
||||||
"repo": "rcourtman/Pulse",
|
"repo": "rcourtman/Pulse",
|
||||||
"version": "v5.1.14",
|
"version": "v5.1.15",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-25T00:11:58Z"
|
"date": "2026-02-27T15:17:24Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "pve-scripts-local",
|
"slug": "pve-scripts-local",
|
||||||
@@ -1348,9 +1341,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "scanopy",
|
"slug": "scanopy",
|
||||||
"repo": "scanopy/scanopy",
|
"repo": "scanopy/scanopy",
|
||||||
"version": "v0.14.8",
|
"version": "v0.14.10",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-24T16:45:30Z"
|
"date": "2026-02-28T21:05:12Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "scraparr",
|
"slug": "scraparr",
|
||||||
@@ -1376,16 +1369,16 @@
|
|||||||
{
|
{
|
||||||
"slug": "seerr",
|
"slug": "seerr",
|
||||||
"repo": "seerr-team/seerr",
|
"repo": "seerr-team/seerr",
|
||||||
"version": "v3.0.1",
|
"version": "v3.1.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-14T19:30:24Z"
|
"date": "2026-02-27T17:25:29Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "semaphore",
|
"slug": "semaphore",
|
||||||
"repo": "semaphoreui/semaphore",
|
"repo": "semaphoreui/semaphore",
|
||||||
"version": "v2.17.14",
|
"version": "v2.17.15",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-24T14:27:03Z"
|
"date": "2026-02-28T09:04:40Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "shelfmark",
|
"slug": "shelfmark",
|
||||||
@@ -1411,9 +1404,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "slskd",
|
"slug": "slskd",
|
||||||
"repo": "slskd/slskd",
|
"repo": "slskd/slskd",
|
||||||
"version": "0.24.4",
|
"version": "0.24.5",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-16T16:50:17Z"
|
"date": "2026-03-01T04:00:42Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "snipeit",
|
"slug": "snipeit",
|
||||||
@@ -1488,9 +1481,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "sure",
|
"slug": "sure",
|
||||||
"repo": "we-promise/sure",
|
"repo": "we-promise/sure",
|
||||||
"version": "chart-v0.6.8-alpha.13",
|
"version": "v0.6.8",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-20T11:15:15Z"
|
"date": "2026-02-28T12:55:36Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "tandoor",
|
"slug": "tandoor",
|
||||||
@@ -1558,16 +1551,16 @@
|
|||||||
{
|
{
|
||||||
"slug": "traccar",
|
"slug": "traccar",
|
||||||
"repo": "traccar/traccar",
|
"repo": "traccar/traccar",
|
||||||
"version": "v6.12.1",
|
"version": "v6.12.2",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-22T18:47:37Z"
|
"date": "2026-02-27T15:08:36Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "tracearr",
|
"slug": "tracearr",
|
||||||
"repo": "connorgallopo/Tracearr",
|
"repo": "connorgallopo/Tracearr",
|
||||||
"version": "v1.4.18",
|
"version": "v1.4.19",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-15T19:55:40Z"
|
"date": "2026-02-28T21:25:47Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "tracktor",
|
"slug": "tracktor",
|
||||||
@@ -1607,9 +1600,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "tunarr",
|
"slug": "tunarr",
|
||||||
"repo": "chrisbenincasa/tunarr",
|
"repo": "chrisbenincasa/tunarr",
|
||||||
"version": "v1.1.17",
|
"version": "v1.1.18",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-25T19:56:36Z"
|
"date": "2026-02-26T22:09:44Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "uhf",
|
"slug": "uhf",
|
||||||
@@ -1670,9 +1663,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "vikunja",
|
"slug": "vikunja",
|
||||||
"repo": "go-vikunja/vikunja",
|
"repo": "go-vikunja/vikunja",
|
||||||
"version": "v2.0.0",
|
"version": "v2.1.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-25T13:58:47Z"
|
"date": "2026-02-27T14:26:53Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "wallabag",
|
"slug": "wallabag",
|
||||||
@@ -1796,9 +1789,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "zigbee2mqtt",
|
"slug": "zigbee2mqtt",
|
||||||
"repo": "Koenkk/zigbee2mqtt",
|
"repo": "Koenkk/zigbee2mqtt",
|
||||||
"version": "2.8.0",
|
"version": "2.9.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-01T19:27:25Z"
|
"date": "2026-03-01T13:58:14Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "zipline",
|
"slug": "zipline",
|
||||||
@@ -1817,9 +1810,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "zoraxy",
|
"slug": "zoraxy",
|
||||||
"repo": "tobychui/zoraxy",
|
"repo": "tobychui/zoraxy",
|
||||||
"version": "v3.3.2-rc1",
|
"version": "v3.3.2-rc2",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-15T02:16:17Z"
|
"date": "2026-02-27T03:31:25Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "zwave-js-ui",
|
"slug": "zwave-js-ui",
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Palmr",
|
|
||||||
"slug": "palmr",
|
|
||||||
"categories": [
|
|
||||||
11
|
|
||||||
],
|
|
||||||
"date_created": "2025-08-08",
|
|
||||||
"type": "ct",
|
|
||||||
"updateable": true,
|
|
||||||
"privileged": false,
|
|
||||||
"interface_port": 3000,
|
|
||||||
"disable": true,
|
|
||||||
"documentation": "https://palmr.kyantech.com.br/docs/3.1-beta",
|
|
||||||
"config_path": "/opt/palmr/apps/server/.env, /opt/palmr/apps/web/.env",
|
|
||||||
"website": "https://palmr.kyantech.com.br/",
|
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/palmr.webp",
|
|
||||||
"description": "Palmr is a fast and secure platform for sharing files, built with performance and privacy in mind.",
|
|
||||||
"install_methods": [
|
|
||||||
{
|
|
||||||
"type": "default",
|
|
||||||
"script": "ct/palmr.sh",
|
|
||||||
"resources": {
|
|
||||||
"cpu": 4,
|
|
||||||
"ram": 6144,
|
|
||||||
"hdd": 6,
|
|
||||||
"os": "Debian",
|
|
||||||
"version": "13"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"default_credentials": {
|
|
||||||
"username": null,
|
|
||||||
"password": null
|
|
||||||
},
|
|
||||||
"notes": [
|
|
||||||
{
|
|
||||||
"text": "To use a bind mount for storage, create symlinks to your mount for both `uploads` and `temp-uploads` in `/opt/palmr_data`, and uncomment `CUSTOM_PATH` to add the path to your bind mount",
|
|
||||||
"type": "info"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "To use Palmr with a reverse proxy, uncomment `SECURE_SITE` in `/opt/palmr/apps/server/.env`",
|
|
||||||
"type": "info"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 4096,
|
"ram": 4096,
|
||||||
"hdd": 5,
|
"hdd": 10,
|
||||||
"os": "Debian",
|
"os": "Debian",
|
||||||
"version": "13"
|
"version": "13"
|
||||||
}
|
}
|
||||||
|
|||||||
48
frontend/public/json/strapi.json
Normal file
48
frontend/public/json/strapi.json
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"name": "Strapi",
|
||||||
|
"slug": "strapi",
|
||||||
|
"categories": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"date_created": "2026-02-27",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 1337,
|
||||||
|
"documentation": "https://docs.strapi.io/",
|
||||||
|
"website": "https://strapi.io/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/strapi.webp",
|
||||||
|
"config_path": "/opt/strapi/.env",
|
||||||
|
"description": "Strapi is a leading open-source headless CMS that enables developers to build powerful APIs quickly. It features a flexible content structure with customizable content types, supporting both REST and GraphQL APIs. The intuitive admin panel allows non-technical users to manage content easily, while developers can extend functionality through plugins. Built on Node.js, Strapi offers role-based access control, media library management, and internationalization support out of the box.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/strapi.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 4096,
|
||||||
|
"hdd": 8,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "First-time setup requires creating an admin account at http://IP:1337/admin",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Default installation uses SQLite. For production use, consider configuring PostgreSQL or MySQL.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Building the admin panel requires 4GB RAM. Container may take 10-15 minutes to fully initialize.",
|
||||||
|
"type": "warning"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -13,6 +13,10 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y ffmpeg
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
JAVA_VERSION="25" setup_java
|
JAVA_VERSION="25" setup_java
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
@@ -70,7 +74,7 @@ After=network.target mariadb.service
|
|||||||
Type=simple
|
Type=simple
|
||||||
User=root
|
User=root
|
||||||
WorkingDirectory=/opt/booklore/dist
|
WorkingDirectory=/opt/booklore/dist
|
||||||
ExecStart=/usr/bin/java -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompactObjectHeaders -jar /opt/booklore/dist/app.jar
|
ExecStart=/usr/bin/java -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompactObjectHeaders -XX:MaxRAMPercentage=75.0 -XX:+ExitOnOutOfMemoryError -jar /opt/booklore/dist/app.jar
|
||||||
EnvironmentFile=/opt/booklore_storage/.env
|
EnvironmentFile=/opt/booklore_storage/.env
|
||||||
SuccessExitStatus=143
|
SuccessExitStatus=143
|
||||||
TimeoutStopSec=10
|
TimeoutStopSec=10
|
||||||
|
|||||||
@@ -16,19 +16,23 @@ update_os
|
|||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y \
|
$STD apt install -y \
|
||||||
build-essential \
|
build-essential \
|
||||||
git \
|
|
||||||
libpq-dev \
|
|
||||||
libgeos-dev \
|
|
||||||
libyaml-dev \
|
|
||||||
libffi-dev \
|
|
||||||
libssl-dev \
|
|
||||||
libjemalloc2 \
|
|
||||||
imagemagick \
|
|
||||||
libmagickwand-dev \
|
|
||||||
libvips-dev \
|
|
||||||
cmake \
|
cmake \
|
||||||
redis-server \
|
git \
|
||||||
nginx
|
imagemagick \
|
||||||
|
libffi-dev \
|
||||||
|
libgeos-dev \
|
||||||
|
libgeos++-dev \
|
||||||
|
libjemalloc2 \
|
||||||
|
libjemalloc-dev \
|
||||||
|
libmagickwand-dev \
|
||||||
|
libpq-dev \
|
||||||
|
libssl-dev \
|
||||||
|
libvips-dev \
|
||||||
|
libxml2-dev \
|
||||||
|
libxslt-dev \
|
||||||
|
libyaml-dev \
|
||||||
|
nginx \
|
||||||
|
redis-server
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PG_VERSION="17" PG_MODULES="postgis-3" setup_postgresql
|
PG_VERSION="17" PG_MODULES="postgis-3" setup_postgresql
|
||||||
@@ -82,7 +86,8 @@ elif [[ -f /opt/dawarich/app/package.json ]]; then
|
|||||||
$STD npm install
|
$STD npm install
|
||||||
fi
|
fi
|
||||||
$STD bundle exec rake assets:precompile
|
$STD bundle exec rake assets:precompile
|
||||||
$STD bundle exec rails db:prepare
|
$STD bundle exec rails db:schema:load
|
||||||
|
$STD bundle exec rails db:seed || msg_warn "Database seed failed (upstream rgeo-geojson issue), app will still work"
|
||||||
$STD bundle exec rake data:migrate
|
$STD bundle exec rake data:migrate
|
||||||
msg_ok "Installed Dawarich"
|
msg_ok "Installed Dawarich"
|
||||||
|
|
||||||
|
|||||||
@@ -76,6 +76,20 @@ source /opt/gramps-web/venv/bin/activate
|
|||||||
$STD uv pip install --no-cache-dir --upgrade pip setuptools wheel
|
$STD uv pip install --no-cache-dir --upgrade pip setuptools wheel
|
||||||
$STD uv pip install --no-cache-dir gunicorn
|
$STD uv pip install --no-cache-dir gunicorn
|
||||||
$STD uv pip install --no-cache-dir /opt/gramps-web-api
|
$STD uv pip install --no-cache-dir /opt/gramps-web-api
|
||||||
|
|
||||||
|
GRAMPS_VERSION=$(/opt/gramps-web/venv/bin/python3 -c "import gramps.version; print('%s%s' % (gramps.version.VERSION_TUPLE[0], gramps.version.VERSION_TUPLE[1]))" 2>/dev/null || echo "60")
|
||||||
|
GRAMPS_PLUGINS_DIR="/opt/gramps-web/data/gramps/gramps${GRAMPS_VERSION}/plugins"
|
||||||
|
mkdir -p "$GRAMPS_PLUGINS_DIR"
|
||||||
|
|
||||||
|
msg_info "Installing Gramps Addons (gramps${GRAMPS_VERSION})"
|
||||||
|
$STD wget -q https://github.com/gramps-project/addons/archive/refs/heads/master.zip -O /tmp/gramps-addons.zip
|
||||||
|
for addon in FilterRules JSON; do
|
||||||
|
unzip -p /tmp/gramps-addons.zip "addons-master/gramps${GRAMPS_VERSION}/download/${addon}.addon.tgz" | \
|
||||||
|
tar -xz -C "$GRAMPS_PLUGINS_DIR"
|
||||||
|
done
|
||||||
|
rm -f /tmp/gramps-addons.zip
|
||||||
|
msg_ok "Installed Gramps Addons"
|
||||||
|
|
||||||
cd /opt/gramps-web/frontend
|
cd /opt/gramps-web/frontend
|
||||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||||
$STD corepack enable
|
$STD corepack enable
|
||||||
@@ -84,7 +98,7 @@ $STD npm run build
|
|||||||
cd /opt/gramps-web-api
|
cd /opt/gramps-web-api
|
||||||
GRAMPS_API_CONFIG=/opt/gramps-web/config/config.cfg \
|
GRAMPS_API_CONFIG=/opt/gramps-web/config/config.cfg \
|
||||||
ALEMBIC_CONFIG=/opt/gramps-web-api/alembic.ini \
|
ALEMBIC_CONFIG=/opt/gramps-web-api/alembic.ini \
|
||||||
GRAMPSHOME=/opt/gramps-web/data/gramps \
|
GRAMPSHOME=/opt/gramps-web/data \
|
||||||
GRAMPS_DATABASE_PATH=/opt/gramps-web/data/gramps/grampsdb \
|
GRAMPS_DATABASE_PATH=/opt/gramps-web/data/gramps/grampsdb \
|
||||||
$STD /opt/gramps-web/venv/bin/python3 -m gramps_webapi user migrate
|
$STD /opt/gramps-web/venv/bin/python3 -m gramps_webapi user migrate
|
||||||
msg_ok "Set up Gramps Web"
|
msg_ok "Set up Gramps Web"
|
||||||
@@ -100,7 +114,7 @@ Type=simple
|
|||||||
User=root
|
User=root
|
||||||
WorkingDirectory=/opt/gramps-web-api
|
WorkingDirectory=/opt/gramps-web-api
|
||||||
Environment=GRAMPS_API_CONFIG=/opt/gramps-web/config/config.cfg
|
Environment=GRAMPS_API_CONFIG=/opt/gramps-web/config/config.cfg
|
||||||
Environment=GRAMPSHOME=/opt/gramps-web/data/gramps
|
Environment=GRAMPSHOME=/opt/gramps-web/data
|
||||||
Environment=GRAMPS_DATABASE_PATH=/opt/gramps-web/data/gramps/grampsdb
|
Environment=GRAMPS_DATABASE_PATH=/opt/gramps-web/data/gramps/grampsdb
|
||||||
Environment=PATH=/opt/gramps-web/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
Environment=PATH=/opt/gramps-web/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
ExecStart=/opt/gramps-web/venv/bin/gunicorn -w 2 -b 0.0.0.0:5000 gramps_webapi.wsgi:app --timeout 120 --limit-request-line 8190
|
ExecStart=/opt/gramps-web/venv/bin/gunicorn -w 2 -b 0.0.0.0:5000 gramps_webapi.wsgi:app --timeout 120 --limit-request-line 8190
|
||||||
|
|||||||
@@ -32,9 +32,9 @@ if [ -d /dev/dri ]; then
|
|||||||
$STD apt install -y --no-install-recommends patchelf
|
$STD apt install -y --no-install-recommends patchelf
|
||||||
tmp_dir=$(mktemp -d)
|
tmp_dir=$(mktemp -d)
|
||||||
$STD pushd "$tmp_dir"
|
$STD pushd "$tmp_dir"
|
||||||
curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/Dockerfile
|
curl -fsSLO https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/machine-learning/Dockerfile
|
||||||
readarray -t INTEL_URLS < <(
|
readarray -t INTEL_URLS < <(
|
||||||
sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $2}'
|
sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $3}'
|
||||||
sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}'
|
sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}'
|
||||||
)
|
)
|
||||||
for url in "${INTEL_URLS[@]}"; do
|
for url in "${INTEL_URLS[@]}"; do
|
||||||
@@ -150,7 +150,7 @@ PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
|
|||||||
VCHORD_RELEASE="0.5.3"
|
VCHORD_RELEASE="0.5.3"
|
||||||
fetch_and_deploy_gh_release "VectorChord" "tensorchord/VectorChord" "binary" "${VCHORD_RELEASE}" "/tmp" "postgresql-16-vchord_*_amd64.deb"
|
fetch_and_deploy_gh_release "VectorChord" "tensorchord/VectorChord" "binary" "${VCHORD_RELEASE}" "/tmp" "postgresql-16-vchord_*_amd64.deb"
|
||||||
|
|
||||||
sed -i -e "/^#shared_preload/s/^#//;/^shared_preload/s/''/'vchord.so'/" /etc/postgresql/16/main/postgresql.conf
|
sed -i "s/^#shared_preload.*/shared_preload_libraries = 'vchord.so'/" /etc/postgresql/16/main/postgresql.conf
|
||||||
systemctl restart postgresql.service
|
systemctl restart postgresql.service
|
||||||
PG_DB_NAME="immich" PG_DB_USER="immich" PG_DB_GRANT_SUPERUSER="true" PG_DB_SKIP_ALTER_ROLE="true" setup_postgresql_db
|
PG_DB_NAME="immich" PG_DB_USER="immich" PG_DB_GRANT_SUPERUSER="true" PG_DB_SKIP_ALTER_ROLE="true" setup_postgresql_db
|
||||||
|
|
||||||
@@ -342,9 +342,9 @@ mkdir -p "$ML_DIR" && chown -R immich:immich "$INSTALL_DIR"
|
|||||||
export VIRTUAL_ENV="${ML_DIR}/ml-venv"
|
export VIRTUAL_ENV="${ML_DIR}/ml-venv"
|
||||||
if [[ -f ~/.openvino ]]; then
|
if [[ -f ~/.openvino ]]; then
|
||||||
msg_info "Installing HW-accelerated machine-learning"
|
msg_info "Installing HW-accelerated machine-learning"
|
||||||
$STD uv add --no-sync --optional openvino onnxruntime-openvino==1.20.0 --active -n -p python3.12 --managed-python
|
$STD uv add --no-sync --optional openvino onnxruntime-openvino==1.24.1 --active -n -p python3.13 --managed-python
|
||||||
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p python3.12 --managed-python
|
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p python3.13 --managed-python
|
||||||
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.12/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-312-x86_64-linux-gnu.so"
|
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.13/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-313-x86_64-linux-gnu.so"
|
||||||
msg_ok "Installed HW-accelerated machine-learning"
|
msg_ok "Installed HW-accelerated machine-learning"
|
||||||
else
|
else
|
||||||
msg_info "Installing machine-learning"
|
msg_info "Installing machine-learning"
|
||||||
|
|||||||
@@ -1,91 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: vhsdream
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/kyantech/Palmr
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "Palmr" "kyantech/Palmr" "tarball" "latest" "/opt/palmr"
|
|
||||||
PNPM="$(jq -r '.packageManager' /opt/palmr/package.json)"
|
|
||||||
NODE_VERSION="24" NODE_MODULE="$PNPM" setup_nodejs
|
|
||||||
|
|
||||||
msg_info "Configuring palmr backend"
|
|
||||||
PALMR_DIR="/opt/palmr_data"
|
|
||||||
mkdir -p "$PALMR_DIR"
|
|
||||||
PALMR_DB="${PALMR_DIR}/palmr.db"
|
|
||||||
PALMR_KEY="$(openssl rand -hex 32)"
|
|
||||||
cd /opt/palmr/apps/server
|
|
||||||
sed -e 's/_ENCRYPTION=true/_ENCRYPTION=false/' \
|
|
||||||
-e '/^# ENC/s/# //' \
|
|
||||||
-e "s/ENCRYPTION_KEY=.*$/ENCRYPTION_KEY=$PALMR_KEY/" \
|
|
||||||
-e "s|file:.*$|file:$PALMR_DB\"|" \
|
|
||||||
-e "\|db\"$|a\\# Uncomment below when using a reverse proxy\\
|
|
||||||
# SECURE_SITE=true\\
|
|
||||||
# Uncomment and add your path if using symlinks for data storage\\
|
|
||||||
# CUSTOM_PATH=<path-to-your-bind-mount>" \
|
|
||||||
.env.example >./.env
|
|
||||||
$STD pnpm install
|
|
||||||
$STD npx prisma generate
|
|
||||||
$STD npx prisma migrate deploy
|
|
||||||
$STD npx prisma db push
|
|
||||||
$STD pnpm db:seed
|
|
||||||
$STD pnpm build
|
|
||||||
msg_ok "Configured palmr backend"
|
|
||||||
|
|
||||||
msg_info "Configuring palmr frontend"
|
|
||||||
cd /opt/palmr/apps/web
|
|
||||||
mv ./.env.example ./.env
|
|
||||||
export NODE_ENV=production
|
|
||||||
export NEXT_TELEMETRY_DISABLED=1
|
|
||||||
$STD pnpm install
|
|
||||||
$STD pnpm build
|
|
||||||
msg_ok "Configured palmr frontend"
|
|
||||||
|
|
||||||
msg_info "Creating service"
|
|
||||||
useradd -d "$PALMR_DIR" -M -s /usr/sbin/nologin -U palmr
|
|
||||||
chown -R palmr:palmr "$PALMR_DIR" /opt/palmr
|
|
||||||
cat <<EOF >/etc/systemd/system/palmr-backend.service
|
|
||||||
[Unit]
|
|
||||||
Description=palmr Backend Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=palmr
|
|
||||||
Group=palmr
|
|
||||||
WorkingDirectory=/opt/palmr_data
|
|
||||||
ExecStart=/usr/bin/node /opt/palmr/apps/server/dist/server.js
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/palmr-frontend.service
|
|
||||||
[Unit]
|
|
||||||
Description=palmr Frontend Service
|
|
||||||
After=network.target palmr-backend.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=palmr
|
|
||||||
Group=palmr
|
|
||||||
WorkingDirectory=/opt/palmr/apps/web
|
|
||||||
ExecStart=/usr/bin/pnpm start
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now palmr-backend palmr-frontend
|
|
||||||
msg_ok "Created service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
cleanup_lxc
|
|
||||||
@@ -15,6 +15,8 @@ update_os
|
|||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y \
|
$STD apt install -y \
|
||||||
|
build-essential \
|
||||||
|
python3 \
|
||||||
sqlite3 \
|
sqlite3 \
|
||||||
iptables
|
iptables
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|||||||
@@ -69,6 +69,10 @@ cat <<EOF >/opt/Reactive-Resume/.env
|
|||||||
NODE_ENV=production
|
NODE_ENV=production
|
||||||
PORT=3000
|
PORT=3000
|
||||||
# for use behind a reverse proxy, use your FQDN for PUBLIC_URL and STORAGE_URL
|
# for use behind a reverse proxy, use your FQDN for PUBLIC_URL and STORAGE_URL
|
||||||
|
# To avoid issues when behind a reverse proxy with downloading PDFs, ensure that the
|
||||||
|
# storage path is accessible via a subdomain (i.e storage.yourapp.xyz) or you set your
|
||||||
|
# reverse proxy to properly rewrite the subpath (/rxresume) to point to the service
|
||||||
|
# running on port 9000 (minio).
|
||||||
PUBLIC_URL=http://${LOCAL_IP}:3000
|
PUBLIC_URL=http://${LOCAL_IP}:3000
|
||||||
STORAGE_URL=http://${LOCAL_IP}:9000/rxresume
|
STORAGE_URL=http://${LOCAL_IP}:9000/rxresume
|
||||||
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}?schema=public
|
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}?schema=public
|
||||||
|
|||||||
69
install/strapi-install.sh
Executable file
69
install/strapi-install.sh
Executable file
@@ -0,0 +1,69 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: pespinel
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://strapi.io/
|
||||||
|
|
||||||
|
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 \
|
||||||
|
python3 \
|
||||||
|
python3-setuptools \
|
||||||
|
libvips42
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
|
msg_info "Installing Strapi (Patience)"
|
||||||
|
mkdir -p /opt/strapi
|
||||||
|
cd /opt/strapi
|
||||||
|
$STD npx --yes create-strapi-app@latest . --quickstart --no-run --skip-cloud
|
||||||
|
msg_ok "Installed Strapi"
|
||||||
|
|
||||||
|
msg_info "Building Strapi"
|
||||||
|
cd /opt/strapi
|
||||||
|
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||||
|
$STD npm run build
|
||||||
|
msg_ok "Built Strapi"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/opt/strapi/.env
|
||||||
|
HOST=0.0.0.0
|
||||||
|
PORT=1337
|
||||||
|
APP_KEYS=$(openssl rand -base64 32)
|
||||||
|
API_TOKEN_SALT=$(openssl rand -base64 32)
|
||||||
|
ADMIN_JWT_SECRET=$(openssl rand -base64 32)
|
||||||
|
TRANSFER_TOKEN_SALT=$(openssl rand -base64 32)
|
||||||
|
JWT_SECRET=$(openssl rand -base64 32)
|
||||||
|
EOF
|
||||||
|
cat <<EOF >/etc/systemd/system/strapi.service
|
||||||
|
[Unit]
|
||||||
|
Description=Strapi CMS
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/opt/strapi
|
||||||
|
EnvironmentFile=/opt/strapi/.env
|
||||||
|
ExecStart=/usr/bin/npm run start
|
||||||
|
Restart=on-failure
|
||||||
|
Environment=NODE_ENV=production
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now strapi
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
201
misc/build.func
201
misc/build.func
@@ -3132,7 +3132,7 @@ check_container_resources() {
|
|||||||
msg_warn "Under-provisioned: Required ${var_cpu} CPU/${var_ram}MB RAM, Current ${current_cpu} CPU/${current_ram}MB RAM"
|
msg_warn "Under-provisioned: Required ${var_cpu} CPU/${var_ram}MB RAM, Current ${current_cpu} CPU/${current_ram}MB RAM"
|
||||||
echo -e "${YWB}Please ensure that the ${APP} LXC is configured with at least ${var_cpu} vCPU and ${var_ram} MB RAM for the build process.${CL}\n"
|
echo -e "${YWB}Please ensure that the ${APP} LXC is configured with at least ${var_cpu} vCPU and ${var_ram} MB RAM for the build process.${CL}\n"
|
||||||
echo -ne "${INFO}${HOLD} May cause data loss! ${INFO} Continue update with under-provisioned LXC? <yes/No> "
|
echo -ne "${INFO}${HOLD} May cause data loss! ${INFO} Continue update with under-provisioned LXC? <yes/No> "
|
||||||
read -r prompt
|
read -r prompt </dev/tty
|
||||||
if [[ ! ${prompt,,} =~ ^(yes)$ ]]; then
|
if [[ ! ${prompt,,} =~ ^(yes)$ ]]; then
|
||||||
msg_error "Aborted: under-provisioned LXC (${current_cpu} CPU/${current_ram}MB RAM < ${var_cpu} CPU/${var_ram}MB RAM)"
|
msg_error "Aborted: under-provisioned LXC (${current_cpu} CPU/${current_ram}MB RAM < ${var_cpu} CPU/${var_ram}MB RAM)"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -3155,7 +3155,7 @@ check_container_storage() {
|
|||||||
if ((usage > 80)); then
|
if ((usage > 80)); then
|
||||||
msg_warn "Storage is dangerously low (${usage}% used on /boot)"
|
msg_warn "Storage is dangerously low (${usage}% used on /boot)"
|
||||||
echo -ne "Continue anyway? <y/N> "
|
echo -ne "Continue anyway? <y/N> "
|
||||||
read -r prompt
|
read -r prompt </dev/tty
|
||||||
if [[ ! ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ! ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_error "Aborted: storage too low (${usage}% used)"
|
msg_error "Aborted: storage too low (${usage}% used)"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -3707,10 +3707,18 @@ $PCT_OPTIONS_STRING"
|
|||||||
NVIDIA_DEVICES=()
|
NVIDIA_DEVICES=()
|
||||||
|
|
||||||
# Store PCI info to avoid multiple calls
|
# Store PCI info to avoid multiple calls
|
||||||
local pci_vga_info=$(lspci -nn 2>/dev/null | grep -E "VGA|Display|3D")
|
# grep returns exit 1 when no match — use || true to prevent ERR trap
|
||||||
|
local pci_vga_info
|
||||||
|
pci_vga_info=$(lspci -nn 2>/dev/null | grep -E "VGA|Display|3D" || true)
|
||||||
|
|
||||||
|
# No GPU-related PCI devices at all? Skip silently.
|
||||||
|
if [[ -z "$pci_vga_info" ]]; then
|
||||||
|
msg_debug "No VGA/Display/3D PCI devices found"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
# Check for Intel GPU - look for Intel vendor ID [8086]
|
# Check for Intel GPU - look for Intel vendor ID [8086]
|
||||||
if echo "$pci_vga_info" | grep -q "\[8086:"; then
|
if grep -q "\[8086:" <<<"$pci_vga_info"; then
|
||||||
msg_custom "🎮" "${BL}" "Detected Intel GPU"
|
msg_custom "🎮" "${BL}" "Detected Intel GPU"
|
||||||
if [[ -d /dev/dri ]]; then
|
if [[ -d /dev/dri ]]; then
|
||||||
for d in /dev/dri/renderD* /dev/dri/card*; do
|
for d in /dev/dri/renderD* /dev/dri/card*; do
|
||||||
@@ -3720,7 +3728,7 @@ $PCT_OPTIONS_STRING"
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Check for AMD GPU - look for AMD vendor IDs [1002] (AMD/ATI) or [1022] (AMD)
|
# Check for AMD GPU - look for AMD vendor IDs [1002] (AMD/ATI) or [1022] (AMD)
|
||||||
if echo "$pci_vga_info" | grep -qE "\[1002:|\[1022:"; then
|
if grep -qE "\[1002:|\[1022:" <<<"$pci_vga_info"; then
|
||||||
msg_custom "🎮" "${RD}" "Detected AMD GPU"
|
msg_custom "🎮" "${RD}" "Detected AMD GPU"
|
||||||
if [[ -d /dev/dri ]]; then
|
if [[ -d /dev/dri ]]; then
|
||||||
# Only add if not already claimed by Intel
|
# Only add if not already claimed by Intel
|
||||||
@@ -3733,7 +3741,7 @@ $PCT_OPTIONS_STRING"
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Check for NVIDIA GPU - look for NVIDIA vendor ID [10de]
|
# Check for NVIDIA GPU - look for NVIDIA vendor ID [10de]
|
||||||
if echo "$pci_vga_info" | grep -q "\[10de:"; then
|
if grep -q "\[10de:" <<<"$pci_vga_info"; then
|
||||||
msg_custom "🎮" "${GN}" "Detected NVIDIA GPU"
|
msg_custom "🎮" "${GN}" "Detected NVIDIA GPU"
|
||||||
|
|
||||||
# Simple passthrough - just bind /dev/nvidia* devices if they exist
|
# Simple passthrough - just bind /dev/nvidia* devices if they exist
|
||||||
@@ -3834,7 +3842,7 @@ EOF
|
|||||||
for gpu in "${available_gpus[@]}"; do
|
for gpu in "${available_gpus[@]}"; do
|
||||||
echo " - $gpu"
|
echo " - $gpu"
|
||||||
done
|
done
|
||||||
read -rp "Which GPU type to passthrough? (${available_gpus[*]}): " selected_gpu
|
read -rp "Which GPU type to passthrough? (${available_gpus[*]}): " selected_gpu </dev/tty
|
||||||
selected_gpu="${selected_gpu^^}"
|
selected_gpu="${selected_gpu^^}"
|
||||||
|
|
||||||
# Validate selection
|
# Validate selection
|
||||||
@@ -4012,6 +4020,16 @@ EOF
|
|||||||
# install_gpu_userland "NVIDIA"
|
# install_gpu_userland "NVIDIA"
|
||||||
# fi
|
# fi
|
||||||
|
|
||||||
|
# Disable error trap for entire customization & install phase.
|
||||||
|
# All errors are handled explicitly — recovery menu shown on failure.
|
||||||
|
# Without this, customization errors (e.g. container stopped during base package
|
||||||
|
# install) would trigger error_handler() with a simple "Remove broken container?"
|
||||||
|
# prompt instead of the full recovery menu with retry/repair options.
|
||||||
|
set +Eeuo pipefail
|
||||||
|
trap - ERR
|
||||||
|
|
||||||
|
local install_exit_code=0
|
||||||
|
|
||||||
# Continue with standard container setup
|
# Continue with standard container setup
|
||||||
if [ "$var_os" == "alpine" ]; then
|
if [ "$var_os" == "alpine" ]; then
|
||||||
sleep 3
|
sleep 3
|
||||||
@@ -4019,9 +4037,9 @@ EOF
|
|||||||
http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
|
http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
|
||||||
http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
|
http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
|
||||||
EOF'
|
EOF'
|
||||||
pct exec "$CTID" -- ash -c "apk add bash newt curl openssh nano mc ncurses jq >/dev/null" || {
|
pct exec "$CTID" -- ash -c "apk add bash newt curl openssh nano mc ncurses jq" >>"$BUILD_LOG" 2>&1 || {
|
||||||
msg_error "Failed to install base packages in Alpine container"
|
msg_error "Failed to install base packages in Alpine container"
|
||||||
exit 1
|
install_exit_code=1
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
sleep 3
|
sleep 3
|
||||||
@@ -4045,69 +4063,69 @@ EOF'
|
|||||||
msg_warn "Skipping timezone setup – zone '$tz' not found in container"
|
msg_warn "Skipping timezone setup – zone '$tz' not found in container"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pct exec "$CTID" -- bash -c "apt-get update >/dev/null && apt-get install -y sudo curl mc gnupg2 jq >/dev/null" || {
|
pct exec "$CTID" -- bash -c "apt-get update 2>&1 && apt-get install -y sudo curl mc gnupg2 jq 2>&1" >>"$BUILD_LOG" 2>&1 || {
|
||||||
msg_error "apt-get base packages installation failed"
|
msg_error "apt-get base packages installation failed"
|
||||||
exit 1
|
install_exit_code=1
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_ok "Customized LXC Container"
|
# Only continue with installation if customization succeeded
|
||||||
|
if [[ $install_exit_code -eq 0 ]]; then
|
||||||
|
msg_ok "Customized LXC Container"
|
||||||
|
|
||||||
# Optional DNS override for retry scenarios (inside LXC, never on host)
|
# Optional DNS override for retry scenarios (inside LXC, never on host)
|
||||||
if [[ "${DNS_RETRY_OVERRIDE:-false}" == "true" ]]; then
|
if [[ "${DNS_RETRY_OVERRIDE:-false}" == "true" ]]; then
|
||||||
msg_info "Applying DNS retry override in LXC (8.8.8.8, 1.1.1.1)"
|
msg_info "Applying DNS retry override in LXC (8.8.8.8, 1.1.1.1)"
|
||||||
pct exec "$CTID" -- bash -c "printf 'nameserver 8.8.8.8\nnameserver 1.1.1.1\n' >/etc/resolv.conf" >/dev/null 2>&1 || true
|
pct exec "$CTID" -- bash -c "printf 'nameserver 8.8.8.8\nnameserver 1.1.1.1\n' >/etc/resolv.conf" >/dev/null 2>&1 || true
|
||||||
msg_ok "DNS override applied in LXC"
|
msg_ok "DNS override applied in LXC"
|
||||||
fi
|
|
||||||
|
|
||||||
# Install SSH keys
|
|
||||||
install_ssh_keys_into_ct
|
|
||||||
|
|
||||||
# Start timer for duration tracking
|
|
||||||
start_install_timer
|
|
||||||
|
|
||||||
# Run application installer
|
|
||||||
# Disable error trap - container errors are handled internally via flag file
|
|
||||||
set +Eeuo pipefail # Disable ALL error handling temporarily
|
|
||||||
trap - ERR # Remove ERR trap completely
|
|
||||||
|
|
||||||
# Signal handlers use this flag to stop the container on abort (SIGHUP/SIGINT/SIGTERM)
|
|
||||||
# Without this, SSH disconnects leave the container running as an orphan process
|
|
||||||
# that sends "configuring" status AFTER the host already reported "failed"
|
|
||||||
export CONTAINER_INSTALLING=true
|
|
||||||
|
|
||||||
# Capture lxc-attach terminal output to host-side log via tee.
|
|
||||||
# This is the ONLY reliable way to get install output when:
|
|
||||||
# - install.func fails to load (DNS error) → no container-side logging
|
|
||||||
# - install script crashes before logging starts
|
|
||||||
# - $STD/silent() not used for some commands
|
|
||||||
# PIPESTATUS[0] gets the real exit code from lxc-attach (not from tee).
|
|
||||||
local _LXC_CAPTURE_LOG="/tmp/.install-capture-${SESSION_ID}.log"
|
|
||||||
lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)" 2>&1 | tee "$_LXC_CAPTURE_LOG"
|
|
||||||
local lxc_exit=${PIPESTATUS[0]}
|
|
||||||
|
|
||||||
unset CONTAINER_INSTALLING
|
|
||||||
|
|
||||||
# Keep error handling DISABLED during failure detection and recovery
|
|
||||||
# Re-enabling it here would cause any pct exec/pull failure to trigger
|
|
||||||
# error_handler() on the host, bypassing the recovery menu entirely
|
|
||||||
|
|
||||||
# Check for error flag file in container (more reliable than lxc-attach exit code)
|
|
||||||
local install_exit_code=0
|
|
||||||
if [[ -n "${SESSION_ID:-}" ]]; then
|
|
||||||
local error_flag="/root/.install-${SESSION_ID}.failed"
|
|
||||||
if pct exec "$CTID" -- test -f "$error_flag" 2>/dev/null; then
|
|
||||||
install_exit_code=$(pct exec "$CTID" -- cat "$error_flag" 2>/dev/null || echo "1")
|
|
||||||
pct exec "$CTID" -- rm -f "$error_flag" 2>/dev/null || true
|
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
# Fallback to lxc-attach exit code if no flag file
|
# Install SSH keys
|
||||||
if [[ $install_exit_code -eq 0 && $lxc_exit -ne 0 ]]; then
|
install_ssh_keys_into_ct
|
||||||
install_exit_code=$lxc_exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Installation failed?
|
# Start timer for duration tracking
|
||||||
|
start_install_timer
|
||||||
|
|
||||||
|
# Run application installer
|
||||||
|
# Error handling already disabled above (before customization phase)
|
||||||
|
|
||||||
|
# Signal handlers use this flag to stop the container on abort (SIGHUP/SIGINT/SIGTERM)
|
||||||
|
# Without this, SSH disconnects leave the container running as an orphan process
|
||||||
|
# that sends "configuring" status AFTER the host already reported "failed"
|
||||||
|
export CONTAINER_INSTALLING=true
|
||||||
|
|
||||||
|
# Capture lxc-attach terminal output to host-side log via tee.
|
||||||
|
# This is the ONLY reliable way to get install output when:
|
||||||
|
# - install.func fails to load (DNS error) → no container-side logging
|
||||||
|
# - install script crashes before logging starts
|
||||||
|
# - $STD/silent() not used for some commands
|
||||||
|
# PIPESTATUS[0] gets the real exit code from lxc-attach (not from tee).
|
||||||
|
local _LXC_CAPTURE_LOG="/tmp/.install-capture-${SESSION_ID}.log"
|
||||||
|
lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)" 2>&1 | tee "$_LXC_CAPTURE_LOG"
|
||||||
|
local lxc_exit=${PIPESTATUS[0]}
|
||||||
|
|
||||||
|
unset CONTAINER_INSTALLING
|
||||||
|
|
||||||
|
# Keep error handling DISABLED during failure detection and recovery
|
||||||
|
# Re-enabling it here would cause any pct exec/pull failure to trigger
|
||||||
|
# error_handler() on the host, bypassing the recovery menu entirely
|
||||||
|
|
||||||
|
# Check for error flag file in container (more reliable than lxc-attach exit code)
|
||||||
|
if [[ -n "${SESSION_ID:-}" ]]; then
|
||||||
|
local error_flag="/root/.install-${SESSION_ID}.failed"
|
||||||
|
if pct exec "$CTID" -- test -f "$error_flag" 2>/dev/null; then
|
||||||
|
install_exit_code=$(pct exec "$CTID" -- cat "$error_flag" 2>/dev/null || echo "1")
|
||||||
|
pct exec "$CTID" -- rm -f "$error_flag" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Fallback to lxc-attach exit code if no flag file
|
||||||
|
if [[ $install_exit_code -eq 0 && ${lxc_exit:-0} -ne 0 ]]; then
|
||||||
|
install_exit_code=${lxc_exit:-0}
|
||||||
|
fi
|
||||||
|
fi # end: if [[ $install_exit_code -eq 0 ]] (customization succeeded)
|
||||||
|
|
||||||
|
# Installation or customization failed?
|
||||||
if [[ $install_exit_code -ne 0 ]]; then
|
if [[ $install_exit_code -ne 0 ]]; then
|
||||||
# Prevent job-control signals from suspending the script during recovery.
|
# Prevent job-control signals from suspending the script during recovery.
|
||||||
# In non-interactive shells (bash -c), background processes (spinner) can
|
# In non-interactive shells (bash -c), background processes (spinner) can
|
||||||
@@ -4219,7 +4237,7 @@ EOF'
|
|||||||
pct enter "$CTID"
|
pct enter "$CTID"
|
||||||
echo ""
|
echo ""
|
||||||
echo -en "${YW}Container ${CTID} still running. Remove now? (y/N): ${CL}"
|
echo -en "${YW}Container ${CTID} still running. Remove now? (y/N): ${CL}"
|
||||||
if read -r response && [[ "$response" =~ ^[Yy]$ ]]; then
|
if read -r response </dev/tty && [[ "$response" =~ ^[Yy]$ ]]; then
|
||||||
pct stop "$CTID" &>/dev/null || true
|
pct stop "$CTID" &>/dev/null || true
|
||||||
pct destroy "$CTID" &>/dev/null || true
|
pct destroy "$CTID" &>/dev/null || true
|
||||||
msg_ok "Container ${CTID} removed"
|
msg_ok "Container ${CTID} removed"
|
||||||
@@ -4369,7 +4387,7 @@ EOF'
|
|||||||
echo ""
|
echo ""
|
||||||
echo -en "${YW}Select option [1-${max_option}] (default: 1, auto-remove in 60s): ${CL}"
|
echo -en "${YW}Select option [1-${max_option}] (default: 1, auto-remove in 60s): ${CL}"
|
||||||
|
|
||||||
if read -t 60 -r response; then
|
if read -t 60 -r response </dev/tty; then
|
||||||
case "${response:-1}" in
|
case "${response:-1}" in
|
||||||
1)
|
1)
|
||||||
# Remove container
|
# Remove container
|
||||||
@@ -4586,7 +4604,7 @@ destroy_lxc() {
|
|||||||
trap 'echo; msg_error "Aborted by user (SIGINT/SIGQUIT)"; return 130' INT QUIT
|
trap 'echo; msg_error "Aborted by user (SIGINT/SIGQUIT)"; return 130' INT QUIT
|
||||||
|
|
||||||
local prompt
|
local prompt
|
||||||
if ! read -rp "Remove this Container? <y/N> " prompt; then
|
if ! read -rp "Remove this Container? <y/N> " prompt </dev/tty; then
|
||||||
# read returns non-zero on Ctrl-D/ESC
|
# read returns non-zero on Ctrl-D/ESC
|
||||||
msg_error "Aborted input (Ctrl-D/ESC)"
|
msg_error "Aborted input (Ctrl-D/ESC)"
|
||||||
return 130
|
return 130
|
||||||
@@ -4923,11 +4941,12 @@ create_lxc_container() {
|
|||||||
echo " pve-container: installed=${_pvec_i:-n/a} candidate=${_pvec_c:-n/a}"
|
echo " pve-container: installed=${_pvec_i:-n/a} candidate=${_pvec_c:-n/a}"
|
||||||
echo " lxc-pve : installed=${_lxcp_i:-n/a} candidate=${_lxcp_c:-n/a}"
|
echo " lxc-pve : installed=${_lxcp_i:-n/a} candidate=${_lxcp_c:-n/a}"
|
||||||
echo
|
echo
|
||||||
read -rp "Do you want to upgrade now? [y/N] " _ans
|
read -rp "Do you want to upgrade now? [y/N] " _ans </dev/tty
|
||||||
case "${_ans,,}" in
|
case "${_ans,,}" in
|
||||||
y | yes)
|
y | yes)
|
||||||
msg_info "Upgrading Proxmox LXC stack (pve-container, lxc-pve)"
|
msg_info "Upgrading Proxmox LXC stack (pve-container, lxc-pve)"
|
||||||
if $STD apt-get update && $STD apt-get install -y --only-upgrade pve-container lxc-pve; then
|
apt_update_safe
|
||||||
|
if $STD apt-get install -y --only-upgrade pve-container lxc-pve; then
|
||||||
msg_ok "LXC stack upgraded."
|
msg_ok "LXC stack upgraded."
|
||||||
if [[ "$do_retry" == "yes" ]]; then
|
if [[ "$do_retry" == "yes" ]]; then
|
||||||
msg_info "Retrying container creation after upgrade"
|
msg_info "Retrying container creation after upgrade"
|
||||||
@@ -5154,7 +5173,7 @@ create_lxc_container() {
|
|||||||
echo " [$((i + 1))] ${AVAILABLE_VERSIONS[$i]}"
|
echo " [$((i + 1))] ${AVAILABLE_VERSIONS[$i]}"
|
||||||
done
|
done
|
||||||
echo ""
|
echo ""
|
||||||
read -p "Select version [1-${#AVAILABLE_VERSIONS[@]}] or press Enter to cancel: " choice
|
read -p "Select version [1-${#AVAILABLE_VERSIONS[@]}] or press Enter to cancel: " choice </dev/tty
|
||||||
|
|
||||||
if [[ "$choice" =~ ^[0-9]+$ ]] && [[ "$choice" -ge 1 ]] && [[ "$choice" -le ${#AVAILABLE_VERSIONS[@]} ]]; then
|
if [[ "$choice" =~ ^[0-9]+$ ]] && [[ "$choice" -ge 1 ]] && [[ "$choice" -le ${#AVAILABLE_VERSIONS[@]} ]]; then
|
||||||
PCT_OSVERSION="${AVAILABLE_VERSIONS[$((choice - 1))]}"
|
PCT_OSVERSION="${AVAILABLE_VERSIONS[$((choice - 1))]}"
|
||||||
@@ -5217,7 +5236,7 @@ create_lxc_container() {
|
|||||||
done
|
done
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
read -p "Select version [1-${#AVAILABLE_VERSIONS[@]}] or Enter to exit: " choice
|
read -p "Select version [1-${#AVAILABLE_VERSIONS[@]}] or Enter to exit: " choice </dev/tty
|
||||||
|
|
||||||
if [[ "$choice" =~ ^[0-9]+$ ]] && [[ "$choice" -ge 1 ]] && [[ "$choice" -le ${#AVAILABLE_VERSIONS[@]} ]]; then
|
if [[ "$choice" =~ ^[0-9]+$ ]] && [[ "$choice" -ge 1 ]] && [[ "$choice" -le ${#AVAILABLE_VERSIONS[@]} ]]; then
|
||||||
export var_version="${AVAILABLE_VERSIONS[$((choice - 1))]}"
|
export var_version="${AVAILABLE_VERSIONS[$((choice - 1))]}"
|
||||||
@@ -5327,7 +5346,7 @@ create_lxc_container() {
|
|||||||
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
|
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
|
||||||
for attempt in {1..3}; do
|
for attempt in {1..3}; do
|
||||||
msg_info "Attempt $attempt: Downloading template $TEMPLATE to $TEMPLATE_STORAGE"
|
msg_info "Attempt $attempt: Downloading template $TEMPLATE to $TEMPLATE_STORAGE"
|
||||||
if pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null 2>&1; then
|
if pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >>"${BUILD_LOG:-/dev/null}" 2>&1; then
|
||||||
msg_ok "Template download successful."
|
msg_ok "Template download successful."
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
@@ -5404,11 +5423,23 @@ create_lxc_container() {
|
|||||||
|
|
||||||
LOGFILE="/tmp/pct_create_${CTID}_$(date +%Y%m%d_%H%M%S)_${SESSION_ID}.log"
|
LOGFILE="/tmp/pct_create_${CTID}_$(date +%Y%m%d_%H%M%S)_${SESSION_ID}.log"
|
||||||
|
|
||||||
|
# Helper: append pct_create log to BUILD_LOG before exit so combined log has full context
|
||||||
|
_flush_pct_log() {
|
||||||
|
if [[ -s "${LOGFILE:-}" && -n "${BUILD_LOG:-}" ]]; then
|
||||||
|
{
|
||||||
|
echo ""
|
||||||
|
echo "--- pct create output (${LOGFILE}) ---"
|
||||||
|
cat "$LOGFILE"
|
||||||
|
echo "--- end pct create output ---"
|
||||||
|
} >>"$BUILD_LOG" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Validate template before pct create (while holding lock)
|
# Validate template before pct create (while holding lock)
|
||||||
if [[ ! -s "$TEMPLATE_PATH" || "$(stat -c%s "$TEMPLATE_PATH" 2>/dev/null || echo 0)" -lt 1000000 ]]; then
|
if [[ ! -s "$TEMPLATE_PATH" || "$(stat -c%s "$TEMPLATE_PATH" 2>/dev/null || echo 0)" -lt 1000000 ]]; then
|
||||||
msg_info "Template file missing or too small – downloading"
|
msg_info "Template file missing or too small – downloading"
|
||||||
rm -f "$TEMPLATE_PATH"
|
rm -f "$TEMPLATE_PATH"
|
||||||
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null 2>&1 || {
|
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >>"${BUILD_LOG:-/dev/null}" 2>&1 || {
|
||||||
msg_error "Failed to download template '$TEMPLATE' to storage '$TEMPLATE_STORAGE'"
|
msg_error "Failed to download template '$TEMPLATE' to storage '$TEMPLATE_STORAGE'"
|
||||||
exit 222
|
exit 222
|
||||||
}
|
}
|
||||||
@@ -5417,7 +5448,7 @@ create_lxc_container() {
|
|||||||
if [[ -n "$ONLINE_TEMPLATE" ]]; then
|
if [[ -n "$ONLINE_TEMPLATE" ]]; then
|
||||||
msg_info "Template appears corrupted – re-downloading"
|
msg_info "Template appears corrupted – re-downloading"
|
||||||
rm -f "$TEMPLATE_PATH"
|
rm -f "$TEMPLATE_PATH"
|
||||||
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null 2>&1 || {
|
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >>"${BUILD_LOG:-/dev/null}" 2>&1 || {
|
||||||
msg_error "Failed to re-download template '$TEMPLATE'"
|
msg_error "Failed to re-download template '$TEMPLATE'"
|
||||||
exit 222
|
exit 222
|
||||||
}
|
}
|
||||||
@@ -5441,7 +5472,7 @@ create_lxc_container() {
|
|||||||
if grep -qiE 'unable to open|corrupt|invalid' "$LOGFILE"; then
|
if grep -qiE 'unable to open|corrupt|invalid' "$LOGFILE"; then
|
||||||
msg_info "Template may be corrupted – re-downloading"
|
msg_info "Template may be corrupted – re-downloading"
|
||||||
rm -f "$TEMPLATE_PATH"
|
rm -f "$TEMPLATE_PATH"
|
||||||
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null 2>&1
|
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >>"${BUILD_LOG:-/dev/null}" 2>&1
|
||||||
msg_ok "Template re-downloaded"
|
msg_ok "Template re-downloaded"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -5454,7 +5485,7 @@ create_lxc_container() {
|
|||||||
if [[ ! -f "$LOCAL_TEMPLATE_PATH" ]]; then
|
if [[ ! -f "$LOCAL_TEMPLATE_PATH" ]]; then
|
||||||
msg_ok "Trying local storage fallback"
|
msg_ok "Trying local storage fallback"
|
||||||
msg_info "Downloading template to local"
|
msg_info "Downloading template to local"
|
||||||
pveam download local "$TEMPLATE" >/dev/null 2>&1
|
pveam download local "$TEMPLATE" >>"${BUILD_LOG:-/dev/null}" 2>&1
|
||||||
msg_ok "Template downloaded to local"
|
msg_ok "Template downloaded to local"
|
||||||
else
|
else
|
||||||
msg_ok "Trying local storage fallback"
|
msg_ok "Trying local storage fallback"
|
||||||
@@ -5469,10 +5500,12 @@ create_lxc_container() {
|
|||||||
0) : ;; # success - container created, continue
|
0) : ;; # success - container created, continue
|
||||||
2)
|
2)
|
||||||
msg_error "Upgrade declined. Please update and re-run: apt update && apt install --only-upgrade pve-container lxc-pve"
|
msg_error "Upgrade declined. Please update and re-run: apt update && apt install --only-upgrade pve-container lxc-pve"
|
||||||
|
_flush_pct_log
|
||||||
exit 231
|
exit 231
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
msg_error "Upgrade and/or retry failed. Please inspect: $LOGFILE"
|
msg_error "Upgrade and/or retry failed. Please inspect: $LOGFILE"
|
||||||
|
_flush_pct_log
|
||||||
exit 231
|
exit 231
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -5483,6 +5516,7 @@ create_lxc_container() {
|
|||||||
pct create "$CTID" "local:vztmpl/${TEMPLATE}" $PCT_OPTIONS 2>&1 | tee -a "$LOGFILE"
|
pct create "$CTID" "local:vztmpl/${TEMPLATE}" $PCT_OPTIONS 2>&1 | tee -a "$LOGFILE"
|
||||||
set +x
|
set +x
|
||||||
fi
|
fi
|
||||||
|
_flush_pct_log
|
||||||
exit 209
|
exit 209
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
@@ -5498,10 +5532,12 @@ create_lxc_container() {
|
|||||||
0) : ;; # success - container created, continue
|
0) : ;; # success - container created, continue
|
||||||
2)
|
2)
|
||||||
msg_error "Upgrade declined. Please update and re-run: apt update && apt install --only-upgrade pve-container lxc-pve"
|
msg_error "Upgrade declined. Please update and re-run: apt update && apt install --only-upgrade pve-container lxc-pve"
|
||||||
|
_flush_pct_log
|
||||||
exit 231
|
exit 231
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
msg_error "Upgrade and/or retry failed. Please inspect: $LOGFILE"
|
msg_error "Upgrade and/or retry failed. Please inspect: $LOGFILE"
|
||||||
|
_flush_pct_log
|
||||||
exit 231
|
exit 231
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -5512,6 +5548,7 @@ create_lxc_container() {
|
|||||||
pct create "$CTID" "local:vztmpl/${TEMPLATE}" $PCT_OPTIONS 2>&1 | tee -a "$LOGFILE"
|
pct create "$CTID" "local:vztmpl/${TEMPLATE}" $PCT_OPTIONS 2>&1 | tee -a "$LOGFILE"
|
||||||
set +x
|
set +x
|
||||||
fi
|
fi
|
||||||
|
_flush_pct_log
|
||||||
exit 209
|
exit 209
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -5523,16 +5560,28 @@ create_lxc_container() {
|
|||||||
# Verify container exists
|
# Verify container exists
|
||||||
pct list | awk '{print $1}' | grep -qx "$CTID" || {
|
pct list | awk '{print $1}' | grep -qx "$CTID" || {
|
||||||
msg_error "Container ID $CTID not listed in 'pct list'. See $LOGFILE"
|
msg_error "Container ID $CTID not listed in 'pct list'. See $LOGFILE"
|
||||||
|
_flush_pct_log
|
||||||
exit 215
|
exit 215
|
||||||
}
|
}
|
||||||
|
|
||||||
# Verify config rootfs
|
# Verify config rootfs
|
||||||
grep -q '^rootfs:' "/etc/pve/lxc/$CTID.conf" || {
|
grep -q '^rootfs:' "/etc/pve/lxc/$CTID.conf" || {
|
||||||
msg_error "RootFS entry missing in container config. See $LOGFILE"
|
msg_error "RootFS entry missing in container config. See $LOGFILE"
|
||||||
|
_flush_pct_log
|
||||||
exit 216
|
exit 216
|
||||||
}
|
}
|
||||||
|
|
||||||
msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created."
|
msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created."
|
||||||
|
|
||||||
|
# Append pct create log to BUILD_LOG for combined log visibility
|
||||||
|
if [[ -s "$LOGFILE" && -n "${BUILD_LOG:-}" ]]; then
|
||||||
|
{
|
||||||
|
echo ""
|
||||||
|
echo "--- pct create output ---"
|
||||||
|
cat "$LOGFILE"
|
||||||
|
echo "--- end pct create output ---"
|
||||||
|
} >>"$BUILD_LOG" 2>/dev/null || true
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|||||||
@@ -552,6 +552,53 @@ silent() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# apt_update_safe()
|
||||||
|
#
|
||||||
|
# - Runs apt-get update with graceful error handling
|
||||||
|
# - On failure: shows warning with common causes instead of aborting
|
||||||
|
# - Logs full output to active log file
|
||||||
|
# - Returns 0 even on failure so the caller can continue
|
||||||
|
# - Typical cause: enterprise repos returning 401 Unauthorized
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# apt_update_safe # Warn on failure, continue without aborting
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
apt_update_safe() {
|
||||||
|
local logfile
|
||||||
|
logfile="$(get_active_logfile)"
|
||||||
|
|
||||||
|
local _restore_errexit=false
|
||||||
|
[[ "$-" == *e* ]] && _restore_errexit=true
|
||||||
|
|
||||||
|
set +Eeuo pipefail
|
||||||
|
trap - ERR
|
||||||
|
|
||||||
|
apt-get update >>"$logfile" 2>&1
|
||||||
|
local rc=$?
|
||||||
|
|
||||||
|
if $_restore_errexit; then
|
||||||
|
set -Eeuo pipefail
|
||||||
|
trap 'error_handler' ERR
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $rc -ne 0 ]]; then
|
||||||
|
msg_warn "apt-get update exited with code ${rc} — some repositories may have failed."
|
||||||
|
|
||||||
|
# Check log for common 401/403 enterprise repo issues
|
||||||
|
if grep -qiE '401\s*Unauthorized|403\s*Forbidden|enterprise\.proxmox\.com' "$logfile" 2>/dev/null; then
|
||||||
|
echo -e "${TAB}${INFO} ${YWB}Hint: Proxmox enterprise repository returned an auth error.${CL}"
|
||||||
|
echo -e "${TAB} If you don't have a subscription, you can disable the enterprise"
|
||||||
|
echo -e "${TAB} repo and use the no-subscription repo instead."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${TAB}${INFO} ${YWB}Continuing despite partial update failure — packages may still be installable.${CL}"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# spinner()
|
# spinner()
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -286,7 +286,7 @@ error_handler() {
|
|||||||
echo -en "${YW}Remove broken container ${CTID}? (Y/n) [auto-remove in 60s]: ${CL}"
|
echo -en "${YW}Remove broken container ${CTID}? (Y/n) [auto-remove in 60s]: ${CL}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if read -t 60 -r response; then
|
if read -t 60 -r response </dev/tty; then
|
||||||
if [[ -z "$response" || "$response" =~ ^[Yy]$ ]]; then
|
if [[ -z "$response" || "$response" =~ ^[Yy]$ ]]; then
|
||||||
echo ""
|
echo ""
|
||||||
if declare -f msg_info >/dev/null 2>&1; then
|
if declare -f msg_info >/dev/null 2>&1; then
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ fi
|
|||||||
EOF
|
EOF
|
||||||
chmod +x /usr/local/bin/apt-proxy-detect.sh
|
chmod +x /usr/local/bin/apt-proxy-detect.sh
|
||||||
fi
|
fi
|
||||||
$STD apt-get update
|
apt_update_safe
|
||||||
$STD apt-get -o Dpkg::Options::="--force-confold" -y dist-upgrade
|
$STD apt-get -o Dpkg::Options::="--force-confold" -y dist-upgrade
|
||||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||||
msg_ok "Updated Container OS"
|
msg_ok "Updated Container OS"
|
||||||
|
|||||||
1015
misc/tools.func
1015
misc/tools.func
File diff suppressed because it is too large
Load Diff
@@ -76,70 +76,90 @@ grep -q "lxc.mount.entry: /dev/net/tun" "$CTID_CONFIG_PATH" || echo "lxc.mount.e
|
|||||||
header_info
|
header_info
|
||||||
msg_info "Installing Tailscale in CT $CTID"
|
msg_info "Installing Tailscale in CT $CTID"
|
||||||
|
|
||||||
pct exec "$CTID" -- bash -c '
|
pct exec "$CTID" -- sh -c '
|
||||||
set -e
|
set -e
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
|
||||||
|
|
||||||
# Source os-release properly (handles quoted values)
|
# Detect OS inside container
|
||||||
source /etc/os-release
|
if [ -f /etc/alpine-release ]; then
|
||||||
|
# ── Alpine Linux ──
|
||||||
|
echo "[INFO] Alpine Linux detected, installing Tailscale via apk..."
|
||||||
|
|
||||||
# Fallback if DNS is poisoned or blocked
|
# Enable community repo if not already enabled
|
||||||
ORIG_RESOLV="/etc/resolv.conf"
|
if ! grep -q "^[^#].*community" /etc/apk/repositories 2>/dev/null; then
|
||||||
BACKUP_RESOLV="/tmp/resolv.conf.backup"
|
ALPINE_VERSION=$(cat /etc/alpine-release | cut -d. -f1,2)
|
||||||
|
echo "https://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/community" >> /etc/apk/repositories
|
||||||
|
fi
|
||||||
|
|
||||||
|
apk update
|
||||||
|
apk add --no-cache tailscale
|
||||||
|
|
||||||
|
# Enable and start Tailscale service
|
||||||
|
rc-update add tailscale default 2>/dev/null || true
|
||||||
|
rc-service tailscale start 2>/dev/null || true
|
||||||
|
|
||||||
# Check DNS resolution using multiple methods (dig may not be installed)
|
|
||||||
dns_check_failed=true
|
|
||||||
if command -v dig &>/dev/null; then
|
|
||||||
if dig +short pkgs.tailscale.com 2>/dev/null | grep -qvE "^127\.|^0\.0\.0\.0$|^$"; then
|
|
||||||
dns_check_failed=false
|
|
||||||
fi
|
|
||||||
elif command -v host &>/dev/null; then
|
|
||||||
if host pkgs.tailscale.com 2>/dev/null | grep -q "has address"; then
|
|
||||||
dns_check_failed=false
|
|
||||||
fi
|
|
||||||
elif command -v nslookup &>/dev/null; then
|
|
||||||
if nslookup pkgs.tailscale.com 2>/dev/null | grep -q "Address:"; then
|
|
||||||
dns_check_failed=false
|
|
||||||
fi
|
|
||||||
elif command -v getent &>/dev/null; then
|
|
||||||
if getent hosts pkgs.tailscale.com &>/dev/null; then
|
|
||||||
dns_check_failed=false
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
# No DNS tools available, try curl directly and assume DNS works
|
# ── Debian / Ubuntu ──
|
||||||
dns_check_failed=false
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
fi
|
|
||||||
|
|
||||||
if $dns_check_failed; then
|
# Source os-release properly (handles quoted values)
|
||||||
echo "[INFO] DNS resolution for pkgs.tailscale.com failed (blocked or redirected)."
|
. /etc/os-release
|
||||||
echo "[INFO] Temporarily overriding /etc/resolv.conf with Cloudflare DNS (1.1.1.1)"
|
|
||||||
cp "$ORIG_RESOLV" "$BACKUP_RESOLV"
|
# Fallback if DNS is poisoned or blocked
|
||||||
echo "nameserver 1.1.1.1" >"$ORIG_RESOLV"
|
ORIG_RESOLV="/etc/resolv.conf"
|
||||||
fi
|
BACKUP_RESOLV="/tmp/resolv.conf.backup"
|
||||||
|
|
||||||
|
# Check DNS resolution using multiple methods (dig may not be installed)
|
||||||
|
dns_check_failed=true
|
||||||
|
if command -v dig >/dev/null 2>&1; then
|
||||||
|
if dig +short pkgs.tailscale.com 2>/dev/null | grep -qvE "^127\.|^0\.0\.0\.0$|^$"; then
|
||||||
|
dns_check_failed=false
|
||||||
|
fi
|
||||||
|
elif command -v host >/dev/null 2>&1; then
|
||||||
|
if host pkgs.tailscale.com 2>/dev/null | grep -q "has address"; then
|
||||||
|
dns_check_failed=false
|
||||||
|
fi
|
||||||
|
elif command -v nslookup >/dev/null 2>&1; then
|
||||||
|
if nslookup pkgs.tailscale.com 2>/dev/null | grep -q "Address:"; then
|
||||||
|
dns_check_failed=false
|
||||||
|
fi
|
||||||
|
elif command -v getent >/dev/null 2>&1; then
|
||||||
|
if getent hosts pkgs.tailscale.com >/dev/null 2>&1; then
|
||||||
|
dns_check_failed=false
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# No DNS tools available, try curl directly and assume DNS works
|
||||||
|
dns_check_failed=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $dns_check_failed; then
|
||||||
|
echo "[INFO] DNS resolution for pkgs.tailscale.com failed (blocked or redirected)."
|
||||||
|
echo "[INFO] Temporarily overriding /etc/resolv.conf with Cloudflare DNS (1.1.1.1)"
|
||||||
|
cp "$ORIG_RESOLV" "$BACKUP_RESOLV"
|
||||||
|
echo "nameserver 1.1.1.1" >"$ORIG_RESOLV"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v curl >/dev/null 2>&1; then
|
||||||
|
echo "[INFO] curl not found, installing..."
|
||||||
|
apt-get update -qq
|
||||||
|
apt-get install -y curl >/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure keyrings directory exists
|
||||||
|
mkdir -p /usr/share/keyrings
|
||||||
|
|
||||||
|
curl -fsSL "https://pkgs.tailscale.com/stable/${ID}/${VERSION_CODENAME}.noarmor.gpg" \
|
||||||
|
| tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
|
||||||
|
|
||||||
|
echo "deb [signed-by=/usr/share/keyrings/tailscale-archive-keyring.gpg] https://pkgs.tailscale.com/stable/${ID} ${VERSION_CODENAME} main" \
|
||||||
|
>/etc/apt/sources.list.d/tailscale.list
|
||||||
|
|
||||||
if ! command -v curl &>/dev/null; then
|
|
||||||
echo "[INFO] curl not found, installing..."
|
|
||||||
apt-get update -qq
|
apt-get update -qq
|
||||||
apt update -qq
|
apt-get install -y tailscale >/dev/null
|
||||||
apt install -y curl >/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Ensure keyrings directory exists
|
if [ -f /tmp/resolv.conf.backup ]; then
|
||||||
mkdir -p /usr/share/keyrings
|
echo "[INFO] Restoring original /etc/resolv.conf"
|
||||||
|
mv /tmp/resolv.conf.backup /etc/resolv.conf
|
||||||
curl -fsSL "https://pkgs.tailscale.com/stable/${ID}/${VERSION_CODENAME}.noarmor.gpg" \
|
fi
|
||||||
| tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
|
|
||||||
|
|
||||||
echo "deb [signed-by=/usr/share/keyrings/tailscale-archive-keyring.gpg] https://pkgs.tailscale.com/stable/${ID} ${VERSION_CODENAME} main" \
|
|
||||||
>/etc/apt/sources.list.d/tailscale.list
|
|
||||||
|
|
||||||
apt-get update -qq
|
|
||||||
apt update -qq
|
|
||||||
apt install -y tailscale >/dev/null
|
|
||||||
|
|
||||||
if [[ -f /tmp/resolv.conf.backup ]]; then
|
|
||||||
echo "[INFO] Restoring original /etc/resolv.conf"
|
|
||||||
mv /tmp/resolv.conf.backup /etc/resolv.conf
|
|
||||||
fi
|
fi
|
||||||
'
|
'
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,12 @@
|
|||||||
|
|
||||||
if ! command -v curl &>/dev/null; then
|
if ! command -v curl &>/dev/null; then
|
||||||
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
|
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
|
||||||
apt-get update >/dev/null 2>&1
|
if [[ -f "/etc/alpine-release" ]]; then
|
||||||
apt-get install -y curl >/dev/null 2>&1
|
apk -U add curl >/dev/null 2>&1
|
||||||
|
else
|
||||||
|
apt-get update >/dev/null 2>&1
|
||||||
|
apt-get install -y curl >/dev/null 2>&1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
||||||
@@ -51,7 +55,7 @@ EOF
|
|||||||
# HELPER FUNCTIONS
|
# HELPER FUNCTIONS
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
get_ip() {
|
get_ip() {
|
||||||
hostname -I 2>/dev/null | awk '{print $1}' || echo "127.0.0.1"
|
ifconfig | grep -v '127.0.0.1' | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -m1 -Eo '([0-9]*\.){3}[0-9]*' || echo "127.0.0.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
@@ -68,6 +72,16 @@ else
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# DEPENDENCY CHECK
|
||||||
|
# ==============================================================================
|
||||||
|
if ! command -v jq &>/dev/null; then
|
||||||
|
printf "\r\e[2K%b" '\033[93m Installing jq \033[m' >&2
|
||||||
|
if [[ "$OS" == "Alpine" ]]; then
|
||||||
|
apk -U add jq >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# UNINSTALL
|
# UNINSTALL
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ function truenas_iso_lookup() {
|
|||||||
curl -sL "$BASE_URL" |
|
curl -sL "$BASE_URL" |
|
||||||
grep -oE 'href="[^"]+\.iso"' |
|
grep -oE 'href="[^"]+\.iso"' |
|
||||||
sed 's/href="//; s/"$//' |
|
sed 's/href="//; s/"$//' |
|
||||||
grep -vE '(nightly|ALPHA)' |
|
grep -vE '(MASTER|ALPHA)' |
|
||||||
grep -E "$year_pattern"
|
grep -E "$year_pattern"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user