Compare commits

...

82 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
afe9d08233 Update CHANGELOG.md (#10937)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-19 00:15:29 +00:00
community-scripts-pr-app[bot]
9e1354a87b Update versions.json (#10936)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-19 01:15:07 +01:00
community-scripts-pr-app[bot]
f2aca758ea Update .app files (#10933)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-18 22:25:32 +01:00
community-scripts-pr-app[bot]
3f4e291203 Update CHANGELOG.md (#10935)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 21:24:46 +00:00
community-scripts-pr-app[bot]
ab86f00c68 Update CHANGELOG.md (#10934)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 21:24:30 +00:00
community-scripts-pr-app[bot]
9d6c2ba2ae Update date in json (#10932)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-18 21:24:25 +00:00
push-app-to-main[bot]
ac68ce48de Termix (#10887)
* Add termix (ct)

* refactor

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-01-18 22:24:04 +01:00
community-scripts-pr-app[bot]
4aa6eb7fb5 Update CHANGELOG.md (#10931)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 21:05:32 +00:00
Slaviša Arežina
dbf551d162 Refactor (#10928) 2026-01-18 22:05:08 +01:00
community-scripts-pr-app[bot]
7a52b83eb8 Update CHANGELOG.md (#10930)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 20:20:43 +00:00
Slaviša Arežina
ca97009d1e Remove iVentoy script (#10924) 2026-01-18 21:20:26 +01:00
community-scripts-pr-app[bot]
2c1756cad9 Update CHANGELOG.md (#10929)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 20:20:18 +00:00
CanbiZ (MickLesk)
6e66359d8f Improve password handling and validation logic (#10925) 2026-01-18 21:19:53 +01:00
community-scripts-pr-app[bot]
e21ab1500b Update CHANGELOG.md (#10922)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 17:18:21 +00:00
Christiaan Goossens
fe5108f7ca Fix escaping of the map block (#10920) 2026-01-18 18:18:00 +01:00
community-scripts-pr-app[bot]
502c357895 Update CHANGELOG.md (#10919)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 16:39:36 +00:00
Christiaan Goossens
0e59533bcc Make sure Patchmon also works over IPv6 and if there is another reverse proxy in front (#10917) 2026-01-18 17:39:11 +01:00
community-scripts-pr-app[bot]
e05742b96a Update CHANGELOG.md (#10914)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 14:19:13 +00:00
Tobias
9dc1e606ec refactor: peanut entrypoint (#10902)
* refactor: peanut entrypoint

* refactor: peanut: entrypoint fix

* Apply suggestion from @tremor021

* Apply suggestion from @tremor021

---------

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2026-01-18 15:18:51 +01:00
community-scripts-pr-app[bot]
c03e532dde Update .app files (#10912)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-18 15:15:16 +01:00
community-scripts-pr-app[bot]
54ba53dd3e Update CHANGELOG.md (#10913)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 14:09:55 +00:00
community-scripts-pr-app[bot]
83b5d90c04 Update CHANGELOG.md (#10911)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 14:09:39 +00:00
community-scripts-pr-app[bot]
bcd143e91a Update date in json (#10910)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-18 14:09:30 +00:00
push-app-to-main[bot]
c5031e6462 ThingsBoard (#10904)
* Add thingsboard (ct)

* fix

* Fix cat command for ThingsBoard configuration

* Fix syntax for writing to thingsboard.conf

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-01-18 15:09:14 +01:00
community-scripts-pr-app[bot]
297b4c30df Update versions.json (#10907)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 13:07:16 +01:00
community-scripts-pr-app[bot]
5abfac97f7 Update CHANGELOG.md (#10906)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 11:51:45 +00:00
Jesús
f6b3515c9e fix: preserve newest scripts pagination (#10882) 2026-01-18 12:51:21 +01:00
community-scripts-pr-app[bot]
67685e62d1 Update CHANGELOG.md (#10905)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 11:44:23 +00:00
CanbiZ (MickLesk)
25a6a7ecc7 fix(hwaccel): improve NVIDIA version matching and GPU selection UI (#10901) 2026-01-18 12:43:58 +01:00
community-scripts-pr-app[bot]
6ccc0aaaf6 Update CHANGELOG.md (#10899)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 09:02:21 +00:00
Slaviša Arežina
97ce511090 Fix typo in the New Script request template (#10891)
* Fix typo

* Update star requirement from 500 to 600

---------

Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-01-18 10:01:56 +01:00
community-scripts-pr-app[bot]
7d702353f7 Update CHANGELOG.md (#10897)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 08:03:52 +00:00
GalaxyCat Dev
b8f9ec2a34 Update qui.json (#10896) 2026-01-18 09:03:28 +01:00
community-scripts-pr-app[bot]
b8d0079a87 Update CHANGELOG.md (#10893)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 00:17:12 +00:00
community-scripts-pr-app[bot]
e9f8479313 Update versions.json (#10892)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-18 01:16:51 +01:00
community-scripts-pr-app[bot]
b575bdb3fb Update CHANGELOG.md (#10890)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-17 19:00:43 +00:00
Michel Roegl-Brunner
c3a5ff260a palmr.json (#10889) 2026-01-17 20:00:22 +01:00
community-scripts-pr-app[bot]
83f4085885 Update versions.json (#10883)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-17 13:06:10 +01:00
community-scripts-pr-app[bot]
b606fae7a5 Update CHANGELOG.md (#10881)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-17 08:18:58 +00:00
Karlito83
af335c8e51 fix sonarqube update version info (#10870) (#10871)
* fix sonarqube update version info (#10870)

* move version info update to another line and remove unnecessary messages

---------

Co-authored-by: Ronny Marx <r0mx@mailbox.org>
2026-01-17 09:18:38 +01:00
community-scripts-pr-app[bot]
a51a3929e6 Update .app files (#10879)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-17 09:18:20 +01:00
community-scripts-pr-app[bot]
ff5858ac11 Update CHANGELOG.md (#10880)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-17 07:47:51 +00:00
community-scripts-pr-app[bot]
bba878adb9 Update CHANGELOG.md (#10878)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-17 07:47:32 +00:00
community-scripts-pr-app[bot]
aee02ba783 Update date in json (#10877)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-17 07:47:29 +00:00
push-app-to-main[bot]
2d6a54c6a4 TRIP (#10864)
* Add trip (ct)

* fix

* make tremor happy

* make tremor happy 2

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-01-17 08:47:13 +01:00
community-scripts-pr-app[bot]
a3f0573ada Update CHANGELOG.md (#10875)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-17 02:15:09 +00:00
Slaviša Arežina
6a02fcaecd Update repo URL (#10872) 2026-01-17 03:14:44 +01:00
community-scripts-pr-app[bot]
eeeb80bc36 Update CHANGELOG.md (#10874)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-17 00:13:49 +00:00
community-scripts-pr-app[bot]
b18136da63 Update versions.json (#10873)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-17 01:13:27 +01:00
community-scripts-pr-app[bot]
d86dbce395 Update CHANGELOG.md (#10869)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 18:40:30 +00:00
Chris
48cebc4aa9 Jotty: increase RAM; cap heap size at 3GB during build (#10868) 2026-01-16 19:40:04 +01:00
community-scripts-pr-app[bot]
f3be88ad98 Update CHANGELOG.md (#10866)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 15:55:38 +00:00
Romain PINSOLLE
67a6c781b0 SnowShare: Increase default resources (#10865)
* Increase default resource limits for SnowShare

* change json
2026-01-16 16:55:13 +01:00
community-scripts-pr-app[bot]
151e2d44c8 Update .app files (#10863)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-16 14:23:47 +01:00
CanbiZ (MickLesk)
152aa527e2 Update Unifi OS Server JSON configuration 2026-01-16 14:19:19 +01:00
community-scripts-pr-app[bot]
cd737cdf97 Update CHANGELOG.md (#10862)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 13:18:31 +00:00
push-app-to-main[bot]
23a27bcda4 Flatnotes (#10857)
* Add flatnotes (ct)

* Update flatnotes.json

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>
2026-01-16 14:18:06 +01:00
community-scripts-pr-app[bot]
2492dfe201 Update .app files (#10861)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-16 14:09:30 +01:00
community-scripts-pr-app[bot]
de0790aa72 Update CHANGELOG.md (#10860)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 13:07:40 +00:00
push-app-to-main[bot]
497d2711f1 Unifi OS Server (#10856)
* Add unifi-os-server (ct)

* Change updateable status to false in JSON config

* Update unifi-os-server.json

* Remove unnecessary dependencies from install script

Removed ca-certificates and jq from dependency installation.

* fix: default buit-in update msg

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-01-16 14:07:16 +01:00
community-scripts-pr-app[bot]
1c01804b29 Update versions.json (#10859)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 13:07:22 +01:00
community-scripts-pr-app[bot]
0232e473ca Update CHANGELOG.md (#10855)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 09:58:16 +00:00
JJ
54ac6eece0 postgresql: name of sources file fixed (update check) (#10854)
* fix: name of sources file fixed

The wrong name leads to updates being not possible as "No PostgreSQL Installation Found!" will be displayed.

* Change check for PostgreSQL installation commandupdate: switch from file to command check

* fix: command check expression
2026-01-16 10:57:49 +01:00
community-scripts-pr-app[bot]
df0ce0c09b Update CHANGELOG.md (#10852)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 08:32:31 +00:00
CanbiZ (MickLesk)
4fc57b0e0b immich: use dpkg-query to get intel-opencl-icd version (#10848) 2026-01-16 09:32:13 +01:00
Tobias
f0e630cbfe domain-monitor: fix: cron user (#10846) 2026-01-16 09:31:53 +01:00
community-scripts-pr-app[bot]
ba908d3dfd Update CHANGELOG.md (#10851)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 08:31:40 +00:00
Tobias
05c3b08d6e qui: fix: category (#10847) 2026-01-16 09:31:18 +01:00
community-scripts-pr-app[bot]
59697a9eb1 Update CHANGELOG.md (#10850)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 08:04:45 +00:00
CanbiZ (MickLesk)
109d6ab6e9 pihole/unbound: create unbound config before apt install to prevent port conflicts (#10839)
* fix(pihole): create unbound config before apt install to prevent port conflict

* fix(unbound): create config before apt install to prevent port conflict
2026-01-16 09:04:22 +01:00
community-scripts-pr-app[bot]
e309d871d7 Update CHANGELOG.md (#10849)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 07:39:24 +00:00
CanbiZ (MickLesk)
8b750d42d2 fix(zammad): use ln -sf to avoid failure when symlink exists (#10840) 2026-01-16 08:39:01 +01:00
community-scripts-pr-app[bot]
32fd002aa4 Update CHANGELOG.md (#10844)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 00:14:27 +00:00
community-scripts-pr-app[bot]
1a29f2a604 Update versions.json (#10843)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 01:14:01 +01:00
community-scripts-pr-app[bot]
e76c453474 Update .app files (#10831)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-15 14:21:14 +01:00
community-scripts-pr-app[bot]
ebdfdd7ccf Update CHANGELOG.md (#10832)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-15 13:20:17 +00:00
community-scripts-pr-app[bot]
60d55b71b3 Update date in json (#10830)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-15 13:19:52 +00:00
push-app-to-main[bot]
d6473133c9 Add qui (ct) (#10829) 2026-01-15 14:19:34 +01:00
CanbiZ (MickLesk)
ae8f3d1b8e Remove 'zlib' module from PHP setup 2026-01-15 13:50:27 +01:00
community-scripts-pr-app[bot]
bba52b03da Update CHANGELOG.md (#10828)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-15 12:48:47 +00:00
CanbiZ (MickLesk)
ab33f85d9d Refactor: FreshRSS + Bump to Debian 13 (#10824)
* Refactor: FreshRSS + Bump to Debian 13

* update_script
2026-01-15 13:48:10 +01:00
community-scripts-pr-app[bot]
9d39c91dff Update versions.json (#10827)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-15 13:07:21 +01:00
60 changed files with 1896 additions and 577 deletions

View File

@@ -30,7 +30,7 @@ body:
required: true
- label: "I have searched existing [discussions](https://github.com/community-scripts/ProxmoxVE/discussions?discussions_q=) and found no duplicate requests."
required: true
- label: "The application requested has 200+ stars on Github (if applicable), is older than 6 months, actively maintained and has release tarballs published."
- label: "The application requested has 600+ stars on Github (if applicable), is older than 6 months, actively maintained and has release tarballs published."
required: true
- type: markdown
attributes:

View File

@@ -10,8 +10,112 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2026-01-19
## 2026-01-18
### 🆕 New Scripts
- Termix ([#10887](https://github.com/community-scripts/ProxmoxVE/pull/10887))
- ThingsBoard ([#10904](https://github.com/community-scripts/ProxmoxVE/pull/10904))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fix Patchmon install script (escaping) [@christiaangoossens](https://github.com/christiaangoossens) ([#10920](https://github.com/community-scripts/ProxmoxVE/pull/10920))
- refactor: peanut entrypoint [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10902](https://github.com/community-scripts/ProxmoxVE/pull/10902))
- #### 💥 Breaking Changes
- Update Patchmon default Nginx config (IPv6 and correct scheme) [@christiaangoossens](https://github.com/christiaangoossens) ([#10917](https://github.com/community-scripts/ProxmoxVE/pull/10917))
- #### 🔧 Refactor
- Refactor: FluidCalendar [@tremor021](https://github.com/tremor021) ([#10928](https://github.com/community-scripts/ProxmoxVE/pull/10928))
### 🗑️ Deleted Scripts
- Remove iVentoy script [@tremor021](https://github.com/tremor021) ([#10924](https://github.com/community-scripts/ProxmoxVE/pull/10924))
### 💾 Core
- #### ✨ New Features
- core: improve password handling and validation logic [@MickLesk](https://github.com/MickLesk) ([#10925](https://github.com/community-scripts/ProxmoxVE/pull/10925))
- #### 🔧 Refactor
- hwaccel: improve NVIDIA version matching and GPU selection UI [@MickLesk](https://github.com/MickLesk) ([#10901](https://github.com/community-scripts/ProxmoxVE/pull/10901))
### 📂 Github
- Fix typo in the New Script request template [@tremor021](https://github.com/tremor021) ([#10891](https://github.com/community-scripts/ProxmoxVE/pull/10891))
### 🌐 Website
- #### 🐞 Bug Fixes
- fix: preserve newest scripts pagination [@jgrubiox](https://github.com/jgrubiox) ([#10882](https://github.com/community-scripts/ProxmoxVE/pull/10882))
### ❔ Uncategorized
- Update qui.json [@GalaxyCatD3v](https://github.com/GalaxyCatD3v) ([#10896](https://github.com/community-scripts/ProxmoxVE/pull/10896))
## 2026-01-17
### 🆕 New Scripts
- TRIP ([#10864](https://github.com/community-scripts/ProxmoxVE/pull/10864))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix sonarqube update version info (#10870) [@Karlito83](https://github.com/Karlito83) ([#10871](https://github.com/community-scripts/ProxmoxVE/pull/10871))
- WGDashboard: Update repo URL [@tremor021](https://github.com/tremor021) ([#10872](https://github.com/community-scripts/ProxmoxVE/pull/10872))
### 🌐 Website
- #### 📝 Script Information
- Disable Palmer [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#10889](https://github.com/community-scripts/ProxmoxVE/pull/10889))
## 2026-01-16
### 🆕 New Scripts
- Flatnotes ([#10857](https://github.com/community-scripts/ProxmoxVE/pull/10857))
- Unifi OS Server ([#10856](https://github.com/community-scripts/ProxmoxVE/pull/10856))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Jotty: increase RAM; cap heap size at 3GB during build [@vhsdream](https://github.com/vhsdream) ([#10868](https://github.com/community-scripts/ProxmoxVE/pull/10868))
- SnowShare: Increase default resources [@TuroYT](https://github.com/TuroYT) ([#10865](https://github.com/community-scripts/ProxmoxVE/pull/10865))
- postgresql: name of sources file fixed (update check) [@JamborJan](https://github.com/JamborJan) ([#10854](https://github.com/community-scripts/ProxmoxVE/pull/10854))
- immich: use dpkg-query to get intel-opencl-icd version [@MickLesk](https://github.com/MickLesk) ([#10848](https://github.com/community-scripts/ProxmoxVE/pull/10848))
- domain-monitor: fix: cron user [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10846](https://github.com/community-scripts/ProxmoxVE/pull/10846))
- pihole/unbound: create unbound config before apt install to prevent port conflicts [@MickLesk](https://github.com/MickLesk) ([#10839](https://github.com/community-scripts/ProxmoxVE/pull/10839))
- zammad: use ln -sf to avoid failure when symlink exists [@MickLesk](https://github.com/MickLesk) ([#10840](https://github.com/community-scripts/ProxmoxVE/pull/10840))
### ❔ Uncategorized
- qui: fix: category [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10847](https://github.com/community-scripts/ProxmoxVE/pull/10847))
## 2026-01-15
### 🆕 New Scripts
- Qui ([#10829](https://github.com/community-scripts/ProxmoxVE/pull/10829))
### 🚀 Updated Scripts
- #### ✨ New Features
- Refactor: FreshRSS + Bump to Debian 13 [@MickLesk](https://github.com/MickLesk) ([#10824](https://github.com/community-scripts/ProxmoxVE/pull/10824))
## 2026-01-14
### 🆕 New Scripts

View File

@@ -29,8 +29,12 @@ function update_script() {
fi
setup_mariadb
if ! grep -Fq "root /usr/bin/php /opt/domain-monitor/cron/check_domains.php" /etc/crontab; then
echo "0 0 * * * root /usr/bin/php /opt/domain-monitor/cron/check_domains.php" >>/etc/crontab
if grep -Fq "root /usr/bin/php /opt/domain-monitor/cron/check_domains.php" /etc/crontab; then
sed -i 's|root /usr/bin/php /opt/domain-monitor/cron/check_domains.php|www-data /usr/bin/php /opt/domain-monitor/cron/check_domains.php|' /etc/crontab
fi
if ! grep -Fq "www-data /usr/bin/php /opt/domain-monitor/cron/check_domains.php" /etc/crontab; then
echo "0 0 * * * www-data /usr/bin/php /opt/domain-monitor/cron/check_domains.php" >> /etc/crontab
fi
if check_for_gh_release "domain-monitor" "Hosteroid/domain-monitor"; then

79
ct/flatnotes.sh Normal file
View File

@@ -0,0 +1,79 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: luismco
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/dullage/flatnotes
APP="Flatnotes"
var_tags="${var_tags:-notes}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/flatnotes ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "flatnotes" "dullage/flatnotes"; then
msg_info "Stopping Service"
systemctl stop flatnotes
msg_ok "Stopped Service"
msg_info "Backing up Configuration and Data"
cp /opt/flatnotes/.env /opt/flatnotes.env
cp -r /opt/flatnotes/data /opt/flatnotes_data_backup
msg_ok "Backed up Configuration and Data"
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes"
msg_info "Updating Frontend"
cd /opt/flatnotes/client
$STD npm install
$STD npm run build
msg_ok "Updated Frontend"
msg_info "Updating Backend"
cd /opt/flatnotes
rm -f uv.lock
$STD /usr/local/bin/uvx migrate-to-uv
$STD /usr/local/bin/uv sync
msg_ok "Updated Backend"
msg_info "Restoring Configuration and Data"
cp /opt/flatnotes.env /opt/flatnotes/.env
cp -r /opt/flatnotes_data_backup/. /opt/flatnotes/data
rm -f /opt/flatnotes.env
rm -r /opt/flatnotes_data_backup
msg_ok "Restored Configuration and Data"
msg_info "Starting Service"
systemctl start flatnotes
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

View File

@@ -34,11 +34,10 @@ function update_script() {
msg_info "Stopped Service"
cp /opt/fluid-calendar/.env /opt/fluid.env
rm -rf /opt/fluid-calendar
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
mv /opt/fluid.env /opt/fluid-calendar/.env
msg_info "Updating Fluid Calendar"
mv /opt/fluid.env /opt/fluid-calendar/.env
cd /opt/fluid-calendar
export NEXT_TELEMETRY_DISABLED=1
$STD npm install --legacy-peer-deps

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
@@ -33,11 +33,44 @@ function update_script() {
chmod +x /opt/freshrss/cli/sensitive-log.sh
systemctl restart apache2
msg_ok "Fixed wrong permissions"
exit
else
msg_error "FreshRSS should be updated via the user interface."
exit
fi
if check_for_gh_release "freshrss" "FreshRSS/FreshRSS"; then
msg_info "Stopping Apache2"
systemctl stop apache2
msg_ok "Stopped Apache2"
msg_info "Backing up FreshRSS"
mv /opt/freshrss /opt/freshrss-backup
msg_ok "Backup Created"
fetch_and_deploy_gh_release "freshrss" "FreshRSS/FreshRSS" "tarball"
msg_info "Restoring data and configuration"
if [[ -d /opt/freshrss-backup/data ]]; then
cp -a /opt/freshrss-backup/data/. /opt/freshrss/data/
fi
if [[ -d /opt/freshrss-backup/extensions ]]; then
cp -a /opt/freshrss-backup/extensions/. /opt/freshrss/extensions/
fi
msg_ok "Data Restored"
msg_info "Setting permissions"
chown -R www-data:www-data /opt/freshrss
chmod -R g+rX /opt/freshrss
chmod -R g+w /opt/freshrss/data/
msg_ok "Permissions Set"
msg_info "Starting Apache2"
systemctl start apache2
msg_ok "Started Apache2"
msg_info "Cleaning up backup"
rm -rf /opt/freshrss-backup
msg_ok "Cleaned up backup"
msg_ok "Updated successfully!"
fi
exit
}
start

6
ct/headers/flatnotes Normal file
View File

@@ -0,0 +1,6 @@
________ __ __
/ ____/ /___ _/ /_____ ____ / /____ _____
/ /_ / / __ `/ __/ __ \/ __ \/ __/ _ \/ ___/
/ __/ / / /_/ / /_/ / / / /_/ / /_/ __(__ )
/_/ /_/\__,_/\__/_/ /_/\____/\__/\___/____/

View File

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

6
ct/headers/qui Normal file
View File

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

6
ct/headers/termix Normal file
View File

@@ -0,0 +1,6 @@
______ _
/_ __/__ _________ ___ (_) __
/ / / _ \/ ___/ __ `__ \/ / |/_/
/ / / __/ / / / / / / / /> <
/_/ \___/_/ /_/ /_/ /_/_/_/|_|

6
ct/headers/thingsboard Normal file
View File

@@ -0,0 +1,6 @@
________ _ ____ __
/_ __/ /_ (_)___ ____ ______/ __ )____ ____ __________/ /
/ / / __ \/ / __ \/ __ `/ ___/ __ / __ \/ __ `/ ___/ __ /
/ / / / / / / / / / /_/ (__ ) /_/ / /_/ / /_/ / / / /_/ /
/_/ /_/ /_/_/_/ /_/\__, /____/_____/\____/\__,_/_/ \__,_/
/____/

6
ct/headers/trip Normal file
View File

@@ -0,0 +1,6 @@
__________ ________
/_ __/ __ \/ _/ __ \
/ / / /_/ // // /_/ /
/ / / _, _// // ____/
/_/ /_/ |_/___/_/

View File

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

View File

@@ -96,7 +96,7 @@ EOF
$STD apt install -y ./*.deb
rm ./*.deb
$STD apt-mark hold libigdgmm12
dpkg -l | grep -m1 "intel-opencl-icd" | awk '{print $3}' >~/.intel_version
dpkg-query -W -f='${Version}\n' intel-opencl-icd >~/.intel_version
msg_ok "Intel iGPU dependencies updated"
fi
rm ./Dockerfile

View File

@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="jotty"
var_tags="${var_tags:-tasks;notes}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-3072}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
@@ -45,6 +45,8 @@ function update_script() {
msg_info "Updating jotty"
cd /opt/jotty
unset NODE_OPTIONS
export NODE_OPTIONS="--max-old-space-size=3072"
$STD yarn --frozen-lockfile
$STD yarn next telemetry disable
$STD yarn build
@@ -55,7 +57,7 @@ function update_script() {
cp -r .next/static .next/standalone/.next/
mv .next/standalone /tmp/jotty_standalone
rm -rf * .next .git .gitignore .yarn
rm -rf ./* .next .git .gitignore .yarn
mv /tmp/jotty_standalone/* .
mv /tmp/jotty_standalone/.[!.]* . 2>/dev/null || true
rm -rf /tmp/jotty_standalone

View File

@@ -28,7 +28,7 @@ function update_script() {
exit
fi
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
if check_for_gh_release "peanut" "Brandawg93/PeaNUT"; then
msg_info "Stopping Service"
@@ -37,6 +37,15 @@ function update_script() {
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
if ! grep -q '/opt/peanut/entrypoint.mjs' /etc/systemd/system/peanut.service; then
msg_info "Fixing entrypoint"
cd /opt/peanut
ln -sf .next/standalone/server.js server.js
sed -i 's|/opt/peanut/.next/standalone/server.js|/opt/peanut/entrypoint.mjs|' /etc/systemd/system/peanut.service
systemctl daemon-reload
msg_ok "Fixed entrypoint"
fi
msg_info "Updating Peanut"
cd /opt/peanut
$STD pnpm i

View File

@@ -23,7 +23,7 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /etc/apt/sources.list.d/pgdg.list ]]; then
if ! command -v psql >/dev/null 2>&1; then
msg_error "No ${APP} Installation Found!"
exit
fi

58
ct/qui.sh Normal file
View File

@@ -0,0 +1,58 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/autobrr/qui
APP="Qui"
var_tags="${var_tags:-torrent}"
var_disk="${var_disk:-10}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/local/bin/qui ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "Qui" "autobrr/qui"; then
msg_info "Stopping Service"
systemctl stop qui
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "qui" "autobrr/qui" "prebuild" "latest" "/tmp/qui" "qui_*_linux_x86_64.tar.gz"
msg_info "Updating qui"
mv /tmp/qui/qui /usr/local/bin/qui
chmod +x /usr/local/bin/qui
rm -rf /tmp/qui
msg_ok "Updated qui"
msg_info "Starting Service"
systemctl start qui
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7476${CL}"

View File

@@ -7,9 +7,9 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="SnowShare"
var_tags="${var_tags:-file-sharing}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-5}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-20}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"

View File

@@ -44,6 +44,7 @@ function update_script() {
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file
unzip -q "$temp_file" -d /opt
mv /opt/sonarqube-${RELEASE} /opt/sonarqube
echo "${RELEASE}" > ~/.sonarqube
msg_ok "Updated SonarQube"
msg_info "Restoring Backup"

90
ct/termix.sh Normal file
View File

@@ -0,0 +1,90 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Termix-SSH/Termix
APP="Termix"
var_tags="${var_tags:-ssh;terminal;management}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/termix ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "termix" "Termix-SSH/Termix"; then
msg_info "Stopping Service"
systemctl stop termix
msg_ok "Stopped Service"
msg_info "Backing up Data"
cp -r /opt/termix/data /opt/termix_data_backup
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix"
msg_info "Building Frontend"
cd /opt/termix
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
find public/fonts -name "*.ttf" ! -name "*Regular.ttf" ! -name "*Bold.ttf" ! -name "*Italic.ttf" -delete 2>/dev/null || true
$STD npm install --ignore-scripts --force
$STD npm run build
msg_ok "Built Frontend"
msg_info "Building Backend"
$STD npm rebuild better-sqlite3 --force
$STD npm run build:backend
msg_ok "Built Backend"
msg_info "Setting up Production Dependencies"
$STD npm ci --only=production --ignore-scripts --force
$STD npm rebuild better-sqlite3 bcryptjs --force
$STD npm cache clean --force
msg_ok "Set up Production Dependencies"
msg_info "Restoring Data"
mkdir -p /opt/termix/data
cp -r /opt/termix_data_backup/. /opt/termix/data
rm -rf /opt/termix_data_backup
msg_ok "Restored Data"
msg_info "Updating Frontend Files"
rm -rf /opt/termix/html/*
cp -r /opt/termix/dist/* /opt/termix/html/ 2>/dev/null || true
cp -r /opt/termix/src/locales /opt/termix/html/locales 2>/dev/null || true
cp -r /opt/termix/public/fonts /opt/termix/html/fonts 2>/dev/null || true
msg_ok "Updated Frontend Files"
msg_info "Starting Service"
systemctl start termix
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

57
ct/thingsboard.sh Normal file
View File

@@ -0,0 +1,57 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/thingsboard/thingsboard
APP="ThingsBoard"
var_tags="${var_tags:-iot;platform}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /usr/share/thingsboard ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "thingsboard" "thingsboard/thingsboard"; then
msg_info "Stopping Service"
systemctl stop thingsboard
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "thingsboard" "thingsboard/thingsboard" "binary" "latest" "/tmp" "thingsboard-*.deb"
msg_info "Running Database Upgrade"
$STD /usr/share/thingsboard/bin/install/upgrade.sh
msg_ok "Ran Database Upgrade"
msg_info "Starting Service"
systemctl start thingsboard
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

66
ct/trip.sh Normal file
View File

@@ -0,0 +1,66 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/itskovacs/TRIP
APP="TRIP"
var_tags="${var_tags:-maps;travel}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/trip ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "trip" "itskovacs/TRIP"; then
msg_info "Stopping Service"
systemctl stop trip
msg_ok "Stopped Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "trip" "itskovacs/TRIP" "tarball"
msg_info "Updating Frontend"
cd /opt/trip/src
$STD npm install
$STD npm run build
mkdir -p /opt/trip/frontend
cp -r /opt/trip/src/dist/trip/browser/* /opt/trip/frontend/
msg_ok "Updated Frontend"
msg_info "Updating Backend"
cd /opt/trip/backend
$STD uv pip install --python /opt/trip/.venv/bin/python -r trip/requirements.txt
msg_ok "Updated Backend"
msg_info "Starting Service"
systemctl start trip
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"

View File

@@ -1,18 +1,20 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 tteck
# Author: tteck (tteckster)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.iventoy.com/en/index.html
# Source: https://ui.com/
APP="iVentoy"
var_tags="${var_tags:-pxe-tool}"
var_disk="${var_disk:-2}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
APP="UniFi-OS-Server"
var_tags="${var_tags:-network}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-20}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-0}"
var_tun="${var_tun:-yes}"
var_nesting="${var_nesting:-1}"
header_info "$APP"
variables
@@ -23,11 +25,11 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/iventoy ]]; then
if [[ ! -f /usr/local/sbin/unifi-os-server.bin && ! -d /data/unifi ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_error "Currently we don't provide an update function for this ${APP}."
msg_custom "🚀" "${GN}" "The app offers a built-in updater. Please use it."
exit
}
@@ -38,4 +40,4 @@ description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:26000${CL}"
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:11443${CL}"

View File

@@ -28,20 +28,19 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if ! dpkg -s git >/dev/null 2>&1; then
msg_info "Installing git"
$STD apt update
$STD apt install -y git
msg_ok "Installed git"
fi
apt update
apt -y upgrade
ensure_dependencies git
msg_info "Updating LXC"
$STD apt update
$STD apt upgrade -y
if [[ -d /etc/wgdashboard ]]; then
sleep 2
cd /etc/wgdashboard/src
./wgd.sh update
./wgd.sh start
$STD ./wgd.sh update
$STD ./wgd.sh start
fi
msg_ok "Updated LXC"
msg_ok "Updated successfully!"
exit
}

View File

@@ -0,0 +1,35 @@
{
"name": "Flatnotes",
"slug": "flatnotes",
"categories": [
12
],
"date_created": "2026-01-16",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://github.com/dullage/flatnotes/wiki",
"website": "https://github.com/dullage/flatnotes",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/flatnotes.webp",
"config_path": "/opt/flatnotes/.env",
"description": "A self-hosted, database-less note-taking web app that utilises a flat folder of markdown files for storage.",
"install_methods": [
{
"type": "default",
"script": "ct/flatnotes.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -23,7 +23,7 @@
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
"version": "13"
}
}
],

View File

@@ -1,40 +0,0 @@
{
"name": "iVentoy",
"slug": "iventoy",
"categories": [
2
],
"date_created": "2024-05-16",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": 26000,
"documentation": "https://www.iventoy.com/en/doc_news.html",
"website": "https://www.iventoy.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/iventoy.webp",
"config_path": "",
"description": "iVentoy is an upgraded PXE server that allows simultaneous OS booting and installation on multiple machines via network. It is user-friendly, requiring only the placement of ISO files in a designated folder and selecting PXE boot on the client machine. iVentoy supports x86 Legacy BIOS, IA32 UEFI, x86_64 UEFI, and ARM64 UEFI modes. It is compatible with over 110 OS types, including Windows, WinPE, Linux, and VMware.",
"install_methods": [
{
"type": "default",
"script": "ct/iventoy.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Container must be privileged.",
"type": "warning"
}
]
}

View File

@@ -20,7 +20,7 @@
"script": "ct/jotty.sh",
"resources": {
"cpu": 2,
"ram": 3072,
"ram": 4096,
"hdd": 6,
"os": "debian",
"version": "13"

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 3000,
"disable": false,
"disable": true,
"documentation": "https://palmr.kyantech.com.br/docs/3.1-beta",
"config_path": "/opt/palmr/apps/server/.env, /opt/palmr/apps/web/.env",
"website": "https://palmr.kyantech.com.br/",

View File

@@ -0,0 +1,35 @@
{
"name": "Qui",
"slug": "qui",
"categories": [
11
],
"date_created": "2026-01-15",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 7476,
"documentation": "https://github.com/autobrr/qui",
"website": "https://getqui.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/qui.webp",
"config_path": "/root/.config/qui/config.toml",
"description": "Qui is a modern, self-hosted web interface for managing multiple qBittorrent instances with support for 10k+ torrents. It provides a clean and responsive interface for monitoring and controlling your qBittorrent downloads across multiple servers.",
"install_methods": [
{
"type": "default",
"script": "ct/qui.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 10,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -19,9 +19,9 @@
"type": "default",
"script": "ct/snowshare.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 5,
"cpu": 2,
"ram": 2048,
"hdd": 20,
"os": "Debian",
"version": "13"
}

View File

@@ -0,0 +1,35 @@
{
"name": "Termix",
"slug": "termix",
"categories": [
6
],
"date_created": "2026-01-18",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": "https://docs.termix.site/",
"website": "https://termix.site/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/termix.webp",
"config_path": "",
"description": "Termix is an open-source, self-hosted server management platform with SSH terminal access, SSH tunneling, remote file management, Docker management, and multi-platform support.",
"install_methods": [
{
"type": "default",
"script": "ct/termix.sh",
"resources": {
"cpu": 4,
"ram": 4096,
"hdd": 10,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -0,0 +1,48 @@
{
"name": "ThingsBoard",
"slug": "thingsboard",
"categories": [
7
],
"date_created": "2026-01-18",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://thingsboard.io/docs/",
"website": "https://thingsboard.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/thingsboard.webp",
"config_path": "/etc/thingsboard/conf/thingsboard.conf",
"description": "ThingsBoard is an open-source IoT platform for data collection, processing, visualization, and device management. It enables device connectivity via industry standard IoT protocols - MQTT, CoAP and HTTP and supports both cloud and on-premises deployments.",
"install_methods": [
{
"type": "default",
"script": "ct/thingsboard.sh",
"resources": {
"cpu": 4,
"ram": 4096,
"hdd": 10,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": "sysadmin@thingsboard.org",
"password": "sysadmin"
},
"notes": [
{
"text": "Please allow up to 90 seconds for the Web UI to start",
"type": "info"
},
{
"text": "Additional demo accounts: tenant@thingsboard.org / tenant and customer@thingsboard.org / customer",
"type": "info"
},
{
"text": "Change passwords for all accounts in the account profile page after first login",
"type": "warning"
}
]
}

View File

@@ -0,0 +1,35 @@
{
"name": "TRIP",
"slug": "trip",
"categories": [
21
],
"date_created": "2026-01-17",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8000,
"documentation": "https://itskovacs.github.io/trip/docs/intro",
"website": "https://github.com/itskovacs/TRIP",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/trip.webp",
"config_path": "/opt/trip.env",
"description": "Minimalist POI Map Tracker and Trip Planner. Self-hosted.",
"install_methods": [
{
"type": "default",
"script": "ct/trip.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -0,0 +1,35 @@
{
"name": "Unifi OS Server",
"slug": "unifi-os-server",
"categories": [
4
],
"date_created": "2026-01-16",
"type": "ct",
"updateable": true,
"privileged": true,
"interface_port": 11443,
"documentation": "https://help.ui.com/hc/en-us",
"website": "https://www.ui.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/ubiquiti-unifi.webp",
"config_path": "",
"description": "Unifi OS Server is the operating system that powers Ubiquiti's UniFi line of network devices. It provides a centralized platform for managing and monitoring UniFi access points, switches, and security gateways, offering features such as network configuration, device provisioning, and performance analytics.",
"install_methods": [
{
"type": "default",
"script": "ct/unifi-os-server.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 20,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -1,154 +1,384 @@
[
{
"name": "chrisbenincasa/tunarr",
"version": "v1.1.0-dev.3",
"date": "2026-01-14T23:18:25Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.95.0-pre",
"date": "2026-01-14T22:24:18Z"
},
{
"name": "livebook-dev/livebook",
"version": "v0.18.3",
"date": "2026-01-14T21:50:55Z"
},
{
"name": "ZoeyVid/NPMplus",
"version": "2025-05-07-r1",
"date": "2025-05-07T12:18:42Z"
},
{
"name": "icereed/paperless-gpt",
"version": "v0.24.0",
"date": "2026-01-14T21:28:09Z"
},
{
"name": "Kareadita/Kavita",
"version": "v0.8.9",
"date": "2026-01-14T21:26:43Z"
"version": "v0.8.9.1",
"date": "2026-01-18T23:04:08Z"
},
{
"name": "emqx/emqx",
"version": "6.0.2-rc.1",
"date": "2026-01-14T19:29:02Z"
"name": "pelican-dev/panel",
"version": "v1.0.0-beta31",
"date": "2026-01-18T22:43:24Z"
},
{
"name": "ghostfolio/ghostfolio",
"version": "2.230.0",
"date": "2026-01-14T19:28:53Z"
"name": "pelican-dev/wings",
"version": "v1.0.0-beta22",
"date": "2026-01-18T22:38:36Z"
},
{
"name": "Part-DB/Part-DB-server",
"version": "v2.5.0",
"date": "2026-01-18T22:16:38Z"
},
{
"name": "seerr-team/seerr",
"version": "preview-remonitor-sonarr-episodes",
"date": "2026-01-18T20:33:38Z"
},
{
"name": "laurent22/joplin",
"version": "server-v3.5.2",
"date": "2025-12-19T21:28:55Z"
},
{
"name": "fccview/jotty",
"version": "1.17.2",
"date": "2026-01-14T19:06:52Z"
"version": "1.18.0",
"date": "2026-01-18T19:00:48Z"
},
{
"name": "Brandawg93/PeaNUT",
"version": "v5.21.2",
"date": "2026-01-18T17:32:08Z"
},
{
"name": "pocketbase/pocketbase",
"version": "v0.36.1",
"date": "2026-01-18T17:09:58Z"
},
{
"name": "pommee/goaway",
"version": "v0.63.5",
"date": "2026-01-18T13:34:16Z"
},
{
"name": "wger-project/wger",
"version": "2.4",
"date": "2026-01-18T12:12:02Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.16",
"date": "2026-01-17T07:54:15Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.4",
"date": "2026-01-04T22:41:00Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.879",
"date": "2026-01-18T05:55:29Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.81.0-nightly",
"date": "2026-01-18T04:06:15Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.1.0",
"date": "2025-11-23T12:13:34Z"
},
{
"name": "jeedom/core",
"version": "4.5.2",
"date": "2026-01-18T00:27:03Z"
},
{
"name": "oauth2-proxy/oauth2-proxy",
"version": "v7.14.2",
"date": "2026-01-18T00:26:09Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v1.1.1",
"date": "2026-01-17T22:35:09Z"
},
{
"name": "ZoeyVid/NPMplus",
"version": "2026-01-17-r3",
"date": "2026-01-17T21:45:17Z"
},
{
"name": "outline/outline",
"version": "v1.3.0",
"date": "2026-01-17T16:28:04Z"
},
{
"name": "evcc-io/evcc",
"version": "0.300.4",
"date": "2026-01-17T14:11:01Z"
},
{
"name": "LogicLabs-OU/OpenArchiver",
"version": "v0.4.1",
"date": "2026-01-17T12:24:31Z"
},
{
"name": "inventree/InvenTree",
"version": "1.1.8",
"date": "2026-01-17T11:21:36Z"
},
{
"name": "nickheyer/discopanel",
"version": "v1.0.22",
"date": "2026-01-17T11:09:45Z"
},
{
"name": "ghostfolio/ghostfolio",
"version": "2.231.0",
"date": "2026-01-17T11:01:23Z"
},
{
"name": "forgejo/forgejo",
"version": "v14.0.1",
"date": "2026-01-17T07:14:19Z"
},
{
"name": "cross-seed/cross-seed",
"version": "v6.13.6",
"date": "2025-11-04T13:35:35Z"
},
{
"name": "esphome/esphome",
"version": "2025.12.7",
"date": "2026-01-17T03:49:29Z"
},
{
"name": "coder/code-server",
"version": "v4.108.1",
"date": "2026-01-17T04:09:09Z"
},
{
"name": "ollama/ollama",
"version": "v0.14.1",
"date": "2026-01-14T19:02:29Z"
"version": "v0.14.2",
"date": "2026-01-16T00:50:51Z"
},
{
"name": "metabase/metabase",
"version": "v0.58.2",
"date": "2026-01-16T22:54:44Z"
},
{
"name": "home-assistant/core",
"version": "2026.1.2",
"date": "2026-01-16T21:40:31Z"
},
{
"name": "wanetty/upgopher",
"version": "v1.13.0",
"date": "2026-01-16T20:26:34Z"
},
{
"name": "keycloak/keycloak",
"version": "26.5.1",
"date": "2026-01-14T18:09:13Z"
"version": "26.4.8",
"date": "2026-01-15T13:52:29Z"
},
{
"name": "NodeBB/NodeBB",
"version": "v4.8.0",
"date": "2026-01-14T17:54:36Z"
"name": "homarr-labs/homarr",
"version": "v1.50.1",
"date": "2026-01-16T19:27:38Z"
},
{
"name": "livebook-dev/livebook",
"version": "nightly",
"date": "2026-01-16T19:17:16Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@2.3.6",
"date": "2026-01-16T15:00:42Z"
},
{
"name": "bunkerity/bunkerweb",
"version": "v1.6.7",
"date": "2026-01-12T09:54:36Z"
},
{
"name": "TuroYT/snowshare",
"version": "v1.2.10",
"date": "2026-01-16T15:18:09Z"
},
{
"name": "emqx/emqx",
"version": "6.0.2",
"date": "2026-01-16T13:52:11Z"
},
{
"name": "silverbulletmd/silverbullet",
"version": "2.4.1",
"date": "2026-01-16T12:08:28Z"
},
{
"name": "coollabsio/coolify",
"version": "v4.0.0-beta.462",
"date": "2026-01-16T11:05:11Z"
},
{
"name": "wazuh/wazuh",
"version": "v4.14.2",
"date": "2026-01-15T11:19:35Z"
},
{
"name": "garethgeorge/backrest",
"version": "v1.11.1",
"date": "2026-01-16T08:27:09Z"
},
{
"name": "goauthentik/authentik",
"version": "version/2025.12.1",
"date": "2026-01-16T01:04:03Z"
},
{
"name": "scanopy/scanopy",
"version": "v0.13.6",
"date": "2026-01-14T17:38:28Z"
"date": "2026-01-15T23:34:51Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@2.3.5",
"date": "2026-01-14T16:37:38Z"
},
{
"name": "Brandawg93/PeaNUT",
"version": "v5.21.0",
"date": "2026-01-14T17:27:55Z"
},
{
"name": "metabase/metabase",
"version": "v0.58.x",
"date": "2026-01-14T17:14:42Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-v1.32.1-clean-old-fids-in-parallel.7",
"date": "2026-01-14T16:47:10Z"
},
{
"name": "alam00000/bentopdf",
"version": "v1.16.0",
"date": "2026-01-14T16:45:03Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v11.10.0",
"date": "2026-01-14T16:11:30Z"
},
{
"name": "Bubka/2FAuth",
"version": "v6.0.0",
"date": "2026-01-14T16:00:58Z"
},
{
"name": "esphome/esphome",
"version": "2025.12.6",
"date": "2026-01-13T16:55:47Z"
},
{
"name": "traefik/traefik",
"version": "v3.6.7",
"date": "2026-01-14T14:11:45Z"
},
{
"name": "tobychui/zoraxy",
"version": "v3.3.1-rc2",
"date": "2026-01-14T12:29:28Z"
"name": "semaphoreui/semaphore",
"version": "v2.17.0-rc3",
"date": "2026-01-15T21:30:26Z"
},
{
"name": "dgtlmoon/changedetection.io",
"version": "0.52.4",
"date": "2026-01-14T12:27:21Z"
"version": "0.52.6",
"date": "2026-01-15T21:29:48Z"
},
{
"name": "dedicatedcode/reitti",
"version": "v3.3.0",
"date": "2026-01-14T11:06:59Z"
"name": "azukaar/Cosmos-Server",
"version": "v0.20.0",
"date": "2026-01-15T20:59:44Z"
},
{
"name": "runtipi/runtipi",
"version": "v4.7.0-beta.1",
"date": "2026-01-15T20:00:44Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v2.3.0",
"date": "2026-01-15T19:29:02Z"
},
{
"name": "Comfy-Org/ComfyUI",
"version": "v0.9.2",
"date": "2026-01-15T17:55:40Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v11.10.1",
"date": "2026-01-15T15:58:06Z"
},
{
"name": "Dokploy/dokploy",
"version": "v0.26.5",
"date": "2026-01-15T15:32:35Z"
},
{
"name": "slskd/slskd",
"version": "0.24.3",
"date": "2026-01-15T14:40:15Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.50.0-rc3",
"date": "2026-01-15T13:57:37Z"
},
{
"name": "readeck/readeck",
"version": "0.21.6",
"date": "2026-01-15T11:18:58Z"
},
{
"name": "mattermost/mattermost",
"version": "v10.11.10",
"date": "2026-01-15T10:36:07Z"
},
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2026-01-15T09:49:28Z"
},
{
"name": "SigNoz/signoz",
"version": "v0.107.0",
"date": "2026-01-15T06:50:08Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.9.1",
"date": "2026-01-14T10:37:28Z"
},
{
"name": "fosrl/pangolin",
"version": "1.14.1-s.3",
"date": "2026-01-15T06:09:56Z"
},
{
"name": "Infisical/infisical",
"version": "v0.155.5",
"date": "2026-01-15T05:25:10Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.95.0-pre",
"date": "2026-01-14T22:24:18Z"
},
{
"name": "icereed/paperless-gpt",
"version": "v0.24.0",
"date": "2026-01-14T21:28:09Z"
},
{
"name": "NodeBB/NodeBB",
"version": "v4.8.0",
"date": "2026-01-14T17:54:36Z"
},
{
"name": "alam00000/bentopdf",
"version": "v1.16.0",
"date": "2026-01-14T16:45:03Z"
},
{
"name": "Bubka/2FAuth",
"version": "v6.0.0",
"date": "2026-01-14T16:00:58Z"
},
{
"name": "traefik/traefik",
"version": "v3.6.7",
"date": "2026-01-14T14:11:45Z"
},
{
"name": "neo4j/neo4j",
"version": "2025.12.1",
"date": "2026-01-14T13:33:15Z"
},
{
"name": "tobychui/zoraxy",
"version": "v3.3.1-rc2",
"date": "2026-01-14T12:29:28Z"
},
{
"name": "dedicatedcode/reitti",
"version": "v3.3.0",
"date": "2026-01-14T11:06:59Z"
},
{
"name": "cloudreve/cloudreve",
"version": "4.11.1",
"date": "2026-01-14T08:40:47Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.846",
"date": "2026-01-14T05:57:12Z"
},
{
"name": "Whisparr/Whisparr",
"version": "v3.1.0.2116",
"date": "2026-01-14T05:56:17Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.15",
"date": "2026-01-06T20:05:54Z"
},
{
"name": "NginxProxyManager/nginx-proxy-manager",
"version": "v2.13.6",
@@ -159,61 +389,21 @@
"version": "2.0.2",
"date": "2025-10-22T17:03:54Z"
},
{
"name": "jeedom/core",
"version": "4.5.2",
"date": "2026-01-14T00:27:06Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.1.0",
"date": "2025-11-23T12:13:34Z"
},
{
"name": "Infisical/infisical",
"version": "v0.155.4",
"date": "2026-01-14T00:04:13Z"
},
{
"name": "goauthentik/authentik",
"version": "version/2025.12.0",
"date": "2026-01-13T23:04:04Z"
},
{
"name": "Dispatcharr/Dispatcharr",
"version": "v0.17.0",
"date": "2026-01-13T22:51:49Z"
},
{
"name": "seerr-team/seerr",
"version": "preview-plex-4k-debug-logs",
"date": "2026-01-13T22:38:07Z"
},
{
"name": "C4illin/ConvertX",
"version": "v0.17.0",
"date": "2026-01-13T20:47:26Z"
},
{
"name": "pocketbase/pocketbase",
"version": "v0.35.1",
"date": "2026-01-10T09:23:24Z"
},
{
"name": "pterodactyl/wings",
"version": "v1.12.1",
"date": "2026-01-13T20:39:22Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.50.0-rc2",
"date": "2026-01-13T19:27:24Z"
},
{
"name": "azukaar/Cosmos-Server",
"version": "v0.19.1",
"date": "2026-01-12T20:20:08Z"
},
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.20.4",
@@ -234,11 +424,6 @@
"version": "v1.31.7",
"date": "2026-01-13T16:12:12Z"
},
{
"name": "semaphoreui/semaphore",
"version": "v2.17.0-rc2",
"date": "2026-01-13T12:08:49Z"
},
{
"name": "LimeSurvey/LimeSurvey",
"version": "6.16.3+251215",
@@ -254,16 +439,6 @@
"version": "jenkins-2.546",
"date": "2026-01-13T10:08:09Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.80.16-nightly",
"date": "2026-01-13T09:09:32Z"
},
{
"name": "Comfy-Org/ComfyUI",
"version": "v0.9.1",
"date": "2026-01-13T07:33:55Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.4.7",
@@ -309,16 +484,6 @@
"version": "v5.0.16",
"date": "2026-01-12T20:18:34Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v2.2.1",
"date": "2026-01-12T19:44:31Z"
},
{
"name": "coder/code-server",
"version": "v4.108.0",
"date": "2026-01-12T19:24:55Z"
},
{
"name": "release-argus/Argus",
"version": "0.29.2",
@@ -329,41 +494,11 @@
"version": "@jupyter-notebook/ui-components@7.6.0-alpha.1",
"date": "2026-01-12T17:53:14Z"
},
{
"name": "slskd/slskd",
"version": "0.24.2",
"date": "2026-01-12T15:46:08Z"
},
{
"name": "laurent22/joplin",
"version": "server-v3.5.2",
"date": "2025-12-19T21:28:55Z"
},
{
"name": "TuroYT/snowshare",
"version": "v1.2.8",
"date": "2026-01-12T12:12:05Z"
},
{
"name": "home-assistant/core",
"version": "2026.1.1",
"date": "2026-01-12T10:52:35Z"
},
{
"name": "TryGhost/Ghost-CLI",
"version": "v1.28.4",
"date": "2026-01-12T10:04:28Z"
},
{
"name": "bunkerity/bunkerweb",
"version": "v1.6.7",
"date": "2026-01-12T09:54:36Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.4",
"date": "2026-01-04T22:41:00Z"
},
{
"name": "rustdesk/rustdesk-server",
"version": "1.1.15",
@@ -449,16 +584,6 @@
"version": "v1.17.0",
"date": "2026-01-09T22:48:21Z"
},
{
"name": "runtipi/runtipi",
"version": "nightly",
"date": "2026-01-09T17:26:57Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.50.0",
"date": "2026-01-09T19:27:03Z"
},
{
"name": "dani-garcia/vaultwarden",
"version": "1.35.2",
@@ -484,21 +609,11 @@
"version": "@fumadocs/base-ui@16.4.6",
"date": "2026-01-09T10:54:11Z"
},
{
"name": "evcc-io/evcc",
"version": "0.300.3",
"date": "2026-01-09T10:40:48Z"
},
{
"name": "9001/copyparty",
"version": "v1.20.1",
"date": "2026-01-09T01:30:37Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "webmin/webmin",
"version": "2.620",
@@ -509,11 +624,6 @@
"version": "v26.1.1",
"date": "2026-01-08T22:02:15Z"
},
{
"name": "wazuh/wazuh",
"version": "v4.14.2-rc4",
"date": "2026-01-08T18:45:47Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.3.0",
@@ -544,21 +654,11 @@
"version": "6.2.11",
"date": "2026-01-08T12:15:04Z"
},
{
"name": "forgejo/forgejo",
"version": "v13.0.4",
"date": "2026-01-08T10:36:18Z"
},
{
"name": "requarks/wiki",
"version": "v2.5.311",
"date": "2026-01-08T09:50:00Z"
},
{
"name": "mattermost/mattermost",
"version": "v11.1.2",
"date": "2025-12-17T09:26:24Z"
},
{
"name": "seriousm4x/UpSnap",
"version": "5.2.7",
@@ -604,16 +704,6 @@
"version": "v6.0.4.10291",
"date": "2025-11-16T22:39:01Z"
},
{
"name": "SigNoz/signoz",
"version": "v0.106.0",
"date": "2026-01-07T08:50:09Z"
},
{
"name": "nickheyer/discopanel",
"version": "v1.0.20",
"date": "2026-01-07T07:48:21Z"
},
{
"name": "miniflux/v2",
"version": "2.2.16",
@@ -624,11 +714,6 @@
"version": "2.46.0",
"date": "2026-01-07T00:19:31Z"
},
{
"name": "outline/outline",
"version": "v1.2.0",
"date": "2026-01-06T23:02:46Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.5.0",
@@ -659,11 +744,6 @@
"version": "4.0.1-beta.1",
"date": "2024-12-13T00:16:24Z"
},
{
"name": "fosrl/pangolin",
"version": "1.14.1-s.2",
"date": "2026-01-06T02:46:38Z"
},
{
"name": "pterodactyl/panel",
"version": "v1.12.0",
@@ -684,11 +764,6 @@
"version": "v5.2.0",
"date": "2026-01-05T05:56:57Z"
},
{
"name": "Part-DB/Part-DB-server",
"version": "v2.4.0",
"date": "2026-01-04T21:10:51Z"
},
{
"name": "actualbudget/actual",
"version": "v26.1.0",
@@ -709,11 +784,6 @@
"version": "v3.9.2",
"date": "2026-01-02T19:40:09Z"
},
{
"name": "Dokploy/dokploy",
"version": "v0.26.3",
"date": "2026-01-02T17:06:30Z"
},
{
"name": "gotify/server",
"version": "v2.8.0",
@@ -734,16 +804,6 @@
"version": "2.2.2",
"date": "2025-12-31T16:53:34Z"
},
{
"name": "pommee/goaway",
"version": "v0.63.4",
"date": "2025-12-31T12:40:07Z"
},
{
"name": "coollabsio/coolify",
"version": "v4.0.0-beta.460",
"date": "2025-12-31T10:58:42Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.12.1",
@@ -884,16 +944,6 @@
"version": "v14.3.0",
"date": "2025-12-20T13:16:37Z"
},
{
"name": "pelican-dev/panel",
"version": "v1.0.0-beta30",
"date": "2025-12-19T23:37:07Z"
},
{
"name": "pelican-dev/wings",
"version": "v1.0.0-beta21",
"date": "2025-12-19T23:04:27Z"
},
{
"name": "qdrant/qdrant",
"version": "v1.16.3",
@@ -904,11 +954,6 @@
"version": "v2.4.1",
"date": "2025-12-19T15:50:12Z"
},
{
"name": "readeck/readeck",
"version": "0.21.5",
"date": "2025-12-19T11:51:05Z"
},
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.102",
@@ -924,11 +969,6 @@
"version": "v1.25.3",
"date": "2025-12-18T18:11:48Z"
},
{
"name": "neo4j/neo4j",
"version": "2025.11.2",
"date": "2025-12-18T17:08:34Z"
},
{
"name": "docker/compose",
"version": "v5.0.1",
@@ -949,11 +989,6 @@
"version": "v12.3.1",
"date": "2025-12-16T21:58:21Z"
},
{
"name": "inventree/InvenTree",
"version": "1.1.7",
"date": "2025-12-16T21:44:58Z"
},
{
"name": "opencloud-eu/opencloud",
"version": "v4.1.0",
@@ -1199,11 +1234,6 @@
"version": "2.3.6",
"date": "2025-11-24T19:40:27Z"
},
{
"name": "silverbulletmd/silverbullet",
"version": "2.3.0",
"date": "2025-11-24T09:48:32Z"
},
{
"name": "MariaDB/server",
"version": "mariadb-12.1.2",
@@ -1294,11 +1324,6 @@
"version": "2.11.1",
"date": "2025-11-08T14:27:27Z"
},
{
"name": "oauth2-proxy/oauth2-proxy",
"version": "v7.13.0",
"date": "2025-11-08T13:36:25Z"
},
{
"name": "cloudflare/cloudflared",
"version": "2025.11.1",
@@ -1324,41 +1349,21 @@
"version": "v4.4.1",
"date": "2025-11-05T09:08:23Z"
},
{
"name": "cross-seed/cross-seed",
"version": "v6.13.6",
"date": "2025-11-04T13:35:35Z"
},
{
"name": "clusterzx/paperless-ai",
"version": "v3.0.9",
"date": "2025-11-04T07:28:45Z"
},
{
"name": "wanetty/upgopher",
"version": "v1.12.0",
"date": "2025-11-01T14:32:38Z"
},
{
"name": "plankanban/planka",
"version": "planka-1.1.1",
"date": "2025-10-31T12:38:47Z"
},
{
"name": "garethgeorge/backrest",
"version": "v1.10.1",
"date": "2025-10-31T08:25:57Z"
},
{
"name": "sassanix/Warracker",
"version": "1.0.2",
"date": "2025-10-30T18:23:23Z"
},
{
"name": "LogicLabs-OU/OpenArchiver",
"version": "v0.4.0",
"date": "2025-10-30T16:35:23Z"
},
{
"name": "homebridge/homebridge",
"version": "v1.11.1",
@@ -1629,11 +1634,6 @@
"version": "v0.2.11",
"date": "2025-04-12T21:13:08Z"
},
{
"name": "wger-project/wger",
"version": "2.3",
"date": "2025-04-05T18:05:36Z"
},
{
"name": "louislam/dockge",
"version": "1.5.0",

View File

@@ -1,5 +1,5 @@
import { CalendarPlus } from "lucide-react";
import { useMemo, useState } from "react";
import { useEffect, useMemo } from "react";
import Image from "next/image";
import Link from "next/link";
@@ -26,9 +26,15 @@ export function getDisplayValueFromType(type: string) {
}
}
export function LatestScripts({ items }: { items: Category[] }) {
const [page, setPage] = useState(1);
export function LatestScripts({
items,
page,
onPageChange,
}: {
items: Category[];
page: number;
onPageChange: (page: number) => void;
}) {
const latestScripts = useMemo(() => {
if (!items)
return [];
@@ -48,12 +54,20 @@ export function LatestScripts({ items }: { items: Category[] }) {
);
}, [items]);
const totalPages = Math.max(1, Math.ceil(latestScripts.length / ITEMS_PER_PAGE));
useEffect(() => {
if (page > totalPages) {
onPageChange(totalPages);
}
}, [page, totalPages, onPageChange]);
const goToNextPage = () => {
setPage(prevPage => prevPage + 1);
onPageChange(Math.min(totalPages, page + 1));
};
const goToPreviousPage = () => {
setPage(prevPage => prevPage - 1);
onPageChange(Math.max(1, page - 1));
};
const startIndex = (page - 1) * ITEMS_PER_PAGE;

View File

@@ -18,6 +18,7 @@ function ScriptContent() {
const [selectedCategory, setSelectedCategory] = useQueryState("category");
const [links, setLinks] = useState<Category[]>([]);
const [item, setItem] = useState<Script>();
const [latestPage, setLatestPage] = useState(1);
useEffect(() => {
if (selectedScript && links.length > 0) {
@@ -50,14 +51,16 @@ function ScriptContent() {
/>
</div>
<div className="px-4 w-full sm:max-w-[calc(100%-350px-16px)]">
{selectedScript && item ? (
<ScriptItem item={item} setSelectedScript={setSelectedScript} />
) : (
<div className="flex w-full flex-col gap-5">
<LatestScripts items={links} />
<MostViewedScripts items={links} />
</div>
)}
{selectedScript && item
? (
<ScriptItem item={item} setSelectedScript={setSelectedScript} />
)
: (
<div className="flex w-full flex-col gap-5">
<LatestScripts items={links} page={latestPage} onPageChange={setLatestPage} />
<MostViewedScripts items={links} />
</div>
)}
</div>
</div>
</div>

View File

@@ -54,7 +54,7 @@ if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then
python3-dev
msg_ok "Installed additional dependencies for WGDashboard"
msg_info "Installing WGDashboard"
git clone -q https://github.com/donaldzou/WGDashboard.git /etc/wgdashboard
git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard
cd /etc/wgdashboard/src
chmod u+x wgd.sh
$STD ./wgd.sh install

View File

@@ -43,7 +43,7 @@ sed -i -e "s|^APP_ENV=.*|APP_ENV=production|" \
-e "s|^DB_USERNAME=.*|DB_USERNAME=$MARIADB_DB_USER|" \
-e "s|^DB_PASSWORD=.*|DB_PASSWORD=$MARIADB_DB_PASS|" \
-e "s|^DB_DATABASE=.*|DB_DATABASE=$MARIADB_DB_NAME|" .env
echo "0 0 * * * root /usr/bin/php /opt/domain-monitor/cron/check_domains.php" >>/etc/crontab
echo "0 0 * * * www-data /usr/bin/php /opt/domain-monitor/cron/check_domains.php" >>/etc/crontab
cat <<EOF >/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>

View File

@@ -0,0 +1,63 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: luismco
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/dullage/flatnotes
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes"
USE_UVX=YES setup_uv
setup_nodejs
msg_info "Installing Backend"
cd /opt/flatnotes
$STD /usr/local/bin/uvx migrate-to-uv
$STD /usr/local/bin/uv sync
mkdir /opt/flatnotes/data
msg_ok "Installed Backend"
msg_info "Installing Frontend"
cd /opt/flatnotes/client
$STD npm install
$STD npm run build
msg_ok "Installed Frontend"
msg_info "Creating Service"
cat <<EOF >/opt/flatnotes/.env
FLATNOTES_AUTH_TYPE='none'
FLATNOTES_PATH='/opt/flatnotes/data/'
#FLATNOTES_USERNAME='username'
#FLATNOTES_PASSWORD='password'
#FLATNOTES_SECRET_KEY='secret-key'
EOF
cat <<EOF >/etc/systemd/system/flatnotes.service
[Unit]
Description=Flatnotes
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/flatnotes
EnvironmentFile=/opt/flatnotes/.env
ExecStart=/opt/flatnotes/.venv/bin/python -m uvicorn main:app --app-dir server --host 0.0.0.0 --port 8080 --proxy-headers
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now flatnotes
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -18,31 +18,15 @@ $STD apt-get install -y zip
msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql
PG_DB_NAME="fluiddb" PG_DB_USER="fluiduser" setup_postgresql_db
NODE_VERSION="20" setup_nodejs
msg_info "Setting up Postgresql Database"
DB_NAME="fluiddb"
DB_USER="fluiduser"
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)"
NEXTAUTH_SECRET="$(openssl rand -base64 44 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH ENCRYPTED PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME to $DB_USER;"
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
{
echo "${APPLICATION} Credentials"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
echo "Database Name: $DB_NAME"
echo "NextAuth Secret: $NEXTAUTH_SECRET"
} >>~/$APPLICATION.creds
msg_ok "Set up Postgresql Database"
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
msg_info "Configuring ${APPLICATION}"
msg_info "Configuring fluid-calendar"
NEXTAUTH_SECRET="$(openssl rand -base64 44 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
echo "NextAuth Secret: $NEXTAUTH_SECRET" >>~/$APPLICATION.creds
cat <<EOF >/opt/fluid-calendar/.env
DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
DATABASE_URL="postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}"
# Change the URL below to your external URL
NEXTAUTH_URL="http://localhost:3000"
@@ -61,7 +45,7 @@ $STD npm install --legacy-peer-deps
$STD npm run prisma:generate
$STD npx prisma migrate deploy
$STD npm run build:os
msg_ok "Configuring ${APPLICATION}"
msg_ok "Configured fluid-calendar"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/fluid-calendar.service
@@ -72,6 +56,7 @@ After=network.target postgresql.service
[Service]
Restart=always
WorkingDirectory=/opt/fluid-calendar
EnvironmentFile=/opt/fluid-calendar/.env
ExecStart=/usr/bin/npm run start
[Install]

View File

@@ -13,22 +13,9 @@ setting_up_container
network_check
update_os
PHP_VERSION="8.2" PHP_MODULE="curl,xml,mbstring,intl,zip,pgsql,gmp" PHP_APACHE="YES" setup_php
PHP_VERSION="8.4" PHP_MODULE="curl,common,xml,mbstring,intl,zip,pgsql,gmp" PHP_APACHE="YES" setup_php
PG_VERSION="16" setup_postgresql
msg_info "Setting up PostgreSQL"
DB_NAME=freshrss
DB_USER=freshrss
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
{
echo "FreshRSS Credentials"
echo "FreshRSS Database User: $DB_USER"
echo "FreshRSS Database Password: $DB_PASS"
echo "FreshRSS Database Name: $DB_NAME"
} >>~/freshrss.creds
msg_ok "Set up PostgreSQL"
PG_DB_NAME="freshrss" PG_DB_USER="freshrss_usr" setup_postgresql_db
fetch_and_deploy_gh_release "freshrss" "FreshRSS/FreshRSS" "tarball"
@@ -65,7 +52,7 @@ cat <<EOF >/etc/apache2/sites-available/freshrss.conf
</VirtualHost>
EOF
$STD a2ensite freshrss
$STD a2enmod rewrite
$STD a2enmod rewrite deflate expires headers mime setenvif
$STD a2dissite 000-default.conf
$STD systemctl reload apache2
msg_ok "Created Service"

View File

@@ -112,7 +112,7 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
$STD apt-mark hold libigdgmm12
$STD popd
rm -rf "$tmp_dir"
dpkg -l | grep -m1 "intel-opencl-icd" | awk '{print $3}' >~/.intel_version
dpkg-query -W -f='${Version}\n' intel-opencl-icd >~/.intel_version
msg_ok "Installed OpenVINO dependencies"
fi

View File

@@ -1,48 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 tteck
# Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.iventoy.com/en/index.html
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
RELEASE=$(curl -fsSL https://api.github.com/repos/ventoy/pxe/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Installing iVentoy v${RELEASE}"
mkdir -p /opt/iventoy/{data,iso}
curl -fsSL "https://github.com/ventoy/PXE/releases/download/v${RELEASE}/iventoy-${RELEASE}-linux-free.tar.gz" -o "iventoy-${RELEASE}-linux-free.tar.gz"
tar -C /tmp -xzf iventoy*.tar.gz
mv /tmp/iventoy*/* /opt/iventoy/
rm -rf iventoy*.tar.gz
msg_ok "Installed iVentoy"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/iventoy.service
[Unit]
Description=iVentoy PXE Booter
Documentation=https://www.iventoy.com
Wants=network-online.target
[Service]
Type=forking
Environment=IVENTOY_API_ALL=1
Environment=IVENTOY_AUTO_RUN=1
Environment=LIBRARY_PATH=/opt/iventoy/lib/lin64
Environment=LD_LIBRARY_PATH=/opt/iventoy/lib/lin64
ExecStart=sh ./iventoy.sh -R start
WorkingDirectory=/opt/iventoy
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now iventoy
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -18,6 +18,8 @@ fetch_and_deploy_gh_release "jotty" "fccview/jotty" "tarball" "latest" "/opt/jot
msg_info "Installing ${APPLICATION}"
cd /opt/jotty
unset NODE_OPTIONS
export NODE_OPTIONS="--max-old-space-size=3072"
$STD yarn --frozen-lockfile
$STD yarn next telemetry disable
$STD yarn build
@@ -28,7 +30,7 @@ mkdir -p .next/standalone/.next
cp -r .next/static .next/standalone/.next/
mv .next/standalone /tmp/jotty_standalone
rm -rf * .next .git .gitignore .yarn
rm -rf ./* .next .git .gitignore .yarn
mv /tmp/jotty_standalone/* .
mv /tmp/jotty_standalone/.[!.]* . 2>/dev/null || true
rm -rf /tmp/jotty_standalone

View File

@@ -98,9 +98,16 @@ msg_ok "Configured PatchMon"
msg_info "Configuring Nginx"
cat <<EOF >/etc/nginx/sites-available/patchmon.conf
map \$http_x_forwarded_proto \$proxy_corrected_scheme {
default \$scheme; # Fallback to Nginx's actual connection scheme if no X-Forwarded-Proto header was set
https https; # If X-Forwarded-Proto is 'https', use 'https'
http http; # If X-Forwarded-Proto is 'http', use 'http'
}
server {
# Listen on both IPv4 and IPv6 (with all hostnames)
listen 80;
server_name $LOCAL_IP;
listen [::]:80;
# Security headers
add_header X-Frame-Options DENY always;
@@ -123,7 +130,7 @@ server {
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_set_header X-Forwarded-Proto \$proxy_corrected_scheme;
proxy_set_header X-Forwarded-Host \$host;
proxy_set_header Cookie \$http_cookie;
proxy_cache_bypass \$http_upgrade;
@@ -150,7 +157,7 @@ server {
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_set_header X-Forwarded-Proto \$proxy_corrected_scheme;
proxy_cache_bypass \$http_upgrade;
proxy_read_timeout 300s;
proxy_connect_timeout 75s;

View File

@@ -18,7 +18,7 @@ msg_info "Installing NUT"
$STD apt install -y nut-client
msg_ok "Installed NUT"
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
msg_info "Setup Peanut"
@@ -28,6 +28,7 @@ $STD pnpm run build:local
cp -r .next/static .next/standalone/.next/
mkdir -p /opt/peanut/.next/standalone/config
mkdir -p /etc/peanut/
ln -sf .next/standalone/server.js server.js
cat <<EOF >/etc/peanut/settings.yml
WEB_HOST: 0.0.0.0
WEB_PORT: 3000
@@ -53,7 +54,7 @@ Environment="NODE_ENV=production"
#Environment="WEB_HOST=0.0.0.0"
#Environment="WEB_PORT=3000"
WorkingDirectory=/opt/peanut
ExecStart=node /opt/peanut/.next/standalone/server.js
ExecStart=node /opt/peanut/entrypoint.mjs
TimeoutStopSec=30
[Install]
WantedBy=multi-user.target

View File

@@ -69,7 +69,7 @@ read -r -p "${TAB3}Would you like to add Unbound? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
read -r -p "${TAB3}Unbound is configured as a recursive DNS server by default, would you like it to be configured as a forwarding DNS server (using DNS-over-TLS (DoT)) instead? <y/N> " prompt
msg_info "Installing Unbound"
$STD apt install -y unbound
mkdir -p /etc/unbound/unbound.conf.d
cat <<EOF >/etc/unbound/unbound.conf.d/pi-hole.conf
server:
verbosity: 0
@@ -142,6 +142,7 @@ forward-zone:
#forward-addr: 2620:fe::9@853#dns.quad9.net
EOF
fi
$STD apt install -y unbound
cat <<EOF >/etc/dnsmasq.d/01-pihole.conf
server=127.0.0.1#5335
server=8.8.8.8
@@ -149,7 +150,7 @@ server=8.8.4.4
EOF
sed -i -E '/^\s*upstreams\s*=\s*\[/,/^\s*\]/c\ upstreams = [\n "127.0.0.1#5335",\n "8.8.4.4"\n ]' /etc/pihole/pihole.toml
systemctl enable -q --now unbound
systemctl restart unbound
systemctl restart pihole-FTL.service
msg_ok "Installed Unbound"
fi

42
install/qui-install.sh Normal file
View File

@@ -0,0 +1,42 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/autobrr/qui
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "qui" "autobrr/qui" "prebuild" "latest" "/usr/local/bin" "qui_*_linux_x86_64.tar.gz"
chmod +x /usr/local/bin/qui
ln -sf /usr/local/bin/qui /usr/bin/qui
ln -sf /usr/local/bin/qui /opt/qui
msg_info "Creating Qui Service"
cat <<EOF >/etc/systemd/system/qui.service
[Unit]
Description=Qui - qBittorrent Web UI
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/qui serve
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now qui
msg_ok "Created Qui Service"
motd_ssh
customize
cleanup_lxc

258
install/termix-install.sh Normal file
View File

@@ -0,0 +1,258 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Termix-SSH/Termix
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
build-essential \
python3 \
nginx \
openssl \
gettext-base
msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix"
msg_info "Building Frontend"
cd /opt/termix
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
find public/fonts -name "*.ttf" ! -name "*Regular.ttf" ! -name "*Bold.ttf" ! -name "*Italic.ttf" -delete 2>/dev/null || true
$STD npm install --ignore-scripts --force
$STD npm cache clean --force
$STD npm run build
msg_ok "Built Frontend"
msg_info "Building Backend"
$STD npm rebuild better-sqlite3 --force
$STD npm run build:backend
msg_ok "Built Backend"
msg_info "Setting up Node Dependencies"
cd /opt/termix
$STD npm ci --only=production --ignore-scripts --force
$STD npm rebuild better-sqlite3 bcryptjs --force
$STD npm cache clean --force
msg_ok "Set up Node Dependencies"
msg_info "Setting up Directories"
mkdir -p /opt/termix/data \
/opt/termix/uploads \
/opt/termix/html \
/opt/termix/nginx \
/opt/termix/nginx/logs \
/opt/termix/nginx/cache \
/opt/termix/nginx/client_body
cp -r /opt/termix/dist/* /opt/termix/html/ 2>/dev/null || true
cp -r /opt/termix/src/locales /opt/termix/html/locales 2>/dev/null || true
cp -r /opt/termix/public/fonts /opt/termix/html/fonts 2>/dev/null || true
msg_ok "Set up Directories"
msg_info "Configuring Nginx"
cat <<'EOF' >/etc/nginx/sites-available/termix.conf
error_log /opt/termix/nginx/logs/error.log warn;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /opt/termix/nginx/logs/access.log;
client_body_temp_path /opt/termix/nginx/client_body;
proxy_temp_path /opt/termix/nginx/proxy_temp;
sendfile on;
keepalive_timeout 65;
client_header_timeout 300s;
server {
listen 80;
server_name _;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
root /opt/termix/html;
expires 1y;
add_header Cache-Control "public, immutable";
try_files $uri =404;
}
location / {
root /opt/termix/html;
index index.html;
try_files $uri $uri/ /index.html;
}
location ~ ^/users(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ ^/(version|releases|alerts|rbac|credentials|snippets|terminal|encryption)(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ ^/(database|db)(/.*)?$ {
client_max_body_size 5G;
client_body_timeout 300s;
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_request_buffering off;
proxy_buffering off;
}
location /ssh/ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /ssh/websocket/ {
proxy_pass http://127.0.0.1:30002/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
proxy_buffering off;
proxy_request_buffering off;
}
location /ssh/tunnel/ {
proxy_pass http://127.0.0.1:30003;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /ssh/file_manager/ssh/ {
client_max_body_size 5G;
client_body_timeout 300s;
proxy_pass http://127.0.0.1:30004;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_request_buffering off;
proxy_buffering off;
}
location ~ ^/ssh/file_manager/(recent|pinned|shortcuts)$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /health {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
proxy_set_header Host $host;
}
location ~ ^/(status|metrics)(/.*)?$ {
proxy_pass http://127.0.0.1:30005;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location ~ ^/(uptime|activity)(/.*)?$ {
proxy_pass http://127.0.0.1:30006;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location ^~ /docker/console/ {
proxy_pass http://127.0.0.1:30008/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
proxy_buffering off;
proxy_request_buffering off;
}
location ~ ^/docker(/.*)?$ {
proxy_pass http://127.0.0.1:30007;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
}
}
EOF
rm -f /etc/nginx/sites-enabled/default
rm -f /etc/nginx/nginx.conf
ln -sf /etc/nginx/sites-available/termix.conf /etc/nginx/nginx.conf
systemctl reload nginx
msg_ok "Configured Nginx"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/termix.service
[Unit]
Description=Termix Backend
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/termix
Environment=NODE_ENV=production
Environment=DATA_DIR=/opt/termix/data
ExecStart=/usr/bin/node /opt/termix/dist/backend/backend/starter.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now termix
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -0,0 +1,51 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/thingsboard/thingsboard
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
libharfbuzz0b \
fontconfig \
fonts-dejavu-core
msg_ok "Installed Dependencies"
JAVA_VERSION="17" setup_java
PG_VERSION="16" setup_postgresql
PG_DB_NAME="thingsboard_db" PG_DB_USER="thingsboard" setup_postgresql_db
fetch_and_deploy_gh_release "thingsboard" "thingsboard/thingsboard" "binary" "latest" "/tmp" "thingsboard-*.deb"
msg_info "Configuring ThingsBoard"
cat <<EOF >/etc/thingsboard/conf/thingsboard.conf
# DB Configuration
export DATABASE_TS_TYPE=sql
export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/${PG_DB_NAME}
export SPRING_DATASOURCE_USERNAME=${PG_DB_USER}
export SPRING_DATASOURCE_PASSWORD=${PG_DB_PASS}
# Specify partitioning size for timestamp key-value storage. Allowed values: DAYS, MONTHS, YEARS, INDEFINITE.
export SQL_POSTGRES_TS_KV_PARTITIONING=MONTHS
EOF
systemctl daemon-reload
msg_ok "Configured ThingsBoard"
msg_info "Running ThingsBoard Installation Script"
$STD /usr/share/thingsboard/bin/install/install.sh --loadDemo
msg_ok "Ran Installation Script"
msg_info "Starting ThingsBoard Service"
systemctl enable -q --now thingsboard
msg_ok "Started ThingsBoard Service"
motd_ssh
customize
cleanup_lxc

75
install/trip-install.sh Normal file
View File

@@ -0,0 +1,75 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/itskovacs/TRIP
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
build-essential
msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs
PYTHON_VERSION="3.12" setup_uv
fetch_and_deploy_gh_release "trip" "itskovacs/TRIP" "tarball"
msg_info "Building Frontend"
cd /opt/trip/src
$STD npm install
$STD npm run build
msg_ok "Built Frontend"
msg_info "Setting up Backend"
cd /opt/trip/backend
$STD uv venv /opt/trip/.venv
$STD uv pip install --python /opt/trip/.venv/bin/python -r trip/requirements.txt
msg_ok "Set up Backend"
msg_info "Configuring Application"
mkdir -p /opt/trip/frontend
cp -r /opt/trip/src/dist/trip/browser/* /opt/trip/frontend/
mkdir -p /opt/trip_storage/{attachments,backups,assets}
cat <<EOF >/opt/trip.env
# TRIP Configuration
# https://itskovacs.github.io/trip/docs/getting-started/configuration/
ATTACHMENTS_FOLDER=/opt/trip_storage/attachments
BACKUPS_FOLDER=/opt/trip_storage/backups
ASSETS_FOLDER=/opt/trip_storage/assets
FRONTEND_FOLDER=/opt/trip/frontend
SQLITE_FILE=/opt/trip_storage/trip.sqlite
EOF
msg_ok "Configured Application"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/trip.service
[Unit]
Description=TRIP - Minimalist POI Map Tracker and Trip Planner
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/trip/backend
EnvironmentFile=/opt/trip.env
ExecStart=/opt/trip/.venv/bin/fastapi run /opt/trip/backend/trip/main.py --host 0.0.0.0 --port 8000
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now trip
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -14,11 +14,7 @@ network_check
update_os
msg_info "Installing Unbound"
$STD apt install -y \
unbound \
unbound-host
msg_info "Installed Unbound"
mkdir -p /etc/unbound/unbound.conf.d
cat <<EOF >/etc/unbound/unbound.conf.d/unbound.conf
server:
interface: 0.0.0.0
@@ -52,13 +48,17 @@ server:
logfile: /var/log/unbound.log
EOF
$STD apt install -y \
unbound \
unbound-host
touch /var/log/unbound.log
chown unbound:unbound /var/log/unbound.log
sleep 5
systemctl restart unbound
msg_ok "Installed Unbound"
msg_ok "Configuring Logrotate"
msg_info "Configuring Logrotate"
cat <<EOF >/etc/logrotate.d/unbound
/var/log/unbound.log {
daily
@@ -74,7 +74,6 @@ cat <<EOF >/etc/logrotate.d/unbound
endscript
}
EOF
systemctl restart logrotate
msg_ok "Configured Logrotate"

View File

@@ -0,0 +1,81 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://ui.com/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
if [[ "${CTTYPE:-1}" != "0" ]]; then
msg_error "UniFi OS Server requires a privileged LXC container."
msg_error "Recreate the container with unprivileged=0."
exit 1
fi
if [[ ! -e /dev/net/tun ]]; then
msg_error "Missing /dev/net/tun in container."
msg_error "Enable TUN/TAP (var_tun=yes) or add /dev/net/tun passthrough."
exit 1
fi
msg_info "Installing dependencies"
$STD apt install -y \
podman \
uidmap \
slirp4netns
msg_ok "Installed dependencies"
msg_info "Installing sysctl wrapper (ignore non-critical errors)"
cat <<'EOF' >/usr/local/sbin/sysctl
#!/bin/sh
/usr/sbin/sysctl "$@" || true
exit 0
EOF
chmod +x /usr/local/sbin/sysctl
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
msg_ok "Sysctl wrapper installed"
msg_info "Fetching latest UniFi OS Server"
API_URL="https://fw-update.ui.com/api/firmware-latest"
TEMP_JSON="$(mktemp)"
if ! curl -fsSL "$API_URL" -o "$TEMP_JSON"; then
rm -f "$TEMP_JSON"
msg_error "Failed to fetch data from Ubiquiti API"
exit 1
fi
LATEST=$(jq -r '
._embedded.firmware
| map(select(.product == "unifi-os-server"))
| map(select(.platform == "linux-x64"))
| sort_by(.version_major, .version_minor, .version_patch)
| last
' "$TEMP_JSON")
UOS_VERSION=$(echo "$LATEST" | jq -r '.version' | sed 's/^v//')
UOS_URL=$(echo "$LATEST" | jq -r '._links.data.href')
rm -f "$TEMP_JSON"
if [[ -z "$UOS_URL" || -z "$UOS_VERSION" || "$UOS_URL" == "null" ]]; then
msg_error "Failed to parse UniFi OS Server version or download URL"
exit 1
fi
msg_ok "Found UniFi OS Server ${UOS_VERSION}"
msg_info "Downloading UniFi OS Server installer"
mkdir -p /usr/local/sbin
curl -fsSL "$UOS_URL" -o /usr/local/sbin/unifi-os-server.bin
chmod +x /usr/local/sbin/unifi-os-server.bin
msg_ok "Downloaded UniFi OS Server installer"
msg_info "Installing UniFi OS Server (this takes a few minutes)"
$STD /usr/local/sbin/unifi-os-server.bin <<<"y"
msg_ok "UniFi OS Server installed"
motd_ssh
customize
cleanup_lxc

View File

@@ -25,7 +25,7 @@ msg_ok "Installed WireGuard"
read -r -p "${TAB3}Would you like to add WGDashboard? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
git clone -q https://github.com/donaldzou/WGDashboard.git /etc/wgdashboard
git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard
msg_info "Installing WGDashboard"
cd /etc/wgdashboard/src

View File

@@ -52,7 +52,7 @@ msg_ok "Installed Zammad"
msg_info "Setup Services"
cp /opt/zammad/contrib/nginx/zammad.conf /etc/nginx/sites-available/zammad.conf
sed -i "s/server_name localhost;/server_name $LOCAL_IP;/g" /etc/nginx/sites-available/zammad.conf
ln -s /etc/nginx/sites-available/zammad.conf /etc/nginx/sites-enabled/
ln -sf /etc/nginx/sites-available/zammad.conf /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
$STD systemctl reload nginx
msg_ok "Created Service"

View File

@@ -582,7 +582,22 @@ base_settings() {
CORE_COUNT="${final_cpu}"
RAM_SIZE="${final_ram}"
VERBOSE=${var_verbose:-"${1:-no}"}
PW=${var_pw:-""}
PW=""
if [[ -n "${var_pw:-}" ]]; then
local _pw_raw="${var_pw}"
case "$_pw_raw" in
--password\ *) _pw_raw="${_pw_raw#--password }" ;;
-password\ *) _pw_raw="${_pw_raw#-password }" ;;
esac
while [[ "$_pw_raw" == -* ]]; do
_pw_raw="${_pw_raw#-}"
done
if [[ -z "$_pw_raw" ]]; then
msg_warn "Password was only dashes after cleanup; leaving empty."
else
PW="--password $_pw_raw"
fi
fi
# Validate and set Container ID
local requested_id="${var_ctid:-$NEXTID}"
@@ -1392,17 +1407,30 @@ advanced_settings() {
((STEP++))
elif [[ "$PW1" == *" "* ]]; then
whiptail --msgbox "Password cannot contain spaces." 8 58
elif ((${#PW1} < 5)); then
whiptail --msgbox "Password must be at least 5 characters." 8 58
else
local _pw1_clean="$PW1"
while [[ "$_pw1_clean" == -* ]]; do
_pw1_clean="${_pw1_clean#-}"
done
if [[ -z "$_pw1_clean" ]]; then
whiptail --msgbox "Password cannot be only '-' characters." 8 58
continue
elif ((${#_pw1_clean} < 5)); then
whiptail --msgbox "Password must be at least 5 characters (after removing leading '-')." 8 70
continue
fi
# Verify password
if PW2=$(whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
--title "PASSWORD VERIFICATION" \
--ok-button "Confirm" --cancel-button "Back" \
--passwordbox "\nVerify Root Password" 10 58 \
3>&1 1>&2 2>&3); then
if [[ "$PW1" == "$PW2" ]]; then
_pw="-password $PW1"
local _pw2_clean="$PW2"
while [[ "$_pw2_clean" == -* ]]; do
_pw2_clean="${_pw2_clean#-}"
done
if [[ "$_pw1_clean" == "$_pw2_clean" ]]; then
_pw="--password $_pw1_clean"
_pw_display="********"
((STEP++))
else

View File

@@ -2683,7 +2683,7 @@ function setup_hwaccel() {
else
# Multiple GPUs - show selection menu
echo ""
msg_info "Multiple GPUs detected:"
msg_custom "⚠" "${YW}" "Multiple GPUs detected:"
echo ""
for i in "${!GPU_LIST[@]}"; do
local type_display="${GPU_TYPES[$i]}"
@@ -3039,16 +3039,36 @@ _setup_nvidia_gpu() {
if [[ "$os_codename" == "trixie" || "$os_codename" == "sid" ]]; then
msg_info "Debian ${os_codename}: Using Debian's NVIDIA packages"
# Try version-matched from Debian repos first
local nvidia_pkgs="libcuda1=${nvidia_host_version}* libnvcuvid1=${nvidia_host_version}* libnvidia-encode1=${nvidia_host_version}* libnvidia-ml1=${nvidia_host_version}*"
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
msg_ok "Installed version-matched NVIDIA libraries from Debian"
else
# Fallback to unversioned (whatever Debian provides)
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null; then
msg_ok "Installed NVIDIA libraries from Debian (version may differ from host)"
# Extract major version for flexible matching (580.126.09 -> 580)
local nvidia_major_version="${nvidia_host_version%%.*}"
# Check what versions are actually available
local available_version=""
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | grep -E "^${nvidia_major_version}\." | head -1 || true)
if [[ -n "$available_version" ]]; then
msg_info "Found available NVIDIA version: ${available_version}"
local nvidia_pkgs="libcuda1=${available_version} libnvcuvid1=${available_version} libnvidia-encode1=${available_version} libnvidia-ml1=${available_version}"
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
msg_ok "Installed NVIDIA libraries (${available_version})"
else
msg_warn "NVIDIA library installation failed - GPU compute may not work"
msg_warn "Failed to install NVIDIA ${available_version} - trying unversioned"
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null || true
fi
else
# No matching major version - try latest available or unversioned
msg_warn "No NVIDIA packages for version ${nvidia_major_version}.x found in repos"
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | head -1 || true)
if [[ -n "$available_version" ]]; then
msg_info "Trying latest available: ${available_version} (may cause version mismatch)"
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends \
libcuda1="${available_version}" libnvcuvid1="${available_version}" \
libnvidia-encode1="${available_version}" libnvidia-ml1="${available_version}" 2>/dev/null ||
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends \
libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null ||
msg_warn "NVIDIA library installation failed - GPU compute may not work"
else
msg_warn "No NVIDIA packages available in Debian repos - GPU support disabled"
fi
fi
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends nvidia-smi 2>/dev/null || true
@@ -3083,18 +3103,39 @@ NVIDIA_PIN
$STD apt-get -y update 2>/dev/null || msg_warn "apt update failed - continuing anyway"
# Install version-matched NVIDIA libraries
local nvidia_pkgs="libcuda1=${nvidia_host_version}* libnvcuvid1=${nvidia_host_version}* libnvidia-encode1=${nvidia_host_version}* libnvidia-ml1=${nvidia_host_version}*"
# Extract major version for flexible matching (580.126.09 -> 580)
local nvidia_major_version="${nvidia_host_version%%.*}"
msg_info "Installing NVIDIA libraries (version ${nvidia_host_version})"
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
msg_ok "Installed version-matched NVIDIA libraries"
else
msg_warn "Version-pinned install failed - trying unpinned"
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null; then
msg_ok "Installed NVIDIA libraries (unpinned) - version mismatch may occur"
# Check what versions are actually available in CUDA repo
local available_version=""
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | grep -E "^${nvidia_major_version}\." | head -1 || true)
if [[ -n "$available_version" ]]; then
msg_info "Installing NVIDIA libraries (version ${available_version})"
local nvidia_pkgs="libcuda1=${available_version} libnvcuvid1=${available_version} libnvidia-encode1=${available_version} libnvidia-ml1=${available_version}"
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
msg_ok "Installed version-matched NVIDIA libraries"
else
msg_warn "NVIDIA library installation failed"
msg_warn "Version-pinned install failed - trying unpinned"
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null ||
msg_warn "NVIDIA library installation failed"
fi
else
msg_warn "No NVIDIA packages for version ${nvidia_major_version}.x in CUDA repo (host: ${nvidia_host_version})"
# Try latest available version
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | head -1 || true)
if [[ -n "$available_version" ]]; then
msg_info "Trying latest available: ${available_version} (version mismatch warning)"
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends \
libcuda1="${available_version}" libnvcuvid1="${available_version}" \
libnvidia-encode1="${available_version}" libnvidia-ml1="${available_version}" 2>/dev/null; then
msg_ok "Installed NVIDIA libraries (${available_version}) - version differs from host"
else
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null ||
msg_warn "NVIDIA library installation failed"
fi
else
msg_warn "No NVIDIA packages available in CUDA repo - GPU support disabled"
fi
fi
@@ -3125,11 +3166,24 @@ NVIDIA_PIN
$STD apt-get -y update 2>/dev/null || msg_warn "apt update failed - continuing anyway"
# Try version-matched install
local nvidia_pkgs="libcuda1=${nvidia_host_version}* libnvcuvid1=${nvidia_host_version}* libnvidia-encode1=${nvidia_host_version}* libnvidia-ml1=${nvidia_host_version}*"
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
msg_ok "Installed version-matched NVIDIA libraries"
# Extract major version for flexible matching
local nvidia_major_version="${nvidia_host_version%%.*}"
# Check what versions are available
local available_version=""
available_version=$(apt-cache madison libcuda1 2>/dev/null | awk '{print $3}' | grep -E "^${nvidia_major_version}\." | head -1 || true)
if [[ -n "$available_version" ]]; then
msg_info "Installing NVIDIA libraries (version ${available_version})"
local nvidia_pkgs="libcuda1=${available_version} libnvcuvid1=${available_version} libnvidia-encode1=${available_version} libnvidia-ml1=${available_version}"
if $STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
msg_ok "Installed version-matched NVIDIA libraries"
else
# Fallback to Ubuntu repo packages
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libnvidia-decode libnvidia-encode nvidia-utils 2>/dev/null || msg_warn "NVIDIA installation failed"
fi
else
msg_warn "No NVIDIA packages for version ${nvidia_major_version}.x in CUDA repo"
# Fallback to Ubuntu repo packages
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends libnvidia-decode libnvidia-encode nvidia-utils 2>/dev/null || msg_warn "NVIDIA installation failed"
fi