diff --git a/.github/changelogs/2026/08.md b/.github/changelogs/2026/08.md index 18c8bc9a6..3dcf87f21 100644 --- a/.github/changelogs/2026/08.md +++ b/.github/changelogs/2026/08.md @@ -1,3 +1,156 @@ +## 2026-08-15 + +### πŸ†• New Scripts + + - Securo ([#16518](https://github.com/community-scripts/ProxmoxVE/pull/16518)) +- ntopng ([#16387](https://github.com/community-scripts/ProxmoxVE/pull/16387)) + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - AdventureLog: remove pnpm build-allowlist override causing pnpm 10.33 conflict [@MickLesk](https://github.com/MickLesk) ([#16478](https://github.com/community-scripts/ProxmoxVE/pull/16478)) + + - #### ✨ New Features + + - PatchMon: add ssg-content [@MickLesk](https://github.com/MickLesk) ([#16481](https://github.com/community-scripts/ProxmoxVE/pull/16481)) + +## 2026-08-14 + +### πŸ†• New Scripts + + - RSS-Bridge ([#16471](https://github.com/community-scripts/ProxmoxVE/pull/16471)) +- GoDoxy ([#16470](https://github.com/community-scripts/ProxmoxVE/pull/16470)) +- Mumble ([#16474](https://github.com/community-scripts/ProxmoxVE/pull/16474)) +- Fleet ([#16472](https://github.com/community-scripts/ProxmoxVE/pull/16472)) +- Newt ([#16473](https://github.com/community-scripts/ProxmoxVE/pull/16473)) + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - calibre-web: install as package for 0.6.27's src-layout restructure [@MickLesk](https://github.com/MickLesk) ([#16480](https://github.com/community-scripts/ProxmoxVE/pull/16480)) + - Wanderer: Refactor of Services / Installation / Paths [@johanngrobe](https://github.com/johanngrobe) ([#16487](https://github.com/community-scripts/ProxmoxVE/pull/16487)) + - pelican-panel: set APP_URL to container IP [@MickLesk](https://github.com/MickLesk) ([#16488](https://github.com/community-scripts/ProxmoxVE/pull/16488)) + - fix(ampache): update to PHP 8.5 asset, auto-upgrade PHP on update [@CervezaStallone](https://github.com/CervezaStallone) ([#16484](https://github.com/community-scripts/ProxmoxVE/pull/16484)) + + - #### ✨ New Features + + - projectsend: rewrite for 2.0.0 (Laravel, nginx, MariaDB) [@MickLesk](https://github.com/MickLesk) ([#16477](https://github.com/community-scripts/ProxmoxVE/pull/16477)) + - Homepage v2.0 [@vhsdream](https://github.com/vhsdream) ([#16500](https://github.com/community-scripts/ProxmoxVE/pull/16500)) + + - #### πŸ”§ Refactor + + - Refactor: PowerDNS move poweradmin database outside the web root [@MickLesk](https://github.com/MickLesk) ([#16476](https://github.com/community-scripts/ProxmoxVE/pull/16476)) + - paperless-ngx: run services with uv --no-sync to avoid startup network dependency [@MickLesk](https://github.com/MickLesk) ([#16479](https://github.com/community-scripts/ProxmoxVE/pull/16479)) + +## 2026-08-13 + +### πŸ†• New Scripts + + - SuggestArr ([#16449](https://github.com/community-scripts/ProxmoxVE/pull/16449)) + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - fix(stirling-pdf): LibreOffice listener collides with unoserver on UNO port 2002, burning a core [@angusmaul](https://github.com/angusmaul) ([#16460](https://github.com/community-scripts/ProxmoxVE/pull/16460)) + - fix(reitti): enable SNI for tile cache [@kylemd](https://github.com/kylemd) ([#16463](https://github.com/community-scripts/ProxmoxVE/pull/16463)) + - [wanderer] refactor [@johanngrobe](https://github.com/johanngrobe) ([#16448](https://github.com/community-scripts/ProxmoxVE/pull/16448)) + + - #### ✨ New Features + + - feat: Update koillection-install.sh to support API usage [@Crazy-Duck](https://github.com/Crazy-Duck) ([#16425](https://github.com/community-scripts/ProxmoxVE/pull/16425)) + +## 2026-08-12 + +### πŸ†• New Scripts + + - Stalwart ([#16388](https://github.com/community-scripts/ProxmoxVE/pull/16388)) + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - networkoptimizer: mitigate dotnet publish hang in LXC [@MickLesk](https://github.com/MickLesk) ([#16436](https://github.com/community-scripts/ProxmoxVE/pull/16436)) + - lazylibrarian: reinstall deps after git pull on update [@MickLesk](https://github.com/MickLesk) ([#16435](https://github.com/community-scripts/ProxmoxVE/pull/16435)) + - wanderer: fix deprecated meilisearch upgrade flag [@MickLesk](https://github.com/MickLesk) ([#16434](https://github.com/community-scripts/ProxmoxVE/pull/16434)) + - calibre-web: fix release asset filename pattern [@MickLesk](https://github.com/MickLesk) ([#16433](https://github.com/community-scripts/ProxmoxVE/pull/16433)) + - fix(stirling-pdf): unoserver installed into the venv, and login mode truncates .env [@angusmaul](https://github.com/angusmaul) ([#16439](https://github.com/community-scripts/ProxmoxVE/pull/16439)) + - fix(pulse): keep the container recoverable when an update fails [@rcourtman](https://github.com/rcourtman) ([#16311](https://github.com/community-scripts/ProxmoxVE/pull/16311)) + + - #### πŸ”§ Refactor + + - ConvertX: add some new dependencies [@MickLesk](https://github.com/MickLesk) ([#16437](https://github.com/community-scripts/ProxmoxVE/pull/16437)) + +## 2026-08-11 + +### πŸš€ Updated Scripts + + - Update source URL for Reactive Resume [@MickLesk](https://github.com/MickLesk) ([#16407](https://github.com/community-scripts/ProxmoxVE/pull/16407)) + + - #### 🐞 Bug Fixes + + - Pelican-Panel: add php artisan p:environment:database [@MickLesk](https://github.com/MickLesk) ([#16397](https://github.com/community-scripts/ProxmoxVE/pull/16397)) + - outline: fix URL sed matching wrong line in .env.sample // refactor .env generation [@MickLesk](https://github.com/MickLesk) ([#16408](https://github.com/community-scripts/ProxmoxVE/pull/16408)) + - paperless-ngx: reindex Tantivy search index on webserver start [@MickLesk](https://github.com/MickLesk) ([#16395](https://github.com/community-scripts/ProxmoxVE/pull/16395)) + - karakeep: pin Node.js to 22 LTS, avoid Node 24.19 better-sqlite3 crash [@MickLesk](https://github.com/MickLesk) ([#16396](https://github.com/community-scripts/ProxmoxVE/pull/16396)) + + - #### ✨ New Features + + - Open WebUI: add optional OpenTelemetry package install [@irishpadres](https://github.com/irishpadres) ([#16415](https://github.com/community-scripts/ProxmoxVE/pull/16415)) + +### 🧰 Tools + + - #### 🐞 Bug Fixes + + - fix(add-tailscale-lxc): stop spinner before whiptail menu [@halcycon](https://github.com/halcycon) ([#16402](https://github.com/community-scripts/ProxmoxVE/pull/16402)) + + - #### πŸ”§ Refactor + + - arcane: fix projects/builds dir ownership for non-root container UID [@MickLesk](https://github.com/MickLesk) ([#16411](https://github.com/community-scripts/ProxmoxVE/pull/16411)) + +## 2026-08-10 + +### πŸ†• New Scripts + + - GitLab ([#16386](https://github.com/community-scripts/ProxmoxVE/pull/16386)) +- TeslaMate ([#16385](https://github.com/community-scripts/ProxmoxVE/pull/16385)) +- tor-snowflake ([#15684](https://github.com/community-scripts/ProxmoxVE/pull/15684)) + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - ErsatzTV: update ffmpeg to 8.1 version [@MickLesk](https://github.com/MickLesk) ([#16383](https://github.com/community-scripts/ProxmoxVE/pull/16383)) + +### 🧰 Tools + + - post-pdm-install ([#16368](https://github.com/community-scripts/ProxmoxVE/pull/16368)) + +## 2026-08-09 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - Fix: CouchDB Erlang cookie breaks vm.args (use hex) [@fudianchn](https://github.com/fudianchn) ([#16361](https://github.com/community-scripts/ProxmoxVE/pull/16361)) + - SparkyFitness: Install Git for frontend builds [@MickLesk](https://github.com/MickLesk) ([#16352](https://github.com/community-scripts/ProxmoxVE/pull/16352)) + - Byparr: Use invisible-playwright browser setup [@MickLesk](https://github.com/MickLesk) ([#16353](https://github.com/community-scripts/ProxmoxVE/pull/16353)) + - Crafty Controller: Restore ownership after updates [@MickLesk](https://github.com/MickLesk) ([#16354](https://github.com/community-scripts/ProxmoxVE/pull/16354)) + - Webtrees: Fix schema check in silent mode [@MickLesk](https://github.com/MickLesk) ([#16355](https://github.com/community-scripts/ProxmoxVE/pull/16355)) + - SigNoz: Allow legacy metadata schema on ClickHouse 26 [@MickLesk](https://github.com/MickLesk) ([#16356](https://github.com/community-scripts/ProxmoxVE/pull/16356)) + +### 🧰 Tools + + - #### ✨ New Features + + - Portainer: Update existing CE and BE installations [@MickLesk](https://github.com/MickLesk) ([#16357](https://github.com/community-scripts/ProxmoxVE/pull/16357)) + +### πŸ“š Documentation + + - github: update Star History links and image sources [@MickLesk](https://github.com/MickLesk) ([#16367](https://github.com/community-scripts/ProxmoxVE/pull/16367)) + ## 2026-08-08 ### πŸ†• New Scripts diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ec42150c..71d56df74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -89,6 +89,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit + + + @@ -102,7 +105,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
-

August (8 entries)

+

August (15 entries)

