Compare commits

...

82 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
d71c3efecd Update CHANGELOG.md (#6412)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-31 00:14:04 +00:00
community-scripts-pr-app[bot]
d366abe8e2 Update versions.json (#6411)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-31 02:13:41 +02:00
community-scripts-pr-app[bot]
f76bb98d3d Update CHANGELOG.md (#6404)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-30 19:14:38 +00:00
Matt Visnovsky
4bd360d31b Strip SD and NS prefixes before writing to config file (#6356) 2025-07-30 21:14:16 +02:00
community-scripts-pr-app[bot]
27e095e1dd Update CHANGELOG.md (#6397)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-30 16:20:02 +00:00
leiweibau
e98f6051e2 PiAlert: bufix dependencies (#6396) 2025-07-30 18:19:42 +02:00
community-scripts-pr-app[bot]
e4d0ac301d Update CHANGELOG.md (#6395)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-30 15:07:58 +00:00
Slaviša Arežina
907be41752 Fixes (#6378) 2025-07-30 17:07:41 +02:00
Slaviša Arežina
af88ff3dd4 Refactor (#6379) 2025-07-30 17:07:11 +02:00
community-scripts-pr-app[bot]
2c618f53ca Update CHANGELOG.md (#6394)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-30 15:06:54 +00:00
CanbiZ
16dbcac3a1 n8n: add build-essential as dependency (#6392) 2025-07-30 17:06:26 +02:00
community-scripts-pr-app[bot]
0ba9c9dff3 Update CHANGELOG.md (#6393)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-30 13:31:24 +00:00
CanbiZ
23573bfce9 fix apt-cacher heredoc (#6385) 2025-07-30 15:31:00 +02:00
community-scripts-pr-app[bot]
9f1431b263 Update CHANGELOG.md (#6390)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-30 13:20:26 +00:00
Slaviša Arežina
53beca39e8 Refactor (#6376) 2025-07-30 15:20:20 +02:00
community-scripts-pr-app[bot]
2701308b45 Update CHANGELOG.md (#6389)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-30 13:20:03 +00:00
Slaviša Arežina
f33c292c3e Refactor (#6374) 2025-07-30 15:19:58 +02:00
community-scripts-pr-app[bot]
234b4e334e Update CHANGELOG.md (#6388)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-30 13:19:39 +00:00
Slaviša Arežina
eada9f3ae8 Refactor (#6373) 2025-07-30 15:19:33 +02:00
Slaviša Arežina
fb8c44b753 Refactor (#6372) 2025-07-30 15:19:12 +02:00
community-scripts-pr-app[bot]
4679d321a7 Update CHANGELOG.md (#6387)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-30 13:17:46 +00:00
Slaviša Arežina
50345c631a Habitica: Fix trusted domains (#6380)
* Fix trusted domains

* Update
2025-07-30 15:17:24 +02:00
community-scripts-pr-app[bot]
2f61a2ffe2 Update CHANGELOG.md (#6384)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-30 13:10:21 +00:00
Slaviša Arežina
e9240fb9b8 Fix undeclared var (#6371) 2025-07-30 15:09:57 +02:00
community-scripts-pr-app[bot]
f77e7b626d Update versions.json (#6381)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-30 14:05:58 +02:00
community-scripts-pr-app[bot]
f8b901ab0d Update CHANGELOG.md (#6367)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-30 00:14:38 +00:00
community-scripts-pr-app[bot]
25b811040c Update versions.json (#6366)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-30 02:14:19 +02:00
Slaviša Arežina
05d11bf66d n8n: Fix service file (#6362)
* Update n8n-install.sh

* Update

* Update

* Update

* Update
2025-07-29 21:52:15 +02:00
community-scripts-pr-app[bot]
c7aac080ac Update date in json (#6359)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-07-29 20:30:56 +02:00
Slaviša Arežina
0ad0a665ed Update salt.json (#6357) 2025-07-29 20:26:38 +02:00
community-scripts-pr-app[bot]
304f181bb2 Update CHANGELOG.md (#6358)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-29 18:03:10 +00:00
push-app-to-main[bot]
ea50246c91 'Add new script' (#6336) 2025-07-29 20:02:51 +02:00
community-scripts-pr-app[bot]
7aa1f18761 Update CHANGELOG.md (#6350)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-29 13:07:17 +00:00
Slaviša Arežina
ab6f2dd24f Refactor: HomeBox (#6338)
* Refactor

* Refactor

* Update
2025-07-29 15:06:52 +02:00
community-scripts-pr-app[bot]
815720b59e Update CHANGELOG.md (#6349)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-29 12:53:33 +00:00
Slaviša Arežina
5597f7fc41 Refactor (#6343) 2025-07-29 14:53:08 +02:00
community-scripts-pr-app[bot]
6450c3c6a4 Update CHANGELOG.md (#6348)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-29 12:52:43 +00:00
Slaviša Arežina
70cb8198fd Refactor: Jackett (#6344)
* Refactor

* Update
2025-07-29 14:52:19 +02:00
community-scripts-pr-app[bot]
498723fd62 Update versions.json (#6345)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-29 14:05:51 +02:00
community-scripts-pr-app[bot]
d4146e0d43 Update CHANGELOG.md (#6342)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-29 10:40:47 +00:00
community-scripts-pr-app[bot]
0ca0126420 Update CHANGELOG.md (#6341)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-29 10:40:23 +00:00
leiweibau
5af772af2f Update pialert-install.sh (#6337) 2025-07-29 12:39:59 +02:00
community-scripts-pr-app[bot]
241df52ae5 Update CHANGELOG.md (#6340)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-29 10:27:20 +00:00
Rémi Bédard-Couture
10db421c45 Update keycloak script to support configuration of latest release (v26) (#6322)
* Update keycloak script to support configuration of latest release (v26)

* Add quotes around default credential values

* fix update script

Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>

* spelling "restarting"

Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>

* remove temp file and spelling

Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>

---------

Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-07-29 12:26:55 +02:00
community-scripts-pr-app[bot]
1f101c0bd3 Update CHANGELOG.md (#6339)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-29 10:24:45 +00:00
CanbiZ
202eb3fb2a Refactor: Photoprism (#6335) 2025-07-29 12:24:21 +02:00
community-scripts-pr-app[bot]
e54ed7dc35 Update CHANGELOG.md (#6334)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-29 06:30:51 +00:00
Slaviša Arežina
34da66600d Refactor: Autobrr (#6302)
* Refactor

* Update

* Update autobrr.sh
2025-07-29 08:30:32 +02:00
Tobias
5a889d8fc6 crafty: fix: spelling (#6304)
* crafty: fix: spelling

* Update crafty-controller-install.sh
2025-07-29 07:05:41 +02:00
community-scripts-pr-app[bot]
22e9c33a2a Update CHANGELOG.md (#6332)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-29 04:56:07 +00:00
TJ
25a8df4902 Element Synapse CT RAM increased from 1024 to 2048 (#6330) 2025-07-29 06:55:46 +02:00
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
84 changed files with 1688 additions and 984 deletions

View File

@@ -10,8 +10,86 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-07-31
## 2025-07-30
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Strip SD and NS prefixes before writing to config file [@mattv8](https://github.com/mattv8) ([#6356](https://github.com/community-scripts/ProxmoxVE/pull/6356))
- [core] fix: expand $CACHER_IP in apt-proxy-detect.sh (revert quoted heredoc) [@MickLesk](https://github.com/MickLesk) ([#6385](https://github.com/community-scripts/ProxmoxVE/pull/6385))
- PiAlert: bugfix dependencies [@leiweibau](https://github.com/leiweibau) ([#6396](https://github.com/community-scripts/ProxmoxVE/pull/6396))
- Librespeed-Rust: Fix service name and RELEASE var fetching [@tremor021](https://github.com/tremor021) ([#6378](https://github.com/community-scripts/ProxmoxVE/pull/6378))
- n8n: add build-essential as dependency [@MickLesk](https://github.com/MickLesk) ([#6392](https://github.com/community-scripts/ProxmoxVE/pull/6392))
- Habitica: Fix trusted domains [@tremor021](https://github.com/tremor021) ([#6380](https://github.com/community-scripts/ProxmoxVE/pull/6380))
- Mafl: Fix undeclared var [@tremor021](https://github.com/tremor021) ([#6371](https://github.com/community-scripts/ProxmoxVE/pull/6371))
- #### 🔧 Refactor
- Refactor: Lidarr [@tremor021](https://github.com/tremor021) ([#6379](https://github.com/community-scripts/ProxmoxVE/pull/6379))
- Refactor: Kubo [@tremor021](https://github.com/tremor021) ([#6376](https://github.com/community-scripts/ProxmoxVE/pull/6376))
- Refactor: Komga [@tremor021](https://github.com/tremor021) ([#6374](https://github.com/community-scripts/ProxmoxVE/pull/6374))
- Refactor: Koillection [@tremor021](https://github.com/tremor021) ([#6373](https://github.com/community-scripts/ProxmoxVE/pull/6373))
- Refactor: Karakeep [@tremor021](https://github.com/tremor021) ([#6372](https://github.com/community-scripts/ProxmoxVE/pull/6372))
## 2025-07-29
### 🆕 New Scripts
- Jeedom ([#6336](https://github.com/community-scripts/ProxmoxVE/pull/6336))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- PiAlert: add new dependencies [@leiweibau](https://github.com/leiweibau) ([#6337](https://github.com/community-scripts/ProxmoxVE/pull/6337))
- Element Synapse CT RAM increased from 1024 to 2048 [@tjcomserv](https://github.com/tjcomserv) ([#6330](https://github.com/community-scripts/ProxmoxVE/pull/6330))
- #### 🔧 Refactor
- Refactor: HomeBox [@tremor021](https://github.com/tremor021) ([#6338](https://github.com/community-scripts/ProxmoxVE/pull/6338))
- Refactor: InspIRCd [@tremor021](https://github.com/tremor021) ([#6343](https://github.com/community-scripts/ProxmoxVE/pull/6343))
- Refactor: Jackett [@tremor021](https://github.com/tremor021) ([#6344](https://github.com/community-scripts/ProxmoxVE/pull/6344))
- Update keycloak script to support configuration of latest release (v26) [@remz1337](https://github.com/remz1337) ([#6322](https://github.com/community-scripts/ProxmoxVE/pull/6322))
- Refactor: Photoprism [@MickLesk](https://github.com/MickLesk) ([#6335](https://github.com/community-scripts/ProxmoxVE/pull/6335))
- Refactor: Autobrr [@tremor021](https://github.com/tremor021) ([#6302](https://github.com/community-scripts/ProxmoxVE/pull/6302))
## 2025-07-28 ## 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 ## 2025-07-27
### 🚀 Updated Scripts ### 🚀 Updated Scripts

View File

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

View File

@@ -27,22 +27,24 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Stopping ${APP} LXC"
systemctl stop autobrr.service
msg_ok "Stopped ${APP} LXC"
msg_info "Updating ${APP} LXC" RELEASE=$(curl -fsSL https://api.github.com/repos/autobrr/autobrr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
rm -rf /usr/local/bin/* if [[ "${RELEASE}" != "$(cat ~/.autobrr 2>/dev/null)" ]] || [[ ! -f ~/.autobrr ]]; then
curl -fsSL "$(curl -fsSL https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_x86_64 | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_x86_64 | cut -d\" -f4)") msg_info "Stopping ${APP} LXC"
tar -C /usr/local/bin -xzf autobrr*.tar.gz systemctl stop autobrr
rm -rf autobrr*.tar.gz msg_ok "Stopped ${APP} LXC"
msg_ok "Updated ${APP} LXC"
msg_info "Starting ${APP} LXC" fetch_and_deploy_gh_release "autobrr" "autobrr/autobrr" "prebuild" "latest" "/usr/local/bin" "autobrr_*_linux_x86_64.tar.gz"
systemctl start autobrr.service
msg_ok "Started ${APP} LXC" msg_info "Starting ${APP} LXC"
msg_ok "Updated Successfully" systemctl start autobrr
exit msg_ok "Started ${APP} LXC"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
} }
start start

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) LATEST=$(curl -fsSL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
IP=$(hostname -I | awk '{print $1}') IP=$(hostname -I | awk '{print $1}')
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y \
$STD apt-get install -y git git \
$STD apt-get install -y make build-essential \
$STD apt-get install -y g++ ca-certificates \
$STD apt-get install -y gcc gnupg2
$STD apt-get install -y ca-certificates
$STD apt-get install -y gnupg
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Setting up Node.js Repository" NODE_VERSION="22" setup_nodejs
mkdir -p /etc/apt/keyrings fetch_and_deploy_gh_release "cronicle" "jhuckaby/Cronicle"
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"
msg_info "Installing Node.js" msg_info "Configuring Cronicle Worker"
$STD apt-get update
$STD apt-get install -y nodejs
msg_ok "Installed Node.js"
msg_info "Installing Cronicle Worker"
mkdir -p /opt/cronicle
cd /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 npm install
$STD node bin/build.js dist $STD node bin/build.js dist
sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json 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 chmod 775 /etc/init.d/cronicled
$STD update-rc.d cronicled defaults $STD update-rc.d cronicled defaults
msg_ok "Installed Cronicle Worker" msg_ok "Installed Cronicle Worker"
echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n" echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
exit exit
fi fi

View File

@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="Element Synapse" APP="Element Synapse"
var_tags="${var_tags:-server}" var_tags="${var_tags:-server}"
var_cpu="${var_cpu:-1}" var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}" var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"

View File

@@ -29,23 +29,18 @@ function update_script() {
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/gotify/server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') 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}" msg_info "Stopping ${APP}"
systemctl stop gotify systemctl stop gotify
msg_ok "Stopped ${APP}" msg_ok "Stopped ${APP}"
msg_info "Updating ${APP} to ${RELEASE}" fetch_and_deploy_gh_release "gotify" "gotify/server" "prebuild" "latest" "/opt/gotify" "gotify-linux-amd64.zip"
cd /opt/gotify chmod +x /opt/gotify/gotify-linux-amd64
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}"
msg_info "Starting ${APP}" msg_info "Starting ${APP}"
systemctl start gotify systemctl start gotify
msg_ok "Started ${APP}" msg_ok "Started ${APP}"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" 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!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
$STD apt-get update $STD apt-get update
$STD apt-get -y upgrade $STD apt-get -y upgrade
@@ -41,4 +42,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}: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!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
php_version=$(php -v | head -n 1 | awk '{print $2}')
if [[ ! $php_version == "8.3"* ]]; then php_ver=$(php -v | head -n 1 | awk '{print $2}')
msg_info "Updating PHP" if [[ ! $php_ver == "8.3"* ]]; then
curl -fsSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg PHP_VERSION="8.3" PHP_MODULE="sqlite3,bz2" PHP_APACHE="yes" setup_php
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 fi
apt-get update
apt-get install -y php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl,sqlite3,fpm,gd,zip,xml} RELEASE=$(curl -fsSL https://api.github.com/repos/grocy/grocy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
systemctl reload apache2 if [[ "${RELEASE}" != "$(cat ~/.grocy 2>/dev/null)" ]] || [[ ! -f ~/.grocy ]]; then
apt autoremove msg_info "Updating ${APP}"
msg_ok "Updated PHP" bash /var/www/html/update.sh
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
msg_info "Updating ${APP}"
bash /var/www/html/update.sh
msg_ok "Updated Successfully"
exit exit
} }

6
ct/headers/jeedom Normal file
View File

@@ -0,0 +1,6 @@
__ __
/ /__ ___ ____/ /___ ____ ___
__ / / _ \/ _ \/ __ / __ \/ __ `__ \
/ /_/ / __/ __/ /_/ / /_/ / / / / / /
\____/\___/\___/\__,_/\____/_/ /_/ /_/

View File

@@ -22,26 +22,24 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f /opt/homebox ]]; then if [[ ! -d /opt/homebox ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ -x /opt/homebox ]]; then
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then sed -i 's|/opt\b|/opt/homebox|g' /etc/systemd/system/homebox.service
sed -i 's|^ExecStart=/opt/homebox$|ExecStart=/opt/homebox/homebox|' /etc/systemd/system/homebox.service
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.homebox 2>/dev/null)" ]] || [[ ! -f ~/.homebox ]]; then
msg_info "Stopping ${APP}" msg_info "Stopping ${APP}"
systemctl stop homebox systemctl stop homebox
msg_ok "${APP} Stopped" msg_ok "${APP} Stopped"
msg_info "Updating ${APP} to ${RELEASE}" fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_x86_64.tar.gz"
cd /opt chmod +x /opt/homebox/homebox
rm -rf homebox_bak [ -f /opt/.env ] && mv /opt/.env /opt/homebox/.env
rm -rf /tmp/homebox.tar.gz
mv homebox homebox_bak
curl -fsSL "https://github.com/sysadminsmedia/homebox/releases/download/${RELEASE}/homebox_Linux_x86_64.tar.gz" -o "/tmp/homebox.tar.gz"
tar -xzf /tmp/homebox.tar.gz -C /opt
chmod +x /opt/homebox
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated Homebox"
msg_info "Starting ${APP}" msg_info "Starting ${APP}"
systemctl start homebox systemctl start homebox
@@ -61,4 +59,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7745${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7745${CL}"

View File

@@ -27,26 +27,19 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/inspircd/inspircd/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/inspircd/inspircd/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 ~/.inspircd 2>/dev/null)" ]] || [[ ! -f ~/.inspircd ]]; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop inspircd systemctl stop inspircd
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Updating ${APP} to v${RELEASE}" fetch_and_deploy_gh_release "inspircd" "inspircd/inspircd" "binary"
cd /opt
curl -fsSL "https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u2_amd64.deb" -o $(basename "https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u2_amd64.deb")
$STD apt-get install "./inspircd_${RELEASE}.deb12u2_amd64.deb" -y
echo "${RELEASE}" >"/opt/${APP}_version.txt"
msg_ok "Updated ${APP} to v${RELEASE}"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start inspircd systemctl start inspircd
msg_ok "Started Service" msg_ok "Started Service"
msg_info "Cleaning up"
rm -rf /opt/inspircd_${RELEASE}.deb12u2_amd64.deb
msg_ok "Cleaned"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}." msg_ok "No update required. ${APP} is already at v${RELEASE}."

View File

@@ -27,17 +27,18 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -fsSL https://github.com/Jackett/Jackett/releases/latest | grep "title>Release" | cut -d " " -f 4)
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then if [ ! -f /opt/.env ]; then
msg_info "Updating ${APP}" sed -i 's|^Environment="DisableRootWarning=true"$|EnvironmentFile="/opt/.env"|' /etc/systemd/system/jackett.service
curl -fsSL "https://github.com/Jackett/Jackett/releases/download/$RELEASE/Jackett.Binaries.LinuxAMDx64.tar.gz" -o $(basename "https://github.com/Jackett/Jackett/releases/download/$RELEASE/Jackett.Binaries.LinuxAMDx64.tar.gz") cat <<EOF >/opt/.env
systemctl stop jackett DisableRootWarning=true
EOF
fi
RELEASE=$(curl -s https://api.github.com/repos/Jackett/Jackett/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.jackett 2>/dev/null)" ]] || [[ ! -f ~/.jackett ]]; then
rm -rf /opt/Jackett rm -rf /opt/Jackett
tar -xzf Jackett.Binaries.LinuxAMDx64.tar.gz -C /opt fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.LinuxAMDx64.tar.gz"
rm -rf Jackett.Binaries.LinuxAMDx64.tar.gz
systemctl start jackett
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi

46
ct/jeedom.sh Normal file
View File

@@ -0,0 +1,46 @@
#!/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: Mips2648
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://jeedom.com/
APP="Jeedom"
var_tags="${var_tags:-automation;smarthome}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-16}"
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 /var/www/html/core/config/version ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating OS"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "OS updated, you can now update Jeedom from the Web UI."
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@@ -52,6 +52,10 @@ function update_script() {
rm -rf /opt/karakeep rm -rf /opt/karakeep
msg_ok "Update prepared" 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" fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep"
if command -v corepack >/dev/null; then if command -v corepack >/dev/null; then
$STD corepack disable $STD corepack disable
@@ -70,6 +74,7 @@ function update_script() {
$STD pnpm build $STD pnpm build
cd /opt/karakeep/apps/workers cd /opt/karakeep/apps/workers
$STD pnpm install --frozen-lockfile $STD pnpm install --frozen-lockfile
$STD pnpm build
cd /opt/karakeep/apps/cli cd /opt/karakeep/apps/cli
$STD pnpm install --frozen-lockfile $STD pnpm install --frozen-lockfile
$STD pnpm build $STD pnpm build

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) # Author: tteck (tteckster) | Co-Author: remz1337
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.keycloak.org/ # Source: https://www.keycloak.org/
@@ -23,34 +23,39 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f /etc/systemd/system/keycloak.service ]]; then if [[ ! -d /opt/keycloak ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating ${APP} LXC"
msg_info "Stopping Keycloak"
systemctl stop keycloak
msg_ok "Stopped Keycloak"
msg_info "Updating packages" msg_info "Updating packages"
$STD apt-get update $STD apt-get update
$STD apt-get -y upgrade $STD apt-get -y upgrade
msg_ok "Updated packages"
RELEASE=$(curl -fsSL https://api.github.com/repos/keycloak/keycloak/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') msg_info "Backup old Keycloak"
msg_info "Updating Keycloak to v$RELEASE"
cd /opt cd /opt
curl -fsSL "https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz" -o $(basename "https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz")
mv keycloak keycloak.old mv keycloak keycloak.old
tar -xzf keycloak-$RELEASE.tar.gz tar -czf keycloak_conf_backup.tar.gz keycloak.old/conf
cp -r keycloak.old/conf keycloak-$RELEASE msg_ok "Backup done"
cp -r keycloak.old/providers keycloak-$RELEASE
cp -r keycloak.old/themes keycloak-$RELEASE
mv keycloak-$RELEASE keycloak
msg_info "Delete temporary installation files" fetch_and_deploy_gh_release "keycloak" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz"
rm keycloak-$RELEASE.tar.gz
msg_info "Updating ${APP}"
cd /opt
mv keycloak_conf_backup.tar.gz keycloak/conf
cp -r keycloak.old/providers keycloak
cp -r keycloak.old/themes keycloak
rm -rf keycloak.old rm -rf keycloak.old
msg_ok "Updated ${APP} LXC"
msg_info "Restating Keycloak" msg_info "Restarting Keycloak"
systemctl restart keycloak systemctl restart keycloak
msg_ok "Updated Successfully" msg_ok "Restarted Keycloak"
exit exit
} }

View File

@@ -28,17 +28,18 @@ function update_script() {
exit exit
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/benjaminjonard/koillection/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(curl -fsSL https://api.github.com/repos/benjaminjonard/koillection/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then if [[ ! -f ~/.koillection ]] || [[ "${RELEASE}" != "$(cat ~/.koillection)" ]]; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop apache2 systemctl stop apache2
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Updating ${APP} to v${RELEASE}" msg_info "Creating a backup"
cd /opt
mv /opt/koillection/ /opt/koillection-backup mv /opt/koillection/ /opt/koillection-backup
curl -fsSL "https://github.com/benjaminjonard/koillection/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/benjaminjonard/koillection/archive/refs/tags/${RELEASE}.zip") msg_ok "Backup created"
$STD unzip "${RELEASE}.zip"
mv "/opt/koillection-${RELEASE}" /opt/koillection fetch_and_deploy_gh_release "koillection" "benjaminjonard/koillection"
msg_info "Updating ${APP} to v${RELEASE}"
cd /opt/koillection cd /opt/koillection
cp -r /opt/koillection-backup/.env.local /opt/koillection cp -r /opt/koillection-backup/.env.local /opt/koillection
cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/ cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/
@@ -50,7 +51,6 @@ function update_script() {
$STD yarn install $STD yarn install
$STD yarn build $STD yarn build
chown -R www-data:www-data /opt/koillection/public/uploads chown -R www-data:www-data /opt/koillection/public/uploads
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}" msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting Service" msg_info "Starting Service"
@@ -58,9 +58,9 @@ function update_script() {
msg_ok "Started Service" msg_ok "Started Service"
msg_info "Cleaning up" msg_info "Cleaning up"
rm -r "/opt/${RELEASE}.zip"
rm -r /opt/koillection-backup rm -r /opt/koillection-backup
msg_ok "Cleaned" msg_ok "Cleaned"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}" msg_ok "No update required. ${APP} is already at v${RELEASE}"

View File

@@ -27,23 +27,21 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating ${APP}"
RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then if [[ ! -f ~/.komga ]] || [[ "${RELEASE}" != "$(cat ~/.komga)" ]]; then
msg_info "Stopping ${APP}" msg_info "Stopping ${APP}"
systemctl stop komga systemctl stop komga
msg_ok "Stopped ${APP}" msg_ok "Stopped ${APP}"
msg_info "Updating ${APP} to ${RELEASE}" rm -f /opt/komga/komga.jar
curl -fsSL "https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar" -o $(basename "https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar") USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "komga" "gotson/komga" "singlefile" "latest" "/opt/komga" "komga*.jar"
rm -rf /opt/komga/komga.jar mv /opt/komga/komga-*.jar /opt/komga/komga.jar
mv -f komga-${RELEASE}.jar /opt/komga/komga.jar
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"
msg_info "Starting ${APP}" msg_info "Starting ${APP}"
systemctl start komga systemctl start komga
msg_ok "Started ${APP}" msg_ok "Started ${APP}"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}." msg_ok "No update required. ${APP} is already at ${RELEASE}."

View File

@@ -23,21 +23,24 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f /usr/local/kubo ]]; then if [[ ! -f /usr/local/kubo/ipfs ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -fsSL https://github.com/ipfs/kubo/releases/latest | grep "title>Release" | cut -d " " -f 4)
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then RELEASE=$(curl -fsSL https://api.github.com/repos/ipfs/kubo/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Updating $APP LXC" if [[ "${RELEASE}" != "$(cat ~/.kubo)" ]] || [[ ! -f ~/.kubo ]]; then
$STD apt-get update msg_info "Stopping service"
$STD apt-get -y upgrade systemctl stop ipfs
curl -fsSL "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-amd64.tar.gz" -o $(basename "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-amd64.tar.gz") msg_ok "Stopped service"
tar -xzf "kubo_${RELEASE}_linux-amd64.tar.gz" -C /usr/local
systemctl restart ipfs.service fetch_and_deploy_gh_release "kubo" "ipfs/kubo" "prebuild" "latest" "/usr/local/kubo" "kubo*linux-amd64.tar.gz"
echo "${RELEASE}" >/opt/${APP}_version.txt
rm "kubo_${RELEASE}_linux-amd64.tar.gz" msg_info "Starting service"
msg_ok "Updated $APP LXC" systemctl start ipfs
msg_ok "Service started"
msg_ok "Updated successfuly"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi

View File

@@ -27,16 +27,17 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/librespeed/speedtest-rust/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "v([^"]+).*/\1/')
RELEASE=$(curl -fsSL https://api.github.com/repos/librespeed/speedtest-rust/releases/latest | jq -r '.tag_name' | sed 's/^v//')
if [[ "${RELEASE}" != "$(cat ~/.librespeed 2>/dev/null)" ]] || [[ ! -f ~/.librespeed ]]; then if [[ "${RELEASE}" != "$(cat ~/.librespeed 2>/dev/null)" ]] || [[ ! -f ~/.librespeed ]]; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop librespeed-rs systemctl stop librespeed_rs
msg_ok "Services Stopped" msg_ok "Services Stopped"
fetch_and_deploy_gh_release "librespeed-rust" "librespeed/speedtest-rust" "binary" "latest" "/opt/librespeed-rust" "librespeed-rs-x86_64-unknown-linux-gnu.deb" fetch_and_deploy_gh_release "librespeed-rust" "librespeed/speedtest-rust" "binary" "latest" "/opt/librespeed-rust" "librespeed-rs-x86_64-unknown-linux-gnu.deb"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start librespeed-rs systemctl start librespeed_rs
msg_ok "Started Service" msg_ok "Started Service"
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}" msg_ok "No update required. ${APP} is already at v${RELEASE}"

View File

@@ -29,19 +29,24 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" RELEASE=$(curl -fsSL https://api.github.com/repos/Lidarr/Lidarr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
temp_file="$(mktemp)" if [[ "${RELEASE}" != "$(cat ~/.lidarr)" ]] || [[ ! -f ~/.lidarr ]]; then
rm -rf /opt/Lidarr
RELEASE=$(curl -fsSL https://api.github.com/repos/Lidarr/Lidarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/Lidarr/Lidarr/releases/download/v${RELEASE}/Lidarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file"
$STD tar -xvzf "$temp_file"
mv Lidarr /opt
chmod 775 /opt/Lidarr
msg_ok "Updated $APP LXC"
msg_info "Cleaning up" msg_info "Stopping service"
rm -rf "$temp_file" systemctl stop lidarr
msg_ok "Cleaned up" msg_ok "Service stopped"
fetch_and_deploy_gh_release "lidarr" "Lidarr/Lidarr" "prebuild" "latest" "/opt/Lidarr" "Lidarr.master*linux-core-x64.tar.gz"
chmod 775 /opt/Lidarr
msg_info "Starting service"
systemctl start lidarr
msg_ok "Service started"
msg_ok "Updated successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit exit
} }

View File

@@ -34,6 +34,18 @@ function update_script() {
echo "Installed NPM..." echo "Installed NPM..."
fi fi
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" msg_info "Updating ${APP} LXC"
$STD npm update -g n8n $STD npm update -g n8n
systemctl restart n8n systemctl restart n8n
@@ -48,4 +60,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}: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!" msg_error "No ${APP} Installation Found!"
exit exit
fi 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 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 /opt/${APP}_version.txt)" ]]; then if [[ "${RELEASE}" != "$(cat ~/.navidrome 2>/dev/null)" ]] || [[ ! -f ~/.navidrome ]]; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop navidrome systemctl stop navidrome
msg_ok "Services Stopped" msg_ok "Services Stopped"
msg_info "Updating ${APP} to ${RELEASE}" fetch_and_deploy_gh_release "navidrome" "navidrome/navidrome" "binary"
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"
msg_info "Starting Services" msg_info "Starting Services"
systemctl start navidrome systemctl start navidrome
msg_ok "Started Services" msg_ok "Started Services"
msg_info "Cleaning Up"
rm -f "${TMP_DEB}"
msg_ok "Cleaned"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"

View File

@@ -27,22 +27,35 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Stopping PhotoPrism"
sudo systemctl stop photoprism
msg_ok "Stopped PhotoPrism"
msg_info "Updating PhotoPrism" RELEASE=$(curl -fsSL https://api.github.com/repos/photoprism/photoprism/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
$STD apt-get install -y libvips42 if [[ "${RELEASE}" != "$(cat ~/.photoprism 2>/dev/null)" ]] || [[ ! -f ~/.photoprism ]]; then
curl -fsSL https://dl.photoprism.app/pkg/linux/amd64.tar.gz | tar -xzf - -C /opt/photoprism --strip-components=1 msg_info "Stopping PhotoPrism"
msg_ok "Updated PhotoPrism" systemctl stop photoprism
msg_ok "Stopped PhotoPrism"
msg_info "Starting PhotoPrism" fetch_and_deploy_gh_release "photoprism" "photoprism/photoprism" "prebuild" "latest" "/opt/photoprism" "*linux-amd64.tar.gz"
sudo systemctl start photoprism
msg_ok "Started PhotoPrism" LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-$(lsb_release -cs)-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1)
msg_ok "Update Successful" if [[ "${LIBHEIF_URL}" != "$(cat ~/.photoprism_libheif 2>/dev/null)" ]] || [[ ! -f ~/.photoprism_libheif ]]; then
msg_info "Updating PhotoPrism LibHeif"
$STD apt-get install -y libvips42
curl -fsSL "https://dl.photoprism.app/dist/libheif/$LIBHEIF_URL" -o /tmp/libheif.tar.gz
tar -xzf /tmp/libheif.tar.gz -C /usr/local
ldconfig
echo "${LIBHEIF_URL}" >~/.photoprism_libheif
msg_ok "Updated PhotoPrism LibHeif"
fi
msg_info "Starting PhotoPrism"
systemctl start photoprism
msg_ok "Started PhotoPrism"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit exit
} }
start start
build_container build_container
description description

View File

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

View File

@@ -20,7 +20,7 @@
"script": "ct/elementsynapse.sh", "script": "ct/elementsynapse.sh",
"resources": { "resources": {
"cpu": 1, "cpu": 1,
"ram": 1024, "ram": 2048,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "12"

View File

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

View File

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

View File

@@ -9,10 +9,10 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 7745, "interface_port": 7745,
"documentation": null, "documentation": "https://homebox.software/en/quick-start.html",
"website": "https://homebox.software/en/", "website": "https://homebox.software/en/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homebox.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homebox.webp",
"config_path": "/opt/.env", "config_path": "/opt/homebox/.env",
"description": "HomeBox is a simple, home-focused inventory management software. It allows users to organize and track household items by adding, updating, or deleting them. Features include optional details like warranty info, CSV import/export, custom labels, locations, and multi-tenant support for sharing with others. It\u2019s designed to be fast, easy to use, and portable.", "description": "HomeBox is a simple, home-focused inventory management software. It allows users to organize and track household items by adding, updating, or deleting them. Features include optional details like warranty info, CSV import/export, custom labels, locations, and multi-tenant support for sharing with others. It\u2019s designed to be fast, easy to use, and portable.",
"install_methods": [ "install_methods": [
{ {
@@ -31,10 +31,5 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [ "notes": []
{
"text": ".env file location: `/opt/.env`",
"type": "info"
}
]
} }

View File

@@ -6,13 +6,13 @@
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": false, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 9117, "interface_port": 9117,
"documentation": "https://github.com/Jackett/Jackett/wiki", "documentation": "https://github.com/Jackett/Jackett/wiki",
"website": "https://github.com/Jackett/Jackett", "website": "https://github.com/Jackett/Jackett",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/jackett.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/jackett.webp",
"config_path": "", "config_path": "/opt/.env",
"description": "Jackett supports a wide range of trackers, including popular ones like The Pirate Bay, RARBG, and Torrentz2, as well as many private trackers. It can be integrated with several BitTorrent clients, including qBittorrent, Deluge, and uTorrent, among others.", "description": "Jackett supports a wide range of trackers, including popular ones like The Pirate Bay, RARBG, and Torrentz2, as well as many private trackers. It can be integrated with several BitTorrent clients, including qBittorrent, Deluge, and uTorrent, among others.",
"install_methods": [ "install_methods": [
{ {

View File

@@ -0,0 +1,44 @@
{
"name": "Jeedom",
"slug": "jeedom",
"categories": [
16
],
"date_created": "2025-07-29",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": 80,
"documentation": "https://doc.jeedom.com",
"config_path": "",
"website": "https://jeedom.com/",
"logo": "https://jeedom.com/_next/image?url=%2Fassets%2Fimg%2Flogo.png&w=256&q=75",
"description": "Jeedom is a home automation system that is free, open, and cloudless. It allows users to manage and automate various aspects of their homes by creating objects, installing plugins for added functionalities, and connecting to a Market account for services. It also supports direct access URLs and user management.",
"install_methods": [
{
"type": "default",
"script": "ct/jeedom.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 16,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "admin",
"password": "admin"
},
"notes": [
{
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
"type": "warning"
},
{
"text": "Only OS packages are updateable. To update Jeedom, please use the web interface.",
"type": "info"
}
]
}

View File

@@ -6,7 +6,7 @@
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": false, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8080, "interface_port": 8080,
"documentation": "https://www.keycloak.org/documentation", "documentation": "https://www.keycloak.org/documentation",
@@ -28,8 +28,8 @@
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": "tmpadm",
"password": null "password": "admin123"
}, },
"notes": [ "notes": [
{ {
@@ -39,6 +39,10 @@
{ {
"text": "This script requires some extra steps after the installation, Please checkout the `https://github.com/community-scripts/ProxmoxVE/discussions/193`", "text": "This script requires some extra steps after the installation, Please checkout the `https://github.com/community-scripts/ProxmoxVE/discussions/193`",
"type": "info" "type": "info"
},
{
"text": "When updating, if you had modified cache-ispn.xml: Re-apply your changes to the new file, otherwise leave it unchanged.",
"type": "info"
} }
] ]
} }

View File

@@ -9,10 +9,10 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 8686, "interface_port": 8686,
"documentation": null, "documentation": "https://wiki.servarr.com/en/lidarr",
"website": "https://lidarr.audio/", "website": "https://lidarr.audio/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/lidarr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/lidarr.webp",
"config_path": "", "config_path": "/var/lib/lidarr/config.xml",
"description": "Lidarr is a music management tool designed for Usenet and BitTorrent users. It allows users to manage and organize their music collection with ease. Lidarr integrates with popular Usenet and BitTorrent clients, such as Sonarr and Radarr, to automate the downloading and organizing of music files. The software provides a web-based interface for managing and organizing music, making it easy to search and find songs, albums, and artists. Lidarr also supports metadata management, including album art, artist information, and lyrics, making it easy for users to keep their music collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing music collections, making it a valuable tool for music lovers who want to keep their collection organized and up-to-date. With Lidarr, users can enjoy their music collection from anywhere, making it a powerful tool for managing and sharing music files.", "description": "Lidarr is a music management tool designed for Usenet and BitTorrent users. It allows users to manage and organize their music collection with ease. Lidarr integrates with popular Usenet and BitTorrent clients, such as Sonarr and Radarr, to automate the downloading and organizing of music files. The software provides a web-based interface for managing and organizing music, making it easy to search and find songs, albums, and artists. Lidarr also supports metadata management, including album art, artist information, and lyrics, making it easy for users to keep their music collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing music collections, making it a valuable tool for music lovers who want to keep their collection organized and up-to-date. With Lidarr, users can enjoy their music collection from anywhere, making it a powerful tool for managing and sharing music files.",
"install_methods": [ "install_methods": [
{ {

View File

@@ -12,7 +12,7 @@
"documentation": "https://docs.n8n.io/", "documentation": "https://docs.n8n.io/",
"website": "https://n8n.io/", "website": "https://n8n.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/n8n.webp", "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.", "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": [ "install_methods": [
{ {
@@ -31,5 +31,10 @@
"username": null, "username": null,
"password": 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", "name": "Navidrome",
"slug": "navidrome", "slug": "navidrome",
"categories": [ "categories": [
13 13
], ],
"date_created": "2024-05-02", "date_created": "2024-05-02",
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 4533, "interface_port": 4533,
"documentation": null, "documentation": "https://www.navidrome.org/docs/",
"website": "https://www.navidrome.org/", "website": "https://www.navidrome.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/navidrome.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/navidrome.webp",
"config_path": "/etc/navidrome/navidrome.toml", "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.", "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": [ "install_methods": [
{ {
"type": "default", "type": "default",
"script": "ct/navidrome.sh", "script": "ct/navidrome.sh",
"resources": { "resources": {
"cpu": 2, "cpu": 2,
"ram": 1024, "ram": 1024,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "12"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [ "notes": [
{ {
"text": "To change Navidrome music folder path, `nano /etc/navidrome/navidrome.toml`", "text": "To change Navidrome music folder path, `nano /etc/navidrome/navidrome.toml`",
"type": "info" "type": "info"
} }
] ]
} }

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"config_path": "/opt/salt/.env", "config_path": "/opt/salt/.env",
"interface_port": 3000, "interface_port": null,
"documentation": "https://docs.saltproject.io/salt/install-guide/en/latest/", "documentation": "https://docs.saltproject.io/salt/install-guide/en/latest/",
"website": "https://saltproject.io/", "website": "https://saltproject.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/salt.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/salt.webp",

View File

@@ -1,4 +1,294 @@
[ [
{
"name": "gtsteffaniak/filebrowser",
"version": "v0.7.18-beta",
"date": "2025-07-30T21:26:00Z"
},
{
"name": "benjaminjonard/koillection",
"version": "1.6.17",
"date": "2025-07-30T20:24:17Z"
},
{
"name": "mongodb/mongo",
"version": "r8.3.0-alpha0",
"date": "2025-07-30T20:23:07Z"
},
{
"name": "gristlabs/grist-core",
"version": "v1.7.0",
"date": "2025-07-30T20:19:50Z"
},
{
"name": "semaphoreui/semaphore",
"version": "v2.16.0-beta6",
"date": "2025-07-23T19:18:14Z"
},
{
"name": "wizarrrr/wizarr",
"version": "2025.7.8",
"date": "2025-07-30T18:17:51Z"
},
{
"name": "oauth2-proxy/oauth2-proxy",
"version": "v7.11.0",
"date": "2025-07-30T18:16:38Z"
},
{
"name": "leiweibau/Pi.Alert",
"version": "v2025-07-30",
"date": "2025-07-30T17:13:40Z"
},
{
"name": "ollama/ollama",
"version": "v0.10.0-rc4",
"date": "2025-07-29T23:41:25Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-arroy-becomes-hannoy-6",
"date": "2025-07-30T15:24:55Z"
},
{
"name": "home-assistant/core",
"version": "2025.7.4",
"date": "2025-07-28T08:15:50Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v11.0.0",
"date": "2025-07-30T13:50:13Z"
},
{
"name": "influxdata/influxdb",
"version": "v3.3.0",
"date": "2025-07-30T13:27:54Z"
},
{
"name": "element-hq/synapse",
"version": "v1.134.0",
"date": "2025-07-15T13:43:39Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.21",
"date": "2025-07-17T04:46:25Z"
},
{
"name": "bunkerity/bunkerweb",
"version": "v1.6.2",
"date": "2025-07-08T13:52:33Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.11",
"date": "2025-07-22T12:11:38Z"
},
{
"name": "dgtlmoon/changedetection.io",
"version": "0.50.8",
"date": "2025-07-30T11:33:00Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "create-fumadocs-app@15.6.7",
"date": "2025-07-30T11:07:48Z"
},
{
"name": "mattermost/mattermost",
"version": "server/public/v0.1.16",
"date": "2025-07-28T22:46:46Z"
},
{
"name": "evcc-io/evcc",
"version": "0.206.0",
"date": "2025-07-30T09:39:42Z"
},
{
"name": "dani-garcia/vaultwarden",
"version": "1.34.3",
"date": "2025-07-30T09:10:59Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.07",
"date": "2025-07-30T08:52:20Z"
},
{
"name": "zabbix/zabbix",
"version": "7.4.1",
"date": "2025-07-30T08:43:04Z"
},
{
"name": "wazuh/wazuh",
"version": "coverity-w30-4.13.0",
"date": "2025-07-18T12:05:26Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3-beta.10",
"date": "2025-07-15T06:07:03Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2208",
"date": "2025-07-30T05:56:51Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.521",
"date": "2025-07-30T03:38:59Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "docmost/docmost",
"version": "v0.22.0",
"date": "2025-07-30T00:09:03Z"
},
{
"name": "OliveTin/OliveTin",
"version": "2025.7.29",
"date": "2025-07-29T22:20:13Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.3.5",
"date": "2025-07-29T20:30:04Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.86.2",
"date": "2025-07-29T19:16:24Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.24.8",
"date": "2025-07-29T17:40:35Z"
},
{
"name": "zitadel/zitadel",
"version": "v2.70.14",
"date": "2025-07-15T15:27:51Z"
},
{
"name": "caddyserver/xcaddy",
"version": "v0.4.5",
"date": "2025-07-29T16:39:18Z"
},
{
"name": "TandoorRecipes/recipes",
"version": "1.5.35",
"date": "2025-06-22T08:30:10Z"
},
{
"name": "node-red/node-red",
"version": "4.1.0",
"date": "2025-07-29T15:15:26Z"
},
{
"name": "keycloak/keycloak",
"version": "26.3.2",
"date": "2025-07-24T10:14:27Z"
},
{
"name": "apache/cassandra",
"version": "5.0.5-tentative",
"date": "2025-07-29T10:00:00Z"
},
{
"name": "rogerfar/rdt-client",
"version": "v2.0.115",
"date": "2025-07-29T04:38:35Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.1.8",
"date": "2025-07-28T21:28:33Z"
},
{
"name": "diced/zipline",
"version": "v4.2.1",
"date": "2025-07-28T19:25:48Z"
},
{
"name": "HabitRPG/habitica",
"version": "v5.38.0",
"date": "2025-07-28T19:17:42Z"
},
{
"name": "navidrome/navidrome",
"version": "v0.58.0",
"date": "2025-07-28T18:59:50Z"
},
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.64",
"date": "2025-07-28T14:24:56Z"
},
{
"name": "alexta69/metube",
"version": "2025-07-27",
"date": "2025-07-28T15:57:09Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.103.2",
"date": "2025-07-22T11:22:26Z"
},
{
"name": "booklore-app/BookLore",
"version": "v0.35.0",
"date": "2025-07-28T14:20:30Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "7.0.0-alpha.1",
"date": "2025-07-28T11:28:22Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.2.6",
"date": "2025-07-28T09:31:34Z"
},
{
"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": "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": "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": "umami-software/umami", "name": "umami-software/umami",
"version": "v2.19.0", "version": "v2.19.0",
@@ -9,36 +299,11 @@
"version": "v1.18.4", "version": "v1.18.4",
"date": "2025-06-25T00:06:56Z" "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": "Jackett/Jackett",
"version": "v0.22.2200",
"date": "2025-07-27T05:52:33Z"
},
{ {
"name": "project-zot/zot", "name": "project-zot/zot",
"version": "v2.1.6", "version": "v2.1.6",
"date": "2025-07-27T01:14:14Z" "date": "2025-07-27T01:14:14Z"
}, },
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{ {
"name": "aceberg/WatchYourLAN", "name": "aceberg/WatchYourLAN",
"version": "2.1.3", "version": "2.1.3",
@@ -49,50 +314,25 @@
"version": "v0.14.1", "version": "v0.14.1",
"date": "2024-08-29T22:32:51Z" "date": "2024-08-29T22:32:51Z"
}, },
{
"name": "keycloak/keycloak",
"version": "26.3.2",
"date": "2025-07-24T10:14:27Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{ {
"name": "henrygd/beszel", "name": "henrygd/beszel",
"version": "v0.12.1", "version": "v0.12.1",
"date": "2025-07-25T23:53:12Z" "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-rc2",
"date": "2025-07-25T21:24:06Z"
},
{ {
"name": "homarr-labs/homarr", "name": "homarr-labs/homarr",
"version": "v1.30.1", "version": "v1.30.1",
"date": "2025-07-25T19:18:09Z" "date": "2025-07-25T19:18:09Z"
}, },
{
"name": "tailscale/tailscale",
"version": "v1.86.1",
"date": "2025-07-25T17:55:38Z"
},
{ {
"name": "openobserve/openobserve", "name": "openobserve/openobserve",
"version": "v0.15.0-rc4", "version": "v0.15.0-rc4",
"date": "2025-07-25T16:50:34Z" "date": "2025-07-25T16:50:34Z"
}, },
{ {
"name": "fuma-nama/fumadocs", "name": "emqx/emqx",
"version": "fumadocs-openapi@9.1.5", "version": "e6.0.0-M2.202508-alpha.1",
"date": "2025-07-25T16:20:20Z" "date": "2025-07-25T16:01:00Z"
}, },
{ {
"name": "heiher/hev-socks5-server", "name": "heiher/hev-socks5-server",
@@ -104,26 +344,11 @@
"version": "v12.0.1", "version": "v12.0.1",
"date": "2025-07-25T11:54:30Z" "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", "name": "ErsatzTV/ErsatzTV",
"version": "v25.3.1", "version": "v25.3.1",
"date": "2025-07-25T03:39:31Z" "date": "2025-07-25T03:39:31Z"
}, },
{
"name": "TryGhost/Ghost-CLI",
"version": "v1.28.0",
"date": "2025-07-25T01:21:13Z"
},
{ {
"name": "Brandawg93/PeaNUT", "name": "Brandawg93/PeaNUT",
"version": "v5.10.0", "version": "v5.10.0",
@@ -144,21 +369,11 @@
"version": "v2.39.1", "version": "v2.39.1",
"date": "2025-07-24T17:02:01Z" "date": "2025-07-24T17:02:01Z"
}, },
{
"name": "wizarrrr/wizarr",
"version": "2025.7.7",
"date": "2025-07-24T16:44:19Z"
},
{ {
"name": "immich-app/immich", "name": "immich-app/immich",
"version": "v1.136.0", "version": "v1.136.0",
"date": "2025-07-24T16:42:30Z" "date": "2025-07-24T16:42:30Z"
}, },
{
"name": "meilisearch/meilisearch",
"version": "prototype-cellulite-1",
"date": "2025-07-24T16:32:57Z"
},
{ {
"name": "grokability/snipe-it", "name": "grokability/snipe-it",
"version": "v8.2.1", "version": "v8.2.1",
@@ -174,26 +389,6 @@
"version": "10.0.19", "version": "10.0.19",
"date": "2025-07-16T09:45:14Z" "date": "2025-07-16T09:45:14Z"
}, },
{
"name": "Paymenter/Paymenter",
"version": "v1.2.5",
"date": "2025-07-24T11:52:16Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.3.0p35-rc2",
"date": "2025-07-24T07:00:54Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v10.10.0",
"date": "2025-07-24T06:15:19Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.21",
"date": "2025-07-17T04:46:25Z"
},
{ {
"name": "advplyr/audiobookshelf", "name": "advplyr/audiobookshelf",
"version": "v2.26.3", "version": "v2.26.3",
@@ -209,21 +404,11 @@
"version": "v12.1.0", "version": "v12.1.0",
"date": "2025-07-23T19:35:52Z" "date": "2025-07-23T19:35:52Z"
}, },
{
"name": "semaphoreui/semaphore",
"version": "v2.16.0-beta6",
"date": "2025-07-23T19:18:14Z"
},
{ {
"name": "fallenbagel/jellyseerr", "name": "fallenbagel/jellyseerr",
"version": "preview-plex-home-profile", "version": "preview-plex-home-profile",
"date": "2025-07-23T16:40:31Z" "date": "2025-07-23T16:40:31Z"
}, },
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.516.1",
"date": "2025-07-23T14:16:23Z"
},
{ {
"name": "traefik/traefik", "name": "traefik/traefik",
"version": "v3.5.0", "version": "v3.5.0",
@@ -239,21 +424,16 @@
"version": "v1.37.0.5076", "version": "v1.37.0.5076",
"date": "2025-06-04T11:04:53Z" "date": "2025-06-04T11:04:53Z"
}, },
{
"name": "n8n-io/n8n",
"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", "name": "cockpit-project/cockpit",
"version": "343", "version": "343",
"date": "2025-07-23T11:21:34Z" "date": "2025-07-23T11:21:34Z"
}, },
{
"name": "neo4j/neo4j",
"version": "2025.07.0",
"date": "2025-07-23T10:13:43Z"
},
{ {
"name": "jhuckaby/Cronicle", "name": "jhuckaby/Cronicle",
"version": "v0.9.85", "version": "v0.9.85",
@@ -269,11 +449,6 @@
"version": "v4.3.1", "version": "v4.3.1",
"date": "2025-07-22T20:10:08Z" "date": "2025-07-22T20:10:08Z"
}, },
{
"name": "esphome/esphome",
"version": "2025.7.3",
"date": "2025-07-22T20:09:49Z"
},
{ {
"name": "rcourtman/Pulse", "name": "rcourtman/Pulse",
"version": "v3.42.0", "version": "v3.42.0",
@@ -289,36 +464,11 @@
"version": "v0.7.3", "version": "v0.7.3",
"date": "2025-07-22T14:39:54Z" "date": "2025-07-22T14:39:54Z"
}, },
{
"name": "element-hq/synapse",
"version": "v1.134.0",
"date": "2025-07-15T13:43:39Z"
},
{ {
"name": "goauthentik/authentik", "name": "goauthentik/authentik",
"version": "version/2025.4.4", "version": "version/2025.4.4",
"date": "2025-07-22T13:08:15Z" "date": "2025-07-22T13:08:15Z"
}, },
{
"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": "mattermost/mattermost",
"version": "v9.11.18",
"date": "2025-07-22T06:18:08Z"
},
{
"name": "adityachandelgit/BookLore",
"version": "v0.34.1",
"date": "2025-07-22T05:57:50Z"
},
{ {
"name": "lazy-media/Reactive-Resume", "name": "lazy-media/Reactive-Resume",
"version": "v1.2.2", "version": "v1.2.2",
@@ -334,16 +484,6 @@
"version": "v1.64.0", "version": "v1.64.0",
"date": "2025-07-21T20:56:33Z" "date": "2025-07-21T20:56:33Z"
}, },
{
"name": "mongodb/mongo",
"version": "r8.2.0-rc0",
"date": "2025-07-21T19:07:52Z"
},
{
"name": "HabitRPG/habitica",
"version": "v5.37.2",
"date": "2025-07-21T14:08:35Z"
},
{ {
"name": "tobychui/zoraxy", "name": "tobychui/zoraxy",
"version": "v3.2.5r2", "version": "v3.2.5r2",
@@ -384,11 +524,6 @@
"version": "sdk/v0.26.0", "version": "sdk/v0.26.0",
"date": "2025-07-20T13:26:30Z" "date": "2025-07-20T13:26:30Z"
}, },
{
"name": "OliveTin/OliveTin",
"version": "2025.7.19",
"date": "2025-07-20T09:44:35Z"
},
{ {
"name": "documenso/documenso", "name": "documenso/documenso",
"version": "v1.12.2-rc.2", "version": "v1.12.2-rc.2",
@@ -419,36 +554,11 @@
"version": "v5.6.0", "version": "v5.6.0",
"date": "2025-07-19T13:34:36Z" "date": "2025-07-19T13:34:36Z"
}, },
{
"name": "bunkerity/bunkerweb",
"version": "v1.6.2",
"date": "2025-07-08T13:52:33Z"
},
{ {
"name": "pocketbase/pocketbase", "name": "pocketbase/pocketbase",
"version": "v0.29.0", "version": "v0.29.0",
"date": "2025-07-19T08:54:54Z" "date": "2025-07-19T08:54:54Z"
}, },
{
"name": "theonedev/onedev",
"version": "v12.0.1",
"date": "2025-07-18T15:02:25Z"
},
{
"name": "TandoorRecipes/recipes",
"version": "1.5.35",
"date": "2025-06-22T08:30:10Z"
},
{
"name": "wazuh/wazuh",
"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", "name": "cross-seed/cross-seed",
"version": "v6.13.1", "version": "v6.13.1",
@@ -464,11 +574,6 @@
"version": "2.0.7", "version": "2.0.7",
"date": "2025-07-17T15:33:14Z" "date": "2025-07-17T15:33:14Z"
}, },
{
"name": "oauth2-proxy/oauth2-proxy",
"version": "v7.10.0",
"date": "2025-07-17T12:08:40Z"
},
{ {
"name": "icereed/paperless-gpt", "name": "icereed/paperless-gpt",
"version": "v0.22.0", "version": "v0.22.0",
@@ -494,41 +599,21 @@
"version": "v2.1.1", "version": "v2.1.1",
"date": "2025-07-15T22:38:01Z" "date": "2025-07-15T22:38:01Z"
}, },
{
"name": "netbox-community/netbox",
"version": "v4.3.4",
"date": "2025-07-15T18:01:50Z"
},
{ {
"name": "gethomepage/homepage", "name": "gethomepage/homepage",
"version": "v1.4.0", "version": "v1.4.0",
"date": "2025-07-15T16:43:28Z" "date": "2025-07-15T16:43:28Z"
}, },
{
"name": "zitadel/zitadel",
"version": "v2.70.14",
"date": "2025-07-15T15:27:51Z"
},
{ {
"name": "WordPress/WordPress", "name": "WordPress/WordPress",
"version": "6.8.2", "version": "6.8.2",
"date": "2025-07-15T15:14:16Z" "date": "2025-07-15T15:14:16Z"
}, },
{
"name": "dgtlmoon/changedetection.io",
"version": "0.50.7",
"date": "2025-07-15T11:29:29Z"
},
{ {
"name": "cloudreve/cloudreve", "name": "cloudreve/cloudreve",
"version": "4.3.0", "version": "4.3.0",
"date": "2025-07-15T09:54:38Z" "date": "2025-07-15T09:54:38Z"
}, },
{
"name": "gotson/komga",
"version": "1.22.1",
"date": "2025-07-15T06:44:29Z"
},
{ {
"name": "go-gitea/gitea", "name": "go-gitea/gitea",
"version": "v1.24.3", "version": "v1.24.3",
@@ -564,11 +649,6 @@
"version": "1.3.11", "version": "1.3.11",
"date": "2025-07-13T13:33:48Z" "date": "2025-07-13T13:33:48Z"
}, },
{
"name": "evcc-io/evcc",
"version": "0.205.0",
"date": "2025-07-13T12:27:31Z"
},
{ {
"name": "authelia/authelia", "name": "authelia/authelia",
"version": "v4.39.5", "version": "v4.39.5",
@@ -584,21 +664,11 @@
"version": "v10.10.7", "version": "v10.10.7",
"date": "2025-04-05T19:14:59Z" "date": "2025-04-05T19:14:59Z"
}, },
{
"name": "leiweibau/Pi.Alert",
"version": "v2025-07-12",
"date": "2025-07-12T07:53:52Z"
},
{ {
"name": "eclipse-mosquitto/mosquitto", "name": "eclipse-mosquitto/mosquitto",
"version": "v2.0.22", "version": "v2.0.22",
"date": "2025-07-11T21:34:20Z" "date": "2025-07-11T21:34:20Z"
}, },
{
"name": "neo4j/neo4j",
"version": "2025.06.2",
"date": "2025-07-11T18:03:51Z"
},
{ {
"name": "FlowiseAI/Flowise", "name": "FlowiseAI/Flowise",
"version": "flowise@3.0.4", "version": "flowise@3.0.4",
@@ -654,11 +724,6 @@
"version": "16.0", "version": "16.0",
"date": "2025-07-09T13:28:43Z" "date": "2025-07-09T13:28:43Z"
}, },
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.63",
"date": "2025-06-26T14:34:19Z"
},
{ {
"name": "mysql/mysql-server", "name": "mysql/mysql-server",
"version": "mysql-cluster-9.4.0", "version": "mysql-cluster-9.4.0",
@@ -679,11 +744,6 @@
"version": "v6.8.1", "version": "v6.8.1",
"date": "2025-07-07T14:40:11Z" "date": "2025-07-07T14:40:11Z"
}, },
{
"name": "BookStackApp/BookStack",
"version": "v25.05.2",
"date": "2025-07-07T14:08:25Z"
},
{ {
"name": "slskd/slskd", "name": "slskd/slskd",
"version": "0.23.1", "version": "0.23.1",
@@ -724,11 +784,6 @@
"version": "2.37.0", "version": "2.37.0",
"date": "2025-07-04T14:49:43Z" "date": "2025-07-04T14:49:43Z"
}, },
{
"name": "Graylog2/graylog2-server",
"version": "6.3.1",
"date": "2025-07-04T11:20:48Z"
},
{ {
"name": "cloudflare/cloudflared", "name": "cloudflare/cloudflared",
"version": "2025.7.0", "version": "2025.7.0",
@@ -739,11 +794,6 @@
"version": "v4.1.2", "version": "v4.1.2",
"date": "2025-07-03T16:59:29Z" "date": "2025-07-03T16:59:29Z"
}, },
{
"name": "influxdata/influxdb",
"version": "v3.2.1",
"date": "2025-07-03T16:09:19Z"
},
{ {
"name": "actualbudget/actual", "name": "actualbudget/actual",
"version": "v25.7.1", "version": "v25.7.1",
@@ -764,11 +814,6 @@
"version": "release-5.1.2", "version": "release-5.1.2",
"date": "2025-07-02T06:13:16Z" "date": "2025-07-02T06:13:16Z"
}, },
{
"name": "diced/zipline",
"version": "v4.2.0",
"date": "2025-07-02T00:45:31Z"
},
{ {
"name": "sysadminsmedia/homebox", "name": "sysadminsmedia/homebox",
"version": "v0.20.2", "version": "v0.20.2",
@@ -784,11 +829,6 @@
"version": "2025.4", "version": "2025.4",
"date": "2025-07-01T18:01:37Z" "date": "2025-07-01T18:01:37Z"
}, },
{
"name": "navidrome/navidrome",
"version": "v0.57.0",
"date": "2025-07-01T16:47:46Z"
},
{ {
"name": "MagicMirrorOrg/MagicMirror", "name": "MagicMirrorOrg/MagicMirror",
"version": "v2.32.0", "version": "v2.32.0",
@@ -799,11 +839,6 @@
"version": "v7.4.4", "version": "v7.4.4",
"date": "2025-06-30T13:04:22Z" "date": "2025-06-30T13:04:22Z"
}, },
{
"name": "PrivateBin/PrivateBin",
"version": "1.7.8",
"date": "2025-06-30T09:00:54Z"
},
{ {
"name": "typesense/typesense", "name": "typesense/typesense",
"version": "v29.0", "version": "v29.0",
@@ -814,16 +849,6 @@
"version": "v1.3.8", "version": "v1.3.8",
"date": "2025-06-29T07:41:53Z" "date": "2025-06-29T07:41:53Z"
}, },
{
"name": "node-red/node-red",
"version": "4.1.0-beta.2",
"date": "2025-06-26T14:23:26Z"
},
{
"name": "gristlabs/grist-core",
"version": "v1.6.1",
"date": "2025-06-25T21:19:25Z"
},
{ {
"name": "arunavo4/gitea-mirror", "name": "arunavo4/gitea-mirror",
"version": "v2.18.0", "version": "v2.18.0",
@@ -844,11 +869,6 @@
"version": "0.17.14", "version": "0.17.14",
"date": "2025-06-21T23:43:04Z" "date": "2025-06-21T23:43:04Z"
}, },
{
"name": "rogerfar/rdt-client",
"version": "v2.0.114",
"date": "2025-06-21T11:20:21Z"
},
{ {
"name": "Sonarr/Sonarr", "name": "Sonarr/Sonarr",
"version": "v4.0.15.2941", "version": "v4.0.15.2941",
@@ -869,11 +889,6 @@
"version": "v3.5.5", "version": "v3.5.5",
"date": "2025-06-19T05:43:47Z" "date": "2025-06-19T05:43:47Z"
}, },
{
"name": "docmost/docmost",
"version": "v0.21.0",
"date": "2025-06-18T21:43:27Z"
},
{ {
"name": "pterodactyl/panel", "name": "pterodactyl/panel",
"version": "v1.11.11", "version": "v1.11.11",
@@ -1014,11 +1029,6 @@
"version": "0.19.2", "version": "0.19.2",
"date": "2025-05-29T14:39:17Z" "date": "2025-05-29T14:39:17Z"
}, },
{
"name": "apache/cassandra",
"version": "cassandra-4.0.18",
"date": "2025-05-28T21:45:55Z"
},
{ {
"name": "Athou/commafeed", "name": "Athou/commafeed",
"version": "5.10.0", "version": "5.10.0",
@@ -1339,11 +1349,6 @@
"version": "0.10.1", "version": "0.10.1",
"date": "2024-11-10T10:25:45Z" "date": "2024-11-10T10:25:45Z"
}, },
{
"name": "caddyserver/xcaddy",
"version": "v0.4.4",
"date": "2024-11-05T23:06:11Z"
},
{ {
"name": "zerotier/ZeroTierOne", "name": "zerotier/ZeroTierOne",
"version": "1.14.2", "version": "1.14.2",
@@ -1393,10 +1398,5 @@
"name": "pterodactyl/wings", "name": "pterodactyl/wings",
"version": "v1.11.13", "version": "v1.11.13",
"date": "2024-05-08T04:20:34Z" "date": "2024-05-08T04:20:34Z"
},
{
"name": "CrazyWolf13/web-check",
"version": "1.0.0",
"date": "2024-05-05T02:01:51Z"
} }
] ]

View File

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

View File

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

View File

@@ -13,17 +13,7 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Dependencies" fetch_and_deploy_gh_release "Argus" "release-argus/Argus" "singlefile" "latest" "/opt/argus" "Argus*linux-amd64"
$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"
msg_info "Setup Argus Config" msg_info "Setup Argus Config"
cat <<EOF >/opt/argus/config.yml cat <<EOF >/opt/argus/config.yml
@@ -71,7 +61,6 @@ service:
icon_link_to: https://helper-scripts.com/ icon_link_to: https://helper-scripts.com/
web_url: https://github.com/community-scripts/ProxmoxVE/releases web_url: https://github.com/community-scripts/ProxmoxVE/releases
EOF EOF
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Setup Config" msg_ok "Setup Config"
msg_info "Creating Service" msg_info "Creating Service"

View File

@@ -13,10 +13,9 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Autobrr" fetch_and_deploy_gh_release "autobrr" "autobrr/autobrr" "prebuild" "latest" "/usr/local/bin" "autobrr_*_linux_x86_64.tar.gz"
curl -fsSL "$(curl -fsSL https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_x86_64 | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_x86_64 | cut -d\" -f4)")
tar -C /usr/local/bin -xzf autobrr*.tar.gz msg_info "Configuring Autobrr"
rm -rf autobrr*.tar.gz
mkdir -p /root/.config/autobrr mkdir -p /root/.config/autobrr
cat <<EOF >>/root/.config/autobrr/config.toml cat <<EOF >>/root/.config/autobrr/config.toml
# https://autobrr.com/configuration/autobrr # https://autobrr.com/configuration/autobrr
@@ -25,21 +24,24 @@ port = 7474
logLevel = "DEBUG" logLevel = "DEBUG"
sessionSecret = "$(openssl rand -base64 24)" sessionSecret = "$(openssl rand -base64 24)"
EOF EOF
msg_ok "Installed Autobrr" msg_ok "Configured Autobrr"
msg_info "Creating Service" msg_info "Creating Service"
service_path="/etc/systemd/system/autobrr.service" cat <<EOF >/etc/systemd/system/autobrr.service
echo "[Unit] [Unit]
Description=autobrr service Description=autobrr service
After=syslog.target network-online.target After=syslog.target network-online.target
[Service] [Service]
Type=simple Type=simple
User=root User=root
Group=root Group=root
ExecStart=/usr/local/bin/autobrr --config=/root/.config/autobrr/ ExecStart=/usr/local/bin/autobrr --config=/root/.config/autobrr/
[Install] [Install]
WantedBy=multi-user.target" >$service_path WantedBy=multi-user.target
systemctl enable --now -q autobrr.service EOF
systemctl enable --now -q autobrr
msg_ok "Created Service" msg_ok "Created Service"
motd_ssh motd_ssh

View File

@@ -24,10 +24,7 @@ $STD apt-get install -y \
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Setting up TemurinJDK" msg_info "Setting up TemurinJDK"
mkdir -p /etc/apt/keyrings setup_java
curl -fsSL "https://packages.adoptium.net/artifactory/api/gpg/key/public" | tee /etc/apt/keyrings/adoptium.asc
echo "deb [signed-by=/etc/apt/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list
$STD apt-get update
$STD apt-get install -y temurin-{8,11,17,21}-jre $STD apt-get install -y temurin-{8,11,17,21}-jre
sudo update-alternatives --set java /usr/lib/jvm/temurin-21-jre-amd64/bin/java sudo update-alternatives --set java /usr/lib/jvm/temurin-21-jre-amd64/bin/java
msg_ok "Installed TemurinJDK" msg_ok "Installed TemurinJDK"
@@ -41,7 +38,7 @@ $STD apt-get install -y \
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
msg_ok "Setup Python3" msg_ok "Setup Python3"
msg_info "Installing Craty-Controller (Patience)" msg_info "Installing Crafty-Controller (Patience)"
useradd crafty -m -s /bin/bash useradd crafty -m -s /bin/bash
cd /opt cd /opt
mkdir -p /opt/crafty-controller/crafty /opt/crafty-controller/server mkdir -p /opt/crafty-controller/crafty /opt/crafty-controller/server

View File

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

View File

@@ -13,16 +13,8 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Gotify" fetch_and_deploy_gh_release "gotify" "gotify/server" "prebuild" "latest" "/opt/gotify" "gotify-linux-amd64.zip"
RELEASE=$(curl -fsSL https://api.github.com/repos/gotify/server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') chmod +x /opt/gotify/gotify-linux-amd64
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"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/gotify.service cat <<EOF >/etc/systemd/system/gotify.service

View File

@@ -14,20 +14,20 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y apt-transport-https $STD apt-get install -y \
$STD apt-get install -y software-properties-common apt-transport-https \
software-properties-common
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Setting up Grafana Repository" msg_info "Setting up Grafana Repository"
curl -fsSL "https://apt.grafana.com/gpg.key" -o "/usr/share/keyrings/grafana.key" 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_ok "Set up Grafana Repository"
msg_info "Installing Grafana" msg_info "Installing Grafana"
$STD apt-get update $STD apt-get update
$STD apt-get install -y grafana $STD apt-get install -y grafana
systemctl start grafana-server systemctl enable -q --now grafana-server
systemctl enable --now -q grafana-server.service
msg_ok "Installed Grafana" msg_ok "Installed Grafana"
motd_ssh motd_ssh

View File

@@ -17,23 +17,10 @@ msg_info "Installing Dependencies"
$STD apt-get install -y apt-transport-https $STD apt-get install -y apt-transport-https
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Installing PHP8.2" PHP_VERSION="8.3" PHP_MODULE="sqlite3,bz2" PHP_APACHE="yes" setup_php
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" fetch_and_deploy_gh_release "grocy" "grocy/grocy" "prebuild" "latest" "/var/www/html" "grocy*.zip"
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"
msg_info "Installing grocy" msg_info "Configuring 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
chown -R www-data:www-data /var/www/html chown -R www-data:www-data /var/www/html
cp /var/www/html/config-dist.php /var/www/html/data/config.php cp /var/www/html/config-dist.php /var/www/html/data/config.php
chmod +x /var/www/html/update.sh chmod +x /var/www/html/update.sh
@@ -64,5 +51,4 @@ customize
msg_info "Cleaning up" msg_info "Cleaning up"
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
rm -rf /root/grocy_${latest}.zip
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -26,10 +26,12 @@ NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha,npm@10" setup_nodejs
fetch_and_deploy_gh_release "habitica" "HabitRPG/habitica" "tarball" "latest" "/opt/habitica" fetch_and_deploy_gh_release "habitica" "HabitRPG/habitica" "tarball" "latest" "/opt/habitica"
msg_info "Setup ${APPLICATION}" msg_info "Setup ${APPLICATION}"
IPADDRESS=$(hostname -I | awk '{print $1}')
cd /opt/habitica cd /opt/habitica
$STD npm i $STD npm i
$STD npm run postinstall $STD npm run postinstall
cp config.json.example config.json cp config.json.example config.json
sed -i "s/\"TRUSTED_DOMAINS\": \"/&http:\/\/$IPADDRESS:3000,/" config.json
$STD npm run client:build $STD npm run client:build
$STD gulp build:prod $STD gulp build:prod

View File

@@ -13,34 +13,26 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing OpenJDK" JAVA_VERSION="21" setup_java
curl -fsSL "https://packages.adoptium.net/artifactory/api/gpg/key/public" | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg fetch_and_deploy_gh_release "hivemq" "hivemq/hivemq-community-edition" "prebuild" "latest" "/opt/hivemq" "hivemq-ce-*.zip"
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"
msg_info "Installing HiveMQ CE" msg_info "Configuring 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
useradd -d /opt/hivemq hivemq useradd -d /opt/hivemq hivemq
chown -R hivemq:hivemq /opt/hivemq chown -R hivemq:hivemq /opt/hivemq
chmod +x /opt/hivemq/bin/run.sh chmod +x /opt/hivemq/bin/run.sh
cp /opt/hivemq/bin/init-script/hivemq.service /etc/systemd/system/hivemq.service cp /opt/hivemq/bin/init-script/hivemq.service /etc/systemd/system/hivemq.service
rm /opt/hivemq/conf/config.xml rm /opt/hivemq/conf/config.xml
mv /opt/hivemq/conf/examples/configuration/config-sample-tcp-and-websockets.xml /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 systemctl enable -q --now hivemq
msg_ok "Installed HiveMQ CE" msg_ok "Service started"
motd_ssh motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf hivemq-ce-${RELEASE}.zip
rm -rf ../hivemq-ce-${RELEASE}
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -14,18 +14,17 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Homebox" fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_x86_64.tar.gz"
RELEASE=$(curl -fsSL https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://github.com/sysadminsmedia/homebox/releases/download/${RELEASE}/homebox_Linux_x86_64.tar.gz" | tar -xzf - -C /opt msg_info "Configuring Homebox"
chmod +x /opt/homebox chmod +x /opt/homebox/homebox
cat <<EOF >/opt/.env cat <<EOF >/opt/homebox/.env
# For possible environment variables check here: https://homebox.software/en/configure-homebox # For possible environment variables check here: https://homebox.software/en/configure-homebox
HBOX_MODE=production HBOX_MODE=production
HBOX_WEB_PORT=7745 HBOX_WEB_PORT=7745
HBOX_WEB_HOST=0.0.0.0 HBOX_WEB_HOST=0.0.0.0
EOF EOF
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" msg_ok "Configured Homebox"
msg_ok "Installed Homebox"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/homebox.service cat <<EOF >/etc/systemd/system/homebox.service
@@ -34,9 +33,9 @@ Description=Start Homebox Service
After=network.target After=network.target
[Service] [Service]
WorkingDirectory=/opt WorkingDirectory=/opt/homebox
ExecStart=/opt/homebox ExecStart=/opt/homebox/homebox
EnvironmentFile=/opt/.env EnvironmentFile=/opt/homebox/.env
Restart=on-failure Restart=on-failure
[Install] [Install]

View File

@@ -13,11 +13,9 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing InspIRCd" fetch_and_deploy_gh_release "inspircd" "inspircd/inspircd" "binary"
RELEASE=$(curl -fsSL https://api.github.com/repos/inspircd/inspircd/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
cd /opt msg_info "Configuring InspIRCd"
curl -fsSL "https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u2_amd64.deb" -o "inspircd_${RELEASE}.deb12u2_amd64.deb"
$STD apt-get install "./inspircd_${RELEASE}.deb12u2_amd64.deb" -y &>/dev/null
cat <<EOF >/etc/inspircd/inspircd.conf cat <<EOF >/etc/inspircd/inspircd.conf
<define name="networkDomain" value="helper-scripts.com"> <define name="networkDomain" value="helper-scripts.com">
<define name="networkName" value="Proxmox VE Helper-Scripts"> <define name="networkName" value="Proxmox VE Helper-Scripts">
@@ -32,15 +30,12 @@ cat <<EOF >/etc/inspircd/inspircd.conf
email="irc@&networkDomain;"> email="irc@&networkDomain;">
<bind address="" port="6667" type="clients"> <bind address="" port="6667" type="clients">
EOF EOF
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed InspIRCd" msg_ok "Installed InspIRCd"
motd_ssh motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf /opt/inspircd_${RELEASE}.deb12u2_amd64.deb
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -13,20 +13,14 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Jackett" fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.LinuxAMDx64.tar.gz"
RELEASE=$(curl -fsSL https://github.com/Jackett/Jackett/releases/latest | grep "title>Release" | cut -d " " -f 4)
cd /opt
curl -fsSL "https://github.com/Jackett/Jackett/releases/download/$RELEASE/Jackett.Binaries.LinuxAMDx64.tar.gz" -o "Jackett.Binaries.LinuxAMDx64.tar.gz"
tar -xzf Jackett.Binaries.LinuxAMDx64.tar.gz -C /opt
rm -rf Jackett.Binaries.LinuxAMDx64.tar.gz
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed Jackett"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/jackett.service cat <<EOF >/etc/systemd/system/jackett.service
[Unit] [Unit]
Description=Jackett Daemon Description=Jackett Daemon
After=network.target After=network.target
[Service] [Service]
SyslogIdentifier=jackett SyslogIdentifier=jackett
Restart=always Restart=always
@@ -35,7 +29,8 @@ Type=simple
WorkingDirectory=/opt/Jackett WorkingDirectory=/opt/Jackett
ExecStart=/bin/sh /opt/Jackett/jackett_launcher.sh ExecStart=/bin/sh /opt/Jackett/jackett_launcher.sh
TimeoutStopSec=30 TimeoutStopSec=30
Environment="DisableRootWarning=true" EnvironmentFile="/opt/.env"
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF

94
install/jeedom-install.sh Normal file
View File

@@ -0,0 +1,94 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Mips2648
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://jeedom.com/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing dependencies"
$STD apt-get install -y \
lsb-release \
git
msg_ok "Dependencies installed"
DEFAULT_BRANCH="master"
REPO_URL="https://github.com/jeedom/core.git"
echo
while true; do
read -rp "${TAB3}Enter branch to use (master, beta, alpha...) (Default: ${DEFAULT_BRANCH}): " BRANCH
BRANCH="${BRANCH:-$DEFAULT_BRANCH}"
if git ls-remote --heads "$REPO_URL" "refs/heads/$BRANCH" | grep -q .; then
break
else
msg_error "Branch '$BRANCH' does not exist on remote. Please try again."
fi
done
msg_info "Downloading Jeedom installation script"
cd /tmp
wget -q https://raw.githubusercontent.com/jeedom/core/"${BRANCH}"/install/install.sh
chmod +x install.sh
msg_ok "Installation script downloaded"
msg_info "Install Jeedom main dependencies, please wait"
$STD ./install.sh -v "$BRANCH" -s 2
msg_ok "Installed Jeedom main dependencies"
msg_info "Install Database"
$STD ./install.sh -v "$BRANCH" -s 3
msg_ok "Database installed"
msg_info "Install Apache"
$STD ./install.sh -v "$BRANCH" -s 4
msg_ok "Apache installed"
msg_info "Install PHP and dependencies"
$STD ./install.sh -v "$BRANCH" -s 5
msg_ok "PHP installed"
msg_info "Download Jeedom core"
$STD ./install.sh -v "$BRANCH" -s 6
msg_ok "Download done"
msg_info "Database customisation"
$STD ./install.sh -v "$BRANCH" -s 7
msg_ok "Database customisation done"
msg_info "Jeedom customisation"
$STD ./install.sh -v "$BRANCH" -s 8
msg_ok "Jeedom customisation done"
msg_info "Configuring Jeedom"
$STD ./install.sh -v "$BRANCH" -s 9
msg_ok "Jeedom configured"
msg_info "Installing Jeedom"
$STD ./install.sh -v "$BRANCH" -s 10
msg_ok "Jeedom installed"
msg_info "Post installation"
$STD ./install.sh -v "$BRANCH" -s 11
msg_ok "Post installation done"
msg_info "Check installation"
$STD ./install.sh -v "$BRANCH" -s 12
msg_ok "Installation checked, everything is successfuly installed. A reboot is recommended."
motd_ssh
customize
msg_info "Cleaning up"
rm -rf /tmp/install.sh
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -15,28 +15,20 @@ update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y \ $STD apt-get install -y \
g++ \
build-essential \ build-essential \
git \ git \
ca-certificates \ ca-certificates \
chromium/stable \ chromium/stable \
chromium-common/stable \ chromium-common/stable \
graphicsmagick \ graphicsmagick \
ghostscript \ ghostscript
jq
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Installing Additional Tools" fetch_and_deploy_gh_release "monolith" "Y2Z/monolith" "singlefile" "latest" "/usr/bin" "monolith-gnu-linux-x86_64"
curl -fsSL "https://github.com/Y2Z/monolith/releases/latest/download/monolith-gnu-linux-x86_64" -o "/usr/bin/monolith" fetch_and_deploy_gh_release "yt-dlp" "yt-dlp/yt-dlp-nightly-builds" "singlefile" "latest" "/usr/bin" "yt-dlp_linux"
chmod +x /usr/bin/monolith fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
curl -fsSL "https://github.com/yt-dlp/yt-dlp-nightly-builds/releases/latest/download/yt-dlp_linux" -o "/usr/bin/yt-dlp"
chmod +x /usr/bin/yt-dlp
msg_ok "Installed Additional Tools"
msg_info "Installing Meilisearch" msg_info "Configuring Meilisearch"
cd /tmp
curl -fsSL "https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb" -o "meilisearch.deb"
$STD dpkg -i meilisearch.deb
curl -fsSL "https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml" -o "/etc/meilisearch.toml" curl -fsSL "https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml" -o "/etc/meilisearch.toml"
MASTER_KEY=$(openssl rand -base64 12) MASTER_KEY=$(openssl rand -base64 12)
sed -i \ sed -i \
@@ -47,7 +39,7 @@ sed -i \
-e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \ -e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \
-e 's|^# no_analytics = true|no_analytics = true|' \ -e 's|^# no_analytics = true|no_analytics = true|' \
/etc/meilisearch.toml /etc/meilisearch.toml
msg_ok "Installed Meilisearch" msg_ok "Configured Meilisearch"
fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep" fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep"
cd /opt/karakeep cd /opt/karakeep
@@ -64,6 +56,7 @@ $STD pnpm install --frozen-lockfile
$STD pnpm build $STD pnpm build
cd /opt/karakeep/apps/workers cd /opt/karakeep/apps/workers
$STD pnpm install --frozen-lockfile $STD pnpm install --frozen-lockfile
$STD pnpm build
cd /opt/karakeep/apps/cli cd /opt/karakeep/apps/cli
$STD pnpm install --frozen-lockfile $STD pnpm install --frozen-lockfile
$STD pnpm build $STD pnpm build
@@ -167,7 +160,7 @@ Wants=network.target karakeep-browser.service meilisearch.service
After=network.target karakeep-browser.service meilisearch.service After=network.target karakeep-browser.service meilisearch.service
[Service] [Service]
ExecStart=pnpm start:prod ExecStart=/usr/bin/node dist/index.mjs
WorkingDirectory=/opt/karakeep/apps/workers WorkingDirectory=/opt/karakeep/apps/workers
EnvironmentFile=/etc/karakeep/karakeep.env EnvironmentFile=/etc/karakeep/karakeep.env
Restart=always Restart=always
@@ -184,7 +177,6 @@ motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf /tmp/meilisearch.deb
$STD apt-get autoremove -y $STD apt-get autoremove -y
$STD apt-get autoclean -y $STD apt-get autoclean -y
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG # Copyright (c) 2021-2025 community-scripts ORG
# Author: tteck (tteckster) | Co-Author: Slaviša Arežina (tremor021) # Author: tteck (tteckster) | Co-Author: Slaviša Arežina (tremor021), remz1337
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/keycloak/keycloak # Source: https://github.com/keycloak/keycloak
@@ -13,32 +13,46 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing OpenJDK" JAVA_VERSION=21 setup_java
curl -fsSL "https://packages.adoptium.net/artifactory/api/gpg/key/public" | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg PG_VERSION=16 setup_postgresql
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-21-jre
msg_ok "Installed OpenJDK"
msg_info "Installing Keycloak" msg_info "Configuring PostgreSQL"
temp_file=$(mktemp) DB_NAME="keycloak"
RELEASE=$(curl -fsSL https://api.github.com/repos/keycloak/keycloak/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') DB_USER="keycloak"
curl -fsSL "https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz" -o "$temp_file" DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
tar xzf $temp_file $STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';"
mv keycloak-$RELEASE /opt/keycloak $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8';"
msg_ok "Installed Keycloak" $STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
msg_ok "Configured PostgreSQL"
fetch_and_deploy_gh_release "keycloak" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/keycloak.service cat <<EOF >/etc/systemd/system/keycloak.service
[Unit] [Unit]
Description=Keycloak Service Description=Keycloak Service
After=network.target Requires=network.target
After=syslog.target network-online.target
[Service] [Service]
Type=idle
User=root User=root
WorkingDirectory=/opt/keycloak WorkingDirectory=/opt/keycloak
ExecStart=/opt/keycloak/bin/kc.sh start-dev ExecStart=/opt/keycloak/bin/kc.sh start
ExecStop=/opt/keycloak/bin/kc.sh stop
Restart=always
RestartSec=3
Environment="JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-amd64"
Environment="KC_DB=postgres"
Environment="KC_DB_USERNAME=$DB_USER"
Environment="KC_DB_PASSWORD=$DB_PASS"
Environment="KC_HTTP_ENABLED=true"
Environment="KC_BOOTSTRAP_ADMIN_USERNAME=tmpadm"
Environment="KC_BOOTSTRAP_ADMIN_PASSWORD=admin123"
# Comment following line and uncomment the next 2 if working behind a reverse proxy
Environment="KC_HOSTNAME_STRICT=false"
#Environment="KC_HOSTNAME=keycloak.example.com"
#Environment="KC_PROXY_HEADERS=xforwarded"
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
@@ -49,7 +63,6 @@ motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -f $temp_file
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -13,29 +13,10 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
apache2 \
lsb-release
msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
PG_VERSION="16" setup_postgresql PG_VERSION="16" setup_postgresql
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="apcu,ctype,dom,fileinfo,iconv,pgsql" setup_php
msg_info "Setup PHP8.4 Repository" setup_composer
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
$STD apt-get update
msg_ok "Setup PHP8.4 Repository"
msg_info "Setup PHP"
$STD apt-get install -y \
php8.4 \
php8.4-{apcu,ctype,curl,dom,fileinfo,gd,iconv,intl,mbstring,pgsql} \
libapache2-mod-php8.4 \
composer
msg_info "Setup PHP"
msg_info "Setting up PostgreSQL" msg_info "Setting up PostgreSQL"
DB_NAME=koillection DB_NAME=koillection
@@ -51,12 +32,9 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
} >>~/koillection.creds } >>~/koillection.creds
msg_ok "Set up PostgreSQL" msg_ok "Set up PostgreSQL"
msg_info "Installing Koillection" fetch_and_deploy_gh_release "koillection" "benjaminjonard/koillection"
RELEASE=$(curl -fsSL https://api.github.com/repos/benjaminjonard/koillection/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
cd /opt msg_info "Configuring Koillection"
curl -fsSL "https://github.com/benjaminjonard/koillection/archive/refs/tags/${RELEASE}.zip" -o "/opt/${RELEASE}.zip"
$STD unzip "${RELEASE}.zip"
mv "/opt/koillection-${RELEASE}" /opt/koillection
cd /opt/koillection cd /opt/koillection
cp /opt/koillection/.env /opt/koillection/.env.local cp /opt/koillection/.env /opt/koillection/.env.local
APP_SECRET=$(openssl rand -base64 32) APP_SECRET=$(openssl rand -base64 32)
@@ -76,7 +54,7 @@ $STD yarn install
$STD yarn build $STD yarn build
chown -R www-data:www-data /opt/koillection/public/uploads chown -R www-data:www-data /opt/koillection/public/uploads
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed Koillection" msg_ok "Configured Koillection"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/apache2/sites-available/koillection.conf cat <<EOF >/etc/apache2/sites-available/koillection.conf
@@ -107,7 +85,6 @@ motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf "/opt/${RELEASE}.zip"
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -13,17 +13,9 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Dependencies" JAVA_VERSION="21" setup_java
$STD apt-get install -y openjdk-17-jre USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "komga" "gotson/komga" "singlefile" "latest" "/opt/komga" "komga*.jar"
msg_ok "Installed Dependencies" mv /opt/komga/komga-*.jar /opt/komga/komga.jar
msg_info "Installing Komga"
RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar" -o "komga-${RELEASE}.jar"
mkdir -p /opt/komga
mv -f komga-${RELEASE}.jar /opt/komga/komga.jar
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed Komga"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/komga.service cat <<EOF >/etc/systemd/system/komga.service
@@ -42,7 +34,7 @@ Restart=on-failure
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable --now -q komga systemctl enable -q --now komga
msg_ok "Created Service" msg_ok "Created Service"
motd_ssh motd_ssh

View File

@@ -14,10 +14,9 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing IPFS" fetch_and_deploy_gh_release "kubo" "ipfs/kubo" "prebuild" "latest" "/usr/local/kubo" "kubo*linux-amd64.tar.gz"
RELEASE=$(curl -fsSL https://github.com/ipfs/kubo/releases/latest | grep "title>Release" | cut -d " " -f 4)
$STD curl -fsSL "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-amd64.tar.gz" -o "kubo_${RELEASE}_linux-amd64.tar.gz" msg_info "Configuring IPFS"
tar -xzf "kubo_${RELEASE}_linux-amd64.tar.gz" -C /usr/local
$STD ln -s /usr/local/kubo/ipfs /usr/local/bin/ipfs $STD ln -s /usr/local/kubo/ipfs /usr/local/bin/ipfs
$STD ipfs init $STD ipfs init
ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001 ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001
@@ -25,9 +24,7 @@ ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080
LXCIP=$(hostname -I | awk '{print $1}') LXCIP=$(hostname -I | awk '{print $1}')
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin "[\"http://${LXCIP}:5001\", \"http://localhost:3000\", \"http://127.0.0.1:5001\", \"https://webui.ipfs.io\", \"http://0.0.0.0:5001\"]" ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin "[\"http://${LXCIP}:5001\", \"http://localhost:3000\", \"http://127.0.0.1:5001\", \"https://webui.ipfs.io\", \"http://0.0.0.0:5001\"]"
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST"]' ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST"]'
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" msg_ok "Configured IPFS"
$STD rm "kubo_${RELEASE}_linux-amd64.tar.gz"
msg_ok "Installed IPFS"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/ipfs.service cat <<EOF >/etc/systemd/system/ipfs.service
@@ -43,7 +40,7 @@ Environment=HOME=/root
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable --now -q ipfs.service systemctl enable -q --now ipfs
msg_ok "Created Service" msg_ok "Created Service"
motd_ssh motd_ssh

View File

@@ -16,7 +16,7 @@ update_os
fetch_and_deploy_gh_release "librespeed-rust" "librespeed/speedtest-rust" "binary" "latest" "/opt/librespeed-rust" "librespeed-rs-x86_64-unknown-linux-gnu.deb" fetch_and_deploy_gh_release "librespeed-rust" "librespeed/speedtest-rust" "binary" "latest" "/opt/librespeed-rust" "librespeed-rs-x86_64-unknown-linux-gnu.deb"
msg_info "Enabling Service" msg_info "Enabling Service"
systemctl enable -q --now speedtest_rs.service systemctl enable -q --now speedtest_rs
msg_ok "Enabled Service" msg_ok "Enabled Service"
motd_ssh motd_ssh

View File

@@ -20,22 +20,20 @@ $STD apt-get install -y \
mediainfo mediainfo
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Installing Lidarr" fetch_and_deploy_gh_release "lidarr" "Lidarr/Lidarr" "prebuild" "latest" "/opt/Lidarr" "Lidarr.master*linux-core-x64.tar.gz"
temp_file="$(mktemp)"
msg_info "Configuring Lidarr"
mkdir -p /var/lib/lidarr/ mkdir -p /var/lib/lidarr/
chmod 775 /var/lib/lidarr/ chmod 775 /var/lib/lidarr/
RELEASE=$(curl -fsSL https://api.github.com/repos/Lidarr/Lidarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/Lidarr/Lidarr/releases/download/v${RELEASE}/Lidarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file"
$STD tar -xvzf "$temp_file"
mv Lidarr /opt
chmod 775 /opt/Lidarr chmod 775 /opt/Lidarr
msg_ok "Installed Lidarr" msg_ok "Configured Lidarr"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/lidarr.service cat <<EOF >/etc/systemd/system/lidarr.service
[Unit] [Unit]
Description=Lidarr Daemon Description=Lidarr Daemon
After=syslog.target network.target After=syslog.target network.target
[Service] [Service]
UMask=0002 UMask=0002
Type=simple Type=simple
@@ -43,6 +41,7 @@ ExecStart=/opt/Lidarr/Lidarr -nobrowser -data=/var/lib/lidarr/
TimeoutStopSec=20 TimeoutStopSec=20
KillMode=process KillMode=process
Restart=on-failure Restart=on-failure
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
@@ -53,7 +52,6 @@ motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf "$temp_file"
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -22,14 +22,14 @@ msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
fetch_and_deploy_gh_release "mafl" "hywax/mafl" fetch_and_deploy_gh_release "mafl" "hywax/mafl"
msg_info "Installing Mafl v${RELEASE}" msg_info "Installing Mafl"
mkdir -p /opt/mafl/data mkdir -p /opt/mafl/data
curl -fsSL "https://raw.githubusercontent.com/hywax/mafl/main/.example/config.yml" -o "/opt/mafl/data/config.yml" curl -fsSL "https://raw.githubusercontent.com/hywax/mafl/main/.example/config.yml" -o "/opt/mafl/data/config.yml"
cd /opt/mafl cd /opt/mafl
export NUXT_TELEMETRY_DISABLED=true export NUXT_TELEMETRY_DISABLED=true
$STD yarn install $STD yarn install
$STD yarn build $STD yarn build
msg_ok "Installed Mafl v${RELEASE}" msg_ok "Installed Mafl"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/mafl.service cat <<EOF >/etc/systemd/system/mafl.service

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 tteck # 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 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://n8n.io/ # Source: https://n8n.io/
@@ -15,7 +15,8 @@ update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y \ $STD apt-get install -y \
ca-certificates ca-certificates \
build-essential
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs NODE_VERSION="22" setup_nodejs
@@ -26,18 +27,28 @@ $STD npm install --global n8n
msg_ok "Installed n8n" msg_ok "Installed n8n"
msg_info "Creating Service" 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 cat <<EOF >/etc/systemd/system/n8n.service
[Unit] [Unit]
Description=n8n Description=n8n
[Service] [Service]
Type=simple Type=simple
Environment="N8N_SECURE_COOKIE=false" EnvironmentFile=/opt/n8n.env
ExecStart=n8n start ExecStart=n8n start
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
$STD systemctl enable --now n8n systemctl enable -q --now n8n
msg_ok "Created Service" msg_ok "Created Service"
motd_ssh motd_ssh

View File

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

View File

@@ -15,48 +15,90 @@ update_os
msg_info "Installing Dependencies (Patience)" msg_info "Installing Dependencies (Patience)"
$STD apt-get install -y \ $STD apt-get install -y \
exiftool \ exiftool \
ffmpeg \ ffmpeg \
libheif1 \ libheif1 \
libpng-dev \ libpng-dev \
libjpeg-dev \ libjpeg-dev \
libtiff-dev \ libtiff-dev \
imagemagick \ imagemagick \
darktable \ darktable \
rawtherapee \ rawtherapee \
libvips42 \ libvips42 \
lsb-release lsb-release
echo 'export PATH=/usr/local:$PATH' >>~/.bashrc echo 'export PATH=/usr/local:$PATH' >>~/.bashrc
export PATH=/usr/local:$PATH export PATH=/usr/local:$PATH
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "photoprism" "photoprism/photoprism" "prebuild" "latest" "/opt/photoprism" "*linux-amd64.tar.gz"
msg_info "Installing PhotoPrism (Patience)" msg_info "Installing PhotoPrism (Patience)"
mkdir -p /opt/photoprism/{cache,config,photos,storage,temp} mkdir -p /opt/photoprism/{cache,config,photos,storage,temp}
mkdir -p /opt/photoprism/photos/{originals,import} mkdir -p /opt/photoprism/photos/{originals,import}
mkdir -p /opt/photoprism_backups mkdir -p /opt/photoprism_backups
curl -fsSL https://dl.photoprism.app/pkg/linux/amd64.tar.gz | tar -xz -C /opt/photoprism --strip-components=1
LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-$(lsb_release -cs)-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1) LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-$(lsb_release -cs)-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1)
curl -fsSL "https://dl.photoprism.app/dist/libheif/$LIBHEIF_URL" | tar -xzf - -C /usr/local --strip-components=1 curl -fsSL "https://dl.photoprism.app/dist/libheif/$LIBHEIF_URL" -o /tmp/libheif.tar.gz
tar -xzf /tmp/libheif.tar.gz -C /usr/local
ldconfig ldconfig
echo "${LIBHEIF_URL}" >~/.photoprism_libheif
chmod -R 755 /opt/photoprism/photos/originals chmod -R 755 /opt/photoprism/photos/originals
cat <<EOF >/opt/photoprism/config/.env cat <<EOF >/opt/photoprism/config/.env
PHOTOPRISM_AUTH_MODE='password' # Authentication
PHOTOPRISM_ADMIN_USER='admin'
PHOTOPRISM_ADMIN_PASSWORD='changeme' PHOTOPRISM_ADMIN_PASSWORD='changeme'
PHOTOPRISM_AUTH_MODE='password'
PHOTOPRISM_PUBLIC='false'
# Network / HTTP
PHOTOPRISM_HTTP_HOST='0.0.0.0' PHOTOPRISM_HTTP_HOST='0.0.0.0'
PHOTOPRISM_HTTP_PORT='2342' PHOTOPRISM_HTTP_PORT='2342'
PHOTOPRISM_SITE_CAPTION='https://Helper-Scripts.com' PHOTOPRISM_SITE_URL='http://localhost:2342/'
PHOTOPRISM_DISABLE_TLS='true'
PHOTOPRISM_DEFAULT_TLS='false'
PHOTOPRISM_HTTP_COMPRESSION='gzip'
# Features & AI
PHOTOPRISM_DISABLE_TENSORFLOW='false'
PHOTOPRISM_DISABLE_FACES='false'
PHOTOPRISM_DISABLE_CLASSIFICATION='false'
PHOTOPRISM_DISABLE_VECTORS='false'
PHOTOPRISM_DETECT_NSFW='false'
PHOTOPRISM_UPLOAD_NSFW='true'
# Paths & Storage
PHOTOPRISM_STORAGE_PATH='/opt/photoprism/storage' PHOTOPRISM_STORAGE_PATH='/opt/photoprism/storage'
PHOTOPRISM_ORIGINALS_PATH='/opt/photoprism/photos/originals' PHOTOPRISM_ORIGINALS_PATH='/opt/photoprism/photos/originals'
PHOTOPRISM_IMPORT_PATH='/opt/photoprism/photos/import' PHOTOPRISM_IMPORT_PATH='/opt/photoprism/photos/import'
PHOTOPRISM_BACKUP_PATH='/opt/photoprism_backups' PHOTOPRISM_BACKUP_PATH='/opt/photoprism_backups'
# Database
PHOTOPRISM_DATABASE_DRIVER='sqlite' PHOTOPRISM_DATABASE_DRIVER='sqlite'
PHOTOPRISM_DISABLE_WEBDAV='false'
PHOTOPRISM_DISABLE_FACES='false' # Behavior & Options
PHOTOPRISM_AUTO_INDEX='300' PHOTOPRISM_AUTO_INDEX='300'
PHOTOPRISM_AUTO_IMPORT='-1' PHOTOPRISM_AUTO_IMPORT='-1'
PHOTOPRISM_PUBLIC='false' PHOTOPRISM_DISABLE_WEBDAV='false'
PHOTOPRISM_READONLY='false'
PHOTOPRISM_DISABLE_SETTINGS='false'
PHOTOPRISM_DISABLE_CHOWN='false'
PHOTOPRISM_EXPERIMENTAL='false'
PHOTOPRISM_INIT='https tensorflow'
# Image Processing
PHOTOPRISM_ORIGINALS_LIMIT='5000'
PHOTOPRISM_JPEG_QUALITY='85'
PHOTOPRISM_RAW_PRESETS='false'
PHOTOPRISM_DISABLE_RAW='false'
# Debug & Logging
PHOTOPRISM_DEBUG='false' PHOTOPRISM_DEBUG='false'
PHOTOPRISM_LOG_LEVEL='info'
# Site Info
PHOTOPRISM_SITE_CAPTION='https://Helper-Scripts.com'
PHOTOPRISM_SITE_DESCRIPTION=''
PHOTOPRISM_SITE_AUTHOR=''
EOF EOF
ln -sf /opt/photoprism/bin/photoprism /usr/local/bin/photoprism ln -sf /opt/photoprism/bin/photoprism /usr/local/bin/photoprism

View File

@@ -29,7 +29,8 @@ $STD apt-get -y install \
aria2 \ aria2 \
wakeonlan \ wakeonlan \
fping \ fping \
zip zip \
libtext-csv-perl
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Installing PHP Dependencies" msg_info "Installing PHP Dependencies"
@@ -50,7 +51,8 @@ $STD apt-get -y install \
python3-requests \ python3-requests \
python3-tz \ python3-tz \
python3-tzlocal \ python3-tzlocal \
python3-aiohttp python3-aiohttp \
python3-cryptography
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
$STD pip3 install mac-vendor-lookup $STD pip3 install mac-vendor-lookup
$STD pip3 install fritzconnection $STD pip3 install fritzconnection
@@ -58,6 +60,7 @@ $STD pip3 install cryptography
$STD pip3 install pyunifi $STD pip3 install pyunifi
$STD pip3 install openwrt-luci-rpc $STD pip3 install openwrt-luci-rpc
$STD pip3 install asusrouter $STD pip3 install asusrouter
$STD pip3 install paho-mqtt
msg_ok "Installed Python Dependencies" msg_ok "Installed Python Dependencies"
msg_info "Installing Pi.Alert" msg_info "Installing Pi.Alert"

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 echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update
chmod +x /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. # This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported.
pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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. # When a node is running tens of containers, it's possible to exceed the kernel's cryptographic key storage allocations.
@@ -226,6 +249,18 @@ write_config() {
# This function writes the configuration to a file. # 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 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" FILEPATH="/opt/community-scripts/${NSAPP}.conf"
[[ "$GATE" =~ ",gw=" ]] && local GATE="${GATE##,gw=}"
# Strip prefixes from parameters for config file storage
local SD_VALUE="${SD}"
local NS_VALUE="${NS}"
local MAC_VALUE="${MAC}"
local VLAN_VALUE="${VLAN}"
[[ "$SD" =~ ^-searchdomain= ]] && SD_VALUE="${SD#-searchdomain=}"
[[ "$NS" =~ ^-nameserver= ]] && NS_VALUE="${NS#-nameserver=}"
[[ "$MAC" =~ ^,hwaddr= ]] && MAC_VALUE="${MAC#,hwaddr=}"
[[ "$VLAN" =~ ^,tag= ]] && VLAN_VALUE="${VLAN#,tag=}"
if [[ ! -f $FILEPATH ]]; then if [[ ! -f $FILEPATH ]]; then
cat <<EOF >"$FILEPATH" cat <<EOF >"$FILEPATH"
# ${NSAPP} Configuration File # ${NSAPP} Configuration File
@@ -248,10 +283,10 @@ IPV6_METHOD="${IPV6_METHOD:-none}"
GATE="${GATE:-none}" GATE="${GATE:-none}"
APT_CACHER_IP="${APT_CACHER_IP:-none}" APT_CACHER_IP="${APT_CACHER_IP:-none}"
MTU="${MTU:-1500}" MTU="${MTU:-1500}"
SD="${SD:-none}" SD="${SD_VALUE:-none}"
NS="${NS:-none}" NS="${NS_VALUE:-none}"
MAC="${MAC:-none}" MAC="${MAC_VALUE:-none}"
VLAN="${VLAN:-none}" VLAN="${VLAN_VALUE:-none}"
SSH="${SSH}" SSH="${SSH}"
SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}" SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}"
TAGS="${TAGS:-none}" TAGS="${TAGS:-none}"
@@ -286,10 +321,10 @@ IPV6_METHOD="${IPV6_METHOD:-none}"
GATE="${GATE:-none}" GATE="${GATE:-none}"
APT_CACHER_IP="${APT_CACHER_IP:-none}" APT_CACHER_IP="${APT_CACHER_IP:-none}"
MTU="${MTU:-1500}" MTU="${MTU:-1500}"
SD="${SD:-none}" SD="${SD_VALUE:-none}"
NS="${NS:-none}" NS="${NS_VALUE:-none}"
MAC="${MAC:-none}" MAC="${MAC_VALUE:-none}"
VLAN="${VLAN:-none}" VLAN="${VLAN_VALUE:-none}"
SSH="${SSH}" SSH="${SSH}"
SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}" SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}"
TAGS="${TAGS:-none}" TAGS="${TAGS:-none}"
@@ -783,7 +818,36 @@ advanced_settings() {
if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create ${APP} LXC?" 10 58); then
echo -e "${CREATING}${BOLD}${RD}Creating a ${APP} LXC using the above advanced settings${CL}" echo -e "${CREATING}${BOLD}${RD}Creating a ${APP} LXC using the above advanced settings${CL}"
# Strip prefixes from DNS parameters for config file storage
local SD_VALUE="$SD"
local NS_VALUE="$NS"
local MAC_VALUE="$MAC"
local VLAN_VALUE="$VLAN"
[[ "$SD" =~ ^-searchdomain= ]] && SD_VALUE="${SD#-searchdomain=}"
[[ "$NS" =~ ^-nameserver= ]] && NS_VALUE="${NS#-nameserver=}"
[[ "$MAC" =~ ^,hwaddr= ]] && MAC_VALUE="${MAC#,hwaddr=}"
[[ "$VLAN" =~ ^,tag= ]] && VLAN_VALUE="${VLAN#,tag=}"
# Temporarily store original values
local SD_ORIG="$SD"
local NS_ORIG="$NS"
local MAC_ORIG="$MAC"
local VLAN_ORIG="$VLAN"
# Set clean values for config file writing
SD="$SD_VALUE"
NS="$NS_VALUE"
MAC="$MAC_VALUE"
VLAN="$VLAN_VALUE"
write_config write_config
# Restore original formatted values for container creation
SD="$SD_ORIG"
NS="$NS_ORIG"
MAC="$MAC_ORIG"
VLAN="$VLAN_ORIG"
else else
clear clear
header_info header_info

View File

@@ -272,7 +272,8 @@ config_file() {
GATE="" GATE=""
elif [[ "$NET" =~ $ip_cidr_regex ]]; then elif [[ "$NET" =~ $ip_cidr_regex ]]; then
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}$NET${CL}" 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 if [[ "$GATE" =~ $ip_regex ]]; then
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}$GATE${CL}" echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}$GATE${CL}"
GATE=",gw=$GATE" GATE=",gw=$GATE"
@@ -468,8 +469,11 @@ config_file() {
SD="" SD=""
echo -e "${SEARCH}${BOLD}${DGN}DNS Search Domain: ${BGN}Host${CL}" echo -e "${SEARCH}${BOLD}${DGN}DNS Search Domain: ${BGN}Host${CL}"
else else
echo -e "${SEARCH}${BOLD}${DGN}DNS Search Domain: ${BGN}$SD${CL}" # Strip prefix if present for config file storage
SD="-searchdomain=$SD" local SD_VALUE="$SD"
[[ "$SD" =~ ^-searchdomain= ]] && SD_VALUE="${SD#-searchdomain=}"
echo -e "${SEARCH}${BOLD}${DGN}DNS Search Domain: ${BGN}$SD_VALUE${CL}"
SD="-searchdomain=$SD_VALUE"
fi fi
else else
if SD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a DNS Search Domain (leave blank for HOST)" 8 58 --title "DNS Search Domain" 3>&1 1>&2 2>&3); then if SD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a DNS Search Domain (leave blank for HOST)" 8 58 --title "DNS Search Domain" 3>&1 1>&2 2>&3); then
@@ -491,11 +495,14 @@ config_file() {
NS="" NS=""
echo -e "${NETWORK}${BOLD}${DGN}DNS Server IP Address: ${BGN}Host${CL}" echo -e "${NETWORK}${BOLD}${DGN}DNS Server IP Address: ${BGN}Host${CL}"
else else
if [[ "$NS" =~ $ip_regex ]]; then # Strip prefix if present for config file storage
echo -e "${NETWORK}${BOLD}${DGN}DNS Server IP Address: ${BGN}$NS${CL}" local NS_VALUE="$NS"
NS="-nameserver=$NS" [[ "$NS" =~ ^-nameserver= ]] && NS_VALUE="${NS#-nameserver=}"
if [[ "$NS_VALUE" =~ $ip_regex ]]; then
echo -e "${NETWORK}${BOLD}${DGN}DNS Server IP Address: ${BGN}$NS_VALUE${CL}"
NS="-nameserver=$NS_VALUE"
else else
msg_error "Invalid IP Address format for DNS Server. Needs to be 0.0.0.0, was ${NS}" msg_error "Invalid IP Address format for DNS Server. Needs to be 0.0.0.0, was ${NS_VALUE}"
exit exit
fi fi
fi fi
@@ -518,11 +525,14 @@ config_file() {
MAC="" MAC=""
echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}Host${CL}" echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}Host${CL}"
else else
if [[ "$MAC" =~ ^([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}$ ]]; then # Strip prefix if present for config file storage
echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC${CL}" local MAC_VALUE="$MAC"
MAC=",hwaddr=$MAC" [[ "$MAC" =~ ^,hwaddr= ]] && MAC_VALUE="${MAC#,hwaddr=}"
if [[ "$MAC_VALUE" =~ ^([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}$ ]]; then
echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}$MAC_VALUE${CL}"
MAC=",hwaddr=$MAC_VALUE"
else else
msg_error "MAC Address must be in the format xx:xx:xx:xx:xx:xx, was ${MAC}" msg_error "MAC Address must be in the format xx:xx:xx:xx:xx:xx, was ${MAC_VALUE}"
exit exit
fi fi
fi fi
@@ -545,11 +555,14 @@ config_file() {
VLAN="" VLAN=""
echo -e "${VLANTAG}${BOLD}${DGN}Vlan: ${BGN}Host${CL}" echo -e "${VLANTAG}${BOLD}${DGN}Vlan: ${BGN}Host${CL}"
else else
if [[ "$VLAN" =~ ^-?[0-9]+$ ]]; then # Strip prefix if present for config file storage
echo -e "${VLANTAG}${BOLD}${DGN}Vlan: ${BGN}$VLAN${CL}" local VLAN_VALUE="$VLAN"
VLAN=",tag=$VLAN" [[ "$VLAN" =~ ^,tag= ]] && VLAN_VALUE="${VLAN#,tag=}"
if [[ "$VLAN_VALUE" =~ ^-?[0-9]+$ ]]; then
echo -e "${VLANTAG}${BOLD}${DGN}Vlan: ${BGN}$VLAN_VALUE${CL}"
VLAN=",tag=$VLAN_VALUE"
else else
msg_error "VLAN must be an integer, was ${VLAN}" msg_error "VLAN must be an integer, was ${VLAN_VALUE}"
exit exit
fi fi
fi fi

View File

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

View File

@@ -131,8 +131,8 @@ network_check() {
update_os() { update_os() {
msg_info "Updating Container OS" msg_info "Updating Container OS"
if [[ "$CACHER" == "yes" ]]; then if [[ "$CACHER" == "yes" ]]; then
echo "Acquire::http::Proxy-Auto-Detect \"/usr/local/bin/apt-proxy-detect.sh\";" >/etc/apt/apt.conf.d/00aptproxy echo 'Acquire::http::Proxy-Auto-Detect "/usr/local/bin/apt-proxy-detect.sh";' >/etc/apt/apt.conf.d/00aptproxy
cat <<'EOF' >/usr/local/bin/apt-proxy-detect.sh cat <<EOF >/usr/local/bin/apt-proxy-detect.sh
#!/bin/bash #!/bin/bash
if nc -w1 -z "${CACHER_IP}" 3142; then if nc -w1 -z "${CACHER_IP}" 3142; then
echo -n "http://${CACHER_IP}:3142" echo -n "http://${CACHER_IP}:3142"

View File

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

View File

@@ -138,14 +138,37 @@ function check_root() {
fi fi
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -138,14 +138,37 @@ function check_root() {
fi fi
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -139,14 +139,37 @@ function check_root() {
fi fi
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -142,14 +142,37 @@ function check_root() {
fi fi
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -139,14 +139,37 @@ function check_root() {
fi fi
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -138,14 +138,37 @@ function check_root() {
fi fi
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -184,14 +184,37 @@ function msg_error() {
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}" echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -180,14 +180,37 @@ function msg_error() {
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}" echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -139,14 +139,37 @@ function check_root() {
fi fi
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -147,14 +147,37 @@ function check_root() {
fi fi
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -134,14 +134,37 @@ function check_root() {
fi fi
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -137,14 +137,37 @@ function check_root() {
fi fi
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -136,14 +136,37 @@ function check_root() {
fi fi
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -136,14 +136,37 @@ function check_root() {
fi fi
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {

View File

@@ -138,14 +138,37 @@ function check_root() {
fi fi
} }
function pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/8\.[1-4](\.[0-9]+)*"; then local PVE_VER
msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
echo -e "Exiting..." # Check for Proxmox VE 8.x
sleep 2 if [[ "$PVE_VER" =~ ^8\.([0-9]+) ]]; then
exit 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 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() { function arch_check() {