Compare commits

...

113 Commits

Author SHA1 Message Date
GitHub Actions 032f178ee2 Update .app files 2026-04-24 14:09:58 +00:00
push-app-to-main[bot] 6ece8c4de9 Apprise-API (#13934)
* Add apprise-api (ct)

* Install nginx and git dependencies

Added installation of nginx and git dependencies.

---------

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-04-24 16:09:40 +02:00
community-scripts-pr-app[bot] 581b332c66 Update CHANGELOG.md (#13999)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-24 14:09:18 +00:00
push-app-to-main[bot] 0632f99343 fireshare (#13995)
* Add fireshare (ct)

* Update fireshare.sh

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2026-04-24 16:08:49 +02:00
CanbiZ (MickLesk) fecad57187 fix dep 2026-04-24 14:29:55 +02:00
CanbiZ (MickLesk) bb7b612d5f fix ffmpeg path 2026-04-24 14:21:16 +02:00
community-scripts-pr-app[bot] 2c22e03774 Update CHANGELOG.md (#13991)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-24 10:04:45 +00:00
CanbiZ (MickLesk) 6ca9569dc3 Refactor: Ghostfolio (#13990) 2026-04-24 12:04:17 +02:00
community-scripts-pr-app[bot] 562ae12972 Update .app files (#13988)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-04-24 10:17:59 +02:00
community-scripts-pr-app[bot] 47cb50e7cd Update CHANGELOG.md (#13987)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-24 08:13:12 +00:00
push-app-to-main[bot] a8c1155cac Transmute (#13935)
* Add transmute (ct)

* Update install/transmute-install.sh

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

* Update author name in transmute.sh

* Update ct/transmute.sh

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

* Update author name in transmute-install.sh

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2026-04-24 10:12:49 +02:00
community-scripts-pr-app[bot] f4a141019e Update .app files (#13986)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-04-24 10:11:40 +02:00
community-scripts-pr-app[bot] 2b288ee617 Update CHANGELOG.md (#13985)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-24 08:10:42 +00:00
push-app-to-main[bot] a36d0cb20c Jitsi-Meet (#13897)
* Add jitsi-meet (ct)

* Update author in jitsi-meet.sh script

* Remove unnecessary newline in jitsi-meet.sh

* Refactor setup_deb822_repo command for 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-04-24 10:10:17 +02:00
community-scripts-pr-app[bot] d3efebce67 Update CHANGELOG.md (#13980)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-24 00:08:48 +00:00
Soppster1029 7a440679f5 Update wger.sh (#13977) 2026-04-24 02:08:21 +02:00
community-scripts-pr-app[bot] db2780ff44 Update CHANGELOG.md (#13975)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 20:17:58 +00:00
CanbiZ (MickLesk) fdab25b098 core: auto-size NODE_OPTIONS heap (#13960)
* feat(nodejs): auto-size NODE_OPTIONS heap and apply in Termix updates

- setup_nodejs now sets NODE_OPTIONS only when not already set
- Heap size is auto-derived from NODE_MAX_OLD_SPACE_SIZE, var_ram, or MemTotal
- Auto heap is clamped to 1024..4096 MB to avoid too-small or too-large defaults
- Termix update path now calls setup_nodejs before frontend/backend builds so
  Node heap defaults are applied consistently during updates

* feat(error-handler): add actionable Node.js heap OOM guidance

Detect probable Node.js heap out-of-memory failures from log patterns and
common build exit codes, then print targeted remediation hints instead of
only a generic SIGABRT/SIGKILL message.

- Detect OOM patterns in last log lines (Reached heap limit, JS heap OOM)
- Treat node build contexts with exit 134/137/243 as likely heap issues
- Suggest computed --max-old-space-size based on NODE_OPTIONS, var_ram,
  or MemTotal (clamped to 1024..4096 MB)
- Recommend calling setup_nodejs before build steps so defaults apply

* refactor(node-heap): raise auto cap to 12GB and simplify OOM hint

- Increase setup_nodejs auto heap clamp from 4GB to 12GB for heavy frontend builds
- Keep lower bound at 1GB and preserve user override precedence
- Simplify error_handler Node OOM output to a single concise hint
- Align error_handler heap suggestion clamp to 12GB
2026-04-23 22:17:25 +02:00
community-scripts-pr-app[bot] c3c544d5a4 Update CHANGELOG.md (#13972)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 18:53:24 +00:00
CanbiZ (MickLesk) 3c38647055 core: improve system update information / lxc stack upgrade (#13970)
* fix(lxc-stack): use dist-upgrade and improve recovery prompt

When the host LXC stack is too old for a template, upgrading only
pve-container/lxc-pve can leave the Proxmox stack in an inconsistent state.
Use a full dist-upgrade instead.

Also refine the recovery prompt:
- [1] Upgrade LXC stack now
- [2] Older template fallback only when actually available
- [3] Ignore
- [4] Cancel

Do not auto-fallback to an older template after ignore/failure; honor the
user's explicit choice and stop with a clear error instead.

* chore(lxc-stack-prompt): clarify host dist-upgrade action in option 1

* Update build.func

* fix(lxc-stack): use host upgrade instead of dist-upgrade in recovery flow

* Enhance upgrade prompt with warning message

Added a warning message to inform users about the implications of running the host upgrade.

---------

Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>
2026-04-23 20:52:59 +02:00
community-scripts-pr-app[bot] 7e1b2b4f92 Update CHANGELOG.md (#13969)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 13:52:42 +00:00
CanbiZ (MickLesk) 145602a8c3 mealie: start.sh missing after failed update (#13958)
* fix(mealie): restore start.sh before build steps to prevent broken container

When CLEAN_INSTALL=1 wipes /opt/mealie/* and a subsequent build step fails
(uv sync, yarn install, yarn generate - e.g. due to OOM or network error),
start.sh was never written because it was created at the very end of the
update function. On the next reboot systemd could not find the ExecStart
binary and the container was left in a permanently broken state.

Fix: move mealie.env restore and start.sh creation to immediately after
fetch_and_deploy_gh_release, before any build steps that can fail. This
ensures the service entry point is always present even if the build is
interrupted, allowing uv to self-heal on next startup.

Fixes: #13945

* fix(mealie): backup and restore start.sh alongside mealie.env

Instead of recreating start.sh from a heredoc after CLEAN_INSTALL wipes
/opt/mealie/*, simply back it up before the wipe and restore it together
with mealie.env. Simpler and avoids any drift between the hardcoded
heredoc and what was actually installed.

* fix(mealie): fallback heredoc if start.sh missing before backup
2026-04-23 15:52:12 +02:00
community-scripts-pr-app[bot] 687e778460 Update CHANGELOG.md (#13968)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 13:51:25 +00:00
CanbiZ (MickLesk) 1476849f3c twingate-connector: perform real apt upgrade during update flow (#13959)
* fix(twingate-connector): perform real apt upgrade during update flow

The update path used ensure_dependencies, which only installs missing
packages and does not upgrade already installed ones. As a result, users
could see 'Updated successfully' even when a newer twingate-connector
version was available.

Switch update_script to a real package update flow:
- ensure apt is healthy
- refresh apt metadata
- install/upgrade twingate-connector via retry helper
- restart service

This aligns behavior with Twingate's documented upgrade process.

* Update twingate-connector.sh
2026-04-23 15:51:01 +02:00
community-scripts-pr-app[bot] a2bf10d2f2 Update CHANGELOG.md (#13967)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 13:50:52 +00:00
Slaviša Arežina 9c44055709 Updated to match our starndard (#13956) 2026-04-23 15:50:26 +02:00
community-scripts-pr-app[bot] 7141f89676 Update CHANGELOG.md (#13966)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 13:50:24 +00:00
CanbiZ (MickLesk) 9f50496f8b fix(tools.func): upgrade Node.js minor/patch on same major version (#13957)
In setup_nodejs() Scenario 1 (major version already matches), only npm
was refreshed - apt never upgraded the nodejs package itself. This left
existing LXCs stuck on older minor releases (e.g. 22.13.1) even though
NodeSource ships newer ones (e.g. 22.19+).

Fix: add pt-get install -y --only-upgrade nodejs before the npm pin
so the latest minor/patch from the already-configured NodeSource repo is
always installed.

Fixes: seerr update failing with ERR_PNPM_UNSUPPORTED_ENGINE because
seerr 3.2.0 requires Node >=22.19.0 but installed was v22.13.1 (#13955)
2026-04-23 15:49:54 +02:00
community-scripts-pr-app[bot] 01bbacec22 Update CHANGELOG.md (#13965)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 13:31:16 +00:00
community-scripts-pr-app[bot] 116253df1a Update CHANGELOG.md (#13964)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 13:30:51 +00:00
CanbiZ (MickLesk) 8706cd3783 Revert "core: Add PHS_VERBOSE env var to skip verbose mode prompts (#13797)" (#13963)
This reverts commit 518b6778e2.
2026-04-23 15:30:38 +02:00
CanbiZ (MickLesk) 874d8f300c Revert "Prefer silent mode on PHS env conflict (#13951)" (#13962)
This reverts commit a37b36520c.
2026-04-23 15:30:19 +02:00
community-scripts-pr-app[bot] aa54abcf50 Update CHANGELOG.md (#13953)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 07:34:09 +00:00
CanbiZ (MickLesk) a37b36520c Prefer silent mode on PHS env conflict (#13951)
When PHS_SILENT and PHS_VERBOSE are both set, stop falling back to interactive mode. Changes prefer silent mode to keep automation safe and avoid blocking unattended/non-TTY updates. Only show a whiptail warning when both stdin/stdout are TTYs and whiptail is present, and ignore any whiptail errors. Added a brief comment and adjusted the fallback message accordingly.
2026-04-23 09:33:40 +02:00
community-scripts-pr-app[bot] 22d9eece6f Update CHANGELOG.md (#13941)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-22 12:48:13 +00:00
John Gorman 518b6778e2 core: Add PHS_VERBOSE env var to skip verbose mode prompts (#13797) 2026-04-22 14:47:44 +02:00
community-scripts-pr-app[bot] 6da3a5f0e2 Update CHANGELOG.md (#13933)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-22 07:25:54 +00:00
CanbiZ (MickLesk) d044dea89e add --clear to uv venv in update_script() to prevent interactive prompt (#13926) 2026-04-22 09:25:29 +02:00
CanbiZ (MickLesk) 54171b00e0 readd wkhtml from ved
readd from ved
2026-04-22 09:19:54 +02:00
community-scripts-pr-app[bot] 686b9aab81 Update .app files (#13928)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-04-22 08:00:49 +02:00
community-scripts-pr-app[bot] 4e5a45feb5 Update CHANGELOG.md (#13931)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-22 05:50:24 +00:00
push-app-to-main[bot] 5141037504 Dashy (#13817)
* Add dashy (ct)

* fix systemctl syntax

---------

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-04-22 07:50:00 +02:00
community-scripts-pr-app[bot] 29f2671e7a Update CHANGELOG.md (#13930)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-22 05:43:45 +00:00
push-app-to-main[bot] 192c2d4fc8 Mini-QR (#13902)
* Add mini-qr (ct)

* Update ct/mini-qr.sh

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

* Update ct/mini-qr.sh

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

* Update install/mini-qr-install.sh

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

---------

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>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2026-04-22 07:43:20 +02:00
community-scripts-pr-app[bot] d34c88344e Update CHANGELOG.md (#13929)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-22 05:42:16 +00:00
community-scripts-pr-app[bot] 34928f8f1d Update CHANGELOG.md (#13927)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-22 05:42:05 +00:00
push-app-to-main[bot] 759d0aacf0 ownfoil (#13904)
* Add ownfoil (ct)

* Update ct/ownfoil.sh

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

* Update ct/ownfoil.sh

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

* Update install/ownfoil-install.sh

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

* Fix backup command to handle errors correctly

---------

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>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2026-04-22 07:41:53 +02:00
push-app-to-main[bot] abac42ca13 ERPNext (#13921)
* Add erpnext (ct)

* use trixie wkhtmltopdf

* 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-04-22 07:41:43 +02:00
community-scripts-pr-app[bot] 14655ff6a4 Update CHANGELOG.md (#13918)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-21 13:47:51 +00:00
Slaviša Arežina 9baed4b50e FileFlows: Update dependencies (#13917)
* Add Node installation option

* update deps

* add hwaccel

* upd
2026-04-21 15:47:16 +02:00
community-scripts-pr-app[bot] 981c16dec5 Update .app files (#13914)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-04-21 15:30:16 +02:00
community-scripts-pr-app[bot] 8f97a4909d Update CHANGELOG.md (#13916)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-21 13:23:53 +00:00
push-app-to-main[bot] ed496277fc Add gogs (ct) (#13896)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-04-21 15:23:19 +02:00
community-scripts-pr-app[bot] a2d94d6ebe Update CHANGELOG.md (#13915)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-21 13:22:02 +00:00
push-app-to-main[bot] 2495469338 anchor (#13895)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2026-04-21 15:21:29 +02:00
community-scripts-pr-app[bot] 1221720b3b Update CHANGELOG.md (#13913)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-21 13:06:51 +00:00
push-app-to-main[bot] 8fd8a6674e minthcm (#13903)
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-04-21 15:06:26 +02:00
community-scripts-pr-app[bot] 2aacb5c26a Update .app files (#13906)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-04-21 10:39:17 +02:00
community-scripts-pr-app[bot] 2a823151a9 Update CHANGELOG.md (#13907)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-21 08:38:40 +00:00
Slaviša Arežina 9293dfaa82 Update dependencies (#13901) 2026-04-21 10:38:16 +02:00
community-scripts-pr-app[bot] 323222a963 Update CHANGELOG.md (#13905)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-21 08:38:14 +00:00
push-app-to-main[bot] 7666519557 Add foldergram (ct) (#13900)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-04-21 10:37:48 +02:00
community-scripts-pr-app[bot] 43b0347446 Update CHANGELOG.md (#13899)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-21 07:11:52 +00:00
Chris 55bad2aa40 OpenCloud: Pin version to 6.1.0 (#13890) 2026-04-21 09:11:26 +02:00
community-scripts-pr-app[bot] 4d2d6edefe Update CHANGELOG.md (#13898)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-21 07:04:24 +00:00
Copilot e2e7f0722f homelable: fix install failure by correcting password-reset chmod target (#13894)
* Initial plan

* fix(homelable): correct password reset script chmod path

Agent-Logs-Url: https://github.com/community-scripts/ProxmoxVE/sessions/6227f182-739b-4c0b-9b1f-be73074924d2

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

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com>
2026-04-21 09:04:01 +02:00
community-scripts-pr-app[bot] b3c9f6e625 Update .app files (#13886)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-04-20 21:58:56 +02:00
community-scripts-pr-app[bot] ade3bde249 Update CHANGELOG.md (#13885)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-20 19:57:32 +00:00
push-app-to-main[bot] 7cb40af4e6 WhoDB (#13880)
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-04-20 21:57:03 +02:00
community-scripts-pr-app[bot] ce2b51a1a6 Update CHANGELOG.md (#13883)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-20 18:22:33 +00:00
CanbiZ (MickLesk) 0986f485ee core: detect Perl breakage after LXC stack upgrade and improve storage validation (#13879) 2026-04-20 20:22:10 +02:00
community-scripts-pr-app[bot] cd1e584696 Update CHANGELOG.md (#13882)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-20 18:21:52 +00:00
Davidson Santos cb156b6f85 feat(homelable): add password reset utility script (#13798) 2026-04-20 20:21:24 +02:00
community-scripts-pr-app[bot] 06a676e6b0 Update CHANGELOG.md (#13878)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-20 11:24:01 +00:00
CanbiZ (MickLesk) 3ac2ceda3d fix(pangolin): create migration tables before data transfer to prevent role loss (#13874)
The previous migration fix attempted to INSERT INTO 'userOrgRoles' before
that table existed (it is new in 1.17.1). The error was silently ignored,
so no role data was migrated. When drizzle-kit then dropped roleId from
userOrgs, all user-role associations were permanently lost.

- CREATE TABLE IF NOT EXISTS for userOrgRoles before migrating data
- Same treatment for userInviteRoles (also new in 1.17.1)

Fixes community-scripts/ProxmoxVE#13857
2026-04-20 13:23:32 +02:00
community-scripts-pr-app[bot] 6082537f57 Update CHANGELOG.md (#13877)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-20 11:23:11 +00:00
CanbiZ (MickLesk) bd3fbb3999 Several Scripts: Bump NodeJS to align Node.js versions with upstream for 5 scripts (#13875)
* fix(node): align Node.js versions with upstream for 5 scripts

Update scripts where upstream requires a newer Node.js version:
- iobroker: 22 → 24 (upstream .nvmrc)
- kima-hub: 20 → 22 (upstream Dockerfile)
- myip: 22 → 24 (upstream Dockerfile)
- outline: 22 → 24 (upstream Dockerfile)
- shelfmark: 22 → 24 (upstream Dockerfile)

Skipped 15 scripts where our version is already newer than upstream.

Ref: community-scripts/ProxmoxVE#13870

* fix(node): add setup_nodejs to update scripts for iobroker, kima-hub, myip

These three scripts had NODE_VERSION in install but not in update,
so running an update would not upgrade Node.js to the correct version.

- iobroker: add NODE_VERSION=24
- kima-hub: add NODE_VERSION=22
- myip: add NODE_VERSION=24
2026-04-20 13:22:44 +02:00
community-scripts-pr-app[bot] 7e5e5be161 Update CHANGELOG.md (#13873)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-20 08:19:24 +00:00
CanbiZ (MickLesk) 55c7549c3e Refactor: PMG Post Install (#13693)
* PMG Post Install: Detect gateway via /etc/os-release when /etc/issue is generic

* PMG Post Install: detect gateway via dpkg or PMG service units

* PMG: migrate post-install to deb822 format, fix APT source conflicts

- Simplify PMG detection to dpkg-based check only
- Extend repo_state() to scan .sources files (deb822 format)
- Add toggle_repo() helper for enable/disable on both formats
- Migrate Debian sources correction to deb822 (debian.sources)
- Migrate pmg-enterprise, pmg-no-subscription, pmgtest repo
  creation to deb822 .sources files
- Install script: clean up duplicate APT sources created by
  proxmox-mailgateway-container package (enterprise.list,
  pmg-install-repo.list, legacy sources.list)

* fix: use official Signed-By path & revert install script cleanup

- Change Signed-By from /etc/apt/keyrings/pmg.gpg to
  /usr/share/keyrings/proxmox-archive-keyring.gpg in all three
  PMG repo creation blocks (enterprise, no-subscription, test),
  matching official PMG docs and PVE post-install convention
- Remove APT source cleanup from install script (handled by
  post-pmg-install instead)

* remove empty line
2026-04-20 10:18:55 +02:00
community-scripts-pr-app[bot] 4089fed9c9 Update CHANGELOG.md (#13869)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-20 07:24:30 +00:00
CanbiZ (MickLesk) 325668d5c9 Wanderer: add pocketbase CLI wrapper with env (#13863) 2026-04-20 09:24:08 +02:00
community-scripts-pr-app[bot] 63296fc3e7 Update CHANGELOG.md (#13868)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-20 07:22:25 +00:00
community-scripts-pr-app[bot] e98fae3c54 Update CHANGELOG.md (#13867)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-20 07:22:13 +00:00
CanbiZ (MickLesk) bf97029f57 Pangolin: pre-apply schema migrations to prevent data loss (#13861) 2026-04-20 09:21:54 +02:00
community-scripts-pr-app[bot] 5859c06715 Update CHANGELOG.md (#13866)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-20 07:21:49 +00:00
CanbiZ (MickLesk) 9b4fc56de6 Change migration messages to warnings (#13860) 2026-04-20 09:21:25 +02:00
community-scripts-pr-app[bot] 3a5244e285 Update CHANGELOG.md (#13865)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-20 07:20:48 +00:00
CanbiZ (MickLesk) 1025715a74 slskd: migrate config keys for 0.25.0 breaking change (#13862) 2026-04-20 09:20:20 +02:00
CanbiZ (MickLesk) ec3b79bb61 PocketBase Bot: fix field names notes_json -> notes, install_methods_json -> install_methods
Collection fields were renamed but bot still used old _json suffixed names.
2026-04-20 09:02:27 +02:00
community-scripts-pr-app[bot] 37dfb58d29 Update CHANGELOG.md (#13864)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-20 06:54:03 +00:00
CanbiZ (MickLesk) d95073f505 PocketBase Bot: fix double-stringify on notes_json patch
notes_json was sent as JSON.stringify(arr) inside JSON.stringify(),
causing PocketBase to receive a string instead of a JSON array.
patchMethods already does it correctly — align patchNotes.
2026-04-20 08:53:34 +02:00
community-scripts-pr-app[bot] b34e773cbb Update .app files (#13852)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-04-19 19:49:53 +02:00
community-scripts-pr-app[bot] 99782d0422 Update CHANGELOG.md (#13853)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-19 17:48:22 +00:00
push-app-to-main[bot] 00e4a0a6b8 Add nametag (ct) (#13849)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-04-19 19:47:54 +02:00
community-scripts-pr-app[bot] 28b3b45fdb Update CHANGELOG.md (#13843)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-19 00:10:33 +00:00
community-scripts-pr-app[bot] eba01133f4 Archive old changelog entries (#13842)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-19 00:10:06 +00:00
community-scripts-pr-app[bot] 1f04bb5012 Update CHANGELOG.md (#13841)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-18 20:54:47 +00:00
community-scripts-pr-app[bot] d480a5c9b7 Update CHANGELOG.md (#13840)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-18 20:54:30 +00:00
CanbiZ (MickLesk) 458402ea41 fix(clean-orphaned-lvm): check all cluster nodes for VM/CT configs (#13837) 2026-04-18 22:54:24 +02:00
community-scripts-pr-app[bot] 18cd4d401c Update CHANGELOG.md (#13839)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-18 20:54:11 +00:00
CanbiZ (MickLesk) 91f5c3dfb0 fix(babybuddy): set DJANGO_SETTINGS_MODULE before migrate in update (#13836) 2026-04-18 22:54:04 +02:00
community-scripts-pr-app[bot] 9c604f624c Update CHANGELOG.md (#13838)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-18 20:53:49 +00:00
CanbiZ (MickLesk) d5421486d8 fix(litellm): add prisma generate and use venv binary directly (#13835) 2026-04-18 22:53:45 +02:00
CanbiZ (MickLesk) 19dabf4970 fix(yamtrack): add missing nginx.conf sed edits to update script (#13834) 2026-04-18 22:53:27 +02:00
community-scripts-pr-app[bot] 8aee0efa4d Update .app files (#13833)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-04-18 21:35:18 +02:00
community-scripts-pr-app[bot] 11fdfa549a Update CHANGELOG.md (#13832)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-18 19:09:50 +00:00
push-app-to-main[bot] 0fc913478e Add dagu (ct) (#13830)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-04-18 21:09:22 +02:00
community-scripts-pr-app[bot] ada387f1a2 Update CHANGELOG.md (#13829)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-18 15:40:17 +00:00
Tom Frenzel 4fd80e3e60 fix(sparkyfitness-garmin): recreate venv on update (#13824) 2026-04-18 17:39:48 +02:00
community-scripts-pr-app[bot] d19cc5b69c Update CHANGELOG.md (#13820)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-17 19:58:55 +00:00
CanbiZ (MickLesk) 02c174c4a2 fix(gpu): pin IGC version to compute-runtime compatible tag (#13814) 2026-04-17 21:58:31 +02:00
community-scripts-pr-app[bot] fb9e8d90a7 Update CHANGELOG.md (#13818)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-17 18:28:52 +00:00
Abbas Egbeyemi 501ea61d2e add clear flag to replace the virtual env in the bambuddy update script (#13816) 2026-04-17 20:28:27 +02:00
99 changed files with 3216 additions and 347 deletions
+146
View File
@@ -1,3 +1,149 @@
## 2026-04-18
### 🆕 New Scripts
- Dagu ([#13830](https://github.com/community-scripts/ProxmoxVE/pull/13830))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- BabyBuddy: set DJANGO_SETTINGS_MODULE before migrate in update [@MickLesk](https://github.com/MickLesk) ([#13836](https://github.com/community-scripts/ProxmoxVE/pull/13836))
- litellm: add prisma generate and use venv binary directly [@MickLesk](https://github.com/MickLesk) ([#13835](https://github.com/community-scripts/ProxmoxVE/pull/13835))
- yamtrack: add missing nginx.conf sed edits to update script [@MickLesk](https://github.com/MickLesk) ([#13834](https://github.com/community-scripts/ProxmoxVE/pull/13834))
### 🧰 Tools
- #### 🐞 Bug Fixes
- SparkyFitness Garmin Microservice: fix update function [@tomfrenzel](https://github.com/tomfrenzel) ([#13824](https://github.com/community-scripts/ProxmoxVE/pull/13824))
- #### 🔧 Refactor
- Clean-Orphan-LVM: check all cluster nodes for VM/CT configs [@MickLesk](https://github.com/MickLesk) ([#13837](https://github.com/community-scripts/ProxmoxVE/pull/13837))
## 2026-04-17
### 🆕 New Scripts
- step-ca ([#13775](https://github.com/community-scripts/ProxmoxVE/pull/13775))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- core: pin IGC version to compute-runtime compatible tag (Intel GPU) [@MickLesk](https://github.com/MickLesk) ([#13814](https://github.com/community-scripts/ProxmoxVE/pull/13814))
- Fix for bambuddy community script update [@abbasegbeyemi](https://github.com/abbasegbeyemi) ([#13816](https://github.com/community-scripts/ProxmoxVE/pull/13816))
- Umami: Fix update procedure [@tremor021](https://github.com/tremor021) ([#13807](https://github.com/community-scripts/ProxmoxVE/pull/13807))
### 💾 Core
- #### 🐞 Bug Fixes
- core: sanitize mount_fs input — strip spaces and trailing commas [@MickLesk](https://github.com/MickLesk) ([#13806](https://github.com/community-scripts/ProxmoxVE/pull/13806))
- #### 🔧 Refactor
- core: fix some pct create issues (telemetry) + cleanup [@MickLesk](https://github.com/MickLesk) ([#13810](https://github.com/community-scripts/ProxmoxVE/pull/13810))
## 2026-04-16
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Add pnpm as a dependency to ghost-cli install [@YourFavoriteKyle](https://github.com/YourFavoriteKyle) ([#13789](https://github.com/community-scripts/ProxmoxVE/pull/13789))
### 💾 Core
- #### ✨ New Features
- core: wire ENABLE_MKNOD and ALLOW_MOUNT_FS into LXC features [@MickLesk](https://github.com/MickLesk) ([#13796](https://github.com/community-scripts/ProxmoxVE/pull/13796))
## 2026-04-15
### 🆕 New Scripts
- iGotify ([#13773](https://github.com/community-scripts/ProxmoxVE/pull/13773))
- GitHub-Runner ([#13709](https://github.com/community-scripts/ProxmoxVE/pull/13709))
- Revert "Remove low-install-count CT scripts and installers (#13570)" [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13752](https://github.com/community-scripts/ProxmoxVE/pull/13752))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- [alpine-nextcloud] Update Nginx MIME types to support .mjs files [@GuiltyFox](https://github.com/GuiltyFox) ([#13771](https://github.com/community-scripts/ProxmoxVE/pull/13771))
- Domain Monitor: Fix file ownership after update [@tremor021](https://github.com/tremor021) ([#13759](https://github.com/community-scripts/ProxmoxVE/pull/13759))
- #### 💥 Breaking Changes
- Reitti: refactor scripts for v4 - remove RabbitMQ and Photon [@MickLesk](https://github.com/MickLesk) ([#13728](https://github.com/community-scripts/ProxmoxVE/pull/13728))
- #### 🔧 Refactor
- Semaphore: add BoltDB to SQLite migration [@tremor021](https://github.com/tremor021) ([#13779](https://github.com/community-scripts/ProxmoxVE/pull/13779))
### 📚 Documentation
- cleanup: remove docs/, update README & CONTRIBUTING, fix repo config [@MickLesk](https://github.com/MickLesk) ([#13770](https://github.com/community-scripts/ProxmoxVE/pull/13770))
## 2026-04-14
### 🚀 Updated Scripts
- Immich: Pin photo-processing library revisions [@vhsdream](https://github.com/vhsdream) ([#13748](https://github.com/community-scripts/ProxmoxVE/pull/13748))
- #### 🐞 Bug Fixes
- BentoPDF: Nginx fixes [@tremor021](https://github.com/tremor021) ([#13741](https://github.com/community-scripts/ProxmoxVE/pull/13741))
- Zerobyte: add git to dependencies to fix bun install failure [@Copilot](https://github.com/Copilot) ([#13721](https://github.com/community-scripts/ProxmoxVE/pull/13721))
- alpine-nextcloud-install: do not use deprecated nginx config [@AlexanderStein](https://github.com/AlexanderStein) ([#13726](https://github.com/community-scripts/ProxmoxVE/pull/13726))
- #### ✨ New Features
- Mealie: support v3.15+ Nuxt 4 migration [@MickLesk](https://github.com/MickLesk) ([#13731](https://github.com/community-scripts/ProxmoxVE/pull/13731))
- #### 🔧 Refactor
- Lyrion: correct service name and version file in update script [@MickLesk](https://github.com/MickLesk) ([#13734](https://github.com/community-scripts/ProxmoxVE/pull/13734))
- Changedetection: move env vars from service file to .env [@tremor021](https://github.com/tremor021) ([#13732](https://github.com/community-scripts/ProxmoxVE/pull/13732))
## 2026-04-13
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Slskd: Remove stale Soularr lock file on startup and redirect logs to stderr [@MickLesk](https://github.com/MickLesk) ([#13669](https://github.com/community-scripts/ProxmoxVE/pull/13669))
- Bambuddy: preserve database and archive on update [@Copilot](https://github.com/Copilot) ([#13706](https://github.com/community-scripts/ProxmoxVE/pull/13706))
- #### ✨ New Features
- Immich: Pin version to 2.7.5 [@vhsdream](https://github.com/vhsdream) ([#13715](https://github.com/community-scripts/ProxmoxVE/pull/13715))
- Bytestash: auto backup/restore data on update [@MickLesk](https://github.com/MickLesk) ([#13707](https://github.com/community-scripts/ProxmoxVE/pull/13707))
- OpenCloud: pin version to 6.0.0 [@vhsdream](https://github.com/vhsdream) ([#13691](https://github.com/community-scripts/ProxmoxVE/pull/13691))
- #### 💥 Breaking Changes
- Mealie: pin version to v3.14.0 in install and update scripts [@Copilot](https://github.com/Copilot) ([#13724](https://github.com/community-scripts/ProxmoxVE/pull/13724))
- #### 🔧 Refactor
- core: remove unused TEMP_DIR mktemp leak in build_container / clean sonarqube [@MickLesk](https://github.com/MickLesk) ([#13708](https://github.com/community-scripts/ProxmoxVE/pull/13708))
## 2026-04-12
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Alpine-Wakapi: Remove container checks in update_script function [@MickLesk](https://github.com/MickLesk) ([#13694](https://github.com/community-scripts/ProxmoxVE/pull/13694))
- #### 🔧 Refactor
- IronClaw: Install keychain dependencies and launch in a DBus session [@MickLesk](https://github.com/MickLesk) ([#13692](https://github.com/community-scripts/ProxmoxVE/pull/13692))
- MeTube: Allow pnpm build scripts to fix ERR_PNPM_IGNORED_BUILDS [@MickLesk](https://github.com/MickLesk) ([#13668](https://github.com/community-scripts/ProxmoxVE/pull/13668))
## 2026-04-11 ## 2026-04-11
### 🚀 Updated Scripts ### 🚀 Updated Scripts
+6 -6
View File
@@ -337,8 +337,8 @@ jobs:
if (infoMatch) { if (infoMatch) {
// ── INFO SUBCOMMAND ────────────────────────────────────────────── // ── INFO SUBCOMMAND ──────────────────────────────────────────────
const notesArr = readJsonBlob(record.notes_json); const notesArr = readJsonBlob(record.notes);
const methodsArr = readJsonBlob(record.install_methods_json); const methodsArr = readJsonBlob(record.install_methods);
const out = []; const out = [];
out.push('️ **PocketBase Bot**: Info for **`' + slug + '`**\n'); out.push('️ **PocketBase Bot**: Info for **`' + slug + '`**\n');
@@ -382,13 +382,13 @@ jobs:
// ── NOTE SUBCOMMAND ────────────────────────────────────────────── // ── NOTE SUBCOMMAND ──────────────────────────────────────────────
const noteAction = noteMatch[1].toLowerCase(); const noteAction = noteMatch[1].toLowerCase();
const noteArgsStr = rest.substring(noteMatch[0].length).trim(); const noteArgsStr = rest.substring(noteMatch[0].length).trim();
let notesArr = readJsonBlob(record.notes_json); let notesArr = readJsonBlob(record.notes);
async function patchNotes(arr) { async function patchNotes(arr) {
const res = await request(recordsUrl + '/' + record.id, { const res = await request(recordsUrl + '/' + record.id, {
method: 'PATCH', method: 'PATCH',
headers: { 'Authorization': token, 'Content-Type': 'application/json' }, headers: { 'Authorization': token, 'Content-Type': 'application/json' },
body: JSON.stringify({ notes_json: JSON.stringify(arr) }) body: JSON.stringify({ notes: arr })
}); });
if (!res.ok) { if (!res.ok) {
await addReaction('-1'); await addReaction('-1');
@@ -504,7 +504,7 @@ jobs:
// ── METHOD SUBCOMMAND ──────────────────────────────────────────── // ── METHOD SUBCOMMAND ────────────────────────────────────────────
const methodArgs = rest.replace(/^method\s*/i, '').trim(); const methodArgs = rest.replace(/^method\s*/i, '').trim();
const methodListMode = !methodArgs || methodArgs.toLowerCase() === 'list'; const methodListMode = !methodArgs || methodArgs.toLowerCase() === 'list';
let methodsArr = readJsonBlob(record.install_methods_json); let methodsArr = readJsonBlob(record.install_methods);
// Method field classification // Method field classification
const RESOURCE_KEYS = { cpu: 'number', ram: 'number', hdd: 'number', os: 'string', version: 'string' }; const RESOURCE_KEYS = { cpu: 'number', ram: 'number', hdd: 'number', os: 'string', version: 'string' };
@@ -526,7 +526,7 @@ jobs:
const res = await request(recordsUrl + '/' + record.id, { const res = await request(recordsUrl + '/' + record.id, {
method: 'PATCH', method: 'PATCH',
headers: { 'Authorization': token, 'Content-Type': 'application/json' }, headers: { 'Authorization': token, 'Content-Type': 'application/json' },
body: JSON.stringify({ install_methods_json: arr }) body: JSON.stringify({ install_methods: arr })
}); });
if (!res.ok) { if (!res.ok) {
await addReaction('-1'); await addReaction('-1');
+155 -172
View File
@@ -38,6 +38,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
@@ -51,7 +54,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
<details> <details>
<summary><h4>April (11 entries)</h4></summary> <summary><h4>April (18 entries)</h4></summary>
[View April 2026 Changelog](.github/changelogs/2026/04.md) [View April 2026 Changelog](.github/changelogs/2026/04.md)
@@ -442,6 +445,155 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details> </details>
## 2026-04-24
### 🆕 New Scripts
- fireshare ([#13995](https://github.com/community-scripts/ProxmoxVE/pull/13995))
- Transmute ([#13935](https://github.com/community-scripts/ProxmoxVE/pull/13935))
- Jitsi-Meet ([#13897](https://github.com/community-scripts/ProxmoxVE/pull/13897))
### 🚀 Updated Scripts
- Update wger.sh [@Soppster1029](https://github.com/Soppster1029) ([#13977](https://github.com/community-scripts/ProxmoxVE/pull/13977))
- #### 🔧 Refactor
- Refactor: Ghostfolio [@MickLesk](https://github.com/MickLesk) ([#13990](https://github.com/community-scripts/ProxmoxVE/pull/13990))
## 2026-04-23
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- mealie: start.sh missing after failed update [@MickLesk](https://github.com/MickLesk) ([#13958](https://github.com/community-scripts/ProxmoxVE/pull/13958))
- twingate-connector: perform real apt upgrade during update flow [@MickLesk](https://github.com/MickLesk) ([#13959](https://github.com/community-scripts/ProxmoxVE/pull/13959))
- #### ✨ New Features
- core: auto-size NODE_OPTIONS heap [@MickLesk](https://github.com/MickLesk) ([#13960](https://github.com/community-scripts/ProxmoxVE/pull/13960))
- #### 🔧 Refactor
- Update scripts to match standard [@tremor021](https://github.com/tremor021) ([#13956](https://github.com/community-scripts/ProxmoxVE/pull/13956))
### 💾 Core
- #### 🐞 Bug Fixes
- tools.func: upgrade Node.js minor/patch on same major version [@MickLesk](https://github.com/MickLesk) ([#13957](https://github.com/community-scripts/ProxmoxVE/pull/13957))
- core: hotfix - prefer silent mode on PHS env conflict [@MickLesk](https://github.com/MickLesk) ([#13951](https://github.com/community-scripts/ProxmoxVE/pull/13951))
- #### 🔧 Refactor
- core: improve system update information / lxc stack upgrade [@MickLesk](https://github.com/MickLesk) ([#13970](https://github.com/community-scripts/ProxmoxVE/pull/13970))
## 2026-04-22
### 🆕 New Scripts
- Dashy ([#13817](https://github.com/community-scripts/ProxmoxVE/pull/13817))
- Mini-QR ([#13902](https://github.com/community-scripts/ProxmoxVE/pull/13902))
- ownfoil ([#13904](https://github.com/community-scripts/ProxmoxVE/pull/13904))
- ERPNext ([#13921](https://github.com/community-scripts/ProxmoxVE/pull/13921))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- add --clear to uv venv in update_script() to prevent interactive prompt [@MickLesk](https://github.com/MickLesk) ([#13926](https://github.com/community-scripts/ProxmoxVE/pull/13926))
### 💾 Core
- #### ✨ New Features
- core: Add PHS_VERBOSE env var to skip verbose mode prompts [@gormanity](https://github.com/gormanity) ([#13797](https://github.com/community-scripts/ProxmoxVE/pull/13797))
## 2026-04-21
### 🆕 New Scripts
- gogs ([#13896](https://github.com/community-scripts/ProxmoxVE/pull/13896))
- anchor ([#13895](https://github.com/community-scripts/ProxmoxVE/pull/13895))
- minthcm ([#13903](https://github.com/community-scripts/ProxmoxVE/pull/13903))
- foldergram ([#13900](https://github.com/community-scripts/ProxmoxVE/pull/13900))
### 🚀 Updated Scripts
- OpenCloud: Pin version to 6.1.0 [@vhsdream](https://github.com/vhsdream) ([#13890](https://github.com/community-scripts/ProxmoxVE/pull/13890))
- #### 🐞 Bug Fixes
- Domain-Locker: Update dependencies [@tremor021](https://github.com/tremor021) ([#13901](https://github.com/community-scripts/ProxmoxVE/pull/13901))
- homelable: fix install failure by correcting password-reset chmod target [@Copilot](https://github.com/Copilot) ([#13894](https://github.com/community-scripts/ProxmoxVE/pull/13894))
- #### ✨ New Features
- FileFlows: Update dependencies [@tremor021](https://github.com/tremor021) ([#13917](https://github.com/community-scripts/ProxmoxVE/pull/13917))
## 2026-04-20
### 🆕 New Scripts
- WhoDB ([#13880](https://github.com/community-scripts/ProxmoxVE/pull/13880))
### 🚀 Updated Scripts
- pangolin: create migration tables before data transfer to prevent role loss [@MickLesk](https://github.com/MickLesk) ([#13874](https://github.com/community-scripts/ProxmoxVE/pull/13874))
- #### 🐞 Bug Fixes
- Pangolin: pre-apply schema migrations to prevent data loss [@MickLesk](https://github.com/MickLesk) ([#13861](https://github.com/community-scripts/ProxmoxVE/pull/13861))
- ActualBudget: change migration messages to warnings [@MickLesk](https://github.com/MickLesk) ([#13860](https://github.com/community-scripts/ProxmoxVE/pull/13860))
- slskd: migrate config keys for 0.25.0 breaking change [@MickLesk](https://github.com/MickLesk) ([#13862](https://github.com/community-scripts/ProxmoxVE/pull/13862))
- #### ✨ New Features
- Wanderer: add pocketbase CLI wrapper with env [@MickLesk](https://github.com/MickLesk) ([#13863](https://github.com/community-scripts/ProxmoxVE/pull/13863))
- feat(homelable): add password reset utility script [@davidsoncabista](https://github.com/davidsoncabista) ([#13798](https://github.com/community-scripts/ProxmoxVE/pull/13798))
- #### 🔧 Refactor
- Several Scripts: Bump NodeJS to align Node.js versions with upstream for 5 scripts [@MickLesk](https://github.com/MickLesk) ([#13875](https://github.com/community-scripts/ProxmoxVE/pull/13875))
- Refactor: PMG Post Install [@MickLesk](https://github.com/MickLesk) ([#13693](https://github.com/community-scripts/ProxmoxVE/pull/13693))
### 💾 Core
- #### 🐞 Bug Fixes
- core: detect Perl breakage after LXC stack upgrade and improve storage validation [@MickLesk](https://github.com/MickLesk) ([#13879](https://github.com/community-scripts/ProxmoxVE/pull/13879))
## 2026-04-19
### 🆕 New Scripts
- nametag ([#13849](https://github.com/community-scripts/ProxmoxVE/pull/13849))
## 2026-04-18
### 🆕 New Scripts
- Dagu ([#13830](https://github.com/community-scripts/ProxmoxVE/pull/13830))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- BabyBuddy: set DJANGO_SETTINGS_MODULE before migrate in update [@MickLesk](https://github.com/MickLesk) ([#13836](https://github.com/community-scripts/ProxmoxVE/pull/13836))
- litellm: add prisma generate and use venv binary directly [@MickLesk](https://github.com/MickLesk) ([#13835](https://github.com/community-scripts/ProxmoxVE/pull/13835))
- yamtrack: add missing nginx.conf sed edits to update script [@MickLesk](https://github.com/MickLesk) ([#13834](https://github.com/community-scripts/ProxmoxVE/pull/13834))
### 🧰 Tools
- #### 🐞 Bug Fixes
- SparkyFitness Garmin Microservice: fix update function [@tomfrenzel](https://github.com/tomfrenzel) ([#13824](https://github.com/community-scripts/ProxmoxVE/pull/13824))
- #### 🔧 Refactor
- Clean-Orphan-LVM: check all cluster nodes for VM/CT configs [@MickLesk](https://github.com/MickLesk) ([#13837](https://github.com/community-scripts/ProxmoxVE/pull/13837))
## 2026-04-17 ## 2026-04-17
### 🆕 New Scripts ### 🆕 New Scripts
@@ -452,6 +604,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### 🐞 Bug Fixes - #### 🐞 Bug Fixes
- core: pin IGC version to compute-runtime compatible tag (Intel GPU) [@MickLesk](https://github.com/MickLesk) ([#13814](https://github.com/community-scripts/ProxmoxVE/pull/13814))
- Fix for bambuddy community script update [@abbasegbeyemi](https://github.com/abbasegbeyemi) ([#13816](https://github.com/community-scripts/ProxmoxVE/pull/13816))
- Umami: Fix update procedure [@tremor021](https://github.com/tremor021) ([#13807](https://github.com/community-scripts/ProxmoxVE/pull/13807)) - Umami: Fix update procedure [@tremor021](https://github.com/tremor021) ([#13807](https://github.com/community-scripts/ProxmoxVE/pull/13807))
### 💾 Core ### 💾 Core
@@ -993,174 +1147,3 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### 🔧 Refactor - #### 🔧 Refactor
- Harden code-server addon install script [@MickLesk](https://github.com/MickLesk) ([#13116](https://github.com/community-scripts/ProxmoxVE/pull/13116)) - Harden code-server addon install script [@MickLesk](https://github.com/MickLesk) ([#13116](https://github.com/community-scripts/ProxmoxVE/pull/13116))
## 2026-03-19
### 🚀 Updated Scripts
- Owncast: increase default disk size from 2GB to 10GB [@Copilot](https://github.com/Copilot) ([#13079](https://github.com/community-scripts/ProxmoxVE/pull/13079))
- #### 🐞 Bug Fixes
- fix: remove extra backslash to match single quoted here-doc [@Zelnes](https://github.com/Zelnes) ([#13108](https://github.com/community-scripts/ProxmoxVE/pull/13108))
- Reactive-Resume: Upgrade Node to 24 and enable Corepack [@MickLesk](https://github.com/MickLesk) ([#13093](https://github.com/community-scripts/ProxmoxVE/pull/13093))
- Increase Tracearr RAM; derive APP_VERSION [@MickLesk](https://github.com/MickLesk) ([#13087](https://github.com/community-scripts/ProxmoxVE/pull/13087))
- ProjectSend: Update application access URL [@tremor021](https://github.com/tremor021) ([#13078](https://github.com/community-scripts/ProxmoxVE/pull/13078))
- Dispatcharr: use npm install --no-audit --progress=false [@MickLesk](https://github.com/MickLesk) ([#13074](https://github.com/community-scripts/ProxmoxVE/pull/13074))
- core: reorder hwaccel setup and adjust GPU group usermod [@MickLesk](https://github.com/MickLesk) ([#13072](https://github.com/community-scripts/ProxmoxVE/pull/13072))
- #### ✨ New Features
- tools.func: display pin reason in release-check messages [@MickLesk](https://github.com/MickLesk) ([#13095](https://github.com/community-scripts/ProxmoxVE/pull/13095))
- NocoDB: Unpin Version to latest [@MickLesk](https://github.com/MickLesk) ([#13094](https://github.com/community-scripts/ProxmoxVE/pull/13094))
### 💾 Core
- #### 🐞 Bug Fixes
- tools.func: use dpkg-query for reliable JDK version detection [@MickLesk](https://github.com/MickLesk) ([#13101](https://github.com/community-scripts/ProxmoxVE/pull/13101))
### 📚 Documentation
- Update link from helper-scripts.com to community-scripts.org [@adnanvaldes](https://github.com/adnanvaldes) ([#13098](https://github.com/community-scripts/ProxmoxVE/pull/13098))
- github: add PocketBase bot workflow [@MickLesk](https://github.com/MickLesk) ([#13075](https://github.com/community-scripts/ProxmoxVE/pull/13075))
## 2026-03-18
### 🆕 New Scripts
- Alpine-Ntfy [@MickLesk](https://github.com/MickLesk) ([#13048](https://github.com/community-scripts/ProxmoxVE/pull/13048))
- Split-Pro ([#12975](https://github.com/community-scripts/ProxmoxVE/pull/12975))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Tdarr: use curl_with_retry and correct exit code [@MickLesk](https://github.com/MickLesk) ([#13060](https://github.com/community-scripts/ProxmoxVE/pull/13060))
- reitti: fix: v4 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13039](https://github.com/community-scripts/ProxmoxVE/pull/13039))
- Paperless-NGX: increase default RAM to 3GB [@MickLesk](https://github.com/MickLesk) ([#13018](https://github.com/community-scripts/ProxmoxVE/pull/13018))
- Plex: restart service after update to apply new version [@MickLesk](https://github.com/MickLesk) ([#13017](https://github.com/community-scripts/ProxmoxVE/pull/13017))
- #### ✨ New Features
- tools: centralize GPU group setup via setup_hwaccel [@MickLesk](https://github.com/MickLesk) ([#13044](https://github.com/community-scripts/ProxmoxVE/pull/13044))
- Termix: add guacd build and systemd integration [@MickLesk](https://github.com/MickLesk) ([#12999](https://github.com/community-scripts/ProxmoxVE/pull/12999))
- #### 🔧 Refactor
- Podman: replace deprecated commands with Quadlets [@MickLesk](https://github.com/MickLesk) ([#13052](https://github.com/community-scripts/ProxmoxVE/pull/13052))
- Refactor: Jellyfin repo, ffmpeg package and symlinks [@MickLesk](https://github.com/MickLesk) ([#13045](https://github.com/community-scripts/ProxmoxVE/pull/13045))
- pve-scripts-local: Increase default disk size from 4GB to 10GB [@MickLesk](https://github.com/MickLesk) ([#13009](https://github.com/community-scripts/ProxmoxVE/pull/13009))
### 💾 Core
- #### ✨ New Features
- tools.func Implement pg_cron setup for setup_postgresql [@MickLesk](https://github.com/MickLesk) ([#13053](https://github.com/community-scripts/ProxmoxVE/pull/13053))
- tools.func: Implement check_for_gh_tag function [@MickLesk](https://github.com/MickLesk) ([#12998](https://github.com/community-scripts/ProxmoxVE/pull/12998))
- tools.func: Implement fetch_and_deploy_gh_tag function [@MickLesk](https://github.com/MickLesk) ([#13000](https://github.com/community-scripts/ProxmoxVE/pull/13000))
## 2026-03-17
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Gluetun: add OpenVPN process user and cleanup stale config [@MickLesk](https://github.com/MickLesk) ([#13016](https://github.com/community-scripts/ProxmoxVE/pull/13016))
- Frigate: check OpenVino model files exist before configuring detector and use curl_with_retry instead of default wget [@MickLesk](https://github.com/MickLesk) ([#13019](https://github.com/community-scripts/ProxmoxVE/pull/13019))
### 💾 Core
- #### 🔧 Refactor
- tools.func: Update `create_self_signed_cert()` [@tremor021](https://github.com/tremor021) ([#13008](https://github.com/community-scripts/ProxmoxVE/pull/13008))
## 2026-03-16
### 🆕 New Scripts
- Gluetun ([#12976](https://github.com/community-scripts/ProxmoxVE/pull/12976))
- Anytype-Server ([#12974](https://github.com/community-scripts/ProxmoxVE/pull/12974))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: use gcc-13 for compilation & add uv python pre-install with retry logic [@MickLesk](https://github.com/MickLesk) ([#12935](https://github.com/community-scripts/ProxmoxVE/pull/12935))
- Tautulli: add setuptools<81 constraint to update script [@MickLesk](https://github.com/MickLesk) ([#12959](https://github.com/community-scripts/ProxmoxVE/pull/12959))
- Seerr: add missing build deps [@MickLesk](https://github.com/MickLesk) ([#12960](https://github.com/community-scripts/ProxmoxVE/pull/12960))
- fix: yubal update [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12961](https://github.com/community-scripts/ProxmoxVE/pull/12961))
### 💾 Core
- #### 🐞 Bug Fixes
- hwaccel: remove ROCm install from AMD APU setup [@MickLesk](https://github.com/MickLesk) ([#12958](https://github.com/community-scripts/ProxmoxVE/pull/12958))
## 2026-03-15
### 🆕 New Scripts
- Yamtrack ([#12936](https://github.com/community-scripts/ProxmoxVE/pull/12936))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Wishlist: use --frozen-lockfile for pnpm install [@MickLesk](https://github.com/MickLesk) ([#12892](https://github.com/community-scripts/ProxmoxVE/pull/12892))
- SparkyFitness: use --legacy-peer-deps for npm install [@MickLesk](https://github.com/MickLesk) ([#12888](https://github.com/community-scripts/ProxmoxVE/pull/12888))
- Frigate: add fallback for OpenVino labelmap file [@MickLesk](https://github.com/MickLesk) ([#12889](https://github.com/community-scripts/ProxmoxVE/pull/12889))
- #### 🔧 Refactor
- Refactor: ITSM-NG [@MickLesk](https://github.com/MickLesk) ([#12918](https://github.com/community-scripts/ProxmoxVE/pull/12918))
- core: unify RELEASE variable for check_for_gh_release and fetch_and_deploy [@MickLesk](https://github.com/MickLesk) ([#12917](https://github.com/community-scripts/ProxmoxVE/pull/12917))
- Standardize NSAPP names across VM scripts [@MickLesk](https://github.com/MickLesk) ([#12924](https://github.com/community-scripts/ProxmoxVE/pull/12924))
### 💾 Core
- #### ✨ New Features
- core: retry downloads with exponential backoff [@MickLesk](https://github.com/MickLesk) ([#12896](https://github.com/community-scripts/ProxmoxVE/pull/12896))
### ❔ Uncategorized
- [go2rtc] Add ffmpeg dependency to install script [@Copilot](https://github.com/Copilot) ([#12944](https://github.com/community-scripts/ProxmoxVE/pull/12944))
## 2026-03-14
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Patchmon: remove v prefix from pinned version [@MickLesk](https://github.com/MickLesk) ([#12891](https://github.com/community-scripts/ProxmoxVE/pull/12891))
### 💾 Core
- #### 🐞 Bug Fixes
- tools.func: don't abort on AMD repo apt update failure [@MickLesk](https://github.com/MickLesk) ([#12890](https://github.com/community-scripts/ProxmoxVE/pull/12890))
## 2026-03-13
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Hotfix: Removed clean install usage from original script. [@nickheyer](https://github.com/nickheyer) ([#12870](https://github.com/community-scripts/ProxmoxVE/pull/12870))
- #### 🔧 Refactor
- Discopanel: V2 Support + Script rewrite [@nickheyer](https://github.com/nickheyer) ([#12763](https://github.com/community-scripts/ProxmoxVE/pull/12763))
### 🧰 Tools
- update-apps: fix restore path, add PBS support and improve restore messages [@omertahaoztop](https://github.com/omertahaoztop) ([#12528](https://github.com/community-scripts/ProxmoxVE/pull/12528))
- #### 🐞 Bug Fixes
- fix(pve-privilege-converter): handle already stopped container in manage_states [@liuqitoday](https://github.com/liuqitoday) ([#12765](https://github.com/community-scripts/ProxmoxVE/pull/12765))
### 📚 Documentation
- Update: Docs/website metadata workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12858](https://github.com/community-scripts/ProxmoxVE/pull/12858))
+3 -3
View File
@@ -48,9 +48,9 @@ function update_script() {
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
fi fi
else else
msg_info "Old Installation Found, you need to migrate your data and recreate to a new container" msg_warn "Old Installation Found, you need to migrate your data and recreate to a new container"
msg_info "Please follow the instructions on the Actual Budget website to migrate your data" msg_warn "Please follow the instructions on the Actual Budget website to migrate your data"
msg_info "https://actualbudget.org/docs/backup-restore/backup" msg_warn "https://actualbudget.org/docs/backup-restore/backup"
exit exit
fi fi
exit exit
+83
View File
@@ -0,0 +1,83 @@
#!/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/ZhFahim/anchor
APP="Anchor"
var_tags="${var_tags:-notes;productivity;sync}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f ~/.anchor ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "anchor" "ZhFahim/anchor"; then
msg_info "Stopping Services"
systemctl stop anchor-web anchor-server
msg_ok "Stopped Services"
msg_info "Backing up Configuration"
cp /opt/anchor/.env /opt/anchor.env.bak
msg_ok "Backed up Configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "anchor" "ZhFahim/anchor" "tarball"
msg_info "Building Server"
cd /opt/anchor/server
$STD pnpm install --frozen-lockfile
$STD pnpm prisma generate
$STD pnpm build
[[ -d src/generated ]] && mkdir -p dist/src && cp -R src/generated dist/src/
msg_ok "Built Server"
msg_info "Building Web Interface"
cd /opt/anchor/web
$STD pnpm install --frozen-lockfile
SERVER_URL=http://127.0.0.1:3001 $STD pnpm build
cp -r .next/static .next/standalone/.next/static
cp -r public .next/standalone/public
msg_ok "Built Web Interface"
cp /opt/anchor.env.bak /opt/anchor/.env
rm -f /opt/anchor.env.bak
msg_info "Running Database Migrations"
cd /opt/anchor/server
set -a && source /opt/anchor/.env && set +a
$STD pnpm prisma migrate deploy
msg_ok "Ran Database Migrations"
msg_info "Starting Services"
systemctl start anchor-server anchor-web
msg_ok "Started Services"
msg_ok "Updated ${APP}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
+75
View File
@@ -0,0 +1,75 @@
#!/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: SystemIdleProcess
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/caronc/apprise-api
APP="Apprise-API"
var_tags="${var_tags:-notification}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d "/opt/apprise" ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "apprise" "caronc/apprise-api"; then
msg_info "Stopping Service"
systemctl stop apprise-api
msg_ok "Stopped Service"
PYTHON_VERSION="3.12" setup_uv
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "apprise" "caronc/apprise-api" "tarball"
msg_info "Updating Apprise-API"
cd /opt/apprise
cp ./requirements.txt /etc/requirements.txt
$STD apt install -y nginx git
$STD uv pip install -r requirements.txt gunicorn supervisor --system
cp -fr apprise_api/static /usr/share/nginx/html/s/
mv apprise_api/ webapp
touch /etc/nginx/server-override.conf
touch /etc/nginx/location-override.conf
mkdir -p /config/store /attach /plugin /tmp/apprise /opt/apprise/logs
chmod 1777 /tmp/apprise && chmod 777 /config /config/store /attach /plugin /opt/apprise/logs
sed -i \
-e '/[[]program:nginx]/,/^[[]/ s|stdout_logfile=/dev/stdout|stdout_logfile=/opt/apprise/logs/nginx.log|' \
-e '/[[]program:nginx]/,/^[[]/ s|stderr_logfile=/dev/stderr|stderr_logfile=/opt/apprise/logs/nginx_error.log|' \
-e '/[[]program:gunicorn]/,/^[[]/ s|stdout_logfile=/dev/stdout|stdout_logfile=/opt/apprise/logs/gunicorn.log|' \
-e '/[[]program:gunicorn]/,/^[[]/ s|stderr_logfile=/dev/stderr|stderr_logfile=/opt/apprise/logs/gunicorn_error.log|' \
-e '/[[]supervisord]/,/^[[]/ s|logfile=/dev/null|logfile=/opt/apprise/logs/supervisor.log|' \
-e 's|_maxbytes=0|_maxbytes=10485760|g' \
/opt/apprise/webapp/etc/supervisord.conf
msg_ok "Updated Apprise-API"
msg_info "Starting Service"
systemctl start apprise-api
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
+1
View File
@@ -48,6 +48,7 @@ function update_script() {
mv /tmp/production.py.bak /opt/babybuddy/babybuddy/settings/production.py mv /tmp/production.py.bak /opt/babybuddy/babybuddy/settings/production.py
source .venv/bin/activate source .venv/bin/activate
$STD uv pip install -r requirements.txt $STD uv pip install -r requirements.txt
export DJANGO_SETTINGS_MODULE=babybuddy.settings.production
$STD python manage.py migrate $STD python manage.py migrate
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
+1 -1
View File
@@ -48,7 +48,7 @@ function update_script() {
msg_info "Updating Python Dependencies" msg_info "Updating Python Dependencies"
cd /opt/bambuddy cd /opt/bambuddy
$STD uv venv $STD uv venv --clear
$STD uv pip install -r requirements.txt $STD uv pip install -r requirements.txt
msg_ok "Updated Python Dependencies" msg_ok "Updated Python Dependencies"
+1 -1
View File
@@ -44,7 +44,7 @@ function update_script() {
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
cd /opt/calibre-web cd /opt/calibre-web
$STD uv venv $STD uv venv --clear /opt/calibre-web/.venv
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir --upgrade pip setuptools wheel $STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir --upgrade pip setuptools wheel
$STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir -r requirements.txt $STD uv pip install --python /opt/calibre-web/.venv/bin/python --no-cache-dir -r requirements.txt
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
+1 -1
View File
@@ -39,7 +39,7 @@ function update_script() {
[ -f /opt/checkmate/client/.env.local ] && cp /opt/checkmate/client/.env.local /opt/checkmate_client.env.local.bak [ -f /opt/checkmate/client/.env.local ] && cp /opt/checkmate/client/.env.local /opt/checkmate_client.env.local.bak
msg_ok "Backed up Data" msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" "tarball"
msg_info "Updating Checkmate Server" msg_info "Updating Checkmate Server"
cd /opt/checkmate/server cd /opt/checkmate/server
+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://dagu.sh/
APP="Dagu"
var_tags="${var_tags:-automation;workflow;scheduler}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /opt/dagu/dagu ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "dagu" "dagucloud/dagu"; then
msg_info "Stopping Service"
systemctl stop dagu
msg_ok "Stopped Service"
msg_info "Backing up Data"
cp -r /opt/dagu/data /opt/dagu_data_backup
msg_ok "Backed up Data"
fetch_and_deploy_gh_release "dagu" "dagucloud/dagu" "prebuild" "latest" "/opt/dagu" "dagu_*_linux_amd64.tar.gz"
msg_info "Restoring Data"
mkdir -p /opt/dagu/data
cp -r /opt/dagu_data_backup/. /opt/dagu/data
rm -rf /opt/dagu_data_backup
msg_ok "Restored Data"
msg_info "Starting Service"
systemctl start dagu
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
+73
View File
@@ -0,0 +1,73 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: tteck (tteckster) | Co-Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://dashy.to/
APP="Dashy"
var_tags="${var_tags:-dashboard}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/dashy/public/ ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "dashy" "Lissy93/dashy"; then
msg_info "Stopping Service"
systemctl stop dashy
msg_ok "Stopped Service"
msg_info "Backing up conf.yml"
if [[ -f /opt/dashy/public/conf.yml ]]; then
cp -R /opt/dashy/public/conf.yml /opt/dashy_conf_backup.yml
else
cp -R /opt/dashy/user-data/conf.yml /opt/dashy_conf_backup.yml
fi
msg_ok "Backed up conf.yml"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dashy" "Lissy93/dashy" "prebuild" "latest" "/opt/dashy" "dashy-*.tar.gz"
msg_info "Updating Dashy"
cd /opt/dashy
$STD yarn install --ignore-engines --network-timeout 300000
msg_ok "Updated Dashy"
msg_info "Restoring conf.yml"
cp -R /opt/dashy_conf_backup.yml /opt/dashy/user-data
msg_ok "Restored conf.yml"
msg_info "Cleaning"
rm -rf /opt/dashy_conf_backup.yml /opt/dashy/public/conf.yml
msg_ok "Cleaned"
msg_info "Starting Dashy"
systemctl start dashy
msg_ok "Started Dashy"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}"
+36 -34
View File
@@ -20,41 +20,43 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /opt/domain-locker ]]; then if [[ ! -d /opt/domain-locker ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "domain-locker" "Lissy93/domain-locker"; then
msg_info "Stopping Service"
systemctl stop domain-locker
msg_info "Service stopped"
PG_VERSION="17" setup_postgresql
NODE_VERSION="22" setup_nodejs
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-locker" "Lissy93/domain-locker" "tarball"
msg_info "Installing Modules (patience)"
cd /opt/domain-locker
$STD npm install
msg_ok "Installed Modules"
msg_info "Building Domain-Locker (a lot of patience)"
set -a
source /opt/domain-locker.env
set +a
$STD npm run build
msg_info "Built Domain-Locker"
msg_info "Restarting Services"
systemctl start domain-locker
msg_ok "Restarted Services"
msg_ok "Updated successfully!"
fi
exit exit
fi
ensure_dependencies whois
if check_for_gh_release "domain-locker" "Lissy93/domain-locker"; then
msg_info "Stopping Service"
systemctl stop domain-locker
msg_info "Service stopped"
PG_VERSION="17" setup_postgresql
NODE_VERSION="22" setup_nodejs
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "domain-locker" "Lissy93/domain-locker" "tarball"
msg_info "Installing Modules (patience)"
cd /opt/domain-locker
$STD npm install
msg_ok "Installed Modules"
msg_info "Building Domain-Locker (a lot of patience)"
set -a
source /opt/domain-locker.env
set +a
$STD npm run build
msg_info "Built Domain-Locker"
msg_info "Restarting Services"
systemctl start domain-locker
msg_ok "Restarted Services"
msg_ok "Updated successfully!"
fi
exit
} }
start start
+47
View File
@@ -0,0 +1,47 @@
#!/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/frappe/erpnext
APP="ERPNext"
var_tags="${var_tags:-erp;business;accounting}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-20}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/frappe-bench ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ERPNext"
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:$PATH"; cd /opt/frappe-bench && bench update --reset'
msg_ok "Updated ERPNext"
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
echo -e "${INFO}${YW} Credentials:${CL}"
echo -e "${TAB}${BGN}Username: Administrator${CL}"
echo -e "${TAB}${BGN}Password: see ~/erpnext.creds${CL}"
+74
View File
@@ -0,0 +1,74 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/ShaneIsrael/fireshare
APP="Fireshare"
var_tags="${var_tags:-sharing;video}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/fireshare ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "fireshare" "ShaneIsrael/fireshare"; then
msg_info "Stopping Service"
systemctl stop fireshare
msg_ok "Stopped Service"
mv /opt/fireshare/fireshare.env /opt
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "fireshare" "ShaneIsrael/fireshare" "tarball"
mv /opt/fireshare.env /opt/fireshare
rm -f /usr/local/bin/fireshare
msg_info "Updating Fireshare"
cd /opt/fireshare
$STD uv venv --clear
$STD .venv/bin/python -m ensurepip --upgrade
$STD .venv/bin/python -m pip install --upgrade --break-system-packages pip
$STD .venv/bin/python -m pip install --no-cache-dir --break-system-packages --ignore-installed app/server
cp .venv/bin/fireshare /usr/local/bin/fireshare
export FLASK_APP="/opt/fireshare/app/server/fireshare:create_app()"
export DATA_DIRECTORY=/opt/fireshare-data
export IMAGE_DIRECTORY=/opt/fireshare-images
export VIDEO_DIRECTORY=/opt/fireshare-videos
export PROCESSED_DIRECTORY=/opt/fireshare-processed
$STD uv run flask db upgrade
msg_ok "Updated Fireshare"
msg_info "Starting Service"
systemctl start fireshare
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
cleanup_lxc
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
+1 -1
View File
@@ -38,7 +38,7 @@ function update_script() {
cp -r /opt/flatnotes/data /opt/flatnotes_data_backup cp -r /opt/flatnotes/data /opt/flatnotes_data_backup
msg_ok "Backed up Configuration and Data" msg_ok "Backed up Configuration and Data"
fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes" fetch_and_deploy_gh_release "flatnotes" "dullage/flatnotes" "tarball"
msg_info "Updating Flatnotes" msg_info "Updating Flatnotes"
cd /opt/flatnotes/client cd /opt/flatnotes/client
+61
View File
@@ -0,0 +1,61 @@
#!/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: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/foldergram/foldergram
APP="Foldergram"
var_tags="${var_tags:-photos}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/foldergram ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "foldergram" "foldergram/foldergram"; then
msg_info "Stopping Service"
systemctl stop foldergram
msg_ok "Stopped Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "foldergram" "foldergram/foldergram" "tarball"
msg_info "Installing Foldergram"
cd /opt/foldergram
$STD pnpm install --frozen-lockfile
$STD pnpm run build
msg_ok "Installed Foldergram"
msg_info "Starting Service"
systemctl start foldergram
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
cleanup_lxc
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4141${CL}"
+1
View File
@@ -47,6 +47,7 @@ function update_script() {
msg_info "Updating Ghostfolio" msg_info "Updating Ghostfolio"
mv /opt/env.backup /opt/ghostfolio/.env mv /opt/env.backup /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
$STD npm run build:production $STD npm run build:production
+65
View File
@@ -0,0 +1,65 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://gogs.io/
APP="Gogs"
var_tags="${var_tags:-git;code;devops}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_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/gogs/gogs ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "gogs" "gogs/gogs"; then
msg_info "Stopping Service"
systemctl stop gogs
msg_ok "Stopped Service"
msg_info "Backing up 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_amd64.tar.gz"
msg_info "Restoring Data"
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"
systemctl start gogs
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
+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 @@
_ __ __
/ | / /___ _____ ___ ___ / /_____ _____ _
/ |/ / __ `/ __ `__ \/ _ \/ __/ __ `/ __ `/
/ /| / /_/ / / / / / / __/ /_/ /_/ / /_/ /
/_/ |_/\__,_/_/ /_/ /_/\___/\__/\__,_/\__, /
/____/
+6
View File
@@ -0,0 +1,6 @@
____ _ __
____ _ ______ / __/___ (_) /
/ __ \ | /| / / __ \/ /_/ __ \/ / /
/ /_/ / |/ |/ / / / / __/ /_/ / / /
\____/|__/|__/_/ /_/_/ \____/_/_/
+6
View File
@@ -0,0 +1,6 @@
______ __
/_ __/________ _____ _________ ___ __ __/ /____
/ / / ___/ __ `/ __ \/ ___/ __ `__ \/ / / / __/ _ \
/ / / / / /_/ / / / (__ ) / / / / / /_/ / /_/ __/
/_/ /_/ \__,_/_/ /_/____/_/ /_/ /_/\__,_/\__/\___/
+6
View File
@@ -0,0 +1,6 @@
_ ____ ____ ____
| | / / /_ ____ / __ \/ __ )
| | /| / / __ \/ __ \/ / / / __ |
| |/ |/ / / / / /_/ / /_/ / /_/ /
|__/|__/_/ /_/\____/_____/_____/
+1 -1
View File
@@ -43,7 +43,7 @@ function update_script() {
msg_info "Updating Python Dependencies" msg_info "Updating Python Dependencies"
cd /opt/homelable/backend cd /opt/homelable/backend
$STD uv venv /opt/homelable/backend/.venv $STD uv venv --clear /opt/homelable/backend/.venv
$STD uv pip install --python /opt/homelable/backend/.venv/bin/python -r requirements.txt $STD uv pip install --python /opt/homelable/backend/.venv/bin/python -r requirements.txt
msg_ok "Updated Python Dependencies" msg_ok "Updated Python Dependencies"
+3
View File
@@ -27,6 +27,9 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
NODE_VERSION="24" setup_nodejs
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
$STD apt update $STD apt update
$STD apt -y upgrade $STD apt -y upgrade
+8 -2
View File
@@ -32,10 +32,16 @@ function update_script() {
if ! grep -qEi 'ubuntu' /etc/os-release; then if ! grep -qEi 'ubuntu' /etc/os-release; then
msg_info "Updating Intel Dependencies" msg_info "Updating Intel Dependencies"
rm -f ~/.intel-* || true rm -f ~/.intel-* || true
fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb"
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb" # Fetch compute-runtime first so /tmp/gh_rel.json is populated for IGC tag resolution
fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb" fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb" fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb"
local igc_tag
_resolve_igc_tag igc_tag
fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-core-2_*_amd64.deb"
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-opencl-2_*_amd64.deb"
msg_ok "Updated Intel Dependencies" msg_ok "Updated Intel Dependencies"
fi fi
+50
View File
@@ -0,0 +1,50 @@
#!/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://jitsi.org/
APP="Jitsi-Meet"
var_tags="${var_tags:-video;conference;communication}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-12}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
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 /etc/jitsi ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating Jitsi Meet"
$STD apt update
$STD apt install -y --only-upgrade \
jitsi-meet \
jicofo \
jitsi-videobridge2 \
prosody
msg_ok "Updated Jitsi Meet"
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}${CL}"
+2
View File
@@ -29,6 +29,8 @@ function update_script() {
exit exit
fi fi
NODE_VERSION="22" setup_nodejs
if check_for_gh_release "kima-hub" "Chevron7Locked/kima-hub"; then if check_for_gh_release "kima-hub" "Chevron7Locked/kima-hub"; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop kima-frontend kima-backend kima-analyzer kima-analyzer-clap systemctl stop kima-frontend kima-backend kima-analyzer kima-analyzer-clap
+1 -1
View File
@@ -39,7 +39,7 @@ function update_script() {
cp /opt/linkding/.env /opt/linkding_env_backup cp /opt/linkding/.env /opt/linkding_env_backup
msg_ok "Backed up Data" msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" "tarball"
msg_info "Restoring Data" msg_info "Restoring Data"
cp -r /opt/linkding_data_backup/. /opt/linkding/data cp -r /opt/linkding_data_backup/. /opt/linkding/data
+7 -1
View File
@@ -38,12 +38,18 @@ function update_script() {
msg_info "Updating LiteLLM" msg_info "Updating LiteLLM"
$STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma $STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma
$STD "$VENV_PATH/bin/prisma" generate
msg_ok "LiteLLM updated" msg_ok "LiteLLM updated"
msg_info "Updating DB Schema" msg_info "Updating DB Schema"
$STD uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup $STD /opt/litellm/.venv/bin/litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
msg_ok "DB Schema Updated" msg_ok "DB Schema Updated"
msg_info "Updating Service"
sed -i 's|ExecStart=uv --directory=/opt/litellm run litellm|ExecStart=/opt/litellm/.venv/bin/litellm|' /etc/systemd/system/litellm.service
systemctl daemon-reload
msg_ok "Updated Service"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start litellm systemctl start litellm
msg_ok "Started Service" msg_ok "Started Service"
+17 -12
View File
@@ -38,10 +38,27 @@ function update_script() {
msg_info "Backing up Configuration" msg_info "Backing up Configuration"
cp -f /opt/mealie/mealie.env /opt/mealie.env cp -f /opt/mealie/mealie.env /opt/mealie.env
[[ -f /opt/mealie/start.sh ]] && cp -f /opt/mealie/start.sh /opt/mealie.start.sh
msg_ok "Backup completed" msg_ok "Backup completed"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball"
msg_info "Restoring Configuration"
mv -f /opt/mealie.env /opt/mealie/mealie.env
if [[ -f /opt/mealie.start.sh ]]; then
mv -f /opt/mealie.start.sh /opt/mealie/start.sh
else
cat <<'STARTEOF' >/opt/mealie/start.sh
#!/bin/bash
set -a
source /opt/mealie/mealie.env
set +a
exec uv run mealie
STARTEOF
fi
chmod +x /opt/mealie/start.sh
msg_ok "Configuration restored"
msg_info "Installing Python Dependencies with uv" msg_info "Installing Python Dependencies with uv"
cd /opt/mealie cd /opt/mealie
$STD uv sync --frozen --extra pgsql $STD uv sync --frozen --extra pgsql
@@ -70,18 +87,6 @@ function update_script() {
$STD uv run python -m nltk.downloader -d /nltk_data averaged_perceptron_tagger_eng $STD uv run python -m nltk.downloader -d /nltk_data averaged_perceptron_tagger_eng
msg_ok "Updated NLTK Data" msg_ok "Updated NLTK Data"
msg_info "Restoring Configuration"
mv -f /opt/mealie.env /opt/mealie/mealie.env
cat <<'STARTEOF' >/opt/mealie/start.sh
#!/bin/bash
set -a
source /opt/mealie/mealie.env
set +a
exec uv run mealie
STARTEOF
chmod +x /opt/mealie/start.sh
msg_ok "Configuration restored"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start mealie systemctl start mealie
msg_ok "Started Service" msg_ok "Started Service"
+63
View File
@@ -0,0 +1,63 @@
#!/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: doge0420
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/lyqht/mini-qr
APP="Mini-QR"
var_tags="${var_tags:-QRcode;}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/mini-qr ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "mini-qr" "lyqht/mini-qr"; then
msg_info "Stopping Service"
systemctl stop caddy
msg_ok "Stopped Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "mini-qr" "lyqht/mini-qr" "tarball"
msg_info "Installing Dependencies"
cd /opt/mini-qr
$STD npm install
msg_ok "Installed Dependencies"
msg_info "Building MiniQR"
$STD npm run build
msg_ok "Built MiniQR"
msg_info "Starting Service"
systemctl start caddy
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
+41
View File
@@ -0,0 +1,41 @@
#!/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: MintHCM
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/minthcm/minthcm
APP="MintHCM"
var_tags="${var_tags:-hcm}"
var_disk="${var_disk:-20}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /var/www/MintHCM ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_custom "🚀" "${GN}" "The app offers a built-in updater. Please use it."
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
+2
View File
@@ -28,6 +28,8 @@ function update_script() {
exit exit
fi fi
NODE_VERSION="24" setup_nodejs
if check_for_gh_release "myip" "jason5ng32/MyIP"; then if check_for_gh_release "myip" "jason5ng32/MyIP"; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop myip systemctl stop myip
+83
View File
@@ -0,0 +1,83 @@
#!/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
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/mattogodoy/nametag
APP="Nametag"
var_tags="${var_tags:-contacts;crm}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/nametag ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "nametag" "mattogodoy/nametag"; then
msg_info "Stopping Service"
systemctl stop nametag
msg_ok "Stopped Service"
msg_info "Backing up 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"
msg_info "Rebuilding Application"
cd /opt/nametag
$STD npm ci
set -a
source /opt/nametag/.env
set +a
$STD npx prisma generate
$STD npm run build
cp -r /opt/nametag/.next/static /opt/nametag/.next/standalone/.next/static
cp -r /opt/nametag/public /opt/nametag/.next/standalone/public
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"
cd /opt/nametag
$STD npx prisma migrate deploy
msg_ok "Ran Migrations"
msg_info "Starting Service"
systemctl start nametag
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
+1 -1
View File
@@ -34,7 +34,7 @@ function update_script() {
systemctl stop nodecast-tv systemctl stop nodecast-tv
msg_ok "Stopped Service" msg_ok "Stopped Service"
fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv" fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv" "tarball"
msg_info "Updating Modules" msg_info "Updating Modules"
cd /opt/nodecast-tv cd /opt/nodecast-tv
+1 -1
View File
@@ -29,7 +29,7 @@ function update_script() {
exit exit
fi fi
RELEASE="v6.0.0" RELEASE="v6.1.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
+1 -1
View File
@@ -28,7 +28,7 @@ function update_script() {
exit exit
fi fi
NODE_VERSION="22" setup_nodejs NODE_VERSION="24" setup_nodejs
if check_for_gh_release "outline" "outline/outline"; then if check_for_gh_release "outline" "outline/outline"; then
msg_info "Stopping Services" msg_info "Stopping Services"
+69
View File
@@ -0,0 +1,69 @@
#!/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: pajjski
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/a1ex4/ownfoil
APP="ownfoil"
var_tags="${var_tags:-gaming}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/ownfoil ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "ownfoil" "a1ex4/ownfoil"; then
msg_info "Stopping Service"
systemctl stop ownfoil
msg_ok "Stopped Service"
msg_info "Backing up Data"
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"
msg_info "Installing Dependencies"
cd /opt/ownfoil
$STD source .venv/bin/activate
$STD uv pip install -r requirements.txt
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"
systemctl start ownfoil
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8465${CL}"
+27 -1
View File
@@ -69,7 +69,33 @@ function update_script() {
msg_info "Running database migrations" msg_info "Running database migrations"
cd /opt/pangolin cd /opt/pangolin
ENVIRONMENT=prod $STD npx drizzle-kit push --config drizzle.sqlite.config.ts
# Pre-apply potentially destructive schema changes safely so drizzle-kit
# does not recreate tables (which would delete all rows).
local DB="/opt/pangolin/config/db/db.sqlite"
if [[ -f "$DB" ]]; then
sqlite3 "$DB" "ALTER TABLE 'orgs' ADD COLUMN 'settingsLogRetentionDaysConnection' integer DEFAULT 0 NOT NULL;" 2>/dev/null || true
sqlite3 "$DB" "ALTER TABLE 'clientSitesAssociationsCache' ADD COLUMN 'isJitMode' integer DEFAULT 0 NOT NULL;" 2>/dev/null || true
# Create new role-mapping tables and migrate data before drizzle-kit
# drops the roleId columns from userOrgs and userInvites.
sqlite3 "$DB" "CREATE TABLE IF NOT EXISTS 'userOrgRoles' (
'userId' text NOT NULL REFERENCES 'user'('id') ON DELETE CASCADE,
'orgId' text NOT NULL REFERENCES 'orgs'('orgId') ON DELETE CASCADE,
'roleId' integer NOT NULL REFERENCES 'roles'('roleId') ON DELETE CASCADE,
UNIQUE('userId', 'orgId', 'roleId')
);" 2>/dev/null || true
sqlite3 "$DB" "INSERT OR IGNORE INTO 'userOrgRoles' (userId, orgId, roleId) SELECT userId, orgId, roleId FROM 'userOrgs' WHERE roleId IS NOT NULL;" 2>/dev/null || true
sqlite3 "$DB" "CREATE TABLE IF NOT EXISTS 'userInviteRoles' (
'inviteId' text NOT NULL REFERENCES 'userInvites'('inviteId') ON DELETE CASCADE,
'roleId' integer NOT NULL REFERENCES 'roles'('roleId') ON DELETE CASCADE,
PRIMARY KEY('inviteId', 'roleId')
);" 2>/dev/null || true
sqlite3 "$DB" "INSERT OR IGNORE INTO 'userInviteRoles' (inviteId, roleId) SELECT inviteId, roleId FROM 'userInvites' WHERE roleId IS NOT NULL;" 2>/dev/null || true
fi
ENVIRONMENT=prod $STD npx drizzle-kit push --force --config drizzle.sqlite.config.ts
msg_ok "Ran database migrations" msg_ok "Ran database migrations"
msg_info "Updating Badger plugin version" msg_info "Updating Badger plugin version"
+1 -1
View File
@@ -44,7 +44,7 @@ function update_script() {
msg_info "Installing Python Dependencies" msg_info "Installing Python Dependencies"
cd /opt/profilarr/backend cd /opt/profilarr/backend
$STD uv venv /opt/profilarr/backend/.venv $STD uv venv --clear /opt/profilarr/backend/.venv
sed 's/==/>=/g' requirements.txt >requirements-relaxed.txt sed 's/==/>=/g' requirements.txt >requirements-relaxed.txt
$STD uv pip install --python /opt/profilarr/backend/.venv/bin/python -r requirements-relaxed.txt $STD uv pip install --python /opt/profilarr/backend/.venv/bin/python -r requirements-relaxed.txt
rm -f requirements-relaxed.txt rm -f requirements-relaxed.txt
+1 -1
View File
@@ -29,7 +29,7 @@ function update_script() {
exit exit
fi fi
NODE_VERSION="22" setup_nodejs NODE_VERSION="24" setup_nodejs
PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.12" setup_uv
if check_for_gh_release "shelfmark" "calibrain/shelfmark"; then if check_for_gh_release "shelfmark" "calibrain/shelfmark"; then
+4
View File
@@ -43,6 +43,10 @@ function update_script() {
msg_info "Restoring config" msg_info "Restoring config"
mv /opt/slskd.yml.bak /opt/slskd/config/slskd.yml mv /opt/slskd.yml.bak /opt/slskd/config/slskd.yml
# Migrate 0.25.0 breaking config key renames
sed -i 's/^global:/transfers:/' /opt/slskd/config/slskd.yml
sed -i 's/^integration:/integrations:/' /opt/slskd/config/slskd.yml
msg_ok "Restored config" msg_ok "Restored config"
msg_info "Starting Service(s)" msg_info "Starting Service(s)"
+3 -1
View File
@@ -145,7 +145,7 @@ EOF
cp -r /opt/termix/uploads /opt/termix_uploads_backup cp -r /opt/termix/uploads /opt/termix_uploads_backup
msg_ok "Backed up Data" msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" "tarball"
msg_info "Recreating Directories" msg_info "Recreating Directories"
mkdir -p /opt/termix/html \ mkdir -p /opt/termix/html \
@@ -155,6 +155,8 @@ EOF
/opt/termix/nginx/client_body /opt/termix/nginx/client_body
msg_ok "Recreated Directories" msg_ok "Recreated Directories"
NODE_VERSION="24" setup_nodejs
msg_info "Building Frontend" msg_info "Building Frontend"
cd /opt/termix cd /opt/termix
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
+83
View File
@@ -0,0 +1,83 @@
#!/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/transmute-app/transmute
APP="Transmute"
var_tags="${var_tags:-files;converter}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-16}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/transmute ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
fetch_and_deploy_gh_release "calibre" "kovidgoyal/calibre" "prebuild" "latest" "/opt/calibre" "calibre-*-x86_64.txz"
ln -sf /opt/calibre/ebook-convert /usr/bin/ebook-convert
fetch_and_deploy_gh_release "drawio" "jgraph/drawio-desktop" "binary" "latest" "" "drawio-amd64-*.deb"
fetch_and_deploy_gh_release "pandoc" "jgm/pandoc" "binary" "latest" "" "pandoc-*-amd64.deb"
if check_for_gh_release "transmute" "transmute-app/transmute"; then
msg_info "Stopping Service"
systemctl stop transmute
msg_ok "Stopped Service"
msg_info "Backing up Data"
cp /opt/transmute/backend/.env /opt/transmute.env.bak
cp -r /opt/transmute/data /opt/transmute_data_bak
msg_ok "Backed up Data"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "transmute" "transmute-app/transmute" "tarball"
msg_info "Updating Python Dependencies"
cd /opt/transmute
$STD uv venv --clear /opt/transmute/.venv
$STD uv pip install --python /opt/transmute/.venv/bin/python -r requirements.txt
msg_ok "Updated Python Dependencies"
msg_info "Rebuilding Frontend"
cd /opt/transmute/frontend
$STD npm ci
$STD npm run build
msg_ok "Rebuilt Frontend"
msg_info "Restoring Data"
cp /opt/transmute.env.bak /opt/transmute/backend/.env
cp -r /opt/transmute_data_bak/. /opt/transmute/data/
rm -f /opt/transmute.env.bak
rm -rf /opt/transmute_data_bak
msg_ok "Restored Data"
msg_info "Starting Service"
systemctl start transmute
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3313${CL}"
+3 -2
View File
@@ -29,8 +29,9 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP}" msg_info "Updating Twingate Connector"
ensure_dependencies twingate-connector $STD apt update
$STD apt install -y --only-upgrade twingate-connector
$STD systemctl restart twingate-connector $STD systemctl restart twingate-connector
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
exit exit
+2
View File
@@ -53,6 +53,8 @@ function update_script() {
set -a && source /opt/wger/.env && set +a set -a && source /opt/wger/.env && set +a
export DJANGO_SETTINGS_MODULE=settings.main export DJANGO_SETTINGS_MODULE=settings.main
$STD uv pip install . $STD uv pip install .
$STD npm install
$STD npm run build:css:sass
$STD uv run python manage.py migrate $STD uv run python manage.py migrate
$STD uv run python manage.py collectstatic --no-input $STD uv run python manage.py collectstatic --no-input
msg_ok "Updated wger" msg_ok "Updated wger"
+54
View File
@@ -0,0 +1,54 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://whodb.com/
APP="WhoDB"
var_tags="${var_tags:-database;management;gui}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /opt/whodb/whodb ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "whodb" "clidey/whodb"; then
msg_info "Stopping Service"
systemctl stop whodb
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "whodb" "clidey/whodb" "singlefile" "latest" "/opt/whodb" "whodb-*-linux-amd64"
msg_info "Starting Service"
systemctl start whodb
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
+4 -1
View File
@@ -43,7 +43,7 @@ function update_script() {
msg_info "Installing Python Dependencies" msg_info "Installing Python Dependencies"
cd /opt/yamtrack cd /opt/yamtrack
$STD uv venv .venv $STD uv venv --clear .venv
$STD uv pip install --no-cache-dir -r requirements.txt $STD uv pip install --no-cache-dir -r requirements.txt
msg_ok "Installed Python Dependencies" msg_ok "Installed Python Dependencies"
@@ -61,7 +61,10 @@ function update_script() {
msg_info "Updating Nginx Configuration" msg_info "Updating Nginx Configuration"
cp /opt/yamtrack/nginx.conf /etc/nginx/nginx.conf cp /opt/yamtrack/nginx.conf /etc/nginx/nginx.conf
sed -i 's|user abc;|user www-data;|' /etc/nginx/nginx.conf sed -i 's|user abc;|user www-data;|' /etc/nginx/nginx.conf
sed -i 's|pid /tmp/nginx.pid;|pid /run/nginx.pid;|' /etc/nginx/nginx.conf
sed -i 's|/yamtrack/staticfiles/|/opt/yamtrack/src/staticfiles/|' /etc/nginx/nginx.conf sed -i 's|/yamtrack/staticfiles/|/opt/yamtrack/src/staticfiles/|' /etc/nginx/nginx.conf
sed -i 's|error_log /dev/stderr|error_log /var/log/nginx/error.log|' /etc/nginx/nginx.conf
sed -i 's|access_log /dev/stdout|access_log /var/log/nginx/access.log|' /etc/nginx/nginx.conf
$STD systemctl reload nginx $STD systemctl reload nginx
msg_ok "Updated Nginx Configuration" msg_ok "Updated Nginx Configuration"
+99
View File
@@ -0,0 +1,99 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/ZhFahim/anchor
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
PG_VERSION="17" setup_postgresql
PG_DB_NAME="anchor" PG_DB_USER="anchor" setup_postgresql_db
fetch_and_deploy_gh_release "anchor" "ZhFahim/anchor" "tarball"
msg_info "Building Server"
cd /opt/anchor/server
$STD pnpm install --frozen-lockfile
$STD pnpm prisma generate
$STD pnpm build
[[ -d src/generated ]] && mkdir -p dist/src && cp -R src/generated dist/src/
msg_ok "Built Server"
msg_info "Building Web Interface"
cd /opt/anchor/web
$STD pnpm install --frozen-lockfile
SERVER_URL=http://127.0.0.1:3001 $STD pnpm build
cp -r .next/static .next/standalone/.next/static
cp -r public .next/standalone/public
msg_ok "Built Web Interface"
msg_info "Configuring Application"
JWT_SECRET=$(openssl rand -base64 32)
cat <<EOF >/opt/anchor/.env
APP_URL=http://${LOCAL_IP}:3000
JWT_SECRET=${JWT_SECRET}
DATABASE_URL=postgresql://anchor:${PG_DB_PASS}@localhost:5432/anchor
PG_HOST=localhost
PG_USER=anchor
PG_PASSWORD=${PG_DB_PASS}
PG_DATABASE=anchor
PG_PORT=5432
EOF
msg_ok "Configured Application"
msg_info "Running Database Migrations"
cd /opt/anchor/server
set -a && source /opt/anchor/.env && set +a
$STD pnpm prisma migrate deploy
msg_ok "Ran Database Migrations"
msg_info "Creating Services"
cat <<EOF >/etc/systemd/system/anchor-server.service
[Unit]
Description=Anchor API Server
After=network.target postgresql.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/anchor/server
EnvironmentFile=/opt/anchor/.env
ExecStart=/usr/bin/node dist/src/main.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/anchor-web.service
[Unit]
Description=Anchor Web Interface
After=network.target anchor-server.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/anchor/web/.next/standalone
EnvironmentFile=/opt/anchor/.env
Environment=PORT=3000 HOSTNAME=0.0.0.0 NODE_ENV=production
ExecStart=/usr/bin/node server.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now anchor-server anchor-web
msg_ok "Created Services"
motd_ssh
customize
cleanup_lxc
+66
View File
@@ -0,0 +1,66 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: SystemIdleProcess
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/caronc/apprise-api
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
nginx \
git
msg_ok "Installed Dependencies"
PYTHON_VERSION="3.12" setup_uv
fetch_and_deploy_gh_release "apprise" "caronc/apprise-api" "tarball"
msg_info "Setup Apprise-API"
cd /opt/apprise
cp ./requirements.txt /etc/requirements.txt
$STD uv pip install -r requirements.txt gunicorn supervisor --system
cp -fr apprise_api/static /usr/share/nginx/html/s/
mv apprise_api/ webapp
touch /etc/nginx/server-override.conf
touch /etc/nginx/location-override.conf
mkdir -p /config/store /attach /plugin /tmp/apprise /opt/apprise/logs
chmod 1777 /tmp/apprise && chmod 777 /config /config/store /attach /plugin /opt/apprise/logs
sed -i \
-e '/[[]program:nginx]/,/^[[]/ s|stdout_logfile=/dev/stdout|stdout_logfile=/opt/apprise/logs/nginx.log|' \
-e '/[[]program:nginx]/,/^[[]/ s|stderr_logfile=/dev/stderr|stderr_logfile=/opt/apprise/logs/nginx_error.log|' \
-e '/[[]program:gunicorn]/,/^[[]/ s|stdout_logfile=/dev/stdout|stdout_logfile=/opt/apprise/logs/gunicorn.log|' \
-e '/[[]program:gunicorn]/,/^[[]/ s|stderr_logfile=/dev/stderr|stderr_logfile=/opt/apprise/logs/gunicorn_error.log|' \
-e '/[[]supervisord]/,/^[[]/ s|logfile=/dev/null|logfile=/opt/apprise/logs/supervisor.log|' \
-e 's|_maxbytes=0|_maxbytes=10485760|g' \
/opt/apprise/webapp/etc/supervisord.conf
msg_ok "Setup Apprise-API"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/apprise-api.service
[Unit]
Description=Apprise-API Service
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/opt/apprise
ExecStart=/opt/apprise/webapp/supervisord-startup
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now apprise-api
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+1 -1
View File
@@ -22,7 +22,7 @@ msg_ok "Installed Dependencies"
MONGO_VERSION="8.0" setup_mongodb MONGO_VERSION="8.0" setup_mongodb
NODE_VERSION="22" setup_nodejs NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate" "tarball"
msg_info "Configuring Checkmate" msg_info "Configuring Checkmate"
JWT_SECRET="$(openssl rand -hex 32)" JWT_SECRET="$(openssl rand -hex 32)"
+47
View File
@@ -0,0 +1,47 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://dagu.sh/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "dagu" "dagucloud/dagu" "prebuild" "latest" "/opt/dagu" "dagu_*_linux_amd64.tar.gz"
msg_info "Setting up Dagu"
mkdir -p /opt/dagu/data
msg_ok "Set up Dagu"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/dagu.service
[Unit]
Description=Dagu Workflow Engine
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/dagu
Environment=DAGU_HOME=/opt/dagu/data
Environment=DAGU_HOST=0.0.0.0
Environment=DAGU_PORT=8080
ExecStart=/opt/dagu/dagu start-all
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now dagu
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+42
View File
@@ -0,0 +1,42 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: tteck (tteckster) | Co-Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://dashy.to/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs
fetch_and_deploy_gh_release "dashy" "Lissy93/dashy" "prebuild" "latest" "/opt/dashy" "dashy-*.tar.gz"
msg_info "Installing Dashy"
cd /opt/dashy
$STD yarn install --ignore-engines --network-timeout 300000
msg_ok "Installed Dashy"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/dashy.service
[Unit]
Description=dashy
[Service]
Type=simple
WorkingDirectory=/opt/dashy
Environment=NODE_OPTIONS=--openssl-legacy-provider
ExecStart=/usr/bin/node server.js
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now dashy
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+4
View File
@@ -13,6 +13,10 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing dependencies"
$STD apt install -y whois
msg_ok "Installed dependencies"
PG_VERSION="17" setup_postgresql PG_VERSION="17" setup_postgresql
PG_DB_NAME="domainlocker_db" PG_DB_USER="domainlocker" setup_postgresql_db PG_DB_NAME="domainlocker_db" PG_DB_USER="domainlocker" setup_postgresql_db
NODE_VERSION="22" setup_nodejs NODE_VERSION="22" setup_nodejs
+106
View File
@@ -0,0 +1,106 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/frappe/erpnext
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
git \
build-essential \
python3-dev \
libffi-dev \
libssl-dev \
redis-server \
nginx \
supervisor \
fail2ban \
xvfb \
libfontconfig1 \
libxrender1 \
fontconfig \
libjpeg-dev \
libmariadb-dev \
python3-pip
msg_ok "Installed Dependencies"
NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs
UV_PYTHON="3.13" setup_uv
setup_mariadb
msg_info "Configuring MariaDB for ERPNext"
cat <<EOF >/etc/mysql/mariadb.conf.d/50-erpnext.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
EOF
$STD systemctl restart mariadb
msg_ok "Configured MariaDB for ERPNext"
msg_info "Installing wkhtmltopdf"
WKHTMLTOPDF_URL="https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.bookworm_amd64.deb"
$STD curl -fsSL -o /tmp/wkhtmltox.deb "$WKHTMLTOPDF_URL"
$STD apt install -y /tmp/wkhtmltox.deb
rm -f /tmp/wkhtmltox.deb
msg_ok "Installed wkhtmltopdf"
msg_info "Installing Frappe Bench"
useradd -m -s /bin/bash frappe
chown frappe:frappe /opt
echo "frappe ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/frappe
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:$PATH"; uv tool install frappe-bench'
msg_ok "Installed Frappe Bench"
msg_info "Initializing Frappe Bench"
ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
DB_ROOT_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '${DB_ROOT_PASS}'; FLUSH PRIVILEGES;"
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:$PATH"; cd /opt && bench init --frappe-branch version-15 frappe-bench'
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:$PATH"; cd /opt/frappe-bench && bench get-app erpnext --branch version-15'
$STD sudo -u frappe bash -c "export PATH=\"\$HOME/.local/bin:\$PATH\"; cd /opt/frappe-bench && bench new-site site1.local --db-root-username root --db-root-password \"$DB_ROOT_PASS\" --admin-password \"$ADMIN_PASS\" --install-app erpnext --set-default"
msg_ok "Initialized Frappe Bench"
msg_info "Configuring ERPNext"
cat <<EOF >/opt/frappe-bench/.env
ADMIN_PASSWORD=${ADMIN_PASS}
DB_ROOT_PASSWORD=${DB_ROOT_PASS}
SITE_NAME=site1.local
EOF
{
echo "ERPNext Credentials"
echo "=================="
echo "Admin Username: Administrator"
echo "Admin Password: ${ADMIN_PASS}"
echo "DB Root Password: ${DB_ROOT_PASS}"
echo "Site Name: site1.local"
} >~/erpnext.creds
$STD systemctl enable --now redis-server
msg_ok "Configured ERPNext"
msg_info "Setting up Production"
BENCH_PY="/home/frappe/.local/share/uv/tools/frappe-bench/bin/python"
$STD sudo -u frappe bash -c "curl -fsSL https://bootstrap.pypa.io/get-pip.py | \"${BENCH_PY}\""
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:$PATH"; uv tool install ansible'
ln -sf /home/frappe/.local/bin/ansible* /usr/local/bin/
$STD bash -c 'export PATH="/home/frappe/.local/bin:$PATH"; cd /opt/frappe-bench && bench setup production frappe --yes'
ln -sf /opt/frappe-bench/config/supervisor.conf /etc/supervisor/conf.d/frappe-bench.conf
$STD supervisorctl reread
$STD supervisorctl update
$STD systemctl enable --now supervisor
msg_ok "Set up Production"
motd_ssh
customize
cleanup_lxc
+2 -1
View File
@@ -5,7 +5,6 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://fileflows.com/ # Source: https://fileflows.com/
# Import Functions und Setup
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color color
verb_ip6 verb_ip6
@@ -17,6 +16,7 @@ update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt install -y \ $STD apt install -y \
ffmpeg \ ffmpeg \
pciutils \
imagemagick imagemagick
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
@@ -35,6 +35,7 @@ fetch_and_deploy_from_url "https://fileflows.com/downloads/zip" "/opt/fileflows"
$STD ln -svf /usr/bin/ffmpeg /usr/local/bin/ffmpeg $STD ln -svf /usr/bin/ffmpeg /usr/local/bin/ffmpeg
$STD ln -svf /usr/bin/ffprobe /usr/local/bin/ffprobe $STD ln -svf /usr/bin/ffprobe /usr/local/bin/ffprobe
$STD rm -rf /opt/fileflows/Server/runtimes/win-*
read -r -p "${TAB3}Do you want to install FileFlows Server or Node? (S/N): " install_server read -r -p "${TAB3}Do you want to install FileFlows Server or Node? (S/N): " install_server
+174
View File
@@ -0,0 +1,174 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/ShaneIsrael/fireshare
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
setup_hwaccel
msg_info "Installing Dependencies"
$STD apt install -y \
git \
build-essential \
cmake \
pkg-config \
yasm \
nasm \
libx264-dev \
libx265-dev \
libvpx-dev \
libaom-dev \
libopus-dev \
libvorbis-dev \
libass-dev \
libfreetype6-dev \
libmp3lame-dev \
nginx-extras \
supervisor \
libldap2-dev \
libsasl2-dev \
libssl-dev \
libffi-dev \
libc-dev
msg_ok "Installed Dependencies"
NODE_VERSION=24 setup_nodejs
PYTHON_VERSION=3.14 setup_uv
fetch_and_deploy_gh_release "fireshare" "ShaneIsrael/fireshare" "tarball"
msg_info "Compiling SVT-AV1 (Patience)"
cd /tmp
$STD git clone --depth 1 --branch v1.8.0 https://gitlab.com/AOMediaCodec/SVT-AV1.git
cd SVT-AV1/Build
$STD cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
$STD make -j$(nproc)
$STD make install
msg_ok "Compiled SVT-AV1"
msg_info "Installing NVDEC headers"
cd /tmp
$STD git clone --depth 1 --branch n12.1.14.0 https://github.com/FFmpeg/nv-codec-headers.git
cd nv-codec-headers
$STD make install
$STD ldconfig
msg_ok "Installed NVDEC headers"
msg_info "Compiling ffmpeg (Patience)"
cd /tmp
curl -fsSL https://ffmpeg.org/releases/ffmpeg-6.1.tar.xz -o "ffmpeg-6.1.tar.xz"
$STD tar -xf ffmpeg-6.1.tar.xz
cd ffmpeg-6.1
$STD ./configure \
--prefix=/usr/local \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-ffnvcodec \
--enable-libx264 \
--enable-libx265 \
--enable-libvpx \
--enable-libaom \
--enable-libopus \
--enable-libvorbis \
--enable-libmp3lame \
--enable-libass \
--enable-libfreetype \
--enable-libsvtav1 \
--disable-debug \
--disable-doc
$STD make -j$(nproc)
$STD make install
$STD ldconfig
msg_ok "Compiled ffmpeg"
msg_info "Configuring Fireshare (Patience)"
ADMIN_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
SECRET=$(openssl rand -base64 48)
mkdir -p /opt/fireshare-{data,videos,images,processed}
cd /opt/fireshare
$STD uv venv
$STD .venv/bin/python -m ensurepip --upgrade
$STD .venv/bin/python -m pip install --upgrade --break-system-packages pip
ln -sf /usr/local/bin/ffmpeg /usr/bin/ffmpeg
ln -sf /usr/local/bin/ffprobe /usr/bin/ffprobe
echo "/usr/local/lib" >/etc/ld.so.conf.d/usr-local.conf
echo "/usr/local/cuda/lib64" >>/etc/ld.so.conf.d/usr-local.conf
echo "/usr/local/nvidia/lib" >>/etc/ld.so.conf.d/nvidia.conf
echo "/usr/local/nvidia/lib64" >>/etc/ld.so.conf.d/nvidia.conf
ldconfig
$STD .venv/bin/python -m pip install --no-cache-dir --break-system-packages --ignore-installed app/server
cp .venv/bin/fireshare /usr/local/bin/fireshare
export FLASK_APP="/opt/fireshare/app/server/fireshare:create_app()"
export DATA_DIRECTORY=/opt/fireshare-data
export IMAGE_DIRECTORY=/opt/fireshare-images
export VIDEO_DIRECTORY=/opt/fireshare-videos
export PROCESSED_DIRECTORY=/opt/fireshare-processed
$STD uv run flask db upgrade
cat <<EOF >/opt/fireshare/fireshare.env
FLASK_APP="/opt/fireshare/app/server/fireshare:create_app()"
DOMAIN=
ENVIRONMENT=production
DATA_DIRECTORY=/opt/fireshare-data
IMAGE_DIRECTORY=/opt/fireshare-images
VIDEO_DIRECTORY=/opt/fireshare-videos
PROCESSED_DIRECTORY=/opt/fireshare-processed
TEMPLATE_PATH=/opt/fireshare/app/server/fireshare/templates
SECRET_KEY=${SECRET}
ADMIN_PASSWORD=${ADMIN_PASSWORD}
TZ=UTC
LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64:/usr/local/lib:/usr/local/cuda/lib64:\$LD_LIBRARY_PATH
PATH=/usr/local/bin:$PATH
ENABLE_TRANSCODING=
TRANSCODE_GPU=
NVIDIA_DRIVER_CAPABILITIES=
EOF
cd /opt/fireshare/app/client
$STD npm install
$STD npm run build
systemctl stop nginx
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
systemctl start nginx
cat <<EOF >~/fireshare.creds
Fireshare Admin Credentials
========================
Username: admin
Password: ${ADMIN_PASSWORD}
EOF
msg_ok "Configured Fireshare"
msg_info "Creating services"
cat <<EOF >/etc/systemd/system/fireshare.service
[Unit]
Description=Fireshare Service
After=network.target
[Service]
WorkingDirectory=/opt/fireshare/app/server
ExecStart=/opt/fireshare/.venv/bin/gunicorn --bind=127.0.0.1:5000 "fireshare:create_app(init_schedule=True)" --workers 3 --threads 3 --preload
Restart=always
EnvironmentFile=/opt/fireshare/fireshare.env
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now fireshare
msg_ok "Created services"
motd_ssh
customize
cleanup_lxc
+65
View File
@@ -0,0 +1,65 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/foldergram/foldergram
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y --no-install-recommends ffmpeg
msg_ok "Installed Dependencies"
NODE_VERSION=25 NODE_MODULE="corepack" setup_nodejs
fetch_and_deploy_gh_release "foldergram" "foldergram/foldergram" "tarball"
msg_info "Configuring Foldergram"
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
$STD corepack enable
cd /opt/foldergram
$STD pnpm install
$STD pnpm run build
mkdir -p /opt/foldergram_media
cat <<EOF >/opt/foldergram_media/foldergram.env
NODE_ENV=production
SERVER_PORT=4141
DATA_ROOT=/opt/foldergram_media
GALLERY_ROOT=/opt/foldergram_media/gallery
DB_DIR=/opt/foldergram_media/db
THUMBNAILS_DIR=/opt/foldergram_media/thumbnails
PREVIEWS_DIR=/opt/foldergram_media/previews
IMAGE_DETAIL_SOURCE=preview
DERIVATIVE_MODE=eager
GALLERY_EXCLUDED_FOLDERS=
EOF
msg_ok "Configured Foldergram"
msg_info "Creating services"
cat <<EOF >/etc/systemd/system/foldergram.service
[Unit]
Description=Foldergram Service
After=network.target
[Service]
WorkingDirectory=/opt/foldergram
ExecStart=/usr/bin/pnpm start
Restart=always
EnvironmentFile=/opt/foldergram_media/foldergram.env
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now foldergram
msg_ok "Created services"
motd_ssh
customize
cleanup_lxc
+2 -15
View File
@@ -25,25 +25,12 @@ PG_VERSION="17" setup_postgresql
NODE_VERSION="24" setup_nodejs NODE_VERSION="24" setup_nodejs
msg_info "Setting up Database" msg_info "Setting up Database"
DB_NAME=ghostfolio PG_DB_NAME="ghostfolio" PG_DB_USER="ghostfolio" PG_DB_SCHEMA_PERMS="true" setup_postgresql_db
DB_USER=ghostfolio
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
REDIS_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) REDIS_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
ACCESS_TOKEN_SALT=$(openssl rand -base64 32) ACCESS_TOKEN_SALT=$(openssl rand -base64 32)
JWT_SECRET_KEY=$(openssl rand -base64 32) JWT_SECRET_KEY=$(openssl rand -base64 32)
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME;"
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH ENCRYPTED PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
$STD sudo -u postgres psql -c "ALTER USER $DB_USER CREATEDB;"
$STD sudo -u postgres psql -d $DB_NAME -c "GRANT ALL ON SCHEMA public TO $DB_USER;"
$STD sudo -u postgres psql -d $DB_NAME -c "GRANT CREATE ON SCHEMA public TO $DB_USER;"
$STD sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO $DB_USER;"
$STD sudo -u postgres psql -d $DB_NAME -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO $DB_USER;"
{ {
echo "Ghostfolio Credentials" echo "Ghostfolio Credentials"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
echo "Database Name: $DB_NAME"
echo "Redis Password: $REDIS_PASS" echo "Redis Password: $REDIS_PASS"
echo "Access Token Salt: $ACCESS_TOKEN_SALT" echo "Access Token Salt: $ACCESS_TOKEN_SALT"
echo "JWT Secret Key: $JWT_SECRET_KEY" echo "JWT Secret Key: $JWT_SECRET_KEY"
@@ -69,7 +56,7 @@ read -rp "${TAB3}CoinGecko Pro API key (press Enter to skip): " COINGECKO_PRO_KE
msg_info "Setting up Environment" msg_info "Setting up Environment"
cat <<EOF >/opt/ghostfolio/.env cat <<EOF >/opt/ghostfolio/.env
DATABASE_URL=postgresql://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME?connect_timeout=300&sslmode=prefer DATABASE_URL=postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME?connect_timeout=300
REDIS_HOST=localhost REDIS_HOST=localhost
REDIS_PORT=6379 REDIS_PORT=6379
REDIS_PASSWORD=$REDIS_PASS REDIS_PASSWORD=$REDIS_PASS
+50
View File
@@ -0,0 +1,50 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://gogs.io/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y git
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "gogs" "gogs/gogs" "prebuild" "latest" "/opt/gogs" "gogs_*_linux_amd64.tar.gz"
msg_info "Setting up Gogs"
mkdir -p /opt/gogs/{custom/conf,data,log}
msg_ok "Set up Gogs"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/gogs.service
[Unit]
Description=Gogs Git Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/gogs
ExecStart=/opt/gogs/gogs web
Restart=on-failure
RestartSec=5
Environment=USER=root
Environment=HOME=/root
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now gogs
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+24
View File
@@ -45,6 +45,30 @@ STATUS_CHECKER_INTERVAL=60
EOF EOF
msg_ok "Configured Homelable" msg_ok "Configured Homelable"
msg_info "Creating Password Reset Utility"
cat <<'EOF' >/root/change_password.sh
#!/usr/bin/env bash
NEW_PASS=""
while [[ -z "$NEW_PASS" ]]; do
read -s -p "Enter new password: " NEW_PASS
echo ""
if [[ -z "$NEW_PASS" ]]; then
echo "Error: Password cannot be blank. Try again."
fi
done
HASH=$(/opt/homelable/backend/.venv/bin/python -c "from passlib.context import CryptContext; print(CryptContext(schemes=['bcrypt']).hash('${NEW_PASS}'))")
sed -i "s|^AUTH_PASSWORD_HASH=.*|AUTH_PASSWORD_HASH='${HASH}'|" /opt/homelable/backend/.env
systemctl restart homelable
echo "Password updated and service restarted successfully!"
EOF
chmod +x /root/change_password.sh
msg_ok "Created Password Reset Utility"
msg_info "Building Frontend" msg_info "Building Frontend"
cd /opt/homelable/frontend cd /opt/homelable/frontend
$STD npm ci $STD npm ci
+1 -1
View File
@@ -28,7 +28,7 @@ if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
exit 10 exit 10
fi fi
NODE_VERSION="22" setup_nodejs NODE_VERSION="24" setup_nodejs
msg_info "Installing ioBroker (Patience)" msg_info "Installing ioBroker (Patience)"
$STD bash <(curl -fsSL https://iobroker.net/install.sh) $STD bash <(curl -fsSL https://iobroker.net/install.sh)
+35
View File
@@ -0,0 +1,35 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://jitsi.org/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y nginx
msg_ok "Installed Dependencies"
source /etc/os-release
setup_deb822_repo "jitsi" \
"https://download.jitsi.org/jitsi-key.gpg.key" \
"https://download.jitsi.org" \
"stable/" \
""
msg_info "Installing Jitsi Meet"
echo "jitsi-videobridge2 jitsi-videobridge/jvb-hostname string ${LOCAL_IP}" | debconf-set-selections
echo "jitsi-meet-web-config jitsi-meet/cert-choice select Generate a new self-signed certificate" | debconf-set-selections
DEBIAN_FRONTEND=noninteractive $STD apt install -y jitsi-meet
msg_ok "Installed Jitsi Meet"
motd_ssh
customize
cleanup_lxc
+1 -1
View File
@@ -28,7 +28,7 @@ msg_ok "Installed Dependencies"
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
PG_DB_NAME="kima" PG_DB_USER="kima" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db PG_DB_NAME="kima" PG_DB_USER="kima" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
NODE_VERSION="20" setup_nodejs NODE_VERSION="22" setup_nodejs
msg_info "Configuring Redis" msg_info "Configuring Redis"
systemctl enable -q --now redis-server systemctl enable -q --now redis-server
+1 -1
View File
@@ -27,7 +27,7 @@ msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs NODE_VERSION="22" setup_nodejs
setup_uv setup_uv
fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" fetch_and_deploy_gh_release "linkding" "sissbruecker/linkding" "tarball"
msg_info "Building Frontend" msg_info "Building Frontend"
cd /opt/linkding cd /opt/linkding
+3 -2
View File
@@ -30,6 +30,7 @@ $STD uv venv --clear /opt/litellm/.venv
$STD /opt/litellm/.venv/bin/python -m ensurepip --upgrade $STD /opt/litellm/.venv/bin/python -m ensurepip --upgrade
$STD /opt/litellm/.venv/bin/python -m pip install --upgrade pip $STD /opt/litellm/.venv/bin/python -m pip install --upgrade pip
$STD /opt/litellm/.venv/bin/python -m pip install litellm[proxy] prisma $STD /opt/litellm/.venv/bin/python -m pip install litellm[proxy] prisma
$STD /opt/litellm/.venv/bin/prisma generate
msg_ok "Installed LiteLLM" msg_ok "Installed LiteLLM"
msg_info "Configuring LiteLLM" msg_info "Configuring LiteLLM"
@@ -40,7 +41,7 @@ general_settings:
database_url: postgresql://$PG_DB_USER:$PG_DB_PASS@127.0.0.1:5432/$PG_DB_NAME database_url: postgresql://$PG_DB_USER:$PG_DB_PASS@127.0.0.1:5432/$PG_DB_NAME
store_model_in_db: true store_model_in_db: true
EOF EOF
uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup $STD /opt/litellm/.venv/bin/litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
msg_ok "Configured LiteLLM" msg_ok "Configured LiteLLM"
msg_info "Creating Service" msg_info "Creating Service"
@@ -50,7 +51,7 @@ Description=LiteLLM
[Service] [Service]
Type=simple Type=simple
ExecStart=uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml ExecStart=/opt/litellm/.venv/bin/litellm --config /opt/litellm/litellm.yaml
Restart=always Restart=always
[Install] [Install]
+60
View File
@@ -0,0 +1,60 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: doge0420
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/lyqht/mini-qr
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
libharfbuzz0b \
caddy \
fontconfig
msg_ok "Installed Dependencies"
NODE_VERSION="20" setup_nodejs
fetch_and_deploy_gh_release "mini-qr" "lyqht/mini-qr" "tarball"
msg_info "Building MiniQR"
cd /opt/mini-qr
$STD npm install
$STD npm run build
msg_ok "Built MiniQR"
msg_info "Configuring Caddy"
cat <<EOF >/etc/caddy/Caddyfile
:80 {
root * /opt/mini-qr/dist
file_server
# Handle client-side routing
try_files {path} /index.html
# Cache static assets
@assets {
path /assets/*
}
header @assets Cache-Control "public, immutable, max-age=31536000"
# Correct MIME types for JS modules
@jsmodules {
path *.js *.mjs
}
header @jsmodules Content-Type "application/javascript"
}
EOF
systemctl enable -q --now caddy
systemctl reload caddy
msg_ok "Configured Caddy"
motd_ssh
customize
cleanup_lxc
+83
View File
@@ -0,0 +1,83 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MintHCM
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/minthcm/minthcm
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
PHP_VERSION="8.2"
PHP_APACHE="YES" PHP_MODULE="mysql,redis" PHP_FPM="YES" setup_php
setup_composer
setup_mariadb
$STD mariadb -u root -e "SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'"
fetch_and_deploy_gh_release "MintHCM" "minthcm/minthcm" "tarball" "latest" "/var/www/MintHCM"
msg_info "Configuring MintHCM"
mkdir -p /etc/php/${PHP_VERSION}/mods-available
cp /var/www/MintHCM/docker/config/000-default.conf /etc/apache2/sites-available/000-default.conf
cp /var/www/MintHCM/docker/config/php-minthcm.ini /etc/php/${PHP_VERSION}/mods-available/php-minthcm.ini
mkdir -p "/etc/php/${PHP_VERSION}/cli/conf.d" "/etc/php/${PHP_VERSION}/apache2/conf.d"
ln -s "/etc/php/${PHP_VERSION}/mods-available/php-minthcm.ini" "/etc/php/${PHP_VERSION}/cli/conf.d/20-minthcm.ini"
ln -s "/etc/php/${PHP_VERSION}/mods-available/php-minthcm.ini" "/etc/php/${PHP_VERSION}/apache2/conf.d/20-minthcm.ini"
chown -R www-data:www-data /var/www/MintHCM
find /var/www/MintHCM -type d -exec chmod 755 {} \;
find /var/www/MintHCM -type f -exec chmod 644 {} \;
mkdir -p /var/www/script
cp /var/www/MintHCM/docker/script/generate_config.php /var/www/script/generate_config.php
cp /var/www/MintHCM/docker/.env /var/www/script/.env
chown -R www-data:www-data /var/www/script
$STD a2enmod rewrite
$STD a2enmod headers
$STD systemctl restart apache2
msg_ok "Configured MintHCM"
msg_info "Setting up Elasticsearch"
setup_deb822_repo \
"elasticsearch" \
"https://artifacts.elastic.co/GPG-KEY-elasticsearch" \
"https://artifacts.elastic.co/packages/7.x/apt" \
"stable"
$STD apt install -y elasticsearch
echo "-Xms2g" >>/etc/elasticsearch/jvm.options
echo "-Xmx2g" >>/etc/elasticsearch/jvm.options
$STD /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment -b
systemctl enable -q --now elasticsearch
msg_ok "Set up Elasticsearch"
msg_info "Configuring Database"
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD mariadb -u root -e "CREATE USER 'minthcm'@'localhost' IDENTIFIED BY '${DB_PASS}';"
$STD mariadb -u root -e "GRANT ALL ON *.* TO 'minthcm'@'localhost'; FLUSH PRIVILEGES;"
sed -i "s/^DB_HOST=.*/DB_HOST=localhost/" /var/www/script/.env
sed -i "s/^DB_USER=.*/DB_USER=minthcm/" /var/www/script/.env
sed -i "s/^DB_PASS=.*/DB_PASS=$DB_PASS/" /var/www/script/.env
sed -i "s/^ELASTICSEARCH_HOST=.*/ELASTICSEARCH_HOST=localhost/" /var/www/script/.env
msg_ok "Configured Database"
msg_info "Generating configuration file"
set -a
source /var/www/script/.env
set +a
$STD php /var/www/script/generate_config.php
msg_ok "Generated configuration file"
msg_info "Installing MintHCM"
cd /var/www/MintHCM
$STD sudo -u www-data php MintCLI install </var/www/MintHCM/configMint4
printf "* * * * * cd /var/www/MintHCM/legacy; php -f cron.php > /dev/null 2>&1\n" >/var/spool/cron/crontabs/www-data
service cron start
rm -f /var/www/MintHCM/configMint4
msg_ok "Installed MintHCM"
motd_ssh
customize
cleanup_lxc
+1 -1
View File
@@ -13,7 +13,7 @@ setting_up_container
network_check network_check
update_os update_os
NODE_VERSION="22" setup_nodejs NODE_VERSION="24" setup_nodejs
fetch_and_deploy_gh_release "myip" "jason5ng32/MyIP" "tarball" fetch_and_deploy_gh_release "myip" "jason5ng32/MyIP" "tarball"
msg_info "Configuring MyIP" msg_info "Configuring MyIP"
+88
View File
@@ -0,0 +1,88 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/mattogodoy/nametag
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
PG_VERSION="16" setup_postgresql
PG_DB_NAME="nametag_db" PG_DB_USER="nametag" setup_postgresql_db
NODE_VERSION="20" setup_nodejs
fetch_and_deploy_gh_release "nametag" "mattogodoy/nametag" "tarball" "latest" "/opt/nametag"
msg_info "Setting up Application"
cd /opt/nametag
$STD npm ci
DATABASE_URL="postgresql://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}" $STD npx prisma generate
DATABASE_URL="postgresql://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}" $STD npx prisma migrate deploy
msg_ok "Set up Application"
msg_info "Configuring Nametag"
NEXTAUTH_SECRET=$(openssl rand -base64 32)
CRON_SECRET=$(openssl rand -base64 16)
mkdir -p /opt/nametag/data/photos
cat <<EOF >/opt/nametag/.env
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}
NEXTAUTH_URL=http://${LOCAL_IP}:3000
NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
CRON_SECRET=${CRON_SECRET}
PHOTO_STORAGE_PATH=/opt/nametag/data/photos
NODE_ENV=production
EOF
msg_ok "Configured Nametag"
msg_info "Building Application"
cd /opt/nametag
set -a
source /opt/nametag/.env
set +a
$STD npm run build
cp -r /opt/nametag/.next/static /opt/nametag/.next/standalone/.next/static
cp -r /opt/nametag/public /opt/nametag/.next/standalone/public
msg_ok "Built Application"
msg_info "Running Production Seed"
cd /opt/nametag
$STD npx esbuild prisma/seed.production.ts --platform=node --format=cjs --outfile=prisma/seed.production.js --bundle --external:@prisma/client --external:pg --minify
$STD node prisma/seed.production.js
msg_ok "Ran Production Seed"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/nametag.service
[Unit]
Description=Nametag - Personal Relationships Manager
After=network.target postgresql.service
[Service]
Type=simple
WorkingDirectory=/opt/nametag
EnvironmentFile=/opt/nametag/.env
ExecStart=/usr/bin/node /opt/nametag/.next/standalone/server.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now nametag
msg_ok "Created Service"
msg_info "Setting up Cron Jobs"
cat <<EOF >/etc/cron.d/nametag
0 8 * * * root curl -sf -H "Authorization: Bearer ${CRON_SECRET}" http://127.0.0.1:3000/api/cron/send-reminders >/dev/null 2>&1
0 3 * * * root curl -sf -H "Authorization: Bearer ${CRON_SECRET}" http://127.0.0.1:3000/api/cron/purge-deleted >/dev/null 2>&1
EOF
chmod 644 /etc/cron.d/nametag
msg_ok "Set up Cron Jobs"
motd_ssh
customize
cleanup_lxc
+1 -1
View File
@@ -13,7 +13,7 @@ setting_up_container
network_check network_check
update_os update_os
fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv" fetch_and_deploy_gh_release "nodecast-tv" "technomancer702/nodecast-tv" "tarball"
NODE_VERSION="20" setup_nodejs NODE_VERSION="20" setup_nodejs
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
+1 -1
View File
@@ -64,7 +64,7 @@ $STD sudo -u cool coolconfig set-admin-password --user=admin --password="$COOLPA
echo "$COOLPASS" >~/.coolpass echo "$COOLPASS" >~/.coolpass
msg_ok "Installed Collabora Online" msg_ok "Installed Collabora Online"
fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "v6.0.0" "/usr/bin" "opencloud-*-linux-amd64" fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "v6.1.0" "/usr/bin" "opencloud-*-linux-amd64"
mv /usr/bin/OpenCloud /usr/bin/opencloud mv /usr/bin/OpenCloud /usr/bin/opencloud
msg_info "Configuring OpenCloud" msg_info "Configuring OpenCloud"
+1 -1
View File
@@ -20,7 +20,7 @@ $STD apt install -y \
redis redis
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
NODE_VERSION="22" setup_nodejs NODE_VERSION="24" setup_nodejs
PG_VERSION="16" setup_postgresql PG_VERSION="16" setup_postgresql
PG_DB_NAME="outline" PG_DB_USER="outline" setup_postgresql_db PG_DB_NAME="outline" PG_DB_USER="outline" setup_postgresql_db
+52
View File
@@ -0,0 +1,52 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: pajjski
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/a1ex4/ownfoil
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y git
msg_ok "Installed Dependencies"
setup_uv
fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball"
msg_info "Setting up Ownfoil"
cd /opt/ownfoil
$STD uv venv .venv
$STD source .venv/bin/activate
$STD uv pip install -r requirements.txt
msg_ok "Setup ownfoil"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/ownfoil.service
[Unit]
Description=ownfoil Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/ownfoil
ExecStart=/opt/ownfoil/.venv/bin/python /opt/ownfoil/app/app.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now ownfoil
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+1 -1
View File
@@ -120,7 +120,7 @@ fetch_and_deploy_gh_release "RAHasher" "RetroAchievements/RALibretro" "prebuild"
cp /opt/RALibretro/RAHasher /usr/bin/RAHasher cp /opt/RALibretro/RAHasher /usr/bin/RAHasher
chmod +x /usr/bin/RAHasher chmod +x /usr/bin/RAHasher
fetch_and_deploy_gh_release "romm" "rommapp/romm" fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball"
msg_info "Creating environment file" msg_info "Creating environment file"
sed -i 's/^supervised no/supervised systemd/' /etc/redis/redis.conf sed -i 's/^supervised no/supervised systemd/' /etc/redis/redis.conf
+1 -1
View File
@@ -115,7 +115,7 @@ else
msg_ok "Installed internal bypasser dependencies" msg_ok "Installed internal bypasser dependencies"
fi fi
NODE_VERSION="22" setup_nodejs NODE_VERSION="24" setup_nodejs
PYTHON_VERSION="3.12" setup_uv PYTHON_VERSION="3.12" setup_uv
fetch_and_deploy_gh_release "shelfmark" "calibrain/shelfmark" "tarball" "latest" "/opt/shelfmark" fetch_and_deploy_gh_release "shelfmark" "calibrain/shelfmark" "tarball" "latest" "/opt/shelfmark"
+1 -1
View File
@@ -55,7 +55,7 @@ rm -rf /opt/guacamole-server
msg_ok "Built Guacamole Server (guacd)" msg_ok "Built Guacamole Server (guacd)"
NODE_VERSION="22" setup_nodejs NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" "tarball"
msg_info "Building Frontend" msg_info "Building Frontend"
cd /opt/termix cd /opt/termix
+99
View File
@@ -0,0 +1,99 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/transmute-app/transmute
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
UV_PYTHON="3.13" setup_uv
NODE_VERSION="25" setup_nodejs
setup_ffmpeg
setup_gs
msg_info "Installing Dependencies"
$STD apt install -y \
inkscape \
tesseract-ocr \
libreoffice-impress \
libreoffice-common \
libmagic1 \
xvfb \
libsm6 \
libxext6 \
libpango-1.0-0 \
libopengl0 \
libpangocairo-1.0-0 \
libgdk-pixbuf-2.0-0 \
libffi-dev \
libcairo2 \
librsvg2-bin \
unrar-free \
python3-numpy \
python3-lxml \
python3-tinycss2 \
python3-cssselect
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "pandoc" "jgm/pandoc" "binary" "latest" "" "pandoc-*-amd64.deb"
fetch_and_deploy_gh_release "calibre" "kovidgoyal/calibre" "prebuild" "latest" "/opt/calibre" "calibre-*-x86_64.txz"
ln -sf /opt/calibre/ebook-convert /usr/bin/ebook-convert
fetch_and_deploy_gh_release "drawio" "jgraph/drawio-desktop" "binary" "latest" "" "drawio-amd64-*.deb"
fetch_and_deploy_gh_release "transmute" "transmute-app/transmute" "tarball"
msg_info "Setting up Python Backend"
cd /opt/transmute
$STD uv venv --clear /opt/transmute/.venv
$STD uv pip install --python /opt/transmute/.venv/bin/python -r requirements.txt
ln -sf /opt/transmute/.venv/bin/weasyprint /usr/bin/weasyprint
msg_ok "Set up Python Backend"
msg_info "Configuring Transmute"
SECRET_KEY=$(openssl rand -hex 64)
cat <<EOF >/opt/transmute/backend/.env
AUTH_SECRET_KEY=${SECRET_KEY}
HOST=0.0.0.0
PORT=3313
DATA_DIR=/opt/transmute/data
WEB_DIR=/opt/transmute/frontend/dist
QT_QPA_PLATFORM=offscreen
EOF
mkdir -p /opt/transmute/data
msg_ok "Configured Transmute"
msg_info "Building Frontend"
cd /opt/transmute/frontend
$STD npm ci
$STD npm run build
msg_ok "Built Frontend"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/transmute.service
[Unit]
Description=Transmute File Converter
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/transmute
EnvironmentFile=/opt/transmute/backend/.env
ExecStart=/usr/bin/xvfb-run -a -s "-screen 0 1024x768x24 -nolisten tcp" /opt/transmute/.venv/bin/python backend/main.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now transmute
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+10
View File
@@ -60,6 +60,16 @@ wait -n
EOF EOF
chmod +x /opt/wanderer/start.sh chmod +x /opt/wanderer/start.sh
cat <<'EOF' >/usr/local/bin/wanderer-pb
#!/usr/bin/env bash
set -a
source /opt/wanderer/.env
set +a
cd /opt/wanderer/source/db
exec ./pocketbase "$@" --dir="$PB_DB_LOCATION"
EOF
chmod +x /usr/local/bin/wanderer-pb
cat <<EOF >/etc/systemd/system/wanderer-web.service cat <<EOF >/etc/systemd/system/wanderer-web.service
[Unit] [Unit]
Description=wanderer Description=wanderer
+40
View File
@@ -0,0 +1,40 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://whodb.com/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "whodb" "clidey/whodb" "singlefile" "latest" "/opt/whodb" "whodb-*-linux-amd64"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/whodb.service
[Unit]
Description=WhoDB Database Management
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/whodb
ExecStart=/opt/whodb/whodb
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now whodb
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+291 -11
View File
@@ -5250,15 +5250,185 @@ create_lxc_container() {
# Extract Debian OS minor from template name: debian-13-standard_13.1-1_amd64.tar.zst => "13.1" # Extract Debian OS minor from template name: debian-13-standard_13.1-1_amd64.tar.zst => "13.1"
parse_template_osver() { sed -n 's/.*_\([0-9][0-9]*\(\.[0-9]\+\)\?\)-.*/\1/p' <<<"$1"; } parse_template_osver() { sed -n 's/.*_\([0-9][0-9]*\(\.[0-9]\+\)\?\)-.*/\1/p' <<<"$1"; }
# Switch to the previous OS major version template and retry pct create
# Determines the fallback version automatically based on available templates.
# Returns: 0 = success, 1 = failed
fallback_to_previous_os_version() {
local old_template="$TEMPLATE"
local os_type="${PCT_OSTYPE:-}"
local current_ver="${PCT_OSVERSION:-}"
# Determine template search pattern based on OS type
local tpl_pattern=""
case "$os_type" in
debian | ubuntu) tpl_pattern="-standard_" ;;
alpine | fedora | rocky | centos) tpl_pattern="-default_" ;;
*) tpl_pattern="" ;;
esac
msg_info "Searching for an older $os_type template (current: $os_type $current_ver)"
# Collect all available versions for this OS type (local + online)
local -a all_versions=()
# Local templates
mapfile -t _local_vers < <(
pveam list "$TEMPLATE_STORAGE" 2>/dev/null |
awk -v os="$os_type" -v pat="$tpl_pattern" '$1 ~ ("^"os"|/"os) && $1 ~ pat {print $1}' |
sed 's|.*/||' |
sed -E "s/^${os_type}-([0-9]+(\.[0-9]+)?).*/\1/" |
sort -u -V
)
all_versions+=("${_local_vers[@]}")
# Online templates (only if needed)
if command -v timeout &>/dev/null; then
timeout 30 pveam update >/dev/null 2>&1 || true
else
pveam update >/dev/null 2>&1 || true
fi
mapfile -t _online_vers < <(
pveam available -section system 2>/dev/null |
awk '{print $2}' |
grep -E "^${os_type}-[0-9]" |
{ [[ -n "$tpl_pattern" ]] && grep "$tpl_pattern" || cat; } |
sed -E "s/^${os_type}-([0-9]+(\.[0-9]+)?).*/\1/" |
sort -u -V 2>/dev/null || true
)
all_versions+=("${_online_vers[@]}")
# Deduplicate and sort, find the highest version below current
local fallback_ver=""
fallback_ver=$(printf '%s\n' "${all_versions[@]}" | sort -u -V | awk -v cur="$current_ver" '{
# Compare major versions: extract major part
split($0, a, ".")
split(cur, b, ".")
if (a[1]+0 < b[1]+0) ver=$0
} END { if (ver) print ver }')
if [[ -z "$fallback_ver" ]]; then
msg_error "No older $os_type template version found."
return 1
fi
msg_ok "Fallback version: $os_type $fallback_ver"
# Find the actual template file for this version
local fallback_search="${os_type}-${fallback_ver}"
local fallback_template=""
# Check local first
mapfile -t _fb_local < <(
pveam list "$TEMPLATE_STORAGE" 2>/dev/null |
awk -v search="$fallback_search" -v pat="$tpl_pattern" '$1 ~ search && $1 ~ pat {print $1}' |
sed 's|.*/||' | sort -t - -k 2 -V
)
if [[ ${#_fb_local[@]} -gt 0 ]]; then
fallback_template="${_fb_local[-1]}"
else
# Check online
mapfile -t _fb_online < <(
pveam available -section system 2>/dev/null |
awk '{print $2}' |
grep -E "^${fallback_search}.*${tpl_pattern}" |
sort -t - -k 2 -V 2>/dev/null || true
)
[[ ${#_fb_online[@]} -gt 0 ]] && fallback_template="${_fb_online[-1]}"
fi
if [[ -z "$fallback_template" ]]; then
msg_error "No template found for $os_type $fallback_ver."
return 1
fi
msg_ok "Found template: $fallback_template"
# Download if needed
local fallback_path
fallback_path="$(pvesm path "$TEMPLATE_STORAGE:vztmpl/$fallback_template" 2>/dev/null || true)"
[[ -z "$fallback_path" ]] && fallback_path="/var/lib/vz/template/cache/$fallback_template"
if [[ ! -f "$fallback_path" ]]; then
msg_info "Downloading $os_type $fallback_ver template"
if ! pveam download "$TEMPLATE_STORAGE" "$fallback_template" >>"${BUILD_LOG:-/dev/null}" 2>&1; then
msg_error "Failed to download $os_type $fallback_ver template."
return 1
fi
msg_ok "Template downloaded"
fi
# Update variables
TEMPLATE="$fallback_template"
TEMPLATE_PATH="$fallback_path"
PCT_OSVERSION="$fallback_ver"
export PCT_OSVERSION
# Retry pct create
msg_info "Retrying container creation with $os_type $fallback_ver"
if pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" $PCT_OPTIONS >>"$LOGFILE" 2>&1; then
msg_ok "Container created successfully with $os_type $fallback_ver (fallback from $old_template)."
return 0
else
msg_error "Container creation with $os_type $fallback_ver also failed. See $LOGFILE"
return 1
fi
}
# Offer upgrade for pve-container/lxc-pve if candidate > installed; optional auto-retry pct create # Offer upgrade for pve-container/lxc-pve if candidate > installed; optional auto-retry pct create
# Returns: # Returns:
# 0 = no upgrade needed # 0 = no upgrade needed / container created after upgrade or explicit fallback
# 1 = upgraded (and if do_retry=yes and retry succeeded, creation done) # 1 = upgraded (and if do_retry=yes and retry succeeded, creation done)
# 2 = user declined # 2 = user chose ignore
# 3 = upgrade attempted but failed OR retry failed # 3 = upgrade attempted but failed OR retry failed
# 4 = user cancelled
offer_lxc_stack_upgrade_and_maybe_retry() { offer_lxc_stack_upgrade_and_maybe_retry() {
local do_retry="${1:-no}" # yes|no local do_retry="${1:-no}" # yes|no
local _pvec_i _pvec_c _lxcp_i _lxcp_c need=0 local _pvec_i _pvec_c _lxcp_i _lxcp_c need=0
local _ans
has_previous_os_version_template() {
local os_type="${PCT_OSTYPE:-}"
local current_ver="${PCT_OSVERSION:-}"
local tpl_pattern="${TEMPLATE_PATTERN:-${TEMPLATE:-}}"
local -a all_versions=()
[[ -n "$os_type" && -n "$current_ver" ]] || return 1
mapfile -t _local_vers < <(
pveam list "$TEMPLATE_STORAGE" 2>/dev/null |
awk '{print $1}' |
sed 's|.*/||' |
grep -E "^${os_type}-[0-9]" |
{ [[ -n "$tpl_pattern" ]] && grep "$tpl_pattern" || cat; } |
sed -E "s/^${os_type}-([0-9]+(\.[0-9]+)?).*/\1/" |
sort -u -V
)
all_versions+=("${_local_vers[@]}")
if command -v timeout &>/dev/null; then
timeout 30 pveam update >/dev/null 2>&1 || true
else
pveam update >/dev/null 2>&1 || true
fi
mapfile -t _online_vers < <(
pveam available -section system 2>/dev/null |
awk '{print $2}' |
grep -E "^${os_type}-[0-9]" |
{ [[ -n "$tpl_pattern" ]] && grep "$tpl_pattern" || cat; } |
sed -E "s/^${os_type}-([0-9]+(\.[0-9]+)?).*/\1/" |
sort -u -V 2>/dev/null || true
)
all_versions+=("${_online_vers[@]}")
printf '%s\n' "${all_versions[@]}" | sort -u -V | awk -v cur="$current_ver" '
{
split($0, a, ".")
split(cur, b, ".")
if (a[1]+0 < b[1]+0) found=1
}
END { exit found ? 0 : 1 }
'
}
_pvec_i="$(pkg_ver pve-container)" _pvec_i="$(pkg_ver pve-container)"
_lxcp_i="$(pkg_ver lxc-pve)" _lxcp_i="$(pkg_ver lxc-pve)"
@@ -5279,14 +5449,78 @@ create_lxc_container() {
msg_warn "An update for the Proxmox LXC stack is available" msg_warn "An update for the Proxmox LXC stack is available"
echo " pve-container: installed=${_pvec_i:-n/a} candidate=${_pvec_c:-n/a}" echo " pve-container: installed=${_pvec_i:-n/a} candidate=${_pvec_c:-n/a}"
echo " lxc-pve : installed=${_lxcp_i:-n/a} candidate=${_lxcp_c:-n/a}" echo " lxc-pve : installed=${_lxcp_i:-n/a} candidate=${_lxcp_c:-n/a}"
echo " note : option 1 runs host apt update + apt upgrade"
echo echo
read -rp "Do you want to upgrade now? [y/N] " _ans </dev/tty
# Offer older OS version fallback when template version might be too new for LXC stack
local _has_fallback_option=false
if [[ "$do_retry" == "yes" ]] && has_previous_os_version_template; then
_has_fallback_option=true
echo " [1] Run host upgrade now (recommended). WARNING: this runs apt upgrade and updates all Packeages on your host!"
echo " [2] Use an older ${PCT_OSTYPE} template instead (may not work with all scripts)"
echo " [3] Ignore"
echo " [4] Cancel"
echo
read -rp "Select option [1/2/3/4]: " _ans </dev/tty
else
echo " [1] Run host upgrade now (recommended). WARNING: this runs apt upgrade and updates all Packeages on your host!"
echo " [2] Ignore"
echo " [3] Cancel"
echo
read -rp "Select option [1/2/3]: " _ans </dev/tty
fi
if [[ "$_has_fallback_option" == true ]]; then
case "$_ans" in
1)
_ans="y"
;;
2)
if fallback_to_previous_os_version; then
return 0
else
return 3
fi
;;
3)
return 2
;;
4)
return 4
;;
*)
return 4
;;
esac
else
case "$_ans" in
1)
_ans="y"
;;
2)
return 2
;;
*)
return 4
;;
esac
fi
case "${_ans,,}" in case "${_ans,,}" in
y | yes) y | yes)
msg_info "Upgrading Proxmox LXC stack (pve-container, lxc-pve)" msg_info "Running host upgrade for LXC stack compatibility"
apt_update_safe apt_update_safe
if $STD apt-get install -y --only-upgrade pve-container lxc-pve; then if $STD apt-get upgrade -y; then
msg_ok "LXC stack upgraded." msg_ok "LXC stack upgraded."
# Verify pct binary still works after upgrade (partial upgrades can break Perl modules)
if ! pct list &>/dev/null; then
msg_error "LXC stack upgrade caused PVE tool breakage (likely Perl module incompatibility)."
msg_custom "⚠️" "${YW}" "A partial package upgrade has left the PVE stack in an inconsistent state."
msg_custom "🔧" "${YW}" "Please run the following on the Proxmox host, then retry:"
echo -e "${TAB} apt update && apt upgrade -y"
echo -e "${TAB} reboot"
return 3
fi
if [[ "$do_retry" == "yes" ]]; then if [[ "$do_retry" == "yes" ]]; then
msg_info "Retrying container creation after upgrade" msg_info "Retrying container creation after upgrade"
if pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" $PCT_OPTIONS >>"$LOGFILE" 2>&1; then if pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" $PCT_OPTIONS >>"$LOGFILE" 2>&1; then
@@ -5385,10 +5619,35 @@ create_lxc_container() {
fi fi
msg_info "Validating storage '$CONTAINER_STORAGE'" msg_info "Validating storage '$CONTAINER_STORAGE'"
STORAGE_TYPE=$(grep -E "^[^:]+: $CONTAINER_STORAGE$" /etc/pve/storage.cfg | cut -d: -f1 | head -1 || true) # Check if storage.cfg is accessible (pmxcfs must be mounted)
if [[ ! -f /etc/pve/storage.cfg ]]; then
if ! mountpoint -q /etc/pve 2>/dev/null; then
msg_error "Proxmox cluster filesystem (pmxcfs) is not mounted at /etc/pve."
msg_custom "🔧" "${YW}" "Try: systemctl restart pve-cluster"
else
msg_error "/etc/pve/storage.cfg does not exist."
msg_custom "🔧" "${YW}" "Check Proxmox cluster filesystem integrity: pvecm status"
fi
exit 213
fi
STORAGE_TYPE=$(grep -E "^[^:]+:[[:space:]]*$CONTAINER_STORAGE[[:space:]]*$" /etc/pve/storage.cfg | cut -d: -f1 | head -1 || true)
# Fallback: use pvesm status to determine storage type
if [[ -z "$STORAGE_TYPE" ]]; then
STORAGE_TYPE=$(pvesm status -storage "$CONTAINER_STORAGE" 2>/dev/null | awk 'NR>1{print $2}')
fi
if [[ -z "$STORAGE_TYPE" ]]; then if [[ -z "$STORAGE_TYPE" ]]; then
msg_error "Storage '$CONTAINER_STORAGE' not found in /etc/pve/storage.cfg" msg_error "Storage '$CONTAINER_STORAGE' not found in /etc/pve/storage.cfg"
msg_custom "📋" "${YW}" "Available storages: $(pvesm status 2>/dev/null | awk 'NR>1{printf "%s (%s) ", $1, $2}' || echo 'n/a')"
if [[ -r /etc/pve/storage.cfg ]]; then
msg_custom "📋" "${YW}" "Storage definitions found in config:"
grep -E '^[a-z]+:' /etc/pve/storage.cfg 2>/dev/null | while IFS= read -r _line; do
echo "${TAB} $_line"
done
fi
msg_custom "📖" "${YW}" "See https://pve.proxmox.com/wiki/Storage for storage configuration details."
exit 213 exit 213
fi fi
@@ -5811,6 +6070,17 @@ create_lxc_container() {
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" $PCT_OPTIONS >"$LOGFILE" 2>&1; then if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" $PCT_OPTIONS >"$LOGFILE" 2>&1; then
msg_debug "Container creation failed on ${TEMPLATE_STORAGE}. Checking error..." msg_debug "Container creation failed on ${TEMPLATE_STORAGE}. Checking error..."
# Check for Perl module breakage (partial PVE upgrade)
if grep -qiE 'Compilation failed|Bareword.*not allowed' "$LOGFILE"; then
msg_error "Container creation failed due to broken Perl modules on the PVE host."
msg_custom "⚠️" "${YW}" "This usually happens after a partial PVE package upgrade."
msg_custom "🔧" "${YW}" "Please run the following on the Proxmox host, then retry:"
echo -e "${TAB} apt update && apt dist-upgrade -y"
echo -e "${TAB} reboot"
_flush_pct_log
exit 232
fi
# Check if CTID collision (race condition: ID claimed between validation and creation) # Check if CTID collision (race condition: ID claimed between validation and creation)
if grep -qiE 'already exists|already in use' "$LOGFILE"; then if grep -qiE 'already exists|already in use' "$LOGFILE"; then
local old_ctid="$CTID" local old_ctid="$CTID"
@@ -5857,12 +6127,17 @@ create_lxc_container() {
case $rc in case $rc in
0) : ;; # success - container created, continue 0) : ;; # success - container created, continue
2) 2)
msg_error "Upgrade declined. Please update and re-run: apt update && apt install --only-upgrade pve-container lxc-pve" msg_error "LXC stack upgrade ignored. Please inspect: $LOGFILE"
_flush_pct_log _flush_pct_log
exit 231 exit 231
;; ;;
3) 3)
msg_error "Upgrade and/or retry failed. Please inspect: $LOGFILE" msg_error "LXC stack upgrade failed. Please inspect: $LOGFILE"
_flush_pct_log
exit 231
;;
4)
msg_error "Cancelled by user."
_flush_pct_log _flush_pct_log
exit 231 exit 231
;; ;;
@@ -5889,12 +6164,17 @@ create_lxc_container() {
case $rc in case $rc in
0) : ;; # success - container created, continue 0) : ;; # success - container created, continue
2) 2)
msg_error "Upgrade declined. Please update and re-run: apt update && apt install --only-upgrade pve-container lxc-pve" msg_error "LXC stack upgrade ignored. Please inspect: $LOGFILE"
_flush_pct_log _flush_pct_log
exit 231 exit 231
;; ;;
3) 3)
msg_error "Upgrade and/or retry failed. Please inspect: $LOGFILE" msg_error "LXC stack upgrade failed. Please inspect: $LOGFILE"
_flush_pct_log
exit 231
;;
4)
msg_error "Cancelled by user."
_flush_pct_log _flush_pct_log
exit 231 exit 231
;; ;;
@@ -5915,7 +6195,7 @@ create_lxc_container() {
fi fi
fi # close CTID collision else-branch fi # close CTID collision else-branch
fi fi
set +f # re-enable globbing after pct create block set +f # re-enable globbing after pct create block
# Verify container exists (allow up to 10s for pmxcfs sync in clusters) # Verify container exists (allow up to 10s for pmxcfs sync in clusters)
local _pct_visible=false local _pct_visible=false
+45
View File
@@ -313,6 +313,51 @@ error_handler() {
echo -e "${TAB}-----------------------------------\n" echo -e "${TAB}-----------------------------------\n"
fi fi
# Detect probable Node.js heap OOM and print actionable guidance.
# This avoids generic SIGABRT/SIGKILL confusion for frontend build failures.
local node_oom_detected="false"
local node_build_context="false"
if [[ "$command" =~ (npm|pnpm|yarn|node|vite|turbo) ]]; then
node_build_context="true"
fi
if [[ "$exit_code" == "243" ]]; then
node_oom_detected="true"
elif [[ -n "$active_log" && -s "$active_log" ]]; then
if tail -n 200 "$active_log" 2>/dev/null | grep -Eqi 'Reached heap limit|JavaScript heap out of memory|Allocation failed - JavaScript heap out of memory|FATAL ERROR: Reached heap limit'; then
node_oom_detected="true"
fi
fi
if [[ "$node_oom_detected" == "true" ]] || { [[ "$node_build_context" == "true" ]] && [[ "$exit_code" =~ ^(134|137)$ ]]; }; then
local heap_hint_mb=""
# If explicitly configured, prefer the current value for troubleshooting output.
if [[ -n "${NODE_OPTIONS:-}" ]] && [[ "${NODE_OPTIONS}" =~ max-old-space-size=([0-9]+) ]]; then
heap_hint_mb="${BASH_REMATCH[1]}"
elif [[ -n "${var_ram:-}" ]] && [[ "${var_ram}" =~ ^[0-9]+$ ]]; then
heap_hint_mb=$((var_ram * 75 / 100))
else
local mem_kb=""
mem_kb=$(awk '/^MemTotal:/ {print $2; exit}' /proc/meminfo 2>/dev/null || echo "")
if [[ "$mem_kb" =~ ^[0-9]+$ ]]; then
local mem_mb=$((mem_kb / 1024))
heap_hint_mb=$((mem_mb * 75 / 100))
fi
fi
if [[ -z "$heap_hint_mb" ]] || ((heap_hint_mb < 1024)); then
heap_hint_mb=1024
elif ((heap_hint_mb > 12288)); then
heap_hint_mb=12288
fi
if declare -f msg_warn >/dev/null 2>&1; then
msg_warn "Possible Node.js heap OOM. Try: export NODE_OPTIONS=\"--max-old-space-size=${heap_hint_mb}\" and rerun the build."
else
echo -e "${YW}Possible Node.js heap OOM. Try: export NODE_OPTIONS=\"--max-old-space-size=${heap_hint_mb}\" and rerun the build.${CL}"
fi
fi
# Detect context: Container (INSTALL_LOG set + inside container /root) vs Host # Detect context: Container (INSTALL_LOG set + inside container /root) vs Host
if [[ -n "${INSTALL_LOG:-}" && -f "${INSTALL_LOG:-}" && -d /root ]]; then if [[ -n "${INSTALL_LOG:-}" && -f "${INSTALL_LOG:-}" && -d /root ]]; then
# CONTAINER CONTEXT: Copy log and create flag file for host # CONTAINER CONTEXT: Copy log and create flag file for host
+103 -35
View File
@@ -1139,39 +1139,42 @@ validate_github_token() {
-H "Authorization: Bearer $token" \ -H "Authorization: Bearer $token" \
-H "Accept: application/vnd.github+json" \ -H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \ -H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/user" 2>/dev/null) || { rm -f "$headers"; return 3; } "https://api.github.com/user" 2>/dev/null) || {
rm -f "$headers"
return 3
}
http_code="$response" http_code="$response"
# Read expiry header (fine-grained PATs carry this) # Read expiry header (fine-grained PATs carry this)
expiry_date=$(grep -i '^github-authentication-token-expiration:' "$headers" \ expiry_date=$(grep -i '^github-authentication-token-expiration:' "$headers" |
| sed 's/.*: *//' | tr -d '\r\n' || true) sed 's/.*: *//' | tr -d '\r\n' || true)
# Read token scopes (classic PATs) # Read token scopes (classic PATs)
scopes=$(grep -i '^x-oauth-scopes:' "$headers" \ scopes=$(grep -i '^x-oauth-scopes:' "$headers" |
| sed 's/.*: *//' | tr -d '\r\n' || true) sed 's/.*: *//' | tr -d '\r\n' || true)
rm -f "$headers" rm -f "$headers"
case "$http_code" in case "$http_code" in
200) 200)
if [[ -n "$expiry_date" ]]; then if [[ -n "$expiry_date" ]]; then
msg_ok "GitHub token is valid (expires: $expiry_date)." msg_ok "GitHub token is valid (expires: $expiry_date)."
else else
msg_ok "GitHub token is valid (no expiry / fine-grained PAT)." msg_ok "GitHub token is valid (no expiry / fine-grained PAT)."
fi fi
# Warn if classic PAT has no public_repo scope # Warn if classic PAT has no public_repo scope
if [[ -n "$scopes" && "$scopes" != *"public_repo"* && "$scopes" != *"repo"* ]]; then if [[ -n "$scopes" && "$scopes" != *"public_repo"* && "$scopes" != *"repo"* ]]; then
msg_warn "Token has no 'public_repo' scope - private repos and some release APIs may fail." msg_warn "Token has no 'public_repo' scope - private repos and some release APIs may fail."
return 2 return 2
fi fi
return 0 return 0
;; ;;
401) 401)
msg_error "GitHub token is invalid or expired (HTTP 401)." msg_error "GitHub token is invalid or expired (HTTP 401)."
return 1 return 1
;; ;;
*) *)
msg_warn "GitHub token validation returned HTTP $http_code - treating as valid." msg_warn "GitHub token validation returned HTTP $http_code - treating as valid."
return 0 return 0
;; ;;
esac esac
} }
@@ -4008,9 +4011,14 @@ function setup_ffmpeg() {
DEPS+=( DEPS+=(
libx264-dev libx265-dev libvpx-dev libmp3lame-dev libx264-dev libx265-dev libvpx-dev libmp3lame-dev
libfreetype6-dev libass-dev libopus-dev libvorbis-dev libfreetype6-dev libass-dev libopus-dev libvorbis-dev
libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev libdav1d-dev zlib1g-dev libnuma-dev
libva-dev libdrm-dev libva-dev libdrm-dev
) )
if apt-cache show libsvtav1enc-dev &>/dev/null; then
DEPS+=(libsvtav1enc-dev)
elif apt-cache show libsvtav1-dev &>/dev/null; then
DEPS+=(libsvtav1-dev)
fi
;; ;;
*) *)
msg_error "Invalid FFMPEG_TYPE: $TYPE" msg_error "Invalid FFMPEG_TYPE: $TYPE"
@@ -4604,6 +4612,23 @@ function setup_hwaccel() {
msg_ok "Setup Hardware Acceleration" msg_ok "Setup Hardware Acceleration"
} }
# ══════════════════════════════════════════════════════════════════════════════
# Resolve the IGC tag that the latest compute-runtime was built against.
# Must be called AFTER a fetch_and_deploy_gh_release for intel/compute-runtime
# so that /tmp/gh_rel.json contains the compute-runtime release metadata.
# Sets the variable named by $1 (default: igc_tag) to the discovered tag.
# ══════════════════════════════════════════════════════════════════════════════
_resolve_igc_tag() {
local -n _out_ref="${1:-igc_tag}"
_out_ref="latest"
if [[ -f /tmp/gh_rel.json ]]; then
local _body _parsed
_body=$(jq -r '.body // empty' /tmp/gh_rel.json 2>/dev/null) || return 0
_parsed=$(grep -oP 'intel-graphics-compiler/releases/tag/\K[^\s\)]+' <<<"$_body" | head -1)
[[ -n "$_parsed" ]] && _out_ref="$_parsed"
fi
}
# ══════════════════════════════════════════════════════════════════════════════ # ══════════════════════════════════════════════════════════════════════════════
# Intel Arc GPU Setup # Intel Arc GPU Setup
# ══════════════════════════════════════════════════════════════════════════════ # ══════════════════════════════════════════════════════════════════════════════
@@ -4630,12 +4655,17 @@ _setup_intel_arc() {
if [[ "$os_codename" == "trixie" || "$os_codename" == "sid" ]]; then if [[ "$os_codename" == "trixie" || "$os_codename" == "sid" ]]; then
msg_info "Fetching Intel compute-runtime from GitHub for Arc support" msg_info "Fetching Intel compute-runtime from GitHub for Arc support"
# Fetch a compute-runtime package first so /tmp/gh_rel.json is populated,
# then resolve the matching IGC tag from the release notes.
# libigdgmm - bundled in compute-runtime releases # libigdgmm - bundled in compute-runtime releases
fetch_and_deploy_gh_release "libigdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb" || true fetch_and_deploy_gh_release "libigdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb" || true
# Intel Graphics Compiler (note: packages have -2 suffix) local igc_tag
fetch_and_deploy_gh_release "intel-igc-core" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb" || true _resolve_igc_tag igc_tag
fetch_and_deploy_gh_release "intel-igc-opencl" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb" || true
# Intel Graphics Compiler pinned to the version compute-runtime expects
fetch_and_deploy_gh_release "intel-igc-core" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-core-2_*_amd64.deb" || true
fetch_and_deploy_gh_release "intel-igc-opencl" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-opencl-2_*_amd64.deb" || true
# Compute Runtime (depends on IGC and gmmlib) # Compute Runtime (depends on IGC and gmmlib)
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb" || true fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb" || true
@@ -4685,12 +4715,17 @@ _setup_intel_modern() {
if [[ "$os_codename" == "trixie" || "$os_codename" == "sid" ]]; then if [[ "$os_codename" == "trixie" || "$os_codename" == "sid" ]]; then
msg_info "Fetching Intel compute-runtime from GitHub" msg_info "Fetching Intel compute-runtime from GitHub"
# Fetch a compute-runtime package first so /tmp/gh_rel.json is populated,
# then resolve the matching IGC tag from the release notes.
# libigdgmm first (bundled in compute-runtime releases) # libigdgmm first (bundled in compute-runtime releases)
fetch_and_deploy_gh_release "libigdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb" || true fetch_and_deploy_gh_release "libigdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb" || true
# Intel Graphics Compiler (note: packages have -2 suffix) local igc_tag
fetch_and_deploy_gh_release "intel-igc-core" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb" || true _resolve_igc_tag igc_tag
fetch_and_deploy_gh_release "intel-igc-opencl" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb" || true
# Intel Graphics Compiler pinned to the version compute-runtime expects
fetch_and_deploy_gh_release "intel-igc-core" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-core-2_*_amd64.deb" || true
fetch_and_deploy_gh_release "intel-igc-opencl" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-opencl-2_*_amd64.deb" || true
# Compute Runtime # Compute Runtime
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb" || true fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb" || true
@@ -6306,12 +6341,15 @@ function setup_nodejs() {
} }
fi fi
# Scenario 1: Already installed at target version - just update packages/modules # Scenario 1: Already installed at target version - upgrade to latest minor/patch + update packages/modules
if [[ -n "$CURRENT_NODE_VERSION" && "$CURRENT_NODE_VERSION" == "$NODE_VERSION" ]]; then if [[ -n "$CURRENT_NODE_VERSION" && "$CURRENT_NODE_VERSION" == "$NODE_VERSION" ]]; then
msg_info "Update Node.js $NODE_VERSION" msg_info "Update Node.js $NODE_VERSION"
ensure_apt_working || return 100 ensure_apt_working || return 100
# Upgrade to the latest minor/patch release from NodeSource
$STD apt-get install -y --only-upgrade nodejs 2>/dev/null || true
# Pin npm to 11.11.0 to work around Node.js 22.22.2 regression (nodejs/node#62425) # Pin npm to 11.11.0 to work around Node.js 22.22.2 regression (nodejs/node#62425)
$STD npm install -g npm@11.11.0 2>/dev/null || true $STD npm install -g npm@11.11.0 2>/dev/null || true
@@ -6390,7 +6428,37 @@ function setup_nodejs() {
msg_ok "Setup Node.js $NODE_VERSION" msg_ok "Setup Node.js $NODE_VERSION"
fi fi
export NODE_OPTIONS="--max-old-space-size=4096" # Set a safe default heap limit for Node.js builds if not explicitly provided.
# Priority:
# 1) NODE_OPTIONS (caller/user override)
# 2) NODE_MAX_OLD_SPACE_SIZE (explicit MB override)
# 3) var_ram (LXC memory setting, MB)
# 4) /proc/meminfo (runtime memory detection)
# Auto value is clamped to 1024..12288 MB.
if [[ -z "${NODE_OPTIONS:-}" ]]; then
local node_heap_mb=""
if [[ -n "${NODE_MAX_OLD_SPACE_SIZE:-}" ]] && [[ "${NODE_MAX_OLD_SPACE_SIZE}" =~ ^[0-9]+$ ]]; then
node_heap_mb="${NODE_MAX_OLD_SPACE_SIZE}"
elif [[ -n "${var_ram:-}" ]] && [[ "${var_ram}" =~ ^[0-9]+$ ]]; then
node_heap_mb=$((var_ram * 75 / 100))
else
local total_mem_kb=""
total_mem_kb=$(awk '/^MemTotal:/ {print $2; exit}' /proc/meminfo 2>/dev/null || echo "")
if [[ "$total_mem_kb" =~ ^[0-9]+$ ]]; then
local total_mem_mb=$((total_mem_kb / 1024))
node_heap_mb=$((total_mem_mb * 75 / 100))
fi
fi
if [[ -z "$node_heap_mb" ]] || ((node_heap_mb < 1024)); then
node_heap_mb=1024
elif ((node_heap_mb > 12288)); then
node_heap_mb=12288
fi
export NODE_OPTIONS="--max-old-space-size=${node_heap_mb}"
fi
# Ensure valid working directory for npm (avoids uv_cwd error) # Ensure valid working directory for npm (avoids uv_cwd error)
if [[ ! -d /opt ]]; then if [[ ! -d /opt ]]; then
+3
View File
@@ -69,6 +69,9 @@ function update() {
msg_ok "Stopped service" msg_ok "Stopped service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "sparkyfitness-garmin" "CodeWithCJ/SparkyFitness" "tarball" "latest" $INSTALL_PATH CLEAN_INSTALL=1 fetch_and_deploy_gh_release "sparkyfitness-garmin" "CodeWithCJ/SparkyFitness" "tarball" "latest" $INSTALL_PATH
cd $INSTALL_PATH/SparkyFitnessGarmin
$STD uv venv --clear .venv
$STD uv pip install -r requirements.txt
msg_info "Starting service" msg_info "Starting service"
systemctl start sparkyfitness-garmin systemctl start sparkyfitness-garmin
+3 -2
View File
@@ -37,8 +37,9 @@ function find_orphaned_lvm {
fi fi
container_id=$(echo "$lv" | grep -oE "[0-9]+" | head -1) container_id=$(echo "$lv" | grep -oE "[0-9]+" | head -1)
# Check if the ID exists as a VM or LXC container # Check if the ID exists as a VM or LXC container on any cluster node
if [ -f "/etc/pve/lxc/${container_id}.conf" ] || [ -f "/etc/pve/qemu-server/${container_id}.conf" ]; then if compgen -G "/etc/pve/nodes/*/lxc/${container_id}.conf" >/dev/null 2>&1 ||
compgen -G "/etc/pve/nodes/*/qemu-server/${container_id}.conf" >/dev/null 2>&1; then
continue continue
fi fi
+16 -2
View File
@@ -65,6 +65,14 @@ component_exists_in_sources() {
grep -h -E "^[^#]*Components:[^#]*\b${component}\b" /etc/apt/sources.list.d/*.sources 2>/dev/null | grep -q . grep -h -E "^[^#]*Components:[^#]*\b${component}\b" /etc/apt/sources.list.d/*.sources 2>/dev/null | grep -q .
} }
require_whiptail() {
if ! command -v whiptail >/dev/null 2>&1; then
msg_error "Missing dependency: whiptail"
echo -e "Install it first (e.g. apt update && apt install -y whiptail), then re-run this script."
exit 127
fi
}
# ---- main ---- # ---- main ----
main() { main() {
header_info header_info
@@ -90,8 +98,14 @@ main() {
CODENAME="$(get_pbs_codename)" CODENAME="$(get_pbs_codename)"
case "$CODENAME" in case "$CODENAME" in
bookworm) start_routines_3 ;; bookworm)
trixie) start_routines_4 ;; require_whiptail
start_routines_3
;;
trixie)
require_whiptail
start_routines_4
;;
*) *)
msg_error "Unsupported Debian codename: $CODENAME" msg_error "Unsupported Debian codename: $CODENAME"
echo -e "Supported: bookworm (PBS 3.x) and trixie (PBS 4.x)" echo -e "Supported: bookworm (PBS 3.x) and trixie (PBS 4.x)"
+75 -20
View File
@@ -47,7 +47,8 @@ msg_error() {
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) 2>/dev/null || true source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) 2>/dev/null || true
declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "post-pmg-install" "pve" declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "post-pmg-install" "pve"
if ! grep -q "Proxmox Mail Gateway" /etc/issue 2>/dev/null; then if ! dpkg -s proxmox-mailgateway-container >/dev/null 2>&1 &&
! dpkg -s proxmox-mailgateway >/dev/null 2>&1; then
msg_error "This script is only intended for Proxmox Mail Gateway" msg_error "This script is only intended for Proxmox Mail Gateway"
exit 232 exit 232
fi fi
@@ -57,14 +58,24 @@ repo_state() {
local repo="$1" local repo="$1"
local file="" local file=""
local state="missing" local state="missing"
for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list; do for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources; do
[[ -f "$f" ]] || continue [[ -f "$f" ]] || continue
if grep -q "$repo" "$f"; then if grep -q "$repo" "$f"; then
file="$f" file="$f"
if grep -qE "^[^#].*${repo}" "$f"; then if [[ "$f" == *.sources ]]; then
state="active" # deb822 format: check Enabled field
elif grep -qE "^#.*${repo}" "$f"; then if grep -qiE '^Enabled:\s*no' "$f"; then
state="disabled" state="disabled"
else
state="active"
fi
else
# legacy format
if grep -qE "^[^#].*${repo}" "$f"; then
state="active"
elif grep -qE "^#.*${repo}" "$f"; then
state="disabled"
fi
fi fi
break break
fi fi
@@ -72,6 +83,28 @@ repo_state() {
echo "$state $file" echo "$state $file"
} }
toggle_repo() {
# $1 = file, $2 = action (enable|disable)
local file="$1" action="$2"
if [[ "$file" == *.sources ]]; then
if [[ "$action" == "disable" ]]; then
if grep -qiE '^Enabled:' "$file"; then
sed -i 's/^Enabled:.*/Enabled: no/' "$file"
else
echo "Enabled: no" >>"$file"
fi
else
sed -i 's/^Enabled:.*/Enabled: yes/' "$file"
fi
else
if [[ "$action" == "disable" ]]; then
sed -i '/^[^#]/s/^/# /' "$file"
else
sed -i 's/^# *//' "$file"
fi
fi
}
start_routines() { start_routines() {
header_info header_info
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
@@ -84,11 +117,20 @@ start_routines() {
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Correcting Debian Sources" msg_info "Correcting Debian Sources"
cat <<EOF >/etc/apt/sources.list cat <<EOF >/etc/apt/sources.list.d/debian.sources
deb http://deb.debian.org/debian ${VERSION} main contrib Types: deb
deb http://deb.debian.org/debian ${VERSION}-updates main contrib URIs: http://deb.debian.org/debian
deb http://security.debian.org/debian-security ${VERSION}-security main contrib Suites: ${VERSION} ${VERSION}-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://security.debian.org/debian-security
Suites: ${VERSION}-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF EOF
rm -f /etc/apt/sources.list
msg_ok "Corrected Debian Sources" msg_ok "Corrected Debian Sources"
;; ;;
no) msg_error "Selected no to Correcting Debian Sources" ;; no) msg_error "Selected no to Correcting Debian Sources" ;;
@@ -108,7 +150,7 @@ EOF
keep) msg_ok "Kept 'pmg-enterprise' repository" ;; keep) msg_ok "Kept 'pmg-enterprise' repository" ;;
disable) disable)
msg_info "Disabling 'pmg-enterprise' repository" msg_info "Disabling 'pmg-enterprise' repository"
sed -i "s/^[^#].*pmg-enterprise/# &/" "$file" toggle_repo "$file" disable
msg_ok "Disabled 'pmg-enterprise' repository" msg_ok "Disabled 'pmg-enterprise' repository"
;; ;;
delete) delete)
@@ -128,7 +170,7 @@ EOF
case $CHOICE in case $CHOICE in
enable) enable)
msg_info "Enabling 'pmg-enterprise' repository" msg_info "Enabling 'pmg-enterprise' repository"
sed -i "s/^#.*pmg-enterprise/deb/" "$file" toggle_repo "$file" enable
msg_ok "Enabled 'pmg-enterprise' repository" msg_ok "Enabled 'pmg-enterprise' repository"
;; ;;
keep) msg_ok "Kept 'pmg-enterprise' repository disabled" ;; keep) msg_ok "Kept 'pmg-enterprise' repository disabled" ;;
@@ -149,8 +191,12 @@ EOF
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Adding 'pmg-enterprise' repository" msg_info "Adding 'pmg-enterprise' repository"
cat >/etc/apt/sources.list.d/pmg-enterprise.list <<EOF cat >/etc/apt/sources.list.d/pmg-enterprise.sources <<EOF
deb https://enterprise.proxmox.com/debian/pmg ${VERSION} pmg-enterprise Types: deb
URIs: https://enterprise.proxmox.com/debian/pmg
Suites: ${VERSION}
Components: pmg-enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF EOF
msg_ok "Added 'pmg-enterprise' repository" msg_ok "Added 'pmg-enterprise' repository"
;; ;;
@@ -173,7 +219,7 @@ EOF
keep) msg_ok "Kept 'pmg-no-subscription' repository" ;; keep) msg_ok "Kept 'pmg-no-subscription' repository" ;;
disable) disable)
msg_info "Disabling 'pmg-no-subscription' repository" msg_info "Disabling 'pmg-no-subscription' repository"
sed -i "s/^[^#].*pmg-no-subscription/# &/" "$file" toggle_repo "$file" disable
msg_ok "Disabled 'pmg-no-subscription' repository" msg_ok "Disabled 'pmg-no-subscription' repository"
;; ;;
delete) delete)
@@ -193,7 +239,7 @@ EOF
case $CHOICE in case $CHOICE in
enable) enable)
msg_info "Enabling 'pmg-no-subscription' repository" msg_info "Enabling 'pmg-no-subscription' repository"
sed -i "s/^#.*pmg-no-subscription/deb/" "$file" toggle_repo "$file" enable
msg_ok "Enabled 'pmg-no-subscription' repository" msg_ok "Enabled 'pmg-no-subscription' repository"
;; ;;
keep) msg_ok "Kept 'pmg-no-subscription' repository disabled" ;; keep) msg_ok "Kept 'pmg-no-subscription' repository disabled" ;;
@@ -213,8 +259,12 @@ EOF
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Adding 'pmg-no-subscription' repository" msg_info "Adding 'pmg-no-subscription' repository"
cat >/etc/apt/sources.list.d/pmg-install-repo.list <<EOF cat >/etc/apt/sources.list.d/pmg-no-subscription.sources <<EOF
deb http://download.proxmox.com/debian/pmg ${VERSION} pmg-no-subscription Types: deb
URIs: http://download.proxmox.com/debian/pmg
Suites: ${VERSION}
Components: pmg-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF EOF
msg_ok "Added 'pmg-no-subscription' repository" msg_ok "Added 'pmg-no-subscription' repository"
;; ;;
@@ -236,8 +286,13 @@ EOF
case $CHOICE in case $CHOICE in
yes) yes)
msg_info "Adding 'pmgtest' repository (disabled)" msg_info "Adding 'pmgtest' repository (disabled)"
cat >/etc/apt/sources.list.d/pmgtest-for-beta.list <<EOF cat >/etc/apt/sources.list.d/pmgtest.sources <<EOF
# deb http://download.proxmox.com/debian/pmg ${VERSION} pmgtest Types: deb
URIs: http://download.proxmox.com/debian/pmg
Suites: ${VERSION}
Components: pmgtest
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Enabled: no
EOF EOF
msg_ok "Added 'pmgtest' repository" msg_ok "Added 'pmgtest' repository"
;; ;;