[View August 2026 Changelog](.github/changelogs/2026/08.md) @@ -521,8 +524,85 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
+## 2026-08-19 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - fix: clean yarn cache after mealie frontend build to prevent disk growth [@bferd](https://github.com/bferd) ([#16609](https://github.com/community-scripts/ProxmoxVE/pull/16609)) + - VictoriaMetrics: use github_api_call for release lookups so GITHUB_TOKEN is honored [@angusmaul](https://github.com/angusmaul) ([#16607](https://github.com/community-scripts/ProxmoxVE/pull/16607)) + - Increase default RAM allocation for Gatus [@rmpratt1](https://github.com/rmpratt1) ([#16601](https://github.com/community-scripts/ProxmoxVE/pull/16601)) + +## 2026-08-18 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - romm: add missing /decode and /cache Angie locations for multi-file downloads [@MickLesk](https://github.com/MickLesk) ([#16589](https://github.com/community-scripts/ProxmoxVE/pull/16589)) + - odoo: use patched wkhtmltopdf build [@MickLesk](https://github.com/MickLesk) ([#16590](https://github.com/community-scripts/ProxmoxVE/pull/16590)) + + - #### πŸ’₯ Breaking Changes + + - Breaking Change: Migrate all "Alpine" Scripts to Normal CT's [@MickLesk](https://github.com/MickLesk) ([#16587](https://github.com/community-scripts/ProxmoxVE/pull/16587)) + +## 2026-08-17 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - keycloak: remove invalid ExecStop, kc.sh has no stop subcommand [@MickLesk](https://github.com/MickLesk) ([#16563](https://github.com/community-scripts/ProxmoxVE/pull/16563)) + - Pin ownfoil release to version 2.3.0 [@MickLesk](https://github.com/MickLesk) ([#16574](https://github.com/community-scripts/ProxmoxVE/pull/16574)) + - kometa: add git, needed by requirements.txt's git dependency [@MickLesk](https://github.com/MickLesk) ([#16562](https://github.com/community-scripts/ProxmoxVE/pull/16562)) + - fix romm: deploy EmulatorJS and Ruffle after the frontend build [@angusmaul](https://github.com/angusmaul) ([#16571](https://github.com/community-scripts/ProxmoxVE/pull/16571)) + + - #### πŸ”§ Refactor + + - patchmon: fetch only SCAP datastream XMLs [@MickLesk](https://github.com/MickLesk) ([#16565](https://github.com/community-scripts/ProxmoxVE/pull/16565)) + - teslamate: use precompiled Elixir [@MickLesk](https://github.com/MickLesk) ([#16561](https://github.com/community-scripts/ProxmoxVE/pull/16561)) + +## 2026-08-16 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - [FIX] Shelfmark: internal bypasser never starts under the gevent worker [@robbiet480](https://github.com/robbiet480) ([#16495](https://github.com/community-scripts/ProxmoxVE/pull/16495)) + - tubearchivist: fix: enhance update script [@CrazyWolf13](https://github.com/CrazyWolf13) ([#16521](https://github.com/community-scripts/ProxmoxVE/pull/16521)) + - tracktor: build with pnpm using upstream's frozen lockfile [@MickLesk](https://github.com/MickLesk) ([#16530](https://github.com/community-scripts/ProxmoxVE/pull/16530)) + - wallos: run db migration after apache reload on update [@MickLesk](https://github.com/MickLesk) ([#16528](https://github.com/community-scripts/ProxmoxVE/pull/16528)) + + - #### πŸ”§ Refactor + + - networkoptimizer: also build uwnspeedtest binary for server arch [@MickLesk](https://github.com/MickLesk) ([#16531](https://github.com/community-scripts/ProxmoxVE/pull/16531)) + +### πŸ—‘οΈ Deleted Scripts + + - Remove: Jeedom [@MickLesk](https://github.com/MickLesk) ([#16536](https://github.com/community-scripts/ProxmoxVE/pull/16536)) +- Remove: Swizzin [@MickLesk](https://github.com/MickLesk) ([#16535](https://github.com/community-scripts/ProxmoxVE/pull/16535)) +- Remove: NocoDB [@MickLesk](https://github.com/MickLesk) ([#16533](https://github.com/community-scripts/ProxmoxVE/pull/16533)) + +### πŸ’Ύ Core + + - #### πŸ”§ Refactor + + - core: skip mount points during backup and clean installs [@MickLesk](https://github.com/MickLesk) ([#16532](https://github.com/community-scripts/ProxmoxVE/pull/16532)) + +### 🧰 Tools + + - #### 🐞 Bug Fixes + + - cronmaster: back up scripts, data and snippets folders on update [@MickLesk](https://github.com/MickLesk) ([#16529](https://github.com/community-scripts/ProxmoxVE/pull/16529)) + ## 2026-08-15 +### πŸ†• New Scripts + + - Securo ([#16518](https://github.com/community-scripts/ProxmoxVE/pull/16518)) +- ntopng ([#16387](https://github.com/community-scripts/ProxmoxVE/pull/16387)) + ### πŸš€ Updated Scripts - #### 🐞 Bug Fixes @@ -1174,147 +1254,4 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### ✨ New Features - - update-lxc: autoremove and autoclean after apt full-upgrade [@soupy-boy](https://github.com/soupy-boy) ([#15831](https://github.com/community-scripts/ProxmoxVE/pull/15831)) - -## 2026-07-16 - -### πŸ†• New Scripts - - - Sync-In ([#15812](https://github.com/community-scripts/ProxmoxVE/pull/15812)) -- Beaverhabits ([#15813](https://github.com/community-scripts/ProxmoxVE/pull/15813)) -- Notediscovery ([#15811](https://github.com/community-scripts/ProxmoxVE/pull/15811)) - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - Pin Immich to v3.0.3 [@vhsdream](https://github.com/vhsdream) ([#15790](https://github.com/community-scripts/ProxmoxVE/pull/15790)) - -## 2026-07-15 - -### πŸ†• New Scripts - - - Nexterm ([#15688](https://github.com/community-scripts/ProxmoxVE/pull/15688)) - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - 2fauth: minor fixes for 8.0.0 [@MickLesk](https://github.com/MickLesk) ([#15795](https://github.com/community-scripts/ProxmoxVE/pull/15795)) - - SnapOtter: refactor update process to prebuild [@MickLesk](https://github.com/MickLesk) ([#15797](https://github.com/community-scripts/ProxmoxVE/pull/15797)) - -### πŸ’Ύ Core - - - #### πŸ”§ Refactor - - - tools.func: default Docker setup to official repo [@MickLesk](https://github.com/MickLesk) ([#15794](https://github.com/community-scripts/ProxmoxVE/pull/15794)) - -## 2026-07-14 - -### πŸ†• New Scripts - - - Grav ([#15773](https://github.com/community-scripts/ProxmoxVE/pull/15773)) -- Yuvomi ([#15772](https://github.com/community-scripts/ProxmoxVE/pull/15772)) - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - Lychee: Preserve uploads and ownership during update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15768](https://github.com/community-scripts/ProxmoxVE/pull/15768)) - - Wanderer: Clean deploy and install plugins for v0.20.0 update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15759](https://github.com/community-scripts/ProxmoxVE/pull/15759)) - - FileFlows: Handle update API 401, force update, and Node install [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15766](https://github.com/community-scripts/ProxmoxVE/pull/15766)) - - BirdNET-Go: Match new upstream release asset naming [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15758](https://github.com/community-scripts/ProxmoxVE/pull/15758)) - - [Upstream Fix] Immich: Fix loader priority [@vhsdream](https://github.com/vhsdream) ([#15755](https://github.com/community-scripts/ProxmoxVE/pull/15755)) - - - #### ✨ New Features - - - Bump OpenCloud version to v7.2.2 [@MickLesk](https://github.com/MickLesk) ([#15769](https://github.com/community-scripts/ProxmoxVE/pull/15769)) - - Silverbullet: Add optional Runtime API install via Chromium [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15761](https://github.com/community-scripts/ProxmoxVE/pull/15761)) - - - #### πŸ’₯ Breaking Changes - - - Pangolin: Bump to 1.20.0 | BREAKING: Switch to PostgreSQL [@MickLesk](https://github.com/MickLesk) ([#15682](https://github.com/community-scripts/ProxmoxVE/pull/15682)) - - - #### πŸ”§ Refactor - - - AFFiNE: Pin to v0.26.3 [@MickLesk](https://github.com/MickLesk) ([#15782](https://github.com/community-scripts/ProxmoxVE/pull/15782)) - -## 2026-07-13 - -### πŸ†• New Scripts - - - LeafWiki ([#15748](https://github.com/community-scripts/ProxmoxVE/pull/15748)) - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - fix(hyperion): keep service running after container reboot [@TowyTowy](https://github.com/TowyTowy) ([#15653](https://github.com/community-scripts/ProxmoxVE/pull/15653)) - - Change sign-in URL to admin URL in affine.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15741](https://github.com/community-scripts/ProxmoxVE/pull/15741)) - - immich: use actual PostgreSQL version for VectorChord package lookup [@mnavon](https://github.com/mnavon) ([#15705](https://github.com/community-scripts/ProxmoxVE/pull/15705)) - - fix storyteller release selection for stable web tags [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15736](https://github.com/community-scripts/ProxmoxVE/pull/15736)) - - Docmost: Fix update procedure [@MickLesk](https://github.com/MickLesk) ([#15732](https://github.com/community-scripts/ProxmoxVE/pull/15732)) - - fix(shinobi): remove obsolete --unsafe-perm npm flag [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15730](https://github.com/community-scripts/ProxmoxVE/pull/15730)) - - - #### πŸ’₯ Breaking Changes - - - reitti: update to v5 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15635](https://github.com/community-scripts/ProxmoxVE/pull/15635)) - -### πŸ’Ύ Core - - - #### 🐞 Bug Fixes - - - fix(build.func): parse script status without jq dependency [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15729](https://github.com/community-scripts/ProxmoxVE/pull/15729)) - - - #### πŸ”§ Refactor - - - tools.func: some improvements (sql injection / command injection / guard) [@MickLesk](https://github.com/MickLesk) ([#15661](https://github.com/community-scripts/ProxmoxVE/pull/15661)) - -## 2026-07-12 - -### πŸ†• New Scripts - - - AFFiNE ([#15690](https://github.com/community-scripts/ProxmoxVE/pull/15690)) - -### πŸš€ Updated Scripts - - - Immich: Bump version to 3.0.2 [@vhsdream](https://github.com/vhsdream) ([#15668](https://github.com/community-scripts/ProxmoxVE/pull/15668)) - -### ❔ Uncategorized - - - fix(immich): correct Python indentation error in ct/immich.sh heredoc patch [@Copilot](https://github.com/Copilot) ([#15723](https://github.com/community-scripts/ProxmoxVE/pull/15723)) - -## 2026-07-11 - -### πŸ†• New Scripts - - - LocalAGI ([#15687](https://github.com/community-scripts/ProxmoxVE/pull/15687)) - -### πŸš€ Updated Scripts - - - fix(adventurelog): allow pnpm build scripts so install/update doesn't abort [@TowyTowy](https://github.com/TowyTowy) ([#15681](https://github.com/community-scripts/ProxmoxVE/pull/15681)) - - - #### 🐞 Bug Fixes - - - fix(fileflows): install .NET 10 ASP.NET Core Runtime to match current release [@TowyTowy](https://github.com/TowyTowy) ([#15702](https://github.com/community-scripts/ProxmoxVE/pull/15702)) - - Fix spacing on VLAN Input Box in haos-vm.sh [@pumrum](https://github.com/pumrum) ([#15696](https://github.com/community-scripts/ProxmoxVE/pull/15696)) - -### πŸ’Ύ Core - - - #### ✨ New Features - - - [tools.func]: Add function to handle deployment via GitLab release tags [@tremor021](https://github.com/tremor021) ([#15641](https://github.com/community-scripts/ProxmoxVE/pull/15641)) - -## 2026-07-10 - -### πŸ†• New Scripts - - - Squid ([#15605](https://github.com/community-scripts/ProxmoxVE/pull/15605)) - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - Adapt to new artifact filename format for pocket id [@wollew](https://github.com/wollew) ([#15689](https://github.com/community-scripts/ProxmoxVE/pull/15689)) - - Fireshare: Fix for install and upgrade to v1.7.3 [@tremor021](https://github.com/tremor021) ([#15673](https://github.com/community-scripts/ProxmoxVE/pull/15673)) - - Endurain: Fix update procedure [@tremor021](https://github.com/tremor021) ([#15674](https://github.com/community-scripts/ProxmoxVE/pull/15674)) \ No newline at end of file + - update-lxc: autoremove and autoclean after apt full-upgrade [@soupy-boy](https://github.com/soupy-boy) ([#15831](https://github.com/community-scripts/ProxmoxVE/pull/15831)) \ No newline at end of file diff --git a/ct/adguard.sh b/ct/adguard.sh index 87c47f6ed..752cea7f8 100644 --- a/ct/adguard.sh +++ b/ct/adguard.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,28 +10,57 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Adguard" var_tags="${var_tags:-adblock}" 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_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/AdGuardHome ]]; then msg_error "No ${APP} Installation Found!" exit fi msg_error "Adguard Home can only be updated via the user interface." - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating AdGuard Home" + $STD /opt/AdGuardHome/AdGuardHome --update + msg_ok "Updated AdGuard Home" + + msg_info "Restarting AdGuard Home" + $STD rc-service adguardhome restart + msg_ok "Restarted AdGuard Home" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/alpine-adguard.sh b/ct/alpine-adguard.sh deleted file mode 100644 index 5e71e166a..000000000 --- a/ct/alpine-adguard.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/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://adguardhome.com/ - -APP="Alpine-AdGuard" -var_tags="${var_tags:-alpine;adblock}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating AdGuard Home" - $STD /opt/AdGuardHome/AdGuardHome --update - msg_ok "Updated AdGuard Home" - - msg_info "Restarting AdGuard Home" - $STD rc-service adguardhome restart - msg_ok "Restarted AdGuard Home" - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/alpine-bitmagnet.sh b/ct/alpine-bitmagnet.sh deleted file mode 100644 index 922ed5705..000000000 --- a/ct/alpine-bitmagnet.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/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/bitmagnet-io/bitmagnet - -APP="Alpine-bitmagnet" -var_tags="${var_tags:-alpine;torrent}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-3}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - - if [[ ! -d /opt/bitmagnet ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then - msg_info "Backing up database" - rm -f /tmp/backup.sql - $STD sudo -u postgres pg_dump \ - --column-inserts \ - --data-only \ - --on-conflict-do-nothing \ - --rows-per-insert=1000 \ - --table=metadata_sources \ - --table=content \ - --table=content_attributes \ - --table=content_collections \ - --table=content_collections_content \ - --table=torrent_sources \ - --table=torrents \ - --table=torrent_files \ - --table=torrent_hints \ - --table=torrent_contents \ - --table=torrent_tags \ - --table=torrents_torrent_sources \ - --table=key_values \ - bitmagnet \ - >/tmp/backup.sql - mv /tmp/backup.sql /opt/ - msg_ok "Database backed up" - - msg_info "Updating ${APP} from $(cat /opt/bitmagnet_version.txt) to ${RELEASE}" - $STD apk -U upgrade - $STD service bitmagnet stop - [ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/ - [ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/ - rm -rf /opt/bitmagnet/* - temp_file=$(mktemp) - curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" - tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet - cd /opt/bitmagnet - VREL=v$RELEASE - $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL" - chmod +x bitmagnet - [ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/ - [ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/ - rm -f "$temp_file" - echo "${RELEASE}" >/opt/bitmagnet_version.txt - $STD service bitmagnet start - msg_ok "Updated successfully!" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following IP:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:3333${CL}" diff --git a/ct/alpine-caddy.sh b/ct/alpine-caddy.sh deleted file mode 100644 index 609339ef8..000000000 --- a/ct/alpine-caddy.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/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: cobalt (cobaltgit) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://caddyserver.com/ - -APP="Alpine-Caddy" -var_tags="${var_tags:-webserver}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-3}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - if [[ ! -d /etc/caddy ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating $APP LXC" - $STD apk -U upgrade - msg_ok "Updated $APP LXC" - - msg_info "Restarting Caddy" - rc-service caddy restart - msg_ok "Restarted Caddy" - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:80${CL}" diff --git a/ct/alpine-docker.sh b/ct/alpine-docker.sh deleted file mode 100644 index 1d7143d46..000000000 --- a/ct/alpine-docker.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.docker.com/ - -APP="Alpine-Docker" -var_tags="${var_tags:-docker;alpine}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-2}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - $STD apk -U upgrade - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" diff --git a/ct/alpine-forgejo.sh b/ct/alpine-forgejo.sh deleted file mode 100644 index 1de6104c6..000000000 --- a/ct/alpine-forgejo.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/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: Johann3s-H (An!ma) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://forgejo.org/ - -APP="Alpine-Forgejo" -var_tags="${var_tags:-alpine;git}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating Forgejo" - $STD apk upgrade forgejo - msg_ok "Updated Forgejo" - - msg_info "Restarting Forgejo" - $STD rc-service forgejo restart - msg_ok "Restarted Forgejo" - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/alpine-garage.sh b/ct/alpine-garage.sh deleted file mode 100644 index ae6f2c604..000000000 --- a/ct/alpine-garage.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/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://garagehq.deuxfleurs.fr/ - -APP="Alpine-Garage" -var_tags="${var_tags:-alpine;object-storage}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-5}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - if [[ ! -f /usr/local/bin/garage ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name') - if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then - msg_info "Stopping Service" - rc-service garage stop || true - msg_ok "Stopped Service" - - msg_info "Backing Up Data" - cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true - cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true - msg_ok "Backed Up Data" - - msg_info "Updating Garage" - curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage - chmod +x /usr/local/bin/garage - echo "${GITEA_RELEASE}" >~/.garage - msg_ok "Updated Garage" - - msg_info "Starting Service" - rc-service garage start || rc-service garage restart - msg_ok "Started Service" - msg_ok "Updated successfully!" - else - msg_ok "No update required. Garage is already at ${GITEA_RELEASE}" - fi - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/alpine-gatus.sh b/ct/alpine-gatus.sh deleted file mode 100644 index c8c720f4d..000000000 --- a/ct/alpine-gatus.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/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/TwiN/gatus - -APP="Alpine-gatus" -var_tags="${var_tags:-alpine;monitoring}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-3}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - - if [[ ! -d /opt/gatus ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [ "${RELEASE}" != "$(cat /opt/gatus_version.txt)" ] || [ ! -f /opt/gatus_version.txt ]; then - msg_info "Updating ${APP} LXC" - $STD apk -U upgrade - $STD service gatus stop - mv /opt/gatus/config/config.yaml /opt - rm -rf /opt/gatus/* - temp_file=$(mktemp) - curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" - tar zxf "$temp_file" --strip-components=1 -C /opt/gatus - cd /opt/gatus - $STD go mod tidy - CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . - setcap CAP_NET_RAW+ep gatus - mv /opt/config.yaml config - rm -f "$temp_file" - echo "${RELEASE}" >/opt/gatus_version.txt - $STD service gatus start - msg_ok "Updated successfully!" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following IP:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:8080${CL}" diff --git a/ct/alpine-gitea.sh b/ct/alpine-gitea.sh deleted file mode 100644 index bbeb95c9b..000000000 --- a/ct/alpine-gitea.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/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://gitea.io/ - -APP="Alpine-Gitea" -var_tags="${var_tags:-alpine;git}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating Gitea" - apk upgrade gitea - msg_ok "Updated Gitea" - - msg_info "Restarting Gitea" - rc-service gitea restart - msg_ok "Restarted Gitea" - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/alpine-grafana.sh b/ct/alpine-grafana.sh deleted file mode 100644 index d95f9a6d0..000000000 --- a/ct/alpine-grafana.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://grafana.com/ - -APP="Alpine-Grafana" -var_tags="${var_tags:-alpine;monitoring}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) - - CHOICE=$(msg_menu "Grafana Update Options" \ - "1" "Check for Grafana Updates" \ - "2" "Allow 0.0.0.0 for listening" \ - "3" "Allow only ${LXCIP} for listening") - - case $CHOICE in - 1) - $STD apk -U upgrade - msg_ok "Updated successfully!" - exit - ;; - 2) - sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana - service grafana restart - msg_ok "Allowed listening on all interfaces!" - exit - ;; - 3) - sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana - service grafana restart - msg_ok "Allowed listening only on ${LXCIP}!" - exit - ;; - esac - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/alpine-ironclaw.sh b/ct/alpine-ironclaw.sh deleted file mode 100644 index f9d6c9fb2..000000000 --- a/ct/alpine-ironclaw.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/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/nearai/ironclaw - -APP="Alpine-IronClaw" -var_tags="${var_tags:-ai;agent;alpine}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-8}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - - if [[ ! -f /usr/local/bin/ironclaw ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - RELEASE="ironclaw-v0.29.1" - if check_for_gh_release "ironclaw-bin" "nearai/ironclaw" "${RELEASE}" "IronClaw 1.0 (Reborn) is a ground-up rearchitecture with an incompatible CLI/config format; pinned until this script supports it"; then - msg_info "Stopping Service" - rc-service ironclaw stop 2>/dev/null || true - msg_ok "Stopped Service" - - msg_info "Backing up Configuration" - cp /root/.ironclaw/.env /root/ironclaw.env.bak - msg_ok "Backed up Configuration" - - fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "${RELEASE}" "/usr/local/bin" \ - "ironclaw-$(uname -m)-unknown-linux-musl.tar.gz" - chmod +x /usr/local/bin/ironclaw - - msg_info "Restoring Configuration" - cp /root/ironclaw.env.bak /root/.ironclaw/.env - rm -f /root/ironclaw.env.bak - msg_ok "Restored Configuration" - - msg_info "Starting Service" - rc-service ironclaw start - 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} Next Steps:${CL}" -echo -e "${TAB}1. Complete setup by running:${CL}" -echo -e "${TAB}${TAB}${BGN}/usr/local/bin/ironclaw onboard${CL}" -echo -e "${TAB}2. Start the service:${CL}" -echo -e "${TAB}${TAB}${BGN}rc-service ironclaw start${CL}" -echo -e "${TAB}3. Access the Web UI at:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:3000${CL}" -echo -e "${INFO}${YW} Use Gateway Authentication Token to login:${CL}" -echo -e "${TAB}${TAB}${BGN}cat /root/.ironclaw/gateway.creds${CL}" diff --git a/ct/alpine-loki.sh b/ct/alpine-loki.sh deleted file mode 100644 index 2ea565b56..000000000 --- a/ct/alpine-loki.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/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: hoholms -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/grafana/loki - -APP="Alpine-Loki" -var_tags="${var_tags:-alpine;monitoring}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) - - CHOICE=$(msg_menu "Loki Update Options" \ - "1" "Check for Loki Updates" \ - "2" "Allow 0.0.0.0 for listening" \ - "3" "Allow only ${LXCIP} for listening") - - case $CHOICE in - 1) - $STD apk -U upgrade - msg_ok "Updated successfully!" - exit - ;; - 2) - sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/loki - service loki restart - msg_ok "Allowed listening on all interfaces!" - exit - ;; - 3) - sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/loki - service loki restart - msg_ok "Allowed listening only on ${LXCIP}!" - exit - ;; - esac - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:3100${CL}" diff --git a/ct/alpine-mariadb.sh b/ct/alpine-mariadb.sh deleted file mode 100644 index c579bca8f..000000000 --- a/ct/alpine-mariadb.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/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://mariadb.org/ - -APP="Alpine-MariaDB" -var_tags="${var_tags:-alpine;database}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating MariaDB" - $STD apk upgrade mariadb mariadb-client - msg_ok "Updated MariaDB" - - msg_info "Restarting MariaDB" - $STD rc-service mariadb restart - msg_ok "Restarted MariaDB" - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following IP:${CL}" -echo -e "${GATEWAY}${BGN}${IP}:3306${CL}" diff --git a/ct/alpine-node-red.sh b/ct/alpine-node-red.sh deleted file mode 100644 index 006698ea1..000000000 --- a/ct/alpine-node-red.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/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://nodered.org/ - -APP="Alpine-Node-RED" -var_tags="${var_tags:-alpine;automation}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating Node.js and npm" - $STD apk upgrade nodejs npm - msg_ok "Updated Node.js and npm" - - msg_info "Updating Node-RED" - $STD npm install -g --unsafe-perm node-red - msg_ok "Updated Node-RED" - - msg_info "Restarting Node-RED" - $STD rc-service nodered restart - msg_ok "Restarted Node-RED" - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:1880${CL}" diff --git a/ct/alpine-ntfy.sh b/ct/alpine-ntfy.sh deleted file mode 100644 index b98384e19..000000000 --- a/ct/alpine-ntfy.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/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: cobalt (cobaltgit) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Source: https://ntfy.sh/ - -APP="Alpine-ntfy" -var_tags="${var_tags:-notification}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-2}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - if [[ ! -d /etc/ntfy ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating ntfy LXC" - $STD apk -U upgrade - setcap 'cap_net_bind_service=+ep' /usr/bin/ntfy - msg_ok "Updated ntfy LXC" - - msg_info "Restarting ntfy" - rc-service ntfy restart - msg_ok "Restarted ntfy" - msg_ok "Updated successfully!" - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/alpine-postgresql.sh b/ct/alpine-postgresql.sh deleted file mode 100644 index 558a07a6a..000000000 --- a/ct/alpine-postgresql.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.postgresql.org/ - -APP="Alpine-PostgreSQL" -var_tags="${var_tags:-alpine;database}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating PostgreSQL" - $STD apk upgrade postgresql postgresql-contrib - msg_ok "Updated PostgreSQL" - - msg_info "Restarting PostgreSQL" - $STD rc-service postgresql restart - msg_ok "Restarted PostgreSQL" - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following IP:${CL}" -echo -e "${GATEWAY}${BGN}${IP}:5432${CL}" diff --git a/ct/alpine-prometheus.sh b/ct/alpine-prometheus.sh deleted file mode 100644 index 466c3ffd7..000000000 --- a/ct/alpine-prometheus.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/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://prometheus.io/ - -APP="Alpine-Prometheus" -var_tags="${var_tags:-alpine;monitoring}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating Prometheus" - $STD apk upgrade prometheus - msg_ok "Updated Prometheus" - - msg_info "Restarting Prometheus" - $STD rc-service prometheus restart - msg_ok "Restarted Prometheus" - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:9090${CL}" diff --git a/ct/alpine-rclone.sh b/ct/alpine-rclone.sh deleted file mode 100644 index 8aec2bff3..000000000 --- a/ct/alpine-rclone.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/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/rclone/rclone - -APP="Alpine-rclone" -var_tags="${var_tags:-alpine;backup}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" -var_fuse="${var_fuse:-yes}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - if [ ! -d /opt/rclone ]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [ "${RELEASE}" != "$(cat /opt/rclone_version.txt)" ] || [ ! -f /opt/rclone_version.txt ]; then - msg_info "Updating ${APP} LXC" - temp_file=$(mktemp) - curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-$(arch_resolve).zip" -o "$temp_file" - $STD unzip -o "$temp_file" '*/**' -d /opt/rclone - rm -f "$temp_file" - echo "${RELEASE}" >/opt/rclone_version.txt - msg_ok "Updated successfully!" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following IP:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/alpine-redis.sh b/ct/alpine-redis.sh deleted file mode 100644 index 9db9706f3..000000000 --- a/ct/alpine-redis.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/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://redis.io/ - -APP="Alpine-Redis" -var_tags="${var_tags:-alpine;database}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) - - CHOICE=$(msg_menu "Redis Management" \ - "1" "Update Redis" \ - "2" "Allow 0.0.0.0 for listening" \ - "3" "Allow only ${LXCIP} for listening") - - case $CHOICE in - 1) - msg_info "Updating Redis" - apk update && apk upgrade redis - rc-service redis restart - msg_ok "Updated successfully!" - exit - ;; - 2) - msg_info "Setting Redis to listen on all interfaces" - sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf - rc-service redis restart - msg_ok "Redis now listens on all interfaces!" - exit - ;; - 3) - msg_info "Setting Redis to listen only on ${LXCIP}" - sed -i "s/^bind .*/bind ${LXCIP}/" /etc/redis.conf - rc-service redis restart - msg_ok "Redis now listens only on ${LXCIP}!" - exit - ;; - esac -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Connect to Redis CLI using the following command:${CL}" -echo -e "${GATEWAY}${BGN}redis-cli -h ${IP} -p 6379${CL}" diff --git a/ct/alpine-rustdeskserver.sh b/ct/alpine-rustdeskserver.sh deleted file mode 100644 index 29187338f..000000000 --- a/ct/alpine-rustdeskserver.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/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/rustdesk/rustdesk-server - -APP="Alpine-RustDeskServer" -var_tags="${var_tags:-alpine;monitoring}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-3}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - if [[ ! -d /opt/rustdesk-server ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - RELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - if [ "${RELEASE}" != "$(cat ~/.rustdesk-server 2>/dev/null)" ] || [ ! -f ~/.rustdesk-server ]; then - msg_info "Updating RustDesk Server to v${RELEASE}" - $STD apk -U upgrade - $STD service rustdesk-server-hbbs stop - $STD service rustdesk-server-hbbr stop - temp_file1=$(mktemp) - ARCH=$(arch_resolve "amd64" "arm64v8") - curl -fsSL "https://github.com/lejianwen/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-${ARCH}.zip" -o "$temp_file1" - $STD unzip "$temp_file1" - cp -r "$ARCH"/* /opt/rustdesk-server/ - echo "${RELEASE}" >~/.rustdesk-server - $STD service rustdesk-server-hbbs start - $STD service rustdesk-server-hbbr start - rm -rf "$ARCH" - rm -f "$temp_file1" - msg_ok "Updated RustDesk Server" - else - msg_ok "No update required. ${APP} is already at v${RELEASE}" - fi - if [ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ] || [ ! -f ~/.rustdesk-api ]; then - msg_info "Updating RustDesk API to v${APIRELEASE}" - $STD service rustdesk-api stop - temp_file2=$(mktemp) - curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-$(arch_resolve).tar.gz" -o "$temp_file2" - $STD tar zxvf "$temp_file2" - cp -r release/* /opt/rustdesk-api - echo "${APIRELEASE}" >~/.rustdesk-api - $STD service rustdesk-api start - rm -rf release - rm -f "$temp_file2" - msg_ok "Updated RustDesk API" - else - msg_ok "No update required. RustDesk API is already at v${APIRELEASE}" - fi - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following IP:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:21114${CL}" diff --git a/ct/alpine-rustypaste.sh b/ct/alpine-rustypaste.sh deleted file mode 100644 index 6a9cf3029..000000000 --- a/ct/alpine-rustypaste.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/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/orhun/rustypaste - -APP="Alpine-RustyPaste" -var_tags="${var_tags:-alpine;pastebin;storage}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-4}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - - if ! apk info -e rustypaste >/dev/null 2>&1; then - msg_error "No ${APP} Installation Found!" - exit - fi - - msg_info "Updating RustyPaste" - $STD apk update - $STD apk upgrade rustypaste --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community - msg_ok "Updated RustyPaste" - - msg_info "Restarting Services" - $STD rc-service rustypaste restart - msg_ok "Restarted Services" - msg_ok "Updated successfully!" - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:8000${CL}" diff --git a/ct/alpine-syncthing.sh b/ct/alpine-syncthing.sh deleted file mode 100644 index ee60e1460..000000000 --- a/ct/alpine-syncthing.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/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://syncthing.net/ - -APP="Alpine-Syncthing" -var_tags="${var_tags:-alpine;networking}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating Syncthing" - $STD apk upgrade syncthing - msg_ok "Updated Syncthing" - - msg_info "Restarting Syncthing" - $STD rc-service syncthing restart - msg_ok "Restarted Syncthing" - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:8384${CL}" diff --git a/ct/alpine-teamspeak-server.sh b/ct/alpine-teamspeak-server.sh deleted file mode 100644 index 79fd91b6a..000000000 --- a/ct/alpine-teamspeak-server.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/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: tremor021 (SlaviΕ‘a AreΕΎina) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://teamspeak.com/en/ - -APP="Alpine-TeamSpeak-Server" -var_tags="${var_tags:-alpine;communication}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-2}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-no}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - - if [[ ! -d /opt/teamspeak-server ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | awk 'NR==1') - - if [ "${RELEASE}" != "$(cat ~/.teamspeak-server)" ] || [ ! -f ~/.teamspeak-server ]; then - msg_info "Updating ${APP} LXC" - $STD apk -U upgrade - $STD service teamspeak stop - curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2 - tar -xf ./ts3server.tar.bz2 - cp -ru teamspeak3-server_linux_amd64/* /opt/teamspeak-server/ - rm -f ~/ts3server.tar.bz* - rm -rf teamspeak3-server_linux_amd64 - echo "${RELEASE}" >~/.teamspeak-server - $STD service teamspeak start - msg_ok "Updated successfully!" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following IP:${CL}" -echo -e "${GATEWAY}${BGN}${IP}:9987${CL}" diff --git a/ct/alpine-tinyauth.sh b/ct/alpine-tinyauth.sh deleted file mode 100644 index c47ca2f22..000000000 --- a/ct/alpine-tinyauth.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/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) | Co-Author: Stavros (steveiliop56) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/tinyauthapp/tinyauth - -APP="Alpine-Tinyauth" -var_tags="${var_tags:-alpine;auth}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-2}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - if [[ ! -d /opt/tinyauth ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - msg_info "Updating packages" - $STD apk -U upgrade - msg_ok "Updated packages" - - RELEASE=$(curl -s https://api.github.com/repos/tinyauthapp/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [ "${RELEASE}" != "$(cat ~/.tinyauth 2>/dev/null)" ] || [ ! -f ~/.tinyauth ]; then - msg_info "Stopping Service" - $STD service tinyauth stop - msg_ok "Service Stopped" - - if [[ -f /opt/tinyauth/.env ]] && ! grep -q "^TINYAUTH_" /opt/tinyauth/.env; then - msg_info "Migrating .env to v5 format" - sed -i \ - -e 's/^DATABASE_PATH=/TINYAUTH_DATABASE_PATH=/' \ - -e 's/^USERS=/TINYAUTH_AUTH_USERS=/' \ - -e "s/^USERS='/TINYAUTH_AUTH_USERS='/" \ - -e 's/^APP_URL=/TINYAUTH_APPURL=/' \ - -e 's/^SECRET=/TINYAUTH_AUTH_SECRET=/' \ - -e 's/^PORT=/TINYAUTH_SERVER_PORT=/' \ - -e 's/^ADDRESS=/TINYAUTH_SERVER_ADDRESS=/' \ - /opt/tinyauth/.env - msg_ok "Migrated .env to v5 format" - fi - - msg_info "Updating Tinyauth" - rm -f /opt/tinyauth/tinyauth - curl -fsSL "https://github.com/tinyauthapp/tinyauth/releases/download/v${RELEASE}/tinyauth-$(arch_resolve)" -o /opt/tinyauth/tinyauth - chmod +x /opt/tinyauth/tinyauth - echo "${RELEASE}" >~/.tinyauth - msg_ok "Updated Tinyauth" - - msg_info "Restarting Tinyauth" - $STD service tinyauth start - msg_ok "Restarted Tinyauth" - msg_ok "Updated successfully!" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/alpine-traefik.sh b/ct/alpine-traefik.sh deleted file mode 100644 index 8d7190dbe..000000000 --- a/ct/alpine-traefik.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/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://alpinelinux.org/ - -APP="Alpine-Traefik" -var_tags="${var_tags:-os;alpine}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating traefik from edge" - $STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community - msg_ok "Updated traefik" - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} WebUI Access (if configured) - using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:8080/dashboard${CL}" diff --git a/ct/alpine-transmission.sh b/ct/alpine-transmission.sh deleted file mode 100644 index dee98ec80..000000000 --- a/ct/alpine-transmission.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/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://transmissionbt.com/ - -APP="Alpine-Transmission" -var_tags="${var_tags:-alpine;torrent}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating Transmission" - $STD apk upgrade transmission-daemon - msg_ok "Updated Transmission" - - msg_info "Restarting Transmission" - $STD rc-service transmission-daemon restart - msg_ok "Restarted Transmission" - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:9091${CL}" diff --git a/ct/alpine-valkey.sh b/ct/alpine-valkey.sh deleted file mode 100644 index 25bd097a8..000000000 --- a/ct/alpine-valkey.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/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: pshankinclarke (lazarillo) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://valkey.io/ - -APP="Alpine-Valkey" -var_tags="${var_tags:-alpine;database}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) - - CHOICE=$(msg_menu "Valkey Management" \ - "1" "Update Valkey" \ - "2" "Allow 0.0.0.0 for listening" \ - "3" "Allow only ${LXCIP} for listening") - - case $CHOICE in - 1) - msg_info "Updating Valkey" - apk update && apk upgrade valkey - rc-service valkey restart - msg_ok "Updated Valkey" - msg_ok "Updated successfully!" - exit - ;; - 2) - msg_info "Setting Valkey to listen on all interfaces" - sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf - rc-service valkey restart - msg_ok "Valkey now listens on all interfaces!" - exit - ;; - 3) - msg_info "Setting Valkey to listen only on ${LXCIP}" - sed -i "s/^bind .*/bind ${LXCIP}/" /etc/valkey/valkey.conf - rc-service valkey restart - msg_ok "Valkey now listens only on ${LXCIP}!" - exit - ;; - esac -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Connect to Valkey CLI using the following command:${CL}" -echo -e "${GATEWAY}${BGN}valkey-cli -h ${IP} -p 6379${CL}" diff --git a/ct/alpine-vaultwarden.sh b/ct/alpine-vaultwarden.sh deleted file mode 100644 index df6c01185..000000000 --- a/ct/alpine-vaultwarden.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/dani-garcia/vaultwarden - -APP="Alpine-Vaultwarden" -var_tags="${var_tags:-alpine;vault}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - CHOICE=$(msg_menu "Vaultwarden Update Options" \ - "1" "Update Vaultwarden" \ - "2" "Reset ADMIN_TOKEN") - - case $CHOICE in - 1) - $STD apk -U upgrade - rc-service vaultwarden restart -q - msg_ok "Updated successfully!" - exit - ;; - 2) - if [[ "${PHS_SILENT:-0}" == "1" ]]; then - msg_warn "Reset ADMIN_TOKEN requires interactive mode, skipping." - exit - fi - read -r -s -p "Setup your ADMIN_TOKEN (make it strong): " NEWTOKEN - echo "" - if [[ -n "$NEWTOKEN" ]]; then - if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi - TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1) - if [[ ! -f /var/lib/vaultwarden/config.json ]]; then - sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden - else - sed -i "s|\"admin_token\": .*|\"admin_token\": \"${TOKEN}\",|" /var/lib/vaultwarden/config.json - fi - rc-service vaultwarden restart -q - msg_ok "Admin token updated" - fi - exit - ;; - esac -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}https://${IP}:8000${CL}" diff --git a/ct/alpine-wireguard.sh b/ct/alpine-wireguard.sh deleted file mode 100644 index 930334605..000000000 --- a/ct/alpine-wireguard.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.wireguard.com/ - -APP="Alpine-Wireguard" -var_tags="${var_tags:-alpine;vpn}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" -var_tun="${var_tun:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "update wireguard-tools" - $STD apk add --no-cache --upgrade wireguard-tools - msg_ok "wireguard-tools updated" - - if [[ -d /etc/wgdashboard/src ]]; then - msg_info "update WGDashboard" - cd /etc/wgdashboard/src - echo "y" | ./wgd.sh update >/dev/null 2>&1 - $STD ./wgd.sh start - msg_ok "WGDashboard updated" - fi - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} WGDashboardAccess it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:10086${CL}" diff --git a/ct/alpine-zigbee2mqtt.sh b/ct/alpine-zigbee2mqtt.sh deleted file mode 100644 index 8048cc870..000000000 --- a/ct/alpine-zigbee2mqtt.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.zigbee2mqtt.io/ - -APP="Alpine-Zigbee2MQTT" -var_tags="${var_tags:-alpine;zigbee;mqtt;smarthome}" -var_disk="${var_disk:-1}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-0}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - $STD apk -U upgrade - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" diff --git a/ct/bitmagnet.sh b/ct/bitmagnet.sh index 56966f954..fa5c8ed5e 100644 --- a/ct/bitmagnet.sh +++ b/ct/bitmagnet.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: SlaviΕ‘a AreΕΎina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Bitmagnet" var_tags="${var_tags:-os}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-3}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/bitmagnet ]]; then msg_error "No ${APP} Installation Found!" exit @@ -75,7 +85,69 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + if [[ ! -d /opt/bitmagnet ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then + msg_info "Backing up database" + rm -f /tmp/backup.sql + $STD sudo -u postgres pg_dump \ + --column-inserts \ + --data-only \ + --on-conflict-do-nothing \ + --rows-per-insert=1000 \ + --table=metadata_sources \ + --table=content \ + --table=content_attributes \ + --table=content_collections \ + --table=content_collections_content \ + --table=torrent_sources \ + --table=torrents \ + --table=torrent_files \ + --table=torrent_hints \ + --table=torrent_contents \ + --table=torrent_tags \ + --table=torrents_torrent_sources \ + --table=key_values \ + bitmagnet \ + >/tmp/backup.sql + mv /tmp/backup.sql /opt/ + msg_ok "Database backed up" + + msg_info "Updating ${APP} from $(cat /opt/bitmagnet_version.txt) to ${RELEASE}" + $STD apk -U upgrade + $STD service bitmagnet stop + [ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/ + [ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/ + rm -rf /opt/bitmagnet/* + temp_file=$(mktemp) + curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" + tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet + cd /opt/bitmagnet + VREL=v$RELEASE + $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL" + chmod +x bitmagnet + [ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/ + [ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/ + rm -f "$temp_file" + echo "${RELEASE}" >/opt/bitmagnet_version.txt + $STD service bitmagnet start + msg_ok "Updated successfully!" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/caddy.sh b/ct/caddy.sh index 7cd9a0750..34db90c9e 100644 --- a/ct/caddy.sh +++ b/ct/caddy.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Caddy" var_tags="${var_tags:-webserver}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-6}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-3}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-6}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /etc/caddy ]]; then msg_error "No ${APP} Installation Found!" exit @@ -45,7 +55,28 @@ function update_script() { fi fi msg_ok "Updated successfully!" - exit +} + +update_alpine() { + if [[ ! -d /etc/caddy ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_info "Updating $APP LXC" + $STD apk -U upgrade + msg_ok "Updated $APP LXC" + + msg_info "Restarting Caddy" + rc-service caddy restart + msg_ok "Restarted Caddy" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/docker.sh b/ct/docker.sh index 9f6984027..d1cd3ba78 100644 --- a/ct/docker.sh +++ b/ct/docker.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Docker" var_tags="${var_tags:-docker}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-2}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { msg_info "Updating base system" $STD apt update $STD apt upgrade -y @@ -43,7 +52,18 @@ function update_script() { fi msg_ok "Updated successfully!" - exit +} + +update_alpine() { + $STD apk -U upgrade + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/forgejo.sh b/ct/forgejo.sh index 19c10aad6..12b4325c0 100644 --- a/ct/forgejo.sh +++ b/ct/forgejo.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Forgejo" var_tags="${var_tags:-git}" 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_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-10}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/forgejo ]]; then msg_error "No ${APP} Installation Found!" exit @@ -50,7 +60,28 @@ function update_script() { else msg_ok "No update required. ${APP} is already at the latest version." fi - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Forgejo" + $STD apk upgrade forgejo + msg_ok "Updated Forgejo" + + msg_info "Restarting Forgejo" + $STD rc-service forgejo restart + msg_ok "Restarted Forgejo" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/garage.sh b/ct/garage.sh index ebca5a3b4..93268168a 100644 --- a/ct/garage.sh +++ b/ct/garage.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Garage" var_tags="${var_tags:-object-storage}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-5}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-512}" + var_disk="${var_disk:-5}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-5}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /usr/local/bin/garage ]]; then msg_error "No ${APP} Installation Found!" exit @@ -52,7 +62,45 @@ function update_script() { else msg_ok "No update required. Garage is already at ${GITEA_RELEASE}" fi - exit +} + +update_alpine() { + if [[ ! -f /usr/local/bin/garage ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name') + if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then + msg_info "Stopping Service" + rc-service garage stop || true + msg_ok "Stopped Service" + + msg_info "Backing Up Data" + cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true + cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true + msg_ok "Backed Up Data" + + msg_info "Updating Garage" + curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage + chmod +x /usr/local/bin/garage + echo "${GITEA_RELEASE}" >~/.garage + msg_ok "Updated Garage" + + msg_info "Starting Service" + rc-service garage start || rc-service garage restart + msg_ok "Started Service" + msg_ok "Updated successfully!" + else + msg_ok "No update required. Garage is already at ${GITEA_RELEASE}" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/gatus.sh b/ct/gatus.sh index 726bcb652..547f3c278 100644 --- a/ct/gatus.sh +++ b/ct/gatus.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: SlaviΕ‘a AreΕΎina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="gatus" var_tags="${var_tags:-monitoring}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-3}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if [[ ! -d /opt/gatus ]]; then msg_error "No ${APP} Installation Found!" exit @@ -50,7 +59,42 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + if [[ ! -d /opt/gatus ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [ "${RELEASE}" != "$(cat /opt/gatus_version.txt)" ] || [ ! -f /opt/gatus_version.txt ]; then + msg_info "Updating ${APP} LXC" + $STD apk -U upgrade + $STD service gatus stop + mv /opt/gatus/config/config.yaml /opt + rm -rf /opt/gatus/* + temp_file=$(mktemp) + curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" + tar zxf "$temp_file" --strip-components=1 -C /opt/gatus + cd /opt/gatus + $STD go mod tidy + CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . + setcap CAP_NET_RAW+ep gatus + mv /opt/config.yaml config + rm -f "$temp_file" + echo "${RELEASE}" >/opt/gatus_version.txt + $STD service gatus start + msg_ok "Updated successfully!" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/gitea.sh b/ct/gitea.sh index f29289de8..98977f66e 100644 --- a/ct/gitea.sh +++ b/ct/gitea.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) | Co-Author: Rogue-King # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Gitea" var_tags="${var_tags:-git}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-8}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-8}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if [[ ! -f /usr/local/bin/gitea ]]; then msg_error "No ${APP} Installation Found!" exit @@ -43,7 +52,28 @@ function update_script() { msg_ok "Started service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Gitea" + apk upgrade gitea + msg_ok "Updated Gitea" + + msg_info "Restarting Gitea" + rc-service gitea restart + msg_ok "Restarted Gitea" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/grafana.sh b/ct/grafana.sh index 3c04e141a..6101bd30a 100644 --- a/ct/grafana.sh +++ b/ct/grafana.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Grafana" var_tags="${var_tags:-monitoring;visualization}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if ! dpkg -s grafana >/dev/null 2>&1; then msg_error "No ${APP} Installation Found!" exit 233 @@ -43,7 +52,42 @@ function update_script() { $STD apt update $STD apt --only-upgrade install -y grafana msg_ok "Updated successfully!" - exit +} + +update_alpine() { + LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) + + CHOICE=$(msg_menu "Grafana Update Options" \ + "1" "Check for Grafana Updates" \ + "2" "Allow 0.0.0.0 for listening" \ + "3" "Allow only ${LXCIP} for listening") + + case $CHOICE in + 1) + $STD apk -U upgrade + msg_ok "Updated successfully!" + exit + ;; + 2) + sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana + service grafana restart + msg_ok "Allowed listening on all interfaces!" + exit + ;; + 3) + sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana + service grafana restart + msg_ok "Allowed listening only on ${LXCIP}!" + exit + ;; + esac +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/headers/alpine-adguard b/ct/headers/alpine-adguard deleted file mode 100644 index 64d1d6ac8..000000000 --- a/ct/headers/alpine-adguard +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ___ ________ __ - / | / /___ (_)___ ___ / | ____/ / ____/_ ______ __________/ / - / /| | / / __ \/ / __ \/ _ \______/ /| |/ __ / / __/ / / / __ `/ ___/ __ / - / ___ |/ / /_/ / / / / / __/_____/ ___ / /_/ / /_/ / /_/ / /_/ / / / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_\__,_/\____/\__,_/\__,_/_/ \__,_/ - /_/ diff --git a/ct/headers/alpine-bitmagnet b/ct/headers/alpine-bitmagnet deleted file mode 100644 index 20b69a682..000000000 --- a/ct/headers/alpine-bitmagnet +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ __ _ __ __ - / | / /___ (_)___ ___ / /_ (_) /_____ ___ ____ _____ _____ ___ / /_ - / /| | / / __ \/ / __ \/ _ \______/ __ \/ / __/ __ `__ \/ __ `/ __ `/ __ \/ _ \/ __/ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / / /_/ / / / / / /_/ / /_/ / / / / __/ /_ -/_/ |_/_/ .___/_/_/ /_/\___/ /_.___/_/\__/_/ /_/ /_/\__,_/\__, /_/ /_/\___/\__/ - /_/ /____/ diff --git a/ct/headers/alpine-caddy b/ct/headers/alpine-caddy deleted file mode 100644 index 75208a457..000000000 --- a/ct/headers/alpine-caddy +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ __ __ - / | / /___ (_)___ ___ / ____/___ _____/ /___/ /_ __ - / /| | / / __ \/ / __ \/ _ \______/ / / __ `/ __ / __ / / / / - / ___ |/ / /_/ / / / / / __/_____/ /___/ /_/ / /_/ / /_/ / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ \____/\__,_/\__,_/\__,_/\__, / - /_/ /____/ diff --git a/ct/headers/alpine-docker b/ct/headers/alpine-docker deleted file mode 100644 index 7fd1b265d..000000000 --- a/ct/headers/alpine-docker +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ __ - / | / /___ (_)___ ___ / __ \____ _____/ /_____ _____ - / /| | / / __ \/ / __ \/ _ \______/ / / / __ \/ ___/ //_/ _ \/ ___/ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / /__/ ,< / __/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_____/\____/\___/_/|_|\___/_/ - /_/ diff --git a/ct/headers/alpine-forgejo b/ct/headers/alpine-forgejo deleted file mode 100644 index 40c8e23f3..000000000 --- a/ct/headers/alpine-forgejo +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ _ - / | / /___ (_)___ ___ / ____/___ _________ ____ (_)___ - / /| | / / __ \/ / __ \/ _ \______/ /_ / __ \/ ___/ __ `/ _ \ / / __ \ - / ___ |/ / /_/ / / / / / __/_____/ __/ / /_/ / / / /_/ / __/ / / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \____/_/ \__, /\___/_/ /\____/ - /_/ /____/ /___/ diff --git a/ct/headers/alpine-garage b/ct/headers/alpine-garage deleted file mode 100644 index c14c5aaa0..000000000 --- a/ct/headers/alpine-garage +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ - / | / /___ (_)___ ___ / ____/___ __________ _____ ____ - / /| | / / __ \/ / __ \/ _ \______/ / __/ __ `/ ___/ __ `/ __ `/ _ \ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / / / /_/ / /_/ / __/ -/_/ |_/_/ .___/_/_/ /_/\___/ \____/\__,_/_/ \__,_/\__, /\___/ - /_/ /____/ diff --git a/ct/headers/alpine-gatus b/ct/headers/alpine-gatus deleted file mode 100644 index 0eb5bc4e4..000000000 --- a/ct/headers/alpine-gatus +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ __ - / | / /___ (_)___ ___ ____ _____ _/ /___ _______ - / /| | / / __ \/ / __ \/ _ \______/ __ `/ __ `/ __/ / / / ___/ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / /_/ /_/ (__ ) -/_/ |_/_/ .___/_/_/ /_/\___/ \__, /\__,_/\__/\__,_/____/ - /_/ /____/ diff --git a/ct/headers/alpine-gitea b/ct/headers/alpine-gitea deleted file mode 100644 index 085b375a2..000000000 --- a/ct/headers/alpine-gitea +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _______ __ - / | / /___ (_)___ ___ / ____(_) /____ ____ _ - / /| | / / __ \/ / __ \/ _ \______/ / __/ / __/ _ \/ __ `/ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / / /_/ __/ /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ \____/_/\__/\___/\__,_/ - /_/ diff --git a/ct/headers/alpine-grafana b/ct/headers/alpine-grafana deleted file mode 100644 index 3fe493c9d..000000000 --- a/ct/headers/alpine-grafana +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ ____ - / | / /___ (_)___ ___ / ____/________ _/ __/___ _____ ____ _ - / /| | / / __ \/ / __ \/ _ \______/ / __/ ___/ __ `/ /_/ __ `/ __ \/ __ `/ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / / / /_/ / __/ /_/ / / / / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ \____/_/ \__,_/_/ \__,_/_/ /_/\__,_/ - /_/ diff --git a/ct/headers/alpine-ironclaw b/ct/headers/alpine-ironclaw deleted file mode 100644 index f5e6dc2c3..000000000 --- a/ct/headers/alpine-ironclaw +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ ________ - / | / /___ (_)___ ___ / _/________ ____ / ____/ /___ __ __ - / /| | / / __ \/ / __ \/ _ \______ / // ___/ __ \/ __ \/ / / / __ `/ | /| / / - / ___ |/ / /_/ / / / / / __/_____// // / / /_/ / / / / /___/ / /_/ /| |/ |/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /___/_/ \____/_/ /_/\____/_/\__,_/ |__/|__/ - /_/ diff --git a/ct/headers/alpine-loki b/ct/headers/alpine-loki deleted file mode 100644 index fb352058f..000000000 --- a/ct/headers/alpine-loki +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ __ __ _ - / | / /___ (_)___ ___ / / ____ / /__(_) - / /| | / / __ \/ / __ \/ _ \______/ / / __ \/ //_/ / - / ___ |/ / /_/ / / / / / __/_____/ /___/ /_/ / ,< / / -/_/ |_/_/ .___/_/_/ /_/\___/ /_____/\____/_/|_/_/ - /_/ diff --git a/ct/headers/alpine-mariadb b/ct/headers/alpine-mariadb deleted file mode 100644 index 1279f836a..000000000 --- a/ct/headers/alpine-mariadb +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ __ ___ _ ____ ____ - / | / /___ (_)___ ___ / |/ /___ ______(_)___ _/ __ \/ __ ) - / /| | / / __ \/ / __ \/ _ \______/ /|_/ / __ `/ ___/ / __ `/ / / / __ | - / ___ |/ / /_/ / / / / / __/_____/ / / / /_/ / / / / /_/ / /_/ / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/\__,_/_/ /_/\__,_/_____/_____/ - /_/ diff --git a/ct/headers/alpine-node-red b/ct/headers/alpine-node-red deleted file mode 100644 index ef7b8a85a..000000000 --- a/ct/headers/alpine-node-red +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _ __ __ ____ __________ - / | / /___ (_)___ ___ / | / /___ ____/ /__ / __ \/ ____/ __ \ - / /| | / / __ \/ / __ \/ _ \______/ |/ / __ \/ __ / _ \______/ /_/ / __/ / / / / - / ___ |/ / /_/ / / / / / __/_____/ /| / /_/ / /_/ / __/_____/ _, _/ /___/ /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_/\____/\__,_/\___/ /_/ |_/_____/_____/ - /_/ diff --git a/ct/headers/alpine-ntfy b/ct/headers/alpine-ntfy deleted file mode 100644 index bc4164342..000000000 --- a/ct/headers/alpine-ntfy +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ __ ____ - / | / /___ (_)___ ___ ____ / /_/ __/_ __ - / /| | / / __ \/ / __ \/ _ \______/ __ \/ __/ /_/ / / / - / ___ |/ / /_/ / / / / / __/_____/ / / / /_/ __/ /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/\__/_/ \__, / - /_/ /____/ diff --git a/ct/headers/alpine-postgresql b/ct/headers/alpine-postgresql deleted file mode 100644 index 02accbda4..000000000 --- a/ct/headers/alpine-postgresql +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ __ _____ ____ __ - / | / /___ (_)___ ___ / __ \____ _____/ /_____ _________ / ___// __ \ / / - / /| | / / __ \/ / __ \/ _ \______/ /_/ / __ \/ ___/ __/ __ `/ ___/ _ \\__ \/ / / / / / - / ___ |/ / /_/ / / / / / __/_____/ ____/ /_/ (__ ) /_/ /_/ / / / __/__/ / /_/ / / /___ -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \____/____/\__/\__, /_/ \___/____/\___\_\/_____/ - /_/ /____/ diff --git a/ct/headers/alpine-prometheus b/ct/headers/alpine-prometheus deleted file mode 100644 index 5934057fb..000000000 --- a/ct/headers/alpine-prometheus +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ __ __ - / | / /___ (_)___ ___ / __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ - / /| | / / __ \/ / __ \/ _ \______/ /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/ - / ___ |/ / /_/ / / / / / __/_____/ ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ ) -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ - /_/ diff --git a/ct/headers/alpine-rclone b/ct/headers/alpine-rclone deleted file mode 100644 index 0b0e11fda..000000000 --- a/ct/headers/alpine-rclone +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ __ - / | / /___ (_)___ ___ __________/ /___ ____ ___ - / /| | / / __ \/ / __ \/ _ \______/ ___/ ___/ / __ \/ __ \/ _ \ - / ___ |/ / /_/ / / / / / __/_____/ / / /__/ / /_/ / / / / __/ -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \___/_/\____/_/ /_/\___/ - /_/ diff --git a/ct/headers/alpine-redis b/ct/headers/alpine-redis deleted file mode 100644 index d9c0cae4a..000000000 --- a/ct/headers/alpine-redis +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ ___ - / | / /___ (_)___ ___ / __ \___ ____/ (_)____ - / /| | / / __ \/ / __ \/ _ \______/ /_/ / _ \/ __ / / ___/ - / ___ |/ / /_/ / / / / / __/_____/ _, _/ __/ /_/ / (__ ) -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\___/\__,_/_/____/ - /_/ diff --git a/ct/headers/alpine-rustdeskserver b/ct/headers/alpine-rustdeskserver deleted file mode 100644 index 1c99e61fc..000000000 --- a/ct/headers/alpine-rustdeskserver +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ __ ____ __ _____ - / | / /___ (_)___ ___ / __ \__ _______/ /_/ __ \___ _____/ /__/ ___/___ ______ _____ _____ - / /| | / / __ \/ / __ \/ _ \______/ /_/ / / / / ___/ __/ / / / _ \/ ___/ //_/\__ \/ _ \/ ___/ | / / _ \/ ___/ - / ___ |/ / /_/ / / / / / __/_____/ _, _/ /_/ (__ ) /_/ /_/ / __(__ ) ,< ___/ / __/ / | |/ / __/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\__,_/____/\__/_____/\___/____/_/|_|/____/\___/_/ |___/\___/_/ - /_/ diff --git a/ct/headers/alpine-rustypaste b/ct/headers/alpine-rustypaste deleted file mode 100644 index 20bef8e32..000000000 --- a/ct/headers/alpine-rustypaste +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ __ ____ __ - / | / /___ (_)___ ___ / __ \__ _______/ /___ __/ __ \____ ______/ /____ - / /| | / / __ \/ / __ \/ _ \______/ /_/ / / / / ___/ __/ / / / /_/ / __ `/ ___/ __/ _ \ - / ___ |/ / /_/ / / / / / __/_____/ _, _/ /_/ (__ ) /_/ /_/ / ____/ /_/ (__ ) /_/ __/ -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\__,_/____/\__/\__, /_/ \__,_/____/\__/\___/ - /_/ /____/ diff --git a/ct/headers/alpine-syncthing b/ct/headers/alpine-syncthing deleted file mode 100644 index 8d684d61b..000000000 --- a/ct/headers/alpine-syncthing +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _____ __ __ _ - / | / /___ (_)___ ___ / ___/__ ______ _____/ /_/ /_ (_)___ ____ _ - / /| | / / __ \/ / __ \/ _ \______\__ \/ / / / __ \/ ___/ __/ __ \/ / __ \/ __ `/ - / ___ |/ / /_/ / / / / / __/_____/__/ / /_/ / / / / /__/ /_/ / / / / / / / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /____/\__, /_/ /_/\___/\__/_/ /_/_/_/ /_/\__, / - /_/ /____/ /____/ diff --git a/ct/headers/alpine-teamspeak-server b/ct/headers/alpine-teamspeak-server deleted file mode 100644 index cfa5aeb9f..000000000 --- a/ct/headers/alpine-teamspeak-server +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ _____ __ _____ - / | / /___ (_)___ ___ /_ __/__ ____ _____ ___ / ___/____ ___ ____ _/ /__ / ___/___ ______ _____ _____ - / /| | / / __ \/ / __ \/ _ \______/ / / _ \/ __ `/ __ `__ \\__ \/ __ \/ _ \/ __ `/ //_/_____\__ \/ _ \/ ___/ | / / _ \/ ___/ - / ___ |/ / /_/ / / / / / __/_____/ / / __/ /_/ / / / / / /__/ / /_/ / __/ /_/ / ,< /_____/__/ / __/ / | |/ / __/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \___/\__,_/_/ /_/ /_/____/ .___/\___/\__,_/_/|_| /____/\___/_/ |___/\___/_/ - /_/ /_/ diff --git a/ct/headers/alpine-tinyauth b/ct/headers/alpine-tinyauth deleted file mode 100644 index 9fff055f8..000000000 --- a/ct/headers/alpine-tinyauth +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _______ __ __ - / | / /___ (_)___ ___ /_ __(_)___ __ ______ ___ __/ /_/ /_ - / /| | / / __ \/ / __ \/ _ \______/ / / / __ \/ / / / __ `/ / / / __/ __ \ - / ___ |/ / /_/ / / / / / __/_____/ / / / / / / /_/ / /_/ / /_/ / /_/ / / / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/_/ /_/\__, /\__,_/\__,_/\__/_/ /_/ - /_/ /____/ diff --git a/ct/headers/alpine-traefik b/ct/headers/alpine-traefik deleted file mode 100644 index 0c2f2996c..000000000 --- a/ct/headers/alpine-traefik +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ _____ __ - / | / /___ (_)___ ___ /_ __/________ ____ / __(_) /__ - / /| | / / __ \/ / __ \/ _ \______/ / / ___/ __ `/ _ \/ /_/ / //_/ - / ___ |/ / /_/ / / / / / __/_____/ / / / / /_/ / __/ __/ / ,< -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \__,_/\___/_/ /_/_/|_| - /_/ diff --git a/ct/headers/alpine-transmission b/ct/headers/alpine-transmission deleted file mode 100644 index 766d185fc..000000000 --- a/ct/headers/alpine-transmission +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ _ _ - / | / /___ (_)___ ___ /_ __/________ _____ _________ ___ (_)_________(_)___ ____ - / /| | / / __ \/ / __ \/ _ \______/ / / ___/ __ `/ __ \/ ___/ __ `__ \/ / ___/ ___/ / __ \/ __ \ - / ___ |/ / /_/ / / / / / __/_____/ / / / / /_/ / / / (__ ) / / / / / (__ |__ ) / /_/ / / / / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \__,_/_/ /_/____/_/ /_/ /_/_/____/____/_/\____/_/ /_/ - /_/ diff --git a/ct/headers/alpine-valkey b/ct/headers/alpine-valkey deleted file mode 100644 index 5304e7a6d..000000000 --- a/ct/headers/alpine-valkey +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _ __ ____ - / | / /___ (_)___ ___ | | / /___ _/ / /_____ __ __ - / /| | / / __ \/ / __ \/ _ \_____| | / / __ `/ / //_/ _ \/ / / / - / ___ |/ / /_/ / / / / / __/_____/ |/ / /_/ / / ,< / __/ /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ |___/\__,_/_/_/|_|\___/\__, / - /_/ /____/ diff --git a/ct/headers/alpine-vaultwarden b/ct/headers/alpine-vaultwarden deleted file mode 100644 index 5dcd88059..000000000 --- a/ct/headers/alpine-vaultwarden +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _ __ ____ __ - / | / /___ (_)___ ___ | | / /___ ___ __/ / /__ ______ __________/ /__ ____ - / /| | / / __ \/ / __ \/ _ \_____| | / / __ `/ / / / / __/ | /| / / __ `/ ___/ __ / _ \/ __ \ - / ___ |/ / /_/ / / / / / __/_____/ |/ / /_/ / /_/ / / /_ | |/ |/ / /_/ / / / /_/ / __/ / / / -/_/ |_/_/ .___/_/_/ /_/\___/ |___/\__,_/\__,_/_/\__/ |__/|__/\__,_/_/ \__,_/\___/_/ /_/ - /_/ diff --git a/ct/headers/alpine-wireguard b/ct/headers/alpine-wireguard deleted file mode 100644 index 0d4c1bf88..000000000 --- a/ct/headers/alpine-wireguard +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _ ___ __ - / | / /___ (_)___ ___ | | / (_)_______ ____ ___ ______ __________/ / - / /| | / / __ \/ / __ \/ _ \_____| | /| / / / ___/ _ \/ __ `/ / / / __ `/ ___/ __ / - / ___ |/ / /_/ / / / / / __/_____/ |/ |/ / / / / __/ /_/ / /_/ / /_/ / / / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ |__/|__/_/_/ \___/\__, /\__,_/\__,_/_/ \__,_/ - /_/ /____/ diff --git a/ct/headers/alpine-zigbee2mqtt b/ct/headers/alpine-zigbee2mqtt deleted file mode 100644 index 1f5432120..000000000 --- a/ct/headers/alpine-zigbee2mqtt +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _____ _ __ ___ __ _______ ____________ - / | / /___ (_)___ ___ /__ / (_)___ _/ /_ ___ ___ |__ \ / |/ / __ \/_ __/_ __/ - / /| | / / __ \/ / __ \/ _ \______/ / / / __ `/ __ \/ _ \/ _ \__/ // /|_/ / / / / / / / / - / ___ |/ / /_/ / / / / / __/_____/ /__/ / /_/ / /_/ / __/ __/ __// / / / /_/ / / / / / -/_/ |_/_/ .___/_/_/ /_/\___/ /____/_/\__, /_.___/\___/\___/____/_/ /_/\___\_\/_/ /_/ - /_/ /____/ diff --git a/ct/headers/jeedom b/ct/headers/jeedom deleted file mode 100644 index 47ff4dfb6..000000000 --- a/ct/headers/jeedom +++ /dev/null @@ -1,6 +0,0 @@ - __ __ - / /__ ___ ____/ /___ ____ ___ - __ / / _ \/ _ \/ __ / __ \/ __ `__ \ -/ /_/ / __/ __/ /_/ / /_/ / / / / / / -\____/\___/\___/\__,_/\____/_/ /_/ /_/ - diff --git a/ct/headers/nocodb b/ct/headers/nocodb deleted file mode 100644 index e8398b458..000000000 --- a/ct/headers/nocodb +++ /dev/null @@ -1,6 +0,0 @@ - _ __ ____ ____ - / | / /___ _________ / __ \/ __ ) - / |/ / __ \/ ___/ __ \/ / / / __ | - / /| / /_/ / /__/ /_/ / /_/ / /_/ / -/_/ |_/\____/\___/\____/_____/_____/ - diff --git a/ct/headers/ntopng b/ct/headers/ntopng new file mode 100644 index 000000000..3559d1313 --- /dev/null +++ b/ct/headers/ntopng @@ -0,0 +1,6 @@ + __ + ____ / /_____ ____ ____ ____ _ + / __ \/ __/ __ \/ __ \/ __ \/ __ `/ + / / / / /_/ /_/ / /_/ / / / / /_/ / +/_/ /_/\__/\____/ .___/_/ /_/\__, / + /_/ /____/ diff --git a/ct/headers/securo b/ct/headers/securo new file mode 100644 index 000000000..21ee88be5 --- /dev/null +++ b/ct/headers/securo @@ -0,0 +1,6 @@ + _____ + / ___/___ _______ ___________ + \__ \/ _ \/ ___/ / / / ___/ __ \ + ___/ / __/ /__/ /_/ / / / /_/ / +/____/\___/\___/\__,_/_/ \____/ + diff --git a/ct/headers/swizzin b/ct/headers/swizzin deleted file mode 100644 index 473b027ed..000000000 --- a/ct/headers/swizzin +++ /dev/null @@ -1,6 +0,0 @@ - _____ _ _ - / ___/ __(_)_______ (_)___ - \__ \ | /| / / /_ /_ / / / __ \ - ___/ / |/ |/ / / / /_/ /_/ / / / / -/____/|__/|__/_/ /___/___/_/_/ /_/ - diff --git a/ct/ironclaw.sh b/ct/ironclaw.sh index b56f76e54..4362a2621 100644 --- a/ct/ironclaw.sh +++ b/ct/ironclaw.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="IronClaw" var_tags="${var_tags:-ai;agent;security}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-8}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-8}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-8}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if [[ ! -f /usr/local/bin/ironclaw ]]; then msg_error "No ${APP} Installation Found!" exit @@ -54,7 +63,45 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + if [[ ! -f /usr/local/bin/ironclaw ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + RELEASE="ironclaw-v0.29.1" + if check_for_gh_release "ironclaw-bin" "nearai/ironclaw" "${RELEASE}" "IronClaw 1.0 (Reborn) is a ground-up rearchitecture with an incompatible CLI/config format; pinned until this script supports it"; then + msg_info "Stopping Service" + rc-service ironclaw stop 2>/dev/null || true + msg_ok "Stopped Service" + + msg_info "Backing up Configuration" + cp /root/.ironclaw/.env /root/ironclaw.env.bak + msg_ok "Backed up Configuration" + + fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "${RELEASE}" "/usr/local/bin" \ + "ironclaw-$(uname -m)-unknown-linux-musl.tar.gz" + chmod +x /usr/local/bin/ironclaw + + msg_info "Restoring Configuration" + cp /root/ironclaw.env.bak /root/.ironclaw/.env + rm -f /root/ironclaw.env.bak + msg_ok "Restored Configuration" + + msg_info "Starting Service" + rc-service ironclaw start + msg_ok "Started Service" + msg_ok "Updated successfully!" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/keycloak.sh b/ct/keycloak.sh index be953f9e8..691af83ad 100644 --- a/ct/keycloak.sh +++ b/ct/keycloak.sh @@ -28,6 +28,14 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi + + if grep -q '^ExecStop=/opt/keycloak/bin/kc.sh stop$' /etc/systemd/system/keycloak.service 2>/dev/null; then + msg_info "Correcting Service" + sed -i '/^ExecStop=\/opt\/keycloak\/bin\/kc.sh stop$/d' /etc/systemd/system/keycloak.service + systemctl daemon-reload + msg_ok "Corrected Service" + fi + if check_for_gh_release "keycloak_app" "keycloak/keycloak"; then msg_info "Stopping Service" systemctl stop keycloak diff --git a/ct/kometa.sh b/ct/kometa.sh index 965076f8c..4cb36e25c 100644 --- a/ct/kometa.sh +++ b/ct/kometa.sh @@ -39,6 +39,7 @@ function update_script() { cp /opt/kometa/config/config.yml /opt msg_ok "Backup completed" + ensure_dependencies git PYTHON_VERSION="3.13" setup_uv fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa" "tarball" diff --git a/ct/loki.sh b/ct/loki.sh index d1c6a2570..b2373529e 100644 --- a/ct/loki.sh +++ b/ct/loki.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: hoholms # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Loki" var_tags="${var_tags:-monitoring;logs}" 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_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if ! dpkg -s loki >/dev/null 2>&1; then msg_error "No ${APP} Installation Found!" exit 233 @@ -69,7 +78,42 @@ function update_script() { exit ;; esac - exit 0 +} + +update_alpine() { + LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) + + CHOICE=$(msg_menu "Loki Update Options" \ + "1" "Check for Loki Updates" \ + "2" "Allow 0.0.0.0 for listening" \ + "3" "Allow only ${LXCIP} for listening") + + case $CHOICE in + 1) + $STD apk -U upgrade + msg_ok "Updated successfully!" + exit + ;; + 2) + sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/loki + service loki restart + msg_ok "Allowed listening on all interfaces!" + exit + ;; + 3) + sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/loki + service loki restart + msg_ok "Allowed listening only on ${LXCIP}!" + exit + ;; + esac +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/mariadb.sh b/ct/mariadb.sh index 4d425132d..30687acb2 100644 --- a/ct/mariadb.sh +++ b/ct/mariadb.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="MariaDB" var_tags="${var_tags:-database}" 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_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /etc/mysql/mariadb.conf.d ]]; then msg_error "No ${APP} Installation Found!" exit @@ -33,7 +43,28 @@ function update_script() { $STD apt update $STD apt -y upgrade msg_ok "Updated successfully!" - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating MariaDB" + $STD apk upgrade mariadb mariadb-client + msg_ok "Updated MariaDB" + + msg_info "Restarting MariaDB" + $STD rc-service mariadb restart + msg_ok "Restarted MariaDB" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/mealie.sh b/ct/mealie.sh index 1f3631ccc..6a288ad43 100644 --- a/ct/mealie.sh +++ b/ct/mealie.sh @@ -75,6 +75,7 @@ STARTEOF cd /opt/mealie/frontend $STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000 $STD yarn generate + $STD yarn cache clean msg_ok "Built Frontend" msg_info "Copying Built Frontend" diff --git a/ct/networkoptimizer.sh b/ct/networkoptimizer.sh index f52e27b00..5cefaaf09 100644 --- a/ct/networkoptimizer.sh +++ b/ct/networkoptimizer.sh @@ -51,6 +51,7 @@ function update_script() { mkdir -p /opt/networkoptimizer/publish/tools cd /opt/networkoptimizer/src/uwnspeedtest CGO_ENABLED=0 GOOS=linux GOARCH=arm64 $STD go build -trimpath -ldflags "-s -w" -o /opt/networkoptimizer/publish/tools/uwnspeedtest-linux-arm64 . + [[ "$(arch_resolve)" != "arm64" ]] && CGO_ENABLED=0 GOOS=linux GOARCH="$(arch_resolve)" $STD go build -trimpath -ldflags "-s -w" -o "/opt/networkoptimizer/publish/tools/uwnspeedtest-linux-$(arch_resolve)" . msg_ok "Rebuilt NetworkOptimizer" msg_info "Starting Service" diff --git a/ct/nocodb.sh b/ct/nocodb.sh deleted file mode 100644 index 2a5263e79..000000000 --- a/ct/nocodb.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.nocodb.com/ | Github: https://github.com/nocodb/nocodb - -APP="NocoDB" -var_tags="${var_tags:-noCode}" -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_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - #RELEASE="0.301.1" - if [[ ! -f /etc/systemd/system/nocodb.service ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - #if check_for_gh_release "nocodb" "nocodb/nocodb" "${RELEASE}"; then - if check_for_gh_release "nocodb" "nocodb/nocodb"; then - msg_info "Stopping Service" - systemctl stop nocodb - msg_ok "Stopped Service" - - fetch_and_deploy_gh_release "nocodb" "nocodb/nocodb" "singlefile" "latest" "/opt/nocodb/" "Noco-linux-$(arch_resolve "x64" "arm64")" - - msg_info "Starting Service" - systemctl start nocodb - msg_ok "Started Service" - msg_ok "Updated successfully!" - fi - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:8080/dashboard${CL}" diff --git a/ct/node-red.sh b/ct/node-red.sh index 6debbd438..317c1dd89 100644 --- a/ct/node-red.sh +++ b/ct/node-red.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Node-Red" var_tags="${var_tags:-automation}" 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_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /root/.node-red ]]; then msg_error "No ${APP} Installation Found!" exit @@ -86,6 +96,32 @@ function update_script() { fi } +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Node.js and npm" + $STD apk upgrade nodejs npm + msg_ok "Updated Node.js and npm" + + msg_info "Updating Node-RED" + $STD npm install -g --unsafe-perm node-red + msg_ok "Updated Node-RED" + + msg_info "Restarting Node-RED" + $STD rc-service nodered restart + msg_ok "Restarted Node-RED" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update +} + start build_container description diff --git a/ct/ntfy.sh b/ct/ntfy.sh index da1c46911..aa6dc0bc2 100644 --- a/ct/ntfy.sh +++ b/ct/ntfy.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: CrazyWolf13 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="ntfy" 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_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-2}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /etc/ntfy ]]; then msg_error "No ${APP} Installation Found!" exit @@ -48,7 +58,29 @@ function update_script() { $STD apt upgrade -y msg_ok "Updated ntfy" msg_ok "Updated successfully!" - exit +} + +update_alpine() { + if [[ ! -d /etc/ntfy ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_info "Updating ntfy LXC" + $STD apk -U upgrade + setcap 'cap_net_bind_service=+ep' /usr/bin/ntfy + msg_ok "Updated ntfy LXC" + + msg_info "Restarting ntfy" + rc-service ntfy restart + msg_ok "Restarted ntfy" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/jeedom.sh b/ct/ntopng.sh similarity index 55% rename from ct/jeedom.sh rename to ct/ntopng.sh index b2f3810d9..cff63efab 100644 --- a/ct/jeedom.sh +++ b/ct/ntopng.sh @@ -1,18 +1,18 @@ #!/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: Mips2648 +# Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://jeedom.com/ +# Source: https://www.ntop.org/products/traffic-analysis/ntop/ -APP="Jeedom" -var_tags="${var_tags:-automation;smarthome}" +APP="ntopng" +var_tags="${var_tags:-network;monitoring}" var_cpu="${var_cpu:-2}" var_ram="${var_ram:-2048}" -var_disk="${var_disk:-16}" +var_disk="${var_disk:-10}" var_os="${var_os:-debian}" -var_version="${var_version:-12}" -var_arm64="${var_arm64:-yes}" +var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -25,15 +25,20 @@ function update_script() { check_container_storage check_container_resources - if [[ ! -f /var/www/html/core/config/version ]]; then + if [[ ! -f /etc/ntopng/ntopng.conf ]]; then msg_error "No ${APP} Installation Found!" exit fi - msg_info "Updating OS" + msg_info "Updating ntopng" $STD apt update - $STD apt -y upgrade - msg_ok "OS updated, you can now update Jeedom from the Web UI." + $STD apt install -y ntopng + msg_ok "Updated ntopng" + + msg_info "Restarting Service" + systemctl restart ntopng + msg_ok "Restarted Service" + msg_ok "Updated successfully!" exit } @@ -41,7 +46,8 @@ start build_container description -msg_ok "Completed successfully!\n" +msg_ok "Completed Successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}${CL}" +echo -e "${GATEWAY}${BGN}http://${IP}:3000${CL}" +echo -e "${INFO}${YW}Default login: admin / admin${CL}" diff --git a/ct/odoo.sh b/ct/odoo.sh index 05f0258be..f7e9e89d2 100644 --- a/ct/odoo.sh +++ b/ct/odoo.sh @@ -36,6 +36,13 @@ function update_script() { rm -f /opt/python3-lxml-html-clean.deb fi + if dpkg -s wkhtmltopdf &>/dev/null; then + systemctl stop odoo + $STD apt remove --purge -y wkhtmltopdf + fetch_and_deploy_gh_release "wkhtmltopdf" "wkhtmltopdf/packaging" "binary" "latest" "" "wkhtmltox_*.bookworm_$(arch_resolve).deb" + systemctl start odoo + fi + RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1) LATEST_VERSION=$(curl -fsSL "https://nightly.odoo.com/${RELEASE}/nightly/deb/" | grep -oP "odoo_${RELEASE}\.\d+_all\.deb" | diff --git a/ct/ownfoil.sh b/ct/ownfoil.sh index 8a1750bfb..ec0182898 100644 --- a/ct/ownfoil.sh +++ b/ct/ownfoil.sh @@ -29,15 +29,15 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - - if check_for_gh_release "ownfoil" "a1ex4/ownfoil"; then + RELEASE="2.3.0" + if check_for_gh_release "ownfoil" "a1ex4/ownfoil" "${RELEASE}" "pinned until 2.4.0 (coming soon) is tested, possible Breaking Changes."; then msg_info "Stopping Service" systemctl stop ownfoil msg_ok "Stopped Service" create_backup /opt/ownfoil/app/config - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball" "${RELEASE}" restore_backup diff --git a/ct/patchmon.sh b/ct/patchmon.sh index cebc1b017..f0401d83a 100644 --- a/ct/patchmon.sh +++ b/ct/patchmon.sh @@ -76,7 +76,15 @@ EOF CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "singlefile" "latest" "/opt/patchmon" "patchmon-server-linux-$(arch_resolve)" mv /opt/patchmon/PatchMon /opt/patchmon/patchmon-server - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ssg-content" "ComplianceAsCode/content" "prebuild" "latest" "/opt/patchmon/ssg-content" "scap-security-guide-*.tar.gz" + + msg_info "Updating SCAP Content" + RELEASE=$(get_latest_github_release "ComplianceAsCode/content") + curl_with_retry "https://github.com/ComplianceAsCode/content/releases/download/v${RELEASE}/scap-security-guide-${RELEASE}.tar.gz" "/tmp/ssg.tar.gz" + mkdir -p /opt/patchmon/ssg-content + find /opt/patchmon/ssg-content -mindepth 1 -delete + tar -xzf /tmp/ssg.tar.gz -C /opt/patchmon/ssg-content --strip-components=1 --wildcards '*/ssg-*-ds.xml' + rm -f /tmp/ssg.tar.gz + msg_ok "Updated SCAP Content" restore_backup diff --git a/ct/postgresql.sh b/ct/postgresql.sh index f84563ab6..91fb6a542 100644 --- a/ct/postgresql.sh +++ b/ct/postgresql.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,31 +10,60 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="PostgreSQL" var_tags="${var_tags:-database}" 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_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors +update_deb_based() { + if ! command -v psql >/dev/null 2>&1; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_info "Updating ${APP} LXC" + $STD apt update + $STD apt -y upgrade + msg_ok "Updated successfully!" +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating PostgreSQL" + $STD apk upgrade postgresql postgresql-contrib + msg_ok "Updated PostgreSQL" + + msg_info "Restarting PostgreSQL" + $STD rc-service postgresql restart + msg_ok "Restarted PostgreSQL" + msg_ok "Updated successfully!" +} + function update_script() { - header_info - check_container_storage - check_container_resources - if ! command -v psql >/dev/null 2>&1; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating ${APP} LXC" - $STD apt update - $STD apt -y upgrade - msg_ok "Updated successfully!" - exit + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/prometheus.sh b/ct/prometheus.sh index d6507ba29..9692bf5a9 100644 --- a/ct/prometheus.sh +++ b/ct/prometheus.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Prometheus" var_tags="${var_tags:-monitoring}" 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_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /etc/systemd/system/prometheus.service ]]; then msg_error "No ${APP} Installation Found!" exit @@ -42,7 +52,28 @@ function update_script() { msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Prometheus" + $STD apk upgrade prometheus + msg_ok "Updated Prometheus" + + msg_info "Restarting Prometheus" + $STD rc-service prometheus restart + msg_ok "Restarted Prometheus" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/rclone.sh b/ct/rclone.sh index 6c791d258..5e468725f 100644 --- a/ct/rclone.sh +++ b/ct/rclone.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: SlaviΕ‘a AreΕΎina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Rclone" var_tags="${var_tags:-os}" 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_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" -var_fuse="${var_fuse:-yes}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/rclone ]]; then msg_error "No ${APP} Installation Found!" exit @@ -41,7 +50,32 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + if [ ! -d /opt/rclone ]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [ "${RELEASE}" != "$(cat /opt/rclone_version.txt)" ] || [ ! -f /opt/rclone_version.txt ]; then + msg_info "Updating ${APP} LXC" + temp_file=$(mktemp) + curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-$(arch_resolve).zip" -o "$temp_file" + $STD unzip -o "$temp_file" '*/**' -d /opt/rclone + rm -f "$temp_file" + echo "${RELEASE}" >/opt/rclone_version.txt + msg_ok "Updated successfully!" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/redis.sh b/ct/redis.sh index e1c8e509c..c15b17780 100644 --- a/ct/redis.sh +++ b/ct/redis.sh @@ -1,40 +1,90 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) +# Author: tteck (tteckster) | MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://redis.io/ APP="Redis" var_tags="${var_tags:-database}" 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_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine 3.24 (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /lib/systemd/system/redis-server.service ]]; then msg_error "No ${APP} Installation Found!" - exit + exit 1 fi msg_info "Updating $APP LXC" $STD apt update $STD apt upgrade -y msg_ok "Updated $APP LXC" - msg_ok "Updated successfully!" - exit +} + +update_alpine() { + if [[ ! -f /etc/init.d/redis ]]; then + msg_error "No ${APP} Installation Found!" + exit 1 + fi + + LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) + CHOICE=$(msg_menu "Redis Management" \ + "1" "Update Redis" \ + "2" "Allow 0.0.0.0 for listening" \ + "3" "Allow only ${LXCIP} for listening") + + case "$CHOICE" in + 1) + msg_info "Updating Redis" + $STD apk update + $STD apk upgrade redis + rc-service redis restart + msg_ok "Updated Redis" + ;; + 2) + msg_info "Setting Redis to listen on all interfaces" + sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf + rc-service redis restart + msg_ok "Redis now listens on all interfaces" + ;; + 3) + msg_info "Setting Redis to listen only on ${LXCIP}" + sed -i "s/^bind .*/bind ${LXCIP}/" /etc/redis.conf + rc-service redis restart + msg_ok "Redis now listens only on ${LXCIP}" + ;; + esac +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/romm.sh b/ct/romm.sh index e6cf836ae..65e66d312 100644 --- a/ct/romm.sh +++ b/ct/romm.sh @@ -81,7 +81,113 @@ function update_script() { ln -sfn "$ROMM_BASE"/resources /opt/romm/frontend/dist/assets/romm/resources ln -sfn "$ROMM_BASE"/assets /opt/romm/frontend/dist/assets/romm/assets if [[ -f /etc/angie/http.d/romm.conf ]]; then - sed -i "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" /etc/angie/http.d/romm.conf + if ! grep -q "js_content decode.decodeBase64" /etc/angie/http.d/romm.conf; then + msg_info "Adding missing /decode and /cache locations to Angie config" + dpkg -l angie-module-njs &>/dev/null || $STD apt-get install -y angie-module-njs + grep -q "ngx_http_js_module.so" /etc/angie/angie.conf || sed -i '1i load_module modules/ngx_http_js_module.so;' /etc/angie/angie.conf + mkdir -p /etc/angie/js "${ROMM_BASE}/cache" + cat <<'JSEOF' >/etc/angie/js/decode.js +// Decode a Base64 encoded string received as a query parameter named 'value', +// and return the decoded value in the response body. +function decodeBase64(r) { + var encodedValue = r.args.value; + + if (!encodedValue) { + r.return(400, "Missing 'value' query parameter"); + return; + } + + try { + // Use Buffer to return raw bytes β€” atob() returns a JS string which r.return() + // would re-encode as UTF-8, corrupting any non-ASCII bytes (e.g. in filenames + // like "PokΓ©mon") and causing CRC mismatches in the mod_zip manifest. + r.return(200, Buffer.from(encodedValue, 'base64')); + } catch (e) { + r.return(400, "Invalid Base64 encoding"); + } +} + +export default { decodeBase64 }; +JSEOF + cat </etc/angie/http.d/romm.conf +js_import /etc/angie/js/decode.js; + +upstream romm_backend { + server 127.0.0.1:5000; +} + +map \$http_upgrade \$connection_upgrade { + default upgrade; + '' close; +} + +server { + listen 80; + server_name _; + root /opt/romm/frontend/dist; + client_max_body_size 0; + + location / { + try_files \$uri \$uri/ /index.html; + } + + location /assets { + alias /opt/romm/frontend/dist/assets; + try_files \$uri \$uri/ =404; + expires 1y; + add_header Cache-Control "public, immutable"; + } + + location ~ ^/rom/.*/ejs\$ { + add_header Cross-Origin-Embedder-Policy "require-corp"; + add_header Cross-Origin-Opener-Policy "same-origin"; + try_files \$uri /index.html; + } + + location /api { + proxy_pass http://romm_backend; + proxy_buffering off; + proxy_request_buffering off; + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$scheme; + } + + location ~ ^/(ws|netplay) { + proxy_pass http://romm_backend; + proxy_http_version 1.1; + proxy_set_header Upgrade \$http_upgrade; + proxy_set_header Connection \$connection_upgrade; + proxy_set_header Host \$host; + proxy_read_timeout 86400; + } + + location = /openapi.json { + proxy_pass http://romm_backend; + } + + location /library/ { + internal; + alias ${ROMM_BASE}/library/; + } + + location /cache/ { + internal; + alias ${ROMM_BASE}/cache/; + } + + location /decode { + internal; + js_content decode.decodeBase64; + } +} +EOF + msg_ok "Added /decode and /cache locations" + else + sed -i -e "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" \ + -e "s|alias .*/cache/;|alias ${ROMM_BASE}/cache/;|" /etc/angie/http.d/romm.conf + fi systemctl reload angie elif [[ -f /etc/nginx/sites-available/romm ]]; then sed -i "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" /etc/nginx/sites-available/romm diff --git a/ct/rustdeskserver.sh b/ct/rustdeskserver.sh index 8831bda20..27b0a6cf2 100644 --- a/ct/rustdeskserver.sh +++ b/ct/rustdeskserver.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: SlaviΕ‘a AreΕΎina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="RustDesk Server" var_tags="${var_tags:-remote-desktop}" 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_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-512}" + var_disk="${var_disk:-3}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if [[ ! -x /usr/bin/hbbr ]]; then msg_error "No ${APP} Installation Found!" exit @@ -50,7 +59,58 @@ function update_script() { msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + if [[ ! -d /opt/rustdesk-server ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + if [ "${RELEASE}" != "$(cat ~/.rustdesk-server 2>/dev/null)" ] || [ ! -f ~/.rustdesk-server ]; then + msg_info "Updating RustDesk Server to v${RELEASE}" + $STD apk -U upgrade + $STD service rustdesk-server-hbbs stop + $STD service rustdesk-server-hbbr stop + temp_file1=$(mktemp) + ARCH=$(arch_resolve "amd64" "arm64v8") + curl -fsSL "https://github.com/lejianwen/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-${ARCH}.zip" -o "$temp_file1" + $STD unzip "$temp_file1" + cp -r "$ARCH"/* /opt/rustdesk-server/ + echo "${RELEASE}" >~/.rustdesk-server + $STD service rustdesk-server-hbbs start + $STD service rustdesk-server-hbbr start + rm -rf "$ARCH" + rm -f "$temp_file1" + msg_ok "Updated RustDesk Server" + else + msg_ok "No update required. ${APP} is already at v${RELEASE}" + fi + if [ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ] || [ ! -f ~/.rustdesk-api ]; then + msg_info "Updating RustDesk API to v${APIRELEASE}" + $STD service rustdesk-api stop + temp_file2=$(mktemp) + curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-$(arch_resolve).tar.gz" -o "$temp_file2" + $STD tar zxvf "$temp_file2" + cp -r release/* /opt/rustdesk-api + echo "${APIRELEASE}" >~/.rustdesk-api + $STD service rustdesk-api start + rm -rf release + rm -f "$temp_file2" + msg_ok "Updated RustDesk API" + else + msg_ok "No update required. RustDesk API is already at v${APIRELEASE}" + fi + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/rustypaste.sh b/ct/rustypaste.sh index 33b705fd4..a1215436c 100644 --- a/ct/rustypaste.sh +++ b/ct/rustypaste.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: GoldenSpringness # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m APP="rustypaste" var_tags="${var_tags:-pastebin;storage}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-20}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-4}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-20}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if [[ ! -f /opt/rustypaste/rustypaste ]]; then msg_error "No ${APP} Installation Found!" exit @@ -50,7 +59,30 @@ function update_script() { if check_for_gh_release "rustypaste-cli" "orhun/rustypaste-cli"; then fetch_and_deploy_gh_release "rustypaste-cli" "orhun/rustypaste-cli" "prebuild" "latest" "/usr/local/bin" "*x86_64-unknown-linux-gnu.tar.gz" fi - exit +} + +update_alpine() { + if ! apk info -e rustypaste >/dev/null 2>&1; then + msg_error "No ${APP} Installation Found!" + exit + fi + + msg_info "Updating RustyPaste" + $STD apk update + $STD apk upgrade rustypaste --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community + msg_ok "Updated RustyPaste" + + msg_info "Restarting Services" + $STD rc-service rustypaste restart + msg_ok "Restarted Services" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/securo.sh b/ct/securo.sh new file mode 100644 index 000000000..ef635fad9 --- /dev/null +++ b/ct/securo.sh @@ -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: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/securo-finance/securo + +APP="Securo" +var_tags="${var_tags:-finance;self-hosted}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-4096}" +var_disk="${var_disk:-12}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +#var_arm64="${var_arm64:-no}" # unset = ask the user; set yes/no only when verified +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/securo ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "securo" "securo-finance/securo"; then + msg_info "Stopping Services" + systemctl stop securo securo-worker securo-beat + msg_ok "Stopped Services" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "securo" "securo-finance/securo" "tarball" + + msg_info "Updating Backend" + cd /opt/securo/backend + ln -sf /opt/securo_data/.env /opt/securo/backend/.env + $STD uv venv --python 3.12 /opt/securo/backend/.venv + $STD uv pip install --python /opt/securo/backend/.venv -e . + set -a + source /opt/securo_data/.env + set +a + $STD /opt/securo/backend/.venv/bin/alembic upgrade head + msg_ok "Updated Backend" + + msg_info "Rebuilding Frontend" + cd /opt/securo/frontend + export NODE_OPTIONS="--max-old-space-size=4096" + $STD npm install + $STD npm run build + msg_ok "Rebuilt Frontend" + + msg_info "Starting Services" + systemctl start securo securo-worker securo-beat + systemctl reload nginx + msg_ok "Started Services" + msg_ok "Updated successfully!" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW}Access it using the following URL:${CL}" +echo -e "${GATEWAY}${BGN}https://${IP}${CL}" diff --git a/ct/shelfmark.sh b/ct/shelfmark.sh index e0ecbf45d..0461e8460 100644 --- a/ct/shelfmark.sh +++ b/ct/shelfmark.sh @@ -36,9 +36,18 @@ function update_script() { if check_for_gh_release "shelfmark" "calibrain/shelfmark"; then msg_info "Stopping Service(s)" systemctl stop shelfmark - [[ -f /etc/systemd/system/chromium.service ]] && systemctl stop chromium msg_ok "Stopped Service(s)" + if [[ $(sed -n '/_BYPASS=/s/[^=]*=//p' /etc/shelfmark/.env) == "true" ]] && + [[ $(sed -n '/BYPASSER=/s/[^=]*=//p' /etc/shelfmark/.env) == "false" ]]; then + msg_info "Updating internal bypasser configuration" + systemctl disable -q --now chromium 2>/dev/null || true + rm -f /etc/systemd/system/chromium.service + systemctl daemon-reload + sed -i '/DOCKERMODE=/s/false/true/' /etc/shelfmark/.env + msg_ok "Updated internal bypasser configuration" + fi + [[ -f /etc/systemd/system/flaresolverr.service ]] && if check_for_gh_release "flaresolverr" "Flaresolverr/Flaresolverr"; then msg_info "Stopping FlareSolverr service" systemctl stop flaresolverr @@ -79,7 +88,6 @@ function update_script() { msg_info "Starting Service(s)" systemctl start shelfmark - [[ -f /etc/systemd/system/chromium.service ]] && systemctl start chromium msg_ok "Started Service(s)" msg_ok "Updated successfully!" fi diff --git a/ct/swizzin.sh b/ct/swizzin.sh deleted file mode 100644 index 659b525ad..000000000 --- a/ct/swizzin.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/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: EEJoshua -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://swizzin.ltd/ - -APP="Swizzin" -var_tags="${var_tags:-seedbox}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-4096}" -var_disk="${var_disk:-20}" -var_os="${var_os:-debian}" -var_version="${var_version:-12}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if ! command -v sudo box >/dev/null 2>&1; then - msg_error "No ${APP} installation found!" - exit - fi - msg_info "Running 'sudo box update' inside the container" - $STD sudo box update - msg_ok "Updated successfully!" - 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}If installed panel, access through the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/syncthing.sh b/ct/syncthing.sh index d786a1bf7..d47850341 100644 --- a/ct/syncthing.sh +++ b/ct/syncthing.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Syncthing" var_tags="${var_tags:-sync}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-8}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-8}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /etc/apt/sources.list.d/syncthing.list && ! -f /etc/apt/sources.list.d/syncthing.sources ]]; then msg_error "No ${APP} Installation Found!" exit @@ -33,7 +43,28 @@ function update_script() { $STD apt update $STD apt upgrade -y msg_ok "Updated successfully!" - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Syncthing" + $STD apk upgrade syncthing + msg_ok "Updated Syncthing" + + msg_info "Restarting Syncthing" + $STD rc-service syncthing restart + msg_ok "Restarted Syncthing" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/teamspeak-server.sh b/ct/teamspeak-server.sh index f85706708..0476fa98b 100644 --- a/ct/teamspeak-server.sh +++ b/ct/teamspeak-server.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: tremor021 (SlaviΕ‘a AreΕΎina) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Teamspeak-Server" var_tags="${var_tags:-voice;communication}" 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_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-2}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/teamspeak-server ]]; then msg_error "No ${APP} Installation Found!" exit @@ -50,7 +60,38 @@ function update_script() { else msg_ok "Already up to date" fi - exit +} + +update_alpine() { + if [[ ! -d /opt/teamspeak-server ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | awk 'NR==1') + + if [ "${RELEASE}" != "$(cat ~/.teamspeak-server)" ] || [ ! -f ~/.teamspeak-server ]; then + msg_info "Updating ${APP} LXC" + $STD apk -U upgrade + $STD service teamspeak stop + curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2 + tar -xf ./ts3server.tar.bz2 + cp -ru teamspeak3-server_linux_amd64/* /opt/teamspeak-server/ + rm -f ~/ts3server.tar.bz* + rm -rf teamspeak3-server_linux_amd64 + echo "${RELEASE}" >~/.teamspeak-server + $STD service teamspeak start + msg_ok "Updated successfully!" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/teslamate.sh b/ct/teslamate.sh index 57da73241..443086726 100644 --- a/ct/teslamate.sh +++ b/ct/teslamate.sh @@ -35,6 +35,16 @@ function update_script() { systemctl stop teslamate msg_ok "Stopped Service" + if [[ ! -d /opt/elixir ]]; then + msg_info "Migrating to newer Elixir (required by TeslaMate)" + $STD apt remove -y elixir + fetch_and_deploy_gh_release "elixir" "elixir-lang/elixir" "prebuild" "latest" "/opt/elixir" "elixir-otp-27.zip" + for bin in elixir elixirc iex mix; do + ln -sf "/opt/elixir/bin/$bin" "/usr/local/bin/$bin" + done + msg_ok "Migrated to newer Elixir" + fi + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "teslamate" "teslamate-org/teslamate" "tarball" msg_info "Building TeslaMate (Patience)" diff --git a/ct/tinyauth.sh b/ct/tinyauth.sh index 4209e974a..d31d11040 100644 --- a/ct/tinyauth.sh +++ b/ct/tinyauth.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Tinyauth" var_tags="${var_tags:-auth}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-2}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/tinyauth ]]; then msg_error "No ${APP} Installation Found!" exit @@ -41,7 +51,59 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + if [[ ! -d /opt/tinyauth ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + msg_info "Updating packages" + $STD apk -U upgrade + msg_ok "Updated packages" + + RELEASE=$(curl -s https://api.github.com/repos/tinyauthapp/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [ "${RELEASE}" != "$(cat ~/.tinyauth 2>/dev/null)" ] || [ ! -f ~/.tinyauth ]; then + msg_info "Stopping Service" + $STD service tinyauth stop + msg_ok "Service Stopped" + + if [[ -f /opt/tinyauth/.env ]] && ! grep -q "^TINYAUTH_" /opt/tinyauth/.env; then + msg_info "Migrating .env to v5 format" + sed -i \ + -e 's/^DATABASE_PATH=/TINYAUTH_DATABASE_PATH=/' \ + -e 's/^USERS=/TINYAUTH_AUTH_USERS=/' \ + -e "s/^USERS='/TINYAUTH_AUTH_USERS='/" \ + -e 's/^APP_URL=/TINYAUTH_APPURL=/' \ + -e 's/^SECRET=/TINYAUTH_AUTH_SECRET=/' \ + -e 's/^PORT=/TINYAUTH_SERVER_PORT=/' \ + -e 's/^ADDRESS=/TINYAUTH_SERVER_ADDRESS=/' \ + /opt/tinyauth/.env + msg_ok "Migrated .env to v5 format" + fi + + msg_info "Updating Tinyauth" + rm -f /opt/tinyauth/tinyauth + curl -fsSL "https://github.com/tinyauthapp/tinyauth/releases/download/v${RELEASE}/tinyauth-$(arch_resolve)" -o /opt/tinyauth/tinyauth + chmod +x /opt/tinyauth/tinyauth + echo "${RELEASE}" >~/.tinyauth + msg_ok "Updated Tinyauth" + + msg_info "Restarting Tinyauth" + $STD service tinyauth start + msg_ok "Restarted Tinyauth" + msg_ok "Updated successfully!" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/tracktor.sh b/ct/tracktor.sh index 5c8b3991b..25a8b5950 100644 --- a/ct/tracktor.sh +++ b/ct/tracktor.sh @@ -41,7 +41,6 @@ function update_script() { if ! grep -qxF 'BODY_SIZE_LIMIT=Infinity' /opt/tracktor.env; then rm /opt/tracktor.env cat </opt/tracktor.env -cat </opt/tracktor.env NODE_ENV=production # Set this to the path of the database file. Default - ./tracktor.db DB_PATH=/opt/tracktor-data/tracktor.db @@ -67,13 +66,13 @@ EOF fi msg_ok "Corrected Services" - NODE_VERSION="24" setup_nodejs + NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor" msg_info "Updating tracktor" cd /opt/tracktor - $STD npm install - $STD npm run build + $STD pnpm install --frozen-lockfile + $STD pnpm run build msg_ok "Updated tracktor" msg_info "Starting Service" diff --git a/ct/traefik.sh b/ct/traefik.sh index 523f648ef..b135c8a60 100644 --- a/ct/traefik.sh +++ b/ct/traefik.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Traefik" var_tags="${var_tags:-proxy}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-512}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /etc/systemd/system/traefik.service ]]; then msg_error "No ${APP} Installation Found!" exit @@ -41,7 +51,24 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating traefik from edge" + $STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community + msg_ok "Updated traefik" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/transmission.sh b/ct/transmission.sh index 0257ce7ec..ee86f8194 100644 --- a/ct/transmission.sh +++ b/ct/transmission.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Transmission" var_tags="${var_tags:-torrent}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-8}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-8}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /etc/transmission-daemon/settings.json ]]; then msg_error "No ${APP} Installation Found!" exit @@ -33,7 +43,28 @@ function update_script() { $STD apt -y upgrade msg_ok "Updated Transmission" msg_ok "Updated successfully!" - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Transmission" + $STD apk upgrade transmission-daemon + msg_ok "Updated Transmission" + + msg_info "Restarting Transmission" + $STD rc-service transmission-daemon restart + msg_ok "Restarted Transmission" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/tubearchivist.sh b/ct/tubearchivist.sh index e833c6abc..49aed766a 100644 --- a/ct/tubearchivist.sh +++ b/ct/tubearchivist.sh @@ -60,7 +60,10 @@ EOF systemctl stop bgutil-provider tubearchivist tubearchivist-celery tubearchivist-beat msg_ok "Stopped Services" - create_backup /opt/tubearchivist/.env + create_backup \ + /opt/tubearchivist/.env \ + /opt/tubearchivist/cache \ + /opt/tubearchivist/backend/run.sh CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tubearchivist" "tubearchivist/tubearchivist" "tarball" @@ -73,6 +76,8 @@ EOF mkdir -p /opt/tubearchivist/backend/static cp -r /opt/tubearchivist/frontend/dist/* /opt/tubearchivist/backend/static/ cp /opt/tubearchivist/docker_assets/backend_start.py /opt/tubearchivist/backend/ + rm -rf /opt/tubearchivist/.venv + $STD uv venv /opt/tubearchivist/.venv --python 3.13 $STD uv pip install --python /opt/tubearchivist/.venv/bin/python -r /opt/tubearchivist/backend/requirements.txt if [[ -f /opt/tubearchivist/backend/requirements.plugins.txt ]]; then mkdir -p /opt/yt_plugins/bgutil @@ -93,8 +98,14 @@ EOF sed -i 's|^TA_APP_DIR=/opt/tubearchivist$|TA_APP_DIR=/opt/tubearchivist/backend|' /opt/tubearchivist/.env sed -i 's|^TA_CACHE_DIR=/opt/tubearchivist/cache$|TA_CACHE_DIR=/cache|' /opt/tubearchivist/.env sed -i 's|^TA_MEDIA_DIR=/opt/tubearchivist/media$|TA_MEDIA_DIR=/youtube|' /opt/tubearchivist/.env - ln -sf /opt/tubearchivist/cache /cache - ln -sf /opt/tubearchivist/media /youtube + ln -sfn /opt/tubearchivist/cache /cache + # /youtube may already be a user-managed Proxmox bind mount. Only create the symlink if nothing is there + if [[ ! -e /youtube ]]; then + mkdir -p /opt/tubearchivist/media + ln -sfn /opt/tubearchivist/media /youtube + elif ! mountpoint -q /youtube && [[ ! -L /youtube ]]; then + msg_error "/youtube exists but is neither a mount nor a symlink - check manually" + fi ln -sf /opt/tubearchivist/.env /opt/tubearchivist/backend/.env msg_ok "Restored Configuration" diff --git a/ct/valkey.sh b/ct/valkey.sh index 7d5e2694f..73645a22d 100644 --- a/ct/valkey.sh +++ b/ct/valkey.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: pshankinclarke (lazarillo) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,32 +10,80 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Valkey" var_tags="${var_tags:-database}" 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_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -f /lib/systemd/system/valkey-server.service ]]; then - msg_error "No Valkey Installation Found!" - exit - fi - msg_info "Updating Valkey LXC" - $STD apt update - $STD apt -y upgrade - msg_ok "Updated Valkey LXC" +update_deb_based() { + if [[ ! -f /lib/systemd/system/valkey-server.service ]]; then + msg_error "No Valkey Installation Found!" + exit + fi + msg_info "Updating Valkey LXC" + $STD apt update + $STD apt -y upgrade + msg_ok "Updated Valkey LXC" + msg_ok "Updated successfully!" +} + +update_alpine() { + LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) + + CHOICE=$(msg_menu "Valkey Management" \ + "1" "Update Valkey" \ + "2" "Allow 0.0.0.0 for listening" \ + "3" "Allow only ${LXCIP} for listening") + + case $CHOICE in + 1) + msg_info "Updating Valkey" + apk update && apk upgrade valkey + rc-service valkey restart + msg_ok "Updated Valkey" msg_ok "Updated successfully!" exit + ;; + 2) + msg_info "Setting Valkey to listen on all interfaces" + sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf + rc-service valkey restart + msg_ok "Valkey now listens on all interfaces!" + exit + ;; + 3) + msg_info "Setting Valkey to listen only on ${LXCIP}" + sed -i "s/^bind .*/bind ${LXCIP}/" /etc/valkey/valkey.conf + rc-service valkey restart + msg_ok "Valkey now listens only on ${LXCIP}!" + exit + ;; + esac +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/vaultwarden.sh b/ct/vaultwarden.sh index 8d7a01345..5ac6f3855 100644 --- a/ct/vaultwarden.sh +++ b/ct/vaultwarden.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Vaultwarden" var_tags="${var_tags:-password-manager}" var_cpu="${var_cpu:-4}" -var_ram="${var_ram:-6144}" -var_disk="${var_disk:-20}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-6144}" + var_disk="${var_disk:-20}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /etc/systemd/system/vaultwarden.service ]]; then msg_error "No ${APP} Installation Found!" exit @@ -115,6 +125,48 @@ function update_script() { fi } +update_alpine() { + CHOICE=$(msg_menu "Vaultwarden Update Options" \ + "1" "Update Vaultwarden" \ + "2" "Reset ADMIN_TOKEN") + + case $CHOICE in + 1) + $STD apk -U upgrade + rc-service vaultwarden restart -q + msg_ok "Updated successfully!" + exit + ;; + 2) + if [[ "${PHS_SILENT:-0}" == "1" ]]; then + msg_warn "Reset ADMIN_TOKEN requires interactive mode, skipping." + exit + fi + read -r -s -p "Setup your ADMIN_TOKEN (make it strong): " NEWTOKEN + echo "" + if [[ -n "$NEWTOKEN" ]]; then + if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi + TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1) + if [[ ! -f /var/lib/vaultwarden/config.json ]]; then + sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden + else + sed -i "s|\"admin_token\": .*|\"admin_token\": \"${TOKEN}\",|" /var/lib/vaultwarden/config.json + fi + rc-service vaultwarden restart -q + msg_ok "Admin token updated" + fi + exit + ;; + esac +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update +} + start build_container description diff --git a/ct/wallos.sh b/ct/wallos.sh index b1b193ea3..4ecd57ce8 100644 --- a/ct/wallos.sh +++ b/ct/wallos.sh @@ -48,12 +48,15 @@ function update_script() { chown -R www-data:www-data /opt/wallos chmod -R 755 /opt/wallos mkdir -p /var/log/cron - $STD curl http://localhost/endpoints/db/migrate.php msg_ok "Configured Wallos" msg_info "Reload Apache2" systemctl reload apache2 msg_ok "Apache2 Reloaded" + + msg_info "Running Database Migration" + $STD curl http://localhost/endpoints/db/migrate.php + msg_ok "Ran Database Migration" msg_ok "Updated successfully!" fi exit diff --git a/ct/wireguard.sh b/ct/wireguard.sh index 864c79222..87d73055f 100644 --- a/ct/wireguard.sh +++ b/ct/wireguard.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,28 +10,35 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Wireguard" var_tags="${var_tags:-network;vpn}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" -var_tun="${var_tun:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /etc/wireguard ]]; then msg_error "No ${APP} Installation Found!" exit fi - + ensure_dependencies git msg_info "Updating LXC" @@ -43,7 +52,32 @@ function update_script() { fi msg_ok "Updated LXC" msg_ok "Updated successfully!" - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "update wireguard-tools" + $STD apk add --no-cache --upgrade wireguard-tools + msg_ok "wireguard-tools updated" + + if [[ -d /etc/wgdashboard/src ]]; then + msg_info "update WGDashboard" + cd /etc/wgdashboard/src + echo "y" | ./wgd.sh update >/dev/null 2>&1 + $STD ./wgd.sh start + msg_ok "WGDashboard updated" + fi + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/zigbee2mqtt.sh b/ct/zigbee2mqtt.sh index 714090477..0d3cba5b9 100644 --- a/ct/zigbee2mqtt.sh +++ b/ct/zigbee2mqtt.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Zigbee2MQTT" var_tags="${var_tags:-smarthome;zigbee;mqtt}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-5}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-0}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-5}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/zigbee2mqtt ]]; then msg_error "No ${APP} Installation Found!" exit @@ -62,7 +72,18 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + $STD apk -U upgrade + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/install/adguard-install.sh b/install/adguard-install.sh index 37c80e318..5880d9b31 100644 --- a/install/adguard-install.sh +++ b/install/adguard-install.sh @@ -13,10 +13,11 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "AdGuardHome" "AdguardTeam/AdGuardHome" "prebuild" "latest" "/opt/AdGuardHome" "AdGuardHome_linux_$(arch_resolve).tar.gz" +setup_deb_based() { + fetch_and_deploy_gh_release "AdGuardHome" "AdguardTeam/AdGuardHome" "prebuild" "latest" "/opt/AdGuardHome" "AdGuardHome_linux_$(arch_resolve).tar.gz" -msg_info "Creating Service" -cat </etc/systemd/system/AdGuardHome.service + msg_info "Creating Service" + cat </etc/systemd/system/AdGuardHome.service [Unit] Description=AdGuard Home: Network-level blocker ConditionFileIsExecutable=/opt/AdGuardHome/AdGuardHome @@ -36,8 +37,43 @@ EnvironmentFile=-/etc/sysconfig/AdGuardHome [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now AdGuardHome -msg_ok "Created Service" + systemctl enable -q --now AdGuardHome + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Downloading AdGuard Home" + $STD curl -fsSL -o /tmp/AdGuardHome_linux_$(arch_resolve).tar.gz \ + "https://github.com/AdguardTeam/AdGuardHome/releases/latest/download/AdGuardHome_linux_$(arch_resolve).tar.gz" + msg_ok "Downloaded AdGuard Home" + + msg_info "Installing AdGuard Home" + $STD tar -xzf /tmp/AdGuardHome_linux_$(arch_resolve).tar.gz -C /opt + $STD rm /tmp/AdGuardHome_linux_$(arch_resolve).tar.gz + msg_ok "Installed AdGuard Home" + + msg_info "Creating AdGuard Home Service" + cat </etc/init.d/adguardhome +#!/sbin/openrc-run +name="AdGuardHome" +description="AdGuard Home Service" +command="/opt/AdGuardHome/AdGuardHome" +command_background="yes" +pidfile="/run/adguardhome.pid" +EOF + $STD chmod +x /etc/init.d/adguardhome + msg_ok "Created AdGuard Home Service" + + msg_info "Enabling AdGuard Home Service" + $STD rc-update add adguardhome default + msg_ok "Enabled AdGuard Home Service" + + msg_info "Starting AdGuard Home" + $STD rc-service adguardhome start + msg_ok "Started AdGuard Home" +} + +run_os_setup motd_ssh customize diff --git a/install/alpine-adguard-install.sh b/install/alpine-adguard-install.sh deleted file mode 100644 index d1446bfcb..000000000 --- a/install/alpine-adguard-install.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/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://adguardhome.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Downloading AdGuard Home" -$STD curl -fsSL -o /tmp/AdGuardHome_linux_$(arch_resolve).tar.gz \ -"https://github.com/AdguardTeam/AdGuardHome/releases/latest/download/AdGuardHome_linux_$(arch_resolve).tar.gz" -msg_ok "Downloaded AdGuard Home" - -msg_info "Installing AdGuard Home" -$STD tar -xzf /tmp/AdGuardHome_linux_$(arch_resolve).tar.gz -C /opt -$STD rm /tmp/AdGuardHome_linux_$(arch_resolve).tar.gz -msg_ok "Installed AdGuard Home" - -msg_info "Creating AdGuard Home Service" -cat </etc/init.d/adguardhome -#!/sbin/openrc-run -name="AdGuardHome" -description="AdGuard Home Service" -command="/opt/AdGuardHome/AdGuardHome" -command_background="yes" -pidfile="/run/adguardhome.pid" -EOF -$STD chmod +x /etc/init.d/adguardhome -msg_ok "Created AdGuard Home Service" - -msg_info "Enabling AdGuard Home Service" -$STD rc-update add adguardhome default -msg_ok "Enabled AdGuard Home Service" - -msg_info "Starting AdGuard Home" -$STD rc-service adguardhome start -msg_ok "Started AdGuard Home" - -motd_ssh -customize diff --git a/install/alpine-bitmagnet-install.sh b/install/alpine-bitmagnet-install.sh deleted file mode 100644 index 6bb31de7b..000000000 --- a/install/alpine-bitmagnet-install.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/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/bitmagnet-io/bitmagnet - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing dependencies" -$STD apk add --no-cache \ - gcc \ - musl-dev \ - git \ - iproute2-ss \ - sudo -$STD apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community go -msg_ok "Installed dependencies" - -msg_info "Installing PostgreSQL" -$STD apk add --no-cache \ - postgresql16 \ - postgresql16-contrib \ - postgresql16-openrc -$STD rc-update add postgresql -$STD rc-service postgresql start -msg_ok "Installed PostreSQL" - -RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - -msg_info "Installing bitmagnet v${RELEASE}" -mkdir -p /opt/bitmagnet -temp_file=$(mktemp) -curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" -tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet -cd /opt/bitmagnet -VREL=v$RELEASE -$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL" -chmod +x bitmagnet -$STD su - postgres -c "psql -c 'CREATE DATABASE bitmagnet;'" -echo "${RELEASE}" >/opt/bitmagnet_version.txt -msg_ok "Installed bitmagnet v${RELEASE}" - -read -rp "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey - -msg_info "Enabling bitmagnet Service" -cat </etc/init.d/bitmagnet -#!/sbin/openrc-run -description="bitmagnet Service" -directory="/opt/bitmagnet" -command="/opt/bitmagnet/bitmagnet" -command_args="worker run --all" -command_background="true" -command_user="root" -pidfile="/var/run/bitmagnet.pid" - -depend() { - use net -} - -start_pre() { - export TMDB_API_KEY="$tmdbapikey" -} -EOF -chmod +x /etc/init.d/bitmagnet -$STD rc-update add bitmagnet default -msg_ok "Enabled bitmagnet Service" - -msg_info "Starting bitmagnet" -$STD service bitmagnet start -msg_ok "Started bitmagnet" - -motd_ssh -customize - -msg_info "Cleaning up" -rm -f "$temp_file" -$STD apk cache clean -msg_ok "Cleaned" diff --git a/install/alpine-caddy-install.sh b/install/alpine-caddy-install.sh deleted file mode 100644 index dc2b7eff2..000000000 --- a/install/alpine-caddy-install.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: cobalt (cobaltgit) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://caddyserver.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Caddy" -$STD apk add --no-cache caddy caddy-openrc -cat </etc/caddy/Caddyfile -:80 { - # Set this path to your site's directory. - root * /var/www/html - - # Enable the static file server. - file_server - - # Another common task is to set up a reverse proxy: - # reverse_proxy localhost:8080 - - # Or serve a PHP site through php-fpm: - # php_fastcgi localhost:9000 -} -EOF -mkdir -p /var/www/html -cat </var/www/html/index.html - - - - Caddy works! - - -

