Compare commits

...

88 Commits

Author SHA1 Message Date
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
community-scripts-pr-app[bot]
d4892d299f Update CHANGELOG.md (#10823)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-15 00:14:44 +00:00
community-scripts-pr-app[bot]
c6b01a62f0 Update versions.json (#10822)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-15 01:14:24 +01:00
community-scripts-pr-app[bot]
c41c78a0b2 Update CHANGELOG.md (#10819)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-14 17:04:48 +00:00
CanbiZ (MickLesk)
bdfd72e311 Switch Ollama install to .tar.zst and add zstd dependency (#10814) 2026-01-14 18:04:13 +01:00
community-scripts-pr-app[bot]
fa1f2784f9 Update .app files (#10817)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-14 18:01:11 +01:00
community-scripts-pr-app[bot]
b3b4d170b3 Update CHANGELOG.md (#10818)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-14 16:56:48 +00:00
community-scripts-pr-app[bot]
5e8c0d621b Update CHANGELOG.md (#10816)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-14 16:56:20 +00:00
community-scripts-pr-app[bot]
64bd501ed9 Update date in json (#10815)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-14 16:56:16 +00:00
push-app-to-main[bot]
95ad02c9ef Kutt (#10812)
* Add kutt (ct)

* Fix success message formatting in kutt.sh

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-01-14 17:55:51 +01:00
community-scripts-pr-app[bot]
13decbf3a1 Update CHANGELOG.md (#10811)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-14 16:11:22 +00:00
Chris
c178058315 Install libde265-dev from Testing; refactor install check logic in update (#10810) 2026-01-14 17:10:58 +01:00
CanbiZ
1980e3c47f Usenoninteractive mode for NVIDIA setup
Replaces all apt commands with apt-get for consistency and adds noninteractive environment variables to prevent interactive dialogs during NVIDIA GPU driver installation. Also adds --force-confold to preserve existing config files and ensures smoother automated installs.
2026-01-14 15:51:00 +01:00
community-scripts-pr-app[bot]
b876001ffa Update CHANGELOG.md (#10809)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-14 13:40:21 +00:00
CanbiZ (MickLesk)
ce5ab97737 Improve NVIDIA GPU setup (5000x Series) (#10807) 2026-01-14 14:39:53 +01:00
community-scripts-pr-app[bot]
2aabd0c911 Update versions.json (#10808)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-14 13:07:20 +01:00
community-scripts-pr-app[bot]
5fb3ce7b33 Update CHANGELOG.md (#10803)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-14 09:09:05 +00:00
Bram
bf648203f0 Add search filtering to CommandDialog for improved script search functionality (#10800) 2026-01-14 10:08:44 +01:00
community-scripts-pr-app[bot]
277d1ed5a2 Update CHANGELOG.md (#10801)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-14 09:01:00 +00:00
durzo
97bd4833fd nginxproxymanager: allow updates now the build is fixed (#10796)
* nginxproxymanager: allow updates now the build is fixed

* fix func

* Change release version to 'latest' for deployment

* Update release version fetching for nginxproxymanager

* Update fetch_and_deploy_gh_release to use latest version

---------

Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-01-14 10:00:32 +01:00
community-scripts-pr-app[bot]
2bc50833d6 Update CHANGELOG.md (#10799)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-14 08:45:43 +00:00
Benjamin Horvat
ff74fdff38 Fixed Apache Guacamole installer (#10798) 2026-01-14 09:45:21 +01:00
community-scripts-pr-app[bot]
dcfeaefad1 Update CHANGELOG.md (#10795)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-14 06:23:30 +00:00
Comk22
40933df6f7 Fix whiptail dialog hanging in Proxmox web console (#10794) 2026-01-14 07:22:21 +01:00
community-scripts-pr-app[bot]
556e6a71f2 Update CHANGELOG.md (#10792)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-14 00:16:11 +00:00
community-scripts-pr-app[bot]
7df7a9741a Update versions.json (#10791)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-14 01:15:45 +01:00
community-scripts-pr-app[bot]
749cde5bab Update CHANGELOG.md (#10790)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-13 20:17:58 +00:00
Chris
a990d39812 Fix intel version check; install legacy packages (#10787) 2026-01-13 21:17:26 +01:00
community-scripts-pr-app[bot]
8551ad33f3 Update CHANGELOG.md (#10789)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-13 20:17:00 +00:00
Michel Roegl-Brunner
fb1d508182 Remove default VLAN for LAN (#10782) 2026-01-13 21:16:36 +01:00
Michel Roegl-Brunner
648829f51e update_lxcs.sh: Add the option to skip stopped LXC (#10783)
* Add the option to skip stopped LXC

* Fix issue where a script aborts when /usr/lib/python3.*/EXTERNALLY-MANAGED is not there
2026-01-13 21:16:12 +01:00
community-scripts-pr-app[bot]
12a3b4ecd2 Update .app files (#10786)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-13 20:05:15 +01:00
MickLesk
6e420c311b fix typo 2026-01-13 20:03:49 +01:00
community-scripts-pr-app[bot]
7da60f5ec0 Update versions.json (#10780)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-13 13:06:23 +01:00
community-scripts-pr-app[bot]
92380e9155 Update .app files (#10778)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-13 10:56:30 +01:00
community-scripts-pr-app[bot]
9d0c4f8a16 Update CHANGELOG.md (#10779)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-13 09:47:05 +00:00
community-scripts-pr-app[bot]
a09121bc49 Update CHANGELOG.md (#10777)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-13 09:46:45 +00:00
community-scripts-pr-app[bot]
e549378eb1 Update date in json (#10776)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-13 09:46:42 +00:00
push-app-to-main[bot]
186c0f6d09 Investbrain (#10774)
* Add investbrain (ct)

* Fix success message capitalization

* Fix installation script message and import local IP

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-01-13 10:46:23 +01:00
community-scripts-pr-app[bot]
7794b49a43 Update CHANGELOG.md (#10775)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-13 09:44:06 +00:00
Slaviša Arežina
002c6624f7 Refactor: Joplin Server (#10769) 2026-01-13 10:43:44 +01:00
community-scripts-pr-app[bot]
5044024a19 Update .app files (#10772)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-13 08:55:50 +01:00
community-scripts-pr-app[bot]
d8fc9e5c85 Update CHANGELOG.md (#10773)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-13 07:54:25 +00:00
community-scripts-pr-app[bot]
033688ab7d Update CHANGELOG.md (#10771)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-13 07:54:03 +00:00
community-scripts-pr-app[bot]
faaebca358 Update date in json (#10770)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-01-13 07:53:59 +00:00
push-app-to-main[bot]
9984ab9d07 Fladder (#10768) 2026-01-13 08:53:37 +01:00
community-scripts-pr-app[bot]
8f1b2b9ad2 Update CHANGELOG.md (#10767)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-13 07:10:27 +00:00
Slaviša Arežina
42a2739db6 Backrest: Bump to Trixie (#10758)
* Bump to trixie

* Update
2026-01-13 08:10:06 +01:00
community-scripts-pr-app[bot]
62ed362fbf Update CHANGELOG.md (#10766)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-13 07:10:01 +00:00
Slaviša Arežina
7c3d9d231a Refactor (#10759) 2026-01-13 08:09:39 +01:00
community-scripts-pr-app[bot]
8d53604ae3 Update CHANGELOG.md (#10765)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-13 07:05:19 +00:00
Slaviša Arežina
225eae4b27 Refactor (#10760) 2026-01-13 08:04:59 +01:00
community-scripts-pr-app[bot]
462e75e8f3 Update CHANGELOG.md (#10764)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-13 06:54:06 +00:00
Copilot
10024723b6 Fix Zammad nginx configuration causing installation failure (#10757)
* Initial plan

* Fix nginx configuration setup in zammad-install.sh

Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com>
2026-01-13 07:53:43 +01:00
65 changed files with 1933 additions and 606 deletions

View File

@@ -10,8 +10,102 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2026-01-17
## 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
- Kutt ([#10812](https://github.com/community-scripts/ProxmoxVE/pull/10812))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Switch Ollama install to .tar.zst and add zstd dependency [@MickLesk](https://github.com/MickLesk) ([#10814](https://github.com/community-scripts/ProxmoxVE/pull/10814))
- Immich: Install libde265-dev from Debian Testing [@vhsdream](https://github.com/vhsdream) ([#10810](https://github.com/community-scripts/ProxmoxVE/pull/10810))
- nginxproxymanager: allow updates now the build is fixed [@durzo](https://github.com/durzo) ([#10796](https://github.com/community-scripts/ProxmoxVE/pull/10796))
- Fixed Apache Guacamole installer [@horvatbenjamin](https://github.com/horvatbenjamin) ([#10798](https://github.com/community-scripts/ProxmoxVE/pull/10798))
### 💾 Core
- #### ✨ New Features
- core: Improve NVIDIA GPU setup (5000x Series) [@MickLesk](https://github.com/MickLesk) ([#10807](https://github.com/community-scripts/ProxmoxVE/pull/10807))
### 🧰 Tools
- Fix whiptail dialog hanging in Proxmox web console [@comk22](https://github.com/comk22) ([#10794](https://github.com/community-scripts/ProxmoxVE/pull/10794))
### 🌐 Website
- #### 🐞 Bug Fixes
- Add search filtering to CommandDialog for improved script search functionality [@BramSuurdje](https://github.com/BramSuurdje) ([#10800](https://github.com/community-scripts/ProxmoxVE/pull/10800))
## 2026-01-13
### 🆕 New Scripts
- Investbrain ([#10774](https://github.com/community-scripts/ProxmoxVE/pull/10774))
- Fladder ([#10768](https://github.com/community-scripts/ProxmoxVE/pull/10768))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: Fix Intel version check; install legacy Intel packages during new install [@vhsdream](https://github.com/vhsdream) ([#10787](https://github.com/community-scripts/ProxmoxVE/pull/10787))
- Openwrt: Remove default VLAN for LAN [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#10782](https://github.com/community-scripts/ProxmoxVE/pull/10782))
- Refactor: Joplin Server [@tremor021](https://github.com/tremor021) ([#10769](https://github.com/community-scripts/ProxmoxVE/pull/10769))
- Fix Zammad nginx configuration causing installation failure [@Copilot](https://github.com/Copilot) ([#10757](https://github.com/community-scripts/ProxmoxVE/pull/10757))
- #### 🔧 Refactor
- Backrest: Bump to Trixie [@tremor021](https://github.com/tremor021) ([#10758](https://github.com/community-scripts/ProxmoxVE/pull/10758))
- Refactor: Caddy [@tremor021](https://github.com/tremor021) ([#10759](https://github.com/community-scripts/ProxmoxVE/pull/10759))
- Refactor: Leantime [@tremor021](https://github.com/tremor021) ([#10760](https://github.com/community-scripts/ProxmoxVE/pull/10760))
### 🧰 Tools
- #### 🐞 Bug Fixes
- update_lxcs.sh: Add the option to skip stopped LXC [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#10783](https://github.com/community-scripts/ProxmoxVE/pull/10783))
## 2026-01-12
### 🆕 New Scripts

View File

@@ -5,7 +5,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://couchdb.apache.org/
APP="Apache CouchDB"
APP="Apache-CouchDB"
var_tags="${var_tags:-database}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
@@ -29,21 +29,19 @@ function update_script() {
fi
msg_info "Updating Caddy LXC"
$STD apt-get update
$STD apt-get -y upgrade
$STD apt update
$STD apt upgrade -y
msg_ok "Updated Caddy LXC"
if command -v xcaddy >/dev/null 2>&1; then
setup_go
msg_info "Updating xCaddy"
cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
VERSION="${RELEASE#v}"
curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${VERSION}_linux_amd64.deb" -o "xcaddy_${VERSION}_linux_amd64.deb"
$STD dpkg -i "xcaddy_${VERSION}_linux_amd64.deb"
rm -f "xcaddy_${VERSION}_linux_amd64.deb"
$STD xcaddy build
msg_ok "Updated xCaddy"
if check_for_gh_release "xcaddy" "caddyserver/xcaddy"; then
setup_go
fetch_and_deploy_gh_release "xcaddy" "caddyserver/xcaddy" "binary"
msg_info "Updating xCaddy"
$STD xcaddy build
msg_ok "Updated xCaddy"
fi
fi
msg_ok "Updated successfully!"
exit

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

68
ct/fladder.sh Normal file
View File

@@ -0,0 +1,68 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: wendyliga
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/DonutWare/Fladder
APP="Fladder"
var_tags="${var_tags:-media}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
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/fladder ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "Fladder" "DonutWare/Fladder"; then
msg_info "Stopping Service"
systemctl stop nginx
msg_ok "Stopped Service"
if [[ -f /opt/fladder/assets/config/config.json ]]; then
msg_info "Backing up configuration"
cp /opt/fladder/assets/config/config.json /tmp/fladder_config.json.bak
msg_ok "Configuration backed up"
fi
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Fladder" "DonutWare/Fladder" "prebuild" "latest" "/opt/fladder" "Fladder-Web-*.zip"
if [[ -f /tmp/fladder_config.json.bak ]]; then
msg_info "Restoring configuration"
mkdir -p /opt/fladder/assets/config
cp /tmp/fladder_config.json.bak /opt/fladder/assets/config/config.json
rm -f /tmp/fladder_config.json.bak
msg_ok "Configuration restored"
fi
msg_info "Starting Service"
systemctl start nginx
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 IP:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

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

@@ -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

View File

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

6
ct/headers/fladder Normal file
View File

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

6
ct/headers/flatnotes Normal file
View File

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

6
ct/headers/investbrain Normal file
View File

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

6
ct/headers/kutt Normal file
View File

@@ -0,0 +1,6 @@
__ __ __ __
/ //_/_ __/ /_/ /_
/ ,< / / / / __/ __/
/ /| / /_/ / /_/ /_
/_/ |_\__,_/\__/\__/

6
ct/headers/qui Normal file
View File

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

View File

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

View File

@@ -57,9 +57,12 @@ EOF
fi
$STD apt update
msg_ok "Added Debian Testing repo"
msg_info "Installing libmimalloc3"
$STD apt install -t testing --no-install-recommends libmimalloc3
msg_ok "Installed libmimalloc3"
fi
if ! dpkg -l "libmimalloc3" | grep -q '3.1' || ! dpkg -l "libde265-dev" | grep -q '1.0.16'; then
msg_info "Installing/upgrading Testing repo packages"
$STD apt install -t testing libmimalloc3 libde265-dev -y
msg_ok "Installed/upgraded Testing repo packages"
fi
if [[ ! -f /etc/apt/sources.list.d/mise.list ]]; then
@@ -93,6 +96,7 @@ EOF
$STD apt install -y ./*.deb
rm ./*.deb
$STD apt-mark hold libigdgmm12
dpkg-query -W -f='${Version}\n' intel-opencl-icd >~/.intel_version
msg_ok "Intel iGPU dependencies updated"
fi
rm ./Dockerfile

90
ct/investbrain.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: Benito Rodríguez (b3ni)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/investbrainapp/investbrain
APP="Investbrain"
var_tags="${var_tags:-finance;portfolio;investing}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
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/investbrain ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "Investbrain" "investbrainapp/investbrain"; then
PHP_VERSION="8.4"
msg_info "Stopping Services"
systemctl stop nginx php${PHP_VERSION}-fpm
$STD supervisorctl stop all
msg_ok "Services Stopped"
setup_composer
NODE_VERSION="22" setup_nodejs
PG_VERSION="17" setup_postgresql
msg_info "Creating Backup"
rm -f /opt/.env.backup
rm -rf /opt/investbrain_backup
cp /opt/investbrain/.env /opt/.env.backup
cp -r /opt/investbrain/storage /opt/investbrain_backup
msg_ok "Created Backup"
fetch_and_deploy_gh_release "Investbrain" "investbrainapp/investbrain" "tarball" "latest" "/opt/investbrain"
msg_info "Updating Investbrain"
cd /opt/investbrain
rm -rf /opt/investbrain/storage
cp /opt/.env.backup /opt/investbrain/.env
cp -r /opt/investbrain_backup/ /opt/investbrain/storage
export COMPOSER_ALLOW_SUPERUSER=1
$STD /usr/local/bin/composer install --no-interaction --no-dev --optimize-autoloader
$STD npm install
$STD npm run build
$STD php artisan storage:link
$STD php artisan migrate --force
$STD php artisan cache:clear
$STD php artisan view:clear
$STD php artisan route:clear
$STD php artisan event:clear
$STD php artisan route:cache
$STD php artisan event:cache
chown -R www-data:www-data /opt/investbrain
chmod -R 775 /opt/investbrain/storage /opt/investbrain/bootstrap/cache
rm -rf /opt/.env.backup /opt/investbrain_backup
msg_ok "Updated Investbrain"
msg_info "Starting Services"
systemctl start php${PHP_VERSION}-fpm nginx
$STD supervisorctl start all
msg_ok "Services Started"
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

@@ -35,10 +35,12 @@ function update_script() {
systemctl stop joplin-server
msg_ok "Stopped Services"
fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball" "latest"
cp /opt/joplin-server/.env /opt
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball"
mv /opt/.env /opt/joplin-server
msg_info "Updating Joplin-Server"
cd /opt/joplin-server
cd /opt/joplin-server
sed -i "/onenote-converter/d" packages/lib/package.json
$STD yarn config set --home enableTelemetry 0
export BUILD_SEQUENCIAL=1

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

74
ct/kutt.sh Normal file
View File

@@ -0,0 +1,74 @@
#!/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: tomfrenzel
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/thedevs-network/kutt
APP="Kutt"
var_tags="${var_tags:-sharing}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-2}"
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/kutt ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "kutt" "thedevs-network/kutt"; then
msg_info "Stopping services"
systemctl stop kutt
msg_ok "Stopped services"
msg_info "Backing up data"
mkdir -p /opt/kutt-backup
[ -d /opt/kutt/custom ] && cp -r /opt/kutt/custom /opt/kutt-backup/
[ -d /opt/kutt/db ] && cp -r /opt/kutt/db /opt/kutt-backup/
cp /opt/kutt/.env /opt/kutt-backup/
msg_ok "Backed up data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kutt" "thedevs-network/kutt" "tarball" "latest"
msg_info "Restoring data"
[ -d /opt/kutt-backup/custom ] && cp -r /opt/kutt-backup/custom /opt/kutt/
[ -d /opt/kutt-backup/db ] && cp -r /opt/kutt-backup/db /opt/kutt/
[ -f /opt/kutt-backup/.env ] && cp /opt/kutt-backup/.env /opt/kutt/
rm -rf /opt/kutt-backup
msg_ok "Restored data"
msg_info "Configuring Kutt"
cd /opt/kutt
$STD npm install
$STD npm run migrate
msg_ok "Configured Kutt"
msg_info "Starting services"
systemctl start kutt
msg_ok "Started services"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}https://${IP} or https://<your-Kutt-domain>${CL}"

View File

@@ -49,11 +49,10 @@ function update_script() {
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
#RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
#grep "tag_name" |
#awk '{print substr($2, 3, length($2)-4) }')
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
grep "tag_name" |
awk '{print substr($2, 3, length($2)-4) }')
RELEASE="2.13.5"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager" "tarball" "v${RELEASE}" "/opt/nginxproxymanager"
msg_info "Stopping Services"

View File

@@ -32,17 +32,22 @@ function update_script() {
if [[ ! -f /opt/Ollama_version.txt ]]; then
touch /opt/Ollama_version.txt
fi
if ! command -v zstd &>/dev/null; then
msg_info "Installing zstd"
$STD apt install -y zstd
msg_ok "Installed zstd"
fi
msg_info "Stopping Services"
systemctl stop ollama
msg_ok "Services Stopped"
TMP_TAR=$(mktemp --suffix=.tgz)
curl -fL# -C - -o "${TMP_TAR}" "https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tgz"
TMP_TAR=$(mktemp --suffix=.tar.zst)
curl -fL# -C - -o "${TMP_TAR}" "https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tar.zst"
msg_info "Updating Ollama to ${RELEASE}"
rm -rf /usr/local/lib/ollama
rm -rf /usr/local/bin/ollama
mkdir -p /usr/local/lib/ollama
tar -xzf "${TMP_TAR}" -C /usr/local/lib/ollama
tar --zstd -xf "${TMP_TAR}" -C /usr/local/lib/ollama
ln -sf /usr/local/lib/ollama/bin/ollama /usr/local/bin/ollama
rm -f "${TMP_TAR}"
echo "${RELEASE}" >/opt/Ollama_version.txt

View File

@@ -92,12 +92,17 @@ EOF
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
if ! command -v zstd &>/dev/null; then
msg_info "Installing zstd"
$STD apt install -y zstd
msg_ok "Installed zstd"
fi
msg_info "Ollama update available: v$OLLAMA_VERSION -> v$RELEASE"
msg_info "Downloading Ollama v$RELEASE \n"
curl -fS#LO https://ollama.com/download/ollama-linux-amd64.tgz
curl -fS#LO https://github.com/ollama/ollama/releases/download/v${RELEASE}/ollama-linux-amd64.tar.zst
msg_ok "Download Complete"
if [ -f "ollama-linux-amd64.tgz" ]; then
if [ -f "ollama-linux-amd64.tar.zst" ]; then
msg_info "Stopping Ollama Service"
systemctl stop ollama
@@ -106,8 +111,8 @@ EOF
msg_info "Installing Ollama"
rm -rf /usr/lib/ollama
rm -rf /usr/bin/ollama
tar -C /usr -xzf ollama-linux-amd64.tgz
rm -rf ollama-linux-amd64.tgz
tar --zstd -C /usr -xf ollama-linux-amd64.tar.zst
rm -rf ollama-linux-amd64.tar.zst
msg_ok "Installed Ollama"
msg_info "Starting Ollama Service"

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}"

43
ct/unifi-os-server.sh Normal file
View File

@@ -0,0 +1,43 @@
#!/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://ui.com/
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
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/local/sbin/unifi-os-server.bin && ! -d /data/unifi ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_custom "🚀" "${GN}" "The app offers a built-in updater. Please use it."
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}https://${IP}:11443${CL}"

View File

@@ -12,7 +12,7 @@
"documentation": "https://garethgeorge.github.io/backrest/introduction/getting-started",
"website": "https://garethgeorge.github.io/backrest",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/backrest.webp",
"config_path": "/opt/backrest/config/config.json",
"config_path": "/opt/backrest/config/config.json | /opt/backrest/.env",
"description": "Backrest is a web-accessible backup solution built on top of restic and providing a WebUI which wraps the restic CLI and makes it easy to create repos, browse snapshots, and restore files. Additionally, Backrest can run in the background and take an opinionated approach to scheduling snapshots and orchestrating repo health operations.",
"install_methods": [
{
@@ -23,7 +23,7 @@
"ram": 512,
"hdd": 8,
"os": "debian",
"version": "12"
"version": "13"
}
}
],

View File

@@ -23,7 +23,7 @@
"ram": 512,
"hdd": 6,
"os": "debian",
"version": "12"
"version": "13"
}
},
{

View File

@@ -0,0 +1,35 @@
{
"name": "Fladder",
"slug": "fladder",
"categories": [
13
],
"date_created": "2026-01-13",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": "https://github.com/DonutWare/Fladder/blob/develop/INSTALL.md#ubuntudebian",
"website": "https://github.com/DonutWare/Fladder",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/fladder.webp",
"config_path": "/opt/fladder/assets/config/config.json",
"description": "Fladder is a simple Jellyfin frontend built on top of Flutter. It provides a modern interface to stream and sync content locally, manage libraries, support multiple profiles, and offers direct, transcode and offline playback with media segments skipping.",
"install_methods": [
{
"type": "default",
"script": "ct/fladder.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

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

@@ -0,0 +1,40 @@
{
"name": "Investbrain",
"slug": "investbrain",
"categories": [
23
],
"date_created": "2026-01-13",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8000,
"documentation": "https://github.com/investbrainapp/investbrain",
"website": "https://investbra.in",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/investbrain.webp",
"config_path": "/opt/investbrain/.env",
"description": "Investbrain is a smart open-source investment tracker that helps you manage, track, and make informed decisions about your investments.",
"install_methods": [
{
"type": "default",
"script": "ct/investbrain.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Database credentials: `cat ~/investbrain.creds`",
"type": "info"
}
]
}

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

@@ -0,0 +1,40 @@
{
"name": "Kutt",
"slug": "kutt",
"categories": [
21
],
"date_created": "2026-01-14",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 443,
"documentation": "https://github.com/thedevs-network/kutt/",
"config_path": "/opt/kutt/.env",
"website": "https://kutt.it",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/kutt.webp",
"description": "Kutt is a modern URL shortener with support for custom domains. Create and edit links, view statistics, manage users, and more.",
"install_methods": [
{
"type": "default",
"script": "ct/kutt.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 2,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Kutt needs so be served with an SSL certificate for its login to work. During install, you will be prompted to choose if you want to have Caddy installed for SSL termination or if you want to use your own reverse proxy (in that case point your reverse porxy to port 3000).",
"type": "info"
}
]
}

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://github.com/autobrr/qui",
"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": "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": []
}

File diff suppressed because it is too large Load Diff

View File

@@ -194,7 +194,20 @@ function CommandMenu() {
</TooltipProvider>
</div>
<CommandDialog open={open} onOpenChange={setOpen}>
<CommandDialog
open={open}
onOpenChange={setOpen}
filter={(value: string, search: string) => {
const searchLower = search.toLowerCase().trim();
if (!searchLower)
return 1;
const valueLower = value.toLowerCase();
const searchWords = searchLower.split(/\s+/).filter(Boolean);
// All search words must appear somewhere in the value (name + description)
const allWordsMatch = searchWords.every((word: string) => valueLower.includes(word));
return allWordsMatch ? 1 : 0;
}}
>
<DialogTitle className="sr-only">Search scripts</DialogTitle>
<CommandInput placeholder="Search for a script..." />
<CommandList>
@@ -204,7 +217,7 @@ function CommandMenu() {
{scripts.map(script => (
<CommandItem
key={`script:${script.slug}`}
value={`${script.name}-${script.type}`}
value={`${script.name} ${script.type} ${script.description || ""}`}
onSelect={() => {
setOpen(false);
router.push(`/scripts?id=${script.slug}`);

View File

@@ -24,13 +24,18 @@ const Command = React.forwardRef<
));
Command.displayName = CommandPrimitive.displayName;
type CommandDialogProps = {} & DialogProps;
type CommandDialogProps = {
filter?: (value: string, search: string, keywords?: string[]) => number;
} & DialogProps;
function CommandDialog({ children, ...props }: CommandDialogProps) {
function CommandDialog({ children, filter, ...props }: CommandDialogProps) {
return (
<Dialog {...props}>
<DialogContent className="overflow-hidden p-0 shadow-lg">
<Command className="[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
<Command
filter={filter}
className="[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5"
>
{children}
</Command>
</DialogContent>

View File

@@ -69,6 +69,7 @@ curl -fsSL "https://downloads.apache.org/guacamole/${GUAC_CLIENT_VERSION}/binary
echo "${GUAC_CLIENT_VERSION}" >~/.guacamole_client
curl -fsSL "https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/${MYSQL_CONNECTOR_VERSION}/mysql-connector-j-${MYSQL_CONNECTOR_VERSION}.jar" -o "/etc/guacamole/lib/mysql-connector-j.jar"
echo "${MYSQL_CONNECTOR_VERSION}" >~/.guacamole_mysql_connector
cd /root
curl -fsSL "https://downloads.apache.org/guacamole/${GUAC_SERVER_VERSION}/binary/guacamole-auth-jdbc-${GUAC_SERVER_VERSION}.tar.gz" -o "/root/guacamole-auth-jdbc-${GUAC_SERVER_VERSION}.tar.gz"
$STD tar -xf ~/guacamole-auth-jdbc-"$GUAC_SERVER_VERSION".tar.gz
mv ~/guacamole-auth-jdbc-"$GUAC_SERVER_VERSION"/mysql/guacamole-auth-jdbc-mysql-"$GUAC_SERVER_VERSION".jar /etc/guacamole/extensions/

View File

@@ -16,6 +16,13 @@ update_os
fetch_and_deploy_gh_release "backrest" "garethgeorge/backrest" "prebuild" "latest" "/opt/backrest/bin" "backrest_Linux_x86_64.tar.gz"
msg_info "Creating Service"
cat <<EOF >/opt/backrest/.env
BACKREST_PORT=9898
BACKREST_CONFIG=/opt/backrest/config/config.json
BACKREST_DATA=/opt/backrest/data
XDG_CACHE_HOME=/opt/backrest/cache
EOF
cat <<EOF >/etc/systemd/system/backrest.service
[Unit]
Description=Backrest
@@ -24,10 +31,7 @@ After=network.target
[Service]
Type=simple
ExecStart=/opt/backrest/bin/backrest
Environment="BACKREST_PORT=9898"
Environment="BACKREST_CONFIG=/opt/backrest/config/config.json"
Environment="BACKREST_DATA=/opt/backrest/data"
Environment="XDG_CACHE_HOME=/opt/backrest/cache"
EnvironmentFile=/opt/backrest/.env
[Install]
WantedBy=multi-user.target

View File

@@ -14,29 +14,28 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
$STD apt install -y \
debian-keyring \
debian-archive-keyring \
apt-transport-https
msg_ok "Installed Dependencies"
msg_info "Installing Caddy"
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' >/etc/apt/sources.list.d/caddy-stable.list
$STD apt-get update
$STD apt-get install -y caddy
setup_deb822_repo \
"caddy" \
"https://dl.cloudsmith.io/public/caddy/stable/gpg.key" \
"https://dl.cloudsmith.io/public/caddy/stable/deb/debian" \
"any-version"
$STD apt install -y caddy
msg_ok "Installed Caddy"
read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
setup_go
fetch_and_deploy_gh_release "xcaddy" "caddyserver/xcaddy" "binary"
msg_info "Setup xCaddy"
$STD apt-get install -y git
cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.deb" -o "xcaddy_${RELEASE:1}_linux_amd64.deb"
$STD dpkg -i xcaddy_"${RELEASE:1}"_linux_amd64.deb
rm -rf /opt/xcaddy*
$STD apt install -y git
$STD xcaddy build
msg_ok "Setup xCaddy"
fi

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,46 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: wendyliga
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/DonutWare/Fladder
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 nginx
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "Fladder" "DonutWare/Fladder" "prebuild" "latest" "/opt/fladder" "Fladder-Web-*.zip"
msg_info "Configuring Nginx"
cat <<EOF >/etc/nginx/conf.d/fladder.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /opt/fladder;
index index.html;
location / {
try_files \$uri \$uri/ /index.html;
}
}
EOF
rm -f /etc/nginx/sites-enabled/default
rm -f /etc/nginx/sites-available/default
systemctl enable -q --now nginx
systemctl reload nginx
msg_ok "Configured Nginx"
motd_ssh
customize
cleanup_lxc

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

@@ -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

@@ -29,7 +29,6 @@ $STD apt install --no-install-recommends -y \
libltdl-dev \
libgdk-pixbuf-2.0-dev \
libbrotli-dev \
libde265-dev \
libexif-dev \
libexpat1-dev \
libglib2.0-dev \
@@ -99,20 +98,21 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
$STD apt install -y --no-install-recommends patchelf
tmp_dir=$(mktemp -d)
$STD pushd "$tmp_dir"
curl -fsSLZ -O "https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17537.24/intel-igc-core_1.0.17537.24_amd64.deb" \
-O "https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17537.24/intel-igc-opencl_1.0.17537.24_amd64.deb" \
-O "https://github.com/intel/compute-runtime/releases/download/24.35.30872.36/intel-opencl-icd-legacy1_24.35.30872.36_amd64.deb" \
-O "https://github.com/intel/intel-graphics-compiler/releases/download/v2.22.2/intel-igc-core-2_2.22.2+20121_amd64.deb" \
-O "https://github.com/intel/intel-graphics-compiler/releases/download/v2.22.2/intel-igc-opencl-2_2.22.2+20121_amd64.deb" \
-O "https://github.com/intel/compute-runtime/releases/download/25.44.36015.5/intel-opencl-icd_25.44.36015.5-0_amd64.deb" \
-O "https://github.com/intel/compute-runtime/releases/download/25.44.36015.5/libigdgmm12_22.8.2_amd64.deb"
curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/Dockerfile
readarray -t INTEL_URLS < <(
sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $2}'
sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}'
)
for url in "${INTEL_URLS[@]}"; do
curl -fsSLO "$url"
done
$STD apt install -y ./libigdgmm12*.deb
rm ./libigdgmm12*.deb
$STD apt install -y ./*.deb
$STD apt-mark hold libigdgmm12
$STD popd
rm -rf "$tmp_dir"
dpkg -l | grep "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
@@ -129,9 +129,9 @@ Pin-Priority: 450
EOF
$STD apt update
msg_ok "Configured Debian Testing repo"
msg_info "Installing libmimalloc3"
$STD apt install -t testing --no-install-recommends -yqq libmimalloc3
msg_ok "Installed libmimalloc3"
msg_info "Installing packages from Debian Testing repo"
$STD apt install -t testing --no-install-recommends -yqq libmimalloc3 libde265-dev
msg_ok "Installed packages from Debian Testing repo"
PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')"
NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs

View File

@@ -0,0 +1,182 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Benito Rodríguez (b3ni)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/investbrainapp/investbrain
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 \
nginx \
supervisor \
redis-server \
libfreetype-dev \
libjpeg62-turbo-dev \
libpng-dev \
zlib1g-dev \
libzip-dev \
libicu-dev \
libpq-dev
msg_ok "Installed Dependencies"
export PHP_VERSION="8.4"
PHP_FPM=YES PHP_MODULE="gd,zip,intl,pdo,pgsql,pdo-pgsql,bcmath,opcache,mbstring,redis" setup_php
setup_composer
NODE_VERSION="22" setup_nodejs
PG_VERSION="17" setup_postgresql
PG_DB_NAME="investbrain" PG_DB_USER="investbrain" setup_postgresql_db
import_local_ip
fetch_and_deploy_gh_release "Investbrain" "investbrainapp/investbrain" "tarball" "latest" "/opt/investbrain"
msg_info "Installing Investbrain"
APP_KEY=$(openssl rand -base64 32)
cd /opt/investbrain
cat <<EOF >/opt/investbrain/.env
APP_KEY=base64:${APP_KEY}
APP_PORT=8000
APP_URL=http://${LOCAL_IP}:8000
ASSET_URL=http://${LOCAL_IP}:8000
LOG_CHANNEL=daily
LOG_LEVEL=warning
REGISTRATION_ENABLED=true
AI_CHAT_ENABLED=false
OPENAI_API_KEY=
OPENAI_ORGANIZATION=
MARKET_DATA_PROVIDER=yahoo
ALPHAVANTAGE_API_KEY=
FINNHUB_API_KEY=
ALPACA_API_KEY=
ALPACA_API_SECRET=
TWELVEDATA_API_SECRET=
MARKET_DATA_REFRESH=30
DAILY_CHANGE_TIME=
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=${PG_DB_NAME}
DB_USERNAME=${PG_DB_USER}
DB_PASSWORD=${PG_DB_PASS}
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
CACHE_STORE=redis
CACHE_PREFIX=
SESSION_DRIVER=redis
SESSION_LIFETIME=120
QUEUE_CONNECTION=redis
MAIL_MAILER=log
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_FROM_ADDRESS="investbrain@${LOCAL_IP}"
VITE_APP_NAME=Investbrain
EOF
export COMPOSER_ALLOW_SUPERUSER=1
$STD /usr/local/bin/composer install --no-interaction --no-dev --optimize-autoloader
$STD npm install
$STD npm run build
mkdir -p /opt/investbrain/storage/{framework/cache,framework/sessions,framework/views,app,logs}
$STD php artisan migrate --force
$STD php artisan storage:link
$STD php artisan cache:clear
$STD php artisan view:clear
$STD php artisan route:clear
$STD php artisan event:clear
$STD php artisan route:cache
$STD php artisan event:cache
chown -R www-data:www-data /opt/investbrain
chmod -R 775 /opt/investbrain/bootstrap/cache
msg_ok "Installed Investbrain"
msg_info "Configuring Nginx"
cat <<EOF >/etc/nginx/sites-available/investbrain.conf
server {
listen 8000 default_server;
listen [::]:8000 default_server;
server_name _;
root /opt/investbrain/public;
index index.php;
client_max_body_size 50M;
charset utf-8;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location / {
try_files \$uri \$uri/ /index.php?\$query_string;
}
location ~ \.php\$ {
fastcgi_pass unix:/var/run/php/php${PHP_VERSION}-fpm.sock;
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
fastcgi_read_timeout 300;
}
location ~ /\.(?!well-known).* {
deny all;
}
error_log /var/log/nginx/investbrain_error.log;
access_log /var/log/nginx/investbrain_access.log;
}
EOF
ln -sf /etc/nginx/sites-available/investbrain.conf /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
$STD systemctl reload nginx
msg_ok "Configured Nginx"
msg_info "Setting up Supervisor"
cat <<EOF >/etc/supervisor/conf.d/investbrain.conf
[program:investbrain-queue]
process_name=%%(program_name)s_%%(process_num)02d
command=php /opt/investbrain/artisan queue:work --sleep=3 --tries=1 --memory=256 --timeout=3600
user=www-data
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/opt/investbrain/storage/logs/queue.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10
numprocs=1
EOF
$STD supervisorctl reread
$STD supervisorctl update
$STD supervisorctl start all
msg_ok "Setup Supervisor"
msg_info "Setting up Cron for Scheduler"
cat <<EOF >/etc/cron.d/investbrain-scheduler
* * * * * www-data php /opt/investbrain/artisan schedule:run >> /dev/null 2>&1
EOF
chmod 644 /etc/cron.d/investbrain-scheduler
$STD systemctl restart cron
msg_ok "Setup Cron for Scheduler"
motd_ssh
customize
cleanup_lxc

View File

@@ -20,6 +20,7 @@ $STD apt install -y \
msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql
PG_DB_NAME="joplin" PG_DB_USER="joplin" setup_postgresql_db
NODE_VERSION=24 NODE_MODULE="yarn,npm,pm2" setup_nodejs
mkdir -p /opt/pm2
export PM2_HOME=/opt/pm2
@@ -27,28 +28,10 @@ $STD pm2 install pm2-logrotate
$STD pm2 set pm2-logrotate:max_size 100MB
$STD pm2 set pm2-logrotate:retain 5
$STD pm2 set pm2-logrotate:compress tr
msg_info "Setting up PostgreSQL Database"
DB_NAME=joplin
DB_USER=joplin
DB_PASS="$(openssl rand -base64 18 | 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 ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
{
echo "Joplin-Credentials"
echo "Joplin Database User: $DB_USER"
echo "Joplin Database Password: $DB_PASS"
echo "Joplin Database Name: $DB_NAME"
} >>~/joplin.creds
msg_ok "Set up PostgreSQL Database"
fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball" "latest"
fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball"
import_local_ip
msg_info "Setting up Joplin Server (Patience)"
LOCAL_IP=$(hostname -I | awk '{print $1}')
cd /opt/joplin-server
sed -i "/onenote-converter/d" packages/lib/package.json
$STD yarn config set --home enableTelemetry 0
@@ -61,9 +44,9 @@ NODE_ENV=production
APP_BASE_URL=http://$LOCAL_IP:22300
APP_PORT=22300
DB_CLIENT=pg
POSTGRES_PASSWORD=$DB_PASS
POSTGRES_DATABASE=$DB_NAME
POSTGRES_USER=$DB_USER
POSTGRES_PASSWORD=$PG_DB_PASS
POSTGRES_DATABASE=$PG_DB_NAME
POSTGRES_USER=$PG_DB_USER
POSTGRES_PORT=5432
POSTGRES_HOST=localhost
EOF

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

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

@@ -0,0 +1,75 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: tomfrenzel
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/thedevs-network/kutt
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
echo "${TAB3}How would you like to handle SSL termination?"
echo "${TAB3}[i]-Internal (self-signed SSL Certificate) [e]-External (use your own reverse proxy)"
read -rp "${TAB3}Enter your choice <i/e> (default: i): " ssl_choice
ssl_choice=${ssl_choice:-i}
case "${ssl_choice,,}" in
i)
import_local_ip
DEFAULT_HOST="$LOCAL_IP"
msg_info "Configuring Caddy"
$STD apt install -y caddy
cat <<EOF >/etc/caddy/Caddyfile
$LOCAL_IP {
reverse_proxy localhost:3000
}
EOF
systemctl restart caddy
msg_ok "Configured Caddy"
;;
e)
read -r -p "${TAB3}Enter the hostname you want to use for Kutt (eg. kutt.example.com): " custom_host
if [[ "$custom_host" ]]; then
DEFAULT_HOST="$custom_host"
fi
;;
esac
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "kutt" "thedevs-network/kutt" "tarball"
msg_info "Configuring Kutt"
cd /opt/kutt
cp .example.env ".env"
sed -i "s|JWT_SECRET=|JWT_SECRET=$(openssl rand -base64 32)|g" ".env"
sed -i "s|DEFAULT_DOMAIN=.*|DEFAULT_DOMAIN=$DEFAULT_HOST|g" ".env"
$STD npm install
$STD npm run migrate
msg_ok "Configured Kutt"
msg_info "Creating Services"
cat <<EOF >/etc/systemd/system/kutt.service
[Unit]
Description=Kutt server
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/opt/kutt
ExecStart=/usr/bin/npm start
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now kutt
msg_ok "Created Services"
motd_ssh
customize
cleanup_lxc

View File

@@ -15,22 +15,7 @@ update_os
PHP_VERSION="8.4" PHP_MODULE="mysql" PHP_APACHE="YES" PHP_FPM="YES" setup_php
setup_mariadb
msg_info "Setting up Database"
DB_NAME=leantime
DB_USER=leantime
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
{
echo "Leantime Credentials"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
echo "Database Name: $DB_NAME"
} >>~/leantime.creds
msg_ok "Set up Database"
MARIADB_DB_NAME="leantime" MARIADB_DB_USER="leantime" setup_mariadb_db
fetch_and_deploy_gh_release "leantime" "Leantime/leantime" "prebuild" "latest" "/opt/leantime" Leantime*.tar.gz
msg_info "Setup Leantime"
@@ -58,9 +43,9 @@ cat <<EOF >/etc/apache2/sites-enabled/000-default.conf
</VirtualHost>
EOF
mv "/opt/leantime/config/sample.env" "/opt/leantime/config/.env"
sed -i -e "s|^LEAN_DB_DATABASE.*|LEAN_DB_DATABASE = '$DB_NAME'|" \
-e "s|^LEAN_DB_USER.*|LEAN_DB_USER = '$DB_USER'|" \
-e "s|^LEAN_DB_PASSWORD.*|LEAN_DB_PASSWORD = '$DB_PASS'|" \
sed -i -e "s|^LEAN_DB_DATABASE.*|LEAN_DB_DATABASE = '$MARIADB_DB_NAME'|" \
-e "s|^LEAN_DB_USER.*|LEAN_DB_USER = '$MARIADB_DB_USER'|" \
-e "s|^LEAN_DB_PASSWORD.*|LEAN_DB_PASSWORD = '$MARIADB_DB_PASS'|" \
-e "s|^LEAN_SESSION_PASSWORD.*|LEAN_SESSION_PASSWORD = '$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)'|" \
"/opt/leantime/config/.env"
$STD a2enmod -q proxy_fcgi setenvif rewrite

View File

@@ -54,12 +54,11 @@ msg_ok "Installed Openresty"
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
# RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
# grep "tag_name" |
# awk '{print substr($2, 3, length($2)-4) }')
RELEASE="2.13.5"
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
grep "tag_name" |
awk '{print substr($2, 3, length($2)-4) }')
fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager" "tarball" "v2.13.5"
fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager" "tarball" "v${RELEASE}"
msg_info "Setting up Environment"
ln -sf /usr/bin/python3 /usr/bin/python

View File

@@ -16,7 +16,8 @@ update_os
msg_info "Installing Dependencies"
$STD apt install -y \
build-essential \
pkg-config
pkg-config \
zstd
msg_ok "Installed Dependencies"
msg_info "Setting up Intel® Repositories"
@@ -67,11 +68,11 @@ RELEASE=$(curl -fsSL https://api.github.com/repos/ollama/ollama/releases/latest
OLLAMA_INSTALL_DIR="/usr/local/lib/ollama"
BINDIR="/usr/local/bin"
mkdir -p $OLLAMA_INSTALL_DIR
OLLAMA_URL="https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tgz"
TMP_TAR="/tmp/ollama.tgz"
OLLAMA_URL="https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tar.zst"
TMP_TAR="/tmp/ollama.tar.zst"
echo -e "\n"
if curl -fL# -C - -o "$TMP_TAR" "$OLLAMA_URL"; then
if tar -xzf "$TMP_TAR" -C "$OLLAMA_INSTALL_DIR"; then
if tar --zstd -xf "$TMP_TAR" -C "$OLLAMA_INSTALL_DIR"; then
ln -sf "$OLLAMA_INSTALL_DIR/bin/ollama" "$BINDIR/ollama"
echo "${RELEASE}" >/opt/Ollama_version.txt
msg_ok "Installed Ollama ${RELEASE}"

View File

@@ -14,7 +14,9 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y ffmpeg
$STD apt install -y \
ffmpeg \
zstd
msg_ok "Installed Dependencies"
setup_hwaccel
@@ -69,9 +71,10 @@ EOF
msg_ok "Installed Intel® oneAPI Base Toolkit"
msg_info "Installing Ollama"
curl -fsSLO -C - https://ollama.com/download/ollama-linux-amd64.tgz
tar -C /usr -xzf ollama-linux-amd64.tgz
rm -rf ollama-linux-amd64.tgz
OLLAMA_RELEASE=$(curl -fsSL https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
curl -fsSLO -C - https://github.com/ollama/ollama/releases/download/${OLLAMA_RELEASE}/ollama-linux-amd64.tar.zst
tar --zstd -C /usr -xf ollama-linux-amd64.tar.zst
rm -rf ollama-linux-amd64.tar.zst
cat <<EOF >/etc/systemd/system/ollama.service
[Unit]
Description=Ollama Service

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

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

@@ -52,7 +52,8 @@ 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
unlink /etc/nginx/sites-available/default
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

@@ -3002,16 +3002,24 @@ _setup_nvidia_gpu() {
msg_info "Installing NVIDIA GPU drivers"
# Prevent interactive dialogs (e.g., "Mismatching nvidia kernel module" whiptail)
export DEBIAN_FRONTEND=noninteractive
export NEEDRESTART_MODE=a
# Detect host driver version (passed through via /proc)
# Format varies by driver type:
# Proprietary: "NVRM version: NVIDIA UNIX x86_64 Kernel Module 550.54.14 Thu..."
# Open: "NVRM version: NVIDIA UNIX Open Kernel Module for x86_64 590.48.01 Release..."
# Use regex to extract version number (###.##.## pattern)
local nvidia_host_version=""
if [[ -f /proc/driver/nvidia/version ]]; then
nvidia_host_version=$(grep "NVRM version:" /proc/driver/nvidia/version 2>/dev/null | awk '{print $8}')
nvidia_host_version=$(grep -oP '\d{3,}\.\d+\.\d+' /proc/driver/nvidia/version 2>/dev/null | head -1)
fi
if [[ -z "$nvidia_host_version" ]]; then
msg_warn "NVIDIA host driver version not found in /proc/driver/nvidia/version"
msg_warn "Ensure NVIDIA drivers are installed on host and GPU passthrough is enabled"
$STD apt -y install va-driver-all vainfo 2>/dev/null || true
$STD apt-get -y install va-driver-all vainfo 2>/dev/null || true
return 0
fi
@@ -3024,53 +3032,74 @@ _setup_nvidia_gpu() {
sed -i -E 's/Components: (.*)$/Components: \1 contrib non-free non-free-firmware/g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || true
fi
fi
$STD apt-get -y update 2>/dev/null || msg_warn "apt update failed - continuing anyway"
# Determine CUDA repository
local cuda_repo="debian12"
case "$os_codename" in
bullseye) cuda_repo="debian11" ;;
bookworm) cuda_repo="debian12" ;;
trixie | sid) cuda_repo="debian12" ;; # Forward compatible
esac
# For Debian 13 Trixie/Sid: Use Debian's own nvidia packages first (better compatibility)
# NVIDIA's CUDA repo targets Debian 12 and may not have amd64 packages for Trixie
if [[ "$os_codename" == "trixie" || "$os_codename" == "sid" ]]; then
msg_info "Debian ${os_codename}: Using Debian's NVIDIA packages"
# Add NVIDIA CUDA repository
if [[ ! -f /usr/share/keyrings/cuda-archive-keyring.gpg ]]; then
msg_info "Adding NVIDIA CUDA repository (${cuda_repo})"
local cuda_keyring
cuda_keyring="$(mktemp)"
if curl -fsSL -o "$cuda_keyring" "https://developer.download.nvidia.com/compute/cuda/repos/${cuda_repo}/x86_64/cuda-keyring_1.1-1_all.deb" 2>/dev/null; then
$STD dpkg -i "$cuda_keyring" 2>/dev/null || true
# 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
msg_warn "Failed to download NVIDIA CUDA keyring"
# 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)"
else
msg_warn "NVIDIA library installation failed - GPU compute may not work"
fi
fi
rm -f "$cuda_keyring"
fi
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends nvidia-smi 2>/dev/null || true
# Pin NVIDIA repo for version matching
cat <<'NVIDIA_PIN' >/etc/apt/preferences.d/nvidia-cuda-pin
else
# Debian 11/12: Use NVIDIA CUDA repository for version matching
local cuda_repo="debian12"
case "$os_codename" in
bullseye) cuda_repo="debian11" ;;
bookworm) cuda_repo="debian12" ;;
esac
# Add NVIDIA CUDA repository
if [[ ! -f /usr/share/keyrings/cuda-archive-keyring.gpg ]]; then
msg_info "Adding NVIDIA CUDA repository (${cuda_repo})"
local cuda_keyring
cuda_keyring="$(mktemp)"
if curl -fsSL -o "$cuda_keyring" "https://developer.download.nvidia.com/compute/cuda/repos/${cuda_repo}/x86_64/cuda-keyring_1.1-1_all.deb" 2>/dev/null; then
$STD dpkg -i "$cuda_keyring" 2>/dev/null || true
else
msg_warn "Failed to download NVIDIA CUDA keyring"
fi
rm -f "$cuda_keyring"
fi
# Pin NVIDIA repo for version matching
cat <<'NVIDIA_PIN' >/etc/apt/preferences.d/nvidia-cuda-pin
Package: *
Pin: origin developer.download.nvidia.com
Pin-Priority: 1001
NVIDIA_PIN
$STD apt -y update
$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}*"
# 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}*"
msg_info "Installing NVIDIA libraries (version ${nvidia_host_version})"
if $STD apt -y 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 -y install --no-install-recommends libcuda1 libnvcuvid1 libnvidia-encode1 libnvidia-ml1 2>/dev/null; then
msg_warn "Installed NVIDIA libraries (unpinned) - version mismatch may occur"
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 "NVIDIA library installation failed"
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"
else
msg_warn "NVIDIA library installation failed"
fi
fi
fi
$STD apt -y install --no-install-recommends nvidia-smi 2>/dev/null || true
$STD apt-get -y -o Dpkg::Options::="--force-confold" install --no-install-recommends nvidia-smi 2>/dev/null || true
fi
elif [[ "$os_id" == "ubuntu" ]]; then
# Ubuntu versioning
@@ -3094,20 +3123,20 @@ NVIDIA_PIN
rm -f "$cuda_keyring"
fi
$STD apt -y update
$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 -y install --no-install-recommends $nvidia_pkgs 2>/dev/null; then
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 -y install --no-install-recommends libnvidia-decode libnvidia-encode nvidia-utils 2>/dev/null || msg_warn "NVIDIA installation failed"
$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
fi
# VA-API for hybrid setups (Intel + NVIDIA)
$STD apt -y install va-driver-all vainfo 2>/dev/null || true
$STD apt-get -y install va-driver-all vainfo 2>/dev/null || true
msg_ok "NVIDIA GPU configured"
}

View File

@@ -27,6 +27,12 @@ CL=$(echo "\033[m")
header_info
echo "Loading..."
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Updater" --yesno "This Will Update LXC Containers. Proceed?" 10 58
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Skip Not-Running Containers" --yesno "Do you want to skip containers that are not currently running?" 10 58; then
SKIP_STOPPED="yes"
else
SKIP_STOPPED="no"
fi
NODE=$(hostname)
EXCLUDE_MENU=()
MSG_MAX_LENGTH=0
@@ -67,7 +73,7 @@ function update_container() {
alpine) pct exec "$container" -- ash -c "apk -U upgrade" ;;
archlinux) pct exec "$container" -- bash -c "pacman -Syyu --noconfirm" ;;
fedora | rocky | centos | alma) pct exec "$container" -- bash -c "dnf -y update && dnf -y upgrade" ;;
ubuntu | debian | devuan) pct exec "$container" -- bash -c "apt-get update 2>/dev/null | grep 'packages.*upgraded'; apt list --upgradable && apt-get -yq dist-upgrade 2>&1; rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED" ;;
ubuntu | debian | devuan) pct exec "$container" -- bash -c "apt-get update 2>/dev/null | grep 'packages.*upgraded'; apt list --upgradable && apt-get -yq dist-upgrade 2>&1; rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED || true" ;;
opensuse) pct exec "$container" -- bash -c "zypper ref && zypper --non-interactive dup" ;;
esac
}
@@ -81,6 +87,12 @@ for container in $(pct list | awk '{if(NR>1) print $1}'); do
sleep 1
else
status=$(pct status $container)
if [ "$SKIP_STOPPED" == "yes" ] && [ "$status" == "status: stopped" ]; then
header_info
echo -e "${BL}[Info]${GN} Skipping ${BL}$container${CL}${GN} (not running)${CL}"
sleep 1
continue
fi
template=$(pct config $container | grep -q "template:" && echo "true" || echo "false")
if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then
echo -e "${BL}[Info]${GN} Starting${BL} $container ${CL} \n"

View File

@@ -277,7 +277,7 @@ function default_settings() {
MAC=$GEN_MAC
LAN_MAC=$GEN_MAC_LAN
VLAN=""
LAN_VLAN=",tag=999"
LAN_VLAN=""
LAN_IP_ADDR="192.168.1.1"
LAN_NETMASK="255.255.255.0"
MTU=""
@@ -427,8 +427,8 @@ function advanced_settings() {
if VLAN2=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a LAN Vlan" 8 58 999 --title "LAN VLAN" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z $VLAN2 ]; then
VLAN2="999"
LAN_VLAN=",tag=$VLAN2"
VLAN2="Default"
LAN_VLAN=""
else
LAN_VLAN=",tag=$VLAN2"
fi