Compare commits

...

94 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
2c9f6c5305 Update CHANGELOG.md (#14637)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-22 05:46:42 +00:00
Atahan Kucuk
bc43c262a8 fix: make LXC banner OS detection dynamic via /etc/os-release (#14269)
* fix: derive LXC banner OS from os-release

Read os-release at login time for the generated LXC banner so OS display stays accurate after template changes or in-place upgrades. Prefer PRETTY_NAME with safe fallbacks to NAME, template defaults, and Unknown OS while preserving existing banner formatting.

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor: simplify dynamic LXC banner OS resolution

Reduce banner OS rendering to a minimal runtime os-release read with PRETTY_NAME/NAME fallbacks and Unknown OS default. Remove redundant OS rewrites from update_motd_ip now that OS display is resolved dynamically at login.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-22 07:46:18 +02:00
community-scripts-pr-app[bot]
0e00444cb9 Update CHANGELOG.md (#14633)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-21 21:07:46 +00:00
Romain PINSOLLE
9d0c174de1 snowshare: use mv instead of cp for uploads backup to prevent disk fill (#14558)
* snowshare: use mv instead of cp for uploads backup to prevent disk fill

Replaces cp -a with mv when backing up and restoring /opt/snowshare/uploads
during updates. cp -a duplicated the entire uploads directory on each update,
which could fill the disk on instances with large uploads and left stale
backup directories accumulating across failed updates. mv is atomic on the
same filesystem and avoids any data duplication. Also clears any leftover
backup directory before the move to prevent nesting on interrupted updates.

Refs TuroYT/snowshare#258

* snowshare: use UPLOAD_DIR env to persist uploads outside install dir

Set UPLOAD_DIR=/opt/snowshare_data in the env file so uploads live
outside /opt/snowshare and survive CLEAN_INSTALL updates without any
backup/restore step. Existing installations are migrated on first
update by moving uploads to the new location and appending UPLOAD_DIR
to the env file, making the change non-breaking.
2026-05-21 23:07:16 +02:00
community-scripts-pr-app[bot]
60d1998765 Update CHANGELOG.md (#14627)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-21 17:05:26 +00:00
CanbiZ (MickLesk)
1cdfdea583 Proxmox VE 9.2 support (#14624) 2026-05-21 19:04:47 +02:00
community-scripts-pr-app[bot]
878b09f5ec Update CHANGELOG.md (#14620)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-21 10:29:23 +00:00
w-gitops
c17d376aae Technitium DNS: download release before stopping the service on update (#14616)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 12:28:46 +02:00
community-scripts-pr-app[bot]
d80d0fb285 Update CHANGELOG.md (#14611)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-20 17:20:52 +00:00
CanbiZ (MickLesk)
62b4b5f260 Profilarr v2: Update and Refactor whole Script (#14584) 2026-05-20 19:19:08 +02:00
MickLesk
56c97cdf80 typo 2026-05-20 15:53:29 +02:00
MickLesk
9ac2eda0bb flowise add sqlite dep for newer version 2026-05-20 15:51:14 +02:00
MickLesk
f2266d8f53 flowise add pnpm global-bin-dir 2026-05-20 15:42:54 +02:00
community-scripts-pr-app[bot]
d6af82ff60 Update CHANGELOG.md (#14608)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-20 12:34:57 +00:00
Michel Roegl-Brunner
d38c5ceb56 Update mylar3 to point to new Repo (#14606)
* Move mylar3 to new repo

* change form variabel to hardcoded
2026-05-20 14:34:22 +02:00
community-scripts-pr-app[bot]
c5aaf72c9b Update CHANGELOG.md (#14599)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-20 05:34:33 +00:00
Slaviša Arežina
f0b1afca69 Ollama: Fix for latest version (#14596)
* fix

* oops

* Also in openwebui

* removed unused .ollama file
2026-05-20 07:34:03 +02:00
community-scripts-pr-app[bot]
3b142e5dc9 Update CHANGELOG.md (#14595)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-19 21:43:05 +00:00
Slaviša Arežina
b8822e9123 Refactor (#14594) 2026-05-19 23:42:26 +02:00
community-scripts-pr-app[bot]
a6533d2f2c Update CHANGELOG.md (#14593)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-19 21:33:35 +00:00
Slaviša Arežina
b65bd1a8cb Update SSL certificate paths in espconnect-install.sh (#14591) 2026-05-19 23:33:12 +02:00
community-scripts-pr-app[bot]
2944aa9100 Update CHANGELOG.md (#14588)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-19 06:51:09 +00:00
push-app-to-main[bot]
afa59595f0 Add lobehub (ct) (#14441)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-05-19 08:50:45 +02:00
community-scripts-pr-app[bot]
ff4a9d423b Update CHANGELOG.md (#14587)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-19 06:50:23 +00:00
CanbiZ (MickLesk)
59d4ab70c3 ReactiveResume: set correct WorkingDirectory for systemd service (#14579)
* fix(reactive-resume): set correct WorkingDirectory for systemd service

* fix(reactive-resume): update WorkingDirectory in service for existing installs
2026-05-19 08:49:54 +02:00
community-scripts-pr-app[bot]
7ecb1eb305 Update CHANGELOG.md (#14586)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-19 06:35:17 +00:00
CanbiZ (MickLesk)
7076d03ab3 Sparkyfitness: add missing nginx template variable substitutions (#14578)
* fix(sparkyfitness): add missing nginx template variable substitutions

* fix(sparkyfitness): regenerate nginx config during updates for existing installs
2026-05-19 08:34:52 +02:00
CanbiZ (MickLesk)
c874324f06 Wanderer: include dev dependencies during build (#14577)
* fix(wanderer): include dev dependencies during build

* fix(wanderer): remove --omit=dev from update script to allow npm run build
2026-05-19 08:34:28 +02:00
community-scripts-pr-app[bot]
0cab1f7f89 Update CHANGELOG.md (#14585)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-19 06:24:57 +00:00
Michel Roegl-Brunner
f7432990cf Update nodejs Versions (#14582)
* Move fumadocs to node 24 per there package.json requirements

* Move papra to node 26 per there .nvmrc file

* Move zipline to node 24 as per there Dockerfile
2026-05-19 08:24:28 +02:00
community-scripts-pr-app[bot]
39e67bc874 Update CHANGELOG.md (#14583)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-19 06:21:31 +00:00
CanbiZ (MickLesk)
4ffa551202 fix(whisparr): switch from nightly to stable GitHub release (#14581) 2026-05-19 08:21:07 +02:00
community-scripts-pr-app[bot]
0374da39f7 Update CHANGELOG.md (#14570)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-18 18:05:03 +00:00
push-app-to-main[bot]
ade578edad ESPconnect (#14444)
* Add espconnect (ct)

* update source

* Update author attribution in espconnect.sh

* Modify author info and remove SSL certificate creation

Updated author information in the script and removed self-signed certificate generation.

---------

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-05-18 20:04:19 +02:00
community-scripts-pr-app[bot]
c33dd2ae39 Update CHANGELOG.md (#14569)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-18 18:02:29 +00:00
CanbiZ (MickLesk)
3a5f4454e6 Pangolin: bump to 1.18.4, fix missing statusHistory migration (#14566)
* feat(pangolin): bump to 1.18.4, fix missing statusHistory migration

* fix(pangolin): remove redundant msg_info in migration check
2026-05-18 20:01:55 +02:00
community-scripts-pr-app[bot]
c9d0196fee Update CHANGELOG.md (#14563)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-18 15:07:14 +00:00
push-app-to-main[bot]
404463be21 degoog (#14533)
* Add degoog (ct)

* Update degoog.sh

* fix

---------

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-05-18 17:06:40 +02:00
community-scripts-pr-app[bot]
5dc2b090d9 Update CHANGELOG.md (#14562)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-18 14:44:17 +00:00
Tom Frenzel
1c216fc582 Bichon: Support v1 migration (#14524) 2026-05-18 16:43:44 +02:00
community-scripts-pr-app[bot]
1e795835fc Update CHANGELOG.md (#14561)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-18 13:57:24 +00:00
community-scripts-pr-app[bot]
e234f411c7 Update CHANGELOG.md (#14560)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-18 13:53:31 +00:00
push-app-to-main[bot]
89025c9f28 Add webtrees (ct) (#14532)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-05-18 15:52:58 +02:00
community-scripts-pr-app[bot]
3b308af40a Update CHANGELOG.md (#14550)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-17 18:32:39 +00:00
Alicia Sykes
1a93de8674 dashy: fix yarn-missing on update and back up full user-data (#14548) 2026-05-17 20:32:12 +02:00
MickLesk
ebf755031b fix: set HOME=/root for rbenv installs to prevent path mismatch
When running in certain LXC environments (e.g. systems with desktop
packages or non-en locales), the HOME variable may resolve to '/'
instead of '/root'. rbenv installs to $HOME/.rbenv, so if HOME is
wrong it ends up in /.rbenv while all service files and PATH exports
hardcode /root/.rbenv, causing 'env: ruby: No such file or directory'.

Explicitly set HOME=/root for all setup_ruby calls that run as root,
and replace all $HOME/.rbenv references in PATH exports and install
steps with /root/.rbenv literals.

Affected scripts:
- ct/sure.sh + install/sure-install.sh (fixes #14479)
- ct/dawarich.sh + install/dawarich-install.sh
- ct/docuseal.sh + install/docuseal-install.sh

Also add TimeoutStartSec=300 to sure.service so db:prepare on first
start does not get killed by the default 90s systemd timeout.
2026-05-17 20:27:13 +02:00
community-scripts-pr-app[bot]
131a9d60f1 Update CHANGELOG.md (#14546)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-17 12:02:20 +00:00
CanbiZ (MickLesk)
f7a69ac92d tools.func: replace max-time with speed-limit stall detection in curl_download (#14545)
* tools.func: replace max-time with speed-limit stall detection in curl_download

* Refactor curl_download function for improved readability and remove unnecessary whitespace
2026-05-17 14:01:56 +02:00
community-scripts-pr-app[bot]
8f1c4a27a6 Update CHANGELOG.md (#14538)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-17 00:18:57 +00:00
community-scripts-pr-app[bot]
16cc639e1e Archive old changelog entries (#14537)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-17 00:18:35 +00:00
community-scripts-pr-app[bot]
168894e6a9 Update CHANGELOG.md (#14534)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-16 21:32:29 +00:00
CanbiZ (MickLesk)
2a86c7e54e Homelable: replace passlib with bcrypt for password hashing (#14530) 2026-05-16 23:32:05 +02:00
community-scripts-pr-app[bot]
f16db2d515 Update CHANGELOG.md (#14531)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-16 20:59:37 +00:00
Tobias
cf56af0834 dashy: fix restore (#14527) 2026-05-16 22:59:14 +02:00
community-scripts-pr-app[bot]
b05fd7889b Update CHANGELOG.md (#14519)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-16 10:03:46 +00:00
thieneret
369f901308 Update authentik version to 2026.2.3 (#14517) 2026-05-16 12:03:21 +02:00
community-scripts-pr-app[bot]
0d47f336b0 Update CHANGELOG.md (#14518)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-16 08:25:15 +00:00
Elie DELPIERRE
15377bb283 Update Tinyauth source URL in installation script (#14483)
* Update Tinyauth source URL in installation script

* fix(tinyauth): update Tinyauth repo in ct script

* fix(tinyauth-alpine): update repo

oops forgot the alpine script

---------

Co-authored-by: Sam Heinz <sam@samheinz.com>
2026-05-16 10:24:53 +02:00
community-scripts-pr-app[bot]
6f4cb4e9c9 Update CHANGELOG.md (#14514)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-16 03:33:33 +00:00
Slaviša Arežina
b707d6c05b Excalidraw: Fix build (#14509) 2026-05-16 13:33:11 +10:00
community-scripts-pr-app[bot]
1b285e9b6f Update CHANGELOG.md (#14508)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-15 22:46:15 +00:00
CanbiZ (MickLesk)
38b664fa85 Ollama/OpenWebUI: use fetch_and_deploy_gh_release and check_for_gh_release from tools.func (#14501) 2026-05-16 00:45:51 +02:00
community-scripts-pr-app[bot]
e8b9d40b92 Update CHANGELOG.md (#14507)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-15 22:45:34 +00:00
CanbiZ (MickLesk)
3b3ab1b8f9 OPNsense: replace undefined msg_warn with inline echo in alloc retry (#14500) 2026-05-16 00:45:10 +02:00
community-scripts-pr-app[bot]
6b60624b2d Update CHANGELOG.md (#14506)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-15 22:44:50 +00:00
CanbiZ (MickLesk)
df37781e9a SearXNG: enable JSON format by default for API integrations (#14498) 2026-05-16 00:44:47 +02:00
CanbiZ (MickLesk)
2448723d19 build.func: fall back to silent mode when no TTY or whiptail unavailable (#14497) 2026-05-16 00:44:27 +02:00
community-scripts-pr-app[bot]
cfd9a8132b Update CHANGELOG.md (#14505)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-15 22:44:10 +00:00
CanbiZ (MickLesk)
02f5589ff5 Checkmk: detect OMD version suffix dynamically on update (#14496) 2026-05-16 00:43:48 +02:00
community-scripts-pr-app[bot]
e68ea29996 Update CHANGELOG.md (#14485)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-14 18:19:03 +00:00
push-app-to-main[bot]
79926030ae CLIProxyAPI (#14443)
* Add cliproxyapi (ct)

* Fix success message capitalization in cliproxyapi.sh

* Update CLIProxyAPI installation script

Generate random management password and API key for CLIProxyAPI configuration.

---------

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-05-14 20:18:34 +02:00
community-scripts-pr-app[bot]
4fde0c0427 Update CHANGELOG.md (#14476)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-13 20:16:50 +00:00
CanbiZ (MickLesk)
0a81ff53fd tools.func: encode GitHub tag, refine pin logic, add Codeberg (#14473)
* Encode GitHub tag, refine pin logic, add Codeberg

Encode pinned GitHub tag slashes for API requests and avoid stripping a leading 'v' unless followed by a digit. Refactor pinned-version handling to match clean tags to raw tags, report missing pins, and set CHECK_UPDATE_RELEASE/messages appropriately. Add a new check_for_codeberg_release function to query Codeberg releases (uses jq, DNS check, handles legacy migration, pinned/latest comparison) so updates can be detected from Codeberg-hosted repos.

* Update tools.func
2026-05-13 22:16:13 +02:00
community-scripts-pr-app[bot]
cd5816b263 Update CHANGELOG.md (#14472)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-13 14:18:20 +00:00
Michel Roegl-Brunner
d18d473583 Fixes #14435, Broken Manifold update (#14468) 2026-05-13 16:17:37 +02:00
community-scripts-pr-app[bot]
af529716b1 Update CHANGELOG.md (#14467)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-13 11:04:07 +00:00
community-scripts-pr-app[bot]
2c950db3ac Update CHANGELOG.md (#14466)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-13 11:03:37 +00:00
Slaviša Arežina
904f0bdd3c fix update (#14465) 2026-05-13 13:03:26 +02:00
CanbiZ (MickLesk)
de08fc45d4 fix(reactive-resume): fix PDF generation timeout in LXC containers (#14278) (#14416)
Two changes to resolve Puppeteer waitForFunction timeout (5000ms exceeded):

1. Use 127.0.0.1 instead of localhost for PRINTER_ENDPOINT to avoid
   potential IPv6 resolution issues in LXC containers where 'localhost'
   may resolve to ::1 while Chromium only listens on 127.0.0.1.

2. Add --no-zygote flag to the chromium-printer service. In LXC
   containers the Zygote process (used by Chrome for process forking)
   can fail silently, causing Puppeteer page rendering to hang until
   the printer timeout is exceeded.
2026-05-13 13:03:09 +02:00
community-scripts-pr-app[bot]
9e009c1dfd Update CHANGELOG.md (#14464)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-13 09:28:53 +00:00
James Myatt
03ca1543d9 (calibre-web) Add --no-sandbox for PDF conversion (#14461) 2026-05-13 11:28:17 +02:00
community-scripts-pr-app[bot]
dd5ddb2b40 Update CHANGELOG.md (#14458)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-12 19:23:35 +00:00
push-app-to-main[bot]
34edee92b2 Add docuseal (ct) (#14445)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-05-12 21:23:07 +02:00
community-scripts-pr-app[bot]
355826a528 Update CHANGELOG.md (#14457)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-12 19:22:34 +00:00
push-app-to-main[bot]
a4bfe6a8e2 Authentik (#14440)
* Add authentik (ct)

* fix space

---------

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-05-12 21:22:07 +02:00
MickLesk
506c729667 Merge branch 'main' of https://github.com/community-scripts/ProxmoxVE 2026-05-12 21:19:52 +02:00
MickLesk
9aee7bcbf4 Update Nginx configuration management in termix.sh to remove old service files and restart Nginx 2026-05-12 21:19:49 +02:00
community-scripts-pr-app[bot]
251df84840 Update CHANGELOG.md (#14456)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-12 18:36:29 +00:00
Tobias
5a1053fe08 misc: bump node versions (#14447)
* excalidraw: bump node

* excalidraw: bump node

* termix: bump node

* termix: bump node

* trek: bump node

* trek: bump node

* wallabag: bump node

* wallabag: bump node

* wikijs: bump node

* wikijs: bump node
2026-05-12 20:35:59 +02:00
MickLesk
757acde352 Fix Nginx configuration and service management in termix-install.sh 2026-05-12 20:18:26 +02:00
CanbiZ (MickLesk)
1c7a925b31 termix hotfix nogroup 2026-05-12 19:39:09 +02:00
community-scripts-pr-app[bot]
ce12ac0f71 Update CHANGELOG.md (#14453)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-12 15:26:34 +00:00
community-scripts-pr-app[bot]
8d706791ea Update CHANGELOG.md (#14452)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-12 15:25:58 +00:00
Chris
3edaa3e3f2 OpenCloud: bump version to 6.2.0 (#14451) 2026-05-12 17:25:23 +02:00
115 changed files with 2309 additions and 541 deletions

125
.github/changelogs/2026/05.md generated vendored
View File

@@ -1,3 +1,128 @@
## 2026-05-16
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Homelable: replace passlib with bcrypt for password hashing [@MickLesk](https://github.com/MickLesk) ([#14530](https://github.com/community-scripts/ProxmoxVE/pull/14530))
- dashy: fix: restore [@CrazyWolf13](https://github.com/CrazyWolf13) ([#14527](https://github.com/community-scripts/ProxmoxVE/pull/14527))
- Update Tinyauth source URL in installation script [@MehrunesSky](https://github.com/MehrunesSky) ([#14483](https://github.com/community-scripts/ProxmoxVE/pull/14483))
- Excalidraw: Fix build [@tremor021](https://github.com/tremor021) ([#14509](https://github.com/community-scripts/ProxmoxVE/pull/14509))
- #### ✨ New Features
- Update authentik version to 2026.2.3 [@thieneret](https://github.com/thieneret) ([#14517](https://github.com/community-scripts/ProxmoxVE/pull/14517))
## 2026-05-15
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- OPNsense: replace undefined msg_warn with inline echo in alloc retry [@MickLesk](https://github.com/MickLesk) ([#14500](https://github.com/community-scripts/ProxmoxVE/pull/14500))
- Checkmk: detect OMD version suffix dynamically on update [@MickLesk](https://github.com/MickLesk) ([#14496](https://github.com/community-scripts/ProxmoxVE/pull/14496))
- #### ✨ New Features
- SearXNG: enable JSON format by default for API integrations [@MickLesk](https://github.com/MickLesk) ([#14498](https://github.com/community-scripts/ProxmoxVE/pull/14498))
- #### 🔧 Refactor
- Refactor: Ollama use tools.func [@MickLesk](https://github.com/MickLesk) ([#14501](https://github.com/community-scripts/ProxmoxVE/pull/14501))
### 💾 Core
- #### 🐞 Bug Fixes
- core: fall back to silent mode when no TTY or whiptail unavailable [@MickLesk](https://github.com/MickLesk) ([#14497](https://github.com/community-scripts/ProxmoxVE/pull/14497))
## 2026-05-14
### 🆕 New Scripts
- CLIProxyAPI ([#14443](https://github.com/community-scripts/ProxmoxVE/pull/14443))
## 2026-05-13
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fix: Broken Manifold update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#14468](https://github.com/community-scripts/ProxmoxVE/pull/14468))
- SoulSync: Fix update function [@tremor021](https://github.com/tremor021) ([#14465](https://github.com/community-scripts/ProxmoxVE/pull/14465))
- Reactive-Resume: fix PDF generation timeout in LXC containers [@MickLesk](https://github.com/MickLesk) ([#14416](https://github.com/community-scripts/ProxmoxVE/pull/14416))
- (calibre-web) Add --no-sandbox for PDF conversion [@jamesmyatt](https://github.com/jamesmyatt) ([#14461](https://github.com/community-scripts/ProxmoxVE/pull/14461))
### 💾 Core
- #### 🔧 Refactor
- tools.func: encode GitHub tag, refine pin logic, add Codeberg [@MickLesk](https://github.com/MickLesk) ([#14473](https://github.com/community-scripts/ProxmoxVE/pull/14473))
## 2026-05-12
### 🆕 New Scripts
- DocuSeal ([#14445](https://github.com/community-scripts/ProxmoxVE/pull/14445))
- Authentik ([#14440](https://github.com/community-scripts/ProxmoxVE/pull/14440))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Save Omada version [@lucacome](https://github.com/lucacome) ([#14433](https://github.com/community-scripts/ProxmoxVE/pull/14433))
- #### ✨ New Features
- OpenCloud: bump version to 6.2.0 [@vhsdream](https://github.com/vhsdream) ([#14451](https://github.com/community-scripts/ProxmoxVE/pull/14451))
- #### 🔧 Refactor
- misc: bump node versions [@CrazyWolf13](https://github.com/CrazyWolf13) ([#14447](https://github.com/community-scripts/ProxmoxVE/pull/14447))
## 2026-05-11
### 🆕 New Scripts
- Lychee ([#14424](https://github.com/community-scripts/ProxmoxVE/pull/14424))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Termix: fix nginx pid path and log paths on update (#) [@MickLesk](https://github.com/MickLesk) ([#14419](https://github.com/community-scripts/ProxmoxVE/pull/14419))
- Nginxproxymanager: restore NPM nginx.conf after OpenResty rebuid [@MickLesk](https://github.com/MickLesk) ([#14421](https://github.com/community-scripts/ProxmoxVE/pull/14421))
- #### 🔧 Refactor
- InvestBrain: add commented reverse proxy config hints to .env [@MickLesk](https://github.com/MickLesk) ([#14422](https://github.com/community-scripts/ProxmoxVE/pull/14422))
### 🧰 Tools
- #### 🐞 Bug Fixes
- Cronmaster: fix unexpected EOF in update_cronmaster script [@MickLesk](https://github.com/MickLesk) ([#14420](https://github.com/community-scripts/ProxmoxVE/pull/14420))
## 2026-05-10
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Save Beszel version [@lucacome](https://github.com/lucacome) ([#14389](https://github.com/community-scripts/ProxmoxVE/pull/14389))
- karakeep: Fix SERVER_VERSION update [@MickLesk](https://github.com/MickLesk) ([#14378](https://github.com/community-scripts/ProxmoxVE/pull/14378))
- inspIRCd: Fix service not autostarting [@tremor021](https://github.com/tremor021) ([#14368](https://github.com/community-scripts/ProxmoxVE/pull/14368))
- #### 🔧 Refactor
- refactor: webcheck [@CrazyWolf13](https://github.com/CrazyWolf13) ([#14391](https://github.com/community-scripts/ProxmoxVE/pull/14391))
### 💾 Core
- #### 🐞 Bug Fixes
- [tools.func]: Pin `pnpm` version [@tremor021](https://github.com/tremor021) ([#14386](https://github.com/community-scripts/ProxmoxVE/pull/14386))
## 2026-05-09 ## 2026-05-09
### 🚀 Updated Scripts ### 🚀 Updated Scripts

View File

@@ -50,6 +50,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
@@ -63,7 +66,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
<details> <details>
<summary><h4>May (9 entries)</h4></summary> <summary><h4>May (16 entries)</h4></summary>
[View May 2026 Changelog](.github/changelogs/2026/05.md) [View May 2026 Changelog](.github/changelogs/2026/05.md)
@@ -461,14 +464,174 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details> </details>
## 2026-05-22
### 💾 Core
- #### 🐞 Bug Fixes
- fix: make LXC banner OS detection dynamic via /etc/os-release [@atahan99](https://github.com/atahan99) ([#14269](https://github.com/community-scripts/ProxmoxVE/pull/14269))
## 2026-05-21
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- snowshare: use mv instead of cp for uploads backup to prevent disk fill [@TuroYT](https://github.com/TuroYT) ([#14558](https://github.com/community-scripts/ProxmoxVE/pull/14558))
- Technitium DNS: download release before stopping the service on update [@w-gitops](https://github.com/w-gitops) ([#14616](https://github.com/community-scripts/ProxmoxVE/pull/14616))
- #### ✨ New Features
- Proxmox VE 9.2 support [@MickLesk](https://github.com/MickLesk) ([#14624](https://github.com/community-scripts/ProxmoxVE/pull/14624))
## 2026-05-20
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Update mylar3 to point to new Repo [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#14606](https://github.com/community-scripts/ProxmoxVE/pull/14606))
- Ollama: Fix for latest version [@tremor021](https://github.com/tremor021) ([#14596](https://github.com/community-scripts/ProxmoxVE/pull/14596))
- #### ✨ New Features
- Profilarr v2: Update and Refactor whole Script [@MickLesk](https://github.com/MickLesk) ([#14584](https://github.com/community-scripts/ProxmoxVE/pull/14584))
## 2026-05-19
### 🆕 New Scripts
- LobeHub ([#14441](https://github.com/community-scripts/ProxmoxVE/pull/14441))
### 🚀 Updated Scripts
- Update nodejs Versions [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#14582](https://github.com/community-scripts/ProxmoxVE/pull/14582))
- #### 🐞 Bug Fixes
- ESPConnect: Fix paths to SSL certificates [@tremor021](https://github.com/tremor021) ([#14591](https://github.com/community-scripts/ProxmoxVE/pull/14591))
- ReactiveResume: set correct WorkingDirectory for systemd service [@MickLesk](https://github.com/MickLesk) ([#14579](https://github.com/community-scripts/ProxmoxVE/pull/14579))
- Sparkyfitness: add missing nginx template variable substitutions [@MickLesk](https://github.com/MickLesk) ([#14578](https://github.com/community-scripts/ProxmoxVE/pull/14578))
- Wanderer: include dev dependencies during build [@MickLesk](https://github.com/MickLesk) ([#14577](https://github.com/community-scripts/ProxmoxVE/pull/14577))
- Whisparr: switch from nightly to stable GitHub release [@MickLesk](https://github.com/MickLesk) ([#14581](https://github.com/community-scripts/ProxmoxVE/pull/14581))
- #### 🔧 Refactor
- Refactor: SonarQube [@tremor021](https://github.com/tremor021) ([#14594](https://github.com/community-scripts/ProxmoxVE/pull/14594))
## 2026-05-18
### 🆕 New Scripts
- ESPconnect ([#14444](https://github.com/community-scripts/ProxmoxVE/pull/14444))
- degoog ([#14533](https://github.com/community-scripts/ProxmoxVE/pull/14533))
- Webtrees ([#14532](https://github.com/community-scripts/ProxmoxVE/pull/14532))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Bichon: Support v1 migration [@tomfrenzel](https://github.com/tomfrenzel) ([#14524](https://github.com/community-scripts/ProxmoxVE/pull/14524))
- #### ✨ New Features
- Pangolin: bump to 1.18.4, fix missing statusHistory migration [@MickLesk](https://github.com/MickLesk) ([#14566](https://github.com/community-scripts/ProxmoxVE/pull/14566))
## 2026-05-17
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- dashy: fix yarn-missing on update and back up full user-data [@lissy93](https://github.com/lissy93) ([#14548](https://github.com/community-scripts/ProxmoxVE/pull/14548))
- #### ✨ New Features
- tools.func: replace max-time with speed-limit stall detection in curl_download [@MickLesk](https://github.com/MickLesk) ([#14545](https://github.com/community-scripts/ProxmoxVE/pull/14545))
## 2026-05-16
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Homelable: replace passlib with bcrypt for password hashing [@MickLesk](https://github.com/MickLesk) ([#14530](https://github.com/community-scripts/ProxmoxVE/pull/14530))
- dashy: fix: restore [@CrazyWolf13](https://github.com/CrazyWolf13) ([#14527](https://github.com/community-scripts/ProxmoxVE/pull/14527))
- Update Tinyauth source URL in installation script [@MehrunesSky](https://github.com/MehrunesSky) ([#14483](https://github.com/community-scripts/ProxmoxVE/pull/14483))
- Excalidraw: Fix build [@tremor021](https://github.com/tremor021) ([#14509](https://github.com/community-scripts/ProxmoxVE/pull/14509))
- #### ✨ New Features
- Update authentik version to 2026.2.3 [@thieneret](https://github.com/thieneret) ([#14517](https://github.com/community-scripts/ProxmoxVE/pull/14517))
## 2026-05-15
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- OPNsense: replace undefined msg_warn with inline echo in alloc retry [@MickLesk](https://github.com/MickLesk) ([#14500](https://github.com/community-scripts/ProxmoxVE/pull/14500))
- Checkmk: detect OMD version suffix dynamically on update [@MickLesk](https://github.com/MickLesk) ([#14496](https://github.com/community-scripts/ProxmoxVE/pull/14496))
- #### ✨ New Features
- SearXNG: enable JSON format by default for API integrations [@MickLesk](https://github.com/MickLesk) ([#14498](https://github.com/community-scripts/ProxmoxVE/pull/14498))
- #### 🔧 Refactor
- Refactor: Ollama use tools.func [@MickLesk](https://github.com/MickLesk) ([#14501](https://github.com/community-scripts/ProxmoxVE/pull/14501))
### 💾 Core
- #### 🐞 Bug Fixes
- core: fall back to silent mode when no TTY or whiptail unavailable [@MickLesk](https://github.com/MickLesk) ([#14497](https://github.com/community-scripts/ProxmoxVE/pull/14497))
## 2026-05-14
### 🆕 New Scripts
- CLIProxyAPI ([#14443](https://github.com/community-scripts/ProxmoxVE/pull/14443))
## 2026-05-13
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fix: Broken Manifold update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#14468](https://github.com/community-scripts/ProxmoxVE/pull/14468))
- SoulSync: Fix update function [@tremor021](https://github.com/tremor021) ([#14465](https://github.com/community-scripts/ProxmoxVE/pull/14465))
- Reactive-Resume: fix PDF generation timeout in LXC containers [@MickLesk](https://github.com/MickLesk) ([#14416](https://github.com/community-scripts/ProxmoxVE/pull/14416))
- (calibre-web) Add --no-sandbox for PDF conversion [@jamesmyatt](https://github.com/jamesmyatt) ([#14461](https://github.com/community-scripts/ProxmoxVE/pull/14461))
### 💾 Core
- #### 🔧 Refactor
- tools.func: encode GitHub tag, refine pin logic, add Codeberg [@MickLesk](https://github.com/MickLesk) ([#14473](https://github.com/community-scripts/ProxmoxVE/pull/14473))
## 2026-05-12 ## 2026-05-12
### 🆕 New Scripts
- DocuSeal ([#14445](https://github.com/community-scripts/ProxmoxVE/pull/14445))
- Authentik ([#14440](https://github.com/community-scripts/ProxmoxVE/pull/14440))
### 🚀 Updated Scripts ### 🚀 Updated Scripts
- #### 🐞 Bug Fixes - #### 🐞 Bug Fixes
- Save Omada version [@lucacome](https://github.com/lucacome) ([#14433](https://github.com/community-scripts/ProxmoxVE/pull/14433)) - Save Omada version [@lucacome](https://github.com/lucacome) ([#14433](https://github.com/community-scripts/ProxmoxVE/pull/14433))
- #### ✨ New Features
- OpenCloud: bump version to 6.2.0 [@vhsdream](https://github.com/vhsdream) ([#14451](https://github.com/community-scripts/ProxmoxVE/pull/14451))
- #### 🔧 Refactor
- misc: bump node versions [@CrazyWolf13](https://github.com/CrazyWolf13) ([#14447](https://github.com/community-scripts/ProxmoxVE/pull/14447))
## 2026-05-11 ## 2026-05-11
### 🆕 New Scripts ### 🆕 New Scripts
@@ -980,146 +1143,3 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### 🔧 Refactor - #### 🔧 Refactor
- core: fix some pct create issues (telemetry) + cleanup [@MickLesk](https://github.com/MickLesk) ([#13810](https://github.com/community-scripts/ProxmoxVE/pull/13810)) - core: fix some pct create issues (telemetry) + cleanup [@MickLesk](https://github.com/MickLesk) ([#13810](https://github.com/community-scripts/ProxmoxVE/pull/13810))
## 2026-04-16
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Add pnpm as a dependency to ghost-cli install [@YourFavoriteKyle](https://github.com/YourFavoriteKyle) ([#13789](https://github.com/community-scripts/ProxmoxVE/pull/13789))
### 💾 Core
- #### ✨ New Features
- core: wire ENABLE_MKNOD and ALLOW_MOUNT_FS into LXC features [@MickLesk](https://github.com/MickLesk) ([#13796](https://github.com/community-scripts/ProxmoxVE/pull/13796))
## 2026-04-15
### 🆕 New Scripts
- iGotify ([#13773](https://github.com/community-scripts/ProxmoxVE/pull/13773))
- GitHub-Runner ([#13709](https://github.com/community-scripts/ProxmoxVE/pull/13709))
- Revert "Remove low-install-count CT scripts and installers (#13570)" [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13752](https://github.com/community-scripts/ProxmoxVE/pull/13752))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- [alpine-nextcloud] Update Nginx MIME types to support .mjs files [@GuiltyFox](https://github.com/GuiltyFox) ([#13771](https://github.com/community-scripts/ProxmoxVE/pull/13771))
- Domain Monitor: Fix file ownership after update [@tremor021](https://github.com/tremor021) ([#13759](https://github.com/community-scripts/ProxmoxVE/pull/13759))
- #### 💥 Breaking Changes
- Reitti: refactor scripts for v4 - remove RabbitMQ and Photon [@MickLesk](https://github.com/MickLesk) ([#13728](https://github.com/community-scripts/ProxmoxVE/pull/13728))
- #### 🔧 Refactor
- Semaphore: add BoltDB to SQLite migration [@tremor021](https://github.com/tremor021) ([#13779](https://github.com/community-scripts/ProxmoxVE/pull/13779))
### 📚 Documentation
- cleanup: remove docs/, update README & CONTRIBUTING, fix repo config [@MickLesk](https://github.com/MickLesk) ([#13770](https://github.com/community-scripts/ProxmoxVE/pull/13770))
## 2026-04-14
### 🚀 Updated Scripts
- Immich: Pin photo-processing library revisions [@vhsdream](https://github.com/vhsdream) ([#13748](https://github.com/community-scripts/ProxmoxVE/pull/13748))
- #### 🐞 Bug Fixes
- BentoPDF: Nginx fixes [@tremor021](https://github.com/tremor021) ([#13741](https://github.com/community-scripts/ProxmoxVE/pull/13741))
- Zerobyte: add git to dependencies to fix bun install failure [@Copilot](https://github.com/Copilot) ([#13721](https://github.com/community-scripts/ProxmoxVE/pull/13721))
- alpine-nextcloud-install: do not use deprecated nginx config [@AlexanderStein](https://github.com/AlexanderStein) ([#13726](https://github.com/community-scripts/ProxmoxVE/pull/13726))
- #### ✨ New Features
- Mealie: support v3.15+ Nuxt 4 migration [@MickLesk](https://github.com/MickLesk) ([#13731](https://github.com/community-scripts/ProxmoxVE/pull/13731))
- #### 🔧 Refactor
- Lyrion: correct service name and version file in update script [@MickLesk](https://github.com/MickLesk) ([#13734](https://github.com/community-scripts/ProxmoxVE/pull/13734))
- Changedetection: move env vars from service file to .env [@tremor021](https://github.com/tremor021) ([#13732](https://github.com/community-scripts/ProxmoxVE/pull/13732))
## 2026-04-13
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Slskd: Remove stale Soularr lock file on startup and redirect logs to stderr [@MickLesk](https://github.com/MickLesk) ([#13669](https://github.com/community-scripts/ProxmoxVE/pull/13669))
- Bambuddy: preserve database and archive on update [@Copilot](https://github.com/Copilot) ([#13706](https://github.com/community-scripts/ProxmoxVE/pull/13706))
- #### ✨ New Features
- Immich: Pin version to 2.7.5 [@vhsdream](https://github.com/vhsdream) ([#13715](https://github.com/community-scripts/ProxmoxVE/pull/13715))
- Bytestash: auto backup/restore data on update [@MickLesk](https://github.com/MickLesk) ([#13707](https://github.com/community-scripts/ProxmoxVE/pull/13707))
- OpenCloud: pin version to 6.0.0 [@vhsdream](https://github.com/vhsdream) ([#13691](https://github.com/community-scripts/ProxmoxVE/pull/13691))
- #### 💥 Breaking Changes
- Mealie: pin version to v3.14.0 in install and update scripts [@Copilot](https://github.com/Copilot) ([#13724](https://github.com/community-scripts/ProxmoxVE/pull/13724))
- #### 🔧 Refactor
- core: remove unused TEMP_DIR mktemp leak in build_container / clean sonarqube [@MickLesk](https://github.com/MickLesk) ([#13708](https://github.com/community-scripts/ProxmoxVE/pull/13708))
## 2026-04-12
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Alpine-Wakapi: Remove container checks in update_script function [@MickLesk](https://github.com/MickLesk) ([#13694](https://github.com/community-scripts/ProxmoxVE/pull/13694))
- #### 🔧 Refactor
- IronClaw: Install keychain dependencies and launch in a DBus session [@MickLesk](https://github.com/MickLesk) ([#13692](https://github.com/community-scripts/ProxmoxVE/pull/13692))
- MeTube: Allow pnpm build scripts to fix ERR_PNPM_IGNORED_BUILDS [@MickLesk](https://github.com/MickLesk) ([#13668](https://github.com/community-scripts/ProxmoxVE/pull/13668))
## 2026-04-11
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: Ensure newline before appending IMMICH_HELMET_FILE to .env [@MickLesk](https://github.com/MickLesk) ([#13667](https://github.com/community-scripts/ProxmoxVE/pull/13667))
- #### ✨ New Features
- BentoPDF: replace http-server with nginx to fix WASM initialization timeout [@MickLesk](https://github.com/MickLesk) ([#13625](https://github.com/community-scripts/ProxmoxVE/pull/13625))
- Element Synapse: Add MatrixRTC configuration for Element Call support [@MickLesk](https://github.com/MickLesk) ([#13665](https://github.com/community-scripts/ProxmoxVE/pull/13665))
- RomM: Use ROMM_BASE_PATH from .env for symlinks and nginx config [@MickLesk](https://github.com/MickLesk) ([#13666](https://github.com/community-scripts/ProxmoxVE/pull/13666))
- Immich: Pin version to 2.7.4 [@vhsdream](https://github.com/vhsdream) ([#13661](https://github.com/community-scripts/ProxmoxVE/pull/13661))
- #### 🔧 Refactor
- Crafty Controller: Wait for credentials file instead of fixed sleep [@MickLesk](https://github.com/MickLesk) ([#13670](https://github.com/community-scripts/ProxmoxVE/pull/13670))
- Refactor: Alpine-Wakapi [@tremor021](https://github.com/tremor021) ([#13656](https://github.com/community-scripts/ProxmoxVE/pull/13656))
## 2026-04-10
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix: ensure trailing newline in redis.conf before appending bind directive [@Copilot](https://github.com/Copilot) ([#13647](https://github.com/community-scripts/ProxmoxVE/pull/13647))
- #### ✨ New Features
- Immich: Pin version to 2.7.3 [@vhsdream](https://github.com/vhsdream) ([#13631](https://github.com/community-scripts/ProxmoxVE/pull/13631))
- Homarr: bind Redis to localhost only [@MickLesk](https://github.com/MickLesk) ([#13552](https://github.com/community-scripts/ProxmoxVE/pull/13552))
### 💾 Core
- #### 🐞 Bug Fixes
- tools.func: prevent script crash when entering GitHub token after rate limit [@MickLesk](https://github.com/MickLesk) ([#13638](https://github.com/community-scripts/ProxmoxVE/pull/13638))
### 🧰 Tools
- #### 🔧 Refactor
- addons: Filebrowser & Filebrowser-Quantum get warning if host install [@MickLesk](https://github.com/MickLesk) ([#13639](https://github.com/community-scripts/ProxmoxVE/pull/13639))

View File

@@ -30,7 +30,7 @@ The collection covers hundreds of services across categories like home automatio
| Component | Details | | Component | Details |
| -------------- | ------------------------------------------------ | | -------------- | ------------------------------------------------ |
| **Proxmox VE** | Version 8.4, 9.0, or 9.1 | | **Proxmox VE** | Version 8.4, 9.0, 9.1, or 9.2 |
| **Host OS** | Proxmox VE (Debian-based) | | **Host OS** | Proxmox VE (Debian-based) |
| **Access** | Root shell access on the Proxmox host | | **Access** | Root shell access on the Proxmox host |
| **Network** | Internet connection required during installation | | **Network** | Internet connection required during installation |

View File

@@ -6,6 +6,7 @@ This project currently supports the following versions of Proxmox VE (PVE):
| Version | Supported | | Version | Supported |
| ------- | ------------------ | | ------- | ------------------ |
| 9.2.x | :white_check_mark: |
| 9.1.x | :white_check_mark: | | 9.1.x | :white_check_mark: |
| 9.0.x | :white_check_mark: | | 9.0.x | :white_check_mark: |
| 8.4.x | :white_check_mark: | | 8.4.x | :white_check_mark: |

View File

@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Copyright (c) 2021-2026 community-scripts ORG # Copyright (c) 2021-2026 community-scripts ORG
# Author: Slaviša Arežina (tremor021) | Co-Author: Stavros (steveiliop56) # Author: Slaviša Arežina (tremor021) | Co-Author: Stavros (steveiliop56)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/steveiliop56/tinyauth # Source: https://github.com/tinyauthapp/tinyauth
APP="Alpine-Tinyauth" APP="Alpine-Tinyauth"
var_tags="${var_tags:-alpine;auth}" var_tags="${var_tags:-alpine;auth}"
@@ -29,7 +29,7 @@ function update_script() {
$STD apk -U upgrade $STD apk -U upgrade
msg_ok "Updated packages" msg_ok "Updated packages"
RELEASE=$(curl -s https://api.github.com/repos/steveiliop56/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -s https://api.github.com/repos/tinyauthapp/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat ~/.tinyauth 2>/dev/null)" ] || [ ! -f ~/.tinyauth ]; then if [ "${RELEASE}" != "$(cat ~/.tinyauth 2>/dev/null)" ] || [ ! -f ~/.tinyauth ]; then
msg_info "Stopping Service" msg_info "Stopping Service"
$STD service tinyauth stop $STD service tinyauth stop
@@ -51,7 +51,7 @@ function update_script() {
msg_info "Updating Tinyauth" msg_info "Updating Tinyauth"
rm -f /opt/tinyauth/tinyauth rm -f /opt/tinyauth/tinyauth
curl -fsSL "https://github.com/steveiliop56/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth curl -fsSL "https://github.com/tinyauthapp/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth
chmod +x /opt/tinyauth/tinyauth chmod +x /opt/tinyauth/tinyauth
echo "${RELEASE}" >~/.tinyauth echo "${RELEASE}" >~/.tinyauth
msg_ok "Updated Tinyauth" msg_ok "Updated Tinyauth"

View File

@@ -89,7 +89,7 @@ function update_script() {
# Auth JDBC follows server version # Auth JDBC follows server version
msg_info "Updating Guacamole Auth JDBC" msg_info "Updating Guacamole Auth JDBC"
rm -f /etc/guacamole/extensions/guacamole-auth-jdbc-mysql-*.jar rm -f /etc/guacamole/extensions/guacamole-auth-jdbc-mysql-*.jar
curl -fsSL "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-jdbc-${LATEST_SERVER}.tar.gz" -o "/tmp/guacamole-auth-jdbc.tar.gz" curl_download "/tmp/guacamole-auth-jdbc.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-jdbc-${LATEST_SERVER}.tar.gz"
$STD tar -xf /tmp/guacamole-auth-jdbc.tar.gz -C /tmp $STD tar -xf /tmp/guacamole-auth-jdbc.tar.gz -C /tmp
mv /tmp/guacamole-auth-jdbc-"${LATEST_SERVER}"/mysql/guacamole-auth-jdbc-mysql-"${LATEST_SERVER}".jar /etc/guacamole/extensions/ mv /tmp/guacamole-auth-jdbc-"${LATEST_SERVER}"/mysql/guacamole-auth-jdbc-mysql-"${LATEST_SERVER}".jar /etc/guacamole/extensions/
echo "${LATEST_SERVER}" >~/.guacamole_auth_jdbc echo "${LATEST_SERVER}" >~/.guacamole_auth_jdbc
@@ -101,7 +101,7 @@ function update_script() {
# Update Guacamole Client # Update Guacamole Client
if [[ "$CURRENT_CLIENT" != "$LATEST_CLIENT" ]]; then if [[ "$CURRENT_CLIENT" != "$LATEST_CLIENT" ]]; then
msg_info "Updating Guacamole Client (${CURRENT_CLIENT}${LATEST_CLIENT})" msg_info "Updating Guacamole Client (${CURRENT_CLIENT}${LATEST_CLIENT})"
curl -fsSL "https://downloads.apache.org/guacamole/${LATEST_CLIENT}/binary/guacamole-${LATEST_CLIENT}.war" -o "/opt/apache-guacamole/tomcat9/webapps/guacamole.war" curl_download "/opt/apache-guacamole/tomcat9/webapps/guacamole.war" "https://downloads.apache.org/guacamole/${LATEST_CLIENT}/binary/guacamole-${LATEST_CLIENT}.war"
echo "${LATEST_CLIENT}" >~/.guacamole_client echo "${LATEST_CLIENT}" >~/.guacamole_client
msg_ok "Updated Guacamole Client" msg_ok "Updated Guacamole Client"
else else
@@ -111,7 +111,7 @@ function update_script() {
# Update MySQL Connector # Update MySQL Connector
if [[ "$CURRENT_MYSQL_CONNECTOR" != "$LATEST_MYSQL_CONNECTOR" ]]; then if [[ "$CURRENT_MYSQL_CONNECTOR" != "$LATEST_MYSQL_CONNECTOR" ]]; then
msg_info "Updating MySQL Connector (${CURRENT_MYSQL_CONNECTOR}${LATEST_MYSQL_CONNECTOR})" msg_info "Updating MySQL Connector (${CURRENT_MYSQL_CONNECTOR}${LATEST_MYSQL_CONNECTOR})"
curl -fsSL "https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/${LATEST_MYSQL_CONNECTOR}/mysql-connector-j-${LATEST_MYSQL_CONNECTOR}.jar" -o "/etc/guacamole/lib/mysql-connector-j.jar" curl_download "/etc/guacamole/lib/mysql-connector-j.jar" "https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/${LATEST_MYSQL_CONNECTOR}/mysql-connector-j-${LATEST_MYSQL_CONNECTOR}.jar"
echo "${LATEST_MYSQL_CONNECTOR}" >~/.guacamole_mysql_connector echo "${LATEST_MYSQL_CONNECTOR}" >~/.guacamole_mysql_connector
msg_ok "Updated MySQL Connector" msg_ok "Updated MySQL Connector"
else else
@@ -148,7 +148,7 @@ function update_script() {
if [[ -f /etc/guacamole/extensions/guacamole-auth-totp-*.jar ]]; then if [[ -f /etc/guacamole/extensions/guacamole-auth-totp-*.jar ]]; then
msg_info "Updating TOTP Extension" msg_info "Updating TOTP Extension"
rm -f /etc/guacamole/extensions/guacamole-auth-totp-*.jar rm -f /etc/guacamole/extensions/guacamole-auth-totp-*.jar
curl -fsSL "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-totp-${LATEST_SERVER}.tar.gz" -o "/tmp/guacamole-auth-totp.tar.gz" curl_download "/tmp/guacamole-auth-totp.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-totp-${LATEST_SERVER}.tar.gz"
$STD tar -xf /tmp/guacamole-auth-totp.tar.gz -C /tmp $STD tar -xf /tmp/guacamole-auth-totp.tar.gz -C /tmp
mv /tmp/guacamole-auth-totp-"${LATEST_SERVER}"/guacamole-auth-totp-"${LATEST_SERVER}".jar /etc/guacamole/extensions/ mv /tmp/guacamole-auth-totp-"${LATEST_SERVER}"/guacamole-auth-totp-"${LATEST_SERVER}".jar /etc/guacamole/extensions/
chmod 664 /etc/guacamole/extensions/guacamole-auth-totp-"${LATEST_SERVER}".jar chmod 664 /etc/guacamole/extensions/guacamole-auth-totp-"${LATEST_SERVER}".jar
@@ -160,7 +160,7 @@ function update_script() {
if [[ -f /etc/guacamole/extensions/guacamole-auth-duo-*.jar ]]; then if [[ -f /etc/guacamole/extensions/guacamole-auth-duo-*.jar ]]; then
msg_info "Updating DUO Extension" msg_info "Updating DUO Extension"
rm -f /etc/guacamole/extensions/guacamole-auth-duo-*.jar rm -f /etc/guacamole/extensions/guacamole-auth-duo-*.jar
curl -fsSL "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-duo-${LATEST_SERVER}.tar.gz" -o "/tmp/guacamole-auth-duo.tar.gz" curl_download "/tmp/guacamole-auth-duo.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-duo-${LATEST_SERVER}.tar.gz"
$STD tar -xf /tmp/guacamole-auth-duo.tar.gz -C /tmp $STD tar -xf /tmp/guacamole-auth-duo.tar.gz -C /tmp
mv /tmp/guacamole-auth-duo-"${LATEST_SERVER}"/guacamole-auth-duo-"${LATEST_SERVER}".jar /etc/guacamole/extensions/ mv /tmp/guacamole-auth-duo-"${LATEST_SERVER}"/guacamole-auth-duo-"${LATEST_SERVER}".jar /etc/guacamole/extensions/
chmod 664 /etc/guacamole/extensions/guacamole-auth-duo-"${LATEST_SERVER}".jar chmod 664 /etc/guacamole/extensions/guacamole-auth-duo-"${LATEST_SERVER}".jar
@@ -172,7 +172,7 @@ function update_script() {
if [[ -f /etc/guacamole/extensions/guacamole-auth-ldap-*.jar ]]; then if [[ -f /etc/guacamole/extensions/guacamole-auth-ldap-*.jar ]]; then
msg_info "Updating LDAP Extension" msg_info "Updating LDAP Extension"
rm -f /etc/guacamole/extensions/guacamole-auth-ldap-*.jar rm -f /etc/guacamole/extensions/guacamole-auth-ldap-*.jar
curl -fsSL "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-ldap-${LATEST_SERVER}.tar.gz" -o "/tmp/guacamole-auth-ldap.tar.gz" curl_download "/tmp/guacamole-auth-ldap.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-ldap-${LATEST_SERVER}.tar.gz"
$STD tar -xf /tmp/guacamole-auth-ldap.tar.gz -C /tmp $STD tar -xf /tmp/guacamole-auth-ldap.tar.gz -C /tmp
mv /tmp/guacamole-auth-ldap-"${LATEST_SERVER}"/guacamole-auth-ldap-"${LATEST_SERVER}".jar /etc/guacamole/extensions/ mv /tmp/guacamole-auth-ldap-"${LATEST_SERVER}"/guacamole-auth-ldap-"${LATEST_SERVER}".jar /etc/guacamole/extensions/
chmod 664 /etc/guacamole/extensions/guacamole-auth-ldap-"${LATEST_SERVER}".jar chmod 664 /etc/guacamole/extensions/guacamole-auth-ldap-"${LATEST_SERVER}".jar
@@ -184,7 +184,7 @@ function update_script() {
if [[ -f /etc/guacamole/extensions/guacamole-auth-quickconnect-*.jar ]]; then if [[ -f /etc/guacamole/extensions/guacamole-auth-quickconnect-*.jar ]]; then
msg_info "Updating Quick Connect Extension" msg_info "Updating Quick Connect Extension"
rm -f /etc/guacamole/extensions/guacamole-auth-quickconnect-*.jar rm -f /etc/guacamole/extensions/guacamole-auth-quickconnect-*.jar
curl -fsSL "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-quickconnect-${LATEST_SERVER}.tar.gz" -o "/tmp/guacamole-auth-quickconnect.tar.gz" curl_download "/tmp/guacamole-auth-quickconnect.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-quickconnect-${LATEST_SERVER}.tar.gz"
$STD tar -xf /tmp/guacamole-auth-quickconnect.tar.gz -C /tmp $STD tar -xf /tmp/guacamole-auth-quickconnect.tar.gz -C /tmp
mv /tmp/guacamole-auth-quickconnect-"${LATEST_SERVER}"/guacamole-auth-quickconnect-"${LATEST_SERVER}".jar /etc/guacamole/extensions/ mv /tmp/guacamole-auth-quickconnect-"${LATEST_SERVER}"/guacamole-auth-quickconnect-"${LATEST_SERVER}".jar /etc/guacamole/extensions/
chmod 664 /etc/guacamole/extensions/guacamole-auth-quickconnect-"${LATEST_SERVER}".jar chmod 664 /etc/guacamole/extensions/guacamole-auth-quickconnect-"${LATEST_SERVER}".jar
@@ -196,7 +196,7 @@ function update_script() {
if [[ -f /etc/guacamole/extensions/guacamole-history-recording-storage-*.jar ]]; then if [[ -f /etc/guacamole/extensions/guacamole-history-recording-storage-*.jar ]]; then
msg_info "Updating History Recording Storage Extension" msg_info "Updating History Recording Storage Extension"
rm -f /etc/guacamole/extensions/guacamole-history-recording-storage-*.jar rm -f /etc/guacamole/extensions/guacamole-history-recording-storage-*.jar
curl -fsSL "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-history-recording-storage-${LATEST_SERVER}.tar.gz" -o "/tmp/guacamole-history-recording-storage.tar.gz" curl_download "/tmp/guacamole-history-recording-storage.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-history-recording-storage-${LATEST_SERVER}.tar.gz"
$STD tar -xf /tmp/guacamole-history-recording-storage.tar.gz -C /tmp $STD tar -xf /tmp/guacamole-history-recording-storage.tar.gz -C /tmp
mv /tmp/guacamole-history-recording-storage-"${LATEST_SERVER}"/guacamole-history-recording-storage-"${LATEST_SERVER}".jar /etc/guacamole/extensions/ mv /tmp/guacamole-history-recording-storage-"${LATEST_SERVER}"/guacamole-history-recording-storage-"${LATEST_SERVER}".jar /etc/guacamole/extensions/
chmod 664 /etc/guacamole/extensions/guacamole-history-recording-storage-"${LATEST_SERVER}".jar chmod 664 /etc/guacamole/extensions/guacamole-history-recording-storage-"${LATEST_SERVER}".jar

155
ct/authentik.sh Normal file
View File

@@ -0,0 +1,155 @@
#!/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: Thieneret
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/goauthentik/authentik
APP="authentik"
var_tags="${var_tags:-auth}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-16}"
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/authentik ]]; then
msg_error "No authentik Installation Found!"
exit
fi
NODE_VERSION="24" setup_nodejs
setup_go
UV_PYTHON_INSTALL_DIR="/usr/local/bin" PYTHON_VERSION="3.14.3" setup_uv
setup_rust
AUTHENTIK_VERSION="version/2026.2.3"
XMLSEC_VERSION="1.3.11"
if check_for_gh_release "geoipupdate" "maxmind/geoipupdate"; then
fetch_and_deploy_gh_release "geoipupdate" "maxmind/geoipupdate" "binary"
fi
if check_for_gh_release "xmlsec" "lsh123/xmlsec" "${XMLSEC_VERSION}"; then
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "xmlsec" "lsh123/xmlsec" "tarball" "${XMLSEC_VERSION}" "/opt/xmlsec"
msg_info "Updating xmlsec"
cd /opt/xmlsec
$STD ./autogen.sh
$STD make -j $(nproc)
$STD make check
$STD make install
$STD ldconfig
msg_ok "Updated xmlsec"
fi
if check_for_gh_release "authentik" "goauthentik/authentik" "${AUTHENTIK_VERSION}"; then
msg_info "Stopping Services"
systemctl stop authentik-server authentik-worker
if [[ $(systemctl is-active authentik-ldap) == active ]]; then
systemctl stop authentik-ldap
fi
if [[ $(systemctl is-active authentik-rac) == active ]]; then
systemctl stop authentik-rac
fi
if [[ $(systemctl is-active authentik-radius) == active ]]; then
systemctl stop authentik-radius
fi
msg_ok "Stopped Services"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "authentik" "goauthentik/authentik" "tarball" "${AUTHENTIK_VERSION}" "/opt/authentik"
msg_info "Updating web"
cd /opt/authentik/web
export NODE_ENV="production"
$STD npm install
$STD npm run build
$STD npm run build:sfe
msg_ok "Updated web"
msg_info "Updating go proxy"
cd /opt/authentik
export CGO_ENABLED="1"
$STD go mod download
$STD go build -o /opt/authentik/authentik-server ./cmd/server
$STD go build -o /opt/authentik/ldap ./cmd/ldap
$STD go build -o /opt/authentik/rac ./cmd/rac
$STD go build -o /opt/authentik/radius ./cmd/radius
msg_ok "Updated go proxy"
msg_info "Updating python server"
export UV_NO_BINARY_PACKAGE="cryptography lxml python-kadmin-rs xmlsec"
export UV_COMPILE_BYTECODE="1"
export UV_LINK_MODE="copy"
export UV_NATIVE_TLS="1"
export RUSTUP_PERMIT_COPY_RENAME="true"
export UV_PYTHON_INSTALL_DIR="/usr/local/bin"
cd /opt/authentik
$STD uv sync --frozen --no-install-project --no-dev
chown -R authentik:authentik /opt/authentik
msg_ok "Updated python server"
fi
msg_info "Starting Services"
systemctl start authentik-server authentik-worker
if [[ $(systemctl is-enabled authentik-ldap) == enabled ]]; then
systemctl start authentik-ldap
fi
if [[ $(systemctl is-enabled authentik-rac) == enabled ]]; then
systemctl start authentik-rac
fi
if [[ $(systemctl is-enabled authentik-radius) == enabled ]]; then
systemctl start authentik-radius
fi
msg_ok "Started Services"
msg_ok "Updated successfully!"
exit
}
start
build_container
msg_info "Attaching data storage volume"
$STD pct stop "$CTID"
if [ "${PROTECT_CT:-}" == "1" ] || [ "${PROTECT_CT:-}" == "yes" ]; then
$STD pct set "$CTID" --protection 0
$STD pct set "$CTID" -mp0 "${CONTAINER_STORAGE}":1,mp=/opt/authentik-data,backup=1
$STD pct set "$CTID" --protection 1
else
$STD pct set "$CTID" -mp0 "${CONTAINER_STORAGE}":1,mp=/opt/authentik-data,backup=1
fi
$STD pct start "$CTID"
for i in {1..10}; do
pct status "$CTID" | grep -q "status: running" && break
sleep 1
done
$STD pct exec "$CTID" -- bash -c "mkdir -p /opt/authentik-data/{certs,media,geoip,templates}; \
cp /opt/authentik/tests/GeoLite2-ASN-Test.mmdb /opt/authentik-data/geoip/GeoLite2-ASN.mmdb; \
cp /opt/authentik/tests/GeoLite2-City-Test.mmdb /opt/authentik-data/geoip/GeoLite2-City.mmdb; \
chown authentik:authentik /opt/authentik-data; \
chown -R authentik:authentik /opt/authentik-data/{certs,media,geoip,templates}"
msg_ok "Attached data storage volume"
msg_info "Starting Services"
pct exec "$CTID" -- systemctl enable -q --now authentik-server authentik-worker
msg_ok "Started Services"
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Initial setup URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000/if/flow/initial-setup/${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"

View File

@@ -28,15 +28,95 @@ function update_script() {
exit exit
fi fi
CURRENT_VERSION="unknown"
if [[ -f /root/.bichon ]]; then
CURRENT_VERSION=$(cat /root/.bichon)
fi
MIGRATE_V1=0
if [[ "$CURRENT_VERSION" == 0.* ]]; then
MIGRATE_V1=1
DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$DISK_USAGE" -gt 50 ]; then
echo -e "\n${RD}Warning: Less than 50% free storage remaining on the root disk.${CL}"
echo -e "${RD}Bichon v1 data migration temporarily duplicates data and requires free space for it.${CL}"
read -r -p "Are you sure you want to proceed with the update? (y/N): " proceed
if [[ ! "$proceed" =~ ^[Yy]$ ]]; then
msg_error "Update cancelled by user."
exit
fi
fi
RAM_TOTAL=$(free -m | awk '/^Mem:/{print $2}')
if [ "$RAM_TOTAL" -lt 2000 ]; then
echo -e "\n${RD}Warning: LXC has less than 2GB of RAM allocated (${RAM_TOTAL}MB).${CL}"
echo -e "${RD}Bichon v1 data migration consumes significant memory and may crash if insufficient.${CL}"
read -r -p "Are you sure you want to proceed with the update? (y/N): " proceed_ram
if [[ ! "$proceed_ram" =~ ^[Yy]$ ]]; then
msg_error "Update cancelled by user."
exit
fi
fi
fi
if check_for_gh_release "bichon" "rustmailer/bichon"; then if check_for_gh_release "bichon" "rustmailer/bichon"; then
msg_info "Stopping service" msg_info "Stopping service"
systemctl stop bichon systemctl stop bichon
msg_ok "Stopped service" msg_ok "Stopped service"
cp /opt/bichon/bichon.env /tmp/bichon.env.backup cp /opt/bichon/bichon.env /tmp/bichon.env.backup
if [ "$MIGRATE_V1" -eq 1 ] && [ "$CURRENT_VERSION" != "0.3.7" ]; then
msg_info "Updating to intermediate version v0.3.7"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bichon" "rustmailer/bichon" "prebuild" "v0.3.7" "/opt/bichon" "bichon-*-x86_64-unknown-linux-gnu.tar.gz"
cp /tmp/bichon.env.backup /opt/bichon/bichon.env
systemctl start bichon
sleep 30
systemctl stop bichon
msg_ok "Intermediate update completed"
fi
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bichon" "rustmailer/bichon" "prebuild" "latest" "/opt/bichon" "bichon-*-x86_64-unknown-linux-gnu.tar.gz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bichon" "rustmailer/bichon" "prebuild" "latest" "/opt/bichon" "bichon-*-x86_64-unknown-linux-gnu.tar.gz"
cp /tmp/bichon.env.backup /opt/bichon/bichon.env cp /tmp/bichon.env.backup /opt/bichon/bichon.env
if [ "$MIGRATE_V1" -eq 1 ]; then
msg_info "Running Bichon v1 Data Migration (patience)"
$STD apt install -y expect
$STD expect <<'EOF'
set timeout -1
spawn /opt/bichon/bichon-admin
expect "*Select an operation*"
send "\033\[B\r"
expect "*--bichon-root-dir*"
send "/opt/bichon-data\r"
expect "*--bichon-index-dir*"
send "\r"
expect "*--bichon-data-dir*"
send "\r"
expect "*Ready to migrate?*"
send "y"
expect "*Enter batch size*"
send "1000\r"
expect eof
catch wait
EOF
$STD apt remove --purge expect -y
$STD apt autoremove -y
msg_ok "Migration completed"
msg_info "Cleaning up legacy Bichon v0.x storage files"
rm -rf /opt/bichon-data/envelope
rm -rf /opt/bichon-data/eml
rm -f /opt/bichon-data/mailbox.db
rm -f /opt/bichon-data/meta.db
msg_ok "Cleanup completed"
msg_info "Updating Bichon service for v1"
sed -i 's|ExecStart=/opt/bichon/bichon|ExecStart=/opt/bichon/bichon-server|g; s|RestartSec=5|RestartSec=5\n\nLimitNOFILE=65536|g' /etc/systemd/system/bichon.service
systemctl daemon-reload
msg_ok "Service updated"
fi
msg_info "Starting service" msg_info "Starting service"
systemctl start bichon systemctl start bichon
msg_ok "Service started" msg_ok "Service started"

View File

@@ -33,9 +33,14 @@ function update_script() {
msg_info "Updating checkmk" msg_info "Updating checkmk"
$STD omd stop monitoring $STD omd stop monitoring
$STD omd cp monitoring monitoringbackup $STD omd cp monitoring monitoringbackup
curl_with_retry "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-community-${RELEASE}_0.$(get_os_info codename)_amd64.deb" "/opt/checkmk.deb" curl_download "/opt/checkmk.deb" "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-community-${RELEASE}_0.$(get_os_info codename)_amd64.deb"
$STD apt install -y /opt/checkmk.deb $STD apt install -y /opt/checkmk.deb
$STD omd --force -V ${RELEASE}.cre update --conflict=install monitoring OMD_VERSION=$(omd versions 2>/dev/null | grep "^${RELEASE}" | awk '{print $1}')
if [[ -z "${OMD_VERSION}" ]]; then
msg_error "Could not find installed OMD version for release ${RELEASE}"
exit 1
fi
$STD omd --force -V "${OMD_VERSION}" update --conflict=install monitoring
$STD omd start monitoring $STD omd start monitoring
$STD omd -f rm monitoringbackup $STD omd -f rm monitoringbackup
$STD omd cleanup $STD omd cleanup

55
ct/cliproxyapi.sh Normal file
View File

@@ -0,0 +1,55 @@
#!/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: mathiasnagler
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/router-for-me/CLIProxyAPI
APP="CLIProxyAPI"
var_tags="${var_tags:-ai;proxy}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
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/cliproxyapi ]]; then
msg_error "No CLIProxyAPI Installation Found!"
exit
fi
if check_for_gh_release "cliproxyapi" "router-for-me/CLIProxyAPI"; then
msg_info "Stopping CLIProxyAPI"
systemctl stop cliproxyapi
msg_ok "Stopped CLIProxyAPI"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cliproxyapi" "router-for-me/CLIProxyAPI" "prebuild" "latest" "/opt/cliproxyapi" "CLIProxyAPI_*_linux_amd64.tar.gz"
msg_info "Starting CLIProxyAPI"
systemctl start cliproxyapi
msg_ok "Started CLIProxyAPI"
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}:8317${CL}"

View File

@@ -23,37 +23,34 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /opt/dashy/public/ ]]; then if [[ ! -d /opt/dashy ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs
if check_for_gh_release "dashy" "Lissy93/dashy"; then if check_for_gh_release "dashy" "Lissy93/dashy"; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop dashy systemctl stop dashy
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up conf.yml" msg_info "Backing up user-data"
if [[ -f /opt/dashy/public/conf.yml ]]; then rm -rf /opt/dashy_user_data_backup
cp -R /opt/dashy/public/conf.yml /opt/dashy_conf_backup.yml cp -r /opt/dashy/user-data /opt/dashy_user_data_backup
else msg_ok "Backed up user-data"
cp -R /opt/dashy/user-data/conf.yml /opt/dashy_conf_backup.yml
fi
msg_ok "Backed up conf.yml"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dashy" "Lissy93/dashy" "prebuild" "latest" "/opt/dashy" "dashy-*.tar.gz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dashy" "lissy93/dashy" "prebuild" "latest" "/opt/dashy" "dashy-*.tar.gz"
msg_info "Updating Dashy" msg_info "Updating Dashy"
cd /opt/dashy cd /opt/dashy
$STD yarn install --ignore-engines --network-timeout 300000 $STD yarn install --ignore-engines --network-timeout 300000
msg_ok "Updated Dashy" msg_ok "Updated Dashy"
msg_info "Restoring conf.yml" msg_info "Restoring user-data"
cp -R /opt/dashy_conf_backup.yml /opt/dashy/user-data cp -r /opt/dashy_user_data_backup/. /opt/dashy/user-data/
msg_ok "Restored conf.yml" rm -rf /opt/dashy_user_data_backup
msg_ok "Restored user-data"
msg_info "Cleaning"
rm -rf /opt/dashy_conf_backup.yml /opt/dashy/public/conf.yml
msg_ok "Cleaned"
msg_info "Starting Dashy" msg_info "Starting Dashy"
systemctl start dashy systemctl start dashy

View File

@@ -45,12 +45,12 @@ function update_script() {
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dawarich" "Freika/dawarich" "tarball" "latest" "/opt/dawarich/app" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dawarich" "Freika/dawarich" "tarball" "latest" "/opt/dawarich/app"
RUBY_VERSION=$(cat /opt/dawarich/app/.ruby-version 2>/dev/null || echo "3.4.6") RUBY_VERSION=$(cat /opt/dawarich/app/.ruby-version 2>/dev/null || echo "3.4.6")
RUBY_VERSION=${RUBY_VERSION} RUBY_INSTALL_RAILS="false" setup_ruby RUBY_VERSION=${RUBY_VERSION} RUBY_INSTALL_RAILS="false" HOME=/root setup_ruby
msg_info "Running Migrations" msg_info "Running Migrations"
cd /opt/dawarich/app cd /opt/dawarich/app
source /root/.profile source /root/.profile
export PATH="/root/.rbenv/shims:/root/.rbenv/bin:$PATH" export PATH="/root/.rbenv/shims:/root/.rbenv/bin:${PATH}"
eval "$(/root/.rbenv/bin/rbenv init - bash)" eval "$(/root/.rbenv/bin/rbenv init - bash)"
if ! grep -q "OTP_ENCRYPTION_PRIMARY_KEY" /opt/dawarich/.env; then if ! grep -q "OTP_ENCRYPTION_PRIMARY_KEY" /opt/dawarich/.env; then

73
ct/degoog.sh Normal file
View File

@@ -0,0 +1,73 @@
#!/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/fccview/degoog
APP="degoog"
var_tags="${var_tags:-search;privacy}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/degoog ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "degoog" "fccview/degoog"; then
msg_info "Stopping Service"
systemctl stop degoog
msg_ok "Stopped Service"
msg_info "Backing up Configuration & Data"
[[ -f /opt/degoog/.env ]] && cp /opt/degoog/.env /opt/degoog.env.bak
[[ -d /opt/degoog/data ]] && mv /opt/degoog/data /opt/degoog_data_backup
msg_ok "Backed up Configuration & Data"
if ! command -v bun >/dev/null 2>&1; then
msg_info "Installing Bun"
export BUN_INSTALL="/root/.bun"
curl -fsSL https://bun.sh/install | $STD bash
ln -sf /root/.bun/bin/bun /usr/local/bin/bun
ln -sf /root/.bun/bin/bunx /usr/local/bin/bunx
msg_ok "Installed Bun"
fi
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "degoog" "fccview/degoog" "prebuild" "latest" "/opt/degoog" "degoog_*_prebuild.tar.gz"
msg_info "Restoring Configuration & Data"
[[ -f /opt/degoog.env.bak ]] && mv /opt/degoog.env.bak /opt/degoog/.env
[[ -d /opt/degoog_data_backup ]] && mv /opt/degoog_data_backup /opt/degoog/data
msg_ok "Restored Configuration & Data"
msg_info "Starting Service"
systemctl start degoog
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}:4444${CL}"

84
ct/docuseal.sh Normal file
View File

@@ -0,0 +1,84 @@
#!/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://www.docuseal.com/
APP="DocuSeal"
var_tags="${var_tags:-document;esignature;pdf}"
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/docuseal ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "docuseal" "docusealco/docuseal"; then
msg_info "Stopping Services"
systemctl stop docuseal docuseal-sidekiq
msg_ok "Stopped Services"
msg_info "Backing up Data"
cp /opt/docuseal/.env /opt/docuseal.env.bak
[[ -d /opt/docuseal/data ]] && mv /opt/docuseal/data /opt/docuseal_data.bak
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "docuseal" "docusealco/docuseal" "tarball"
msg_info "Restoring Data"
mv /opt/docuseal.env.bak /opt/docuseal/.env
[[ -d /opt/docuseal_data.bak ]] && mv /opt/docuseal_data.bak /opt/docuseal/data
msg_ok "Restored Data"
msg_info "Building Application"
cd /opt/docuseal
export PATH="/root/.rbenv/bin:/root/.rbenv/shims:${PATH}"
eval "$(rbenv init - bash)" 2>/dev/null || true
export RAILS_ENV=production
export NODE_ENV=production
export SECRET_KEY_BASE_DUMMY=1
set -a
source /opt/docuseal/.env
set +a
$STD bundle config set --local deployment 'true'
$STD bundle config set --local without 'development:test'
$STD bundle install -j"$(nproc)"
$STD yarn install --network-timeout 1000000
$STD ./bin/shakapacker
$STD bundle exec rails db:migrate
$STD bundle exec bootsnap precompile -j 1 --gemfile app/ lib/
chown -R docuseal:docuseal /opt/docuseal
msg_ok "Built Application"
msg_info "Starting Services"
systemctl start docuseal docuseal-sidekiq
msg_ok "Started Services"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"

54
ct/espconnect.sh Normal file
View File

@@ -0,0 +1,54 @@
#!/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: John Lombardo (programbo)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/thelastoutpostworkshop/ESPConnect
APP="ESPConnect"
var_tags="${var_tags:-iot;esp32;flash}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
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/espconnect ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "espconnect" "thelastoutpostworkshop/ESPConnect"; then
msg_info "Stopping Nginx"
systemctl stop nginx
msg_ok "Stopped Nginx"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "espconnect" "thelastoutpostworkshop/ESPConnect" "prebuild" "latest" "/opt/espconnect" "dist.zip"
msg_info "Starting Nginx"
systemctl start nginx
msg_ok "Started Nginx"
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}${CL}"

View File

@@ -28,6 +28,9 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs
if check_for_gh_release "excalidraw" "excalidraw/excalidraw"; then if check_for_gh_release "excalidraw" "excalidraw/excalidraw"; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop excalidraw systemctl stop excalidraw
@@ -37,6 +40,7 @@ function update_script() {
msg_info "Updating Excalidraw" msg_info "Updating Excalidraw"
cd /opt/excalidraw cd /opt/excalidraw
$STD yarn config set ignore-engines true
$STD yarn $STD yarn
msg_ok "Updated Excalidraw" msg_ok "Updated Excalidraw"

View File

@@ -34,7 +34,7 @@ function update_script() {
exit exit
fi fi
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs NODE_VERSION="24" NODE_MODULE="pnpm@latest" setup_nodejs
PROJECT_NAME=$(</opt/fumadocs/.projectname) PROJECT_NAME=$(</opt/fumadocs/.projectname)
PROJECT_DIR="/opt/fumadocs/${PROJECT_NAME}" PROJECT_DIR="/opt/fumadocs/${PROJECT_NAME}"
SERVICE_NAME="fumadocs_${PROJECT_NAME}.service" SERVICE_NAME="fumadocs_${PROJECT_NAME}.service"

6
ct/headers/authentik Normal file
View File

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

6
ct/headers/cliproxyapi Normal file
View File

@@ -0,0 +1,6 @@
________ ________ ___ ____ ____
/ ____/ / / _/ __ \_________ _ ____ __/ | / __ \/ _/
/ / / / / // /_/ / ___/ __ \| |/_/ / / / /| | / /_/ // /
/ /___/ /____/ // ____/ / / /_/ /> </ /_/ / ___ |/ ____// /
\____/_____/___/_/ /_/ \____/_/|_|\__, /_/ |_/_/ /___/
/____/

6
ct/headers/degoog Normal file
View File

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

6
ct/headers/docuseal Normal file
View File

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

6
ct/headers/espconnect Normal file
View File

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

6
ct/headers/lobehub Normal file
View File

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

6
ct/headers/webtrees Normal file
View File

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

View File

@@ -71,7 +71,7 @@ function update_script() {
msg_error "Aborted by user. No changes have been made." msg_error "Aborted by user. No changes have been made."
exit 10 exit 10
fi fi
curl -fsSL -o "/tmp/kasm_release_${KASM_VERSION}.tar.gz" "$KASM_URL" curl_download "/tmp/kasm_release_${KASM_VERSION}.tar.gz" "$KASM_URL"
tar -xf "kasm_release_${KASM_VERSION}.tar.gz" tar -xf "kasm_release_${KASM_VERSION}.tar.gz"
chmod +x /tmp/kasm_release/install.sh chmod +x /tmp/kasm_release/install.sh
rm -f /tmp/kasm_release_"${KASM_VERSION}".tar.gz rm -f /tmp/kasm_release_"${KASM_VERSION}".tar.gz

77
ct/lobehub.sh Normal file
View File

@@ -0,0 +1,77 @@
#!/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/lobehub/lobehub
APP="LobeHub"
var_tags="${var_tags:-ai;chat}"
var_cpu="${var_cpu:-6}"
var_ram="${var_ram:-10240}"
var_disk="${var_disk:-15}"
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/lobehub ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "lobehub" "lobehub/lobehub"; then
msg_info "Stopping Services"
systemctl stop lobehub
msg_ok "Stopped Services"
msg_info "Backing up Data"
cp /opt/lobehub/.env /opt/lobehub.env.bak
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "lobehub" "lobehub/lobehub" "tarball"
msg_info "Restoring Configuration"
cp /opt/lobehub.env.bak /opt/lobehub/.env
rm -f /opt/lobehub.env.bak
msg_ok "Restored Configuration"
msg_info "Building Application"
cd /opt/lobehub
export NODE_OPTIONS="--max-old-space-size=8192"
$STD pnpm install
$STD pnpm run build:docker
unset NODE_OPTIONS
msg_ok "Built Application"
msg_info "Running Database Migrations"
cd /opt/lobehub
set -a && source /opt/lobehub/.env && set +a
$STD node /opt/lobehub/.next/standalone/docker.cjs
msg_ok "Ran Database Migrations"
msg_info "Starting Services"
systemctl start lobehub
msg_ok "Started Services"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3210${CL}"

View File

@@ -55,9 +55,20 @@ function update_script() {
RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby
msg_info "Installing Manyfold" msg_info "Restoring Data"
rm -rf /opt/manyfold/app/{storage,tmp,config/credentials.yml.enc,config/master.key}
cp -r /opt/manyfold_storage_backup /opt/manyfold/app/storage 2>/dev/null || true
cp -r /opt/manyfold_tmp_backup /opt/manyfold/app/tmp 2>/dev/null || true
cp /opt/manyfold_credentials.yml.enc /opt/manyfold/app/config/credentials.yml.enc 2>/dev/null || true
cp /opt/manyfold_master.key /opt/manyfold/app/config/master.key 2>/dev/null || true
chown -R manyfold:manyfold {/home/manyfold,/opt/manyfold} chown -R manyfold:manyfold {/home/manyfold,/opt/manyfold}
chown -R manyfold:manyfold /opt/manyfold chown -R manyfold:manyfold /opt/manyfold/app/storage /opt/manyfold/app/tmp /opt/manyfold/app/config
rm -rf /opt/manyfold_storage_backup /opt/manyfold_tmp_backup /opt/manyfold_credentials.yml.enc /opt/manyfold_master.key
msg_ok "Restored Data"
msg_info "Installing Manyfold"
$STD npm install --global corepack
$STD corepack enable yarn
sudo -u manyfold bash -c ' sudo -u manyfold bash -c '
source /opt/manyfold/.env source /opt/manyfold/.env
@@ -66,7 +77,6 @@ function update_script() {
cd /opt/manyfold/app cd /opt/manyfold/app
gem install bundler sidekiq foreman gem install bundler sidekiq foreman
bundle install bundle install
corepack enable yarn
corepack prepare '"$YARN_VERSION"' --activate corepack prepare '"$YARN_VERSION"' --activate
corepack use '"$YARN_VERSION"' corepack use '"$YARN_VERSION"'
bin/rails db:migrate bin/rails db:migrate
@@ -74,16 +84,6 @@ function update_script() {
' '
msg_ok "Installed Manyfold" msg_ok "Installed Manyfold"
msg_info "Restoring Data"
rm -rf /opt/manyfold/app/{storage,tmp,config/credentials.yml.enc,config/master.key}
cp -r /opt/manyfold_storage_backup /opt/manyfold/app/storage 2>/dev/null || true
cp -r /opt/manyfold_tmp_backup /opt/manyfold/app/tmp 2>/dev/null || true
cp /opt/manyfold_credentials.yml.enc /opt/manyfold/app/config/credentials.yml.enc 2>/dev/null || true
cp /opt/manyfold_master.key /opt/manyfold/app/config/master.key 2>/dev/null || true
chown -R manyfold:manyfold /opt/manyfold/app/storage /opt/manyfold/app/tmp /opt/manyfold/app/config
rm -rf /opt/manyfold_storage_backup /opt/manyfold_tmp_backup /opt/manyfold_credentials.yml.enc /opt/manyfold_master.key
msg_ok "Restored Data"
msg_info "Restarting Services" msg_info "Restarting Services"
source /opt/manyfold/.env source /opt/manyfold/.env
export PATH="/home/manyfold/.rbenv/shims:/home/manyfold/.rbenv/bin:$PATH" export PATH="/home/manyfold/.rbenv/shims:/home/manyfold/.rbenv/bin:$PATH"

View File

@@ -22,12 +22,12 @@ catch_errors
function update_script() { function update_script() {
header_info header_info
if [[ ! -d /opt/mylar3 ]]; then if [[ ! -d /opt/mylar3 ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No Mylar3 Installation Found!"
exit exit
fi fi
if check_for_gh_release "mylar3" "mylar3/mylar3"; then if check_for_gh_release "mylar3" "MylarComics/mylar3"; then
fetch_and_deploy_gh_release "mylar3" "mylar3/mylar3" "tarball" fetch_and_deploy_gh_release "mylar3" "MylarComics/mylar3" "tarball"
systemctl restart mylar3 systemctl restart mylar3
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
fi fi

View File

@@ -27,34 +27,29 @@ function update_script() {
msg_error "No Ollama Installation Found!" msg_error "No Ollama Installation Found!"
exit exit
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
if [[ ! -f /opt/Ollama_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/Ollama_version.txt)" ]]; then [[ -f /root/.ollama ]] && rm -f /root/.ollama
if [[ ! -f /opt/Ollama_version.txt ]]; then
touch /opt/Ollama_version.txt if check_for_gh_release "ollama-com" "ollama/ollama"; then
fi
ensure_dependencies zstd ensure_dependencies zstd
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop ollama systemctl stop ollama
msg_ok "Services Stopped" msg_ok "Services Stopped"
TMP_TAR=$(mktemp --suffix=.tar.zst) OLLAMA_INSTALL_DIR="/usr/local/lib/ollama"
curl -fL# -C - -o "${TMP_TAR}" "https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tar.zst" rm -rf "$OLLAMA_INSTALL_DIR" /usr/local/bin/ollama
msg_info "Updating Ollama to ${RELEASE}" mkdir -p "$OLLAMA_INSTALL_DIR"
rm -rf /usr/local/lib/ollama if ! fetch_and_deploy_gh_release "ollama-com" "ollama/ollama" "prebuild" "latest" "$OLLAMA_INSTALL_DIR" "ollama-linux-amd64.tar.zst"; then
rm -rf /usr/local/bin/ollama msg_error "Download or deployment failed check network connectivity and GitHub API availability"
mkdir -p /usr/local/lib/ollama exit 250
tar --zstd -xf "${TMP_TAR}" -C /usr/local/lib/ollama fi
ln -sf /usr/local/lib/ollama/bin/ollama /usr/local/bin/ollama ln -sf "$OLLAMA_INSTALL_DIR/bin/ollama" /usr/local/bin/ollama
rm -f "${TMP_TAR}" msg_ok "Updated Ollama"
echo "${RELEASE}" >/opt/Ollama_version.txt
msg_ok "Updated Ollama to ${RELEASE}"
msg_info "Starting Services" msg_info "Starting Services"
systemctl start ollama systemctl start ollama
msg_ok "Started Services" msg_ok "Started Services"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
else
msg_ok "No update required. Ollama is already at ${RELEASE}"
fi fi
exit exit
} }

View File

@@ -29,7 +29,7 @@ function update_script() {
exit exit
fi fi
RELEASE="v6.1.0" RELEASE="v6.2.0"
if check_for_gh_release "OpenCloud" "opencloud-eu/opencloud" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then if check_for_gh_release "OpenCloud" "opencloud-eu/opencloud" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
msg_info "Stopping services" msg_info "Stopping services"
systemctl stop opencloud opencloud-wopi systemctl stop opencloud opencloud-wopi

View File

@@ -26,6 +26,7 @@ function update_script() {
check_container_resources check_container_resources
ensure_dependencies zstd build-essential libmariadb-dev ensure_dependencies zstd build-essential libmariadb-dev
[[ -f /root/.ollama ]] && rm -f /root/.ollama
if [[ -d /opt/open-webui ]]; then if [[ -d /opt/open-webui ]]; then
msg_warn "Legacy installation detected — migrating to uv based install..." msg_warn "Legacy installation detected — migrating to uv based install..."
@@ -91,37 +92,22 @@ EOF
if [ -x "/usr/bin/ollama" ]; then if [ -x "/usr/bin/ollama" ]; then
msg_info "Checking for Ollama Update" msg_info "Checking for Ollama Update"
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}') if check_for_gh_release "ollama-com" "ollama/ollama"; then
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') msg_info "Stopping Ollama Service"
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then systemctl stop ollama
msg_info "Ollama update available: v$OLLAMA_VERSION -> v$RELEASE" msg_ok "Stopped Service"
msg_info "Downloading Ollama v$RELEASE \n"
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.tar.zst" ]; then rm -rf /usr/lib/ollama /usr/bin/ollama
if ! fetch_and_deploy_gh_release "ollama-com" "ollama/ollama" "prebuild" "latest" "/usr/lib/ollama" "ollama-linux-amd64.tar.zst"; then
msg_info "Stopping Ollama Service" msg_error "Ollama download or deployment failed check network connectivity and GitHub API availability"
systemctl stop ollama
msg_ok "Stopped Service"
msg_info "Installing Ollama"
rm -rf /usr/lib/ollama
rm -rf /usr/bin/ollama
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"
systemctl start ollama
msg_ok "Started Service"
msg_ok "Ollama updated to version $RELEASE"
else else
msg_error "Ollama download failed. Aborting update." ln -sf /usr/lib/ollama/bin/ollama /usr/bin/ollama
msg_ok "Updated Ollama to ${CHECK_UPDATE_RELEASE}"
fi fi
else
msg_ok "Ollama is already up to date." msg_info "Starting Ollama Service"
systemctl start ollama
msg_ok "Started Service"
fi fi
fi fi

View File

@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Source: https://pangolin.net/ | Github: https://github.com/fosrl/pangolin # Source: https://pangolin.net/ | Github: https://github.com/fosrl/pangolin
APP="Pangolin" APP="Pangolin"
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.18.3}" PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.18.4}"
var_tags="${var_tags:-proxy}" var_tags="${var_tags:-proxy}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}" var_ram="${var_ram:-4096}"
@@ -81,6 +81,12 @@ function update_script() {
msg_info "Running database migrations" msg_info "Running database migrations"
cd /opt/pangolin cd /opt/pangolin
SQLITE_DB="/opt/pangolin/config/db/db.sqlite"
if [[ -f "$SQLITE_DB" ]]; then
if ! sqlite3 "$SQLITE_DB" ".tables" 2>/dev/null | tr ' ' '\n' | grep -qx "statusHistory"; then
sqlite3 "$SQLITE_DB" "DELETE FROM versionMigrations;" 2>/dev/null || true
fi
fi
ENVIRONMENT=prod $STD node dist/migrations.mjs ENVIRONMENT=prod $STD node dist/migrations.mjs
msg_ok "Ran database migrations" msg_ok "Ran database migrations"

View File

@@ -42,6 +42,9 @@ function update_script() {
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball"
pnpm_version=$(grep -oP '"packageManager":\s*"pnpm@\K[^"]+' /opt/papra/package.json)
NODE_VERSION="26" NODE_MODULE="pnpm@$pnpm_version" setup_nodejs
msg_info "Building Application" msg_info "Building Application"
cd /opt/papra cd /opt/papra
if [[ -f /opt/papra_env.bak ]]; then if [[ -f /opt/papra_env.bak ]]; then

View File

@@ -9,7 +9,7 @@ APP="Profilarr"
var_tags="${var_tags:-arr;radarr;sonarr;config}" var_tags="${var_tags:-arr;radarr;sonarr;config}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}" var_disk="${var_disk:-7}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-13}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
@@ -29,43 +29,71 @@ function update_script() {
exit exit
fi fi
if [[ -d /opt/profilarr/backend ]]; then
msg_error "Profilarr v1 detected!"
echo -e "\nProfilarr v2 is a complete rewrite and is NOT compatible with v1."
echo -e "There is no migration path. Please create a new LXC container for v2.\n"
exit
fi
if check_for_gh_release "deno" "denoland/deno"; then
ARCH=$(uname -m)
fetch_and_deploy_gh_release "deno" "denoland/deno" "prebuild" "latest" "/usr/local/bin" "deno-${ARCH}-unknown-linux-gnu.zip"
fi
if check_for_gh_release "profilarr" "Dictionarry-Hub/profilarr"; then if check_for_gh_release "profilarr" "Dictionarry-Hub/profilarr"; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop profilarr systemctl stop profilarr
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Data"
if [[ -d /config ]]; then
cp -r /config /opt/profilarr_config_backup
fi
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "profilarr" "Dictionarry-Hub/profilarr" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "profilarr" "Dictionarry-Hub/profilarr" "tarball"
PROFILARR_VERSION=$(cat ~/.profilarr)
msg_info "Installing Python Dependencies" msg_info "Building Profilarr v${PROFILARR_VERSION} (Patience)"
cd /opt/profilarr/backend cd /opt/profilarr
$STD uv venv --clear /opt/profilarr/backend/.venv cat >src/lib/shared/build.ts <<EOF
sed 's/==/>=/g' requirements.txt >requirements-relaxed.txt // Generated at update time. Do not hand-edit.
$STD uv pip install --python /opt/profilarr/backend/.venv/bin/python -r requirements-relaxed.txt export type Channel = 'stable' | 'develop' | 'dev';
rm -f requirements-relaxed.txt
msg_ok "Installed Python Dependencies"
msg_info "Building Frontend" export interface BuildInfo {
if [[ -d /opt/profilarr/frontend ]]; then readonly version: string;
cd /opt/profilarr/frontend readonly channel: Channel;
$STD npm install readonly commit: string | null;
$STD npm run build readonly builtAt: string | null;
cp -r dist /opt/profilarr/backend/app/static }
fi
msg_ok "Built Frontend"
msg_info "Restoring Data" export const build: BuildInfo = {
if [[ -d /opt/profilarr_config_backup ]]; then version: '${PROFILARR_VERSION}',
mkdir -p /config channel: 'stable',
cp -r /opt/profilarr_config_backup/. /config/ commit: null,
rm -rf /opt/profilarr_config_backup builtAt: '$(date -u +"%Y-%m-%dT%H:%M:%SZ")'
fi };
msg_ok "Restored Data" EOF
$STD deno install --node-modules-dir
export APP_BASE_PATH=/opt/profilarr/dist/build
export VITE_CHANNEL=stable
$STD deno run -A npm:vite build
DENO_TARGET="${ARCH}-unknown-linux-gnu"
$STD deno compile \
--no-check \
--allow-net \
--allow-read \
--allow-write \
--allow-env \
--allow-ffi \
--allow-run \
--allow-sys \
--target "$DENO_TARGET" \
--output dist/build/profilarr \
dist/build/mod.ts
msg_ok "Built Profilarr"
msg_info "Updating Profilarr"
cp dist/build/profilarr /opt/profilarr/app/profilarr
cp dist/build/server.js /opt/profilarr/app/server.js
cp -r dist/build/static /opt/profilarr/app/static
chmod +x /opt/profilarr/app/profilarr
msg_ok "Updated Profilarr"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start profilarr systemctl start profilarr

View File

@@ -51,6 +51,11 @@ function update_script() {
mv /opt/reactive-resume.env.bak /opt/reactive-resume/.env mv /opt/reactive-resume.env.bak /opt/reactive-resume/.env
msg_ok "Updated Reactive Resume" msg_ok "Updated Reactive Resume"
msg_info "Updating Service"
sed -i 's|WorkingDirectory=/opt/reactive-resume$|WorkingDirectory=/opt/reactive-resume/apps/web|' /etc/systemd/system/reactive-resume.service
systemctl daemon-reload
msg_ok "Updated Service"
msg_info "Restarting services" msg_info "Restarting services"
systemctl start chromium-printer reactive-resume systemctl start chromium-printer reactive-resume
msg_ok "Restarted services" msg_ok "Restarted services"

View File

@@ -35,16 +35,20 @@ function update_script() {
systemctl stop snowshare systemctl stop snowshare
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up uploads" if ! grep -q '^UPLOAD_DIR=' /opt/snowshare.env 2>/dev/null; then
[ -d /opt/snowshare/uploads ] && cp -a /opt/snowshare/uploads /opt/.snowshare_uploads_backup msg_info "Migrating uploads to persistent directory"
msg_ok "Uploads backed up" mkdir -p /opt/snowshare_data
if [ -d /opt/snowshare/uploads ] && [ -z "$(ls -A /opt/snowshare_data 2>/dev/null)" ]; then
mv /opt/snowshare/uploads/* /opt/snowshare_data/ 2>/dev/null || true
mv /opt/snowshare/uploads/.[!.]* /opt/snowshare_data/ 2>/dev/null || true
rmdir /opt/snowshare/uploads 2>/dev/null || true
fi
echo "UPLOAD_DIR=/opt/snowshare_data" >>/opt/snowshare.env
msg_ok "Migrated uploads to /opt/snowshare_data"
fi
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "snowshare" "TuroYT/snowshare" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "snowshare" "TuroYT/snowshare" "tarball"
msg_info "Restoring uploads"
[ -d /opt/.snowshare_uploads_backup ] && rm -rf /opt/snowshare/uploads && cp -a /opt/.snowshare_uploads_backup /opt/snowshare/uploads
msg_ok "Uploads restored"
msg_info "Updating Snowshare" msg_info "Updating Snowshare"
cd /opt/snowshare cd /opt/snowshare
$STD npm ci $STD npm ci

View File

@@ -39,13 +39,11 @@ function update_script() {
msg_ok "Created Backup" msg_ok "Created Backup"
msg_info "Updating SonarQube" msg_info "Updating SonarQube"
temp_file=$(mktemp) RELEASE=$(curl -fsSL "https://binaries.sonarsource.com/s3api?prefix=Distribution/sonarqube/sonarqube-&delimiter=/" |
RELEASE=$(get_latest_github_release "SonarSource/sonarqube") grep -oP 'sonarqube-[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.zip' |
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file sort -V | tail -n1)
unzip -q "$temp_file" -d /opt fetch_and_deploy_from_url "https://binaries.sonarsource.com/Distribution/sonarqube/${RELEASE}" /opt/sonarqube
rm -f "$temp_file" echo "${RELEASE}" >~/.sonarqube
mv /opt/sonarqube-${RELEASE} /opt/sonarqube
echo "${RELEASE}" > ~/.sonarqube
msg_ok "Updated SonarQube" msg_ok "Updated SonarQube"
msg_info "Restoring Backup" msg_info "Restoring Backup"

View File

@@ -44,7 +44,7 @@ function update_script() {
msg_info "Updating Python Dependencies" msg_info "Updating Python Dependencies"
cd /opt/soulsync cd /opt/soulsync
$STD uv venv --clear /opt/soulsync/.venv --python 3.11 $STD uv venv --clear /opt/soulsync/.venv --python 3.11
$STD /opt/soulsync/.venv/bin/pip install -r requirements.txt $STD uv pip install -r requirements.txt
msg_ok "Updated Python Dependencies" msg_ok "Updated Python Dependencies"
mv /opt/soulsync-config.bak /opt/soulsync/config mv /opt/soulsync-config.bak /opt/soulsync/config

View File

@@ -62,6 +62,18 @@ function update_script() {
cp -a /opt/sparkyfitness/SparkyFitnessFrontend/dist/. /var/www/sparkyfitness/ cp -a /opt/sparkyfitness/SparkyFitnessFrontend/dist/. /var/www/sparkyfitness/
msg_ok "Updated Sparky Fitness Frontend" msg_ok "Updated Sparky Fitness Frontend"
msg_info "Refreshing Nginx Config"
sed \
-e 's|${SPARKY_FITNESS_SERVER_HOST}|127.0.0.1|g' \
-e 's|${SPARKY_FITNESS_SERVER_PORT}|3010|g' \
-e 's|${NGINX_LISTEN_PORT}|80|g' \
-e 's|${NGINX_ACCESS_LOG}|/var/log/nginx/sparkyfitness.access.log|g' \
-e 's|${NGINX_ERROR_LOG}|/var/log/nginx/sparkyfitness.error.log|g' \
-e 's|root /usr/share/nginx/html;|root /var/www/sparkyfitness;|g' \
-e 's|server_name localhost;|server_name _;|g' \
"/opt/sparkyfitness/docker/nginx.conf" >/etc/nginx/sites-available/sparkyfitness
msg_ok "Refreshed Nginx Config"
msg_info "Refreshing SparkyFitness Service" msg_info "Refreshing SparkyFitness Service"
cat <<EOF >/etc/systemd/system/sparkyfitness-server.service cat <<EOF >/etc/systemd/system/sparkyfitness-server.service
[Unit] [Unit]

View File

@@ -64,7 +64,7 @@ EOF
fi fi
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Sure" "we-promise/sure" "tarball" "latest" "/opt/sure" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Sure" "we-promise/sure" "tarball" "latest" "/opt/sure"
RUBY_VERSION="$(cat /opt/sure/.ruby-version)" RUBY_INSTALL_RAILS=false setup_ruby RUBY_VERSION="$(cat /opt/sure/.ruby-version)" RUBY_INSTALL_RAILS=false HOME=/root setup_ruby
msg_info "Updating Sure" msg_info "Updating Sure"
source ~/.profile source ~/.profile

View File

@@ -47,10 +47,9 @@ function update_script() {
RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+') RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+')
if [[ ! -f ~/.technitium || ${RELEASE} != "$(cat ~/.technitium 2>/dev/null)" ]]; then if [[ ! -f ~/.technitium || ${RELEASE} != "$(cat ~/.technitium 2>/dev/null)" ]]; then
systemctl stop technitium
fetch_and_deploy_from_url "https://download.technitium.com/dns/DnsServerPortable.tar.gz" /opt/technitium/dns fetch_and_deploy_from_url "https://download.technitium.com/dns/DnsServerPortable.tar.gz" /opt/technitium/dns
echo "${RELEASE}" >~/.technitium echo "${RELEASE}" >~/.technitium
systemctl start technitium systemctl restart technitium
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
else else
msg_ok "No update required. Technitium DNS is already at v${RELEASE}." msg_ok "No update required. Technitium DNS is already at v${RELEASE}."

View File

@@ -29,6 +29,8 @@ function update_script() {
exit exit
fi fi
NODE_VERSION="24" setup_nodejs
if check_for_gh_tag "guacd" "apache/guacamole-server"; then if check_for_gh_tag "guacd" "apache/guacamole-server"; then
msg_info "Stopping guacd" msg_info "Stopping guacd"
systemctl stop guacd 2>/dev/null || true systemctl stop guacd 2>/dev/null || true
@@ -155,8 +157,6 @@ EOF
/opt/termix/nginx/client_body /opt/termix/nginx/client_body
msg_ok "Recreated Directories" msg_ok "Recreated Directories"
NODE_VERSION="24" setup_nodejs
msg_info "Building Frontend" msg_info "Building Frontend"
cd /opt/termix cd /opt/termix
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
@@ -206,7 +206,10 @@ EOF
sed -i 's|/app/nginx|/opt/termix/nginx|g' /etc/nginx/nginx.conf sed -i 's|/app/nginx|/opt/termix/nginx|g' /etc/nginx/nginx.conf
sed -i 's|listen ${PORT};|listen 80;|g' /etc/nginx/nginx.conf sed -i 's|listen ${PORT};|listen 80;|g' /etc/nginx/nginx.conf
nginx -t && systemctl reload nginx rm -f /etc/systemd/system/nginx.service.d/pidfile.conf
rm -f /etc/tmpfiles.d/nginx-termix.conf
systemctl daemon-reload
nginx -t && systemctl restart nginx
msg_ok "Updated Nginx Configuration" msg_ok "Updated Nginx Configuration"
else else
msg_warn "Nginx configuration not updated. If Termix doesn't work, restore from backup or update manually." msg_warn "Nginx configuration not updated. If Termix doesn't work, restore from backup or update manually."

View File

@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Copyright (c) 2021-2026 community-scripts ORG # Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ) # Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/steveiliop56/tinyauth # Source: https://github.com/tinyauthapp/tinyauth
APP="Tinyauth" APP="Tinyauth"
var_tags="${var_tags:-auth}" var_tags="${var_tags:-auth}"
@@ -28,12 +28,12 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "tinyauth" "steveiliop56/tinyauth"; then if check_for_gh_release "tinyauth" "tinyauthapp/tinyauth"; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop tinyauth systemctl stop tinyauth
msg_ok "Stopped Service" msg_ok "Stopped Service"
fetch_and_deploy_gh_release "tinyauth" "steveiliop56/tinyauth" "singlefile" "latest" "/opt/tinyauth" "tinyauth-amd64" fetch_and_deploy_gh_release "tinyauth" "tinyauthapp/tinyauth" "singlefile" "latest" "/opt/tinyauth" "tinyauth-amd64"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start tinyauth systemctl start tinyauth

View File

@@ -29,6 +29,8 @@ function update_script() {
exit exit
fi fi
NODE_VERSION="24" setup_nodejs
if check_for_gh_release "trek" "mauriceboe/TREK"; then if check_for_gh_release "trek" "mauriceboe/TREK"; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop trek systemctl stop trek

View File

@@ -28,7 +28,10 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
NODE_VERSION="24" setup_nodejs
setup_mariadb setup_mariadb
if check_for_gh_release "wallabag" "wallabag/wallabag"; then if check_for_gh_release "wallabag" "wallabag/wallabag"; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop nginx php8.3-fpm systemctl stop nginx php8.3-fpm

View File

@@ -41,7 +41,7 @@ function update_script() {
$STD go mod tidy $STD go mod tidy
$STD go build $STD go build
cd /opt/wanderer/source/web cd /opt/wanderer/source/web
$STD npm ci --omit=dev $STD npm ci
$STD npm run build $STD npm run build
msg_ok "Updated wanderer" msg_ok "Updated wanderer"

65
ct/webtrees.sh Normal file
View File

@@ -0,0 +1,65 @@
#!/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: sudofly
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://webtrees.net/
APP="Webtrees"
var_tags="${var_tags:-genealogy;cms}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/webtrees ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "webtrees" "fisharebest/webtrees"; then
msg_info "Stopping Service"
PHP_VER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION;')
systemctl stop caddy php${PHP_VER}-fpm
msg_ok "Stopped Service"
msg_info "Backing up Data"
cp -r /opt/webtrees/data /opt/webtrees_data_backup
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "webtrees" "fisharebest/webtrees" "prebuild" "latest" "/opt/webtrees" "webtrees-*.zip"
msg_info "Restoring Data"
cp -r /opt/webtrees_data_backup/. /opt/webtrees/data
rm -rf /opt/webtrees_data_backup
chown -R www-data:www-data /opt/webtrees
msg_ok "Restored Data"
msg_info "Starting Service"
systemctl start caddy php${PHP_VER}-fpm
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}"

View File

@@ -28,7 +28,7 @@ function update_script() {
exit exit
fi fi
NODE_VERSION="22" NODE_MODULE="yarn,node-gyp" setup_nodejs NODE_VERSION="24" NODE_MODULE="yarn,node-gyp" setup_nodejs
if check_for_gh_release "wikijs" "requarks/wiki"; then if check_for_gh_release "wikijs" "requarks/wiki"; then
msg_info "Verifying whether ${APP}' new release is v3.x+ and current install uses SQLite." msg_info "Verifying whether ${APP}' new release is v3.x+ and current install uses SQLite."

View File

@@ -27,7 +27,7 @@ function update_script() {
exit exit
fi fi
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
if check_for_gh_release "zipline" "diced/zipline"; then if check_for_gh_release "zipline" "diced/zipline"; then
msg_info "Stopping Service" msg_info "Stopping Service"

View File

@@ -3,7 +3,7 @@
# Copyright (c) 2021-2026 community-scripts ORG # Copyright (c) 2021-2026 community-scripts ORG
# Author: Slaviša Arežina (tremor021) | Co-Author: Stavros (steveiliop56) # Author: Slaviša Arežina (tremor021) | Co-Author: Stavros (steveiliop56)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/steveiliop56/tinyauth # Source: https://github.com/tinyauthapp/tinyauth
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color color
@@ -19,8 +19,8 @@ msg_ok "Installed Dependencies"
msg_info "Installing Tinyauth" msg_info "Installing Tinyauth"
mkdir -p /opt/tinyauth mkdir -p /opt/tinyauth
RELEASE=$(curl -s https://api.github.com/repos/steveiliop56/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -s https://api.github.com/repos/tinyauthapp/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/steveiliop56/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth curl -fsSL "https://github.com/tinyauthapp/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth
chmod +x /opt/tinyauth/tinyauth chmod +x /opt/tinyauth/tinyauth
PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8) PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8)
USER=$(htpasswd -Bbn "tinyauth" "${PASS}") USER=$(htpasswd -Bbn "tinyauth" "${PASS}")

View File

@@ -65,12 +65,12 @@ $STD make
$STD make install $STD make install
$STD ldconfig $STD ldconfig
echo "${GUAC_SERVER_VERSION}" >~/.guacamole_server echo "${GUAC_SERVER_VERSION}" >~/.guacamole_server
curl -fsSL "https://downloads.apache.org/guacamole/${GUAC_CLIENT_VERSION}/binary/guacamole-${GUAC_CLIENT_VERSION}.war" -o "/opt/apache-guacamole/tomcat9/webapps/guacamole.war" curl_download "/opt/apache-guacamole/tomcat9/webapps/guacamole.war" "https://downloads.apache.org/guacamole/${GUAC_CLIENT_VERSION}/binary/guacamole-${GUAC_CLIENT_VERSION}.war"
echo "${GUAC_CLIENT_VERSION}" >~/.guacamole_client 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" curl_download "/etc/guacamole/lib/mysql-connector-j.jar" "https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/${MYSQL_CONNECTOR_VERSION}/mysql-connector-j-${MYSQL_CONNECTOR_VERSION}.jar"
echo "${MYSQL_CONNECTOR_VERSION}" >~/.guacamole_mysql_connector echo "${MYSQL_CONNECTOR_VERSION}" >~/.guacamole_mysql_connector
cd /root 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" curl_download "/root/guacamole-auth-jdbc-${GUAC_SERVER_VERSION}.tar.gz" "https://downloads.apache.org/guacamole/${GUAC_SERVER_VERSION}/binary/guacamole-auth-jdbc-${GUAC_SERVER_VERSION}.tar.gz"
$STD tar -xf ~/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/ mv ~/guacamole-auth-jdbc-"$GUAC_SERVER_VERSION"/mysql/guacamole-auth-jdbc-mysql-"$GUAC_SERVER_VERSION".jar /etc/guacamole/extensions/
echo "${GUAC_SERVER_VERSION}" >~/.guacamole_auth_jdbc echo "${GUAC_SERVER_VERSION}" >~/.guacamole_auth_jdbc

View File

@@ -66,7 +66,7 @@ esac
msg_info "Installing Tomcat $TOMCAT_VERSION" msg_info "Installing Tomcat $TOMCAT_VERSION"
LATEST_VERSION=$(curl -fsSL "https://dlcdn.apache.org/tomcat/tomcat-$TOMCAT_VERSION/" | grep -oP 'v[0-9]+\.[0-9]+\.[0-9]+(-M[0-9]+)?/' | sort -V | tail -n 1 | sed 's/\/$//; s/v//') LATEST_VERSION=$(curl -fsSL "https://dlcdn.apache.org/tomcat/tomcat-$TOMCAT_VERSION/" | grep -oP 'v[0-9]+\.[0-9]+\.[0-9]+(-M[0-9]+)?/' | sort -V | tail -n 1 | sed 's/\/$//; s/v//')
TOMCAT_URL="https://dlcdn.apache.org/tomcat/tomcat-$TOMCAT_VERSION/v$LATEST_VERSION/bin/apache-tomcat-$LATEST_VERSION.tar.gz" TOMCAT_URL="https://dlcdn.apache.org/tomcat/tomcat-$TOMCAT_VERSION/v$LATEST_VERSION/bin/apache-tomcat-$LATEST_VERSION.tar.gz"
curl -fsSL "$TOMCAT_URL" -o "/tmp/tomcat.tar.gz" curl_download "/tmp/tomcat.tar.gz" "$TOMCAT_URL"
mkdir -p /opt/tomcat-$TOMCAT_VERSION mkdir -p /opt/tomcat-$TOMCAT_VERSION
tar --strip-components=1 -xzf /tmp/tomcat.tar.gz -C /opt/tomcat-$TOMCAT_VERSION tar --strip-components=1 -xzf /tmp/tomcat.tar.gz -C /opt/tomcat-$TOMCAT_VERSION
chown -R root:root /opt/tomcat-$TOMCAT_VERSION chown -R root:root /opt/tomcat-$TOMCAT_VERSION

View File

@@ -0,0 +1,257 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Thieneret
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/goauthentik/authentik
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 \
pkg-config \
libffi-dev \
libxslt-dev \
zlib1g-dev \
libpq-dev \
krb5-multidev \
libkrb5-dev \
heimdal-multidev \
libclang-dev \
libltdl-dev \
libpq5 \
libmaxminddb0 \
libkrb5-3 \
libkdb5-10 \
libkadm5clnt-mit12 \
libkadm5clnt7t64-heimdal \
libltdl7 \
libxslt1.1 \
python3-dev \
libxml2-dev \
libxml2 \
libxslt1-dev \
automake \
autoconf \
libtool \
libtool-bin \
gcc \
git
msg_ok "Installed Dependencies"
NODE_VERSION="24" setup_nodejs
setup_yq
setup_go
UV_PYTHON_INSTALL_DIR="/usr/local/bin" PYTHON_VERSION="3.14.3" setup_uv
setup_rust
PG_VERSION="17" setup_postgresql
PG_DB_NAME="authentik" PG_DB_USER="authentik" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
XMLSEC_VERSION="1.3.11"
AUTHENTIK_VERSION="version/2026.2.3"
fetch_and_deploy_gh_release "xmlsec" "lsh123/xmlsec" "tarball" "${XMLSEC_VERSION}" "/opt/xmlsec"
fetch_and_deploy_gh_release "authentik" "goauthentik/authentik" "tarball" "${AUTHENTIK_VERSION}" "/opt/authentik"
fetch_and_deploy_gh_release "geoipupdate" "maxmind/geoipupdate" "binary"
msg_info "Setup xmlsec"
cd /opt/xmlsec
$STD ./autogen.sh
$STD make -j $(nproc)
$STD make check
$STD make install
$STD ldconfig
msg_ok "xmlsec installed"
msg_info "Setup web"
cd /opt/authentik/web
export NODE_ENV="production"
$STD npm install
$STD npm run build
$STD npm run build:sfe
msg_ok "Web installed"
msg_info "Setup go proxy"
cd /opt/authentik
export CGO_ENABLED="1"
$STD go mod download
$STD go build -o /opt/authentik/authentik-server ./cmd/server
$STD go build -o /opt/authentik/ldap ./cmd/ldap
$STD go build -o /opt/authentik/rac ./cmd/rac
$STD go build -o /opt/authentik/radius ./cmd/radius
msg_ok "Go proxy installed"
cat <<EOF >/usr/local/etc/GeoIP.conf
AccountID ChangeME
LicenseKey ChangeME
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country
DatabaseDirectory /opt/authentik-data/geoip
RetryFor 5m
Parallelism 1
EOF
echo "#39 19 * * 6,4 /usr/bin/geoipupdate -f /usr/local/etc/GeoIP.conf" | crontab -
msg_info "Setup python server"
export UV_NO_BINARY_PACKAGE="cryptography lxml python-kadmin-rs xmlsec"
export UV_COMPILE_BYTECODE="1"
export UV_LINK_MODE="copy"
export UV_NATIVE_TLS="1"
export RUSTUP_PERMIT_COPY_RENAME="true"
export UV_PYTHON_INSTALL_DIR="/usr/local/bin"
cd /opt/authentik
$STD uv sync --frozen --no-install-project --no-dev
cp /opt/authentik/authentik/sources/kerberos/krb5.conf /etc/krb5.conf
msg_ok "Installed python server"
msg_info "Creating authentik config"
mkdir -p /etc/authentik
mv /opt/authentik/authentik/lib/default.yml /etc/authentik/config.yml
yq -i ".secret_key = \"$(openssl rand -base64 128 | tr -dc 'a-zA-Z0-9' | head -c64)\"" /etc/authentik/config.yml
yq -i ".postgresql.password = \"${PG_DB_PASS}\"" /etc/authentik/config.yml
yq -i ".events.context_processors.geoip = \"/opt/authentik-data/geoip/GeoLite2-City.mmdb\"" /etc/authentik/config.yml
yq -i ".events.context_processors.asn = \"/opt/authentik-data/geoip/GeoLite2-ASN.mmdb\"" /etc/authentik/config.yml
yq -i ".blueprints_dir = \"/opt/authentik/blueprints\"" /etc/authentik/config.yml
yq -i ".cert_discovery_dir = \"/opt/authentik-data/certs\"" /etc/authentik/config.yml
yq -i ".email.template_dir = \"/opt/authentik-data/templates\"" /etc/authentik/config.yml
yq -i ".storage.file.path = \"/opt/authentik-data\"" /etc/authentik/config.yml
yq -i ".disable_startup_analytics = \"true\"" /etc/authentik/config.yml
$STD useradd -U -s /usr/sbin/nologin -r -M -d /opt/authentik authentik
chown -R authentik:authentik /opt/authentik
cat <<EOF >/etc/default/authentik
TMPDIR=/dev/shm/
UV_LINK_MODE=copy
UV_PYTHON_DOWNLOADS=0
UV_NATIVE_TLS=1
VENV_PATH=/opt/authentik/.venv
PYTHONDONTWRITEBYTECODE=1
PYTHONUNBUFFERED=1
PATH=/opt/authentik/lifecycle:/opt/authentik/.venv/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin
DJANGO_SETTINGS_MODULE=authentik.root.settings
PROMETHEUS_MULTIPROC_DIR="/tmp/authentik_prometheus_tmp"
EOF
cat <<EOF >/etc/default/authentik_ldap
AUTHENTIK_HOST="https://127.0.0.1:9443"
AUTHENTIK_INSECURE="true"
AUTHENTIK_TOKEN="token-generated-by-authentik"
EOF
cat <<EOF >/etc/default/authentik_rac
AUTHENTIK_HOST="https://127.0.0.1:9443"
AUTHENTIK_INSECURE="true"
AUTHENTIK_TOKEN="token-generated-by-authentik"
EOF
cat <<EOF >/etc/default/authentik_radius
AUTHENTIK_HOST="https://127.0.0.1:9443"
AUTHENTIK_INSECURE="true"
AUTHENTIK_TOKEN="token-generated-by-authentik"
EOF
msg_ok "authentik config created"
msg_info "Creating services"
cat <<EOF >/etc/systemd/system/authentik-server.service
[Unit]
Description=authentik Go Server (API Gateway)
After=network.target
Wants=postgresql.service
[Service]
User=authentik
Group=authentik
ExecStartPre=/usr/bin/mkdir -p "\${PROMETHEUS_MULTIPROC_DIR}"
ExecStart=/opt/authentik/authentik-server
WorkingDirectory=/opt/authentik/
Restart=always
RestartSec=5
EnvironmentFile=/etc/default/authentik
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/authentik-worker.service
[Unit]
Description=authentik Worker
After=network.target postgresql.service
[Service]
User=authentik
Group=authentik
Type=simple
EnvironmentFile=/etc/default/authentik
ExecStart=/usr/local/bin/uv run python -m manage worker --pid-file /dev/shm/authentik-worker.pid
WorkingDirectory=/opt/authentik
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/authentik-ldap.service
[Unit]
Description=authentik LDAP Outpost
After=network.target
Wants=postgresql.service
[Service]
User=authentik
Group=authentik
ExecStart=/opt/authentik/ldap
WorkingDirectory=/opt/authentik/
Restart=always
RestartSec=5
EnvironmentFile=/etc/default/authentik_ldap
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/authentik-rac.service
[Unit]
Description=authentik RAC Outpost
After=network.target
Wants=postgresql.service
[Service]
User=authentik
Group=authentik
ExecStart=/opt/authentik/rac
WorkingDirectory=/opt/authentik/
Restart=always
RestartSec=5
EnvironmentFile=/etc/default/authentik_rac
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/authentik-radius.service
[Unit]
Description=authentik Radius Outpost
After=network.target
Wants=postgresql.service
[Service]
User=authentik
Group=authentik
ExecStart=/opt/authentik/radius
WorkingDirectory=/opt/authentik/
Restart=always
RestartSec=5
EnvironmentFile=/etc/default/authentik_radius
[Install]
WantedBy=multi-user.target
EOF
msg_ok "Services created"
motd_ssh
customize
cleanup_lxc

View File

@@ -50,10 +50,12 @@ Type=simple
User=root User=root
EnvironmentFile=/opt/bichon/bichon.env EnvironmentFile=/opt/bichon/bichon.env
WorkingDirectory=/opt/bichon WorkingDirectory=/opt/bichon
ExecStart=/opt/bichon/bichon ExecStart=/opt/bichon/bichon-server
Restart=on-failure Restart=on-failure
RestartSec=5 RestartSec=5
LimitNOFILE=65536
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF

View File

@@ -52,6 +52,7 @@ After=network.target
[Service] [Service]
Type=simple Type=simple
User=root User=root
Environment="QTWEBENGINE_CHROMIUM_FLAGS=--no-sandbox"
WorkingDirectory=/opt/calibre-web WorkingDirectory=/opt/calibre-web
ExecStart=/opt/calibre-web/.venv/bin/python /opt/calibre-web/cps.py ExecStart=/opt/calibre-web/.venv/bin/python /opt/calibre-web/cps.py
Restart=on-failure Restart=on-failure

View File

@@ -16,7 +16,7 @@ update_os
msg_info "Install Checkmk" msg_info "Install Checkmk"
RELEASE=$(curl_with_retry "https://api.github.com/repos/checkmk/checkmk/tags" "-" | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -Ev 'rc|b' | sort -V | tail -n 1) RELEASE=$(curl_with_retry "https://api.github.com/repos/checkmk/checkmk/tags" "-" | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -Ev 'rc|b' | sort -V | tail -n 1)
RELEASE="${RELEASE%%+*}" RELEASE="${RELEASE%%+*}"
curl_with_retry "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-community-${RELEASE}_0.$(get_os_info codename)_amd64.deb" "/opt/checkmk.deb" curl_download "/opt/checkmk.deb" "https://download.checkmk.com/checkmk/${RELEASE}/check-mk-community-${RELEASE}_0.$(get_os_info codename)_amd64.deb"
$STD apt install -y /opt/checkmk.deb $STD apt install -y /opt/checkmk.deb
rm -rf /opt/checkmk.deb rm -rf /opt/checkmk.deb
echo "${RELEASE}" >"/opt/checkmk_version.txt" echo "${RELEASE}" >"/opt/checkmk_version.txt"

View File

@@ -0,0 +1,64 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: mathiasnagler
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/router-for-me/CLIProxyAPI
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 openssl
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "cliproxyapi" "router-for-me/CLIProxyAPI" "prebuild" "latest" "/opt/cliproxyapi" "CLIProxyAPI_*_linux_amd64.tar.gz"
msg_info "Configuring CLIProxyAPI"
MANAGEMENT_PASSWORD=$(openssl rand -hex 32)
API_KEY="sk-$(openssl rand -hex 16)"
cat <<EOF >/opt/cliproxyapi/config.yaml
host: ""
port: 8317
auth-dir: "/root/.cli-proxy-api"
remote-management:
allow-remote: true
secret-key: "${MANAGEMENT_PASSWORD}"
api-keys:
- "${API_KEY}"
request-retry: 3
quota-exceeded:
switch-project: true
switch-preview-model: true
routing:
strategy: "round-robin"
EOF
msg_ok "Configured CLIProxyAPI"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/cliproxyapi.service
[Unit]
Description=CLIProxyAPI
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/cliproxyapi
ExecStart=/opt/cliproxyapi/cli-proxy-api
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now cliproxyapi
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -29,7 +29,6 @@ Description=dashy
[Service] [Service]
Type=simple Type=simple
WorkingDirectory=/opt/dashy WorkingDirectory=/opt/dashy
Environment=NODE_OPTIONS=--openssl-legacy-provider
ExecStart=/usr/bin/node server.js ExecStart=/usr/bin/node server.js
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

View File

@@ -72,12 +72,12 @@ msg_ok "Configured Environment"
NODE_VERSION="22" setup_nodejs NODE_VERSION="22" setup_nodejs
RUBY_VERSION=$(cat /opt/dawarich/app/.ruby-version 2>/dev/null || echo "3.4.6") RUBY_VERSION=$(cat /opt/dawarich/app/.ruby-version 2>/dev/null || echo "3.4.6")
RUBY_VERSION=${RUBY_VERSION} RUBY_INSTALL_RAILS="false" setup_ruby RUBY_VERSION=${RUBY_VERSION} RUBY_INSTALL_RAILS="false" HOME=/root setup_ruby
msg_info "Installing Dawarich" msg_info "Installing Dawarich"
cd /opt/dawarich/app cd /opt/dawarich/app
source /root/.profile source /root/.profile
export PATH="/root/.rbenv/shims:/root/.rbenv/bin:$PATH" export PATH="/root/.rbenv/shims:/root/.rbenv/bin:${PATH}"
eval "$(/root/.rbenv/bin/rbenv init - bash)" eval "$(/root/.rbenv/bin/rbenv init - bash)"
set -a && source /opt/dawarich/.env && set +a set -a && source /opt/dawarich/.env && set +a
$STD gem install bundler $STD gem install bundler

88
install/degoog-install.sh Normal file
View File

@@ -0,0 +1,88 @@
#!/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/fccview/degoog
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 \
git \
unzip
msg_ok "Installed Dependencies"
msg_info "Installing Bun"
export BUN_INSTALL="/root/.bun"
curl -fsSL https://bun.sh/install | $STD bash
ln -sf /root/.bun/bin/bun /usr/local/bin/bun
ln -sf /root/.bun/bin/bunx /usr/local/bin/bunx
msg_ok "Installed Bun"
fetch_and_deploy_gh_release "degoog" "fccview/degoog" "prebuild" "latest" "/opt/degoog" "degoog_*_prebuild.tar.gz"
msg_info "Setting up degoog"
mkdir -p /opt/degoog/data/{engines,plugins,themes,store}
cat <<EOF >/opt/degoog/.env
DEGOOG_PORT=4444
DEGOOG_ENGINES_DIR=/opt/degoog/data/engines
DEGOOG_PLUGINS_DIR=/opt/degoog/data/plugins
DEGOOG_THEMES_DIR=/opt/degoog/data/themes
DEGOOG_ALIASES_FILE=/opt/degoog/data/aliases.json
DEGOOG_PLUGIN_SETTINGS_FILE=/opt/degoog/data/plugin-settings.json
# DEGOOG_SETTINGS_PASSWORDS=changeme
# DEGOOG_PUBLIC_INSTANCE=false
# LOGGER=debug
EOF
if [[ ! -f /opt/degoog/data/aliases.json ]]; then
cat <<EOF >/opt/degoog/data/aliases.json
{}
EOF
fi
if [[ ! -f /opt/degoog/data/plugin-settings.json ]]; then
cat <<EOF >/opt/degoog/data/plugin-settings.json
{}
EOF
fi
if [[ ! -f /opt/degoog/data/repos.json ]]; then
cat <<EOF >/opt/degoog/data/repos.json
[]
EOF
fi
msg_ok "Set up degoog"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/degoog.service
[Unit]
Description=degoog
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/degoog
EnvironmentFile=/opt/degoog/.env
ExecStart=/usr/local/bin/bun run src/server/index.ts
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now degoog
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

164
install/docuseal-install.sh Normal file
View File

@@ -0,0 +1,164 @@
#!/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://www.docuseal.com/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
build-essential \
git \
libpq-dev \
libssl-dev \
libyaml-dev \
libreadline-dev \
zlib1g-dev \
libffi-dev \
libvips42 \
libvips-dev \
libheif1 \
redis-server \
fontconfig
msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
RUBY_VERSION="4.0.1" RUBY_INSTALL_RAILS="false" HOME=/root setup_ruby
PG_VERSION="17" setup_postgresql
PG_DB_NAME="docuseal" PG_DB_USER="docuseal" setup_postgresql_db
msg_info "Downloading Fonts and PDFium"
mkdir -p /opt/fonts /usr/share/fonts/noto
ARCH=$(uname -m | sed 's/x86_64/x64/;s/aarch64/arm64/')
curl -fsSL -o /opt/fonts/GoNotoKurrent-Regular.ttf \
https://github.com/satbyy/go-noto-universal/releases/download/v7.0/GoNotoKurrent-Regular.ttf
curl -fsSL -o /opt/fonts/GoNotoKurrent-Bold.ttf \
https://github.com/satbyy/go-noto-universal/releases/download/v7.0/GoNotoKurrent-Bold.ttf
curl -fsSL -o /opt/fonts/DancingScript-Regular.otf \
https://github.com/impallari/DancingScript/raw/master/fonts/DancingScript-Regular.otf
ln -sf /opt/fonts/GoNotoKurrent-Regular.ttf /usr/share/fonts/noto/
ln -sf /opt/fonts/GoNotoKurrent-Bold.ttf /usr/share/fonts/noto/
$STD fc-cache -f
curl -fsSL -o /tmp/pdfium.tgz \
"https://github.com/bblanchon/pdfium-binaries/releases/latest/download/pdfium-linux-${ARCH}.tgz"
mkdir -p /tmp/pdfium && tar -xzf /tmp/pdfium.tgz -C /tmp/pdfium
cp /tmp/pdfium/lib/libpdfium.so /usr/lib/libpdfium.so
rm -rf /tmp/pdfium /tmp/pdfium.tgz
msg_ok "Downloaded Fonts and PDFium"
fetch_and_deploy_gh_release "docuseal" "docusealco/docuseal" "tarball"
msg_info "Downloading Field Detection Model"
mkdir -p /opt/docuseal/tmp
curl -fsSL -o /opt/docuseal/tmp/model.onnx \
"https://github.com/docusealco/fields-detection/releases/download/2.0.0/model_704_int8.onnx"
mkdir -p /opt/docuseal/public/fonts
ln -sf /opt/fonts/DancingScript-Regular.otf /opt/docuseal/public/fonts/DancingScript-Regular.otf
msg_ok "Downloaded Field Detection Model"
msg_info "Configuring DocuSeal"
SECRET_KEY=$(openssl rand -hex 64)
mkdir -p /opt/docuseal/data
cat <<EOF >/opt/docuseal/.env
RAILS_ENV=production
NODE_ENV=production
RAILS_LOG_TO_STDOUT=true
RAILS_SERVE_STATIC_FILES=true
SECRET_KEY_BASE=${SECRET_KEY}
DATABASE_URL=postgresql://docuseal:${PG_DB_PASS}@127.0.0.1:5432/docuseal
REDIS_URL=redis://localhost:6379/0
WORKDIR=/opt/docuseal/data
VIPS_MAX_COORD=17000
EOF
msg_ok "Configured DocuSeal"
msg_info "Building Application"
cd /opt/docuseal
export PATH="/root/.rbenv/bin:/root/.rbenv/shims:${PATH}"
eval "$(rbenv init - bash)" 2>/dev/null || true
export RAILS_ENV=production
export NODE_ENV=production
export SECRET_KEY_BASE_DUMMY=1
set -a
source /opt/docuseal/.env
set +a
$STD bundle config set --local deployment 'true'
$STD bundle config set --local without 'development:test'
$STD bundle install -j"$(nproc)"
$STD yarn install --network-timeout 1000000
$STD ./bin/shakapacker
$STD bundle exec rails db:migrate
$STD bundle exec bootsnap precompile -j 1 --gemfile app/ lib/
msg_ok "Built Application"
msg_info "Enabling Redis"
systemctl enable -q --now redis-server
msg_ok "Enabled Redis"
msg_info "Creating docuseal User"
id docuseal &>/dev/null || useradd -u 2000 -M -s /usr/sbin/nologin -d /opt/docuseal docuseal
chmod o+x /root
chmod -R o+rX /root/.rbenv
chown -R docuseal:docuseal /opt/docuseal /opt/fonts
msg_ok "Created docuseal User"
msg_info "Creating Services"
cat <<EOF >/etc/systemd/system/docuseal.service
[Unit]
Description=DocuSeal Web
After=network.target postgresql.service redis-server.service
[Service]
Type=simple
User=docuseal
Group=docuseal
WorkingDirectory=/opt/docuseal
EnvironmentFile=/opt/docuseal/.env
Environment=HOME=/opt/docuseal
Environment=PATH=/root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Environment=BUNDLE_GEMFILE=/opt/docuseal/Gemfile
Environment=BUNDLE_WITHOUT=development:test
ExecStart=/opt/docuseal/bin/bundle exec puma -C /opt/docuseal/config/puma.rb --dir /opt/docuseal -p 3000
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/docuseal-sidekiq.service
[Unit]
Description=DocuSeal Sidekiq
After=network.target postgresql.service redis-server.service
[Service]
Type=simple
User=docuseal
Group=docuseal
WorkingDirectory=/opt/docuseal
EnvironmentFile=/opt/docuseal/.env
Environment=HOME=/opt/docuseal
Environment=PATH=/root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Environment=BUNDLE_GEMFILE=/opt/docuseal/Gemfile
Environment=BUNDLE_WITHOUT=development:test
ExecStart=/opt/docuseal/bin/bundle exec sidekiq
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now docuseal docuseal-sidekiq
msg_ok "Created Services"
motd_ssh
customize
cleanup_lxc

View File

@@ -0,0 +1,58 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: John Lombardo (programbo)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/thelastoutpostworkshop/ESPConnect
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 "espconnect" "thelastoutpostworkshop/ESPConnect" "prebuild" "latest" "/opt/espconnect" "dist.zip"
create_self_signed_cert
msg_info "Configuring Nginx"
mkdir -p /etc/ssl/private
cat <<'EOF' >/etc/nginx/sites-available/espconnect
server {
listen 80 default_server;
listen [::]:80 default_server;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/ssl/espconnect/espconnect.crt;
ssl_certificate_key /etc/ssl/espconnect/espconnect.key;
ssl_protocols TLSv1.2 TLSv1.3;
root /opt/espconnect;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
EOF
ln -sf /etc/nginx/sites-available/espconnect /etc/nginx/sites-enabled/espconnect
rm -f /etc/nginx/sites-enabled/default
$STD nginx -t
systemctl enable -q nginx
systemctl restart nginx
msg_ok "Configured Nginx"
motd_ssh
customize
cleanup_lxc

View File

@@ -17,11 +17,12 @@ msg_info "Installing Dependencies"
$STD apt install -y xdg-utils $STD apt install -y xdg-utils
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs
fetch_and_deploy_gh_release "excalidraw" "excalidraw/excalidraw" "tarball" fetch_and_deploy_gh_release "excalidraw" "excalidraw/excalidraw" "tarball"
msg_info "Configuring Excalidraw" msg_info "Configuring Excalidraw"
cd /opt/excalidraw cd /opt/excalidraw
$STD yarn config set ignore-engines true
$STD yarn $STD yarn
msg_ok "Setup Excalidraw" msg_ok "Setup Excalidraw"

View File

@@ -13,10 +13,14 @@ setting_up_container
network_check network_check
update_os update_os
NODE_VERSION="20" NODE_MODULE="pnpm" setup_nodejs msg_info "Installing Dependencies"
$STD apt install -y build-essential python3-dev
msg_ok "Installed Dependencies"
NODE_VERSION="20" setup_nodejs
msg_info "Installing FlowiseAI (Patience)" msg_info "Installing FlowiseAI (Patience)"
$STD pnpm add -g flowise \ $STD npm install -g flowise \
@opentelemetry/exporter-trace-otlp-grpc \ @opentelemetry/exporter-trace-otlp-grpc \
@opentelemetry/exporter-trace-otlp-proto \ @opentelemetry/exporter-trace-otlp-proto \
@opentelemetry/sdk-trace-node \ @opentelemetry/sdk-trace-node \

View File

@@ -169,13 +169,13 @@ NODE_VERSION="20" setup_nodejs
msg_info "Downloading Inference Models" msg_info "Downloading Inference Models"
mkdir -p /models /openvino-model mkdir -p /models /openvino-model
curl_with_retry "https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess_edgetpu.tflite" "/edgetpu_model.tflite" curl_download "/edgetpu_model.tflite" "https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess_edgetpu.tflite"
curl_with_retry "https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess.tflite" "/models/cpu_model.tflite" curl_download "/models/cpu_model.tflite" "https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess.tflite"
cp /opt/frigate/labelmap.txt /labelmap.txt cp /opt/frigate/labelmap.txt /labelmap.txt
msg_ok "Downloaded Inference Models" msg_ok "Downloaded Inference Models"
msg_info "Downloading Audio Model" msg_info "Downloading Audio Model"
curl_with_retry "https://www.kaggle.com/api/v1/models/google/yamnet/tfLite/classification-tflite/1/download" "/tmp/yamnet.tar.gz" curl_download "/tmp/yamnet.tar.gz" "https://www.kaggle.com/api/v1/models/google/yamnet/tfLite/classification-tflite/1/download"
$STD tar xzf /tmp/yamnet.tar.gz -C / $STD tar xzf /tmp/yamnet.tar.gz -C /
mv /1.tflite /cpu_audio_model.tflite mv /1.tflite /cpu_audio_model.tflite
cp /opt/frigate/audio-labelmap.txt /audio-labelmap.txt cp /opt/frigate/audio-labelmap.txt /audio-labelmap.txt
@@ -188,7 +188,7 @@ msg_ok "Installed OpenVino"
msg_info "Building OpenVino Model" msg_info "Building OpenVino Model"
cd /models cd /models
curl_with_retry "http://download.tensorflow.org/models/object_detection/ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz" "ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz" curl_download "ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz" "http://download.tensorflow.org/models/object_detection/ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz"
$STD tar -zxf ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz --no-same-owner $STD tar -zxf ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz --no-same-owner
if python3 /opt/frigate/docker/main/build_ov_model.py &>/dev/null; then if python3 /opt/frigate/docker/main/build_ov_model.py &>/dev/null; then
mkdir -p /openvino-model mkdir -p /openvino-model
@@ -246,7 +246,7 @@ msg_info "Configuring Frigate"
mkdir -p /config /media/frigate mkdir -p /config /media/frigate
cp -r /opt/frigate/config/. /config cp -r /opt/frigate/config/. /config
curl_with_retry "https://github.com/intel-iot-devkit/sample-videos/raw/master/person-bicycle-car-detection.mp4" "/media/frigate/person-bicycle-car-detection.mp4" curl_download "/media/frigate/person-bicycle-car-detection.mp4" "https://github.com/intel-iot-devkit/sample-videos/raw/master/person-bicycle-car-detection.mp4"
echo "tmpfs /tmp/cache tmpfs defaults 0 0" >>/etc/fstab echo "tmpfs /tmp/cache tmpfs defaults 0 0" >>/etc/fstab

View File

@@ -19,7 +19,7 @@ $STD apt install -y \
git git
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
msg_info "Preparing Fumadocs - " msg_info "Preparing Fumadocs - "
mkdir -p /opt/fumadocs mkdir -p /opt/fumadocs

View File

@@ -33,7 +33,7 @@ msg_ok "Set up Python Backend"
msg_info "Configuring Homelable" msg_info "Configuring Homelable"
mkdir -p /opt/homelable/data mkdir -p /opt/homelable/data
SECRET_KEY=$(openssl rand -hex 32) SECRET_KEY=$(openssl rand -hex 32)
BCRYPT_HASH=$(/opt/homelable/backend/.venv/bin/python -c "from passlib.context import CryptContext; print(CryptContext(schemes=['bcrypt']).hash('admin'))") BCRYPT_HASH=$(/opt/homelable/backend/.venv/bin/python -c "import bcrypt; print(bcrypt.hashpw(b'admin', bcrypt.gensalt()).decode())")
cat <<EOF >/opt/homelable/backend/.env cat <<EOF >/opt/homelable/backend/.env
SECRET_KEY=${SECRET_KEY} SECRET_KEY=${SECRET_KEY}
SQLITE_PATH=/opt/homelable/data/homelab.db SQLITE_PATH=/opt/homelable/data/homelab.db
@@ -59,7 +59,7 @@ while [[ -z "$NEW_PASS" ]]; do
fi fi
done done
HASH=$(/opt/homelable/backend/.venv/bin/python -c "from passlib.context import CryptContext; print(CryptContext(schemes=['bcrypt']).hash('${NEW_PASS}'))") HASH=$(/opt/homelable/backend/.venv/bin/python -c "import bcrypt; print(bcrypt.hashpw('${NEW_PASS}'.encode(), bcrypt.gensalt()).decode())")
sed -i "s|^AUTH_PASSWORD_HASH=.*|AUTH_PASSWORD_HASH='${HASH}'|" /opt/homelable/backend/.env sed -i "s|^AUTH_PASSWORD_HASH=.*|AUTH_PASSWORD_HASH='${HASH}'|" /opt/homelable/backend/.env

View File

@@ -50,7 +50,7 @@ if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
fi fi
msg_info "Installing Kasm Workspaces" msg_info "Installing Kasm Workspaces"
curl -fsSL -o "/opt/kasm_release_${KASM_VERSION}.tar.gz" "$KASM_URL" curl_download "/opt/kasm_release_${KASM_VERSION}.tar.gz" "$KASM_URL"
cd /opt cd /opt
tar -xf "kasm_release_${KASM_VERSION}.tar.gz" tar -xf "kasm_release_${KASM_VERSION}.tar.gz"
chmod +x /opt/kasm_release/install.sh chmod +x /opt/kasm_release/install.sh

101
install/lobehub-install.sh Normal file
View File

@@ -0,0 +1,101 @@
#!/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/lobehub/lobehub
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"
PG_VERSION="17" PG_MODULES="pgvector" setup_postgresql
CODENAME=$(. /etc/os-release && echo "${VERSION_CODENAME:-bookworm}")
fetch_and_deploy_gh_release "paradedb" "paradedb/paradedb" "binary" "latest" "" "postgresql-17-pg-search_*-1PARADEDB-${CODENAME}_$(dpkg --print-architecture).deb"
msg_info "Configuring pg_search preload library"
if ! grep -q "shared_preload_libraries.*pg_search" /etc/postgresql/17/main/postgresql.conf; then
echo "shared_preload_libraries = 'pg_search'" >>/etc/postgresql/17/main/postgresql.conf
fi
systemctl restart postgresql
msg_ok "Configured pg_search preload library"
PG_DB_NAME="lobehub" PG_DB_USER="lobehub" PG_DB_EXTENSIONS="vector,pg_search" setup_postgresql_db
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
fetch_and_deploy_gh_release "lobehub" "lobehub/lobehub" "tarball"
msg_info "Building Application"
cd /opt/lobehub
export DATABASE_URL="postgres://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}"
export DATABASE_DRIVER="node"
export KEY_VAULTS_SECRET="$(openssl rand -base64 32)"
export AUTH_SECRET="$(openssl rand -base64 32)"
export APP_URL="http://localhost:3210"
$STD pnpm install
$STD pnpm run build:docker
msg_ok "Built Application"
msg_info "Configuring Application"
KEY_VAULTS_SECRET=$(openssl rand -base64 32)
AUTH_SECRET=$(openssl rand -base64 32)
cat <<EOF >/opt/lobehub/.env
DATABASE_URL=postgres://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}
DATABASE_DRIVER=node
KEY_VAULTS_SECRET=${KEY_VAULTS_SECRET}
AUTH_SECRET=${AUTH_SECRET}
APP_URL=http://${LOCAL_IP}:3210
HOSTNAME=0.0.0.0
PORT=3210
NODE_ENV=production
EOF
msg_ok "Configured Application"
msg_info "Setting Up Standalone"
cp -r /opt/lobehub/.next/static /opt/lobehub/.next/standalone/.next/static
cp -r /opt/lobehub/public /opt/lobehub/.next/standalone/public
cp -r /opt/lobehub/scripts/migrateServerDB/* /opt/lobehub/.next/standalone/
cp -r /opt/lobehub/packages/database/migrations /opt/lobehub/.next/standalone/migrations
msg_ok "Set Up Standalone"
msg_info "Running Database Migrations"
cd /opt/lobehub/.next/standalone
set -a && source /opt/lobehub/.env && set +a
$STD node /opt/lobehub/.next/standalone/docker.cjs
msg_ok "Ran Database Migrations"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/lobehub.service
[Unit]
Description=LobeHub
After=network.target postgresql.service
Requires=postgresql.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/lobehub/.next/standalone
EnvironmentFile=/opt/lobehub/.env
ExecStart=/usr/bin/node /opt/lobehub/.next/standalone/server.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now lobehub
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -24,16 +24,16 @@ $STD apt update
$STD apt install -y unrar $STD apt install -y unrar
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.11" setup_uv
fetch_and_deploy_gh_release "mylar3" "mylar3/mylar3" "tarball" fetch_and_deploy_gh_release "mylar3" "MylarComics/mylar3" "tarball"
msg_info "Installing ${APPLICATION}" msg_info "Installing Mylar3"
mkdir -p /opt/mylar3-data mkdir -p /opt/mylar3-data
$STD uv venv --clear /opt/mylar3/.venv $STD uv venv --clear /opt/mylar3/.venv
$STD /opt/mylar3/.venv/bin/python -m ensurepip --upgrade $STD /opt/mylar3/.venv/bin/python -m ensurepip --upgrade
$STD /opt/mylar3/.venv/bin/python -m pip install --upgrade pip $STD /opt/mylar3/.venv/bin/python -m pip install --upgrade pip
$STD /opt/mylar3/.venv/bin/python -m pip install --no-cache-dir -r /opt/mylar3/requirements.txt $STD /opt/mylar3/.venv/bin/python -m pip install --no-cache-dir -r /opt/mylar3/requirements.txt
msg_ok "Installed ${APPLICATION}" msg_ok "Installed Mylar3"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/mylar3.service cat <<EOF >/etc/systemd/system/mylar3.service

View File

@@ -30,7 +30,7 @@ msg_ok "Installed Dependencies"
msg_info "Setup NextPVR (Patience)" msg_info "Setup NextPVR (Patience)"
cd /opt cd /opt
curl -fsSL "https://nextpvr.com/nextpvr-helper.deb" -o "/opt/nextpvr-helper.deb" curl_download "/opt/nextpvr-helper.deb" "https://nextpvr.com/nextpvr-helper.deb"
$STD dpkg -i nextpvr-helper.deb $STD dpkg -i nextpvr-helper.deb
rm -rf /opt/nextpvr-helper.deb rm -rf /opt/nextpvr-helper.deb
msg_ok "Installed NextPVR" msg_ok "Installed NextPVR"

View File

@@ -62,26 +62,15 @@ $STD apt install -y --no-install-recommends intel-basekit-2024.1
msg_ok "Installed Intel® oneAPI Base Toolkit" msg_ok "Installed Intel® oneAPI Base Toolkit"
msg_info "Installing Ollama (Patience)" msg_info "Installing Ollama (Patience)"
RELEASE=$(curl -fsSL https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
OLLAMA_INSTALL_DIR="/usr/local/lib/ollama" OLLAMA_INSTALL_DIR="/usr/local/lib/ollama"
BINDIR="/usr/local/bin" BINDIR="/usr/local/bin"
mkdir -p $OLLAMA_INSTALL_DIR mkdir -p "$OLLAMA_INSTALL_DIR"
OLLAMA_URL="https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tar.zst" if ! fetch_and_deploy_gh_release "ollama-com" "ollama/ollama" "prebuild" "latest" "$OLLAMA_INSTALL_DIR" "ollama-linux-amd64.tar.zst"; then
TMP_TAR="/tmp/ollama.tar.zst" msg_error "Failed to download or deploy Ollama check network connectivity and GitHub API availability"
echo -e "\n"
if curl -fL# -C - -o "$TMP_TAR" "$OLLAMA_URL"; 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}"
else
msg_error "Extraction failed archive corrupt or incomplete"
exit 251
fi
else
msg_error "Download failed $OLLAMA_URL not reachable"
exit 250 exit 250
fi fi
ln -sf "$OLLAMA_INSTALL_DIR/bin/ollama" "$BINDIR/ollama"
msg_ok "Installed Ollama"
msg_info "Creating ollama User and Group" msg_info "Creating ollama User and Group"
if ! id ollama >/dev/null 2>&1; then if ! id ollama >/dev/null 2>&1; then

View File

@@ -28,7 +28,7 @@ fi
if ! dpkg -l | grep -q 'libssl1.1'; then if ! dpkg -l | grep -q 'libssl1.1'; then
msg_info "Installing libssl (if needed)" msg_info "Installing libssl (if needed)"
curl -fsSL "https://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1w-0+deb11u5_amd64.deb" -o "/tmp/libssl.deb" curl_download "/tmp/libssl.deb" "https://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1w-0+deb11u5_amd64.deb"
$STD dpkg -i /tmp/libssl.deb $STD dpkg -i /tmp/libssl.deb
rm -f /tmp/libssl.deb rm -f /tmp/libssl.deb
msg_ok "Installed libssl1.1" msg_ok "Installed libssl1.1"
@@ -39,7 +39,7 @@ OMADA_URL=$(curl -fsSL "https://support.omadanetworks.com/en/download/software/o
grep -o 'https://static\.tp-link\.com/upload/software/[^"]*linux_x64[^"]*\.deb' | grep -o 'https://static\.tp-link\.com/upload/software/[^"]*linux_x64[^"]*\.deb' |
head -n1) head -n1)
OMADA_PKG=$(basename "${OMADA_URL}") OMADA_PKG=$(basename "${OMADA_URL}")
curl -fsSL "${OMADA_URL}" -o "${OMADA_PKG}" curl_download "${OMADA_PKG}" "${OMADA_URL}"
$STD dpkg -i "${OMADA_PKG}" $STD dpkg -i "${OMADA_PKG}"
rm -rf "${OMADA_PKG}" rm -rf "${OMADA_PKG}"
VERSION=$(sed -n 's/.*_v\([0-9.]*\)_.*_\([0-9]\{14\}\)\.deb$/\1-\2/p' <<<"${OMADA_PKG}") VERSION=$(sed -n 's/.*_v\([0-9.]*\)_.*_\([0-9]\{14\}\)\.deb$/\1-\2/p' <<<"${OMADA_PKG}")

View File

@@ -64,7 +64,7 @@ $STD sudo -u cool coolconfig set-admin-password --user=admin --password="$COOLPA
echo "$COOLPASS" >~/.coolpass echo "$COOLPASS" >~/.coolpass
msg_ok "Installed Collabora Online" msg_ok "Installed Collabora Online"
fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "v6.1.0" "/usr/bin" "opencloud-*-linux-amd64" fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "v6.2.0" "/usr/bin" "opencloud-*-linux-amd64"
mv /usr/bin/OpenCloud /usr/bin/opencloud mv /usr/bin/OpenCloud /usr/bin/opencloud
msg_info "Configuring OpenCloud" msg_info "Configuring OpenCloud"

View File

@@ -73,11 +73,11 @@ EOF
msg_ok "Installed Intel® oneAPI Base Toolkit" msg_ok "Installed Intel® oneAPI Base Toolkit"
msg_info "Installing Ollama" msg_info "Installing Ollama"
OLLAMA_RELEASE=$(curl -fsSL https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk -F '"' '{print $4}') if ! fetch_and_deploy_gh_release "ollama-com" "ollama/ollama" "prebuild" "latest" "/usr/lib/ollama" "ollama-linux-amd64.tar.zst"; then
curl -fsSLO -C - https://github.com/ollama/ollama/releases/download/${OLLAMA_RELEASE}/ollama-linux-amd64.tar.zst msg_error "Failed to download or deploy Ollama check network connectivity and GitHub API availability"
tar --zstd -C /usr -xf ollama-linux-amd64.tar.zst else
rm -rf ollama-linux-amd64.tar.zst ln -sf /usr/lib/ollama/bin/ollama /usr/bin/ollama
cat <<EOF >/etc/systemd/system/ollama.service cat <<EOF >/etc/systemd/system/ollama.service
[Unit] [Unit]
Description=Ollama Service Description=Ollama Service
After=network-online.target After=network-online.target
@@ -93,9 +93,10 @@ RestartSec=3
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now ollama systemctl enable -q --now ollama
echo "ENABLE_OLLAMA_API=true" >/root/.env echo "ENABLE_OLLAMA_API=true" >/root/.env
msg_ok "Installed Ollama" msg_ok "Installed Ollama"
fi
fi fi
msg_info "Creating Service" msg_info "Creating Service"

View File

@@ -22,7 +22,7 @@ $STD apt install -y \
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
NODE_VERSION="24" setup_nodejs NODE_VERSION="24" setup_nodejs
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.18.3}" PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.18.4}"
fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball" "$PANGOLIN_VERSION" fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball" "$PANGOLIN_VERSION"
fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_amd64" fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_amd64"
fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_amd64.tar.gz" fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_amd64.tar.gz"

View File

@@ -24,7 +24,7 @@ RELEASE=$(curl -fsSL https://api.github.com/repos/papra-hq/papra/releases | grep
fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball" "${RELEASE}" "/opt/papra" fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball" "${RELEASE}" "/opt/papra"
pnpm_version=$(grep -oP '"packageManager":\s*"pnpm@\K[^"]+' /opt/papra/package.json) pnpm_version=$(grep -oP '"packageManager":\s*"pnpm@\K[^"]+' /opt/papra/package.json)
NODE_VERSION="24" NODE_MODULE="pnpm@$pnpm_version" setup_nodejs NODE_VERSION="26" NODE_MODULE="pnpm@$pnpm_version" setup_nodejs
msg_info "Installing Papra (Patience)" msg_info "Installing Papra (Patience)"
cd /opt/papra cd /opt/papra

View File

@@ -15,52 +15,83 @@ update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt install -y \ $STD apt install -y \
build-essential \ git \
python3-dev \ libsqlite3-0
libffi-dev \
libssl-dev \
git
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
PYTHON_VERSION="3.12" setup_uv ARCH=$(uname -m)
NODE_VERSION="22" setup_nodejs fetch_and_deploy_gh_release "deno" "denoland/deno" "prebuild" "latest" "/usr/local/bin" "deno-${ARCH}-unknown-linux-gnu.zip"
msg_info "Creating directories"
mkdir -p /opt/profilarr \
/config
msg_ok "Created directories"
fetch_and_deploy_gh_release "profilarr" "Dictionarry-Hub/profilarr" "tarball" fetch_and_deploy_gh_release "profilarr" "Dictionarry-Hub/profilarr" "tarball"
PROFILARR_VERSION=$(cat ~/.profilarr)
msg_info "Installing Python Dependencies" msg_info "Building Profilarr v${PROFILARR_VERSION} (Patience)"
cd /opt/profilarr/backend cd /opt/profilarr
$STD uv venv /opt/profilarr/backend/.venv cat >src/lib/shared/build.ts <<EOF
sed 's/==/>=/g' requirements.txt >requirements-relaxed.txt // Generated at install time. Do not hand-edit.
$STD uv pip install --python /opt/profilarr/backend/.venv/bin/python -r requirements-relaxed.txt export type Channel = 'stable' | 'develop' | 'dev';
rm -f requirements-relaxed.txt
msg_ok "Installed Python Dependencies"
msg_info "Building Frontend" export interface BuildInfo {
cd /opt/profilarr/frontend readonly version: string;
$STD npm install readonly channel: Channel;
$STD npm run build readonly commit: string | null;
cp -r dist /opt/profilarr/backend/app/static readonly builtAt: string | null;
msg_ok "Built Frontend" }
export const build: BuildInfo = {
version: '${PROFILARR_VERSION}',
channel: 'stable',
commit: null,
builtAt: '$(date -u +"%Y-%m-%dT%H:%M:%SZ")'
};
EOF
$STD deno install --node-modules-dir
export APP_BASE_PATH=/opt/profilarr/dist/build
export VITE_CHANNEL=stable
$STD deno run -A npm:vite build
DENO_TARGET="${ARCH}-unknown-linux-gnu"
$STD deno compile \
--no-check \
--allow-net \
--allow-read \
--allow-write \
--allow-env \
--allow-ffi \
--allow-run \
--allow-sys \
--target "$DENO_TARGET" \
--output dist/build/profilarr \
dist/build/mod.ts
msg_ok "Built Profilarr"
msg_info "Installing Profilarr"
mkdir -p /opt/profilarr/app
cp dist/build/profilarr /opt/profilarr/app/profilarr
cp dist/build/server.js /opt/profilarr/app/server.js
cp -r dist/build/static /opt/profilarr/app/static
chmod +x /opt/profilarr/app/profilarr
mkdir -p /var/lib/profilarr/{data,logs,backups,databases}
SQLITE_PATH="/usr/lib/${ARCH}-linux-gnu/libsqlite3.so.0"
cat <<EOF >/etc/default/profilarr
PORT=6868
HOST=0.0.0.0
APP_BASE_PATH=/var/lib/profilarr
DENO_SQLITE_PATH=${SQLITE_PATH}
EOF
msg_ok "Installed Profilarr"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/profilarr.service cat <<EOF >/etc/systemd/system/profilarr.service
[Unit] [Unit]
Description=Profilarr - Configuration Management Platform for Radarr/Sonarr Description=Profilarr - Configuration Management for Radarr/Sonarr
After=network.target After=network.target
[Service] [Service]
Type=simple Type=simple
User=root WorkingDirectory=/opt/profilarr/app
WorkingDirectory=/opt/profilarr/backend EnvironmentFile=/etc/default/profilarr
Environment="PATH=/opt/profilarr/backend/.venv/bin:/usr/local/bin:/usr/bin:/bin" Environment=HOME=/root
Environment="PYTHONPATH=/opt/profilarr/backend" ExecStart=/opt/profilarr/app/profilarr
ExecStart=/opt/profilarr/backend/.venv/bin/gunicorn --bind 0.0.0.0:6868 --timeout 600 app.main:create_app() Restart=always
Restart=on-failure
RestartSec=5 RestartSec=5
[Install] [Install]

View File

@@ -55,7 +55,7 @@ DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAM
AUTH_SECRET=${AUTH_SECRET} AUTH_SECRET=${AUTH_SECRET}
# Printer (headless Chromium for PDF generation) # Printer (headless Chromium for PDF generation)
PRINTER_ENDPOINT=http://localhost:9222 PRINTER_ENDPOINT=http://127.0.0.1:9222
# Storage: uses local filesystem (/opt/reactive-resume/data) when S3 is not configured # Storage: uses local filesystem (/opt/reactive-resume/data) when S3 is not configured
# S3_ACCESS_KEY_ID= # S3_ACCESS_KEY_ID=
@@ -92,7 +92,7 @@ After=network.target
[Service] [Service]
Type=simple Type=simple
ExecStart=/usr/bin/chromium --headless --disable-gpu --no-sandbox --disable-dev-shm-usage --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222 ExecStart=/usr/bin/chromium --headless --disable-gpu --no-sandbox --no-zygote --disable-dev-shm-usage --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222
Restart=always Restart=always
RestartSec=5 RestartSec=5
@@ -107,7 +107,7 @@ After=network.target postgresql.service chromium-printer.service
Wants=postgresql.service chromium-printer.service Wants=postgresql.service chromium-printer.service
[Service] [Service]
WorkingDirectory=/opt/reactive-resume WorkingDirectory=/opt/reactive-resume/apps/web
EnvironmentFile=/opt/reactive-resume/.env EnvironmentFile=/opt/reactive-resume/.env
ExecStart=/usr/bin/node .output/server/index.mjs ExecStart=/usr/bin/node .output/server/index.mjs
Restart=always Restart=always

View File

@@ -75,6 +75,9 @@ enabled_plugins:
search: search:
safe_search: 2 safe_search: 2
autocomplete: 'google' autocomplete: 'google'
formats:
- html
- json
engines: engines:
- name: google - name: google
engine: google engine: google

View File

@@ -21,12 +21,14 @@ fetch_and_deploy_gh_release "snowshare" "TuroYT/snowshare" "tarball"
msg_info "Installing SnowShare" msg_info "Installing SnowShare"
cd /opt/snowshare cd /opt/snowshare
$STD npm ci $STD npm ci
mkdir -p /opt/snowshare_data
cat <<EOF >/opt/snowshare.env cat <<EOF >/opt/snowshare.env
DATABASE_URL="postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME" DATABASE_URL="postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME"
NEXTAUTH_URL="http://localhost:3000" NEXTAUTH_URL="http://localhost:3000"
NEXTAUTH_SECRET="$(openssl rand -base64 32)" NEXTAUTH_SECRET="$(openssl rand -base64 32)"
ALLOW_SIGNUP=true ALLOW_SIGNUP=true
NODE_ENV=production NODE_ENV=production
UPLOAD_DIR=/opt/snowshare_data
EOF EOF
set -a set -a
source /opt/snowshare.env source /opt/snowshare.env

View File

@@ -17,12 +17,10 @@ PG_VERSION="17" setup_postgresql
PG_DB_NAME="sonarqube" PG_DB_USER="sonarqube" setup_postgresql_db PG_DB_NAME="sonarqube" PG_DB_USER="sonarqube" setup_postgresql_db
msg_info "Setting up SonarQube" msg_info "Setting up SonarQube"
temp_file=$(mktemp) RELEASE=$(curl -s "https://binaries.sonarsource.com/s3api?prefix=Distribution/sonarqube/sonarqube-&delimiter=/" |
RELEASE=$(get_latest_github_release "SonarSource/sonarqube") grep -oP 'sonarqube-[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.zip' |
curl -fsSL "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${RELEASE}.zip" -o $temp_file sort -V | tail -n1)
unzip -q "$temp_file" -d /opt fetch_and_deploy_from_url "https://binaries.sonarsource.com/Distribution/sonarqube/${RELEASE}" /opt/sonarqube
rm -f "$temp_file"
mv /opt/sonarqube-* /opt/sonarqube
$STD useradd -r -m -U -d /opt/sonarqube -s /bin/bash sonarqube $STD useradd -r -m -U -d /opt/sonarqube -s /bin/bash sonarqube
chown -R sonarqube:sonarqube /opt/sonarqube chown -R sonarqube:sonarqube /opt/sonarqube
chmod -R 755 /opt/sonarqube chmod -R 755 /opt/sonarqube

View File

@@ -84,6 +84,9 @@ msg_info "Configuring Nginx"
sed \ sed \
-e 's|${SPARKY_FITNESS_SERVER_HOST}|127.0.0.1|g' \ -e 's|${SPARKY_FITNESS_SERVER_HOST}|127.0.0.1|g' \
-e 's|${SPARKY_FITNESS_SERVER_PORT}|3010|g' \ -e 's|${SPARKY_FITNESS_SERVER_PORT}|3010|g' \
-e 's|${NGINX_LISTEN_PORT}|80|g' \
-e 's|${NGINX_ACCESS_LOG}|/var/log/nginx/sparkyfitness.access.log|g' \
-e 's|${NGINX_ERROR_LOG}|/var/log/nginx/sparkyfitness.error.log|g' \
-e 's|root /usr/share/nginx/html;|root /var/www/sparkyfitness;|g' \ -e 's|root /usr/share/nginx/html;|root /var/www/sparkyfitness;|g' \
-e 's|server_name localhost;|server_name _;|g' \ -e 's|server_name localhost;|server_name _;|g' \
"/opt/sparkyfitness/docker/nginx.conf" >/etc/nginx/sites-available/sparkyfitness "/opt/sparkyfitness/docker/nginx.conf" >/etc/nginx/sites-available/sparkyfitness

View File

@@ -26,7 +26,7 @@ fetch_and_deploy_gh_release "Sure" "we-promise/sure" "tarball" "latest" "/opt/su
PG_VERSION="$(sed -n '/postgres:/s/[^[:digit:]]*//p' /opt/sure/compose.example.yml)" setup_postgresql PG_VERSION="$(sed -n '/postgres:/s/[^[:digit:]]*//p' /opt/sure/compose.example.yml)" setup_postgresql
PG_DB_NAME=sure_production PG_DB_USER=sure_user setup_postgresql_db PG_DB_NAME=sure_production PG_DB_USER=sure_user setup_postgresql_db
RUBY_VERSION="$(cat /opt/sure/.ruby-version)" RUBY_INSTALL_RAILS=false setup_ruby RUBY_VERSION="$(cat /opt/sure/.ruby-version)" RUBY_INSTALL_RAILS=false HOME=/root setup_ruby
msg_info "Building Sure" msg_info "Building Sure"
cd /opt/sure cd /opt/sure
@@ -73,6 +73,7 @@ ExecStartPre=/opt/sure/bin/rails db:prepare
ExecStart=/opt/sure/bin/rails server ExecStart=/opt/sure/bin/rails server
Restart=always Restart=always
RestartSec=5 RestartSec=5
TimeoutStartSec=300
StandardOutput=journal StandardOutput=journal
StandardError=journal StandardError=journal

View File

@@ -29,7 +29,7 @@ msg_ok "Setup Platformio"
msg_info "Setup TasmoCompiler" msg_info "Setup TasmoCompiler"
mkdir /tmp/Tasmota mkdir /tmp/Tasmota
RELEASE=$(curl -fsSL https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz" -o "/tmp/v${RELEASE}.tar.gz" curl_download "/tmp/v${RELEASE}.tar.gz" "https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz"
cd /tmp cd /tmp
tar xzf /tmp/v${RELEASE}.tar.gz tar xzf /tmp/v${RELEASE}.tar.gz
mv tasmocompiler-${RELEASE}/ /opt/tasmocompiler/ mv tasmocompiler-${RELEASE}/ /opt/tasmocompiler/

View File

@@ -54,7 +54,7 @@ cd /opt
rm -rf /opt/guacamole-server rm -rf /opt/guacamole-server
msg_ok "Built Guacamole Server (guacd)" msg_ok "Built Guacamole Server (guacd)"
NODE_VERSION="22" setup_nodejs NODE_VERSION="24" setup_nodejs
fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" "tarball" fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" "tarball"
msg_info "Building Frontend" msg_info "Building Frontend"
@@ -101,16 +101,17 @@ sed -i 's|/app/nginx|/opt/termix/nginx|g' /etc/nginx/nginx.conf
sed -i 's|listen ${PORT};|listen 80;|g' /etc/nginx/nginx.conf sed -i 's|listen ${PORT};|listen 80;|g' /etc/nginx/nginx.conf
mkdir -p /tmp/nginx mkdir -p /tmp/nginx
echo "d /tmp/nginx 0755 nobody nobody -" > /etc/tmpfiles.d/nginx-termix.conf echo "d /tmp/nginx 0755 nobody nogroup -" >/etc/tmpfiles.d/nginx-termix.conf
mkdir -p /etc/systemd/system/nginx.service.d/ mkdir -p /etc/systemd/system/nginx.service.d/
cat > /etc/systemd/system/nginx.service.d/pidfile.conf << EOF cat >/etc/systemd/system/nginx.service.d/pidfile.conf <<EOF
[Service] [Service]
PIDFile=/tmp/nginx/nginx.pid PIDFile=/tmp/nginx/nginx.pid
EOF EOF
systemctl daemon-reload systemctl daemon-reload
rm -f /etc/nginx/sites-enabled/default rm -f /etc/nginx/sites-enabled/default
nginx -t nginx -t
systemctl reload nginx systemctl enable nginx
systemctl restart nginx
msg_ok "Configured Nginx" msg_ok "Configured Nginx"
msg_info "Creating Service" msg_info "Creating Service"

View File

@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
$STD apt install -y build-essential $STD apt install -y build-essential
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs NODE_VERSION="24" setup_nodejs
fetch_and_deploy_gh_release "trek" "mauriceboe/TREK" "tarball" fetch_and_deploy_gh_release "trek" "mauriceboe/TREK" "tarball"
msg_info "Building Client" msg_info "Building Client"

View File

@@ -24,7 +24,7 @@ setup_mariadb
MARIADB_DB_NAME="wallabag" MARIADB_DB_USER="wallabag" setup_mariadb_db MARIADB_DB_NAME="wallabag" MARIADB_DB_USER="wallabag" setup_mariadb_db
PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="tidy" setup_php PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="tidy" setup_php
setup_composer setup_composer
NODE_VERSION="22" setup_nodejs NODE_VERSION="24" setup_nodejs
fetch_and_deploy_gh_release "wallabag" "wallabag/wallabag" "prebuild" "latest" "/opt/wallabag" "wallabag-*.tar.gz" fetch_and_deploy_gh_release "wallabag" "wallabag/wallabag" "prebuild" "latest" "/opt/wallabag" "wallabag-*.tar.gz"
msg_info "Configuring Wallabag" msg_info "Configuring Wallabag"

View File

@@ -24,8 +24,7 @@ cd /opt/wanderer/source/db
$STD go mod tidy $STD go mod tidy
$STD go build $STD go build
cd /opt/wanderer/source/web cd /opt/wanderer/source/web
$STD npm ci -s vitest $STD npm ci
$STD npm ci --omit=dev
$STD npm run build $STD npm run build
msg_ok "Installed wanderer" msg_ok "Installed wanderer"

View File

@@ -0,0 +1,77 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: sudofly
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://webtrees.net/
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 \
caddy \
unzip
msg_ok "Installed Dependencies"
PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULES="bcmath,gd,intl,xml,zip,pdo_mysql,mbstring,curl" setup_php
setup_mariadb
MARIADB_DB_NAME="webtrees" MARIADB_DB_USER="webtrees" setup_mariadb_db
$STD mariadb -u root -e "GRANT ALL ON \`webtrees\`.* TO 'webtrees'@'127.0.0.1' IDENTIFIED BY '${MARIADB_DB_PASS}'; FLUSH PRIVILEGES;"
fetch_and_deploy_gh_release "webtrees" "fisharebest/webtrees" "prebuild" "latest" "/opt/webtrees" "webtrees-*.zip"
msg_info "Setting up Webtrees"
chown -R www-data:www-data /opt/webtrees
msg_ok "Set up Webtrees"
msg_info "Configuring Caddy"
PHP_VER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION;')
cat <<EOF >/etc/caddy/Caddyfile
:80 {
root * /opt/webtrees
php_fastcgi unix//run/php/php${PHP_VER}-fpm.sock
file_server
encode gzip
}
EOF
usermod -aG www-data caddy
msg_ok "Configured Caddy"
systemctl enable -q --now php${PHP_VER}-fpm
systemctl restart caddy
msg_info "Automating Webtrees Setup"
sleep 5
WT_ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c15)
curl -sS -X POST "http://127.0.0.1/" \
-d "step=6" \
--data-urlencode "baseurl=http://${LOCAL_IP}" \
-d "lang=en-US" \
-d "dbtype=mysql" \
-d "dbhost=127.0.0.1" \
-d "dbport=3306" \
-d "dbuser=webtrees" \
--data-urlencode "dbpass=${MARIADB_DB_PASS}" \
-d "dbname=webtrees" \
-d "tblpfx=wt_" \
-d "wtname=Administrator" \
-d "wtuser=Admin" \
--data-urlencode "wtpass=${WT_ADMIN_PASS}" \
-d "wtemail=admin@example.com" >/dev/null
cat <<EOF >>~/webtrees.creds
Webtrees Admin User: Admin
Webtrees Admin Password: ${WT_ADMIN_PASS}
EOF
msg_ok "Webtrees Setup Automated"
motd_ssh
customize
cleanup_lxc

View File

@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
$STD apt install -y sqlite3 $STD apt install -y sqlite3
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
fetch_and_deploy_from_url "https://whisparr.servarr.com/v1/update/nightly/updatefile?os=linux&runtime=netcore&arch=x64" /opt/Whisparr fetch_and_deploy_gh_release "Whisparr" "Whisparr/Whisparr" "prebuild" "latest" "/opt/Whisparr" "Whisparr.*.linux-x64.tar.gz"
msg_info "Configuring Whisparr" msg_info "Configuring Whisparr"
mkdir -p /var/lib/whisparr/ mkdir -p /var/lib/whisparr/

View File

@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
$STD apt install -y git $STD apt install -y git
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="yarn,node-gyp" setup_nodejs NODE_VERSION="24" NODE_MODULE="yarn,node-gyp" setup_nodejs
PG_VERSION="17" setup_postgresql PG_VERSION="17" setup_postgresql
PG_DB_NAME="wiki" PG_DB_USER="wikijs_user" PG_DB_EXTENSIONS="pg_trgm" setup_postgresql_db PG_DB_NAME="wiki" PG_DB_USER="wikijs_user" PG_DB_EXTENSIONS="pg_trgm" setup_postgresql_db
fetch_and_deploy_gh_release "wikijs" "requarks/wiki" "prebuild" "latest" "/opt/wikijs" "wiki-js.tar.gz" fetch_and_deploy_gh_release "wikijs" "requarks/wiki" "prebuild" "latest" "/opt/wikijs" "wiki-js.tar.gz"

View File

@@ -14,7 +14,7 @@ setting_up_container
network_check network_check
update_os update_os
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
PG_VERSION="17" setup_postgresql PG_VERSION="17" setup_postgresql
PG_DB_NAME="ziplinedb" PG_DB_USER="zipline" setup_postgresql_db PG_DB_NAME="ziplinedb" PG_DB_USER="zipline" setup_postgresql_db
fetch_and_deploy_gh_release "zipline" "diced/zipline" "tarball" fetch_and_deploy_gh_release "zipline" "diced/zipline" "tarball"

View File

@@ -182,11 +182,19 @@ motd_ssh() {
echo "export TERM='xterm-256color'" >>/root/.bashrc echo "export TERM='xterm-256color'" >>/root/.bashrc
PROFILE_FILE="/etc/profile.d/00_lxc-details.sh" PROFILE_FILE="/etc/profile.d/00_lxc-details.sh"
echo "echo -e \"\"" >"$PROFILE_FILE" echo "echo -e \"\"" >"$PROFILE_FILE"
echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >>"$PROFILE_FILE" echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >>"$PROFILE_FILE"
echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >>"$PROFILE_FILE" echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >>"$PROFILE_FILE"
echo "echo \"\"" >>"$PROFILE_FILE" echo "echo \"\"" >>"$PROFILE_FILE"
echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}\$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '\"') - Version: \$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '\"')${CL}\"" >>"$PROFILE_FILE" cat <<EOF >>"$PROFILE_FILE"
os_display="Unknown OS"
if [ -r /etc/os-release ]; then
. /etc/os-release
os_display="\${PRETTY_NAME:-\${NAME:-Unknown OS}}"
fi
echo -e "${TAB}${OS}${YW} OS: ${GN}\${os_display}${CL}"
EOF
echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE" echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE"
echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(ip -4 addr show eth0 | awk '/inet / {print \$2}' | cut -d/ -f1 | head -n 1)${CL}\"" >>"$PROFILE_FILE" echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(ip -4 addr show eth0 | awk '/inet / {print \$2}' | cut -d/ -f1 | head -n 1)${CL}\"" >>"$PROFILE_FILE"

View File

@@ -217,22 +217,16 @@ update_motd_ip() {
# Only update if file exists and is from community-scripts # Only update if file exists and is from community-scripts
if [ -f "$PROFILE_FILE" ] && grep -q "community-scripts" "$PROFILE_FILE" 2>/dev/null; then if [ -f "$PROFILE_FILE" ] && grep -q "community-scripts" "$PROFILE_FILE" 2>/dev/null; then
# Get current values # Get current values
local current_os="$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '"') - Version: $(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '"')"
local current_hostname="$(hostname)" local current_hostname="$(hostname)"
local current_ip="$(hostname -I | awk '{print $1}')" local current_ip="$(hostname -I | awk '{print $1}')"
# Escape sed special chars in replacement strings (& \ |) # Escape sed special chars in replacement strings (& \ |)
current_os="${current_os//\\/\\\\}"
current_os="${current_os//&/\\&}"
current_hostname="${current_hostname//\\/\\\\}" current_hostname="${current_hostname//\\/\\\\}"
current_hostname="${current_hostname//&/\\&}" current_hostname="${current_hostname//&/\\&}"
current_ip="${current_ip//\\/\\\\}" current_ip="${current_ip//\\/\\\\}"
current_ip="${current_ip//&/\\&}" current_ip="${current_ip//&/\\&}"
# Update only if values actually changed # Update only if values actually changed
if ! grep -q "OS:.*$current_os" "$PROFILE_FILE" 2>/dev/null; then
sed -i "s|OS:.*|OS: \${GN}$current_os\${CL}\\\"|" "$PROFILE_FILE"
fi
if ! grep -q "Hostname:.*$current_hostname" "$PROFILE_FILE" 2>/dev/null; then if ! grep -q "Hostname:.*$current_hostname" "$PROFILE_FILE" 2>/dev/null; then
sed -i "s|Hostname:.*|Hostname: \${GN}$current_hostname\${CL}\\\"|" "$PROFILE_FILE" sed -i "s|Hostname:.*|Hostname: \${GN}$current_hostname\${CL}\\\"|" "$PROFILE_FILE"
fi fi
@@ -3649,6 +3643,16 @@ start() {
run_addon_updates run_addon_updates
update_motd_ip update_motd_ip
cleanup_lxc cleanup_lxc
elif ! command -v whiptail &>/dev/null || ! [ -t 0 ]; then
msg_info "No interactive terminal detected defaulting to silent update mode"
VERBOSE="no"
set_std_mode
ensure_profile_loaded
get_lxc_ip
update_script
run_addon_updates
update_motd_ip
cleanup_lxc
else else
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "${APP} LXC Update/Setting" --menu \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "${APP} LXC Update/Setting" --menu \
"Support/Update functions for ${APP} LXC. Choose an option:" \ "Support/Update functions for ${APP} LXC. Choose an option:" \

View File

@@ -301,7 +301,7 @@ root_check() {
# pve_check() # pve_check()
# #
# - Validates Proxmox VE version compatibility # - Validates Proxmox VE version compatibility
# - Supported: PVE 8.0-8.9 and PVE 9.0-9.1 # - Supported: PVE 8.0-8.9 and PVE 9.0-9.2
# - Exits with error message if unsupported version detected # - Exits with error message if unsupported version detected
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
pve_check() { pve_check() {
@@ -319,12 +319,12 @@ pve_check() {
return 0 return 0
fi fi
# Check for Proxmox VE 9.x: allow 9.09.1 # Check for Proxmox VE 9.x: allow 9.09.2
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}" local MINOR="${BASH_REMATCH[1]}"
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 2)); then
msg_error "This version of Proxmox VE is not yet supported." msg_error "This version of Proxmox VE is not yet supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.2"
exit 105 exit 105
fi fi
return 0 return 0
@@ -332,7 +332,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.9 or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.9 or 9.0 9.2"
exit 105 exit 105
} }

View File

@@ -455,11 +455,19 @@ motd_ssh() {
grep -qxF "export TERM='xterm-256color'" /root/.bashrc || echo "export TERM='xterm-256color'" >>/root/.bashrc grep -qxF "export TERM='xterm-256color'" /root/.bashrc || echo "export TERM='xterm-256color'" >>/root/.bashrc
PROFILE_FILE="/etc/profile.d/00_lxc-details.sh" PROFILE_FILE="/etc/profile.d/00_lxc-details.sh"
echo "echo -e \"\"" >"$PROFILE_FILE" echo "echo -e \"\"" >"$PROFILE_FILE"
echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >>"$PROFILE_FILE" echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >>"$PROFILE_FILE"
echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >>"$PROFILE_FILE" echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >>"$PROFILE_FILE"
echo "echo \"\"" >>"$PROFILE_FILE" echo "echo \"\"" >>"$PROFILE_FILE"
echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}\$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '\"') - Version: \$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '\"')${CL}\"" >>"$PROFILE_FILE" cat <<EOF >>"$PROFILE_FILE"
os_display="Unknown OS"
if [ -r /etc/os-release ]; then
. /etc/os-release
os_display="\${PRETTY_NAME:-\${NAME:-Unknown OS}}"
fi
echo -e "${TAB}${OS}${YW} OS: ${GN}\${os_display}${CL}"
EOF
echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE" echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE"
echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(hostname -I | awk '{print \$1}')${CL}\"" >>"$PROFILE_FILE" echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(hostname -I | awk '{print \$1}')${CL}\"" >>"$PROFILE_FILE"

View File

@@ -2394,11 +2394,12 @@ check_for_gh_release() {
# For pinned versions, query the specific release tag directly # For pinned versions, query the specific release tag directly
if [[ -n "$pinned_version_in" ]]; then if [[ -n "$pinned_version_in" ]]; then
local pinned_version_encoded="${pinned_version_in//\//%2F}"
http_code=$(curl -sSL --max-time 20 -w "%{http_code}" -o /tmp/gh_check.json \ http_code=$(curl -sSL --max-time 20 -w "%{http_code}" -o /tmp/gh_check.json \
-H 'Accept: application/vnd.github+json' \ -H 'Accept: application/vnd.github+json' \
-H 'X-GitHub-Api-Version: 2022-11-28' \ -H 'X-GitHub-Api-Version: 2022-11-28' \
"${header_args[@]}" \ "${header_args[@]}" \
"https://api.github.com/repos/${source}/releases/tags/${pinned_version_in}" 2>/dev/null) || true "https://api.github.com/repos/${source}/releases/tags/${pinned_version_encoded}" 2>/dev/null) || true
if [[ "$http_code" == "200" ]] && [[ -s /tmp/gh_check.json ]]; then if [[ "$http_code" == "200" ]] && [[ -s /tmp/gh_check.json ]]; then
releases_json="[$(</tmp/gh_check.json)]" releases_json="[$(</tmp/gh_check.json)]"
@@ -2520,11 +2521,18 @@ check_for_gh_release() {
rm -f "${legacy_files[0]}" rm -f "${legacy_files[0]}"
fi fi
fi fi
current="${current#v}" if [[ "$current" =~ ^v[0-9] ]]; then
current="${current:1}"
fi
# Pinned version handling # Pinned version handling
if [[ -n "$pinned_version_in" ]]; then if [[ -n "$pinned_version_in" ]]; then
local pin_clean="${pinned_version_in#v}" local pin_clean
if [[ "$pinned_version_in" =~ ^v[0-9] ]]; then
pin_clean="${pinned_version_in:1}"
else
pin_clean="$pinned_version_in"
fi
local match_raw="" local match_raw=""
for i in "${!clean_tags[@]}"; do for i in "${!clean_tags[@]}"; do
if [[ "${clean_tags[$i]}" == "$pin_clean" ]]; then if [[ "${clean_tags[$i]}" == "$pin_clean" ]]; then
@@ -2562,7 +2570,6 @@ check_for_gh_release() {
msg_ok "No update available: ${app} (${latest_clean})" msg_ok "No update available: ${app} (${latest_clean})"
return 1 return 1
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Checks for new Codeberg release (latest tag). # Checks for new Codeberg release (latest tag).
# #
@@ -2788,25 +2795,34 @@ function ensure_usr_local_bin_persist() {
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# curl_download - Downloads a file with automatic retry and exponential backoff. # curl_download - Downloads a file with stall detection and retry.
# #
# Usage: curl_download <output_file> <url> # Usage: curl_download <output_file> <url>
# #
# Retries up to 5 times with increasing --max-time (60/120/240/480/960s). # Uses --speed-limit / --speed-time instead of a hard --max-time cap so that
# Returns 0 on success, 1 if all attempts fail. # slow but progressing downloads (e.g. large .deb files from slow mirrors) are
# never aborted mid-transfer. Only aborts when throughput drops below 1 KB/s
# for 60 consecutive seconds (i.e. a genuine stall or dead connection).
# Retries up to 3 times on failure.
# Returns 0 on success, 7 if all attempts fail.
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
function curl_download() { function curl_download() {
local output="$1" local output="$1"
local url="$2" local url="$2"
local timeouts=(60 120 240 480 960) local retries=3
local attempt=1
for i in "${!timeouts[@]}"; do while ((attempt <= retries)); do
if curl --connect-timeout 15 --max-time "${timeouts[$i]}" -fsSL -o "$output" "$url"; then if curl --connect-timeout 15 \
--speed-limit 1024 \
--speed-time 60 \
-fsSL -o "$output" "$url"; then
return 0 return 0
fi fi
if ((i < ${#timeouts[@]} - 1)); then if ((attempt < retries)); then
msg_warn "Download timed out after ${timeouts[$i]}s, retrying... (attempt $((i + 2))/${#timeouts[@]})" msg_warn "Download failed or stalled (attempt ${attempt}/${retries}), retrying..."
fi fi
((attempt++))
done done
return 7 return 7
} }

View File

@@ -543,9 +543,9 @@ check_root() {
} }
pve_check() { pve_check() {
if ! pveversion | grep -Eq "pve-manager/(8\.[1-4]|9\.[0-1])(\.[0-9]+)*"; then if ! pveversion | grep -Eq "pve-manager/(8\.[1-4]|9\.[0-2])(\.[0-9]+)*"; then
msg_error "This version of Proxmox Virtual Environment is not supported" msg_error "This version of Proxmox Virtual Environment is not supported"
echo -e "Requires Proxmox Virtual Environment Version 8.1 - 8.4 or 9.0 - 9.1." echo -e "Requires Proxmox Virtual Environment Version 8.1 - 8.4 or 9.0 - 9.2."
echo -e "Exiting..." echo -e "Exiting..."
sleep 2 sleep 2
exit 105 exit 105

View File

@@ -92,14 +92,14 @@ main() {
fi fi
start_routines_8 start_routines_8
elif [[ "$PVE_MAJOR" == "9" ]]; then elif [[ "$PVE_MAJOR" == "9" ]]; then
if ((PVE_MINOR < 0 || PVE_MINOR > 1)); then if ((PVE_MINOR < 0 || PVE_MINOR > 2)); then
msg_error "Only Proxmox 9.0-9.1.x is currently supported" msg_error "Only Proxmox 9.0-9.2.x is currently supported"
exit 105 exit 105
fi fi
start_routines_9 start_routines_9 "$PVE_MINOR"
else else
msg_error "Unsupported Proxmox VE major version: $PVE_MAJOR" msg_error "Unsupported Proxmox VE major version: $PVE_MAJOR"
echo -e "Supported: 8.08.9.x and 9.09.1.x" echo -e "Supported: 8.08.9.x and 9.09.2.x"
exit 105 exit 105
fi fi
} }
@@ -188,6 +188,7 @@ EOF
} }
start_routines_9() { start_routines_9() {
local PVE_MINOR="${1:-0}"
header_info header_info
# check if deb822 Sources (*.sources) exist # check if deb822 Sources (*.sources) exist
@@ -475,15 +476,21 @@ EOF
"no" " " 3>&2 2>&1 1>&3) "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in case $CHOICE in
yes) yes)
local CEPH_RELEASE
if ((PVE_MINOR >= 2)); then
CEPH_RELEASE="ceph-tentacle"
else
CEPH_RELEASE="ceph-squid"
fi
msg_info "Adding 'ceph package repositories' (deb822)" msg_info "Adding 'ceph package repositories' (deb822)"
cat >/etc/apt/sources.list.d/ceph.sources <<EOF cat >/etc/apt/sources.list.d/ceph.sources <<EOF
Types: deb Types: deb
URIs: http://download.proxmox.com/debian/ceph-squid URIs: http://download.proxmox.com/debian/${CEPH_RELEASE}
Suites: trixie Suites: trixie
Components: no-subscription Components: no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF EOF
msg_ok "Added 'ceph package repositories'" msg_ok "Added 'ceph package repositories' (${CEPH_RELEASE})"
;; ;;
no) no)
msg_error "Selected no to Adding 'ceph package repositories'" msg_error "Selected no to Adding 'ceph package repositories'"

Some files were not shown because too many files have changed in this diff Show More