Hello Caddy!

-

For more information, refer to the Caddy documentation

- - -EOF -msg_ok "Installed Caddy" - -read -r -p "${TAB3}Would you like to install xCaddy Addon? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - GO_VERSION="$(curl -fsSL https://go.dev/VERSION?m=text | head -1 | cut -c3-)" setup_go - msg_info "Setup xCaddy" - cd /opt - RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.tar.gz" -o "xcaddy_${RELEASE:1}_linux_amd64.tar.gz" - $STD tar xzf xcaddy_"${RELEASE:1}"_linux_amd64.tar.gz -C /usr/local/bin xcaddy - rm -rf /opt/xcaddy* - $STD xcaddy build - msg_ok "Setup xCaddy" -fi - -msg_info "Enabling Caddy Service" -$STD rc-update add caddy default -msg_ok "Enabled Caddy Service" - -msg_info "Starting Caddy" -$STD service caddy start -msg_ok "Started Caddy" - -motd_ssh -customize diff --git a/install/alpine-docker-install.sh b/install/alpine-docker-install.sh deleted file mode 100644 index 91a07a770..000000000 --- a/install/alpine-docker-install.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.docker.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add tzdata openssl -msg_ok "Installed Dependencies" - -msg_info "Installing Docker" -$STD apk add docker -$STD rc-service docker start -$STD rc-update add docker default -msg_ok "Installed Docker" - -get_latest_release() { - curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4 -} -DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose") -PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent") - -read -r -p "${TAB3}Would you like to add Docker Compose? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" - DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} - mkdir -p "$DOCKER_CONFIG"/cli-plugins - curl -fsSL https://github.com/docker/compose/releases/download/"$DOCKER_COMPOSE_LATEST_VERSION"/docker-compose-linux-$(arch_resolve "x86_64" "aarch64") -o ~/.docker/cli-plugins/docker-compose - chmod +x "$DOCKER_CONFIG"/cli-plugins/docker-compose - msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" -fi - -if prompt_confirm "${TAB3}Would you like to install Portainer (UI) via the community-scripts addon?" "n" 60; then - bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)" <<<"y" -else - read -r -p "${TAB3}Would you like to add the Portainer Agent? " prompt - if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION" - $STD docker run -d \ - -p 9001:9001 \ - --name portainer_agent \ - --restart=always \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -v /var/lib/docker/volumes:/var/lib/docker/volumes \ - portainer/agent - msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" - fi -fi - -read -r -p "${TAB3}Would you like to expose the Docker TCP socket? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Exposing Docker TCP socket" - $STD mkdir -p /etc/docker - $STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' >/etc/docker/daemon.json - $STD rc-service docker restart - msg_ok "Exposed Docker TCP socket at tcp://+:2375" -fi - -motd_ssh -customize diff --git a/install/alpine-forgejo-install.sh b/install/alpine-forgejo-install.sh deleted file mode 100644 index b09a6414f..000000000 --- a/install/alpine-forgejo-install.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: Johann3s-H (An!ma) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://forgejo.org/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Forgejo" -$STD apk add --no-cache forgejo -msg_ok "Installed Forgejo" - -msg_info "Enabling Forgejo Service" -$STD rc-update add forgejo default -msg_ok "Enabled Forgejo Service" - -msg_info "Starting Forgejo" -$STD service forgejo start -msg_ok "Started Forgejo" - -motd_ssh -customize diff --git a/install/alpine-garage-install.sh b/install/alpine-garage-install.sh deleted file mode 100644 index 476f98dd7..000000000 --- a/install/alpine-garage-install.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/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://garagehq.deuxfleurs.fr/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add --no-cache openssl -msg_ok "Installed Dependencies" - -GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name') -curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage -chmod +x /usr/local/bin/garage -mkdir -p /var/lib/garage/{data,meta,snapshots} -mkdir -p /etc/garage -RPC_SECRET=$(openssl rand -hex 64 | cut -c1-64) -ADMIN_TOKEN=$(openssl rand -base64 32) -METRICS_TOKEN=$(openssl rand -base64 32) -cat <~/garage.creds -Garage Tokens and Secrets -RPC Secret: $RPC_SECRET -Admin Token: $ADMIN_TOKEN -Metrics Token: $METRICS_TOKEN -EOF -echo $GITEA_RELEASE >>~/.garage -cat </etc/garage.toml -metadata_dir = "/var/lib/garage/meta" -data_dir = "/var/lib/garage/data" -db_engine = "sqlite" -replication_factor = 1 - -rpc_bind_addr = "0.0.0.0:3901" -rpc_public_addr = "127.0.0.1:3901" -rpc_secret = "${RPC_SECRET}" - -[s3_api] -s3_region = "garage" -api_bind_addr = "0.0.0.0:3900" -root_domain = ".s3.garage" - -[s3_web] -bind_addr = "0.0.0.0:3902" -root_domain = ".web.garage" -index = "index.html" - -[k2v_api] -api_bind_addr = "0.0.0.0:3904" - -[admin] -api_bind_addr = "0.0.0.0:3903" -admin_token = "${ADMIN_TOKEN}" -metrics_token = "${METRICS_TOKEN}" -EOF -msg_ok "Configured Garage" - -msg_info "Creating Service" -cat <<'EOF' >/etc/init.d/garage -#!/sbin/openrc-run -name="Garage Object Storage" -command="/usr/local/bin/garage" -command_args="server" -command_background="yes" -pidfile="/run/garage.pid" -depend() { - need net -} -EOF - -chmod +x /etc/init.d/garage -$STD rc-update add garage default -$STD rc-service garage restart || rc-service garage start -msg_ok "Service active" - -motd_ssh -customize diff --git a/install/alpine-gatus-install.sh b/install/alpine-gatus-install.sh deleted file mode 100644 index 6bab8a41c..000000000 --- a/install/alpine-gatus-install.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/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/TwiN/gatus - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing dependencies" -$STD apk add --no-cache \ - ca-certificates \ - libcap-setcap -$STD apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community go -msg_ok "Installed dependencies" - -RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -msg_info "Installing gatus v${RELEASE}" -temp_file=$(mktemp) -mkdir -p /opt/gatus -curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" -tar zxf "$temp_file" --strip-components=1 -C /opt/gatus -cd /opt/gatus -$STD go mod tidy -CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . -setcap CAP_NET_RAW+ep gatus -mv config.yaml config -echo "${RELEASE}" >/opt/gatus_version.txt -msg_ok "Installed gatus v${RELEASE}" - -msg_info "Enabling gatus Service" -cat </etc/init.d/gatus -#!/sbin/openrc-run -description="gatus Service" -directory="/opt/gatus" -command="/opt/gatus/gatus" -command_args="" -command_background="true" -command_user="root" -pidfile="/var/run/gatus.pid" - -export GATUS_CONFIG_PATH="" -export GATUS_LOG_LEVEL="INFO" -export PORT="8080" - -depend() { - use net -} -EOF -chmod +x /etc/init.d/gatus -$STD rc-update add gatus default -msg_ok "Enabled gatus Service" - -msg_info "Starting gatus" -$STD service gatus start -msg_ok "Started gatus" - -motd_ssh -customize - -msg_info "Cleaning up" -rm -f "$temp_file" -$STD apk cache clean -msg_ok "Cleaned" diff --git a/install/alpine-gitea-install.sh b/install/alpine-gitea-install.sh deleted file mode 100644 index dc7b8225b..000000000 --- a/install/alpine-gitea-install.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/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://gitea.io/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Gitea" -$STD apk add --no-cache gitea -msg_ok "Installed Gitea" - -msg_info "Enabling Gitea Service" -$STD rc-update add gitea default -msg_ok "Enabled Gitea Service" - -msg_info "Starting Gitea" -$STD service gitea start -msg_ok "Started Gitea" - -motd_ssh -customize diff --git a/install/alpine-grafana-install.sh b/install/alpine-grafana-install.sh deleted file mode 100644 index 6920bceb2..000000000 --- a/install/alpine-grafana-install.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://grafana.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Grafana" -$STD apk add grafana -$STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/grafana -$STD rc-service grafana start -$STD rc-update add grafana default -msg_ok "Installed Grafana" - -motd_ssh -customize diff --git a/install/alpine-ironclaw-install.sh b/install/alpine-ironclaw-install.sh deleted file mode 100644 index 84936637a..000000000 --- a/install/alpine-ironclaw-install.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/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/nearai/ironclaw - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add openssl dbus gnome-keyring -msg_ok "Installed Dependencies" - -msg_info "Installing PostgreSQL" -$STD apk add postgresql17 postgresql17-openrc postgresql-pgvector postgresql-common -$STD rc-service postgresql setup -$STD rc-update add postgresql default -$STD rc-service postgresql start -msg_ok "Installed PostgreSQL" - -msg_info "Setting up Database" -PG_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13) -$STD su -s /bin/sh postgres -c "psql -c \"CREATE ROLE ironclaw WITH LOGIN PASSWORD '${PG_PASS}';\"" -$STD su -s /bin/sh postgres -c "psql -c \"CREATE DATABASE ironclaw WITH OWNER ironclaw;\"" -$STD su -s /bin/sh postgres -c "psql -d ironclaw -c \"CREATE EXTENSION IF NOT EXISTS vector;\"" -msg_ok "Set up Database" - -fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "ironclaw-v0.29.1" "/usr/local/bin" \ - "ironclaw-$(uname -m)-unknown-linux-musl.tar.gz" -chmod +x /usr/local/bin/ironclaw - -msg_info "Configuring Environment" -GATEWAY_TOKEN=$(openssl rand -hex 32) -mkdir -p /root/.ironclaw -cat </root/.ironclaw/gateway.creds -Gateway-Token -Token: $GATEWAY_TOKEN -EOF - -mkdir -p /root/.ironclaw -cat </root/.ironclaw/.env -DATABASE_BACKEND=postgres -DATABASE_URL=postgresql://ironclaw:${PG_PASS}@localhost:5432/ironclaw?sslmode=disable -GATEWAY_ENABLED=true -GATEWAY_HOST=0.0.0.0 -GATEWAY_PORT=3000 -GATEWAY_AUTH_TOKEN=${GATEWAY_TOKEN} -CLI_ENABLED=false -RUST_LOG=ironclaw=info,tower_http=info -EOF -chmod 600 /root/.ironclaw/.env -msg_ok "Configured Environment" - -msg_info "Configuring IronClaw" -# Set values in the database since it is typically the true source of truth and ensures values are set correctly on first run before the service starts. -/usr/local/bin/ironclaw --no-onboard config set database_backend postgres >/dev/null -/usr/local/bin/ironclaw --no-onboard config set database_url "postgresql://ironclaw:${PG_PASS}@localhost:5432/ironclaw?sslmode=disable" >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_enabled true >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_host 0.0.0.0 >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_port 3000 >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_auth_token "${GATEWAY_TOKEN}" >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.cli_enabled false >/dev/null -/usr/local/bin/ironclaw --no-onboard config set secrets_master_key_source none >/dev/null -# Running ironclaw defaults to use env for secrets and creates this entry, but we want to set that during onboard. -sleep 5 -sed -i '/SECRETS_MASTER_KEY/d' /root/.ironclaw/.env -msg_ok "Configured IronClaw" - -msg_info "Creating Service" -cat </etc/init.d/ironclaw -#!/sbin/openrc-run - -name="IronClaw" -description="IronClaw AI Agent" -command="/usr/bin/dbus-run-session" -command_args="/usr/local/bin/ironclaw" -command_background=true -pidfile="/run/ironclaw.pid" -directory="/root" -supervise_daemon_args="--env-file /root/.ironclaw/.env" - -depend() { - need net postgresql -} -EOF -chmod +x /etc/init.d/ironclaw -$STD rc-update add ironclaw default -msg_ok "Created Service" - -motd_ssh -customize diff --git a/install/alpine-loki-install.sh b/install/alpine-loki-install.sh deleted file mode 100644 index 738d3b8d1..000000000 --- a/install/alpine-loki-install.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 community-scripts ORG -# Author: hoholms -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/grafana/loki - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Loki" -$STD apk add loki -$STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/loki -mkdir -p /var/lib/loki/{chunks,boltdb-shipper-active,boltdb-shipper-cache} -chown -R loki:grafana /var/lib/loki -mkdir -p /var/log/loki -chown -R loki:grafana /var/log/loki -cat </etc/loki/loki-local-config.yaml -auth_enabled: false - -server: - http_listen_port: 3100 - log_level: info - -common: - instance_addr: 127.0.0.1 - path_prefix: /var/lib/loki - storage: - filesystem: - chunks_directory: /var/lib/loki/chunks - rules_directory: /var/lib/loki/rules - replication_factor: 1 - ring: - kvstore: - store: inmemory - -schema_config: - configs: - - from: 2020-10-24 - store: tsdb - object_store: filesystem - schema: v13 - index: - prefix: index_ - period: 24h - -query_range: - results_cache: - cache: - embedded_cache: - enabled: true - max_size_mb: 100 - -limits_config: - metric_aggregation_enabled: true - -ruler: - alertmanager_url: http://localhost:9093 -EOF -chown loki:grafana /etc/loki/loki-local-config.yaml -chmod 644 /etc/loki/loki-local-config.yaml -echo "output_log=\"\${output_log:-/var/log/loki/output.log}\"" >> /etc/init.d/loki -echo "error_log=\"\${error_log:-/var/log/loki/error.log}\"" >> /etc/init.d/loki -echo "start_stop_daemon_args=\"\${SSD_OPTS} -1 \${output_log} -2 \${error_log}\"" >> /etc/init.d/loki -$STD rc-update add loki default -$STD rc-service loki start -msg_ok "Installed Loki" - -motd_ssh -customize -cleanup_lxc diff --git a/install/alpine-mariadb-install.sh b/install/alpine-mariadb-install.sh deleted file mode 100644 index fb3142efa..000000000 --- a/install/alpine-mariadb-install.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/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://mariadb.org/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing MariaDB" -$STD apk add --no-cache mariadb mariadb-client -$STD rc-update add mariadb default -msg_ok "Installed MariaDB" - -msg_info "Configuring MariaDB" -mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql >/dev/null 2>&1 -$STD rc-service mariadb start -msg_ok "MariaDB Configured" - -read -r -p "${TAB3}Would you like to install Adminer with lighttpd? : " prompt -if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - msg_info "Installing Adminer and dependencies" - $STD apk add --no-cache \ - lighttpd \ - lighttpd-openrc \ - php83 \ - php83-cgi \ - php83-common \ - php83-curl \ - php83-gd \ - php83-mbstring \ - php83-mysqli \ - php83-mysqlnd \ - php83-openssl \ - php83-zip \ - php83-session \ - jq - - sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf - sed -i 's|/usr/bin/php-cgi|/usr/bin/php-cgi83|g' /etc/lighttpd/mod_fastcgi.conf - mkdir -p /var/www/localhost/htdocs - ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//') - curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php - chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php - chmod 755 /var/www/localhost/htdocs/adminer.php - msg_ok "Adminer Installed" - - msg_info "Starting Lighttpd" - $STD rc-update add lighttpd default - $STD rc-service lighttpd restart - msg_ok "Lighttpd Started" -fi - -motd_ssh -customize - -msg_info "Cleaning up" -msg_ok "Cleaned" diff --git a/install/alpine-node-red-install.sh b/install/alpine-node-red-install.sh deleted file mode 100644 index 07cd3ecdd..000000000 --- a/install/alpine-node-red-install.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/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://nodered.org/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add --no-cache \ - git \ - nodejs \ - npm -msg_ok "Installed Dependencies" - -msg_info "Creating Node-RED User" -adduser -D -H -s /sbin/nologin -G users nodered -msg_ok "Created Node-RED User" - -msg_info "Installing Node-RED" -$STD npm install -g --unsafe-perm node-red -msg_ok "Installed Node-RED" - -msg_info "Creating /home/nodered" -mkdir -p /home/nodered -chown -R nodered:users /home/nodered -chmod 750 /home/nodered -msg_ok "Created /home/nodered" - -msg_info "Creating Node-RED Service" -service_path="/etc/init.d/nodered" - -echo '#!/sbin/openrc-run -description="Node-RED Service" - -command="/usr/local/bin/node-red" -command_args="--max-old-space-size=128 -v" -command_user="nodered" -pidfile="/var/run/nodered.pid" -command_background="yes" - -depend() { - use net -}' >$service_path - -chmod +x $service_path -msg_ok "Created Node-RED Service" - -msg_info "Starting Node-RED" -$STD rc-update add nodered -$STD rc-service nodered start -msg_ok "Started Node-RED" - -motd_ssh -customize diff --git a/install/alpine-ntfy-install.sh b/install/alpine-ntfy-install.sh deleted file mode 100644 index 4f14c79e0..000000000 --- a/install/alpine-ntfy-install.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: cobalt (cobaltgit) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Source: https://ntfy.sh/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing ntfy" -$STD apk add --no-cache ntfy ntfy-openrc libcap -sed -i '/^listen-http/s/^\(.*\)$/#\1\n/' /etc/ntfy/server.yml -setcap 'cap_net_bind_service=+ep' /usr/bin/ntfy -$STD rc-update add ntfy default -$STD service ntfy start -msg_ok "Installed ntfy" - -motd_ssh -customize diff --git a/install/alpine-postgresql-install.sh b/install/alpine-postgresql-install.sh deleted file mode 100644 index 0156237fd..000000000 --- a/install/alpine-postgresql-install.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.postgresql.org/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -read -r -p "${TAB3}Enter PostgreSQL version (15/16/17): " ver -[[ $ver =~ ^(15|16|17)$ ]] || { echo "Invalid version"; exit 64; } - -msg_info "Installing PostgreSQL ${ver}" -$STD apk add --no-cache postgresql${ver} postgresql${ver}-contrib postgresql${ver}-openrc sudo -msg_ok "Installed PostgreSQL ${ver}" - -msg_info "Enabling PostgreSQL Service" -$STD rc-update add postgresql default -msg_ok "Enabled PostgreSQL Service" - -msg_info "Starting PostgreSQL" -$STD rc-service postgresql start -msg_ok "Started PostgreSQL" - -msg_info "Configuring PostgreSQL for External Access" -conf_file="/etc/postgresql${ver}/postgresql.conf" -hba_file="/etc/postgresql${ver}/pg_hba.conf" -sed -i 's/^#listen_addresses =.*/listen_addresses = '\''*'\''/' "$conf_file" -sed -i '/^host\s\+all\s\+all\s\+127.0.0.1\/32\s\+md5/ s/.*/host all all 0.0.0.0\/0 md5/' "$hba_file" -$STD rc-service postgresql restart -msg_ok "Configured and Restarted PostgreSQL" - -read -r -p "${TAB3}Would you like to install Adminer with lighttpd? : " prompt -if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - msg_info "Installing Adminer and dependencies" - $STD apk add --no-cache \ - lighttpd \ - lighttpd-openrc \ - php83 \ - php83-cgi \ - php83-common \ - php83-curl \ - php83-gd \ - php83-mbstring \ - php83-pdo \ - php83-pgsql \ - php83-openssl \ - php83-zip \ - php83-session \ - jq - - sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf - sed -i 's|/usr/bin/php-cgi|/usr/bin/php-cgi83|g' /etc/lighttpd/mod_fastcgi.conf - mkdir -p /var/www/localhost/htdocs - ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//') - curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php - chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php - chmod 755 /var/www/localhost/htdocs/adminer.php - msg_ok "Adminer Installed" - - msg_info "Starting Lighttpd" - $STD rc-update add lighttpd default - $STD rc-service lighttpd restart - msg_ok "Lighttpd Started" -fi - -motd_ssh -customize diff --git a/install/alpine-prometheus-install.sh b/install/alpine-prometheus-install.sh deleted file mode 100644 index d374abfb9..000000000 --- a/install/alpine-prometheus-install.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/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://prometheus.io/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Prometheus" -$STD apk add --no-cache prometheus -msg_ok "Installed Prometheus" - -msg_info "Enabling Prometheus Service" -$STD rc-update add prometheus default -msg_ok "Enabled Prometheus Service" - -msg_info "Starting Prometheus" -$STD service prometheus start -msg_ok "Started Prometheus" - -motd_ssh -customize diff --git a/install/alpine-rclone-install.sh b/install/alpine-rclone-install.sh deleted file mode 100644 index 40b345763..000000000 --- a/install/alpine-rclone-install.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/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/rclone/rclone - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing dependencies" -$STD apk add --no-cache \ - apache2-utils fuse3 -msg_ok "Installed dependencies" - -msg_info "Installing rclone" -temp_file=$(mktemp) -mkdir -p /opt/rclone -RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-$(arch_resolve).zip" -o "$temp_file" -$STD unzip -j "$temp_file" '*/**' -d /opt/rclone -cd /opt/rclone -RCLONE_PASSWORD=$(head -c 16 /dev/urandom | xxd -p -c 16) -$STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD" -cat <~/rclone.creds -rclone-Credentials -rclone User Name: admin -rclone Password: $RCLONE_PASSWORD -EOF -echo "${RELEASE}" >/opt/rclone_version.txt -rm -f "$temp_file" -msg_ok "Installed rclone" - -msg_info "Enabling rclone Service" -cat </etc/init.d/rclone -#!/sbin/openrc-run -description="rclone Service" -command="/opt/rclone/rclone" -command_args="rcd --rc-web-gui --rc-web-gui-no-open-browser --rc-addr :3000 --rc-htpasswd /opt/login.pwd" -command_background="true" -command_user="root" -pidfile="/var/run/rclone.pid" - -depend() { - use net -} -EOF -chmod +x /etc/init.d/rclone -$STD rc-update add rclone default -msg_ok "Enabled rclone Service" - -msg_info "Starting rclone" -$STD service rclone start -msg_ok "Started rclone" - -motd_ssh -customize - -msg_info "Cleaning up" -rm -rf "$temp_file" -$STD apk cache clean -msg_ok "Cleaned" diff --git a/install/alpine-redis-install.sh b/install/alpine-redis-install.sh deleted file mode 100644 index 5b0e4e824..000000000 --- a/install/alpine-redis-install.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/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://redis.io/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Redis" -$STD apk add redis -$STD sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf -$STD rc-update add redis default -$STD rc-service redis start -msg_ok "Installed Redis" - -motd_ssh -customize diff --git a/install/alpine-rustdeskserver-install.sh b/install/alpine-rustdeskserver-install.sh deleted file mode 100644 index 99d3fae4e..000000000 --- a/install/alpine-rustdeskserver-install.sh +++ /dev/null @@ -1,123 +0,0 @@ -#!/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/rustdesk/rustdesk-server - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -RELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -msg_info "Installing RustDesk Server v${RELEASE}" -temp_file1=$(mktemp) -ARCH=$(arch_resolve "amd64" "arm64v8") -curl -fsSL "https://github.com/lejianwen/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-${ARCH}.zip" -o "$temp_file1" -$STD unzip "$temp_file1" -mv "$ARCH" /opt/rustdesk-server -mkdir -p /root/.config/rustdesk -cd /opt/rustdesk-server -./rustdesk-utils genkeypair >/tmp/rustdesk_keys.txt -grep "Public Key" /tmp/rustdesk_keys.txt | awk '{print $3}' >/root/.config/rustdesk/id_ed25519.pub -grep "Secret Key" /tmp/rustdesk_keys.txt | awk '{print $3}' >/root/.config/rustdesk/id_ed25519 -chmod 600 /root/.config/rustdesk/id_ed25519 -chmod 644 /root/.config/rustdesk/id_ed25519.pub -rm /tmp/rustdesk_keys.txt -echo "${RELEASE}" >~/.rustdesk-server -msg_ok "Installed RustDesk Server v${RELEASE}" - -APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -msg_info "Installing RustDesk API v${APIRELEASE}" -temp_file2=$(mktemp) -curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-$(arch_resolve).tar.gz" -o "$temp_file2" -$STD tar zxvf "$temp_file2" -mv release /opt/rustdesk-api -cd /opt/rustdesk-api -ADMINPASS=$(head -c 16 /dev/urandom | xxd -p -c 16) -$STD ./apimain reset-admin-pwd "$ADMINPASS" -cat <~/rustdesk.creds -RustDesk WebUI - -Username: admin -Password: $ADMINPASS -EOF -echo "${APIRELEASE}" >~/.rustdesk-api -msg_ok "Installed RustDesk API v${APIRELEASE}" - -msg_info "Enabling RustDesk Server Services" -cat </etc/init.d/rustdesk-server-hbbs -#!/sbin/openrc-run -description="RustDesk HBBS Service" -directory="/opt/rustdesk-server" -command="/opt/rustdesk-server/hbbs" -command_args="" -command_background="true" -command_user="root" -pidfile="/var/run/rustdesk-server-hbbs.pid" -output_log="/var/log/rustdesk-hbbs.log" -error_log="/var/log/rustdesk-hbbs.err" - -depend() { - use net -} -EOF - -cat </etc/init.d/rustdesk-server-hbbr -#!/sbin/openrc-run -description="RustDesk HBBR Service" -directory="/opt/rustdesk-server" -command="/opt/rustdesk-server/hbbr" -command_args="" -command_background="true" -command_user="root" -pidfile="/var/run/rustdesk-server-hbbr.pid" -output_log="/var/log/rustdesk-hbbr.log" -error_log="/var/log/rustdesk-hbbr.err" - -depend() { - use net -} -EOF - -cat </etc/init.d/rustdesk-api -#!/sbin/openrc-run -description="RustDesk API Service" -directory="/opt/rustdesk-api" -command="/opt/rustdesk-api/apimain" -command_args="" -command_background="true" -command_user="root" -pidfile="/var/run/rustdesk-api.pid" -output_log="/var/log/rustdesk-api.log" -error_log="/var/log/rustdesk-api.err" - -depend() { - use net -} -EOF -chmod +x /etc/init.d/rustdesk-server-hbbs -chmod +x /etc/init.d/rustdesk-server-hbbr -chmod +x /etc/init.d/rustdesk-api -$STD rc-update add rustdesk-server-hbbs default -$STD rc-update add rustdesk-server-hbbr default -$STD rc-update add rustdesk-api default -msg_ok "Enabled RustDesk Server Services" - -msg_info "Starting RustDesk Server" -$STD service rustdesk-server-hbbs start -$STD service rustdesk-server-hbbr start -$STD service rustdesk-api start -msg_ok "Started RustDesk Server" - -motd_ssh -customize - -msg_info "Cleaning up" -rm -f "$temp_file1" "$temp_file2" -$STD apk cache clean -msg_ok "Cleaned" diff --git a/install/alpine-rustypaste-install.sh b/install/alpine-rustypaste-install.sh deleted file mode 100644 index f45707aba..000000000 --- a/install/alpine-rustypaste-install.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/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/orhun/rustypaste - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing RustyPaste" -$STD apk add --no-cache rustypaste --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community -msg_ok "Installed RustyPaste" - -msg_info "Configuring RustyPaste" -mkdir -p /var/lib/rustypaste -sed -i 's|^address = ".*"|address = "0.0.0.0:8000"|' /etc/rustypaste/config.toml -msg_ok "Configured RustyPaste" - -msg_info "Creating Service" -cat <<'EOF' >/etc/init.d/rustypaste -#!/sbin/openrc-run - -name="rustypaste" -description="RustyPaste - A minimal file upload/pastebin service" -command="/usr/bin/rustypaste" -command_args="" -command_user="root" -command_background=true -pidfile="/run/${RC_SVCNAME}.pid" -directory="/var/lib/rustypaste" - -depend() { - need net - after firewall -} - -start_pre() { - export CONFIG=/etc/rustypaste/config.toml - checkpath --directory --owner root:root --mode 0755 /var/lib/rustypaste -} -EOF -chmod +x /etc/init.d/rustypaste -$STD rc-update add rustypaste default -$STD rc-service rustypaste start -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc diff --git a/install/alpine-syncthing-install.sh b/install/alpine-syncthing-install.sh deleted file mode 100644 index 2dd468c7b..000000000 --- a/install/alpine-syncthing-install.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/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://syncthing.net/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Setup Syncthing" -$STD apk add --no-cache syncthing -rc-service syncthing start -sleep 3 -rc-service syncthing stop -sed -i "{s/127.0.0.1:8384/0.0.0.0:8384/g}" /var/lib/syncthing/.local/state/syncthing/config.xml -msg_ok "Setup Syncthing" - -msg_info "Enabling Syncthing Service" -$STD rc-update add syncthing default -msg_ok "Enabled Syncthing Service" - -msg_info "Starting Syncthing" -$STD rc-service syncthing start -msg_ok "Started Syncthing" - -motd_ssh -customize diff --git a/install/alpine-teamspeak-server-install.sh b/install/alpine-teamspeak-server-install.sh deleted file mode 100644 index 63ef8a063..000000000 --- a/install/alpine-teamspeak-server-install.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: tremor021 (SlaviΕ‘a AreΕΎina) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://teamspeak.com/en/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing dependencies" -$STD apk add --no-cache \ - ca-certificates \ - libstdc++ \ - libc6-compat -msg_ok "Installed dependencies" - -RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | awk 'NR==1') -msg_info "Installing Teamspeak Server v${RELEASE}" -mkdir -p /opt/teamspeak-server -cd /opt/teamspeak-server -curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2 -tar xf ts3server.tar.bz2 --strip-components=1 -mkdir -p logs data lib -mv *.so lib -touch data/ts3server.sqlitedb data/query_ip_blacklist.txt data/query_ip_whitelist.txt .ts3server_license_accepted -echo "${RELEASE}" >~/.teamspeak-server -msg_ok "Installed TeamSpeak Server v${RELEASE}" - -msg_info "Enabling TeamSpeak Server Service" -cat </etc/init.d/teamspeak -#!/sbin/openrc-run - -name="TeamSpeak Server" -description="TeamSpeak 3 Server" -command="/opt/teamspeak-server/ts3server_startscript.sh" -command_args="start" -output_log="/var/log/teamspeak.out.log" -error_log="/var/log/teamspeak.err.log" -command_background=true -pidfile="/run/teamspeak-server.pid" -directory="/opt/teamspeak-server" - -depend() { - need net - use dns -} -EOF -chmod +x /etc/init.d/teamspeak -$STD rc-update add teamspeak default -msg_ok "Enabled TeamSpeak Server Service" - -msg_info "Starting TeamSpeak Server" -$STD service teamspeak start -msg_ok "Started TeamSpeak Server" - -motd_ssh -customize - -msg_info "Cleaning up" -rm -r ts3server.tar.bz* LICENSE* CHANGELOG doc serverquerydocs tsdns redist -$STD apk cache clean -msg_ok "Cleaned" diff --git a/install/alpine-tinyauth-install.sh b/install/alpine-tinyauth-install.sh deleted file mode 100644 index e9d26a1fa..000000000 --- a/install/alpine-tinyauth-install.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: SlaviΕ‘a AreΕΎina (tremor021) | Co-Author: Stavros (steveiliop56) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/tinyauthapp/tinyauth - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add --no-cache openssl apache2-utils -msg_ok "Installed Dependencies" - -msg_info "Installing Tinyauth" -mkdir -p /opt/tinyauth -RELEASE=$(curl -s https://api.github.com/repos/tinyauthapp/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/tinyauthapp/tinyauth/releases/download/v${RELEASE}/tinyauth-$(arch_resolve)" -o /opt/tinyauth/tinyauth -chmod +x /opt/tinyauth/tinyauth -PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8) -USER=$(htpasswd -Bbn "tinyauth" "${PASS}") - -cat </opt/tinyauth/credentials.txt -Tinyauth Credentials -Username: tinyauth -Password: ${PASS} -EOF -echo "${RELEASE}" >~/.tinyauth -msg_ok "Installed Tinyauth" - -read -r -p "${TAB3}Enter your Tinyauth subdomain (e.g. https://tinyauth.example.com): " app_url - -cat </opt/tinyauth/.env -TINYAUTH_DATABASE_PATH=/opt/tinyauth/database.db -TINYAUTH_AUTH_USERS='${USER}' -TINYAUTH_APPURL=${app_url} -EOF - -msg_info "Creating Service" -cat <<'EOF' >/etc/init.d/tinyauth -#!/sbin/openrc-run -description="Tinyauth Service" - -set -a -ENV_FILE="/opt/tinyauth/.env" -[ -f "$ENV_FILE" ] && . "$ENV_FILE" -set +a - -command="/opt/tinyauth/tinyauth" -directory="/opt/tinyauth" -command_user="root" -command_background="true" -pidfile="/var/run/tinyauth.pid" - -depend() { - use net -} -EOF -chmod +x /etc/init.d/tinyauth -$STD rc-update add tinyauth default -msg_ok "Enabled Tinyauth Service" - -msg_info "Starting Tinyauth" -$STD service tinyauth start -msg_ok "Started Tinyauth" - -motd_ssh -customize diff --git a/install/alpine-traefik-install.sh b/install/alpine-traefik-install.sh deleted file mode 100644 index 652e9658b..000000000 --- a/install/alpine-traefik-install.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/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 /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add ca-certificates -$STD update-ca-certificates -msg_ok "Installed Dependencies" - -msg_info "Installing Traefik" -$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community -msg_ok "Installed Traefik" - -read -p "${TAB3}Enable Traefik WebUI (Port 8080)? [y/N]: " enable_webui -if [[ "$enable_webui" =~ ^[Yy]$ ]]; then - msg_info "Configuring Traefik WebUI" - sed -i 's/localhost//g' /etc/traefik/traefik.yaml - msg_ok "Configured Traefik WebUI" -fi - -msg_info "Enabling and starting Traefik service" -$STD rc-update add traefik default -sed -i '/^command=.*/i directory="/etc/traefik"' /etc/init.d/traefik -$STD rc-service traefik start -msg_ok "Traefik service started" - -motd_ssh -customize diff --git a/install/alpine-transmission-install.sh b/install/alpine-transmission-install.sh deleted file mode 100644 index d7cc76e1f..000000000 --- a/install/alpine-transmission-install.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/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://transmissionbt.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Transmission" -$STD apk add --no-cache transmission-cli transmission-daemon -$STD rc-service transmission-daemon start -sleep 5 -$STD rc-service transmission-daemon stop -sed -i '{s/"rpc-whitelist-enabled": true/"rpc-whitelist-enabled": false/g; s/"rpc-host-whitelist-enabled": true,/"rpc-host-whitelist-enabled": false,/g}' /var/lib/transmission/config/settings.json -msg_ok "Installed Transmission" - -msg_info "Enabling Transmission Service" -$STD rc-update add transmission-daemon default -msg_ok "Enabled Transmission Service" - -msg_info "Starting Transmission" -$STD rc-service transmission-daemon start -msg_ok "Started Transmission" - -motd_ssh -customize diff --git a/install/alpine-valkey-install.sh b/install/alpine-valkey-install.sh deleted file mode 100644 index 02d80865e..000000000 --- a/install/alpine-valkey-install.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: pshankinclarke (lazarillo) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://valkey.io/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Valkey" -$STD apk add valkey valkey-openrc valkey-cli -sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf - -PASS="$(head -c 100 /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c32)" -echo "requirepass $PASS" >>/etc/valkey/valkey.conf -echo "$PASS" >~/valkey.creds -chmod 600 ~/valkey.creds - -MEMTOTAL_MB=$(free -m | grep ^Mem: | awk '{print $2}') -MAXMEMORY_MB=$((MEMTOTAL_MB * 75 / 100)) - -cat </etc/valkey/valkey.conf -# Memory-optimized settings for small-scale deployments -maxmemory ${MAXMEMORY_MB}mb -maxmemory-policy allkeys-lru -maxmemory-samples 10 -EOF -msg_ok "Installed Valkey" - -# Note: Alpine's valkey package is compiled without TLS support -# For TLS, use the Debian-based valkey script instead - -$STD rc-update add valkey default -$STD rc-service valkey start - -motd_ssh -customize -cleanup_lxc diff --git a/install/alpine-vaultwarden-install.sh b/install/alpine-vaultwarden-install.sh deleted file mode 100644 index 729ef050b..000000000 --- a/install/alpine-vaultwarden-install.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) | Co-Author: SlaviΕ‘a AreΕΎina (tremor021) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/dani-garcia/vaultwarden - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add --no-cache \ - openssl \ - argon2 -msg_ok "Installed Dependencies" - -msg_info "Installing Alpine-Vaultwarden" -$STD apk add --no-cache vaultwarden -sed -i 's|export WEB_VAULT_ENABLED=.*|export WEB_VAULT_ENABLED=true|' /etc/conf.d/vaultwarden -echo -e "export ADMIN_TOKEN=''" >>/etc/conf.d/vaultwarden -echo -e "export ROCKET_ADDRESS=0.0.0.0" >>/etc/conf.d/vaultwarden -echo -e "export ROCKET_TLS='{certs=\"/etc/ssl/certs/vaultwarden-selfsigned.crt\",key=\"/etc/ssl/private/vaultwarden-selfsigned.key\"}'" >>/etc/conf.d/vaultwarden -$STD openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/vaultwarden-selfsigned.key -out /etc/ssl/certs/vaultwarden-selfsigned.crt -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost" -chown vaultwarden:vaultwarden /etc/ssl/certs/vaultwarden-selfsigned.crt -chown vaultwarden:vaultwarden /etc/ssl/private/vaultwarden-selfsigned.key -msg_ok "Installed Alpine-Vaultwarden" - -msg_info "Installing Web-Vault" -$STD apk add --no-cache vaultwarden-web-vault -msg_ok "Installed Web-Vault" - -msg_info "Starting Alpine-Vaultwarden" -$STD rc-service vaultwarden start -$STD rc-update add vaultwarden default -msg_ok "Started Alpine-Vaultwarden" - -motd_ssh -customize diff --git a/install/alpine-wireguard-install.sh b/install/alpine-wireguard-install.sh deleted file mode 100644 index 8456f0365..000000000 --- a/install/alpine-wireguard-install.sh +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.wireguard.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add \ - iptables \ - openrc -msg_ok "Installed Dependencies" - -msg_info "Installing WireGuard" -$STD apk add --no-cache wireguard-tools -if [[ ! -L /etc/init.d/wg-quick.wg0 ]]; then - ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg0 -fi - -private_key=$(wg genkey) -cat </etc/wireguard/wg0.conf -[Interface] -PrivateKey = ${private_key} -Address = 10.0.0.1/24 -SaveConfig = true -PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; -PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; -ListenPort = 51820 -EOF -echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf -$STD rc-update add sysctl -$STD sysctl -p /etc/sysctl.conf -msg_ok "Installed WireGuard" - -read -rp "${TAB3}Do you want to install WGDashboard? (y/N): " INSTALL_WGD -if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then - msg_info "Installing additional dependencies for WGDashboard" - $STD apk add --no-cache \ - python3 \ - py3-pip \ - git \ - sudo \ - musl-dev \ - linux-headers \ - gcc \ - python3-dev - msg_ok "Installed additional dependencies for WGDashboard" - msg_info "Installing WGDashboard" - git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard - cd /etc/wgdashboard/src - chmod u+x wgd.sh - $STD ./wgd.sh install - msg_ok "Installed WGDashboard" - - msg_info "Creating Service for WGDashboard" - cat </etc/init.d/wg-dashboard -#!/sbin/openrc-run - -description="WireGuard Dashboard Service" - -depend() { - need net - after firewall -} - -start() { - ebegin "Starting WGDashboard" - cd /etc/wgdashboard/src/ - ./wgd.sh start & - eend $? -} - -stop() { - ebegin "Stopping WGDashboard" - pkill -f "wgd.sh" - eend $? -} -EOF - chmod +x /etc/init.d/wg-dashboard - $STD rc-update add wg-dashboard default - $STD rc-service wg-dashboard start - msg_ok "Created Service for WGDashboard" - -fi - -msg_info "Starting Services" -$STD rc-update add wg-quick.wg0 default -$STD rc-service wg-quick.wg0 start -msg_ok "Started Services" - -motd_ssh -customize diff --git a/install/alpine-zigbee2mqtt-install.sh b/install/alpine-zigbee2mqtt-install.sh deleted file mode 100644 index bb0c1816c..000000000 --- a/install/alpine-zigbee2mqtt-install.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.zigbee2mqtt.io/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Alpine-Zigbee2MQTT" -mkdir -p /root/.z2m /etc/zigbee2mqtt -$STD apk add zigbee2mqtt -ln -s /etc/zigbee2mqtt/ /root/.z2m -chown -R root:root /etc/zigbee2mqtt /root/.z2m -sed -i -e 's/#datadir="\/var\/lib\/zigbee2mqtt"/datadir="\/etc\/zigbee2mqtt"/' -e 's/#command_user="zigbee2mqtt"/command_user="root"/' /etc/conf.d/zigbee2mqtt -$STD rc-update add zigbee2mqtt -$STD rc-service zigbee2mqtt restart -msg_ok "Installed Alpine-Zigbee2MQTT" - -motd_ssh -customize diff --git a/install/bitmagnet-install.sh b/install/bitmagnet-install.sh index de33f083e..6a10f33e6 100644 --- a/install/bitmagnet-install.sh +++ b/install/bitmagnet-install.sh @@ -13,43 +13,44 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - iproute2 \ - gcc \ - musl-dev -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + iproute2 \ + gcc \ + musl-dev + msg_ok "Installed Dependencies" -PG_VERSION="16" setup_postgresql -PG_DB_NAME="bitmagnet" PG_DB_USER="bitmagnet" setup_postgresql_db -setup_go + PG_VERSION="16" setup_postgresql + PG_DB_NAME="bitmagnet" PG_DB_USER="bitmagnet" setup_postgresql_db + setup_go -fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" "tarball" -RELEASE=$(cat ~/.bitmagnet) + fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" "tarball" + RELEASE=$(cat ~/.bitmagnet) -msg_info "Configuring bitmagnet" -cd /opt/bitmagnet -$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=v${RELEASE}" -chmod +x bitmagnet -msg_ok "Configured bitmagnet" + msg_info "Configuring bitmagnet" + cd /opt/bitmagnet + $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=v${RELEASE}" + chmod +x bitmagnet + msg_ok "Configured bitmagnet" -read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey + read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey -cat </etc/bitmagnet.env + cat </etc/bitmagnet.env POSTGRES_HOST=localhost POSTGRES_USER=${PG_DB_USER} POSTGRES_NAME=${PG_DB_NAME} POSTGRES_PASSWORD=${PG_DB_PASS} EOF -if [ -z "$tmdbapikey" ]; then - echo "TMDB_ENABLED=false" >>/etc/bitmagnet.env -else - echo "TMDB_API_KEY=$tmdbapikey" >>/etc/bitmagnet.env -fi + if [ -z "$tmdbapikey" ]; then + echo "TMDB_ENABLED=false" >>/etc/bitmagnet.env + else + echo "TMDB_API_KEY=$tmdbapikey" >>/etc/bitmagnet.env + fi -msg_info "Creating Service" -cat </etc/systemd/system/bitmagnet-web.service + msg_info "Creating Service" + cat </etc/systemd/system/bitmagnet-web.service [Unit] Description=bitmagnet Web GUI After=network-online.target @@ -65,8 +66,78 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now bitmagnet-web -msg_ok "Created Service" + systemctl enable -q --now bitmagnet-web + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing dependencies" + $STD apk add --no-cache \ + gcc \ + musl-dev \ + git \ + iproute2-ss \ + sudo + $STD apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community go + msg_ok "Installed dependencies" + + msg_info "Installing PostgreSQL" + $STD apk add --no-cache \ + postgresql16 \ + postgresql16-contrib \ + postgresql16-openrc + $STD rc-update add postgresql + $STD rc-service postgresql start + msg_ok "Installed PostreSQL" + + RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + + msg_info "Installing bitmagnet v${RELEASE}" + mkdir -p /opt/bitmagnet + temp_file=$(mktemp) + curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" + tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet + cd /opt/bitmagnet + VREL=v$RELEASE + $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL" + chmod +x bitmagnet + $STD su - postgres -c "psql -c 'CREATE DATABASE bitmagnet;'" + echo "${RELEASE}" >/opt/bitmagnet_version.txt + msg_ok "Installed bitmagnet v${RELEASE}" + + read -rp "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey + + msg_info "Enabling bitmagnet Service" + cat </etc/init.d/bitmagnet +#!/sbin/openrc-run +description="bitmagnet Service" +directory="/opt/bitmagnet" +command="/opt/bitmagnet/bitmagnet" +command_args="worker run --all" +command_background="true" +command_user="root" +pidfile="/var/run/bitmagnet.pid" + +depend() { + use net +} + +start_pre() { + export TMDB_API_KEY="$tmdbapikey" +} +EOF + chmod +x /etc/init.d/bitmagnet + $STD rc-update add bitmagnet default + msg_ok "Enabled bitmagnet Service" + + msg_info "Starting bitmagnet" + $STD service bitmagnet start + msg_ok "Started bitmagnet" + + rm -f "$temp_file" +} + +run_os_setup motd_ssh customize diff --git a/install/caddy-install.sh b/install/caddy-install.sh index 6591d4fd0..75e511ad0 100644 --- a/install/caddy-install.sh +++ b/install/caddy-install.sh @@ -13,32 +13,91 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - debian-keyring \ - debian-archive-keyring \ - apt-transport-https -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + debian-keyring \ + debian-archive-keyring \ + apt-transport-https + msg_ok "Installed Dependencies" -msg_info "Installing Caddy" -setup_deb822_repo \ - "caddy" \ - "https://dl.cloudsmith.io/public/caddy/stable/gpg.key" \ - "https://dl.cloudsmith.io/public/caddy/stable/deb/debian" \ - "any-version" -$STD apt install -y caddy -msg_ok "Installed Caddy" + msg_info "Installing Caddy" + setup_deb822_repo \ + "caddy" \ + "https://dl.cloudsmith.io/public/caddy/stable/gpg.key" \ + "https://dl.cloudsmith.io/public/caddy/stable/deb/debian" \ + "any-version" + $STD apt install -y caddy + msg_ok "Installed Caddy" -read -r -p "${TAB3}Would you like to install xCaddy Addon? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - setup_go - fetch_and_deploy_gh_release "xcaddy" "caddyserver/xcaddy" "binary" + read -r -p "${TAB3}Would you like to install xCaddy Addon? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + setup_go + fetch_and_deploy_gh_release "xcaddy" "caddyserver/xcaddy" "binary" - msg_info "Setup xCaddy" - $STD apt install -y git - $STD xcaddy build - msg_ok "Setup xCaddy" -fi + msg_info "Setup xCaddy" + $STD apt install -y git + $STD xcaddy build + msg_ok "Setup xCaddy" + fi +} + +setup_alpine() { + msg_info "Installing Caddy" + $STD apk add --no-cache caddy caddy-openrc + cat </etc/caddy/Caddyfile +:80 { + # Set this path to your site's directory. + root * /var/www/html + + # Enable the static file server. + file_server + + # Another common task is to set up a reverse proxy: + # reverse_proxy localhost:8080 + + # Or serve a PHP site through php-fpm: + # php_fastcgi localhost:9000 +} +EOF + mkdir -p /var/www/html + cat </var/www/html/index.html + + + + Caddy works! + + +

Hello Caddy!

+

For more information, refer to the Caddy documentation

+ + +EOF + msg_ok "Installed Caddy" + + read -r -p "${TAB3}Would you like to install xCaddy Addon? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + GO_VERSION="$(curl -fsSL https://go.dev/VERSION?m=text | head -1 | cut -c3-)" setup_go + msg_info "Setup xCaddy" + cd /opt + RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.tar.gz" -o "xcaddy_${RELEASE:1}_linux_amd64.tar.gz" + $STD tar xzf xcaddy_"${RELEASE:1}"_linux_amd64.tar.gz -C /usr/local/bin xcaddy + rm -rf /opt/xcaddy* + $STD xcaddy build + msg_ok "Setup xCaddy" + fi + + msg_info "Enabling Caddy Service" + $STD rc-update add caddy default + msg_ok "Enabled Caddy Service" + + msg_info "Starting Caddy" + $STD service caddy start + msg_ok "Started Caddy" +} + +run_os_setup motd_ssh customize diff --git a/install/docker-install.sh b/install/docker-install.sh index 904a65938..e042d85f5 100644 --- a/install/docker-install.sh +++ b/install/docker-install.sh @@ -13,64 +13,122 @@ setting_up_container network_check update_os -PORTAINER_AGENT_LATEST_VERSION=$(get_latest_github_release "portainer/agent") +setup_deb_based() { + PORTAINER_AGENT_LATEST_VERSION=$(get_latest_github_release "portainer/agent") -setup_docker + setup_docker -if prompt_confirm "${TAB3}Would you like to install Portainer (UI) via the community-scripts addon?" "n" 60; then - bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)" <<<"y" -else - read -r -p "${TAB3}Would you like to install the Portainer Agent (for remote management)? " prompt_agent - if [[ ${prompt_agent,,} =~ ^(y|yes)$ ]]; then - msg_info "Installing Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" - $STD docker run -d \ - -p 9001:9001 \ - --name portainer_agent \ - --restart=always \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -v /var/lib/docker/volumes:/var/lib/docker/volumes \ - portainer/agent - msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" + if prompt_confirm "${TAB3}Would you like to install Portainer (UI) via the community-scripts addon?" "n" 60; then + bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)" <<<"y" + else + read -r -p "${TAB3}Would you like to install the Portainer Agent (for remote management)? " prompt_agent + if [[ ${prompt_agent,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" + $STD docker run -d \ + -p 9001:9001 \ + --name portainer_agent \ + --restart=always \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /var/lib/docker/volumes:/var/lib/docker/volumes \ + portainer/agent + msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" + fi fi -fi -read -r -p "${TAB3}Expose Docker TCP socket (insecure) ? [n = No, l = Local only (127.0.0.1), a = All interfaces (0.0.0.0)] : " socket_choice -case "${socket_choice,,}" in -l) - socket="tcp://127.0.0.1:2375" - ;; -a) - socket="tcp://0.0.0.0:2375" - ;; -*) - socket="" - ;; -esac + read -r -p "${TAB3}Expose Docker TCP socket (insecure) ? [n = No, l = Local only (127.0.0.1), a = All interfaces (0.0.0.0)] : " socket_choice + case "${socket_choice,,}" in + l) + socket="tcp://127.0.0.1:2375" + ;; + a) + socket="tcp://0.0.0.0:2375" + ;; + *) + socket="" + ;; + esac -if [[ -n "$socket" ]]; then - msg_info "Enabling Docker TCP socket on $socket" - $STD apt-get install -y jq + if [[ -n "$socket" ]]; then + msg_info "Enabling Docker TCP socket on $socket" + $STD apt-get install -y jq - tmpfile=$(mktemp) - jq --arg sock "$socket" '. + { "hosts": ["unix:///var/run/docker.sock", $sock] }' /etc/docker/daemon.json >"$tmpfile" && mv "$tmpfile" /etc/docker/daemon.json + tmpfile=$(mktemp) + jq --arg sock "$socket" '. + { "hosts": ["unix:///var/run/docker.sock", $sock] }' /etc/docker/daemon.json >"$tmpfile" && mv "$tmpfile" /etc/docker/daemon.json - mkdir -p /etc/systemd/system/docker.service.d - cat </etc/systemd/system/docker.service.d/override.conf + mkdir -p /etc/systemd/system/docker.service.d + cat </etc/systemd/system/docker.service.d/override.conf [Service] ExecStart= ExecStart=$(command -v dockerd || echo /usr/sbin/dockerd) EOF - $STD systemctl daemon-reexec - $STD systemctl daemon-reload + $STD systemctl daemon-reexec + $STD systemctl daemon-reload - if systemctl restart docker; then - msg_ok "Docker TCP socket available on $socket" - else - msg_error "Docker failed to restart. Check journalctl -xeu docker.service" - exit 150 + if systemctl restart docker; then + msg_ok "Docker TCP socket available on $socket" + else + msg_error "Docker failed to restart. Check journalctl -xeu docker.service" + exit 150 + fi fi -fi +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add tzdata openssl + msg_ok "Installed Dependencies" + + msg_info "Installing Docker" + $STD apk add docker + $STD rc-service docker start + $STD rc-update add docker default + msg_ok "Installed Docker" + + get_latest_release() { + curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4 + } + DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose") + PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent") + + read -r -p "${TAB3}Would you like to add Docker Compose? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" + DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} + mkdir -p "$DOCKER_CONFIG"/cli-plugins + curl -fsSL https://github.com/docker/compose/releases/download/"$DOCKER_COMPOSE_LATEST_VERSION"/docker-compose-linux-$(arch_resolve "x86_64" "aarch64") -o ~/.docker/cli-plugins/docker-compose + chmod +x "$DOCKER_CONFIG"/cli-plugins/docker-compose + msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" + fi + + if prompt_confirm "${TAB3}Would you like to install Portainer (UI) via the community-scripts addon?" "n" 60; then + bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)" <<<"y" + else + read -r -p "${TAB3}Would you like to add the Portainer Agent? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION" + $STD docker run -d \ + -p 9001:9001 \ + --name portainer_agent \ + --restart=always \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /var/lib/docker/volumes:/var/lib/docker/volumes \ + portainer/agent + msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" + fi + fi + + read -r -p "${TAB3}Would you like to expose the Docker TCP socket? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + msg_info "Exposing Docker TCP socket" + $STD mkdir -p /etc/docker + $STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' >/etc/docker/daemon.json + $STD rc-service docker restart + msg_ok "Exposed Docker TCP socket at tcp://+:2375" + fi +} + +run_os_setup motd_ssh customize diff --git a/install/forgejo-install.sh b/install/forgejo-install.sh index 38fa16813..8ab802d25 100644 --- a/install/forgejo-install.sh +++ b/install/forgejo-install.sh @@ -13,27 +13,28 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - git \ - git-lfs -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + git \ + git-lfs + msg_ok "Installed Dependencies" -fetch_and_deploy_codeberg_release "forgejo" "forgejo/forgejo" "singlefile" "latest" "/opt/forgejo" "forgejo-*-linux-$(arch_resolve)" -ln -sf /opt/forgejo/forgejo /usr/local/bin/forgejo + fetch_and_deploy_codeberg_release "forgejo" "forgejo/forgejo" "singlefile" "latest" "/opt/forgejo" "forgejo-*-linux-$(arch_resolve)" + ln -sf /opt/forgejo/forgejo /usr/local/bin/forgejo -msg_info "Setting up Forgejo" -$STD adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git -mkdir /var/lib/forgejo -chown git:git /var/lib/forgejo -chmod 750 /var/lib/forgejo -mkdir /etc/forgejo -chown root:git /etc/forgejo -chmod 770 /etc/forgejo -msg_ok "Setup Forgejo" + msg_info "Setting up Forgejo" + $STD adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git + mkdir /var/lib/forgejo + chown git:git /var/lib/forgejo + chmod 750 /var/lib/forgejo + mkdir /etc/forgejo + chown root:git /etc/forgejo + chmod 770 /etc/forgejo + msg_ok "Setup Forgejo" -msg_info "Creating Service" -cat </etc/systemd/system/forgejo.service + msg_info "Creating Service" + cat </etc/systemd/system/forgejo.service [Unit] Description=Forgejo After=syslog.target @@ -50,8 +51,25 @@ Environment=USER=git HOME=/home/git FORGEJO_WORK_DIR=/var/lib/forgejo [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now forgejo -msg_ok "Created Service" + systemctl enable -q --now forgejo + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Forgejo" + $STD apk add --no-cache forgejo + msg_ok "Installed Forgejo" + + msg_info "Enabling Forgejo Service" + $STD rc-update add forgejo default + msg_ok "Enabled Forgejo Service" + + msg_info "Starting Forgejo" + $STD service forgejo start + msg_ok "Started Forgejo" +} + +run_os_setup motd_ssh customize diff --git a/install/garage-install.sh b/install/garage-install.sh index 469f5c123..4aff53c7b 100644 --- a/install/garage-install.sh +++ b/install/garage-install.sh @@ -13,23 +13,24 @@ setting_up_container network_check update_os -msg_info "Setup Garage" -GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name') -curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage -chmod +x /usr/local/bin/garage -mkdir -p /var/lib/garage/{data,meta,snapshots} -mkdir -p /etc/garage -RPC_SECRET=$(openssl rand -hex 32) -ADMIN_TOKEN=$(openssl rand -base64 32) -METRICS_TOKEN=$(openssl rand -base64 32) -cat <~/garage.creds +setup_deb_based() { + msg_info "Setup Garage" + GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name') + curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage + chmod +x /usr/local/bin/garage + mkdir -p /var/lib/garage/{data,meta,snapshots} + mkdir -p /etc/garage + RPC_SECRET=$(openssl rand -hex 32) + ADMIN_TOKEN=$(openssl rand -base64 32) + METRICS_TOKEN=$(openssl rand -base64 32) + cat <~/garage.creds Garage Tokens and Secrets RPC Secret: $RPC_SECRET Admin Token: $ADMIN_TOKEN Metrics Token: $METRICS_TOKEN EOF -echo $GITEA_RELEASE >>~/.garage -cat </etc/garage.toml + echo $GITEA_RELEASE >>~/.garage + cat </etc/garage.toml metadata_dir = "/var/lib/garage/meta" data_dir = "/var/lib/garage/data" db_engine = "sqlite" @@ -57,10 +58,10 @@ api_bind_addr = "[::]:3903" admin_token = "${ADMIN_TOKEN}" metrics_token = "${METRICS_TOKEN}" EOF -msg_ok "Set up Garage" + msg_ok "Set up Garage" -msg_info "Creating service" -cat <<'EOF' >/etc/systemd/system/garage.service + msg_info "Creating service" + cat <<'EOF' >/etc/systemd/system/garage.service [Unit] Description=Garage Object Storage (Deuxfleurs) After=network-online.target @@ -81,8 +82,80 @@ LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF -$STD systemctl enable -q --now garage -msg_ok "Created Service" + $STD systemctl enable -q --now garage + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add --no-cache openssl + msg_ok "Installed Dependencies" + + GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name') + curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage + chmod +x /usr/local/bin/garage + mkdir -p /var/lib/garage/{data,meta,snapshots} + mkdir -p /etc/garage + RPC_SECRET=$(openssl rand -hex 64 | cut -c1-64) + ADMIN_TOKEN=$(openssl rand -base64 32) + METRICS_TOKEN=$(openssl rand -base64 32) + cat <~/garage.creds +Garage Tokens and Secrets +RPC Secret: $RPC_SECRET +Admin Token: $ADMIN_TOKEN +Metrics Token: $METRICS_TOKEN +EOF + echo $GITEA_RELEASE >>~/.garage + cat </etc/garage.toml +metadata_dir = "/var/lib/garage/meta" +data_dir = "/var/lib/garage/data" +db_engine = "sqlite" +replication_factor = 1 + +rpc_bind_addr = "0.0.0.0:3901" +rpc_public_addr = "127.0.0.1:3901" +rpc_secret = "${RPC_SECRET}" + +[s3_api] +s3_region = "garage" +api_bind_addr = "0.0.0.0:3900" +root_domain = ".s3.garage" + +[s3_web] +bind_addr = "0.0.0.0:3902" +root_domain = ".web.garage" +index = "index.html" + +[k2v_api] +api_bind_addr = "0.0.0.0:3904" + +[admin] +api_bind_addr = "0.0.0.0:3903" +admin_token = "${ADMIN_TOKEN}" +metrics_token = "${METRICS_TOKEN}" +EOF + msg_ok "Configured Garage" + + msg_info "Creating Service" + cat <<'EOF' >/etc/init.d/garage +#!/sbin/openrc-run +name="Garage Object Storage" +command="/usr/local/bin/garage" +command_args="server" +command_background="yes" +pidfile="/run/garage.pid" +depend() { + need net +} +EOF + + chmod +x /etc/init.d/garage + $STD rc-update add garage default + $STD rc-service garage restart || rc-service garage start + msg_ok "Service active" +} + +run_os_setup motd_ssh customize diff --git a/install/gatus-install.sh b/install/gatus-install.sh index 2da993fe1..90b4c33e4 100644 --- a/install/gatus-install.sh +++ b/install/gatus-install.sh @@ -13,25 +13,26 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - ca-certificates \ - libcap2-bin -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + ca-certificates \ + libcap2-bin + msg_ok "Installed Dependencies" -setup_go -fetch_and_deploy_gh_release "gatus" "TwiN/gatus" "tarball" + setup_go + fetch_and_deploy_gh_release "gatus" "TwiN/gatus" "tarball" -msg_info "Configuring gatus" -cd /opt/gatus -$STD go mod tidy -CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . -setcap CAP_NET_RAW+ep gatus -mv config.yaml config -msg_ok "Configured gatus" + msg_info "Configuring gatus" + cd /opt/gatus + $STD go mod tidy + CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . + setcap CAP_NET_RAW+ep gatus + mv config.yaml config + msg_ok "Configured gatus" -msg_info "Creating Service" -cat </etc/systemd/system/gatus.service + msg_info "Creating Service" + cat </etc/systemd/system/gatus.service [Unit] Description=gatus Service After=network.target @@ -46,8 +47,63 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now gatus -msg_ok "Created Service" + systemctl enable -q --now gatus + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing dependencies" + $STD apk add --no-cache \ + ca-certificates \ + libcap-setcap + $STD apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community go + msg_ok "Installed dependencies" + + RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + msg_info "Installing gatus v${RELEASE}" + temp_file=$(mktemp) + mkdir -p /opt/gatus + curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" + tar zxf "$temp_file" --strip-components=1 -C /opt/gatus + cd /opt/gatus + $STD go mod tidy + CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . + setcap CAP_NET_RAW+ep gatus + mv config.yaml config + echo "${RELEASE}" >/opt/gatus_version.txt + msg_ok "Installed gatus v${RELEASE}" + + msg_info "Enabling gatus Service" + cat </etc/init.d/gatus +#!/sbin/openrc-run +description="gatus Service" +directory="/opt/gatus" +command="/opt/gatus/gatus" +command_args="" +command_background="true" +command_user="root" +pidfile="/var/run/gatus.pid" + +export GATUS_CONFIG_PATH="" +export GATUS_LOG_LEVEL="INFO" +export PORT="8080" + +depend() { + use net +} +EOF + chmod +x /etc/init.d/gatus + $STD rc-update add gatus default + msg_ok "Enabled gatus Service" + + msg_info "Starting gatus" + $STD service gatus start + msg_ok "Started gatus" + + rm -f "$temp_file" +} + +run_os_setup motd_ssh customize diff --git a/install/gitea-install.sh b/install/gitea-install.sh index 83da30c41..4e0da848b 100644 --- a/install/gitea-install.sh +++ b/install/gitea-install.sh @@ -14,27 +14,28 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - git \ - sqlite3 -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + git \ + sqlite3 + msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-$(arch_resolve)" + fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-$(arch_resolve)" -msg_info "Configuring Gitea" -chmod +x /usr/local/bin/gitea -$STD adduser --system --group --disabled-password --shell /bin/bash --home /etc/gitea gitea -mkdir -p /var/lib/gitea/{custom,data,log} -chown -R gitea:gitea /var/lib/gitea/ -chmod -R 750 /var/lib/gitea/ -chown root:gitea /etc/gitea -chmod 770 /etc/gitea -sudo -u gitea ln -s /var/lib/gitea/data/.ssh/ /etc/gitea/.ssh -msg_ok "Configured Gitea" + msg_info "Configuring Gitea" + chmod +x /usr/local/bin/gitea + $STD adduser --system --group --disabled-password --shell /bin/bash --home /etc/gitea gitea + mkdir -p /var/lib/gitea/{custom,data,log} + chown -R gitea:gitea /var/lib/gitea/ + chmod -R 750 /var/lib/gitea/ + chown root:gitea /etc/gitea + chmod 770 /etc/gitea + sudo -u gitea ln -s /var/lib/gitea/data/.ssh/ /etc/gitea/.ssh + msg_ok "Configured Gitea" -msg_info "Creating Service" -cat </etc/systemd/system/gitea.service + msg_info "Creating Service" + cat </etc/systemd/system/gitea.service [Unit] Description=Gitea (Git with a cup of tea) After=syslog.target @@ -64,8 +65,25 @@ Environment=USER=gitea HOME=/var/lib/gitea/data GITEA_WORK_DIR=/var/lib/gitea [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now gitea -msg_ok "Created Service" + systemctl enable -q --now gitea + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Gitea" + $STD apk add --no-cache gitea + msg_ok "Installed Gitea" + + msg_info "Enabling Gitea Service" + $STD rc-update add gitea default + msg_ok "Enabled Gitea Service" + + msg_info "Starting Gitea" + $STD service gitea start + msg_ok "Started Gitea" +} + +run_os_setup motd_ssh customize diff --git a/install/grafana-install.sh b/install/grafana-install.sh index 964c75f67..b33c750f1 100644 --- a/install/grafana-install.sh +++ b/install/grafana-install.sh @@ -13,23 +13,36 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y apt-transport-https -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y apt-transport-https + msg_ok "Installed Dependencies" -msg_info "Setting up Grafana Repository" -setup_deb822_repo \ - "grafana" \ - "https://apt.grafana.com/gpg.key" \ - "https://apt.grafana.com" \ - "stable" \ - "main" -msg_ok "Grafana Repository setup sucessfully" + msg_info "Setting up Grafana Repository" + setup_deb822_repo \ + "grafana" \ + "https://apt.grafana.com/gpg.key" \ + "https://apt.grafana.com" \ + "stable" \ + "main" + msg_ok "Grafana Repository setup sucessfully" -msg_info "Installing Grafana" -$STD apt install -y grafana -systemctl enable -q --now grafana-server -msg_ok "Installed Grafana" + msg_info "Installing Grafana" + $STD apt install -y grafana + systemctl enable -q --now grafana-server + msg_ok "Installed Grafana" +} + +setup_alpine() { + msg_info "Installing Grafana" + $STD apk add grafana + $STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/grafana + $STD rc-service grafana start + $STD rc-update add grafana default + msg_ok "Installed Grafana" +} + +run_os_setup motd_ssh customize diff --git a/install/ironclaw-install.sh b/install/ironclaw-install.sh index b1ba733bf..f88875e5e 100644 --- a/install/ironclaw-install.sh +++ b/install/ironclaw-install.sh @@ -13,30 +13,31 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - dbus-user-session \ - gnome-keyring \ - libsecret-tools -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + dbus-user-session \ + gnome-keyring \ + libsecret-tools + msg_ok "Installed Dependencies" -PG_VERSION="17" PG_MODULES="pgvector" setup_postgresql -PG_DB_NAME="ironclaw" PG_DB_USER="ironclaw" PG_DB_EXTENSIONS="vector" setup_postgresql_db + PG_VERSION="17" PG_MODULES="pgvector" setup_postgresql + PG_DB_NAME="ironclaw" PG_DB_USER="ironclaw" PG_DB_EXTENSIONS="vector" setup_postgresql_db -fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "ironclaw-v0.29.1" "/usr/local/bin" \ - "ironclaw-$(uname -m)-unknown-linux-gnu.tar.gz" -chmod +x /usr/local/bin/ironclaw + fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "ironclaw-v0.29.1" "/usr/local/bin" \ + "ironclaw-$(uname -m)-unknown-linux-gnu.tar.gz" + chmod +x /usr/local/bin/ironclaw -msg_info "Configuring Environment" -GATEWAY_TOKEN=$(openssl rand -hex 32) -mkdir -p /root/.ironclaw -cat </root/.ironclaw/gateway.creds + msg_info "Configuring Environment" + GATEWAY_TOKEN=$(openssl rand -hex 32) + mkdir -p /root/.ironclaw + cat </root/.ironclaw/gateway.creds Gateway-Token Token: $GATEWAY_TOKEN EOF -mkdir -p /root/.ironclaw -cat </root/.ironclaw/.env + mkdir -p /root/.ironclaw + cat </root/.ironclaw/.env DATABASE_BACKEND=postgres DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}?sslmode=disable GATEWAY_ENABLED=true @@ -46,26 +47,26 @@ GATEWAY_AUTH_TOKEN=${GATEWAY_TOKEN} CLI_ENABLED=false RUST_LOG=ironclaw=info,tower_http=info EOF -chmod 600 /root/.ironclaw/.env -msg_ok "Configured Environment" + chmod 600 /root/.ironclaw/.env + msg_ok "Configured Environment" -msg_info "Configuring IronClaw" -# Set values in the database since it is typically the true source of truth and ensures values are set correctly on first run before the service starts. -/usr/local/bin/ironclaw --no-onboard config set database_backend postgres >/dev/null -/usr/local/bin/ironclaw --no-onboard config set database_url "postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}?sslmode=disable" >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_enabled true >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_host 0.0.0.0 >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_port 3000 >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_auth_token "${GATEWAY_TOKEN}" >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.cli_enabled false >/dev/null -/usr/local/bin/ironclaw --no-onboard config set secrets_master_key_source none >/dev/null -# Running ironclaw defaults to use env for secrets and creates this entry, but we want to set that during onboard. -sleep 5 -sed -i '/SECRETS_MASTER_KEY/d' /root/.ironclaw/.env -msg_ok "Configured IronClaw" + msg_info "Configuring IronClaw" + # Set values in the database since it is typically the true source of truth and ensures values are set correctly on first run before the service starts. + /usr/local/bin/ironclaw --no-onboard config set database_backend postgres >/dev/null + /usr/local/bin/ironclaw --no-onboard config set database_url "postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}?sslmode=disable" >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_enabled true >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_host 0.0.0.0 >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_port 3000 >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_auth_token "${GATEWAY_TOKEN}" >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.cli_enabled false >/dev/null + /usr/local/bin/ironclaw --no-onboard config set secrets_master_key_source none >/dev/null + # Running ironclaw defaults to use env for secrets and creates this entry, but we want to set that during onboard. + sleep 5 + sed -i '/SECRETS_MASTER_KEY/d' /root/.ironclaw/.env + msg_ok "Configured IronClaw" -msg_info "Creating Service" -cat </etc/systemd/system/ironclaw.service + msg_info "Creating Service" + cat </etc/systemd/system/ironclaw.service [Unit] Description=IronClaw AI Agent After=network.target postgresql.service @@ -79,8 +80,93 @@ RestartSec=5 [Install] WantedBy=multi-user.target EOF -systemctl enable -q ironclaw -msg_ok "Created Service" + systemctl enable -q ironclaw + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add openssl dbus gnome-keyring + msg_ok "Installed Dependencies" + + msg_info "Installing PostgreSQL" + $STD apk add postgresql17 postgresql17-openrc postgresql-pgvector postgresql-common + $STD rc-service postgresql setup + $STD rc-update add postgresql default + $STD rc-service postgresql start + msg_ok "Installed PostgreSQL" + + msg_info "Setting up Database" + PG_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13) + $STD su -s /bin/sh postgres -c "psql -c \"CREATE ROLE ironclaw WITH LOGIN PASSWORD '${PG_PASS}';\"" + $STD su -s /bin/sh postgres -c "psql -c \"CREATE DATABASE ironclaw WITH OWNER ironclaw;\"" + $STD su -s /bin/sh postgres -c "psql -d ironclaw -c \"CREATE EXTENSION IF NOT EXISTS vector;\"" + msg_ok "Set up Database" + + fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "ironclaw-v0.29.1" "/usr/local/bin" \ + "ironclaw-$(uname -m)-unknown-linux-musl.tar.gz" + chmod +x /usr/local/bin/ironclaw + + msg_info "Configuring Environment" + GATEWAY_TOKEN=$(openssl rand -hex 32) + mkdir -p /root/.ironclaw + cat </root/.ironclaw/gateway.creds +Gateway-Token +Token: $GATEWAY_TOKEN +EOF + + mkdir -p /root/.ironclaw + cat </root/.ironclaw/.env +DATABASE_BACKEND=postgres +DATABASE_URL=postgresql://ironclaw:${PG_PASS}@localhost:5432/ironclaw?sslmode=disable +GATEWAY_ENABLED=true +GATEWAY_HOST=0.0.0.0 +GATEWAY_PORT=3000 +GATEWAY_AUTH_TOKEN=${GATEWAY_TOKEN} +CLI_ENABLED=false +RUST_LOG=ironclaw=info,tower_http=info +EOF + chmod 600 /root/.ironclaw/.env + msg_ok "Configured Environment" + + msg_info "Configuring IronClaw" + # Set values in the database since it is typically the true source of truth and ensures values are set correctly on first run before the service starts. + /usr/local/bin/ironclaw --no-onboard config set database_backend postgres >/dev/null + /usr/local/bin/ironclaw --no-onboard config set database_url "postgresql://ironclaw:${PG_PASS}@localhost:5432/ironclaw?sslmode=disable" >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_enabled true >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_host 0.0.0.0 >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_port 3000 >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_auth_token "${GATEWAY_TOKEN}" >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.cli_enabled false >/dev/null + /usr/local/bin/ironclaw --no-onboard config set secrets_master_key_source none >/dev/null + # Running ironclaw defaults to use env for secrets and creates this entry, but we want to set that during onboard. + sleep 5 + sed -i '/SECRETS_MASTER_KEY/d' /root/.ironclaw/.env + msg_ok "Configured IronClaw" + + msg_info "Creating Service" + cat </etc/init.d/ironclaw +#!/sbin/openrc-run + +name="IronClaw" +description="IronClaw AI Agent" +command="/usr/bin/dbus-run-session" +command_args="/usr/local/bin/ironclaw" +command_background=true +pidfile="/run/ironclaw.pid" +directory="/root" +supervise_daemon_args="--env-file /root/.ironclaw/.env" + +depend() { + need net postgresql +} +EOF + chmod +x /etc/init.d/ironclaw + $STD rc-update add ironclaw default + msg_ok "Created Service" +} + +run_os_setup motd_ssh customize diff --git a/install/jeedom-install.sh b/install/jeedom-install.sh deleted file mode 100644 index e4f307444..000000000 --- a/install/jeedom-install.sh +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: Mips2648 -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://jeedom.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing dependencies" -$STD apt install -y \ - lsb-release \ - git -msg_ok "Dependencies installed" - -msg_warn "WARNING: This script will run an external installer from a third-party source (https://github.com/jeedom/)." -msg_warn "The following code is NOT maintained or audited by our repository." -msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:" -msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "β†’ https://raw.githubusercontent.com/jeedom/core/master/install/install.sh" -echo -read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM -if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then - msg_error "Aborted by user. No changes have been made." - exit 10 -fi - -DEFAULT_BRANCH="master" -REPO_URL="https://github.com/jeedom/core.git" - -echo -while true; do - read -rp "${TAB3}Enter branch to use (master, beta, alpha...) (Default: ${DEFAULT_BRANCH}): " BRANCH - BRANCH="${BRANCH:-$DEFAULT_BRANCH}" - - if git ls-remote --heads "$REPO_URL" "refs/heads/$BRANCH" | grep -q .; then - break - else - msg_error "Branch '$BRANCH' does not exist on remote. Please try again." - fi -done - -msg_info "Downloading Jeedom installation script" -cd /tmp -wget -q https://raw.githubusercontent.com/jeedom/core/"${BRANCH}"/install/install.sh -chmod +x install.sh -msg_ok "Installation script downloaded" - -msg_info "Install Jeedom main dependencies, please wait" -$STD ./install.sh -v "$BRANCH" -s 2 -msg_ok "Installed Jeedom main dependencies" - -msg_info "Install Database" -$STD ./install.sh -v "$BRANCH" -s 3 -msg_ok "Database installed" - -msg_info "Install Apache" -$STD ./install.sh -v "$BRANCH" -s 4 -msg_ok "Apache installed" - -msg_info "Install PHP and dependencies" -$STD ./install.sh -v "$BRANCH" -s 5 -msg_ok "PHP installed" - -msg_info "Download Jeedom core" -$STD ./install.sh -v "$BRANCH" -s 6 -msg_ok "Download done" - -msg_info "Database customisation" -$STD ./install.sh -v "$BRANCH" -s 7 -msg_ok "Database customisation done" - -msg_info "Jeedom customisation" -$STD ./install.sh -v "$BRANCH" -s 8 -msg_ok "Jeedom customisation done" - -msg_info "Configuring Jeedom" -$STD ./install.sh -v "$BRANCH" -s 9 -msg_ok "Jeedom configured" - -msg_info "Installing Jeedom" -$STD ./install.sh -v "$BRANCH" -s 10 -msg_ok "Jeedom installed" - -msg_info "Post installation" -$STD ./install.sh -v "$BRANCH" -s 11 -msg_ok "Post installation done" - -msg_info "Check installation" -$STD ./install.sh -v "$BRANCH" -s 12 -msg_ok "Installation checked, everything is successfuly installed. A reboot is recommended." - -motd_ssh -customize - -rm -rf /tmp/install.sh -cleanup_lxc diff --git a/install/keycloak-install.sh b/install/keycloak-install.sh index b36a62c3f..ce0a1cfd4 100644 --- a/install/keycloak-install.sh +++ b/install/keycloak-install.sh @@ -39,7 +39,6 @@ Type=idle User=root WorkingDirectory=/opt/keycloak ExecStart=/opt/keycloak/bin/kc.sh start -ExecStop=/opt/keycloak/bin/kc.sh stop Restart=always RestartSec=3 Environment="JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-$(arch_resolve)" diff --git a/install/kometa-install.sh b/install/kometa-install.sh index b0b2e2e96..0b2e90578 100644 --- a/install/kometa-install.sh +++ b/install/kometa-install.sh @@ -13,6 +13,10 @@ setting_up_container network_check update_os +msg_info "Installing Dependencies" +$STD apt install -y git +msg_ok "Installed Dependencies" + PYTHON_VERSION="3.13" setup_uv fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa" "tarball" diff --git a/install/loki-install.sh b/install/loki-install.sh index a47a5c4e3..6066620a0 100644 --- a/install/loki-install.sh +++ b/install/loki-install.sh @@ -13,18 +13,19 @@ setting_up_container network_check update_os -setup_deb822_repo \ - "grafana" \ - "https://apt.grafana.com/gpg.key" \ - "https://apt.grafana.com" \ - "stable" \ - "main" +setup_deb_based() { + setup_deb822_repo \ + "grafana" \ + "https://apt.grafana.com/gpg.key" \ + "https://apt.grafana.com" \ + "stable" \ + "main" -msg_info "Installing Loki" -$STD apt install -y loki -mkdir -p /var/lib/loki/{chunks,boltdb-shipper-active,boltdb-shipper-cache} -chown -R loki /var/lib/loki -cat </etc/loki/config.yml + msg_info "Installing Loki" + $STD apt install -y loki + mkdir -p /var/lib/loki/{chunks,boltdb-shipper-active,boltdb-shipper-cache} + chown -R loki /var/lib/loki + cat </etc/loki/config.yml auth_enabled: false server: @@ -66,9 +67,72 @@ limits_config: ruler: alertmanager_url: http://localhost:9093 EOF -chown loki /etc/loki/config.yml -systemctl enable -q --now loki -msg_ok "Installed Loki" + chown loki /etc/loki/config.yml + systemctl enable -q --now loki + msg_ok "Installed Loki" +} + +setup_alpine() { + msg_info "Installing Loki" + $STD apk add loki + $STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/loki + mkdir -p /var/lib/loki/{chunks,boltdb-shipper-active,boltdb-shipper-cache} + chown -R loki:grafana /var/lib/loki + mkdir -p /var/log/loki + chown -R loki:grafana /var/log/loki + cat </etc/loki/loki-local-config.yaml +auth_enabled: false + +server: + http_listen_port: 3100 + log_level: info + +common: + instance_addr: 127.0.0.1 + path_prefix: /var/lib/loki + storage: + filesystem: + chunks_directory: /var/lib/loki/chunks + rules_directory: /var/lib/loki/rules + replication_factor: 1 + ring: + kvstore: + store: inmemory + +schema_config: + configs: + - from: 2020-10-24 + store: tsdb + object_store: filesystem + schema: v13 + index: + prefix: index_ + period: 24h + +query_range: + results_cache: + cache: + embedded_cache: + enabled: true + max_size_mb: 100 + +limits_config: + metric_aggregation_enabled: true + +ruler: + alertmanager_url: http://localhost:9093 +EOF + chown loki:grafana /etc/loki/loki-local-config.yaml + chmod 644 /etc/loki/loki-local-config.yaml + echo "output_log=\"\${output_log:-/var/log/loki/output.log}\"" >> /etc/init.d/loki + echo "error_log=\"\${error_log:-/var/log/loki/error.log}\"" >> /etc/init.d/loki + echo "start_stop_daemon_args=\"\${SSD_OPTS} -1 \${output_log} -2 \${error_log}\"" >> /etc/init.d/loki + $STD rc-update add loki default + $STD rc-service loki start + msg_ok "Installed Loki" +} + +run_os_setup motd_ssh customize diff --git a/install/mariadb-install.sh b/install/mariadb-install.sh index 242611ebf..8a5d200fc 100644 --- a/install/mariadb-install.sh +++ b/install/mariadb-install.sh @@ -13,37 +13,87 @@ setting_up_container network_check update_os -setup_mariadb +setup_deb_based() { + setup_mariadb -msg_info "Setup MariaDB" -sed -i 's/^# *\(port *=.*\)/\1/' /etc/mysql/my.cnf -sed -i 's/^bind-address/#bind-address/g' /etc/mysql/mariadb.conf.d/50-server.cnf -msg_ok "Setup MariaDB" + msg_info "Setup MariaDB" + sed -i 's/^# *\(port *=.*\)/\1/' /etc/mysql/my.cnf + sed -i 's/^bind-address/#bind-address/g' /etc/mysql/mariadb.conf.d/50-server.cnf + msg_ok "Setup MariaDB" -read -r -p "${TAB3}Would you like to add PhpMyAdmin? " prompt -if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - msg_info "Installing phpMyAdmin" - $STD apt install -y \ - apache2 \ - php \ - php-mysqli \ - php-mbstring \ - php-zip \ - php-gd \ - php-json \ - php-curl + read -r -p "${TAB3}Would you like to add PhpMyAdmin? " prompt + if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing phpMyAdmin" + $STD apt install -y \ + apache2 \ + php \ + php-mysqli \ + php-mbstring \ + php-zip \ + php-gd \ + php-json \ + php-curl - curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.2/phpMyAdmin-5.2.2-all-languages.tar.gz" -o "phpMyAdmin-5.2.2-all-languages.tar.gz" - mkdir -p /var/www/html/phpMyAdmin - tar xf phpMyAdmin-5.2.2-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin - cp /var/www/html/phpMyAdmin/config.sample.inc.php /var/www/html/phpMyAdmin/config.inc.php - SECRET=$(openssl rand -base64 24) - sed -i "s#\$cfg\['blowfish_secret'\] = '';#\$cfg['blowfish_secret'] = '${SECRET}';#" /var/www/html/phpMyAdmin/config.inc.php - chmod 660 /var/www/html/phpMyAdmin/config.inc.php - chown -R www-data:www-data /var/www/html/phpMyAdmin - systemctl restart apache2 - msg_ok "Installed phpMyAdmin" -fi + curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.2/phpMyAdmin-5.2.2-all-languages.tar.gz" -o "phpMyAdmin-5.2.2-all-languages.tar.gz" + mkdir -p /var/www/html/phpMyAdmin + tar xf phpMyAdmin-5.2.2-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin + cp /var/www/html/phpMyAdmin/config.sample.inc.php /var/www/html/phpMyAdmin/config.inc.php + SECRET=$(openssl rand -base64 24) + sed -i "s#\$cfg\['blowfish_secret'\] = '';#\$cfg['blowfish_secret'] = '${SECRET}';#" /var/www/html/phpMyAdmin/config.inc.php + chmod 660 /var/www/html/phpMyAdmin/config.inc.php + chown -R www-data:www-data /var/www/html/phpMyAdmin + systemctl restart apache2 + msg_ok "Installed phpMyAdmin" + fi +} + +setup_alpine() { + msg_info "Installing MariaDB" + $STD apk add --no-cache mariadb mariadb-client + $STD rc-update add mariadb default + msg_ok "Installed MariaDB" + + msg_info "Configuring MariaDB" + mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql >/dev/null 2>&1 + $STD rc-service mariadb start + msg_ok "MariaDB Configured" + + read -r -p "${TAB3}Would you like to install Adminer with lighttpd? : " prompt + if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing Adminer and dependencies" + $STD apk add --no-cache \ + lighttpd \ + lighttpd-openrc \ + php83 \ + php83-cgi \ + php83-common \ + php83-curl \ + php83-gd \ + php83-mbstring \ + php83-mysqli \ + php83-mysqlnd \ + php83-openssl \ + php83-zip \ + php83-session \ + jq + + sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf + sed -i 's|/usr/bin/php-cgi|/usr/bin/php-cgi83|g' /etc/lighttpd/mod_fastcgi.conf + mkdir -p /var/www/localhost/htdocs + ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//') + curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php + chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php + chmod 755 /var/www/localhost/htdocs/adminer.php + msg_ok "Adminer Installed" + + msg_info "Starting Lighttpd" + $STD rc-update add lighttpd default + $STD rc-service lighttpd restart + msg_ok "Lighttpd Started" + fi +} + +run_os_setup motd_ssh customize diff --git a/install/mealie-install.sh b/install/mealie-install.sh index f29ea36b4..137b38622 100644 --- a/install/mealie-install.sh +++ b/install/mealie-install.sh @@ -48,6 +48,7 @@ $STD sed -i "s|value: data.buildId,|value: \"v${MEALIE_VERSION}\",|g" "$SITE_SET $STD sed -i "s|value: data.production ? i18n.t(\"about.production\") : i18n.t(\"about.development\"),|value: \"bare-metal\",|g" "$SITE_SETTINGS" $STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000 $STD yarn generate +$STD yarn cache clean msg_ok "Built Frontend" msg_info "Copying Built Frontend" diff --git a/install/networkoptimizer-install.sh b/install/networkoptimizer-install.sh index 8f98c672e..88905f29a 100644 --- a/install/networkoptimizer-install.sh +++ b/install/networkoptimizer-install.sh @@ -42,11 +42,12 @@ $STD dotnet publish src/NetworkOptimizer.Web -c Release -r "$RID" --self-contain chmod +x /opt/networkoptimizer/publish/NetworkOptimizer.Web msg_ok "Built NetworkOptimizer" -msg_info "Building Gateway Speed Test Binary" +msg_info "Building Speed Test Binaries" mkdir -p /opt/networkoptimizer/publish/tools cd /opt/networkoptimizer/src/uwnspeedtest CGO_ENABLED=0 GOOS=linux GOARCH=arm64 $STD go build -trimpath -ldflags "-s -w" -o /opt/networkoptimizer/publish/tools/uwnspeedtest-linux-arm64 . -msg_ok "Built Gateway Speed Test Binary" +[[ "$(arch_resolve)" != "arm64" ]] && CGO_ENABLED=0 GOOS=linux GOARCH="$(arch_resolve)" $STD go build -trimpath -ldflags "-s -w" -o "/opt/networkoptimizer/publish/tools/uwnspeedtest-linux-$(arch_resolve)" . +msg_ok "Built Speed Test Binaries" msg_info "Configuring NetworkOptimizer" cat </opt/networkoptimizer/networkoptimizer.env diff --git a/install/nocodb-install.sh b/install/nocodb-install.sh deleted file mode 100644 index 7ac0a98ce..000000000 --- a/install/nocodb-install.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.nocodb.com/ | Github: https://github.com/nocodb/nocodb - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -fetch_and_deploy_gh_release "nocodb" "nocodb/nocodb" "singlefile" "latest" "/opt/nocodb/" "Noco-linux-$(arch_resolve "x64" "arm64")" - -msg_info "Creating Service" -cat </etc/systemd/system/nocodb.service -[Unit] -Description=nocodb - -[Service] -Type=simple -Restart=always -User=root -WorkingDirectory=/opt/nocodb -ExecStart=/opt/nocodb/./nocodb - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now nocodb -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc diff --git a/install/node-red-install.sh b/install/node-red-install.sh index 5f8f25fe5..b9266d5ac 100644 --- a/install/node-red-install.sh +++ b/install/node-red-install.sh @@ -13,48 +13,99 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - git \ - ca-certificates -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + git \ + ca-certificates + msg_ok "Installed Dependencies" -NODE_VERSION="22" setup_nodejs + NODE_VERSION="22" setup_nodejs -msg_info "Installing Node-Red" -$STD npm install -g --unsafe-perm node-red -echo "journalctl -f -n 100 -u nodered -o cat" >/usr/bin/node-red-log -chmod +x /usr/bin/node-red-log -echo "systemctl stop nodered" >/usr/bin/node-red-stop -chmod +x /usr/bin/node-red-stop -echo "systemctl start nodered" >/usr/bin/node-red-start -chmod +x /usr/bin/node-red-start -echo "systemctl restart nodered" >/usr/bin/node-red-restart -chmod +x /usr/bin/node-red-restart -msg_ok "Installed Node-Red" + msg_info "Installing Node-Red" + $STD npm install -g --unsafe-perm node-red + echo "journalctl -f -n 100 -u nodered -o cat" >/usr/bin/node-red-log + chmod +x /usr/bin/node-red-log + echo "systemctl stop nodered" >/usr/bin/node-red-stop + chmod +x /usr/bin/node-red-stop + echo "systemctl start nodered" >/usr/bin/node-red-start + chmod +x /usr/bin/node-red-start + echo "systemctl restart nodered" >/usr/bin/node-red-restart + chmod +x /usr/bin/node-red-restart + msg_ok "Installed Node-Red" -msg_info "Creating Service" -service_path="/etc/systemd/system/nodered.service" -echo "[Unit] -Description=Node-RED -After=syslog.target network.target + msg_info "Creating Service" + service_path="/etc/systemd/system/nodered.service" + echo "[Unit] + Description=Node-RED + After=syslog.target network.target -[Service] -ExecStart=/usr/bin/node-red --max-old-space-size=128 -v -Restart=on-failure -KillSignal=SIGINT + [Service] + ExecStart=/usr/bin/node-red --max-old-space-size=128 -v + Restart=on-failure + KillSignal=SIGINT -SyslogIdentifier=node-red -StandardOutput=syslog + SyslogIdentifier=node-red + StandardOutput=syslog -WorkingDirectory=/root/ -User=root -Group=root + WorkingDirectory=/root/ + User=root + Group=root -[Install] -WantedBy=multi-user.target" >$service_path -systemctl enable -q --now nodered -msg_ok "Created Service" + [Install] + WantedBy=multi-user.target" >$service_path + systemctl enable -q --now nodered + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add --no-cache \ + git \ + nodejs \ + npm + msg_ok "Installed Dependencies" + + msg_info "Creating Node-RED User" + adduser -D -H -s /sbin/nologin -G users nodered + msg_ok "Created Node-RED User" + + msg_info "Installing Node-RED" + $STD npm install -g --unsafe-perm node-red + msg_ok "Installed Node-RED" + + msg_info "Creating /home/nodered" + mkdir -p /home/nodered + chown -R nodered:users /home/nodered + chmod 750 /home/nodered + msg_ok "Created /home/nodered" + + msg_info "Creating Node-RED Service" + service_path="/etc/init.d/nodered" + + echo '#!/sbin/openrc-run + description="Node-RED Service" + + command="/usr/local/bin/node-red" + command_args="--max-old-space-size=128 -v" + command_user="nodered" + pidfile="/var/run/nodered.pid" + command_background="yes" + + depend() { + use net + }' >$service_path + + chmod +x $service_path + msg_ok "Created Node-RED Service" + + msg_info "Starting Node-RED" + $STD rc-update add nodered + $STD rc-service nodered start + msg_ok "Started Node-RED" +} + +run_os_setup motd_ssh customize diff --git a/install/ntfy-install.sh b/install/ntfy-install.sh index dbbac4af6..18b55e0d2 100644 --- a/install/ntfy-install.sh +++ b/install/ntfy-install.sh @@ -13,15 +13,29 @@ setting_up_container network_check update_os -msg_info "Setting up ntfy" -setup_deb822_repo \ - "ntfy" \ - "https://archive.ntfy.sh/apt/keyring.gpg" \ - "https://archive.ntfy.sh/apt/" \ - "stable" -$STD apt install -y ntfy -systemctl enable -q --now ntfy -msg_ok "Setup ntfy" +setup_deb_based() { + msg_info "Setting up ntfy" + setup_deb822_repo \ + "ntfy" \ + "https://archive.ntfy.sh/apt/keyring.gpg" \ + "https://archive.ntfy.sh/apt/" \ + "stable" + $STD apt install -y ntfy + systemctl enable -q --now ntfy + msg_ok "Setup ntfy" +} + +setup_alpine() { + msg_info "Installing ntfy" + $STD apk add --no-cache ntfy ntfy-openrc libcap + sed -i '/^listen-http/s/^\(.*\)$/#\1\n/' /etc/ntfy/server.yml + setcap 'cap_net_bind_service=+ep' /usr/bin/ntfy + $STD rc-update add ntfy default + $STD service ntfy start + msg_ok "Installed ntfy" +} + +run_os_setup motd_ssh customize diff --git a/install/ntopng-install.sh b/install/ntopng-install.sh new file mode 100644 index 000000000..6538e004e --- /dev/null +++ b/install/ntopng-install.sh @@ -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://www.ntop.org/products/traffic-analysis/ntop/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +fetch_and_deploy_from_url "https://packages.ntop.org/apt-stable/$(get_os_info codename)/all/apt-ntop-stable.deb" "" + +msg_info "Installing ntopng" +$STD apt update +$STD apt install -y ntopng +msg_ok "Installed ntopng" + +msg_info "Configuring ntopng" +cat </etc/ntopng/ntopng.conf +-i=$(ip -4 route | awk '/default/ {print $5; exit}') +-w=3000 +-d=/var/lib/ntopng +--community +EOF +systemctl restart ntopng +msg_ok "Configured ntopng" + +motd_ssh +customize +cleanup_lxc diff --git a/install/odoo-install.sh b/install/odoo-install.sh index 8955a4baf..621084483 100644 --- a/install/odoo-install.sh +++ b/install/odoo-install.sh @@ -14,11 +14,13 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt install -y python3-lxml wkhtmltopdf +$STD apt install -y python3-lxml curl -fsSL --proto '=https' "https://archive.ubuntu.com/ubuntu/pool/universe/l/lxml-html-clean/python3-lxml-html-clean_0.1.1-1_all.deb" -o /opt/python3-lxml-html-clean.deb $STD dpkg -i /opt/python3-lxml-html-clean.deb msg_ok "Installed Dependencies" +fetch_and_deploy_gh_release "wkhtmltopdf" "wkhtmltopdf/packaging" "binary" "latest" "" "wkhtmltox_*.bookworm_$(arch_resolve).deb" + PG_VERSION="18" setup_postgresql RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1) diff --git a/install/ownfoil-install.sh b/install/ownfoil-install.sh index 6717cfbe4..202c1f174 100644 --- a/install/ownfoil-install.sh +++ b/install/ownfoil-install.sh @@ -18,7 +18,7 @@ $STD apt install -y git msg_ok "Installed Dependencies" setup_uv -fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball" +fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball" "2.3.0" msg_info "Setting up Ownfoil" cd /opt/ownfoil diff --git a/install/patchmon-install.sh b/install/patchmon-install.sh index 68bf8a82d..b3627274d 100644 --- a/install/patchmon-install.sh +++ b/install/patchmon-install.sh @@ -86,7 +86,13 @@ for arch in "${AGENT_NAME[@]}"; do done msg_ok "Fetched PatchMon agent binaries" -fetch_and_deploy_gh_release "ssg-content" "ComplianceAsCode/content" "prebuild" "latest" "/opt/patchmon/ssg-content" "scap-security-guide-*.tar.gz" +msg_info "Fetching SCAP Content" +RELEASE=$(get_latest_github_release "ComplianceAsCode/content") +curl_with_retry "https://github.com/ComplianceAsCode/content/releases/download/v${RELEASE}/scap-security-guide-${RELEASE}.tar.gz" "/tmp/ssg.tar.gz" +mkdir -p /opt/patchmon/ssg-content +tar -xzf /tmp/ssg.tar.gz -C /opt/patchmon/ssg-content --strip-components=1 --wildcards '*/ssg-*-ds.xml' +rm -f /tmp/ssg.tar.gz +msg_ok "Fetched SCAP Content" msg_info "Creating service" cat </etc/systemd/system/patchmon-server.service diff --git a/install/postgresql-install.sh b/install/postgresql-install.sh index bc4e094a3..d6b6cd11a 100644 --- a/install/postgresql-install.sh +++ b/install/postgresql-install.sh @@ -13,14 +13,15 @@ setting_up_container network_check update_os -read -r -p "${TAB3}Enter PostgreSQL version (15/16/17/18): " ver -[[ $ver =~ ^(15|16|17|18)$ ]] || { - echo "Invalid version" - exit 64 -} -PG_VERSION=$ver setup_postgresql +setup_deb_based() { + read -r -p "${TAB3}Enter PostgreSQL version (15/16/17/18): " ver + [[ $ver =~ ^(15|16|17|18)$ ]] || { + echo "Invalid version" + exit 64 + } + PG_VERSION=$ver setup_postgresql -cat </etc/postgresql/$ver/main/pg_hba.conf + cat </etc/postgresql/$ver/main/pg_hba.conf # PostgreSQL Client Authentication Configuration File local all postgres peer # TYPE DATABASE USER ADDRESS METHOD @@ -39,7 +40,7 @@ host replication all 127.0.0.1/32 scram-sha-256 host replication all ::1/128 scram-sha-256 EOF -cat </etc/postgresql/$ver/main/postgresql.conf + cat </etc/postgresql/$ver/main/postgresql.conf # ----------------------------- # PostgreSQL configuration file # ----------------------------- @@ -120,17 +121,79 @@ default_text_search_config = 'pg_catalog.english' include_dir = 'conf.d' EOF -systemctl restart postgresql -msg_ok "Installed PostgreSQL" + systemctl restart postgresql + msg_ok "Installed PostgreSQL" -read -r -p "${TAB3}Would you like to add Adminer? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Installing Adminer" - $STD apt install -y adminer - $STD a2enconf adminer - systemctl reload apache2 - msg_ok "Installed Adminer" -fi + read -r -p "${TAB3}Would you like to add Adminer? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + msg_info "Installing Adminer" + $STD apt install -y adminer + $STD a2enconf adminer + systemctl reload apache2 + msg_ok "Installed Adminer" + fi +} + +setup_alpine() { + read -r -p "${TAB3}Enter PostgreSQL version (15/16/17): " ver + [[ $ver =~ ^(15|16|17)$ ]] || { echo "Invalid version"; exit 64; } + + msg_info "Installing PostgreSQL ${ver}" + $STD apk add --no-cache postgresql${ver} postgresql${ver}-contrib postgresql${ver}-openrc sudo + msg_ok "Installed PostgreSQL ${ver}" + + msg_info "Enabling PostgreSQL Service" + $STD rc-update add postgresql default + msg_ok "Enabled PostgreSQL Service" + + msg_info "Starting PostgreSQL" + $STD rc-service postgresql start + msg_ok "Started PostgreSQL" + + msg_info "Configuring PostgreSQL for External Access" + conf_file="/etc/postgresql${ver}/postgresql.conf" + hba_file="/etc/postgresql${ver}/pg_hba.conf" + sed -i 's/^#listen_addresses =.*/listen_addresses = '\''*'\''/' "$conf_file" + sed -i '/^host\s\+all\s\+all\s\+127.0.0.1\/32\s\+md5/ s/.*/host all all 0.0.0.0\/0 md5/' "$hba_file" + $STD rc-service postgresql restart + msg_ok "Configured and Restarted PostgreSQL" + + read -r -p "${TAB3}Would you like to install Adminer with lighttpd? : " prompt + if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing Adminer and dependencies" + $STD apk add --no-cache \ + lighttpd \ + lighttpd-openrc \ + php83 \ + php83-cgi \ + php83-common \ + php83-curl \ + php83-gd \ + php83-mbstring \ + php83-pdo \ + php83-pgsql \ + php83-openssl \ + php83-zip \ + php83-session \ + jq + + sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf + sed -i 's|/usr/bin/php-cgi|/usr/bin/php-cgi83|g' /etc/lighttpd/mod_fastcgi.conf + mkdir -p /var/www/localhost/htdocs + ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//') + curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php + chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php + chmod 755 /var/www/localhost/htdocs/adminer.php + msg_ok "Adminer Installed" + + msg_info "Starting Lighttpd" + $STD rc-update add lighttpd default + $STD rc-service lighttpd restart + msg_ok "Lighttpd Started" + fi +} + +run_os_setup motd_ssh customize diff --git a/install/prometheus-install.sh b/install/prometheus-install.sh index 3dee5990c..95ff2b694 100644 --- a/install/prometheus-install.sh +++ b/install/prometheus-install.sh @@ -13,16 +13,17 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-$(arch_resolve).tar.gz" +setup_deb_based() { + fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-$(arch_resolve).tar.gz" -msg_info "Installing Prometheus" -mkdir -p /etc/prometheus -mkdir -p /var/lib/prometheus -mv /usr/local/bin/prometheus.yml /etc/prometheus/prometheus.yml -msg_ok "Installed Prometheus" + msg_info "Installing Prometheus" + mkdir -p /etc/prometheus + mkdir -p /var/lib/prometheus + mv /usr/local/bin/prometheus.yml /etc/prometheus/prometheus.yml + msg_ok "Installed Prometheus" -msg_info "Creating Service" -cat <<'EOF' >/etc/systemd/system/prometheus.service + msg_info "Creating Service" + cat <<'EOF' >/etc/systemd/system/prometheus.service [Unit] Description=Prometheus Wants=network-online.target @@ -41,8 +42,25 @@ ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now prometheus -msg_ok "Created Service" + systemctl enable -q --now prometheus + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Prometheus" + $STD apk add --no-cache prometheus + msg_ok "Installed Prometheus" + + msg_info "Enabling Prometheus Service" + $STD rc-update add prometheus default + msg_ok "Enabled Prometheus Service" + + msg_info "Starting Prometheus" + $STD service prometheus start + msg_ok "Started Prometheus" +} + +run_os_setup motd_ssh customize diff --git a/install/rclone-install.sh b/install/rclone-install.sh index af3305a4c..a845760b5 100644 --- a/install/rclone-install.sh +++ b/install/rclone-install.sh @@ -13,25 +13,26 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y apache2-utils fuse3 -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y apache2-utils fuse3 + msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-$(arch_resolve).zip" + fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-$(arch_resolve).zip" -msg_info "Installing rclone" -cd /opt/rclone -RCLONE_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) -$STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD" -cat <~/rclone.creds + msg_info "Installing rclone" + cd /opt/rclone + RCLONE_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) + $STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD" + cat <~/rclone.creds rclone-Credentials rclone User Name: admin rclone Password: $RCLONE_PASSWORD EOF -msg_ok "Installed rclone" + msg_ok "Installed rclone" -msg_info "Creating Service" -cat </etc/systemd/system/rclone-web.service + msg_info "Creating Service" + cat </etc/systemd/system/rclone-web.service [Unit] Description=Rclone Web GUI After=network-online.target @@ -46,8 +47,60 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now rclone-web -msg_ok "Created Service" + systemctl enable -q --now rclone-web + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing dependencies" + $STD apk add --no-cache \ + apache2-utils fuse3 + msg_ok "Installed dependencies" + + msg_info "Installing rclone" + temp_file=$(mktemp) + mkdir -p /opt/rclone + RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-$(arch_resolve).zip" -o "$temp_file" + $STD unzip -j "$temp_file" '*/**' -d /opt/rclone + cd /opt/rclone + RCLONE_PASSWORD=$(head -c 16 /dev/urandom | xxd -p -c 16) + $STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD" + cat <~/rclone.creds +rclone-Credentials +rclone User Name: admin +rclone Password: $RCLONE_PASSWORD +EOF + echo "${RELEASE}" >/opt/rclone_version.txt + rm -f "$temp_file" + msg_ok "Installed rclone" + + msg_info "Enabling rclone Service" + cat </etc/init.d/rclone +#!/sbin/openrc-run +description="rclone Service" +command="/opt/rclone/rclone" +command_args="rcd --rc-web-gui --rc-web-gui-no-open-browser --rc-addr :3000 --rc-htpasswd /opt/login.pwd" +command_background="true" +command_user="root" +pidfile="/var/run/rclone.pid" + +depend() { + use net +} +EOF + chmod +x /etc/init.d/rclone + $STD rc-update add rclone default + msg_ok "Enabled rclone Service" + + msg_info "Starting rclone" + $STD service rclone start + msg_ok "Started rclone" + + rm -rf "$temp_file" +} + +run_os_setup motd_ssh customize diff --git a/install/redis-install.sh b/install/redis-install.sh index 09b02db67..0ba452994 100644 --- a/install/redis-install.sh +++ b/install/redis-install.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) +# Author: tteck (tteckster) | MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://redis.io/ @@ -13,23 +13,36 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y apt-transport-https -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y apt-transport-https + msg_ok "Installed Dependencies" -msg_info "Setting up Redis Repository" -setup_deb822_repo \ - "redis" \ - "https://packages.redis.io/gpg" \ - "https://packages.redis.io/deb" \ - "trixie" -msg_ok "Setup Redis Repository" + msg_info "Setting up Redis Repository" + setup_deb822_repo \ + "redis" \ + "https://packages.redis.io/gpg" \ + "https://packages.redis.io/deb" \ + "trixie" + msg_ok "Setup Redis Repository" -msg_info "Setting up Redis" -$STD apt install -y redis -sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis/redis.conf -systemctl enable -q --now redis-server -msg_ok "Setup Redis" + msg_info "Setting up Redis" + $STD apt install -y redis + sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis/redis.conf + systemctl enable -q --now redis-server + msg_ok "Setup Redis" +} + +setup_alpine() { + msg_info "Installing Redis" + $STD apk add redis + $STD sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf + $STD rc-update add redis default + $STD rc-service redis start + msg_ok "Installed Redis" +} + +run_os_setup motd_ssh customize diff --git a/install/romm-install.sh b/install/romm-install.sh index a9ba78ccd..a9f46eec1 100644 --- a/install/romm-install.sh +++ b/install/romm-install.sh @@ -42,16 +42,40 @@ $STD apt install -y \ tzdata msg_ok "Installed Dependencies" -msg_info "Installing Angie with mod_zip module" +msg_info "Installing Angie with mod_zip and njs modules" setup_deb822_repo \ "angie" \ "https://angie.software/keys/angie-signing.gpg" \ "https://download.angie.software/angie/debian/$(get_os_info version_id)" \ "$(get_os_info codename)" \ "main" -$STD apt-get install -y angie angie-module-zip -sed -i '1i load_module modules/ngx_http_zip_module.so;' /etc/angie/angie.conf -msg_ok "Installed Angie with mod_zip module" +$STD apt-get install -y angie angie-module-zip angie-module-njs +sed -i '1i load_module modules/ngx_http_zip_module.so;\nload_module modules/ngx_http_js_module.so;' /etc/angie/angie.conf +mkdir -p /etc/angie/js +cat <<'EOF' >/etc/angie/js/decode.js +// Decode a Base64 encoded string received as a query parameter named 'value', +// and return the decoded value in the response body. +function decodeBase64(r) { + var encodedValue = r.args.value; + + if (!encodedValue) { + r.return(400, "Missing 'value' query parameter"); + return; + } + + try { + // Use Buffer to return raw bytes β€” atob() returns a JS string which r.return() + // would re-encode as UTF-8, corrupting any non-ASCII bytes (e.g. in filenames + // like "PokΓ©mon") and causing CRC mismatches in the mod_zip manifest. + r.return(200, Buffer.from(encodedValue, 'base64')); + } catch (e) { + r.return(400, "Invalid Base64 encoding"); + } +} + +export default { decodeBase64 }; +EOF +msg_ok "Installed Angie with mod_zip and njs modules" PYTHON_VERSION="3.13" setup_uv NODE_VERSION="24" setup_nodejs setup_mariadb @@ -63,7 +87,8 @@ mkdir -p /opt/romm \ /var/lib/romm/resources \ /var/lib/romm/assets/{saves,states,screenshots} \ /var/lib/romm/library/roms \ - /var/lib/romm/library/bios + /var/lib/romm/library/bios \ + /var/lib/romm/cache msg_ok "Created directories" msg_info "Creating configuration file" @@ -136,8 +161,6 @@ else fi fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball" -fetch_and_deploy_gh_release "ruffle" "ruffle-rs/ruffle" "prebuild" "latest" "/opt/romm/frontend/dist/assets/ruffle" "ruffle-*-web-selfhosted.zip" -fetch_and_deploy_gh_release "EmulatorJS" "EmulatorJS/EmulatorJS" "prebuild" "v4.2.3" "/opt/romm/frontend/dist/assets/emulatorjs" "4.2.3.7z" msg_info "Creating environment file" sed -i 's/^supervised no/supervised systemd/' /etc/redis/redis.conf @@ -214,8 +237,13 @@ ln -sfn "$ROMM_BASE"/resources /opt/romm/frontend/dist/assets/romm/resources ln -sfn "$ROMM_BASE"/assets /opt/romm/frontend/dist/assets/romm/assets msg_ok "Set up RomM Frontend" +fetch_and_deploy_gh_release "ruffle" "ruffle-rs/ruffle" "prebuild" "latest" "/opt/romm/frontend/dist/assets/ruffle" "ruffle-*-web-selfhosted.zip" +fetch_and_deploy_gh_release "EmulatorJS" "EmulatorJS/EmulatorJS" "prebuild" "v4.2.3" "/opt/romm/frontend/dist/assets/emulatorjs" "4.2.3.7z" + msg_info "Configuring Angie" cat <<'EOF' >/etc/angie/http.d/romm.conf +js_import /etc/angie/js/decode.js; + upstream romm_backend { server 127.0.0.1:5000; } @@ -282,10 +310,24 @@ server { internal; alias /var/lib/romm/library/; } + + # Internally redirect cached zip file requests (Range-resumable downloads) + location /cache/ { + internal; + alias /var/lib/romm/cache/; + } + + # Internal decoding endpoint, used by mod_zip to decode base64-encoded + # multi-file manifest entries (e.g. the generated .m3u for multi-disc games) + location /decode { + internal; + js_content decode.decodeBase64; + } } EOF -sed -i "s|alias /var/lib/romm/library/;|alias ${ROMM_BASE}/library/;|" /etc/angie/http.d/romm.conf +sed -i -e "s|alias /var/lib/romm/library/;|alias ${ROMM_BASE}/library/;|" \ + -e "s|alias /var/lib/romm/cache/;|alias ${ROMM_BASE}/cache/;|" /etc/angie/http.d/romm.conf rm -f /etc/angie/http.d/default.conf systemctl restart angie systemctl enable -q --now angie diff --git a/install/rustdeskserver-install.sh b/install/rustdeskserver-install.sh index 56b301cf6..11b9d5cf8 100644 --- a/install/rustdeskserver-install.sh +++ b/install/rustdeskserver-install.sh @@ -13,13 +13,122 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*$(arch_resolve).deb" -fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*$(arch_resolve).deb" -fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*$(arch_resolve).deb" -fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*$(arch_resolve).deb" -systemctl enable -q --now rustdesk-hbbr -systemctl enable -q --now rustdesk-hbbs -systemctl enable -q --now rustdesk-api +setup_deb_based() { + fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*$(arch_resolve).deb" + fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*$(arch_resolve).deb" + fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*$(arch_resolve).deb" + fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*$(arch_resolve).deb" + systemctl enable -q --now rustdesk-hbbr + systemctl enable -q --now rustdesk-hbbs + systemctl enable -q --now rustdesk-api +} + +setup_alpine() { + RELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + msg_info "Installing RustDesk Server v${RELEASE}" + temp_file1=$(mktemp) + ARCH=$(arch_resolve "amd64" "arm64v8") + curl -fsSL "https://github.com/lejianwen/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-${ARCH}.zip" -o "$temp_file1" + $STD unzip "$temp_file1" + mv "$ARCH" /opt/rustdesk-server + mkdir -p /root/.config/rustdesk + cd /opt/rustdesk-server + ./rustdesk-utils genkeypair >/tmp/rustdesk_keys.txt + grep "Public Key" /tmp/rustdesk_keys.txt | awk '{print $3}' >/root/.config/rustdesk/id_ed25519.pub + grep "Secret Key" /tmp/rustdesk_keys.txt | awk '{print $3}' >/root/.config/rustdesk/id_ed25519 + chmod 600 /root/.config/rustdesk/id_ed25519 + chmod 644 /root/.config/rustdesk/id_ed25519.pub + rm /tmp/rustdesk_keys.txt + echo "${RELEASE}" >~/.rustdesk-server + msg_ok "Installed RustDesk Server v${RELEASE}" + + APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + msg_info "Installing RustDesk API v${APIRELEASE}" + temp_file2=$(mktemp) + curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-$(arch_resolve).tar.gz" -o "$temp_file2" + $STD tar zxvf "$temp_file2" + mv release /opt/rustdesk-api + cd /opt/rustdesk-api + ADMINPASS=$(head -c 16 /dev/urandom | xxd -p -c 16) + $STD ./apimain reset-admin-pwd "$ADMINPASS" + cat <~/rustdesk.creds +RustDesk WebUI + +Username: admin +Password: $ADMINPASS +EOF + echo "${APIRELEASE}" >~/.rustdesk-api + msg_ok "Installed RustDesk API v${APIRELEASE}" + + msg_info "Enabling RustDesk Server Services" + cat </etc/init.d/rustdesk-server-hbbs +#!/sbin/openrc-run +description="RustDesk HBBS Service" +directory="/opt/rustdesk-server" +command="/opt/rustdesk-server/hbbs" +command_args="" +command_background="true" +command_user="root" +pidfile="/var/run/rustdesk-server-hbbs.pid" +output_log="/var/log/rustdesk-hbbs.log" +error_log="/var/log/rustdesk-hbbs.err" + +depend() { + use net +} +EOF + + cat </etc/init.d/rustdesk-server-hbbr +#!/sbin/openrc-run +description="RustDesk HBBR Service" +directory="/opt/rustdesk-server" +command="/opt/rustdesk-server/hbbr" +command_args="" +command_background="true" +command_user="root" +pidfile="/var/run/rustdesk-server-hbbr.pid" +output_log="/var/log/rustdesk-hbbr.log" +error_log="/var/log/rustdesk-hbbr.err" + +depend() { + use net +} +EOF + + cat </etc/init.d/rustdesk-api +#!/sbin/openrc-run +description="RustDesk API Service" +directory="/opt/rustdesk-api" +command="/opt/rustdesk-api/apimain" +command_args="" +command_background="true" +command_user="root" +pidfile="/var/run/rustdesk-api.pid" +output_log="/var/log/rustdesk-api.log" +error_log="/var/log/rustdesk-api.err" + +depend() { + use net +} +EOF + chmod +x /etc/init.d/rustdesk-server-hbbs + chmod +x /etc/init.d/rustdesk-server-hbbr + chmod +x /etc/init.d/rustdesk-api + $STD rc-update add rustdesk-server-hbbs default + $STD rc-update add rustdesk-server-hbbr default + $STD rc-update add rustdesk-api default + msg_ok "Enabled RustDesk Server Services" + + msg_info "Starting RustDesk Server" + $STD service rustdesk-server-hbbs start + $STD service rustdesk-server-hbbr start + $STD service rustdesk-api start + msg_ok "Started RustDesk Server" + + rm -f "$temp_file1" "$temp_file2" +} + +run_os_setup motd_ssh customize diff --git a/install/rustypaste-install.sh b/install/rustypaste-install.sh index 67c495058..6d6def0fc 100644 --- a/install/rustypaste-install.sh +++ b/install/rustypaste-install.sh @@ -13,16 +13,17 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "rustypaste" "orhun/rustypaste" "prebuild" "latest" "/opt/rustypaste" "*x86_64-unknown-linux-gnu.tar.gz" -fetch_and_deploy_gh_release "rustypaste-cli" "orhun/rustypaste-cli" "prebuild" "latest" "/usr/local/bin" "*x86_64-unknown-linux-gnu.tar.gz" +setup_deb_based() { + fetch_and_deploy_gh_release "rustypaste" "orhun/rustypaste" "prebuild" "latest" "/opt/rustypaste" "*x86_64-unknown-linux-gnu.tar.gz" + fetch_and_deploy_gh_release "rustypaste-cli" "orhun/rustypaste-cli" "prebuild" "latest" "/usr/local/bin" "*x86_64-unknown-linux-gnu.tar.gz" -msg_info "Setting up RustyPaste" -cd /opt/rustypaste -sed -i 's|^address = ".*"|address = "0.0.0.0:8000"|' config.toml -msg_ok "Set up RustyPaste" + msg_info "Setting up RustyPaste" + cd /opt/rustypaste + sed -i 's|^address = ".*"|address = "0.0.0.0:8000"|' config.toml + msg_ok "Set up RustyPaste" -msg_info "Creating Service" -cat </etc/systemd/system/rustypaste.service + msg_info "Creating Service" + cat </etc/systemd/system/rustypaste.service [Unit] Description=rustypaste Service After=network.target @@ -35,8 +36,50 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now rustypaste -msg_ok "Created Service" + systemctl enable -q --now rustypaste + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing RustyPaste" + $STD apk add --no-cache rustypaste --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community + msg_ok "Installed RustyPaste" + + msg_info "Configuring RustyPaste" + mkdir -p /var/lib/rustypaste + sed -i 's|^address = ".*"|address = "0.0.0.0:8000"|' /etc/rustypaste/config.toml + msg_ok "Configured RustyPaste" + + msg_info "Creating Service" + cat <<'EOF' >/etc/init.d/rustypaste +#!/sbin/openrc-run + +name="rustypaste" +description="RustyPaste - A minimal file upload/pastebin service" +command="/usr/bin/rustypaste" +command_args="" +command_user="root" +command_background=true +pidfile="/run/${RC_SVCNAME}.pid" +directory="/var/lib/rustypaste" + +depend() { + need net + after firewall +} + +start_pre() { + export CONFIG=/etc/rustypaste/config.toml + checkpath --directory --owner root:root --mode 0755 /var/lib/rustypaste +} +EOF + chmod +x /etc/init.d/rustypaste + $STD rc-update add rustypaste default + $STD rc-service rustypaste start + msg_ok "Created Service" +} + +run_os_setup motd_ssh customize diff --git a/install/securo-install.sh b/install/securo-install.sh new file mode 100644 index 000000000..f24ae935b --- /dev/null +++ b/install/securo-install.sh @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/securo-finance/securo + +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 \ + redis-server \ + build-essential +systemctl enable -q --now redis-server +msg_ok "Installed Dependencies" + +PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql +PG_DB_NAME="securo" PG_DB_USER="securo" PG_DB_EXTENSIONS="vector" setup_postgresql_db +NODE_VERSION="22" setup_nodejs +UV_PYTHON="3.12" setup_uv + +fetch_and_deploy_gh_release "securo" "securo-finance/securo" "tarball" + +msg_info "Setting up Backend" +cd /opt/securo/backend +$STD uv venv --python 3.12 /opt/securo/backend/.venv +$STD uv pip install --python /opt/securo/backend/.venv -e . +msg_ok "Set up Backend" + +msg_info "Configuring Securo" +mkdir -p /opt/securo_data +SECRET_KEY=$(openssl rand -hex 32) +cat </opt/securo_data/.env +DATABASE_URL=postgresql+asyncpg://securo:${PG_DB_PASS}@127.0.0.1:5432/securo +REDIS_URL=redis://127.0.0.1:6379/0 +SECRET_KEY=${SECRET_KEY} +DEBUG=false +FRONTEND_URL=https://${LOCAL_IP} +EOF +ln -sf /opt/securo_data/.env /opt/securo/backend/.env +set -a +source /opt/securo_data/.env +set +a +$STD /opt/securo/backend/.venv/bin/alembic upgrade head +msg_ok "Configured Securo" + +msg_info "Building Frontend (Patience)" +cd /opt/securo/frontend +export NODE_OPTIONS="--max-old-space-size=4096" +$STD npm install +$STD npm run build +msg_ok "Built Frontend" + +msg_info "Generating Self-Signed Certificate" +create_self_signed_cert "securo" +msg_ok "Generated Self-Signed Certificate" + +msg_info "Creating Services" +cat </etc/systemd/system/securo.service +[Unit] +Description=Securo Backend (FastAPI) +After=network-online.target postgresql.service redis-server.service +Wants=network-online.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/securo/backend +EnvironmentFile=/opt/securo_data/.env +ExecStart=/opt/securo/backend/.venv/bin/uvicorn app.main:app --host 127.0.0.1 --port 8000 +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/securo-worker.service +[Unit] +Description=Securo Celery Worker +After=network-online.target postgresql.service redis-server.service +Wants=network-online.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/securo/backend +EnvironmentFile=/opt/securo_data/.env +ExecStart=/opt/securo/backend/.venv/bin/celery -A app.worker worker --loglevel=info --concurrency=2 +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/securo-beat.service +[Unit] +Description=Securo Celery Beat +After=network-online.target postgresql.service redis-server.service +Wants=network-online.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/securo/backend +EnvironmentFile=/opt/securo_data/.env +ExecStart=/opt/securo/backend/.venv/bin/celery -A app.worker beat --loglevel=info +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now securo securo-worker securo-beat +msg_ok "Created Services" + +msg_info "Configuring Nginx" +cat <<'EOF' >/etc/nginx/sites-available/securo.conf +server { + listen 80 default_server; + server_name _; + return 301 https://$host$request_uri; +} + +server { + listen 443 ssl default_server; + http2 on; + server_name _; + + ssl_certificate /etc/ssl/securo/securo.crt; + ssl_certificate_key /etc/ssl/securo/securo.key; + + client_max_body_size 25m; + + root /opt/securo/frontend/dist; + index index.html; + + location /api/ { + proxy_pass http://127.0.0.1:8000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location / { + try_files $uri $uri/ /index.html; + } +} +EOF +nginx_enable_site securo.conf +msg_ok "Configured Nginx" + +motd_ssh +customize +cleanup_lxc diff --git a/install/shelfmark-install.sh b/install/shelfmark-install.sh index c477caca3..308f97946 100644 --- a/install/shelfmark-install.sh +++ b/install/shelfmark-install.sh @@ -116,6 +116,7 @@ else chromium-common \ chromium \ python3-tk + sed -i '/DOCKERMODE=/s/false/true/' /etc/shelfmark/.env msg_ok "Installed internal bypasser dependencies" fi @@ -165,22 +166,6 @@ KillMode=mixed WantedBy=multi-user.target EOF -if [[ "$DEPLOYMENT_TYPE" == "1" ]]; then - cat </etc/systemd/system/chromium.service -[Unit] -Description=Chromium Headless Browser -After=network.target - -[Service] -User=root -ExecStart=/usr/bin/chromium --headless --no-sandbox --disable-gpu --disable-dev-shm-usage --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222 --hide-scrollbars -Restart=always - -[Install] -WantedBy=multi-user.target -EOF - systemctl enable -q --now chromium -fi if [[ "$DEPLOYMENT_TYPE" == "2" ]]; then cat </etc/systemd/system/flaresolverr.service [Unit] diff --git a/install/swizzin-install.sh b/install/swizzin-install.sh deleted file mode 100644 index 85804f80c..000000000 --- a/install/swizzin-install.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: EEJoshua -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://swizzin.ltd/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_warn "WARNING: This script will run an external installer from a third-party source (https://swizzin.ltd/)." -msg_warn "The following code is NOT maintained or audited by our repository." -msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:" -msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "β†’ https://s5n.sh" -echo -read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM -if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then - msg_error "Aborted by user. No changes have been made." - exit 10 -fi -bash <(curl -fsSL https://s5n.sh) - -motd_ssh -customize -cleanup_lxc diff --git a/install/syncthing-install.sh b/install/syncthing-install.sh index f4a347e52..332f6e368 100644 --- a/install/syncthing-install.sh +++ b/install/syncthing-install.sh @@ -13,20 +13,42 @@ setting_up_container network_check update_os -setup_deb822_repo \ - "syncthing" \ - "https://syncthing.net/release-key.gpg" \ - "https://apt.syncthing.net/" \ - "syncthing" \ - "stable-v2" +setup_deb_based() { + setup_deb822_repo \ + "syncthing" \ + "https://syncthing.net/release-key.gpg" \ + "https://apt.syncthing.net/" \ + "syncthing" \ + "stable-v2" -msg_info "Setting up Syncthing" -$STD apt install -y syncthing -systemctl enable -q --now syncthing@root -sleep 5 -sed -i "{s/127.0.0.1:8384/0.0.0.0:8384/g}" /root/.local/state/syncthing/config.xml -systemctl restart syncthing@root -msg_ok "Setup Syncthing" + msg_info "Setting up Syncthing" + $STD apt install -y syncthing + systemctl enable -q --now syncthing@root + sleep 5 + sed -i "{s/127.0.0.1:8384/0.0.0.0:8384/g}" /root/.local/state/syncthing/config.xml + systemctl restart syncthing@root + msg_ok "Setup Syncthing" +} + +setup_alpine() { + msg_info "Setup Syncthing" + $STD apk add --no-cache syncthing + rc-service syncthing start + sleep 3 + rc-service syncthing stop + sed -i "{s/127.0.0.1:8384/0.0.0.0:8384/g}" /var/lib/syncthing/.local/state/syncthing/config.xml + msg_ok "Setup Syncthing" + + msg_info "Enabling Syncthing Service" + $STD rc-update add syncthing default + msg_ok "Enabled Syncthing Service" + + msg_info "Starting Syncthing" + $STD rc-service syncthing start + msg_ok "Started Syncthing" +} + +run_os_setup motd_ssh customize diff --git a/install/teamspeak-server-install.sh b/install/teamspeak-server-install.sh index 110b4f3c5..31a5d691d 100644 --- a/install/teamspeak-server-install.sh +++ b/install/teamspeak-server-install.sh @@ -13,19 +13,20 @@ setting_up_container network_check update_os -RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | grep -oP 'teamspeak3-server_linux_amd64-\K[0-9]+\.[0-9]+\.[0-9]+' | head -1) +setup_deb_based() { + RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | grep -oP 'teamspeak3-server_linux_amd64-\K[0-9]+\.[0-9]+\.[0-9]+' | head -1) -msg_info "Setting up Teamspeak Server" -curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2 -tar -xf ./ts3server.tar.bz2 -mv teamspeak3-server_linux_amd64/ /opt/teamspeak-server/ -touch /opt/teamspeak-server/.ts3server_license_accepted -rm -f ~/ts3server.tar.bz* -echo "${RELEASE}" >~/.teamspeak-server -msg_ok "Setup Teamspeak Server" + msg_info "Setting up Teamspeak Server" + curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2 + tar -xf ./ts3server.tar.bz2 + mv teamspeak3-server_linux_amd64/ /opt/teamspeak-server/ + touch /opt/teamspeak-server/.ts3server_license_accepted + rm -f ~/ts3server.tar.bz* + echo "${RELEASE}" >~/.teamspeak-server + msg_ok "Setup Teamspeak Server" -msg_info "Creating service" -cat </etc/systemd/system/teamspeak-server.service + msg_info "Creating service" + cat </etc/systemd/system/teamspeak-server.service [Unit] Description=TeamSpeak3 Server Wants=network-online.target @@ -44,8 +45,61 @@ RestartSec=15 [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now teamspeak-server -msg_ok "Created service" + systemctl enable -q --now teamspeak-server + msg_ok "Created service" +} + +setup_alpine() { + msg_info "Installing dependencies" + $STD apk add --no-cache \ + ca-certificates \ + libstdc++ \ + libc6-compat + msg_ok "Installed dependencies" + + RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | awk 'NR==1') + msg_info "Installing Teamspeak Server v${RELEASE}" + mkdir -p /opt/teamspeak-server + cd /opt/teamspeak-server + curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2 + tar xf ts3server.tar.bz2 --strip-components=1 + mkdir -p logs data lib + mv *.so lib + touch data/ts3server.sqlitedb data/query_ip_blacklist.txt data/query_ip_whitelist.txt .ts3server_license_accepted + echo "${RELEASE}" >~/.teamspeak-server + msg_ok "Installed TeamSpeak Server v${RELEASE}" + + msg_info "Enabling TeamSpeak Server Service" + cat </etc/init.d/teamspeak +#!/sbin/openrc-run + +name="TeamSpeak Server" +description="TeamSpeak 3 Server" +command="/opt/teamspeak-server/ts3server_startscript.sh" +command_args="start" +output_log="/var/log/teamspeak.out.log" +error_log="/var/log/teamspeak.err.log" +command_background=true +pidfile="/run/teamspeak-server.pid" +directory="/opt/teamspeak-server" + +depend() { + need net + use dns +} +EOF + chmod +x /etc/init.d/teamspeak + $STD rc-update add teamspeak default + msg_ok "Enabled TeamSpeak Server Service" + + msg_info "Starting TeamSpeak Server" + $STD service teamspeak start + msg_ok "Started TeamSpeak Server" + + rm -r ts3server.tar.bz* LICENSE* CHANGELOG doc serverquerydocs tsdns redist +} + +run_os_setup motd_ssh customize diff --git a/install/teslamate-install.sh b/install/teslamate-install.sh index 6a7e4b84d..bc5f221e0 100644 --- a/install/teslamate-install.sh +++ b/install/teslamate-install.sh @@ -19,7 +19,6 @@ $STD apt install -y \ erlang \ erlang-dev \ erlang-syntax-tools \ - elixir \ mosquitto \ locales sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen @@ -27,6 +26,11 @@ $STD locale-gen systemctl enable -q --now mosquitto msg_ok "Installed Dependencies" +fetch_and_deploy_gh_release "elixir" "elixir-lang/elixir" "prebuild" "latest" "/opt/elixir" "elixir-otp-27.zip" +for bin in elixir elixirc iex mix; do + ln -sf "/opt/elixir/bin/$bin" "/usr/local/bin/$bin" +done + PG_VERSION="17" setup_postgresql PG_DB_NAME="teslamate" PG_DB_USER="teslamate" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db NODE_VERSION="22" setup_nodejs diff --git a/install/tinyauth-install.sh b/install/tinyauth-install.sh index 85db46eb7..7ec13281a 100644 --- a/install/tinyauth-install.sh +++ b/install/tinyauth-install.sh @@ -13,33 +13,34 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - openssl \ - apache2-utils -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + openssl \ + apache2-utils + msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "tinyauth" "steveiliop56/tinyauth" "singlefile" "latest" "/opt/tinyauth" "tinyauth-$(arch_resolve)" + fetch_and_deploy_gh_release "tinyauth" "steveiliop56/tinyauth" "singlefile" "latest" "/opt/tinyauth" "tinyauth-$(arch_resolve)" -msg_info "Setting up Tinyauth" -PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8) -USER=$(htpasswd -Bbn "tinyauth" "${PASS}") -cat </opt/tinyauth/credentials.txt + msg_info "Setting up Tinyauth" + PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8) + USER=$(htpasswd -Bbn "tinyauth" "${PASS}") + cat </opt/tinyauth/credentials.txt Tinyauth Credentials Username: tinyauth Password: ${PASS} EOF -msg_ok "Set up Tinyauth" + msg_ok "Set up Tinyauth" -read -r -p "${TAB3}Enter your Tinyauth subdomain (e.g. https://tinyauth.example.com): " app_url + read -r -p "${TAB3}Enter your Tinyauth subdomain (e.g. https://tinyauth.example.com): " app_url -msg_info "Creating Service" -cat </opt/tinyauth/.env + msg_info "Creating Service" + cat </opt/tinyauth/.env TINYAUTH_DATABASE_PATH=/opt/tinyauth/database.db TINYAUTH_AUTH_USERS='${USER}' TINYAUTH_APPURL=${app_url} EOF -cat </etc/systemd/system/tinyauth.service + cat </etc/systemd/system/tinyauth.service [Unit] Description=Tinyauth Service After=network.target @@ -54,8 +55,69 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now tinyauth -msg_ok "Created Service" + systemctl enable -q --now tinyauth + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add --no-cache openssl apache2-utils + msg_ok "Installed Dependencies" + + msg_info "Installing Tinyauth" + mkdir -p /opt/tinyauth + RELEASE=$(curl -s https://api.github.com/repos/tinyauthapp/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + curl -fsSL "https://github.com/tinyauthapp/tinyauth/releases/download/v${RELEASE}/tinyauth-$(arch_resolve)" -o /opt/tinyauth/tinyauth + chmod +x /opt/tinyauth/tinyauth + PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8) + USER=$(htpasswd -Bbn "tinyauth" "${PASS}") + + cat </opt/tinyauth/credentials.txt +Tinyauth Credentials +Username: tinyauth +Password: ${PASS} +EOF + echo "${RELEASE}" >~/.tinyauth + msg_ok "Installed Tinyauth" + + read -r -p "${TAB3}Enter your Tinyauth subdomain (e.g. https://tinyauth.example.com): " app_url + + cat </opt/tinyauth/.env +TINYAUTH_DATABASE_PATH=/opt/tinyauth/database.db +TINYAUTH_AUTH_USERS='${USER}' +TINYAUTH_APPURL=${app_url} +EOF + + msg_info "Creating Service" + cat <<'EOF' >/etc/init.d/tinyauth +#!/sbin/openrc-run +description="Tinyauth Service" + +set -a +ENV_FILE="/opt/tinyauth/.env" +[ -f "$ENV_FILE" ] && . "$ENV_FILE" +set +a + +command="/opt/tinyauth/tinyauth" +directory="/opt/tinyauth" +command_user="root" +command_background="true" +pidfile="/var/run/tinyauth.pid" + +depend() { + use net +} +EOF + chmod +x /etc/init.d/tinyauth + $STD rc-update add tinyauth default + msg_ok "Enabled Tinyauth Service" + + msg_info "Starting Tinyauth" + $STD service tinyauth start + msg_ok "Started Tinyauth" +} + +run_os_setup motd_ssh customize diff --git a/install/tracktor-install.sh b/install/tracktor-install.sh index e0fdf274c..9096812fa 100644 --- a/install/tracktor-install.sh +++ b/install/tracktor-install.sh @@ -13,13 +13,13 @@ setting_up_container network_check update_os -NODE_VERSION="24" setup_nodejs +NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor" msg_info "Configuring Tracktor" cd /opt/tracktor -$STD npm install -$STD npm run build +$STD pnpm install --frozen-lockfile +$STD pnpm run build mkdir -p /opt/tracktor-data/{uploads,logs} cat </opt/tracktor.env NODE_ENV=production diff --git a/install/traefik-install.sh b/install/traefik-install.sh index 950fb8b79..f051a3f99 100644 --- a/install/traefik-install.sh +++ b/install/traefik-install.sh @@ -13,15 +13,16 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y apt-transport-https -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y apt-transport-https + msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_$(arch_resolve).tar.gz" -mkdir -p /etc/traefik/{conf.d,ssl} + fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_$(arch_resolve).tar.gz" + mkdir -p /etc/traefik/{conf.d,ssl} -msg_info "Creating Traefik configuration" -cat </etc/traefik/traefik.yaml + msg_info "Creating Traefik configuration" + cat </etc/traefik/traefik.yaml providers: file: directory: /etc/traefik/conf.d/ @@ -74,10 +75,10 @@ accessLog: names: User-Agent: keep EOF -msg_ok "Created Traefik configuration" + msg_ok "Created Traefik configuration" -msg_info "Creating Service" -cat <<'EOF' >/etc/systemd/system/traefik.service + msg_info "Creating Service" + cat <<'EOF' >/etc/systemd/system/traefik.service [Unit] Description=Traefik is an open-source Edge Router that makes publishing your services a fun and easy experience @@ -90,8 +91,35 @@ ExecReload=/bin/kill -USR1 \$MAINPID [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now traefik -msg_ok "Created Service" + systemctl enable -q --now traefik + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add ca-certificates + $STD update-ca-certificates + msg_ok "Installed Dependencies" + + msg_info "Installing Traefik" + $STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community + msg_ok "Installed Traefik" + + read -p "${TAB3}Enable Traefik WebUI (Port 8080)? [y/N]: " enable_webui + if [[ "$enable_webui" =~ ^[Yy]$ ]]; then + msg_info "Configuring Traefik WebUI" + sed -i 's/localhost//g' /etc/traefik/traefik.yaml + msg_ok "Configured Traefik WebUI" + fi + + msg_info "Enabling and starting Traefik service" + $STD rc-update add traefik default + sed -i '/^command=.*/i directory="/etc/traefik"' /etc/init.d/traefik + $STD rc-service traefik start + msg_ok "Traefik service started" +} + +run_os_setup motd_ssh customize diff --git a/install/transmission-install.sh b/install/transmission-install.sh index 5d0018c86..1523358c1 100644 --- a/install/transmission-install.sh +++ b/install/transmission-install.sh @@ -13,12 +13,34 @@ setting_up_container network_check update_os -msg_info "Installing Transmission" -$STD apt install -y transmission-daemon -systemctl stop transmission-daemon -sed -i '{s/"rpc-whitelist-enabled": true/"rpc-whitelist-enabled": false/g; s/"rpc-host-whitelist-enabled": true,/"rpc-host-whitelist-enabled": false,/g}' /etc/transmission-daemon/settings.json -systemctl start transmission-daemon -msg_ok "Installed Transmission" +setup_deb_based() { + msg_info "Installing Transmission" + $STD apt install -y transmission-daemon + systemctl stop transmission-daemon + sed -i '{s/"rpc-whitelist-enabled": true/"rpc-whitelist-enabled": false/g; s/"rpc-host-whitelist-enabled": true,/"rpc-host-whitelist-enabled": false,/g}' /etc/transmission-daemon/settings.json + systemctl start transmission-daemon + msg_ok "Installed Transmission" +} + +setup_alpine() { + msg_info "Installing Transmission" + $STD apk add --no-cache transmission-cli transmission-daemon + $STD rc-service transmission-daemon start + sleep 5 + $STD rc-service transmission-daemon stop + sed -i '{s/"rpc-whitelist-enabled": true/"rpc-whitelist-enabled": false/g; s/"rpc-host-whitelist-enabled": true,/"rpc-host-whitelist-enabled": false,/g}' /var/lib/transmission/config/settings.json + msg_ok "Installed Transmission" + + msg_info "Enabling Transmission Service" + $STD rc-update add transmission-daemon default + msg_ok "Enabled Transmission Service" + + msg_info "Starting Transmission" + $STD rc-service transmission-daemon start + msg_ok "Started Transmission" +} + +run_os_setup motd_ssh customize diff --git a/install/valkey-install.sh b/install/valkey-install.sh index e6aa2904b..872044960 100644 --- a/install/valkey-install.sh +++ b/install/valkey-install.sh @@ -13,41 +13,42 @@ setting_up_container network_check update_os -msg_info "Installing Valkey" -$STD apt update -$STD apt install -y valkey openssl -sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf +setup_deb_based() { + msg_info "Installing Valkey" + $STD apt update + $STD apt install -y valkey openssl + sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf -PASS="$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9' | head -c32)" -echo "requirepass $PASS" >>/etc/valkey/valkey.conf -echo "$PASS" >~/valkey.creds -chmod 600 ~/valkey.creds + PASS="$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9' | head -c32)" + echo "requirepass $PASS" >>/etc/valkey/valkey.conf + echo "$PASS" >~/valkey.creds + chmod 600 ~/valkey.creds -MEMTOTAL_MB=$(free -m | grep ^Mem: | awk '{print $2}') -# reserve 25% of a node type's maxmemory value for system use -MAXMEMORY_MB=$((MEMTOTAL_MB * 75 / 100)) + MEMTOTAL_MB=$(free -m | grep ^Mem: | awk '{print $2}') + # reserve 25% of a node type's maxmemory value for system use + MAXMEMORY_MB=$((MEMTOTAL_MB * 75 / 100)) -echo "" >>/etc/valkey/valkey.conf -echo "# Memory-optimized settings for small-scale deployments" >>/etc/valkey/valkey.conf -echo "maxmemory ${MAXMEMORY_MB}mb" >>/etc/valkey/valkey.conf -echo "maxmemory-policy allkeys-lru" >>/etc/valkey/valkey.conf -echo "maxmemory-samples 10" >>/etc/valkey/valkey.conf -msg_ok "Installed Valkey" + echo "" >>/etc/valkey/valkey.conf + echo "# Memory-optimized settings for small-scale deployments" >>/etc/valkey/valkey.conf + echo "maxmemory ${MAXMEMORY_MB}mb" >>/etc/valkey/valkey.conf + echo "maxmemory-policy allkeys-lru" >>/etc/valkey/valkey.conf + echo "maxmemory-samples 10" >>/etc/valkey/valkey.conf + msg_ok "Installed Valkey" -echo -read -r -p "${TAB3}Enable TLS for Valkey (Sentinel mode does not supported)? [y/N]: " prompt -if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - read -r -p "${TAB3}Use TLS-only mode (disable TCP port 6379)? [y/N]: " tls_only - msg_info "Configuring TLS for Valkey..." + echo + read -r -p "${TAB3}Enable TLS for Valkey (Sentinel mode does not supported)? [y/N]: " prompt + if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then + read -r -p "${TAB3}Use TLS-only mode (disable TCP port 6379)? [y/N]: " tls_only + msg_info "Configuring TLS for Valkey..." - create_self_signed_cert "Valkey" - TLS_DIR="/etc/ssl/valkey" - TLS_CERT="$TLS_DIR/valkey.crt" - TLS_KEY="$TLS_DIR/valkey.key" - chown valkey:valkey "$TLS_CERT" "$TLS_KEY" + create_self_signed_cert "Valkey" + TLS_DIR="/etc/ssl/valkey" + TLS_CERT="$TLS_DIR/valkey.crt" + TLS_KEY="$TLS_DIR/valkey.key" + chown valkey:valkey "$TLS_CERT" "$TLS_KEY" - if [[ ${tls_only,,} =~ ^(y|yes)$ ]]; then - cat </etc/valkey/valkey.conf + if [[ ${tls_only,,} =~ ^(y|yes)$ ]]; then + cat </etc/valkey/valkey.conf # TLS configuration generated by Proxmox VE Valkey helper-script port 0 @@ -56,9 +57,9 @@ tls-cert-file $TLS_DIR/valkey.crt tls-key-file $TLS_DIR/valkey.key tls-auth-clients no EOF - msg_ok "Enabled TLS-only mode on port 6379" - else - cat </etc/valkey/valkey.conf + msg_ok "Enabled TLS-only mode on port 6379" + else + cat </etc/valkey/valkey.conf # TLS configuration generated by Proxmox VE Valkey helper-script tls-port 6380 @@ -66,12 +67,43 @@ tls-cert-file $TLS_DIR/valkey.crt tls-key-file $TLS_DIR/valkey.key tls-auth-clients no EOF - msg_ok "Enabled TLS on port 6380 and TCP on 6379" - fi -fi + msg_ok "Enabled TLS on port 6380 and TCP on 6379" + fi + fi -systemctl enable -q --now valkey-server -systemctl restart valkey-server + systemctl enable -q --now valkey-server + systemctl restart valkey-server +} + +setup_alpine() { + msg_info "Installing Valkey" + $STD apk add valkey valkey-openrc valkey-cli + sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf + + PASS="$(head -c 100 /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c32)" + echo "requirepass $PASS" >>/etc/valkey/valkey.conf + echo "$PASS" >~/valkey.creds + chmod 600 ~/valkey.creds + + MEMTOTAL_MB=$(free -m | grep ^Mem: | awk '{print $2}') + MAXMEMORY_MB=$((MEMTOTAL_MB * 75 / 100)) + + cat </etc/valkey/valkey.conf +# Memory-optimized settings for small-scale deployments +maxmemory ${MAXMEMORY_MB}mb +maxmemory-policy allkeys-lru +maxmemory-samples 10 +EOF + msg_ok "Installed Valkey" + + # Note: Alpine's valkey package is compiled without TLS support + # For TLS, use the Debian-based valkey script instead + + $STD rc-update add valkey default + $STD rc-service valkey start +} + +run_os_setup motd_ssh customize diff --git a/install/vaultwarden-install.sh b/install/vaultwarden-install.sh index 9c2858148..92946acea 100644 --- a/install/vaultwarden-install.sh +++ b/install/vaultwarden-install.sh @@ -13,39 +13,40 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - build-essential \ - pkgconf \ - libssl-dev \ - libmariadb-dev-compat \ - libpq-dev \ - argon2 \ - ssl-cert -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + build-essential \ + pkgconf \ + libssl-dev \ + libmariadb-dev-compat \ + libpq-dev \ + argon2 \ + ssl-cert + msg_ok "Installed Dependencies" -setup_rust -fetch_and_deploy_gh_release "vaultwarden" "dani-garcia/vaultwarden" "tarball" "latest" "/tmp/vaultwarden-src" + setup_rust + fetch_and_deploy_gh_release "vaultwarden" "dani-garcia/vaultwarden" "tarball" "latest" "/tmp/vaultwarden-src" -msg_info "Building Vaultwarden (Patience)" -cd /tmp/vaultwarden-src -VW_VERSION=$(get_latest_github_release "dani-garcia/vaultwarden") -export VW_VERSION -$STD cargo build --features "sqlite,mysql,postgresql" --release -msg_ok "Built Vaultwarden" + msg_info "Building Vaultwarden (Patience)" + cd /tmp/vaultwarden-src + VW_VERSION=$(get_latest_github_release "dani-garcia/vaultwarden") + export VW_VERSION + $STD cargo build --features "sqlite,mysql,postgresql" --release + msg_ok "Built Vaultwarden" -msg_info "Setting up Vaultwarden" -$STD addgroup --system vaultwarden -$STD adduser --system --home /opt/vaultwarden --shell /usr/sbin/nologin --no-create-home --gecos 'vaultwarden' --ingroup vaultwarden --disabled-login --disabled-password vaultwarden -mkdir -p /opt/vaultwarden/{bin,data,web-vault} -cp target/release/vaultwarden /opt/vaultwarden/bin/ -cd ~ && rm -rf /tmp/vaultwarden-src -msg_ok "Set up Vaultwarden" + msg_info "Setting up Vaultwarden" + $STD addgroup --system vaultwarden + $STD adduser --system --home /opt/vaultwarden --shell /usr/sbin/nologin --no-create-home --gecos 'vaultwarden' --ingroup vaultwarden --disabled-login --disabled-password vaultwarden + mkdir -p /opt/vaultwarden/{bin,data,web-vault} + cp target/release/vaultwarden /opt/vaultwarden/bin/ + cd ~ && rm -rf /tmp/vaultwarden-src + msg_ok "Set up Vaultwarden" -fetch_and_deploy_gh_release "vaultwarden_webvault" "dani-garcia/bw_web_builds" "prebuild" "latest" "/opt/vaultwarden/web-vault" "bw_web_*.tar.gz" + fetch_and_deploy_gh_release "vaultwarden_webvault" "dani-garcia/bw_web_builds" "prebuild" "latest" "/opt/vaultwarden/web-vault" "bw_web_*.tar.gz" -msg_info "Configuring Vaultwarden" -cat </opt/vaultwarden/.env + msg_info "Configuring Vaultwarden" + cat </opt/vaultwarden/.env ADMIN_TOKEN='' ROCKET_ADDRESS=0.0.0.0 ROCKET_TLS='{certs="/opt/vaultwarden/ssl-cert-snakeoil.pem",key="/opt/vaultwarden/ssl-cert-snakeoil.key"}' @@ -54,18 +55,18 @@ DATABASE_MAX_CONNS=10 WEB_VAULT_FOLDER=/opt/vaultwarden/web-vault WEB_VAULT_ENABLED=true EOF -mv /etc/ssl/certs/ssl-cert-snakeoil.pem /opt/vaultwarden/ -mv /etc/ssl/private/ssl-cert-snakeoil.key /opt/vaultwarden/ + mv /etc/ssl/certs/ssl-cert-snakeoil.pem /opt/vaultwarden/ + mv /etc/ssl/private/ssl-cert-snakeoil.key /opt/vaultwarden/ -chown -R vaultwarden:vaultwarden /opt/vaultwarden/ -chown root:root /opt/vaultwarden/bin/vaultwarden -chmod +x /opt/vaultwarden/bin/vaultwarden -chown -R root:root /opt/vaultwarden/web-vault/ -chmod +r /opt/vaultwarden/.env -msg_ok "Configured Vaultwarden" + chown -R vaultwarden:vaultwarden /opt/vaultwarden/ + chown root:root /opt/vaultwarden/bin/vaultwarden + chmod +x /opt/vaultwarden/bin/vaultwarden + chown -R root:root /opt/vaultwarden/web-vault/ + chmod +r /opt/vaultwarden/.env + msg_ok "Configured Vaultwarden" -msg_info "Creating Service" -cat </etc/systemd/system/vaultwarden.service + msg_info "Creating Service" + cat </etc/systemd/system/vaultwarden.service [Unit] Description=Bitwarden Server (Powered by Vaultwarden) Documentation=https://github.com/dani-garcia/vaultwarden @@ -97,8 +98,39 @@ AmbientCapabilities=CAP_NET_BIND_SERVICE [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now vaultwarden -msg_ok "Created Service" + systemctl enable -q --now vaultwarden + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add --no-cache \ + openssl \ + argon2 + msg_ok "Installed Dependencies" + + msg_info "Installing Alpine-Vaultwarden" + $STD apk add --no-cache vaultwarden + sed -i 's|export WEB_VAULT_ENABLED=.*|export WEB_VAULT_ENABLED=true|' /etc/conf.d/vaultwarden + echo -e "export ADMIN_TOKEN=''" >>/etc/conf.d/vaultwarden + echo -e "export ROCKET_ADDRESS=0.0.0.0" >>/etc/conf.d/vaultwarden + echo -e "export ROCKET_TLS='{certs=\"/etc/ssl/certs/vaultwarden-selfsigned.crt\",key=\"/etc/ssl/private/vaultwarden-selfsigned.key\"}'" >>/etc/conf.d/vaultwarden + $STD openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/vaultwarden-selfsigned.key -out /etc/ssl/certs/vaultwarden-selfsigned.crt -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost" + chown vaultwarden:vaultwarden /etc/ssl/certs/vaultwarden-selfsigned.crt + chown vaultwarden:vaultwarden /etc/ssl/private/vaultwarden-selfsigned.key + msg_ok "Installed Alpine-Vaultwarden" + + msg_info "Installing Web-Vault" + $STD apk add --no-cache vaultwarden-web-vault + msg_ok "Installed Web-Vault" + + msg_info "Starting Alpine-Vaultwarden" + $STD rc-service vaultwarden start + $STD rc-update add vaultwarden default + msg_ok "Started Alpine-Vaultwarden" +} + +run_os_setup motd_ssh customize diff --git a/install/victoriametrics-install.sh b/install/victoriametrics-install.sh index 6768211bc..fefe732ca 100644 --- a/install/victoriametrics-install.sh +++ b/install/victoriametrics-install.sh @@ -15,9 +15,11 @@ update_os msg_info "Getting latest version of VictoriaMetrics" -victoriametrics_release=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases" | - jq -r --arg a "$(arch_resolve)" '.[] | select(.assets[].name | match("^victoria-metrics-linux-" + $a + "-v[0-9.]+.tar.gz$")) | .tag_name' | +vm_releases_json="$(mktemp)" +github_api_call "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases" "$vm_releases_json" +victoriametrics_release=$(jq -r --arg a "$(arch_resolve)" '.[] | select(.assets[].name | match("^victoria-metrics-linux-" + $a + "-v[0-9.]+.tar.gz$")) | .tag_name' "$vm_releases_json" | head -n 1) +rm -f "$vm_releases_json" victoriametrics_filename="victoria-metrics-linux-$(arch_resolve)-${victoriametrics_release}.tar.gz" vmutils_filename="vmutils-linux-$(arch_resolve)-${victoriametrics_release}.tar.gz" msg_ok "Got version $victoriametrics_release of VictoriaMetrics" @@ -28,12 +30,13 @@ fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuil read -r -p "${TAB3}Would you like to add VictoriaLogs? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - vmlogs_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" | - jq -r '.assets[].name' | + vl_release_json="$(mktemp)" + github_api_call "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" "$vl_release_json" + vmlogs_filename=$(jq -r '.assets[].name' "$vl_release_json" | grep -E "^victoria-logs-linux-$(arch_resolve)-v[0-9.]+\.tar\.gz$") - vlutils_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" | - jq -r '.assets[].name' | + vlutils_filename=$(jq -r '.assets[].name' "$vl_release_json" | grep -E "^vlutils-linux-$(arch_resolve)-v[0-9.]+\.tar\.gz$") + rm -f "$vl_release_json" fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "$vmlogs_filename" fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "$vlutils_filename" fi diff --git a/install/wireguard-install.sh b/install/wireguard-install.sh index b14d7e15f..93a2d7ffd 100644 --- a/install/wireguard-install.sh +++ b/install/wireguard-install.sh @@ -13,37 +13,38 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y git -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y git + msg_ok "Installed Dependencies" -msg_info "Installing WireGuard" -$STD apt install -y wireguard wireguard-tools net-tools iptables -DEBIAN_FRONTEND=noninteractive apt -o Dpkg::Options::="--force-confnew" install -y iptables-persistent &>/dev/null -$STD netfilter-persistent reload -msg_ok "Installed WireGuard" + msg_info "Installing WireGuard" + $STD apt install -y wireguard wireguard-tools net-tools iptables + DEBIAN_FRONTEND=noninteractive apt -o Dpkg::Options::="--force-confnew" install -y iptables-persistent &>/dev/null + $STD netfilter-persistent reload + msg_ok "Installed WireGuard" -read -r -p "${TAB3}Would you like to add WGDashboard? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard + read -r -p "${TAB3}Would you like to add WGDashboard? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard - msg_info "Installing WGDashboard" - cd /etc/wgdashboard/src - chmod u+x wgd.sh - $STD ./wgd.sh install - . /etc/os-release - if [ "$VERSION_CODENAME" = "trixie" ]; then - echo "net.ipv4.ip_forward=1" >>/etc/sysctl.d/sysctl.conf - $STD sysctl -p /etc/sysctl.d/sysctl.conf - else - echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf - $STD sysctl -p /etc/sysctl.conf - fi - msg_ok "Installed WGDashboard" + msg_info "Installing WGDashboard" + cd /etc/wgdashboard/src + chmod u+x wgd.sh + $STD ./wgd.sh install + . /etc/os-release + if [ "$VERSION_CODENAME" = "trixie" ]; then + echo "net.ipv4.ip_forward=1" >>/etc/sysctl.d/sysctl.conf + $STD sysctl -p /etc/sysctl.d/sysctl.conf + else + echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf + $STD sysctl -p /etc/sysctl.conf + fi + msg_ok "Installed WGDashboard" - msg_info "Create Example Config for WGDashboard" - private_key=$(wg genkey) - cat </etc/wireguard/wg0.conf + msg_info "Create Example Config for WGDashboard" + private_key=$(wg genkey) + cat </etc/wireguard/wg0.conf [Interface] PrivateKey = ${private_key} Address = 10.0.0.1/24 @@ -52,10 +53,10 @@ PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACC PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ListenPort = 51820 EOF - msg_ok "Created Example Config for WGDashboard" + msg_ok "Created Example Config for WGDashboard" - msg_info "Creating Service" - cat </etc/systemd/system/wg-dashboard.service + msg_info "Creating Service" + cat </etc/systemd/system/wg-dashboard.service [Unit] After=syslog.target network-online.target Wants=wg-quick.target @@ -75,9 +76,97 @@ Restart=always [Install] WantedBy=multi-user.target EOF - systemctl enable -q --now wg-dashboard - msg_ok "Created Service" -fi + systemctl enable -q --now wg-dashboard + msg_ok "Created Service" + fi +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add \ + iptables \ + openrc + msg_ok "Installed Dependencies" + + msg_info "Installing WireGuard" + $STD apk add --no-cache wireguard-tools + if [[ ! -L /etc/init.d/wg-quick.wg0 ]]; then + ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg0 + fi + + private_key=$(wg genkey) + cat </etc/wireguard/wg0.conf +[Interface] +PrivateKey = ${private_key} +Address = 10.0.0.1/24 +SaveConfig = true +PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; +PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; +ListenPort = 51820 +EOF + echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf + $STD rc-update add sysctl + $STD sysctl -p /etc/sysctl.conf + msg_ok "Installed WireGuard" + + read -rp "${TAB3}Do you want to install WGDashboard? (y/N): " INSTALL_WGD + if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then + msg_info "Installing additional dependencies for WGDashboard" + $STD apk add --no-cache \ + python3 \ + py3-pip \ + git \ + sudo \ + musl-dev \ + linux-headers \ + gcc \ + python3-dev + msg_ok "Installed additional dependencies for WGDashboard" + msg_info "Installing WGDashboard" + git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard + cd /etc/wgdashboard/src + chmod u+x wgd.sh + $STD ./wgd.sh install + msg_ok "Installed WGDashboard" + + msg_info "Creating Service for WGDashboard" + cat </etc/init.d/wg-dashboard +#!/sbin/openrc-run + +description="WireGuard Dashboard Service" + +depend() { + need net + after firewall +} + +start() { + ebegin "Starting WGDashboard" + cd /etc/wgdashboard/src/ + ./wgd.sh start & + eend $? +} + +stop() { + ebegin "Stopping WGDashboard" + pkill -f "wgd.sh" + eend $? +} +EOF + chmod +x /etc/init.d/wg-dashboard + $STD rc-update add wg-dashboard default + $STD rc-service wg-dashboard start + msg_ok "Created Service for WGDashboard" + + fi + + msg_info "Starting Services" + $STD rc-update add wg-quick.wg0 default + $STD rc-service wg-quick.wg0 start + msg_ok "Started Services" +} + +run_os_setup motd_ssh customize diff --git a/install/zigbee2mqtt-install.sh b/install/zigbee2mqtt-install.sh index 4674bdc1d..4aef0688a 100644 --- a/install/zigbee2mqtt-install.sh +++ b/install/zigbee2mqtt-install.sh @@ -13,25 +13,26 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - git \ - build-essential -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + git \ + build-essential + msg_ok "Installed Dependencies" -NODE_VERSION="24" NODE_MODULE="pnpm@$(curl -fsSL https://raw.githubusercontent.com/Koenkk/zigbee2mqtt/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs -fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt" + NODE_VERSION="24" NODE_MODULE="pnpm@$(curl -fsSL https://raw.githubusercontent.com/Koenkk/zigbee2mqtt/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs + fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt" -msg_info "Setting up Zigbee2MQTT" -mv /opt/zigbee2mqtt/data/configuration.example.yaml /opt/zigbee2mqtt/data/configuration.yaml -cd /opt/zigbee2mqtt -echo "packageImportMethod: hardlink" >>./pnpm-workspace.yaml -$STD pnpm install --no-frozen-lockfile -$STD pnpm build -msg_ok "Setup Zigbee2MQTT" + msg_info "Setting up Zigbee2MQTT" + mv /opt/zigbee2mqtt/data/configuration.example.yaml /opt/zigbee2mqtt/data/configuration.yaml + cd /opt/zigbee2mqtt + echo "packageImportMethod: hardlink" >>./pnpm-workspace.yaml + $STD pnpm install --no-frozen-lockfile + $STD pnpm build + msg_ok "Setup Zigbee2MQTT" -msg_info "Creating Service" -cat </etc/systemd/system/zigbee2mqtt.service + msg_info "Creating Service" + cat </etc/systemd/system/zigbee2mqtt.service [Unit] Description=zigbee2mqtt After=network.target @@ -48,8 +49,23 @@ User=root [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now zigbee2mqtt -msg_ok "Created Service" + systemctl enable -q --now zigbee2mqtt + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Alpine-Zigbee2MQTT" + mkdir -p /root/.z2m /etc/zigbee2mqtt + $STD apk add zigbee2mqtt + ln -s /etc/zigbee2mqtt/ /root/.z2m + chown -R root:root /etc/zigbee2mqtt /root/.z2m + sed -i -e 's/#datadir="\/var\/lib\/zigbee2mqtt"/datadir="\/etc\/zigbee2mqtt"/' -e 's/#command_user="zigbee2mqtt"/command_user="root"/' /etc/conf.d/zigbee2mqtt + $STD rc-update add zigbee2mqtt + $STD rc-service zigbee2mqtt restart + msg_ok "Installed Alpine-Zigbee2MQTT" +} + +run_os_setup motd_ssh customize diff --git a/misc/tools.func b/misc/tools.func index e16a37ad3..bfe6cba96 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -1336,6 +1336,10 @@ create_backup() { msg_warn "Skipping backup of '${path}' (not found)" continue fi + if mountpoint -q "$path" 2>/dev/null; then + msg_warn "Skipping backup of '${path}' (is a mount point)" + continue + fi dest="${store}/files${path}" if ! mkdir -p "$(dirname "$dest")" || ! cp -a "$path" "$dest"; then msg_error "Backup of '${path}' failed - aborting update" @@ -2524,9 +2528,9 @@ _download_source_tarball() { # directory). Extracts into , then copies the contents # of that top-level directory into . # -# - Honors CLEAN_INSTALL=1 (wipes first, dotfiles included β€” back -# up config dotfiles like .env via create_backup and call restore_backup -# BEFORE any build step that sources them). +# - Honors CLEAN_INSTALL=1 (wipes first, dotfiles included, mount +# points preserved β€” back up config dotfiles like .env via create_backup +# and call restore_backup BEFORE any build step that sources them). # - Does NOT own : the caller creates it and is responsible for its # cleanup (typically via a RETURN trap on its tmpdir). # - cp failures are non-fatal here, matching the previous inline behavior. @@ -2538,7 +2542,7 @@ _deploy_source_tarball() { mkdir -p "$target" if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then - find "${target:?}" -mindepth 1 -delete + find "${target:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -print0 | xargs -0 rm -rf -- fi tar --no-same-owner -xzf "$tarball" -C "$workdir" || { @@ -2564,9 +2568,9 @@ _deploy_source_tarball() { # a single top-level directory, that directory is stripped (its contents land # directly in ); otherwise the archive contents are copied as-is. # -# - Honors CLEAN_INSTALL=1 (wipes first, dotfiles included β€” back -# up config dotfiles like .env via create_backup and call restore_backup -# BEFORE any build step that sources them). +# - Honors CLEAN_INSTALL=1 (wipes first, dotfiles included, mount +# points preserved β€” back up config dotfiles like .env via create_backup +# and call restore_backup BEFORE any build step that sources them). # - Does NOT own : the caller creates it and cleans it up. # # Returns: 0 on success, 65 on unsupported format, 251 on extraction failure, @@ -2627,7 +2631,7 @@ _deploy_unpacked_archive() { # was truncated, the archive was unreadable, or it unpacked to nothing. mkdir -p "$target" if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then - find "${target:?}" -mindepth 1 -delete + find "${target:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -print0 | xargs -0 rm -rf -- fi if ! cp -r "$source_dir"/* "$target/"; then @@ -9368,7 +9372,7 @@ fetch_and_deploy_from_url() { mkdir -p "$directory" if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then - find "${directory:?}" -mindepth 1 -delete + find "${directory:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -print0 | xargs -0 rm -rf -- fi local unpack_tmp diff --git a/tools/addon/cronmaster.sh b/tools/addon/cronmaster.sh index 2ab4cbb1a..7d8e30747 100644 --- a/tools/addon/cronmaster.sh +++ b/tools/addon/cronmaster.sh @@ -61,7 +61,7 @@ function update() { msg_ok "Stopped service" BACKUP_DIR="/opt/cronmaster_backup" - create_backup "$CONFIG_PATH" + create_backup "$CONFIG_PATH" "$INSTALL_PATH/scripts" "$INSTALL_PATH/data" "$INSTALL_PATH/snippets" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cronmaster" "fccview/cronmaster" "prebuild" "latest" "$INSTALL_PATH" "cronmaster_*_prebuild.tar.gz"