Compare commits

...

94 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
c8a107e730 Update CHANGELOG.md (#6329)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 21:22:11 +00:00
Slaviša Arežina
404b9feef2 Refactor (#6314) 2025-07-28 23:21:47 +02:00
community-scripts-pr-app[bot]
cc6f56fec8 Update CHANGELOG.md (#6327)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 20:14:52 +00:00
Slaviša Arežina
89ab0f162c Refactor: grocy (#6307) 2025-07-28 22:14:32 +02:00
community-scripts-pr-app[bot]
8846915506 Update CHANGELOG.md (#6323)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 18:33:11 +00:00
Bram Suurd
ecc585ebef temp change the analytics url to one that works untill community one is fixed (#6319) 2025-07-28 20:32:48 +02:00
community-scripts-pr-app[bot]
72dcd61244 Update CHANGELOG.md (#6318)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 17:45:12 +00:00
九条涼果
0955ec4b7f fix: SSH authorized keys not added in Alpine install script (#6316) 2025-07-28 19:44:52 +02:00
community-scripts-pr-app[bot]
4fb5ea4ec2 Update CHANGELOG.md (#6317)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 16:50:54 +00:00
Slaviša Arežina
7051dfeea7 Refactor: HiveMQ (#6313) 2025-07-28 18:50:33 +02:00
community-scripts-pr-app[bot]
253c4f4f5b Update CHANGELOG.md (#6315)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 13:56:49 +00:00
Slaviša Arežina
69e947246a Refactor: Gotify (#6301)
* Refactor Gotify

* Add tools.func fix

* Update gotify.sh
2025-07-28 15:56:22 +02:00
community-scripts-pr-app[bot]
1f1bc5f12d Update CHANGELOG.md (#6312)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 13:12:13 +00:00
teohz
15e3958687 fix: removing ",gw=" from GATE variable when reading/writing from/to config. (#6177)
Previously when creating a config, GATE variable would incluse ",gw="
which was crashing the installer script when read later on.
This fix:
1. writes GATE variable to config without ",gw="
2. removes ",gw=" from GATE variable when reading existing config

Co-authored-by: teohz <git@teohz.com>
2025-07-28 15:11:52 +02:00
community-scripts-pr-app[bot]
7b82199a36 Update CHANGELOG.md (#6311)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 12:58:26 +00:00
community-scripts-pr-app[bot]
01631c305a Update CHANGELOG.md (#6310)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 12:58:08 +00:00
Slaviša Arežina
bc36a60a49 Refactor (#6306) 2025-07-28 14:58:03 +02:00
Slaviša Arežina
d4c59caf12 Refactor (#6305) 2025-07-28 14:57:44 +02:00
community-scripts-pr-app[bot]
bd9c778922 Update CHANGELOG.md (#6309)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 12:57:16 +00:00
Slaviša Arežina
63d65420a9 Refactor Navidrome (#6300) 2025-07-28 14:56:54 +02:00
community-scripts-pr-app[bot]
08e451f8de Update versions.json (#6308)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 14:05:35 +02:00
community-scripts-pr-app[bot]
b602a9d50c Update CHANGELOG.md (#6303)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 11:34:19 +00:00
Tobias
759239bc7c n8n: refactor environmentfile (#6297)
* n8n: add config path

* n8n: refactor servicefile to seperate env

* n8n: refactor envfile

* Update n8n.sh

* Update n8n.json

---------

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-07-28 13:33:51 +02:00
community-scripts-pr-app[bot]
9c50105e86 Update CHANGELOG.md (#6299)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 09:36:36 +00:00
CanbiZ
7bf69cbd07 [core]: create_lxc: better handling, fix lock handling, improve template validation & storage selection UX (#6296)
* Update create_lxc.sh

* Update create_lxc.sh

* Update create_lxc.sh
2025-07-28 11:36:14 +02:00
community-scripts-pr-app[bot]
48c63aaebb Update CHANGELOG.md (#6298)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 09:00:33 +00:00
CanbiZ
ba70f9867b ProxmoxVE 9.0 Beta: add BETA Version as test in pve_check (#6295) 2025-07-28 11:00:09 +02:00
community-scripts-pr-app[bot]
c4ab8f92d5 Update CHANGELOG.md (#6294)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 08:16:52 +00:00
Sai Vishnu M
9fd1a868cb add 'g++' to actualbudget-install.sh (#6293)
* add 'g++' to actualbudget-install.sh

The install script fails on line 53 (`$STD npm install --location=global @actual-app/sync-server`). 
Installing `gcc`, which is required by `better-sqlite3`, which `@actual-app/sync-server` depends on, is the solution. 

Added `g++` to the dependency line `18`.

* formatting

---------

Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-07-28 10:16:31 +02:00
community-scripts-pr-app[bot]
a5d540648e Update CHANGELOG.md (#6292)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 05:29:24 +00:00
Chris
3676dff24e karakeep: Run workers in prod without tsx (#6285)
- may improve performance on slow-ass devices
- slightly increases build time
2025-07-28 07:29:00 +02:00
community-scripts-pr-app[bot]
b80ad6655f Update CHANGELOG.md (#6289)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 00:15:04 +00:00
community-scripts-pr-app[bot]
1eb0099f2a Update versions.json (#6288)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-28 02:14:40 +02:00
community-scripts-pr-app[bot]
759f3f8c79 Update CHANGELOG.md (#6284)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-27 19:57:44 +00:00
Chris
33f6d698c7 karakeep: export DATA_DIR from user config in update (#6283) 2025-07-27 21:57:22 +02:00
community-scripts-pr-app[bot]
7b4bab66af Update CHANGELOG.md (#6281)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-27 17:15:55 +00:00
Slaviša Arežina
5322ae69c3 Update go2rtc-install.sh (#6280) 2025-07-27 19:15:36 +02:00
community-scripts-pr-app[bot]
27426ded94 Update versions.json (#6276)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-27 14:05:21 +02:00
Michel Roegl-Brunner
1e035c5c85 Delete frontend/public/json/opnsense-vm.json (#6266) 2025-07-27 11:34:35 +02:00
community-scripts-pr-app[bot]
0db8e39b40 Update CHANGELOG.md (#6269)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-27 00:16:02 +00:00
community-scripts-pr-app[bot]
2588029d1e Update versions.json (#6268)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-27 02:15:43 +02:00
community-scripts-pr-app[bot]
67973ada07 Update versions.json (#6260)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-26 14:04:44 +02:00
CanbiZ
ac6cf2af7b Calibre-Web: Remove from Frontend during Critical Security Issues (#6257) 2025-07-26 13:18:01 +02:00
Manu
8900d12a9d Update onlyoffice.json (#6259) 2025-07-26 13:17:39 +02:00
community-scripts-pr-app[bot]
3e2d9bdd97 Update CHANGELOG.md (#6256)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-26 08:08:20 +00:00
leiweibau
07da06cb75 Update pialert-install.sh (#6251) 2025-07-26 10:08:00 +02:00
community-scripts-pr-app[bot]
e176779d49 Update CHANGELOG.md (#6254)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-26 00:13:38 +00:00
community-scripts-pr-app[bot]
44cee5f303 Update versions.json (#6253)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-26 02:13:16 +02:00
CanbiZ
22ccd36e55 Update alpine-teamspeak-server-install.sh 2025-07-25 14:50:56 +02:00
CanbiZ
c688887f43 Update alpine-teamspeak-server-install.sh 2025-07-25 14:46:56 +02:00
community-scripts-pr-app[bot]
6afa25b06b Update CHANGELOG.md (#6248)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-25 12:44:13 +00:00
Chris
02ad46585e Immich: fix #6236 (#6243) 2025-07-25 14:43:53 +02:00
CanbiZ
2c57cd815b Update alpine-teamspeak-server-install.sh 2025-07-25 14:43:40 +02:00
community-scripts-pr-app[bot]
72fc8a1880 Update CHANGELOG.md (#6247)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-25 12:05:38 +00:00
community-scripts-pr-app[bot]
72cf24fef4 Update versions.json (#6246)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-25 14:05:18 +02:00
Slaviša Arežina
a7a6a81596 Fix RELEASE fetch (#6237) 2025-07-25 13:29:59 +02:00
community-scripts-pr-app[bot]
470a2593a2 Update .app files (#6241)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-07-25 12:42:49 +02:00
community-scripts-pr-app[bot]
7efdc02bc4 Update CHANGELOG.md (#6242)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-25 10:40:59 +00:00
community-scripts-pr-app[bot]
c1ebb07416 Update CHANGELOG.md (#6240)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-25 10:40:40 +00:00
community-scripts-pr-app[bot]
9cf83f0ef4 Update date in json (#6239)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-07-25 10:40:37 +00:00
push-app-to-main[bot]
57a299fe03 Cleanuparr (#6238)
* 'Add new script'

* Update cleanuparr.sh

* Update cleanuparr.sh

* Update cleanuparr-install.sh

* Update frontend/public/json/cleanuparr.json

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

* Update frontend/public/json/cleanuparr.json

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-07-25 12:40:21 +02:00
ape364
7272c8dd50 Update pulse.json (#6235)
fix link
2025-07-25 12:16:10 +02:00
Slaviša Arežina
aa9373402e Update headscale-install.sh (#6229) 2025-07-25 08:24:12 +02:00
community-scripts-pr-app[bot]
ff429ded15 Update CHANGELOG.md (#6226)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-25 05:05:42 +00:00
Chris
5b6b55d37a Immich v1.136.0 (#6219)
- change path of copy command
- pin to latest working version rather than latest
2025-07-25 07:05:19 +02:00
community-scripts-pr-app[bot]
e8e90ce5b5 Update CHANGELOG.md (#6225)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-25 05:03:52 +00:00
Chris
1ae40a929b Wizarr: use absolute path to uv (#6221)
- for reasons unknown, updating to 2025.7.7 failed due to uv not being
in the PATH anymore
2025-07-25 07:03:30 +02:00
community-scripts-pr-app[bot]
0484259f39 Update CHANGELOG.md (#6223)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-25 00:13:46 +00:00
community-scripts-pr-app[bot]
cadd0a53bd Update versions.json (#6222)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-25 02:13:25 +02:00
community-scripts-pr-app[bot]
c82c185e4e Update CHANGELOG.md (#6220)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-24 20:04:36 +00:00
Michel Roegl-Brunner
89b2b21761 snipeit-install.sh (#6217) 2025-07-24 22:04:16 +02:00
community-scripts-pr-app[bot]
0a722a242f Update CHANGELOG.md (#6218)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-24 19:37:43 +00:00
Slaviša Arežina
01be7acf10 Refactor (#6210) 2025-07-24 21:37:20 +02:00
community-scripts-pr-app[bot]
2d66d09de2 Update CHANGELOG.md (#6216)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-24 19:01:18 +00:00
Slaviša Arežina
67069cfb21 Refactor (#6197) 2025-07-24 21:01:05 +02:00
community-scripts-pr-app[bot]
e78c590772 Update CHANGELOG.md (#6215)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-24 19:00:58 +00:00
Slaviša Arežina
d956763642 Refactor (#6202) 2025-07-24 21:00:41 +02:00
community-scripts-pr-app[bot]
af4aedf15a Update CHANGELOG.md (#6214)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-24 19:00:34 +00:00
Slaviša Arežina
e25f3dce52 Headscale: Add headscale-admin UI as option (#6205) 2025-07-24 21:00:13 +02:00
community-scripts-pr-app[bot]
eda1b1aea8 Update CHANGELOG.md (#6213)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-24 18:39:03 +00:00
CanbiZ
16e2d2206c Immich: Pin Version to v1.135.3 (#6212)
* Immich: Pin Version to v1.135.3

* Update immich.sh
2025-07-24 20:38:38 +02:00
community-scripts-pr-app[bot]
33a03f4b0e Update CHANGELOG.md (#6208)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-24 14:12:46 +00:00
Slaviša Arežina
5867ef3288 Refactor: go2rtc (#6198)
* Refactor

* Update ct/go2rtc.sh
2025-07-24 16:12:20 +02:00
community-scripts-pr-app[bot]
8ef59b590a Update .app files (#6204)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-07-24 14:53:43 +02:00
community-scripts-pr-app[bot]
72d6fb40dc Update CHANGELOG.md (#6203)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-24 12:52:36 +00:00
Slaviša Arežina
7e9d786202 Alpine TeamSpeak Server (#6201)
* Add Alpine TeamSpeak Server

* Update alpine-teamspeak-server.sh

* Update json

* Update json
2025-07-24 14:52:16 +02:00
CanbiZ
ed934a21ff habitica: ensure config is available before build 2025-07-24 14:32:39 +02:00
community-scripts-pr-app[bot]
c9015cca20 Update versions.json (#6200)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-24 14:05:46 +02:00
community-scripts-pr-app[bot]
b52e958623 Update CHANGELOG.md (#6196)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-24 10:43:52 +00:00
Slaviša Arežina
1f51e96cb1 Refactor: Headscale (#6180) 2025-07-24 12:43:32 +02:00
community-scripts-pr-app[bot]
de1a93bf6d Update CHANGELOG.md (#6194)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-24 09:44:28 +00:00
CanbiZ
8bfb78e001 Habitica: force npm to 10 (#6192) 2025-07-24 11:44:07 +02:00
community-scripts-pr-app[bot]
4fa4ed35cc Update CHANGELOG.md (#6193)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-24 08:57:43 +00:00
CanbiZ
4a050f3723 sabnzbd: add uv setup in update (#6191) 2025-07-24 10:57:20 +02:00
78 changed files with 1557 additions and 899 deletions

View File

@@ -10,8 +10,98 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-07-28
### 🚀 Updated Scripts
- Refactor: Cronicle [@tremor021](https://github.com/tremor021) ([#6314](https://github.com/community-scripts/ProxmoxVE/pull/6314))
- Refactor: HiveMQ [@tremor021](https://github.com/tremor021) ([#6313](https://github.com/community-scripts/ProxmoxVE/pull/6313))
- #### 🐞 Bug Fixes
- fix: SSH authorized keys not added in Alpine install script [@enihsyou](https://github.com/enihsyou) ([#6316](https://github.com/community-scripts/ProxmoxVE/pull/6316))
- fix: removing ",gw=" from GATE var when reading/writing from/to config. [@teohz](https://github.com/teohz) ([#6177](https://github.com/community-scripts/ProxmoxVE/pull/6177))
- add 'g++' to actualbudget-install.sh [@saivishnu725](https://github.com/saivishnu725) ([#6293](https://github.com/community-scripts/ProxmoxVE/pull/6293))
- #### ✨ New Features
- [core]: create_lxc: better handling, fix lock handling, improve template validation & storage selection UX [@MickLesk](https://github.com/MickLesk) ([#6296](https://github.com/community-scripts/ProxmoxVE/pull/6296))
- ProxmoxVE 9.0 Beta: add BETA Version as test in pve_check [@MickLesk](https://github.com/MickLesk) ([#6295](https://github.com/community-scripts/ProxmoxVE/pull/6295))
- karakeep: Run workers in prod without tsx [@vhsdream](https://github.com/vhsdream) ([#6285](https://github.com/community-scripts/ProxmoxVE/pull/6285))
- #### 🔧 Refactor
- Refactor: grocy [@tremor021](https://github.com/tremor021) ([#6307](https://github.com/community-scripts/ProxmoxVE/pull/6307))
- Refactor: Navidrome [@tremor021](https://github.com/tremor021) ([#6300](https://github.com/community-scripts/ProxmoxVE/pull/6300))
- Refactor: Gotify [@tremor021](https://github.com/tremor021) ([#6301](https://github.com/community-scripts/ProxmoxVE/pull/6301))
- Refactor: Grafana [@tremor021](https://github.com/tremor021) ([#6306](https://github.com/community-scripts/ProxmoxVE/pull/6306))
- Refactor: Argus [@tremor021](https://github.com/tremor021) ([#6305](https://github.com/community-scripts/ProxmoxVE/pull/6305))
- n8n: refactor environmentfile [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6297](https://github.com/community-scripts/ProxmoxVE/pull/6297))
### 🌐 Website
- #### 🐞 Bug Fixes
- temp change the analytics url to one that works untill community one is fixed [@BramSuurdje](https://github.com/BramSuurdje) ([#6319](https://github.com/community-scripts/ProxmoxVE/pull/6319))
## 2025-07-27
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- karakeep: export DATA_DIR from user config in update [@vhsdream](https://github.com/vhsdream) ([#6283](https://github.com/community-scripts/ProxmoxVE/pull/6283))
- go2rtc: Fix release download handling [@tremor021](https://github.com/tremor021) ([#6280](https://github.com/community-scripts/ProxmoxVE/pull/6280))
## 2025-07-26
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- PiAlert: Update dependencies [@leiweibau](https://github.com/leiweibau) ([#6251](https://github.com/community-scripts/ProxmoxVE/pull/6251))
## 2025-07-25
### 🆕 New Scripts
- Cleanuparr ([#6238](https://github.com/community-scripts/ProxmoxVE/pull/6238))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: fix #6236 [@vhsdream](https://github.com/vhsdream) ([#6243](https://github.com/community-scripts/ProxmoxVE/pull/6243))
- Wizarr: use absolute path to uv [@vhsdream](https://github.com/vhsdream) ([#6221](https://github.com/community-scripts/ProxmoxVE/pull/6221))
- Immich v1.136.0 [@vhsdream](https://github.com/vhsdream) ([#6219](https://github.com/community-scripts/ProxmoxVE/pull/6219))
## 2025-07-24
### 🆕 New Scripts
- Alpine TeamSpeak Server [@tremor021](https://github.com/tremor021) ([#6201](https://github.com/community-scripts/ProxmoxVE/pull/6201))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: Pin Version to v1.135.3 [@MickLesk](https://github.com/MickLesk) ([#6212](https://github.com/community-scripts/ProxmoxVE/pull/6212))
- Habitica: force npm to 10 [@MickLesk](https://github.com/MickLesk) ([#6192](https://github.com/community-scripts/ProxmoxVE/pull/6192))
- sabnzbd: add uv setup in update [@MickLesk](https://github.com/MickLesk) ([#6191](https://github.com/community-scripts/ProxmoxVE/pull/6191))
- #### ✨ New Features
- SnipeIT - Update dependencies [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#6217](https://github.com/community-scripts/ProxmoxVE/pull/6217))
- Refactor: VictoriaMetrics [@tremor021](https://github.com/tremor021) ([#6210](https://github.com/community-scripts/ProxmoxVE/pull/6210))
- Headscale: Add headscale-admin UI as option [@tremor021](https://github.com/tremor021) ([#6205](https://github.com/community-scripts/ProxmoxVE/pull/6205))
- #### 🔧 Refactor
- Refactor: Gokapi [@tremor021](https://github.com/tremor021) ([#6197](https://github.com/community-scripts/ProxmoxVE/pull/6197))
- Refactor: duplicati [@tremor021](https://github.com/tremor021) ([#6202](https://github.com/community-scripts/ProxmoxVE/pull/6202))
- Refactor: go2rtc [@tremor021](https://github.com/tremor021) ([#6198](https://github.com/community-scripts/ProxmoxVE/pull/6198))
- Refactor: Headscale [@tremor021](https://github.com/tremor021) ([#6180](https://github.com/community-scripts/ProxmoxVE/pull/6180))
## 2025-07-23
### 🚀 Updated Scripts

View File

@@ -0,0 +1,58 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: tremor021 (Slaviša Arežina)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://teamspeak.com/en/
APP="Alpine-TeamSpeak-Server"
var_tags="${var_tags:-alpine;communication}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
var_disk="${var_disk:-2}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.22}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
if [[ ! -d /opt/teamspeak-server ]]; then
msg_error "No ${APP} Installation Found!"
exit 1
fi
set +o pipefail && RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.teamspeak3-server_linux_amd64-([0-9]+.[0-9]+.[0-9]+)./\1/p' | head -1) && set -o pipefail
if [ "${RELEASE}" != "$(cat ~/.teamspeak-server)" ] || [ ! -f ~/.teamspeak-server ]; then
msg_info "Updating ${APP} LXC"
$STD apk -U upgrade
$STD service teamspeak stop
curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2
tar -xf ./ts3server.tar.bz2
cp -ru teamspeak3-server_linux_amd64/* /opt/teamspeak-server/
rm -f ~/ts3server.tar.bz*
rm -rf teamspeak3-server_linux_amd64
echo "${RELEASE}" >~/.teamspeak-server
$STD service teamspeak start
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit 0
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}${IP}:9987${CL}"

View File

@@ -23,20 +23,23 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/argus ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/release-argus/Argus/releases/latest | jq -r .tag_name | sed 's/^v//')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Updating $APP to ${RELEASE}"
rm -f /opt/argus/Argus
curl -fsSL "https://github.com/release-argus/Argus/releases/download/${RELEASE}/Argus-${RELEASE}.linux-amd64" -o /opt/argus/Argus
chmod +x /opt/argus/Argus
systemctl restart argus
echo "${RELEASE}" >/opt/${APP}_version.txt
if [[ "${RELEASE}" != "$(cat ~/.Argus 2>/dev/null)" ]] || [[ ! -f ~/.Argus ]]; then
msg_info "Stopping service"
systemctl stop argus
msg_ok "Service stopped"
fetch_and_deploy_gh_release "Argus" "release-argus/Argus" "singlefile" "latest" "/opt/argus" "Argus*linux-amd64"
msg_info "Starting service"
systemctl start argus
msg_ok "Service started"
msg_ok "Updated ${APP} to ${RELEASE}"
else
msg_ok "${APP} is already up to date (${RELEASE})"

56
ct/cleanuparr.sh Executable file
View File

@@ -0,0 +1,56 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Lucas Zampieri (zampierilucas) | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Cleanuparr/Cleanuparr
APP="Cleanuparr"
var_tags="${var_tags:-arr}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /opt/cleanuparr/Cleanuparr ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Cleanuparr/Cleanuparr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
if [[ "${RELEASE}" != "$(cat ~/.Cleanuparr 2>/dev/null)" ]] || [[ ! -f ~/.Cleanuparr ]]; then
msg_info "Stopping ${APP}"
systemctl stop cleanuparr
msg_ok "Stopped ${APP}"
fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "$RELEASE" "/opt/cleanuparr" "*linux-amd64.zip"
msg_info "Starting ${APP}"
systemctl start cleanuparr
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
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}:11011${CL}"

View File

@@ -56,30 +56,18 @@ function update_script() {
LATEST=$(curl -fsSL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
IP=$(hostname -I | awk '{print $1}')
msg_info "Installing Dependencies"
$STD apt-get install -y git
$STD apt-get install -y make
$STD apt-get install -y g++
$STD apt-get install -y gcc
$STD apt-get install -y ca-certificates
$STD apt-get install -y gnupg
$STD apt-get install -y \
git \
build-essential \
ca-certificates \
gnupg2
msg_ok "Installed Dependencies"
msg_info "Setting up Node.js Repository"
mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
msg_ok "Set up Node.js Repository"
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "cronicle" "jhuckaby/Cronicle"
msg_info "Installing Node.js"
$STD apt-get update
$STD apt-get install -y nodejs
msg_ok "Installed Node.js"
msg_info "Installing Cronicle Worker"
mkdir -p /opt/cronicle
msg_info "Configuring Cronicle Worker"
cd /opt/cronicle
$STD tar zxvf <(curl -fsSL https://github.com/jhuckaby/Cronicle/archive/${LATEST}.tar.gz) --strip-components 1
$STD npm install
$STD node bin/build.js dist
sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
@@ -88,6 +76,7 @@ function update_script() {
chmod 775 /etc/init.d/cronicled
$STD update-rc.d cronicled defaults
msg_ok "Installed Cronicle Worker"
echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
exit
fi

View File

@@ -27,25 +27,19 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
if [[ "${RELEASE}" != "$(cat ~/.duplicati)" ]] || [[ ! -f ~/.duplicati ]]; then
msg_info "Stopping $APP"
systemctl stop duplicati
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
curl -fsSL "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb" -o $(basename "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb")
$STD dpkg -i duplicati-${RELEASE}-linux-x64-gui.deb
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
msg_info "Starting $APP"
systemctl start duplicati
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -rf ~/duplicati-${RELEASE}-linux-x64-gui.deb
msg_ok "Cleanup Completed"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"

View File

@@ -27,14 +27,23 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP"
systemctl stop go2rtc
cd /opt/go2rtc
rm go2rtc_linux_amd64
curl -fsSL "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64" -o $(basename "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64")
chmod +x go2rtc_linux_amd64
systemctl start go2rtc
msg_ok "Updated $APP"
RELEASE=$(curl -fsSL https://api.github.com/repos/AlexxIT/go2rtc/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.go2rtc 2>/dev/null)" ]] || [[ ! -f ~/.go2rtc ]]; then
msg_info "Stopping service"
systemctl stop go2rtc
msg_ok "Stopped service"
fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_amd64"
msg_info "Starting service"
systemctl start go2rtc
msg_ok "Started service"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

View File

@@ -27,8 +27,27 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_error "Currently we don't provide an update function for this ${APP}."
exit
if [[ -f /opt/${APP}_version.txt ]]; then
mv /opt/${APP}_version ~/.gokapi
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/Gokapi/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.gokapi 2>/dev/null)" ]] || [[ ! -f ~/.gokapi ]]; then
msg_info "Stopping ${APP}"
systemctl stop gokapi
msg_ok "Stopped ${APP}"
fetch_and_deploy_gh_release "gokapi" "Forceu/Gokapi" "prebuild" "latest" "/opt/gokapi" "gokapi-linux_amd64.zip"
msg_info "Starting ${APP}"
systemctl start gokapi
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}
start
@@ -38,4 +57,4 @@ 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}:53842/setup${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:53842/setup${CL}"

View File

@@ -29,23 +29,18 @@ function update_script() {
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/gotify/server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
if [[ "${RELEASE}" != "$(cat ~/.gotify 2>/dev/null)" ]] || [[ ! -f ~/.gotify ]]; then
msg_info "Stopping ${APP}"
systemctl stop gotify
msg_ok "Stopped ${APP}"
msg_info "Updating ${APP} to ${RELEASE}"
cd /opt/gotify
curl -fsSL "https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-amd64.zip" -o $(basename "https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-amd64.zip")
$STD unzip -o gotify-linux-amd64.zip
rm -rf gotify-linux-amd64.zip
chmod +x gotify-linux-amd64
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"
fetch_and_deploy_gh_release "gotify" "gotify/server" "prebuild" "latest" "/opt/gotify" "gotify-linux-amd64.zip"
chmod +x /opt/gotify/gotify-linux-amd64
msg_info "Starting ${APP}"
systemctl start gotify
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"

View File

@@ -27,6 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ${APP}"
$STD apt-get update
$STD apt-get -y upgrade
@@ -41,4 +42,4 @@ 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}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"

View File

@@ -27,20 +27,20 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
php_version=$(php -v | head -n 1 | awk '{print $2}')
if [[ ! $php_version == "8.3"* ]]; then
msg_info "Updating PHP"
curl -fsSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ bookworm main" >/etc/apt/sources.list.d/php.list
apt-get update
apt-get install -y php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl,sqlite3,fpm,gd,zip,xml}
systemctl reload apache2
apt autoremove
msg_ok "Updated PHP"
php_ver=$(php -v | head -n 1 | awk '{print $2}')
if [[ ! $php_ver == "8.3"* ]]; then
PHP_VERSION="8.3" PHP_MODULE="sqlite3,bz2" PHP_APACHE="yes" setup_php
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/grocy/grocy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.grocy 2>/dev/null)" ]] || [[ ! -f ~/.grocy ]]; then
msg_info "Updating ${APP}"
bash /var/www/html/update.sh
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
msg_info "Updating ${APP}"
bash /var/www/html/update.sh
msg_ok "Updated Successfully"
exit
}

View File

@@ -0,0 +1,6 @@
___ __ _ ______ _____ __ _____
/ | / /___ (_)___ ___ /_ __/__ ____ _____ ___ / ___/____ ___ ____ _/ /__ / ___/___ ______ _____ _____
/ /| | / / __ \/ / __ \/ _ \______/ / / _ \/ __ `/ __ `__ \\__ \/ __ \/ _ \/ __ `/ //_/_____\__ \/ _ \/ ___/ | / / _ \/ ___/
/ ___ |/ / /_/ / / / / / __/_____/ / / __/ /_/ / / / / / /__/ / /_/ / __/ /_/ / ,< /_____/__/ / __/ / | |/ / __/ /
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \___/\__,_/_/ /_/ /_/____/ .___/\___/\__,_/_/|_| /____/\___/_/ |___/\___/_/
/_/ /_/

6
ct/headers/cleanuparr Normal file
View File

@@ -0,0 +1,6 @@
________
/ ____/ /__ ____ _____ __ ______ ____ ___________
/ / / / _ \/ __ `/ __ \/ / / / __ \/ __ `/ ___/ ___/
/ /___/ / __/ /_/ / / / / /_/ / /_/ / /_/ / / / /
\____/_/\___/\__,_/_/ /_/\__,_/ .___/\__,_/_/ /_/
/_/

View File

@@ -27,18 +27,18 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if [[ -f /opt/${APP}_version.txt ]]; then
mv /opt/"${APP}_version.txt" ~/.headscale
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
if [[ "${RELEASE}" != "$(cat ~/.headscale 2>/dev/null)" ]] || [[ ! -f ~/.headscale ]]; then
msg_info "Stopping ${APP}"
systemctl stop headscale
msg_ok "Stopped ${APP}"
msg_info "Updating $APP to v${RELEASE}"
curl -fsSL "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb" -o $(basename "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb")
dpkg -i headscale_${RELEASE}_linux_amd64.deb
rm headscale_${RELEASE}_linux_amd64.deb
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to ${RELEASE}"
fetch_and_deploy_gh_release "headscale" "juanfont/headscale" "binary"
fetch_and_deploy_gh_release "headscale-admin" "GoodiesHQ/headscale-admin" "prebuild" "latest" "/opt/headscale-admin" "admin.zip"
msg_info "Starting ${APP}"
# Temporary fix until headscale project resolves service getting disabled on updates.

View File

@@ -58,7 +58,8 @@ function update_script() {
done
msg_ok "Image-processing libraries updated"
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
RELEASE="1.136.0"
#RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
msg_ok "No update required. ${APP} is already at v${RELEASE}"
exit
@@ -102,7 +103,7 @@ function update_script() {
mkdir -p "$ML_DIR"
rm -rf "$SRC_DIR"
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "latest" "$SRC_DIR"
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.136.0" "$SRC_DIR"
msg_info "Updating ${APP} web and microservices"
cd "$SRC_DIR"/server
@@ -120,7 +121,7 @@ function update_script() {
$STD npm ci
$STD npm run build
cd "$SRC_DIR"
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,bin/start.sh} "$APP_DIR"/
cp -a web/build "$APP_DIR"/www
cp LICENSE "$APP_DIR"
cd "$APP_DIR"

View File

@@ -52,6 +52,10 @@ function update_script() {
rm -rf /opt/karakeep
msg_ok "Update prepared"
if grep -q "start:prod" /etc/systemd/system/karakeep-workers.service; then
sed -i 's|^ExecStart=.*$|ExecStart=/usr/bin/node dist/index.mjs|' /etc/systemd/system/karakeep-workers.service
systemctl daemon-reload
fi
fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep"
if command -v corepack >/dev/null; then
$STD corepack disable
@@ -60,6 +64,7 @@ function update_script() {
NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
msg_info "Updating ${APP} to v${RELEASE}"
corepack enable
export PUPPETEER_SKIP_DOWNLOAD="true"
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
export NEXT_TELEMETRY_DISABLED=1
@@ -69,10 +74,12 @@ function update_script() {
$STD pnpm build
cd /opt/karakeep/apps/workers
$STD pnpm install --frozen-lockfile
$STD pnpm build
cd /opt/karakeep/apps/cli
$STD pnpm install --frozen-lockfile
$STD pnpm build
export DATA_DIR=/opt/karakeep_data
DATA_DIR="$(sed -n '/^DATA_DIR/p' /etc/karakeep/karakeep.env | awk -F= '{print $2}')"
export DATA_DIR="${DATA_DIR:-/opt/karakeep_data}"
cd /opt/karakeep/packages/db
$STD pnpm migrate
$STD pnpm store prune

View File

@@ -34,6 +34,18 @@ function update_script() {
echo "Installed NPM..."
fi
fi
if [ ! -f /opt/n8n.env ]; then
sed -i 's|^Environment="N8N_SECURE_COOKIE=false"$|EnvironmentFile="/opt/n8n.env"|' /etc/systemd/system/n8n.service
HOST_IP=$(hostname -I | awk '{print $1}')
mkdir -p /opt
cat <<EOF >/opt/n8n.env
N8N_SECURE_COOKIE=false
N8N_PORT=5678
N8N_PROTOCOL=http
N8N_HOST=$HOST_IP
EOF
fi
msg_info "Updating ${APP} LXC"
$STD npm update -g n8n
systemctl restart n8n
@@ -48,4 +60,4 @@ 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}:5678${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5678${CL}"

View File

@@ -27,27 +27,19 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
RELEASE=$(curl -fsSL https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.navidrome 2>/dev/null)" ]] || [[ ! -f ~/.navidrome ]]; then
msg_info "Stopping Services"
systemctl stop navidrome
msg_ok "Services Stopped"
msg_info "Updating ${APP} to ${RELEASE}"
TMP_DEB=$(mktemp --suffix=.deb)
curl -fsSL -o "${TMP_DEB}" "https://github.com/navidrome/navidrome/releases/download/${RELEASE}/navidrome_${RELEASE#v}_linux_amd64.deb"
$STD apt-get install -y "${TMP_DEB}"
echo "${RELEASE}" >/opt/"${APP}_version.txt"
msg_ok "Updated Navidrome"
fetch_and_deploy_gh_release "navidrome" "navidrome/navidrome" "binary"
msg_info "Starting Services"
systemctl start navidrome
msg_ok "Started Services"
msg_info "Cleaning Up"
rm -f "${TMP_DEB}"
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"

View File

@@ -34,6 +34,7 @@ function update_script() {
msg_ok "No update required. ${APP} is already at ${RELEASE}"
exit
fi
setup_uv
msg_info "Updating $APP to ${RELEASE}"
systemctl stop sabnzbd
cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)

View File

@@ -27,31 +27,25 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
if [[ ! -f ~/.victoriametrics ]] || [[ "${RELEASE}" != "$(cat ~/.victoriametrics)" ]]; then
msg_info "Stopping $APP"
systemctl stop victoriametrics
[[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl stop victoriametrics-logs
msg_ok "Stopped $APP"
msg_info "Updating ${APP} to v${RELEASE}"
temp_dir=$(mktemp -d)
cd $temp_dir
curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz")
curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz")
find /opt/victoriametrics -maxdepth 1 -type f -executable -delete
tar -xf victoria-metrics-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
tar -xf vmutils-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "victoria-metrics-linux-amd64-v+([0-9.]).tar.gz"
fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "vmutils-linux-amd64-v+([0-9.]).tar.gz"
fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "vlutils-linux-amd64*.tar.gz"
chmod +x /opt/victoriametrics/*
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start victoriametrics
[[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl start victoriametrics-logs
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -rf $temp_dir
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"

View File

@@ -45,13 +45,13 @@ function update_script() {
msg_info "Updating $APP to v${RELEASE}"
cd /opt/wizarr
uv -q sync --locked
$STD uv -q run pybabel compile -d app/translations
/usr/local/bin/uv -q sync --locked
$STD /usr/local/bin/uv -q run pybabel compile -d app/translations
$STD npm --prefix app/static install
$STD npm --prefix app/static run build:css
mkdir -p ./.cache
$STD tar -xf "$BACKUP_FILE" --directory=/
$STD uv -q run flask db upgrade
$STD /usr/local/bin/uv -q run flask db upgrade
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"

View File

@@ -1,40 +0,0 @@
{
"name": "Calibre-Web",
"slug": "calibre-web",
"categories": [
11
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8083,
"documentation": "https://github.com/janeczku/calibre-web/wiki",
"website": "https://github.com/janeczku/calibre-web",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/calibre-web.webp",
"config_path": "",
"description": "Calibre-Web is a web app for browsing, reading and downloading eBooks stored in a Calibre database.",
"install_methods": [
{
"type": "default",
"script": "ct/calibre-web.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "admin",
"password": "admin123"
},
"notes": [
{
"text": "Add Calibre-Web Extras via `update`",
"type": "info"
}
]
}

View File

@@ -0,0 +1,35 @@
{
"name": "Cleanuparr",
"slug": "cleanuparr",
"categories": [
14
],
"date_created": "2025-07-25",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 11011,
"documentation": "https://cleanuparr.github.io/Cleanuparr/docs/",
"website": "https://github.com/Cleanuparr/Cleanuparr",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/cleanuparr.webp",
"config_path": "/opt/cleanuparr/config",
"description": "Cleanuparr is a tool for automating the cleanup of unwanted or blocked files in Sonarr, Radarr, and supported download clients like qBittorrent, Transmission, and Deluge. It removes incomplete, blocked, or malicious downloads and can trigger replacement searches to ensure your media library stays complete and up-to-date.",
"install_methods": [
{
"type": "default",
"script": "ct/cleanuparr.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 3012,
"documentation": null,
"documentation": "https://github.com/jhuckaby/Cronicle/blob/master/README.md",
"website": "https://github.com/jhuckaby/Cronicle",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/chronicle.webp",
"config_path": "/opt/cronicle/conf/config.json",

View File

@@ -6,7 +6,7 @@
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": "https://gotify.net/docs/index",

View File

@@ -35,6 +35,10 @@
{
"text": "Configuration settings: `/etc/headscale/config.yaml`",
"type": "info"
},
{
"text": "Access headscale-admin UI via `http://<LXC-IP>/admin/`",
"type": "info"
}
]
}

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": 1883,
"documentation": null,
"documentation": "https://github.com/hivemq/hivemq-community-edition/wiki",
"website": "https://www.hivemq.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/hivemq.webp",
"config_path": "/opt/hivemq/conf/config.xml",

View File

@@ -12,7 +12,7 @@
"documentation": "https://docs.n8n.io/",
"website": "https://n8n.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/n8n.webp",
"config_path": "",
"config_path": "/opt/n8n.env",
"description": "n8n is a workflow automation tool that enables users to automate various tasks and processes by connecting various data sources, systems, and services. It provides a visual interface for building workflows, allowing users to easily define and automate complex sequences of actions, such as data processing, conditional branching, and API calls. n8n supports a wide range of integrations, making it a versatile tool for automating a variety of use cases, from simple data processing workflows to complex business processes. With its extendable architecture, n8n is designed to be easily customizable and can be adapted to meet the specific needs of different users and industries.",
"install_methods": [
{
@@ -31,5 +31,10 @@
"username": null,
"password": null
},
"notes": []
"notes": [
{
"text": "You may need to configure the `WEBHOOK_URL` in the config file when using a domain.",
"type": "info"
}
]
}

View File

@@ -1,40 +1,40 @@
{
"name": "Navidrome",
"slug": "navidrome",
"categories": [
13
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 4533,
"documentation": null,
"website": "https://www.navidrome.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/navidrome.webp",
"config_path": "/etc/navidrome/navidrome.toml",
"description": "Navidrome is a music server solution that makes your music collection accessible from anywhere. It provides a modern web-based user interface and compatibility with a range of third-party mobile apps for both iOS and Android devices. With Navidrome, users can access their music collection from anywhere, whether at home or on the go. The software supports a variety of music formats, making it easy for users to play their favorite songs and albums. Navidrome provides a simple and user-friendly interface for managing and organizing music collections, making it a valuable tool for music lovers who want to access their music from anywhere. The software is designed to be easy to set up and use, making it a popular choice for those who want to host their own music server and enjoy their music collection from anywhere.",
"install_methods": [
{
"type": "default",
"script": "ct/navidrome.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "To change Navidrome music folder path, `nano /etc/navidrome/navidrome.toml`",
"type": "info"
}
]
"name": "Navidrome",
"slug": "navidrome",
"categories": [
13
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 4533,
"documentation": "https://www.navidrome.org/docs/",
"website": "https://www.navidrome.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/navidrome.webp",
"config_path": "/etc/navidrome/navidrome.toml",
"description": "Navidrome is a music server solution that makes your music collection accessible from anywhere. It provides a modern web-based user interface and compatibility with a range of third-party mobile apps for both iOS and Android devices. With Navidrome, users can access their music collection from anywhere, whether at home or on the go. The software supports a variety of music formats, making it easy for users to play their favorite songs and albums. Navidrome provides a simple and user-friendly interface for managing and organizing music collections, making it a valuable tool for music lovers who want to access their music from anywhere. The software is designed to be easy to set up and use, making it a popular choice for those who want to host their own music server and enjoy their music collection from anywhere.",
"install_methods": [
{
"type": "default",
"script": "ct/navidrome.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "To change Navidrome music folder path, `nano /etc/navidrome/navidrome.toml`",
"type": "info"
}
]
}

View File

@@ -2,7 +2,7 @@
"name": "ONLYOFFICE Docs",
"slug": "onlyoffice",
"categories": [
9
12
],
"date_created": "2025-06-24",
"type": "ct",

View File

@@ -1,41 +0,0 @@
{
"name": "OPNsense",
"slug": "opnsense-vm",
"categories": [
4,
2
],
"date_created": "2025-02-11",
"type": "vm",
"updateable": true,
"privileged": false,
"interface_port": 443,
"documentation": "https://docs.opnsense.org/",
"website": "https://opnsense.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/opnsense.webp",
"config_path": "",
"description": "OPNsense is an open-source firewall and routing platform based on FreeBSD. It provides advanced security features, including intrusion detection, VPN support, traffic shaping, and web filtering, with an intuitive web interface for easy management. Known for its reliability and regular updates, OPNsense is a popular choice for both businesses and home networks.",
"install_methods": [
{
"type": "default",
"script": "vm/opnsense-vm.sh",
"resources": {
"cpu": 4,
"ram": 8192,
"hdd": 10,
"os": "FreeBSD",
"version": "latest"
}
}
],
"default_credentials": {
"username": "root",
"password": "opnsense"
},
"notes": [
{
"text": "It will fail with default settings if there is no vmbr0 and vmbr1 on your node. Use advanced settings in this case.",
"type": "warning"
}
]
}

View File

@@ -33,7 +33,7 @@
},
"notes": [
{
"text": "Create Proxmox-API-Token first: `https://github.com/rcourtman/Pulse?tab=readme-ov-file#creating-a-proxmox-api-token`",
"text": "Create Proxmox-API-Token first: `https://github.com/rcourtman/Pulse?tab=readme-ov-file#creating-api-token`",
"type": "Info"
},
{

View File

@@ -1,40 +1,55 @@
{
"name": "Teamspeak-Server",
"slug": "teamspeak-server",
"categories": [
24
],
"date_created": "2025-07-21",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 9987,
"documentation": "https://support.teamspeak.com/hc/en-us/categories/360000302017-TeamSpeak-3",
"website": "https://teamspeak.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/teamspeak-light.webp",
"config_path": "",
"description": "TeamSpeak is a voice over IP (VoIP) application, primarily used by gamers and teams to chat in real time on dedicated servers. It delivers crystalclear, lowlatency voice communication.",
"install_methods": [
{
"type": "default",
"script": "ct/teamspeak-server.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
"name": "Teamspeak-Server",
"slug": "teamspeak-server",
"categories": [
24
],
"date_created": "2025-07-21",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 9987,
"documentation": "https://support.teamspeak.com/hc/en-us/categories/360000302017-TeamSpeak-3",
"website": "https://teamspeak.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/teamspeak-light.webp",
"config_path": "",
"description": "TeamSpeak is a voice over IP (VoIP) application, primarily used by gamers and teams to chat in real time on dedicated servers. It delivers crystalclear, lowlatency voice communication.",
"install_methods": [
{
"type": "default",
"script": "ct/teamspeak-server.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
},
"notes": [
{
"text": "Use `journalctl -u teamspeak-server.service` inside LXC console to check for admin credentials!",
"type": "info"
}
]
{
"type": "alpine",
"script": "ct/alpine-teamspeak-server.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 2,
"os": "alpine",
"version": "3.22"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Use `journalctl -u teamspeak-server.service` inside Debian LXC console to check for admin credentials!",
"type": "info"
},
{
"text": "Use `cat /var/log/teamspeak.err.log` inside Alpine LXC console to check for admin credentials!",
"type": "info"
}
]
}

View File

@@ -1,4 +1,244 @@
[
{
"name": "Graylog2/graylog2-server",
"version": "7.0.0-alpha.1",
"date": "2025-07-28T11:28:22Z"
},
{
"name": "OliveTin/OliveTin",
"version": "2025.7.28",
"date": "2025-07-28T10:19:38Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.2.6",
"date": "2025-07-28T09:31:34Z"
},
{
"name": "mattermost/mattermost",
"version": "v9.11.18",
"date": "2025-07-22T06:18:08Z"
},
{
"name": "gotson/komga",
"version": "1.23.0",
"date": "2025-07-28T08:44:47Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.3.0p35",
"date": "2025-07-28T08:32:54Z"
},
{
"name": "home-assistant/core",
"version": "2025.7.4",
"date": "2025-07-28T08:15:50Z"
},
{
"name": "PrivateBin/PrivateBin",
"version": "2.0.0",
"date": "2025-07-28T07:48:40Z"
},
{
"name": "esphome/esphome",
"version": "2025.7.4",
"date": "2025-07-28T07:33:36Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2202",
"date": "2025-07-28T06:00:10Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.21",
"date": "2025-07-17T04:46:25Z"
},
{
"name": "theonedev/onedev",
"version": "v12.0.2",
"date": "2025-07-28T03:34:53Z"
},
{
"name": "TryGhost/Ghost-CLI",
"version": "v1.28.1",
"date": "2025-07-28T01:39:35Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "umami-software/umami",
"version": "v2.19.0",
"date": "2025-07-27T22:25:00Z"
},
{
"name": "moghtech/komodo",
"version": "v1.18.4",
"date": "2025-06-25T00:06:56Z"
},
{
"name": "dani-garcia/vaultwarden",
"version": "1.34.2",
"date": "2025-07-27T18:49:05Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.24.7",
"date": "2025-07-27T18:34:18Z"
},
{
"name": "benjaminjonard/koillection",
"version": "1.6.16",
"date": "2025-07-27T14:48:37Z"
},
{
"name": "keycloak/keycloak",
"version": "26.3.2",
"date": "2025-07-24T10:14:27Z"
},
{
"name": "project-zot/zot",
"version": "v2.1.6",
"date": "2025-07-27T01:14:14Z"
},
{
"name": "aceberg/WatchYourLAN",
"version": "2.1.3",
"date": "2025-07-26T14:19:00Z"
},
{
"name": "blakeblackshear/frigate",
"version": "v0.14.1",
"date": "2024-08-29T22:32:51Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{
"name": "henrygd/beszel",
"version": "v0.12.1",
"date": "2025-07-25T23:53:12Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v0.7.17-beta",
"date": "2025-07-25T22:03:43Z"
},
{
"name": "ollama/ollama",
"version": "v0.10.0-rc1",
"date": "2025-07-22T20:40:47Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.30.1",
"date": "2025-07-25T19:18:09Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.86.1",
"date": "2025-07-25T17:55:38Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.15.0-rc4",
"date": "2025-07-25T16:50:34Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-openapi@9.1.5",
"date": "2025-07-25T16:20:20Z"
},
{
"name": "emqx/emqx",
"version": "e6.0.0-M2.202508-alpha.1",
"date": "2025-07-25T16:01:00Z"
},
{
"name": "heiher/hev-socks5-server",
"version": "2.9.0",
"date": "2025-07-25T14:20:25Z"
},
{
"name": "forgejo/forgejo",
"version": "v12.0.1",
"date": "2025-07-25T11:54:30Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.1.7",
"date": "2025-07-25T10:19:56Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3-beta.10",
"date": "2025-07-15T06:07:03Z"
},
{
"name": "ErsatzTV/ErsatzTV",
"version": "v25.3.1",
"date": "2025-07-25T03:39:31Z"
},
{
"name": "Brandawg93/PeaNUT",
"version": "v5.10.0",
"date": "2025-07-24T23:33:09Z"
},
{
"name": "coder/code-server",
"version": "v4.102.2",
"date": "2025-07-24T22:42:01Z"
},
{
"name": "linuxserver/Heimdall",
"version": "v2.7.3",
"date": "2025-07-24T18:07:21Z"
},
{
"name": "docker/compose",
"version": "v2.39.1",
"date": "2025-07-24T17:02:01Z"
},
{
"name": "wizarrrr/wizarr",
"version": "2025.7.7",
"date": "2025-07-24T16:44:19Z"
},
{
"name": "immich-app/immich",
"version": "v1.136.0",
"date": "2025-07-24T16:42:30Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-cellulite-1",
"date": "2025-07-24T16:32:57Z"
},
{
"name": "grokability/snipe-it",
"version": "v8.2.1",
"date": "2025-07-24T14:37:54Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v1.1.0",
"date": "2025-07-24T14:08:58Z"
},
{
"name": "glpi-project/glpi",
"version": "10.0.19",
"date": "2025-07-16T09:45:14Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v10.10.0",
"date": "2025-07-24T06:15:19Z"
},
{
"name": "advplyr/audiobookshelf",
"version": "v2.26.3",
@@ -24,16 +264,6 @@
"version": "preview-plex-home-profile",
"date": "2025-07-23T16:40:31Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-cellulite-0",
"date": "2025-07-23T16:21:26Z"
},
{
"name": "grokability/snipe-it",
"version": "v8.2.0",
"date": "2025-07-23T15:26:10Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.516.1",
@@ -59,31 +289,16 @@
"version": "n8n@1.103.2",
"date": "2025-07-22T11:22:26Z"
},
{
"name": "zabbix/zabbix",
"version": "7.4.1rc1",
"date": "2025-07-23T11:54:39Z"
},
{
"name": "cockpit-project/cockpit",
"version": "343",
"date": "2025-07-23T11:21:34Z"
},
{
"name": "zabbix/zabbix",
"version": "7.0.17",
"date": "2025-07-23T08:11:47Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2185",
"date": "2025-07-23T05:51:56Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.21",
"date": "2025-07-17T04:46:25Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.85",
@@ -94,46 +309,21 @@
"version": "v1.13.7",
"date": "2025-07-22T20:41:45Z"
},
{
"name": "ollama/ollama",
"version": "v0.9.7-rc1",
"date": "2025-07-11T22:15:00Z"
},
{
"name": "TasmoAdmin/TasmoAdmin",
"version": "v4.3.1",
"date": "2025-07-22T20:10:08Z"
},
{
"name": "esphome/esphome",
"version": "2025.7.3",
"date": "2025-07-22T20:09:49Z"
},
{
"name": "keycloak/keycloak",
"version": "26.2.6",
"date": "2025-07-17T11:16:34Z"
},
{
"name": "rcourtman/Pulse",
"version": "v3.42.0",
"date": "2025-07-14T22:07:28Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.24.6",
"date": "2025-07-22T17:14:21Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "21.0.2",
"date": "2025-07-22T16:58:05Z"
},
{
"name": "linuxserver/Heimdall",
"version": "v2.7.2",
"date": "2025-07-22T15:00:08Z"
},
{
"name": "PCJones/UmlautAdaptarr",
"version": "v0.7.3",
@@ -149,31 +339,11 @@
"version": "version/2025.4.4",
"date": "2025-07-22T13:08:15Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.1.6",
"date": "2025-07-22T12:22:34Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.11",
"date": "2025-07-22T12:11:38Z"
},
{
"name": "home-assistant/core",
"version": "2025.7.3",
"date": "2025-07-22T08:30:59Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.3.0p35-rc1",
"date": "2025-07-22T07:29:21Z"
},
{
"name": "mattermost/mattermost",
"version": "v9.11.18",
"date": "2025-07-22T06:18:08Z"
},
{
"name": "adityachandelgit/BookLore",
"version": "v0.34.1",
@@ -184,21 +354,11 @@
"version": "v1.2.2",
"date": "2025-07-22T03:12:54Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{
"name": "ellite/Wallos",
"version": "v4.0.0",
"date": "2025-07-21T21:05:02Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v0.7.16-beta",
"date": "2025-07-21T20:58:02Z"
},
{
"name": "autobrr/autobrr",
"version": "v1.64.0",
@@ -234,11 +394,6 @@
"version": "pmm-6401-v1.122.0",
"date": "2025-07-21T10:40:07Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.30.0",
"date": "2025-07-21T08:43:19Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.2",
@@ -254,36 +409,16 @@
"version": "v1.6.4",
"date": "2025-07-21T05:53:30Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-openapi@9.1.4",
"date": "2025-07-20T13:38:10Z"
},
{
"name": "karakeep-app/karakeep",
"version": "sdk/v0.26.0",
"date": "2025-07-20T13:26:30Z"
},
{
"name": "wizarrrr/wizarr",
"version": "2025.7.6",
"date": "2025-07-20T13:02:43Z"
},
{
"name": "OliveTin/OliveTin",
"version": "2025.7.19",
"date": "2025-07-20T09:44:35Z"
},
{
"name": "documenso/documenso",
"version": "v1.12.2-rc.2",
"date": "2025-07-20T07:05:19Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3-beta.10",
"date": "2025-07-15T06:07:03Z"
},
{
"name": "linkwarden/linkwarden",
"version": "v2.11.5",
@@ -319,21 +454,6 @@
"version": "v0.29.0",
"date": "2025-07-19T08:54:54Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.2.4",
"date": "2025-07-19T07:42:25Z"
},
{
"name": "Brandawg93/PeaNUT",
"version": "v5.9.4",
"date": "2025-07-18T21:50:31Z"
},
{
"name": "theonedev/onedev",
"version": "v12.0.1",
"date": "2025-07-18T15:02:25Z"
},
{
"name": "TandoorRecipes/recipes",
"version": "1.5.35",
@@ -344,21 +464,11 @@
"version": "coverity-w30-4.13.0",
"date": "2025-07-18T12:05:26Z"
},
{
"name": "emqx/emqx",
"version": "e6.0.0-M1.202507-rc.1",
"date": "2025-07-18T07:48:52Z"
},
{
"name": "cross-seed/cross-seed",
"version": "v6.13.1",
"date": "2025-07-17T21:36:42Z"
},
{
"name": "coder/code-server",
"version": "v4.102.1",
"date": "2025-07-17T21:20:36Z"
},
{
"name": "duplicati/duplicati",
"version": "v2.1.1.0-2.1.1.0_experimental_2025-07-17",
@@ -369,11 +479,6 @@
"version": "2.0.7",
"date": "2025-07-17T15:33:14Z"
},
{
"name": "forgejo/forgejo",
"version": "v12.0.0",
"date": "2025-07-17T14:38:30Z"
},
{
"name": "oauth2-proxy/oauth2-proxy",
"version": "v7.10.0",
@@ -389,26 +494,11 @@
"version": "8.1.15",
"date": "2025-07-16T18:06:03Z"
},
{
"name": "benjaminjonard/koillection",
"version": "1.6.15",
"date": "2025-07-16T16:47:57Z"
},
{
"name": "usememos/memos",
"version": "v0.25.0",
"date": "2025-07-16T14:57:02Z"
},
{
"name": "TryGhost/Ghost-CLI",
"version": "v1.27.1",
"date": "2025-07-16T13:29:00Z"
},
{
"name": "glpi-project/glpi",
"version": "10.0.19",
"date": "2025-07-16T09:45:14Z"
},
{
"name": "NLnetLabs/unbound",
"version": "release-1.23.1",
@@ -449,11 +539,6 @@
"version": "4.3.0",
"date": "2025-07-15T09:54:38Z"
},
{
"name": "gotson/komga",
"version": "1.22.1",
"date": "2025-07-15T06:44:29Z"
},
{
"name": "go-gitea/gitea",
"version": "v1.24.3",
@@ -499,11 +584,6 @@
"version": "v4.39.5",
"date": "2025-07-13T06:12:47Z"
},
{
"name": "henrygd/beszel",
"version": "v0.11.1",
"date": "2025-04-29T01:14:35Z"
},
{
"name": "Ombi-app/Ombi",
"version": "v4.47.1",
@@ -514,11 +594,6 @@
"version": "v10.10.7",
"date": "2025-04-05T19:14:59Z"
},
{
"name": "blakeblackshear/frigate",
"version": "v0.14.1",
"date": "2024-08-29T22:32:51Z"
},
{
"name": "leiweibau/Pi.Alert",
"version": "v2025-07-12",
@@ -539,11 +614,6 @@
"version": "flowise@3.0.4",
"date": "2025-07-11T13:26:54Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v10.9.0",
"date": "2025-07-11T12:57:54Z"
},
{
"name": "outline/outline",
"version": "v0.85.1",
@@ -604,21 +674,11 @@
"version": "mysql-cluster-9.4.0",
"date": "2025-07-09T08:35:30Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v1.0.2",
"date": "2025-07-08T19:14:31Z"
},
{
"name": "TwiN/gatus",
"version": "v5.20.0",
"date": "2025-07-08T16:27:11Z"
},
{
"name": "docker/compose",
"version": "v2.38.2",
"date": "2025-07-08T09:35:14Z"
},
{
"name": "photoprism/photoprism",
"version": "250707-d28b3101e",
@@ -674,11 +734,6 @@
"version": "2.37.0",
"date": "2025-07-04T14:49:43Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "6.3.1",
"date": "2025-07-04T11:20:48Z"
},
{
"name": "cloudflare/cloudflared",
"version": "2025.7.0",
@@ -739,11 +794,6 @@
"version": "v0.57.0",
"date": "2025-07-01T16:47:46Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.15.0-rc3",
"date": "2025-07-01T04:09:37Z"
},
{
"name": "MagicMirrorOrg/MagicMirror",
"version": "v2.32.0",
@@ -754,11 +804,6 @@
"version": "v7.4.4",
"date": "2025-06-30T13:04:22Z"
},
{
"name": "PrivateBin/PrivateBin",
"version": "1.7.8",
"date": "2025-06-30T09:00:54Z"
},
{
"name": "typesense/typesense",
"version": "v29.0",
@@ -769,11 +814,6 @@
"version": "v1.3.8",
"date": "2025-06-29T07:41:53Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.84.3",
"date": "2025-06-26T16:31:57Z"
},
{
"name": "node-red/node-red",
"version": "4.1.0-beta.2",
@@ -784,16 +824,6 @@
"version": "v1.6.1",
"date": "2025-06-25T21:19:25Z"
},
{
"name": "moghtech/komodo",
"version": "v1.18.4",
"date": "2025-06-25T00:06:56Z"
},
{
"name": "ErsatzTV/ErsatzTV",
"version": "v25.2.0",
"date": "2025-06-24T17:06:31Z"
},
{
"name": "arunavo4/gitea-mirror",
"version": "v2.18.0",
@@ -819,11 +849,6 @@
"version": "v2.0.114",
"date": "2025-06-21T11:20:21Z"
},
{
"name": "immich-app/immich",
"version": "v1.135.3",
"date": "2025-06-20T20:19:20Z"
},
{
"name": "Sonarr/Sonarr",
"version": "v4.0.15.2941",
@@ -869,11 +894,6 @@
"version": "2.0.0-pre3",
"date": "2025-06-18T08:01:24Z"
},
{
"name": "project-zot/zot",
"version": "v2.1.5",
"date": "2025-06-17T18:04:11Z"
},
{
"name": "donaldzou/WGDashboard",
"version": "v4.2.4",
@@ -1004,11 +1024,6 @@
"version": "5.10.0",
"date": "2025-05-28T05:48:20Z"
},
{
"name": "dani-garcia/vaultwarden",
"version": "1.34.1",
"date": "2025-05-26T21:40:54Z"
},
{
"name": "stonith404/pingvin-share",
"version": "v1.13.0",
@@ -1054,11 +1069,6 @@
"version": "1.0.0",
"date": "2025-05-12T07:39:23Z"
},
{
"name": "umami-software/umami",
"version": "v2.18.1",
"date": "2025-05-12T07:16:12Z"
},
{
"name": "owncast/owncast",
"version": "v0.2.3",
@@ -1164,11 +1174,6 @@
"version": "1.5.0",
"date": "2025-03-30T17:42:59Z"
},
{
"name": "aceberg/WatchYourLAN",
"version": "2.1.2-alpine",
"date": "2025-03-30T06:25:22Z"
},
{
"name": "inspircd/inspircd",
"version": "v4.7.0",
@@ -1249,11 +1254,6 @@
"version": "v0.10.0",
"date": "2025-03-02T15:13:47Z"
},
{
"name": "heiher/hev-socks5-server",
"version": "2.8.0",
"date": "2025-03-02T04:30:50Z"
},
{
"name": "schlagmichdoch/PairDrop",
"version": "v1.11.2",

View File

@@ -45,7 +45,7 @@ export const navbarLinks = [
export const mostPopularScripts = ["post-pve-install", "docker", "homeassistant"];
export const analytics = {
url: "analytics.community-scripts.org",
url: "analytics.bramsuurd.nl",
token: "aefee1b9-2a12-4ac2-9d82-a63113edc62e",
};

View File

@@ -15,7 +15,8 @@ update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
make
make \
g++
msg_ok "Installed Dependencies"
msg_info "Installing Actual Budget"

View File

@@ -0,0 +1,68 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: tremor021 (Slaviša Arežina)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://teamspeak.com/en/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing dependencies"
$STD apk add --no-cache \
ca-certificates \
libstdc++ \
libc6-compat
msg_ok "Installed dependencies"
RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]\+\).*/\1/p' | head -1)
msg_info "Installing Teamspeak Server v${RELEASE}"
mkdir -p /opt/teamspeak-server
cd /opt/teamspeak-server
curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2
tar xf ts3server.tar.bz2 --strip-components=1
mkdir -p logs data lib
mv *.so lib
touch data/ts3server.sqlitedb data/query_ip_blacklist.txt data/query_ip_whitelist.txt .ts3server_license_accepted
echo "${RELEASE}" >~/.teamspeak-server
msg_ok "Installed TeamSpeak Server v${RELEASE}"
msg_info "Enabling TeamSpeak Server Service"
cat <<EOF >/etc/init.d/teamspeak
#!/sbin/openrc-run
name="TeamSpeak Server"
description="TeamSpeak 3 Server"
command="/opt/teamspeak-server/ts3server_startscript.sh"
command_args="start"
output_log="/var/log/teamspeak.out.log"
error_log="/var/log/teamspeak.err.log"
command_background=true
pidfile="/run/teamspeak-server.pid"
directory="/opt/teamspeak-server"
depend() {
need net
use dns
}
EOF
chmod +x /etc/init.d/teamspeak
$STD rc-update add teamspeak default
msg_ok "Enabled TeamSpeak Server Service"
msg_info "Starting TeamSpeak Server"
$STD service teamspeak start
msg_ok "Started TeamSpeak Server"
motd_ssh
customize
msg_info "Cleaning up"
rm -r ts3server.tar.bz* LICENSE* CHANGELOG doc serverquerydocs tsdns redist
$STD apk cache clean
msg_ok "Cleaned"

View File

@@ -13,17 +13,7 @@ setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
jq
msg_ok "Installed Dependencies"
msg_info "Setup Argus"
RELEASE=$(curl -fsSL https://api.github.com/repos/release-argus/Argus/releases/latest | jq -r .tag_name | sed 's/^v//')
mkdir -p /opt/argus
curl -fsSL "https://github.com/release-argus/Argus/releases/download/${RELEASE}/Argus-${RELEASE}.linux-amd64" -o /opt/argus/Argus
chmod +x /opt/argus/Argus
msg_ok "Setup Argus"
fetch_and_deploy_gh_release "Argus" "release-argus/Argus" "singlefile" "latest" "/opt/argus" "Argus*linux-amd64"
msg_info "Setup Argus Config"
cat <<EOF >/opt/argus/config.yml
@@ -71,7 +61,6 @@ service:
icon_link_to: https://helper-scripts.com/
web_url: https://github.com/community-scripts/ProxmoxVE/releases
EOF
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Setup Config"
msg_info "Creating Service"

View File

@@ -1,67 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster)
# Co-Author: remz1337
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/janeczku/calibre-web
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y imagemagick
msg_ok "Installed Dependencies"
msg_info "Installing Python Dependencies"
$STD apt-get -y install python3-pip
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
msg_ok "Installed Python Dependencies"
msg_info "Installing Kepubify"
mkdir -p /opt/kepubify
cd /opt/kepubify
curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-64bit &>/dev/null
chmod +x kepubify-linux-64bit
msg_ok "Installed Kepubify"
msg_info "Installing Calibre-Web"
mkdir -p /opt/calibre-web
$STD apt-get install -y calibre
$STD curl -fsSL https://github.com/janeczku/calibre-web/raw/master/library/metadata.db -o /opt/calibre-web/metadata.db
$STD pip install calibreweb
$STD pip install jsonschema
msg_ok "Installed Calibre-Web"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/cps.service
[Unit]
Description=Calibre-Web Server
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/calibre-web
ExecStart=/usr/local/bin/cps
TimeoutStopSec=20
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now cps
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

46
install/cleanuparr-install.sh Executable file
View File

@@ -0,0 +1,46 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Lucas Zampieri (zampierilucas) | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Cleanuparr/Cleanuparr
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-amd64.zip"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/cleanuparr.service
[Unit]
Description=Cleanuparr Daemon
After=syslog.target network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/cleanuparr
ExecStart=/opt/cleanuparr/Cleanuparr
Restart=on-failure
RestartSec=5
Environment="PORT=11011"
Environment="CONFIG_DIR=/opt/cleanuparr/config"
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now cleanuparr
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -14,13 +14,11 @@ network_check
update_os
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "cronicle" "jhuckaby/Cronicle"
msg_info "Installing Cronicle Primary Server"
LATEST=$(curl -fsSL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
msg_info "Configuring Cronicle Primary Server"
IP=$(hostname -I | awk '{print $1}')
mkdir -p /opt/cronicle
cd /opt/cronicle
$STD tar zxvf <(curl -fsSL https://github.com/jhuckaby/Cronicle/archive/${LATEST}.tar.gz) --strip-components 1
$STD npm install
$STD node bin/build.js dist
sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
@@ -29,7 +27,7 @@ $STD /opt/cronicle/bin/control.sh start
$STD cp /opt/cronicle/bin/cronicled.init /etc/init.d/cronicled
chmod 775 /etc/init.d/cronicled
$STD update-rc.d cronicled defaults
msg_ok "Installed Cronicle Primary Server"
msg_ok "Configured Cronicle Primary Server"
motd_ssh
customize

View File

@@ -20,19 +20,16 @@ $STD apt-get install -y \
libfontconfig1
msg_ok "Installed Dependencies"
msg_info "Setting up Duplicati"
RELEASE=$(curl -fsSL https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
curl -fsSL "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb" -o "duplicati-${RELEASE}-linux-x64-gui.deb"
$STD dpkg -i duplicati-${RELEASE}-linux-x64-gui.deb
echo "${RELEASE}" >/opt/Duplicati_version.txt
msg_ok "Finished setting up Duplicati"
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
msg_info "Configuring duplicati"
DECRYPTKEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
ADMINPASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
{
echo "Admin password = ${ADMINPASS}"
echo "Database encryption key = ${DECRYPTKEY}"
} >>~/duplicati.creds
msg_ok "Configured duplicati"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/duplicati.service
@@ -54,10 +51,6 @@ motd_ssh
customize
msg_info "Cleaning up"
rm -f duplicati-${RELEASE}-linux-x64-gui.deb
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"
motd_ssh
customize

View File

@@ -13,15 +13,10 @@ setting_up_container
network_check
update_os
msg_info "Installing go2rtc"
mkdir -p /opt/go2rtc
cd /opt/go2rtc
curl -fsSL "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64" -o "go2rtc_linux_amd64"
chmod +x go2rtc_linux_amd64
msg_ok "Installed go2rtc"
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_amd64"
msg_info "Creating Service"
service_path="/etc/systemd/system/go2rtc.service"
cat <<EOF >/etc/systemd/system/go2rtc.service
echo "[Unit]
Description=go2rtc service
After=network.target
@@ -32,7 +27,8 @@ User=root
ExecStart=/opt/go2rtc/go2rtc_linux_amd64
[Install]
WantedBy=multi-user.target" >$service_path
WantedBy=multi-user.target
EOF
systemctl enable -q --now go2rtc
msg_ok "Created Service"

View File

@@ -13,14 +13,12 @@ setting_up_container
network_check
update_os
msg_info "Installing Gokapi"
LATEST=$(curl -fsSL https://api.github.com/repos/Forceu/Gokapi/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
fetch_and_deploy_gh_release "gokapi" "Forceu/Gokapi" "prebuild" "latest" "/opt/gokapi" "gokapi-linux_amd64.zip"
msg_info "Configuring Gokapi"
mkdir -p /opt/gokapi/{data,config}
curl -fsSL "https://github.com/Forceu/Gokapi/releases/download/$LATEST/gokapi-linux_amd64.zip" -o "gokapi-linux_amd64.zip"
$STD unzip gokapi-linux_amd64.zip -d /opt/gokapi
rm gokapi-linux_amd64.zip
chmod +x /opt/gokapi/gokapi-linux_amd64
msg_ok "Installed Gokapi"
msg_ok "Configured Gokapi"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/gokapi.service

View File

@@ -13,16 +13,8 @@ setting_up_container
network_check
update_os
msg_info "Installing Gotify"
RELEASE=$(curl -fsSL https://api.github.com/repos/gotify/server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
mkdir -p /opt/gotify
cd /opt/gotify
curl -fsSL "https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-amd64.zip" -o "gotify-linux-amd64.zip"
$STD unzip gotify-linux-amd64.zip
rm -rf gotify-linux-amd64.zip
chmod +x gotify-linux-amd64
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed Gotify"
fetch_and_deploy_gh_release "gotify" "gotify/server" "prebuild" "latest" "/opt/gotify" "gotify-linux-amd64.zip"
chmod +x /opt/gotify/gotify-linux-amd64
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/gotify.service

View File

@@ -14,20 +14,20 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y apt-transport-https
$STD apt-get install -y software-properties-common
$STD apt-get install -y \
apt-transport-https \
software-properties-common
msg_ok "Installed Dependencies"
msg_info "Setting up Grafana Repository"
curl -fsSL "https://apt.grafana.com/gpg.key" -o "/usr/share/keyrings/grafana.key"
sh -c 'echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" > /etc/apt/sources.list.d/grafana.list'
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" >/etc/apt/sources.list.d/grafana.list
msg_ok "Set up Grafana Repository"
msg_info "Installing Grafana"
$STD apt-get update
$STD apt-get install -y grafana
systemctl start grafana-server
systemctl enable --now -q grafana-server.service
systemctl enable -q --now grafana-server
msg_ok "Installed Grafana"
motd_ssh

View File

@@ -17,23 +17,10 @@ msg_info "Installing Dependencies"
$STD apt-get install -y apt-transport-https
msg_ok "Installed Dependencies"
msg_info "Installing PHP8.2"
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
curl -fsSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
echo -e "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $VERSION main" >/etc/apt/sources.list.d/php.list
$STD apt-get update
$STD apt-get install -y php8.2
$STD apt-get install -y libapache2-mod-php8.2
$STD apt-get install -y php8.2-sqlite3
$STD apt-get install -y php8.2-gd
$STD apt-get install -y php8.2-intl
$STD apt-get install -y php8.2-mbstring
msg_ok "Installed PHP8.2"
PHP_VERSION="8.3" PHP_MODULE="sqlite3,bz2" PHP_APACHE="yes" setup_php
fetch_and_deploy_gh_release "grocy" "grocy/grocy" "prebuild" "latest" "/var/www/html" "grocy*.zip"
msg_info "Installing grocy"
latest=$(curl -fsSL https://api.github.com/repos/grocy/grocy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/grocy/grocy/releases/download/v${latest}/grocy_${latest}.zip" -o "grocy_${latest}.zip"
$STD unzip grocy_${latest}.zip -d /var/www/html
msg_info "Configuring grocy"
chown -R www-data:www-data /var/www/html
cp /var/www/html/config-dist.php /var/www/html/data/config.php
chmod +x /var/www/html/update.sh
@@ -64,5 +51,4 @@ customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
rm -rf /root/grocy_${latest}.zip
msg_ok "Cleaned"

View File

@@ -22,16 +22,17 @@ curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1
$STD dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
msg_ok "Installed Dependencies"
NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha" setup_nodejs
NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha,npm@10" setup_nodejs
fetch_and_deploy_gh_release "habitica" "HabitRPG/habitica" "tarball" "latest" "/opt/habitica"
msg_info "Setup ${APPLICATION}"
cd /opt/habitica
$STD npm i
$STD npm run postinstall
cp config.json.example config.json
$STD npm run client:build
$STD gulp build:prod
cp config.json.example config.json
msg_ok "Setup ${APPLICATION}"
msg_info "Creating Service"

View File

@@ -13,19 +13,53 @@ setting_up_container
network_check
update_os
RELEASE=$(curl -fsSL https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Installing ${APPLICATION} v${RELEASE}"
curl -fsSL "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb" -o "headscale_${RELEASE}_linux_amd64.deb"
$STD dpkg -i headscale_${RELEASE}_linux_amd64.deb
fetch_and_deploy_gh_release "headscale" "juanfont/headscale" "binary"
read -r -p "${TAB3}Would you like to add headscale-admin UI? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
fetch_and_deploy_gh_release "headscale-admin" "GoodiesHQ/headscale-admin" "prebuild" "latest" "/opt/headscale-admin" "admin.zip"
msg_info "Configuring headscale-admin"
$STD apt-get install -y caddy
$STD caddy stop
rm /etc/caddy/Caddyfile
cat <<'EOF' >/etc/caddy/Caddyfile
:{$PORT:80}
handle_path /admin* {
root * /opt/headscale-admin
encode gzip zstd
# Correct MIME types for JS/WASM
header {
@js_files path *.js
@wasm_files path *.wasm
Content-Type @js_files application/javascript
Content-Type @wasm_files application/wasm
X-Content-Type-Options nosniff
}
# Fallback for SPA routing
try_files {path} {path}/ index.html
file_server
}
EOF
caddy fmt --overwrite /etc/caddy/Caddyfile
systemctl start caddy
msg_ok "Configured headscale-admin"
fi
msg_info "Starting service"
systemctl enable -q --now headscale
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed ${APPLICATION} v${RELEASE}"
msg_ok "Service started"
motd_ssh
customize
msg_info "Cleaning up"
rm headscale_${RELEASE}_linux_amd64.deb
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -13,34 +13,26 @@ setting_up_container
network_check
update_os
msg_info "Installing OpenJDK"
curl -fsSL "https://packages.adoptium.net/artifactory/api/gpg/key/public" | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg
echo 'deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/adoptium.gpg] https://packages.adoptium.net/artifactory/deb bookworm main' >/etc/apt/sources.list.d/adoptium.list
$STD apt-get update
$STD apt-get install -y temurin-17-jre
msg_ok "Installed OpenJDK"
JAVA_VERSION="21" setup_java
fetch_and_deploy_gh_release "hivemq" "hivemq/hivemq-community-edition" "prebuild" "latest" "/opt/hivemq" "hivemq-ce-*.zip"
msg_info "Installing HiveMQ CE"
RELEASE=$(curl -fsSL https://api.github.com/repos/hivemq/hivemq-community-edition/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://github.com/hivemq/hivemq-community-edition/releases/download/${RELEASE}/hivemq-ce-${RELEASE}.zip" -o "hivemq-ce-${RELEASE}.zip"
$STD unzip hivemq-ce-${RELEASE}.zip
mkdir -p /opt/hivemq
mv hivemq-ce-${RELEASE}/* /opt/hivemq
msg_info "Configuring HiveMQ CE"
useradd -d /opt/hivemq hivemq
chown -R hivemq:hivemq /opt/hivemq
chmod +x /opt/hivemq/bin/run.sh
cp /opt/hivemq/bin/init-script/hivemq.service /etc/systemd/system/hivemq.service
rm /opt/hivemq/conf/config.xml
mv /opt/hivemq/conf/examples/configuration/config-sample-tcp-and-websockets.xml /opt/hivemq/conf/config.xml
msg_ok "Configured HiveMQ CE"
msg_info "Starting service"
systemctl enable -q --now hivemq
msg_ok "Installed HiveMQ CE"
msg_ok "Service started"
motd_ssh
customize
msg_info "Cleaning up"
rm -rf hivemq-ce-${RELEASE}.zip
rm -rf ../hivemq-ce-${RELEASE}
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -283,7 +283,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
mkdir -p "$INSTALL_DIR"
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${ML_DIR}","${INSTALL_DIR}"/cache}
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "latest" "$SRC_DIR"
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.136.0" "$SRC_DIR"
msg_info "Installing ${APPLICATION} (more patience please)"
@@ -299,7 +299,7 @@ cd "$SRC_DIR"/web
$STD npm ci
$STD npm run build
cd "$SRC_DIR"
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,bin/start.sh} "$APP_DIR"/
cp -a web/build "$APP_DIR"/www
cp LICENSE "$APP_DIR"
cd "$APP_DIR"

View File

@@ -64,6 +64,7 @@ $STD pnpm install --frozen-lockfile
$STD pnpm build
cd /opt/karakeep/apps/workers
$STD pnpm install --frozen-lockfile
$STD pnpm build
cd /opt/karakeep/apps/cli
$STD pnpm install --frozen-lockfile
$STD pnpm build
@@ -167,7 +168,7 @@ Wants=network.target karakeep-browser.service meilisearch.service
After=network.target karakeep-browser.service meilisearch.service
[Service]
ExecStart=pnpm start:prod
ExecStart=/usr/bin/node dist/index.mjs
WorkingDirectory=/opt/karakeep/apps/workers
EnvironmentFile=/etc/karakeep/karakeep.env
Restart=always

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster)
# Author: tteck (tteckster) | Co-Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://n8n.io/
@@ -26,13 +26,22 @@ $STD npm install --global n8n
msg_ok "Installed n8n"
msg_info "Creating Service"
HOST_IP=$(hostname -I | awk '{print $1}')
mkdir -p /opt
cat <<EOF >/opt/n8n.env
N8N_SECURE_COOKIE=false
N8N_PORT=5678
N8N_PROTOCOL=http
N8N_HOST=$HOST_IP
EOF
cat <<EOF >/etc/systemd/system/n8n.service
[Unit]
Description=n8n
[Service]
Type=simple
Environment="N8N_SECURE_COOKIE=false"
EnvironmentFile="/opt/n8n.env"
ExecStart=n8n start
[Install]
WantedBy=multi-user.target

View File

@@ -14,18 +14,14 @@ network_check
update_os
msg_info "Installing Dependencies (Patience)"
$STD apt-get install -y \
ffmpeg
$STD apt-get install -y ffmpeg
msg_ok "Installed Dependencies"
msg_info "Installing Navidrome"
RELEASE=$(curl -fsSL https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
TMP_DEB=$(mktemp --suffix=.deb)
curl -fsSL -o "${TMP_DEB}" "https://github.com/navidrome/navidrome/releases/download/${RELEASE}/navidrome_${RELEASE#v}_linux_amd64.deb"
$STD apt-get install -y "${TMP_DEB}"
fetch_and_deploy_gh_release "navidrome" "navidrome/navidrome" "binary"
msg_info "Starting Navidrome"
systemctl enable -q --now navidrome
echo "${RELEASE}" >/opt/Navidrome_version.txt
msg_ok "Installed Navidrome"
msg_ok "Started Navidrome"
read -p "${TAB3}Do you want to install filebrowser addon? (y/n) " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
@@ -36,7 +32,6 @@ motd_ssh
customize
msg_info "Cleaning up"
rm -f "${TMP_DEB}"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -27,7 +27,9 @@ $STD apt-get -y install \
libwww-perl \
nmap \
aria2 \
wakeonlan
wakeonlan \
fping \
zip
msg_ok "Installed Dependencies"
msg_info "Installing PHP Dependencies"
@@ -47,12 +49,15 @@ $STD apt-get -y install \
python3-pip \
python3-requests \
python3-tz \
python3-tzlocal
python3-tzlocal \
python3-aiohttp
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
$STD pip3 install mac-vendor-lookup
$STD pip3 install fritzconnection
$STD pip3 install cryptography
$STD pip3 install pyunifi
$STD pip3 install openwrt-luci-rpc
$STD pip3 install asusrouter
msg_ok "Installed Python Dependencies"
msg_info "Installing Pi.Alert"

View File

@@ -18,7 +18,7 @@ $STD apt-get install -y \
composer \
git \
nginx \
php8.2-{bcmath,common,ctype,curl,fileinfo,fpm,gd,iconv,intl,mbstring,mysql,soap,xml,xsl,zip,cli}
php8.2-{bcmath,common,ctype,ldap,curl,fileinfo,fpm,gd,iconv,intl,mbstring,mysql,soap,xml,xsl,zip,cli}
msg_ok "Installed Dependencies"
setup_mariadb

View File

@@ -13,15 +13,13 @@ setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "victoria-metrics-linux-amd64-v+([0-9.]).tar.gz"
fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "vmutils-linux-amd64-v+([0-9.]).tar.gz"
fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "vlutils-linux-amd64*.tar.gz"
msg_info "Setup VictoriaMetrics"
temp_dir=$(mktemp -d)
cd $temp_dir
mkdir -p /opt/victoriametrics/data
RELEASE=$(curl -fsSL https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz" -o "victoria-metrics-linux-amd64-v${RELEASE}.tar.gz"
curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz" -o "vmutils-linux-amd64-v${RELEASE}.tar.gz"
tar -xf victoria-metrics-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
tar -xf vmutils-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
chmod +x /opt/victoriametrics/*
msg_ok "Setup VictoriaMetrics"
@@ -37,10 +35,26 @@ User=root
WorkingDirectory=/opt/victoriametrics
ExecStart=/opt/victoriametrics/victoria-metrics-prod --storageDataPath="/opt/victoriametrics/data"
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/victoriametrics-logs.service
[Unit]
Description=VictoriaMetrics Service
[Service]
Type=simple
Restart=always
User=root
WorkingDirectory=/opt/victoriametrics
ExecStart=/opt/victoriametrics/victoria-logs-prod
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now victoriametrics
systemctl enable -q --now victoriametrics-logs
msg_ok "Created Service"
motd_ssh

View File

@@ -23,12 +23,12 @@ fetch_and_deploy_gh_release "wizarr" "wizarrrr/wizarr"
msg_info "Configure ${APPLICATION}"
cd /opt/wizarr
uv -q sync --locked
$STD uv -q run pybabel compile -d app/translations
/usr/local/bin/uv -q sync --locked
$STD /usr/local/bin/uv -q run pybabel compile -d app/translations
$STD npm --prefix app/static install
$STD npm --prefix app/static run build:css
mkdir -p ./.cache
$STD uv -q run flask db upgrade
$STD /usr/local/bin/uv -q run flask db upgrade
msg_ok "Configure ${APPLICATION}"
msg_info "Creating env, start script and service"

View File

@@ -152,4 +152,11 @@ EOF
echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update
chmod +x /usr/bin/update
if [[ -n "${SSH_AUTHORIZED_KEY}" ]]; then
mkdir -p /root/.ssh
echo "${SSH_AUTHORIZED_KEY}" >/root/.ssh/authorized_keys
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
fi
}

View File

@@ -66,13 +66,36 @@ root_check() {
# This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported.
pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
# When a node is running tens of containers, it's possible to exceed the kernel's cryptographic key storage allocations.
@@ -226,6 +249,7 @@ write_config() {
# This function writes the configuration to a file.
if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "Write configfile" --yesno "Do you want to write the selections to a config file?" 10 60; then
FILEPATH="/opt/community-scripts/${NSAPP}.conf"
[[ "$GATE" =~ ",gw=" ]] && local GATE="${GATE##,gw=}"
if [[ ! -f $FILEPATH ]]; then
cat <<EOF >"$FILEPATH"
# ${NSAPP} Configuration File

View File

@@ -272,7 +272,8 @@ config_file() {
GATE=""
elif [[ "$NET" =~ $ip_cidr_regex ]]; then
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}$NET${CL}"
if [ ! -z "$GATE" ]; then
if [[ -n "$GATE" ]]; then
[[ "$GATE" =~ ",gw=" ]] && GATE="${GATE##,gw=}"
if [[ "$GATE" =~ $ip_regex ]]; then
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}$GATE${CL}"
GATE=",gw=$GATE"

View File

@@ -32,7 +32,6 @@ function on_exit() {
}
function error_handler() {
local exit_code="$?"
local line_number="$1"
local command="$2"
@@ -51,6 +50,14 @@ function on_terminate() {
exit 143
}
function exit_script() {
clear
printf "\e[?25h"
echo -e "\n${CROSS}${RD}User exited script${CL}\n"
kill 0
exit 1
}
function check_storage_support() {
local CONTENT="$1"
local -a VALID_STORAGES=()
@@ -64,21 +71,7 @@ function check_storage_support() {
[[ ${#VALID_STORAGES[@]} -gt 0 ]]
}
# This checks for the presence of valid Container Storage and Template Storage locations
msg_info "Validating Storage"
if ! check_storage_support "rootdir"; then
msg_error "No valid storage found for 'rootdir' (Container)."
exit 1
fi
if ! check_storage_support "vztmpl"; then
msg_error "No valid storage found for 'vztmpl' (Template)."
exit 1
fi
msg_ok "Validated Storage (rootdir / vztmpl)."
# This function is used to select the storage class and determine the corresponding storage content type and label.
# This function selects a storage pool for a given content type (e.g., rootdir, vztmpl).
function select_storage() {
local CLASS=$1 CONTENT CONTENT_LABEL
@@ -113,8 +106,20 @@ function select_storage() {
;;
esac
local -a MENU
# Check for preset STORAGE variable
if [ "$CONTENT" = "rootdir" ] && [ -n "${STORAGE:-}" ]; then
if pvesm status -content "$CONTENT" | awk 'NR>1 {print $1}' | grep -qx "$STORAGE"; then
STORAGE_RESULT="$STORAGE"
msg_info "Using preset storage: $STORAGE_RESULT for $CONTENT_LABEL"
return 0
else
msg_error "Preset storage '$STORAGE' is not valid for content type '$CONTENT'."
return 2
fi
fi
local -A STORAGE_MAP
local -a MENU
local COL_WIDTH=0
while read -r TAG TYPE _ TOTAL USED FREE _; do
@@ -135,17 +140,23 @@ local -a MENU
if [ $((${#MENU[@]} / 3)) -eq 1 ]; then
STORAGE_RESULT="${STORAGE_MAP[${MENU[0]}]}"
STORAGE_INFO="${MENU[1]}"
return 0
fi
local WIDTH=$((COL_WIDTH + 42))
while true; do
local DISPLAY_SELECTED=$(whiptail --backtitle "Proxmox VE Helper Scripts" \
local DISPLAY_SELECTED
DISPLAY_SELECTED=$(whiptail --backtitle "Proxmox VE Helper Scripts" \
--title "Storage Pools" \
--radiolist "Which storage pool for ${CONTENT_LABEL,,}?\n(Spacebar to select)" \
16 "$WIDTH" 6 "${MENU[@]}" 3>&1 1>&2 2>&3)
[[ $? -ne 0 ]] && return 3
# Cancel or ESC
[[ $? -ne 0 ]] && exit_script
# Strip trailing whitespace or newline (important for storages like "storage (dir)")
DISPLAY_SELECTED=$(sed 's/[[:space:]]*$//' <<<"$DISPLAY_SELECTED")
if [[ -z "$DISPLAY_SELECTED" || -z "${STORAGE_MAP[$DISPLAY_SELECTED]+_}" ]]; then
whiptail --msgbox "No valid storage selected. Please try again." 8 58
@@ -153,6 +164,12 @@ local -a MENU
fi
STORAGE_RESULT="${STORAGE_MAP[$DISPLAY_SELECTED]}"
for ((i = 0; i < ${#MENU[@]}; i += 3)); do
if [[ "${MENU[$i]}" == "$DISPLAY_SELECTED" ]]; then
STORAGE_INFO="${MENU[$i + 1]}"
break
fi
done
return 0
done
}
@@ -181,45 +198,22 @@ if qm status "$CTID" &>/dev/null || pct status "$CTID" &>/dev/null; then
exit 206
fi
# DEFAULT_FILE="/usr/local/community-scripts/default_storage"
# if [[ -f "$DEFAULT_FILE" ]]; then
# source "$DEFAULT_FILE"
# if [[ -n "$TEMPLATE_STORAGE" && -n "$CONTAINER_STORAGE" ]]; then
# msg_info "Using default storage configuration from: $DEFAULT_FILE"
# msg_ok "Template Storage: ${BL}$TEMPLATE_STORAGE${CL} ${GN}|${CL} Container Storage: ${BL}$CONTAINER_STORAGE${CL}"
# else
# msg_warn "Default storage file exists but is incomplete falling back to manual selection"
# TEMPLATE_STORAGE=$(select_storage template)
# msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage."
# CONTAINER_STORAGE=$(select_storage container)
# msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage."
# fi
# else
# # TEMPLATE STORAGE SELECTION
# # Template Storage
# while true; do
# TEMPLATE_STORAGE=$(select_storage template)
# if [[ -n "$TEMPLATE_STORAGE" ]]; then
# msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage."
# break
# fi
# msg_warn "No valid template storage selected. Please try again."
# done
# while true; do
# CONTAINER_STORAGE=$(select_storage container)
# if [[ -n "$CONTAINER_STORAGE" ]]; then
# msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage."
# break
# fi
# msg_warn "No valid container storage selected. Please try again."
# done
# fi
# This checks for the presence of valid Container Storage and Template Storage locations
msg_info "Validating Storage"
if ! check_storage_support "rootdir"; then
msg_error "No valid storage found for 'rootdir' (Container)."
exit 1
fi
if ! check_storage_support "vztmpl"; then
msg_error "No valid storage found for 'vztmpl' (Template)."
exit 1
fi
msg_ok "Valid Storage Found"
while true; do
if select_storage template; then
TEMPLATE_STORAGE="$STORAGE_RESULT"
TEMPLATE_STORAGE_INFO="$STORAGE_INFO"
break
fi
done
@@ -227,9 +221,11 @@ done
while true; do
if select_storage container; then
CONTAINER_STORAGE="$STORAGE_RESULT"
CONTAINER_STORAGE_INFO="$STORAGE_INFO"
break
fi
done
msg_ok "Validated Storage | Container: ${BL}$CONTAINER_STORAGE${CL} ($CONTAINER_STORAGE_INFO)"
# Check free space on selected container storage
STORAGE_FREE=$(pvesm status | awk -v s="$CONTAINER_STORAGE" '$1 == s { print $6 }')
@@ -276,28 +272,34 @@ fi
TEMPLATE="${TEMPLATES[-1]}"
TEMPLATE_PATH="$(pvesm path $TEMPLATE_STORAGE:vztmpl/$TEMPLATE 2>/dev/null || echo "/var/lib/vz/template/cache/$TEMPLATE")"
# Check if template exists and is valid
if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE" || ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
msg_warn "Template $TEMPLATE not found or appears to be corrupted. Re-downloading."
TEMPLATE_VALID=1
if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE"; then
TEMPLATE_VALID=0
elif [ ! -s "$TEMPLATE_PATH" ]; then
TEMPLATE_VALID=0
elif ! tar --use-compress-program=zstdcat -tf "$TEMPLATE_PATH" >/dev/null 2>&1; then
TEMPLATE_VALID=0
fi
if [ "$TEMPLATE_VALID" -eq 0 ]; then
msg_warn "Template $TEMPLATE not found or appears to be corrupted. Re-downloading."
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
for attempt in {1..3}; do
msg_info "Attempt $attempt: Downloading LXC template..."
if pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null 2>&1; then
msg_ok "Template download successful."
break
fi
if [ $attempt -eq 3 ]; then
msg_error "Failed after 3 attempts. Please check your Proxmox hosts internet access or manually run:\n pveam download $TEMPLATE_STORAGE $TEMPLATE"
msg_error "Failed after 3 attempts. Please check network access or manually run:\n pveam download $TEMPLATE_STORAGE $TEMPLATE"
exit 208
fi
sleep $((attempt * 5))
done
fi
msg_ok "LXC Template '$TEMPLATE' is ready to use."
msg_info "Creating LXC Container"
# Check and fix subuid/subgid
grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >>/etc/subuid
@@ -309,7 +311,7 @@ PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
# Secure creation of the LXC container with lock and template check
lockfile="/tmp/template.${TEMPLATE}.lock"
exec 9>"$lockfile" >/dev/null 2>&1 || {
exec 9>"$lockfile" || {
msg_error "Failed to create lock file '$lockfile'."
exit 200
}
@@ -347,7 +349,6 @@ if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[
done
sleep 1 # I/O-Sync-Delay
msg_ok "Re-downloaded LXC Template"
fi

View File

@@ -959,7 +959,7 @@ function fetch_and_deploy_gh_release() {
$STD apt-get install -y unzip
fi
unzip -q "$tmpdir/$filename" -d "$unpack_tmp"
elif [[ "$filename" == *.tar.* ]]; then
elif [[ "$filename" == *.tar.* || "$filename" == *.tgz ]]; then
tar -xf "$tmpdir/$filename" -C "$unpack_tmp"
else
msg_error "Unsupported archive format: $filename"
@@ -969,23 +969,41 @@ function fetch_and_deploy_gh_release() {
local top_dirs
top_dirs=$(find "$unpack_tmp" -mindepth 1 -maxdepth 1 -type d | wc -l)
if [[ "$top_dirs" -eq 1 ]]; then
local top_entries inner_dir
top_entries=$(find "$unpack_tmp" -mindepth 1 -maxdepth 1)
if [[ "$(echo "$top_entries" | wc -l)" -eq 1 && -d "$top_entries" ]]; then
# Strip leading folder
local inner_dir
inner_dir=$(find "$unpack_tmp" -mindepth 1 -maxdepth 1 -type d)
inner_dir="$top_entries"
shopt -s dotglob nullglob
cp -r "$inner_dir"/* "$target/"
if compgen -G "$inner_dir/*" >/dev/null; then
cp -r "$inner_dir"/* "$target/" || {
msg_error "Failed to copy contents from $inner_dir to $target"
rm -rf "$tmpdir" "$unpack_tmp"
return 1
}
else
msg_error "Inner directory is empty: $inner_dir"
rm -rf "$tmpdir" "$unpack_tmp"
return 1
fi
shopt -u dotglob nullglob
else
# Copy all contents
shopt -s dotglob nullglob
cp -r "$unpack_tmp"/* "$target/"
if compgen -G "$unpack_tmp/*" >/dev/null; then
cp -r "$unpack_tmp"/* "$target/" || {
msg_error "Failed to copy contents to $target"
rm -rf "$tmpdir" "$unpack_tmp"
return 1
}
else
msg_error "Unpacked archive is empty"
rm -rf "$tmpdir" "$unpack_tmp"
return 1
fi
shopt -u dotglob nullglob
fi
rm -rf "$unpack_tmp"
### Singlefile Mode ###
elif [[ "$mode" == "singlefile" ]]; then
local pattern="${6%\"}"

View File

@@ -138,14 +138,37 @@ function check_root() {
fi
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -138,14 +138,37 @@ function check_root() {
fi
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -139,14 +139,37 @@ function check_root() {
fi
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -142,14 +142,37 @@ function check_root() {
fi
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -139,14 +139,37 @@ function check_root() {
fi
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -138,14 +138,37 @@ function check_root() {
fi
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -184,14 +184,37 @@ function msg_error() {
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -180,14 +180,37 @@ function msg_error() {
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -139,14 +139,37 @@ function check_root() {
fi
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -147,14 +147,37 @@ function check_root() {
fi
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -134,14 +134,37 @@ function check_root() {
fi
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -137,14 +137,37 @@ function check_root() {
fi
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -136,14 +136,37 @@ function check_root() {
fi
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -136,14 +136,37 @@ function check_root() {
fi
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {

View File

@@ -138,14 +138,37 @@ function check_root() {
fi
}
function pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..."
sleep 2
exit
pve_check() {
local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
# Check for Proxmox VE 8.x
if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 1 || MINOR > 4)); then
msg_error "This version of Proxmox VE is not supported."
echo -e "Required: Proxmox VE version 8.1 8.4"
exit 1
fi
return 0
fi
# Check for Proxmox VE 9.x (Beta) — require confirmation
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
if whiptail --title "Proxmox 9.x Detected (Beta)" \
--yesno "You are using Proxmox VE $PVE_VER, which is currently in Beta state.\n\nThis version is experimentally supported.\n\nDo you want to proceed anyway?" 12 70; then
msg_ok "Confirmed: Continuing with Proxmox VE $PVE_VER"
return 0
else
msg_error "Aborted by user: Proxmox VE 9.x was not confirmed."
exit 1
fi
fi
# All other unsupported versions
msg_error "This version of Proxmox VE is not supported."
echo -e "Supported versions: Proxmox VE 8.1 8.4 or 9.x (Beta, with confirmation)"
exit 1
}
function arch_check() {