Compare commits

...

177 Commits

Author SHA1 Message Date
MickLesk 7a76d94745 rm old comments 2026-07-20 20:49:52 +02:00
MickLesk b4030cef3a add more cts 2026-07-20 20:49:41 +02:00
MickLesk a35e496d93 Standardize CT update backup handling
Refactors a large set of CT update scripts to use the shared `create_backup`/`restore_backup` helpers instead of per-script manual copy/move logic. This removes duplicated backup code, temp-file cleanup paths, and inconsistent restore behavior while keeping data/config restoration in the correct order for build/deploy steps. Several update paths were also aligned to use `CLEAN_INSTALL=1` during release deploys, with minor message/comment tweaks where restore timing is important.
2026-07-20 20:45:34 +02:00
MickLesk bd834f690a Fix CLEAN_INSTALL to wipe dotfiles too
CLEAN_INSTALL now removes dotfiles (e.g. .env) along with other files, using `find -mindepth 1 -delete` instead of `rm -rf *`. Update scripts for affine, nametag, and postiz are updated to explicitly back up and restore .env (via create_backup/restore_backup or cp) BEFORE the build step that sources it, rather than relying on the wipe preserving dotfiles.
2026-07-20 20:23:05 +02:00
MickLesk a5a0b90643 hotfix: preserve .env 2026-07-20 19:56:29 +02:00
community-scripts-pr-app[bot] aa8352bfd5 Update CHANGELOG.md (#15932)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-20 15:57:41 +00:00
CanbiZ (MickLesk) 3b8f57672e AFFiNE: Bump version to v0.27.2 (#15930) 2026-07-20 17:57:16 +02:00
community-scripts-pr-app[bot] 9028029ea0 Update CHANGELOG.md (#15931)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-20 15:21:26 +00:00
Tobias 0d3ee851d0 fix: vikunja: asset selection (#15929)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 01:20:54 +10:00
community-scripts-pr-app[bot] 6408653564 Update CHANGELOG.md (#15928)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-20 12:39:57 +00:00
CanbiZ (MickLesk) e925e29966 RomM: use backup helpers in update / clear folder (#15915)
* RomM: use backup helpers in update / clear folder

Replace manual .env backup/restore with create_backup and restore_backup helpers, and add CLEAN_INSTALL=1 flag to fetch_and_deploy_gh_release.

* add screenscraper env

* add rom_patcher

* add ruffle and emulatorJS
2026-07-20 14:39:29 +02:00
MickLesk 8505d28429 Set explicit Elasticsearch paths
Define `path.data` and `path.logs` in the Zammad install script's Elasticsearch config so the service uses the expected data and log directories when running in the single-node local setup.
2026-07-20 12:15:57 +02:00
community-scripts-pr-app[bot] f15e9c320b Update CHANGELOG.md (#15926)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-20 09:58:10 +00:00
CanbiZ (MickLesk) 5b4e526329 tools.func: add support for extracting 7z archives (#15919) 2026-07-20 11:57:41 +02:00
community-scripts-pr-app[bot] a61dc9c585 Update CHANGELOG.md (#15925)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-20 09:55:26 +00:00
CanbiZ (MickLesk) f8cc69e244 Gotify: Migration to v3 (#15912) 2026-07-20 11:55:01 +02:00
community-scripts-pr-app[bot] 1dba4eb2ee Update CHANGELOG.md (#15924)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-20 09:54:29 +00:00
CanbiZ (MickLesk) fa9377cd45 Zammad : bind Elasticsearch to 127.0.0.1 (#15909) 2026-07-20 11:54:04 +02:00
community-scripts-pr-app[bot] b6a8ca1a3a Update CHANGELOG.md (#15923)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-20 09:53:51 +00:00
CanbiZ (MickLesk) 2c13cb6a38 Meilisearch : use dumpless Meilisearch upgrades (#15921) 2026-07-20 11:53:27 +02:00
community-scripts-pr-app[bot] beeb497519 Update CHANGELOG.md (#15922)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-20 09:46:56 +00:00
CanbiZ (MickLesk) 9ea82fa992 core: Improve GPU detection and mapping logic (#15918)
Refactor GPU detection logic to map DRI nodes to their owning GPUs based on vendor IDs. Update messages for detected Intel and AMD GPUs.
2026-07-20 11:46:33 +02:00
community-scripts-pr-app[bot] d6cd545e98 Update CHANGELOG.md (#15920)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-20 09:43:57 +00:00
CanbiZ (MickLesk) 31b7024997 Fix Omada package version extraction (#15908)
Update both `ct/omada.sh` and `install/omada-install.sh` to parse the Omada version directly from the `_v..._linux` segment of the Debian filename. This removes the old dependency on a timestamp suffix format and ensures `.omada` gets a valid version when TP-Link package naming varies.
2026-07-20 11:43:34 +02:00
community-scripts-pr-app[bot] a6a608614f Update CHANGELOG.md (#15916)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-20 08:29:28 +00:00
Michel Roegl-Brunner 3042cd5cee fix(wanderer): use PocketBase-relative plugin symlink in unprivileged LXC (#15911)
The /data/plugins symlink fails in default unprivileged containers with Operation not permitted. Link plugins via /opt/wanderer/source/db/data/plugins instead so PluginDir() can discover them without root-level symlinks.

Fixes #15799
2026-07-20 10:29:05 +02:00
community-scripts-pr-app[bot] 026fd25e7a Update CHANGELOG.md (#15904)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-19 17:02:04 +00:00
TowyTowy e1ce55b547 fix(build.func): expand glob in SSH key "Scan Folder/Glob" so it can find keys (#15873)
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Sam Heinz <sam@samheinz.com>
2026-07-19 19:01:41 +02:00
community-scripts-pr-app[bot] d81c9f3ed2 Update CHANGELOG.md (#15900)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-19 12:54:11 +00:00
CanbiZ (MickLesk) b098501a37 tools.func: centralize deploy tail + trap-based tmpdir cleanup (#15872)
* tools.func: replace rm -rf with find for safer directory cleanup

* tools.func: replace rm -rf with find for safer directory cleanup

* refactor(tools.func): centralize deploy tail + trap-based tmpdir cleanup

Extract the duplicated post-download logic of the fetch_and_deploy_*
helpers into two shared functions and switch per-branch cleanup to a
single RETURN trap.

- _deploy_source_tarball: shared source-tarball tail (6 call sites)
- _deploy_unpacked_archive: shared prebuild-archive tail (3 call sites)
- RETURN trap per function guarantees tmpdir/unpack_tmp cleanup on every
  return path, replacing ~40 manual `rm -rf "$tmpdir"` lines
- CLEAN_INSTALL now lives in the helpers instead of 12 copies

Behavior-preserving except: codeberg prebuild gains .txz support and
uses helper return codes; from_url resets shopt on error paths.

* Add _download_source_tarball with retry/validation

Introduce `_download_source_tarball` helper that validates gzip integrity after download and retries up to 3 times. This guards against truncated-but-valid-HTTP responses from GitHub/GitLab/Codeberg on-the-fly archive generation. Replace ad-hoc curl/curl_download calls in fetch_and_deploy_* functions with the new helper. Also remove redundant tmpdir cleanup before early returns (tmpdir is cleaned up at function exit).

* Fix Manyfold Ruby setup home initialization

Create the `manyfold` service user before calling `setup_ruby` so `/home/manyfold` exists when rbenv profile snippets are written. Also harden `setup_ruby` by creating `$HOME` if missing, preventing profile-write failures for installers that pass a home directory before creating the user.

* Update install/manyfold-install.sh

---------

Co-authored-by: Sam Heinz <sam@samheinz.com>
2026-07-19 22:53:46 +10:00
community-scripts-pr-app[bot] a1058256be Update CHANGELOG.md (#15899)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-19 12:53:02 +00:00
tdn131 e425d9c02c Update OPNsense from 26.1 to 26.7 (#15895) 2026-07-19 22:52:42 +10:00
community-scripts-pr-app[bot] 0dbea508d3 Update CHANGELOG.md (#15898)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-19 12:03:22 +00:00
Sam Heinz 787e27a4ac change trek repo to liketrek/TREK (#15893) 2026-07-19 14:02:56 +02:00
community-scripts-pr-app[bot] 8f0083850e Update CHANGELOG.md (#15896)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-19 11:21:43 +00:00
thieneret 8f9c4eb13b update authentik to 2026.5.5 (#15855) 2026-07-19 13:21:14 +02:00
community-scripts-pr-app[bot] beacf9e43a Update CHANGELOG.md (#15892)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-19 09:17:11 +00:00
Chris b2898debce [FIX] BookOrbit: add missing restore_backup during update (#15881)
- Otherwise the `.env` file is not restored and the sed command fails
2026-07-19 19:16:44 +10:00
community-scripts-pr-app[bot] 8c7da1e036 Update CHANGELOG.md (#15887)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-19 07:42:15 +00:00
CanbiZ (MickLesk) bbd5a3f522 Revert "add configurable host CA inheritance for LXC bootstrap (#15840)" (#15886)
This reverts commit eb5a5b2cb7.
2026-07-19 09:41:52 +02:00
community-scripts-pr-app[bot] c07dc4a4c3 Update CHANGELOG.md (#15884)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-19 00:17:46 +00:00
community-scripts-pr-app[bot] e7f6a6d4cd Archive old changelog entries (#15883)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-19 00:17:24 +00:00
community-scripts-pr-app[bot] 3242b9a2d1 Update CHANGELOG.md (#15879)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-18 22:10:27 +00:00
CanbiZ (MickLesk) 38ed344e0a tools.func: Safe Delete Directorys & Update PYTHON_VERSION with setup_uv (#15870) 2026-07-19 00:10:06 +02:00
community-scripts-pr-app[bot] 658aad229a Update CHANGELOG.md (#15878)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-18 21:21:41 +00:00
Michel Roegl-Brunner eb5a5b2cb7 add configurable host CA inheritance for LXC bootstrap (#15840)
Introduce host CA certificate propagation in the shared LXC build flow so containers can trust enterprise/private PKI roots during early package bootstrap. Add an advanced-install toggle with default auto behavior so unattended installs remain seamless while interactive users can explicitly opt out.

Co-authored-by: Michel Roegl-Brunner <michel.roegl-brunner@example.com>
2026-07-18 23:21:19 +02:00
community-scripts-pr-app[bot] 09c85021fc Update CHANGELOG.md (#15877)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-18 20:19:59 +00:00
Sir106 7f1b0ead93 [tools.update-lxcs] feat: optional reporting success/failures to heathchecks.io (or others) (#15701)
* feat: add  task monitoring option via  e.g. healthchecks.io. To be configured via PING variable in config file.

* attach logfile on failure to healthcheck.io message

* fixed error status when updating lxc even if finished successful

---------

Co-authored-by: Sir106 <sir106@id-e.de>
2026-07-18 22:19:31 +02:00
community-scripts-pr-app[bot] c24bba00de Update CHANGELOG.md (#15863)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 19:16:42 +00:00
Michel Roegl-Brunner 3f7228f9c6 fix(webtrees): initialize database schema before admin user creation (#15837)
PR #14818 replaced the setup wizard curl with CLI commands but omitted
the schema migration step, causing fresh installs to fail when creating
the admin user. Trigger schema init via HTTP after config-ini.

Fixes #15828
2026-07-17 21:16:15 +02:00
community-scripts-pr-app[bot] c0a327dad8 Update CHANGELOG.md (#15862)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 19:13:41 +00:00
Copilot 78990277f2 Fix DocuSeal missing Leptonica deps on install and update (#15858)
* Initial plan

* Fix DocuSeal leptonica dependencies

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-17 21:13:19 +02:00
community-scripts-pr-app[bot] 0b15e19500 Update CHANGELOG.md (#15861)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 19:05:36 +00:00
CanbiZ (MickLesk) f75b0a8b0e AFFiNE: Bump to 0.27.0 (#15848) 2026-07-17 21:05:10 +02:00
community-scripts-pr-app[bot] b5360882c9 Update CHANGELOG.md (#15860)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 19:04:58 +00:00
TowyTowy b2936ff9ce fix(apache-guacamole): detect installed extensions during update (#15841) 2026-07-17 21:04:31 +02:00
community-scripts-pr-app[bot] 29552c6e2e Update CHANGELOG.md (#15859)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 19:03:14 +00:00
Austin d2ecb9f44c CLIProxyAPI: fix update deleting config.yaml (#15834) 2026-07-17 21:02:47 +02:00
community-scripts-pr-app[bot] ec3c25c5f5 Update CHANGELOG.md (#15853)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 12:31:18 +00:00
community-scripts-pr-app[bot] b1259e3749 Update CHANGELOG.md (#15852)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 12:31:05 +00:00
push-app-to-main[bot] ff192c4530 Invidious (#15824)
* Add invidious (ct)

* Update install/invidious-install.sh

* Update install/invidious-install.sh

* Update install/invidious-install.sh

* Update ct/invidious.sh

* Update ct/invidious.sh

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Sam Heinz <sam@samheinz.com>
2026-07-17 14:30:55 +02:00
community-scripts-pr-app[bot] e72f335b46 Update CHANGELOG.md (#15851)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 12:30:52 +00:00
community-scripts-pr-app[bot] 13d7bf6c78 Update CHANGELOG.md (#15850)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 12:30:43 +00:00
push-app-to-main[bot] 2ab4a31dd1 OxiCloud (#15823)
* Add oxicloud (ct)

* Update ct/oxicloud.sh

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Sam Heinz <sam@samheinz.com>
2026-07-17 14:30:27 +02:00
community-scripts-pr-app[bot] e7557c2355 Update CHANGELOG.md (#15849)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 12:30:21 +00:00
CanbiZ (MickLesk) 79cee47df6 SFTPGo: Update APT Repo & Re-Enable Script (#15829)
* SFTPGo: Update APT Repo & Re-Enable Script

* Update sftpgo.sh
2026-07-17 14:29:59 +02:00
MickLesk b4dcdd4472 Merge branch 'main' of https://github.com/community-scripts/ProxmoxVE 2026-07-17 12:54:18 +02:00
community-scripts-pr-app[bot] 8f2b68ed7e Update CHANGELOG.md (#15847)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 10:53:42 +00:00
community-scripts-pr-app[bot] 853f5e868a Update CHANGELOG.md (#15846)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 10:53:20 +00:00
CanbiZ (MickLesk) 7c7d40cfe3 tools.func: enhance rbenv with profile updates / bundle in bashrc (#15822)
* tools.func: enhance rbenv with profile updates / bundle in bashrc

Added checks to update shell profile files for rbenv integration and removed redundant profile setup code.

* Refactor Ruby version installation script

* Fix comment formatting in tools.func
2026-07-17 12:53:13 +02:00
CanbiZ (MickLesk) 373ae7e143 MongoDB: Implement kernel version check and patch (#15821) 2026-07-17 12:53:05 +02:00
CanbiZ (MickLesk) abc31499a2 n8n: unpin / use latest release (#15817)
* n8n: unpin / use latest release

startup issue is fixed, so unpin and set to latest release

* Update n8n installation to latest version
2026-07-17 12:52:57 +02:00
MickLesk 7bf45d5b66 fix stupid branch delete bot 2026-07-17 12:49:24 +02:00
community-scripts-pr-app[bot] f119e8782a Update CHANGELOG.md (#15844)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 10:18:59 +00:00
Michel Roegl-Brunner 271df3c3fb feat(build.func): notify users when already on a pinned script version (#15819)
Query PocketBase pinned_version/pin_reason during LXC updates and show an informational message when the installed version matches the pin, so users know not to open issues for missing newer updates.
2026-07-17 12:18:36 +02:00
community-scripts-pr-app[bot] c991a7eccf Update CHANGELOG.md (#15843)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 09:59:30 +00:00
Michel Roegl-Brunner 5d4eff0493 fix(esphome): install libusb-1.0-0 for ESP-IDF native builds (#15838)
ESPHome 2026.7.0 validates openocd-esp32 during native ESP-IDF setup, which requires libusb-1.0.so.0. Add the runtime package to install and update paths.

Fixes #15835
2026-07-17 11:59:05 +02:00
community-scripts-pr-app[bot] 3f90af2a21 Update CHANGELOG.md (#15839)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 07:00:56 +00:00
Chris 55002839fb Pin Opencloud to v7.3.0 (#15826) 2026-07-17 09:00:32 +02:00
community-scripts-pr-app[bot] a51e1f37f5 Update CHANGELOG.md (#15836)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-17 06:43:31 +00:00
soupy-boy 8655282c2d autoremove and autoclean after apt full-upgrade (#15831) 2026-07-17 08:43:05 +02:00
Michel Roegl-Brunner e15db754a6 github: close PRs that do not follow the PR template
Add a workflow that validates description, prerequisites, and type-of-change checkboxes, with exemptions for bots, maintainers, and the keep open label.
2026-07-16 11:46:06 +02:00
community-scripts-pr-app[bot] 772430de7e Update CHANGELOG.md (#15818)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-16 08:28:51 +00:00
community-scripts-pr-app[bot] 04a84f5052 Update CHANGELOG.md (#15816)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Sam Heinz <sam@samheinz.com>
2026-07-16 10:28:25 +02:00
community-scripts-pr-app[bot] 12dec08523 Update CHANGELOG.md (#15815)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-16 08:02:15 +00:00
push-app-to-main[bot] 775f1a98c2 Sync-In (#15812)
* Add sync-in (ct)

* remove empty lines

---------

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-07-16 18:02:13 +10:00
community-scripts-pr-app[bot] 6d6d66eec6 Update CHANGELOG.md (#15814)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-16 08:01:53 +00:00
push-app-to-main[bot] 9bb99c59c5 Beaverhabits (#15813)
* Add beaverhabits (ct)

* Update URL to include '/register' path

---------

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-07-16 18:01:44 +10:00
push-app-to-main[bot] d122341a47 Add notediscovery (ct) (#15811)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-07-16 18:01:24 +10:00
community-scripts-pr-app[bot] b9f26d66ed Update CHANGELOG.md (#15810)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-16 07:31:00 +00:00
Chris c44789f5f6 Pin Immich to v3.0.3 (#15790) 2026-07-16 17:30:38 +10:00
community-scripts-pr-app[bot] 5144f8d0cc Update CHANGELOG.md (#15809)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-16 07:02:22 +00:00
MickLesk d23a2e64e7 migration snapotter 2026-07-16 09:01:53 +02:00
community-scripts-pr-app[bot] b36ad5c3a2 Update CHANGELOG.md (#15804)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-15 19:37:39 +00:00
CanbiZ (MickLesk) 74a233b8b9 Default Docker setup to official repo (#15794) 2026-07-15 21:37:10 +02:00
community-scripts-pr-app[bot] 66eff7ee87 Update CHANGELOG.md (#15803)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-15 19:36:37 +00:00
CanbiZ (MickLesk) 812267aedd 2fauth: minor fixes for 8.0.0 (#15795) 2026-07-15 21:36:13 +02:00
community-scripts-pr-app[bot] c759617379 Update CHANGELOG.md (#15802)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-15 19:35:52 +00:00
CanbiZ (MickLesk) 75a1da273f SnapOtter: refactor deployment and installation process (#15797) 2026-07-15 21:35:28 +02:00
community-scripts-pr-app[bot] c99768869d Update CHANGELOG.md (#15798)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-15 10:55:37 +00:00
push-app-to-main[bot] c52a69e8e5 Nexterm (#15688)
* Add nexterm (ct)

* Remove architecture check from nexterm.sh

Removed architecture check for dpkg.

* Change var_arm64 default to 'yes' and update fetch commands

* Fix license URL and update service creation messages

* typo

---------

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-07-15 20:55:10 +10:00
community-scripts-pr-app[bot] 2afea1239c Update CHANGELOG.md (#15789)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 20:55:21 +00:00
CanbiZ (MickLesk) 07e31eb5bc Pangolin: Bump to 1.20.0 | BREAKING: Switch to PostgreSQL (#15682)
* Pangolin: Bump to 1.20.0 and harden SQLite migrations

Bump the default Pangolin version to 1.20.0 in both CT and install scripts. Update the CT upgrade path to validate required 1.20.0 schema objects, clear stale versionMigrations markers when needed, retry migrations once, and abort with a clear error if the schema is still incomplete to avoid a broken runtime.

* extend migration check...

* another try...

* bump pangolin to PSQL

* remove migration paths

* remove old migrations

* use create_backup and restore_backup

* Block Pangolin SQLite upgrades

Update the Pangolin CT upgrade path to fail fast when PostgreSQL is not installed. The script now explains that upgrades to Pangolin 1.20.0+ require PostgreSQL and that SQLite data cannot be migrated automatically.

* fix env

* Update pangolin.sh

* Update pangolin-install.sh
2026-07-14 22:54:55 +02:00
community-scripts-pr-app[bot] 80c4b04d83 Update CHANGELOG.md (#15788)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 20:38:53 +00:00
CanbiZ (MickLesk) ed29bb6f62 AFFiNE: Pin to v0.26.3 (#15782)
* AFFiNE: Pin to v0.26.3

* Update GitHub release version to v0.26.3
2026-07-14 22:38:24 +02:00
community-scripts-pr-app[bot] a5b839f91f Update CHANGELOG.md (#15781)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 12:16:30 +00:00
push-app-to-main[bot] d4d482746b Add grav (ct) (#15773)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-07-14 14:16:10 +02:00
community-scripts-pr-app[bot] 2bffa47924 Update CHANGELOG.md (#15780)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 12:16:01 +00:00
push-app-to-main[bot] 108c9dcf43 Add yuvomi (ct) (#15772)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-07-14 14:15:32 +02:00
community-scripts-pr-app[bot] 0f37abff3c Update CHANGELOG.md (#15779)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 12:14:44 +00:00
Michel Roegl-Brunner 670d972cc1 fix(wanderer): clean deploy and install plugins for v0.20.0 update (#15759)
Use CLEAN_INSTALL with create_backup/restore_backup so stale v0.19.x source files no longer break go build after the integrations migration. Also set up the plugins directory and install official WASM bundles.
2026-07-14 14:14:20 +02:00
community-scripts-pr-app[bot] 9f8bc4b03d Update CHANGELOG.md (#15778)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 12:08:38 +00:00
CanbiZ (MickLesk) 817ee347c7 Bump OpenCloud version to v7.2.2 (#15769)
* Bump OpenCloud release version to v7.2.2

* Update OpenCloud version to v7.2.2
2026-07-14 22:08:14 +10:00
community-scripts-pr-app[bot] bb4e35f988 Update CHANGELOG.md (#15777)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 12:02:17 +00:00
community-scripts-pr-app[bot] 254e720b4f Update CHANGELOG.md (#15776)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 12:01:44 +00:00
Michel Roegl-Brunner 9055f4b34e fix(lychee): preserve uploads and ownership during update (#15768)
The update script wiped public/uploads and did not re-apply www-data
ownership, causing HTTP 500 after successful updates. Align with upstream
upgrade steps and sibling Laravel scripts by backing up uploads/dist,
restarting PHP-FPM, running full artisan cache cycle, and adding verbose
diagnostics.

Fixes #15763
2026-07-14 22:01:40 +10:00
Michel Roegl-Brunner 3f5453b609 FileFlows: Handle update API 401, force update, and Node install (#15766)
* fix(fileflows): handle update API failures and fix Node install

Server updates no longer abort on 401 or unreachable API; users can force deploy when security is enabled or the app is down. Node installs now pass --server during systemd setup, and Node updates skip the server-only API.

* Update fileflows.sh
2026-07-14 22:01:16 +10:00
community-scripts-pr-app[bot] e812206116 Update CHANGELOG.md (#15775)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 12:00:40 +00:00
Michel Roegl-Brunner 7f430e15bb feat(silverbullet): add optional Runtime API install via Chromium (#15761)
Adds an install-time prompt to optionally enable Silverbullet's Runtime API by installing Chromium and configuring SB_CHROME_PATH / SB_CHROME_DATA_DIR.
2026-07-14 22:00:17 +10:00
community-scripts-pr-app[bot] 9c586b94ab Update CHANGELOG.md (#15774)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 11:58:44 +00:00
Michel Roegl-Brunner ab3c9be482 fix(birdnet-go): match new upstream release asset naming (#15758)
Upstream BirdNET-Go releases now suffix tarball names with the release date (e.g. birdnet-go-linux-amd64-20260713.tar.gz). Use a wildcard pattern so install and update can fetch the latest release without falling back to older nightlies.

Fixes #15753
2026-07-14 21:58:22 +10:00
community-scripts-pr-app[bot] 103b420e30 Update CHANGELOG.md (#15771)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 11:08:23 +00:00
CanbiZ (MickLesk) c039ab2e62 Refactor input and checkbox fields for repository stars 2026-07-14 12:45:49 +02:00
CanbiZ (MickLesk) 63f219f14f Revise project eligibility criteria in request template
Updated eligibility requirements for project requests in the discussion template, clarifying the criteria for self-hosting, repository stars, and project age.
2026-07-14 12:44:19 +02:00
community-scripts-pr-app[bot] 09ec7b3203 Update CHANGELOG.md (#15765)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 10:02:33 +00:00
Michel Roegl-Brunner 55ab97a020 Revert "fix(fileflows): handle update API failures and fix Node install (#14858)" (#15764)
This reverts commit 171b954c7c.
2026-07-14 12:02:10 +02:00
community-scripts-pr-app[bot] b7a002cae4 Update CHANGELOG.md (#15762)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 10:00:47 +00:00
Michel Roegl-Brunner 171b954c7c fix(fileflows): handle update API failures and fix Node install (#14858)
Server updates no longer abort on 401 or unreachable API; users can force deploy when security is enabled or the app is down. Node installs now pass --server during systemd setup, and Node updates skip the server-only API.
2026-07-14 12:00:22 +02:00
community-scripts-pr-app[bot] 6f76cc043e Update CHANGELOG.md (#15756)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-14 07:32:54 +00:00
Chris 5d57c328fb [Upstream Fix] Immich: Fix loader priority (#15755) 2026-07-14 09:32:29 +02:00
community-scripts-pr-app[bot] da62724407 Update CHANGELOG.md (#15749)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-13 15:41:02 +00:00
push-app-to-main[bot] dbe2c9eb97 Add leafwiki (ct) (#15748)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-07-13 17:39:10 +02:00
community-scripts-pr-app[bot] 3c5a848d7d Update CHANGELOG.md (#15747)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-13 13:10:47 +00:00
Michel Roegl-Brunner 1e3d0dedb3 Change sign-in URL to admin URL in affine.sh (#15741) 2026-07-13 23:09:56 +10:00
CanbiZ (MickLesk) bcaadc4dbd typo 2026-07-13 14:58:23 +02:00
community-scripts-pr-app[bot] 666bdbd8c8 Update CHANGELOG.md (#15742)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-13 10:00:14 +00:00
mnavon 7596b95517 immich: use actual PostgreSQL version for VectorChord package lookup (#15705)
* immich: use actual PostgreSQL version for VectorChord package lookup

* fix: update PostgreSQL version variable for VectorChord package deployment
2026-07-13 11:59:52 +02:00
community-scripts-pr-app[bot] 1521e131b5 Update CHANGELOG.md (#15740)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-13 09:56:44 +00:00
Michel Roegl-Brunner 734bb75b12 fix storyteller release selection for multi-stream tags (#15736)
Add optional tag prefix filtering to GitHub/GitLab release helpers and use web-v2 for Storyteller install/update so latest non-web tags no longer break deployment.
2026-07-13 11:56:12 +02:00
community-scripts-pr-app[bot] d6d8d20c76 Update CHANGELOG.md (#15739)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-13 09:38:01 +00:00
CanbiZ (MickLesk) 649e66ed2b tools.func: some improvements (sql injection / command injection / guard) (#15661)
* Update tools.func

- Add _TOOLS_FUNC_LOADED guard to prevent double-sourcing
- Remove duplicate is_alpine() (core.func version is more robust)
- Fix end_timer: now actually outputs duration (was silent)
- Fix SQL injection in setup_mariadb_db: escape single quotes in identifiers
- Fix SQL injection in setup_postgresql_db: escape single quotes in identifiers
- Fix sed injection in edit_yaml_config: escape | and & in value
- Fix command injection in curl_with_retry: use array instead of string eval
- Fix command injection in curl_api_with_retry: use array instead of string eval

* Update misc/tools.func

Co-authored-by: Sam Heinz <sam@samheinz.com>

---------

Co-authored-by: Sam Heinz <sam@samheinz.com>
2026-07-13 11:37:39 +02:00
community-scripts-pr-app[bot] 81bb9c7d71 Update CHANGELOG.md (#15737)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-13 09:32:19 +00:00
CanbiZ (MickLesk) ca082aedf0 Docmost: Fix update procedure (#15732)
Updated messages for configuring and starting the Docmost service.
2026-07-13 11:31:53 +02:00
community-scripts-pr-app[bot] 1e7667e5f8 Update CHANGELOG.md (#15735)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-13 09:12:36 +00:00
TowyTowy f828e629b5 fix(hyperion): keep service running after container reboot (#15653)
* fix(hyperion): keep service running after container reboot

The packaged hyperion@.service declares "Requisite=network.target" but is
not ordered After=network.target. Inside an LXC the unit's start job can be
evaluated before network.target is active, and because Requisite= is stricter
than Requires= (it does not pull the unit in or wait for it) the job fails
with "Dependency failed", so Hyperion does not start after a reboot.

Add a systemd drop-in that clears Requisite=; ordering is still provided by
the base unit's Wants=/After=network-online.target.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Fix Hyperion service startup issue in LXC

Remove Requisite from Hyperion service to ensure it starts correctly in LXC environments.

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-07-13 11:12:10 +02:00
community-scripts-pr-app[bot] 4a98e86db1 Update CHANGELOG.md (#15734)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-13 09:11:36 +00:00
community-scripts-pr-app[bot] 37b5242c21 Update CHANGELOG.md (#15733)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-13 09:11:16 +00:00
Michel Roegl-Brunner a1333222a8 fix(shinobi): remove obsolete --unsafe-perm npm flag (#15730)
Shinobi installs fail on Node.js 22 because npm 10 no longer accepts the
--unsafe-perm CLI flag during npm install.
2026-07-13 11:11:08 +02:00
Michel Roegl-Brunner 12949bce6c fix(build.func): parse script status without jq dependency (#15729)
Replace jq-based PocketBase status parsing with sed/grep so disabled and deleted script checks work on hosts that do not have jq installed yet.
2026-07-13 11:10:49 +02:00
community-scripts-pr-app[bot] fae0aacf6d Update CHANGELOG.md (#15731)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-13 09:05:39 +00:00
Tobias fd20ed1bfc reitti: update to v5 (#15635) 2026-07-13 11:05:11 +02:00
community-scripts-pr-app[bot] eb3fb749df Update CHANGELOG.md (#15727)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-12 21:22:59 +00:00
push-app-to-main[bot] f7fdf419b1 AFFiNE (#15690) 2026-07-12 23:22:39 +02:00
community-scripts-pr-app[bot] 0a7bd0f37e Update CHANGELOG.md (#15724)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-12 16:24:42 +00:00
Copilot 48483c63b8 fix(immich): correct Python indentation error in ct/immich.sh heredoc patch (#15723)
* Initial plan

* fix: correct Python indentation in immich heredoc patch (ct/immich.sh)

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-12 18:24:19 +02:00
community-scripts-pr-app[bot] 962c040f44 Update CHANGELOG.md (#15721)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-12 15:49:09 +00:00
Chris c0b2c906fa Immich: Bump version to 3.0.2 (#15668)
* Immich: Bump version to 3.0.2

* Bump vchord to 1.1.1

* Add MickLesk HEIC patch
2026-07-12 17:48:43 +02:00
community-scripts-pr-app[bot] 96100474cc Update CHANGELOG.md (#15715)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-12 00:18:12 +00:00
community-scripts-pr-app[bot] 76335cefe8 Archive old changelog entries (#15714)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-12 00:17:46 +00:00
community-scripts-pr-app[bot] 8fbb4b1988 Update CHANGELOG.md (#15712)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-11 20:15:36 +00:00
TowyTowy c481c3e24e fix(fileflows): install .NET 10 ASP.NET Core Runtime to match current release (#15702)
* fix(fileflows): install .NET 10 ASP.NET Core Runtime to match current release

FileFlows now ships its server/node binaries targeting .NET 10
(Microsoft.NETCore.App 10.0.0), but the install script still installs the
ASP.NET Core Runtime 8.0. On a fresh install the app therefore cannot start:

  You must install or update .NET to run this application.
  Framework: 'Microsoft.NETCore.App', version '10.0.0' (x64)
  The following frameworks were found:
    8.0.28 at [/usr/share/dotnet/shared/Microsoft.NETCore.App]

so "dotnet FileFlows.Server.dll --systemd install" fails with exit code 150
(service failed to start) and the container aborts (issue #15686).

Bump the runtime to 10.0 on both branches: aspnetcore-runtime-10.0 from
packages.microsoft.com on amd64 (the same repo and package already used by
igotify, rdtclient and technitiumdns) and dotnet-install --channel 10.0 on
arm64.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(fileflows): ensure current .NET runtime on update too

An existing install set up under an older .NET (e.g. aspnetcore-runtime-8.0)
would download a newer FileFlows on update but keep the old runtime, failing to
start with the same framework-not-found error. Mirror the runtime handling used
by technitiumdns/rdtclient in update_script.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 22:15:12 +02:00
community-scripts-pr-app[bot] dcd1eefdd4 Update CHANGELOG.md (#15709)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-11 18:07:32 +00:00
TowyTowy f1b2bd0486 fix(adventurelog): allow pnpm build scripts so install/update doesn't abort (#15681)
AdventureLog's frontend install runs a bare `pnpm i`. On pnpm v10+, build
scripts of dependencies (esbuild, es5-ext, svelte-preprocess) are ignored by
default and pnpm aborts with ERR_PNPM_IGNORED_BUILDS (exit 1), so the install
never reaches `pnpm build`. The shipped frontend/pnpm-workspace.yaml already
pins esbuild, so those builds are expected to run.

Enable the builds for this app only by appending `dangerouslyAllowAllBuilds:
true` to the frontend's pnpm-workspace.yaml before `pnpm i`, in both the install
and update paths. The change is guarded so it is not duplicated on re-run, and
it is scoped to AdventureLog (which ships no onlyBuiltDependencies) to avoid the
global config conflict that a repo-wide setting would cause.

Fixes #15670

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 20:07:05 +02:00
community-scripts-pr-app[bot] 42f6b3ccdd Update CHANGELOG.md (#15708)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-11 18:00:59 +00:00
community-scripts-pr-app[bot] ed9c80f805 Update CHANGELOG.md (#15707)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-11 18:00:51 +00:00
push-app-to-main[bot] 0906341e95 LocalAGI (#15687)
* Add localagi (ct)

* Refactor localagi.sh for better readability

Removed unnecessary blank lines and improved script readability.

---------

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-07-11 20:00:36 +02:00
Slaviša Arežina 618d578c35 [tools.func]: Add function to handle deployment via GitLab release tags (#15641)
* Update CHANGELOG.md (#15631)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* Update CHANGELOG.md (#15631)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* Update CHANGELOG.md (#15631)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* add gl tag handling funcs

---------

Co-authored-by: community-scripts-pr-app[bot] <189241966+community-scripts-pr-app[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-11 20:00:29 +02:00
community-scripts-pr-app[bot] f137f8c894 Update CHANGELOG.md (#15699)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-11 08:49:21 +00:00
pumrum 98bedb6ccd Fix spacing on VLAN Input Box in haos-vm.sh (#15696) 2026-07-11 10:48:55 +02:00
community-scripts-pr-app[bot] b958252441 Update CHANGELOG.md (#15692)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-10 18:48:25 +00:00
wollew 92c4fb45a9 Adapt to new artifact filename format for pocket id (#15689)
* Adapt to new artifact filename format for pocket id

* adapt pocket id install to new artifact filename format as well
2026-07-10 20:47:58 +02:00
community-scripts-pr-app[bot] f4e0111ac0 Update CHANGELOG.md (#15680)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-10 08:57:54 +00:00
push-app-to-main[bot] 2e4558e262 Squid (#15605)
* Add squid (ct)

* Update ct/squid.sh

* Simplify squid.sh by removing proxy user instructions

Removed instructions for adding a proxy user inside the container.

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Sam Heinz <sam@samheinz.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-07-10 10:57:27 +02:00
community-scripts-pr-app[bot] 11139aede7 Update CHANGELOG.md (#15679)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-10 08:54:13 +00:00
Slaviša Arežina 6716d8de84 Fireshare: Fix for install and upgrade to v1.7.3 (#15673)
* Update CHANGELOG.md (#15631)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* Update CHANGELOG.md (#15631)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* Update CHANGELOG.md (#15631)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* Fix install and upgrade to v1.7.3

---------

Co-authored-by: community-scripts-pr-app[bot] <189241966+community-scripts-pr-app[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-10 10:53:51 +02:00
community-scripts-pr-app[bot] f1e952005e Update CHANGELOG.md (#15678)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-10 08:53:34 +00:00
Slaviša Arežina 89b671880a Endurain: Fix update procedure (#15674)
* Update CHANGELOG.md (#15631)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* Update CHANGELOG.md (#15631)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* Update CHANGELOG.md (#15631)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* Fixed update procedure

* ups

---------

Co-authored-by: community-scripts-pr-app[bot] <189241966+community-scripts-pr-app[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-10 10:53:04 +02:00
180 changed files with 4225 additions and 1576 deletions
+40 -7
View File
@@ -12,13 +12,17 @@ body:
Requests may be closed if the application is out of scope, abandoned, too new, not publicly verifiable, or not suitable for a reliable Proxmox VE Helper-Scripts integration. Requests may be closed if the application is out of scope, abandoned, too new, not publicly verifiable, or not suitable for a reliable Proxmox VE Helper-Scripts integration.
General requirements: General requirements:
- The application should be self-hosted. - The application must be self-hosted.
- The project should have an official public source repository. - The project must have an official public source repository.
- The project should provide official releases, tags, or release tarballs. - The project must provide official releases, tags, or release tarballs.
- The project should be actively maintained. - The project must be actively maintained.
- The project should generally have at least 1,000 stars or a comparable public adoption signal. - The official source repository must have at least 1,000 stars.
- The latest official release or tag should not be older than 6 months. - The latest official release or tag must not be older than 6 months.
- The project itself should be at least 6 months old. - The project itself must be at least 6 months old.
Projects that do not meet these requirements may be closed without further evaluation.
Exceptions to the 1,000-star requirement are rare and require a clearly verifiable, significant public adoption signal.
- type: input - type: input
id: application-name id: application-name
@@ -47,6 +51,35 @@ body:
validations: validations:
required: true required: true
- type: markdown
attributes:
value: |
## ⚠️ Project Eligibility
Before continuing, verify that the requested project meets the minimum requirements below.
**Projects with fewer than 1,000 stars are generally not eligible for a script request.**
Exceptions are only considered where there is a clearly verifiable, significant public adoption signal.
- type: input
id: repository-stars
attributes:
label: Repository Stars
description: Enter the current number of stars of the official source repository.
placeholder: "e.g., 15,000"
validations:
required: true
- type: checkboxes
id: minimum-stars
attributes:
label: Minimum Adoption Requirement
description: Confirm that you have verified the project's public adoption.
options:
- label: The official source repository has at least 1,000 stars.
required: true
- type: textarea - type: textarea
id: app-description id: app-description
attributes: attributes:
+261
View File
@@ -1,3 +1,264 @@
## 2026-07-18
### 💾 Core
- #### ✨ New Features
- core: add configurable host CA inheritance during bootstrap [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15840](https://github.com/community-scripts/ProxmoxVE/pull/15840))
- #### 🔧 Refactor
- tools.func: Safe Delete Directorys & Update PYTHON_VERSION with setup_uv [@MickLesk](https://github.com/MickLesk) ([#15870](https://github.com/community-scripts/ProxmoxVE/pull/15870))
### 🧰 Tools
- #### ✨ New Features
- [tools.update-lxcs] feat: optional reporting success/failures to heathchecks.io (or others) [@sir106](https://github.com/sir106) ([#15701](https://github.com/community-scripts/ProxmoxVE/pull/15701))
## 2026-07-17
### 🆕 New Scripts
- Invidious ([#15824](https://github.com/community-scripts/ProxmoxVE/pull/15824))
- OxiCloud ([#15823](https://github.com/community-scripts/ProxmoxVE/pull/15823))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- webtrees: initialize database schema before admin user creation [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15837](https://github.com/community-scripts/ProxmoxVE/pull/15837))
- Fix DocuSeal missing Leptonica deps on install and update [@Copilot](https://github.com/Copilot) ([#15858](https://github.com/community-scripts/ProxmoxVE/pull/15858))
- apache-guacamole: detect installed extensions during update [@TowyTowy](https://github.com/TowyTowy) ([#15841](https://github.com/community-scripts/ProxmoxVE/pull/15841))
- CLIProxyAPI: fix update deleting config.yaml [@austinpilz](https://github.com/austinpilz) ([#15834](https://github.com/community-scripts/ProxmoxVE/pull/15834))
- esphome: install libusb-1.0-0 for ESP-IDF native builds [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15838](https://github.com/community-scripts/ProxmoxVE/pull/15838))
- #### ✨ New Features
- AFFiNE: Bump to 0.27.0 [@MickLesk](https://github.com/MickLesk) ([#15848](https://github.com/community-scripts/ProxmoxVE/pull/15848))
- n8n: unpin / use latest release [@MickLesk](https://github.com/MickLesk) ([#15817](https://github.com/community-scripts/ProxmoxVE/pull/15817))
- Pin Opencloud to v7.3.0 [@vhsdream](https://github.com/vhsdream) ([#15826](https://github.com/community-scripts/ProxmoxVE/pull/15826))
- #### 🔧 Refactor
- SFTPGo: Update APT Repo & Re-Enable Script [@MickLesk](https://github.com/MickLesk) ([#15829](https://github.com/community-scripts/ProxmoxVE/pull/15829))
### 💾 Core
- #### ✨ New Features
- tools.func: enhance rbenv with profile updates / bundle in bashrc [@MickLesk](https://github.com/MickLesk) ([#15822](https://github.com/community-scripts/ProxmoxVE/pull/15822))
- feat(build.func): notify users when already on a pinned script version [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15819](https://github.com/community-scripts/ProxmoxVE/pull/15819))
- #### 💥 Breaking Changes
- MongoDB: Implement kernel version check and patch [@MickLesk](https://github.com/MickLesk) ([#15821](https://github.com/community-scripts/ProxmoxVE/pull/15821))
### 🧰 Tools
- #### ✨ New Features
- update-lxc: autoremove and autoclean after apt full-upgrade [@soupy-boy](https://github.com/soupy-boy) ([#15831](https://github.com/community-scripts/ProxmoxVE/pull/15831))
## 2026-07-16
### 🆕 New Scripts
- Sync-In ([#15812](https://github.com/community-scripts/ProxmoxVE/pull/15812))
- Beaverhabits ([#15813](https://github.com/community-scripts/ProxmoxVE/pull/15813))
- Notediscovery ([#15811](https://github.com/community-scripts/ProxmoxVE/pull/15811))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Pin Immich to v3.0.3 [@vhsdream](https://github.com/vhsdream) ([#15790](https://github.com/community-scripts/ProxmoxVE/pull/15790))
## 2026-07-15
### 🆕 New Scripts
- Nexterm ([#15688](https://github.com/community-scripts/ProxmoxVE/pull/15688))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- 2fauth: minor fixes for 8.0.0 [@MickLesk](https://github.com/MickLesk) ([#15795](https://github.com/community-scripts/ProxmoxVE/pull/15795))
- SnapOtter: refactor update process to prebuild [@MickLesk](https://github.com/MickLesk) ([#15797](https://github.com/community-scripts/ProxmoxVE/pull/15797))
### 💾 Core
- #### 🔧 Refactor
- tools.func: default Docker setup to official repo [@MickLesk](https://github.com/MickLesk) ([#15794](https://github.com/community-scripts/ProxmoxVE/pull/15794))
## 2026-07-14
### 🆕 New Scripts
- Grav ([#15773](https://github.com/community-scripts/ProxmoxVE/pull/15773))
- Yuvomi ([#15772](https://github.com/community-scripts/ProxmoxVE/pull/15772))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Lychee: Preserve uploads and ownership during update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15768](https://github.com/community-scripts/ProxmoxVE/pull/15768))
- Wanderer: Clean deploy and install plugins for v0.20.0 update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15759](https://github.com/community-scripts/ProxmoxVE/pull/15759))
- FileFlows: Handle update API 401, force update, and Node install [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15766](https://github.com/community-scripts/ProxmoxVE/pull/15766))
- BirdNET-Go: Match new upstream release asset naming [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15758](https://github.com/community-scripts/ProxmoxVE/pull/15758))
- [Upstream Fix] Immich: Fix loader priority [@vhsdream](https://github.com/vhsdream) ([#15755](https://github.com/community-scripts/ProxmoxVE/pull/15755))
- #### ✨ New Features
- Bump OpenCloud version to v7.2.2 [@MickLesk](https://github.com/MickLesk) ([#15769](https://github.com/community-scripts/ProxmoxVE/pull/15769))
- Silverbullet: Add optional Runtime API install via Chromium [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15761](https://github.com/community-scripts/ProxmoxVE/pull/15761))
- #### 💥 Breaking Changes
- Pangolin: Bump to 1.20.0 | BREAKING: Switch to PostgreSQL [@MickLesk](https://github.com/MickLesk) ([#15682](https://github.com/community-scripts/ProxmoxVE/pull/15682))
- #### 🔧 Refactor
- AFFiNE: Pin to v0.26.3 [@MickLesk](https://github.com/MickLesk) ([#15782](https://github.com/community-scripts/ProxmoxVE/pull/15782))
## 2026-07-13
### 🆕 New Scripts
- LeafWiki ([#15748](https://github.com/community-scripts/ProxmoxVE/pull/15748))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix(hyperion): keep service running after container reboot [@TowyTowy](https://github.com/TowyTowy) ([#15653](https://github.com/community-scripts/ProxmoxVE/pull/15653))
- Change sign-in URL to admin URL in affine.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15741](https://github.com/community-scripts/ProxmoxVE/pull/15741))
- immich: use actual PostgreSQL version for VectorChord package lookup [@mnavon](https://github.com/mnavon) ([#15705](https://github.com/community-scripts/ProxmoxVE/pull/15705))
- fix storyteller release selection for stable web tags [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15736](https://github.com/community-scripts/ProxmoxVE/pull/15736))
- Docmost: Fix update procedure [@MickLesk](https://github.com/MickLesk) ([#15732](https://github.com/community-scripts/ProxmoxVE/pull/15732))
- fix(shinobi): remove obsolete --unsafe-perm npm flag [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15730](https://github.com/community-scripts/ProxmoxVE/pull/15730))
- #### 💥 Breaking Changes
- reitti: update to v5 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15635](https://github.com/community-scripts/ProxmoxVE/pull/15635))
### 💾 Core
- #### 🐞 Bug Fixes
- fix(build.func): parse script status without jq dependency [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15729](https://github.com/community-scripts/ProxmoxVE/pull/15729))
- #### 🔧 Refactor
- tools.func: some improvements (sql injection / command injection / guard) [@MickLesk](https://github.com/MickLesk) ([#15661](https://github.com/community-scripts/ProxmoxVE/pull/15661))
## 2026-07-12
### 🆕 New Scripts
- AFFiNE ([#15690](https://github.com/community-scripts/ProxmoxVE/pull/15690))
### 🚀 Updated Scripts
- Immich: Bump version to 3.0.2 [@vhsdream](https://github.com/vhsdream) ([#15668](https://github.com/community-scripts/ProxmoxVE/pull/15668))
### ❔ Uncategorized
- fix(immich): correct Python indentation error in ct/immich.sh heredoc patch [@Copilot](https://github.com/Copilot) ([#15723](https://github.com/community-scripts/ProxmoxVE/pull/15723))
## 2026-07-11
### 🆕 New Scripts
- LocalAGI ([#15687](https://github.com/community-scripts/ProxmoxVE/pull/15687))
### 🚀 Updated Scripts
- fix(adventurelog): allow pnpm build scripts so install/update doesn't abort [@TowyTowy](https://github.com/TowyTowy) ([#15681](https://github.com/community-scripts/ProxmoxVE/pull/15681))
- #### 🐞 Bug Fixes
- fix(fileflows): install .NET 10 ASP.NET Core Runtime to match current release [@TowyTowy](https://github.com/TowyTowy) ([#15702](https://github.com/community-scripts/ProxmoxVE/pull/15702))
- Fix spacing on VLAN Input Box in haos-vm.sh [@pumrum](https://github.com/pumrum) ([#15696](https://github.com/community-scripts/ProxmoxVE/pull/15696))
### 💾 Core
- #### ✨ New Features
- [tools.func]: Add function to handle deployment via GitLab release tags [@tremor021](https://github.com/tremor021) ([#15641](https://github.com/community-scripts/ProxmoxVE/pull/15641))
## 2026-07-10
### 🆕 New Scripts
- Squid ([#15605](https://github.com/community-scripts/ProxmoxVE/pull/15605))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Adapt to new artifact filename format for pocket id [@wollew](https://github.com/wollew) ([#15689](https://github.com/community-scripts/ProxmoxVE/pull/15689))
- Fireshare: Fix for install and upgrade to v1.7.3 [@tremor021](https://github.com/tremor021) ([#15673](https://github.com/community-scripts/ProxmoxVE/pull/15673))
- Endurain: Fix update procedure [@tremor021](https://github.com/tremor021) ([#15674](https://github.com/community-scripts/ProxmoxVE/pull/15674))
## 2026-07-09
### 🚀 Updated Scripts
- fix(pihole): repair Unbound DNS-over-TLS (DoT) forwarding config [@TowyTowy](https://github.com/TowyTowy) ([#15654](https://github.com/community-scripts/ProxmoxVE/pull/15654))
## 2026-07-08
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Opencloud: Bump version to 7.2.1 [@vhsdream](https://github.com/vhsdream) ([#15655](https://github.com/community-scripts/ProxmoxVE/pull/15655))
- BabyBuddy: Harden update script [@MickLesk](https://github.com/MickLesk) ([#15642](https://github.com/community-scripts/ProxmoxVE/pull/15642))
## 2026-07-07
### 🆕 New Scripts
- Forgejo-Runner ([#15046](https://github.com/community-scripts/ProxmoxVE/pull/15046))
## 2026-07-06
### 🚀 Updated Scripts
- Fix alignment in various ct end messages [@tremor021](https://github.com/tremor021) ([#15632](https://github.com/community-scripts/ProxmoxVE/pull/15632))
- Immich: Update libvips to 8.18.4 [@vhsdream](https://github.com/vhsdream) ([#15619](https://github.com/community-scripts/ProxmoxVE/pull/15619))
- #### 🐞 Bug Fixes
- Wizarr: Build JS and CSS static assets [@vhsdream](https://github.com/vhsdream) ([#15634](https://github.com/community-scripts/ProxmoxVE/pull/15634))
- RustDesk Server: Update URL format in rustdeskserver.sh [@tremor021](https://github.com/tremor021) ([#15626](https://github.com/community-scripts/ProxmoxVE/pull/15626))
- attempt to port docker-vm to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15611](https://github.com/community-scripts/ProxmoxVE/pull/15611))
- fix(plane): don't clobber global app var, breaking /usr/bin/update [@asylumexp](https://github.com/asylumexp) ([#15612](https://github.com/community-scripts/ProxmoxVE/pull/15612))
- #### 🔧 Refactor
- cliproxyapi: point setup message at /management.html [@austinpilz](https://github.com/austinpilz) ([#15628](https://github.com/community-scripts/ProxmoxVE/pull/15628))
### 🗑️ Deleted Scripts
- Remove: FlowiseAI [@MickLesk](https://github.com/MickLesk) ([#15624](https://github.com/community-scripts/ProxmoxVE/pull/15624))
## 2026-07-05
### 🆕 New Scripts
- excalidash ([#15604](https://github.com/community-scripts/ProxmoxVE/pull/15604))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix: homarr: cli [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15603](https://github.com/community-scripts/ProxmoxVE/pull/15603))
- immich: vacuum smart_search/face_search before VectorChord bump [@irishpadres](https://github.com/irishpadres) ([#15607](https://github.com/community-scripts/ProxmoxVE/pull/15607))
## 2026-07-04 ## 2026-07-04
### 🚀 Updated Scripts ### 🚀 Updated Scripts
+163
View File
@@ -0,0 +1,163 @@
name: Close PRs Missing Template
on:
pull_request_target:
branches: ["main"]
types: [opened, edited, reopened, synchronize, labeled]
jobs:
validate-pr-template:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: ubuntu-latest
permissions:
pull-requests: write
issues: write
contents: read
steps:
- name: Close PR if it does not follow the PR template
uses: actions/github-script@v7
with:
script: |
const pr = context.payload.pull_request;
const prNumber = pr.number;
const author = pr.user.login;
const owner = context.repo.owner;
const repo = context.repo.repo;
const allowedBots = [
"push-app-to-main[bot]",
"push-app-to-main",
"community-scripts-pr-app",
"github-actions[bot]",
"dependabot[bot]",
];
if (allowedBots.includes(author) || author.endsWith("[bot]")) {
core.info(`PR #${prNumber} by bot "${author}" — skipping template validation.`);
return;
}
const association = pr.author_association;
const exemptAssociations = ["OWNER", "MEMBER", "COLLABORATOR"];
if (exemptAssociations.includes(association)) {
core.info(`PR #${prNumber} by ${association} "${author}" — skipping template validation.`);
return;
}
const labels = pr.labels.map((label) => label.name);
const skipLabels = ["automated pr", "keep open"];
if (skipLabels.some((label) => labels.includes(label))) {
core.info(`PR #${prNumber} has a skip label (${labels.join(", ")}) — skipping template validation.`);
return;
}
if (pr.draft) {
core.info(`PR #${prNumber} is a draft — skipping template validation.`);
return;
}
const body = pr.body || "";
const failures = [];
const requiredSections = [
"## ✍️ Description",
"## ✅ Prerequisites",
"## 🛠️ Type of Change",
];
for (const section of requiredSections) {
if (!body.includes(section)) {
failures.push(`Missing required section: \`${section}\``);
}
}
const descriptionMatch = body.match(
/## ✍️ Description\s*\n+([\s\S]*?)(?=\n## )/i
);
const description = (descriptionMatch?.[1] || "").trim();
if (!description) {
failures.push("The **Description** section is empty.");
}
const prerequisiteCheckboxes = [
"**Self-review completed**",
"**Tested thoroughly**",
"**No security risks**",
];
for (const checkbox of prerequisiteCheckboxes) {
const escaped = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
const regex = new RegExp(`- \\[(x|X)\\]\\s*${escaped}`, "i");
if (!regex.test(body)) {
failures.push(`Prerequisite not checked: ${checkbox}`);
}
}
const typeOfChangeCheckboxes = [
"🐞 **Bug fix**",
"✨ **New feature**",
"💥 **Breaking change**",
"🆕 **New script**",
"🌍 **Website update**",
"🔧 **Refactoring / Code Cleanup**",
"📝 **Documentation update**",
];
const hasTypeChecked = typeOfChangeCheckboxes.some((checkbox) => {
const escaped = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
const regex = new RegExp(`- \\[(x|X)\\]\\s*${escaped}`, "i");
return regex.test(body);
});
if (!hasTypeChecked) {
failures.push("At least one **Type of Change** checkbox must be checked.");
}
if (failures.length === 0) {
core.info(`PR #${prNumber} follows the PR template.`);
return;
}
core.info(`Closing PR #${prNumber} — template validation failed.`);
const templateUrl =
"https://github.com/community-scripts/ProxmoxVE/blob/main/.github/pull_request_template.md";
const failureList = failures.map((item) => `- ${item}`).join("\n");
const comment = [
`👋 Hi @${author},`,
``,
`This pull request was closed because it does not follow the [PR template](${templateUrl}).`,
``,
`Please fix the following and open a new PR (or reopen this one after updating the description):`,
``,
failureList,
``,
`> Use the template sections, fill in the description, check all prerequisite boxes, and select at least one type of change.`,
``,
`Maintainers can add the \`keep open\` label to exempt a PR from this check.`,
``,
`Thank you for contributing! 🙏`,
].join("\n");
await github.rest.issues.createComment({
owner,
repo,
issue_number: prNumber,
body: comment,
});
await github.rest.pulls.update({
owner,
repo,
pull_number: prNumber,
state: "closed",
});
await github.rest.issues.addLabels({
owner,
repo,
issue_number: prNumber,
labels: ["missing pr template"],
});
+24
View File
@@ -91,6 +91,30 @@ jobs:
let skipped = 0; let skipped = 0;
for (const branch of candidates) { for (const branch of candidates) {
// A branch name can be reused after an earlier PR was merged. Never delete a
// branch while it is the head of a current open PR, even if it is also a
// candidate from an older merged PR.
try {
const { data: openPrs } = await github.rest.pulls.list({
owner,
repo,
state: "open",
head: `${owner}:${branch}`,
per_page: 1,
});
if (openPrs.length > 0) {
console.log(`Skipped "${branch}" (head of open PR #${openPrs[0].number})`);
skipped++;
continue;
}
} catch (error) {
// Do not risk deleting a branch if GitHub cannot confirm it has no open PR.
console.log(`Failed to check open PRs for "${branch}": ${error.message}`);
skipped++;
continue;
}
// Confirm the branch still exists and isn't protected. // Confirm the branch still exists and isn't protected.
let branchData; let branchData;
try { try {
+266 -256
View File
@@ -71,6 +71,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
@@ -87,7 +93,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
<details> <details>
<summary><h4>July (4 entries)</h4></summary> <summary><h4>July (18 entries)</h4></summary>
[View July 2026 Changelog](.github/changelogs/2026/07.md) [View July 2026 Changelog](.github/changelogs/2026/07.md)
@@ -499,6 +505,265 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details> </details>
## 2026-07-20
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix: vikunja: asset selection [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15929](https://github.com/community-scripts/ProxmoxVE/pull/15929))
- RomM: use backup helpers in update / clear folder [@MickLesk](https://github.com/MickLesk) ([#15915](https://github.com/community-scripts/ProxmoxVE/pull/15915))
- Zammad : bind Elasticsearch to 127.0.0.1 [@MickLesk](https://github.com/MickLesk) ([#15909](https://github.com/community-scripts/ProxmoxVE/pull/15909))
- Omada: fix package version extraction [@MickLesk](https://github.com/MickLesk) ([#15908](https://github.com/community-scripts/ProxmoxVE/pull/15908))
- fix(wanderer): use PocketBase-relative plugin symlink in unprivileged LXC [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15911](https://github.com/community-scripts/ProxmoxVE/pull/15911))
- #### ✨ New Features
- AFFiNE: Bump version to v0.27.2 [@MickLesk](https://github.com/MickLesk) ([#15930](https://github.com/community-scripts/ProxmoxVE/pull/15930))
- #### 💥 Breaking Changes
- Gotify: Migration to v3 [@MickLesk](https://github.com/MickLesk) ([#15912](https://github.com/community-scripts/ProxmoxVE/pull/15912))
### 💾 Core
- #### ✨ New Features
- tools.func: add support for extracting 7z archives [@MickLesk](https://github.com/MickLesk) ([#15919](https://github.com/community-scripts/ProxmoxVE/pull/15919))
- Meilisearch : use dumpless Meilisearch upgrades [@MickLesk](https://github.com/MickLesk) ([#15921](https://github.com/community-scripts/ProxmoxVE/pull/15921))
- #### 🔧 Refactor
- core: Improve GPU detection and mapping logic [@MickLesk](https://github.com/MickLesk) ([#15918](https://github.com/community-scripts/ProxmoxVE/pull/15918))
## 2026-07-19
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- change trek repo to liketrek/TREK [@asylumexp](https://github.com/asylumexp) ([#15893](https://github.com/community-scripts/ProxmoxVE/pull/15893))
- update authentik to 2026.5.5 [@thieneret](https://github.com/thieneret) ([#15855](https://github.com/community-scripts/ProxmoxVE/pull/15855))
- [FIX] BookOrbit: add missing `restore_backup` during update [@vhsdream](https://github.com/vhsdream) ([#15881](https://github.com/community-scripts/ProxmoxVE/pull/15881))
- #### ✨ New Features
- tools.func: centralize deploy tail + trap-based tmpdir cleanup [@MickLesk](https://github.com/MickLesk) ([#15872](https://github.com/community-scripts/ProxmoxVE/pull/15872))
- Update OPNsense from 26.1 to 26.7 [@tdn131](https://github.com/tdn131) ([#15895](https://github.com/community-scripts/ProxmoxVE/pull/15895))
### 💾 Core
- Revert "core: add configurable host CA inheritance during bootstrap" [@MickLesk](https://github.com/MickLesk) ([#15886](https://github.com/community-scripts/ProxmoxVE/pull/15886))
- #### 🐞 Bug Fixes
- fix(build.func): expand glob in SSH key "Scan Folder/Glob" so it can find keys [@TowyTowy](https://github.com/TowyTowy) ([#15873](https://github.com/community-scripts/ProxmoxVE/pull/15873))
## 2026-07-18
### 💾 Core
- #### ✨ New Features
- core: add configurable host CA inheritance during bootstrap [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15840](https://github.com/community-scripts/ProxmoxVE/pull/15840))
- #### 🔧 Refactor
- tools.func: Safe Delete Directorys & Update PYTHON_VERSION with setup_uv [@MickLesk](https://github.com/MickLesk) ([#15870](https://github.com/community-scripts/ProxmoxVE/pull/15870))
### 🧰 Tools
- #### ✨ New Features
- [tools.update-lxcs] feat: optional reporting success/failures to heathchecks.io (or others) [@sir106](https://github.com/sir106) ([#15701](https://github.com/community-scripts/ProxmoxVE/pull/15701))
## 2026-07-17
### 🆕 New Scripts
- Invidious ([#15824](https://github.com/community-scripts/ProxmoxVE/pull/15824))
- OxiCloud ([#15823](https://github.com/community-scripts/ProxmoxVE/pull/15823))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- webtrees: initialize database schema before admin user creation [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15837](https://github.com/community-scripts/ProxmoxVE/pull/15837))
- Fix DocuSeal missing Leptonica deps on install and update [@Copilot](https://github.com/Copilot) ([#15858](https://github.com/community-scripts/ProxmoxVE/pull/15858))
- apache-guacamole: detect installed extensions during update [@TowyTowy](https://github.com/TowyTowy) ([#15841](https://github.com/community-scripts/ProxmoxVE/pull/15841))
- CLIProxyAPI: fix update deleting config.yaml [@austinpilz](https://github.com/austinpilz) ([#15834](https://github.com/community-scripts/ProxmoxVE/pull/15834))
- esphome: install libusb-1.0-0 for ESP-IDF native builds [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15838](https://github.com/community-scripts/ProxmoxVE/pull/15838))
- #### ✨ New Features
- AFFiNE: Bump to 0.27.0 [@MickLesk](https://github.com/MickLesk) ([#15848](https://github.com/community-scripts/ProxmoxVE/pull/15848))
- n8n: unpin / use latest release [@MickLesk](https://github.com/MickLesk) ([#15817](https://github.com/community-scripts/ProxmoxVE/pull/15817))
- Pin Opencloud to v7.3.0 [@vhsdream](https://github.com/vhsdream) ([#15826](https://github.com/community-scripts/ProxmoxVE/pull/15826))
- #### 🔧 Refactor
- SFTPGo: Update APT Repo & Re-Enable Script [@MickLesk](https://github.com/MickLesk) ([#15829](https://github.com/community-scripts/ProxmoxVE/pull/15829))
### 💾 Core
- #### ✨ New Features
- tools.func: enhance rbenv with profile updates / bundle in bashrc [@MickLesk](https://github.com/MickLesk) ([#15822](https://github.com/community-scripts/ProxmoxVE/pull/15822))
- feat(build.func): notify users when already on a pinned script version [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15819](https://github.com/community-scripts/ProxmoxVE/pull/15819))
- #### 💥 Breaking Changes
- MongoDB: Implement kernel version check and patch [@MickLesk](https://github.com/MickLesk) ([#15821](https://github.com/community-scripts/ProxmoxVE/pull/15821))
### 🧰 Tools
- #### ✨ New Features
- update-lxc: autoremove and autoclean after apt full-upgrade [@soupy-boy](https://github.com/soupy-boy) ([#15831](https://github.com/community-scripts/ProxmoxVE/pull/15831))
## 2026-07-16
### 🆕 New Scripts
- Sync-In ([#15812](https://github.com/community-scripts/ProxmoxVE/pull/15812))
- Beaverhabits ([#15813](https://github.com/community-scripts/ProxmoxVE/pull/15813))
- Notediscovery ([#15811](https://github.com/community-scripts/ProxmoxVE/pull/15811))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Pin Immich to v3.0.3 [@vhsdream](https://github.com/vhsdream) ([#15790](https://github.com/community-scripts/ProxmoxVE/pull/15790))
## 2026-07-15
### 🆕 New Scripts
- Nexterm ([#15688](https://github.com/community-scripts/ProxmoxVE/pull/15688))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- 2fauth: minor fixes for 8.0.0 [@MickLesk](https://github.com/MickLesk) ([#15795](https://github.com/community-scripts/ProxmoxVE/pull/15795))
- SnapOtter: refactor update process to prebuild [@MickLesk](https://github.com/MickLesk) ([#15797](https://github.com/community-scripts/ProxmoxVE/pull/15797))
### 💾 Core
- #### 🔧 Refactor
- tools.func: default Docker setup to official repo [@MickLesk](https://github.com/MickLesk) ([#15794](https://github.com/community-scripts/ProxmoxVE/pull/15794))
## 2026-07-14
### 🆕 New Scripts
- Grav ([#15773](https://github.com/community-scripts/ProxmoxVE/pull/15773))
- Yuvomi ([#15772](https://github.com/community-scripts/ProxmoxVE/pull/15772))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Lychee: Preserve uploads and ownership during update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15768](https://github.com/community-scripts/ProxmoxVE/pull/15768))
- Wanderer: Clean deploy and install plugins for v0.20.0 update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15759](https://github.com/community-scripts/ProxmoxVE/pull/15759))
- FileFlows: Handle update API 401, force update, and Node install [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15766](https://github.com/community-scripts/ProxmoxVE/pull/15766))
- BirdNET-Go: Match new upstream release asset naming [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15758](https://github.com/community-scripts/ProxmoxVE/pull/15758))
- [Upstream Fix] Immich: Fix loader priority [@vhsdream](https://github.com/vhsdream) ([#15755](https://github.com/community-scripts/ProxmoxVE/pull/15755))
- #### ✨ New Features
- Bump OpenCloud version to v7.2.2 [@MickLesk](https://github.com/MickLesk) ([#15769](https://github.com/community-scripts/ProxmoxVE/pull/15769))
- Silverbullet: Add optional Runtime API install via Chromium [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15761](https://github.com/community-scripts/ProxmoxVE/pull/15761))
- #### 💥 Breaking Changes
- Pangolin: Bump to 1.20.0 | BREAKING: Switch to PostgreSQL [@MickLesk](https://github.com/MickLesk) ([#15682](https://github.com/community-scripts/ProxmoxVE/pull/15682))
- #### 🔧 Refactor
- AFFiNE: Pin to v0.26.3 [@MickLesk](https://github.com/MickLesk) ([#15782](https://github.com/community-scripts/ProxmoxVE/pull/15782))
## 2026-07-13
### 🆕 New Scripts
- LeafWiki ([#15748](https://github.com/community-scripts/ProxmoxVE/pull/15748))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix(hyperion): keep service running after container reboot [@TowyTowy](https://github.com/TowyTowy) ([#15653](https://github.com/community-scripts/ProxmoxVE/pull/15653))
- Change sign-in URL to admin URL in affine.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15741](https://github.com/community-scripts/ProxmoxVE/pull/15741))
- immich: use actual PostgreSQL version for VectorChord package lookup [@mnavon](https://github.com/mnavon) ([#15705](https://github.com/community-scripts/ProxmoxVE/pull/15705))
- fix storyteller release selection for stable web tags [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15736](https://github.com/community-scripts/ProxmoxVE/pull/15736))
- Docmost: Fix update procedure [@MickLesk](https://github.com/MickLesk) ([#15732](https://github.com/community-scripts/ProxmoxVE/pull/15732))
- fix(shinobi): remove obsolete --unsafe-perm npm flag [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15730](https://github.com/community-scripts/ProxmoxVE/pull/15730))
- #### 💥 Breaking Changes
- reitti: update to v5 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15635](https://github.com/community-scripts/ProxmoxVE/pull/15635))
### 💾 Core
- #### 🐞 Bug Fixes
- fix(build.func): parse script status without jq dependency [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15729](https://github.com/community-scripts/ProxmoxVE/pull/15729))
- #### 🔧 Refactor
- tools.func: some improvements (sql injection / command injection / guard) [@MickLesk](https://github.com/MickLesk) ([#15661](https://github.com/community-scripts/ProxmoxVE/pull/15661))
## 2026-07-12
### 🆕 New Scripts
- AFFiNE ([#15690](https://github.com/community-scripts/ProxmoxVE/pull/15690))
### 🚀 Updated Scripts
- Immich: Bump version to 3.0.2 [@vhsdream](https://github.com/vhsdream) ([#15668](https://github.com/community-scripts/ProxmoxVE/pull/15668))
### ❔ Uncategorized
- fix(immich): correct Python indentation error in ct/immich.sh heredoc patch [@Copilot](https://github.com/Copilot) ([#15723](https://github.com/community-scripts/ProxmoxVE/pull/15723))
## 2026-07-11
### 🆕 New Scripts
- LocalAGI ([#15687](https://github.com/community-scripts/ProxmoxVE/pull/15687))
### 🚀 Updated Scripts
- fix(adventurelog): allow pnpm build scripts so install/update doesn't abort [@TowyTowy](https://github.com/TowyTowy) ([#15681](https://github.com/community-scripts/ProxmoxVE/pull/15681))
- #### 🐞 Bug Fixes
- fix(fileflows): install .NET 10 ASP.NET Core Runtime to match current release [@TowyTowy](https://github.com/TowyTowy) ([#15702](https://github.com/community-scripts/ProxmoxVE/pull/15702))
- Fix spacing on VLAN Input Box in haos-vm.sh [@pumrum](https://github.com/pumrum) ([#15696](https://github.com/community-scripts/ProxmoxVE/pull/15696))
### 💾 Core
- #### ✨ New Features
- [tools.func]: Add function to handle deployment via GitLab release tags [@tremor021](https://github.com/tremor021) ([#15641](https://github.com/community-scripts/ProxmoxVE/pull/15641))
## 2026-07-10
### 🆕 New Scripts
- Squid ([#15605](https://github.com/community-scripts/ProxmoxVE/pull/15605))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Adapt to new artifact filename format for pocket id [@wollew](https://github.com/wollew) ([#15689](https://github.com/community-scripts/ProxmoxVE/pull/15689))
- Fireshare: Fix for install and upgrade to v1.7.3 [@tremor021](https://github.com/tremor021) ([#15673](https://github.com/community-scripts/ProxmoxVE/pull/15673))
- Endurain: Fix update procedure [@tremor021](https://github.com/tremor021) ([#15674](https://github.com/community-scripts/ProxmoxVE/pull/15674))
## 2026-07-09 ## 2026-07-09
### 🚀 Updated Scripts ### 🚀 Updated Scripts
@@ -946,258 +1211,3 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- chore(ct): sync coredns defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15182](https://github.com/community-scripts/ProxmoxVE/pull/15182)) - chore(ct): sync coredns defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15182](https://github.com/community-scripts/ProxmoxVE/pull/15182))
- chore(ct): sync gatus defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15184](https://github.com/community-scripts/ProxmoxVE/pull/15184)) - chore(ct): sync gatus defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15184](https://github.com/community-scripts/ProxmoxVE/pull/15184))
- chore(ct): sync bitmagnet defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15183](https://github.com/community-scripts/ProxmoxVE/pull/15183)) - chore(ct): sync bitmagnet defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15183](https://github.com/community-scripts/ProxmoxVE/pull/15183))
## 2026-06-18
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- flowise: add deps / uv / python 3.11 [@MickLesk](https://github.com/MickLesk) ([#15177](https://github.com/community-scripts/ProxmoxVE/pull/15177))
- #### 💥 Breaking Changes
- refactor: crafty-controller [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15178](https://github.com/community-scripts/ProxmoxVE/pull/15178))
## 2026-06-17
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- kasm: fix release detection [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15151](https://github.com/community-scripts/ProxmoxVE/pull/15151))
- #### ✨ New Features
- trek: update install and upgrade workflow for v3.1.0 [@MickLesk](https://github.com/MickLesk) ([#15165](https://github.com/community-scripts/ProxmoxVE/pull/15165))
- #### 💥 Breaking Changes
- TREK: Pin version [@tremor021](https://github.com/tremor021) ([#15156](https://github.com/community-scripts/ProxmoxVE/pull/15156))
- #### 🔧 Refactor
- chore(paperless-ngx): pin version to prevent v3 update [@tomfrenzel](https://github.com/tomfrenzel) ([#15171](https://github.com/community-scripts/ProxmoxVE/pull/15171))
### 🧰 Tools
- #### 🐞 Bug Fixes
- immich public proxy: replace npm install with npm ci for consistent dependency installation [@MickLesk](https://github.com/MickLesk) ([#15166](https://github.com/community-scripts/ProxmoxVE/pull/15166))
## 2026-06-16
### 🆕 New Scripts
- Feishin ([#15130](https://github.com/community-scripts/ProxmoxVE/pull/15130))
- Kiwix ([#15131](https://github.com/community-scripts/ProxmoxVE/pull/15131))
- Add runtime status guard and deleted script stubs [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15125](https://github.com/community-scripts/ProxmoxVE/pull/15125))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- fix(degoog): use localhost for valkey url [@ethan-hgwr](https://github.com/ethan-hgwr) ([#15149](https://github.com/community-scripts/ProxmoxVE/pull/15149))
- Fix InvoiceShelf install/update Yarn package manager mismatch [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15141](https://github.com/community-scripts/ProxmoxVE/pull/15141))
- fix storyteller install failure with yarn 4 corepack [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15140](https://github.com/community-scripts/ProxmoxVE/pull/15140))
- fix: generate policy-compliant OpenObserve root password [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15137](https://github.com/community-scripts/ProxmoxVE/pull/15137))
## 2026-06-15
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Watcharr: Clean install on update [@tremor021](https://github.com/tremor021) ([#15119](https://github.com/community-scripts/ProxmoxVE/pull/15119))
- Vaultwarden: extend version check for VaultWarden update [@MickLesk](https://github.com/MickLesk) ([#15105](https://github.com/community-scripts/ProxmoxVE/pull/15105))
- #### ✨ New Features
- degoog: add curl-impersonate to script [@MickLesk](https://github.com/MickLesk) ([#15117](https://github.com/community-scripts/ProxmoxVE/pull/15117))
### 💾 Core
- #### ✨ New Features
- tools.func: extend mesa-vulkan-drivers and vulkan-tools to installation for ARC GPU's [@MickLesk](https://github.com/MickLesk) ([#15106](https://github.com/community-scripts/ProxmoxVE/pull/15106))
- #### 🔧 Refactor
- core: improve mirror selection and error handling [@MickLesk](https://github.com/MickLesk) ([#15108](https://github.com/community-scripts/ProxmoxVE/pull/15108))
- core: implement gateway validation for DHCP and static networks [@MickLesk](https://github.com/MickLesk) ([#15107](https://github.com/community-scripts/ProxmoxVE/pull/15107))
## 2026-06-14
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Iinvoiceninja: fix nginx setup assets port [@MickLesk](https://github.com/MickLesk) ([#15090](https://github.com/community-scripts/ProxmoxVE/pull/15090))
- CheckMK: remove stale backup site before creating new backup during update [@MickLesk](https://github.com/MickLesk) ([#15088](https://github.com/community-scripts/ProxmoxVE/pull/15088))
- #### 🔧 Refactor
- Refactor: Implement backup functions for scripts C-D [@tremor021](https://github.com/tremor021) ([#15096](https://github.com/community-scripts/ProxmoxVE/pull/15096))
## 2026-06-13
### 🆕 New Scripts
- BookOrbit ([#15080](https://github.com/community-scripts/ProxmoxVE/pull/15080))
### 🚀 Updated Scripts
- Update authentik version to 2026.5.3 [@thieneret](https://github.com/thieneret) ([#15093](https://github.com/community-scripts/ProxmoxVE/pull/15093))
- #### 🐞 Bug Fixes
- Immich: Update image-processing libraries [@vhsdream](https://github.com/vhsdream) ([#15082](https://github.com/community-scripts/ProxmoxVE/pull/15082))
- HomeBox: Support v0.26.0 [@tomfrenzel](https://github.com/tomfrenzel) ([#15086](https://github.com/community-scripts/ProxmoxVE/pull/15086))
- #### 🔧 Refactor
- Refactor: Implement backup functions for scripts A-B [@tremor021](https://github.com/tremor021) ([#15075](https://github.com/community-scripts/ProxmoxVE/pull/15075))
## 2026-06-12
### 🆕 New Scripts
- Twenty ([#15047](https://github.com/community-scripts/ProxmoxVE/pull/15047))
- Alpine-Cinny ([#15044](https://github.com/community-scripts/ProxmoxVE/pull/15044))
### 💾 Core
- #### ✨ New Features
- [core] Implement backup and restore functions [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15067](https://github.com/community-scripts/ProxmoxVE/pull/15067))
## 2026-06-11
### 🆕 New Scripts
- Clickhouse ([#15045](https://github.com/community-scripts/ProxmoxVE/pull/15045))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Manyfold: add new dependency [@MickLesk](https://github.com/MickLesk) ([#15040](https://github.com/community-scripts/ProxmoxVE/pull/15040))
- OpenArchiver: switch Rebuild Function [@MickLesk](https://github.com/MickLesk) ([#15042](https://github.com/community-scripts/ProxmoxVE/pull/15042))
- CLIProxyAPI: Save management password to creds file [@tremor021](https://github.com/tremor021) ([#15051](https://github.com/community-scripts/ProxmoxVE/pull/15051))
- Jotty: Fix wrong path test in config restore [@vhsdream](https://github.com/vhsdream) ([#15038](https://github.com/community-scripts/ProxmoxVE/pull/15038))
- Fix for cross-seed after node upgrade [@TorinFrancis](https://github.com/TorinFrancis) ([#15025](https://github.com/community-scripts/ProxmoxVE/pull/15025))
- #### 🔧 Refactor
- Alpine-Nextcloud: Upgrade PHP and dependencies in installation script [@MickLesk](https://github.com/MickLesk) ([#15039](https://github.com/community-scripts/ProxmoxVE/pull/15039))
- [arm64] porting stage 1: set script arm64 statuses to yes [@asylumexp](https://github.com/asylumexp) ([#15052](https://github.com/community-scripts/ProxmoxVE/pull/15052))
### 💾 Core
- #### ✨ New Features
- misc scripts: add support for arm64 [@asylumexp](https://github.com/asylumexp) ([#12639](https://github.com/community-scripts/ProxmoxVE/pull/12639))
- #### 🔧 Refactor
- [arm64] remove logic for custom debian arm64 template [@asylumexp](https://github.com/asylumexp) ([#15050](https://github.com/community-scripts/ProxmoxVE/pull/15050))
### 📚 Documentation
- (github): Revise script request template [@MickLesk](https://github.com/MickLesk) ([#15058](https://github.com/community-scripts/ProxmoxVE/pull/15058))
## 2026-06-10
### 🆕 New Scripts
- Baserow ([#14968](https://github.com/community-scripts/ProxmoxVE/pull/14968))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Koillection: Fix update procedure [@tremor021](https://github.com/tremor021) ([#15033](https://github.com/community-scripts/ProxmoxVE/pull/15033))
## 2026-06-09
### 🆕 New Scripts
- paperclip ([#14990](https://github.com/community-scripts/ProxmoxVE/pull/14990))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- endurain: Install pytz package during backend setup [@MickLesk](https://github.com/MickLesk) ([#15014](https://github.com/community-scripts/ProxmoxVE/pull/15014))
- #### 🔧 Refactor
- Refactor: Proxmox Backup Server - use deb822 [@MickLesk](https://github.com/MickLesk) ([#15013](https://github.com/community-scripts/ProxmoxVE/pull/15013))
## 2026-06-08
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- security: Fix HTTP to HTTPS for all package and repository downloads [@MickLesk](https://github.com/MickLesk) ([#15009](https://github.com/community-scripts/ProxmoxVE/pull/15009))
- homelable: preserve MCP server config across updates [@ferr079](https://github.com/ferr079) ([#14996](https://github.com/community-scripts/ProxmoxVE/pull/14996))
- changedetection: migrate Python install to uv venv [@ferr079](https://github.com/ferr079) ([#14995](https://github.com/community-scripts/ProxmoxVE/pull/14995))
- #### 🔧 Refactor
- Update Flowwiseai to node 24 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#14999](https://github.com/community-scripts/ProxmoxVE/pull/14999))
### 🧰 Tools
- #### 🐞 Bug Fixes
- security: Fix MITM RCE vulnerability in microcode scripts (CVE) [@MickLesk](https://github.com/MickLesk) ([#15007](https://github.com/community-scripts/ProxmoxVE/pull/15007))
## 2026-06-07
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: use actual installed PostgreSQL version for vchord package [@MickLesk](https://github.com/MickLesk) ([#14989](https://github.com/community-scripts/ProxmoxVE/pull/14989))
- #### 🔧 Refactor
- Navidrome: remove genereic filebrowser addon setup [@MickLesk](https://github.com/MickLesk) ([#14991](https://github.com/community-scripts/ProxmoxVE/pull/14991))
## 2026-06-06
### 🆕 New Scripts
- Spliit ([#14966](https://github.com/community-scripts/ProxmoxVE/pull/14966))
- Tolgee ([#14965](https://github.com/community-scripts/ProxmoxVE/pull/14965))
- XYOps ([#14967](https://github.com/community-scripts/ProxmoxVE/pull/14967))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Photoprism: Allow env variables with spaces [@Badintral](https://github.com/Badintral) ([#14969](https://github.com/community-scripts/ProxmoxVE/pull/14969))
## 2026-06-05
### 🆕 New Scripts
- MatterJS-Server ([#14951](https://github.com/community-scripts/ProxmoxVE/pull/14951))
- CyberChef ([#14952](https://github.com/community-scripts/ProxmoxVE/pull/14952))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Jackett: Create missing .env file [@tremor021](https://github.com/tremor021) ([#14959](https://github.com/community-scripts/ProxmoxVE/pull/14959))
- OpenThread-BR: use systemd instead of init.d [@tomfrenzel](https://github.com/tomfrenzel) ([#14942](https://github.com/community-scripts/ProxmoxVE/pull/14942))
- #### ✨ New Features
- AMD IGPU support [@Learath](https://github.com/Learath) ([#14944](https://github.com/community-scripts/ProxmoxVE/pull/14944))
- #### 💥 Breaking Changes
- update authentik to 2026.5.2 [@thieneret](https://github.com/thieneret) ([#14846](https://github.com/community-scripts/ProxmoxVE/pull/14846))
+1
View File
@@ -60,6 +60,7 @@ function update_script() {
php artisan 2fauth:install php artisan 2fauth:install
chown -R www-data: /opt/2fauth chown -R www-data: /opt/2fauth
chmod -R 755 /opt/2fauth chmod -R 755 /opt/2fauth
$STD php artisan 2fauth:fix-passport-key-permissions
$STD systemctl restart php8.4-fpm $STD systemctl restart php8.4-fpm
$STD systemctl restart nginx $STD systemctl restart nginx
msg_ok "Configured 2FAuth" msg_ok "Configured 2FAuth"
+1
View File
@@ -60,6 +60,7 @@ function update_script() {
$STD .venv/bin/python -m manage migrate $STD .venv/bin/python -m manage migrate
cd /opt/adventurelog/frontend cd /opt/adventurelog/frontend
grep -q "^dangerouslyAllowAllBuilds:" ./pnpm-workspace.yaml 2>/dev/null || echo "dangerouslyAllowAllBuilds: true" >>./pnpm-workspace.yaml
$STD pnpm i $STD pnpm i
$STD pnpm build $STD pnpm build
msg_ok "Updated AdventureLog" msg_ok "Updated AdventureLog"
+136
View File
@@ -0,0 +1,136 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/toeverything/AFFiNE
APP="AFFiNE"
var_tags="${var_tags:-knowledge;notes;workspace}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-8192}"
var_disk="${var_disk:-20}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-no}"
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/affine ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE="v0.27.2"
if check_for_gh_release "affine_app" "toeverything/AFFiNE" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
msg_info "Stopping Services"
systemctl stop affine-web affine-worker
msg_ok "Stopped Services"
ensure_dependencies cmake
create_backup /opt/affine/.env /root/.affine/config /root/.affine/storage
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "affine_app" "toeverything/AFFiNE" "tarball" "${RELEASE}" "/opt/affine"
restore_backup
if [[ ! -f /opt/affine/.env ]]; then
msg_error "/opt/affine/.env is missing (lost by an earlier update). Recreate it before retrying — see the AFFiNE install script for the expected variables."
exit 1
fi
msg_info "Rebuilding Application (Patience ~25 mins, don't close the console!)"
cd /opt/affine
source /root/.profile
export PATH="/root/.cargo/bin:/root/.rbenv/shims:$PATH"
set -a && source /opt/affine/.env && set +a
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
export VITE_CORE_COMMIT_SHA=$(cat ~/.affine_app)
# Initialize git repo (required for build process)
export HUSKY=0
$STD git init -q
$STD git config user.email "build@local"
$STD git config user.name "Build"
$STD git add -A
$STD git commit -q -m "update" --no-verify --allow-empty
# Force Turbo to run sequentially
mkdir -p /opt/affine/.turbo
cat <<TURBO >/opt/affine/.turbo/config.json
{
"concurrency": 1
}
TURBO
$STD corepack enable
$STD corepack prepare yarn@4.13.0 --activate
$STD yarn config set enableTelemetry 0
export NODE_OPTIONS="--max-old-space-size=2048"
$STD yarn install
$STD npm install -g typescript
$STD yarn affine @affine/native build
$STD yarn affine @affine/server-native build
# Create architecture-specific symlinks
ln -sf /opt/affine/packages/backend/native/server-native.node \
/opt/affine/packages/backend/native/server-native.x64.node
ln -sf /opt/affine/packages/backend/native/server-native.node \
/opt/affine/packages/backend/native/server-native.arm64.node
ln -sf /opt/affine/packages/backend/native/server-native.node \
/opt/affine/packages/backend/native/server-native.armv7.node
$STD yarn affine init
$STD yarn affine build -p @affine/reader
$STD yarn affine build -p @affine/server
export NODE_OPTIONS="--max-old-space-size=4096"
$STD yarn affine build -p @affine/web
$STD yarn affine build -p @affine/admin
# Copy web assets
mkdir -p /opt/affine/packages/backend/server/static
cp -r /opt/affine/packages/frontend/apps/web/dist/* /opt/affine/packages/backend/server/static/
mkdir -p /opt/affine/packages/backend/server/static/admin
cp -r /opt/affine/packages/frontend/admin/dist/* /opt/affine/packages/backend/server/static/admin/
# Mobile manifest placeholder
mkdir -p /opt/affine/packages/backend/server/static/mobile
echo '{"publicPath":"/","js":[],"css":[],"gitHash":"","description":""}' \
>/opt/affine/packages/backend/server/static/mobile/assets-manifest.json
# Run migrations
cd /opt/affine/packages/backend/server
set -a && source /opt/affine/.env && set +a
$STD node ./scripts/self-host-predeploy.js
msg_info "Starting Services"
systemctl start affine-web affine-worker
msg_ok "Started Services"
msg_ok "Updated Successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
echo -e "${GATEWAY}${BGN}http://${IP}:3010/admin${CL}"
+2 -7
View File
@@ -30,16 +30,11 @@ function update_script() {
fi fi
if check_for_gh_release "cinny" "cinnyapp/cinny"; then if check_for_gh_release "cinny" "cinnyapp/cinny"; then
msg_info "Backing up Configuration" create_backup /opt/cinny/config.json
cp /opt/cinny/config.json /opt/cinny_config.json.bak
msg_ok "Backed up Configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cinny" "cinnyapp/cinny" "prebuild" "latest" "/opt/cinny" "cinny-*.tar.gz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cinny" "cinnyapp/cinny" "prebuild" "latest" "/opt/cinny" "cinny-*.tar.gz"
msg_info "Restoring Configuration" restore_backup
cp /opt/cinny_config.json.bak /opt/cinny/config.json
rm -f /opt/cinny_config.json.bak
msg_ok "Restored Configuration"
msg_info "Restarting nginx" msg_info "Restarting nginx"
$STD rc-service nginx restart $STD rc-service nginx restart
+5 -5
View File
@@ -146,7 +146,7 @@ function update_script() {
# Check and upgrade optional extensions # Check and upgrade optional extensions
# TOTP Extension # TOTP Extension
if [[ -f /etc/guacamole/extensions/guacamole-auth-totp-*.jar ]]; then if compgen -G "/etc/guacamole/extensions/guacamole-auth-totp-*.jar" >/dev/null; then
msg_info "Updating TOTP Extension" msg_info "Updating TOTP Extension"
rm -f /etc/guacamole/extensions/guacamole-auth-totp-*.jar rm -f /etc/guacamole/extensions/guacamole-auth-totp-*.jar
curl_download "/tmp/guacamole-auth-totp.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-totp-${LATEST_SERVER}.tar.gz" curl_download "/tmp/guacamole-auth-totp.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-totp-${LATEST_SERVER}.tar.gz"
@@ -158,7 +158,7 @@ function update_script() {
fi fi
# DUO Extension # DUO Extension
if [[ -f /etc/guacamole/extensions/guacamole-auth-duo-*.jar ]]; then if compgen -G "/etc/guacamole/extensions/guacamole-auth-duo-*.jar" >/dev/null; then
msg_info "Updating DUO Extension" msg_info "Updating DUO Extension"
rm -f /etc/guacamole/extensions/guacamole-auth-duo-*.jar rm -f /etc/guacamole/extensions/guacamole-auth-duo-*.jar
curl_download "/tmp/guacamole-auth-duo.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-duo-${LATEST_SERVER}.tar.gz" curl_download "/tmp/guacamole-auth-duo.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-duo-${LATEST_SERVER}.tar.gz"
@@ -170,7 +170,7 @@ function update_script() {
fi fi
# LDAP Extension # LDAP Extension
if [[ -f /etc/guacamole/extensions/guacamole-auth-ldap-*.jar ]]; then if compgen -G "/etc/guacamole/extensions/guacamole-auth-ldap-*.jar" >/dev/null; then
msg_info "Updating LDAP Extension" msg_info "Updating LDAP Extension"
rm -f /etc/guacamole/extensions/guacamole-auth-ldap-*.jar rm -f /etc/guacamole/extensions/guacamole-auth-ldap-*.jar
curl_download "/tmp/guacamole-auth-ldap.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-ldap-${LATEST_SERVER}.tar.gz" curl_download "/tmp/guacamole-auth-ldap.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-ldap-${LATEST_SERVER}.tar.gz"
@@ -182,7 +182,7 @@ function update_script() {
fi fi
# Quick Connect Extension # Quick Connect Extension
if [[ -f /etc/guacamole/extensions/guacamole-auth-quickconnect-*.jar ]]; then if compgen -G "/etc/guacamole/extensions/guacamole-auth-quickconnect-*.jar" >/dev/null; then
msg_info "Updating Quick Connect Extension" msg_info "Updating Quick Connect Extension"
rm -f /etc/guacamole/extensions/guacamole-auth-quickconnect-*.jar rm -f /etc/guacamole/extensions/guacamole-auth-quickconnect-*.jar
curl_download "/tmp/guacamole-auth-quickconnect.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-quickconnect-${LATEST_SERVER}.tar.gz" curl_download "/tmp/guacamole-auth-quickconnect.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-quickconnect-${LATEST_SERVER}.tar.gz"
@@ -194,7 +194,7 @@ function update_script() {
fi fi
# History Recording Storage Extension # History Recording Storage Extension
if [[ -f /etc/guacamole/extensions/guacamole-history-recording-storage-*.jar ]]; then if compgen -G "/etc/guacamole/extensions/guacamole-history-recording-storage-*.jar" >/dev/null; then
msg_info "Updating History Recording Storage Extension" msg_info "Updating History Recording Storage Extension"
rm -f /etc/guacamole/extensions/guacamole-history-recording-storage-*.jar rm -f /etc/guacamole/extensions/guacamole-history-recording-storage-*.jar
curl_download "/tmp/guacamole-history-recording-storage.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-history-recording-storage-${LATEST_SERVER}.tar.gz" curl_download "/tmp/guacamole-history-recording-storage.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-history-recording-storage-${LATEST_SERVER}.tar.gz"
+4 -3
View File
@@ -38,13 +38,14 @@ function update_script() {
NODE_VERSION="24" setup_nodejs NODE_VERSION="24" setup_nodejs
setup_go setup_go
UV_PYTHON_INSTALL_DIR="/usr/local/bin" PYTHON_VERSION="3.14.3" setup_uv $STD uv cache clean
UV_PYTHON_INSTALL_DIR="/usr/local/bin" PYTHON_VERSION="3.14.6" setup_uv
RUST_PROFILE="minimal" RUST_TOOLCHAIN="stable" setup_rust RUST_PROFILE="minimal" RUST_TOOLCHAIN="stable" setup_rust
setup_yq setup_yq
AUTHENTIK_VERSION="version/2026.5.3" AUTHENTIK_VERSION="version/2026.5.5"
# Source: https://github.com/goauthentik/fips/blob/main/Makefile#L26 # Source: https://github.com/goauthentik/fips/blob/main/Makefile#L26
XMLSEC_VERSION="1.3.11" XMLSEC_VERSION="1.3.12"
if check_for_gh_release "geoipupdate" "maxmind/geoipupdate"; then if check_for_gh_release "geoipupdate" "maxmind/geoipupdate"; then
fetch_and_deploy_gh_release "geoipupdate" "maxmind/geoipupdate" "binary" fetch_and_deploy_gh_release "geoipupdate" "maxmind/geoipupdate" "binary"
+64
View File
@@ -0,0 +1,64 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/daya0576/beaverhabits
APP="BeaverHabits"
var_tags="${var_tags:-habits;tracking;productivity}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
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/beaverhabits ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "beaverhabits" "daya0576/beaverhabits"; then
msg_info "Stopping Service"
systemctl stop beaverhabits
msg_ok "Stopped Service"
create_backup /opt/beaverhabits/.user
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "beaverhabits" "daya0576/beaverhabits" "tarball"
msg_info "Syncing Dependencies"
cd /opt/beaverhabits
$STD uv sync --no-dev
msg_ok "Synced Dependencies"
restore_backup
msg_info "Starting Service"
systemctl start beaverhabits
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 "${GATEWAY}${BGN}http://${IP}:8080/register{CL}"
+1 -1
View File
@@ -37,7 +37,7 @@ function update_script() {
systemctl stop birdnet systemctl stop birdnet
msg_ok "Stopped Service" msg_ok "Stopped Service"
fetch_and_deploy_gh_release "birdnet" "tphakala/birdnet-go" "prebuild" "latest" "/opt/birdnet" "birdnet-go-linux-$(arch_resolve).tar.gz" fetch_and_deploy_gh_release "birdnet" "tphakala/birdnet-go" "prebuild" "latest" "/opt/birdnet" "birdnet-go-linux-$(arch_resolve)*.tar.gz"
msg_info "Deploying Binary" msg_info "Deploying Binary"
cp /opt/birdnet/birdnet-go /usr/local/bin/birdnet-go cp /opt/birdnet/birdnet-go /usr/local/bin/birdnet-go
+1
View File
@@ -53,6 +53,7 @@ function update_script() {
mkdir -p /opt/bookorbit/server/migrations mkdir -p /opt/bookorbit/server/migrations
cp -r /opt/bookorbit/server/src/db/migrations/. /opt/bookorbit/server/migrations/ cp -r /opt/bookorbit/server/src/db/migrations/. /opt/bookorbit/server/migrations/
chmod +x /opt/bookorbit/server/bin/kepubify/* chmod +x /opt/bookorbit/server/bin/kepubify/*
restore_backup
APP_VER=$(cat ~/.bookorbit) APP_VER=$(cat ~/.bookorbit)
sed -i "s/^APP_VERSION=.*/APP_VERSION=v$APP_VER/" /opt/bookorbit/.env sed -i "s/^APP_VERSION=.*/APP_VERSION=v$APP_VER/" /opt/bookorbit/.env
msg_ok "Rebuilt Application" msg_ok "Rebuilt Application"
+4
View File
@@ -36,8 +36,12 @@ function update_script() {
systemctl stop cliproxyapi systemctl stop cliproxyapi
msg_ok "Stopped CLIProxyAPI" msg_ok "Stopped CLIProxyAPI"
create_backup /opt/cliproxyapi/config.yaml
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cliproxyapi" "router-for-me/CLIProxyAPI" "prebuild" "latest" "/opt/cliproxyapi" "CLIProxyAPI_*_linux_$(arch_resolve "amd64" "aarch64").tar.gz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cliproxyapi" "router-for-me/CLIProxyAPI" "prebuild" "latest" "/opt/cliproxyapi" "CLIProxyAPI_*_linux_$(arch_resolve "amd64" "aarch64").tar.gz"
restore_backup
msg_info "Starting CLIProxyAPI" msg_info "Starting CLIProxyAPI"
systemctl start cliproxyapi systemctl start cliproxyapi
msg_ok "Started CLIProxyAPI" msg_ok "Started CLIProxyAPI"
+3 -25
View File
@@ -116,21 +116,10 @@ EOF
msg_info "Creating Backup" msg_info "Creating Backup"
BACKUP_FILE="/opt/dispatcharr_backup_$(date +%F_%H-%M-%S).tar.gz" BACKUP_FILE="/opt/dispatcharr_backup_$(date +%F_%H-%M-%S).tar.gz"
if [[ -f /opt/dispatcharr/.env ]]; then
cp /opt/dispatcharr/.env /tmp/dispatcharr.env.backup
fi
if [[ -f /opt/dispatcharr/start-gunicorn.sh ]]; then if [[ -f /opt/dispatcharr/start-gunicorn.sh ]]; then
rm -f /opt/dispatcharr/start-gunicorn.sh rm -f /opt/dispatcharr/start-gunicorn.sh
fi fi
if [[ -f /opt/dispatcharr/start-celery.sh ]]; then create_backup /opt/dispatcharr/.env /opt/dispatcharr/start-celery.sh /opt/dispatcharr/start-celerybeat.sh /opt/dispatcharr/start-daphne.sh
cp /opt/dispatcharr/start-celery.sh /tmp/start-celery.sh.backup
fi
if [[ -f /opt/dispatcharr/start-celerybeat.sh ]]; then
cp /opt/dispatcharr/start-celerybeat.sh /tmp/start-celerybeat.sh.backup
fi
if [[ -f /opt/dispatcharr/start-daphne.sh ]]; then
cp /opt/dispatcharr/start-daphne.sh /tmp/start-daphne.sh.backup
fi
if [[ -f /opt/dispatcharr/.env ]]; then if [[ -f /opt/dispatcharr/.env ]]; then
set -o allexport set -o allexport
source /opt/dispatcharr/.env source /opt/dispatcharr/.env
@@ -145,20 +134,9 @@ EOF
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr" "tarball"
msg_info "Updating Dispatcharr Backend" restore_backup
if [[ -f /tmp/dispatcharr.env.backup ]]; then
mv /tmp/dispatcharr.env.backup /opt/dispatcharr/.env
fi
if [[ -f /tmp/start-celery.sh.backup ]]; then
mv /tmp/start-celery.sh.backup /opt/dispatcharr/start-celery.sh
fi
if [[ -f /tmp/start-celerybeat.sh.backup ]]; then
mv /tmp/start-celerybeat.sh.backup /opt/dispatcharr/start-celerybeat.sh
fi
if [[ -f /tmp/start-daphne.sh.backup ]]; then
mv /tmp/start-daphne.sh.backup /opt/dispatcharr/start-daphne.sh
fi
msg_info "Updating Dispatcharr Backend"
if ! grep -q "DJANGO_SECRET_KEY" /opt/dispatcharr/.env; then if ! grep -q "DJANGO_SECRET_KEY" /opt/dispatcharr/.env; then
DJANGO_SECRET=$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9' | cut -c1-50) DJANGO_SECRET=$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9' | cut -c1-50)
echo "DJANGO_SECRET_KEY=$DJANGO_SECRET" >>/opt/dispatcharr/.env echo "DJANGO_SECRET_KEY=$DJANGO_SECRET" >>/opt/dispatcharr/.env
+3 -2
View File
@@ -39,7 +39,6 @@ function update_script() {
create_backup /opt/docmost/.env \ create_backup /opt/docmost/.env \
/opt/docmost/data /opt/docmost/data
fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball" fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball"
restore_backup restore_backup
@@ -54,9 +53,11 @@ function update_script() {
sed -i '/^@Module({$/i @Global()' /opt/docmost/apps/server/src/core/core.module.ts sed -i '/^@Module({$/i @Global()' /opt/docmost/apps/server/src/core/core.module.ts
fi fi
msg_info "Configuring Docmost"
cd /opt/docmost
$STD pnpm install --force $STD pnpm install --force
$STD pnpm build $STD pnpm build
msg_ok "Updated ${APP}" msg_ok "Configured Docmost"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start docmost systemctl start docmost
+2
View File
@@ -35,6 +35,8 @@ function update_script() {
systemctl stop docuseal docuseal-sidekiq systemctl stop docuseal docuseal-sidekiq
msg_ok "Stopped Services" msg_ok "Stopped Services"
ensure_dependencies libleptonica-dev libleptonica6
create_backup /opt/docuseal/.env \ create_backup /opt/docuseal/.env \
/opt/docuseal/data /opt/docuseal/data
+4 -13
View File
@@ -34,31 +34,22 @@ function update_script() {
systemctl stop endurain systemctl stop endurain
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Creating Backup" create_backup /opt/endurain/.env /opt/endurain/frontend/dist/env.js
cp /opt/endurain/.env /opt/endurain.env
cp /opt/endurain/frontend/dist/env.js /opt/endurain.env.js
msg_ok "Created Backup"
CLEAN_INSTALL=1 fetch_and_deploy_codeberg_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain" CLEAN_INSTALL=1 fetch_and_deploy_codeberg_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
msg_info "Preparing Update" msg_info "Preparing Update"
cd /opt/endurain cd /opt/endurain
rm -rf \ rm -rf /opt/endurain/{docs,example.env,screenshot_01.png} /opt/endurain/docker* /opt/endurain/*.yml
/opt/endurain/{docs,example.env,screenshot_01.png} \
/opt/endurain/docker* \
/opt/endurain/*.yml
cp /opt/endurain.env /opt/endurain/.env
rm /opt/endurain.env
msg_ok "Prepared Update" msg_ok "Prepared Update"
msg_info "Updating Frontend" msg_info "Updating Frontend"
cd /opt/endurain/frontend cd /opt/endurain/frontend
$STD npm ci $STD npm ci
$STD npm run build $STD npm run build
cp /opt/endurain.env.js /opt/endurain/frontend/dist/env.js
rm /opt/endurain.env.js
msg_ok "Updated Frontend" msg_ok "Updated Frontend"
restore_backup
msg_info "Updating Backend" msg_info "Updating Backend"
cd /opt/endurain/backend cd /opt/endurain/backend
UV_VERSION=$(grep -Po 'required-version\s*=\s*"\K[^"]+' pyproject.toml 2>/dev/null || echo "0.11.18") UV_VERSION=$(grep -Po 'required-version\s*=\s*"\K[^"]+' pyproject.toml 2>/dev/null || echo "0.11.18")
+1
View File
@@ -28,6 +28,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
ensure_dependencies libusb-1.0-0
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop esphome-device-builder 2>/dev/null || true systemctl stop esphome-device-builder 2>/dev/null || true
+73 -18
View File
@@ -31,28 +31,83 @@ function update_script() {
exit exit
fi fi
update_available=$(curl -fsSL -X 'GET' "http://localhost:19200/api/status/update-available" -H 'accept: application/json' | jq .UpdateAvailable) local proceed=false
if [[ "${update_available}" == "true" ]]; then
msg_info "Stopping Service"
systemctl --all stop 'fileflows*'
msg_info "Stopped Service"
msg_info "Creating Backup" if systemctl list-unit-files 'fileflows.service' --no-legend 2>/dev/null | grep -q '^fileflows\.service'; then
ls /opt/*.tar.gz &>/dev/null && rm -f /opt/*.tar.gz tmp=$(mktemp)
backup_filename="/opt/${APP}_backup_$(date +%F).tar.gz" http_code=$(curl -sSL -X 'GET' "http://localhost:19200/api/status/update-available" -H 'accept: application/json' -o "$tmp" -w '%{http_code}' 2>/dev/null) || http_code="000"
tar -czf "$backup_filename" -C /opt/fileflows Data if [[ "$http_code" == "200" ]]; then
msg_ok "Backup Created" update_available=$(jq -r '.UpdateAvailable // false' "$tmp" 2>/dev/null)
rm -f "$tmp"
fetch_and_deploy_from_url "https://fileflows.com/downloads/zip" "/opt/fileflows" if [[ "${update_available}" == "true" ]]; then
proceed=true
msg_info "Starting Service" else
systemctl --all start 'fileflows*' msg_ok "No update required. ${APP} is already at latest version"
msg_ok "Started Service" exit
msg_ok "Updated successfully!" fi
else
rm -f "$tmp"
if [[ "$http_code" == "401" ]]; then
msg_warn "Could not check for updates: API returned 401 (security may be enabled)."
else
msg_warn "Could not check for updates: API unreachable (HTTP ${http_code})."
fi
if [[ "${FORCE_UPDATE:-}" == "1" ]]; then
proceed=true
else
read -r -p "${TAB3}Force update without version check? [y/N]: " CONFIRM
if [[ "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
proceed=true
else
msg_error "Update aborted."
exit
fi
fi
fi
else else
msg_ok "No update required. ${APP} is already at latest version" proceed=true
fi fi
if [[ "$proceed" != "true" ]]; then
exit
fi
msg_info "Stopping Service"
systemctl --all stop 'fileflows*'
msg_ok "Stopped Service"
msg_info "Creating Backup"
ls /opt/*.tar.gz &>/dev/null && rm -f /opt/*.tar.gz
backup_filename="/opt/${APP}_backup_$(date +%F).tar.gz"
tar -czf "$backup_filename" -C /opt/fileflows Data
msg_ok "Backup Created"
msg_info "Ensuring ASP.NET Core Runtime"
if [[ "$(arch_resolve)" == "arm64" ]]; then
if [[ ! -x /usr/lib/dotnet10/dotnet ]]; then
curl -fsSL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh
$STD bash /tmp/dotnet-install.sh --channel 10.0 --runtime aspnetcore --install-dir /usr/lib/dotnet10
ln -sf /usr/lib/dotnet10/dotnet /usr/bin/dotnet
rm -f /tmp/dotnet-install.sh
fi
elif ! is_package_installed "aspnetcore-runtime-10.0"; then
$STD apt remove -y aspnetcore-runtime-8.0 aspnetcore-runtime-9.0 2>/dev/null || true
setup_deb822_repo \
"microsoft" \
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
"https://packages.microsoft.com/debian/13/prod/" \
"trixie"
$STD apt install -y aspnetcore-runtime-10.0
fi
msg_ok "Ensured ASP.NET Core Runtime"
fetch_and_deploy_from_url "https://fileflows.com/downloads/zip" "/opt/fileflows"
msg_info "Starting Service"
systemctl --all start 'fileflows*'
msg_ok "Started Service"
msg_ok "Updated successfully!"
exit exit
} }
+14 -7
View File
@@ -35,12 +35,22 @@ function update_script() {
systemctl stop fireshare systemctl stop fireshare
msg_ok "Stopped Service" msg_ok "Stopped Service"
mv /opt/fireshare/fireshare.env /opt create_backup /opt/fireshare/fireshare.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "fireshare" "ShaneIsrael/fireshare" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "fireshare" "ShaneIsrael/fireshare" "tarball"
mv /opt/fireshare.env /opt/fireshare restore_backup
rm -f /usr/local/bin/fireshare rm -f /usr/local/bin/fireshare
msg_info "Updating Fireshare" if ! grep -q "__FIRESHARE_PORT__" /etc/nginx/nginx.conf; then
cp /opt/fireshare/app/nginx/prod.conf /etc/nginx/nginx.conf
sed -i 's|root /processed/|root /opt/fireshare-processed/|g' /etc/nginx/nginx.conf
sed -i 's/^user[[:space:]]\+nginx;/user root;/' /etc/nginx/nginx.conf
sed -i 's|root[[:space:]]\+/app/build;|root /opt/fireshare/app/client/build;|' /etc/nginx/nginx.conf
sed -i 's/__FIRESHARE_PORT__/80/g' /etc/nginx/nginx.conf
cp /opt/fireshare/app/nginx/error.html /etc/nginx/
cp /opt/fireshare/app/nginx/api_unavailable.html /etc/nginx/
fi
msg_info "Configuring Fireshare"
cd /opt/fireshare cd /opt/fireshare
$STD uv venv --clear $STD uv venv --clear
$STD .venv/bin/python -m ensurepip --upgrade $STD .venv/bin/python -m ensurepip --upgrade
@@ -53,13 +63,10 @@ function update_script() {
export VIDEO_DIRECTORY=/opt/fireshare-videos export VIDEO_DIRECTORY=/opt/fireshare-videos
export PROCESSED_DIRECTORY=/opt/fireshare-processed export PROCESSED_DIRECTORY=/opt/fireshare-processed
$STD uv run flask db upgrade $STD uv run flask db upgrade
msg_info "Building Fireshare Client"
cd /opt/fireshare/app/client cd /opt/fireshare/app/client
$STD npm install $STD npm install
$STD npm run build $STD npm run build
msg_ok "Built Fireshare Client" msg_ok "Configured Fireshare"
msg_ok "Updated Fireshare"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start fireshare systemctl start fireshare
+2 -12
View File
@@ -35,21 +35,11 @@ function update_script() {
systemctl stop nginx systemctl stop nginx
msg_ok "Stopped Service" msg_ok "Stopped Service"
if [[ -f /opt/fladder/assets/config/config.json ]]; then create_backup /opt/fladder/assets/config/config.json
msg_info "Backing up configuration"
cp /opt/fladder/assets/config/config.json /tmp/fladder_config.json.bak
msg_ok "Configuration backed up"
fi
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Fladder" "DonutWare/Fladder" "prebuild" "latest" "/opt/fladder" "Fladder-Web-*.zip" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Fladder" "DonutWare/Fladder" "prebuild" "latest" "/opt/fladder" "Fladder-Web-*.zip"
if [[ -f /tmp/fladder_config.json.bak ]]; then restore_backup
msg_info "Restoring configuration"
mkdir -p /opt/fladder/assets/config
cp /tmp/fladder_config.json.bak /opt/fladder/assets/config/config.json
rm -f /tmp/fladder_config.json.bak
msg_ok "Configuration restored"
fi
msg_info "Starting Service" msg_info "Starting Service"
systemctl start nginx systemctl start nginx
+4 -12
View File
@@ -34,12 +34,11 @@ function update_script() {
systemctl stop flatnotes systemctl stop flatnotes
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Configuration and Data" create_backup /opt/flatnotes/.env /opt/flatnotes/data
cp /opt/flatnotes/.env /opt/flatnotes.env
cp -r /opt/flatnotes/data /opt/flatnotes_data_backup
msg_ok "Backed up Configuration and Data"
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes" "tarball"
restore_backup
msg_info "Updating Flatnotes" msg_info "Updating Flatnotes"
cd /opt/flatnotes/client cd /opt/flatnotes/client
@@ -52,13 +51,6 @@ function update_script() {
$STD /usr/local/bin/uv sync $STD /usr/local/bin/uv sync
msg_ok "Updated Flatnotes" msg_ok "Updated Flatnotes"
msg_info "Restoring Configuration and Data"
cp /opt/flatnotes.env /opt/flatnotes/.env
cp -r /opt/flatnotes_data_backup/. /opt/flatnotes/data
rm -f /opt/flatnotes.env
rm -r /opt/flatnotes_data_backup
msg_ok "Restored Configuration and Data"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start flatnotes systemctl start flatnotes
msg_ok "Started Service" msg_ok "Started Service"
+2 -2
View File
@@ -38,9 +38,9 @@ function update_script() {
systemctl stop fluid-calendar systemctl stop fluid-calendar
msg_info "Stopped Service" msg_info "Stopped Service"
cp /opt/fluid-calendar/.env /opt/fluid.env create_backup /opt/fluid-calendar/.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar" "tarball"
mv /opt/fluid.env /opt/fluid-calendar/.env restore_backup
msg_info "Updating Fluid Calendar" msg_info "Updating Fluid Calendar"
cd /opt/fluid-calendar cd /opt/fluid-calendar
+4 -2
View File
@@ -41,13 +41,15 @@ function update_script() {
--exclude="ghostfolio/node_modules" \ --exclude="ghostfolio/node_modules" \
--exclude="ghostfolio/dist" \ --exclude="ghostfolio/dist" \
ghostfolio ghostfolio
mv /opt/ghostfolio/.env /opt/env.backup
msg_ok "Backup Created" msg_ok "Backup Created"
create_backup /opt/ghostfolio/.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ghostfolio" "ghostfolio/ghostfolio" "tarball" "latest" "/opt/ghostfolio" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ghostfolio" "ghostfolio/ghostfolio" "tarball" "latest" "/opt/ghostfolio"
restore_backup
msg_info "Updating Ghostfolio" msg_info "Updating Ghostfolio"
mv /opt/env.backup /opt/ghostfolio/.env
sed -i -E '/^DATABASE_URL=/ s/[?&]sslmode=prefer//g' /opt/ghostfolio/.env sed -i -E '/^DATABASE_URL=/ s/[?&]sslmode=prefer//g' /opt/ghostfolio/.env
cd /opt/ghostfolio cd /opt/ghostfolio
$STD npm ci $STD npm ci
+2 -9
View File
@@ -35,18 +35,11 @@ function update_script() {
systemctl stop gogs systemctl stop gogs
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Data" create_backup /opt/gogs/custom /opt/gogs/data
cp -r /opt/gogs/custom /opt/gogs_custom_backup
cp -r /opt/gogs/data /opt/gogs_data_backup
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gogs" "gogs/gogs" "prebuild" "latest" "/opt/gogs" "gogs_*_linux_$(arch_resolve).tar.gz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gogs" "gogs/gogs" "prebuild" "latest" "/opt/gogs" "gogs_*_linux_$(arch_resolve).tar.gz"
msg_info "Restoring Data" restore_backup
cp -r /opt/gogs_custom_backup/. /opt/gogs/custom
cp -r /opt/gogs_data_backup/. /opt/gogs/data
rm -rf /opt/gogs_custom_backup /opt/gogs_data_backup
msg_ok "Restored Data"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start gogs systemctl start gogs
+24
View File
@@ -36,6 +36,30 @@ function update_script() {
fetch_and_deploy_gh_release "gotify" "gotify/server" "prebuild" "latest" "/opt/gotify" "gotify-linux-$(arch_resolve).zip" fetch_and_deploy_gh_release "gotify" "gotify/server" "prebuild" "latest" "/opt/gotify" "gotify-linux-$(arch_resolve).zip"
chmod +x /opt/gotify/gotify-linux-$(arch_resolve) chmod +x /opt/gotify/gotify-linux-$(arch_resolve)
if [[ ! -f /opt/gotify/gotify-server.env ]]; then
gotify_old_config=""
for f in /opt/gotify/config.yml /etc/gotify/config.yml; do
[[ -f "$f" ]] && gotify_old_config="$f" && break
done
if [[ -n "$gotify_old_config" ]]; then
msg_info "Migrating ${gotify_old_config} to env format (Gotify 3.x)"
if /opt/gotify/gotify-linux-$(arch_resolve) migrate-config "$gotify_old_config" >/opt/gotify/gotify-server.env 2>/dev/null; then
mv "$gotify_old_config" "${gotify_old_config}.bak"
msg_ok "Migrated config to /opt/gotify/gotify-server.env (backup: ${gotify_old_config}.bak)"
else
rm -f /opt/gotify/gotify-server.env
msg_warn "Config migration failed — left ${gotify_old_config} in place, review manually"
fi
fi
fi
if ! grep -qE '^ExecStart=.* serve' /etc/systemd/system/gotify.service 2>/dev/null; then
msg_info "Migrating service to serve subcommand (Gotify 3.x)"
sed -i -E 's|^(ExecStart=/opt/gotify/.*gotify-linux-[^ ]+)$|\1 serve|' /etc/systemd/system/gotify.service
systemctl daemon-reload
msg_ok "Migrated service to serve subcommand"
fi
msg_info "Starting Service" msg_info "Starting Service"
systemctl start gotify systemctl start gotify
msg_ok "Started Service" msg_ok "Started Service"
+54
View File
@@ -0,0 +1,54 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Raffaele (rafspiny)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://getgrav.org/
APP="Grav"
var_tags="${var_tags:-cms}"
var_cpu="${var_cpu:-1}"
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}"
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/grav" ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "grav" "getgrav/grav"; then
msg_info "Creating Backup"
cd /opt/grav
bin/grav backup -nq
msg_ok "Backup Created"
bin/gpm self-upgrade -y
cd -
chown -R www-data:www-data /opt/grav
msg_ok "Update Successful"
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}:80${CL}"
+4 -11
View File
@@ -37,21 +37,14 @@ function update_script() {
systemctl stop grist systemctl stop grist
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Creating backup" create_backup /opt/grist/.env /opt/grist/docs /opt/grist/grist-sessions.db /opt/grist/landing.db
rm -rf /opt/grist_bak
mv /opt/grist /opt/grist_bak
msg_ok "Backup created"
fetch_and_deploy_gh_release "grist" "gristlabs/grist-core" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "grist" "gristlabs/grist-core" "tarball"
restore_backup
msg_info "Updating Grist" msg_info "Updating Grist"
mkdir -p /opt/grist/docs mkdir -p /opt/grist/docs
cp -n /opt/grist_bak/.env /opt/grist/.env
if ls /opt/grist_bak/docs/* &>/dev/null; then
cp -r /opt/grist_bak/docs/* /opt/grist/docs/
fi
[[ -f /opt/grist_bak/grist-sessions.db ]] && cp /opt/grist_bak/grist-sessions.db /opt/grist/grist-sessions.db
[[ -f /opt/grist_bak/landing.db ]] && cp /opt/grist_bak/landing.db /opt/grist/landing.db
cd /opt/grist cd /opt/grist
$STD yarn install $STD yarn install
$STD yarn run build:prod $STD yarn run build:prod
+6
View File
@@ -0,0 +1,6 @@
___ _____________ _ ________
/ | / ____/ ____(_) | / / ____/
/ /| | / /_ / /_ / / |/ / __/
/ ___ |/ __/ / __/ / / /| / /___
/_/ |_/_/ /_/ /_/_/ |_/_____/
+6
View File
@@ -0,0 +1,6 @@
____ __ __ __ _ __
/ __ )___ ____ __ _____ _____/ / / /___ _/ /_ (_) /______
/ __ / _ \/ __ `/ | / / _ \/ ___/ /_/ / __ `/ __ \/ / __/ ___/
/ /_/ / __/ /_/ /| |/ / __/ / / __ / /_/ / /_/ / / /_(__ )
/_____/\___/\__,_/ |___/\___/_/ /_/ /_/\__,_/_.___/_/\__/____/
+6
View File
@@ -0,0 +1,6 @@
______
/ ____/________ __ __
/ / __/ ___/ __ `/ | / /
/ /_/ / / / /_/ /| |/ /
\____/_/ \__,_/ |___/
+6
View File
@@ -0,0 +1,6 @@
____ _ ___
/ _/___ _ __(_)___/ (_)___ __ _______
/ // __ \ | / / / __ / / __ \/ / / / ___/
_/ // / / / |/ / / /_/ / / /_/ / /_/ (__ )
/___/_/ /_/|___/_/\__,_/_/\____/\__,_/____/
+6
View File
@@ -0,0 +1,6 @@
__ _____ ___ __ _
/ / ___ ____ _/ __/ | / (_) /__(_)
/ / / _ \/ __ `/ /_ | | /| / / / //_/ /
/ /___/ __/ /_/ / __/ | |/ |/ / / ,< / /
/_____/\___/\__,_/_/ |__/|__/_/_/|_/_/
+6
View File
@@ -0,0 +1,6 @@
__ _____ __________
/ / ____ _________ _/ / | / ____/ _/
/ / / __ \/ ___/ __ `/ / /| |/ / __ / /
/ /___/ /_/ / /__/ /_/ / / ___ / /_/ // /
/_____/\____/\___/\__,_/_/_/ |_\____/___/
+6
View File
@@ -0,0 +1,6 @@
_ __ __
/ | / /__ _ __/ /____ _________ ___
/ |/ / _ \| |/_/ __/ _ \/ ___/ __ `__ \
/ /| / __/> </ /_/ __/ / / / / / / /
/_/ |_/\___/_/|_|\__/\___/_/ /_/ /_/ /_/
+6
View File
@@ -0,0 +1,6 @@
_ __ __ ____ _
/ | / /___ / /____ / __ \(_)_____________ _ _____ _______ __
/ |/ / __ \/ __/ _ \/ / / / / ___/ ___/ __ \ | / / _ \/ ___/ / / /
/ /| / /_/ / /_/ __/ /_/ / (__ ) /__/ /_/ / |/ / __/ / / /_/ /
/_/ |_/\____/\__/\___/_____/_/____/\___/\____/|___/\___/_/ \__, /
/____/
+6
View File
@@ -0,0 +1,6 @@
____ _ ________ __
/ __ \_ __(_) ____/ /___ __ ______/ /
/ / / / |/_/ / / / / __ \/ / / / __ /
/ /_/ /> </ / /___/ / /_/ / /_/ / /_/ /
\____/_/|_/_/\____/_/\____/\__,_/\__,_/
+6
View File
@@ -0,0 +1,6 @@
_____ _ __
/ ___/____ ___ __(_)___/ /
\__ \/ __ `/ / / / / __ /
___/ / /_/ / /_/ / / /_/ /
/____/\__, /\__,_/_/\__,_/
/_/
+6
View File
@@ -0,0 +1,6 @@
_____ _
/ ___/__ ______ _____ (_)___
\__ \/ / / / __ \/ ___/_____/ / __ \
___/ / /_/ / / / / /__/_____/ / / / /
/____/\__, /_/ /_/\___/ /_/_/ /_/
/____/
+6
View File
@@ -0,0 +1,6 @@
__ __ _
\ \/ /_ ___ ______ ____ ___ (_)
\ / / / / | / / __ \/ __ `__ \/ /
/ / /_/ /| |/ / /_/ / / / / / / /
/_/\__,_/ |___/\____/_/ /_/ /_/_/
+4
View File
@@ -39,8 +39,12 @@ function update_script() {
systemctl stop homebox systemctl stop homebox
msg_ok "Stopped Service" msg_ok "Stopped Service"
create_backup /opt/homebox/.env /opt/homebox/.data
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_$(arch_resolve "x86_64" "arm64").tar.gz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_$(arch_resolve "x86_64" "arm64").tar.gz"
chmod +x /opt/homebox/homebox chmod +x /opt/homebox/homebox
restore_backup
[ -f /opt/.env ] && mv /opt/.env /opt/homebox/.env [ -f /opt/.env ] && mv /opt/.env /opt/homebox/.env
[ -d /opt/.data ] && mv /opt/.data /opt/homebox/.data [ -d /opt/.data ] && mv /opt/.data /opt/homebox/.data
+4 -17
View File
@@ -35,16 +35,12 @@ function update_script() {
systemctl stop homelable systemctl stop homelable
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Configuration and Data" create_backup /opt/homelable/backend/.env /opt/homelable/data /opt/homelable/mcp/.env
cp /opt/homelable/backend/.env /opt/homelable.env.bak
cp -r /opt/homelable/data /opt/homelable_data_bak
if [[ -f /opt/homelable/mcp/.env ]]; then
cp -a /opt/homelable/mcp/.env /opt/homelable-mcp.env.bak
fi
msg_ok "Backed up Configuration and Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homelable" "Pouzor/homelable" "tarball" "latest" "/opt/homelable" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homelable" "Pouzor/homelable" "tarball" "latest" "/opt/homelable"
restore_backup
msg_info "Updating Python Dependencies" msg_info "Updating Python Dependencies"
cd /opt/homelable/backend cd /opt/homelable/backend
$STD uv venv --clear /opt/homelable/backend/.venv $STD uv venv --clear /opt/homelable/backend/.venv
@@ -57,17 +53,8 @@ function update_script() {
$STD npm run build $STD npm run build
msg_ok "Rebuilt Frontend" msg_ok "Rebuilt Frontend"
msg_info "Restoring Configuration and Data" if [[ -f /opt/homelable/mcp/.env ]]; then
cp /opt/homelable.env.bak /opt/homelable/backend/.env
cp -r /opt/homelable_data_bak/. /opt/homelable/data/
rm -f /opt/homelable.env.bak
rm -rf /opt/homelable_data_bak
msg_ok "Restored Configuration and Data"
if [[ -f /opt/homelable-mcp.env.bak ]]; then
msg_info "Restoring MCP Server" msg_info "Restoring MCP Server"
cp -a /opt/homelable-mcp.env.bak /opt/homelable/mcp/.env
rm -f /opt/homelable-mcp.env.bak
MCP_OWNER=$(stat -c '%U' /opt/homelable/mcp/.env) MCP_OWNER=$(stat -c '%U' /opt/homelable/mcp/.env)
cd /opt/homelable/mcp cd /opt/homelable/mcp
$STD uv venv --clear /opt/homelable/mcp/.venv $STD uv venv --clear /opt/homelable/mcp/.venv
+4 -13
View File
@@ -37,20 +37,12 @@ function update_script() {
systemctl stop homepage systemctl stop homepage
msg_ok "Stopped service" msg_ok "Stopped service"
msg_info "Creating Backup" create_backup /opt/homepage/.env /opt/homepage/config
cp /opt/homepage/.env /opt/homepage.env BACKUP_DIR=/opt/homepage-assets.backup create_backup /opt/homepage/public/images /opt/homepage/public/icons
cp -r /opt/homepage/config /opt/homepage_config_backup
[[ -d /opt/homepage/public/images ]] && cp -r /opt/homepage/public/images /opt/homepage_images_backup
[[ -d /opt/homepage/public/icons ]] && cp -r /opt/homepage/public/icons /opt/homepage_icons_backup
msg_ok "Created Backup"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homepage" "gethomepage/homepage" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homepage" "gethomepage/homepage" "tarball"
msg_info "Restoring Backup" restore_backup
mv /opt/homepage.env /opt/homepage
rm -rf /opt/homepage/config
mv /opt/homepage_config_backup /opt/homepage/config
msg_ok "Restored Backup"
msg_info "Updating Homepage (Patience)" msg_info "Updating Homepage (Patience)"
RELEASE=$(get_latest_github_release "gethomepage/homepage") RELEASE=$(get_latest_github_release "gethomepage/homepage")
@@ -63,8 +55,7 @@ function update_script() {
export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at') export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at')
export NEXT_TELEMETRY_DISABLED=1 export NEXT_TELEMETRY_DISABLED=1
$STD pnpm build $STD pnpm build
[[ -d /opt/homepage_images_backup ]] && mv /opt/homepage_images_backup /opt/homepage/public/images BACKUP_DIR=/opt/homepage-assets.backup restore_backup
[[ -d /opt/homepage_icons_backup ]] && mv /opt/homepage_icons_backup /opt/homepage/public/icons
msg_ok "Updated Homepage" msg_ok "Updated Homepage"
msg_info "Starting service" msg_info "Starting service"
+2 -7
View File
@@ -36,16 +36,11 @@ function update_script() {
systemctl stop hoodik systemctl stop hoodik
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Configuration" create_backup /opt/hoodik/.env
cp /opt/hoodik/.env /opt/hoodik.env.bak
msg_ok "Backed up Configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "hoodik" "hudikhq/hoodik" "prebuild" "latest" "/opt/hoodik" "*$(arch_resolve "x86_64" "arm64").tar.gz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "hoodik" "hudikhq/hoodik" "prebuild" "latest" "/opt/hoodik" "*$(arch_resolve "x86_64" "arm64").tar.gz"
msg_info "Restoring Configuration" restore_backup
cp /opt/hoodik.env.bak /opt/hoodik/.env
rm -f /opt/hoodik.env.bak
msg_ok "Restored Configuration"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start hoodik systemctl start hoodik
+2 -7
View File
@@ -35,16 +35,11 @@ function update_script() {
systemctl stop igotify systemctl stop igotify
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Configuration" create_backup /opt/igotify/.env
cp /opt/igotify/.env /opt/igotify.env.bak
msg_ok "Backed up Configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "igotify" "androidseb25/iGotify-Notification-Assistent" "prebuild" "latest" "/opt/igotify" "iGotify-Notification-Service-$(arch_resolve)-v*.zip" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "igotify" "androidseb25/iGotify-Notification-Assistent" "prebuild" "latest" "/opt/igotify" "iGotify-Notification-Service-$(arch_resolve)-v*.zip"
msg_info "Restoring Configuration" restore_backup
cp /opt/igotify.env.bak /opt/igotify/.env
rm -f /opt/igotify.env.bak
msg_ok "Restored Configuration"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start igotify systemctl start igotify
+27 -3
View File
@@ -110,7 +110,7 @@ EOF
msg_ok "Image-processing libraries up to date" msg_ok "Image-processing libraries up to date"
fi fi
RELEASE="v3.0.1" RELEASE="v3.0.3"
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 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
if [[ $(cat ~/.immich) > "2.5.1" ]]; then if [[ $(cat ~/.immich) > "2.5.1" ]]; then
msg_info "Enabling Maintenance Mode" msg_info "Enabling Maintenance Mode"
@@ -124,7 +124,9 @@ EOF
systemctl stop immich-web systemctl stop immich-web
systemctl stop immich-ml systemctl stop immich-ml
msg_ok "Stopped Services" msg_ok "Stopped Services"
VCHORD_RELEASE="1.0.0" VCHORD_RELEASE="1.1.1"
PG_VERSION=$(ls /etc/postgresql/ 2>/dev/null | sort -V | tail -1)
PG_VERSION=${PG_VERSION:-16}
[[ -f ~/.vchord_version ]] && mv ~/.vchord_version ~/.vectorchord [[ -f ~/.vchord_version ]] && mv ~/.vchord_version ~/.vectorchord
if check_for_gh_release "VectorChord" "tensorchord/VectorChord" "${VCHORD_RELEASE}" "updated together with Immich after testing"; then if check_for_gh_release "VectorChord" "tensorchord/VectorChord" "${VCHORD_RELEASE}" "updated together with Immich after testing"; then
# dead tuples in smart_search/face_search make the REINDEX below fail with # dead tuples in smart_search/face_search make the REINDEX below fail with
@@ -132,7 +134,7 @@ EOF
# while still on the old extension version, a post-upgrade vacuum errors instead # while still on the old extension version, a post-upgrade vacuum errors instead
$STD sudo -u postgres psql -d immich -c "VACUUM (ANALYZE) smart_search;" $STD sudo -u postgres psql -d immich -c "VACUUM (ANALYZE) smart_search;"
$STD sudo -u postgres psql -d immich -c "VACUUM (ANALYZE) face_search;" $STD sudo -u postgres psql -d immich -c "VACUUM (ANALYZE) face_search;"
fetch_and_deploy_gh_release "VectorChord" "tensorchord/VectorChord" "binary" "${VCHORD_RELEASE}" "/tmp" "postgresql-16-vchord_*_$(arch_resolve).deb" fetch_and_deploy_gh_release "VectorChord" "tensorchord/VectorChord" "binary" "${VCHORD_RELEASE}" "/tmp" "postgresql-${PG_VERSION}-vchord_*_$(arch_resolve).deb"
systemctl restart postgresql systemctl restart postgresql
$STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vector UPDATE;" $STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vector UPDATE;"
$STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;" $STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;"
@@ -328,6 +330,27 @@ EOF
systemctl daemon-reload systemctl daemon-reload
fi fi
# MickLesk temporary patch for HEIC thumbnail gen
msg_info "Patching media.repository.js"
MEDIA_REPO_JS="/opt/immich/app/dist/repositories/media.repository.js"
if [[ -f "$MEDIA_REPO_JS" ]]; then
python3 - <<'PY'
from pathlib import Path
p = Path('/opt/immich/app/dist/repositories/media.repository.js')
s = p.read_text()
old = "(0, sharp_1.default)(input).metadata()"
new = "(0, sharp_1.default)(input, { unlimited: true, limitInputPixels: false }).metadata()"
if new in s:
print('hotfix already there')
elif old in s:
p.write_text(s.replace(old, new, 1))
print('hotfix applied')
else:
print('pattern not found, skipped')
PY
fi
msg_ok "Patched media.repository.js"
# chown excluding upload dir contents (may be a mount with restricted permissions) # chown excluding upload dir contents (may be a mount with restricted permissions)
chown immich:immich "$INSTALL_DIR" chown immich:immich "$INSTALL_DIR"
find "$INSTALL_DIR" -maxdepth 1 -mindepth 1 ! -name upload -exec chown -R immich:immich {} + find "$INSTALL_DIR" -maxdepth 1 -mindepth 1 ! -name upload -exec chown -R immich:immich {} +
@@ -478,6 +501,7 @@ function compile_libvips() {
$STD git clone https://github.com/libvips/libvips.git "$SOURCE" $STD git clone https://github.com/libvips/libvips.git "$SOURCE"
cd "$SOURCE" cd "$SOURCE"
$STD git reset --hard "$LIBVIPS_REVISION" $STD git reset --hard "$LIBVIPS_REVISION"
$STD git apply "$BASE_DIR"/server/sources/libvips-patches/0001-put-other-loaders-ahead-of-dcrawload.patch
$STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled $STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled
cd build cd build
$STD ninja install $STD ninja install
+2 -7
View File
@@ -35,9 +35,7 @@ function update_script() {
systemctl stop immichframe systemctl stop immichframe
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Configuration" create_backup /opt/immichframe/Config
cp -r /opt/immichframe/Config /tmp/immichframe_config.bak
msg_ok "Backed up Configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "immichframe" "immichFrame/ImmichFrame" "tarball" "latest" "/tmp/immichframe" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "immichframe" "immichFrame/ImmichFrame" "tarball" "latest" "/tmp/immichframe"
@@ -57,11 +55,8 @@ function update_script() {
rm -rf /tmp/immichframe rm -rf /tmp/immichframe
msg_ok "Setup ImmichFrame" msg_ok "Setup ImmichFrame"
msg_info "Restoring Configuration" restore_backup
cp -r /tmp/immichframe_config.bak/* /opt/immichframe/Config/
rm -rf /tmp/immichframe_config.bak
chown -R immichframe:immichframe /opt/immichframe chown -R immichframe:immichframe /opt/immichframe
msg_ok "Restored Configuration"
msg_info "Starting Service" msg_info "Starting Service"
+4 -11
View File
@@ -41,20 +41,14 @@ function update_script() {
NODE_VERSION="22" setup_nodejs NODE_VERSION="22" setup_nodejs
PG_VERSION="17" setup_postgresql PG_VERSION="17" setup_postgresql
msg_info "Creating Backup" create_backup /opt/investbrain/.env /opt/investbrain/storage
rm -f /opt/.env.backup
rm -rf /opt/investbrain_backup
cp /opt/investbrain/.env /opt/.env.backup
cp -r /opt/investbrain/storage /opt/investbrain_backup
msg_ok "Created Backup"
fetch_and_deploy_gh_release "Investbrain" "investbrainapp/investbrain" "tarball" "latest" "/opt/investbrain" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Investbrain" "investbrainapp/investbrain" "tarball" "latest" "/opt/investbrain"
restore_backup
msg_info "Updating Investbrain" msg_info "Updating Investbrain"
cd /opt/investbrain cd /opt/investbrain
rm -rf /opt/investbrain/storage
cp /opt/.env.backup /opt/investbrain/.env
cp -r /opt/investbrain_backup/ /opt/investbrain/storage
export COMPOSER_ALLOW_SUPERUSER=1 export COMPOSER_ALLOW_SUPERUSER=1
$STD /usr/local/bin/composer install --no-interaction --no-dev --optimize-autoloader $STD /usr/local/bin/composer install --no-interaction --no-dev --optimize-autoloader
$STD npm install $STD npm install
@@ -69,7 +63,6 @@ function update_script() {
$STD php artisan event:cache $STD php artisan event:cache
chown -R www-data:www-data /opt/investbrain chown -R www-data:www-data /opt/investbrain
chmod -R 775 /opt/investbrain/storage /opt/investbrain/bootstrap/cache chmod -R 775 /opt/investbrain/storage /opt/investbrain/bootstrap/cache
rm -rf /opt/.env.backup /opt/investbrain_backup
msg_ok "Updated Investbrain" msg_ok "Updated Investbrain"
msg_info "Starting Services" msg_info "Starting Services"
+77
View File
@@ -0,0 +1,77 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/iv-org/invidious
APP="Invidious"
var_tags="${var_tags:-streaming}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-20}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_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/invidious ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "Invidious" "iv-org/invidious"; then
msg_info "Stopping services"
$STD systemctl stop invidious-companion invidious
msg_ok "Stopped services"
create_backup /opt/invidious/config/config.yml
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Invidious" "iv-org/invidious" "tarball" "latest" "/opt/invidious"
if check_for_gh_release "Invidious-Companion" "iv-org/invidious-companion"; then
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Invidious-Companion" "iv-org/invidious-companion" "prebuild" "latest" "/opt/invidious-companion" "invidious_companion-$(arch_resolve x86_64 aarch64)-unknown-linux-gnu.tar.gz"
fi
msg_info "Rebuilding Invidious"
cd /opt/invidious
INVIDIOUS_VERSION="$(cat ~/.invidious 2>/dev/null || echo "unknown")"
INVIDIOUS_VERSION="${INVIDIOUS_VERSION#v}"
sed -i \
-e "s~^\(\s*CURRENT_BRANCH\s*=\).*~\1 \"master\"~" \
-e "s~^\(\s*CURRENT_COMMIT\s*=\).*~\1 \"\"~" \
-e "s~^\(\s*CURRENT_VERSION\s*=\).*~\1 \"${INVIDIOUS_VERSION}\"~" \
-e "s~^\(\s*CURRENT_TAG\s*=\).*~\1 \"${INVIDIOUS_VERSION}\"~" \
-e "s~^\(\s*ASSET_COMMIT\s*=\).*~\1 \"\"~" \
src/invidious.cr
$STD make
msg_ok "Rebuilt Invidious"
restore_backup
msg_info "Starting services"
$STD systemctl start invidious invidious-companion
msg_ok "Started services"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
echo -e "${GATEWAY}${BGN}http://${IP}:3000${CL}"
+2 -12
View File
@@ -35,21 +35,11 @@ function update_script() {
systemctl stop supervisor nginx php8.4-fpm systemctl stop supervisor nginx php8.4-fpm
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Creating Backup" create_backup /opt/invoiceninja/.env /opt/invoiceninja/storage /opt/invoiceninja/public/storage
mkdir -p /tmp/invoiceninja_backup
cp /opt/invoiceninja/.env /tmp/invoiceninja_backup/
cp -r /opt/invoiceninja/storage /tmp/invoiceninja_backup/ 2>/dev/null || true
cp -r /opt/invoiceninja/public/storage /tmp/invoiceninja_backup/public_storage 2>/dev/null || true
msg_ok "Created Backup"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "invoiceninja" "invoiceninja/invoiceninja" "prebuild" "latest" "/opt/invoiceninja" "invoiceninja.tar.gz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "invoiceninja" "invoiceninja/invoiceninja" "prebuild" "latest" "/opt/invoiceninja" "invoiceninja.tar.gz"
msg_info "Restoring Data" restore_backup
cp /tmp/invoiceninja_backup/.env /opt/invoiceninja/
cp -r /tmp/invoiceninja_backup/storage/* /opt/invoiceninja/storage/ 2>/dev/null || true
cp -r /tmp/invoiceninja_backup/public_storage/* /opt/invoiceninja/public/storage/ 2>/dev/null || true
rm -rf /tmp/invoiceninja_backup
msg_ok "Restored Data"
msg_info "Running Migrations" msg_info "Running Migrations"
cd /opt/invoiceninja cd /opt/invoiceninja
+2 -10
View File
@@ -35,19 +35,11 @@ function update_script() {
systemctl stop caddy systemctl stop caddy
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Backing up Data" create_backup /opt/invoiceshelf/.env /opt/invoiceshelf/storage
cp /opt/invoiceshelf/.env /opt/invoiceshelf.env.bak
cp -r /opt/invoiceshelf/storage /opt/invoiceshelf_storage_backup
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "invoiceshelf" "InvoiceShelf/InvoiceShelf" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "invoiceshelf" "InvoiceShelf/InvoiceShelf" "tarball"
msg_info "Restoring Data" restore_backup
cp /opt/invoiceshelf.env.bak /opt/invoiceshelf/.env
rm -f /opt/invoiceshelf.env.bak
cp -r /opt/invoiceshelf_storage_backup/. /opt/invoiceshelf/storage
rm -rf /opt/invoiceshelf_storage_backup
msg_ok "Restored Data"
msg_info "Updating Application" msg_info "Updating Application"
cd /opt/invoiceshelf cd /opt/invoiceshelf
+2 -2
View File
@@ -36,9 +36,9 @@ function update_script() {
systemctl stop joplin-server systemctl stop joplin-server
msg_ok "Stopped Services" msg_ok "Stopped Services"
cp /opt/joplin-server/.env /opt create_backup /opt/joplin-server/.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball"
mv /opt/.env /opt/joplin-server restore_backup
msg_info "Updating Joplin-Server" msg_info "Updating Joplin-Server"
cd /opt/joplin-server cd /opt/joplin-server
+2 -10
View File
@@ -35,20 +35,12 @@ function update_script() {
systemctl stop jotty systemctl stop jotty
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up configuration & data" create_backup /opt/jotty/.env /opt/jotty/data /opt/jotty/config
cp /opt/jotty/.env /opt/app.env
[[ -d /opt/jotty/data ]] && mv /opt/jotty/data /opt/data
[[ -d /opt/jotty/config ]] && mv /opt/jotty/config /opt/config
msg_ok "Backed up configuration & data"
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jotty" "fccview/jotty" "prebuild" "latest" "/opt/jotty" "jotty_*_prebuild.tar.gz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jotty" "fccview/jotty" "prebuild" "latest" "/opt/jotty" "jotty_*_prebuild.tar.gz"
msg_info "Restoring configuration & data" restore_backup
mv /opt/app.env /opt/jotty/.env
[[ -d /opt/data ]] && mv /opt/data /opt/jotty/data
[[ -d /opt/config ]] && cp -a /opt/config/* /opt/jotty/config && rm -rf /opt/config
msg_ok "Restored configuration & data"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start jotty systemctl start jotty
+2 -7
View File
@@ -35,16 +35,11 @@ function update_script() {
systemctl stop kan systemctl stop kan
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Data" create_backup /opt/kan/.env
cp /opt/kan/.env /opt/kan.env.bak
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_tag "kan" "kanbn/kan" "latest" CLEAN_INSTALL=1 fetch_and_deploy_gh_tag "kan" "kanbn/kan" "latest"
msg_info "Restoring Configuration" restore_backup
cp /opt/kan.env.bak /opt/kan/.env
rm -f /opt/kan.env.bak
msg_ok "Restored Configuration"
msg_info "Building Application" msg_info "Building Application"
cd /opt/kan cd /opt/kan
+2 -9
View File
@@ -37,18 +37,11 @@ function update_script() {
systemctl stop kima-frontend kima-backend kima-analyzer kima-analyzer-clap systemctl stop kima-frontend kima-backend kima-analyzer kima-analyzer-clap
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Backing up Data" create_backup /opt/kima-hub/backend/.env /opt/kima-hub/frontend/.env
cp /opt/kima-hub/backend/.env /opt/kima-hub-backend-env.bak
cp /opt/kima-hub/frontend/.env /opt/kima-hub-frontend-env.bak
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kima-hub" "Chevron7Locked/kima-hub" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kima-hub" "Chevron7Locked/kima-hub" "tarball"
msg_info "Restoring Data" restore_backup
cp /opt/kima-hub-backend-env.bak /opt/kima-hub/backend/.env
cp /opt/kima-hub-frontend-env.bak /opt/kima-hub/frontend/.env
rm -f /opt/kima-hub-backend-env.bak /opt/kima-hub-frontend-env.bak
msg_ok "Restored Data"
msg_info "Rebuilding Backend" msg_info "Rebuilding Backend"
cd /opt/kima-hub/backend cd /opt/kima-hub/backend
+2 -10
View File
@@ -35,22 +35,14 @@ function update_script() {
systemctl stop kitchenowl systemctl stop kitchenowl
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Creating Backup" create_backup /opt/kitchenowl/data /opt/kitchenowl/kitchenowl.env
mkdir -p /opt/kitchenowl_backup
cp -r /opt/kitchenowl/data /opt/kitchenowl_backup/
cp -f /opt/kitchenowl/kitchenowl.env /opt/kitchenowl_backup/
msg_ok "Created Backup"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kitchenowl" "TomBursch/kitchenowl" "tarball" "latest" "/opt/kitchenowl" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kitchenowl" "TomBursch/kitchenowl" "tarball" "latest" "/opt/kitchenowl"
rm -rf /opt/kitchenowl/web rm -rf /opt/kitchenowl/web
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kitchenowl-web" "TomBursch/kitchenowl" "prebuild" "latest" "/opt/kitchenowl/web" "kitchenowl_Web.tar.gz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kitchenowl-web" "TomBursch/kitchenowl" "prebuild" "latest" "/opt/kitchenowl/web" "kitchenowl_Web.tar.gz"
msg_info "Restoring data" restore_backup
sed -i 's/default=True/default=False/' /opt/kitchenowl/backend/wsgi.py sed -i 's/default=True/default=False/' /opt/kitchenowl/backend/wsgi.py
cp -r /opt/kitchenowl_backup/data /opt/kitchenowl/
cp -f /opt/kitchenowl_backup/kitchenowl.env /opt/kitchenowl/
rm -rf /opt/kitchenowl_backup
msg_ok "Restored data"
msg_info "Updating KitchenOwl" msg_info "Updating KitchenOwl"
cd /opt/kitchenowl/backend cd /opt/kitchenowl/backend
+2 -12
View File
@@ -35,21 +35,11 @@ function update_script() {
systemctl stop nginx php8.4-fpm systemctl stop nginx php8.4-fpm
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Creating Backup" create_backup /opt/koel/.env /opt/koel/storage /opt/koel/public/img
mkdir -p /tmp/koel_backup
cp /opt/koel/.env /tmp/koel_backup/
cp -r /opt/koel/storage /tmp/koel_backup/ 2>/dev/null || true
cp -r /opt/koel/public/img /tmp/koel_backup/ 2>/dev/null || true
msg_ok "Created Backup"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "koel" "koel/koel" "prebuild" "latest" "/opt/koel" "koel-*.tar.gz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "koel" "koel/koel" "prebuild" "latest" "/opt/koel" "koel-*.tar.gz"
msg_info "Restoring Data" restore_backup
cp /tmp/koel_backup/.env /opt/koel/
cp -r /tmp/koel_backup/storage/* /opt/koel/storage/ 2>/dev/null || true
cp -r /tmp/koel_backup/img/* /opt/koel/public/img/ 2>/dev/null || true
rm -rf /tmp/koel_backup
msg_ok "Restored Data"
msg_info "Running Migrations" msg_info "Running Migrations"
cd /opt/koel cd /opt/koel
+57
View File
@@ -0,0 +1,57 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/perber/leafwiki
APP="LeafWiki"
var_tags="${var_tags:-wiki;markdown;notes}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_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/leafwiki ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "leafwiki" "perber/leafwiki"; then
msg_info "Stopping Service"
systemctl stop leafwiki
msg_ok "Stopped Service"
create_backup /opt/leafwiki/data
fetch_and_deploy_gh_release "leafwiki" "perber/leafwiki" "singlefile" "latest" "/usr/local/bin" "leafwiki-v*-linux-$(arch_resolve)"
restore_backup
msg_info "Starting Service"
systemctl start leafwiki
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 "${GATEWAY}${BGN}http://${IP}:8080${CL}"
+7 -9
View File
@@ -34,20 +34,18 @@ function update_script() {
msg_info "Creating Backup" msg_info "Creating Backup"
mariadb-dump leantime >"/opt/leantime_db_backup_$(date +%F).sql" mariadb-dump leantime >"/opt/leantime_db_backup_$(date +%F).sql"
tar -czf "/opt/leantime_backup_$(date +%F).tar.gz" "/opt/leantime" tar -czf "/opt/leantime_backup_$(date +%F).tar.gz" "/opt/leantime"
mv /opt/leantime /opt/leantime_bak
msg_ok "Backup Created" msg_ok "Backup Created"
fetch_and_deploy_gh_release "leantime" "Leantime/leantime" "prebuild" "latest" "/opt/leantime" Leantime*.tar.gz create_backup /opt/leantime/config/.env
msg_info "Restoring Config & Permissions" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "leantime" "Leantime/leantime" "prebuild" "latest" "/opt/leantime" Leantime*.tar.gz
mv /opt/leantime_bak/config/.env /opt/leantime/config/.env
restore_backup
msg_info "Setting Permissions"
chown -R www-data:www-data "/opt/leantime" chown -R www-data:www-data "/opt/leantime"
chmod -R 750 "/opt/leantime" chmod -R 750 "/opt/leantime"
msg_ok "Restored Config & Permissions" msg_ok "Set Permissions"
msg_info "Removing Backup"
rm -rf /opt/leantime_bak
msg_ok "Removed Backup"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
fi fi
exit exit
+6 -16
View File
@@ -35,12 +35,12 @@ function update_script() {
systemctl stop librechat rag-api systemctl stop librechat rag-api
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Backing up Configuration" create_backup /opt/librechat/.env
cp /opt/librechat/.env /opt/librechat.env.bak
msg_ok "Backed up Configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_tag "librechat" "danny-avila/LibreChat" CLEAN_INSTALL=1 fetch_and_deploy_gh_tag "librechat" "danny-avila/LibreChat"
restore_backup
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
cd /opt/librechat cd /opt/librechat
$STD npm ci $STD npm ci
@@ -52,11 +52,6 @@ function update_script() {
$STD npm cache clean --force $STD npm cache clean --force
msg_ok "Built Frontend" msg_ok "Built Frontend"
msg_info "Restoring Configuration"
cp /opt/librechat.env.bak /opt/librechat/.env
rm -f /opt/librechat.env.bak
msg_ok "Restored Configuration"
msg_info "Starting Services" msg_info "Starting Services"
systemctl start rag-api librechat systemctl start rag-api librechat
msg_ok "Started Services" msg_ok "Started Services"
@@ -68,22 +63,17 @@ function update_script() {
systemctl stop rag-api systemctl stop rag-api
msg_ok "Stopped RAG API" msg_ok "Stopped RAG API"
msg_info "Backing up RAG API Configuration" create_backup /opt/rag-api/.env
cp /opt/rag-api/.env /opt/rag-api.env.bak
msg_ok "Backed up RAG API Configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "rag-api" "danny-avila/rag_api" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "rag-api" "danny-avila/rag_api" "tarball"
restore_backup
msg_info "Updating RAG API Dependencies" msg_info "Updating RAG API Dependencies"
cd /opt/rag-api cd /opt/rag-api
$STD .venv/bin/pip install -r requirements.lite.txt $STD .venv/bin/pip install -r requirements.lite.txt
msg_ok "Updated RAG API Dependencies" msg_ok "Updated RAG API Dependencies"
msg_info "Restoring RAG API Configuration"
cp /opt/rag-api.env.bak /opt/rag-api/.env
rm -f /opt/rag-api.env.bak
msg_ok "Restored RAG API Configuration"
msg_info "Starting RAG API" msg_info "Starting RAG API"
systemctl start rag-api systemctl start rag-api
msg_ok "Started RAG API" msg_ok "Started RAG API"
+2 -9
View File
@@ -35,19 +35,12 @@ function update_script() {
systemctl stop nginx linkding linkding-tasks systemctl stop nginx linkding linkding-tasks
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Backing up Data" create_backup /opt/linkding/data /opt/linkding/.env
cp -r /opt/linkding/data /opt/linkding_data_backup
cp /opt/linkding/.env /opt/linkding_env_backup
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" "tarball"
msg_info "Restoring Data" restore_backup
cp -r /opt/linkding_data_backup/. /opt/linkding/data
cp /opt/linkding_env_backup /opt/linkding/.env
rm -rf /opt/linkding_data_backup /opt/linkding_env_backup
ln -sf /usr/lib/$(arch_resolve "x86_64-linux-gnu" "aarch64-linux-gnu")/mod_icu.so /opt/linkding/libicu.so ln -sf /usr/lib/$(arch_resolve "x86_64-linux-gnu" "aarch64-linux-gnu")/mod_icu.so /opt/linkding/libicu.so
msg_ok "Restored Data"
msg_info "Updating LinkDing" msg_info "Updating LinkDing"
cd /opt/linkding cd /opt/linkding
+4 -8
View File
@@ -35,13 +35,11 @@ function update_script() {
RUST_CRATES="monolith" setup_rust RUST_CRATES="monolith" setup_rust
msg_info "Backing up data" create_backup /opt/linkwarden/.env /opt/linkwarden/data
mv /opt/linkwarden/.env /opt/.env
[ -d /opt/linkwarden/data ] && mv /opt/linkwarden/data /opt/data.bak
rm -rf /opt/linkwarden
msg_ok "Backed up data"
fetch_and_deploy_gh_release "linkwarden" "linkwarden/linkwarden" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "linkwarden" "linkwarden/linkwarden" "tarball"
restore_backup
msg_info "Updating Linkwarden" msg_info "Updating Linkwarden"
cd /opt/linkwarden cd /opt/linkwarden
@@ -60,11 +58,9 @@ function update_script() {
$STD yarn $STD yarn
$STD npx playwright install-deps $STD npx playwright install-deps
$STD npx playwright install $STD npx playwright install
mv /opt/.env /opt/linkwarden/.env
$STD yarn prisma:generate $STD yarn prisma:generate
$STD yarn web:build $STD yarn web:build
$STD yarn prisma:deploy $STD yarn prisma:deploy
[ -d /opt/data.bak ] && mv /opt/data.bak /opt/linkwarden/data
rm -rf ~/.cargo/registry ~/.cargo/git ~/.cargo/.package-cache rm -rf ~/.cargo/registry ~/.cargo/git ~/.cargo/.package-cache
rm -rf /root/.cache/yarn rm -rf /root/.cache/yarn
rm -rf /opt/linkwarden/.next/cache rm -rf /opt/linkwarden/.next/cache
+2 -7
View File
@@ -35,16 +35,11 @@ function update_script() {
systemctl stop lobehub systemctl stop lobehub
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Backing up Data" create_backup /opt/lobehub/.env
cp /opt/lobehub/.env /opt/lobehub.env.bak
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "lobehub" "lobehub/lobehub" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "lobehub" "lobehub/lobehub" "tarball"
msg_info "Restoring Configuration" restore_backup
cp /opt/lobehub.env.bak /opt/lobehub/.env
rm -f /opt/lobehub.env.bak
msg_ok "Restored Configuration"
msg_info "Building Application" msg_info "Building Application"
cd /opt/lobehub cd /opt/lobehub
+67
View File
@@ -0,0 +1,67 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: BillyOutlast
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/mudler/LocalAGI
APP="LocalAGI"
var_tags="${var_tags:-ai}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-20}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-no}"
var_unprivileged="${var_unprivileged:-1}"
var_gpu="${var_gpu:-no}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/localagi ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "localagi" "mudler/LocalAGI"; then
msg_info "Stopping Service"
systemctl stop localagi
msg_ok "Stopped Service"
create_backup /opt/localagi/.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "localagi" "mudler/LocalAGI" "tarball" "latest" "/opt/localagi"
restore_backup
msg_info "Building LocalAGI"
cd /opt/localagi/webui/react-ui
$STD bun install
$STD bun run build
cd /opt/localagi
$STD go build -o /usr/local/bin/localagi
msg_ok "Updated LocalAGI successfully"
msg_info "Starting Service"
systemctl start localagi
msg_ok "Started Service"
msg_ok "Updated successfully!"
exit
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}"
+18 -13
View File
@@ -31,33 +31,38 @@ function update_script() {
fi fi
if check_for_gh_release "lychee" "LycheeOrg/Lychee"; then if check_for_gh_release "lychee" "LycheeOrg/Lychee"; then
PHP_VER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION;')
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop caddy systemctl stop caddy php${PHP_VER}-fpm
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Backing up Data" create_backup /opt/lychee/.env \
cp /opt/lychee/.env /opt/lychee.env.bak /opt/lychee/storage \
cp -r /opt/lychee/storage /opt/lychee_storage_backup /opt/lychee/public/uploads \
msg_ok "Backed up Data" /opt/lychee/public/dist
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "lychee" "LycheeOrg/Lychee" "prebuild" "latest" "/opt/lychee" "Lychee.zip" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "lychee" "LycheeOrg/Lychee" "prebuild" "latest" "/opt/lychee" "Lychee.zip"
msg_info "Restoring Data" restore_backup
cp /opt/lychee.env.bak /opt/lychee/.env
rm -f /opt/lychee.env.bak
cp -r /opt/lychee_storage_backup/. /opt/lychee/storage
rm -rf /opt/lychee_storage_backup
msg_ok "Restored Data"
msg_info "Updating Application" msg_info "Updating Application"
cd /opt/lychee cd /opt/lychee
$STD php artisan migrate --force $STD php artisan migrate --force
$STD php artisan config:clear
$STD php artisan cache:clear
$STD php artisan optimize:clear $STD php artisan optimize:clear
chmod -R 775 /opt/lychee/storage /opt/lychee/bootstrap/cache $STD php artisan optimize
chown -R www-data:www-data /opt/lychee
chmod -R 775 /opt/lychee/storage /opt/lychee/bootstrap/cache \
/opt/lychee/public/dist /opt/lychee/public/uploads
if [[ "${VERBOSE:-no}" = "yes" ]]; then
php artisan lychee:diagnostics || true
fi
msg_ok "Updated Application" msg_ok "Updated Application"
msg_info "Starting Services" msg_info "Starting Services"
systemctl start caddy systemctl start caddy php${PHP_VER}-fpm
msg_ok "Started Services" msg_ok "Started Services"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
fi fi
+2 -8
View File
@@ -36,10 +36,7 @@ function update_script() {
systemctl stop mail-archiver systemctl stop mail-archiver
msg_ok "Stopped Mail-Archiver" msg_ok "Stopped Mail-Archiver"
msg_info "Creating Backup" create_backup /opt/mail-archiver/appsettings.json /opt/mail-archiver/.env /opt/mail-archiver/DataProtection-Keys
cp /opt/mail-archiver/appsettings.json /opt/mail-archiver/.env /opt/
[[ -d /opt/mail-archiver/DataProtection-Keys ]] && cp -r /opt/mail-archiver/DataProtection-Keys /opt
msg_ok "Created Backup"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mail-archiver" "s1t5/mail-archiver" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mail-archiver" "s1t5/mail-archiver" "tarball"
@@ -51,10 +48,7 @@ function update_script() {
rm -rf /opt/mail-archiver-build rm -rf /opt/mail-archiver-build
msg_ok "Updated Mail-Archiver" msg_ok "Updated Mail-Archiver"
msg_info "Restoring Backup" restore_backup
cp /opt/appsettings.json /opt/.env /opt/mail-archiver
[[ -d /opt/DataProtection-Keys ]] && cp -r /opt/DataProtection-Keys /opt/mail-archiver/
msg_ok "Restored Backup"
msg_info "Starting Mail-Archiver" msg_info "Starting Mail-Archiver"
systemctl start mail-archiver systemctl start mail-archiver
+6 -9
View File
@@ -39,13 +39,15 @@ function update_script() {
msg_info "Backing up Data" msg_info "Backing up Data"
CURRENT_VERSION=$(grep -oP 'APP_VERSION=\K[^ ]+' /opt/manyfold/.env || echo "unknown") CURRENT_VERSION=$(grep -oP 'APP_VERSION=\K[^ ]+' /opt/manyfold/.env || echo "unknown")
cp -r /opt/manyfold/app/storage /opt/manyfold_storage_backup 2>/dev/null || true
cp -r /opt/manyfold/app/tmp /opt/manyfold_tmp_backup 2>/dev/null || true
$STD tar -czf "/opt/manyfold_${CURRENT_VERSION}_backup.tar.gz" -C /opt/manyfold app $STD tar -czf "/opt/manyfold_${CURRENT_VERSION}_backup.tar.gz" -C /opt/manyfold app
msg_ok "Backed up Data" msg_ok "Backed up Data"
create_backup /opt/manyfold/app/storage /opt/manyfold/app/tmp
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold/app" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold/app"
restore_backup
msg_info "Configuring Manyfold" msg_info "Configuring Manyfold"
RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version) RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version)
YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/') YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/')
@@ -55,14 +57,9 @@ function update_script() {
RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby
msg_info "Restoring Data" msg_info "Setting Permissions"
rm -rf /opt/manyfold/app/{storage,tmp}
cp -r /opt/manyfold_storage_backup /opt/manyfold/app/storage 2>/dev/null || true
cp -r /opt/manyfold_tmp_backup /opt/manyfold/app/tmp 2>/dev/null || true
chown -R manyfold:manyfold {/home/manyfold,/opt/manyfold} chown -R manyfold:manyfold {/home/manyfold,/opt/manyfold}
chown -R manyfold:manyfold /opt/manyfold/app/storage /opt/manyfold/app/tmp /opt/manyfold/app/config msg_ok "Set Permissions"
rm -rf /opt/manyfold_storage_backup /opt/manyfold_tmp_backup
msg_ok "Restored Data"
msg_info "Installing Manyfold" msg_info "Installing Manyfold"
+2 -18
View File
@@ -35,11 +35,7 @@ function update_script() {
systemctl stop caddy systemctl stop caddy
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Backing up Data" create_backup /opt/matomo/config/config.ini.php /opt/matomo/misc/user /root/matomo.creds
[[ -f /opt/matomo/config/config.ini.php ]] && cp /opt/matomo/config/config.ini.php /opt/matomo_config.bak
[[ -d /opt/matomo/misc/user ]] && cp -r /opt/matomo/misc/user /opt/matomo_user_backup
[[ -f /root/matomo.creds ]] && cp /root/matomo.creds /opt/matomo_db_creds.bak
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "matomo" "matomo-org/matomo" "prebuild" "latest" "/opt/matomo" "matomo-*.zip" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "matomo" "matomo-org/matomo" "prebuild" "latest" "/opt/matomo" "matomo-*.zip"
@@ -53,20 +49,8 @@ function update_script() {
chmod -R 755 /opt/matomo/tmp chmod -R 755 /opt/matomo/tmp
msg_ok "Set up Matomo" msg_ok "Set up Matomo"
msg_info "Restoring Data" restore_backup
if [[ -f /opt/matomo_config.bak ]]; then
mkdir -p /opt/matomo/config
cp /opt/matomo_config.bak /opt/matomo/config/config.ini.php
fi
if [[ -d /opt/matomo_user_backup ]]; then
mkdir -p /opt/matomo/misc/user
cp -r /opt/matomo_user_backup/. /opt/matomo/misc/user
fi
[[ -f /opt/matomo_db_creds.bak ]] && cp /opt/matomo_db_creds.bak /root/matomo.creds
rm -f /opt/matomo_config.bak /opt/matomo_db_creds.bak
rm -rf /opt/matomo_user_backup
chown -R www-data:www-data /opt/matomo chown -R www-data:www-data /opt/matomo
msg_ok "Restored Data"
if [[ -f /opt/matomo/console ]]; then if [[ -f /opt/matomo/console ]]; then
msg_info "Running Matomo database upgrade" msg_info "Running Matomo database upgrade"
+3 -4
View File
@@ -33,14 +33,13 @@ function update_script() {
systemctl stop meilisearch-ui systemctl stop meilisearch-ui
msg_ok "Stopped Meilisearch-UI" msg_ok "Stopped Meilisearch-UI"
cp /opt/meilisearch-ui/.env.local /tmp/.env.local.bak create_backup /opt/meilisearch-ui/.env.local
rm -rf /opt/meilisearch-ui CLEAN_INSTALL=1 fetch_and_deploy_gh_release "meilisearch-ui" "riccox/meilisearch-ui" "tarball"
fetch_and_deploy_gh_release "meilisearch-ui" "riccox/meilisearch-ui" "tarball" restore_backup
msg_info "Configuring Meilisearch-UI" msg_info "Configuring Meilisearch-UI"
cd /opt/meilisearch-ui cd /opt/meilisearch-ui
sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts
mv /tmp/.env.local.bak /opt/meilisearch-ui/.env.local
$STD pnpm install $STD pnpm install
msg_ok "Configured Meilisearch-UI" msg_ok "Configured Meilisearch-UI"
+4 -14
View File
@@ -48,14 +48,11 @@ function update_script() {
systemctl stop metube systemctl stop metube
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Old Installation" create_backup /opt/metube/.env
if [[ -d /opt/metube_bak ]]; then
rm -rf /opt/metube_bak
fi
mv /opt/metube /opt/metube_bak
msg_ok "Backup created"
fetch_and_deploy_gh_release "metube" "alexta69/metube" "tarball" "latest" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "metube" "alexta69/metube" "tarball" "latest"
restore_backup
msg_info "Building Frontend" msg_info "Building Frontend"
cd /opt/metube/ui cd /opt/metube/ui
@@ -75,13 +72,6 @@ function update_script() {
$STD uv sync $STD uv sync
msg_ok "Installed Backend" msg_ok "Installed Backend"
msg_info "Restoring .env"
if [[ -f /opt/metube_bak/.env ]]; then
cp /opt/metube_bak/.env /opt/metube/.env
fi
rm -rf /opt/metube_bak
msg_ok "Restored .env"
if grep -q 'pipenv' /etc/systemd/system/metube.service; then if grep -q 'pipenv' /etc/systemd/system/metube.service; then
msg_info "Patching systemd Service" msg_info "Patching systemd Service"
cat <<EOF >/etc/systemd/system/metube.service cat <<EOF >/etc/systemd/system/metube.service
+1 -1
View File
@@ -45,7 +45,7 @@ EOF
systemctl daemon-reload systemctl daemon-reload
fi fi
$STD npm install -g n8n@2.27.5 $STD npm install -g n8n@latest
systemctl restart n8n systemctl restart n8n
msg_ok "Updated n8n" msg_ok "Updated n8n"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
+3 -11
View File
@@ -35,13 +35,12 @@ function update_script() {
systemctl stop nametag systemctl stop nametag
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Data" create_backup /opt/nametag/.env /opt/nametag/data
cp /opt/nametag/.env /opt/nametag.env.bak
cp -r /opt/nametag/data /opt/nametag_data_bak
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nametag" "mattogodoy/nametag" "tarball" "latest" "/opt/nametag" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nametag" "mattogodoy/nametag" "tarball" "latest" "/opt/nametag"
restore_backup
msg_info "Rebuilding Application" msg_info "Rebuilding Application"
cd /opt/nametag cd /opt/nametag
$STD npm ci $STD npm ci
@@ -54,13 +53,6 @@ function update_script() {
cp -r /opt/nametag/public /opt/nametag/.next/standalone/public cp -r /opt/nametag/public /opt/nametag/.next/standalone/public
msg_ok "Rebuilt Application" msg_ok "Rebuilt Application"
msg_info "Restoring Data"
cp /opt/nametag.env.bak /opt/nametag/.env
cp -r /opt/nametag_data_bak/. /opt/nametag/data/
rm -f /opt/nametag.env.bak
rm -rf /opt/nametag_data_bak
msg_ok "Restored Data"
msg_info "Running Migrations" msg_info "Running Migrations"
cd /opt/nametag cd /opt/nametag
$STD npx prisma migrate deploy $STD npx prisma migrate deploy
+66
View File
@@ -0,0 +1,66 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Mathias Wagner (gnmyt)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://nexterm.dev/
APP="Nexterm"
var_tags="${var_tags:-server-management}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_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 /opt/nexterm/server/nexterm-server ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "nexterm-engine" "gnmyt/Nexterm"; then
msg_info "Stopping nexterm-engine"
systemctl stop nexterm-engine
msg_ok "Stopped nexterm-engine"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nexterm-engine" "gnmyt/Nexterm" "prebuild" "latest" "/opt/nexterm/engine" "nexterm-engine-linux-$(arch_resolve "x64" "arm64").tar.gz"
msg_info "Starting nexterm-engine"
systemctl start nexterm-engine
msg_ok "Started nexterm-engine"
fi
if check_for_gh_release "nexterm-server" "gnmyt/Nexterm"; then
msg_info "Stopping nexterm-server"
systemctl stop nexterm-server
msg_ok "Stopped nexterm-server"
fetch_and_deploy_gh_release "nexterm-server" "gnmyt/Nexterm" "singlefile" "latest" "/opt/nexterm/server" "nexterm-server-linux-$(arch_resolve "x64" "arm64")"
msg_info "Starting nexterm-server"
systemctl start nexterm-server
msg_ok "Started nexterm-server"
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}:6989${CL}"
+64
View File
@@ -0,0 +1,64 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/gamosoft/NoteDiscovery
APP="NoteDiscovery"
var_tags="${var_tags:-notes;wiki;knowledge-base}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_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/notediscovery ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "notediscovery" "gamosoft/NoteDiscovery"; then
msg_info "Stopping Service"
systemctl stop notediscovery
msg_ok "Stopped Service"
create_backup /opt/notediscovery/data /opt/notediscovery/config.yaml
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "notediscovery" "gamosoft/NoteDiscovery" "tarball"
msg_info "Syncing Dependencies"
cd /opt/notediscovery
$STD uv sync --no-dev
msg_ok "Synced Dependencies"
restore_backup
msg_info "Starting Service"
systemctl start notediscovery
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 "${GATEWAY}${BGN}http://${IP}:8000${CL}"
+1 -1
View File
@@ -43,7 +43,7 @@ function update_script() {
grep -o 'https://static\.tp-link\.com/upload/software/[^"]*linux_x64[^"]*\.deb' | grep -o 'https://static\.tp-link\.com/upload/software/[^"]*linux_x64[^"]*\.deb' |
head -n1) head -n1)
OMADA_PKG=$(basename "${OMADA_URL}") OMADA_PKG=$(basename "${OMADA_URL}")
VERSION=$(sed -n 's/.*_v\([0-9.]*\)_.*_\([0-9]\{14\}\)\.deb$/\1-\2/p' <<<"${OMADA_PKG}") VERSION=$(sed -n 's/.*_v\([0-9.]*\)_linux.*/\1/p' <<<"${OMADA_PKG}")
CURRENT_VERSION=$(cat $HOME/.omada 2>/dev/null || echo "0") CURRENT_VERSION=$(cat $HOME/.omada 2>/dev/null || echo "0")
+1 -1
View File
@@ -30,7 +30,7 @@ function update_script() {
exit exit
fi fi
RELEASE="v7.2.1" RELEASE="v7.3.0"
if check_for_gh_release "OpenCloud" "opencloud-eu/opencloud" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then if check_for_gh_release "OpenCloud" "opencloud-eu/opencloud" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
msg_info "Stopping services" msg_info "Stopping services"
systemctl stop opencloud opencloud-wopi systemctl stop opencloud opencloud-wopi
+3 -5
View File
@@ -61,18 +61,16 @@ EOF
systemctl stop overseerr systemctl stop overseerr
msg_ok "Service stopped" msg_ok "Service stopped"
msg_info "Creating backup" create_backup /opt/overseerr/config
mv /opt/overseerr/config /opt/config_backup
msg_ok "Backup created"
fetch_and_deploy_gh_release "overseerr" "sct/overseerr" "tarball" fetch_and_deploy_gh_release "overseerr" "sct/overseerr" "tarball"
rm -rf /opt/overseerr/config
restore_backup
msg_info "Configuring ${APP} (Patience)" msg_info "Configuring ${APP} (Patience)"
cd /opt/overseerr cd /opt/overseerr
$STD yarn install $STD yarn install
$STD yarn build $STD yarn build
mv /opt/config_backup /opt/overseerr/config
msg_ok "Configured ${APP}" msg_ok "Configured ${APP}"
msg_info "Starting Service" msg_info "Starting Service"
+3 -8
View File
@@ -35,23 +35,18 @@ function update_script() {
systemctl stop ownfoil systemctl stop ownfoil
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Data" create_backup /opt/ownfoil/app/config
cp -r /opt/ownfoil/app/config /opt/ownfoil_data_backup
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball"
restore_backup
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
cd /opt/ownfoil cd /opt/ownfoil
$STD source .venv/bin/activate $STD source .venv/bin/activate
$STD uv pip install -r requirements.txt $STD uv pip install -r requirements.txt
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Restoring Data"
cp -r /opt/ownfoil_data_backup /opt/ownfoil/app/config
rm -rf /opt/ownfoil_data_backup
msg_ok "Restored Data"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start ownfoil systemctl start ownfoil
msg_ok "Started Service" msg_ok "Started Service"
+85
View File
@@ -0,0 +1,85 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/DioCrafts/OxiCloud
APP="OxiCloud"
var_tags="${var_tags:-files;documents}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-6144}"
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/oxicloud ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "OxiCloud" "DioCrafts/OxiCloud"; then
msg_info "Stopping OxiCloud"
systemctl stop oxicloud
msg_ok "Stopped OxiCloud"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "OxiCloud" "DioCrafts/OxiCloud" "tarball" "latest" "/opt/oxicloud"
TOOLCHAIN="$(grep -oP 'FROM\s+rust:\K[0-9]+\.[0-9]+(\.[0-9]+)?' /opt/oxicloud/Dockerfile | head -1)"
RUST_TOOLCHAIN="${TOOLCHAIN:-stable}" setup_rust
msg_info "Building Frontend SPA"
cd /opt/oxicloud/frontend
$STD npm ci
$STD npm run build
msg_ok "Built Frontend SPA"
msg_info "Updating OxiCloud (Patience)"
set -a
source /etc/oxicloud/.env
set +a
cd /opt/oxicloud
export DATABASE_URL
export RUSTFLAGS="-C target-cpu=native"
RAM_MB=$(awk '/MemTotal/ {print int($2/1024)}' /proc/meminfo)
CARGO_JOBS=$((RAM_MB / 2560))
[[ $CARGO_JOBS -lt 1 ]] && CARGO_JOBS=1
[[ $CARGO_JOBS -gt $(nproc) ]] && CARGO_JOBS=$(nproc)
$STD cargo build --release -j "$CARGO_JOBS" --bin oxicloud --bin migrate-nfc-filenames
mv target/release/oxicloud /usr/local/bin/oxicloud
mv target/release/migrate-nfc-filenames /usr/local/bin/migrate-nfc-filenames
chmod +x /usr/local/bin/oxicloud /usr/local/bin/migrate-nfc-filenames
rm -f /usr/bin/oxicloud
rm -rf /opt/oxicloud/static
mv /opt/oxicloud/static-dist /opt/oxicloud/static
rm -rf /opt/oxicloud/target /opt/oxicloud/frontend/node_modules
msg_ok "Updated OxiCloud"
msg_info "Starting OxiCloud"
systemctl start oxicloud
msg_ok "Started OxiCloud"
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}:8086${CL}"
+18 -21
View File
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Source: https://pangolin.net/ | Github: https://github.com/fosrl/pangolin # Source: https://pangolin.net/ | Github: https://github.com/fosrl/pangolin
APP="Pangolin" APP="Pangolin"
PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.18.4}" PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.20.0}"
var_tags="${var_tags:-proxy}" var_tags="${var_tags:-proxy}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}" var_ram="${var_ram:-4096}"
@@ -33,6 +33,15 @@ function update_script() {
ensure_dependencies build-essential python3 ensure_dependencies build-essential python3
if ! command -v psql &>/dev/null; then
msg_error "This installation uses SQLite and cannot be upgraded to Pangolin ${PANGOLIN_VERSION}."
echo -e "${INFO}${YW}Starting with Pangolin 1.20.0, PostgreSQL is required as the database backend.${CL}"
echo -e "${INFO}${YW}An automatic migration of your existing SQLite data is not supported.${CL}"
echo -e "${INFO}${YW}Please create a new LXC with the Pangolin install script, which sets up PostgreSQL automatically.${CL}"
echo -e "${INFO}${YW}Your current data is preserved in this container and can be manually migrated if needed.${CL}"
exit 1
fi
NODE_VERSION="24" setup_nodejs NODE_VERSION="24" setup_nodejs
if check_for_gh_release "pangolin" "fosrl/pangolin" "$PANGOLIN_VERSION" "Pinned to a tested release because Pangolin's schema changes have repeatedly broken unattended updates. To try a newer version at your own risk, run: 'export PANGOLIN_VERSION=<tag>' and re-run update. If it breaks, please open an issue at https://github.com/community-scripts/ProxmoxVE/issues with the error log."; then if check_for_gh_release "pangolin" "fosrl/pangolin" "$PANGOLIN_VERSION" "Pinned to a tested release because Pangolin's schema changes have repeatedly broken unattended updates. To try a newer version at your own risk, run: 'export PANGOLIN_VERSION=<tag>' and re-run update. If it breaks, please open an issue at https://github.com/community-scripts/ProxmoxVE/issues with the error log."; then
@@ -41,13 +50,8 @@ function update_script() {
systemctl stop gerbil systemctl stop gerbil
msg_info "Service stopped" msg_info "Service stopped"
msg_info "Creating backup" DB_URL=$(sed -n 's/.*connection_string: "\(.*\)".*/\1/p' /opt/pangolin/config/config.yml)
tar -czf /opt/pangolin_config_backup.tar.gz -C /opt/pangolin config create_backup /opt/pangolin/config
if [[ -f /opt/pangolin/config/db/db.sqlite ]]; then
cp -a /opt/pangolin/config/db/db.sqlite \
"/opt/pangolin/config/db/db.sqlite.pre-${PANGOLIN_VERSION}-$(date +%Y%m%d-%H%M%S).bak"
fi
msg_ok "Created backup"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball" "$PANGOLIN_VERSION" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball" "$PANGOLIN_VERSION"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_$(arch_resolve)" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_$(arch_resolve)"
@@ -55,23 +59,21 @@ function update_script() {
msg_info "Updating Pangolin" msg_info "Updating Pangolin"
cd /opt/pangolin cd /opt/pangolin
$STD npm ci $STD npm ci
$STD npm run set:sqlite $STD npm run set:pg
$STD npm run set:oss $STD npm run set:oss
rm -rf server/private rm -rf server/private
$STD npm run db:generate DATABASE_URL="$DB_URL" $STD npm run db:generate
$STD npm run build $STD npm run build
$STD npm run build:cli $STD npm run build:cli
cp -R .next/standalone ./ cp -R .next/standalone ./
cp -r server/migrations ./dist/init
chmod +x ./dist/cli.mjs chmod +x ./dist/cli.mjs
cp server/db/names.json ./dist/names.json cp server/db/names.json ./dist/names.json
cp server/db/ios_models.json ./dist/ios_models.json cp server/db/ios_models.json ./dist/ios_models.json
cp server/db/mac_models.json ./dist/mac_models.json cp server/db/mac_models.json ./dist/mac_models.json
msg_ok "Updated Pangolin" msg_ok "Updated Pangolin"
msg_info "Restoring config" restore_backup
tar -xzf /opt/pangolin_config_backup.tar.gz -C /opt/pangolin --overwrite
rm -f /opt/pangolin_config_backup.tar.gz
msg_ok "Restored config"
if ! grep -q '^ExecStartPre=/usr/bin/node dist/migrations.mjs' /etc/systemd/system/pangolin.service 2>/dev/null; then if ! grep -q '^ExecStartPre=/usr/bin/node dist/migrations.mjs' /etc/systemd/system/pangolin.service 2>/dev/null; then
msg_info "Adding migration step to pangolin.service" msg_info "Adding migration step to pangolin.service"
@@ -82,13 +84,8 @@ function update_script() {
msg_info "Running database migrations" msg_info "Running database migrations"
cd /opt/pangolin cd /opt/pangolin
SQLITE_DB="/opt/pangolin/config/db/db.sqlite"
if [[ -f "$SQLITE_DB" ]]; then
if ! sqlite3 "$SQLITE_DB" ".tables" 2>/dev/null | tr ' ' '\n' | grep -qx "statusHistory"; then
sqlite3 "$SQLITE_DB" "DELETE FROM versionMigrations;" 2>/dev/null || true
fi
fi
ENVIRONMENT=prod $STD node dist/migrations.mjs ENVIRONMENT=prod $STD node dist/migrations.mjs
msg_ok "Ran database migrations" msg_ok "Ran database migrations"
msg_info "Updating Badger plugin version" msg_info "Updating Badger plugin version"
@@ -112,4 +109,4 @@ description
msg_ok "Completed successfully!\n" msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW}Access it using the following URL:${CL}" echo -e "${INFO}${YW}Access it using the following URL:${CL}"
echo -e "${GATEWAY}${BGN}https://<YOUR_PANGOLIN_URL>${CL}" echo -e "${GATEWAY}${BGN}https://<YOUR_PANGOLIN_URL> or http://${IP}:3002${CL}"
+2 -6
View File
@@ -35,15 +35,11 @@ function update_script() {
systemctl stop paperclip systemctl stop paperclip
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Configuration" create_backup /opt/paperclip-ai/.env
cp /opt/paperclip-ai/.env /opt/paperclip.env.bak
msg_ok "Backed up Configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperclip-ai" "paperclipai/paperclip" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "paperclip-ai" "paperclipai/paperclip" "tarball"
msg_info "Restoring Configuration" restore_backup
mv /opt/paperclip.env.bak /opt/paperclip-ai/.env
msg_ok "Restored Configuration"
msg_info "Rebuilding Paperclip" msg_info "Rebuilding Paperclip"
cd /opt/paperclip-ai cd /opt/paperclip-ai
+4 -9
View File
@@ -35,22 +35,18 @@ function update_script() {
systemctl stop papra systemctl stop papra
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Configuration" create_backup /opt/papra/apps/papra-server/.env
if [[ -f /opt/papra/apps/papra-server/.env ]]; then
cp /opt/papra/apps/papra-server/.env /opt/papra_env.bak
fi
msg_ok "Backed up Configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball"
restore_backup
pnpm_version=$(grep -oP '"packageManager":\s*"pnpm@\K[^"]+' /opt/papra/package.json) pnpm_version=$(grep -oP '"packageManager":\s*"pnpm@\K[^"]+' /opt/papra/package.json)
NODE_VERSION="26" NODE_MODULE="pnpm@$pnpm_version" setup_nodejs NODE_VERSION="26" NODE_MODULE="pnpm@$pnpm_version" setup_nodejs
msg_info "Building Application" msg_info "Building Application"
cd /opt/papra cd /opt/papra
if [[ -f /opt/papra_env.bak ]]; then if [[ ! -f /opt/papra/apps/papra-server/.env ]]; then
cp /opt/papra_env.bak /opt/papra/apps/papra-server/.env
else
msg_warn ".env missing, regenerating from defaults" msg_warn ".env missing, regenerating from defaults"
LOCAL_IP=$(hostname -I | awk '{print $1}') LOCAL_IP=$(hostname -I | awk '{print $1}')
cat <<EOF >/opt/papra/apps/papra-server/.env cat <<EOF >/opt/papra/apps/papra-server/.env
@@ -74,7 +70,6 @@ EOF
$STD pnpm --filter "@papra/app-client..." run build $STD pnpm --filter "@papra/app-client..." run build
$STD pnpm --filter "@papra/app-server..." run build $STD pnpm --filter "@papra/app-server..." run build
ln -sf /opt/papra/apps/papra-client/dist /opt/papra/apps/papra-server/public ln -sf /opt/papra/apps/papra-client/dist /opt/papra/apps/papra-server/public
rm -f /opt/papra_env.bak
msg_ok "Built Application" msg_ok "Built Application"
msg_info "Starting Service" msg_info "Starting Service"
+4
View File
@@ -72,9 +72,13 @@ EOF
msg_ok "Migration complete!" msg_ok "Migration complete!"
fi fi
create_backup /opt/patchmon/.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "singlefile" "latest" "/opt/patchmon" "patchmon-server-linux-$(arch_resolve)" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "singlefile" "latest" "/opt/patchmon" "patchmon-server-linux-$(arch_resolve)"
mv /opt/patchmon/PatchMon /opt/patchmon/patchmon-server mv /opt/patchmon/PatchMon /opt/patchmon/patchmon-server
restore_backup
msg_info "Fetching PatchMon agent binaries" msg_info "Fetching PatchMon agent binaries"
RELEASE=$(get_latest_github_release "PatchMon/PatchMon") RELEASE=$(get_latest_github_release "PatchMon/PatchMon")
[[ ! -d /opt/patchmon/agents ]] && mkdir -p /opt/patchmon/agents [[ ! -d /opt/patchmon/agents ]] && mkdir -p /opt/patchmon/agents
+1 -1
View File
@@ -71,7 +71,7 @@ function update_script() {
cp /opt/pocket-id/.env /opt/env cp /opt/pocket-id/.env /opt/env
fi fi
fetch_and_deploy_gh_release "pocket-id" "pocket-id/pocket-id" "singlefile" "latest" "/opt/pocket-id/" "pocket-id-linux-$(arch_resolve)" fetch_and_deploy_gh_release "pocket-id" "pocket-id/pocket-id" "singlefile" "latest" "/opt/pocket-id/" "pocket-id_linux_$(arch_resolve)"
mv /opt/env /opt/pocket-id/.env mv /opt/env /opt/pocket-id/.env
msg_info "Starting Service" msg_info "Starting Service"
+2 -2
View File
@@ -41,9 +41,10 @@ function update_script() {
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "postiz" "gitroomhq/postiz-app" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "postiz" "gitroomhq/postiz-app" "tarball"
restore_backup
msg_info "Building Application" msg_info "Building Application"
cd /opt/postiz cd /opt/postiz
cp /opt/postiz_env.bak /opt/postiz/.env
set -a && source /opt/postiz/.env && set +a set -a && source /opt/postiz/.env && set +a
export NODE_OPTIONS="--max-old-space-size=4096" export NODE_OPTIONS="--max-old-space-size=4096"
$STD pnpm install $STD pnpm install
@@ -57,7 +58,6 @@ function update_script() {
msg_ok "Ran Database Migrations" msg_ok "Ran Database Migrations"
mkdir -p /opt/postiz/uploads mkdir -p /opt/postiz/uploads
restore_backup
msg_info "Starting Services" msg_info "Starting Services"
systemctl start postiz-backend postiz-frontend postiz-orchestrator systemctl start postiz-backend postiz-frontend postiz-orchestrator
+3 -7
View File
@@ -36,18 +36,14 @@ function update_script() {
msg_ok "Updated PowerDNS" msg_ok "Updated PowerDNS"
if check_for_gh_release "poweradmin" "poweradmin/poweradmin"; then if check_for_gh_release "poweradmin" "poweradmin/poweradmin"; then
msg_info "Backing up Configuration" create_backup /opt/poweradmin/config/settings.php /opt/poweradmin/powerdns.db
cp /opt/poweradmin/config/settings.php /opt/poweradmin_settings.php.bak
cp /opt/poweradmin/powerdns.db /opt/poweradmin_powerdns.db.bak
msg_ok "Backed up Configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "poweradmin" "poweradmin/poweradmin" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "poweradmin" "poweradmin/poweradmin" "tarball"
restore_backup
msg_info "Updating Poweradmin" msg_info "Updating Poweradmin"
cp /opt/poweradmin_settings.php.bak /opt/poweradmin/config/settings.php
cp /opt/poweradmin_powerdns.db.bak /opt/poweradmin/powerdns.db
rm -rf /opt/poweradmin/install rm -rf /opt/poweradmin/install
rm -f /opt/poweradmin_settings.php.bak /opt/poweradmin_powerdns.db.bak
chown -R www-data:pdns /opt/poweradmin chown -R www-data:pdns /opt/poweradmin
chmod 775 /opt/poweradmin chmod 775 /opt/poweradmin
chown pdns:pdns /opt/poweradmin/powerdns.db chown pdns:pdns /opt/poweradmin/powerdns.db
+2 -7
View File
@@ -34,17 +34,12 @@ function update_script() {
systemctl stop radicale systemctl stop radicale
msg_ok "Stopped service" msg_ok "Stopped service"
msg_info "Backing up users file" create_backup /opt/radicale/users
cp /opt/radicale/users /opt/radicale_users_backup
msg_ok "Backed up users file"
PYTHON_VERSION="3.13" setup_uv PYTHON_VERSION="3.13" setup_uv
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Radicale" "Kozea/Radicale" "tarball" "latest" "/opt/radicale" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Radicale" "Kozea/Radicale" "tarball" "latest" "/opt/radicale"
msg_info "Restoring users file" restore_backup
rm -f /opt/radicale/users
mv /opt/radicale_users_backup /opt/radicale/users
msg_ok "Restored users file"
if grep -q 'start.sh' /etc/systemd/system/radicale.service; then if grep -q 'start.sh' /etc/systemd/system/radicale.service; then
sed -i -e '/^Description/i[Unit]' \ sed -i -e '/^Description/i[Unit]' \
+3 -2
View File
@@ -36,10 +36,12 @@ function update_script() {
ensure_dependencies git ensure_dependencies git
cp /opt/reactive-resume/.env /opt/reactive-resume.env.bak create_backup /opt/reactive-resume/.env
NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "reactive-resume" "amruthpillai/reactive-resume" "tarball" "latest" "/opt/reactive-resume" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "reactive-resume" "amruthpillai/reactive-resume" "tarball" "latest" "/opt/reactive-resume"
restore_backup
msg_info "Updating Reactive Resume (Patience)" msg_info "Updating Reactive Resume (Patience)"
cd /opt/reactive-resume cd /opt/reactive-resume
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
@@ -49,7 +51,6 @@ function update_script() {
export NODE_ENV="production" export NODE_ENV="production"
$STD pnpm install --frozen-lockfile $STD pnpm install --frozen-lockfile
$STD pnpm run build $STD pnpm run build
mv /opt/reactive-resume.env.bak /opt/reactive-resume/.env
msg_ok "Updated Reactive Resume" msg_ok "Updated Reactive Resume"
msg_info "Updating Service" msg_info "Updating Service"
+77 -7
View File
@@ -106,13 +106,6 @@ spring.servlet.multipart.max-file-size=5GB
spring.servlet.multipart.max-request-size=5GB spring.servlet.multipart.max-request-size=5GB
server.tomcat.max-part-count=100 server.tomcat.max-part-count=100
# Rqueue configuration
rqueue.web.enable=false
rqueue.job.enabled=false
rqueue.message.durability.in-terminal-state=0
rqueue.key.prefix=\${spring.cache.redis.key-prefix}
rqueue.message.converter.provider.class=com.dedicatedcode.reitti.config.RQueueCustomMessageConverter
# Application-specific settings # Application-specific settings
reitti.server.advertise-uri= reitti.server.advertise-uri=
@@ -168,6 +161,81 @@ PROPEOF
msg_ok "Rewrote application.properties (backup: application.properties.bak)" msg_ok "Rewrote application.properties (backup: application.properties.bak)"
fi fi
# Migrate v4 -> v5: Remove Rqueue configuration (replaced by Quartz Scheduler)
if grep -q "^rqueue\." /opt/reitti/application.properties 2>/dev/null; then
msg_info "Migrating to v5: Removing Rqueue configuration"
sed -i '/^# Rqueue configuration$/d; /^rqueue\./d' /opt/reitti/application.properties
msg_ok "Removed Rqueue configuration"
fi
# Migrate v4 -> v5: Update application.properties and nginx tile cache for v5 compatibility
if grep -q "^reitti\.process-data\.schedule=" /opt/reitti/application.properties 2>/dev/null; then
msg_info "Migrating to v5: Updating application.properties"
sed -i '/^reitti\.process-data\.schedule=/d' /opt/reitti/application.properties
sed -i 's/^reitti\.import\.processing-idle-start-time=.*/reitti.import.grace-time-seconds=30/' /opt/reitti/application.properties
sed -i 's/^spring\.datasource\.hikari\.maximum-pool-size=20$/spring.datasource.hikari.maximum-pool-size=30/' /opt/reitti/application.properties
grep -q "devices" /opt/reitti/application.properties || \
sed -i 's/^spring\.cache\.cache-names=\(.*\)$/spring.cache.cache-names=\1,devices,mapStyles,mapStyleJson/' /opt/reitti/application.properties
grep -q "org.quartz.core.ErrorLogger" /opt/reitti/application.properties || \
sed -i '/^logging\.level\.com\.dedicatedcode\.reitti=/a logging.level.org.quartz.core.ErrorLogger=FATAL' /opt/reitti/application.properties
grep -q "^spring.servlet.multipart.resolve-lazily=" /opt/reitti/application.properties || \
sed -i '/^spring\.servlet\.multipart\.max-request-size=/a spring.servlet.multipart.resolve-lazily=true' /opt/reitti/application.properties
grep -q "^spring.mvc.async.request-timeout=" /opt/reitti/application.properties || \
echo "spring.mvc.async.request-timeout=600000" >>/opt/reitti/application.properties
if ! grep -q "^spring.quartz" /opt/reitti/application.properties; then
cat >>/opt/reitti/application.properties <<'QUARTZEOF'
# Quartz Scheduler configuration
spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=never
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
spring.quartz.properties.org.quartz.jobStore.isClustered=false
spring.quartz.properties.org.quartz.jobStore.tablePrefix=qrtz_
spring.quartz.properties.org.quartz.threadPool.threadCount=5
QUARTZEOF
fi
grep -q "^reitti.import.staging.cleanup.cron=" /opt/reitti/application.properties || \
echo "reitti.import.staging.cleanup.cron=0 0 4 * * *" >>/opt/reitti/application.properties
grep -q "^reitti.batching.max-batch-size=" /opt/reitti/application.properties || \
printf "reitti.batching.max-batch-size=100\nreitti.batching.max-wait-time=5\n" >>/opt/reitti/application.properties
grep -q "^reitti.jobs.cleanup.cron=" /opt/reitti/application.properties || \
printf "reitti.jobs.cleanup.cron=0 0 4 * * ?\nreitti.jobs.cleanup.max-age-hours=24\n" >>/opt/reitti/application.properties
grep -q "^reitti.db-janitor.schedule=" /opt/reitti/application.properties || \
echo "reitti.db-janitor.schedule=0 0 4 * * ?" >>/opt/reitti/application.properties
msg_ok "Updated application.properties for v5"
if [[ -f /etc/nginx/nginx.conf ]]; then
msg_info "Migrating to v5: Updating nginx tile cache configuration"
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.v5
cat >/etc/nginx/nginx.conf <<'NGINXEOF'
user www-data;
events {
worker_connections 1024;
}
http {
resolver 1.1.1.1 8.8.8.8 valid=30s ipv6=off;
proxy_cache_path /var/cache/nginx/tiles levels=1:2 keys_zone=tiles:10m max_size=1g inactive=30d use_temp_path=off;
server {
listen 80;
location /custom/ {
set $upstream_url $http_x_reitti_upstream_url;
proxy_pass $upstream_url;
proxy_set_header Host $proxy_host;
proxy_set_header User-Agent "Reitti/1.0";
proxy_cache tiles;
proxy_cache_key $upstream_url;
proxy_cache_valid 200 30d;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
}
}
}
NGINXEOF
systemctl reload nginx
msg_ok "Updated nginx tile cache configuration"
fi
fi
if check_for_gh_release "reitti" "dedicatedcode/reitti"; then if check_for_gh_release "reitti" "dedicatedcode/reitti"; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop reitti systemctl stop reitti
@@ -179,10 +247,12 @@ PROPEOF
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "reitti" "dedicatedcode/reitti" "singlefile" "latest" "/opt/reitti" "reitti-app.jar" USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "reitti" "dedicatedcode/reitti" "singlefile" "latest" "/opt/reitti" "reitti-app.jar"
mv /opt/reitti/reitti-*.jar /opt/reitti/reitti.jar mv /opt/reitti/reitti-*.jar /opt/reitti/reitti.jar
msg_warn "v5 runs a one-time database migration on first start (GPS points → device table). This may take several minutes on large datasets — do not interrupt the container."
msg_info "Starting Service" msg_info "Starting Service"
systemctl start reitti systemctl start reitti
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
msg_warn "Post-upgrade: Verify each API token has a Device assigned in Settings → API Tokens. Tokens without a device cannot ingest location data in v5."
fi fi
exit exit
} }
+22 -5
View File
@@ -37,18 +37,29 @@ function update_script() {
systemctl stop romm-backend romm-worker romm-scheduler romm-watcher systemctl stop romm-backend romm-worker romm-scheduler romm-watcher
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Backing up configuration" create_backup /opt/romm/.env
cp /opt/romm/.env /opt/romm/.env.backup BACKUP_DIR=/opt/romm-players.backup create_backup \
msg_ok "Backed up configuration" /opt/romm/frontend/dist/assets/emulatorjs \
/opt/romm/frontend/dist/assets/ruffle
fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball" "latest" "/opt/romm" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball" "latest" "/opt/romm"
restore_backup
msg_info "Updating ROMM" msg_info "Updating ROMM"
cp /opt/romm/.env.backup /opt/romm/.env
cd /opt/romm cd /opt/romm
$STD uv sync --all-extras $STD uv sync --all-extras
cd /opt/romm/backend cd /opt/romm/backend
$STD uv run alembic upgrade head $STD uv run alembic upgrade head
if [[ -f /opt/romm/backend/utils/rom_patcher/package.json ]]; then
cd /opt/romm/backend/utils/rom_patcher
$STD npm install --ignore-scripts --no-audit --no-fund
if [[ -d node_modules/rom-patcher/rom-patcher-js ]]; then
rm -rf rom-patcher-js
cp -r node_modules/rom-patcher/rom-patcher-js ./rom-patcher-js
fi
rm -rf node_modules
fi
cd /opt/romm/frontend cd /opt/romm/frontend
$STD npm install $STD npm install
$STD npm run build $STD npm run build
@@ -73,6 +84,12 @@ function update_script() {
msg_ok "Started Services" msg_ok "Started Services"
msg_ok "Updated successfully" msg_ok "Updated successfully"
fi fi
if check_for_gh_release "EmulatorJS" "EmulatorJS/EmulatorJS" "v4.2.3"; then
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "EmulatorJS" "EmulatorJS/EmulatorJS" "prebuild" "v4.2.3" "/opt/romm/frontend/dist/assets/emulatorjs" "4.2.3.7z"
systemctl restart romm-backend romm-worker romm-scheduler romm-watcher
msg_ok "Updated EmulatorJS successfully"
fi
exit exit
} }
+2 -9
View File
@@ -35,18 +35,11 @@ function update_script() {
systemctl stop rustypaste systemctl stop rustypaste
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Creating Backup" create_backup /opt/rustypaste/upload /opt/rustypaste/config.toml
tar -czf "/opt/rustypaste_backup_$(date +%F).tar.gz" /opt/rustypaste/upload 2>/dev/null || true
cp /opt/rustypaste/config.toml /tmp/rustypaste_config.toml.bak
msg_ok "Backup Created"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "rustypaste" "orhun/rustypaste" "prebuild" "latest" "/opt/rustypaste" "*x86_64-unknown-linux-gnu.tar.gz" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "rustypaste" "orhun/rustypaste" "prebuild" "latest" "/opt/rustypaste" "*x86_64-unknown-linux-gnu.tar.gz"
msg_info "Restoring Data" restore_backup
mv /tmp/rustypaste_config.toml.bak /opt/rustypaste/config.toml
tar -xzf "/opt/rustypaste_backup_$(date +%F).tar.gz" -C /opt/rustypaste/upload 2>/dev/null || true
rm -rf /opt/rustypaste_backup_$(date +%F).tar.gz
msg_ok "Restored Data"
msg_info "Starting Services" msg_info "Starting Services"
systemctl start rustypaste systemctl start rustypaste
+3 -6
View File
@@ -36,19 +36,16 @@ function update_script() {
[[ -f /etc/systemd/system/scanopy-daemon.service ]] && systemctl stop scanopy-daemon [[ -f /etc/systemd/system/scanopy-daemon.service ]] && systemctl stop scanopy-daemon
msg_ok "Stopped services" msg_ok "Stopped services"
msg_info "Backing up configurations" create_backup /opt/scanopy/.env /opt/scanopy/oidc.toml
cp /opt/scanopy/.env /opt/scanopy.env
[[ -f /opt/scanopy/oidc.toml ]] && cp /opt/scanopy/oidc.toml /opt/scanopy.oidc.toml
msg_ok "Backed up configurations"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Scanopy" "scanopy/scanopy" "tarball" "latest" "/opt/scanopy" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Scanopy" "scanopy/scanopy" "tarball" "latest" "/opt/scanopy"
restore_backup
ensure_dependencies pkg-config libssl-dev ensure_dependencies pkg-config libssl-dev
TOOLCHAIN="$(grep "channel" /opt/scanopy/backend/rust-toolchain.toml | awk -F\" '{print $2}')" TOOLCHAIN="$(grep "channel" /opt/scanopy/backend/rust-toolchain.toml | awk -F\" '{print $2}')"
RUST_TOOLCHAIN=$TOOLCHAIN setup_rust RUST_TOOLCHAIN=$TOOLCHAIN setup_rust
[[ -f /opt/scanopy.env ]] && mv /opt/scanopy.env /opt/scanopy/.env
[[ -f /opt/scanopy.oidc.toml ]] && mv /opt/scanopy.oidc.toml /opt/scanopy/oidc.toml
if ! grep -q "PUBLIC_URL" /opt/scanopy/.env; then if ! grep -q "PUBLIC_URL" /opt/scanopy/.env; then
sed -i "\|_PATH=|a\\scanopy_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/scanopy/.env sed -i "\|_PATH=|a\\scanopy_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/scanopy/.env
fi fi
+6
View File
@@ -29,6 +29,12 @@ function update_script() {
exit exit
fi fi
setup_deb822_repo \
"sftpgo" \
"https://oss.sftpgo.com/apt/gpg.key" \
"https://oss.sftpgo.com/apt" \
"trixie"
msg_info "Updating SFTPGo" msg_info "Updating SFTPGo"
$STD apt update $STD apt update
$STD apt upgrade -y $STD apt upgrade -y
+2 -2
View File
@@ -52,11 +52,12 @@ function update_script() {
msg_ok "Updated FlareSolverr" msg_ok "Updated FlareSolverr"
fi fi
cp /opt/shelfmark/start.sh /opt/start.sh.bak create_backup /opt/shelfmark/start.sh
if command -v chromedriver &>/dev/null; then if command -v chromedriver &>/dev/null; then
$STD apt remove -y chromium-driver $STD apt remove -y chromium-driver
fi fi
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "shelfmark" "calibrain/shelfmark" "tarball" "latest" "/opt/shelfmark" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "shelfmark" "calibrain/shelfmark" "tarball" "latest" "/opt/shelfmark"
restore_backup
RELEASE_VERSION=$(cat "$HOME/.shelfmark") RELEASE_VERSION=$(cat "$HOME/.shelfmark")
msg_info "Updating Shelfmark" msg_info "Updating Shelfmark"
@@ -74,7 +75,6 @@ function update_script() {
else else
$STD uv sync --active --locked --no-default-groups $STD uv sync --active --locked --no-default-groups
fi fi
mv /opt/start.sh.bak /opt/shelfmark/start.sh
msg_ok "Updated Shelfmark" msg_ok "Updated Shelfmark"
msg_info "Starting Service(s)" msg_info "Starting Service(s)"
+2 -10
View File
@@ -35,19 +35,11 @@ function update_script() {
systemctl stop shlink systemctl stop shlink
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Backing up Data" create_backup /opt/shlink/.env /opt/shlink/data
cp /opt/shlink/.env /opt/shlink.env.bak
cp -r /opt/shlink/data /opt/shlink_data_backup
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "shlink" "shlinkio/shlink" "prebuild" "latest" "/opt/shlink" "shlink*_php8.5_dist.zip" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "shlink" "shlinkio/shlink" "prebuild" "latest" "/opt/shlink" "shlink*_php8.5_dist.zip"
msg_info "Restoring Data" restore_backup
cp /opt/shlink.env.bak /opt/shlink/.env
rm -f /opt/shlink.env.bak
cp -r /opt/shlink_data_backup/. /opt/shlink/data
rm -rf /opt/shlink_data_backup
msg_ok "Restored Data"
msg_info "Updating Application" msg_info "Updating Application"
cd /opt/shlink cd /opt/shlink
+6 -15
View File
@@ -36,19 +36,17 @@ function update_script() {
[[ -f /etc/systemd/system/soularr.service ]] && systemctl stop soularr.timer soularr.service [[ -f /etc/systemd/system/soularr.service ]] && systemctl stop soularr.timer soularr.service
msg_ok "Stopped Service(s)" msg_ok "Stopped Service(s)"
msg_info "Backing up config" create_backup /opt/slskd/config/slskd.yml
cp /opt/slskd/config/slskd.yml /opt/slskd.yml.bak
msg_ok "Backed up config"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Slskd" "slskd/slskd" "prebuild" "latest" "/opt/slskd" "slskd-*-linux-$(arch_resolve "x64" "arm64").zip" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Slskd" "slskd/slskd" "prebuild" "latest" "/opt/slskd" "slskd-*-linux-$(arch_resolve "x64" "arm64").zip"
msg_info "Restoring config" restore_backup
mv /opt/slskd.yml.bak /opt/slskd/config/slskd.yml
msg_info "Migrating config"
# Migrate 0.25.0 breaking config key renames # Migrate 0.25.0 breaking config key renames
sed -i 's/^global:/transfers:/' /opt/slskd/config/slskd.yml sed -i 's/^global:/transfers:/' /opt/slskd/config/slskd.yml
sed -i 's/^integration:/integrations:/' /opt/slskd/config/slskd.yml sed -i 's/^integration:/integrations:/' /opt/slskd/config/slskd.yml
msg_ok "Restored config" msg_ok "Migrated config"
msg_info "Starting Service(s)" msg_info "Starting Service(s)"
systemctl start slskd systemctl start slskd
@@ -63,13 +61,11 @@ function update_script() {
msg_ok "Stopped Timer and Service" msg_ok "Stopped Timer and Service"
fi fi
msg_info "Backing up Soularr config" create_backup /opt/soularr/config.ini /opt/soularr/run.sh
cp /opt/soularr/config.ini /opt/soularr_config.ini.bak
cp /opt/soularr/run.sh /opt/soularr_run.sh.bak
msg_ok "Backed up Soularr config"
PYTHON_VERSION="3.11" setup_uv PYTHON_VERSION="3.11" setup_uv
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Soularr" "mrusse/soularr" "tarball" "latest" "/opt/soularr" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Soularr" "mrusse/soularr" "tarball" "latest" "/opt/soularr"
restore_backup
msg_info "Updating Soularr" msg_info "Updating Soularr"
cd /opt/soularr cd /opt/soularr
$STD uv venv -c venv $STD uv venv -c venv
@@ -78,11 +74,6 @@ function update_script() {
deactivate deactivate
msg_ok "Updated Soularr" msg_ok "Updated Soularr"
msg_info "Restoring Soularr config"
mv /opt/soularr_config.ini.bak /opt/soularr/config.ini
mv /opt/soularr_run.sh.bak /opt/soularr/run.sh
msg_ok "Restored Soularr config"
msg_info "Starting Soularr Timer" msg_info "Starting Soularr Timer"
systemctl restart soularr.timer systemctl restart soularr.timer
msg_ok "Started Soularr Timer" msg_ok "Started Soularr Timer"
+51 -7
View File
@@ -30,19 +30,63 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "snapotter" "snapotter-hq/SnapOtter"; then NEEDS_V2_MIGRATION=false
grep -q '^DB_PATH=' /opt/snapotter_data/.env 2>/dev/null && NEEDS_V2_MIGRATION=true
UPDATE_AVAILABLE=false
check_for_gh_release "snapotter" "snapotter-hq/SnapOtter" && UPDATE_AVAILABLE=true
if [[ "$NEEDS_V2_MIGRATION" == true || "$UPDATE_AVAILABLE" == true ]]; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop snapotter systemctl stop snapotter
msg_ok "Stopped Service" msg_ok "Stopped Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "snapotter" "snapotter-hq/SnapOtter" "tarball" PG_VERSION="17" setup_postgresql
if ! sudo -u postgres psql -tAc "SELECT 1 FROM pg_database WHERE datname = 'snapotter'" | grep -qx '1'; then
PG_DB_NAME="snapotter" PG_DB_USER="snapotter" setup_postgresql_db
else
PG_DB_NAME="snapotter"
PG_DB_USER="snapotter"
PG_DB_PASS=$(sed -n 's|^DATABASE_URL=postgres://snapotter:\([^@]*\)@.*|\1|p' /opt/snapotter_data/.env | head -n1)
if [[ -z "$PG_DB_PASS" ]]; then
msg_error "SnapOtter's PostgreSQL database exists, but its password is not available in /opt/snapotter_data/.env"
exit 1
fi
fi
msg_info "Installing Redis"
$STD apt install -y redis-server
if grep -q '^appendonly ' /etc/redis/redis.conf; then
sed -i 's/^appendonly .*/appendonly yes/' /etc/redis/redis.conf
else
echo 'appendonly yes' >>/etc/redis/redis.conf
fi
$STD systemctl enable --now redis-server
msg_ok "Installed Redis"
msg_info "Migrating SnapOtter Configuration"
sed -i '/^DB_PATH=/d; /^DATABASE_URL=/d; /^REDIS_URL=/d; /^SQLITE_MIGRATE_PATH=/d' /opt/snapotter_data/.env
cat <<EOF >>/opt/snapotter_data/.env
DATABASE_URL=postgres://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}
REDIS_URL=redis://127.0.0.1:6379
EOF
if [[ -f /opt/snapotter_data/snapotter.db ]]; then
echo 'SQLITE_MIGRATE_PATH=/opt/snapotter_data/snapotter.db' >>/opt/snapotter_data/.env
fi
if ! grep -q '^Requires=postgresql.service redis-server.service$' /etc/systemd/system/snapotter.service; then
sed -i '/^After=/c\After=network-online.target postgresql.service redis-server.service' /etc/systemd/system/snapotter.service
sed -i '/^\[Unit\]/a Wants=network-online.target\nRequires=postgresql.service redis-server.service' /etc/systemd/system/snapotter.service
fi
systemctl daemon-reload
msg_ok "Migrated SnapOtter Configuration"
if [[ "$UPDATE_AVAILABLE" == true ]]; then
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "snapotter" "snapotter-hq/SnapOtter" "prebuild" "latest" "/opt/snapotter" "snapotter-*-linux-amd64.tar.gz"
fi
msg_info "Updating SnapOtter" msg_info "Updating SnapOtter"
cd /opt/snapotter $STD uv python install 3.11
$STD npm pkg delete scripts.prepare $STD uv venv --seed --python 3.11 /opt/snapotter_data/ai/venv
$STD pnpm install --frozen-lockfile ln -sfn /opt/snapotter /app
$STD pnpm --filter @snapotter/web build
sed -i 's/mediapipe==0.10.21/mediapipe>=0.10.21/' /opt/snapotter/docker/feature-manifest.json
msg_ok "Updated SnapOtter" msg_ok "Updated SnapOtter"
msg_info "Starting Service" msg_info "Starting Service"
+2 -10
View File
@@ -35,19 +35,11 @@ function update_script() {
systemctl stop caddy systemctl stop caddy
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Backing up Data" create_backup /opt/solidtime/.env /opt/solidtime/storage
cp /opt/solidtime/.env /opt/solidtime.env.bak
cp -r /opt/solidtime/storage /opt/solidtime_storage_backup
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "solidtime" "solidtime-io/solidtime" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "solidtime" "solidtime-io/solidtime" "tarball"
msg_info "Restoring Data" restore_backup
cp /opt/solidtime.env.bak /opt/solidtime/.env
rm -f /opt/solidtime.env.bak
cp -r /opt/solidtime_storage_backup/. /opt/solidtime/storage
rm -rf /opt/solidtime_storage_backup
msg_ok "Restored Data"
msg_info "Updating Application" msg_info "Updating Application"
cd /opt/solidtime cd /opt/solidtime

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