Compare commits

...
Author SHA1 Message Date
MickLesk 4738f33fc7 mongodb, paperless-gpt: accept yes as well as y 2026-10-23 20:50:49 +02:00
MickLesk 3f0dd1b09b install: answer every prompt from the environment, survive a closed stdin
Every interactive prompt takes a var_<app>_<name> override and treats a
closed stdin like Enter (`|| true`), so an install keeps going after the
console that started it is gone. Values the script cannot do without end
with exit 64 and name the variable to set. Validation loops stop asking
when nobody can answer instead of spinning on an empty read.
2026-10-23 20:44:37 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 500a860faf Update CHANGELOG.md (#18113)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 13:50:36 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] f7dcae32a8 Update CHANGELOG.md (#18112)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 13:50:10 +00:00
CanbiZ (MickLesk) 4f88fba713 InvoiceShelf: run the Laravel scheduler (#18079)
Without the schedule:run cron job, recurring invoices and other scheduled tasks never ran (#18072). Update adds it to existing installs.
2026-10-23 15:50:05 +02:00
CanbiZ (MickLesk) 5a5b0b4a2e podman-homeassistant: require Debian 13 (#18095)
Quadlet needs Podman 4.4; Debian 12 ships 4.3.1, so no unit was
generated and systemctl start failed with 5.
2026-10-23 15:49:35 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] e40e1c3f9e Update CHANGELOG.md (#18111)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 13:48:30 +00:00
CanbiZ (MickLesk) 2d68523f89 proxcenter: skip the type check and lower the build heap (#18090)
Upstream added PROXCENTER_SKIP_TYPECHECK for builds from a released tag;
the type check alone needs about 3 GB. A 4.6 GB heap on 6 GB of RAM got
the build killed.
2026-10-23 15:48:07 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 507ccb85c2 Update CHANGELOG.md (#18110)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 13:48:00 +00:00
CanbiZ (MickLesk) e3bcb63608 hermesagent: retry the installer download, fall back to GitHub (#18091)
The Vercel host answered 4xx/5xx 21 times a week; a plain curl gave up
at once.
2026-10-23 15:47:47 +02:00
CanbiZ (MickLesk) 363de2146c zabbix: use the arm64 repository for 7.0 (#18089)
7.0's debian repository carries no arm64 packages; they live under
debian-arm64. The ct sets var_arm64=yes, so the install failed at the
package step.
2026-10-23 15:47:31 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] cc868ffba3 Update CHANGELOG.md (#18109)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 13:46:40 +00:00
CanbiZ (MickLesk) 1385f9eb71 postgresql: default the version prompt and match Alpine's packages (#18093)
An empty answer, or no TTY, ended the install with 64. The prompt now
defaults to 17 and takes var_postgresql_version; the Alpine list is
16/17/18, which is what 3.24 ships.
2026-10-23 15:46:07 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 8360169273 Update CHANGELOG.md (#18108)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 13:46:03 +00:00
CanbiZ (MickLesk) 5a065790a8 kasm: survive a failed release lookup and answer the installer with flags (#18092)
The lookup ran under pipefail with no timeout: a page without the link
ended the install at `head -1`, a stalled connection hung it for half an
hour, and the fallback version never ran. The installer takes
--accept-eula, --no-swap-check and --no-check-disk; piped answers
shifted with the prompts, and a "y" to the swap question tried swapon
inside the container.
2026-10-23 15:45:32 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 20b0caf260 Update CHANGELOG.md (#18107)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 13:42:28 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 0ab4ff9187 Update CHANGELOG.md (#18106)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 13:42:05 +00:00
CanbiZ (MickLesk) fab965b3c7 apache-guacamole: require Debian 13 (#18094)
freerdp3-dev exists from Trixie on; a Debian 12 override failed at the
dependency install.
2026-10-23 15:42:03 +02:00
CanbiZ (MickLesk) c2a4db2c7f unifi-os-server: require Debian 13 (#18096)
Every failed install this week ran on Debian 12, where the installer
rejects the Podman that ships there. The default is 13; an override now
fails before the 785 MB download.
2026-10-23 15:41:53 +02:00
CanbiZ (MickLesk) 8df4381b7c openwebui: drop the Intel oneAPI Base Toolkit (#18098)
The Ollama release binaries carry no SYCL build, so the 2.8 GB download
was never used. Its handled failure was also what later systemctl
failures were reported as.
2026-10-23 15:41:37 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] f9baff39a7 Update CHANGELOG.md (#18105)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 13:41:16 +00:00
CanbiZ (MickLesk) 449c3d4997 ollama: drop the Intel oneAPI Base Toolkit (#18097)
The Ollama release binaries carry no SYCL build, so the 2.8 GB download
(14.6 GB installed) was never used; 13 installs a week failed on it.
2026-10-23 15:40:41 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] a6367da0c3 Update CHANGELOG.md (#18104)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 13:27:47 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] dcc593947d Update CHANGELOG.md (#18103)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 13:27:34 +00:00
CanbiZ (MickLesk) 1588926a1e Storyteller: build the runtime like upstream's Dockerfile (#18083)
* Storyteller: build the runtime like upstream's Dockerfile

Only the Next.js app was built before. The standalone server now also gets the worker and file-write-worker bundles, the native align prebuilds, the icu-segmentation wasm, @parcel/watcher and kuromoji, plus the env vars that point at them, and whisper.cpp with the tiny.en model is installed through ghost-story's CLI. Packages and the readium version follow upstream (#16628).

Update still used the pre-monorepo paths, and CLEAN_INSTALL wiped /opt/storyteller including the data directory; it now keeps data/, rebuilds the same way and rewrites the unit, so existing installs move over.

* Storyteller: follow the script conventions

python3 ships with the template, update uses ensure_dependencies, no comments.

* Refactor storyteller.sh for improved deployment process
2026-10-23 15:27:13 +02:00
CanbiZ (MickLesk) 39f0920ac7 tdarr: do not let a failed or slow updater block the service start (#18100)
ExecStartPre ran Tdarr_Updater without the - prefix under the default
90 s start timeout, so no route to tdarr.io or a slow download failed
`systemctl enable --now` at the end of the install.
2026-10-23 15:27:08 +02:00
CanbiZ (MickLesk) cedc440446 immich: install mise from its GitHub release, retry jellyfin-ffmpeg, default the ML prompt (#18099)
The mise apt repository keeps one version and caches its index for a
day; with near-daily mise releases the index points at a deleted deb
and the install ends with 100 (18 a week). The binary comes from the
release instead, on new containers and on updates that have none yet.
jellyfin-ffmpeg7 failed on mirror hiccups; it goes through the retrying
installer. The machine-learning prompt ended the install without a TTY.
2026-10-23 15:27:06 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 8692f16e80 Update CHANGELOG.md (#18102)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 11:57:01 +00:00
CanbiZ (MickLesk) 41b51b121d Refactor: pimox-haos-vm (#18077)
Updated copyright information and improved script structure. Added error handling and enhanced variable management.
2026-10-23 13:56:31 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] a4eb27013c Update CHANGELOG.md (#18088)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 10:05:44 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 7785082d60 Update CHANGELOG.md (#18087)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 10:04:02 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 65e08ee708 Update CHANGELOG.md (#18084)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 09:30:48 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 7d20051744 Update CHANGELOG.md (#18082)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 08:31:27 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 8bff513bb7 Update CHANGELOG.md (#18081)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 08:30:59 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] f64f069841 Update CHANGELOG.md (#18080)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 08:29:14 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] f43ba1fc12 Update CHANGELOG.md (#18078)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 08:07:36 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] dc763cb39b Update CHANGELOG.md (#18068)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-22 12:45:55 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 0a3a61a1ee Update CHANGELOG.md (#18067)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-22 11:51:04 +00:00
CanbiZ (MickLesk) 891be92dc9 Refactor: Cryptpad (#18065)
* CryptPad: configure 2026.10.0 through infra.js

2026.10.0 moved the origins, host and ports from config.js to infra.js and no longer derives the sandbox origin, so updated instances pointed the sandbox at the browser's own localhost and hung at 'loading drive' (#18063). Update builds infra.js once from config.js, install writes it directly (the config.js seds matched nothing anymore). install-onlyoffice.sh is now install-office.sh; update runs it only where office was installed.

* CryptPad: repair instances already on 2026.10.0

Instances updated before this fix have no infra.js but already the new version, so the migration would wait for the next release. Update runs again for them, and a config.js from the 2026.10.0 example (no origin at all) gets the container address like a fresh install.
2026-10-22 13:50:33 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 6a3370d33a Update CHANGELOG.md (#18066)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-22 10:49:42 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] a25dcd86bb Update CHANGELOG.md (#18064)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-22 08:49:40 +00:00
FlorianandCanbiZ 2dcdbb4b08 Zabbix: keep unattended updates on the installed series (#18051)
* fix(zabbix): keep unattended updates on the installed series

update_script() asked for a Zabbix version unconditionally. update-apps.sh
exports PHS_SILENT=1 for unattended runs, so that read either blocks the
whole batch or, with stdin closed, fails the container with exit 1 after
its services were already stopped.

Resolve the installed series from the zabbix-release package before
touching systemd, and ask only when the run is interactive. Unattended
runs stay on the installed series and still get minor and patch updates;
changing series remains an attended decision. When the series cannot be
read, exit 75 so the batch logs the container as skipped instead of
failing it.

Fixes #18046

* Clean up comments in zabbix.sh

Removed comments regarding unattended runs and series changes.

---------

Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-10-22 10:49:14 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] d8e39d8bc7 Update CHANGELOG.md (#18062)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-22 05:22:07 +00:00
github-actions[bot] 7121ad7d8e chore(ct): sync sparkyfitness defaults from PocketBase (#18061)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-10-22 07:21:41 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] db2390e8ae Update CHANGELOG.md (#18058)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-21 18:43:54 +00:00
CerberusStyle ff94743030 Immich: bump release version to v3.3.5 (CVE) (#18057)
* Update Immich release version to v3.3.5

version push due to CVE

* Update release version from v3.3.4 to v3.3.5
2026-10-21 20:43:24 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 02ce96290b Update CHANGELOG.md (#18053)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-21 15:15:44 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] c4645cd610 Update CHANGELOG.md (#18052)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-21 14:50:51 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 88b5587faf Update CHANGELOG.md (#18047)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-21 06:30:24 +00:00
CanbiZ (MickLesk)andClaude Opus 5.5 dc87974c5d DroppedNeedle: pass release version to the app via COMMIT_TAG (#18042)
The app reads its version from COMMIT_TAG and falls back to "dev".
Set it in the systemd unit on install, migration and update.

Fixes #18040

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 08:29:57 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 8104d2ba1f Update CHANGELOG.md (#18038)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-20 13:57:03 +00:00
CanbiZ (MickLesk) 6e382d6a2e Plane: give Silo its own HOME (#18028)
* Plane: give Silo its own HOME

Silo 20261018 keeps its config in ~/.silo and stops when that path is not a directory. Running as root, that is /root/.silo, the version file fetch_and_deploy_gh_release writes, so Silo restarted every 5 seconds and the bucket setup found nothing on port 9000 (#18017).

* Plane: track Silo as silo_s3 instead of a HOME override

Renaming the version file is enough: Silo only looks at ~/.silo and ~/.minio.
2026-10-20 15:56:35 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] cabe4d5126 Update CHANGELOG.md (#18037)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-20 13:22:52 +00:00
Chris 31fbe48ec3 Immich: Pin version to 3.3.4 (#18036)
- Upstream bugfixes
2026-10-20 15:22:19 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 24ff3da900 Update CHANGELOG.md (#18035)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-20 11:24:24 +00:00
CanbiZ (MickLesk) b1e92ba2b7 InvenTree: run apt under systemd so postinst can finish (#18029)
1.6.0's postinst walks parent PIDs until PID 1 to collect settings. Under pct exec the chain ends at PID 0, and since InvenTree #12995 turned the loop's [ ] into [[ ]] it no longer breaks out there, so the install hung printing ps and strings errors. systemd-run makes systemd the parent.
2026-10-20 13:23:56 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 1e0fd45962 Update CHANGELOG.md (#18034)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-20 11:17:09 +00:00
CanbiZ (MickLesk) cb9e8973ff Zitadel: Support v1 and v2 Login (#18031)
* Zitadel: Support v1 and v2 Login

* Refactor Zitadel installation and configuration process

Refactor Zitadel installation script to improve configuration and setup processes, including PostgreSQL and Zitadel Login setup.

* Update authorship information in zitadel-install.sh

* Add co-authors to the zitadel.sh file

Updated author information to include co-authors.

* Enhance Zitadel login options descriptions

* Change Zitadel login version check condition

* Change session cookie secret generation method
2026-10-20 13:16:44 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] eca0795699 Update CHANGELOG.md (#18033)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-20 11:13:46 +00:00
CanbiZ (MickLesk) 43a4baedfd Profilarr: pass the deno pin as the version (#18025)
The update handed v2.7.5 to fetch_and_deploy_gh_release as the mode and 'latest' as the version, so every update stopped with 'Unknown mode: v2.7.5' (#18021). Same arguments as the install now.
2026-10-20 13:13:23 +02:00
CanbiZ (MickLesk) de95ff335f Refactor: OpenWebUI (remove numba pin) (#18026)
* Open WebUI: stop when the install fails three times

The retry loop fell through to "Installed Open WebUI" after the third
failure, so the service was created without a binary and the URL never
answered (#18020). The last attempt now runs under the error trap, which
shows uv's output.

* Open WebUI: keep the retry inline, no function in the script

* Open WebUI: same retry on the update paths, and drop the numba constraint

The migration and update loops in ct/openwebui.sh fell through to
"Updated" after three failures just like the install did. The numba
constraint from #11874 guarded openai-whisper's old pin; 0.12.x depends
on faster-whisper and never resolves numba.

* formatting
2026-10-20 13:13:14 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 695f831144 Update CHANGELOG.md (#18032)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-20 10:13:02 +00:00
CanbiZ (MickLesk) 899ba2e9e3 Silo: keep the version file out of ~/.silo (#18030)
Since 20261018 Silo uses ~/.silo as its config directory and stops when that path is a file, which the version file named after the app was. Update moves an existing file to ~/.silo_s3.
2026-10-20 12:12:37 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] bb32c40838 Update CHANGELOG.md (#18027)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-20 09:13:17 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] e556084107 Update CHANGELOG.md (#18024)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-20 08:04:28 +00:00
CanbiZ (MickLesk) c16806d87e InvenTree: move to go.packager.io (#18015)
dl.packager.io is frozen at 1.5.1, and its key only has a SHA1 self-signature, which apt's sqv rejects on Debian 13 since 2026-02-01. Upstream's installer moved to go.packager.io (InvenTree #12824), which carries 1.6.0 for Ubuntu 24.04/26.04 and Debian 13; update migrates installs on those releases and accepts Debian.
2026-10-20 10:03:57 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] c7d8c440ce Update CHANGELOG.md (#18023)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-20 07:31:38 +00:00
CanbiZ (MickLesk) 9cdce51d43 Zitadel: run init and setup in the foreground (#18016)
start-from-init ran in the background with its output thrown away, and the PID to kill was guessed from lsof after 60 seconds; when the process had already ended, kill got no PID and failed with exit 2. init and setup finish on their own, report their errors, and the service only starts once its user exists.
2026-10-20 09:31:07 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 361039b919 Update CHANGELOG.md (#18014)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-19 17:22:36 +00:00
push-app-to-main[bot] afe1e6d7cb Add calagopus (ct) (#18012)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-10-19 19:22:08 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 32b6952bdd Update CHANGELOG.md (#18013)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-19 17:21:09 +00:00
push-app-to-main[bot]andCanbiZ b4abaf9202 Netronome (#18011)
* Add netronome (ct)

* formatting

---------

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-10-19 19:20:35 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] c6a14ac506 Update CHANGELOG.md (#18010)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-19 13:47:53 +00:00
Brad Schroth 25628a6651 feat(mealie): add reverse proxy auth settings to mealie.env (#18006)
* feat(mealie): add reverse proxy auth settings to mealie.env

* fix(mealie): remove run-time note, documented on website instead

* fix(mealie): use plain EOF heredoc delimiter
2026-10-19 15:47:22 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 8cf7f29875 Update CHANGELOG.md (#18009)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-19 07:16:48 +00:00
mazeladoandMatt Daleo 56a5dccabf immich: add missing library lines before the refresh (#17990)
Co-authored-by: Matt Daleo <12395090+mazelado@users.noreply.github.com>
2026-10-19 09:16:18 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 0a55cd58ed Update CHANGELOG.md (#18007)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-19 06:21:43 +00:00
thieneret 231cd8c275 Update authentik 2026.8.4 (#18004)
* bump authentik version, downgrade pnpm

* pnpm revert only relevant about NixOS package
2026-10-19 08:21:15 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 2182076128 Update CHANGELOG.md (#18003)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 19:33:00 +00:00
CanbiZ (MickLesk) 440460f0ea Donetick: create selfhosted.yaml from the example (#17992)
Since 0.1.82 the release only ships config/selfhosted.yaml.example, so the token sed failed on a missing file (#17985).
2026-10-18 21:32:42 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] c0b3b84eef Update CHANGELOG.md (#18002)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 19:32:37 +00:00
CanbiZ (MickLesk) be863ab405 Wiki.js: only back up db.sqlite on SQLite installs (#17993)
Installs since February 2025 use PostgreSQL and have no db.sqlite, so the update stopped at the backup (#17971). mkdir -p lets a rerun get past the backup folder a failed run left behind.
2026-10-18 21:32:11 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 2bfc7882d3 Update CHANGELOG.md (#18001)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 19:31:20 +00:00
CanbiZ (MickLesk) e197418b34 FlareSolverr: pass Chrome an en-US Accept-Language (#17995)
FlareSolverr hands LANG to Chrome as --accept-lang, which takes a language tag; with the container locale Cloudflare challenges looped unsolved (discussion #17987, FlareSolverr discussion #1717). Update adds the line to existing units.
2026-10-18 21:30:55 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] bc71c1ce80 Update CHANGELOG.md (#18000)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 19:30:17 +00:00
CanbiZ (MickLesk) 12769e95e5 2FAuth: install the locked dependencies (#17996)
composer update re-resolved every dependency instead of using the composer.lock the release ships, and Composer now blocks svg-sanitize 0.22.0 while resolving (#17955, Bubka/2FAuth#575). Upstream's own image only runs composer install, as does our update.
2026-10-18 21:29:52 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] dead918982 Update CHANGELOG.md (#17998)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 18:32:18 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 662342f679 Update CHANGELOG.md (#17997)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 18:32:06 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 9a9057d750 Update CHANGELOG.md (#17994)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 18:24:58 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 7f52edf9dc Update CHANGELOG.md (#17991)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 18:16:56 +00:00
Giovanni Francesco SoloneandCanbiZ 21bf2ddeb6 Tracearr: drop the pnpm store after the update build (#17869)
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-10-18 20:16:29 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 56f109adca Update CHANGELOG.md (#17988)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 10:29:12 +00:00
mazeladoandMatt Daleo db6a758f5e vaultwarden: build before stopping the service (#17983)
Co-authored-by: Matt Daleo <12395090+mazelado@users.noreply.github.com>
2026-10-18 12:28:47 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 6083e802ee Update CHANGELOG.md (#17986)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 07:29:09 +00:00
Tobias 2d554a8bb8 fix: geopulse 2.0.0 upgrade support (nginx .mjs, pg18, jwt cleanup) (#17978)
2.0.0 serves its MapLibre worker as a .mjs file, which nginx's stock
mime.types doesn't map, breaking the map on both fresh installs and
updates. Also drops the now-dead JWT key generation/env vars (2.0.0
uses opaque session tokens), clears stale frontend build output on
update via CLEAN_INSTALL+KEEP instead of accumulating it forever,
backs up the database before updating, bumps new installs straight
to PostgreSQL 18/PostGIS 3.6, and raises the default disk size after
hitting real space pressure during a live upgrade.
2026-10-18 09:28:44 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 96e85c66f2 Update CHANGELOG.md (#17982)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 00:04:45 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 286385b87e Archive old changelog entries (#17981)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 00:04:20 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] aa70c362dd Update CHANGELOG.md (#17976)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-17 14:00:42 +00:00
CanbiZ (MickLesk) 88d3e36cce Sonarr: stay on the newest v4 (#17958)
v5 reworks a lot and is still a prerelease; once it is marked stable, install and update would move to it untested. Filter on the v4. tag prefix until v5 is checked (discussion #17952).
2026-10-17 16:00:14 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 605a21ebca Update CHANGELOG.md (#17975)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-17 13:58:58 +00:00
push-app-to-main[bot]andTobias 1871be052b ProxCenter (#17961)
* Add proxcenter (ct)

* rm comments

* rm comment

---------

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-10-17 15:58:34 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] a3803e9959 Update CHANGELOG.md (#17974)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-17 13:50:51 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 59cea79964 Update CHANGELOG.md (#17973)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-17 13:50:41 +00:00
push-app-to-main[bot]andTobias e84ce89ebe Listenarr (#17963)
* Add listenarr (ct)

* Update Listenarr installation script for configuration

---------

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-10-17 15:50:25 +02:00
push-app-to-main[bot]andTobias 6c9f735efa Youtarr (#17962)
* Add youtarr (ct)

* rm comments

---------

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-10-17 15:50:13 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 7a787bc5fb Update CHANGELOG.md (#17972)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-17 13:46:53 +00:00
push-app-to-main[bot]andTobias ad45916502 Norish (#17964)
* Add norish (ct)

* Remove comment

---------

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-10-17 15:46:29 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 47b7b7b6db Update CHANGELOG.md (#17968)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-16 21:11:36 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] c21a0cd726 Update CHANGELOG.md (#17966)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-16 19:46:10 +00:00
push-app-to-main[bot] 2e0b7ec8ed Add downtify (ct) (#17959)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-10-16 21:45:39 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 46272e0ea1 Update CHANGELOG.md (#17965)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-16 19:45:04 +00:00
push-app-to-main[bot] c61b22a830 Add opengym (ct) (#17960)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-10-16 21:44:38 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 769cf5f4b5 Update CHANGELOG.md (#17954)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-16 08:45:12 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 87ddc039e9 Update CHANGELOG.md (#17953)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-16 08:44:44 +00:00
CanbiZ (MickLesk) d83bd751b8 Pelican Panel: pass the URL to p:environment:setup (#17948)
Since 1.0.0-rc.1 the command asks for the Application URL when --url is missing. Behind $STD the question is invisible, so install and update hung until Enter was pressed (#17944).
2026-10-16 10:44:39 +02:00
CanbiZ (MickLesk) b5862b4ee5 OneDev: use the onedev.server unit of 16.9 (#17949)
16.9.0 replaced the Tanuki wrapper; a fresh server.sh install now creates onedev.server.service, so the install failed on 'Unit onedev.service not found' (#17943). Upgraded installs keep their onedev.service, so update uses whichever unit exists.
2026-10-16 10:44:15 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] c4e0e75a11 Update CHANGELOG.md (#17951)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-16 08:22:38 +00:00
CanbiZ (MickLesk) ae4d06b76d ReadMeABook: start the scheduler with the service (#17950)
Only GET /api/init creates the scheduled jobs and starts the scheduler; upstream's image calls it after every start, the LXC never did (#17945). An ExecStartPost hook now waits for the app and Redis like app-start.sh, and update adds it to existing installs.
2026-10-16 10:22:13 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] d3fa6c7ad9 Update CHANGELOG.md (#17942)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-15 18:22:30 +00:00
Tokin 39bca8aa86 fix(apprise-api): copy static assets into the served directory (#17940) 2026-10-15 20:22:03 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 3c87a60b19 Update CHANGELOG.md (#17941)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-15 18:20:14 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 1c848fd410 Update CHANGELOG.md (#17938)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-15 12:15:36 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 2ee7e7faf6 Update CHANGELOG.md (#17936)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-15 12:02:00 +00:00
CanbiZ (MickLesk) cbd19a686b Bytestash: modify backup process | Update Resources (#17935)
* Bytestash: modify backup process

Removed backup creation for /opt/bytestash/data and added CLEAN_INSTALL_KEEP variable to preserve data during installation.

* Increase default CPU and RAM values
2026-10-15 14:01:29 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] ba16be3f59 Update CHANGELOG.md (#17934)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-15 11:51:39 +00:00
CanbiZ (MickLesk) c8fdeeab93 Zabbix: Add '-y' flag to apt install commands (#17933) 2026-10-15 13:51:08 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 4d95ec20fd Update CHANGELOG.md (#17930)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-15 07:45:38 +00:00
github-actions[bot] cea23ca401 karakeep: bump Node.js from 22 to 24 (#17087)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-10-15 09:45:11 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] f3e87d51c9 Update CHANGELOG.md (#17926)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-14 19:00:50 +00:00
CanbiZ (MickLesk) b6755f2693 Immich: rebuild the image libraries when the revision record is missing (#17919)
The update skipped the library refresh when ~/.immich_library_revisions
was absent, so sharp 0.35.5 met a libvips older than 8.18.7 (#17914).
2026-10-14 21:00:20 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 8a2ea8a479 Update CHANGELOG.md (#17925)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-14 18:40:12 +00:00
CanbiZ (MickLesk) 04c26bab1e Modify Dependabot settings in dependabot.yml
Updated Dependabot configuration for GitHub Actions.
2026-10-14 20:39:49 +02:00
CanbiZ (MickLesk) 2aaf103e32 Paperclip: fall back to a non-frozen install when the release lockfile is stale (#17922)
v2026.1012.0 ships a pnpm-lock.yaml that does not match server/package.json,
so pnpm install --frozen-lockfile fails on every install (#17913).
2026-10-14 20:39:42 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 7ff45b7555 Update CHANGELOG.md (#17923)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-14 14:37:51 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 3173bb9519 Update CHANGELOG.md (#17921)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-14 13:36:40 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 1fab424994 Update CHANGELOG.md (#17920)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-14 13:26:26 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] df03368041 Update CHANGELOG.md (#17918)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-14 12:43:18 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] bbb81b0d21 Update CHANGELOG.md (#17916)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-13 22:56:14 +00:00
Ryan Sullivan ecbc302c68 Fix URL for downloading OneDev latest release (#17915)
Published sites use a new path, per
https://code.onedev.io/onedev/server/~issues/3179#IssueComment-11050
2026-10-14 00:55:44 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 1e4b435351 Update CHANGELOG.md (#17910)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-13 16:10:40 +00:00
CanbiZ (MickLesk) 6234161462 LocalAI: pin the CPU backends when the container has no GPU runtime (#17909)
LocalAI resolves meta backends from the GPU vendor it reads out of sysfs,
which is the host's card even with no driver installed in the container,
so llama-cpp became cuda12-llama-cpp and never started (#17908). Force
the default capability unless a CUDA, ROCm or Level Zero runtime is
present; update adds the pin to existing installs.
2026-10-13 18:10:07 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 82a6154ea9 Update CHANGELOG.md (#17906)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-13 08:53:21 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] af6118c1d1 Update CHANGELOG.md (#17904)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-13 07:39:30 +00:00
durzo eb79e9bcba zammad: Debian 13, new apt repo, Elasticsearch 8 (#17836)
- Default to Debian 13
- Switch Zammad repo from dl.packager.io (frozen at 7.0.x) to go.packager.io
- Install Elasticsearch 8.x instead of EOL 7.x; drop ingest-attachment plugin (built in)
- Update migrates old containers: Zammad repo, ES 7 -> 8, search index rebuild
2026-10-13 09:39:06 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 65aa185016 Update CHANGELOG.md (#17903)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-13 05:48:24 +00:00
CerberusStyle 9751f8c1a9 [Gluetun] Update GitHub repository source install and update. (#17899)
* Update Gluetun GitHub repository source

* Update GitHub repository reference for gluetun
2026-10-13 07:47:55 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] cb077df86f Update CHANGELOG.md (#17902)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-13 05:43:26 +00:00
CanbiZ (MickLesk) e5013d1fb6 Immich: Bump to 3.3.1 and restore (failed) geodata/countryInfo.txt on update (#17894)
* Immich: restore geodata/countryInfo.txt on update and pin 3.3.1

Updates run between the 3.3.0 pin and #17823 wrote countryInfo.txt into
app/ instead of geodata/, so metadata extraction failed and new uploads
never got thumbnails. The download sat inside the release block, so a
plain update could not repair it until the next pin. 3.3.1 only bumps
version fields in the manifests.

* Immich: follow base-images for libheif like the other libraries

The hard pin from #16996 sat at 1.23.2 while upstream moved to 1.23.5.
2026-10-13 07:42:59 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] f9b023bc3f Update CHANGELOG.md (#17901)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-13 05:42:40 +00:00
CanbiZ (MickLesk) 5842691dad WikiJS: use v2 Repo until v3 is stable (#17895)
* WikiJS: use v2 Repo until v3 is stable

* Update wikijs.sh for version 2 support
2026-10-13 07:42:08 +02:00
142 changed files with 2652 additions and 1110 deletions

No files matched your search

+152
View File
@@ -1,3 +1,155 @@
## 2026-10-17
### 🆕 New Scripts
- ProxCenter ([#17961](https://github.com/community-scripts/ProxmoxVE/pull/17961))
- Listenarr ([#17963](https://github.com/community-scripts/ProxmoxVE/pull/17963))
- Youtarr ([#17962](https://github.com/community-scripts/ProxmoxVE/pull/17962))
- Norish ([#17964](https://github.com/community-scripts/ProxmoxVE/pull/17964))
### 🚀 Updated Scripts
- #### 🔧 Refactor
- Sonarr: stay on the newest v4 (pin) [@MickLesk](https://github.com/MickLesk) ([#17958](https://github.com/community-scripts/ProxmoxVE/pull/17958))
## 2026-10-16
### 🆕 New Scripts
- Downtify ([#17959](https://github.com/community-scripts/ProxmoxVE/pull/17959))
- openGym ([#17960](https://github.com/community-scripts/ProxmoxVE/pull/17960))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Pelican Panel: pass the URL to p:environment:setup [@MickLesk](https://github.com/MickLesk) ([#17948](https://github.com/community-scripts/ProxmoxVE/pull/17948))
- OneDev: use the onedev.server unit of 16.9 [@MickLesk](https://github.com/MickLesk) ([#17949](https://github.com/community-scripts/ProxmoxVE/pull/17949))
- ReadMeABook: start the scheduler with the service [@MickLesk](https://github.com/MickLesk) ([#17950](https://github.com/community-scripts/ProxmoxVE/pull/17950))
### 💾 Core
- Clean up after installs and updates again [@MickLesk](https://github.com/MickLesk) ([core#147](https://github.com/community-scripts/core/pull/147))
- Fix apt_conffile_report exiting 1 when uutils comm sees locale-sorted input [@BadFlo](https://github.com/BadFlo) ([core#146](https://github.com/community-scripts/core/pull/146))
## 2026-10-15
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix(apprise-api): copy static assets into the served directory [@brokentokin](https://github.com/brokentokin) ([#17940](https://github.com/community-scripts/ProxmoxVE/pull/17940))
- Bytestash: modify backup process | Update Resources [@MickLesk](https://github.com/MickLesk) ([#17935](https://github.com/community-scripts/ProxmoxVE/pull/17935))
- Zabbix: Add '-y' flag to apt install commands [@MickLesk](https://github.com/MickLesk) ([#17933](https://github.com/community-scripts/ProxmoxVE/pull/17933))
- karakeep: bump Node.js from 22 to 24 [@github-actions[bot]](https://github.com/github-actions[bot]) ([#17087](https://github.com/community-scripts/ProxmoxVE/pull/17087))
### 💾 Core
- Keep VM release lookups working without system.func [@MickLesk](https://github.com/MickLesk) ([core#144](https://github.com/community-scripts/core/pull/144))
- Stop calling exit 1 "Operation not permitted" at several steps [@MickLesk](https://github.com/MickLesk) ([core#140](https://github.com/community-scripts/core/pull/140))
## 2026-10-14
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Paperclip: fall back to a non-frozen install when the release lockfile is stale [@MickLesk](https://github.com/MickLesk) ([#17922](https://github.com/community-scripts/ProxmoxVE/pull/17922))
- #### 🔧 Refactor
- Immich: rebuild the image libraries when the revision record is missing [@MickLesk](https://github.com/MickLesk) ([#17919](https://github.com/community-scripts/ProxmoxVE/pull/17919))
### 💾 Core
- Show what the failing command printed, and keep verbose output in the log [@MickLesk](https://github.com/MickLesk) ([core#139](https://github.com/community-scripts/core/pull/139))
- Install jq before the release lookup and show what a non-JSON answer was [@MickLesk](https://github.com/MickLesk) ([core#138](https://github.com/community-scripts/core/pull/138))
- Refresh the NodeSource key before a same-major Node.js update [@MickLesk](https://github.com/MickLesk) ([core#137](https://github.com/community-scripts/core/pull/137))
- github: say why a forge could not be reached instead of 'connection failed' [@MickLesk](https://github.com/MickLesk) ([core#136](https://github.com/community-scripts/core/pull/136))
## 2026-10-13
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fix URL for downloading OneDev latest release [@ryansully](https://github.com/ryansully) ([#17915](https://github.com/community-scripts/ProxmoxVE/pull/17915))
- LocalAI: pin the CPU backends when the container has no GPU runtime [@MickLesk](https://github.com/MickLesk) ([#17909](https://github.com/community-scripts/ProxmoxVE/pull/17909))
- [Gluetun] Update GitHub repository source install and update. [@CerberusStyle](https://github.com/CerberusStyle) ([#17899](https://github.com/community-scripts/ProxmoxVE/pull/17899))
- Immich: Bump to 3.3.1 and restore (failed) geodata/countryInfo.txt on update [@MickLesk](https://github.com/MickLesk) ([#17894](https://github.com/community-scripts/ProxmoxVE/pull/17894))
- WikiJS: use v2 Repo until v3 is stable [@MickLesk](https://github.com/MickLesk) ([#17895](https://github.com/community-scripts/ProxmoxVE/pull/17895))
- #### 💥 Breaking Changes
- zammad: Debian 13, new apt repo, Elasticsearch 8 [@durzo](https://github.com/durzo) ([#17836](https://github.com/community-scripts/ProxmoxVE/pull/17836))
### 💾 Core
- Keep the version key parseable by jq 1.6 [@MickLesk](https://github.com/MickLesk) ([core#134](https://github.com/community-scripts/core/pull/134))
## 2026-10-12
### 🆕 New Scripts
- WatchState ([#17881](https://github.com/community-scripts/ProxmoxVE/pull/17881))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- chore(ct): sync wazuh defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#17889](https://github.com/community-scripts/ProxmoxVE/pull/17889))
- Wanderer: bring back the wanderer-pb wrapper [@MickLesk](https://github.com/MickLesk) ([#17874](https://github.com/community-scripts/ProxmoxVE/pull/17874))
- Tracearr: install only the server's production dependencies [@MickLesk](https://github.com/MickLesk) ([#17873](https://github.com/community-scripts/ProxmoxVE/pull/17873))
- Paperless-ngx: QoL restart crashed services | patch regex [@MickLesk](https://github.com/MickLesk) ([#17812](https://github.com/community-scripts/ProxmoxVE/pull/17812))
- Splunk Enterprise: start the service as the splunk user [@rcastley](https://github.com/rcastley) ([#17816](https://github.com/community-scripts/ProxmoxVE/pull/17816))
### 💾 Core
- Draw a Community Scripts banner while a script has no header of its own [@MickLesk](https://github.com/MickLesk) ([core#133](https://github.com/community-scripts/core/pull/133))
- Order pre-release labels when comparing versions [@MickLesk](https://github.com/MickLesk) ([core#132](https://github.com/community-scripts/core/pull/132))
- gh: curl_download: wait between attempts [@MickLesk](https://github.com/MickLesk) ([core#131](https://github.com/community-scripts/core/pull/131))
### 🧰 Tools
- #### ✨ New Features
- Immich Public Proxy: optional visitor upload service (v4 Release) [@MickLesk](https://github.com/MickLesk) ([#17875](https://github.com/community-scripts/ProxmoxVE/pull/17875))
## 2026-10-11
### 🆕 New Scripts
- Cinephage ([#17852](https://github.com/community-scripts/ProxmoxVE/pull/17852))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: build libvips with JPEG 2000 support [@MickLesk](https://github.com/MickLesk) ([#17864](https://github.com/community-scripts/ProxmoxVE/pull/17864))
- hermesagent: match the relaunched root gateway regardless of interpreter [@MickLesk](https://github.com/MickLesk) ([#17847](https://github.com/community-scripts/ProxmoxVE/pull/17847))
- Radicale: install the bcrypt and argon2 extras [@MickLesk](https://github.com/MickLesk) ([#17813](https://github.com/community-scripts/ProxmoxVE/pull/17813))
- fix(zigbee2mqtt): preserve backup stream and prevent filename collisions [@petermnt](https://github.com/petermnt) ([#17751](https://github.com/community-scripts/ProxmoxVE/pull/17751))
- #### ✨ New Features
- QoL: let var_* answer the optional add-on prompts [@MickLesk](https://github.com/MickLesk) ([#17858](https://github.com/community-scripts/ProxmoxVE/pull/17858))
- QoL: Confirm third-party installers through confirm_external_installer [@MickLesk](https://github.com/MickLesk) ([#17857](https://github.com/community-scripts/ProxmoxVE/pull/17857))
- docker: take the lxcfs toggle, TCP socket and Compose choice from app variables [@MickLesk](https://github.com/MickLesk) ([#17850](https://github.com/community-scripts/ProxmoxVE/pull/17850))
- #### 🔧 Refactor
- RustDesk Server: run the official server, make the web UI optional [@MickLesk](https://github.com/MickLesk) ([#17854](https://github.com/community-scripts/ProxmoxVE/pull/17854))
- Caddy: install the .deb from GitHub instead of the Cloudsmith repo [@MickLesk](https://github.com/MickLesk) ([#17862](https://github.com/community-scripts/ProxmoxVE/pull/17862))
### 💾 Core
- Add confirm_external_installer [@MickLesk](https://github.com/MickLesk) ([core#130](https://github.com/community-scripts/core/pull/130))
- setup_docker: make LXC resource limits visible to nested containers [@andrebrait](https://github.com/andrebrait) ([core#9](https://github.com/community-scripts/core/pull/9))
- Incus: fix ENABLE_FUSE / TUN vars [@MickLesk](https://github.com/MickLesk) ([core#127](https://github.com/community-scripts/core/pull/127))
- Resolve a uv required-version range to the newest release inside it [@MickLesk](https://github.com/MickLesk) ([core#126](https://github.com/community-scripts/core/pull/126))
- Upgrade MongoDB in place when an app package depends on it [@MickLesk](https://github.com/MickLesk) ([core#128](https://github.com/community-scripts/core/pull/128))
## 2026-10-10
### 🆕 New Scripts
+5 -8
View File
@@ -1,17 +1,14 @@
# Keeps the GitHub Actions referenced in .github/workflows up to date.
# https://docs.github.com/code-security/dependabot/working-with-dependabot/dependabot-options-reference
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
labels: []
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
labels:
- "dependencies"
# One PR per week for all action bumps instead of one PR per action.
target-branch: "main"
cooldown:
default-days: 7
groups:
github-actions:
actions:
patterns:
- "*"
+237 -173
View File
@@ -116,6 +116,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
@@ -129,7 +132,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
<details>
<summary><h4>October (10 entries)</h4></summary>
<summary><h4>October (17 entries)</h4></summary>
[View October 2026 Changelog](.github/changelogs/2026/10.md)
@@ -562,6 +565,238 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-10-23
### 🚀 Updated Scripts
- postgresql: default the version prompt and match Alpine's packages [@MickLesk](https://github.com/MickLesk) ([#18093](https://github.com/community-scripts/ProxmoxVE/pull/18093))
- Storyteller: build the runtime like upstream's Dockerfile [@MickLesk](https://github.com/MickLesk) ([#18083](https://github.com/community-scripts/ProxmoxVE/pull/18083))
- #### 🐞 Bug Fixes
- proxcenter: skip the type check and lower the build heap [@MickLesk](https://github.com/MickLesk) ([#18090](https://github.com/community-scripts/ProxmoxVE/pull/18090))
- hermesagent: retry the installer download, fall back to GitHub [@MickLesk](https://github.com/MickLesk) ([#18091](https://github.com/community-scripts/ProxmoxVE/pull/18091))
- zabbix: use the arm64 repository for 7.0 [@MickLesk](https://github.com/MickLesk) ([#18089](https://github.com/community-scripts/ProxmoxVE/pull/18089))
- kasm: survive a failed release lookup and answer the installer with flags [@MickLesk](https://github.com/MickLesk) ([#18092](https://github.com/community-scripts/ProxmoxVE/pull/18092))
- #### ✨ New Features
- InvoiceShelf: run the Laravel scheduler [@MickLesk](https://github.com/MickLesk) ([#18079](https://github.com/community-scripts/ProxmoxVE/pull/18079))
- #### 🔧 Refactor
- podman-homeassistant: require Debian 13 [@MickLesk](https://github.com/MickLesk) ([#18095](https://github.com/community-scripts/ProxmoxVE/pull/18095))
- apache-guacamole: require Debian 13 [@MickLesk](https://github.com/MickLesk) ([#18094](https://github.com/community-scripts/ProxmoxVE/pull/18094))
- unifi-os-server: require Debian 13 [@MickLesk](https://github.com/MickLesk) ([#18096](https://github.com/community-scripts/ProxmoxVE/pull/18096))
- openwebui: drop the Intel oneAPI Base Toolkit [@MickLesk](https://github.com/MickLesk) ([#18098](https://github.com/community-scripts/ProxmoxVE/pull/18098))
- ollama: drop the Intel oneAPI Base Toolkit [@MickLesk](https://github.com/MickLesk) ([#18097](https://github.com/community-scripts/ProxmoxVE/pull/18097))
- tdarr: do not let a failed or slow updater block the service start [@MickLesk](https://github.com/MickLesk) ([#18100](https://github.com/community-scripts/ProxmoxVE/pull/18100))
- immich: install mise from its GitHub release, retry jellyfin-ffmpeg, default the ML prompt [@MickLesk](https://github.com/MickLesk) ([#18099](https://github.com/community-scripts/ProxmoxVE/pull/18099))
- Refactor: pimox-haos-vm [@MickLesk](https://github.com/MickLesk) ([#18077](https://github.com/community-scripts/ProxmoxVE/pull/18077))
### 💾 Core
- Telemetry: explain and categorize by the command that failed [@MickLesk](https://github.com/MickLesk) ([core#166](https://github.com/community-scripts/core/pull/166))
- error-handler: report a handled silent failure only on its own line [@MickLesk](https://github.com/MickLesk) ([core#165](https://github.com/community-scripts/core/pull/165))
- VM silent: return the failure instead of exiting [@MickLesk](https://github.com/MickLesk) ([core#164](https://github.com/community-scripts/core/pull/164))
- error-handler: keep the start explanation and the final IP lookup from failing the run [@MickLesk](https://github.com/MickLesk) ([core#163](https://github.com/community-scripts/core/pull/163))
- error output: report a failure inside a subshell once [@MickLesk](https://github.com/MickLesk) ([core#162](https://github.com/community-scripts/core/pull/162))
- general: allow Composer as root in every script [@MickLesk](https://github.com/MickLesk) ([core#161](https://github.com/community-scripts/core/pull/161))
- lxc-updater: skip the resource check when the container cannot read its RAM [@MickLesk](https://github.com/MickLesk) ([core#160](https://github.com/community-scripts/core/pull/160))
- vm-core: let vm_timezone_default survive a host without /etc/timezone [@MickLesk](https://github.com/MickLesk) ([core#159](https://github.com/community-scripts/core/pull/159))
## 2026-10-22
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Zabbix: keep unattended updates on the installed series [@florianpunz](https://github.com/florianpunz) ([#18051](https://github.com/community-scripts/ProxmoxVE/pull/18051))
- #### 🔧 Refactor
- Refactor: Cryptpad [@MickLesk](https://github.com/MickLesk) ([#18065](https://github.com/community-scripts/ProxmoxVE/pull/18065))
### 💾 Core
- Incus: drive a remote Incus server from the client's default remote [@MickLesk](https://github.com/MickLesk) ([core#154](https://github.com/community-scripts/core/pull/154))
- Deploy the release again when an update is redone [@MickLesk](https://github.com/MickLesk) ([core#158](https://github.com/community-scripts/core/pull/158))
### ❔ Uncategorized
- chore(ct): sync sparkyfitness defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#18061](https://github.com/community-scripts/ProxmoxVE/pull/18061))
## 2026-10-21
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: bump release version to v3.3.5 (CVE) [@CerberusStyle](https://github.com/CerberusStyle) ([#18057](https://github.com/community-scripts/ProxmoxVE/pull/18057))
- DroppedNeedle: pass release version to the app via COMMIT_TAG [@MickLesk](https://github.com/MickLesk) ([#18042](https://github.com/community-scripts/ProxmoxVE/pull/18042))
### 💾 Core
- Keep the version an update started from across a redo [@MickLesk](https://github.com/MickLesk) ([core#156](https://github.com/community-scripts/core/pull/156))
- Redo an update whose run did not finish after the deploy [@MickLesk](https://github.com/MickLesk) ([core#155](https://github.com/community-scripts/core/pull/155))
## 2026-10-20
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Plane: give Silo its own HOME [@MickLesk](https://github.com/MickLesk) ([#18028](https://github.com/community-scripts/ProxmoxVE/pull/18028))
- Immich: Pin version to 3.3.4 [@vhsdream](https://github.com/vhsdream) ([#18036](https://github.com/community-scripts/ProxmoxVE/pull/18036))
- InvenTree: run apt under systemd so postinst can finish [@MickLesk](https://github.com/MickLesk) ([#18029](https://github.com/community-scripts/ProxmoxVE/pull/18029))
- Profilarr: pass the deno pin as the version [@MickLesk](https://github.com/MickLesk) ([#18025](https://github.com/community-scripts/ProxmoxVE/pull/18025))
- Silo: keep the version file out of ~/.silo [@MickLesk](https://github.com/MickLesk) ([#18030](https://github.com/community-scripts/ProxmoxVE/pull/18030))
- InvenTree: move to go.packager.io [@MickLesk](https://github.com/MickLesk) ([#18015](https://github.com/community-scripts/ProxmoxVE/pull/18015))
- Zitadel: run init and setup in the foreground [@MickLesk](https://github.com/MickLesk) ([#18016](https://github.com/community-scripts/ProxmoxVE/pull/18016))
- #### ✨ New Features
- Zitadel: Support v1 and v2 Login [@MickLesk](https://github.com/MickLesk) ([#18031](https://github.com/community-scripts/ProxmoxVE/pull/18031))
- #### 🔧 Refactor
- Refactor: OpenWebUI (remove numba pin) [@MickLesk](https://github.com/MickLesk) ([#18026](https://github.com/community-scripts/ProxmoxVE/pull/18026))
### 💾 Core
- Only treat an NVIDIA GPU as present when its device nodes are [@MickLesk](https://github.com/MickLesk) ([core#153](https://github.com/community-scripts/core/pull/153))
## 2026-10-19
### 🆕 New Scripts
- Calagopus ([#18012](https://github.com/community-scripts/ProxmoxVE/pull/18012))
- Netronome ([#18011](https://github.com/community-scripts/ProxmoxVE/pull/18011))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- immich: record library revisions when the line is missing [@mazelado](https://github.com/mazelado) ([#17990](https://github.com/community-scripts/ProxmoxVE/pull/17990))
- Update authentik 2026.8.4 [@thieneret](https://github.com/thieneret) ([#18004](https://github.com/community-scripts/ProxmoxVE/pull/18004))
- #### ✨ New Features
- feat(mealie): add reverse proxy auth settings to mealie.env [@bferd](https://github.com/bferd) ([#18006](https://github.com/community-scripts/ProxmoxVE/pull/18006))
## 2026-10-18
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Donetick: create selfhosted.yaml from the example [@MickLesk](https://github.com/MickLesk) ([#17992](https://github.com/community-scripts/ProxmoxVE/pull/17992))
- Wiki.js: only back up db.sqlite on SQLite installs [@MickLesk](https://github.com/MickLesk) ([#17993](https://github.com/community-scripts/ProxmoxVE/pull/17993))
- FlareSolverr: pass Chrome an en-US Accept-Language [@MickLesk](https://github.com/MickLesk) ([#17995](https://github.com/community-scripts/ProxmoxVE/pull/17995))
- 2FAuth: install the locked dependencies [@MickLesk](https://github.com/MickLesk) ([#17996](https://github.com/community-scripts/ProxmoxVE/pull/17996))
- Tracearr: drop the pnpm store after the update build [@gioxx](https://github.com/gioxx) ([#17869](https://github.com/community-scripts/ProxmoxVE/pull/17869))
- vaultwarden: build before stopping the service [@mazelado](https://github.com/mazelado) ([#17983](https://github.com/community-scripts/ProxmoxVE/pull/17983))
- #### 💥 Breaking Changes
- fix: geopulse 2.0.0 upgrade support (nginx .mjs, pg18, jwt cleanup) [@CrazyWolf13](https://github.com/CrazyWolf13) ([#17978](https://github.com/community-scripts/ProxmoxVE/pull/17978))
### 💾 Core
- Let get_current_ip reach its IPv6 fallback [@MickLesk](https://github.com/MickLesk) ([core#151](https://github.com/community-scripts/core/pull/151))
- Drop apt autoclean before apt clean [@MickLesk](https://github.com/MickLesk) ([core#152](https://github.com/community-scripts/core/pull/152))
- Silence apt's script warning in $STD [@MickLesk](https://github.com/MickLesk) ([core#150](https://github.com/community-scripts/core/pull/150))
## 2026-10-17
### 🆕 New Scripts
- ProxCenter ([#17961](https://github.com/community-scripts/ProxmoxVE/pull/17961))
- Listenarr ([#17963](https://github.com/community-scripts/ProxmoxVE/pull/17963))
- Youtarr ([#17962](https://github.com/community-scripts/ProxmoxVE/pull/17962))
- Norish ([#17964](https://github.com/community-scripts/ProxmoxVE/pull/17964))
### 🚀 Updated Scripts
- #### 🔧 Refactor
- Sonarr: stay on the newest v4 (pin) [@MickLesk](https://github.com/MickLesk) ([#17958](https://github.com/community-scripts/ProxmoxVE/pull/17958))
## 2026-10-16
### 🆕 New Scripts
- Downtify ([#17959](https://github.com/community-scripts/ProxmoxVE/pull/17959))
- openGym ([#17960](https://github.com/community-scripts/ProxmoxVE/pull/17960))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Pelican Panel: pass the URL to p:environment:setup [@MickLesk](https://github.com/MickLesk) ([#17948](https://github.com/community-scripts/ProxmoxVE/pull/17948))
- OneDev: use the onedev.server unit of 16.9 [@MickLesk](https://github.com/MickLesk) ([#17949](https://github.com/community-scripts/ProxmoxVE/pull/17949))
- ReadMeABook: start the scheduler with the service [@MickLesk](https://github.com/MickLesk) ([#17950](https://github.com/community-scripts/ProxmoxVE/pull/17950))
### 💾 Core
- Clean up after installs and updates again [@MickLesk](https://github.com/MickLesk) ([core#147](https://github.com/community-scripts/core/pull/147))
- Fix apt_conffile_report exiting 1 when uutils comm sees locale-sorted input [@BadFlo](https://github.com/BadFlo) ([core#146](https://github.com/community-scripts/core/pull/146))
## 2026-10-15
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix(apprise-api): copy static assets into the served directory [@brokentokin](https://github.com/brokentokin) ([#17940](https://github.com/community-scripts/ProxmoxVE/pull/17940))
- Bytestash: modify backup process | Update Resources [@MickLesk](https://github.com/MickLesk) ([#17935](https://github.com/community-scripts/ProxmoxVE/pull/17935))
- Zabbix: Add '-y' flag to apt install commands [@MickLesk](https://github.com/MickLesk) ([#17933](https://github.com/community-scripts/ProxmoxVE/pull/17933))
- karakeep: bump Node.js from 22 to 24 [@github-actions[bot]](https://github.com/github-actions[bot]) ([#17087](https://github.com/community-scripts/ProxmoxVE/pull/17087))
### 💾 Core
- Keep VM release lookups working without system.func [@MickLesk](https://github.com/MickLesk) ([core#144](https://github.com/community-scripts/core/pull/144))
- Stop calling exit 1 "Operation not permitted" at several steps [@MickLesk](https://github.com/MickLesk) ([core#140](https://github.com/community-scripts/core/pull/140))
## 2026-10-14
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Paperclip: fall back to a non-frozen install when the release lockfile is stale [@MickLesk](https://github.com/MickLesk) ([#17922](https://github.com/community-scripts/ProxmoxVE/pull/17922))
- #### 🔧 Refactor
- Immich: rebuild the image libraries when the revision record is missing [@MickLesk](https://github.com/MickLesk) ([#17919](https://github.com/community-scripts/ProxmoxVE/pull/17919))
### 💾 Core
- Show what the failing command printed, and keep verbose output in the log [@MickLesk](https://github.com/MickLesk) ([core#139](https://github.com/community-scripts/core/pull/139))
- Install jq before the release lookup and show what a non-JSON answer was [@MickLesk](https://github.com/MickLesk) ([core#138](https://github.com/community-scripts/core/pull/138))
- Refresh the NodeSource key before a same-major Node.js update [@MickLesk](https://github.com/MickLesk) ([core#137](https://github.com/community-scripts/core/pull/137))
- github: say why a forge could not be reached instead of 'connection failed' [@MickLesk](https://github.com/MickLesk) ([core#136](https://github.com/community-scripts/core/pull/136))
## 2026-10-13
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fix URL for downloading OneDev latest release [@ryansully](https://github.com/ryansully) ([#17915](https://github.com/community-scripts/ProxmoxVE/pull/17915))
- LocalAI: pin the CPU backends when the container has no GPU runtime [@MickLesk](https://github.com/MickLesk) ([#17909](https://github.com/community-scripts/ProxmoxVE/pull/17909))
- [Gluetun] Update GitHub repository source install and update. [@CerberusStyle](https://github.com/CerberusStyle) ([#17899](https://github.com/community-scripts/ProxmoxVE/pull/17899))
- Immich: Bump to 3.3.1 and restore (failed) geodata/countryInfo.txt on update [@MickLesk](https://github.com/MickLesk) ([#17894](https://github.com/community-scripts/ProxmoxVE/pull/17894))
- WikiJS: use v2 Repo until v3 is stable [@MickLesk](https://github.com/MickLesk) ([#17895](https://github.com/community-scripts/ProxmoxVE/pull/17895))
- #### 💥 Breaking Changes
- zammad: Debian 13, new apt repo, Elasticsearch 8 [@durzo](https://github.com/durzo) ([#17836](https://github.com/community-scripts/ProxmoxVE/pull/17836))
### 💾 Core
- Keep the version key parseable by jq 1.6 [@MickLesk](https://github.com/MickLesk) ([core#134](https://github.com/community-scripts/core/pull/134))
## 2026-10-12
### 🆕 New Scripts
@@ -1164,175 +1399,4 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
### 📚 Documentation
- chore: fix PR template help [@CrazyWolf13](https://github.com/CrazyWolf13) ([#17364](https://github.com/community-scripts/ProxmoxVE/pull/17364))
## 2026-09-17
### 🆕 New Scripts
- Alpine-VM ([#17324](https://github.com/community-scripts/ProxmoxVE/pull/17324))
- Allstarlink ([#17321](https://github.com/community-scripts/ProxmoxVE/pull/17321))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- changedetection: update: various fixes [@CrazyWolf13](https://github.com/CrazyWolf13) ([#17331](https://github.com/community-scripts/ProxmoxVE/pull/17331))
- sparkyfitness: run the Better Auth migration during the update [@MickLesk](https://github.com/MickLesk) ([#17318](https://github.com/community-scripts/ProxmoxVE/pull/17318))
- poznote: follow init.sh into docker/ [@MickLesk](https://github.com/MickLesk) ([#17316](https://github.com/community-scripts/ProxmoxVE/pull/17316))
- #### ✨ New Features
- romm: make the library paths follow ROMM_BASE_PATH [@MickLesk](https://github.com/MickLesk) ([#17279](https://github.com/community-scripts/ProxmoxVE/pull/17279))
- Debian-VM: Refactor | Support Debian 11, 12, 13 [@MickLesk](https://github.com/MickLesk) ([#17325](https://github.com/community-scripts/ProxmoxVE/pull/17325))
### 💾 Core
- Ask before replacing a cached image that no longer matches [@MickLesk](https://github.com/MickLesk) ([core#44](https://github.com/community-scripts/core/pull/44))
## 2026-09-16
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: Pin to v3.2.2 [@vhsdream](https://github.com/vhsdream) ([#17307](https://github.com/community-scripts/ProxmoxVE/pull/17307))
- Dispatcharr: Bump to 4G RAM [@github-actions[bot]](https://github.com/github-actions[bot]) ([#17302](https://github.com/community-scripts/ProxmoxVE/pull/17302))
- navidrome: repair root-owned data folders left by 0.61.x [@MickLesk](https://github.com/MickLesk) ([#17275](https://github.com/community-scripts/ProxmoxVE/pull/17275))
- tor-snowflake: read the Go version from the module root [@MickLesk](https://github.com/MickLesk) ([#17276](https://github.com/community-scripts/ProxmoxVE/pull/17276))
- docmost: stop corepack asking for confirmation during the build [@MickLesk](https://github.com/MickLesk) ([#17282](https://github.com/community-scripts/ProxmoxVE/pull/17282))
- #### ✨ New Features
- Refactor: TrueNAS VM (core / improve functions / performance) [@MickLesk](https://github.com/MickLesk) ([#17277](https://github.com/community-scripts/ProxmoxVE/pull/17277))
- Frigate: Bump to 0.18.0 [@MickLesk](https://github.com/MickLesk) ([#17273](https://github.com/community-scripts/ProxmoxVE/pull/17273))
- Refactor: HomeAssistant-OS (core / improve functions / performance) [@MickLesk](https://github.com/MickLesk) ([#17281](https://github.com/community-scripts/ProxmoxVE/pull/17281))
### 💾 Core
- Read the IGC version compute-runtime pins, instead of taking the newest [@MickLesk](https://github.com/MickLesk) ([core#43](https://github.com/community-scripts/core/pull/43))
- Install the Intel driver dependency before the .deb that needs it [@MickLesk](https://github.com/MickLesk) ([core#42](https://github.com/community-scripts/core/pull/42))
### 📚 Documentation
- pocketbase-bot: accept the var_ names and two missing fields [@MickLesk](https://github.com/MickLesk) ([#17305](https://github.com/community-scripts/ProxmoxVE/pull/17305))
## 2026-09-15
### 🆕 New Scripts
- valhalla ([#17231](https://github.com/community-scripts/ProxmoxVE/pull/17231))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- borg-ui: missing dependency `sshpass` [@christian-forgacs](https://github.com/christian-forgacs) ([#17286](https://github.com/community-scripts/ProxmoxVE/pull/17286))
- tracearr: copy packages/emails into the deploy tree [@connorgallopo](https://github.com/connorgallopo) ([#17268](https://github.com/community-scripts/ProxmoxVE/pull/17268))
- Immich: Pin to v3.2.1 [@vhsdream](https://github.com/vhsdream) ([#17264](https://github.com/community-scripts/ProxmoxVE/pull/17264))
### 💾 Core
- Add vm_extract_image, which two VM scripts already call [@MickLesk](https://github.com/MickLesk) ([core#40](https://github.com/community-scripts/core/pull/40))
- Releases: rank releases on their numbers, not on sort -V over the raw tag [@MickLesk](https://github.com/MickLesk) ([core#39](https://github.com/community-scripts/core/pull/39))
### 🧰 Tools
- #### 🔧 Refactor
- Refactor: monitor-all (decide on flag values, not on key presence) [@MickLesk](https://github.com/MickLesk) ([#17261](https://github.com/community-scripts/ProxmoxVE/pull/17261))
## 2026-09-14
### 🆕 New Scripts
- Borg-UI ([#17258](https://github.com/community-scripts/ProxmoxVE/pull/17258))
### 🚀 Updated Scripts
- SparkyFitness: substitute NGINX_RATE_LIMIT in nginx config [@RafBorrelli](https://github.com/RafBorrelli) ([#17256](https://github.com/community-scripts/ProxmoxVE/pull/17256))
- #### 🐞 Bug Fixes
- spliit: bump Node.js from 24 to 26 [@github-actions[bot]](https://github.com/github-actions[bot]) ([#17250](https://github.com/community-scripts/ProxmoxVE/pull/17250))
## 2026-09-13
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Downgrade iobroker to Node 24 [@Copilot](https://github.com/Copilot) ([#17229](https://github.com/community-scripts/ProxmoxVE/pull/17229))
### 💾 Core
- Pick the highest release version, not the newest published one [@MickLesk](https://github.com/MickLesk) ([core#38](https://github.com/community-scripts/core/pull/38))
## 2026-09-12
### 🆕 New Scripts
- Elasticsearch ([#17188](https://github.com/community-scripts/ProxmoxVE/pull/17188))
- Hammer ([#17189](https://github.com/community-scripts/ProxmoxVE/pull/17189))
- gotenberg ([#17205](https://github.com/community-scripts/ProxmoxVE/pull/17205))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix(dispatcharr): add comskip installation and build dependencies [@eXistC](https://github.com/eXistC) ([#16224](https://github.com/community-scripts/ProxmoxVE/pull/16224))
- poznote: serve from src/public docroot [@MickLesk](https://github.com/MickLesk) ([#17187](https://github.com/community-scripts/ProxmoxVE/pull/17187))
- calibre-web: use calibreweb release identifier to avoid version file collision [@MickLesk](https://github.com/MickLesk) ([#17186](https://github.com/community-scripts/ProxmoxVE/pull/17186))
- #### ✨ New Features
- Docker VM: Feature Bump - Refactor script for improved functionality [@MickLesk](https://github.com/MickLesk) ([#17216](https://github.com/community-scripts/ProxmoxVE/pull/17216))
- feat(jitsi-meet): optional public setup (FQDN, Let's Encrypt, NAT, secure domain) [@klanghans](https://github.com/klanghans) ([#17132](https://github.com/community-scripts/ProxmoxVE/pull/17132))
- #### 🔧 Refactor
- Paperless-NGX: add --no-sync to uv run services [@MickLesk](https://github.com/MickLesk) ([#17210](https://github.com/community-scripts/ProxmoxVE/pull/17210))
### 💾 Core
- VM's: show the selected CPU model instead of doubling it [@MickLesk](https://github.com/MickLesk) ([core#37](https://github.com/community-scripts/core/pull/37))
- Generate app headers [@github-actions[bot]](https://github.com/github-actions[bot]) ([core#36](https://github.com/community-scripts/core/pull/36))
## 2026-09-11
### 🆕 New Scripts
- Lemonade-Server ([#17190](https://github.com/community-scripts/ProxmoxVE/pull/17190))
- OneTimeSecret ([#17097](https://github.com/community-scripts/ProxmoxVE/pull/17097))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- update authentik to 2026.8.2 [@thieneret](https://github.com/thieneret) ([#17198](https://github.com/community-scripts/ProxmoxVE/pull/17198))
- passwordpusher: restore data before running migrations [@MickLesk](https://github.com/MickLesk) ([#17141](https://github.com/community-scripts/ProxmoxVE/pull/17141))
- paperclip: install the rust toolchain needed by the runner build [@MickLesk](https://github.com/MickLesk) ([#17142](https://github.com/community-scripts/ProxmoxVE/pull/17142))
- homepage: run next directly instead of through pnpm [@MickLesk](https://github.com/MickLesk) ([#17155](https://github.com/community-scripts/ProxmoxVE/pull/17155))
- changedetection: fix: pin browserless [@CrazyWolf13](https://github.com/CrazyWolf13) ([#17163](https://github.com/community-scripts/ProxmoxVE/pull/17163))
### 💾 Core
- #### 🐞 Bug Fixes
- core.func: fall back to a usable HOME when the shell has none [@MickLesk](https://github.com/MickLesk) ([#17154](https://github.com/community-scripts/ProxmoxVE/pull/17154))
### 🧰 Tools
- Dockhand ([#17191](https://github.com/community-scripts/ProxmoxVE/pull/17191))
- #### 🐞 Bug Fixes
- update-apps: rewrite the retired Gitea base in every container before updating it [@MickLesk](https://github.com/MickLesk) ([#17156](https://github.com/community-scripts/ProxmoxVE/pull/17156))
- #### 🔧 Refactor
- Rename lxc-delete.sh to guest-delete.sh [@MickLesk](https://github.com/MickLesk) ([#17152](https://github.com/community-scripts/ProxmoxVE/pull/17152))
### 📚 Documentation
- issue template: add PVE release, execution context and phase; refresh distro list / pve versions [@MickLesk](https://github.com/MickLesk) ([#17160](https://github.com/community-scripts/ProxmoxVE/pull/17160))
- chore: fix PR template help [@CrazyWolf13](https://github.com/CrazyWolf13) ([#17364](https://github.com/community-scripts/ProxmoxVE/pull/17364))
+1 -1
View File
@@ -46,7 +46,7 @@ function update_script() {
$STD uv venv /opt/apprise/.venv
$STD uv pip install -r requirements.txt gunicorn supervisor -p /opt/apprise/.venv/bin/python
ln -sf /opt/apprise/.venv/bin/supervisord /opt/apprise/.venv/bin/gunicorn /usr/local/bin/
cp -fr apprise_api/static /usr/share/nginx/html/s/
cp -fr apprise_api/static/. /usr/share/nginx/html/s/
mv apprise_api/ webapp
touch /etc/nginx/server-override.conf
touch /etc/nginx/location-override.conf
+1 -1
View File
@@ -47,7 +47,7 @@ function update_script() {
RUST_PROFILE="minimal" RUST_TOOLCHAIN="stable" setup_rust
setup_yq
AUTHENTIK_VERSION="version/2026.8.3"
AUTHENTIK_VERSION="version/2026.8.4"
# Source: https://github.com/goauthentik/fips/blob/main/Makefile#L26
XMLSEC_VERSION="1.3.12"
+3 -5
View File
@@ -9,8 +9,8 @@ source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_
APP="ByteStash"
var_tags="${var_tags:-code}"
var_disk="${var_disk:-4}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
@@ -35,9 +35,8 @@ function update_script() {
systemctl stop bytestash-backend bytestash-frontend
msg_ok "Services Stopped"
[[ -d /opt/bytestash/data ]] && create_backup /opt/bytestash/data
[[ -d /opt/data ]] && create_backup /opt/data
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bytestash" "jordan-dalby/ByteStash" "tarball"
CLEAN_INSTALL=1 CLEAN_INSTALL_KEEP="data" fetch_and_deploy_gh_release "bytestash" "jordan-dalby/ByteStash" "tarball"
restore_backup
msg_info "Configuring ByteStash"
@@ -50,7 +49,6 @@ function update_script() {
msg_info "Starting Services"
systemctl start bytestash-backend bytestash-frontend
msg_ok "Started Services"
msg_ok "Updated successfully!"
fi
exit
+60
View File
@@ -0,0 +1,60 @@
#!/usr/bin/env bash
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Jelcoo
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://calagopus.com/
APP="Calagopus"
var_tags="${var_tags:-panel;game-server}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-40}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/local/bin/calagopus-panel ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "calagopus-panel" "calagopus/panel"; then
msg_info "Stopping Service"
systemctl stop calagopus-panel
msg_ok "Stopped Service"
create_backup /etc/calagopus/.env /var/lib/calagopus
fetch_and_deploy_gh_release "calagopus-panel" "calagopus/panel" "singlefile" "latest" "/usr/local/bin" "panel-rs-aio-$(arch_resolve x86_64 aarch64)-linux"
restore_backup
msg_info "Starting Service"
systemctl start calagopus-panel
msg_ok "Started Service"
msg_ok "Updated Successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
+27 -3
View File
@@ -30,12 +30,14 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
# Updates to 2026.10.0 finished without infra.js; run them again so it gets written
[[ -f /opt/cryptpad/config/infra.example.js && ! -f /opt/cryptpad/config/infra.js ]] && rm -f ~/.cryptpad
if check_for_gh_release "cryptpad" "cryptpad/cryptpad"; then
msg_info "Stopping Service"
systemctl stop cryptpad
msg_ok "Stopped Service"
create_backup /opt/cryptpad/config/config.js /opt/cryptpad/www/common/onlyoffice/dist
create_backup /opt/cryptpad/config/config.js /opt/cryptpad/config/infra.js /opt/cryptpad/www/common/onlyoffice/dist
CLEAN_INSTALL=1 CLEAN_INSTALL_KEEP="blob block customize data datastore onlyoffice-conf" fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" "tarball"
@@ -45,8 +47,30 @@ function update_script() {
cd /opt/cryptpad
$STD npm ci --allow-git=all
$STD npm run install:components
if [ -f "/opt/cryptpad/install-onlyoffice.sh" ]; then
$STD bash /opt/cryptpad/install-onlyoffice.sh --accept-license
if [[ -d /opt/cryptpad/www/common/onlyoffice/dist ]]; then
$STD bash /opt/cryptpad/install-office.sh --accept-license
fi
if [[ ! -f /opt/cryptpad/config/infra.js ]]; then
# 2026.10.0 reads the network settings from infra.js and no longer derives the sandbox origin
LOCAL_IP="$LOCAL_IP" node - <<'EOF'
const c = require("/opt/cryptpad/config/config.js");
const i = require("/opt/cryptpad/config/infra.example.js");
const port = c.httpPort || i.public.httpPort;
const safePort = c.httpSafePort || port + 1;
const origin = (c.httpUnsafeOrigin || `http://${process.env.LOCAL_IP}:${port}`).replace(/\/+$/, "");
const sandbox = new URL(origin);
sandbox.port = safePort;
Object.assign(i.public, {
origin,
sandboxOrigin: (c.httpSafeOrigin || sandbox.origin).replace(/\/+$/, ""),
httpHost: c.httpAddress || (c.httpUnsafeOrigin ? i.public.httpHost : "0.0.0.0"),
httpPort: port,
httpSafePort: safePort,
externalWebsocketURL: c.externalWebsocketURL,
fileHost: c.fileHost,
});
require("fs").writeFileSync("/opt/cryptpad/config/infra.js", "module.exports = " + JSON.stringify(i, null, 4) + ";\n");
EOF
fi
$STD npm run build
msg_ok "Updated CryptaPad"
+69
View File
@@ -0,0 +1,69 @@
#!/usr/bin/env bash
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/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/henriquesebastiao/downtify
APP="Downtify"
var_tags="${var_tags:-music;downloader}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
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/downtify ]]; then
msg_error "No Downtify Installation Found!"
exit
fi
if check_for_gh_release "downtify" "henriquesebastiao/downtify"; then
msg_info "Stopping Downtify"
systemctl stop downtify
msg_ok "Stopped Downtify"
PYTHON_VERSION="3.14" setup_uv
NODE_VERSION="26" setup_nodejs
fetch_and_deploy_gh_release "deno" "denoland/deno" "prebuild" "latest" "/usr/local/bin" "deno-$(arch_resolve "x86_64" "aarch64")-unknown-linux-gnu.zip"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "downtify" "henriquesebastiao/downtify" "tarball"
msg_info "Building Downtify"
cd /opt/downtify/frontend
$STD npm ci
$STD npm run build
rm -rf /opt/downtify/frontend/node_modules
cd /opt/downtify
$STD uv sync --frozen --no-dev --python 3.14
msg_ok "Built Downtify"
msg_info "Starting Downtify"
systemctl start downtify
msg_ok "Started Downtify"
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 "${GATEWAY}${BGN}http://${IP}:8000${CL}"
echo -e "${INFO}${YW}Sign in as admin / downtify and change the password right away${CL}"
+6
View File
@@ -91,6 +91,7 @@ User=root
WorkingDirectory=/opt/droppedneedle/backend
Environment=ROOT_APP_DIR=/opt/droppedneedle/backend
Environment=PORT=8688
Environment=COMMIT_TAG=v$(<~/.droppedneedle)
# Environment=SLSKD_DOWNLOADS_PATH=<path-to-slskd-downloads>
ExecStart=/opt/droppedneedle/venv/bin/python -m maintenance.automatic_upgrade --start-target
Restart=on-failure
@@ -106,6 +107,11 @@ EOF
sed -i '\|=8688$|a# Environment=SLSKD_DOWNLOADS_PATH=<path-to-slskd-downloads>' /etc/systemd/system/droppedneedle.service
fi
sed -i 's|^ExecStart=.*|ExecStart=/opt/droppedneedle/venv/bin/python -m maintenance.automatic_upgrade --start-target|' /etc/systemd/system/droppedneedle.service
if grep -q '^Environment=COMMIT_TAG=' /etc/systemd/system/droppedneedle.service; then
sed -i "s|^Environment=COMMIT_TAG=.*|Environment=COMMIT_TAG=v$(<~/.droppedneedle)|" /etc/systemd/system/droppedneedle.service
else
sed -i "\|=8688$|a Environment=COMMIT_TAG=v$(<~/.droppedneedle)" /etc/systemd/system/droppedneedle.service
fi
fi
systemctl daemon-reload
+6
View File
@@ -35,6 +35,12 @@ function update_script() {
msg_error "You must upgrade your LXC to Debian Trixie before updating."
exit
fi
# FlareSolverr hands LANG to Chrome as Accept-Language, which needs a tag like en-US, not a locale (#17987)
if ! grep -q '^Environment="LANG=' /etc/systemd/system/flaresolverr.service; then
sed -i '/^Environment="CAPTCHA_SOLVER=/a Environment="LANG=en-US"' /etc/systemd/system/flaresolverr.service
systemctl daemon-reload
systemctl restart flaresolverr
fi
if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr"; then
msg_info "Stopping service"
systemctl stop flaresolverr
+53 -2
View File
@@ -10,7 +10,7 @@ APP="GeoPulse"
var_tags="${var_tags:-location;tracking;gps}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-8}"
var_disk="${var_disk:-12}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
@@ -32,6 +32,16 @@ function update_script() {
fi
if check_for_gh_release "geopulse-backend" "tess1o/geopulse"; then
msg_info "Backing Up Database"
mkdir -p /var/lib/geopulse/dumps
DB_NAME="$(grep -oP '^GEOPULSE_POSTGRES_DB=\K.*' /etc/geopulse/geopulse.env 2>/dev/null)"
DB_NAME="${DB_NAME:-geopulse}"
if sudo -u postgres pg_dump -Fc "${DB_NAME}" >"/var/lib/geopulse/dumps/${DB_NAME}-pre-update-$(date +%Y%m%d%H%M%S).dump" 2>/dev/null; then
msg_ok "Backed Up Database"
else
msg_warn "Database backup failed, continuing anyway"
fi
msg_info "Stopping Service"
systemctl stop geopulse-backend
msg_ok "Stopped Service"
@@ -51,7 +61,48 @@ function update_script() {
fi
fetch_and_deploy_gh_release "geopulse-backend" "tess1o/geopulse" "singlefile" "latest" "/opt/geopulse/backend" "${BINARY_PATTERN}"
fetch_and_deploy_gh_release "geopulse-frontend" "tess1o/geopulse" "prebuild" "latest" "/var/www/geopulse" "geopulse-frontend-*.tar.gz"
CLEAN_INSTALL=1 CLEAN_INSTALL_KEEP="avatars" fetch_and_deploy_gh_release "geopulse-frontend" "tess1o/geopulse" "prebuild" "latest" "/var/www/geopulse" "geopulse-frontend-*.tar.gz"
if [[ -f /etc/geopulse/geopulse.env ]] && grep -q "GEOPULSE_JWT_" /etc/geopulse/geopulse.env 2>/dev/null; then
msg_info "Removing Unused JWT Keys"
sed -i '/^GEOPULSE_JWT_PRIVATE_KEY_LOCATION=/d;/^GEOPULSE_JWT_PUBLIC_KEY_LOCATION=/d' /etc/geopulse/geopulse.env
rm -f /opt/geopulse/keys/jwt-private-key.pem /opt/geopulse/keys/jwt-public-key.pem
msg_ok "Removed Unused JWT Keys"
fi
if [[ -f /etc/nginx/sites-available/geopulse.conf ]] && ! grep -q '\.mjs\$' /etc/nginx/sites-available/geopulse.conf; then
msg_info "Configuring Nginx for .mjs Assets"
cp /etc/nginx/sites-available/geopulse.conf /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak
ANCHOR_LINE="$(grep -n ' add_header Cache-Control "public, max-age=31536000";' /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak | head -1 | cut -d: -f1)"
if [[ -n "$ANCHOR_LINE" ]]; then
INSERT_LINE=$((ANCHOR_LINE + 1))
{
head -n "$INSERT_LINE" /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak
cat <<'MJSBLOCK'
location ~* ^/(?!osm/).*\.mjs$ {
types {
application/javascript mjs;
}
expires 1y;
add_header Cache-Control "public, max-age=31536000";
}
MJSBLOCK
tail -n "+$((INSERT_LINE + 1))" /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak
} >/etc/nginx/sites-available/geopulse.conf
fi
if [[ -n "$ANCHOR_LINE" ]] && grep -q '\.mjs\$' /etc/nginx/sites-available/geopulse.conf && nginx -t >/dev/null 2>&1; then
systemctl reload nginx
msg_ok "Configured Nginx for .mjs Assets"
else
cp /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak /etc/nginx/sites-available/geopulse.conf
nginx -t >/dev/null 2>&1 && systemctl reload nginx
msg_warn "Could not automatically add the .mjs nginx block (customized config?) - add it manually, see the GeoPulse 2.0.0 upgrade notes"
fi
fi
msg_info "Starting Service"
systemctl start geopulse-backend
+1 -1
View File
@@ -32,7 +32,7 @@ function update_script() {
exit
fi
if check_for_gh_release "gluetun" "qdm12/gluetun"; then
if check_for_gh_release "gluetun" "passteque/gluetun"; then
msg_info "Stopping Service"
systemctl stop gluetun
msg_ok "Stopped Service"
+33 -19
View File
@@ -65,19 +65,17 @@ EOF
msg_ok "Installed/upgraded Testing repo packages"
fi
if [[ ! -f /etc/apt/sources.list.d/mise.list ]]; then
msg_info "Installing Mise"
curl -fSs https://mise.jdx.dev/gpg-key.pub | tee /etc/apt/keyrings/mise-archive-keyring.pub 1>/dev/null
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=$(arch_resolve)] https://mise.jdx.dev/deb stable main" >/etc/apt/sources.list.d/mise.list
ensure_dependencies mise
msg_ok "Installed Mise"
if ! command -v mise >/dev/null 2>&1; then
MISE_ARCH="x64"
[[ "$(arch_resolve)" == "arm64" ]] && MISE_ARCH="arm64"
fetch_and_deploy_gh_release "mise" "jdx/mise" "singlefile" "latest" "/usr/local/bin" "mise-v*-linux-${MISE_ARCH}"
fi
STAGING_DIR=/opt/staging
BASE_DIR=${STAGING_DIR}/base-images
SOURCE_DIR=${STAGING_DIR}/image-source
cd /tmp
RELEASE="v3.3.0"
RELEASE="v3.3.5"
if [[ -f ~/.intel_version ]]; then
INTEL_SRC="https://raw.githubusercontent.com/immich-app/immich/${RELEASE}/machine-learning"
curl -fsSL "${INTEL_SRC}/scripts/install-intel-runtime.sh" -o ./intel-runtime 2>/dev/null ||
@@ -102,16 +100,33 @@ EOF
msg_ok "Updated Intel OpenVINO dependencies"
fi
fi
if [[ -f ~/.immich_library_revisions ]]; then
libraries=("libjxl" "jpegli" "libheif" "libraw" "imagemagick" "libvips")
cd "$BASE_DIR"
msg_warn "Checking for updates to custom image-processing libraries (recompile time: 2-15min per library)"
ensure_dependencies liblcms2-dev libjpeg62-turbo-dev libspng-dev libexif-dev libopenjp2-7-dev
$STD git pull
for library in "${libraries[@]}"; do
compile_"$library"
done
msg_ok "Image-processing libraries up to date"
# Without the revision file the refresh was skipped and sharp failed on an old libvips (#17914).
[[ -f ~/.immich_library_revisions ]] || msg_warn "No record of the compiled image-processing libraries, rebuilding all of them"
for lib in imagemagick jpegli libheif libjxl libraw libvips; do
grep -q "^${lib}:" ~/.immich_library_revisions 2>/dev/null || echo "${lib}: unknown" >>~/.immich_library_revisions
done
[[ -d "$BASE_DIR/.git" ]] || $STD git clone -b main https://github.com/immich-app/base-images "$BASE_DIR"
libraries=("libjxl" "jpegli" "libheif" "libraw" "imagemagick" "libvips")
cd "$BASE_DIR"
msg_warn "Checking for updates to custom image-processing libraries (recompile time: 2-15min per library)"
ensure_dependencies liblcms2-dev libjpeg62-turbo-dev libspng-dev libexif-dev libopenjp2-7-dev
$STD git pull
for library in "${libraries[@]}"; do
compile_"$library"
done
msg_ok "Image-processing libraries up to date"
# 3.3.0 reads geodata/countryInfo.txt; the update before #17823 saved it into app/ instead.
if [[ -d /opt/immich/geodata && ! -s /opt/immich/geodata/countryInfo.txt ]]; then
msg_info "Restoring geodata/countryInfo.txt"
if [[ -s /opt/immich/app/countryInfo.txt ]]; then
mv /opt/immich/app/countryInfo.txt /opt/immich/geodata/countryInfo.txt
else
curl_with_retry "https://download.geonames.org/export/dump/countryInfo.txt" /opt/immich/geodata/countryInfo.txt
fi
chown immich:immich /opt/immich/geodata/countryInfo.txt
systemctl restart immich-web
msg_ok "Restored geodata/countryInfo.txt"
fi
if check_for_gh_release "Immich" "immich-app/immich" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
@@ -489,8 +504,7 @@ function compile_jpegli() {
function compile_libheif() {
SOURCE=${SOURCE_DIR}/libheif
ensure_dependencies libaom-dev
LIBHEIF_REVISION="ac1cb05c39008f01525c991ff8b88f84ddf70fd2"
# : "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
LIBHEIF_REVISION="$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)"
if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling libheif"
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
+25 -3
View File
@@ -31,14 +31,36 @@ function update_script() {
exit
fi
if ! grep -qE "^ID=(ubuntu)$" /etc/os-release; then
msg_error "Unsupported OS. InvenTree requires Ubuntu (20.04/22.04/24.04)."
if ! grep -qE "^ID=(ubuntu|debian)$" /etc/os-release; then
msg_error "Unsupported OS. InvenTree requires Ubuntu or Debian."
exit
fi
# dl.packager.io is frozen at 1.5.1 and its SHA1-bound key fails on Debian 13;
# go.packager.io only carries current builds for these releases
if grep -qs "dl.packager.io" /etc/apt/sources.list.d/inventree*; then
case "$(get_os_info id)/$(get_os_info version)" in
ubuntu/24.04 | ubuntu/26.04 | debian/13)
msg_info "Migrating InvenTree Repository"
setup_deb822_repo \
"inventree" \
"https://go.packager.io/srv/deb/inventree/InvenTree/gpg-key.asc" \
"https://go.packager.io/srv/deb/inventree/InvenTree/stable/$(get_os_info id)" \
"$(get_os_info version)" \
"main"
msg_ok "Migrated InvenTree Repository"
;;
*)
msg_warn "InvenTree only publishes updates for Ubuntu 24.04/26.04 and Debian 13; staying on the frozen repository"
;;
esac
fi
msg_info "Updating InvenTree"
apt_update_safe
$STD apt install --only-upgrade inventree -y
# postinst loops forever unless its parent chain reaches PID 1 (not the case under pct exec)
$STD systemd-run --wait --pipe --quiet --collect --setenv=DEBIAN_FRONTEND=noninteractive \
apt-get install --only-upgrade -y inventree
msg_ok "Updated InvenTree"
msg_ok "Updated successfully!"
exit
+8
View File
@@ -31,6 +31,14 @@ function update_script() {
exit
fi
if [[ ! -f /etc/cron.d/invoiceshelf ]]; then
msg_info "Adding the Laravel scheduler"
cat <<'EOF' >/etc/cron.d/invoiceshelf
* * * * * www-data cd /opt/invoiceshelf && php artisan schedule:run >> /dev/null 2>&1
EOF
msg_ok "Added the Laravel scheduler"
fi
if check_for_gh_release "invoiceshelf" "InvoiceShelf/InvoiceShelf"; then
msg_info "Stopping Services"
systemctl stop caddy
+1 -1
View File
@@ -91,7 +91,7 @@ EOF
sed -i "s/^SERVER_VERSION=.*$/SERVER_VERSION=${CHECK_UPDATE_RELEASE#v}/" /etc/karakeep/karakeep.env
# Node 24.19.x crashes better-sqlite3 on cleanup (karakeep-app/karakeep#2989); stay on 22 LTS until upstream reverts.
MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
NODE_VERSION="22" NODE_MODULE="corepack,pnpm@${MODULE_VERSION}" setup_nodejs
NODE_VERSION="24" NODE_MODULE="corepack,pnpm@${MODULE_VERSION}" setup_nodejs
setup_meilisearch
msg_info "Updating Karakeep"
+56
View File
@@ -0,0 +1,56 @@
#!/usr/bin/env bash
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/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/Listenarrs/Listenarr
APP="Listenarr"
var_tags="${var_tags:-arr;audiobook}"
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_arm64="${var_arm64:-no}" # upstream publishes a linux-x64 build only
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/listenarr ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if GH_INCLUDE_PRERELEASE=1 check_for_gh_release "listenarr" "Listenarrs/Listenarr"; then
msg_info "Stopping Listenarr"
systemctl stop listenarr
msg_ok "Stopped Listenarr"
GH_INCLUDE_PRERELEASE=1 CLEAN_INSTALL=1 fetch_and_deploy_gh_release "listenarr" "Listenarrs/Listenarr" "prebuild" "latest" "/opt/listenarr" "listenarr-*-linux-x64.zip"
msg_info "Starting Listenarr"
systemctl start listenarr
msg_ok "Started Listenarr"
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 "${GATEWAY}${BGN}http://${IP}:4545${CL}"
+9
View File
@@ -37,6 +37,15 @@ function update_script() {
exit
fi
# Older installs have no CPU pin; on a host with a GPU but no driver in the
# container every model then ends in "backend not found".
if ! grep -q '^LOCALAI_FORCE_META_BACKEND_CAPABILITY=' /opt/localai.env 2>/dev/null &&
! ldconfig -p 2>/dev/null | grep -qE 'libcuda[.]so|libamdhip64[.]so|libze_intel_gpu[.]so|libze_loader[.]so'; then
echo "LOCALAI_FORCE_META_BACKEND_CAPABILITY=default" >>/opt/localai.env
systemctl restart localai
msg_ok "Pinned LocalAI to the CPU backends (no GPU runtime in the container)"
fi
if check_for_gh_release "localai" "mudler/LocalAI"; then
msg_info "Stopping Service"
systemctl stop localai
+12
View File
@@ -58,6 +58,18 @@ exec uv run mealie
STARTEOF
fi
chmod +x /opt/mealie/start.sh
if ! grep -q "REVERSE_PROXY_AUTH_ENABLED" /opt/mealie/mealie.env; then
cat <<EOF >>/opt/mealie/mealie.env
# Reverse proxy auth (Mealie v3.29.0+). Disabled by default.
# To enable: set REVERSE_PROXY_AUTH_ENABLED=true, set a secret, then restart mealie.
# REVERSE_PROXY_AUTH_ENABLED=false
# REVERSE_PROXY_AUTH_HEADER=X-Forwarded-User
# REVERSE_PROXY_AUTH_SIGNUP_ENABLED=false
# REVERSE_PROXY_AUTH_SECRET=
# REVERSE_PROXY_AUTH_SECRET_HEADER=X-Mealie-Reverse-Proxy-Secret
EOF
fi
msg_ok "Configuration restored"
msg_info "Installing Python Dependencies with uv"
+61
View File
@@ -0,0 +1,61 @@
#!/usr/bin/env bash
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/autobrr/netronome
APP="Netronome"
var_tags="${var_tags:-network;monitoring;speedtest}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/bin/netronome ]]; then
msg_error "No Netronome Installation Found!"
exit
fi
if check_for_gh_release "netronome" "autobrr/netronome" "" "" "v"; then
msg_info "Stopping Netronome"
systemctl stop netronome
msg_ok "Stopped Netronome"
fetch_and_deploy_gh_release "netronome" "autobrr/netronome" "binary" "latest" "" "netronome_*_linux_$(arch_resolve).deb" "v"
msg_info "Starting Netronome"
systemctl start netronome
msg_ok "Started Netronome"
msg_ok "Updated successfully!"
fi
if check_for_gh_release "librespeed-cli" "librespeed/speedtest-cli"; then
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "librespeed-cli" "librespeed/speedtest-cli" "prebuild" "latest" "/opt/librespeed-cli" "librespeed-cli_*_linux_$(arch_resolve).tar.gz"
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 "${GATEWAY}${BGN}http://${IP}:7575${CL}"
echo -e "${INFO}${YW}Register your account right away: the registration page accepts only the first account, and until then anyone who reaches the port can claim it.${CL}"
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env bash
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/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/norish-recipes/norish
APP="Norish"
var_tags="${var_tags:-recipes;meal-planning}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-6144}"
var_disk="${var_disk:-12}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
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/norish ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "norish" "norish-recipes/norish"; then
msg_info "Stopping Norish"
systemctl stop norish obscura
msg_ok "Stopped Norish"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "norish" "norish-recipes/norish" "tarball"
NODE_VERSION="22" NODE_MODULE="pnpm@$(jq -r '.packageManager | split("@")[1]' /opt/norish/package.json)" setup_nodejs
PYTHON_VERSION="3.14" setup_uv
fetch_and_deploy_gh_release "obscura" "h4ckf0r0day/obscura" "prebuild" "v$(sed -n 's/^OBSCURA_VERSION=//p' /opt/norish/docker/obscura/pin.env)" "/opt/obscura" "obscura-$(arch_resolve "x86_64" "aarch64")-linux-stealth.tar.gz"
fetch_and_deploy_gh_release "yt-dlp" "yt-dlp/yt-dlp" "singlefile" "latest" "/usr/local/bin" "$(arch_resolve "yt-dlp_linux" "yt-dlp_linux_aarch64")"
msg_info "Building Norish"
cd /opt/norish
$STD pnpm install --frozen-lockfile --filter "@norish/web..." --filter norish
$STD uv sync --project /opt/norish/apps/parser-api --locked
NODE_ENV=production SKIP_ENV_VALIDATION=1 NEXT_TELEMETRY_DISABLED=1 $STD pnpm turbo run build --filter "@norish/web"
rm -rf /opt/norish/apps/web/.next/cache /opt/norish/apps/web/.next/standalone
msg_ok "Built Norish"
msg_info "Starting Norish"
systemctl start obscura norish
msg_ok "Started Norish"
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 "${GATEWAY}${BGN}http://${IP}:3000${CL}"
+7 -4
View File
@@ -25,7 +25,10 @@ function update_script() {
check_container_storage
check_container_resources
if [[ ! -f /etc/systemd/system/onedev.service ]]; then
# Installs from before 16.9.0 keep their onedev.service; newer ones get onedev.server.service
SERVICE="onedev.server"
[[ -f /etc/systemd/system/onedev.service ]] && SERVICE="onedev"
if [[ ! -f "/etc/systemd/system/${SERVICE}.service" ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
@@ -34,12 +37,12 @@ function update_script() {
JAVA_VERSION="21" setup_java
msg_info "Stopping Service"
systemctl stop onedev
systemctl stop "$SERVICE"
msg_ok "Stopped Service"
msg_info "Updating OneDev"
cd /opt
curl -fsSL "https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz" -o onedev-latest.tar.gz
curl -fsSL "https://code.onedev.io/onedev/server/~sites/public/onedev-latest.tar.gz" -o onedev-latest.tar.gz
tar -xzf onedev-latest.tar.gz
$STD /opt/onedev-latest/bin/upgrade.sh /opt/onedev
rm -rf /opt/onedev-latest
@@ -48,7 +51,7 @@ function update_script() {
msg_ok "Updated OneDev"
msg_info "Starting Service"
systemctl start onedev
systemctl start "$SERVICE"
msg_ok "Started Service"
msg_ok "Updated successfully!"
exit
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env bash
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/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/DuarteSantos8/openGym
APP="openGym"
var_tags="${var_tags:-health;fitness}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
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/opengym ]]; then
msg_error "No openGym Installation Found!"
exit
fi
if check_for_gh_release "opengym" "DuarteSantos8/openGym" "" "" "v"; then
msg_info "Stopping openGym"
systemctl stop nginx opengym
msg_ok "Stopped openGym"
NODE_VERSION="22" setup_nodejs
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "opengym" "DuarteSantos8/openGym" "tarball" "latest" "/opt/opengym" "" "v"
msg_info "Building openGym"
cd /opt/opengym/api
$STD npm ci --omit=dev --omit=optional
cd /opt/opengym/frontend
$STD npm ci --ignore-scripts
$STD npm run build
rm -rf /opt/opengym/frontend/node_modules ~/.npm
msg_ok "Built openGym"
msg_info "Starting openGym"
systemctl start opengym nginx
msg_ok "Started openGym"
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 "${GATEWAY}${BGN}http://${IP}${CL}"
echo -e "${INFO}${YW}Sign-in is by password over plain HTTP. Create your profile right away: the first one becomes the admin.${CL}"
echo -e "${INFO}${YW}For passkeys, serve it over HTTPS on a hostname through a reverse proxy, then set RP_ID and ORIGIN in /opt/opengym_data/.env and run systemctl restart opengym. Changing RP_ID later invalidates existing passkeys.${CL}"
+12 -6
View File
@@ -49,10 +49,13 @@ function update_script() {
msg_info "Installing uv-based Open-WebUI"
PYTHON_VERSION="3.12" setup_uv
for attempt in $(seq 1 3); do
$STD uv tool install --python 3.12 --constraint <(echo "numba>=0.60") open-webui[all] && break
[[ $attempt -lt 3 ]] && msg_warn "Open WebUI install attempt $attempt failed, retrying..." && sleep 10
installed=0
for attempt in 1 2; do
$STD uv tool install --python 3.12 open-webui[all] && { installed=1; break; }
msg_warn "Open WebUI install attempt $attempt failed, retrying..."
sleep 10
done
((installed)) || $STD uv tool install --python 3.12 open-webui[all]
msg_ok "Installed uv-based Open-WebUI"
msg_info "Restoring data"
@@ -125,10 +128,13 @@ EOF
OTEL_ARGS+=(--with "$pkg")
done < <(uv pip list --python "$OWUI_PYTHON" --format freeze 2>/dev/null | grep -i '^opentelemetry-' | cut -d= -f1)
fi
for attempt in $(seq 1 3); do
$STD uv tool install --force --python 3.12 --constraint <(echo "numba>=0.60") "${OTEL_ARGS[@]}" open-webui[all] && break
[[ $attempt -lt 3 ]] && msg_warn "Open WebUI update attempt $attempt failed, retrying..." && sleep 10
updated=0
for attempt in 1 2; do
$STD uv tool install --force --python 3.12 "${OTEL_ARGS[@]}" open-webui[all] && { updated=1; break; }
msg_warn "Open WebUI update attempt $attempt failed, retrying..."
sleep 10
done
((updated)) || $STD uv tool install --force --python 3.12 "${OTEL_ARGS[@]}" open-webui[all]
systemctl restart open-webui
msg_ok "Updated Open WebUI"
msg_ok "Updated successfully!"
+4 -1
View File
@@ -50,7 +50,10 @@ function update_script() {
cd /opt/paperclip-ai
export HUSKY=0
export NODE_OPTIONS="--max-old-space-size=8192"
$STD pnpm install --frozen-lockfile
$STD pnpm install --frozen-lockfile || {
msg_warn "The lockfile of this release is out of date, resolving dependencies without it"
$STD pnpm install --no-frozen-lockfile
}
$STD pnpm build
unset NODE_OPTIONS
msg_ok "Rebuilt Paperclip"
+2 -1
View File
@@ -66,7 +66,8 @@ function update_script() {
cp -a /opt/backup/storage/app/public /opt/pelican-panel/storage/app/
$STD composer install --no-dev --optimize-autoloader --no-interaction
$STD php artisan p:environment:setup
PANEL_URL="$(sed -n 's/^APP_URL=//p' /opt/pelican-panel/.env | tr -d "\"'")"
$STD php artisan p:environment:setup --url="$PANEL_URL"
$STD php artisan view:clear
$STD php artisan config:clear
$STD php artisan filament:optimize
+1 -1
View File
@@ -41,7 +41,7 @@ function update_script() {
ARCH=$(uname -m)
if check_for_gh_release "deno" "denoland/deno" "v2.7.5" "Deno is pinned to 2.7.5 because the known WouldBlock: Resource temporarily unavailable (os error 11) Issue"; then
fetch_and_deploy_gh_release "deno" "denoland/deno" "v2.7.5" "latest" "/usr/local/bin" "deno-${ARCH}-unknown-linux-gnu.zip"
fetch_and_deploy_gh_release "deno" "denoland/deno" "prebuild" "v2.7.5" "/usr/local/bin" "deno-${ARCH}-unknown-linux-gnu.zip"
fi
if check_for_gh_release "profilarr" "Dictionarry-Hub/profilarr"; then
+71
View File
@@ -0,0 +1,71 @@
#!/usr/bin/env bash
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/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/adminsyspro/proxcenter-ui
APP="ProxCenter"
var_tags="${var_tags:-proxmox;management}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-6144}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
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/proxcenter ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "proxcenter" "adminsyspro/proxcenter-ui"; then
msg_info "Stopping ProxCenter"
systemctl stop proxcenter
msg_ok "Stopped ProxCenter"
NODE_VERSION="26" setup_nodejs
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "proxcenter" "adminsyspro/proxcenter-ui" "tarball"
msg_info "Building ProxCenter"
cd /opt/proxcenter/frontend
$STD npm ci --legacy-peer-deps --ignore-scripts
$STD npm run build:icons
$STD npx prisma generate
PROXCENTER_SKIP_TYPECHECK=1 NODE_OPTIONS="--max-old-space-size=3072" $STD npm run build
msg_ok "Built ProxCenter"
msg_info "Migrating Database"
set -a && source /opt/proxcenter_data/.env && set +a
$STD npx prisma migrate deploy
$STD npx prisma db seed
msg_ok "Migrated Database"
msg_info "Starting ProxCenter"
systemctl start proxcenter
msg_ok "Started ProxCenter"
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 "${GATEWAY}${BGN}http://${IP}:3000${CL}"
+22
View File
@@ -31,6 +31,28 @@ function update_script() {
exit
fi
if ! grep -q '^ExecStartPost=-/usr/local/bin/readmeabook-init$' /etc/systemd/system/readmeabook.service; then
msg_info "Starting the scheduler with the service"
cat <<'EOF' >/usr/local/bin/readmeabook-init
#!/usr/bin/env bash
# Upstream's image calls /api/init after every start: it creates the scheduled jobs and starts the scheduler
url="http://127.0.0.1:${PORT:-3030}"
for _ in $(seq 1 60); do curl -sf -o /dev/null "$url/api/health" && break; sleep 1; done
for _ in $(seq 1 30); do [[ "$(redis-cli ping 2>/dev/null)" == PONG ]] && break; sleep 1; done
for attempt in 1 2 3 4 5; do
curl -sf -o /dev/null "$url/api/init" && exit 0
sleep "$attempt"
done
echo "ReadMeABook did not answer /api/init, scheduled jobs will not run" >&2
exit 1
EOF
chmod +x /usr/local/bin/readmeabook-init
sed -i '/^ExecStart=/a ExecStartPost=-/usr/local/bin/readmeabook-init\nTimeoutStartSec=180' /etc/systemd/system/readmeabook.service
systemctl daemon-reload
systemctl restart readmeabook
msg_ok "Started the scheduler with the service"
fi
if check_for_gh_release "readmeabook" "kikootwo/ReadMeABook"; then
msg_info "Stopping Service"
systemctl stop readmeabook
+3 -2
View File
@@ -31,12 +31,13 @@ function update_script() {
exit
fi
if check_for_gh_release "silo" "pgsty/silo"; then
[[ -f ~/.silo ]] && mv ~/.silo ~/.silo_s3
if check_for_gh_release "silo_s3" "pgsty/silo"; then
msg_info "Stopping Silo"
systemctl stop silo
msg_ok "Stopped Silo"
DPKG_FORCE_CONFOLD=1 fetch_and_deploy_gh_release "silo" "pgsty/silo" "binary"
DPKG_FORCE_CONFOLD=1 fetch_and_deploy_gh_release "silo_s3" "pgsty/silo" "binary"
msg_info "Starting Silo"
systemctl start silo
+3 -2
View File
@@ -31,12 +31,13 @@ function update_script() {
exit
fi
if check_for_gh_release "Sonarr" "Sonarr/Sonarr"; then
# v5 reworks a lot; stay on the newest v4 until it is tested
if check_for_gh_release "Sonarr" "Sonarr/Sonarr" "" "" "v4."; then
msg_info "Stopping Service"
systemctl stop sonarr
msg_ok "Stopped Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Sonarr" "Sonarr/Sonarr" "prebuild" "latest" "/opt/Sonarr" "Sonarr.main.*.linux-$(arch_resolve "x64" "arm64").tar.gz"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Sonarr" "Sonarr/Sonarr" "prebuild" "latest" "/opt/Sonarr" "Sonarr.main.*.linux-$(arch_resolve "x64" "arm64").tar.gz" "v4."
msg_info "Starting Service"
systemctl start sonarr
+1 -1
View File
@@ -9,7 +9,7 @@ source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_
APP="SparkyFitness"
var_tags="${var_tags:-health;fitness}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-7}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
+54 -22
View File
@@ -31,42 +31,75 @@ function update_script() {
exit
fi
NODE_VERSION="24" NODE_MODULE="corepack,yarn" setup_nodejs
NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs
if check_for_gl_release "storyteller" "storyteller-platform/storyteller" "" "" "web-v2"; then
msg_info "Stopping Service"
systemctl stop storyteller
msg_ok "Stopped Service"
ensure_dependencies cmake argon2 libcurl4t64 libxml2
fetch_and_deploy_gh_release "readium" "readium/cli" "prebuild" "v0.9.1" "/opt/readium" "readium_linux_$(arch_resolve "x86_64" "arm64").tar.gz"
create_backup /opt/storyteller/.env
CLEAN_INSTALL=1 fetch_and_deploy_gl_release "storyteller" "storyteller-platform/storyteller" "tarball" "latest" "/opt/storyteller" "" "web-v2"
CLEAN_INSTALL=1 CLEAN_INSTALL_KEEP="data" fetch_and_deploy_gl_release "storyteller" "storyteller-platform/storyteller" "tarball" "latest" "/opt/storyteller" "" "web-v2"
restore_backup
msg_info "Rebuilding Storyteller"
msg_info "Building Storyteller (Patience)"
cd /opt/storyteller
export NODE_OPTIONS="--max-old-space-size=4096"
$STD corepack yarn install --network-timeout 600000
$STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so
export CI=1
$STD corepack yarn install
export NODE_ENV=production
export NEXT_TELEMETRY_DISABLED=1
export SQLITE_NATIVE_BINDING=/opt/storyteller/node_modules/better-sqlite3/build/Release/better_sqlite3.node
$STD corepack yarn workspaces foreach -Rpt --from @storyteller-platform/web --exclude @storyteller-platform/eslint run build
mkdir -p /opt/storyteller/web/.next/standalone/web/.next/static
cp -rT /opt/storyteller/web/.next/static /opt/storyteller/web/.next/standalone/web/.next/static
if [[ -d /opt/storyteller/web/public ]]; then
mkdir -p /opt/storyteller/web/.next/standalone/web/public
cp -rT /opt/storyteller/web/public /opt/storyteller/web/.next/standalone/web/public
STANDALONE=/opt/storyteller/applications/web/.next/standalone
WEB_DIR="$STANDALONE/applications/web"
mkdir -p "$WEB_DIR"/{public,.next/static,.next/cache,migrations,sqlite,scripts}
cp -rT applications/web/public "$WEB_DIR/public"
cp -rT applications/web/.next/static "$WEB_DIR/.next/static"
cp -rT applications/web/migrations "$WEB_DIR/migrations"
cp applications/web/sqlite/uuid.c.so "$WEB_DIR/sqlite/"
cp docker-scripts/reset-password.sh "$WEB_DIR/scripts/"
cp -r applications/web/work-dist applications/web/file-write-dist "$WEB_DIR/"
mkdir -p "$WEB_DIR/work-dist/@storyteller-platform/align/prebuilds"
cp -r "libraries/align/prebuilds/linux-$(arch_resolve "x64" "arm64")" "$WEB_DIR/work-dist/@storyteller-platform/align/prebuilds/"
cp node_modules/@echogarden/icu-segmentation-wasm/wasm/*.wasm "$WEB_DIR/work-dist/"
cp -rT node_modules/@parcel "$STANDALONE/node_modules/@parcel"
cp -rT node_modules/kuromoji "$STANDALONE/node_modules/kuromoji"
ln -sf /opt/storyteller/.env "$WEB_DIR/.env"
msg_ok "Built Storyteller"
msg_info "Updating Whisper"
WHISPER_VARIANT="linux-$(arch_resolve "x64" "arm64")-cpu"
$STD node /opt/storyteller/libraries/ghost-story/dist/cli/bin.js install binary "$WHISPER_VARIANT"
$STD node /opt/storyteller/libraries/ghost-story/dist/cli/bin.js install model tiny.en
if [[ "$WHISPER_VARIANT" == "linux-x64-cpu" ]]; then
$STD node /opt/storyteller/libraries/ghost-story/dist/cli/bin.js install binary linux-x64-cpu-legacy
fi
mkdir -p /opt/storyteller/web/.next/standalone/web/migrations
cp -rT /opt/storyteller/web/migrations /opt/storyteller/web/.next/standalone/web/migrations
mkdir -p /opt/storyteller/web/.next/standalone/web/sqlite
cp -rT /opt/storyteller/web/sqlite /opt/storyteller/web/.next/standalone/web/sqlite
ln -sf /opt/storyteller/.env /opt/storyteller/web/.next/standalone/web/.env
msg_ok "Rebuilt Storyteller"
msg_ok "Updated Whisper"
cat <<EOF >/etc/systemd/system/storyteller.service
[Unit]
Description=Storyteller
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=${WEB_DIR}
EnvironmentFile=/opt/storyteller/.env
Environment=SQLITE_NATIVE_BINDING=${STANDALONE}/node_modules/better-sqlite3/build/Release/better_sqlite3.node
Environment=ERROR_ALIGN_NATIVE_BINDING=${WEB_DIR}/work-dist/@storyteller-platform/align/
Environment=STORYTELLER_WORKER=worker.mjs
Environment=STORYTELLER_FILE_WRITE_WORKER=fileWriteWorker.mjs
ExecStart=/usr/bin/node --enable-source-maps server.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
msg_info "Starting Service"
systemctl start storyteller
@@ -75,7 +108,6 @@ function update_script() {
fi
exit
}
start
build_container
description
+1
View File
@@ -146,6 +146,7 @@ EOF
rm -rf /opt/tracearr.build
cd /opt/tracearr
$STD pnpm install --prod --frozen-lockfile --ignore-scripts --filter @tracearr/server...
rm -rf "$(pnpm store path)"
$STD chown -R tracearr:tracearr /opt/tracearr
msg_ok "Built Tracearr"
+6 -4
View File
@@ -53,10 +53,6 @@ update_deb_based() {
printf '%s\n' "$INSTALLED_VERSION" >"$HOME/.vaultwarden"
fi
if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then
msg_info "Stopping Service"
systemctl stop vaultwarden
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "vaultwarden" "dani-garcia/vaultwarden" "tarball" "latest" "/tmp/vaultwarden-src"
msg_info "Updating VaultWarden to $VAULT (Patience)"
@@ -64,6 +60,12 @@ update_deb_based() {
VW_VERSION="$VAULT"
export VW_VERSION
CARGO_BUILD_JOBS="$(get_parallel_jobs)" CARGO_PROFILE_RELEASE_LTO=false CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16 $STD cargo build --features "sqlite,mysql,postgresql" --release
msg_ok "Built VaultWarden ${VAULT}"
msg_info "Stopping Service"
systemctl stop vaultwarden
msg_ok "Stopped Service"
if [[ -f /usr/bin/vaultwarden ]]; then
cp target/release/vaultwarden /usr/bin/
else
+11 -12
View File
@@ -32,30 +32,29 @@ function update_script() {
NODE_VERSION="26" NODE_MODULE="yarn,node-gyp" setup_nodejs
if check_for_gh_release "wikijs" "requarks/wiki"; then
msg_info "Verifying whether ${APP}' new release is v3.x+ and current install uses SQLite."
SQLITE_INSTALL=$([ -f /opt/wikijs/db.sqlite ] && echo "true" || echo "false")
if [[ "${SQLITE_INSTALL}" == "true" && "${CHECK_UPDATE_RELEASE}" =~ ^3.* ]]; then
echo "SQLite is not supported in v3.x+, currently there is no update path availble."
exit
fi
msg_ok "There is an update path available for ${APP}"
if check_for_gh_release "wikijs" "requarks/wiki-v2"; then
# Installs before February 2025 use SQLite, newer ones PostgreSQL
SQLITE_INSTALL=$([[ -f /opt/wikijs/db.sqlite ]] && echo "true" || echo "false")
msg_info "Stopping Service"
systemctl stop wikijs
msg_ok "Stopped Service"
msg_info "Backing up Data"
mkdir /opt/wikijs-backup
$SQLITE_INSTALL && cp /opt/wikijs/db.sqlite /opt/wikijs-backup
mkdir -p /opt/wikijs-backup
if [[ "$SQLITE_INSTALL" == "true" ]]; then
cp /opt/wikijs/db.sqlite /opt/wikijs-backup
fi
cp -R /opt/wikijs/{config.yml,/data} /opt/wikijs-backup
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wikijs" "requarks/wiki" "prebuild" "latest" "/opt/wikijs" "wiki-js.tar.gz"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wikijs" "requarks/wiki-v2" "prebuild" "latest" "/opt/wikijs" "wiki-js.tar.gz"
msg_info "Restoring Data"
cp -R /opt/wikijs-backup/* /opt/wikijs
$SQLITE_INSTALL && $STD npm rebuild sqlite3
if [[ "$SQLITE_INSTALL" == "true" ]]; then
$STD npm rebuild sqlite3
fi
rm -rf /opt/wikijs-backup
msg_ok "Restored Data"
+74
View File
@@ -0,0 +1,74 @@
#!/usr/bin/env bash
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/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/DialmasterOrg/Youtarr
APP="Youtarr"
var_tags="${var_tags:-media;youtube;downloader}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-20}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
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/youtarr ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating yt-dlp"
$STD yt-dlp -U
msg_ok "Updated yt-dlp"
if check_for_gh_release "youtarr" "DialmasterOrg/Youtarr"; then
msg_info "Stopping Youtarr"
systemctl stop youtarr
msg_ok "Stopped Youtarr"
NODE_VERSION="24" setup_nodejs
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "youtarr" "DialmasterOrg/Youtarr" "tarball"
msg_info "Building Youtarr"
cd /opt/youtarr/client
$STD npm ci --ignore-scripts
$STD npm run build
rm -rf /opt/youtarr/client/node_modules
cd /opt/youtarr
$STD npm ci --omit=dev --ignore-scripts
mv /opt/youtarr/config/config.example.json /opt/youtarr/server/
rm -rf /opt/youtarr/config
ln -sfn /opt/youtarr_data/config /opt/youtarr/config
msg_ok "Built Youtarr"
msg_info "Starting Youtarr"
systemctl start youtarr
msg_ok "Started Youtarr"
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 "${GATEWAY}${BGN}http://${IP}:3011${CL}"
echo -e "${INFO}${YW}First login asks for the setup token in /opt/youtarr_data/config/setup-token${CL}"
+31 -17
View File
@@ -46,24 +46,36 @@ function update_script() {
msg_warn "No Zabbix Agent service found, skipping agent actions"
fi
ZABBIX_SERIES="$(dpkg-query -W -f='${Version}' zabbix-release 2>/dev/null || true)"
ZABBIX_SERIES="${ZABBIX_SERIES#*:}"
ZABBIX_SERIES="${ZABBIX_SERIES%%[!0-9.]*}"
if [[ "${PHS_SILENT:-0}" == "1" ]]; then
if [[ ! "$ZABBIX_SERIES" =~ ^[0-9]+\.[0-9]+$ ]]; then
msg_warn "Could not detect the installed Zabbix series - skipping update, requires an interactive run"
exit 75
fi
ZABBIX_VERSION="$ZABBIX_SERIES"
msg_warn "Unattended update: staying on Zabbix ${ZABBIX_VERSION}"
else
read -rp "Choose Zabbix version [1] 7.0 LTS [2] 7.4 (Latest Stable) [3] Latest available (default: 2): " ZABBIX_CHOICE
ZABBIX_CHOICE=${ZABBIX_CHOICE:-2}
case "$ZABBIX_CHOICE" in
1) ZABBIX_VERSION="7.0" ;;
2) ZABBIX_VERSION="7.4" ;;
3) ZABBIX_VERSION=$(curl -fsSL https://repo.zabbix.com/zabbix/ |
grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1) ;;
*)
ZABBIX_VERSION="7.4"
echo "Invalid choice. Defaulting to 7.4."
;;
esac
fi
msg_info "Stopping Services"
systemctl stop zabbix-server
[[ -n "$AGENT_SERVICE" ]] && systemctl stop "$AGENT_SERVICE"
msg_ok "Stopped Services"
read -rp "Choose Zabbix version [1] 7.0 LTS [2] 7.4 (Latest Stable) [3] Latest available (default: 2): " ZABBIX_CHOICE
ZABBIX_CHOICE=${ZABBIX_CHOICE:-2}
case "$ZABBIX_CHOICE" in
1) ZABBIX_VERSION="7.0" ;;
2) ZABBIX_VERSION="7.4" ;;
3) ZABBIX_VERSION=$(curl -fsSL https://repo.zabbix.com/zabbix/ |
grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1) ;;
*)
ZABBIX_VERSION="7.4"
echo "Invalid choice. Defaulting to 7.4."
;;
esac
msg_info "Updating Zabbix to $ZABBIX_VERSION"
mkdir -p /opt/zabbix-backup/
cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/
@@ -73,8 +85,10 @@ function update_script() {
rm -Rf /etc/apt/sources.list.d/zabbix.list
cd /tmp
ZABBIX_REPO_DIR="debian"
[[ "$ZABBIX_VERSION" == "7.0" && "$(arch_resolve)" == "arm64" ]] && ZABBIX_REPO_DIR="debian-arm64"
if [[ "$ZABBIX_VERSION" == "7.0" ]]; then
ZABBIX_DEB_URL="https://repo.zabbix.com/zabbix/${ZABBIX_VERSION}/debian/pool/main/z/zabbix-release/zabbix-release_latest_${ZABBIX_VERSION}+debian13_all.deb"
ZABBIX_DEB_URL="https://repo.zabbix.com/zabbix/${ZABBIX_VERSION}/${ZABBIX_REPO_DIR}/pool/main/z/zabbix-release/zabbix-release_latest_${ZABBIX_VERSION}+debian13_all.deb"
ZABBIX_DEB_FILE="zabbix-release_latest_${ZABBIX_VERSION}+debian13_all.deb"
else
ZABBIX_DEB_URL="https://repo.zabbix.com/zabbix/${ZABBIX_VERSION}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian13_all.deb"
@@ -86,16 +100,16 @@ function update_script() {
rm -rf /tmp/zabbix-release_*.deb
apt_update_safe
$STD apt install --only-upgrade zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql
$STD apt install --only-upgrade -y zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql
if [[ "$AGENT_SERVICE" == "zabbix-agent2" ]]; then
$STD apt install --only-upgrade zabbix-agent2 zabbix-agent2-plugin-postgresql
$STD apt install --only-upgrade -y zabbix-agent2 zabbix-agent2-plugin-postgresql
if [ -f /etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf ]; then
sed -i 's|^Plugins.NVIDIA.System.Path=.*|# Plugins.NVIDIA.System.Path=/usr/libexec/zabbix/zabbix-agent2-plugin-nvidia-gpu|' \
/etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf
fi
elif [[ "$AGENT_SERVICE" == "zabbix-agent" ]]; then
$STD apt install --only-upgrade zabbix-agent
$STD apt install --only-upgrade -y zabbix-agent
fi
if command -v fping >/dev/null 2>&1; then
+65 -1
View File
@@ -12,7 +12,7 @@ var_disk="${var_disk:-8}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-no}"
var_unprivileged="${var_unprivileged:-1}"
@@ -34,6 +34,64 @@ function update_script() {
systemctl stop zammad
msg_ok "Stopped Service"
if grep -qs "dl.packager.io" /etc/apt/sources.list.d/zammad*; then
msg_info "Migrating Zammad Repository"
rm -f /etc/apt/keyrings/pkgr-zammad.gpg
setup_deb822_repo \
"zammad" \
"https://go.packager.io/srv/deb/zammad/zammad/gpg-key.asc" \
"https://go.packager.io/srv/deb/zammad/zammad/stable/debian" \
"$(get_os_info version_id)" \
"main"
msg_ok "Migrated Zammad Repository"
fi
REBUILD_INDEX=false
if [[ "$(dpkg-query -W -f='${Version}' elasticsearch 2>/dev/null)" == 7.* ]]; then
msg_info "Upgrading Elasticsearch to 8.x"
systemctl stop elasticsearch
if /usr/share/elasticsearch/bin/elasticsearch-plugin list 2>/dev/null | grep -q "ingest-attachment"; then
$STD /usr/share/elasticsearch/bin/elasticsearch-plugin remove ingest-attachment
fi
rm -f /etc/apt/sources.list.d/elastic-7.x.list /usr/share/keyrings/elasticsearch-keyring.gpg
setup_deb822_repo \
"elasticsearch" \
"https://artifacts.elastic.co/GPG-KEY-elasticsearch" \
"https://artifacts.elastic.co/packages/8.x/apt" \
"stable" \
"main"
ES_JAVA_OPTS="-Xms1g -Xmx1g" $STD apt install -y elasticsearch
if [[ -f /etc/elasticsearch/jvm.options.dpkg-dist ]]; then
mv /etc/elasticsearch/jvm.options.dpkg-dist /etc/elasticsearch/jvm.options
fi
rm -f /etc/elasticsearch/elasticsearch.yml.dpkg-dist
rm -rf /var/lib/elasticsearch/*
cat <<EOF >/etc/elasticsearch/jvm.options.d/heap.options
-Xms2g
-Xmx2g
EOF
cat <<EOF >/etc/elasticsearch/elasticsearch.yml
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
discovery.type: single-node
network.host: 127.0.0.1
xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false
xpack.security.http.ssl.enabled: false
bootstrap.memory_lock: false
EOF
systemctl daemon-reload
systemctl restart -q elasticsearch
for i in $(seq 1 30); do
if curl -s http://127.0.0.1:9200 >/dev/null 2>&1; then
break
fi
sleep 2
done
REBUILD_INDEX=true
msg_ok "Upgraded Elasticsearch to 8.x"
fi
msg_info "Updating Zammad"
apt_update_safe
$STD apt-mark hold zammad
@@ -42,6 +100,12 @@ function update_script() {
$STD apt upgrade -y
msg_ok "Updated Zammad"
if [[ "$REBUILD_INDEX" == true ]]; then
msg_info "Rebuilding Search Index"
$STD zammad run rake zammad:searchindex:rebuild
msg_ok "Rebuilt Search Index"
fi
msg_info "Starting Service"
systemctl start zammad
msg_ok "Started Service"
+36 -10
View File
@@ -2,7 +2,7 @@
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
# Copyright (c) 2021-2026 community-scripts ORG
# Author: dave-yap (dave-yap)
# Author: dave-yap (dave-yap) | Co-Author: remz1337, MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://zitadel.com/ | Github: https://github.com/zitadel/zitadel
@@ -16,11 +16,23 @@ var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
if [[ -z "${var_zitadel_login:-}" ]] && command -v pveversion >/dev/null 2>&1; then
var_zitadel_login=$(msg_menu "Choose the Zitadel login UI" \
"v2" "Login V2, Zitadel's default (HTTPS, self-signed certificate)" \
"v1" "Login V1, the classic login built into the API (HTTP)")
fi
export var_zitadel_login="${var_zitadel_login:-v2}"
header_info "$APP"
variables
color
catch_errors
if [[ ! "${var_zitadel_login}" =~ ^v[12]$ ]]; then
msg_error "var_zitadel_login must be v1 or v2"
exit 1
fi
function update_script() {
header_info
check_container_storage
@@ -31,20 +43,29 @@ function update_script() {
fi
if check_for_gh_release "zitadel" "zitadel/zitadel"; then
msg_info "Stopping Service"
msg_info "Stopping Zitadel"
if [[ -f /etc/systemd/system/zitadel-login.service ]]; then
systemctl stop zitadel-login
fi
systemctl stop zitadel
msg_ok "Stopped Service"
msg_ok "Stopped Zitadel"
rm -f /usr/local/bin/zitadel
fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "latest" "/usr/local/bin" "zitadel-linux-$(arch_resolve).tar.gz"
fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "${CHECK_UPDATE_RELEASE}" "/usr/local/bin" "zitadel-linux-$(arch_resolve).tar.gz"
if [[ -f /etc/systemd/system/zitadel-login.service ]]; then
NODE_VERSION="24" setup_nodejs
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "zitadel-login" "zitadel/zitadel" "prebuild" "${CHECK_UPDATE_RELEASE}" "/opt/zitadel-login" "zitadel-login.tar.gz"
fi
msg_info "Updating Zitadel"
msg_info "Migrating Zitadel Database"
$STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true
msg_ok "Updated Zitadel"
msg_ok "Migrated Zitadel Database"
msg_info "Starting Service"
msg_info "Starting Zitadel"
systemctl start zitadel
msg_ok "Started Service"
if [[ -f /etc/systemd/system/zitadel-login.service ]]; then
systemctl start zitadel-login
fi
msg_ok "Started Zitadel"
msg_ok "Updated successfully!"
fi
exit
@@ -57,4 +78,9 @@ 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 "${GATEWAY}${BGN}http://${IP}:8080/ui/console${CL}"
if [[ "${var_zitadel_login}" == "v1" ]]; then
echo -e "${GATEWAY}${BGN}http://${IP}:8080/ui/console${CL}"
else
echo -e "${GATEWAY}${BGN}https://${IP}:8080/ui/console${CL}"
fi
echo -e "${INFO}${YW}Admin credentials: ~/zitadel.creds (inside the container)${CL}"
-1
View File
@@ -36,7 +36,6 @@ sed -i -e "s|^APP_URL=.*|APP_URL=http://$LOCAL_IP|" \
-e "s|^DB_USERNAME=$|DB_USERNAME=$MARIADB_DB_USER|" \
-e "s|^DB_PASSWORD=$|DB_PASSWORD=$MARIADB_DB_PASS|" .env
export COMPOSER_ALLOW_SUPERUSER=1
$STD composer update --no-plugins --no-scripts
$STD composer install --no-dev --prefer-dist --no-plugins --no-scripts
$STD php artisan key:generate --force
$STD php artisan migrate:refresh
+5
View File
@@ -12,6 +12,11 @@ setting_up_container
network_check
update_os
if is_debian && [[ "$(get_os_version_major)" -lt 13 ]]; then
msg_error "Apache Guacamole needs Debian 13: freerdp3-dev is not available on Debian 12."
exit 238
fi
msg_info "Installing Dependencies"
$STD apt install -y \
build-essential \
+6 -4
View File
@@ -13,12 +13,14 @@ setting_up_container
network_check
update_os
read -r -p "${TAB3}Which Tomcat version would you like to install? (9, 10.1, 11): " version
version="${var_apache_tomcat_version:-}"
[[ -n "$version" ]] || read -r -p "${TAB3}Which Tomcat version would you like to install? (9, 10.1, 11): " version || true
jdk_version="${var_apache_tomcat_jdk_version:-}"
case $version in
9)
TOMCAT_VERSION="9"
echo "Which LTS Java version would you like to use? (8, 11, 17, 21): "
read -r jdk_version
[[ -n "$jdk_version" ]] || read -r jdk_version || true
case $jdk_version in
8 | 11 | 17 | 21)
JAVA_VERSION="$jdk_version" setup_java
@@ -32,7 +34,7 @@ case $version in
10 | 10.1)
TOMCAT_VERSION="10"
echo "Which LTS Java version would you like to use? (11, 17, 21): "
read -r jdk_version
[[ -n "$jdk_version" ]] || read -r jdk_version || true
case $jdk_version in
11 | 17 | 21)
JAVA_VERSION="$jdk_version" setup_java
@@ -46,7 +48,7 @@ case $version in
11)
TOMCAT_VERSION="11"
echo "Which LTS Java version would you like to use? (17, 21): "
read -r jdk_version
[[ -n "$jdk_version" ]] || read -r jdk_version || true
case $jdk_version in
17 | 21)
JAVA_VERSION="$jdk_version" setup_java
+1 -1
View File
@@ -29,7 +29,7 @@ cp ./requirements.txt /etc/requirements.txt
$STD uv venv /opt/apprise/.venv
$STD uv pip install -r requirements.txt gunicorn supervisor -p /opt/apprise/.venv/bin/python
ln -sf /opt/apprise/.venv/bin/supervisord /opt/apprise/.venv/bin/gunicorn /usr/local/bin/
cp -fr apprise_api/static /usr/share/nginx/html/s/
cp -fr apprise_api/static/. /usr/share/nginx/html/s/
mv apprise_api/ webapp
touch /etc/nginx/server-override.conf
touch /etc/nginx/location-override.conf
+1 -1
View File
@@ -18,7 +18,7 @@ $STD apt install -y aria2
msg_ok "Installed Aria2"
prompt="${var_aria2_ariang:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add AriaNG? <y/N> " prompt
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add AriaNG? <y/N> " prompt || true
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Dependencies"
$STD apt install -y nginx
+2 -1
View File
@@ -47,7 +47,8 @@ Choose Asterisk version to install:
2) Latest LTS ($LTS_VERSION)
3) Latest Certified ($CERT_VERSION)
EOF
read -rp "Enter choice [1-3]: " ASTERISK_CHOICE
ASTERISK_CHOICE="${var_asterisk_version:-}"
[[ -n "$ASTERISK_CHOICE" ]] || read -rp "Enter choice [1-3]: " ASTERISK_CHOICE || true
CERTIFIED=0
case "$ASTERISK_CHOICE" in
+4 -1
View File
@@ -17,9 +17,10 @@ fetch_and_deploy_gh_release "authelia" "authelia/authelia" "binary"
MAX_ATTEMPTS=3
attempt=0
DOMAIN="${var_authelia_domain:-}"
while true; do
attempt=$((attempt + 1))
read -rp "${TAB3}Enter your domain or IP (ex. example.com or 192.168.1.100): " DOMAIN
[[ -n "$DOMAIN" ]] || read -rp "${TAB3}Enter your domain or IP (ex. example.com or 192.168.1.100): " DOMAIN || true
if [[ -z "$DOMAIN" ]]; then
if ((attempt >= MAX_ATTEMPTS)); then
DOMAIN="${LOCAL_IP:-localhost}"
@@ -40,11 +41,13 @@ while true; do
break
else
msg_warn "Invalid IP address!"
DOMAIN=""
fi
elif [[ "$DOMAIN" =~ ^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\.[a-zA-Z]{2,}$ ]]; then
break
else
msg_warn "Invalid domain format!"
DOMAIN=""
fi
done
msg_info "Setting Authelia up"
+1 -1
View File
@@ -57,7 +57,7 @@ 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.12"
AUTHENTIK_VERSION="version/2026.8.3"
AUTHENTIK_VERSION="version/2026.8.4"
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"
GO_VERSION="$(grep -m1 '^go ' /opt/authentik/go.mod | awk '{print $2}')" setup_go
+2 -1
View File
@@ -15,7 +15,8 @@ update_os
fetch_and_deploy_gh_release "bichon" "rustmailer/bichon" "prebuild" "latest" "/opt/bichon" "bichon-*-$(arch_resolve "x86_64" "aarch64")-unknown-linux-gnu.tar.gz"
read -r -p "${TAB3}Enter the public URL for Bichon (e.g., https://bichon.yourdomain.com) or leave empty to use container IP: " bichon_url
bichon_url="${var_bichon_url:-}"
[[ -n "$bichon_url" ]] || read -r -p "${TAB3}Enter the public URL for Bichon (e.g., https://bichon.yourdomain.com) or leave empty to use container IP: " bichon_url || true
if [[ -z "$bichon_url" ]]; then
msg_info "No URL provided"
BICHON_PUBLIC_URL="http://$LOCAL_IP:15630"
+4 -2
View File
@@ -34,7 +34,8 @@ setup_deb_based() {
chmod +x bitmagnet
msg_ok "Configured bitmagnet"
read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey
tmdbapikey="${var_bitmagnet_tmdb_api_key:-}"
[[ -n "$tmdbapikey" ]] || read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey || true
cat <<EOF >/etc/bitmagnet.env
POSTGRES_HOST=localhost
@@ -99,7 +100,8 @@ setup_alpine() {
$STD su - postgres -c "psql -c 'CREATE DATABASE bitmagnet;'"
msg_ok "Built bitmagnet"
read -rp "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey
tmdbapikey="${var_bitmagnet_tmdb_api_key:-}"
[[ -n "$tmdbapikey" ]] || read -rp "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey || true
msg_info "Enabling bitmagnet Service"
cat <<EOF >/etc/init.d/bitmagnet
+1 -1
View File
@@ -25,7 +25,7 @@ $STD npm install
msg_ok "Installed ByteStash"
allowreg="${var_bytestash_registration:-}"
[[ -n "$allowreg" ]] || read -rp "${TAB3}Do you want to allow registration of multiple accounts? [y/n]: " allowreg
[[ -n "$allowreg" ]] || read -rp "${TAB3}Do you want to allow registration of multiple accounts? [y/n]: " allowreg || true
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/bytestash-backend.service
+2 -2
View File
@@ -18,7 +18,7 @@ setup_deb_based() {
systemctl enable -q --now caddy
prompt="${var_caddy_xcaddy:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt || true
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
setup_go
fetch_and_deploy_gh_release "xcaddy" "caddyserver/xcaddy" "binary"
@@ -64,7 +64,7 @@ EOF
msg_ok "Installed Caddy"
prompt="${var_caddy_xcaddy:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt || true
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
GO_VERSION="$(curl -fsSL https://go.dev/VERSION?m=text | head -1 | cut -c3-)" setup_go
fetch_and_deploy_gh_release "xcaddy" "caddyserver/xcaddy" "prebuild" "latest" "/opt/xcaddy" "xcaddy_*_linux_$(arch_resolve).tar.gz"
+77
View File
@@ -0,0 +1,77 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Jelcoo
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://calagopus.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 valkey
systemctl enable -q --now valkey-server
msg_ok "Installed Dependencies"
PG_VERSION="18" setup_postgresql
PG_DB_NAME="panel" PG_DB_USER="calagopus" setup_postgresql_db
setup_docker
fetch_and_deploy_gh_release "calagopus-panel" "calagopus/panel" "singlefile" "latest" "/usr/local/bin" "panel-rs-aio-$(arch_resolve x86_64 aarch64)-linux"
msg_info "Configuring Calagopus"
mkdir -p /etc/calagopus /var/lib/calagopus /var/log/calagopus
mkdir -p /etc/calagopus-wings /var/lib/calagopus-wings /var/log/calagopus-wings /tmp/calagopus-wings
APP_ENCRYPTION_KEY=$(openssl rand -hex 16)
cat <<EOF >/etc/calagopus/.env
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}
DATABASE_MIGRATE=true
REDIS_URL=redis://localhost
PORT=8000
APP_ENCRYPTION_KEY=${APP_ENCRYPTION_KEY}
APP_LOG_DIRECTORY=/var/log/calagopus
APP_PRIMARY=true
APP_ENABLE_WINGS_PROXY=true
APP_USE_DECRYPTION_CACHE=true
APP_USE_INTERNAL_CACHE=true
AIO_BASE_WINGS_CONFIGURATION=/etc/calagopus/wings-config.yml
EOF
chmod 600 /etc/calagopus/.env
cat <<EOF >/etc/calagopus/wings-config.yml
app_name: Calagopus
EOF
msg_ok "Configured Calagopus"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/calagopus-panel.service
[Unit]
Description=Calagopus Panel
After=network.target postgresql.service valkey-server.service docker.service
Requires=postgresql.service valkey-server.service docker.service
[Service]
Type=simple
User=root
WorkingDirectory=/etc/calagopus
EnvironmentFile=/etc/calagopus/.env
ExecStart=/usr/local/bin/calagopus-panel
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now calagopus-panel
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+12 -8
View File
@@ -13,15 +13,18 @@ setting_up_container
network_check
update_os
var_cf_api_token="default"
read -rp "${TAB3}Enter the Cloudflare API token: " var_cf_api_token
var_cf_api_token="${var_cf_api_token:-}"
[[ -n "$var_cf_api_token" ]] || read -rp "${TAB3}Enter the Cloudflare API token: " var_cf_api_token || true
[[ -n "$var_cf_api_token" ]] || { msg_error "No Cloudflare API token given; set var_cf_api_token or answer the prompt"; exit 64; }
var_cf_domains="default"
read -rp "${TAB3}Enter the domains separated with a comma (*.example.org,www.example.org) " var_cf_domains
var_cf_domains="${var_cf_domains:-}"
[[ -n "$var_cf_domains" ]] || read -rp "${TAB3}Enter the domains separated with a comma (*.example.org,www.example.org) " var_cf_domains || true
[[ -n "$var_cf_domains" ]] || { msg_error "No domains given; set var_cf_domains or answer the prompt"; exit 64; }
var_cf_proxied="false"
answer="${var_cloudflare_ddns_proxied:-}"
while true; do
read -rp "${TAB3}Proxied? (y/n): " answer
[[ -n "$answer" ]] || read -rp "${TAB3}Proxied? (y/n): " answer || answer="n"
case "$answer" in
[Yy]*)
var_cf_proxied="true"
@@ -31,12 +34,13 @@ while true; do
var_cf_proxied="false"
break
;;
*) echo "Please answer y or n." ;;
*) echo "Please answer y or n."; answer="" ;;
esac
done
var_cf_ip6_provider="none"
answer="${var_cloudflare_ddns_ipv6:-}"
while true; do
read -rp "${TAB3}Enable IPv6 support? (y/n): " answer
[[ -n "$answer" ]] || read -rp "${TAB3}Enable IPv6 support? (y/n): " answer || answer="n"
case "$answer" in
[Yy]*)
var_cf_ip6_provider="cloudflare.trace"
@@ -46,7 +50,7 @@ while true; do
var_cf_ip6_provider="none"
break
;;
*) echo "Please answer y or n." ;;
*) echo "Please answer y or n."; answer="" ;;
esac
done
msg_ok "Configured Application"
+1 -1
View File
@@ -33,7 +33,7 @@ msg_ok "Installed Cockpit"
# 45Drives only publishes amd64 packages
if [[ "$(arch_resolve)" != "arm64" ]]; then
prompt="${var_cockpit_45drives:-}"
[[ -n "$prompt" ]] || read -r -p "Would you like to install 45Drives' cockpit-file-sharing, cockpit-identities, and cockpit-navigator <y/N> " prompt
[[ -n "$prompt" ]] || read -r -p "Would you like to install 45Drives' cockpit-file-sharing, cockpit-identities, and cockpit-navigator <y/N> " prompt || true
fi
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing 45Drives' cockpit extensions"
+2 -1
View File
@@ -17,7 +17,8 @@ setup_hwaccel
echo
echo "${TAB3}Choose the GPU type for ComfyUI:"
echo "${TAB3}[1]-None [2]-NVIDIA [3]-AMD [4]-Intel"
read -rp "${TAB3}Enter your choice [1-4] (default: 1): " gpu_choice
gpu_choice="${var_comfyui_gpu_type:-}"
[[ -n "$gpu_choice" ]] || read -rp "${TAB3}Enter your choice [1-4] (default: 1): " gpu_choice || true
gpu_choice=${gpu_choice:-1}
case "$gpu_choice" in
1) comfyui_gpu_type="none" ;;
+8 -4
View File
@@ -20,7 +20,7 @@ msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs
onlyoffice="${var_cryptpad_onlyoffice:-}"
[[ -n "$onlyoffice" ]] || read -rp "${TAB3}Install OnlyOffice components instead of CKEditor? (Y/N): " onlyoffice
[[ -n "$onlyoffice" ]] || read -rp "${TAB3}Install OnlyOffice components instead of CKEditor? (Y/N): " onlyoffice || true
fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" "tarball"
msg_info "Setup CryptPad"
@@ -28,11 +28,15 @@ cd /opt/cryptpad
$STD npm ci --allow-git=all
$STD npm run install:components
if [[ "${onlyoffice,,}" =~ ^(y|yes)$ ]]; then
$STD bash -c "./install-onlyoffice.sh --accept-license"
$STD bash -c "./install-office.sh --accept-license"
fi
cp config/config.example.js config/config.js
sed -i "51s/localhost/${LOCAL_IP}/g" /opt/cryptpad/config/config.js
sed -i "80s#//httpAddress: 'localhost'#httpAddress: '0.0.0.0'#g" /opt/cryptpad/config/config.js
cp config/infra.example.js config/infra.js
sed -i \
-e "s|origin: \"http://localhost:3000\"|origin: \"http://${LOCAL_IP}:3000\"|" \
-e "s|sandboxOrigin: \"http://localhost:3001\"|sandboxOrigin: \"http://${LOCAL_IP}:3001\"|" \
-e "s|httpHost: \"localhost\"|httpHost: \"0.0.0.0\"|" \
config/infra.js
$STD npm run build
msg_ok "Setup CryptPad"
+6 -15
View File
@@ -15,11 +15,8 @@ update_os
setup_deb_based() {
setup_docker
if [[ -n "${var_docker_socket:-}" ]]; then
socket_choice="$var_docker_socket"
else
read -r -p "${TAB3}Expose Docker TCP socket (insecure) ? [n = No, l = Local only (127.0.0.1), a = All interfaces (0.0.0.0)] <n/l/a>: " socket_choice
fi
socket_choice="${var_docker_socket:-}"
[[ -n "$socket_choice" ]] || read -r -p "${TAB3}Expose Docker TCP socket (insecure) ? [n = No, l = Local only (127.0.0.1), a = All interfaces (0.0.0.0)] <n/l/a>: " socket_choice || true
case "${socket_choice,,}" in
l | local)
socket="tcp://127.0.0.1:2375"
@@ -70,11 +67,8 @@ setup_alpine() {
msg_ok "Installed Docker"
DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_github_release "docker/compose" false)
if [[ -n "${var_docker_compose:-}" ]]; then
prompt="$var_docker_compose"
else
read -r -p "${TAB3}Would you like to add Docker Compose? <y/N> " prompt
fi
prompt="${var_docker_compose:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Docker Compose? <y/N> " prompt || true
if [[ "${prompt,,}" =~ ^(y|yes|true)$ ]]; then
msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
@@ -83,11 +77,8 @@ setup_alpine() {
chmod +x "$DOCKER_CONFIG"/cli-plugins/docker-compose
msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
fi
if [[ -n "${var_docker_socket:-}" ]]; then
prompt="$var_docker_socket"
else
read -r -p "${TAB3}Would you like to expose the Docker TCP socket? <y/N> " prompt
fi
prompt="${var_docker_socket:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to expose the Docker TCP socket? <y/N> " prompt || true
case "${prompt,,}" in
y | yes | a | all) socket="tcp://0.0.0.0:2375" ;;
l | local) socket="tcp://127.0.0.1:2375" ;;
+1
View File
@@ -21,6 +21,7 @@ fetch_and_deploy_gh_release "donetick" "donetick/donetick" "prebuild" "latest" "
msg_info "Setup Donetick"
cd /opt/donetick
[[ -f config/selfhosted.yaml ]] || cp config/selfhosted.yaml.example config/selfhosted.yaml
TOKEN=$(openssl rand -hex 16)
sed -i -e "s/change_this_to_a_secure_random_string_32_characters_long/${TOKEN}/g" config/selfhosted.yaml
msg_ok "Setup Donetick"
+3 -2
View File
@@ -26,8 +26,9 @@ $STD apt install -y \
nginx
msg_ok "Installed Dependencies"
var_project_name="default"
read -r -p "${TAB3}Type the assembly name of the project: " var_project_name
var_project_name="${var_project_name:-}"
[[ -n "$var_project_name" ]] || read -r -p "${TAB3}Type the assembly name of the project: " var_project_name || true
[[ -n "$var_project_name" ]] || { msg_error "No assembly name given; set var_project_name or answer the prompt"; exit 64; }
msg_info "Setting up FTP Server"
useradd ftpuser
+66
View File
@@ -0,0 +1,66 @@
#!/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/henriquesebastiao/downtify
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
setup_ffmpeg
PYTHON_VERSION="3.14" setup_uv
NODE_VERSION="26" setup_nodejs
# yt-dlp solves YouTube's JavaScript challenges with Deno
fetch_and_deploy_gh_release "deno" "denoland/deno" "prebuild" "latest" "/usr/local/bin" "deno-$(arch_resolve "x86_64" "aarch64")-unknown-linux-gnu.zip"
fetch_and_deploy_gh_release "downtify" "henriquesebastiao/downtify" "tarball"
msg_info "Building Downtify"
cd /opt/downtify/frontend
$STD npm ci
$STD npm run build
rm -rf /opt/downtify/frontend/node_modules
cd /opt/downtify
# pyproject.toml sets [tool.uv] upgrade = true, so --locked fails whenever PyPI has anything newer than uv.lock
$STD uv sync --frozen --no-dev --python 3.14
msg_ok "Built Downtify"
msg_info "Configuring Downtify"
mkdir -p /opt/downtify_data/{data,downloads}
cat <<EOF >/opt/downtify_data/.env
DATABASE_DIR=/opt/downtify_data/data
DOWNLOAD_DIR=/opt/downtify_data/downloads
EOF
msg_ok "Configured Downtify"
msg_info "Creating Downtify Service"
cat <<EOF >/etc/systemd/system/downtify.service
[Unit]
Description=Downtify
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/downtify
EnvironmentFile=/opt/downtify_data/.env
Environment=WEB_GUI_LOCATION=/opt/downtify/frontend/dist
ExecStart=/opt/downtify/.venv/bin/python /opt/downtify/main.py web
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now downtify
msg_ok "Created Downtify Service"
motd_ssh
customize
cleanup_lxc
+1
View File
@@ -44,6 +44,7 @@ User=root
WorkingDirectory=/opt/droppedneedle/backend
Environment=ROOT_APP_DIR=/opt/droppedneedle/backend
Environment=PORT=8688
Environment=COMMIT_TAG=v$(<~/.droppedneedle)
# Environment=SLSKD_DOWNLOADS_PATH=<path-to-slskd-downloads>
ExecStart=/opt/droppedneedle/venv/bin/python -m maintenance.automatic_upgrade --start-target
Restart=on-failure
+3 -1
View File
@@ -23,7 +23,9 @@ NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
echo "${TAB3}It is important to choose the name for your server before you install Synapse, because it cannot be changed later."
echo "${TAB3}The server name determines the “domain” part of user-ids for users on your server: these will all be of the format @user:my.domain.name. It also determines how other matrix servers will reach yours for federation."
read -p "${TAB3}Please enter the name for your server: " servername
servername="${var_elementsynapse_server_name:-}"
[[ -n "$servername" ]] || read -r -p "${TAB3}Please enter the name for your server: " servername || true
[[ -n "$servername" ]] || { msg_error "No server name given; set var_elementsynapse_server_name or answer the prompt"; exit 64; }
msg_info "Installing Element Synapse"
setup_deb822_repo "matrix-org" \
+1 -1
View File
@@ -39,7 +39,7 @@ echo "$LATEST_VERSION" >~/.emqx
msg_ok "Installed EMQX"
prompt="${var_emqx_disable_mq:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to disable the EMQX MQ feature? (reduces disk/CPU usage) <y/N> " prompt
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to disable the EMQX MQ feature? (reduces disk/CPU usage) <y/N> " prompt || true
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Disabling EMQX MQ feature"
mkdir -p /etc/emqx
+5 -3
View File
@@ -45,7 +45,8 @@ $STD ln -svf /usr/bin/ffmpeg /usr/local/bin/ffmpeg
$STD ln -svf /usr/bin/ffprobe /usr/local/bin/ffprobe
$STD rm -rf /opt/fileflows/Server/runtimes/win-*
read -r -p "${TAB3}Do you want to install FileFlows Server or Agent? (S/A): " install_server
install_server="${var_fileflows_mode:-}"
[[ -n "$install_server" ]] || read -r -p "${TAB3}Do you want to install FileFlows Server or Agent? (S/A): " install_server || true
if [[ "$install_server" =~ ^[Ss]$ ]]; then
msg_info "Installing FileFlows Server"
@@ -54,9 +55,10 @@ if [[ "$install_server" =~ ^[Ss]$ ]]; then
systemctl enable -q --now fileflows
msg_ok "Installed FileFlows Server"
else
read -r -p "${TAB3}Enter FileFlows Server URL (e.g. http://192.168.1.10:19200): " server_url
server_url="${var_fileflows_server_url:-}"
[[ -n "$server_url" ]] || read -r -p "${TAB3}Enter FileFlows Server URL (e.g. http://192.168.1.10:19200): " server_url || true
while [[ -z "${server_url// /}" ]]; do
read -r -p "${TAB3}Enter FileFlows Server URL (e.g. http://192.168.1.10:19200): " server_url
read -r -p "${TAB3}Enter FileFlows Server URL (e.g. http://192.168.1.10:19200): " server_url || { msg_error "No FileFlows Server URL given; set var_fileflows_server_url or answer the prompt"; exit 64; }
done
msg_info "Installing FileFlows Agent"
cd /opt/fileflows/Agent
+1
View File
@@ -48,6 +48,7 @@ RestartSec=5
Type=simple
Environment="LOG_LEVEL=info"
Environment="CAPTCHA_SOLVER=none"
Environment="LANG=en-US"
WorkingDirectory=/opt/flaresolverr
ExecStart=/opt/flaresolverr/flaresolverr
TimeoutStopSec=30
+4 -4
View File
@@ -15,12 +15,12 @@ update_os
setup_yq
if [[ -z "${var_forgejo_instance:-}" ]]; then
read -r -p "${TAB3}Forgejo Instance URL (e.g. https://codeberg.org): " var_forgejo_instance
read -r -p "${TAB3}Forgejo Instance URL (e.g. https://codeberg.org): " var_forgejo_instance || true
var_forgejo_instance="${var_forgejo_instance:-https://codeberg.org}"
fi
if [[ -z "${var_forgejo_runner_uuid:-}" ]]; then
read -r -p "${TAB3}Forgejo Runner UUID: " var_forgejo_runner_uuid
read -r -p "${TAB3}Forgejo Runner UUID: " var_forgejo_runner_uuid || true
fi
if [[ -z "${var_forgejo_runner_uuid:-}" ]]; then
@@ -29,7 +29,7 @@ if [[ -z "${var_forgejo_runner_uuid:-}" ]]; then
fi
if [[ -z "${var_forgejo_runner_token:-}" ]]; then
read -r -p "${TAB3}Forgejo Runner Token: " var_forgejo_runner_token
read -r -p "${TAB3}Forgejo Runner Token: " var_forgejo_runner_token || true
fi
if [[ -z "${var_forgejo_runner_token:-}" ]]; then
@@ -39,7 +39,7 @@ fi
DEFAULT_RUNNER_LABELS="linux-amd64:docker://node:22-bookworm"
if [[ -z "${var_runner_labels:-}" ]]; then
read -r -p "${TAB3}Additional runner labels (comma-separated, or leave blank for default only): " var_runner_labels
read -r -p "${TAB3}Additional runner labels (comma-separated, or leave blank for default only): " var_runner_labels || true
fi
if [[ -n "${var_runner_labels:-}" ]]; then
RUNNER_LABELS="${DEFAULT_RUNNER_LABELS},${var_runner_labels}"
+10 -6
View File
@@ -19,17 +19,15 @@ $STD apt install -y \
nginx
msg_ok "Installed Dependencies"
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
PG_VERSION="18" PG_MODULES="postgis" setup_postgresql
PG_DB_NAME="geopulse" PG_DB_USER="geopulse" PG_DB_EXTENSIONS="postgis,postgis_topology" setup_postgresql_db
msg_info "Generating Security Keys"
mkdir -p /opt/geopulse/{backend,keys}
mkdir -p /etc/geopulse /var/www/geopulse /var/lib/geopulse/dumps
mkdir -p /var/log/geopulse/{backend,nginx}
openssl genpkey -algorithm RSA -out /opt/geopulse/keys/jwt-private-key.pem 2>/dev/null
openssl rsa -pubout -in /opt/geopulse/keys/jwt-private-key.pem -out /opt/geopulse/keys/jwt-public-key.pem 2>/dev/null
openssl rand -base64 32 >/opt/geopulse/keys/ai-encryption-key.txt
chmod 640 /opt/geopulse/keys/jwt-private-key.pem /opt/geopulse/keys/jwt-public-key.pem /opt/geopulse/keys/ai-encryption-key.txt
chmod 640 /opt/geopulse/keys/ai-encryption-key.txt
msg_ok "Generated Security Keys"
if [[ "$(uname -m)" == "aarch64" ]]; then
@@ -62,8 +60,6 @@ GEOPULSE_POSTGRES_PORT=5432
GEOPULSE_POSTGRES_DB=${PG_DB_NAME}
GEOPULSE_POSTGRES_USERNAME=${PG_DB_USER}
GEOPULSE_POSTGRES_PASSWORD=${PG_DB_PASS}
GEOPULSE_JWT_PRIVATE_KEY_LOCATION=file:/opt/geopulse/keys/jwt-private-key.pem
GEOPULSE_JWT_PUBLIC_KEY_LOCATION=file:/opt/geopulse/keys/jwt-public-key.pem
GEOPULSE_AI_ENCRYPTION_KEY_LOCATION=file:/opt/geopulse/keys/ai-encryption-key.txt
QUARKUS_LOG_FILE_ENABLE=true
QUARKUS_LOG_FILE_PATH=/var/log/geopulse/backend/geopulse.log
@@ -128,6 +124,14 @@ server {
add_header Cache-Control "public, max-age=31536000";
}
location ~* ^/(?!osm/).*\.mjs$ {
types {
application/javascript mjs;
}
expires 1y;
add_header Cache-Control "public, max-age=31536000";
}
location ^~ /osm/tiles/ {
resolver 8.8.8.8 valid=300s;
resolver_timeout 10s;
+4 -2
View File
@@ -51,8 +51,10 @@ echo -e ""
msg_custom "🪙" "$YW" "CoinGecko API keys are optional but provide better cryptocurrency data."
msg_custom "🪙" "$YW" "You can skip this and add them later by editing /opt/ghostfolio/.env"
echo -e ""
read -rp "${TAB3}CoinGecko Demo API key (press Enter to skip): " COINGECKO_DEMO_KEY
read -rp "${TAB3}CoinGecko Pro API key (press Enter to skip): " COINGECKO_PRO_KEY
COINGECKO_DEMO_KEY="${var_ghostfolio_coingecko_demo_key:-}"
[[ -n "$COINGECKO_DEMO_KEY" ]] || read -rp "${TAB3}CoinGecko Demo API key (press Enter to skip): " COINGECKO_DEMO_KEY || true
COINGECKO_PRO_KEY="${var_ghostfolio_coingecko_pro_key:-}"
[[ -n "$COINGECKO_PRO_KEY" ]] || read -rp "${TAB3}CoinGecko Pro API key (press Enter to skip): " COINGECKO_PRO_KEY || true
msg_info "Setting up Environment"
cat <<EOF >/opt/ghostfolio/.env
+1 -1
View File
@@ -27,7 +27,7 @@ ln -sf /usr/sbin/openvpn /usr/sbin/openvpn2.6
msg_ok "Configured iptables"
fetch_and_deploy_gh_release "gluetun" "qdm12/gluetun" "tarball"
fetch_and_deploy_gh_release "gluetun" "passteque/gluetun" "tarball"
GO_VERSION="$(grep -m1 '^go ' /opt/gluetun/go.mod | awk '{print $2}')" setup_go
msg_info "Building Gluetun"
+1 -1
View File
@@ -16,7 +16,7 @@ update_os
fetch_and_deploy_gh_release "headscale" "juanfont/headscale" "binary"
prompt="${var_headscale_admin:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add headscale-admin UI? <y/N> " prompt
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add headscale-admin UI? <y/N> " prompt || true
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
fetch_and_deploy_gh_release "headscale-admin" "GoodiesHQ/headscale-admin" "prebuild" "latest" "/opt/headscale-admin" "admin.zip"
+2 -1
View File
@@ -36,7 +36,8 @@ msg_ok "Configured Service Environment"
confirm_external_installer "https://hermes-agent.nousresearch.com/" "https://hermes-agent.nousresearch.com/install.sh"
msg_info "Installing Hermes Agent"
curl -fsSL https://hermes-agent.nousresearch.com/install.sh -o /tmp/hermes-install.sh
curl_with_retry "https://hermes-agent.nousresearch.com/install.sh" /tmp/hermes-install.sh ||
curl_with_retry "https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh" /tmp/hermes-install.sh
$STD setsid --wait bash -c '
set -a; source /etc/default/hermes; set +a
export npm_config_yes=true
+7 -11
View File
@@ -13,7 +13,7 @@ setting_up_container
network_check
update_os
RELEASE="v3.3.0"
RELEASE="v3.3.5"
if lscpu | grep -q 'GenuineIntel'; then
echo ""
echo ""
@@ -25,7 +25,7 @@ if lscpu | grep -q 'GenuineIntel'; then
echo " 2) **NEW** Intel OpenVINO CPU or iGPU"
echo ""
read -r -p "${TAB3}Select machine-learning type [1]: " ML_TYPE
read -r -p "${TAB3}Select machine-learning type [1]: " ML_TYPE || true
ML_TYPE="${ML_TYPE:-1}"
if [[ "$ML_TYPE" == "2" ]]; then
touch ~/.openvino
@@ -110,7 +110,7 @@ setup_deb822_repo \
"https://repo.jellyfin.org/jellyfin_team.gpg.key" \
"https://repo.jellyfin.org/debian" \
"$(get_os_info codename)"
$STD apt install -y jellyfin-ffmpeg7
install_packages_with_retry jellyfin-ffmpeg7
ln -sf /usr/lib/jellyfin-ffmpeg/ffmpeg /usr/bin/ffmpeg
ln -sf /usr/lib/jellyfin-ffmpeg/ffprobe /usr/bin/ffprobe
@@ -124,12 +124,9 @@ if [[ "$CTTYPE" == "0" && -d /dev/dri ]]; then
fi
msg_ok "Dependencies Installed"
msg_info "Installing Mise"
curl -fSs https://mise.jdx.dev/gpg-key.pub | tee /etc/apt/keyrings/mise-archive-keyring.pub 1>/dev/null
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=$(arch_resolve)] https://mise.jdx.dev/deb stable main" >/etc/apt/sources.list.d/mise.list
apt_update_safe
$STD apt install -y mise
msg_ok "Installed Mise"
MISE_ARCH="x64"
[[ "$(arch_resolve)" == "arm64" ]] && MISE_ARCH="arm64"
fetch_and_deploy_gh_release "mise" "jdx/mise" "singlefile" "latest" "/usr/local/bin" "mise-v*-linux-${MISE_ARCH}"
msg_info "Configuring Debian Testing Repo"
if [[ -f /etc/apt/sources.list.d/debian.sources ]]; then
@@ -268,8 +265,7 @@ msg_ok "(2/6) Compiled jpegli"
msg_info "(3/6) Compiling libheif"
SOURCE=${SOURCE_DIR}/libheif
LIBHEIF_REVISION="ac1cb05c39008f01525c991ff8b88f84ddf70fd2"
# : "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
LIBHEIF_REVISION="$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)"
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBHEIF_REVISION"
+3 -2
View File
@@ -21,7 +21,8 @@ setup_deb822_repo \
"stable"
msg_ok "Set up InfluxDB Repository"
read -r -p "${TAB3}Which version of InfluxDB to install? (1, 2 or 3) " prompt
prompt="${var_influxdb_version:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Which version of InfluxDB to install? (1, 2 or 3) " prompt || true
if [[ $prompt == "3" ]]; then
INFLUX="3"
elif [[ $prompt == "2" ]]; then
@@ -51,7 +52,7 @@ fi
msg_ok "Installed InfluxDB"
prompt="${var_influxdb_telegraf:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Telegraf? <y/N> " prompt
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Telegraf? <y/N> " prompt || true
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Installing Telegraf"
$STD apt install -y telegraf
+6 -4
View File
@@ -16,15 +16,17 @@ update_os
msg_info "Setting up InvenTree Repository"
setup_deb822_repo \
"inventree" \
"https://dl.packager.io/srv/inventree/InvenTree/key" \
"https://dl.packager.io/srv/deb/inventree/InvenTree/stable/$(get_os_info id)" \
"https://go.packager.io/srv/deb/inventree/InvenTree/gpg-key.asc" \
"https://go.packager.io/srv/deb/inventree/InvenTree/stable/$(get_os_info id)" \
"$(get_os_info version)" \
"main"
msg_ok "Set up InvenTree Repository"
msg_info "Installing InvenTree (Patience)"
export SETUP_NO_CALLS=true
$STD apt install -y inventree
# The package's postinst walks parent PIDs until it reaches PID 1; under pct exec the chain ends at 0
# and since 1.6.0 that loops forever, so apt runs as a child of systemd
$STD systemd-run --wait --pipe --quiet --collect --setenv=SETUP_NO_CALLS=true --setenv=DEBIAN_FRONTEND=noninteractive \
apt-get install -y inventree
msg_ok "Installed InvenTree"
msg_info "Configuring InvenTree"
+3
View File
@@ -52,6 +52,9 @@ chown -R www-data:www-data /opt/invoiceshelf
chmod -R 775 storage bootstrap/cache
$STD php artisan migrate --force
$STD php artisan storage:link
cat <<'EOF' >/etc/cron.d/invoiceshelf
* * * * * www-data cd /opt/invoiceshelf && php artisan schedule:run >> /dev/null 2>&1
EOF
msg_ok "Set up InvoiceShelf"
msg_info "Configuring Caddy"
+1 -1
View File
@@ -33,7 +33,7 @@ fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep" "tarball"
cd /opt/karakeep
# Node 24.19.x crashes better-sqlite3 on cleanup (karakeep-app/karakeep#2989); stay on 22 LTS until upstream reverts.
MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
NODE_VERSION="24" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
msg_info "Installing external JavaScript Extension for yt-dlp"
$STD pip install -U yt-dlp-ejs --break-system-packages
+4 -4
View File
@@ -37,10 +37,10 @@ fi
msg_ok "Installed Docker"
msg_info "Detecting latest Kasm Workspaces release"
KASM_URL=$(curl -s https://kasm.com/downloads \
KASM_URL=$(curl -s --max-time 30 https://kasm.com/downloads \
| grep -oP 'https://kasm-static-content\.s3\.amazonaws\.com/kasm_release_\d+\.\d+\.\d+-latest\.tar\.gz' \
| head -1)
KASM_VERSION=$(echo "$KASM_URL" | grep -oP '\d+\.\d+\.\d+(?=-latest)')
| head -1 || true)
KASM_VERSION=$(echo "$KASM_URL" | grep -oP '\d+\.\d+\.\d+(?=-latest)' || true)
# Fallback to predefined version if online lookup failed.
if [[ -z "$KASM_VERSION" ]] || [[ -z "$KASM_URL" ]]; then
@@ -63,7 +63,7 @@ curl_download "/opt/kasm_release_${KASM_VERSION}.tar.gz" "$KASM_URL"
cd /opt
tar -xf "kasm_release_${KASM_VERSION}.tar.gz"
chmod +x /opt/kasm_release/install.sh
printf 'y\ny\ny\n4\n' | bash /opt/kasm_release/install.sh --ignore-dep-failures >~/kasm-install.output 2>&1
bash /opt/kasm_release/install.sh --accept-eula --no-swap-check --no-check-disk --ignore-dep-failures >~/kasm-install.output 2>&1
awk '
/^Kasm UI Login Credentials$/ {capture=1}
capture {print}
+9 -3
View File
@@ -28,9 +28,15 @@ mkdir -p config/assets
cp config/config.yml.template config/config.yml
msg_ok "Setup Kometa"
read -r -p "${TAB3}Enter your TMDb API key: " TMDBKEY
read -r -p "${TAB3}Enter your Plex URL: " PLEXURL
read -r -p "${TAB3}Enter your Plex token: " PLEXTOKEN
TMDBKEY="${var_kometa_tmdb_key:-}"
[[ -n "$TMDBKEY" ]] || read -r -p "${TAB3}Enter your TMDb API key: " TMDBKEY || true
[[ -n "$TMDBKEY" ]] || { msg_error "No TMDb API key given; set var_kometa_tmdb_key or answer the prompt"; exit 64; }
PLEXURL="${var_kometa_plex_url:-}"
[[ -n "$PLEXURL" ]] || read -r -p "${TAB3}Enter your Plex URL: " PLEXURL || true
[[ -n "$PLEXURL" ]] || { msg_error "No Plex URL given; set var_kometa_plex_url or answer the prompt"; exit 64; }
PLEXTOKEN="${var_kometa_plex_token:-}"
[[ -n "$PLEXTOKEN" ]] || read -r -p "${TAB3}Enter your Plex token: " PLEXTOKEN || true
[[ -n "$PLEXTOKEN" ]] || { msg_error "No Plex token given; set var_kometa_plex_token or answer the prompt"; exit 64; }
sed -i '/^plex:/,/^[^ ]/{s| url:.*| url: '"$PLEXURL"'|}' /opt/kometa/config/config.yml
sed -i '/^plex:/,/^[^ ]/{s| token:.*| token: '"$PLEXTOKEN"'|}' /opt/kometa/config/config.yml
sed -i '/^tmdb:/,/^[^ ]/{s| apikey:.*| apikey: '"$TMDBKEY"'|}' /opt/kometa/config/config.yml
+5 -2
View File
@@ -15,7 +15,8 @@ update_os
echo "${TAB3}How would you like to handle SSL termination?"
echo "${TAB3}[i]-Internal (self-signed SSL Certificate) [e]-External (use your own reverse proxy)"
read -rp "${TAB3}Enter your choice <i/e> (default: i): " ssl_choice
ssl_choice="${var_kutt_ssl:-}"
[[ -n "$ssl_choice" ]] || read -rp "${TAB3}Enter your choice <i/e> (default: i): " ssl_choice || true
ssl_choice=${ssl_choice:-i}
case "${ssl_choice,,}" in
i)
@@ -32,7 +33,9 @@ EOF
msg_ok "Configured Caddy"
;;
e)
read -r -p "${TAB3}Enter the hostname you want to use for Kutt (eg. kutt.example.com): " custom_host
custom_host="${var_kutt_hostname:-}"
[[ -n "$custom_host" ]] || read -r -p "${TAB3}Enter the hostname you want to use for Kutt (eg. kutt.example.com): " custom_host || true
[[ -n "$custom_host" ]] || { msg_error "No hostname given; set var_kutt_hostname or answer the prompt"; exit 64; }
if [[ "$custom_host" ]]; then
DEFAULT_HOST="$custom_host"
fi
+3 -3
View File
@@ -29,12 +29,12 @@ rm -f /tmp/LanguageTool-stable.zip
msg_ok "Setup LanguageTool"
ngram_dir=""
lang_code=""
lang_code="${var_languagetool_ngram_lang:-}"
max_attempts=3
attempt=0
while [[ $attempt -lt $max_attempts ]]; do
read -r -p "${TAB3}Enter language code (en, de, es, fr, nl) to download ngrams or press ENTER to skip: " lang_code
[[ -n "$lang_code" ]] || read -r -p "${TAB3}Enter language code (en, de, es, fr, nl) to download ngrams or press ENTER to skip: " lang_code || lang_code=""
if [[ -z "$lang_code" ]]; then
break
@@ -43,11 +43,11 @@ while [[ $attempt -lt $max_attempts ]]; do
if [[ "$lang_code" =~ [[:space:]] ]]; then
((attempt++))
remaining=$((max_attempts - attempt))
lang_code=""
if [[ $remaining -gt 0 ]]; then
msg_error "Please enter only ONE language code. You have $remaining attempt(s) remaining."
else
msg_error "Maximum attempts reached. Continuing without ngrams."
lang_code=""
fi
continue
fi
+1 -1
View File
@@ -25,7 +25,7 @@ RUST_CRATES="monolith" setup_rust
PG_DB_NAME="linkwardendb" PG_DB_USER="linkwarden" setup_postgresql_db
prompt="${var_linkwarden_adminer:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt || true
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
setup_adminer
fi
+50
View File
@@ -0,0 +1,50 @@
#!/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/Listenarrs/Listenarr
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 libicu-dev
msg_ok "Installed Dependencies"
GH_INCLUDE_PRERELEASE=1 fetch_and_deploy_gh_release "listenarr" "Listenarrs/Listenarr" "prebuild" "latest" "/opt/listenarr" "listenarr-*-linux-x64.zip"
msg_info "Configuring Listenarr"
mkdir -p /opt/listenarr_data
ln -s /opt/listenarr/wwwroot /opt/listenarr_data/wwwroot
msg_ok "Configured Listenarr"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/listenarr.service
[Unit]
Description=Listenarr
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/listenarr
Environment=LISTENARR_CONTENT_ROOT=/opt/listenarr_data
ExecStart=/opt/listenarr/Listenarr.Api
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now listenarr
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+6
View File
@@ -39,6 +39,12 @@ LOCALAI_MODELS_PATH=/opt/localai_data/models
LOCALAI_BACKENDS_PATH=/opt/localai_data/backends
LOCALAI_LOG_LEVEL=info
EOF
# LocalAI picks the backend variant from the GPU it sees in sysfs, which is the
# host's card even when no driver was installed in here, and a CUDA/ROCm/SYCL
# backend then never starts. Pin the CPU variants unless a runtime is present.
if ! ldconfig -p 2>/dev/null | grep -qE 'libcuda[.]so|libamdhip64[.]so|libze_intel_gpu[.]so|libze_loader[.]so'; then
echo "LOCALAI_FORCE_META_BACKEND_CAPABILITY=default" >>/opt/localai.env
fi
# LocalAI refuses to start on a wildcard bind with nothing to identify callers,
# and binding the wildcard is what makes the container reachable at all.
if [[ "$var_auth" == "yes" ]]; then
+2 -2
View File
@@ -22,7 +22,7 @@ setup_deb_based() {
msg_ok "Setup MariaDB"
prompt="${var_mariadb_phpmyadmin:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt || true
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing phpMyAdmin"
$STD apt install -y \
@@ -60,7 +60,7 @@ setup_alpine() {
msg_ok "MariaDB Configured"
prompt="${var_mariadb_adminer:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to install Adminer with lighttpd? <y/N>: " prompt
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to install Adminer with lighttpd? <y/N>: " prompt || true
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Adminer and dependencies"
$STD apk add --no-cache \
+8
View File
@@ -98,6 +98,14 @@ PRODUCTION=true
HOST=0.0.0.0
PORT=9000
BASE_URL=http://${LOCAL_IP}:9000
# Reverse proxy auth (Mealie v3.29.0+). Disabled by default.
# To enable: set REVERSE_PROXY_AUTH_ENABLED=true, set a secret, then restart mealie.
# REVERSE_PROXY_AUTH_ENABLED=false
# REVERSE_PROXY_AUTH_HEADER=X-Forwarded-User
# REVERSE_PROXY_AUTH_SIGNUP_ENABLED=false
# REVERSE_PROXY_AUTH_SECRET=
# REVERSE_PROXY_AUTH_SECRET_HEADER=X-Mealie-Reverse-Proxy-Secret
EOF
msg_ok "Wrote Environment File"
+3 -1
View File
@@ -13,7 +13,9 @@ setting_up_container
network_check
update_os
read -r -p "${TAB3}Enter the email address of your first admin user: " admin_email
admin_email="${var_mediamanager_admin_email:-}"
[[ -n "$admin_email" ]] || read -r -p "${TAB3}Enter the email address of your first admin user: " admin_email || true
[[ -n "$admin_email" ]] || { msg_error "No admin e-mail given; set var_mediamanager_admin_email or answer the prompt"; exit 64; }
if [[ "$admin_email" ]]; then
EMAIL="$admin_email"
fi
+1 -1
View File
@@ -16,7 +16,7 @@ update_os
MEILISEARCH_BIND="0.0.0.0:7700" setup_meilisearch
prompt="${var_meilisearch_ui:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Do you want add meilisearch-ui? [y/n]: " prompt
[[ -n "$prompt" ]] || read -r -p "${TAB3}Do you want add meilisearch-ui? [y/n]: " prompt || true
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
fetch_and_deploy_gh_release "meilisearch-ui" "riccox/meilisearch-ui" "tarball"
+3 -2
View File
@@ -16,8 +16,9 @@ update_os
if [[ "$(arch_resolve)" == "arm64" ]]; then
MONGO_VERSION="8.0" setup_mongodb
else
read -p "${TAB3}Do you want to install MongoDB 8.0 instead of 7.0? [y/N]: " install_mongodb_8
if [[ "$install_mongodb_8" =~ ^[Yy]$ ]]; then
install_mongodb_8="${var_mongodb_8:-}"
[[ -n "$install_mongodb_8" ]] || read -r -p "${TAB3}Do you want to install MongoDB 8.0 instead of 7.0? [y/N]: " install_mongodb_8 || true
if [[ "$install_mongodb_8" =~ ^[Yy]([Ee][Ss])?$ ]]; then
MONGO_VERSION="8.0" setup_mongodb
else
MONGO_VERSION="7.0" setup_mongodb
+4 -2
View File
@@ -21,7 +21,8 @@ msg_ok "Installed Dependencies"
RELEASE_REPO="mysql-8.0"
RELEASE_AUTH="mysql_native_password"
read -r -p "${TAB3}Would you like to install the MySQL 8.4 LTS release instead of MySQL 8.0 (bug fix track; EOL April-2026)? <y/N> " prompt
prompt="${var_mysql_lts:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to install the MySQL 8.4 LTS release instead of MySQL 8.0 (bug fix track; EOL April-2026)? <y/N> " prompt || true
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
RELEASE_REPO="mysql-8.4-lts"
RELEASE_AUTH="caching_sha2_password"
@@ -61,7 +62,8 @@ echo -e "MySQL user: root" >>~/mysql.creds
echo -e "MySQL password: $ADMIN_PASS" >>~/mysql.creds
msg_ok "MySQL Server configured"
read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt
prompt="${var_mysql_phpmyadmin:-}"
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add PhpMyAdmin? <y/N> " prompt || true
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/phpmyadmin.sh)"
fi
+10 -5
View File
@@ -36,7 +36,8 @@ echo " 1) NetBird Managed (default) - Use NetBird's managed service"
echo " 2) Self-Hosted - Use your own NetBird management server"
echo ""
read -r -p "${TAB3}Select deployment type [1]: " DEPLOYMENT_TYPE
DEPLOYMENT_TYPE="${var_netbird_deployment:-}"
[[ -n "$DEPLOYMENT_TYPE" ]] || read -r -p "${TAB3}Select deployment type [1]: " DEPLOYMENT_TYPE || true
DEPLOYMENT_TYPE="${DEPLOYMENT_TYPE:-1}"
NETBIRD_MGMT_URL=""
@@ -51,7 +52,8 @@ case "$DEPLOYMENT_TYPE" in
echo "Enter your NetBird management server URL."
echo "Example: https://management.example.com"
echo ""
read -r -p "Management URL: " NETBIRD_MGMT_URL
NETBIRD_MGMT_URL="${var_netbird_mgmt_url:-}"
[[ -n "$NETBIRD_MGMT_URL" ]] || read -r -p "Management URL: " NETBIRD_MGMT_URL || true
if [[ -z "$NETBIRD_MGMT_URL" ]]; then
msg_warn "No management URL provided. Run 'netbird up --management-url <url>' to connect."
@@ -81,7 +83,8 @@ else
fi
echo ""
read -r -p "Select authentication method [1]: " AUTH_METHOD
AUTH_METHOD="${var_netbird_auth:-}"
[[ -n "$AUTH_METHOD" ]] || read -r -p "Select authentication method [1]: " AUTH_METHOD || true
AUTH_METHOD="${AUTH_METHOD:-1}"
if [[ "$DEPLOYMENT_TYPE" == "1" ]]; then
@@ -90,7 +93,8 @@ if [[ "$DEPLOYMENT_TYPE" == "1" ]]; then
echo ""
echo "Enter your NetBird setup key from the NetBird dashboard."
echo ""
read -r -p "Setup key: " NETBIRD_SETUP_KEY
NETBIRD_SETUP_KEY="${var_netbird_setup_key:-}"
[[ -n "$NETBIRD_SETUP_KEY" ]] || read -r -p "Setup key: " NETBIRD_SETUP_KEY || true
echo ""
if [[ -z "$NETBIRD_SETUP_KEY" ]]; then
@@ -136,7 +140,8 @@ else
echo ""
echo "Enter your NetBird setup key from the NetBird dashboard."
echo ""
read -r -p "Setup key: " NETBIRD_SETUP_KEY
NETBIRD_SETUP_KEY="${var_netbird_setup_key:-}"
[[ -n "$NETBIRD_SETUP_KEY" ]] || read -r -p "Setup key: " NETBIRD_SETUP_KEY || true
echo ""
if [[ -z "$NETBIRD_SETUP_KEY" ]]; then
+59
View File
@@ -0,0 +1,59 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/autobrr/netronome
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 \
iperf3 \
iputils-ping \
mtr-tiny \
traceroute
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "librespeed-cli" "librespeed/speedtest-cli" "prebuild" "latest" "/opt/librespeed-cli" "librespeed-cli_*_linux_$(arch_resolve).tar.gz"
ln -sf /opt/librespeed-cli/librespeed-cli /usr/local/bin/librespeed-cli
fetch_and_deploy_gh_release "netronome" "autobrr/netronome" "binary" "latest" "" "netronome_*_linux_$(arch_resolve).deb" "v"
msg_info "Configuring Netronome"
mkdir -p /opt/netronome_data /root/.config
$STD netronome generate-config --config /opt/netronome_data/config.toml
sed -i 's/^host = "127.0.0.1"$/host = "0.0.0.0"/' /opt/netronome_data/config.toml
chmod 600 /opt/netronome_data/config.toml
ln -s /opt/netronome_data /root/.config/netronome
msg_ok "Configured Netronome"
msg_info "Creating Netronome Service"
cat <<EOF >/etc/systemd/system/netronome.service
[Unit]
Description=Netronome
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/netronome_data
ExecStart=/usr/bin/netronome serve --config /opt/netronome_data/config.toml
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now netronome
msg_ok "Created Netronome Service"
motd_ssh
customize
cleanup_lxc
+7 -8
View File
@@ -16,16 +16,15 @@ update_os
fetch_and_deploy_gh_release "newt" "fosrl/newt" "singlefile" "latest" "/opt/newt" "newt_linux_$(arch_resolve)"
ln -sf /opt/newt/newt /usr/local/bin/newt
if [[ -z "${NEWT_ID:-}" ]]; then
read -rp "Newt ID (from your Pangolin dashboard): " NEWT_ID
fi
if [[ -z "${NEWT_SECRET:-}" ]]; then
read -rsp "Newt Secret: " NEWT_SECRET
NEWT_ID="${NEWT_ID:-${var_newt_id:-}}"
[[ -n "$NEWT_ID" ]] || read -rp "Newt ID (from your Pangolin dashboard): " NEWT_ID || true
NEWT_SECRET="${NEWT_SECRET:-${var_newt_secret:-}}"
if [[ -z "$NEWT_SECRET" ]]; then
read -rsp "Newt Secret: " NEWT_SECRET || true
echo
fi
if [[ -z "${PANGOLIN_ENDPOINT:-}" ]]; then
read -rp "Pangolin endpoint (e.g. https://pangolin.example.com): " PANGOLIN_ENDPOINT
fi
PANGOLIN_ENDPOINT="${PANGOLIN_ENDPOINT:-${var_newt_endpoint:-}}"
[[ -n "$PANGOLIN_ENDPOINT" ]] || read -rp "Pangolin endpoint (e.g. https://pangolin.example.com): " PANGOLIN_ENDPOINT || true
if [[ -z "$NEWT_ID" || -z "$NEWT_SECRET" || -z "$PANGOLIN_ENDPOINT" ]]; then
msg_error "Newt ID, Secret and Endpoint are all required. Aborting."
+92
View File
@@ -0,0 +1,92 @@
#!/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/norish-recipes/norish
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 redis-server
msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql
PG_DB_NAME="norish" PG_DB_USER="norish" setup_postgresql_db
PYTHON_VERSION="3.14" setup_uv
fetch_and_deploy_gh_release "norish" "norish-recipes/norish" "tarball"
NODE_VERSION="22" NODE_MODULE="pnpm@$(jq -r '.packageManager | split("@")[1]' /opt/norish/package.json)" setup_nodejs
fetch_and_deploy_gh_release "obscura" "h4ckf0r0day/obscura" "prebuild" "v$(sed -n 's/^OBSCURA_VERSION=//p' /opt/norish/docker/obscura/pin.env)" "/opt/obscura" "obscura-$(arch_resolve "x86_64" "aarch64")-linux-stealth.tar.gz"
fetch_and_deploy_gh_release "yt-dlp" "yt-dlp/yt-dlp" "singlefile" "latest" "/usr/local/bin" "$(arch_resolve "yt-dlp_linux" "yt-dlp_linux_aarch64")"
msg_info "Building Norish"
cd /opt/norish
$STD pnpm install --frozen-lockfile --filter "@norish/web..." --filter norish
$STD uv sync --project /opt/norish/apps/parser-api --locked
NODE_ENV=production SKIP_ENV_VALIDATION=1 NEXT_TELEMETRY_DISABLED=1 $STD pnpm turbo run build --filter "@norish/web"
rm -rf /opt/norish/apps/web/.next/cache /opt/norish/apps/web/.next/standalone
msg_ok "Built Norish"
msg_info "Configuring Norish"
mkdir -p /opt/norish_data/uploads
cat <<EOF >/opt/norish_data/.env
NODE_ENV=production
NEXT_TELEMETRY_DISABLED=1
AUTH_URL=http://${LOCAL_IP}:3000
DATABASE_URL=postgresql://norish:${PG_DB_PASS}@localhost:5432/norish
MASTER_KEY=$(openssl rand -base64 32)
REDIS_URL=redis://127.0.0.1:6379
OBSCURA_ENDPOINT=ws://127.0.0.1:9222
UPLOADS_DIR=/opt/norish_data/uploads
YT_DLP_BIN_DIR=/usr/local/bin
EOF
chmod 600 /opt/norish_data/.env
msg_ok "Configured Norish"
msg_info "Creating Services"
cat <<EOF >/etc/systemd/system/obscura.service
[Unit]
Description=Obscura headless browser for Norish URL imports
After=network.target
[Service]
Type=simple
ExecStart=/opt/obscura/obscura serve --host 127.0.0.1 --port 9222 --stealth
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/norish.service
[Unit]
Description=Norish
After=network.target postgresql.service redis-server.service obscura.service
Requires=postgresql.service redis-server.service
Wants=obscura.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/norish
EnvironmentFile=/opt/norish_data/.env
ExecStart=/usr/bin/node /opt/norish/dist-server/index.mjs
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now obscura norish
msg_ok "Created Services"
motd_ssh
customize
cleanup_lxc
+6 -2
View File
@@ -38,12 +38,14 @@ curl -fsSL "https://raw.githubusercontent.com/ZoeyVid/NPMplus/refs/heads/develop
msg_ok "Fetched NPMplus"
attempts=0
TZ_INPUT="${var_npmplus_tz:-}"
while true; do
read -r -p "${TAB3}Enter your TZ Identifier (e.g., Europe/Berlin): " TZ_INPUT
[[ -n "$TZ_INPUT" ]] || read -r -p "${TAB3}Enter your TZ Identifier (e.g., Europe/Berlin): " TZ_INPUT || { msg_error "No TZ identifier given; set var_npmplus_tz or answer the prompt"; exit 64; }
if validate_tz "$TZ_INPUT"; then
break
fi
msg_error "Invalid timezone! Please enter a valid TZ identifier."
TZ_INPUT=""
attempts=$((attempts + 1))
if [[ "$attempts" -ge 3 ]]; then
@@ -52,7 +54,9 @@ while true; do
fi
done
read -r -p "${TAB3}Enter your ACME Email: " ACME_EMAIL_INPUT
ACME_EMAIL_INPUT="${var_npmplus_acme_email:-}"
[[ -n "$ACME_EMAIL_INPUT" ]] || read -r -p "${TAB3}Enter your ACME Email: " ACME_EMAIL_INPUT || true
[[ -n "$ACME_EMAIL_INPUT" ]] || { msg_error "No ACME e-mail given; set var_npmplus_acme_email or answer the prompt"; exit 64; }
yq -i "
.services.npmplus.environment |=
-4
View File
@@ -57,10 +57,6 @@ else
}
fi
msg_ok "Installed Intel® Level Zero"
msg_info "Installing Intel® oneAPI Base Toolkit (Patience)"
$STD apt install -y --no-install-recommends intel-basekit-2024.1
msg_ok "Installed Intel® oneAPI Base Toolkit"
fi
msg_info "Installing Ollama (Patience)"
+2 -2
View File
@@ -24,11 +24,11 @@ JAVA_VERSION="21" setup_java
msg_info "Installing OneDev"
RELEASE=$(get_latest_github_release "theonedev/onedev" false)
cd /opt
curl -fsSL "https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz" -o onedev-latest.tar.gz
curl -fsSL "https://code.onedev.io/onedev/server/~sites/public/onedev-latest.tar.gz" -o onedev-latest.tar.gz
tar -xzf onedev-latest.tar.gz
mv /opt/onedev-latest /opt/onedev
$STD /opt/onedev/bin/server.sh install
systemctl start onedev
systemctl start onedev.server
rm -rf /opt/onedev-latest.tar.gz
echo "${RELEASE}" >~/.onedev
msg_ok "Installed OneDev"
+5 -1
View File
@@ -17,19 +17,23 @@ MAX_ATTEMPTS=3
servers=("opencloud" "collabora" "wopi")
attempt=0
for server in "${servers[@]}"; do
fqdn_var="var_opencloud_${server}_fqdn"
fqdn="${!fqdn_var:-}"
until ((attempt >= MAX_ATTEMPTS)); do
attempt=$((attempt + 1))
read -rp "${TAB3}Enter the FQDN of your ${server^} server (ATTEMPT $attempt/$MAX_ATTEMPTS) (eg $server.domain.tld): " fqdn
[[ -n "$fqdn" ]] || read -rp "${TAB3}Enter the FQDN of your ${server^} server (ATTEMPT $attempt/$MAX_ATTEMPTS) (eg $server.domain.tld): " fqdn || { msg_error "No ${server^} FQDN given; set ${fqdn_var} or answer the prompt"; exit 64; }
if [[ -z "$fqdn" ]]; then
msg_warn "Domain cannot be empty!"
elif [[ "$fqdn" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
msg_warn "IP address not allowed! Please use a FQDN"
fqdn=""
elif [[ "$fqdn" =~ ^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\.[a-zA-Z]{2,}$ ]]; then
export ${server^^}_FQDN="$fqdn"
attempt=0
break
else
msg_warn "Invalid domain format!"
fqdn=""
fi
done
if ((attempt >= MAX_ATTEMPTS)); then
+158
View File
@@ -0,0 +1,158 @@
#!/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/DuarteSantos8/openGym
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"
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "opengym" "DuarteSantos8/openGym" "tarball" "latest" "/opt/opengym" "" "v"
msg_info "Building openGym"
cd /opt/opengym/api
$STD npm ci --omit=dev --omit=optional
cd /opt/opengym/frontend
# Like upstream's web/Dockerfile: skips sharp's libvips download, which only draws the mobile app icons
$STD npm ci --ignore-scripts
$STD npm run build
rm -rf /opt/opengym/frontend/node_modules ~/.npm
msg_ok "Built openGym"
msg_info "Configuring openGym"
mkdir -p /opt/opengym_data
cat <<EOF >/opt/opengym_data/.env
PORT=3000
DATA_DIR=/opt/opengym_data
RP_NAME=openGym
# Passkeys need HTTPS on a hostname. Behind a reverse proxy set both to the address in the browser,
# e.g. RP_ID=gym.example.com and ORIGIN=https://gym.example.com, then: systemctl restart opengym
RP_ID=${LOCAL_IP}
ORIGIN=http://${LOCAL_IP}
PASSWORD_LOGIN=1
FIRST_USER_ADMIN=1
EOF
chmod 600 /opt/opengym_data/.env
msg_ok "Configured openGym"
msg_info "Creating openGym Service"
cat <<EOF >/etc/systemd/system/opengym.service
[Unit]
Description=openGym API
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/opengym/api
EnvironmentFile=/opt/opengym_data/.env
Environment=NODE_ENV=production
ExecStart=/usr/bin/node server.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now opengym
msg_ok "Created openGym Service"
msg_info "Configuring Nginx"
cat <<'EOF' >/etc/nginx/sites-available/opengym
server {
listen 80 default_server;
server_name _;
root /opt/opengym/frontend/dist;
index index.html;
absolute_redirect off;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "same-origin" always;
add_header Content-Security-Policy "frame-ancestors 'none'" always;
location ^~ /api/ {
client_max_body_size 5m;
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header CF-Connecting-IP "";
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
location ^~ /api/media/ {
client_max_body_size 48m;
proxy_request_buffering off;
proxy_buffering off;
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header CF-Connecting-IP "";
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
location / {
try_files $uri $uri/ @root;
}
location @root {
return 302 /$is_args$args;
}
location ~* \.(js|css|json|html)$ {
add_header Cache-Control "no-cache, must-revalidate";
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "same-origin" always;
add_header Content-Security-Policy "frame-ancestors 'none'" always;
}
location ^~ /exercise-media/ {
alias /opt/opengym/catalogue/media/;
add_header Cache-Control "public, max-age=2592000, immutable";
add_header Cross-Origin-Resource-Policy "same-origin" always;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "same-origin" always;
add_header Content-Security-Policy "frame-ancestors 'none'" always;
}
location ~* \.(png|jpg|jpeg|gif|ico|svg|woff|woff2|webp|avif|mp4)$ {
add_header Cache-Control "public, max-age=2592000, immutable";
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "same-origin" always;
add_header Content-Security-Policy "frame-ancestors 'none'" always;
}
gzip on;
gzip_types text/plain text/css application/json application/javascript image/svg+xml;
gzip_vary on;
gzip_min_length 1024;
}
EOF
nginx_enable_site "opengym"
msg_ok "Configured Nginx"
motd_ssh
customize
cleanup_lxc
Loaded 100 of 142 files, more files were not shown because too many files have changed in this diff. Show more