Compare commits

...

122 Commits

Author SHA1 Message Date
7aea03034a Update CHANGELOG.md (#4455)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-14 02:15:13 +02:00
e9960347bf Update versions.json (#4454)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-14 02:14:33 +02:00
3808d4d0b8 Fix json (#4453)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Build and Publish Docker Image / build (push) Has been cancelled
Create Daily Release / create-daily-release (push) Has been cancelled
2025-05-13 23:23:44 +02:00
14c5bf5f75 Update CHANGELOG.md (#4452)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 21:09:09 +02:00
fcc16ae8e1 Jellyfin Media Server: Update configuration path (#4434)
* Update configuration path

* typo
2025-05-13 21:06:37 +02:00
aaf8bdb893 Update CHANGELOG.md (#4451)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 20:00:42 +02:00
db81851db4 openhab. correct some typos (#4448) 2025-05-13 20:00:09 +02:00
a2d92155a5 Update CHANGELOG.md (#4449)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 18:44:30 +02:00
0bd18cc91b fix: improve bridge detection in all network interface configuration files (#4413)
* fix: improve bridge detection in all network interface configuration files

* removed comments

* removed last comment line
2025-05-13 18:44:06 +02:00
1e7981dbb7 Update CHANGELOG.md (#4446)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Auto Update .app-files / update-app-files (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 15:26:16 +02:00
704073cd69 gatus (#4443)
* 'Add new script'

* Update ct/gatus.sh

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-05-13 15:25:38 +02:00
22e1518951 Update CHANGELOG.md (#4445)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 15:20:38 +02:00
57bd730233 Update date in json (#4444)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-13 15:19:04 +02:00
cf1b13e5fb alpine-gatus (#4442)
* 'Add new script'

* Update ct/alpine-gatus.sh

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-05-13 15:18:29 +02:00
9a3b2c076d Update CHANGELOG.md (#4441)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 14:41:27 +02:00
3981cc90c4 Update openhab-install.sh (#4438)
1) Update zulu repo
2) Use zulu17-jdk (previously zulu21-jdk)
2025-05-13 14:40:49 +02:00
592d9d03aa Update versions.json (#4439)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 14:07:30 +02:00
59b00890f9 quickfix broken json 2025-05-13 13:33:50 +02:00
7ee57e7416 Update CHANGELOG.md (#4433)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 10:56:23 +02:00
82a30df0c9 Update json (#4432) 2025-05-13 10:55:37 +02:00
10e1d7e741 Update CHANGELOG.md (#4431)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 10:38:52 +02:00
f85cddadcf update some improvements from dev (tools.func) (#4430)
* Harmonize tools.func from DEV-Repo

* Update tools.func
2025-05-13 10:38:19 +02:00
1700291af7 Update CHANGELOG.md (#4429)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 07:53:01 +02:00
e126e48439 Update pingvin.json (#4426)
Typo in config path
2025-05-13 07:52:28 +02:00
b3bda56498 Update CHANGELOG.md (#4425)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 02:15:26 +02:00
e59f868966 Update versions.json (#4424)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-13 02:14:43 +02:00
a9b53afcc5 Update CHANGELOG.md (#4422)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Auto Update .app-files / update-app-files (push) Has been cancelled
Build and Publish Docker Image / build (push) Has been cancelled
Create Daily Release / create-daily-release (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-12 20:23:27 +02:00
38cf296a4c homarr: fetch versions dynamically from source repo (#4409)
* pull homarr version dynamically from source repo

* fix homarr install to directly fetch pnpm and node version
2025-05-12 20:22:48 +02:00
35c0d269ac Update .app files (#4421)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-12 20:03:45 +02:00
d7211e856e Update CHANGELOG.md (#4420)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-12 20:03:37 +02:00
dfbb1a8035 Alpine-Traefik (#4412) 2025-05-12 20:02:53 +02:00
61b09e926a Update CHANGELOG.md (#4417)
Some checks failed
Auto Update .app-files / update-app-files (push) Has been cancelled
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-12 16:07:32 +02:00
9140fd52ac Use onliner for updates (#4414) 2025-05-12 16:07:07 +02:00
4a3ee4db67 Update CHANGELOG.md (#4416)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-12 15:58:40 +02:00
b333d8c3f9 Feature: LXC-Delete (pve helper): add "all items" (#4296) 2025-05-12 15:58:14 +02:00
245b35d01e Update CHANGELOG.md (#4415)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-12 15:55:06 +02:00
37d20ba0dd Config file Function in build.func (#4411)
* Refactor Config_File function

* Refactor Config_File function
2025-05-12 15:54:38 +02:00
b5062c51af Update versions.json (#4410)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-12 14:07:38 +02:00
1ea830c955 Update CHANGELOG.md (#4407)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-12 11:55:04 +02:00
be31ecf432 Navidrome - Fix config path (use /etc/ instead of /var/lib) (#4406)
* Fix config path for Navidrome (use /etc/ instead of /var/lib)

The default systemd service loads /etc/navidrome/navidrome.toml via -c. Therefore, changes to /var/lib/navidrome/navidrome.toml have no effect unless manually specified.

Thanks for the great scripts!

* Update navidrome.json - forgot "config_path"
2025-05-12 11:54:27 +02:00
c586dfe87f Update CHANGELOG.md (#4400)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-12 02:15:53 +02:00
7f65be34ff Update versions.json (#4399)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-12 02:15:23 +02:00
c158dbb3ea Update CHANGELOG.md (#4393)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Build and Publish Docker Image / build (push) Has been cancelled
Create Daily Release / create-daily-release (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-11 17:13:12 +02:00
95acf8c018 Enable ElasticSearch service (#4391) 2025-05-11 17:12:46 +02:00
6c5aa6677a Update versions.json (#4392)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-11 14:06:43 +02:00
43ff379ed4 Update CHANGELOG.md (#4388)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-11 02:15:59 +02:00
2c2849179a Update versions.json (#4387)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-11 02:15:20 +02:00
d116505ff2 Update CHANGELOG.md (#4384)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Build and Publish Docker Image / build (push) Has been cancelled
Create Daily Release / create-daily-release (push) Has been cancelled
Auto Update .app-files / update-app-files (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-10 23:24:23 +02:00
42535e14ab (fix) Documenso: fix build failures (#4382)
- change build command
- change port in ENV file; remove unneeded sed cmds
- change systemd service file
- ensure turbo daemon is stopped to prevent hang on exit
2025-05-10 23:23:51 +02:00
990ce16a7d Portainer is on https port (#4371)
Some checks failed
Auto Update .app-files / update-app-files (push) Has been cancelled
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
2025-05-10 15:23:43 +02:00
af1cf0bc71 Fix verbose (#4373) 2025-05-10 15:23:13 +02:00
e166115745 Update versions.json (#4379)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-10 14:06:45 +02:00
bdef92cc71 Update CHANGELOG.md (#4378)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-10 08:43:49 +02:00
1e59c934ec Jellyseerr: better handling of node and pnpm (#4365)
* Jellyseerr: better handling of node and pnpm

* Update jellyseerr.sh
2025-05-10 08:42:45 +02:00
456b00882d Update CHANGELOG.md (#4377)
Some checks failed
Auto Update .app-files / update-app-files (push) Has been cancelled
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-10 02:14:47 +02:00
9b8a30c84f Update versions.json (#4376)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-10 02:14:03 +02:00
3b90e3fe15 Update CHANGELOG.md (#4374)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-10 01:55:40 +02:00
5e3a5bb24c HomeAssistant-Core: update script for 2025.5+ (#4363)
* HomeAssistant-Core: update script for 2025.5+

* Update homeassistant-core-install.sh
2025-05-10 01:55:09 +02:00
7413a03009 Update CHANGELOG.md (#4367)
Some checks failed
Auto Update .app-files / update-app-files (push) Has been cancelled
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Build and Publish Docker Image / build (push) Has been cancelled
Create Daily Release / create-daily-release (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-09 23:24:43 +02:00
bb1c9d73c4 Authentik: change install to UV & increase resources to 10GB RAM (#4364) 2025-05-09 23:24:06 +02:00
3b5a901832 Revert "fix: detect all bridge types, not just vmbr prefix (#4351)" (#4362)
This reverts commit 9d21ceacc3.
2025-05-09 21:55:07 +02:00
a62a4876ec Update CHANGELOG.md (#4358)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-09 20:53:25 +02:00
9d21ceacc3 fix: detect all bridge types, not just vmbr prefix (#4351) 2025-05-09 20:53:01 +02:00
c604aeb064 fix app/application var mapping (#4357) 2025-05-09 20:30:29 +02:00
9b9ed2f6e1 Update CHANGELOG.md (#4348)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-09 15:33:19 +02:00
1ddc74d2b5 Update versions.json (#4347)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-09 15:32:39 +02:00
ee9f6dd818 Update CHANGELOG.md (#4346)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-09 15:28:43 +02:00
a1754dff4e Feature: Autologin for Alpine (#4344) 2025-05-09 15:28:12 +02:00
4827a17ba3 Update CHANGELOG.md (#4336)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-09 15:24:04 +02:00
b5ed7b9f4e Auto-Merge Automatic PR (#4343)
* Make Automatic issues auto-close

* Change PAT
2025-05-09 15:20:43 +02:00
ab9760194d Add a Repo check to all Workflows (#4339) 2025-05-09 13:15:59 +02:00
abb5b6d5ac Update versions.json (#4332)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-09 12:08:58 +02:00
4656fe21f9 remove documenso/suwayomi from website 2025-05-09 11:19:23 +02:00
93e503eb87 Upscale resources (#4329)
Some checks failed
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Auto Update .app-files / update-app-files (push) Has been cancelled
Build and Publish Docker Image / build (push) Has been cancelled
Create Daily Release / create-daily-release (push) Has been cancelled
2025-05-08 21:41:59 +02:00
6ab80dc5e3 Update streamlink-webui.sh (#4328) 2025-05-08 19:50:53 +02:00
ceaff9006a Update CHANGELOG.md (#4325)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-08 16:18:12 +02:00
c749fe6fb0 Update build.func (#4327) 2025-05-08 16:17:48 +02:00
402586756f build.func Change the menu for Bridge Selection (#4326)
* Change the menu for Bridge Selection

* Change the menu for Bridge Selection

* Change the menu for Bridge Selection
2025-05-08 15:50:34 +02:00
19800da808 Update CHANGELOG.md (#4323)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-08 15:21:13 +02:00
d62da0c982 Update versions.json (#4324)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-08 15:20:58 +02:00
41df1d5a76 Update searxng-install.sh (#4322)
Some checks failed
Auto Update .app-files / update-app-files (push) Has been cancelled
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
The build script in the repository needs to use the same Python virtualenv as the running one. This change is suggested from their docs: https://docs.searxng.org/admin/installation-searxng.html#install-searxng-dependencies
2025-05-08 14:04:19 +02:00
bcdf8f15e7 Update openwrt.sh 2025-05-08 13:23:22 +02:00
326cbc3bec Update CHANGELOG.md (#4315)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-08 13:03:54 +02:00
607d966322 Bugfix: Mikrotik & Pimox HAOS VM (NEXTID) (#4313) 2025-05-08 12:57:27 +02:00
69298090ce FAQ: Explanation "updatable" (#4300)
* Update FAQ

* Update frontend/src/config/faqConfig.tsx
2025-05-08 11:01:42 +02:00
9c7d50fdff Update versions.json (#4307) 2025-05-08 10:51:27 +02:00
fabbe8fe59 Update streamlink-webui.sh (#4314) 2025-05-08 10:50:45 +02:00
6abb55ba86 Update CHANGELOG.md (#4293)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-08 06:38:00 +02:00
9cddbbd986 Update docs (#4298)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Build and Publish Docker Image / build (push) Has been cancelled
Create Daily Release / create-daily-release (push) Has been cancelled
2025-05-07 15:21:03 +02:00
31c7c9301c Update versions.json (#4297)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Auto Update .app-files / update-app-files (push) Has been cancelled
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-07 14:32:30 +02:00
c9aad3a54d Feature: get correct next VMID (#4292)
fix(vm-creation): ensure whiptail VMID inputbox is pre-filled with a valid and available ID

- Replaced hardcoded NEXTID usage with a new get_valid_nextid() function
- Ensures no collision with existing VMs, LXCs or orphaned LVM volumes
- Improves user experience by properly pre-filling whiptail inputbox
- Automatically skips invalid IDs instead of failing on alloc
2025-05-07 12:37:46 +02:00
ebc17e120e Update CHANGELOG.md (#4290)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-07 10:45:52 +02:00
1ebb1782fa Give more disk space to LXC (#4288) 2025-05-07 10:40:49 +02:00
cce3ca1996 Update CHANGELOG.md (#4287)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-07 10:04:46 +02:00
eb6018ac01 SuwayomiServer: Bump Java to v21, code formating (#3987)
* Bump java to v21, code formating

* Refactoring

* Update

* Update

* Update suwayomiserver.sh

---------

Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-05-07 09:52:39 +02:00
3b54371d5c Update versions.json (#4285) 2025-05-07 08:20:00 +02:00
67cd29e9f2 Update CHANGELOG.md (#4281)
Some checks failed
Crawl Versions from newreleases.io / crawl-versions (push) Has been cancelled
Auto Update .app-files / update-app-files (push) Has been cancelled
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Build and Publish Docker Image / build (push) Has been cancelled
Create Daily Release / create-daily-release (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 16:27:08 +02:00
0f4c14ff41 Update .app files (#4282)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 15:51:53 +02:00
5d9795139e 'Add new script' (#4277)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2025-05-06 15:28:02 +02:00
0bbbd5de10 Update CHANGELOG.md (#4278)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 14:40:46 +02:00
8963d8dec9 Update .app files (#4280)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 14:39:07 +02:00
eeb7766f36 Update date in json (#4279)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 14:38:52 +02:00
e7d4630fa5 streamlink-webui (#4262)
* 'Add new script'

* Update streamlink-webui.sh

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-05-06 14:35:03 +02:00
0f19440864 Update versions.json (#4275)
Some checks failed
Auto Update .app-files / update-app-files (push) Has been cancelled
Create Changelog Pull Request / update-changelog-pull-request (push) Has been cancelled
Close Discussion on PR Merge / close-discussion (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Frontend CI/CD / build (push) Has been cancelled
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 14:09:33 +02:00
d0a3510b96 Update CHANGELOG.md (#4273)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:28:09 +02:00
0946b5220f Update CHANGELOG.md (#4271)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:16:26 +02:00
d5a64ee41c Update .app files (#4272)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:15:47 +02:00
067d60978c Update CHANGELOG.md (#4267)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:13:14 +02:00
4b89174542 Update .app files (#4270)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:12:53 +02:00
0a2a1b4692 Update date in json (#4269)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:12:31 +02:00
4d99838209 Fumadocs (#4263)
* 'Add new script'

* change source

* remove node options

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-05-06 11:11:45 +02:00
27ac2633c7 alpine-rclone (#4265)
* 'Add new script'

* path

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-05-06 11:10:37 +02:00
1bff7fe861 Update .app files (#4268)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:09:12 +02:00
a9c36a9417 Update date in json (#4266)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 11:09:00 +02:00
8e26cd4d9d 'Add new script' (#4264)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2025-05-06 11:07:45 +02:00
237c920893 Update CHANGELOG.md (#4256)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 09:52:26 +02:00
354d95eb2d Update build.func 2025-05-06 09:50:11 +02:00
e7f0f09dee Bugfix: Menu - Cancel (#4259) 2025-05-06 09:34:39 +02:00
093a1aacf6 Update .app files (#4258)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-05-06 09:23:58 +02:00
afbac8e2f0 Re-Add: ActualBudget (#4228)
* Re-Add ActualBudget

* path fix

* Update install/actualbudget-install.sh

Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>

* Update install/actualbudget-install.sh

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

* Update frontend/public/json/actualbudget.json

Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>

* Update actualbudget.sh

* add config path

* Update actualbudget.sh

---------

Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-05-06 09:16:34 +02:00
17c3163a2a Update build.func 2025-05-06 09:03:18 +02:00
f0a96b9a7b Update versions.json (#4255)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-06 06:53:14 +02:00
114 changed files with 3217 additions and 1272 deletions

View File

@ -10,6 +10,7 @@ on:
jobs:
update-app-files:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
permissions:
@ -89,15 +90,16 @@ jobs:
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
fi
- name: Re-approve pull request after update
- name: Approve pull request and merge
if: env.changed == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_TOKEN: ${{ secrets.PAT_AUTOMERGE }}
run: |
PR_NUMBER=$(gh pr list --head "pr-update-app-files" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
gh pr merge $PR_NUMBER --squash --admin
fi
# Step 8: Output success message when no changes

View File

@ -7,6 +7,7 @@ on:
jobs:
autolabeler:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
permissions:
pull-requests: write

View File

@ -7,6 +7,7 @@ on:
jobs:
update-changelog-pull-request:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
env:
CONFIG_PATH: .github/changelog-pr-config.json
@ -263,6 +264,17 @@ jobs:
gh pr review $PR_NUMBER --approve
fi
- name: Approve pull request and merge
if: env.changed == 'true'
env:
GH_TOKEN: ${{ secrets.PAT_AUTOMERGE }}
run: |
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
gh pr merge $PR_NUMBER --squash --admin
fi
- name: Re-approve pull request after update
if: env.changed == 'true'
env:
@ -271,4 +283,4 @@ jobs:
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
fi
fi

View File

@ -11,6 +11,7 @@ permissions:
jobs:
close-discussion:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
steps:

View File

@ -5,6 +5,7 @@ on:
jobs:
close_tteck_issues:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: ubuntu-latest
steps:
- name: Auto-close if tteck script detected

View File

@ -5,7 +5,7 @@ on:
- closed
jobs:
close_issue:
if: github.event.pull_request.merged == true
if: github.event.pull_request.merged == true && github.repository == 'community-scripts/ProxmoxVE'
runs-on: ubuntu-latest
steps:

View File

@ -12,6 +12,7 @@ permissions:
jobs:
crawl-versions:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
steps:
@ -103,6 +104,17 @@ jobs:
gh pr review $PR_NUMBER --approve
fi
- name: Approve pull request and merge
if: env.changed == 'true'
env:
GH_TOKEN: ${{ secrets.PAT_AUTOMERGE }}
run: |
PR_NUMBER=$(gh pr list --head "update_versions" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
gh pr merge $PR_NUMBER --squash --admin
fi
- name: Re-approve pull request after update
if: env.changed == 'true'
env:

View File

@ -11,6 +11,7 @@ on:
jobs:
build:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: ubuntu-latest #To ensure it always builds we use the github runner with all the right tooling
steps:

View File

@ -9,6 +9,7 @@ on:
jobs:
delete_branch:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
steps:
- name: Checkout the code
@ -25,4 +26,4 @@ jobs:
git push origin --delete "$PR_BRANCH"
else
echo "Skipping deletion of the main branch"
fi
fi

View File

@ -25,6 +25,7 @@ concurrency:
jobs:
build:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
defaults:
run:
@ -63,7 +64,7 @@ jobs:
deploy:
runs-on: ubuntu-latest
needs: build
if: github.ref == 'refs/heads/main'
if: github.ref == 'refs/heads/main' && github.repository == 'community-scripts/ProxmoxVE'
permissions:
pages: write
id-token: write

View File

@ -7,6 +7,7 @@ on:
jobs:
create-daily-release:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
permissions:
contents: write

View File

@ -11,6 +11,7 @@ on:
jobs:
run-install-script:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: pvenode
steps:
- name: Checkout PR branch

View File

@ -11,6 +11,7 @@ on:
jobs:
run-install-script:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: pvenode
steps:
- name: Checkout PR branch (supports forks)

View File

@ -72,8 +72,7 @@ network_check() {
update_os() {
msg_info "Updating Container OS"
apk update
apk upgrade
$STD apk -U upgrade
msg_ok "Updated Container OS"
}
@ -83,4 +82,4 @@ motd_ssh() {
customize() {
return
}
}

View File

@ -10,6 +10,7 @@ on:
jobs:
update-app-files:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
permissions:
@ -125,6 +126,16 @@ jobs:
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
fi
- name: Approve pull request and merge
if: env.changed == 'true'
env:
GH_TOKEN: ${{ secrets.PAT_AUTOMERGE }}
run: |
PR_NUMBER=$(gh pr list --head "${{ env.BRANCH_NAME }}" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
gh pr merge $PR_NUMBER --squash --admin
fi
- name: No changes detected
if: env.changed == 'false'

View File

@ -9,6 +9,7 @@ on:
jobs:
check-files:
if: github.repository == 'community-scripts/ProxmoxVE'
name: Check changed files
runs-on: runner-cluster-htl-set
permissions:

View File

@ -14,6 +14,168 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
## 2025-05-14
## 2025-05-13
### 🆕 New Scripts
- gatus ([#4443](https://github.com/community-scripts/ProxmoxVE/pull/4443))
- alpine-gatus ([#4442](https://github.com/community-scripts/ProxmoxVE/pull/4442))
### 🚀 Updated Scripts
- update some improvements from dev (tools.func) [@MickLesk](https://github.com/MickLesk) ([#4430](https://github.com/community-scripts/ProxmoxVE/pull/4430))
- #### 🐞 Bug Fixes
- openhab: use zulu17-jdk [@moodyblue](https://github.com/moodyblue) ([#4438](https://github.com/community-scripts/ProxmoxVE/pull/4438))
- #### 🔧 Refactor
- openhab. correct some typos [@moodyblue](https://github.com/moodyblue) ([#4448](https://github.com/community-scripts/ProxmoxVE/pull/4448))
### 🧰 Maintenance
- #### 💾 Core
- fix: improve bridge detection in all network interface configuration files [@filippolauria](https://github.com/filippolauria) ([#4413](https://github.com/community-scripts/ProxmoxVE/pull/4413))
### 🌐 Website
- #### 📝 Script Information
- Jellyfin Media Server: Update configuration path [@tremor021](https://github.com/tremor021) ([#4434](https://github.com/community-scripts/ProxmoxVE/pull/4434))
- Pingvin Share: Added explanation on how to add/edit environment variables [@tremor021](https://github.com/tremor021) ([#4432](https://github.com/community-scripts/ProxmoxVE/pull/4432))
- pingvin.json: fix typo [@warmbo](https://github.com/warmbo) ([#4426](https://github.com/community-scripts/ProxmoxVE/pull/4426))
## 2025-05-12
### 🆕 New Scripts
- Alpine-Traefik [@MickLesk](https://github.com/MickLesk) ([#4412](https://github.com/community-scripts/ProxmoxVE/pull/4412))
### 🚀 Updated Scripts
- Alpine: Use onliner for updates [@tremor021](https://github.com/tremor021) ([#4414](https://github.com/community-scripts/ProxmoxVE/pull/4414))
- #### 🐞 Bug Fixes
- homarr: fetch versions dynamically from source repo [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4409](https://github.com/community-scripts/ProxmoxVE/pull/4409))
- #### ✨ New Features
- Feature: LXC-Delete (pve helper): add "all items" [@MickLesk](https://github.com/MickLesk) ([#4296](https://github.com/community-scripts/ProxmoxVE/pull/4296))
### 🧰 Maintenance
- #### 💾 Core
- Config file Function in build.func [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4411](https://github.com/community-scripts/ProxmoxVE/pull/4411))
### 🌐 Website
- #### 📝 Script Information
- Navidrome - Fix config path (use /etc/ instead of /var/lib) [@quake1508](https://github.com/quake1508) ([#4406](https://github.com/community-scripts/ProxmoxVE/pull/4406))
## 2025-05-11
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Zammad: Enable ElasticSearch service [@tremor021](https://github.com/tremor021) ([#4391](https://github.com/community-scripts/ProxmoxVE/pull/4391))
## 2025-05-10
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- (fix) Documenso: fix build failures [@vhsdream](https://github.com/vhsdream) ([#4382](https://github.com/community-scripts/ProxmoxVE/pull/4382))
- Jellyseerr: better handling of node and pnpm [@MickLesk](https://github.com/MickLesk) ([#4365](https://github.com/community-scripts/ProxmoxVE/pull/4365))
## 2025-05-09
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Authentik: change install to UV & increase resources to 10GB RAM [@MickLesk](https://github.com/MickLesk) ([#4364](https://github.com/community-scripts/ProxmoxVE/pull/4364))
- #### ✨ New Features
- HomeAssistant-Core: update script for 2025.5+ [@MickLesk](https://github.com/MickLesk) ([#4363](https://github.com/community-scripts/ProxmoxVE/pull/4363))
- Feature: autologin for Alpine [@MickLesk](https://github.com/MickLesk) ([#4344](https://github.com/community-scripts/ProxmoxVE/pull/4344))
### 🧰 Maintenance
- #### 💾 Core
- fix: detect all bridge types, not just vmbr prefix [@filippolauria](https://github.com/filippolauria) ([#4351](https://github.com/community-scripts/ProxmoxVE/pull/4351))
- #### 📂 Github
- Add a Repo check to all Workflows [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4339](https://github.com/community-scripts/ProxmoxVE/pull/4339))
- Auto-Merge Automatic PR [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4343](https://github.com/community-scripts/ProxmoxVE/pull/4343))
## 2025-05-08
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- SearXNG: fix to resolve yaml dependency error [@Biendeo](https://github.com/Biendeo) ([#4322](https://github.com/community-scripts/ProxmoxVE/pull/4322))
- Bugfix: Mikrotik & Pimox HAOS VM (NEXTID) [@MickLesk](https://github.com/MickLesk) ([#4313](https://github.com/community-scripts/ProxmoxVE/pull/4313))
### 🧰 Maintenance
- #### 💾 Core
- build.func Change the menu for Bridge Selection [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4326](https://github.com/community-scripts/ProxmoxVE/pull/4326))
### 🌐 Website
- FAQ: Explanation "updatable" [@tremor021](https://github.com/tremor021) ([#4300](https://github.com/community-scripts/ProxmoxVE/pull/4300))
## 2025-05-07
### 🚀 Updated Scripts
- Alpine scripts: Set minimum disk space to 0.5GB [@tremor021](https://github.com/tremor021) ([#4288](https://github.com/community-scripts/ProxmoxVE/pull/4288))
- #### 🐞 Bug Fixes
- SuwayomiServer: Bump Java to v21, code formating [@tremor021](https://github.com/tremor021) ([#3987](https://github.com/community-scripts/ProxmoxVE/pull/3987))
- #### ✨ New Features
- Feature: get correct next VMID [@MickLesk](https://github.com/MickLesk) ([#4292](https://github.com/community-scripts/ProxmoxVE/pull/4292))
### 🌐 Website
- #### 📝 Script Information
- OpenWebUI: Update docs link [@tremor021](https://github.com/tremor021) ([#4298](https://github.com/community-scripts/ProxmoxVE/pull/4298))
## 2025-05-06
### 🆕 New Scripts
- alpine-transmission ([#4277](https://github.com/community-scripts/ProxmoxVE/pull/4277))
- streamlink-webui ([#4262](https://github.com/community-scripts/ProxmoxVE/pull/4262))
- Fumadocs ([#4263](https://github.com/community-scripts/ProxmoxVE/pull/4263))
- alpine-rclone ([#4265](https://github.com/community-scripts/ProxmoxVE/pull/4265))
- alpine-tinyauth ([#4264](https://github.com/community-scripts/ProxmoxVE/pull/4264))
- Re-Add: ActualBudget [@MickLesk](https://github.com/MickLesk) ([#4228](https://github.com/community-scripts/ProxmoxVE/pull/4228))
### 🧰 Maintenance
- #### 🐞 Bug Fixes
- whiptail menu - cancel button now exists the advanced menu [@MickLesk](https://github.com/MickLesk) ([#4259](https://github.com/community-scripts/ProxmoxVE/pull/4259))
## 2025-05-05
### 🆕 New Scripts

67
ct/actualbudget.sh Normal file
View File

@ -0,0 +1,67 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://actualbudget.org/
APP="Actual Budget"
var_tags="finance"
var_cpu="2"
var_ram="2048"
var_disk="4"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/actualbudget ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
NODE_VERSION="22"
install_node_and_modules
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ -f /opt/actualbudget-data/config.json ]]; then
if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then
msg_info "Stopping ${APP}"
systemctl stop actualbudget
msg_ok "${APP} Stopped"
msg_info "Updating ${APP} to ${RELEASE}"
$STD npm update -g @actual-app/sync-server
echo "${RELEASE}" >/opt/actualbudget_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"
msg_info "Starting ${APP}"
systemctl start actualbudget
msg_ok "Restarted ${APP}"
else
msg_info "${APP} is already up to date"
fi
else
msg_info "Old Installation Found, you need to migrate your data and recreate to a new container"
msg_info "Please follow the instructions on the ${APP} website to migrate your data"
msg_info "https://actualbudget.org/docs/backup-restore/backup"
exit 1
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:5006${CL}"

View File

@ -20,21 +20,20 @@ color
catch_errors
function update_script() {
header_info
msg_info "Updating Alpine Packages"
$STD apk update
$STD apk upgrade
msg_ok "Updated Alpine Packages"
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 "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_info "Restarting AdGuard Home"
$STD rc-service adguardhome restart
msg_ok "Restarted AdGuard Home"
exit 0
exit 0
}
start

View File

@ -36,7 +36,7 @@ function update_script() {
header_info
case $CHOICE in
1)
apk update && apk upgrade
$STD apk -U upgrade
exit
;;
esac
@ -47,4 +47,4 @@ start
build_container
description
msg_ok "Completed Successfully!\n"
msg_ok "Completed Successfully!\n"

62
ct/alpine-gatus.sh Normal file
View File

@ -0,0 +1,62 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 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:-256}"
var_disk="${var_disk:-3}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}"
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 1
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 "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

View File

@ -20,19 +20,18 @@ color
catch_errors
function update_script() {
header_info
msg_info "Updating Alpine Packages"
apk update
apk upgrade
msg_ok "Updated Alpine Packages"
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 "Updating Gitea"
apk upgrade gitea
msg_ok "Updated Gitea"
msg_info "Restarting Gitea"
rc-service gitea restart
msg_ok "Restarted Gitea"
msg_info "Restarting Gitea"
rc-service gitea restart
msg_ok "Restarted Gitea"
}
start
@ -42,4 +41,4 @@ description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"

View File

@ -39,7 +39,7 @@ function update_script() {
header_info
case $CHOICE in
1)
apk update && apk upgrade
$STD apk -U upgrade
exit
;;
2)
@ -62,4 +62,4 @@ description
msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
${BL}http://${IP}:3000${CL} \n"
${BL}http://${IP}:3000${CL} \n"

View File

@ -9,7 +9,7 @@ APP="Alpine-IT-Tools"
var_tags="${var_tags:-alpine;development}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
var_disk="${var_disk:-0.2}"
var_disk="${var_disk:-0.5}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}"
@ -20,32 +20,32 @@ color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
header_info
check_container_storage
check_container_resources
if [ ! -d /usr/share/nginx/html ]; then
msg_error "No ${APP} Installation Found!"
exit 1
fi
if [ ! -d /usr/share/nginx/html ]; then
msg_error "No ${APP} Installation Found!"
exit 1
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ] || [ ! -f /opt/${APP}_version.txt ]; then
DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip"
msg_info "Updating ${APP} LXC"
curl -fsSL -o it-tools.zip "$DOWNLOAD_URL"
mkdir -p /usr/share/nginx/html
rm -rf /usr/share/nginx/html/*
unzip -q it-tools.zip -d /tmp/it-tools
cp -r /tmp/it-tools/dist/* /usr/share/nginx/html
rm -rf /tmp/it-tools
rm -f it-tools.zip
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ] || [ ! -f /opt/${APP}_version.txt ]; then
DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip"
msg_info "Updating ${APP} LXC"
curl -fsSL -o it-tools.zip "$DOWNLOAD_URL"
mkdir -p /usr/share/nginx/html
rm -rf /usr/share/nginx/html/*
unzip -q it-tools.zip -d /tmp/it-tools
cp -r /tmp/it-tools/dist/* /usr/share/nginx/html
rm -rf /tmp/it-tools
rm -f it-tools.zip
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit 0
exit 0
}
start
@ -55,4 +55,4 @@ 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 "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@ -20,20 +20,19 @@ color
catch_errors
function update_script() {
msg_info "Updating Alpine Packages"
$STD apk update
$STD apk upgrade
msg_ok "Updated Alpine Packages"
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 "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_info "Restarting MariaDB"
$STD rc-service mariadb restart
msg_ok "Restarted MariaDB"
exit 0
exit 0
}
start

View File

@ -20,24 +20,23 @@ color
catch_errors
function update_script() {
msg_info "Updating Alpine Packages"
$STD apk update
$STD apk upgrade
msg_ok "Updated Alpine Packages"
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.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 "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_info "Restarting Node-RED"
$STD rc-service nodered restart
msg_ok "Restarted Node-RED"
exit 0
exit 0
}
start

View File

@ -21,8 +21,7 @@ catch_errors
function update_script() {
msg_info "Updating Alpine Packages"
$STD apk update
$STD apk upgrade
$STD apk -U upgrade
msg_ok "Updated Alpine Packages"
msg_info "Updating PostgreSQL"

View File

@ -20,20 +20,19 @@ color
catch_errors
function update_script() {
msg_info "Updating Alpine Packages"
$STD apk update
$STD apk upgrade
msg_ok "Updated Alpine Packages"
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 "Updating Prometheus"
$STD apk upgrade prometheus
msg_ok "Updated Prometheus"
msg_info "Restarting Prometheus"
$STD rc-service prometheus restart
msg_ok "Restarted Prometheus"
msg_info "Restarting Prometheus"
$STD rc-service prometheus restart
msg_ok "Restarted Prometheus"
exit 0
exit 0
}
start

55
ct/alpine-rclone.sh Normal file
View File

@ -0,0 +1,55 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 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.21}"
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/rclone ]; then
msg_error "No ${APP} Installation Found!"
exit 1
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-amd64.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 "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"

69
ct/alpine-tinyauth.sh Normal file
View File

@ -0,0 +1,69 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/steveiliop56/tinyauth
APP="Alpine-tinyauth"
var_tags="${var_tags:-alpine;auth}"
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.21}"
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 1
fi
msg_info "Updating Alpine Packages"
$STD apk -U upgrade
msg_ok "Updated Alpine Packages"
msg_info "Updating tinyauth"
RELEASE=$(curl -s https://api.github.com/repos/steveiliop56/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/tinyauth_version.txt)" ] || [ ! -f /opt/tinyauth_version.txt ]; then
$STD service tinyauth stop
temp_file=$(mktemp)
cp /opt/tinyauth/.env /opt
rm -rf /opt/tinyauth
mkdir -p /opt/tinyauth
curl -fsSL "https://github.com/steveiliop56/tinyauth/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar -xzf "$temp_file" -C /opt/tinyauth --strip-components=1
cd /opt/tinyauth/frontend
$STD bun install
$STD bun run build
mv dist /opt/tinyauth/internal/assets/
cd /opt/tinyauth
$STD go mod download
CGO_ENABLED=0 go build -ldflags "-s -w"
cp /opt/.env /opt/tinyauth
echo "${RELEASE}" >/opt/tinyauth_version.txt
rm -f "$temp_file"
msg_info "Restarting tinyauth"
$STD service tinyauth start
msg_ok "Restarted tinyauth"
msg_ok "Updated tinyauth"
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 "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"

41
ct/alpine-traefik.sh Normal file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 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.21}"
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 "Upgrading traefik from edge"
$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
msg_ok "Upgraded traefik"
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} WebUI Access (if configured) - using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/dashboard${CL}"

45
ct/alpine-transmission.sh Normal file
View File

@ -0,0 +1,45 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 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.21}"
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"
exit 1
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9091${CL}"

View File

@ -37,14 +37,15 @@ function update_script() {
header_info
case $CHOICE in
1)
apk update && apk upgrade && rc-service vaultwarden restart -q
$STD apk -U upgrade
rc-service vaultwarden restart -q
exit
;;
2)
if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Setup your ADMIN_TOKEN (make it strong)" 10 58 3>&1 1>&2 2>&3); then
if [[ -z "$NEWTOKEN" ]]; then exit-script; fi
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)
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
@ -65,4 +66,4 @@ description
msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
${BL}http://${IP}:8000${CL} \n"
${BL}http://${IP}:8000${CL} \n"

View File

@ -21,8 +21,7 @@ catch_errors
function update_script() {
msg_info "Updating Alpine Packages"
$STD apk update
$STD apk upgrade
$STD apk -U upgrade
msg_ok "Updated Alpine Packages"
msg_info "update wireguard-tools"

View File

@ -36,7 +36,7 @@ function update_script() {
header_info
case $CHOICE in
1)
apk update && apk upgrade
$STD apk -U upgrade
exit
;;
esac
@ -47,4 +47,4 @@ start
build_container
description
msg_ok "Completed Successfully!\n"
msg_ok "Completed Successfully!\n"

View File

@ -9,7 +9,7 @@ APP="Alpine"
var_tags="${var_tags:-os;alpine}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-0.1}"
var_disk="${var_disk:-0.5}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.21}"
var_unprivileged="${var_unprivileged:-1}"
@ -20,13 +20,15 @@ color
catch_errors
function update_script() {
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 1 \
"1" "Check for Alpine Updates" ON \
3>&1 1>&2 2>&3)
UPD=$(
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 1 \
"1" "Check for Alpine Updates" ON \
3>&1 1>&2 2>&3
)
header_info
if [ "$UPD" == "1" ]; then
apk update && apk upgrade
$STD apk -U upgrade
exit
fi
}
@ -35,4 +37,4 @@ start
build_container
description
msg_ok "Completed Successfully!\n"
msg_ok "Completed Successfully!\n"

View File

@ -9,7 +9,7 @@ APP="Authentik"
var_tags="${var_tags:-identity-provider}"
var_disk="${var_disk:-12}"
var_cpu="${var_cpu:-6}"
var_ram="${var_ram:-8192}"
var_ram="${var_ram:-10240}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
@ -29,6 +29,13 @@ function update_script() {
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/goauthentik/authentik/releases/latest | grep "tarball_url" | awk '{print substr($2, 2, length($2)-3)}')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
NODE_VERSION="22"
PG_VERSION="16"
setup_uv
install_postgresql
install_node_and_modules
install_go
msg_info "Stopping ${APP}"
systemctl stop authentik-server
systemctl stop authentik-worker
@ -54,17 +61,14 @@ function update_script() {
go build -o /opt/authentik/authentik-server /opt/authentik/cmd/server/
msg_ok "Built ${APP} server"
msg_info "Installing Python Dependencies"
msg_info "Building Authentik"
cd /opt/authentik
$STD poetry install --only=main --no-ansi --no-interaction --no-root
$STD poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt
$STD pip install --no-cache-dir -r requirements.txt
$STD pip install .
msg_ok "Installed Python Dependencies"
$STD uv sync --frozen --no-install-project --no-dev
uv run python -m lifecycle.migrate
ln -s /opt/authentik/.venv/bin/gunicorn /usr/local/bin/gunicorn
ln -s /opt/authentik/.venv/bin/celery /usr/local/bin/celery
msg_ok "Authentik built"
msg_info "Updating ${APP} to v${RELEASE} (Patience)"
cp -r /opt/authentik/authentik/blueprints /opt/authentik/blueprints
$STD bash /opt/authentik/lifecycle/ak migrate
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to v${RELEASE}"

View File

@ -20,46 +20,51 @@ color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/documenso ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/documenso/documenso/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping ${APP}"
systemctl stop documenso
msg_ok "${APP} Stopped"
msg_info "Updating ${APP} to ${RELEASE}"
cp /opt/documenso/.env /opt/
rm -rf /opt/documenso
cd /opt
curl -fsSL "https://github.com/documenso/documenso/archive/refs/tags/v${RELEASE}.zip" -o v${RELEASE}.zip
unzip -q v${RELEASE}.zip
mv documenso-${RELEASE} /opt/documenso
cd /opt/documenso
mv /opt/.env /opt/documenso/.env
$STD npm install
$STD npm run build:web
$STD npm run prisma:migrate-deploy
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}"
msg_info "Starting ${APP}"
systemctl start documenso
msg_ok "Started ${APP}"
msg_info "Cleaning Up"
rm -rf /opt/v${RELEASE}.zip
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/documenso ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/documenso/documenso/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping ${APP}"
systemctl stop documenso
msg_ok "${APP} Stopped"
msg_info "Updating ${APP} to ${RELEASE}"
cp /opt/documenso/.env /opt/
rm -rf /opt/documenso
cd /opt
curl -fsSL "https://github.com/documenso/documenso/archive/refs/tags/v${RELEASE}.zip" -o v${RELEASE}.zip
unzip -q v${RELEASE}.zip
mv documenso-${RELEASE} /opt/documenso
cd /opt/documenso
mv /opt/.env /opt/documenso/.env
export TURBO_CACHE=1
export NEXT_TELEMETRY_DISABLED=1
export CYPRESS_INSTALL_BINARY=0
export NODE_OPTIONS="--max-old-space-size=4096"
$STD npm ci
$STD turbo run build --filter=@documenso/remix
$STD npm run prisma:migrate-deploy
$STD turbo daemon stop
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}"
msg_info "Starting ${APP}"
systemctl start documenso
msg_ok "Started ${APP}"
msg_info "Cleaning Up"
rm -rf /opt/v${RELEASE}.zip
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}
start

72
ct/fumadocs.sh Normal file
View File

@ -0,0 +1,72 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/fuma-nama/fumadoc
APP="Fumadocs"
var_tags="${var_tags:-documentation}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-5}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/fumadocs ]]; then
msg_error "No installation found in /opt/fumadocs!"
exit 1
fi
if [[ ! -f /opt/fumadocs/.projectname ]]; then
msg_error "Project name file not found: /opt/fumadocs/.projectname!"
exit 1
fi
NODE_VERSION="22" NODE_MODULE="pnpm@latest" install_node_and_modules
PROJECT_NAME=$(</opt/fumadocs/.projectname)
PROJECT_DIR="/opt/fumadocs/${PROJECT_NAME}"
SERVICE_NAME="fumadocs_${PROJECT_NAME}.service"
if [[ ! -d "$PROJECT_DIR" ]]; then
msg_error "Project directory does not exist: $PROJECT_DIR"
exit 1
fi
msg_info "Stopping service $SERVICE_NAME"
systemctl stop "$SERVICE_NAME"
msg_ok "Stopped service $SERVICE_NAME"
msg_info "Updating dependencies using pnpm"
cd "$PROJECT_DIR"
$STD pnpm up --latest
$STD pnpm build
msg_ok "Updated dependencies using pnpm"
msg_info "Starting service $SERVICE_NAME"
systemctl start "$SERVICE_NAME"
msg_ok "Started service $SERVICE_NAME"
msg_ok "Fumadocs successfully updated"
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"

75
ct/gatus.sh Normal file
View File

@ -0,0 +1,75 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 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="gatus"
var_tags="${var_tags:-monitoring}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /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/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Updating $APP"
msg_info "Stopping $APP"
systemctl stop gatus
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
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
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start gatus
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -f "$temp_file"
msg_ok "Cleanup Completed"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

6
ct/headers/actualbudget Normal file
View File

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

6
ct/headers/alpine-gatus Normal file
View File

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

6
ct/headers/alpine-rclone Normal file
View File

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

View File

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

View File

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

View File

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

6
ct/headers/fumadocs Normal file
View File

@ -0,0 +1,6 @@
______ __
/ ____/_ ______ ___ ____ _____/ /___ __________
/ /_ / / / / __ `__ \/ __ `/ __ / __ \/ ___/ ___/
/ __/ / /_/ / / / / / / /_/ / /_/ / /_/ / /__(__ )
/_/ \__,_/_/ /_/ /_/\__,_/\__,_/\____/\___/____/

6
ct/headers/gatus Normal file
View File

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

View File

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

View File

@ -1,7 +1,7 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
# Copyright (c) 2021-2025 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://homarr.dev/
@ -117,11 +117,12 @@ node apps/nextjs/server.js & PID=$!
wait $PID
EOF
chmod +x /opt/run_homarr.sh
curl -fsSL "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip")
unzip -q v${RELEASE}.zip
rm -rf v${RELEASE}.zip
$STD command -v jq || $STD apt-get update && $STD apt-get install -y jq
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
install_node_and_modules
rm -rf /opt/homarr
mv homarr-${RELEASE} /opt/homarr
fetch_and_deploy_gh_release "homarr-labs/homarr"
mv /opt/homarr-data-backup/.env /opt/homarr/.env
cd /opt/homarr
$STD pnpm install
@ -167,4 +168,4 @@ description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7575${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7575${CL}"

View File

@ -21,8 +21,6 @@ catch_errors
function update_script() {
header_info
# OS Check
if ! lsb_release -d | grep -q "Ubuntu 24.10"; then
msg_error "Wrong OS detected. This script only supports Ubuntu 24.10."
msg_error "Read Guide: https://github.com/community-scripts/ProxmoxVE/discussions/1549"
@ -32,54 +30,88 @@ function update_script() {
check_container_resources
if [[ ! -d /srv/homeassistant ]]; then
msg_error "No ${APP} Installation Found!"
exit
exit 1
fi
PY=$(ls /srv/homeassistant/lib/)
setup_uv
IP=$(hostname -I | awk '{print $1}')
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
"1" "Update Core" ON \
"2" "Install HACS" OFF \
"3" "Install FileBrowser" OFF \
3>&1 1>&2 2>&3)
if [ "$UPD" == "1" ]; then
if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SELECT BRANCH" --yesno "Use Beta Branch?" 10 58); then
clear
header_info
echo -e "${GN}Updating to Beta Version${CL}"
BR="--pre "
BR="--pre"
else
clear
header_info
echo -e "${GN}Updating to Stable Version${CL}"
BR=""
fi
msg_info "Stopping Home Assistant"
systemctl stop homeassistant
msg_ok "Stopped Home Assistant"
if [[ -d /srv/homeassistant/bin ]]; then
msg_info "Migrating to .venv-based structure"
$STD source /srv/homeassistant/bin/activate
PY_VER=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
$STD deactivate
mv /srv/homeassistant "/srv/homeassistant_backup_$PY_VER"
mkdir -p /srv/homeassistant
cd /srv/homeassistant
$STD uv python install 3.13
UV_PYTHON=$(uv python list | awk '/3\.13\.[0-9]+.*\/root\/.local/ {print $2; exit}')
if [[ -z "$UV_PYTHON" ]]; then
msg_error "No local Python 3.13 found via uv"
exit 1
fi
$STD uv venv .venv --python "$UV_PYTHON"
$STD source .venv/bin/activate
$STD uv pip install homeassistant mysqlclient psycopg2-binary isal webrtcvad wheel
mkdir -p /root/.homeassistant
msg_ok "Migration complete"
else
source /srv/homeassistant/.venv/bin/activate
fi
msg_info "Updating Home Assistant"
source /srv/homeassistant/bin/activate
$STD pip install ${BR}--upgrade homeassistant
$STD uv pip install $BR --upgrade homeassistant
msg_ok "Updated Home Assistant"
msg_info "Starting Home Assistant"
if [[ -f /etc/systemd/system/homeassistant.service ]] && grep -q "/srv/homeassistant/bin/python3" /etc/systemd/system/homeassistant.service; then
sed -i 's|ExecStart=/srv/homeassistant/bin/python3|ExecStart=/srv/homeassistant/.venv/bin/python3|' /etc/systemd/system/homeassistant.service
sed -i 's|PATH=/srv/homeassistant/bin|PATH=/srv/homeassistant/.venv/bin|' /etc/systemd/system/homeassistant.service
$STD systemctl daemon-reload
fi
systemctl start homeassistant
sleep 2
sleep 5
msg_ok "Started Home Assistant"
msg_ok "Update Successful"
echo -e "\n Go to http://${IP}:8123 \n"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"
exit
fi
if [ "$UPD" == "2" ]; then
msg_info "Installing Home Assistant Community Store (HACS)"
$STD apt update
$STD apt install -y unzip
cd .homeassistant
cd /root/.homeassistant
$STD bash <(curl -fsSL https://get.hacs.xyz)
msg_ok "Installed Home Assistant Community Store (HACS)"
echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n"
exit
fi
if [ "$UPD" == "3" ]; then
set +Eeuo pipefail
read -r -p "Would you like to use No Authentication? <y/N> " prompt
@ -131,4 +163,4 @@ description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"

View File

@ -38,7 +38,7 @@ function update_script() {
msg_info "Updating All Containers"
CONTAINER_LIST="${1:-$(docker ps -q)}"
for container in ${CONTAINER_LIST}; do
CONTAINER_IMAGE="$(docker inspect --format "{{.Config.Image}}" --type container ${container})"
CONTAINER_IMAGE="$(docker inspect --format "{{.Config.Image}}" --type container "${container}")"
RUNNING_IMAGE="$(docker inspect --format "{{.Image}}" --type container "${container}")"
docker pull "${CONTAINER_IMAGE}"
LATEST_IMAGE="$(docker inspect --format "{{.Id}}" --type image "${CONTAINER_IMAGE}")"
@ -47,7 +47,7 @@ function update_script() {
echo "Updating ${container} image ${CONTAINER_IMAGE}"
DOCKER_COMMAND="$(runlike --use-volume-id "${container}")"
docker rm --force "${container}"
eval ${DOCKER_COMMAND}
eval "${DOCKER_COMMAND}"
fi
done
msg_ok "Updated All Containers"
@ -109,4 +109,4 @@ msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}HA: http://${IP}:8123${CL}"
echo -e "${TAB}${GATEWAY}${BGN}Portainer: http://${IP}:9443${CL}"
echo -e "${TAB}${GATEWAY}${BGN}Portainer: https://${IP}:9443${CL}"

View File

@ -53,10 +53,10 @@ function update_script() {
if [ -z "$pnpm_current" ]; then
msg_error "pnpm not found. Installing version $pnpm_desired..."
$STD npm install -g pnpm@"$pnpm_desired"
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" install_node_and_modules
elif ! node -e "const semver = require('semver'); process.exit(semver.satisfies('$pnpm_current', '$pnpm_desired') ? 0 : 1)"; then
msg_error "Updating pnpm from version $pnpm_current to $pnpm_desired..."
$STD npm install -g pnpm@"$pnpm_desired"
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" install_node_and_modules
else
msg_ok "pnpm is already installed and satisfies version $pnpm_desired."
fi
@ -103,4 +103,4 @@ description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5055${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5055${CL}"

View File

@ -20,32 +20,32 @@ color
catch_errors
function update_script() {
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE MODE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 14 60 2 \
"1" "Check for Alpine Updates" OFF \
"2" "Update NPMplus Docker Container" ON \
3>&1 1>&2 2>&3)
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE MODE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 14 60 2 \
"1" "Check for Alpine Updates" OFF \
"2" "Update NPMplus Docker Container" ON \
3>&1 1>&2 2>&3)
header_info "$APP"
header_info "$APP"
case "$UPD" in
"1")
msg_info "Updating Alpine OS"
apk update && apk upgrade
msg_ok "System updated"
exit
;;
"2")
msg_info "Updating NPMplus Container"
cd /opt
msg_info "Pulling latest container image"
$STD docker compose pull
msg_info "Recreating container"
$STD docker compose up -d
msg_ok "NPMplus container updated"
exit
;;
esac
exit 0
case "$UPD" in
"1")
msg_info "Updating Alpine OS"
$STD apk -U upgrade
msg_ok "System updated"
exit
;;
"2")
msg_info "Updating NPMplus Container"
cd /opt
msg_info "Pulling latest container image"
$STD docker compose pull
msg_info "Recreating container"
$STD docker compose up -d
msg_ok "NPMplus container updated"
exit
;;
esac
exit 0
}
start

View File

@ -8,8 +8,8 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="Open WebUI"
var_tags="${var_tags:-ai;interface}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-16}"
var_ram="${var_ram:-8192}"
var_disk="${var_disk:-25}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
@ -76,4 +76,4 @@ description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

75
ct/streamlink-webui.sh Normal file
View File

@ -0,0 +1,75 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/CrazyWolf13/streamlink-webui
APP="streamlink-webui"
var_tags="${var_tags:-download,streaming}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/streamlink-webui ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/CrazyWolf13/streamlink-webui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Starting Update"
msg_info "Stopping $APP"
systemctl stop ${APP}
msg_ok "Stopped $APP"
rm -rf /opt/${APP}
NODE_VERSION="22"
NODE_MODULE="npm,yarn"
install_node_and_modules
setup_uv
fetch_and_deploy_gh_release "CrazyWolf13/streamlink-webui"
msg_info "Updating $APP to v${RELEASE}"
$STD uv venv /opt/"${APP}"/backend/src/.venv
source /opt/"${APP}"/backend/src/.venv/bin/activate
$STD uv pip install -r /opt/"${APP}"/backend/src/requirements.txt --python=/opt/"${APP}"/backend/src/.venv
cd /opt/"${APP}"/frontend/src
$STD yarn install
$STD yarn build
chmod +x /opt/"${APP}"/start.sh
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start ${APP}
msg_ok "Started $APP"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"

View File

@ -1,7 +1,7 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: tremor021
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Suwayomi/Suwayomi-Server
@ -20,38 +20,47 @@ color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/bin/suwayomi-server ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat /opt/suwayomi-server_version.txt)" ]] || [[ ! -f /opt/suwayomi-server_version.txt ]]; then
msg_info "Updating $APP"
msg_info "Stopping $APP"
systemctl stop suwayomi-server
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
cd /tmp
URL=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "browser_download_url" | awk '{print substr($2, 2, length($2)-2) }' | tail -n+2 | head -n 1)
curl -fsSL "$URL" -o $(basename "$URL")
$STD dpkg -i /tmp/*.deb
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start suwayomi-server
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -f *.deb
msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/suwayomi-server_version.txt.txt
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
if [[ ! -f /usr/bin/suwayomi-server ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if dpkg -l | grep -q "openjdk-17-jre"; then
$STD apt-get remove -y openjdk-17-jre
fi
JAVA_VERSION=21 install_java
RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat /opt/suwayomi-server_version.txt)" ]] || [[ ! -f /opt/suwayomi-server_version.txt ]]; then
msg_info "Updating $APP"
msg_info "Stopping $APP"
systemctl stop suwayomi-server
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
temp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://github.com/Suwayomi/Suwayomi-Server/releases/download/${RELEASE}/Suwayomi-Server-${RELEASE}-debian-all.deb" -o "$temp_file"
$STD dpkg -i "$temp_file"
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start suwayomi-server
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -f "$temp_file"
msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/suwayomi-server_version.txt.txt
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start

View File

@ -0,0 +1,35 @@
{
"name": "Actual Budget",
"slug": "actualbudget",
"categories": [
23
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 5006,
"documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/807",
"website": "https://actualbudget.org/",
"config_path": "/opt/actualbudget-data/config.json",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/actual-budget.svg",
"description": "Actual Budget is a super fast and privacy-focused app for managing your finances. At its heart is the well proven and much loved Envelope Budgeting methodology.",
"install_methods": [
{
"type": "default",
"script": "ct/actualbudget.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -2,7 +2,7 @@
"name": "Alpine-IT-Tools",
"slug": "alpine-it-tools",
"categories": [
20
20
],
"date_created": "2025-01-30",
"type": "ct",
@ -15,33 +15,32 @@
"config_path": "",
"description": "IT-Tools is a web-based suite of utilities designed to streamline and simplify various IT tasks, providing tools for developers and system administrators to manage their workflows efficiently.",
"install_methods": [
{
"type": "default",
"script": "ct/alpine-it-tools.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 0.2,
"os": "alpine",
"version": "3.21"
}
},
{
"type": "alpine",
"script": "ct/alpine-it-tools.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 0.2,
"os": "alpine",
"version": "3.21"
}
{
"type": "default",
"script": "ct/alpine-it-tools.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 0.5,
"os": "alpine",
"version": "3.21"
}
},
{
"type": "alpine",
"script": "ct/alpine-it-tools.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 0.5,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
"username": null,
"password": null
},
"notes": []
}

View File

@ -0,0 +1,55 @@
{
"name": "Alpine-rclone",
"slug": "alpine-rclone",
"categories": [
11
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://rclone.org/docs/",
"website": "https://rclone.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/rclone.svg",
"config_path": "~/.config/rclone/rclone.conf",
"description": "Rclone is a command-line program to manage files on cloud storage. It is a feature-rich alternative to cloud vendors' web storage interfaces",
"install_methods": [
{
"type": "default",
"script": "ct/alpine-rclone.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 1,
"os": "alpine",
"version": "3.21"
}
},
{
"type": "alpine",
"script": "ct/alpine-rclone.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 1,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"type": "info",
"text": "`cat ~/rclone.creds` to view login credentials"
},
{
"type": "info",
"text": "`htpasswd -b -B /opt/rclone/login.pwd newuser newuserpassword` to add more users."
}
]
}

View File

@ -0,0 +1,51 @@
{
"name": "Alpine-tinyauth",
"slug": "alpine-tinyauth",
"categories": [
6
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://tinyauth.app/docs/getting-started.html",
"website": "https://tinyauth.app/",
"logo": "https://raw.githubusercontent.com/steveiliop56/tinyauth/refs/heads/main/frontend/public/android-chrome-192x192.png",
"config_path": "/opt/tinyauth/.env",
"description": "Tinyauth is a simple authentication middleware that adds simple username/password login or OAuth with Google, Github and any generic provider to all of your docker apps. It is designed for traefik but it can be extended to work with all reverse proxies like caddy and nginx.",
"install_methods": [
{
"type": "default",
"script": "ct/alpine-tinyauth.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 3,
"os": "alpine",
"version": "3.21"
}
},
{
"type": "alpine",
"script": "ct/alpine-tinyauth.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 3,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"type": "info",
"text": "`cat ~/tinyauth.creds` to view login credentials"
}
]
}

View File

@ -1,52 +1,51 @@
{
"name": "Alpine",
"slug": "alpine",
"categories": [
2
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": null,
"website": "https://www.alpinelinux.org/",
"logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/alpinelinux.svg",
"config_path": "",
"description": "A security-oriented, lightweight Linux distribution based on musl and BusyBox.\r\nBy default, the root password is set to alpine. If you choose to use advanced settings, you will need to define a password, autologin is currently unavailable.",
"install_methods": [
{
"type": "default",
"script": "ct/alpine.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 0.1,
"os": "alpine",
"version": "3.21"
}
},
{
"type": "alpine",
"script": "ct/alpine.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 0.1,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": "alpine"
"name": "Alpine",
"slug": "alpine",
"categories": [
2
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": null,
"website": "https://www.alpinelinux.org/",
"logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/alpinelinux.svg",
"config_path": "",
"description": "A security-oriented, lightweight Linux distribution based on musl and BusyBox.\r\nBy default, the root password is set to alpine. If you choose to use advanced settings, you will need to define a password, autologin is currently unavailable.",
"install_methods": [
{
"type": "default",
"script": "ct/alpine.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 0.5,
"os": "alpine",
"version": "3.21"
}
},
"notes": [
{
"text": "To Update Alpine: `apk update && apk upgrade`",
"type": "info"
}
]
{
"type": "alpine",
"script": "ct/alpine.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 0.5,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": "alpine"
},
"notes": [
{
"text": "To Update Alpine: `apk -U upgrade`",
"type": "info"
}
]
}

View File

@ -20,7 +20,7 @@
"script": "ct/authentik.sh",
"resources": {
"cpu": 6,
"ram": 8192,
"ram": 10240,
"hdd": 12,
"os": "debian",
"version": "12"
@ -33,7 +33,11 @@
},
"notes": [
{
"text": "Authentik is very resource-heavy, it is recommended to use at least 8GB RAM anytime!",
"text": "Authentik is very resource-heavy, it is recommended to use at least 10GB RAM anytime!",
"type": "warning"
},
{
"text": "Some updates don't work due to massive dependency errors, it's recommended to do a backup before updating or a pg_dump and a new LXC.",
"type": "warning"
}
]

View File

@ -1,35 +0,0 @@
{
"name": "Documenso",
"slug": "documenso",
"categories": [
12
],
"date_created": "2025-04-28",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://documenso.com/",
"website": "https://documenso.com/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/documenso.svg",
"config_path": "/opt/documenso/.env",
"description": "Signing documents digitally should be fast and easy and should be the best practice for every document signed worldwide. This is technically quite easy today, but it also introduces a new party to every signature: The signing tool providers. While this is not a problem in itself, it should make us think about how we want these providers of trust to work. Documenso aims to be the world's most trusted document-signing tool. This trust is built by empowering you to self-host Documenso and review how it works under the hood.",
"install_methods": [
{
"type": "default",
"script": "ct/documenso.sh",
"resources": {
"cpu": 4,
"ram": 6144,
"hdd": 10,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "helper-scripts@local.com",
"password": "helper-scripts"
},
"notes": []
}

View File

@ -0,0 +1,35 @@
{
"name": "Fumadocs",
"slug": "fumadocs",
"categories": [
10
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://fumadocs.vercel.app/docs/ui",
"website": "https://fumadocs.vercel.app/",
"logo": "https://raw.githubusercontent.com/fuma-nama/fumadocs/refs/heads/dev/documents/logo.png",
"config_path": "",
"description": "Fumadocs is a flexible and high-performance framework for creating well-structured documentation websites using Next.js. It allows developers to write content and transform it into structured data. Fumadocs supports various content sources, including MDX and Content Collections, and integrates search solutions like Orama and Algolia. It also provides interactive components to enhance the user experience.",
"install_methods": [
{
"type": "default",
"script": "ct/fumadocs.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 5,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -0,0 +1,46 @@
{
"name": "gatus",
"slug": "gatus",
"categories": [
9
],
"date_created": "2025-05-13",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://gatus.io/docs",
"website": "https://gatus.io/",
"logo": "https://raw.githubusercontent.com/TwiN/gatus/refs/heads/master/web/static/img/logo.svg",
"config_path": "/opt/gatus/config/config.yaml",
"description": "Gatus is a developer-oriented health dashboard that gives you the ability to monitor your services using HTTP, ICMP, TCP, and even DNS queries as well as evaluate the result of said queries by using a list of conditions on values like the status code, the response time, the certificate expiration, the body and many others. The icing on top is that each of these health checks can be paired with alerting via Slack, Teams, PagerDuty, Discord, Twilio and many more.",
"install_methods": [
{
"type": "default",
"script": "ct/gatus.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 4,
"os": "debian",
"version": "12"
}
},
{
"type": "alpine",
"script": "ct/alpine-gatus.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 3,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -12,7 +12,7 @@
"documentation": "https://jellyfin.org/docs/",
"website": "https://jellyfin.org/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/jellyfin.svg",
"config_path": "/root/.config/jellyfin",
"config_path": "/etc/jellyfin/",
"description": "Jellyfin is a free and open-source media server and suite of multimedia applications designed to organize, manage, and share digital media files to networked devices.",
"install_methods": [
{

View File

@ -12,7 +12,7 @@
"documentation": null,
"website": "https://www.navidrome.org/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/navidrome.svg",
"config_path": "/var/lib/navidrome/navidrome.toml",
"config_path": "/etc/navidrome/navidrome.toml",
"description": "Navidrome is a music server solution that makes your music collection accessible from anywhere. It provides a modern web-based user interface and compatibility with a range of third-party mobile apps for both iOS and Android devices. With Navidrome, users can access their music collection from anywhere, whether at home or on the go. The software supports a variety of music formats, making it easy for users to play their favorite songs and albums. Navidrome provides a simple and user-friendly interface for managing and organizing music collections, making it a valuable tool for music lovers who want to access their music from anywhere. The software is designed to be easy to set up and use, making it a popular choice for those who want to host their own music server and enjoy their music collection from anywhere.",
"install_methods": [
{
@ -33,7 +33,7 @@
},
"notes": [
{
"text": "To change Navidrome music folder path, `nano /var/lib/navidrome/navidrome.toml`",
"text": "To change Navidrome music folder path, `nano /etc/navidrome/navidrome.toml`",
"type": "info"
}
]

View File

@ -1,35 +1,35 @@
{
"name": "Open WebUI",
"slug": "openwebui",
"categories": [
20
],
"date_created": "2024-10-24",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": null,
"website": "https://openwebui.com/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/open-webui.svg",
"config_path": "/opt/open-webui/.env",
"description": "OpenWebUI is a self-hosted, web-based interface that allows you to run AI models entirely offline. It integrates with various LLM runners, such as OpenAI and Ollama, and supports features like markdown and LaTeX rendering, model management, and voice/video calls. It also offers multilingual support and the ability to generate images using APIs like DALL-E or ComfyUI",
"install_methods": [
{
"type": "default",
"script": "ct/openwebui.sh",
"resources": {
"cpu": 4,
"ram": 4096,
"hdd": 16,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"name": "Open WebUI",
"slug": "openwebui",
"categories": [
20
],
"date_created": "2024-10-24",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://docs.openwebui.com/",
"website": "https://openwebui.com/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/open-webui.svg",
"config_path": "/opt/open-webui/.env",
"description": "OpenWebUI is a self-hosted, web-based interface that allows you to run AI models entirely offline. It integrates with various LLM runners, such as OpenAI and Ollama, and supports features like markdown and LaTeX rendering, model management, and voice/video calls. It also offers multilingual support and the ability to generate images using APIs like DALL-E or ComfyUI",
"install_methods": [
{
"type": "default",
"script": "ct/openwebui.sh",
"resources": {
"cpu": 4,
"ram": 8192,
"hdd": 25,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -12,7 +12,7 @@
"documentation": "https://stonith404.github.io/pingvin-share/introduction",
"website": "https://github.com/stonith404/pingvin-share",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/pingvin-share.svg",
"config_path": "/opt/pingin-share/config.yaml",
"config_path": "/opt/pingvin-share/config.yaml",
"description": "Pingvin Share is self-hosted file sharing platform and an alternative for WeTransfer.",
"install_methods": [
{
@ -31,5 +31,10 @@
"username": null,
"password": null
},
"notes": []
"notes": [
{
"text": "Run `DATA_DIRECTORY=path-to-your-data-directory pm2 restart all --update-env` to update path to your data directory or to update environment variables.",
"type": "info"
}
]
}

View File

@ -0,0 +1,40 @@
{
"name": "Streamlink WebUI",
"slug": "streamlink-webui",
"categories": [
11
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8000,
"documentation": "https://github.com/CrazyWolf13/streamlink-webui",
"config_path": "/opt/streamlink-webui.env",
"website": "https://github.com/CrazyWolf13/streamlink-webui",
"logo": null,
"description": "a simple web-ui to the well-known streamlink cli application, which allows you to save twitch streams to your local disk.",
"install_methods": [
{
"type": "default",
"script": "ct/streamlink-webui.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 5,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "null",
"password": "null"
},
"notes": [
{
"text": "This app requires a Twitch cliend_ID and client_secret, set it in the config file. Look in the application documentation on how to obtain it.",
"type": "info"
}
]
}

View File

@ -1,40 +0,0 @@
{
"name": "Suwayomi-Server",
"slug": "suwayomi-server",
"categories": [
13
],
"date_created": "2025-02-07",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 4567,
"documentation": "https://github.com/Suwayomi/Suwayomi-Server/wiki",
"website": "https://github.com/Suwayomi/Suwayomi-Server",
"logo": "https://github.com/Suwayomi/Suwayomi-Server/raw/master/server/src/main/resources/icon/faviconlogo.png",
"config_path": "",
"description": "A free and open source manga reader server that runs extensions built for Mihon (Tachiyomi).",
"install_methods": [
{
"type": "default",
"script": "ct/suwayomiserver.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "This application is conflicting with Kaspersky products. You need to disable Kaspersky in order to use this application.",
"type": "info"
}
]
}

View File

@ -25,6 +25,17 @@
"os": "debian",
"version": "12"
}
},
{
"type": "alpine",
"script": "ct/alpine-traefik.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 1,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {

View File

@ -1,35 +1,55 @@
{
"name": "Transmission",
"slug": "transmission",
"categories": [
11
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": 9091,
"documentation": null,
"website": "https://transmissionbt.com/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/transmission.svg",
"config_path": "/etc/transmission-daemon/settings.json",
"description": "Transmission is a free, open-source BitTorrent client known for its fast download speeds and ease of use. It supports various platforms such as Windows, Linux, and macOS and has features like web interface, peer exchange, and encrypted transfers.",
"install_methods": [
{
"type": "default",
"script": "ct/transmission.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 8,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "transmission",
"password": "transmission"
"name": "Transmission",
"slug": "transmission",
"categories": [
11
],
"date_created": "2025-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 9091,
"documentation": "https://github.com/transmission/transmission/blob/main/docs/README.md",
"website": "https://transmissionbt.com/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/transmission.svg",
"config_path": "Debian `/etc/transmission-daemon/settings.json` | Alpine `/var/lib/transmission/config/settings.json`",
"description": "Transmission is a free, open-source BitTorrent client known for its fast download speeds and ease of use. It supports various platforms such as Windows, Linux, and macOS and has features like web interface, peer exchange, and encrypted transfers.",
"install_methods": [
{
"type": "default",
"script": "ct/transmission.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 8,
"os": "debian",
"version": "12"
}
},
"notes": []
{
"type": "alpine",
"script": "ct/alpine-transmission.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 1,
"os": "alpine",
"version": "3.21"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"type": "info",
"text": "Script disables whitelisting by default. Change config to suit your needs."
},
{
"type": "info",
"text": "Alpine script sets initial disk size to 1GB. Please adjust for your needs after installation ends."
}
]
}

File diff suppressed because it is too large Load Diff

View File

@ -34,4 +34,9 @@ export const FAQ_Items = [
content:
"If an LXC script fails, run it again using Verbose mode. Standard mode hides detailed output for neatness, showing only progress. Verbose mode displays all messages, which helps you (and us) diagnose the error. Include this verbose output if you report the issue.",
},
{
title: "What does \"Updatable\" and \"Not updatable\" mean?",
content:
"Updatable means that script has a function that is used to update the installed application to the latest version available. Not updatable means that script doesn't have a function that can safely update the application to the latest version available, so only the LXC OS is updated.",
},
];

View File

@ -0,0 +1,91 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://actualbudget.org/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Actual Budget"
cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
NODE_VERSION="22"
install_node_and_modules
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
chown -R root:root /opt/actualbudget-data
chmod -R 755 /opt/actualbudget-data
cat <<EOF >/opt/actualbudget-data/config.json
{
"port": 5006,
"hostname": "::",
"serverFiles": "/opt/actualbudget-data/server-files",
"userFiles": "/opt/actualbudget-data/user-files",
"trustedProxies": [
"10.0.0.0/8",
"172.16.0.0/12",
"192.168.0.0/16",
"127.0.0.0/8",
"::1/128",
"fc00::/7"
],
"https": {
"key": "/opt/actualbudget/selfhost.key",
"cert": "/opt/actualbudget/selfhost.crt"
}
}
EOF
mkdir -p /opt/actualbudget
cd /opt/actualbudget
$STD npm install --location=global @actual-app/sync-server
$STD openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfhost.key -out selfhost.crt <<EOF
US
California
San Francisco
My Organization
My Unit
localhost
myemail@example.com
EOF
echo "${RELEASE}" >"/opt/actualbudget_version.txt"
msg_ok "Installed Actual Budget"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/actualbudget.service
[Unit]
Description=Actual Budget Service
After=network.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/opt/actualbudget
Environment=ACTUAL_UPLOAD_FILE_SIZE_LIMIT_MB=20
Environment=ACTUAL_UPLOAD_SYNC_ENCRYPTED_FILE_SYNC_SIZE_LIMIT_MB=50
Environment=ACTUAL_UPLOAD_FILE_SYNC_SIZE_LIMIT_MB=20
ExecStart=/usr/bin/actual-server --config /opt/actualbudget-data/config.json
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now actualbudget
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@ -0,0 +1,70 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 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 <<EOF >/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"

View File

@ -0,0 +1,68 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 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 \
unzip \
apache2-utils
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-amd64.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 login.pwd admin "$RCLONE_PASSWORD"
{
echo "rclone-Credentials"
echo "rclone User Name: admin"
echo "rclone Password: $RCLONE_PASSWORD"
} >>~/rclone.creds
echo "${RELEASE}" >/opt/rclone_version.txt
rm -f "$temp_file"
msg_ok "Installed rclone"
msg_info "Enabling rclone Service"
cat <<EOF >/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/rclone/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"

View File

@ -0,0 +1,83 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/steveiliop56/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 \
npm \
curl \
go
msg_ok "Installed Dependencies"
msg_info "Installing tinyauth"
temp_file=$(mktemp)
$STD npm install -g bun
mkdir -p /opt/tinyauth
RELEASE=$(curl -s https://api.github.com/repos/steveiliop56/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/steveiliop56/tinyauth/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar -xzf "$temp_file" -C /opt/tinyauth --strip-components=1
cd /opt/tinyauth/frontend
$STD bun install
$STD bun run build
mv dist /opt/tinyauth/internal/assets/
cd /opt/tinyauth
$STD go mod download
CGO_ENABLED=0 go build -ldflags "-s -w"
{
echo "tinyauth Credentials"
echo "Username: admin@example.com"
echo "Password: admin"
} >>~/tinyauth.creds
echo "${RELEASE}" >/opt/tinyauth_version.txt
msg_ok "Installed tinyauth"
msg_info "Enabling tinyauth Service"
SECRET=$(head -c 16 /dev/urandom | xxd -p -c 16 | tr -d '\n')
{
echo "SECRET=${SECRET}"
echo "USERS=admin@example.com:\$2a\$10\$CrTK.W7WXSClo3ZY1yJUFupg5UdV8WNcynEhZhJFNjhGQB.Ga0ZDm"
echo "APP_URL=http://localhost:3000"
} >>/opt/tinyauth/.env
cat <<EOF >/etc/init.d/tinyauth
#!/sbin/openrc-run
description="tinyauth Service"
command="/opt/tinyauth/tinyauth"
directory="/opt/tinyauth"
command_user="root"
command_background="true"
pidfile="/var/run/tinyauth.pid"
start_pre() {
if [ -f "/opt/tinyauth/.env" ]; then
export \$(grep -v '^#' /opt/tinyauth/.env | xargs)
fi
}
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

View File

@ -0,0 +1,56 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 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 "Enable Traefik WebUI (Port 8080)? [y/N]: " enable_webui
if [[ "$enable_webui" =~ ^[Yy]$ ]]; then
msg_info "Configuring Traefik WebUI"
mkdir -p /etc/traefik/config
cat <<EOF >/etc/traefik/traefik.yml
entryPoints:
web:
address: ":80"
traefik:
address: ":8080"
api:
dashboard: true
insecure: true
log:
level: INFO
providers:
file:
directory: /etc/traefik/config
watch: true
EOF
msg_ok "Configured Traefik WebUI"
fi
msg_info "Enabling and starting Traefik service"
$STD rc-update add traefik default
$STD rc-service traefik start
msg_ok "Traefik service started"
motd_ssh
customize

View File

@ -0,0 +1,32 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 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
$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

View File

@ -15,7 +15,6 @@ update_os
msg_info "Installing Dependencies (Patience)"
$STD apt-get install -y \
gpg \
pkg-config \
libffi-dev \
build-essential \
@ -33,9 +32,15 @@ $STD apt-get install -y \
libxmlsec1-openssl \
libmaxminddb0 \
python3-pip \
redis-server \
git
msg_ok "Installed Dependencies"
setup_uv
PG_VERSION="16" install_postgresql
NODE_VERSION="22" install_node_and_modules
install_go
msg_info "Installing yq"
cd /tmp
YQ_LATEST="$(curl -fsSL https://api.github.com/repos/mikefarah/yq/releases/latest | grep -Po '"tag_name": "\K.*?(?=")')"
@ -56,46 +61,8 @@ cat <<EOF >/etc/GeoIP.conf
EOF
msg_ok "Installed GeoIP"
msg_info "Setting up Python 3"
cd /tmp
curl -fsSL "https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz" -o "Python.tgz"
tar -zxf Python.tgz
cd Python-3.12.1
$STD ./configure --enable-optimizations
$STD make altinstall
cd ~
$STD update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.12 1
msg_ok "Setup Python 3"
msg_info "Setting up Node.js Repository"
mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
msg_ok "Set up Node.js Repository"
msg_info "Installing Node.js"
$STD apt-get update
$STD apt-get install -y nodejs
msg_ok "Installed Node.js"
msg_info "Installing Golang"
set +o pipefail
temp_file=$(mktemp)
golang_tarball=$(curl -fsSL https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
curl -fsSL "https://golang.org/dl/${golang_tarball}" -o "$temp_file"
tar -C /usr/local -xzf "$temp_file"
ln -sf /usr/local/go/bin/go /usr/local/bin/go
rm -f "$temp_file"
set -o pipefail
msg_ok "Installed Golang"
msg_info "Installing Redis"
$STD apt-get install -y redis-server
systemctl enable -q --now redis-server
msg_ok "Installed Redis"
msg_info "Installing PostgreSQL"
$STD apt-get install -y postgresql postgresql-contrib
$STD apt-get install -y postgresql-16 postgresql-contrib-16
DB_NAME="authentik"
DB_USER="authentik"
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
@ -111,25 +78,29 @@ RELEASE=$(curl -fsSL https://api.github.com/repos/goauthentik/authentik/releases
mkdir -p /opt/authentik
curl -fsSL "${RELEASE}" -o "authentik.tar.gz"
tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite
export NODE_OPTIONS="--max-old-space-size=4096"
cd /opt/authentik/website
$STD npm install
$STD npm run build-bundled
cd /opt/authentik/web
$STD npm install
$STD npm run build
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
cd /opt/authentik
$STD go mod download
$STD go build -o /go/authentik ./cmd/server
$STD go build -o /opt/authentik/authentik-server /opt/authentik/cmd/server/
cd /opt/authentik
$STD pip3 install --upgrade pip
$STD pip3 install poetry poetry-plugin-export
ln -s /usr/local/bin/poetry /usr/bin/poetry
$STD poetry install --only=main --no-ansi --no-interaction --no-root
$STD poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt
$STD pip install --no-cache-dir -r requirements.txt
$STD pip install .
$STD uv sync --frozen --no-install-project --no-dev
#$STD pip3 install --no-cache-dir --upgrade pip
#$STD pip3 install --upgrade pip
#$STD pip3 install poetry poetry-plugin-export
#ln -s /usr/local/bin/poetry /usr/bin/poetry
#$STD poetry install --only=main --no-ansi --no-interaction --no-root
#$STD poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt
#$STD pip install --no-cache-dir -r requirements.txt
#$STD pip install .
mkdir -p /etc/authentik
mv /opt/authentik/authentik/lib/default.yml /etc/authentik/config.yml
$STD yq -i ".secret_key = \"$(openssl rand -hex 32)\"" /etc/authentik/config.yml
@ -137,23 +108,30 @@ $STD yq -i ".postgresql.password = \"${DB_PASS}\"" /etc/authentik/config.yml
$STD yq -i ".geoip = \"/opt/authentik/tests/GeoLite2-City-Test.mmdb\"" /etc/authentik/config.yml
cp -r /opt/authentik/authentik/blueprints /opt/authentik/blueprints
$STD yq -i ".blueprints_dir = \"/opt/authentik/blueprints\"" /etc/authentik/config.yml
ln -s /usr/bin/python3 /usr/bin/python
ln -s /usr/local/bin/gunicorn /usr/bin/gunicorn
ln -s /usr/local/bin/celery /usr/bin/celery
$STD bash /opt/authentik/lifecycle/ak migrate
cd ~
#ln -s /usr/bin/python3 /usr/bin/python
#ln -s /usr/local/bin/gunicorn /usr/bin/gunicorn
#ln -s /usr/local/bin/celery /usr/bin/celery
#$STD bash /opt/authentik/lifecycle/ak migrate
cd /opt/authentik
uv run python -m lifecycle.migrate
ln -s /opt/authentik/.venv/bin/gunicorn /usr/local/bin/gunicorn
ln -s /opt/authentik/.venv/bin/celery /usr/local/bin/celery
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed authentik"
msg_info "Creating Services"
cat <<EOF >/etc/systemd/system/authentik-server.service
[Unit]
Description = authentik Server
Description=authentik Go Server (API Gateway)
After=network.target
Wants=redis.service postgresql.service
[Service]
ExecStart=/opt/authentik/authentik-server
WorkingDirectory=/opt/authentik/
ExecStart=/opt/authentik/authentik-server
Restart=always
RestartSec=5
Environment=DJANGO_SETTINGS_MODULE=authentik.root.settings
[Install]
WantedBy=multi-user.target
@ -161,21 +139,49 @@ EOF
cat <<EOF >/etc/systemd/system/authentik-worker.service
[Unit]
Description = authentik Worker
Description=authentik Celery Worker
After=network.target redis.service postgresql.service
Requires=redis.service
[Service]
Environment=DJANGO_SETTINGS_MODULE="authentik.root.settings"
ExecStart=celery -A authentik.root.celery worker -Ofair --max-tasks-per-child=1 --autoscale 3,1 -E -B -s /tmp/celerybeat-schedule -Q authentik,authentik_scheduled,authentik_events
WorkingDirectory=/opt/authentik/authentik
Type=simple
WorkingDirectory=/opt/authentik
ExecStart=/opt/authentik/.venv/bin/celery \
-A authentik.root.celery worker \
-Ofair \
--max-tasks-per-child=1 \
--autoscale 3,1 \
-Q authentik,authentik_scheduled,authentik_events \
-E
Restart=always
RestartSec=5
Environment=DJANGO_SETTINGS_MODULE=authentik.root.settings
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now authentik-server
sleep 2
systemctl enable -q --now authentik-worker
cat <<EOF >/etc/systemd/system/authentik-celery-beat.service
[Unit]
Description=authentik Celery Beat Scheduler
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/authentik
ExecStart=/opt/authentik/.venv/bin/celery \
-A authentik.root.celery beat \
-s /tmp/celerybeat-schedule
Restart=always
RestartSec=5
#User=authentik
Environment=DJANGO_SETTINGS_MODULE=authentik.root.settings
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now authentik-server authentik-worker authentik-celery-beat
msg_ok "Created Services"
motd_ssh

View File

@ -26,7 +26,7 @@ mkdir -p /var/lib/bazarr/
curl -fsSL "https://github.com/morpheus65535/bazarr/releases/latest/download/bazarr.zip" -o $(basename "https://github.com/morpheus65535/bazarr/releases/latest/download/bazarr.zip")
unzip -qq bazarr -d /opt/bazarr
chmod 775 /opt/bazarr /var/lib/bazarr/
python3 -m pip install -q -r /opt/bazarr/requirements.txt
$STD python3 -m pip install -q -r /opt/bazarr/requirements.txt
msg_ok "Installed Bazarr"
msg_info "Creating Service"

View File

@ -20,14 +20,14 @@ msg_ok "Setup Functions"
msg_info "Installing Dependencies"
$STD apt-get install -y \
gpg \
libc6 \
make \
cmake \
jq \
postgresql \
python3 \
python3-bcrypt
gpg \
libc6 \
make \
cmake \
jq \
postgresql \
python3 \
python3-bcrypt
msg_ok "Installed Dependencies"
msg_info "Setting up Node.js Repository"
@ -52,10 +52,10 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8'
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
{
echo "Documenso-Credentials"
echo "Database Name: $DB_NAME"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
echo "Documenso-Credentials"
echo "Database Name: $DB_NAME"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
} >>~/documenso.creds
msg_ok "Set up PostgreSQL"
@ -68,24 +68,22 @@ mv documenso-${RELEASE} /opt/documenso
cd /opt/documenso
mv .env.example /opt/documenso/.env
sed -i \
-e "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
-e "s|^NEXT_PRIVATE_ENCRYPTION_KEY=.*|NEXT_PRIVATE_ENCRYPTION_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
-e "s|^NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=.*|NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
-e "s|^DOCUMENSO_ENCRYPTION_KEY=.*|DOCUMENSO_ENCRYPTION_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
-e "s|^DOCUMENSO_ENCRYPTION_SECONDARY_KEY=.*|DOCUMENSO_ENCRYPTION_SECONDARY_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
-e "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=\"http://${LOCAL_IP}:3000\"|" \
-e "s|^NEXT_PUBLIC_WEBAPP_URL=.*|NEXT_PUBLIC_WEBAPP_URL='http://${LOCAL_IP}:9000'|" \
-e "s|^NEXT_PUBLIC_MARKETING_URL=.*|NEXT_PUBLIC_MARKETING_URL=\"http://${LOCAL_IP}:3001\"|" \
-e "s|^NEXT_PRIVATE_INTERNAL_WEBAPP_URL=.*|NEXT_PRIVATE_INTERNAL_WEBAPP_URL=\"http://${LOCAL_IP}:3000\"|" \
-e "s|^NEXT_PRIVATE_DATABASE_URL=.*|NEXT_PRIVATE_DATABASE_URL=\"postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME\"|" \
-e "s|^NEXT_PRIVATE_DIRECT_DATABASE_URL=.*|NEXT_PRIVATE_DIRECT_DATABASE_URL=\"postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME\"|" \
/opt/documenso/.env
-e "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
-e "s|^NEXT_PRIVATE_ENCRYPTION_KEY=.*|NEXT_PRIVATE_ENCRYPTION_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
-e "s|^NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=.*|NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
-e "s|^DOCUMENSO_ENCRYPTION_KEY=.*|DOCUMENSO_ENCRYPTION_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
-e "s|^DOCUMENSO_ENCRYPTION_SECONDARY_KEY=.*|DOCUMENSO_ENCRYPTION_SECONDARY_KEY='$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)'|" \
-e "s|^NEXT_PUBLIC_WEBAPP_URL=.*|NEXT_PUBLIC_WEBAPP_URL='http://${LOCAL_IP}:3000'|" \
-e "s|^NEXT_PRIVATE_INTERNAL_WEBAPP_URL=.*|NEXT_PRIVATE_INTERNAL_WEBAPP_URL=\"http://${LOCAL_IP}:3000\"|" \
-e "s|^NEXT_PRIVATE_DATABASE_URL=.*|NEXT_PRIVATE_DATABASE_URL=\"postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME\"|" \
-e "s|^NEXT_PRIVATE_DIRECT_DATABASE_URL=.*|NEXT_PRIVATE_DIRECT_DATABASE_URL=\"postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME\"|" \
/opt/documenso/.env
export TURBO_CACHE=1
export NEXT_TELEMETRY_DISABLED=1
export CYPRESS_INSTALL_BINARY=0
export NODE_OPTIONS="--max-old-space-size=4096"
$STD npm ci
$STD npm run build:web
$STD turbo run build --filter=@documenso/remix
$STD npm run prisma:migrate-deploy
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed Documenso"
@ -103,8 +101,8 @@ Description=Documenso Service
After=network.target postgresql.service
[Service]
WorkingDirectory=/opt/documenso/apps/web
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/documenso
ExecStart=/usr/bin/turbo run start --filter=@documenso/remix
Restart=always
EnvironmentFile=/opt/documenso/.env
@ -118,6 +116,7 @@ motd_ssh
customize
msg_info "Cleaning up"
$STD turbo daemon stop
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@ -0,0 +1,53 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 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 apt-get install -y \
ca-certificates
msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="pnpm@latest" install_node_and_modules
msg_info "Installing Fumadocs"
mkdir -p /opt/fumadocs
cd /opt/fumadocs
pnpm create fumadocs-app
PROJECT_NAME=$(find . -maxdepth 1 -type d ! -name '.' ! -name '..' | sed 's|^\./||')
echo "$PROJECT_NAME" >/opt/fumadocs/.projectname
msg_ok "Installed Fumadocs"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/fumadocs_$PROJECT_NAME.service
[Unit]
Description=Fumadocs Documentation Server
After=network.target
[Service]
WorkingDirectory=/opt/fumadocs/$PROJECT_NAME
ExecStart=/usr/bin/pnpm run dev
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now fumadocs_$PROJECT_NAME
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

67
install/gatus-install.sh Normal file
View File

@ -0,0 +1,67 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 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 apt-get install -y \
ca-certificates \
libcap2-bin
msg_ok "Installed Dependencies"
install_go
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 "Setting up 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 "Done setting up gatus"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/gatus.service
[Unit]
Description=gatus Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/gatus
ExecStart=/opt/gatus/gatus
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now gatus
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
rm -f "$temp_file"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"
motd_ssh
customize

View File

@ -23,27 +23,17 @@ $STD apt-get install -y \
build-essential \
nginx \
gettext \
jq \
openssl
msg_ok "Installed Dependencies"
msg_info "Setting up Node.js Repository"
mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
msg_ok "Set up Node.js Repository"
msg_info "Installing Node.js/pnpm"
$STD apt-get update
$STD apt-get install -y nodejs
$STD npm install -g pnpm@latest
msg_ok "Installed Node.js/pnpm"
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
install_node_and_modules
fetch_and_deploy_gh_release "homarr-labs/homarr"
msg_info "Installing Homarr (Patience)"
cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip")
unzip -q v${RELEASE}.zip
mv homarr-${RELEASE} /opt/homarr
mkdir -p /opt/homarr_db
touch /opt/homarr_db/db.sqlite
SECRET_ENCRYPTION_KEY="$(openssl rand -hex 32)"

View File

@ -46,29 +46,33 @@ $STD apt-get install -y \
pkg-config
msg_ok "Installed Dependencies"
setup_uv
msg_info "Setup Python3"
$STD apt-get update
$STD rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
$STD apt-get remove --purge -y python3.12 python3.12-dev python3.12-venv
$STD apt-get install -y \
python3.13 \
python3-pip \
python3.13-dev \
python3.13-venv
ln -sf /usr/bin/python3.13 /usr/bin/python3
msg_ok "Setup Python3"
msg_info "Preparing Python 3.13 for uv"
$STD uv python install 3.13
UV_PYTHON=$(uv python list | awk '/3\.13\.[0-9]+.*\/root\/.local/ {print $2; exit}')
if [[ -z "$UV_PYTHON" ]]; then
msg_error "No local Python 3.13 found via uv"
exit 1
fi
msg_ok "Prepared Python 3.13"
msg_info "Setting up Home Assistant-Core environment"
mkdir /srv/homeassistant
rm -rf /srv/homeassistant
mkdir -p /srv/homeassistant
cd /srv/homeassistant
python3 -m venv .
source bin/activate
$STD uv venv .venv --python "$UV_PYTHON"
source .venv/bin/activate
msg_ok "Created virtual environment"
msg_info "Installing Home Assistant-Core"
$STD python3 -m pip install webrtcvad wheel homeassistant mysqlclient psycopg2-binary isal
$STD uv pip install homeassistant mysqlclient psycopg2-binary isal webrtcvad wheel
mkdir -p /root/.homeassistant
msg_ok "Installed Home Assistant-Core"
@ -77,16 +81,19 @@ cat <<EOF >/etc/systemd/system/homeassistant.service
[Unit]
Description=Home Assistant
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/root/.homeassistant
Environment="PATH=/srv/homeassistant/bin:/usr/local/bin:/usr/bin:/usr/local/bin/uv"
ExecStart=/srv/homeassistant/bin/python3 -m homeassistant --config /root/.homeassistant
Environment="PATH=/srv/homeassistant/.venv/bin:/usr/local/bin:/usr/bin"
ExecStart=/srv/homeassistant/.venv/bin/python3 -m homeassistant --config /root/.homeassistant
Restart=always
RestartForceExitStatus=100
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now homeassistant
msg_ok "Created Service"

View File

@ -15,30 +15,18 @@ update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
gnupg \
git \
build-essential
msg_ok "Installed Dependencies"
msg_info "Setting up Node.js Repository"
mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
msg_ok "Set up Node.js Repository"
msg_info "Installing Node.js"
$STD apt-get update
$STD apt-get install -y nodejs
msg_ok "Installed Node.js"
git clone -q https://github.com/Fallenbagel/jellyseerr.git /opt/jellyseerr
cd /opt/jellyseerr
$STD git checkout main
pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/jellyseerr/package.json)
msg_info "Installing pnpm version $pnpm_desired..."
$STD npm install -g pnpm@$pnpm_desired
msg_ok "Installed pnpm"
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" install_node_and_modules
msg_info "Installing Jellyseerr (Patience)"
export CYPRESS_INSTALL_BINARY=0

View File

@ -16,20 +16,19 @@ update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
gnupg \
ca-certificates \
apt-transport-https
msg_ok "Installed Dependencies"
msg_info "Installing Azul Zulu21"
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB1998361219BD9C9" -o "/etc/apt/trusted.gpg.d/zulu-repo.asc"
curl -fsSL "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb" -o $(basename "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb")
$STD dpkg -i zulu-repo_1.0.0-3_all.deb
msg_info "Installing Azul Zulu17"
curl -fsSL https://repos.azul.com/azul-repo.key | gpg --dearmor -o /usr/share/keyrings/azul.gpg
echo "deb [signed-by=/usr/share/keyrings/azul.gpg] https://repos.azul.com/zulu/deb stable main" >/etc/apt/sources.list.d/zulu.list
$STD apt-get update
$STD apt-get -y install zulu21-jdk
msg_ok "Installed Azul Zulu21"
$STD apt-get -y install zulu17-jdk
msg_ok "Installed Azul Zulu17"
msg_info "Installing openHAB"
curl -fsSL "https://openhab.jfrog.io/artifactory/api/gpg/key/public" | gpg --dearmor >openhab.gpg
mv openhab.gpg /usr/share/keyrings
curl -fsSL "https://openhab.jfrog.io/artifactory/api/gpg/key/public" | gpg --dearmor -o /usr/share/keyrings/openhab.gpg
chmod u=rw,g=r,o=r /usr/share/keyrings/openhab.gpg
echo "deb [signed-by=/usr/share/keyrings/openhab.gpg] https://openhab.jfrog.io/artifactory/openhab-linuxpkg stable main" >/etc/apt/sources.list.d/openhab.list
$STD apt update

View File

@ -40,7 +40,7 @@ sudo -u searxng python3 -m venv /usr/local/searxng/searx-pyenv
source /usr/local/searxng/searx-pyenv/bin/activate
$STD pip install --upgrade pip setuptools wheel
$STD pip install pyyaml
$STD pip install -e /usr/local/searxng/searxng-src
$STD pip install --use-pep517 --no-build-isolation -e /usr/local/searxng/searxng-src
SECRET_KEY=$(openssl rand -hex 32)
cat <<EOF >/etc/searxng/settings.yml
# SearXNG settings

View File

@ -0,0 +1,66 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/CrazyWolf13/streamlink-webui
# Import Functions und Setup
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
NODE_VERSION="22"
NODE_MODULE="npm@latest,yarn@latest"
install_node_and_modules
setup_uv
fetch_and_deploy_gh_release "CrazyWolf13/streamlink-webui"
msg_info "Setup ${APPLICATION}"
mkdir -p "/opt/${APPLICATION}-download"
$STD uv venv /opt/"${APPLICATION}"/backend/src/.venv
source /opt/"${APPLICATION}"/backend/src/.venv/bin/activate
$STD uv pip install -r /opt/streamlink-webui/backend/src/requirements.txt --python=/opt/"${APPLICATION}"/backend/src/.venv
cd /opt/"${APPLICATION}"/frontend/src
$STD yarn install
$STD yarn build
chmod +x /opt/"${APPLICATION}"/start.sh
msg_ok "Setup ${APPLICATION}"
msg_info "Creating Service"
cat <<'EOF' >/opt/"${APPLICATION}".env
CLIENT_ID='your_client_id'
CLIENT_SECRET='your_client_secret'
DOWNLOAD_PATH='/opt/streamlink-webui-download'
# BASE_URL='https://sub.domain.com' \
# REVERSE_PROXY=True \
EOF
cat <<EOF >/etc/systemd/system/"${APPLICATION}".service
[Unit]
Description=${APPLICATION} Service
After=network.target
[Service]
EnvironmentFile=/opt/${APPLICATION}.env
WorkingDirectory=/opt/${APPLICATION}/backend/src
ExecStart=/bin/bash -c 'source /opt/${APPLICATION}/backend/src/.venv/bin/activate && exec /opt/${APPLICATION}/start.sh'
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now "${APPLICATION}"
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@ -1,7 +1,7 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: tremor021
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Suwayomi/Suwayomi-Server
@ -14,18 +14,19 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
openjdk-17-jre \
libc++-dev
$STD apt-get install -y libc++-dev
msg_ok "Installed Dependencies"
JAVA_VERSION=21 install_java
msg_info "Settting up Suwayomi-Server"
URL=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "browser_download_url" | awk '{print substr($2, 2, length($2)-2) }' | tail -n+2 | head -n 1)
temp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "$URL" -o $(basename "$URL")
$STD dpkg -i *.deb
echo ${RELEASE} >/opt/suwayomi-server_version.txt
curl -fsSL "https://github.com/Suwayomi/Suwayomi-Server/releases/download/${RELEASE}/Suwayomi-Server-${RELEASE}-debian-all.deb" -o "$temp_file"
$STD dpkg -i "$temp_file"
echo "${RELEASE}" >/opt/suwayomi-server_version.txt
msg_ok "Done setting up Suwayomi-Server"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/suwayomi-server.service
[Unit]
@ -41,10 +42,12 @@ WantedBy=multi-user.target
EOF
systemctl enable -q --now suwayomi-server
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
rm -f *.deb
rm -f "$temp_file"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@ -30,7 +30,8 @@ $STD apt-get -y install elasticsearch
echo "-Xms2g" >>/etc/elasticsearch/jvm.options
echo "-Xmx2g" >>/etc/elasticsearch/jvm.options
$STD /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment -b
systemctl -q restart elasticsearch
systemctl enable -q elasticsearch
systemctl restart -q elasticsearch
msg_ok "Setup Elasticsearch"
msg_info "Installing Zammad"

View File

@ -137,8 +137,7 @@ network_check() {
# This function updates the Container OS by running apt-get update and upgrade
update_os() {
msg_info "Updating Container OS"
$STD apk update
$STD apk upgrade
$STD apk -U upgrade
msg_ok "Updated Container OS"
msg_info "Installing core dependencies"
@ -190,10 +189,29 @@ validate_tz() {
customize() {
if [[ "$PASSWORD" == "" ]]; then
msg_info "Customizing Container"
bash -c "passwd -d root" >/dev/null 2>&1
passwd -d root >/dev/null 2>&1
# Ensure agetty is available
apk add --no-cache --force-broken-world util-linux >/dev/null 2>&1
# Create persistent autologin boot script
mkdir -p /etc/local.d
cat <<'EOF' >/etc/local.d/autologin.start
#!/bin/sh
sed -i 's|^tty1::respawn:.*|tty1::respawn:/sbin/agetty --autologin root --noclear tty1 38400 linux|' /etc/inittab
kill -HUP 1
EOF
touch /root/.hushlogin
chmod +x /etc/local.d/autologin.start
rc-update add local >/dev/null 2>&1
# Apply autologin immediately for current session
/etc/local.d/autologin.start
msg_ok "Customized Container"
fi
echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update
echo "bash -c \"\$(curl -fsSL https://github.com/community-scripts/ProxmoxVE/raw/main/ct/${app}.sh)\"" >/usr/bin/update
chmod +x /usr/bin/update
}

View File

@ -477,7 +477,7 @@ advanced_settings() {
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
fi
else
exit
exit_script
fi
if CT_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 "$NSAPP" --title "HOSTNAME" 3>&1 1>&2 2>&3); then
@ -528,15 +528,47 @@ advanced_settings() {
exit_script
fi
if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Bridge" 8 58 vmbr0 --title "BRIDGE" 3>&1 1>&2 2>&3); then
if [ -z "$BRG" ]; then
BRG="vmbr0"
echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
else
echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
BRIDGES=""
IFACE_FILEPATH_LIST="/etc/network/interfaces"$'\n'$(find "/etc/network/interfaces.d/" -type f)
OLD_IFS=$IFS; IFS=$'\n'
for iface_filepath in ${IFACE_FILEPATH_LIST}; do
iface_indexes_tmpfile=$(mktemp -q -u '.iface-XXXX')
( grep -Pn '^\s*iface' "${iface_filepath}" | cut -d':' -f1 && wc -l "${iface_filepath}" | cut -d' ' -f1 ) | \
awk 'FNR==1 {line=$0; next} {print line":"$0-1; line=$0}' > "${iface_indexes_tmpfile}"
if [ -f "${iface_indexes_tmpfile}" ]; then
while read -r pair; do
start=$(echo "${pair}" | cut -d':' -f1)
end=$(echo "${pair}" | cut -d':' -f2)
if awk "NR >= ${start} && NR <= ${end}" "${iface_filepath}" | grep -qP '^\s*bridge[-_](ports|stp|fd|vlan-aware|vids)\s+'; then
iface_name=$(sed "${start}q;d" "${iface_filepath}" | awk '{print $2}')
BRIDGES="${iface_name}"$'\n'"${BRIDGES}"
fi
done < "${iface_indexes_tmpfile}"
rm -f "${iface_indexes_tmpfile}"
fi
done
IFS=$OLD_IFS
BRIDGES=$(echo "$BRIDGES" | grep -v '^\s*$' | sort | uniq)
if [[ -z "$BRIDGES" ]]; then
BRG="vmbr0"
echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
else
exit_script
BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --menu "Select network bridge:" 15 40 6 $(echo "$BRIDGES" | awk '{print $0, "Bridge"}') 3>&1 1>&2 2>&3)
if [ -z "$BRG" ]; then
exit_script
else
echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}$BRG${CL}"
fi
fi
while true; do
@ -777,8 +809,6 @@ EOF
config_file() {
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Default distribution for $APP" "${var_os} ${var_version} \n \nIf the default Linux distribution is not adhered to, script support will be discontinued. \n" 10 58
CONFIG_FILE="/opt/community-scripts/.settings"
if [[ -f "/opt/community-scripts/${NSAPP}.conf" ]]; then
@ -795,66 +825,38 @@ config_file() {
source "$CONFIG_FILE"
fi
fi
if [[ "$var_os" == "debian" ]]; then
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
if [[ "$var_version" == "11" ]]; then
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
elif [[ "$var_version" == "12" ]]; then
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
else
msg_error "Unknown setting for var_version, should be 11 or 12, was ${var_version}"
exit
fi
elif [[ "$var_os" == "ubuntu" ]]; then
echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
if [[ "$var_version" == "20.04" ]]; then
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
elif [[ "$var_version" == "22.04" ]]; then
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
elif [[ "$var_version" == "24.04" ]]; then
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
elif [[ "$var_version" == "24.10" ]]; then
echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
else
msg_error "Unknown setting for var_version, should be 20.04, 22.04, 24.04 or 24.10, was ${var_version}"
exit
fi
else
msg_error "Unknown setting for var_os! should be debian or ubuntu, was ${var_os}"
exit
fi
if [[ -n "$CT_ID" ]]; then
if [[ "$CT_ID" =~ ^([0-9]{3,4})-([0-9]{3,4})$ ]]; then
MIN_ID=${BASH_REMATCH[1]}
MAX_ID=${BASH_REMATCH[2]}
if ((MIN_ID >= MAX_ID)); then
msg_error "Invalid Container ID range. The first number must be smaller than the second number, was ${CT_ID}"
exit
fi
LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json | grep -oP '"vmid":\s*\K\d+')
for ((ID = MIN_ID; ID <= MAX_ID; ID++)); do
if ! grep -q "^$ID$" <<<"$LIST_OF_IDS"; then
CT_ID=$ID
break
fi
done
LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json 2>/dev/null | grep -oP '"vmid":\s*\K\d+') || true
if [[ -n "$LIST_OF_IDS" ]]; then
for ((ID = MIN_ID; ID <= MAX_ID; ID++)); do
if ! grep -q "^$ID$" <<<"$LIST_OF_IDS"; then
CT_ID=$ID
break
fi
done
fi
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
elif [[ "$CT_ID" =~ ^[0-9]+$ ]]; then
LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json 2>/dev/null | grep -oP '"vmid":\s*\K\d+') || true
if [[ -n "$LIST_OF_IDS" ]]; then
LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json | grep -oP '"vmid":\s*\K\d+')
if ! grep -q "^$CT_ID$" <<<"$LIST_OF_IDS"; then
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
if ! grep -q "^$CT_ID$" <<<"$LIST_OF_IDS"; then
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
else
msg_error "Container ID $CT_ID already exists"
exit
fi
else
msg_error "Container ID $CT_ID already exists"
exit
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
fi
else
msg_error "Invalid Container ID format. Needs to be 0000-9999 or 0-9999, was ${CT_ID}"
@ -952,27 +954,26 @@ config_file() {
if [ "$NET" == "dhcp" ]; then
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}DHCP${CL}"
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}Default${CL}"
elif
[[ "$NET" =~ $ip_cidr_regex ]]
then
elif [[ "$NET" =~ $ip_cidr_regex ]]; then
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}$NET${CL}"
if [ ! -z "$GATE" ]; then
if [[ "$GATE" =~ $ip_regex ]]; then
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}$GATE${CL}"
GATE=",gw=$GATE"
else
msg_error "Invalid IP Address format for Gateway. Needs to be 0.0.0.0, was ${GATE}"
exit
fi
else
msg_error "Gateway IP Address cannot be empty"
exit
fi
else
msg_error "Invalid IP Address format. Needs to be 0.0.0.0/0, was ${NET}"
exit
fi
fi
if [ ! -z "$GATE" ]; then
if [[ "$GATE" =~ $ip_regex ]]; then
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}$GATE${CL}"
GATE=",gw=$GATE"
else
msg_error "Invalid IP Address format for Gateway. Needs to be 0.0.0.0, was ${GATE}"
exit
fi
else
msg_error "Gateway IP Address cannot be empty"
exit
fi
if [[ ! -z "$APT_CACHER_IP" ]]; then
if [[ "$APT_CACHER_IP" =~ $ip_regex ]]; then
@ -1397,7 +1398,7 @@ description() {
<img src='https://img.shields.io/badge/&#x2615;-Buy us a coffee-blue' alt='spend Coffee' />
</a>
</p>
<span style='margin: 0 10px;'>
<i class="fa fa-github fa-fw" style="color: #f5f5f5;"></i>
<a href='https://github.com/community-scripts/ProxmoxVE' target='_blank' rel='noopener noreferrer' style='text-decoration: none; color: #00617f;'>GitHub</a>
@ -1441,7 +1442,7 @@ silent() {
fi
}
exit_script() {
api_exit_script() {
exit_code=$? # Capture the exit status of the last executed command
#200 exit codes indicate error in create_lxc.sh
#100 exit codes indicate error in install.func
@ -1465,7 +1466,7 @@ exit_script() {
fi
}
trap 'exit_script' EXIT
trap 'api_exit_script' EXIT
trap 'post_update_to_api "failed" "$BASH_COMMAND"' ERR
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM

View File

@ -55,10 +55,16 @@ install_node_and_modules() {
IFS=',' read -ra MODULES <<<"$NODE_MODULE"
for mod in "${MODULES[@]}"; do
local MODULE_NAME MODULE_REQ_VERSION MODULE_INSTALLED_VERSION
if [[ "$mod" == *"@"* ]]; then
if [[ "$mod" == @*/*@* ]]; then
# Scoped package with version, e.g. @vue/cli-service@latest
MODULE_NAME="${mod%@*}"
MODULE_REQ_VERSION="${mod#*@}"
MODULE_REQ_VERSION="${mod##*@}"
elif [[ "$mod" == *"@"* ]]; then
# Unscoped package with version, e.g. yarn@latest
MODULE_NAME="${mod%@*}"
MODULE_REQ_VERSION="${mod##*@}"
else
# No version specified
MODULE_NAME="$mod"
MODULE_REQ_VERSION="latest"
fi
@ -101,25 +107,31 @@ install_postgresql() {
DISTRO="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
if command -v psql >/dev/null; then
CURRENT_PG_VERSION="$(psql -V | grep -oP '\s\K[0-9]+(?=\.)')"
if [[ "$CURRENT_PG_VERSION" != "$PG_VERSION" ]]; then
msg_info "PostgreSQL Version $CURRENT_PG_VERSION found, replacing with $PG_VERSION"
NEED_PG_INSTALL=true
CURRENT_PG_VERSION="$(psql -V | awk '{print $3}' | cut -d. -f1)"
if [[ "$CURRENT_PG_VERSION" == "$PG_VERSION" ]]; then
msg_ok "PostgreSQL $PG_VERSION is already installed"
return
fi
msg_info "Detected PostgreSQL $CURRENT_PG_VERSION, preparing upgrade to $PG_VERSION"
NEED_PG_INSTALL=true
else
msg_info "PostgreSQL not found, installing version $PG_VERSION"
msg_info "PostgreSQL not installed, proceeding with fresh install of $PG_VERSION"
NEED_PG_INSTALL=true
fi
if [[ "$NEED_PG_INSTALL" == true ]]; then
msg_info "Stopping PostgreSQL if running"
systemctl stop postgresql >/dev/null 2>&1 || true
if [[ -n "$CURRENT_PG_VERSION" ]]; then
msg_info "Dumping all PostgreSQL data from version $CURRENT_PG_VERSION"
su - postgres -c "pg_dumpall > /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
fi
msg_info "Removing conflicting PostgreSQL packages"
$STD apt-get purge -y "postgresql*"
msg_info "Stopping PostgreSQL service"
systemctl stop postgresql || true
msg_info "Removing pgdg repo and old GPG key"
rm -f /etc/apt/sources.list.d/pgdg.list /etc/apt/trusted.gpg.d/postgresql.gpg
msg_info "Setting up PostgreSQL Repository"
msg_info "Adding PostgreSQL PGDG repository"
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc |
gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
@ -127,9 +139,24 @@ install_postgresql() {
>/etc/apt/sources.list.d/pgdg.list
$STD apt-get update
$STD apt-get install -y "postgresql-${PG_VERSION}"
msg_ok "Installed PostgreSQL ${PG_VERSION}"
msg_info "Installing PostgreSQL $PG_VERSION"
$STD apt-get install -y "postgresql-${PG_VERSION}" "postgresql-client-${PG_VERSION}"
if [[ -n "$CURRENT_PG_VERSION" ]]; then
$STD msg_info "Removing old PostgreSQL $CURRENT_PG_VERSION packages"
$STD apt-get purge -y "postgresql-${CURRENT_PG_VERSION}" "postgresql-client-${CURRENT_PG_VERSION}" || true
fi
$STD msg_info "Starting PostgreSQL $PG_VERSION"
systemctl enable --now postgresql
if [[ -n "$CURRENT_PG_VERSION" ]]; then
$STD msg_info "Restoring dumped data"
su - postgres -c "psql < /var/lib/postgresql/backup_$(date +%F)_v${CURRENT_PG_VERSION}.sql"
fi
msg_ok "PostgreSQL $PG_VERSION installed"
fi
}
@ -245,7 +272,11 @@ install_php() {
COMBINED_MODULES=$(echo "$COMBINED_MODULES" | tr ',' '\n' | awk '!seen[$0]++' | paste -sd, -)
local CURRENT_PHP
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
if command -v php >/dev/null 2>&1; then
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
else
CURRENT_PHP=""
fi
if [[ "$CURRENT_PHP" != "$PHP_VERSION" ]]; then
$STD echo "PHP $CURRENT_PHP detected, migrating to PHP $PHP_VERSION"
@ -352,7 +383,7 @@ install_go() {
msg_error "Could not determine latest Go version"
return 1
fi
msg_info "Detected latest Go version: $GO_VERSION"
$STD msg_info "Detected latest Go version: $GO_VERSION"
fi
local GO_BIN="/usr/local/bin/go"
@ -362,10 +393,10 @@ install_go() {
local CURRENT_VERSION
CURRENT_VERSION=$("$GO_BIN" version | awk '{print $3}' | sed 's/go//')
if [[ "$CURRENT_VERSION" == "$GO_VERSION" ]]; then
msg_ok "Go $GO_VERSION already installed"
$STD msg_ok "Go $GO_VERSION already installed"
return 0
else
msg_info "Go $CURRENT_VERSION found, upgrading to $GO_VERSION"
$STD msg_info "Go $CURRENT_VERSION found, upgrading to $GO_VERSION"
rm -rf "$GO_INSTALL_DIR"
fi
else
@ -479,7 +510,7 @@ install_mongodb() {
fetch_and_deploy_gh_release() {
local repo="$1"
local app=$(echo ${APPLICATION,,} | tr -d ' ')
local app=${APP:-$(echo "${APPLICATION,,}" | tr -d ' ')}
local api_url="https://api.github.com/repos/$repo/releases/latest"
local header=()
local attempt=0
@ -537,7 +568,7 @@ fetch_and_deploy_gh_release() {
fi
tag=$(echo "$api_response" | jq -r '.tag_name // .name // empty')
[[ "$tag" =~ ^v[0-9] ]] && tag="${tag:1}"
version="${tag#v}"
if [[ -z "$tag" ]]; then
$STD msg_info "Empty tag received, retrying...\n"
@ -555,12 +586,11 @@ fetch_and_deploy_gh_release() {
fi
# Version comparison (if we already have this version, skip)
if [[ "$current_version" == "$tag" ]]; then
$STD msg_info "Already running the latest version ($tag). Skipping update."
if [[ "$current_version" == "$version" ]]; then
$STD msg_info "Already running the latest version ($version). Skipping update."
return 0
fi
local version="$tag"
local base_url="https://github.com/$repo/releases/download/v$tag"
local tmpdir
tmpdir=$(mktemp -d) || return 1

View File

@ -5,28 +5,28 @@
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
function header_info {
clear
cat <<"EOF"
____ __ _ ________ ____ __ __
/ __ \_________ _ ______ ___ ____ _ __ / / | |/ / ____/ / __ \___ / /__ / /____
clear
cat <<"EOF"
____ __ _ ________ ____ __ __
/ __ \_________ _ ______ ___ ____ _ __ / / | |/ / ____/ / __ \___ / /__ / /____
/ /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/ / / | / / / / / / _ \/ / _ \/ __/ _ \
/ ____/ / / /_/ /> </ / / / / / /_/ /> < / /___/ / /___ / /_/ / __/ / __/ /_/ __/
/_/ /_/ \____/_/|_/_/ /_/ /_/\____/_/|_| /_____/_/|_\____/ /_____/\___/_/\___/\__/\___/
/_/ /_/ \____/_/|_/_/ /_/ /_/\____/_/|_| /_____/_/|_\____/ /_____/\___/_/\___/\__/\___/
EOF
}
spinner() {
local pid=$1
local delay=0.1
local spinstr='|/-\'
while ps -p $pid >/dev/null; do
printf " [%c] " "$spinstr"
spinstr=${spinstr#?}${spinstr%"${spinstr#?}"}
sleep $delay
printf "\r"
done
printf " \r"
local pid=$1
local delay=0.1
local spinstr='|/-\'
while ps -p $pid >/dev/null; do
printf " [%c] " "$spinstr"
spinstr=${spinstr#?}${spinstr%"${spinstr#?}"}
sleep $delay
printf "\r"
done
printf " \r"
}
set -eEuo pipefail
@ -46,29 +46,29 @@ NODE=$(hostname)
containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}')
if [ -z "$containers" ]; then
whiptail --title "LXC Container Delete" --msgbox "No LXC containers available!" 10 60
exit 1
whiptail --title "LXC Container Delete" --msgbox "No LXC containers available!" 10 60
exit 1
fi
menu_items=()
menu_items=("ALL" "Delete ALL containers" "OFF") # Add as first option
FORMAT="%-10s %-15s %-10s"
while read -r container; do
container_id=$(echo $container | awk '{print $1}')
container_name=$(echo $container | awk '{print $2}')
container_status=$(echo $container | awk '{print $3}')
formatted_line=$(printf "$FORMAT" "$container_name" "$container_status")
menu_items+=("$container_id" "$formatted_line" "OFF")
container_id=$(echo $container | awk '{print $1}')
container_name=$(echo $container | awk '{print $2}')
container_status=$(echo $container | awk '{print $3}')
formatted_line=$(printf "$FORMAT" "$container_name" "$container_status")
menu_items+=("$container_id" "$formatted_line" "OFF")
done <<<"$containers"
CHOICES=$(whiptail --title "LXC Container Delete" \
--checklist "Select LXC containers to delete:" 25 60 13 \
"${menu_items[@]}" 3>&2 2>&1 1>&3)
--checklist "Select LXC containers to delete:" 25 60 13 \
"${menu_items[@]}" 3>&2 2>&1 1>&3)
if [ -z "$CHOICES" ]; then
whiptail --title "LXC Container Delete" \
--msgbox "No containers selected!" 10 60
exit 1
whiptail --title "LXC Container Delete" \
--msgbox "No containers selected!" 10 60
exit 1
fi
read -p "Delete containers manually or automatically? (Default: manual) m/a: " DELETE_MODE
@ -76,34 +76,39 @@ DELETE_MODE=${DELETE_MODE:-m}
selected_ids=$(echo "$CHOICES" | tr -d '"' | tr -s ' ' '\n')
# If "ALL" is selected, override with all container IDs
if echo "$selected_ids" | grep -q "^ALL$"; then
selected_ids=$(echo "$containers" | awk '{print $1}')
fi
for container_id in $selected_ids; do
status=$(pct status $container_id)
status=$(pct status $container_id)
if [ "$status" == "status: running" ]; then
echo -e "${BL}[Info]${GN} Stopping container $container_id...${CL}"
pct stop $container_id &
sleep 5
echo -e "${BL}[Info]${GN} Container $container_id stopped.${CL}"
fi
if [ "$status" == "status: running" ]; then
echo -e "${BL}[Info]${GN} Stopping container $container_id...${CL}"
pct stop $container_id &
sleep 5
echo -e "${BL}[Info]${GN} Container $container_id stopped.${CL}"
fi
if [[ "$DELETE_MODE" == "a" ]]; then
echo -e "${BL}[Info]${GN} Automatically deleting container $container_id...${CL}"
pct destroy "$container_id" -f &
pid=$!
spinner $pid
[ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
if [[ "$DELETE_MODE" == "a" ]]; then
echo -e "${BL}[Info]${GN} Automatically deleting container $container_id...${CL}"
pct destroy "$container_id" -f &
pid=$!
spinner $pid
[ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
else
read -p "Delete container $container_id? (y/N): " CONFIRM
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
echo -e "${BL}[Info]${GN} Deleting container $container_id...${CL}"
pct destroy "$container_id" -f &
pid=$!
spinner $pid
[ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
else
read -p "Delete container $container_id? (y/N): " CONFIRM
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
echo -e "${BL}[Info]${GN} Deleting container $container_id...${CL}"
pct destroy "$container_id" -f &
pid=$!
spinner $pid
[ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
else
echo -e "${BL}[Info]${RD} Skipping container $container_id...${CL}"
fi
echo -e "${BL}[Info]${RD} Skipping container $container_id...${CL}"
fi
fi
done
header_info

View File

@ -13,7 +13,7 @@ function update_container() {
echo -e "\n [Info] Updating $container : $name \n"
os=$(pct config "$container" | awk '/^ostype/ {print $2}')
case "$os" in
alpine) pct exec "$container" -- ash -c "apk update && apk upgrade" ;;
alpine) pct exec "$container" -- ash -c "apk -U upgrade" ;;
archlinux) pct exec "$container" -- bash -c "pacman -Syyu --noconfirm" ;;
fedora | rocky | centos | alma) pct exec "$container" -- bash -c "dnf -y update && dnf -y upgrade" ;;
ubuntu | debian | devuan) pct exec "$container" -- bash -c "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confold" dist-upgrade -y; rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED" ;;
@ -33,17 +33,17 @@ for container in $(pct list | awk '{if(NR>1) print $1}'); do
echo -e "[Info] Skipping $container"
sleep 1
else
status=$(pct status $container)
template=$(pct config $container | grep -q "template:" && echo "true" || echo "false")
status=$(pct status "$container")
template=$(pct config "$container" | grep -q "template:" && echo "true" || echo "false")
if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then
echo -e "[Info] Starting $container"
pct start $container
pct start "$container"
sleep 5
update_container $container
update_container "$container"
echo -e "[Info] Shutting down $container"
pct shutdown $container &
pct shutdown "$container" &
elif [ "$status" == "status: running" ]; then
update_container $container
update_container "$container"
fi
fi
done

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