Compare commits

..

186 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
30ca65e1d5 Update versions.json (#6130)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 02:13:47 +02:00
community-scripts-pr-app[bot]
ae84b7d281 Update CHANGELOG.md (#6128)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-21 18:22:53 +00:00
CanbiZ
202eed7c13 firefly: fix permissions at update (#6119) 2025-07-21 20:22:31 +02:00
CanbiZ
e194a36301 readd teamspeak-json (#6127) 2025-07-21 19:17:39 +02:00
CanbiZ
7b93eed34a Delete frontend/public/json/teamspeak-server.json 2025-07-21 19:09:15 +02:00
community-scripts-pr-app[bot]
5a3855566b Update CHANGELOG.md (#6123)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-21 16:47:29 +00:00
Luke Hamburg
85595871df alternate fix for #6087 (#6098) 2025-07-21 18:47:03 +02:00
community-scripts-pr-app[bot]
901837b4ae Update CHANGELOG.md (#6122)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-21 16:45:20 +00:00
push-app-to-main[bot]
9f1273349f Teamspeak-Server (#6121)
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>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-07-21 18:44:57 +02:00
community-scripts-pr-app[bot]
e6756385ed Update CHANGELOG.md (#6118)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-21 14:05:42 +00:00
CanbiZ
74be3e70b9 nginxproxymanager: remove injected tteck link (#6117) 2025-07-21 16:05:17 +02:00
community-scripts-pr-app[bot]
9060e8f372 Update versions.json (#6114)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-21 14:07:16 +02:00
community-scripts-pr-app[bot]
2adcf04426 Update versions.json (#6112)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-21 09:45:16 +02:00
community-scripts-pr-app[bot]
88d58cd100 Update CHANGELOG.md (#6107)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-21 00:14:47 +00:00
community-scripts-pr-app[bot]
1046ffb544 Update versions.json (#6106)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-21 02:14:29 +02:00
community-scripts-pr-app[bot]
a011b60a6e Update CHANGELOG.md (#6102)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-20 20:29:26 +00:00
Chris
be6ac828ca karakeep: add DB_WAL_MODE; suppress test output (#6101) 2025-07-20 22:29:07 +02:00
community-scripts-pr-app[bot]
a196541771 Update versions.json (#6097)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-20 14:05:22 +02:00
community-scripts-pr-app[bot]
ca7564d0e5 Update CHANGELOG.md (#6096)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-20 11:45:23 +00:00
Hristo Karamanliev
ccdf6a4aec fix openwebui install/update scripts (#6093) 2025-07-20 13:45:00 +02:00
community-scripts-pr-app[bot]
c2c2e4030e Update CHANGELOG.md (#6091)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-20 00:16:17 +00:00
community-scripts-pr-app[bot]
268d692281 Update versions.json (#6090)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-20 02:15:52 +02:00
community-scripts-pr-app[bot]
3547552c23 Update CHANGELOG.md (#6089)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-19 22:13:19 +00:00
community-scripts-pr-app[bot]
3579c93d80 Update CHANGELOG.md (#6085)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-19 13:49:46 +00:00
Denis Chernov
65e0ed2976 Fixed nag script on ProxMox 8.4.5 (#6084) 2025-07-19 15:49:23 +02:00
community-scripts-pr-app[bot]
2bd9f4a7c6 Update versions.json (#6083)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-19 14:04:45 +02:00
Brad Baker
f56489cb07 Update cloudreve.json (#6080) 2025-07-19 08:53:17 +02:00
community-scripts-pr-app[bot]
852bfbd71c Update CHANGELOG.md (#6077)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-19 00:14:38 +00:00
community-scripts-pr-app[bot]
255bd7a803 Update versions.json (#6076)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-19 02:14:15 +02:00
community-scripts-pr-app[bot]
ffe774dc4c Update CHANGELOG.md (#6075)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-18 17:27:45 +00:00
CanbiZ
2f08a8623b Bar-Assistant: add Cocktail Prebuild-Data (#6068) 2025-07-18 19:27:29 +02:00
CanbiZ
1af6cc6b54 ErsatzTV: use project prebuild ffmpeg version (#6067) 2025-07-18 19:27:06 +02:00
community-scripts-pr-app[bot]
0113c7e7fd Update CHANGELOG.md (#6074)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-18 17:25:57 +00:00
CanbiZ
745533759a AdventureLog: add backup folder before update (#6066) 2025-07-18 19:25:34 +02:00
community-scripts-pr-app[bot]
c62b244569 Update versions.json (#6071)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-18 14:06:51 +02:00
community-scripts-pr-app[bot]
2600e84a14 Update CHANGELOG.md (#6062)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-18 00:14:01 +00:00
community-scripts-pr-app[bot]
51faa3b03d Update versions.json (#6061)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-18 02:13:41 +02:00
Slaviša Arežina
a5ed6c1af7 Update planka.sh (#6058) 2025-07-17 22:00:24 +02:00
community-scripts-pr-app[bot]
05f552eca7 Update CHANGELOG.md (#6057)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-17 19:23:34 +00:00
ahmaddxb
da71a0fa01 Update config-file.func (#6042)
Fix: Handle GATE variable correctly for DHCP in config file mode

This change fixes the bug by adding GATE="" to the validation block for NET="dhcp".
2025-07-17 21:23:14 +02:00
Slaviša Arežina
2a359b5d2d fix backing up of data (#6055) 2025-07-17 21:22:41 +02:00
community-scripts-pr-app[bot]
a125d00cad Update CHANGELOG.md (#6056)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-17 19:13:51 +00:00
CanbiZ
14f36819c2 update composer (#6047) 2025-07-17 21:13:31 +02:00
community-scripts-pr-app[bot]
b4df44bc5c Update CHANGELOG.md (#6054)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-17 15:32:56 +00:00
Chris
53fa29e01f Reactive Resume: switch source to community-maintained fork (#6051)
Remove entire folder before update
2025-07-17 17:32:25 +02:00
community-scripts-pr-app[bot]
33e19bc535 Update .app files (#6049)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-07-17 16:16:22 +02:00
community-scripts-pr-app[bot]
52bc5f33e6 Update CHANGELOG.md (#6048)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-17 14:01:59 +00:00
push-app-to-main[bot]
51a6024a1b Cloudreve (#6044)
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-07-17 16:01:37 +02:00
community-scripts-pr-app[bot]
49aa5ae552 Update CHANGELOG.md (#6046)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-17 13:17:06 +00:00
Slaviša Arežina
6dc91a2144 Fix update (#6031) 2025-07-17 15:16:42 +02:00
CanbiZ
03813ff991 linguist - enable visible jsons in pr's 2025-07-17 15:14:05 +02:00
community-scripts-pr-app[bot]
c0df5b79f5 Update versions.json (#6043)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-17 14:05:30 +02:00
community-scripts-pr-app[bot]
523b3e6a70 Update CHANGELOG.md (#6037)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-17 00:14:03 +00:00
community-scripts-pr-app[bot]
4ce715acd4 Update versions.json (#6036)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-17 02:13:42 +02:00
community-scripts-pr-app[bot]
1ad394367e Update CHANGELOG.md (#6034)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-16 17:32:43 +00:00
Chris
0b0ae1a3bc homepage.sh: hotfix #6028 (#6032) 2025-07-16 19:32:17 +02:00
community-scripts-pr-app[bot]
63c5912723 Update CHANGELOG.md (#6033)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-16 16:31:43 +00:00
Chris
dafb4af6a8 karakeep-install: Disable Playwright browser download, remove MCP build (#5833)
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-07-16 18:31:24 +02:00
community-scripts-pr-app[bot]
88e3a334f7 Update versions.json (#6027)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-16 14:06:10 +02:00
community-scripts-pr-app[bot]
bbd600a348 Update CHANGELOG.md (#6024)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-16 06:53:57 +00:00
Kimmo Saari
c90f800a69 chore: reorganize nginxproxymanager update script (#5971) 2025-07-16 08:53:35 +02:00
Cristian
ca5f0629b0 Update mealie.json -- interface_port (#6021) 2025-07-16 08:53:11 +02:00
community-scripts-pr-app[bot]
a7f67e5534 Update CHANGELOG.md (#6023)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-16 00:14:00 +00:00
community-scripts-pr-app[bot]
03c4e54da6 Update versions.json (#6022)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-16 02:13:38 +02:00
CanbiZ
eb86d3e960 qf: ffmpeg hw acc 2025-07-15 16:57:43 +02:00
CanbiZ
968b7cdf43 set ffmeg_type to full 2025-07-15 14:20:22 +02:00
community-scripts-pr-app[bot]
688d296d13 Update CHANGELOG.md (#6016)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-15 12:06:23 +00:00
community-scripts-pr-app[bot]
0379223ead Update versions.json (#6015)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-15 14:05:58 +02:00
CanbiZ
7a0ca05153 fix possible whiptail issue 2025-07-15 13:47:08 +02:00
CanbiZ
fb3bf03332 Update build.func 2025-07-15 13:43:05 +02:00
community-scripts-pr-app[bot]
6d312c9c8d Update CHANGELOG.md (#6012)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-15 11:38:45 +00:00
CanbiZ
a2dde6594e add missing choise 2025-07-15 13:38:25 +02:00
community-scripts-pr-app[bot]
f7c9d77019 Update CHANGELOG.md (#6009)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-15 11:16:02 +00:00
CanbiZ
8f4f2f4d92 Whiptail: Improve Dialogue to work with ESC (#6003) 2025-07-15 13:15:42 +02:00
community-scripts-pr-app[bot]
f15e4ea552 Update CHANGELOG.md (#6008)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-15 11:12:51 +00:00
CanbiZ
1a90d90d5e 2FAuth: Improve Update-Check (#5998) 2025-07-15 13:12:32 +02:00
community-scripts-pr-app[bot]
11f1e86500 Update CHANGELOG.md (#6007)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-15 11:11:29 +00:00
CanbiZ
9d84657763 EMQX_ Purge Old Install (#5999) 2025-07-15 13:11:07 +02:00
community-scripts-pr-app[bot]
31d57da5ab Update CHANGELOG.md (#6006)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-15 10:22:57 +00:00
CanbiZ
7d223b984b Refactor: PeaNUT (#6002) 2025-07-15 12:22:38 +02:00
community-scripts-pr-app[bot]
417c4e466c Update CHANGELOG.md (#6005)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-15 10:21:33 +00:00
CanbiZ
b16fa8d34f checkmk: change password crawling based on there docs (#6001)
* checkmk: change variable name for reserved PASSWORD

* Update checkmk-install.sh

* Update checkmk-install.sh

* Update checkmk-install.sh
2025-07-15 12:21:10 +02:00
community-scripts-pr-app[bot]
3a2f0bf2cc Update CHANGELOG.md (#5992)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-15 00:15:18 +00:00
community-scripts-pr-app[bot]
a83b58f1df Update versions.json (#5991)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-15 02:14:59 +02:00
CanbiZ
e5e8b1e020 fix ipv6 config file 2025-07-14 22:37:36 +02:00
CanbiZ
3b3e62c4cf escape ipv6 config file 2025-07-14 22:33:05 +02:00
CanbiZ
478b65b2c2 qf 2025-07-14 22:17:48 +02:00
community-scripts-pr-app[bot]
1982ca80d2 Update CHANGELOG.md (#5986)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 19:51:17 +00:00
CanbiZ
b060de68c0 Push (#5978) 2025-07-14 21:50:56 +02:00
community-scripts-pr-app[bot]
a437a7896b Update CHANGELOG.md (#5981)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 14:41:09 +00:00
tug-benson
561a2f2712 add --break-system-packages certbot-dns-cloudflare to the nginxproxymanager.sh script (#5957) 2025-07-14 16:40:41 +02:00
community-scripts-pr-app[bot]
aa0a2e1654 Update CHANGELOG.md (#5980)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 14:40:13 +00:00
community-scripts-pr-app[bot]
b34b4e09d8 Update CHANGELOG.md (#5979)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 14:39:51 +00:00
CanbiZ
f48593ac81 Dashy: remove unbound variable (RELEASE) (#5974) 2025-07-14 16:39:39 +02:00
push-app-to-main[bot]
eba06a27f3 'Add new script' (#5977) 2025-07-14 16:39:18 +02:00
community-scripts-pr-app[bot]
ac1d7f8169 Update versions.json (#5972)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 14:06:21 +02:00
community-scripts-pr-app[bot]
595fb1ecd9 Update date in json (#5970)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-07-14 09:46:47 +00:00
community-scripts-pr-app[bot]
207616ec66 Update CHANGELOG.md (#5969)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 09:46:38 +00:00
push-app-to-main[bot]
9297ee5e7b Mealie (#5968)
* 'Add new script'

* increase json

* env

* release crawling with jq

* spelling in update

* curl

* Update mealie-install.sh

---------

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-07-14 11:46:19 +02:00
CanbiZ
3fc21c7705 change runner 2025-07-14 11:23:49 +02:00
CanbiZ
a514a7ff97 change runner 2025-07-14 11:23:39 +02:00
community-scripts-pr-app[bot]
591106adb4 Update CHANGELOG.md (#5966)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 08:04:55 +00:00
Michel Roegl-Brunner
149b2f1602 Revert from Self Hosted to Ubunut-latest for actions (#5965)
* Update auto-update-app-headers.yml

* Update autolabeler.yml

* Update changelog-pr.yml

* Update crawl-versions.yaml

* Update delete-json-branch.yml

* Update frontend-cicd.yml

* Update github-release.yml

* Update update-json-date.yml
2025-07-14 10:04:35 +02:00
CanbiZ
3aff85b730 qf: threadfin 2025-07-14 08:55:39 +02:00
CanbiZ
c116e773b3 qf: threadfin 2025-07-14 08:54:56 +02:00
CanbiZ
1e58019e2e qf: threadfin 2025-07-14 08:54:09 +02:00
Calvin Li
17e671cae9 Update nic-offloading-fix: add Intel as search Text (#5954)
* Update nic-offloading-fix.json

* Update nic-offloading-fix.json
2025-07-13 20:00:59 +02:00
Slaviša Arežina
4d236e6382 Firefly: Move to prebuild archive as installation source (#5952) 2025-07-13 09:58:47 +02:00
Slaviša Arežina
f4ac341c15 Add composer (#5947) 2025-07-12 13:22:58 +02:00
smhc
20e9e9efe8 Fix url to gpg key (#5946) 2025-07-12 11:37:09 +02:00
community-scripts-pr-app[bot]
ee5cd20915 Update CHANGELOG.md (#5942)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-12 01:15:38 +01:00
community-scripts-pr-app[bot]
5dcd39231f Update versions.json (#5941)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-12 02:15:06 +02:00
Slaviša Arežina
8f79823c95 Fix dependencies (#5940) 2025-07-11 22:04:41 +02:00
community-scripts-pr-app[bot]
ba00a1d3f0 Update CHANGELOG.md (#5939)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 19:24:43 +01:00
Chris
599d65768e immich: hotfix 5821 (#5938) 2025-07-11 20:24:06 +02:00
community-scripts-pr-app[bot]
471e2f758f Update CHANGELOG.md (#5936)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 14:06:04 +01:00
CanbiZ
f3a4bd461d bookstack: add setup_composer in update (#5935) 2025-07-11 15:05:26 +02:00
community-scripts-pr-app[bot]
b115fe9120 Update versions.json (#5934)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 14:07:46 +02:00
community-scripts-pr-app[bot]
f9429ecf5a Update CHANGELOG.md (#5933)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 12:56:53 +01:00
Chris
ebea43f299 Immich: revert install sequence (#5932)
- apparently the Postgresql-16 install does not like running after
packages from Testing are installed. Reverted the change and restored
running the DB Collation queries
2025-07-11 13:56:20 +02:00
community-scripts-pr-app[bot]
d693c9361b Update CHANGELOG.md (#5927)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 10:40:20 +01:00
CanbiZ
3ca53067a7 Refactor & Function Bump: Docker (#5889)
* Refactor: Docker

* add more features

* update_script

* Update docker.sh
2025-07-11 11:39:50 +02:00
community-scripts-pr-app[bot]
93e204850b Update CHANGELOG.md (#5925)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 07:36:12 +01:00
Chris
8595d48cec Immich: handle custom library dependency updates; other fixes (#5896)
- Adds libaom-dev to the installer; checks for it and installs during
update
- Refactor immich.sh to simplify custom library recompilations into
functions
- Move installation of packages from Testing repo before Postgresql
install to avoid DB collation issue
2025-07-11 08:35:45 +02:00
community-scripts-pr-app[bot]
6fcca2bfdb Update CHANGELOG.md (#5923)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 01:16:20 +01:00
community-scripts-pr-app[bot]
295b419fbc Update versions.json (#5922)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 02:15:34 +02:00
CanbiZ
b9ac02e74f Update tools.func 2025-07-10 14:39:33 +02:00
community-scripts-pr-app[bot]
66d2f96b16 Update versions.json (#5916)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-10 14:08:52 +02:00
community-scripts-pr-app[bot]
1a66ca2683 Update CHANGELOG.md (#5915)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-10 13:01:54 +01:00
community-scripts-pr-app[bot]
b865be5e45 Update CHANGELOG.md (#5914)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-10 13:00:20 +01:00
CanbiZ
edb8ee5980 Refactor: Habitica (#5911) 2025-07-10 14:00:04 +02:00
community-scripts-pr-app[bot]
d30c0718da Update CHANGELOG.md (#5913)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-10 12:59:02 +01:00
CanbiZ
90b6712453 Refactor: EMQX + Update-Function + Improved NodeJS Crawling (#5907) 2025-07-10 13:58:20 +02:00
community-scripts-pr-app[bot]
3140438b2f Update CHANGELOG.md (#5908)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-10 10:17:31 +01:00
CanbiZ
bb00b9f545 core: fix breaking redownload for lxc containers (#5906) 2025-07-10 11:17:01 +02:00
community-scripts-pr-app[bot]
12b9e163bc Update CHANGELOG.md (#5905)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-10 06:35:30 +01:00
Slaviša Arežina
ee182fe867 Fix planka (#5900) 2025-07-10 07:35:03 +02:00
community-scripts-pr-app[bot]
5c6573152d Update CHANGELOG.md (#5902)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-10 01:16:04 +01:00
community-scripts-pr-app[bot]
1c05a843bb Update versions.json (#5901)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-10 02:15:25 +02:00
community-scripts-pr-app[bot]
ce5b17e210 Update CHANGELOG.md (#5895)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 20:59:08 +01:00
CanbiZ
787d749340 omada fix (#5894) 2025-07-09 21:58:33 +02:00
community-scripts-pr-app[bot]
cd98fddc05 Update CHANGELOG.md (#5892)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 20:20:14 +01:00
Slaviša Arežina
043ca11732 Update baikal-install.sh (#5891) 2025-07-09 21:19:49 +02:00
CanbiZ
d596ced793 fix tcp issue docker 2025-07-09 19:19:18 +02:00
CanbiZ
4f08b4609b breaking fix docker 2025-07-09 19:09:41 +02:00
community-scripts-pr-app[bot]
2e4c185ee1 Update CHANGELOG.md (#5887)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 18:01:03 +01:00
CanbiZ
64fac95a03 FreshRSS: fix needed php modules (#5886) 2025-07-09 19:00:33 +02:00
community-scripts-pr-app[bot]
786c9178f9 Update CHANGELOG.md (#5885)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 16:43:58 +01:00
CanbiZ
7b380253ee Refactor: Stirling-PDF (#5872) 2025-07-09 17:43:30 +02:00
community-scripts-pr-app[bot]
3914c0f7b9 Update CHANGELOG.md (#5884)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 16:43:07 +01:00
Slaviša Arežina
1a53b749da Refactor (#5844) 2025-07-09 17:42:28 +02:00
community-scripts-pr-app[bot]
f01046133e Update CHANGELOG.md (#5883)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 16:40:39 +01:00
CanbiZ
e8aa450d06 Refactor: Ghost (use now MySQL) (#5871)
* Refactor: Ghost

* update mysql
2025-07-09 17:40:14 +02:00
community-scripts-pr-app[bot]
6acf854f3e Update CHANGELOG.md (#5882)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 16:12:38 +01:00
Slaviša Arežina
b565048985 Refactor (#5874) 2025-07-09 17:12:02 +02:00
community-scripts-pr-app[bot]
24eff9dbbd Update CHANGELOG.md (#5880)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 15:10:41 +01:00
CanbiZ
24be3b43b1 core: Fix VAAPI passthrough for unprivileged LXC containers via devX (#5875) 2025-07-09 16:10:13 +02:00
community-scripts-pr-app[bot]
54d534a5d2 Update CHANGELOG.md (#5879)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 15:05:57 +01:00
Slaviša Arežina
5bad80e148 Refactor: FlareSolverr (#5845)
* Refactor

* Update flaresolverr.sh

* Update flaresolverr.sh

* Update flaresolverr-install.sh
2025-07-09 16:05:31 +02:00
community-scripts-pr-app[bot]
89498f4205 Update CHANGELOG.md (#5878)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 15:04:36 +01:00
Slaviša Arežina
661a58ae29 Refactor (#5876) 2025-07-09 16:03:57 +02:00
CanbiZ
acc500fe9d remove breaking change in autolabler 2025-07-09 14:28:44 +02:00
community-scripts-pr-app[bot]
0a37d1b004 Update CHANGELOG.md (#5870)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 13:23:23 +01:00
Slaviša Arežina
8c09216691 Refactor: Commafeed (#5802) 2025-07-09 14:22:41 +02:00
community-scripts-pr-app[bot]
54cd7dd669 Update CHANGELOG.md (#5869)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 13:10:09 +01:00
CanbiZ
2ff778db9a Github: AutoLabler | ChangeLog (Refactor) (#5868) 2025-07-09 14:09:11 +02:00
community-scripts-pr-app[bot]
5d1f0ab13e Update versions.json (#5867)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 14:08:07 +02:00
community-scripts-pr-app[bot]
b306a31235 Update CHANGELOG.md (#5866)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 13:07:01 +01:00
CanbiZ
c8797ba135 tools.func: strip leading folders for prebuild assets (#5865) 2025-07-09 14:06:33 +02:00
community-scripts-pr-app[bot]
b9ec651a8b Update CHANGELOG.md (#5864)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 10:36:31 +01:00
Slaviša Arežina
475c666eb0 Refactor: FreshRSS (#5847)
* Refactor

* Update freshrss-install.sh
2025-07-09 11:36:03 +02:00
community-scripts-pr-app[bot]
8d419616a6 Update CHANGELOG.md (#5863)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 10:12:49 +01:00
Slaviša Arežina
d087719571 Refactor: Fluid-Calendar (#5846)
* Refactor

* Update fluid-calendar.sh

---------

Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-07-09 11:12:22 +02:00
community-scripts-pr-app[bot]
df52a2d057 Update CHANGELOG.md (#5862)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 10:01:52 +01:00
community-scripts-pr-app[bot]
4886196cfa Update CHANGELOG.md (#5861)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 10:01:18 +01:00
CanbiZ
1f37fbb83e BabyBuddy: fix path issues (#5856) 2025-07-09 11:01:01 +02:00
community-scripts-pr-app[bot]
387f2c7bd1 Update CHANGELOG.md (#5860)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 10:00:43 +01:00
CanbiZ
0b949c8151 tools.func: fix an bug while php libapache2-mod breaks (#5857) 2025-07-09 11:00:15 +02:00
community-scripts-pr-app[bot]
fd248e072c Update CHANGELOG.md (#5859)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 09:57:43 +01:00
Slaviša Arežina
e58e50fc15 Refactor (#5840) 2025-07-09 10:57:15 +02:00
community-scripts-pr-app[bot]
5b869b61fc Update CHANGELOG.md (#5858)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 09:54:01 +01:00
Slaviša Arežina
0e2c793f92 Refactor (#5841) 2025-07-09 10:53:35 +02:00
community-scripts-pr-app[bot]
96a8f9df89 Update CHANGELOG.md (#5855)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-09 06:42:31 +01:00
Slaviša Arežina
4f569c67eb Refactor (#5849) 2025-07-09 07:42:06 +02:00
CanbiZ
e856b36306 add workflow_dispatch 2025-07-09 07:39:32 +02:00
CanbiZ
42e8623f39 fix autolabler regex 2025-07-09 07:38:29 +02:00
101 changed files with 3134 additions and 1681 deletions

1
.gitattributes vendored
View File

@@ -26,6 +26,7 @@ SECURITY.md linguist-documentation
# ---------------------------------------
# Exclude generated/config files
*.json linguist-generated
frontend/public/json/*.json linguist-generated=false
*.lock linguist-generated
*.yml linguist-generated
*.yaml linguist-generated

43
.github/autolabeler-config.json generated vendored
View File

@@ -4,6 +4,7 @@
"fileStatus": "added",
"includeGlobs": [
"ct/**",
"tools/**",
"install/**",
"misc/**",
"turnkey/**",
@@ -17,16 +18,13 @@
"fileStatus": "modified",
"includeGlobs": [
"ct/**",
"tools/**",
"install/**",
"misc/**",
"turnkey/**",
"vm/**"
],
"excludeGlobs": [
"misc/build.func",
"misc/install.func",
"misc/api.func"
]
"excludeGlobs": []
}
],
"delete script": [
@@ -34,6 +32,7 @@
"fileStatus": "removed",
"includeGlobs": [
"ct/**",
"tools/**",
"install/**",
"misc/**",
"turnkey/**",
@@ -46,11 +45,7 @@
{
"fileStatus": null,
"includeGlobs": [
"*.md",
".github/**",
"misc/*.func",
"misc/create_lxc.sh",
"api/**"
"*.md"
],
"excludeGlobs": []
}
@@ -62,7 +57,9 @@
"misc/*.func",
"misc/create_lxc.sh"
],
"excludeGlobs": []
"excludeGlobs": [
"misc/api.func"
]
}
],
"website": [
@@ -71,7 +68,9 @@
"includeGlobs": [
"frontend/**"
],
"excludeGlobs": []
"excludeGlobs": [
"frontend/public/json/**"
]
}
],
"api": [
@@ -102,26 +101,6 @@
"excludeGlobs": []
}
],
"high risk": [
{
"fileStatus": null,
"includeGlobs": [
"misc/build.func",
"misc/install.func",
"misc/create_lxc.sh"
],
"excludeGlobs": []
}
],
"documentation": [
{
"fileStatus": null,
"includeGlobs": [
"*.md"
],
"excludeGlobs": []
}
],
"addon": [
{
"fileStatus": null,

120
.github/changelog-pr-config.json generated vendored
View File

@@ -1,112 +1,148 @@
[
{
"title": "🆕 New Scripts",
"labels": ["new script"]
"labels": [
"new script"
]
},
{
"title": "🚀 Updated Scripts",
"labels": ["update script"],
"labels": [
"update script"
],
"subCategories": [
{
"title": "🐞 Bug Fixes",
"labels": ["bugfix"],
"notes" : []
"labels": [
"bugfix"
],
"notes": []
},
{
"title": "✨ New Features",
"labels": ["feature"],
"notes" : []
"labels": [
"feature"
],
"notes": []
},
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"],
"notes" : []
"labels": [
"breaking change"
],
"notes": []
},
{
"title": "🔧 Refactor",
"labels": ["refactor"],
"notes" : []
"labels": [
"refactor"
],
"notes": []
}
]
},
{
"title": "🧰 Maintenance",
"labels": ["maintenance"],
"labels": [
"maintenance"
],
"subCategories": [
{
"title": "🐞 Bug Fixes",
"labels": ["bugfix"],
"notes" : []
"labels": [
"bugfix"
],
"notes": []
},
{
"title": "✨ New Features",
"labels": ["feature"],
"notes" : []
"labels": [
"feature"
],
"notes": []
},
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"],
"notes" : []
"labels": [
"breaking change"
],
"notes": []
},
{
"title": "📡 API",
"labels": ["api"],
"notes" : []
"labels": [
"api"
],
"notes": []
},
{
"title": "💾 Core",
"labels": ["core"],
"notes" : []
"labels": [
"core"
],
"notes": []
},
{
"title": "📂 Github",
"labels": ["github"],
"notes" : []
"labels": [
"github"
],
"notes": []
},
{
"title" :"📝 Documentation",
"labels": ["documentation"],
"notes" : []
"title": "📝 Documentation",
"labels": [
"maintenance"
],
"notes": []
},
{
"title" :"🔧 Refactor",
"labels": ["refactor"],
"notes" : []
"title": "🔧 Refactor",
"labels": [
"refactor"
],
"notes": []
}
]
},
{
"title": "🌐 Website",
"labels": ["website"],
"labels": [
"website"
],
"subCategories": [
{
"title": "🐞 Bug Fixes",
"labels": ["bugfix"],
"notes" : []
"labels": [
"bugfix"
],
"notes": []
},
{
"title": "✨ New Features",
"labels": ["feature"],
"notes" : []
"labels": [
"feature"
],
"notes": []
},
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"],
"notes" : []
"labels": [
"breaking change"
],
"notes": []
},
{
"title": "📝 Script Information",
"labels": ["json"],
"notes" : []
"labels": [
"json"
],
"notes": []
}
]
},
{
"title": "❔ Unlabelled",
"labels": []
},
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"]
}
]

View File

@@ -11,7 +11,7 @@ on:
jobs:
update-app-files:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
runs-on: ubuntu-latest
permissions:
contents: write

27
.github/workflows/autolabeler.yml generated vendored
View File

@@ -1,6 +1,7 @@
name: Auto Label Pull Requests
on:
workflow_dispatch:
pull_request_target:
branches: ["main"]
types: [opened, synchronize, reopened, edited]
@@ -8,7 +9,7 @@ on:
jobs:
autolabeler:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
runs-on: ubuntu-latest
permissions:
pull-requests: write
env:
@@ -33,7 +34,7 @@ jobs:
const autolabelerConfig = JSON.parse(fileContent);
const prNumber = context.payload.pull_request.number;
const prBody = context.payload.pull_request.body.toLowerCase();
const prBody = context.payload.pull_request.body || "";
let labelsToAdd = new Set();
@@ -73,19 +74,35 @@ jobs:
"✨ **New feature**": "feature",
"💥 **Breaking change**": "breaking change",
"🆕 **New script**": "new script",
"🌍 **Website update**": "website",
"🌍 **Website update**": "website", // handled special
"🔧 **Refactoring / Code Cleanup**": "refactor",
"📝 **Documentation update**": "documentation"
"📝 **Documentation update**": "documentation" // mapped to maintenance
};
for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
const regex = new RegExp(`- \[(x|X)\]\s*.*${escapedCheckbox}`, "i");
const regex = new RegExp(`- \\[(x|X)\\]\\s*${escapedCheckbox}`, "i");
if (regex.test(prBody)) {
if (label === "website") {
const hasJson = prFiles.some((f) => f.filename.startsWith("frontend/public/json/"));
const hasUpdateScript = labelsToAdd.has("update script");
const hasContentLabel = ["bugfix", "feature", "refactor"].some((l) => labelsToAdd.has(l));
if (!(hasUpdateScript && hasContentLabel)) {
labelsToAdd.add(hasJson ? "json" : "website");
}
} else if (label === "documentation") {
labelsToAdd.add("maintenance");
} else {
labelsToAdd.add(label);
}
}
}
}
if (labelsToAdd.size === 0) {
labelsToAdd.add("needs triage");
}
if (labelsToAdd.size > 0) {
await github.rest.issues.addLabels({

4
.github/workflows/changelog-pr.yml generated vendored
View File

@@ -8,7 +8,7 @@ on:
jobs:
update-changelog-pull-request:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
runs-on: ubuntu-latest
env:
CONFIG_PATH: .github/changelog-pr-config.json
BRANCH_NAME: github-action-update-changelog
@@ -80,7 +80,7 @@ jobs:
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] },
{ title: "📡 API", labels: ["api"], notes: [] },
{ title: "Github", labels: ["github"], notes: [] },
{ title: "📝 Documentation", labels: ["documentation"], notes: [] },
{ title: "📝 Documentation", labels: ["maintenance"], notes: [] },
{ title: "🔧 Refactor", labels: ["refactor"], notes: [] }
] :
obj.labels.includes("website") ? [

View File

@@ -12,7 +12,7 @@ permissions:
jobs:
close-discussion:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
runs-on: ubuntu-latest
steps:
- name: Checkout Repository

View File

@@ -13,7 +13,7 @@ permissions:
jobs:
crawl-versions:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
runs-on: ubuntu-latest
steps:
- name: Checkout Repository

View File

@@ -10,7 +10,7 @@ on:
jobs:
delete_branch:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
runs-on: ubuntu-latest
steps:
- name: Checkout the code
uses: actions/checkout@v3

View File

@@ -26,7 +26,7 @@ concurrency:
jobs:
build:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
runs-on: ubuntu-latest
defaults:
run:
working-directory: frontend # Set default working directory for all run steps

View File

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

View File

@@ -11,7 +11,7 @@ on:
jobs:
update-app-files:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set
runs-on: ubuntu-latest
permissions:
contents: write

View File

@@ -11,7 +11,7 @@ jobs:
check-files:
if: github.repository == 'community-scripts/ProxmoxVE'
name: Check changed files
runs-on: runner-cluster-htl-set
runs-on: ubuntu-latest
permissions:
pull-requests: write

View File

@@ -10,8 +10,201 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-07-21
### 🆕 New Scripts
- Teamspeak-Server ([#6121](https://github.com/community-scripts/ProxmoxVE/pull/6121))
### 🚀 Updated Scripts
- pve-post-installer: remove Nag-File if already exist [@luckman212](https://github.com/luckman212) ([#6098](https://github.com/community-scripts/ProxmoxVE/pull/6098))
- #### 🐞 Bug Fixes
- firefly: fix permissions at update [@MickLesk](https://github.com/MickLesk) ([#6119](https://github.com/community-scripts/ProxmoxVE/pull/6119))
- nginxproxymanager: remove injected footer link (tteck) [@MickLesk](https://github.com/MickLesk) ([#6117](https://github.com/community-scripts/ProxmoxVE/pull/6117))
## 2025-07-20
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fix OpenWebUI install/update scripts [@karamanliev](https://github.com/karamanliev) ([#6093](https://github.com/community-scripts/ProxmoxVE/pull/6093))
- #### ✨ New Features
- karakeep: add DB_WAL_MODE; suppress test output [@vhsdream](https://github.com/vhsdream) ([#6101](https://github.com/community-scripts/ProxmoxVE/pull/6101))
## 2025-07-19
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fixed nag script on ProxMox 8.4.5 [@imcrazytwkr](https://github.com/imcrazytwkr) ([#6084](https://github.com/community-scripts/ProxmoxVE/pull/6084))
## 2025-07-18
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- AdventureLog: add backup folder before update [@MickLesk](https://github.com/MickLesk) ([#6066](https://github.com/community-scripts/ProxmoxVE/pull/6066))
- #### ✨ New Features
- Bar-Assistant: add Cocktail database [@MickLesk](https://github.com/MickLesk) ([#6068](https://github.com/community-scripts/ProxmoxVE/pull/6068))
- ErsatzTV: use project prebuild ffmpeg version [@MickLesk](https://github.com/MickLesk) ([#6067](https://github.com/community-scripts/ProxmoxVE/pull/6067))
## 2025-07-17
### 🆕 New Scripts
- Cloudreve ([#6044](https://github.com/community-scripts/ProxmoxVE/pull/6044))
### 🚀 Updated Scripts
- config-file: set GATE [@ahmaddxb](https://github.com/ahmaddxb) ([#6042](https://github.com/community-scripts/ProxmoxVE/pull/6042))
- #### 🐞 Bug Fixes
- add "setup_composer" in update_script (baikal, bar-assistant, firefly) [@MickLesk](https://github.com/MickLesk) ([#6047](https://github.com/community-scripts/ProxmoxVE/pull/6047))
- PLANKA: Fix update procedure [@tremor021](https://github.com/tremor021) ([#6031](https://github.com/community-scripts/ProxmoxVE/pull/6031))
- #### ✨ New Features
- Reactive Resume: switch source to community-maintained fork [@vhsdream](https://github.com/vhsdream) ([#6051](https://github.com/community-scripts/ProxmoxVE/pull/6051))
## 2025-07-16
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- homepage.sh: resolves #6028 [@vhsdream](https://github.com/vhsdream) ([#6032](https://github.com/community-scripts/ProxmoxVE/pull/6032))
- karakeep-install: Disable Playwright browser download, remove MCP build [@vhsdream](https://github.com/vhsdream) ([#5833](https://github.com/community-scripts/ProxmoxVE/pull/5833))
- #### 🔧 Refactor
- chore: reorganize nginxproxymanager update script [@Kirbo](https://github.com/Kirbo) ([#5971](https://github.com/community-scripts/ProxmoxVE/pull/5971))
## 2025-07-15
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- checkmk: change password crawling based on there docs [@MickLesk](https://github.com/MickLesk) ([#6001](https://github.com/community-scripts/ProxmoxVE/pull/6001))
- Whiptail: Improve Dialogue to work with ESC [@MickLesk](https://github.com/MickLesk) ([#6003](https://github.com/community-scripts/ProxmoxVE/pull/6003))
- 2FAuth: Improve Update-Check [@MickLesk](https://github.com/MickLesk) ([#5998](https://github.com/community-scripts/ProxmoxVE/pull/5998))
- #### 💥 Breaking Changes
- EMQX: Purge Old Install (remove acl.conf too!) [@MickLesk](https://github.com/MickLesk) ([#5999](https://github.com/community-scripts/ProxmoxVE/pull/5999))
- #### 🔧 Refactor
- Refactor: PeaNUT [@MickLesk](https://github.com/MickLesk) ([#6002](https://github.com/community-scripts/ProxmoxVE/pull/6002))
## 2025-07-14
### 🆕 New Scripts
- Bar Assistant ([#5977](https://github.com/community-scripts/ProxmoxVE/pull/5977))
- Mealie ([#5968](https://github.com/community-scripts/ProxmoxVE/pull/5968))
### 🚀 Updated Scripts
- Config-File: Some Addons, Bugfixes... [@MickLesk](https://github.com/MickLesk) ([#5978](https://github.com/community-scripts/ProxmoxVE/pull/5978))
- #### 🐞 Bug Fixes
- add --break-system-packages certbot-dns-cloudflare to the nginxproxym… [@tug-benson](https://github.com/tug-benson) ([#5957](https://github.com/community-scripts/ProxmoxVE/pull/5957))
- Dashy: remove unbound variable (RELEASE) [@MickLesk](https://github.com/MickLesk) ([#5974](https://github.com/community-scripts/ProxmoxVE/pull/5974))
### 🌐 Website
- #### 📝 Script Information
- Update nic-offloading-fix: add Intel as search Text [@calvin-li-developer](https://github.com/calvin-li-developer) ([#5954](https://github.com/community-scripts/ProxmoxVE/pull/5954))
## 2025-07-12
## 2025-07-11
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- immich: hotfix #5921 [@vhsdream](https://github.com/vhsdream) ([#5938](https://github.com/community-scripts/ProxmoxVE/pull/5938))
- bookstack: add setup_composer in update [@MickLesk](https://github.com/MickLesk) ([#5935](https://github.com/community-scripts/ProxmoxVE/pull/5935))
- Quickfix: Immich: revert install sequence [@vhsdream](https://github.com/vhsdream) ([#5932](https://github.com/community-scripts/ProxmoxVE/pull/5932))
- #### ✨ New Features
- Refactor & Function Bump: Docker [@MickLesk](https://github.com/MickLesk) ([#5889](https://github.com/community-scripts/ProxmoxVE/pull/5889))
- #### 🔧 Refactor
- Immich: handle custom library dependency updates; other fixes [@vhsdream](https://github.com/vhsdream) ([#5896](https://github.com/community-scripts/ProxmoxVE/pull/5896))
## 2025-07-10
### 🚀 Updated Scripts
- Refactor: Habitica [@MickLesk](https://github.com/MickLesk) ([#5911](https://github.com/community-scripts/ProxmoxVE/pull/5911))
- #### 🐞 Bug Fixes
- core: fix breaking re-download of lxc containers [@MickLesk](https://github.com/MickLesk) ([#5906](https://github.com/community-scripts/ProxmoxVE/pull/5906))
- PLANKA: Fix paths to application directory [@tremor021](https://github.com/tremor021) ([#5900](https://github.com/community-scripts/ProxmoxVE/pull/5900))
- #### 🔧 Refactor
- Refactor: EMQX + Update-Function + Improved NodeJS Crawling [@MickLesk](https://github.com/MickLesk) ([#5907](https://github.com/community-scripts/ProxmoxVE/pull/5907))
## 2025-07-09
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Omada Update: add missing exit [@MickLesk](https://github.com/MickLesk) ([#5894](https://github.com/community-scripts/ProxmoxVE/pull/5894))
- FreshRSS: fix needed php modules [@MickLesk](https://github.com/MickLesk) ([#5886](https://github.com/community-scripts/ProxmoxVE/pull/5886))
- core: Fix VAAPI passthrough for unprivileged LXC containers via devX [@MickLesk](https://github.com/MickLesk) ([#5875](https://github.com/community-scripts/ProxmoxVE/pull/5875))
- tools.func: fix an bug while php libapache2-mod breaks [@MickLesk](https://github.com/MickLesk) ([#5857](https://github.com/community-scripts/ProxmoxVE/pull/5857))
- BabyBuddy: fix path issues for update [@MickLesk](https://github.com/MickLesk) ([#5856](https://github.com/community-scripts/ProxmoxVE/pull/5856))
- #### ✨ New Features
- tools.func: strip leading folders for prebuild assets [@MickLesk](https://github.com/MickLesk) ([#5865](https://github.com/community-scripts/ProxmoxVE/pull/5865))
- #### 💥 Breaking Changes
- Refactor: Stirling-PDF [@MickLesk](https://github.com/MickLesk) ([#5872](https://github.com/community-scripts/ProxmoxVE/pull/5872))
- #### 🔧 Refactor
- Refactor: EMQX [@tremor021](https://github.com/tremor021) ([#5840](https://github.com/community-scripts/ProxmoxVE/pull/5840))
- Refactor: Excalidraw [@tremor021](https://github.com/tremor021) ([#5841](https://github.com/community-scripts/ProxmoxVE/pull/5841))
- Refactor: Firefly [@tremor021](https://github.com/tremor021) ([#5844](https://github.com/community-scripts/ProxmoxVE/pull/5844))
- Refactor: gatus [@tremor021](https://github.com/tremor021) ([#5849](https://github.com/community-scripts/ProxmoxVE/pull/5849))
- Refactor: FreshRSS [@tremor021](https://github.com/tremor021) ([#5847](https://github.com/community-scripts/ProxmoxVE/pull/5847))
- Refactor: Fluid-Calendar [@tremor021](https://github.com/tremor021) ([#5846](https://github.com/community-scripts/ProxmoxVE/pull/5846))
- Refactor: Commafeed [@tremor021](https://github.com/tremor021) ([#5802](https://github.com/community-scripts/ProxmoxVE/pull/5802))
- Refactor: FlareSolverr [@tremor021](https://github.com/tremor021) ([#5845](https://github.com/community-scripts/ProxmoxVE/pull/5845))
- Refactor: Glance [@tremor021](https://github.com/tremor021) ([#5874](https://github.com/community-scripts/ProxmoxVE/pull/5874))
- Refactor: Gitea [@tremor021](https://github.com/tremor021) ([#5876](https://github.com/community-scripts/ProxmoxVE/pull/5876))
- Refactor: Ghost (use now MySQL) [@MickLesk](https://github.com/MickLesk) ([#5871](https://github.com/community-scripts/ProxmoxVE/pull/5871))
### 🧰 Maintenance
- #### 📂 Github
- Github: AutoLabler | ChangeLog (Refactor) [@MickLesk](https://github.com/MickLesk) ([#5868](https://github.com/community-scripts/ProxmoxVE/pull/5868))
## 2025-07-08
### 🚀 Updated Scripts

View File

@@ -28,8 +28,11 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null || cat /opt/2fauth_version.txt 2>/dev/null)" ]]; then
if ! command -v jq &>/dev/null; then
$STD apt-get install -y jq
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | jq -r '.tag_name' | sed 's/^v//')
if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null)" ]] || [[ ! -f ~/.2fauth ]]; then
msg_info "Updating $APP to ${RELEASE}"
$STD apt-get update
$STD apt-get -y upgrade
@@ -45,10 +48,11 @@ function update_script() {
$STD apt-get install -y \
lsb-release \
gnupg2
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
fi
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
setup_composer
mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
cd "/opt/2fauth" || return

View File

@@ -35,26 +35,29 @@ function update_script() {
systemctl stop adventurelog-frontend
msg_ok "Services Stopped"
msg_info "Backup Old Installation"
mkdir -p /opt/adventurelog-backup
cp /opt/adventurelog/backend/server/.env /opt/adventurelog-backup/backend/server/.env
cp -r /opt/adventurelog/backend/server/media /opt/adventurelog-backup/backend/server/media
cp /opt/adventurelog/frontend/.env /opt/adventurelog-backup/frontend/.env
msg_ok "Backup done"
fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog"
PYTHON_VERSION="3.12" setup_uv
msg_info "Updating ${APP} to v${RELEASE}"
# Backend Migration
cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
cd /opt/adventurelog/backend/server
if [[ ! -x .venv/bin/python ]]; then
$STD uv venv .venv
$STD .venv/bin/python -m ensurepip --upgrade
fi
$STD .venv/bin/python -m pip install --upgrade pip
$STD .venv/bin/python -m pip install -r requirements.txt
$STD .venv/bin/python -m manage collectstatic --noinput
$STD .venv/bin/python -m manage migrate
# Frontend Migration
cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
cd /opt/adventurelog/frontend
$STD pnpm i
@@ -68,7 +71,6 @@ function update_script() {
msg_ok "Services Started"
msg_info "Cleaning Up"
rm -rf /opt/v${RELEASE}.zip
rm -rf /opt/adventurelog-backup
msg_ok "Cleaned"

View File

@@ -38,7 +38,7 @@ function update_script() {
msg_ok "Services Stopped"
msg_info "Cleaning old files"
cp babybuddy/settings/production.py /tmp/production.py.bak
cp /opt/babybuddy/babybuddy/settings/production.py /tmp/production.py.bak
find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} +
msg_ok "Cleaned old files"
@@ -46,7 +46,7 @@ function update_script() {
msg_info "Updating ${APP} to v${RELEASE}"
cd /opt/babybuddy
mv /tmp/production.py.bak babybuddy/settings/production.py
mv /tmp/production.py.bak /opt/babybuddy/babybuddy/settings/production.py
source .venv/bin/activate
$STD uv pip install -r requirements.txt
$STD python manage.py migrate

View File

@@ -39,12 +39,15 @@ function update_script() {
msg_ok "Backed up data"
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
setup_composer
msg_info "Configuring Baikal"
cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/
cp -r /opt/baikal-backup/Specific/ /opt/baikal/
chown -R www-data:www-data /opt/baikal/
chmod -R 755 /opt/baikal/
cd /opt/baikal
$STD composer install
msg_ok "Configured Baikal"
msg_info "Starting Service"

129
ct/bar-assistant.sh Normal file
View File

@@ -0,0 +1,129 @@
#!/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: bvdberg01 | CanbiZ
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/karlomikus/bar-assistant
# Source: https://github.com/karlomikus/vue-salt-rim
# Source: https://www.meilisearch.com/
APP="Bar-Assistant"
var_tags="${var_tags:-cocktails;drinks}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
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/bar-assistant ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE_MEILISEARCH=$(curl -fsSL https://api.github.com/repos/meilisearch/meilisearch/releases/latest | jq -r '.tag_name | sub("^v"; "")')
RELEASE_BARASSISTANT=$(curl -fsSL https://api.github.com/repos/karlomikus/bar-assistant/releases/latest | jq -r '.tag_name | sub("^v"; "")')
RELEASE_SALTRIM=$(curl -fsSL https://api.github.com/repos/karlomikus/vue-salt-rim/releases/latest | jq -r '.tag_name | sub("^v"; "")')
if [[ "${RELEASE_BARASSISTANT}" != "$(cat ~/.bar-assistant 2>/dev/null)" ]] || [[ ! -f ~/.bar-assistant ]]; then
msg_info "Stopping nginx"
systemctl stop nginx
msg_ok "Stopped nginx"
msg_info "Backing up Bar Assistant"
mv /opt/bar-assistant /opt/bar-assistant-backup
msg_ok "Backed up Bar Assistant"
fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant"
setup_composer
msg_info "Updating ${APP} to ${RELEASE_BARASSISTANT}"
cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.env
cp -r /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant
cd /opt/bar-assistant
$STD composer install --no-interaction
$STD php artisan migrate --force
$STD php artisan storage:link
$STD php artisan bar:setup-meilisearch
$STD php artisan scout:sync-index-settings
$STD php artisan config:cache
$STD php artisan route:cache
$STD php artisan event:cache
chown -R www-data:www-data /opt/bar-assistant
msg_ok "Updated $APP to ${RELEASE_BARASSISTANT}"
msg_info "Starting nginx"
systemctl start nginx
msg_ok "Started nginx"
msg_info "Cleaning up"
rm -rf /opt/bar-assistant-backup
msg_ok "Cleaned"
else
msg_ok "No update required. ${APP} is already at ${RELEASE_BARASSISTANT}"
fi
if [[ "${RELEASE_SALTRIM}" != "$(cat ~/.vue-salt-rim 2>/dev/null)" ]] || [[ ! -f ~/.vue-salt-rim ]]; then
msg_info "Backing up Vue Salt Rim"
mv /opt/vue-salt-rim /opt/vue-salt-rim-backup
msg_ok "Backed up Vue Salt Rim"
msg_info "Stopping nginx"
systemctl stop nginx
msg_ok "Stopped nginx"
fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim"
msg_info "Updating Salt Rim to ${RELEASE_SALTRIM}"
cp /opt/vue-salt-rim-backup/public/config.js /opt/vue-salt-rim/public/config.js
cd /opt/vue-salt-rim
$STD npm install
$STD npm run build
msg_ok "Updated $APP to ${RELEASE_SALTRIM}"
msg_info "Starting nginx"
systemctl start nginx
msg_ok "Started nginx"
msg_info "Cleaning up"
rm -rf /opt/vue-salt-rim-backup
msg_ok "Cleaned"
msg_ok "Updated"
else
msg_ok "No update required. Salt Rim is already at ${RELEASE_SALTRIM}"
fi
if [[ "${RELEASE_MEILISEARCH}" != "$(cat ~/.meilisearch 2>/dev/null)" ]] || [[ ! -f ~/.meilisearch ]]; then
msg_info "Stopping Meilisearch"
systemctl stop meilisearch
msg_ok "Stopped Meilisearch"
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
msg_info "Starting Meilisearch"
systemctl start meilisearch
msg_ok "Started Meilisearch"
msg_ok "Updated Meilisearch"
else
msg_ok "No update required. Meilisearch is already at ${RELEASE_MEILISEARCH}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@@ -40,6 +40,7 @@ function update_script() {
fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack"
PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php
setup_composer
msg_info "Restoring backup"
cp /opt/bookstack-backup/.env /opt/bookstack/.env

58
ct/cloudreve.sh Normal file
View File

@@ -0,0 +1,58 @@
#!/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: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://cloudreve.org/
APP="Cloudreve"
var_tags="${var_tags:-cloud}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
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/cloudreve ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/cloudreve/cloudreve/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat ~/.cloudreve 2>/dev/null)" ]] || [[ ! -f ~/.cloudreve ]]; then
msg_info "Stopping $APP"
systemctl stop cloudreve
msg_ok "Stopped $APP"
fetch_and_deploy_gh_release "cloudreve" "cloudreve/cloudreve" "prebuild" "latest" "/opt/cloudreve" "*linux_amd64.tar.gz"
msg_info "Starting $APP"
systemctl start cloudreve
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}:5212${CL}"

View File

@@ -23,12 +23,13 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/commafeed ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
if [[ "${RELEASE}" != "$(cat ~/.commafeed 2>/dev/null)" ]] || [[ ! -f ~/.commafeed ]]; then
msg_info "Stopping ${APP}"
systemctl stop commafeed
msg_ok "Stopped ${APP}"
@@ -39,13 +40,15 @@ function update_script() {
$STD apt-get install -y rsync
msg_ok "Installed Dependencies"
fi
if [ -d /opt/commafeed/data ] && [ "$(ls -A /opt/commafeed/data)" ]; then
mv /opt/commafeed/data /opt/data.bak
fi
fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip"
msg_info "Updating ${APP} to ${RELEASE}"
curl -fsSL "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip" -o $(basename "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip")
$STD unzip commafeed-"${RELEASE}"-h2-jvm.zip
rsync -a --exclude 'data/' commafeed-"${RELEASE}"-h2/ /opt/commafeed/
rm -rf commafeed-"${RELEASE}"-h2 commafeed-"${RELEASE}"-h2-jvm.zip
echo "${RELEASE}" >/opt/${APP}_version.txt
if [ -d /opt/commafeed/data.bak ] && [ "$(ls -A /opt/commafeed/data.bak)" ]; then
mv /opt/commafeed/data.bak /opt/commafeed/data
fi
msg_ok "Updated ${APP} to ${RELEASE}"
msg_info "Starting ${APP}"

View File

@@ -23,14 +23,64 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ${APP} LXC"
get_latest_release() {
curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4
}
msg_info "Updating base system"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC"
msg_ok "Base system updated"
msg_info "Updating Docker Engine"
$STD apt-get install --only-upgrade -y docker-ce docker-ce-cli containerd.io
msg_ok "Docker Engine updated"
if [[ -f /usr/local/lib/docker/cli-plugins/docker-compose ]]; then
COMPOSE_BIN="/usr/local/lib/docker/cli-plugins/docker-compose"
COMPOSE_NEW_VERSION=$(get_latest_release "docker/compose")
msg_info "Updating Docker Compose to $COMPOSE_NEW_VERSION"
curl -fsSL "https://github.com/docker/compose/releases/download/${COMPOSE_NEW_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
-o "$COMPOSE_BIN"
chmod +x "$COMPOSE_BIN"
msg_ok "Docker Compose updated"
fi
if docker ps -a --format '{{.Names}}' | grep -q '^portainer$'; then
msg_info "Updating Portainer"
$STD docker pull portainer/portainer-ce:latest
$STD docker stop portainer && docker rm portainer
$STD docker volume create portainer_data >/dev/null 2>&1
$STD docker run -d \
-p 8000:8000 \
-p 9443:9443 \
--name=portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
msg_ok "Updated Portainer"
fi
if docker ps -a --format '{{.Names}}' | grep -q '^portainer_agent$'; then
msg_info "Updating Portainer Agent"
$STD docker pull portainer/agent:latest
$STD docker stop portainer_agent && docker rm portainer_agent
$STD docker run -d \
-p 9001:9001 \
--name=portainer_agent \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
portainer/agent
msg_ok "Updated Portainer Agent"
fi
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleanup complete"
exit
}

View File

@@ -23,14 +23,39 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!"
exit
RELEASE=$(curl -fsSL https://www.emqx.com/en/downloads/enterprise | grep -oP '/en/downloads/enterprise/v\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n1)
if [[ "$RELEASE" != "$(cat ~/.emqx 2>/dev/null)" ]] || [[ ! -f ~/.emqx ]]; then
msg_info "Stopping EMQX"
systemctl stop emqx
msg_ok "Stopped EMQX"
msg_info "Removing old EMQX"
$STD apt-get remove --purge -y emqx
msg_ok "Removed old EMQX"
msg_info "Downloading EMQX v${RELEASE}"
DEB_FILE="/tmp/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
curl -fsSL -o "$DEB_FILE" "https://www.emqx.com/en/downloads/enterprise/v${RELEASE}/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
msg_ok "Downloaded EMQX"
msg_info "Installing EMQX"
$STD apt-get install -y "$DEB_FILE"
msg_ok "Installed EMQX v${RELEASE}"
msg_info "Starting EMQX"
systemctl start emqx
echo "$RELEASE" >~/.emqx
msg_ok "Started EMQX"
msg_info "Cleaning Up"
rm -f "$DEB_FILE"
msg_ok "Cleanup Completed"
msg_ok "Update Successful"
else
msg_ok "No update required. EMQX is already at v${RELEASE}"
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
exit
}

View File

@@ -26,13 +26,14 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\Kv\K[^"]+' | head -n1)
RELEASE_FFMPEG=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV-ffmpeg/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
if [[ "${RELEASE}" != "$(cat ~/.ersatztv 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv ]]; then
msg_info "Stopping ErsatzTV"
systemctl stop ersatzTV
msg_ok "Stopped ErsatzTV"
FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
msg_info "Starting ErsatzTV"
@@ -43,6 +44,29 @@ function update_script() {
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
if [[ "${RELEASE_FFMPEG}" != "$(cat ~/.ersatztv-ffmpeg 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv-ffmpeg ]]; then
msg_info "Stopping ErsatzTV"
systemctl stop ersatzTV
msg_ok "Stopped ErsatzTV"
fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
msg_info "Set ErsatzTV-ffmpeg links"
chmod +x /opt/ErsatzTV-ffmpeg/bin/*
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffplay /usr/local/bin/ffplay
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe
msg_ok "ffmpeg links set"
msg_info "Starting ErsatzTV"
systemctl start ersatzTV
msg_ok "Started ErsatzTV"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ErsatzTV-ffmpeg is already at ${RELEASE_FFMPEG}"
fi
exit
}

View File

@@ -28,20 +28,16 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/excalidraw_version.txt)" ]] || [[ ! -f /opt/excalidraw_version.txt ]]; then
if [[ "${RELEASE}" != "$(cat ~/.excalidraw 2>/dev/null)" ]] || [[ ! -f ~/.excalidraw ]]; then
msg_info "Stopping $APP"
systemctl stop excalidraw
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
cd /tmp
temp_file=$(mktemp)
curl -fsSL "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar xzf $temp_file
rm -rf /opt/excalidraw
mv excalidraw-${RELEASE} /opt/excalidraw
fetch_and_deploy_gh_release "excalidraw" "excalidraw/excalidraw"
msg_info "Updating $APP to v${RELEASE}"
cd /opt/excalidraw
$STD yarn
msg_ok "Updated $APP to v${RELEASE}"
@@ -50,11 +46,6 @@ function update_script() {
systemctl start excalidraw
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -rf $temp_file
msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/excalidraw_version.txt
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"

View File

@@ -29,37 +29,41 @@ function update_script() {
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/firefly-iii/firefly-iii/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
if [[ "${RELEASE}" != "$(cat ~/.firefly 2>/dev/null)" ]] || [[ ! -f ~/.firefly ]]; then
msg_info "Stopping Apache2"
systemctl stop apache2
msg_ok "Stopped Apache2"
msg_info "Updating ${APP} to v${RELEASE}"
msg_info "Backing up data"
cp /opt/firefly/.env /opt/.env
cp -r /opt/firefly/storage /opt/storage
cd /opt
curl -fsSL "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz" -o $(basename "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz")
tar -xzf FireflyIII-v${RELEASE}.tar.gz -C /opt/firefly --exclude='storage'
msg_ok "Backed up data"
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
setup_composer
msg_info "Updating ${APP} to v${RELEASE}"
rm -rf /opt/firefly/storage
cp /opt/.env /opt/firefly/.env
cp -r /opt/storage /opt/firefly/storage
cd /opt/firefly
chown -R www-data:www-data /opt/firefly
chmod -R 775 /opt/firefly/storage
find /opt/firefly/storage -type d -exec chmod 775 {} \;
find /opt/firefly/storage -type f -exec chmod 664 {} \;
mkdir -p /opt/firefly/storage/framework/{cache/data,sessions,views}
$STD sudo -u www-data php /opt/firefly/artisan cache:clear
$STD php artisan migrate --seed --force
$STD php artisan cache:clear
$STD php artisan view:clear
$STD php artisan firefly-iii:upgrade-database
$STD php artisan firefly-iii:laravel-passport-keys
echo "${RELEASE}" >"/opt/${APP}_version.txt"
msg_ok "Updated ${APP} to v${RELEASE}"
msg_info "Starting Apache2"
systemctl start apache2
msg_ok "Started Apache2"
msg_info "Cleaning up"
rm -rf /opt/FireflyIII-v${RELEASE}.tar.gz
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}."

View File

@@ -23,20 +23,23 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /etc/systemd/system/flaresolverr.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://github.com/FlareSolverr/FlareSolverr/releases/latest | grep "title>Release" | cut -d " " -f 4)
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Updating $APP LXC"
RELEASE=$(curl -fsSL https://api.github.com/repos/FlareSolverr/FlareSolverr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
if [[ "${RELEASE}" != "$(cat ~/.flaresolverr 2>/dev/null)" ]] || [[ ! -f ~/.flaresolverr ]]; then
msg_info "Stopping service"
systemctl stop flaresolverr
curl -fsSL "https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz" -o $(basename "https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz")
tar -xzf flaresolverr_linux_x64.tar.gz -C /opt
rm flaresolverr_linux_x64.tar.gz
msg_ok "Stopped service"
rm -rf /opt/flaresolverr
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
msg_info "Starting service"
systemctl start flaresolverr
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP LXC"
msg_ok "Started service"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi

View File

@@ -28,20 +28,17 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/dotnetfactory/fluid-calendar/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
if [[ "${RELEASE}" != "$(cat ~/.fluid-calendar 2>/dev/null)" ]] || [[ ! -f ~/.fluid-calendar ]]; then
msg_info "Stopping $APP"
systemctl stop fluid-calendar.service
systemctl stop fluid-calendar
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
cp /opt/fluid-calendar/.env /opt/fluid.env
rm -rf /opt/fluid-calendar
tmp_file=$(mktemp)
curl -fsSL "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -o "$tmp_file"
$STD unzip $tmp_file
mv ${APP}-${RELEASE}/ /opt/fluid-calendar
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar"
msg_info "Updating $APP to v${RELEASE}"
mv /opt/fluid.env /opt/fluid-calendar/.env
cd /opt/fluid-calendar
export NEXT_TELEMETRY_DISABLED=1
@@ -52,14 +49,9 @@ function update_script() {
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start fluid-calendar.service
systemctl start fluid-calendar
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -rf $tmp_file
msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"

View File

@@ -29,35 +29,29 @@ function update_script() {
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
if [[ "${RELEASE}" != "$(cat ~/.gatus 2>/dev/null)" ]] || [[ ! -f ~/.gatus ]]; 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
rm -rf /opt/gatus
fetch_and_deploy_gh_release "gatus" "TwiN/gatus"
msg_info "Updating $APP to v${RELEASE}"
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}"

View File

@@ -23,8 +23,13 @@ function update_script() {
header_info
check_container_storage
check_container_resources
msg_info "Updating ${APP} LXC"
if ! dpkg-query -W -f='${Status}' mariadb-server 2>/dev/null | grep -q "install ok installed"; then
setup_mysql
fi
NODE_VERSION="22" setup_nodejs
msg_info "Updating ${APP} LXC"
if command -v ghost &>/dev/null; then
current_version=$(ghost version | grep 'Ghost-CLI version' | awk '{print $3}')
latest_version=$(npm show ghost-cli version)

View File

@@ -23,20 +23,29 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/local/bin/gitea ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//')
msg_info "Updating $APP to ${RELEASE}"
FILENAME="gitea-$RELEASE-linux-amd64"
curl -fsSL "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64" -o $FILENAME
if [[ "${RELEASE}" != "$(cat ~/.gitea 2>/dev/null)" ]] || [[ ! -f ~/.gitea ]]; then
msg_info "Stopping service"
systemctl stop gitea
msg_ok "Service stopped"
rm -rf /usr/local/bin/gitea
mv $FILENAME /usr/local/bin/gitea
fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-amd64"
chmod +x /usr/local/bin/gitea
msg_info "Starting service"
systemctl start gitea
msg_ok "Updated $APP Successfully"
msg_ok "Started service"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

View File

@@ -28,28 +28,19 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/glanceapp/glance/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
if [[ "${RELEASE}" != "$(cat ~/.glance 2>/dev/null)" ]] || [[ ! -f ~/.glance ]]; then
msg_info "Stopping Service"
systemctl stop glance
msg_ok "Stopped Service"
msg_info "Updating ${APP} to v${RELEASE}"
cd /opt
curl -fsSL "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz" -o $(basename "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz")
rm -rf /opt/glance/glance
tar -xzf glance-linux-amd64.tar.gz -C /opt/glance
echo "${RELEASE}" >"/opt/${APP}_version.txt"
msg_ok "Updated ${APP} to v${RELEASE}"
rm -f /opt/glance/glance
fetch_and_deploy_gh_release "glance" "glanceapp/glance" "prebuild" "latest" "/opt/glance" "glance-linux-amd64.tar.gz"
msg_info "Starting Service"
systemctl start glance
msg_ok "Started Service"
msg_info "Cleaning up"
rm -rf /opt/glance-linux-amd64.tar.gz
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}."

View File

@@ -28,35 +28,48 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha" setup_nodejs
RELEASE=$(curl -fsSL https://api.github.com/repos/HabitRPG/habitica/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
if [[ "${RELEASE}" != "$(cat ~/.habitica 2>/dev/null)" ]] || [[ ! -f ~/.habitica ]]; then
msg_info "Stopping $APP"
systemctl stop habitica-mongodb
systemctl stop habitica
systemctl stop habitica-client
msg_ok "Stopped $APP"
msg_info "Save configuration"
if [[ -f /opt/habitica/config.json ]]; then
cp /opt/habitica/config.json ~/config.json
msg_ok "Saved configuration"
else
msg_warn "No configuration file found, skipping save"
fi
fetch_and_deploy_gh_release "habitica" "HabitRPG/habitica" "tarball" "latest" "/opt/habitica"
msg_info "Updating $APP to ${RELEASE}"
temp_file=$(mktemp)
curl -fsSL "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf $temp_file
cp -rf habitica-${RELEASE}/* /opt/habitica
cd /opt/habitica
$STD npm i
echo "${RELEASE}" >/opt/${APP}_version.txt
$STD npm run postinstall
$STD npm run client:build
$STD gulp build:prod
msg_ok "Updated $APP to ${RELEASE}"
msg_info "Restoring configuration"
if [[ -f ~/config.json ]]; then
cp ~/config.json /opt/habitica/config.json
msg_ok "Restored configuration"
else
msg_warn "No configuration file found to restore"
fi
msg_info "Starting $APP"
systemctl start habitica-mongodb
systemctl start habitica
systemctl start habitica-client
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -f $temp_file
rm -rf ~/habitica-${RELEASE}
msg_ok "Cleanup Completed"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
@@ -71,4 +84,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}:3000${CL}"

6
ct/headers/bar-assistant Normal file
View File

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

6
ct/headers/cloudreve Normal file
View File

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

6
ct/headers/mealie Normal file
View File

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

View File

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

View File

@@ -56,7 +56,7 @@ function update_script() {
rm -rf homepage-${RELEASE}
cd /opt/homepage
$STD pnpm install
$STD npx --yes update-browserslist-db@latest
$STD pnpm update --no-save caniuse-lite
export NEXT_PUBLIC_VERSION="v$RELEASE"
export NEXT_PUBLIC_REVISION="source"
export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at')

View File

@@ -51,134 +51,12 @@ function update_script() {
fi
if [[ -f ~/.immich_library_revisions ]]; then
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
readarray -d '' NEW_REVISIONS < <(for library in "${libraries[@]}"; do
echo "$library: $(curl -fsSL https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/sources/"$library".json | jq -cr '.revision' -)"
done)
UPDATED_REVISIONS="$(comm -13 <(sort ~/.immich_library_revisions) <(echo -n "${NEW_REVISIONS[@]}" | sort))"
if [[ "$UPDATED_REVISIONS" ]]; then
readarray -t NAMES < <(echo "$UPDATED_REVISIONS" | awk -F ':' '{print $1}')
rm -rf "$SOURCE_DIR"
mkdir -p "$SOURCE_DIR"
cd "$BASE_DIR"
$STD git pull
cd "$STAGING_DIR"
for name in "${NAMES[@]}"; do
if [[ "$name" == "libjxl" ]]; then
msg_info "Recompiling libjxl"
SOURCE=${SOURCE_DIR}/libjxl
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
: "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}"
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBJXL_REVISION"
$STD git submodule update --init --recursive --depth 1 --recommend-shallow
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch
mkdir build
cd build
$STD cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF \
-DJPEGXL_ENABLE_DOXYGEN=OFF \
-DJPEGXL_ENABLE_MANPAGES=OFF \
-DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \
-DJPEGXL_ENABLE_BENCHMARK=OFF \
-DJPEGXL_ENABLE_EXAMPLES=OFF \
-DJPEGXL_FORCE_SYSTEM_BROTLI=ON \
-DJPEGXL_FORCE_SYSTEM_HWY=ON \
-DJPEGXL_ENABLE_JPEGLI=ON \
-DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \
-DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \
-DJPEGXL_ENABLE_PLUGINS=ON \
-DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \
-DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \
-DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \
..
$STD cmake --build . -- -j"$(nproc)"
$STD cmake --install .
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
rm -rf "$SOURCE"/{build,third_party}
msg_ok "Recompiled libjxl"
fi
if [[ "$name" == "libheif" ]]; then
msg_info "Recompiling libheif"
SOURCE=${SOURCE_DIR}/libheif
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBHEIF_REVISION"
mkdir build
cd build
$STD cmake --preset=release-noplugins \
-DWITH_DAV1D=ON \
-DENABLE_PARALLEL_TILE_DECODING=ON \
-DWITH_LIBSHARPYUV=ON \
-DWITH_LIBDE265=ON \
-DWITH_AOM_DECODER=OFF \
-DWITH_AOM_ENCODER=OFF \
-DWITH_X265=OFF \
-DWITH_EXAMPLES=OFF \
..
$STD make install -j "$(nproc)"
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
rm -rf "$SOURCE"/build
msg_ok "Recompiled libheif"
fi
if [[ "$name" == "libraw" ]]; then
msg_info "Recompiling libraw"
SOURCE=${SOURCE_DIR}/libraw
: "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBRAW_REVISION"
$STD autoreconf --install
$STD ./configure
$STD make -j"$(nproc)"
$STD make install
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
msg_ok "Recompiled libraw"
fi
if [[ "$name" == "imagemagick" ]]; then
msg_info "Recompiling ImageMagick"
SOURCE=$SOURCE_DIR/imagemagick
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}"
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$IMAGEMAGICK_REVISION"
$STD ./configure --with-modules
$STD make -j"$(nproc)"
$STD make install
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
msg_ok "Recompiled ImageMagick"
fi
if [[ "$name" == "libvips" ]]; then
msg_info "Recompiling libvips"
SOURCE=$SOURCE_DIR/libvips
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBVIPS_REVISION"
$STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled
cd build
$STD ninja install
ldconfig /usr/local/lib
cd "$STAGING_DIR"
rm -rf "$SOURCE"/build
msg_ok "Recompiled libvips"
fi
for library in "${libraries[@]}"; do
compile_"$library"
done
echo -n "${NEW_REVISIONS[@]}" >~/.immich_library_revisions
msg_ok "Image-processing libraries compiled"
fi
msg_ok "Image-processing libraries updated"
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
@@ -245,6 +123,10 @@ function update_script() {
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
cp -a web/build "$APP_DIR"/www
cp LICENSE "$APP_DIR"
cd "$APP_DIR"
export SHARP_FORCE_GLOBAL_LIBVIPS=true
$STD npm install sharp
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
msg_ok "Updated ${APP} web and microservices"
cd "$SRC_DIR"/machine-learning
@@ -276,8 +158,6 @@ function update_script() {
ln -s "$GEO_DIR" "$APP_DIR"
msg_info "Updating Immich CLI"
$STD npm install --build-from-source sharp
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
$STD npm i -g @immich/cli
msg_ok "Updated Immich CLI"
@@ -293,6 +173,144 @@ function update_script() {
exit
}
function compile_libjxl() {
SOURCE=${SOURCE_DIR}/libjxl
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
: "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}"
if [[ "${update:-}" ]] || [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling libjxl"
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBJXL_REVISION"
$STD git submodule update --init --recursive --depth 1 --recommend-shallow
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch
mkdir build
cd build
$STD cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF \
-DJPEGXL_ENABLE_DOXYGEN=OFF \
-DJPEGXL_ENABLE_MANPAGES=OFF \
-DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \
-DJPEGXL_ENABLE_BENCHMARK=OFF \
-DJPEGXL_ENABLE_EXAMPLES=OFF \
-DJPEGXL_FORCE_SYSTEM_BROTLI=ON \
-DJPEGXL_FORCE_SYSTEM_HWY=ON \
-DJPEGXL_ENABLE_JPEGLI=ON \
-DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \
-DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \
-DJPEGXL_ENABLE_PLUGINS=ON \
-DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \
-DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \
-DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \
..
$STD cmake --build . -- -j"$(nproc)"
$STD cmake --install .
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
rm -rf "$SOURCE"/{build,third_party}
msg_ok "Recompiled libjxl"
fi
}
function compile_libheif() {
SOURCE=${SOURCE_DIR}/libheif
if ! dpkg -l | grep -q libaom; then
$STD apt-get install -y libaom-dev
local update="required"
fi
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling libheif"
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBHEIF_REVISION"
mkdir build
cd build
$STD cmake --preset=release-noplugins \
-DWITH_DAV1D=ON \
-DENABLE_PARALLEL_TILE_DECODING=ON \
-DWITH_LIBSHARPYUV=ON \
-DWITH_LIBDE265=ON \
-DWITH_AOM_DECODER=OFF \
-DWITH_AOM_ENCODER=ON \
-DWITH_X265=OFF \
-DWITH_EXAMPLES=OFF \
..
$STD make install -j "$(nproc)"
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
rm -rf "$SOURCE"/build
msg_ok "Recompiled libheif"
fi
}
function compile_libraw() {
SOURCE=${SOURCE_DIR}/libraw
local update
: "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}"
if [[ "${update:-}" ]] || [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling libraw"
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBRAW_REVISION"
$STD autoreconf --install
$STD ./configure
$STD make -j"$(nproc)"
$STD make install
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
msg_ok "Recompiled libraw"
fi
}
function compile_imagemagick() {
SOURCE=$SOURCE_DIR/imagemagick
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/imagemagick.json)}"
if [[ "${update:-}" ]] || [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling ImageMagick"
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$IMAGEMAGICK_REVISION"
$STD ./configure --with-modules
$STD make -j"$(nproc)"
$STD make install
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
msg_ok "Recompiled ImageMagick"
fi
}
function compile_libvips() {
SOURCE=$SOURCE_DIR/libvips
# : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
: "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
if [[ "${update:-}" ]] || [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling libvips"
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBVIPS_REVISION"
$STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled
cd build
$STD ninja install
ldconfig /usr/local/lib
cd "$STAGING_DIR"
rm -rf "$SOURCE"/build
msg_ok "Recompiled libvips"
fi
}
start
build_container
description

View File

@@ -27,31 +27,43 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
PREV_RELEASE=$(cat /opt/${APP}_version.txt)
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "${PREV_RELEASE}" ]]; then
if [[ -f ~/.karakeep && "$RELEASE" == "$(cat ~/.karakeep)" ]]; then
msg_ok "No update required. ${APP} is already at ${RELEASE}"
exit
fi
msg_info "Stopping Services"
systemctl stop karakeep-web karakeep-workers karakeep-browser
msg_ok "Stopped Services"
msg_info "Updating yt-dlp"
$STD yt-dlp --update-to nightly
msg_ok "Updated yt-dlp"
msg_info "Updating ${APP} to v${RELEASE}"
if [[ $(corepack -v) < "0.31.0" ]]; then
$STD npm install -g corepack@0.31.0
fi
if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
msg_info "Prepare update"
if [[ -f /opt/${APP}_version.txt && "$(cat /opt/${APP}_version.txt)" < "0.23.0" ]]; then
$STD apt-get install -y graphicsmagick ghostscript
fi
cd /opt
if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
mkdir -p /etc/karakeep
mv /opt/karakeep/.env /etc/karakeep/karakeep.env
fi
rm -rf /opt/karakeep
curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
$STD unzip "v${RELEASE}.zip"
mv karakeep-"${RELEASE}" /opt/karakeep
msg_ok "Update prepared"
fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep"
if command -v corepack >/dev/null; then
$STD corepack disable
fi
MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
msg_info "Updating ${APP} to v${RELEASE}"
export PUPPETEER_SKIP_DOWNLOAD="true"
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
export NEXT_TELEMETRY_DISABLED=1
export CI="true"
cd /opt/karakeep/apps/web
$STD pnpm install --frozen-lockfile
$STD pnpm build
@@ -60,26 +72,22 @@ function update_script() {
cd /opt/karakeep/apps/cli
$STD pnpm install --frozen-lockfile
$STD pnpm build
cd /opt/karakeep/apps/mcp
$STD pnpm install --frozen-lockfile
$STD pnpm build
export DATA_DIR=/opt/karakeep_data
cd /opt/karakeep/packages/db
$STD pnpm migrate
sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env
$STD pnpm store prune
sed -i "s/^SERVER_VERSION=.*$/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env
msg_ok "Updated ${APP} to v${RELEASE}"
msg_info "Starting Services"
systemctl start karakeep-browser karakeep-workers karakeep-web
msg_ok "Started Services"
msg_info "Cleaning up"
rm -R /opt/v"${RELEASE}".zip
echo "${RELEASE}" >/opt/${APP}_version.txt
$STD apt-get autoremove -y
$STD apt-get autoclean -y
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}."
fi
exit
}

97
ct/mealie.sh Normal file
View File

@@ -0,0 +1,97 @@
#!/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://mealie.io
APP="Mealie"
var_tags="${var_tags:-recipes}"
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/mealie ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/mealie-recipes/mealie/releases/latest | jq -r '.tag_name | sub("^v"; "")')
if [[ "${RELEASE}" != "$(cat ~/.mealie 2>/dev/null)" ]] || [[ ! -f ~/.mealie ]]; then
PYTHON_VERSION="3.12" setup_uv
NODE_MODULE="yarn" NODE_VERSION="20" setup_nodejs
msg_info "Stopping $APP"
systemctl stop mealie
msg_ok "Stopped $APP"
msg_info "Backing up .env and start.sh"
cp -f /opt/mealie/mealie.env /opt/mealie/mealie.env.bak
cp -f /opt/mealie/start.sh /opt/mealie/start.sh.bak
msg_ok "Backup completed"
fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
msg_info "Rebuilding Frontend"
export NUXT_TELEMETRY_DISABLED=1
cd /opt/mealie/frontend
$STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
$STD yarn generate
cp -r /opt/mealie/frontend/dist /opt/mealie/mealie/frontend
msg_ok "Frontend rebuilt"
msg_info "Rebuilding Backend Environment"
cd /opt/mealie
$STD /opt/mealie/.venv/bin/poetry self add "poetry-plugin-export>=1.9"
MEALIE_VERSION=$(/opt/mealie/.venv/bin/poetry version --short)
$STD /opt/mealie/.venv/bin/poetry build --output dist
$STD /opt/mealie/.venv/bin/poetry export --only=main --extras=pgsql --output=dist/requirements.txt
echo "mealie[pgsql]==$MEALIE_VERSION \\" >>dist/requirements.txt
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.whl | tail -n1 | tr -d '\n' >>dist/requirements.txt
echo " \\" >>dist/requirements.txt
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.tar.gz | tail -n1 >>dist/requirements.txt
msg_ok "Backend prepared"
msg_info "Finalize Installation"
$STD /opt/mealie/.venv/bin/uv pip install --require-hashes -r /opt/mealie/dist/requirements.txt --find-links dist
msg_ok "Mealie installed"
msg_info "Restoring Configuration"
mv -f /opt/mealie/mealie.env.bak /opt/mealie/mealie.env
mv -f /opt/mealie/start.sh.bak /opt/mealie/start.sh
chmod +x /opt/mealie/start.sh
msg_ok "Configuration restored"
msg_info "Starting $APP"
systemctl start mealie
msg_ok "Started $APP"
msg_ok "Update to $RELEASE 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}:9000${CL}"

View File

@@ -27,15 +27,32 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if ! command -v pnpm &>/dev/null; then
msg_info "Installing pnpm"
#export NODE_OPTIONS=--openssl-legacy-provider
$STD npm install -g pnpm@8.15
msg_ok "Installed pnpm"
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
grep "tag_name" |
awk '{print substr($2, 3, length($2)-4) }')
msg_info "Downloading NPM v${RELEASE}"
curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
cd nginx-proxy-manager-"${RELEASE}" || exit
msg_ok "Downloaded NPM v${RELEASE}"
msg_info "Building Frontend"
(
cd ./frontend || exit
$STD pnpm install
$STD pnpm upgrade
$STD pnpm run build
)
msg_ok "Built Frontend"
msg_info "Stopping Services"
systemctl stop openresty
systemctl stop npm
@@ -50,12 +67,7 @@ function update_script() {
"$STD" /var/cache/nginx
msg_ok "Cleaned Old Files"
msg_info "Downloading NPM v${RELEASE}"
curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
cd nginx-proxy-manager-"${RELEASE}"
msg_ok "Downloaded NPM v${RELEASE}"
msg_info "Setting up Enviroment"
msg_info "Setting up Environment"
ln -sf /usr/bin/python3 /usr/bin/python
ln -sf /usr/bin/certbot /opt/certbot/bin/certbot
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
@@ -97,19 +109,12 @@ function update_script() {
$STD openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem
fi
mkdir -p /app/global /app/frontend/images
cp -r frontend/dist/* /app/frontend
cp -r frontend/app-images/* /app/frontend/images
cp -r backend/* /app
cp -r global/* /app/global
$STD python3 -m pip install --no-cache-dir certbot-dns-cloudflare
msg_ok "Setup Enviroment"
msg_info "Building Frontend"
cd ./frontend
$STD pnpm install
$STD pnpm upgrade
$STD pnpm run build
cp -r dist/* /app/frontend
cp -r app-images/* /app/frontend/images
msg_ok "Built Frontend"
$STD python3 -m pip install --no-cache-dir --break-system-packages certbot-dns-cloudflare
msg_ok "Setup Environment"
msg_info "Initializing Backend"
$STD rm -rf /app/config/default.json
@@ -128,7 +133,7 @@ function update_script() {
}
EOF
fi
cd /app
cd /app || exit
$STD pnpm install
msg_ok "Initialized Backend"

View File

@@ -66,6 +66,7 @@ function update_script() {
$STD dpkg -i "$OMADA_PKG"
rm -f "$OMADA_PKG"
msg_ok "Updated Omada Controller"
exit 0
}
start

View File

@@ -57,7 +57,7 @@ function update_script() {
exit
fi
systemctl stop open-webui.service
$STD npm install
$STD npm install --force
export NODE_OPTIONS="--max-old-space-size=3584"
$STD npm run build
cd ./backend

View File

@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="PeaNUT"
var_tags="${var_tags:-network;ups;}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-3072}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-7}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
@@ -27,22 +27,31 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Updating $APP to ${RELEASE}"
if ! command -v jq &>/dev/null; then
$STD apt-get install -y jq
fi
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | jq -r '.tag_name' | sed 's/^v//')
if [[ "${RELEASE}" != "$(cat ~/.peanut 2>/dev/null)" ]] || [[ ! -f ~/.peanut ]]; then
msg_info "Stopping $APP"
systemctl stop peanut
curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz"
tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1
rm peanut.tar.gz
msg_ok "Stopped $APP"
fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
msg_info "Updating $APP to ${RELEASE}"
cd /opt/peanut
$STD pnpm i
$STD pnpm run build
$STD pnpm run build:local
cp -r .next/static .next/standalone/.next/
mkdir -p /opt/peanut/.next/standalone/config
ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
systemctl start peanut
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to ${RELEASE}"
msg_info "Starting $APP"
systemctl start peanut
msg_ok "Started $APP"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi

View File

@@ -28,33 +28,33 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/plankanban/planka/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
RELEASE=$(curl -s https://api.github.com/repos/plankanban/planka/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.planka 2>/dev/null)" ]] || [[ ! -f ~/.planka ]]; then
msg_info "Stopping $APP"
systemctl stop planka
msg_ok "Stopped $APP"
msg_info "Updating $APP to ${RELEASE}"
mkdir -p /opt/planka-backup
mkdir -p /opt/planka-backup/favicons
mkdir -p /opt/planka-backup/user-avatars
mkdir -p /opt/planka-backup/background-images
mkdir -p /opt/planka-backup/attachments
mv /opt/planka/planka/.env /opt/planka-backup
[ -n "$(ls -A /opt/planka/planka/public/favicons 2>/dev/null)" ] && mv /opt/planka/planka/public/favicons/* /opt/planka-backup/favicons/
[ -n "$(ls -A /opt/planka/planka/public/user-avatars 2>/dev/null)" ] && mv /opt/planka/planka/public/user-avatars/* /opt/planka-backup/user-avatars/
[ -n "$(ls -A /opt/planka/planka/public/background-images 2>/dev/null)" ] && mv /opt/planka/planka/public/background-images/* /opt/planka-backup/background-images/
[ -n "$(ls -A /opt/planka/planka/private/attachments 2>/dev/null)" ] && mv /opt/planka/planka/private/attachments/* /opt/planka-backup/attachments/
msg_info "Backing up data"
mkdir -p /opt/planka-backup/{favicons,user-avatars,background-images,attachments}
mv /opt/planka/.env /opt/planka-backup
[ -d /opt/planka/public/favicons ] && find /opt/planka/public/favicons -maxdepth 1 -type f -exec mv -t /opt/planka-backup/favicons {} +
[ -d /opt/planka/public/user-avatars ] && find /opt/planka/public/user-avatars -maxdepth 1 -type f -exec mv -t /opt/planka-backup/user-avatars {} +
[ -d /opt/planka/public/background-images ] && find /opt/planka/public/background-images -maxdepth 1 -type f -exec mv -t /opt/planka-backup/background-images {} +
[ -d /opt/planka/private/attachments ] && find /opt/planka/private/attachments -maxdepth 1 -type f -exec mv -t /opt/planka-backup/attachments {} +
rm -rf /opt/planka
msg_ok "Backed up data"
fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip"
cd /opt/planka/planka
cd /opt/planka
$STD npm install
mv /opt/planka-backup/.env /opt/planka/planka/
[ -n "$(ls -A /opt/planka-backup/favicons 2>/dev/null)" ] && mv /opt/planka-backup/favicons/* /opt/planka/planka/public/favicons/
[ -n "$(ls -A /opt/planka-backup/user-avatars 2>/dev/null)" ] && mv /opt/planka-backup/user-avatars/* /opt/planka/planka/public/user-avatars/
[ -n "$(ls -A /opt/planka-backup/background-images 2>/dev/null)" ] && mv /opt/planka-backup/background-images/* /opt/planka/planka/public/background-images/
[ -n "$(ls -A /opt/planka-backup/attachments 2>/dev/null)" ] && mv /opt/planka-backup/attachments/* /opt/planka/planka/private/attachments/
msg_ok "Updated $APP to ${RELEASE}"
msg_info "Restoring data"
mv /opt/planka-backup/.env /opt/planka/
[ -d /opt/planka-backup/favicons ] && find /opt/planka-backup/favicons -maxdepth 1 -type f -exec mv -t /opt/planka/public/favicons {} +
[ -d /opt/planka-backup/user-avatars ] && find /opt/planka-backup/user-avatars -maxdepth 1 -type f -exec mv -t /opt/planka/public/user-avatars {} +
[ -d /opt/planka-backup/background-images ] && find /opt/planka-backup/background-images -maxdepth 1 -type f -exec mv -t /opt/planka/public/background-images {} +
[ -d /opt/planka-backup/attachments ] && find /opt/planka-backup/attachments -maxdepth 1 -type f -exec mv -t /opt/planka/private/attachments {} +
msg_ok "Restored data"
msg_info "Starting $APP"
systemctl start planka

View File

@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Copyright (c) 2021-2025 community-scripts ORG
# Author: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://rxresu.me
# Source: https://rxresume.org
APP="Reactive-Resume"
var_tags="${var_tags:-documents}"
@@ -25,23 +25,20 @@ function update_script() {
check_container_resources
if [[ ! -f /etc/systemd/system/Reactive-Resume.service ]]; then
msg_error "No ${APP} Installation Found!"
msg_error "No $APP Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/AmruthPillai/Reactive-Resume/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
RELEASE=$(curl -fsSL https://api.github.com/repos/lazy-media/Reactive-Resume/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ ! -f "$HOME"/.reactive-resume ]] || [[ "$RELEASE" != "$(cat "$HOME"/.reactive-resume)" ]]; then
msg_info "Stopping services"
systemctl stop Reactive-Resume
msg_ok "Stopped services"
cp /opt/"$APP"/.env /opt/rxresume.env
rm -rf /opt/"$APP"
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume"
msg_info "Updating $APP to v${RELEASE}"
cp /opt/${APP}/.env /opt/rxresume.env
res_tmp=$(mktemp)
rm -rf /opt/${APP}
curl -fsSL "https://github.com/AmruthPillai/Reactive-Resume/archive/refs/tags/v${RELEASE}.zip" -O $res_tmp
$STD unzip $res_tmp
mv ${APP}-${RELEASE}/ /opt/${APP}
cd /opt/${APP}
cd /opt/"$APP"
export PUPPETEER_SKIP_DOWNLOAD="true"
export NEXT_TELEMETRY_DISABLED=1
export CI="true"
@@ -49,7 +46,7 @@ function update_script() {
$STD pnpm install --frozen-lockfile
$STD pnpm run build
$STD pnpm run prisma:generate
mv /opt/rxresume.env /opt/${APP}/.env
mv /opt/rxresume.env /opt/"$APP"/.env
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Updating Minio"
@@ -62,12 +59,12 @@ function update_script() {
msg_info "Updating Browserless (Patience)"
systemctl stop browserless
cp /opt/browserless/.env /opt/browserless.env
rm -rf browserless
rm -rf /opt/browserless
brwsr_tmp=$(mktemp)
TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v${TAG}.zip -O $brwsr_tmp
$STD unzip $brwsr_tmp
mv browserless-${TAG}/ /opt/browserless
curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v"$TAG".zip -o "$brwsr_tmp"
$STD unzip "$brwsr_tmp"
mv browserless-"$TAG"/ /opt/browserless
cd /opt/browserless
$STD npm install
rm -rf src/routes/{chrome,edge,firefox,webkit}
@@ -84,14 +81,12 @@ function update_script() {
msg_info "Cleaning Up"
rm -f /tmp/minio.deb
rm -f $brwsr_tmp
rm -f $res_tmp
rm -f "$brwsr_tmp"
msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
msg_ok "No update required. $APP is already at v{$RELEASE}"
fi
exit
}

View File

@@ -27,31 +27,41 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ${APP}"
systemctl stop stirlingpdf
if [[ -n $(dpkg -l | grep -w ocrmypdf) ]] && [[ -z $(dpkg -l | grep -w qpdf) ]]; then
$STD apt-get remove -y ocrmypdf
$STD apt-get install -y qpdf
RELEASE=$(curl -fsSL https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat ~/.stirling-pdf 2>/dev/null)" ]] || [[ ! -f ~/.stirling-pdf ]]; then
if [[ ! -f /etc/systemd/system/unoserver.service ]]; then
msg_custom "⚠️ " "\e[33m" "Legacy installation detected please recreate the container using the latest install script."
exit 0
fi
PYTHON_VERSION="3.12" setup_uv
JAVA_VERSION="21" setup_java
msg_info "Stopping Services"
systemctl stop stirlingpdf libreoffice-listener unoserver
msg_ok "Stopped Services"
if [[ -f ~/.Stirling-PDF-login ]]; then
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF-with-login.jar"
mv /opt/Stirling-PDF/Stirling-PDF-with-login.jar /opt/Stirling-PDF/Stirling-PDF.jar
else
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF.jar"
fi
msg_info "Refreshing Font Cache"
$STD fc-cache -fv
msg_ok "Font Cache Updated"
msg_info "Starting Services"
systemctl start stirlingpdf libreoffice-listener unoserver
msg_ok "Started Services"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz" -o $(basename "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz")
tar -xzf v$RELEASE.tar.gz
cd Stirling-PDF-$RELEASE
chmod +x ./gradlew
$STD ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube
rm -rf /opt/Stirling-PDF/Stirling-PDF-*.jar
cp -r ./stirling-pdf/build/libs/*.jar /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar
cp -r scripts /opt/Stirling-PDF/
cp -r pipeline /opt/Stirling-PDF/
cp -r stirling-pdf/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/
cd ~
rm -rf Stirling-PDF-$RELEASE v$RELEASE.tar.gz
ln -sf /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
systemctl start stirlingpdf
msg_ok "Updated ${APP} to v$RELEASE"
exit
}
start
build_container
description

63
ct/teamspeak-server.sh Normal file
View File

@@ -0,0 +1,63 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: tremor021 (Slaviša Arežina)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://teamspeak.com/en/
APP="Teamspeak-Server"
var_tags="${var_tags:-voice;communication}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-debian}"
var_version="${var_version:-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/teamspeak-server ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | grep -oP 'teamspeak3-server_linux_amd64-\K[0-9]+\.[0-9]+\.[0-9]+' | head -1)
if [[ "${RELEASE}" != "$(cat ~/.teamspeak-server 2>/dev/null)" ]] || [[ ! -f ~/.teamspeak-server ]]; then
msg_info "Stopping Service"
systemctl stop teamspeak-server
msg_ok "Stopped Service"
msg_info "Updating ${APP}"
curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2
tar -xf ./ts3server.tar.bz2
cp -ru teamspeak3-server_linux_amd64/* /opt/teamspeak-server/
rm -f ~/ts3server.tar.bz*
echo "${RELEASE}" >~/.teamspeak-server
msg_ok "Updated $APP"
msg_info "Starting Service"
systemctl start teamspeak-server
msg_ok "Started Service"
msg_ok "Updated Successfully"
else
msg_ok "Already up to date"
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}${IP}:9987${CL}"

View File

@@ -29,7 +29,7 @@ function update_script() {
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/threadfin/threadfin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat ~/.threadfin 2>/dev/null)" ]] || [[ ! -f ~/.threadfin ]]; then
if [[ "${RELEASE}" != "$(cat ~/.threadfin_version 2>/dev/null)" ]] || [[ ! -f ~/.threadfin_version ]]; then
msg_info "Stopping $APP"
systemctl stop threadfin

View File

@@ -0,0 +1,35 @@
{
"name": "Bar-Assistant",
"slug": "bar-assistant",
"categories": [
24
],
"date_created": "2025-07-14",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": "https://docs.barassistant.app/",
"website": "https://barassistant.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bar-assistant.webp",
"config_path": "/opt/bar-assistant",
"description": "Bar Assistant is all-in-one solution for managing your home bar. Compared to other recipe management software that usually tries to be more for general use, Bar Assistant is made specifically for managing cocktail recipes. This means that there are a lot of cocktail-oriented features, like ingredient substitutes, first-class ingredients, ABV calculations, unit switching and more..",
"install_methods": [
{
"type": "default",
"script": "ct/bar-assistant.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -0,0 +1,40 @@
{
"name": "Cloudreve",
"slug": "cloudreve",
"categories": [
12
],
"date_created": "2025-07-17",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 5212,
"documentation": "https://docs.cloudreve.org/en/",
"website": "https://cloudreve.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/cloudreve.webp",
"config_path": "/opt/cloudreve/data/conf.ini",
"description": "Cloudreve is an open-source, community-driven cloud storage system that provides file sharing, synchronization, and management features. It supports a wide range of storage backends and integrates with various notification and logging platforms.",
"install_methods": [
{
"type": "default",
"script": "ct/cloudreve.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 10,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "After Installation: Register your user -> Login -> Dashboard -> Accept Primary URL.",
"type": "warn"
}
]
}

View File

@@ -6,7 +6,7 @@
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": 18083,
"documentation": "https://docs.emqx.com/en/emqx/latest/",
@@ -35,10 +35,6 @@
{
"text": "Setup-Steps: Access Control ➡ Authentication ➡ Create ➡ Next ➡ Next ➡ Create ➡ Users ➡ Add ➡ Username / Password (to authenicate with MQTT) ➡ Save. You're now ready to enjoy a high-performance MQTT Broker.",
"type": "info"
},
{
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
"type": "warning"
}
]
}

View File

@@ -8,7 +8,7 @@
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"interface_port": 3000,
"documentation": "https://github.com/HabitRPG/habitica/wiki",
"website": "https://habitica.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/habitica.webp",

View File

@@ -0,0 +1,35 @@
{
"name": "Mealie",
"slug": "mealie",
"categories": [
13
],
"date_created": "2025-07-14",
"type": "ct",
"updateable": true,
"privileged": false,
"config_path": "/opt/mealie/mealie.env",
"interface_port": 9000,
"documentation": "https://mealie.io/",
"website": "https://mealie.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mealie.webp",
"description": "Mealie is a self hosted recipe manager, meal planner and shopping list with a RestAPI backend and a reactive frontend built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the URL and Mealie will automatically import the relevant data, or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications.",
"install_methods": [
{
"type": "default",
"script": "ct/mealie.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 10,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -1,5 +1,5 @@
{
"name": "NIC Offloading Fix",
"name": "Intel e1000e NIC Offloading Fix",
"slug": "nic-offloading-fix",
"categories": [
1

View File

@@ -20,7 +20,7 @@
"script": "ct/peanut.sh",
"resources": {
"cpu": 2,
"ram": 3072,
"ram": 4096,
"hdd": 7,
"os": "debian",
"version": "12"

View File

@@ -9,8 +9,8 @@
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://docs.rxresu.me/",
"website": "https://rxresu.me",
"documentation": "https://docs.rxresume.org/",
"website": "https://rxresume.org",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/reactive-resume-light.png",
"config_path": "/opt/reactive-resume/.env",
"description": "A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever.",

View File

@@ -28,8 +28,8 @@
}
],
"default_credentials": {
"username": null,
"password": null
"username": "admin",
"password": "stirling"
},
"notes": []
}

View File

@@ -0,0 +1,40 @@
{
"name": "Teamspeak-Server",
"slug": "teamspeak-server",
"categories": [
24
],
"date_created": "2025-07-21",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 9987,
"documentation": "https://support.teamspeak.com/hc/en-us/categories/360000302017-TeamSpeak-3",
"website": "https://teamspeak.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/teamspeak-light.webp",
"config_path": "",
"description": "TeamSpeak is a voice over IP (VoIP) application, primarily used by gamers and teams to chat in real time on dedicated servers. It delivers crystalclear, lowlatency voice communication.",
"install_methods": [
{
"type": "default",
"script": "ct/teamspeak-server.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Use `journalctl -u teamspeak-server.service` inside LXC console to check for admin credentials!",
"type": "info"
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -19,7 +19,7 @@ $STD apt-get install -y \
nginx
msg_ok "Installed Dependencies"
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
setup_composer
setup_mariadb

View File

@@ -13,12 +13,9 @@ setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y apache2
msg_ok "Installed Dependencies"
PG_VERSION="16" setup_postgresql
PHP_APACHE="YES" PHP_MODULE="pgsql, dom" PHP_VERSION="8.2" setup_php
PHP_APACHE="YES" PHP_MODULE="pgsql" PHP_VERSION="8.2" setup_php
setup_composer
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
msg_info "Setting up PostgreSQL Database"
@@ -36,6 +33,8 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
msg_ok "Set up PostgreSQL Database"
msg_info "Configuring Baikal"
cd /opt/baikal
$STD composer install
cat <<EOF >/opt/baikal/config/baikal.yaml
database:
backend: pgsql

View File

@@ -0,0 +1,197 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01 | CanbiZ
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/karlomikus/bar-assistant
# Source: https://github.com/karlomikus/vue-salt-rim
# Source: https://www.meilisearch.com/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
redis-server \
nginx \
lsb-release \
libvips
#php-{ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm}
msg_ok "Installed Dependencies"
PHP_VERSION="8.3" PHP_FPM=YES PHP_MODULE="ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm" setup_php
setup_composer
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant"
fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim"
msg_info "Configuring PHP"
PHPVER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION . "\n";')
sed -i.bak -E 's/^\s*;?\s*ffi\.enable\s*=.*/ffi.enable=true/' /etc/php/${PHPVER}/fpm/php.ini
$STD systemctl reload php${PHPVER}-fpm
msg_info "configured PHP"
msg_info "Configure MeiliSearch"
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
MASTER_KEY=$(openssl rand -base64 12)
sed -i \
-e 's|^env =.*|env = "production"|' \
-e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \
-e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \
-e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \
-e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \
-e 's|^# no_analytics = true|no_analytics = true|' \
-e 's|^http_addr =.*|http_addr = "127.0.0.1:7700"|' \
/etc/meilisearch.toml
msg_ok "Configured MeiliSearch"
msg_info "Creating MeiliSearch service"
cat <<EOF >/etc/systemd/system/meilisearch.service
[Unit]
Description=Meilisearch
After=network.target
[Service]
ExecStart=/usr/bin/meilisearch --config-file-path /etc/meilisearch.toml
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now meilisearch
sleep 5
msg_ok "Created Service MeiliSearch"
msg_info "Installing Bar Assistant"
cd /opt/bar-assistant
cp /opt/bar-assistant/.env.dist /opt/bar-assistant/.env
mkdir -p /opt/bar-assistant/resources/data
curl -fsSL https://github.com/bar-assistant/data/archive/refs/heads/v5.tar.gz | tar -xz --strip-components=1 -C /opt/bar-assistant/resources/data
MeiliSearch_API_KEY=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"key":"[^"]*"' | head -n 1 | sed 's/"key":"//;s/"//')
MeiliSearch_API_KEY_UID=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"uid":"[^"]*"' | head -n 1 | sed 's/"uid":"//;s/"//')
LOCAL_IP=$(hostname -I | awk '{print $1}')
sed -i -e "s|^APP_URL=|APP_URL=http://${LOCAL_IP}/bar/|" \
-e "s|^MEILISEARCH_HOST=|MEILISEARCH_HOST=http://127.0.0.1:7700|" \
-e "s|^MEILISEARCH_KEY=|MEILISEARCH_KEY=${MASTER_KEY}|" \
-e "s|^MEILISEARCH_API_KEY=|MEILISEARCH_API_KEY=${MeiliSearch_API_KEY}|" \
-e "s|^MEILISEARCH_API_KEY_UID=|MEILISEARCH_API_KEY_UID=${MeiliSearch_API_KEY_UID}|" \
/opt/bar-assistant/.env
$STD composer install --no-interaction
$STD php artisan key:generate
touch storage/bar-assistant/database.ba3.sqlite
$STD php artisan migrate --force
$STD php artisan storage:link
$STD php artisan bar:setup-meilisearch
$STD php artisan scout:sync-index-settings
$STD php artisan config:cache
$STD php artisan route:cache
$STD php artisan event:cache
mkdir /opt/bar-assistant/storage/bar-assistant/uploads/temp
chown -R www-data:www-data /opt/bar-assistant
msg_ok "Installed Bar Assistant"
msg_info "Installing Salt Rim"
cd /opt/vue-salt-rim
cat <<EOF >/opt/vue-salt-rim/public/config.js
window.srConfig = {}
window.srConfig.API_URL = "http://${LOCAL_IP}/bar"
window.srConfig.MEILISEARCH_URL = "http://${LOCAL_IP}/search"
EOF
$STD npm install
$STD npm run build
msg_ok "Installed Salt Rim"
msg_info "Creating Service"
cat <<EOF >/etc/nginx/sites-available/barassistant.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
client_max_body_size 100M;
location /bar/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
}
location /search/ {
proxy_pass http://127.0.0.1:7700/;
}
location / {
proxy_pass http://127.0.0.1:8081/;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
}
}
server {
listen 127.0.0.1:8080;
server_name example.com;
root /opt/bar-assistant/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files \$uri \$uri/ /index.php?\$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ ^/index\.php(/|$) {
fastcgi_pass unix:/var/run/php/php$PHPVER-fpm.sock;
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
server {
listen 127.0.0.1:8081;
server_name _;
root /opt/vue-salt-rim/dist;
location / {
try_files \$uri \$uri/ /index.html;
}
}
EOF
ln -s /etc/nginx/sites-available/barassistant.conf /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
$STD systemctl reload nginx
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

@@ -14,12 +14,10 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
apache2 \
redis
$STD apt-get install -y redis
msg_ok "Installed Dependencies"
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="date, json, redis, sqlite3, sockets" setup_php
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="redis, sqlite3" setup_php
fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy"
msg_info "Configuring barcodebuddy"

View File

@@ -24,13 +24,20 @@ motd_ssh
customize
msg_info "Creating Service"
PASSWORD=$(omd create monitoring | grep "password:" | awk '{print $NF}')
$STD omd start
SITE_NAME="monitoring"
$STD omd create "$SITE_NAME"
MKPASSWORD=$(openssl rand -base64 18 | tr -d '/+=' | cut -c1-16)
echo -e "$MKPASSWORD\n$MKPASSWORD" | su - "$SITE_NAME" -c "cmk-passwd cmkadmin --stdin"
$STD omd start "$SITE_NAME"
{
echo "Application-Credentials"
echo "Username: cmkadmin"
echo "Password: $PASSWORD"
echo "Password: $MKPASSWORD"
echo "Site: $SITE_NAME"
} >>~/checkmk.creds
msg_ok "Created Service"
msg_info "Cleaning up"

View File

@@ -0,0 +1,43 @@
#!/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://cloudreve.org/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "cloudreve" "cloudreve/cloudreve" "prebuild" "latest" "/opt/cloudreve" "*linux_amd64.tar.gz"
msg_info "Setup Service"
cat <<EOF >/etc/systemd/system/cloudreve.service
[Unit]
Description=Cloudreve Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/cloudreve/cloudreve
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now cloudreve
msg_ok "Service Setup"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -17,22 +17,8 @@ msg_info "Installing Dependencies"
$STD apt-get install -y rsync
msg_ok "Installed Dependencies"
msg_info "Installing Azul Zulu"
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 "zulu-repo_1.0.0-3_all.deb"
$STD dpkg -i zulu-repo_1.0.0-3_all.deb
$STD apt-get update
$STD apt-get -y install zulu17-jdk
msg_ok "Installed Azul Zulu"
RELEASE=$(curl -fsSL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
msg_info "Installing CommaFeed ${RELEASE}"
mkdir /opt/commafeed
curl -fsSL "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip" -o "commafeed-${RELEASE}-h2-jvm.zip"
$STD unzip commafeed-${RELEASE}-h2-jvm.zip
mv commafeed-${RELEASE}-h2/* /opt/commafeed/
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed CommaFeed ${RELEASE}"
JAVA_VERSION="17" setup_java
fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/commafeed.service
@@ -55,7 +41,6 @@ motd_ssh
customize
msg_info "Cleaning up"
rm -rf commafeed-${RELEASE}-h2 commafeed-${RELEASE}-h2-jvm.zip zulu-repo_1.0.0-3_all.deb
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -16,11 +16,11 @@ update_os
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
msg_info "Installing Dashy ${RELEASE} (Patience)"
msg_info "Installing Dashy"
cd /opt/dashy
$STD npm install
$STD npm run build
msg_ok "Installed Dashy ${RELEASE}"
msg_ok "Installed Dashy"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/dashy.service

View File

@@ -29,7 +29,17 @@ echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json
$STD sh <(curl -fsSL https://get.docker.com)
msg_ok "Installed Docker $DOCKER_LATEST_VERSION"
read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt
read -r -p "${TAB3}Install Docker Compose v2 plugin? <y/N> " prompt_compose
if [[ ${prompt_compose,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
mkdir -p /usr/local/lib/docker/cli-plugins
curl -fsSL "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_LATEST_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/lib/docker/cli-plugins/docker-compose
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
fi
read -r -p "${TAB3}Would you like to add Portainer (UI)? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
docker volume create portainer_data >/dev/null
@@ -43,9 +53,9 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
portainer/portainer-ce:latest
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
else
read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
read -r -p "${TAB3}Would you like to install the Portainer Agent (for remote management)? <y/N> " prompt_agent
if [[ ${prompt_agent,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer Agent $PORTAINER_AGENT_LATEST_VERSION"
$STD docker run -d \
-p 9001:9001 \
--name portainer_agent \
@@ -57,13 +67,42 @@ else
fi
fi
read -r -p "${TAB3}Would you like to expose the Docker TCP socket? <y/N> " prompt
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
msg_info "Exposing Docker TCP socket"
$STD mkdir -p /etc/docker
$STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json
$STD rc-service docker restart
msg_ok "Exposed Docker TCP socket at tcp://+:2375"
read -r -p "${TAB3}Expose Docker TCP socket (insecure) ? [n = No, l = Local only (127.0.0.1), a = All interfaces (0.0.0.0)] <n/l/a>: " socket_choice
case "${socket_choice,,}" in
l)
socket="tcp://127.0.0.1:2375"
;;
a)
socket="tcp://0.0.0.0:2375"
;;
*)
socket=""
;;
esac
if [[ -n "$socket" ]]; then
msg_info "Enabling Docker TCP socket on $socket"
$STD apt-get install -y jq
tmpfile=$(mktemp)
jq --arg sock "$socket" '. + { "hosts": ["unix:///var/run/docker.sock", $sock] }' /etc/docker/daemon.json > "$tmpfile" && mv "$tmpfile" /etc/docker/daemon.json
mkdir -p /etc/systemd/system/docker.service.d
cat <<EOF > /etc/systemd/system/docker.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
EOF
$STD systemctl daemon-reexec
$STD systemctl daemon-reload
if systemctl restart docker; then
msg_ok "Docker TCP socket available on $socket"
else
msg_error "Docker failed to restart. Check journalctl -xeu docker.service"
exit 1
fi
fi
motd_ssh

View File

@@ -13,16 +13,39 @@ setting_up_container
network_check
update_os
msg_info "Installing dependencies"
$STD apt-get install -y ca-certificates
msg_ok "Installed dependencies"
msg_info "Fetching latest EMQX Enterprise version"
LATEST_VERSION=$(curl -fsSL https://www.emqx.com/en/downloads/enterprise | grep -oP '/en/downloads/enterprise/v\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n1)
if [[ -z "$LATEST_VERSION" ]]; then
msg_error "Failed to determine latest EMQX version"
exit 1
fi
msg_ok "Latest version: v$LATEST_VERSION"
DOWNLOAD_URL="https://www.emqx.com/en/downloads/enterprise/v$LATEST_VERSION/emqx-enterprise-${LATEST_VERSION}-debian12-amd64.deb"
DEB_FILE="/tmp/emqx-enterprise-${LATEST_VERSION}-debian12-amd64.deb"
msg_info "Downloading EMQX v$LATEST_VERSION"
$STD curl -fsSL -o "$DEB_FILE" "$DOWNLOAD_URL"
msg_ok "Downloaded EMQX"
msg_info "Installing EMQX"
$STD bash <(curl -fsSL https://packagecloud.io/install/repositories/emqx/emqx/script.deb.sh)
$STD apt-get install -y emqx
$STD systemctl enable --now emqx
$STD apt-get install -y "$DEB_FILE"
echo "$LATEST_VERSION" >~/.emqx
msg_ok "Installed EMQX"
msg_info "Starting EMQX service"
$STD systemctl enable -q --now emqx
msg_ok "Enabled EMQX service"
motd_ssh
customize
msg_info "Cleaning up"
apt-get autoremove >/dev/null
apt-get autoclean >/dev/null
rm -f "$DEB_FILE"
$STD apt-get autoremove
$STD apt-get autoclean
msg_ok "Cleaned"

View File

@@ -13,8 +13,6 @@ setting_up_container
network_check
update_os
FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
msg_info "Setting Up Hardware Acceleration"
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
if [[ "$CTTYPE" == "0" ]]; then
@@ -26,7 +24,37 @@ if [[ "$CTTYPE" == "0" ]]; then
fi
msg_ok "Set Up Hardware Acceleration"
read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 12 only)? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Intel Hardware Acceleration (non-free)"
cat <<EOF >/etc/apt/sources.list.d/non-free.list
deb http://deb.debian.org/debian bookworm non-free non-free-firmware
deb-src http://deb.debian.org/debian bookworm non-free non-free-firmware
deb http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
deb-src http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
deb-src http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
EOF
$STD apt-get update
$STD apt-get -y install {intel-media-va-driver-non-free,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
else
msg_info "Installing Intel Hardware Acceleration"
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
fi
msg_ok "Installed and Set Up Intel Hardware Acceleration"
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
msg_info "Set ErsatzTV-ffmpeg links"
chmod +x /opt/ErsatzTV-ffmpeg/bin/*
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffplay /usr/local/bin/ffplay
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe
msg_ok "ffmpeg links set"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/ersatzTV.service

View File

@@ -14,21 +14,15 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
xdg-utils
$STD apt-get install -y xdg-utils
msg_ok "Installed Dependencies"
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
fetch_and_deploy_gh_release "excalidraw" "excalidraw/excalidraw"
msg_info "Setup Excalidraw"
temp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar xzf $temp_file
mv excalidraw-${RELEASE} /opt/excalidraw
msg_info "Configuring Excalidraw"
cd /opt/excalidraw
$STD yarn
echo "${RELEASE}" >/opt/excalidraw_version.txt
msg_ok "Setup Excalidraw"
msg_info "Creating Service"
@@ -53,7 +47,6 @@ motd_ssh
customize
msg_info "Cleaning up"
rm -f $temp_file
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -13,18 +13,10 @@ setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
curl -fsSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ bookworm main" >/etc/apt/sources.list.d/php.list
$STD apt-get update
$STD apt-get install -y \
apache2 \
libapache2-mod-php8.4 \
php8.4-{bcmath,cli,intl,curl,zip,gd,xml,mbstring,mysql} \
composer
msg_ok "Installed Dependencies"
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="mysql" setup_php
setup_composer
setup_mariadb
LOCAL_IP=$(hostname -I | awk '{print $1}')
msg_info "Setting up database"
DB_NAME=firefly
@@ -41,21 +33,15 @@ mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRI
} >>~/firefly.creds
msg_ok "Set up database"
msg_info "Installing Firefly III (Patience)"
LOCAL_IP=$(hostname -I | awk '{print $1}')
RELEASE=$(curl -fsSL https://api.github.com/repos/firefly-iii/firefly-iii/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
cd /opt
curl -fsSL "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz" -o "FireflyIII-v${RELEASE}.tar.gz"
mkdir -p /opt/firefly
tar -xzf FireflyIII-v${RELEASE}.tar.gz -C /opt/firefly
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
msg_info "Configuring Firefly III (Patience)"
chown -R www-data:www-data /opt/firefly
chmod -R 775 /opt/firefly/storage
cd /opt/firefly
cp .env.example .env
sed -i "s/DB_HOST=.*/DB_HOST=localhost/" /opt/firefly/.env
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" /opt/firefly/.env
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
source ~/.bashrc
$STD composer install --no-dev --no-plugins --no-interaction
$STD php artisan firefly:upgrade-database
$STD php artisan firefly:correct-database
@@ -69,8 +55,7 @@ tar -xzf "DataImporter-v${IMPORTER_RELEASE}.tar.gz" -C /opt/firefly/dataimporter
cp /opt/firefly/dataimporter/.env.example /opt/firefly/dataimporter/.env
sed -i "s#FIREFLY_III_URL=#FIREFLY_III_URL=http://${LOCAL_IP}#g" /opt/firefly/dataimporter/.env
chown -R www-data:www-data /opt/firefly
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed Firefly III"
msg_ok "Configured Firefly III"
msg_info "Creating Service"
cat <<EOF >/etc/apache2/sites-available/firefly.conf
@@ -112,7 +97,6 @@ motd_ssh
customize
msg_info "Cleaning up"
rm -rf "/opt/FireflyIII-v${RELEASE}.tar.gz"
rm -rf "/opt/DataImporter-v${IMPORTER_RELEASE}.tar.gz"
$STD apt-get -y autoremove
$STD apt-get -y autoclean

View File

@@ -15,8 +15,9 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y apt-transport-https
$STD apt-get install -y xvfb
$STD apt-get install -y \
apt-transport-https \
xvfb
msg_ok "Installed Dependencies"
msg_info "Installing Chrome"
@@ -26,13 +27,7 @@ $STD apt update
$STD apt install -y google-chrome-stable
msg_ok "Installed Chrome"
msg_info "Installing FlareSolverr"
RELEASE=$(curl -fsSL https://github.com/FlareSolverr/FlareSolverr/releases/latest | grep "title>Release" | cut -d " " -f 4)
$STD curl -fsSL "https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz" -o "flaresolverr_linux_x64.tar.gz"
$STD tar -xzf flaresolverr_linux_x64.tar.gz -C /opt
$STD rm flaresolverr_linux_x64.tar.gz
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
msg_ok "Installed FlareSolverr"
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/flaresolverr.service

View File

@@ -14,17 +14,11 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
zip \
postgresql-common
$STD apt-get install -y zip
msg_ok "Installed Dependencies"
msg_info "Installing Additional Dependencies"
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
echo "YES" | /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh &>/dev/null
$STD apt-get install -y postgresql-17 nodejs
msg_ok "Installed Additional Dependencies"
PG_VERSION="17" setup_postgresql
NODE_VERSION="20" setup_nodejs
msg_info "Setting up Postgresql Database"
DB_NAME="fluiddb"
@@ -44,14 +38,9 @@ $STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
} >>~/$APPLICATION.creds
msg_ok "Set up Postgresql Database"
msg_info "Setup ${APPLICATION}"
tmp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/dotnetfactory/fluid-calendar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -o "$tmp_file"
$STD unzip $tmp_file
mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION}
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar"
msg_info "Configuring ${APPLICATION}"
cat <<EOF >/opt/fluid-calendar/.env
DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
@@ -72,7 +61,7 @@ $STD npm install --legacy-peer-deps
$STD npm run prisma:generate
$STD npx prisma migrate deploy
$STD npm run build:os
msg_ok "Setup ${APPLICATION}"
msg_ok "Configuring ${APPLICATION}"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/fluid-calendar.service
@@ -95,7 +84,6 @@ motd_ssh
customize
msg_info "Cleaning up"
rm -f $tmp_file
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -13,13 +13,7 @@ setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
apache2 \
php-{curl,dom,json,ctype,pgsql,gmp,mbstring,iconv,zip} \
libapache2-mod-php
msg_ok "Installed Dependencies"
PHP_VERSION="8.2" PHP_MODULE="curl,xml,mbstring,intl,zip,pgsql,gmp" PHP_APACHE="YES" setup_php
PG_VERSION="16" setup_postgresql
msg_info "Setting up PostgreSQL"
@@ -36,17 +30,14 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
} >>~/freshrss.creds
msg_ok "Set up PostgreSQL"
msg_info "Installing FreshRSS"
RELEASE=$(curl -fsSL https://api.github.com/repos/FreshRSS/FreshRSS/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
cd /opt
curl -fsSL "https://github.com/FreshRSS/FreshRSS/archive/refs/tags/${RELEASE}.zip" -o "${RELEASE}.zip"
$STD unzip "${RELEASE}.zip"
mv "/opt/FreshRSS-${RELEASE}" /opt/freshrss
fetch_and_deploy_gh_release "freshrss" "FreshRSS/FreshRSS"
msg_info "Configuring FreshRSS"
cd /opt/freshrss
chown -R www-data:www-data /opt/freshrss
chmod -R g+rX /opt/freshrss
chmod -R g+w /opt/freshrss/data/
msg_ok "Installed FreshRSS"
msg_ok "Configured FreshRSS"
msg_info "Setting up cron job for feed refresh"
cat <<EOF >/etc/cron.d/freshrss-actualize
@@ -83,7 +74,6 @@ motd_ssh
customize
msg_info "Cleaning up"
rm -rf "/opt/${RELEASE}.zip"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -20,20 +20,15 @@ $STD apt-get install -y \
msg_ok "Installed Dependencies"
setup_go
fetch_and_deploy_gh_release "gatus" "TwiN/gatus"
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
msg_info "Configuring gatus"
cd /opt/gatus
$STD go mod tidy
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
setcap CAP_NET_RAW+ep gatus
mv config.yaml config
echo "${RELEASE}" >/opt/gatus_version.txt
msg_ok "Done setting up gatus"
msg_ok "Configured gatus"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/gatus.service
@@ -58,10 +53,6 @@ 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

@@ -16,19 +16,19 @@ update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
nginx \
ca-certificates
ca-certificates \
libjemalloc2
msg_ok "Installed Dependencies"
setup_mariadb
setup_mysql
msg_info "Configuring Database"
DB_NAME=ghost
DB_USER=ghostuser
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
{
echo "Ghost-Credentials"
echo "Ghost Database User: $DB_USER"
@@ -37,7 +37,7 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS
} >>~/ghost.creds
msg_ok "Configured MySQL"
NODE_VERSION="20" setup_nodejs
NODE_VERSION="22" setup_nodejs
msg_info "Installing Ghost CLI"
$STD npm install ghost-cli@latest -g

View File

@@ -19,10 +19,9 @@ $STD apt-get install -y git
$STD apt-get install -y sqlite3
msg_ok "Installed Dependencies"
msg_info "Installing Gitea"
RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//')
curl -fsSL "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64" -o "gitea-$RELEASE-linux-amd64"
mv gitea* /usr/local/bin/gitea
fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-amd64"
msg_info "Configuring Gitea"
chmod +x /usr/local/bin/gitea
adduser --system --group --disabled-password --shell /bin/bash --home /etc/gitea gitea >/dev/null
mkdir -p /var/lib/gitea/{custom,data,log}
@@ -31,7 +30,7 @@ chmod -R 750 /var/lib/gitea/
chown root:gitea /etc/gitea
chmod 770 /etc/gitea
sudo -u gitea ln -s /var/lib/gitea/data/.ssh/ /etc/gitea/.ssh
msg_ok "Installed Gitea"
msg_ok "Configured Gitea"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/gitea.service

View File

@@ -13,12 +13,9 @@ setting_up_container
network_check
update_os
msg_info "Installing Glance"
RELEASE=$(curl -fsSL https://api.github.com/repos/glanceapp/glance/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
cd /opt
curl -fsSL "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz" -o "glance-linux-amd64.tar.gz"
mkdir -p /opt/glance
tar -xzf glance-linux-amd64.tar.gz -C /opt/glance
fetch_and_deploy_gh_release "glance" "glanceapp/glance" "prebuild" "latest" "/opt/glance" "glance-linux-amd64.tar.gz"
msg_info "Configuring Glance"
cat <<EOF >/opt/glance/glance.yml
pages:
- name: Startpage
@@ -39,9 +36,7 @@ pages:
- title: Helper Scripts
url: https://github.com/community-scripts/ProxmoxVE
EOF
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed Glance"
msg_ok "Configured Glance"
msg_info "Creating Service"
service_path="/etc/systemd/system/glance.service"
@@ -67,7 +62,6 @@ motd_ssh
customize
msg_info "Cleaning up"
rm -rf /opt/glance-linux-amd64.tar.gz
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -22,18 +22,16 @@ curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1
$STD dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
msg_ok "Installed Dependencies"
NODE_VERSION="20" setup_nodejs
NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha" setup_nodejs
fetch_and_deploy_gh_release "habitica" "HabitRPG/habitica" "tarball" "latest" "/opt/habitica"
msg_info "Setup ${APPLICATION}"
temp_file=$(mktemp)
RELEASE=$(curl -fsSL https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf $temp_file
mv habitica-${RELEASE}/ /opt/habitica
cd /opt/habitica
$STD npm i
$STD npm run postinstall
$STD npm run client:build
$STD gulp build:prod
cp config.json.example config.json
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Setup ${APPLICATION}"
msg_info "Creating Service"
@@ -91,7 +89,6 @@ motd_ssh
customize
msg_info "Cleaning up"
rm -f $temp_file
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -66,6 +66,7 @@ $STD apt-get install --no-install-recommends -y \
mesa-vulkan-drivers \
ocl-icd-libopencl1 \
tini \
libaom-dev \
zlib1g
$STD apt-get install -y \
libgdk-pixbuf-2.0-dev librsvg2-dev libtool
@@ -153,7 +154,6 @@ if [[ -f ~/.openvino ]]; then
fi
msg_ok "Packages from Testing Repo Installed"
# Fix default DB collation issue after libc update
$STD sudo -u postgres psql -c "ALTER DATABASE postgres REFRESH COLLATION VERSION;"
$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME REFRESH COLLATION VERSION;"
@@ -218,7 +218,7 @@ $STD cmake --preset=release-noplugins \
-DWITH_LIBSHARPYUV=ON \
-DWITH_LIBDE265=ON \
-DWITH_AOM_DECODER=OFF \
-DWITH_AOM_ENCODER=OFF \
-DWITH_AOM_ENCODER=ON \
-DWITH_X265=OFF \
-DWITH_EXAMPLES=OFF \
..
@@ -254,7 +254,8 @@ $STD make clean
cd "$STAGING_DIR"
SOURCE=$SOURCE_DIR/libvips
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
# : "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
: "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBVIPS_REVISION"
@@ -301,6 +302,10 @@ cd "$SRC_DIR"
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
cp -a web/build "$APP_DIR"/www
cp LICENSE "$APP_DIR"
cd "$APP_DIR"
export SHARP_FORCE_GLOBAL_LIBVIPS=true
$STD npm install sharp
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
msg_ok "Installed Immich Web Components"
cd "$SRC_DIR"/machine-learning
@@ -331,8 +336,6 @@ ln -s "$UPLOAD_DIR" "$APP_DIR"/upload
ln -s "$UPLOAD_DIR" "$ML_DIR"/upload
msg_info "Installing Immich CLI"
$STD npm install --build-from-source sharp
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
$STD npm i -g @immich/cli
msg_ok "Installed Immich CLI"

View File

@@ -22,7 +22,8 @@ $STD apt-get install -y \
chromium/stable \
chromium-common/stable \
graphicsmagick \
ghostscript
ghostscript \
jq
msg_ok "Installed Dependencies"
msg_info "Installing Additional Tools"
@@ -48,18 +49,14 @@ sed -i \
/etc/meilisearch.toml
msg_ok "Installed Meilisearch"
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
$STD npm install -g corepack@0.31.0
fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep"
cd /opt/karakeep
MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
msg_info "Installing karakeep"
cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
$STD unzip "v${RELEASE}.zip"
mv karakeep-"${RELEASE}" /opt/karakeep
cd /opt/karakeep
corepack enable
export PUPPETEER_SKIP_DOWNLOAD="true"
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
export NEXT_TELEMETRY_DISABLED=1
export CI="true"
cd /opt/karakeep/apps/web
@@ -70,21 +67,20 @@ $STD pnpm install --frozen-lockfile
cd /opt/karakeep/apps/cli
$STD pnpm install --frozen-lockfile
$STD pnpm build
cd /opt/karakeep/apps/mcp
$STD pnpm install --frozen-lockfile
$STD pnpm build
$STD pnpm store prune
export DATA_DIR=/opt/karakeep_data
karakeep_SECRET=$(openssl rand -base64 36 | cut -c1-24)
mkdir -p /etc/karakeep
cat <<EOF >/etc/karakeep/karakeep.env
SERVER_VERSION=$RELEASE
SERVER_VERSION="$(cat ~/.karakeep)"
NEXTAUTH_SECRET="$karakeep_SECRET"
NEXTAUTH_URL="http://localhost:3000"
DATA_DIR="$DATA_DIR"
MEILI_ADDR="http://127.0.0.1:7700"
MEILI_MASTER_KEY="$MASTER_KEY"
BROWSER_WEB_URL="http://127.0.0.1:9222"
DB_WAL_MODE=true
# If you're planning to use OpenAI for tagging. Uncomment the following line:
# OPENAI_API_KEY="<API_KEY>"
@@ -112,7 +108,6 @@ BROWSER_WEB_URL="http://127.0.0.1:9222"
# CRAWLER_VIDEO_DOWNLOAD_MAX_SIZE="50"
# CRAWLER_ENABLE_ADBLOCKER=true
EOF
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed karakeep"
msg_info "Running Database Migration"
@@ -190,7 +185,6 @@ customize
msg_info "Cleaning up"
rm -rf /tmp/meilisearch.deb
rm -f /opt/v"${RELEASE}".zip
$STD apt-get autoremove -y
$STD apt-get autoclean -y
msg_ok "Cleaned"

148
install/mealie-install.sh Normal file
View File

@@ -0,0 +1,148 @@
#!/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://mealie.io
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
build-essential \
libpq-dev \
libwebp-dev \
libsasl2-dev \
libldap2-dev \
libssl-dev
msg_ok "Installed Dependencies"
PYTHON_VERSION="3.12" setup_uv
POSTGRES_VERSION="16" setup_postgresql
NODE_MODULE="yarn" NODE_VERSION="20" setup_nodejs
fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
msg_info "Setup Database"
DB_NAME=mealie_db
DB_USER=mealie__user
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$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'"
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
{
echo "Mealie-Credentials"
echo "Mealie Database User: $DB_USER"
echo "Mealie Database Password: $DB_PASS"
echo "Mealie Database Name: $DB_NAME"
} >>~/mealie.creds
msg_ok "Set up Database"
msg_info "Building Frontend"
export NUXT_TELEMETRY_DISABLED=1
cd /opt/mealie/frontend
$STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
$STD yarn generate
msg_ok "Built Frontend"
msg_info "Copying Built Frontend into Backend Package"
cp -r /opt/mealie/frontend/dist /opt/mealie/mealie/frontend
msg_ok "Copied Frontend"
msg_info "Preparing Backend (Poetry)"
$STD uv venv /opt/mealie/.venv
$STD /opt/mealie/.venv/bin/python -m ensurepip --upgrade
$STD /opt/mealie/.venv/bin/python -m pip install --upgrade pip
$STD /opt/mealie/.venv/bin/pip install uv
cd /opt/mealie
$STD /opt/mealie/.venv/bin/uv pip install poetry==2.0.1
$STD /opt/mealie/.venv/bin/poetry self add "poetry-plugin-export>=1.9"
msg_ok "Prepared Poetry"
msg_info "Writing Environment File"
cat <<EOF >/opt/mealie/mealie.env
HOST=0.0.0.0
PORT=9000
DB_ENGINE=postgres
POSTGRES_SERVER=localhost
POSTGRES_PORT=5432
POSTGRES_USER=${DB_USER}
POSTGRES_PASSWORD=${DB_PASS}
POSTGRES_DB=${DB_NAME}
NLTK_DATA=/nltk_data
PRODUCTION=true
STATIC_FILES=/opt/mealie/frontend/dist
EOF
msg_ok "Wrote Environment File"
msg_info "Creating Start Script"
cat <<'EOF' >/opt/mealie/start.sh
#!/bin/bash
set -a
source /opt/mealie/mealie.env
set +a
exec /opt/mealie/.venv/bin/mealie
EOF
chmod +x /opt/mealie/start.sh
msg_ok "Created Start Script"
msg_info "Building Mealie Backend Wheel"
cd /opt/mealie
$STD /opt/mealie/.venv/bin/poetry build --output dist
MEALIE_VERSION=$(/opt/mealie/.venv/bin/poetry version --short)
$STD /opt/mealie/.venv/bin/poetry export --only=main --extras=pgsql --output=dist/requirements.txt
echo "mealie[pgsql]==$MEALIE_VERSION \\" >>dist/requirements.txt
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.whl | tail -n1 | tr -d '\n' >>dist/requirements.txt
echo " \\" >>dist/requirements.txt
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.tar.gz | tail -n1 >>dist/requirements.txt
msg_ok "Built Wheel + Requirements"
msg_info "Installing Mealie via uv"
cd /opt/mealie
$STD /opt/mealie/.venv/bin/uv pip install --require-hashes -r /opt/mealie/dist/requirements.txt --find-links dist
msg_ok "Installed Mealie"
msg_info "Downloading NLTK Data"
mkdir -p /nltk_data/
$STD /opt/mealie/.venv/bin/python -m nltk.downloader -d /nltk_data averaged_perceptron_tagger_eng
msg_ok "Downloaded NLTK Data"
msg_info "Set Symbolic Links for Mealie"
ln -sf /opt/mealie/.venv/bin/mealie /usr/local/bin/mealie
ln -sf /opt/mealie/.venv/bin/poetry /usr/local/bin/poetry
msg_ok "Set Symbolic Links"
msg_info "Creating Systemd Service"
cat <<EOF >/etc/systemd/system/mealie.service
[Unit]
Description=Mealie Backend Server
After=network.target postgresql.service
[Service]
User=root
WorkingDirectory=/opt/mealie
ExecStart=/opt/mealie/start.sh
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now mealie
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

@@ -15,7 +15,7 @@ update_os
msg_info "Installing Mosquitto MQTT Broker"
source /etc/os-release
curl -fsSL http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key >/usr/share/keyrings/mosquitto-repo.gpg.key
curl -fsSL http://repo.mosquitto.org/debian/mosquitto-repo.gpg >/usr/share/keyrings/mosquitto-repo.gpg.key
chmod go+r /usr/share/keyrings/mosquitto-repo.gpg.key
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mosquitto-repo.gpg.key] http://repo.mosquitto.org/debian ${VERSION_CODENAME} main" >/etc/apt/sources.list.d/mosquitto.list
$STD apt-get update

View File

@@ -32,9 +32,8 @@ $STD apt-get install -y \
python3-cffi \
python3-certbot \
python3-certbot-dns-cloudflare
$STD pip3 install certbot-dns-multi
$STD pip3 install --break-system-packages certbot-dns-multi
$STD python3 -m venv /opt/certbot/
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
msg_ok "Installed Python Dependencies"
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
@@ -85,8 +84,6 @@ else
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
fi
sed -i 's|"fork-me": ".*"|"fork-me": "Proxmox VE Helper-Scripts"|' frontend/js/i18n/messages.json
sed -i "s|https://github.com.*source=nginx-proxy-manager|https://helper-scripts.com|g" frontend/js/app/ui/footer/main.ejs
sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
for NGINX_CONF in $NGINX_CONFS; do

View File

@@ -40,7 +40,7 @@ ENV=prod
ENABLE_OLLAMA_API=false
OLLAMA_BASE_URL=http://0.0.0.0:11434
EOF
$STD npm install
$STD npm install --force
export NODE_OPTIONS="--max-old-space-size=3584"
$STD npm run build
msg_ok "Installed Open WebUI"

View File

@@ -14,22 +14,17 @@ setting_up_container
network_check
update_os
NODE_VERSION="22" setup_nodejs
msg_info "Installing NUT"
$STD apt-get install -y nut-client
msg_ok "Installed NUT"
msg_info "Installing Peanut"
RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz"
mkdir -p /opt/peanut
tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1
rm peanut.tar.gz
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
msg_info "Setup Peanut"
cd /opt/peanut
$STD npm install -g pnpm
$STD pnpm i
$STD pnpm run build
$STD pnpm run build:local
cp -r .next/static .next/standalone/.next/
mkdir -p /opt/peanut/.next/standalone/config
mkdir -p /etc/peanut/
@@ -40,7 +35,7 @@ NUT_HOST: 0.0.0.0
NUT_PORT: 3493
EOF
ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
msg_ok "Installed Peanut"
msg_ok "Setup Peanut"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/peanut.service

View File

@@ -45,12 +45,12 @@ fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/o
msg_info "Configuring PLANKA"
LOCAL_IP=$(hostname -I | awk '{print $1}')
SECRET_KEY=$(openssl rand -hex 64)
cd /opt/planka/planka
cd /opt/planka
$STD npm install
cp .env.sample .env
sed -i "s#http://localhost:1337#http://$LOCAL_IP:1337#g" /opt/planka/planka/.env
sed -i "s#postgres@localhost#planka:$DB_PASS@localhost#g" /opt/planka/planka/.env
sed -i "s#notsecretkey#$SECRET_KEY#g" /opt/planka/planka/.env
sed -i "s#http://localhost:1337#http://$LOCAL_IP:1337#g" /opt/planka/.env
sed -i "s#postgres@localhost#planka:$DB_PASS@localhost#g" /opt/planka/.env
sed -i "s#notsecretkey#$SECRET_KEY#g" /opt/planka/.env
$STD npm run db:init
msg_ok "Configured PLANKA"
@@ -84,7 +84,7 @@ Description=planka Service
After=network.target
[Service]
WorkingDirectory=/opt/planka/planka
WorkingDirectory=/opt/planka
ExecStart=/usr/bin/npm start --prod
Restart=always

View File

@@ -3,7 +3,7 @@
# Copyright (c) 2021-2025 community-scripts ORG
# Author: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://rxresu.me
# Source: https://rxresume.org
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
@@ -32,19 +32,16 @@ $STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME to $DB_
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
msg_ok "Set up Database"
msg_info "Installing ${APPLICATION}"
msg_info "Installing $APPLICATION"
MINIO_PASS=$(openssl rand -base64 48)
ACCESS_TOKEN=$(openssl rand -base64 48)
REFRESH_TOKEN=$(openssl rand -base64 48)
CHROME_TOKEN=$(openssl rand -hex 32)
LOCAL_IP=$(hostname -I | awk '{print $1}')
TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
RELEASE=$(curl -fsSL https://api.github.com/repos/AmruthPillai/Reactive-Resume/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/AmruthPillai/Reactive-Resume/archive/refs/tags/v${RELEASE}.zip" -o v${RELEASE}.zip
$STD unzip v${RELEASE}.zip
mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION}
cd /opt/${APPLICATION}
corepack enable
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume"
cd /opt/"$APPLICATION"
export CI="true"
export PUPPETEER_SKIP_DOWNLOAD="true"
export NODE_ENV="production"
@@ -53,13 +50,13 @@ $STD pnpm install --frozen-lockfile
$STD pnpm run build
$STD pnpm install --prod --frozen-lockfile
$STD pnpm run prisma:generate
msg_ok "Installed ${APPLICATION}"
msg_ok "Installed $APPLICATION"
msg_info "Installing Browserless (Patience)"
cd /tmp
curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v${TAG}.zip -o v${TAG}.zip
$STD unzip v${TAG}.zip
mv browserless-${TAG} /opt/browserless
curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v"$TAG".zip -o v"$TAG".zip
$STD unzip v"$TAG".zip
mv browserless-"$TAG" /opt/browserless
cd /opt/browserless
$STD npm install
rm -rf src/routes/{chrome,edge,firefox,webkit}
@@ -77,9 +74,10 @@ MINIO_ROOT_PASSWORD="${MINIO_PASS}"
MINIO_VOLUMES=/opt/minio
MINIO_OPTS="--address :9000 --console-address 127.0.0.1:9001"
EOF
cat <<EOF >/opt/${APPLICATION}/.env
cat <<EOF >/opt/"$APPLICATION"/.env
NODE_ENV=production
PORT=3000
# for use behind a reverse proxy, use your FQDN for PUBLIC_URL and STORAGE_URL
PUBLIC_URL=http://${LOCAL_IP}:3000
STORAGE_URL=http://${LOCAL_IP}:9000/rxresume
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}?schema=public
@@ -116,14 +114,13 @@ HOST=localhost
PORT=8080
TOKEN=${CHROME_TOKEN}
EOF
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
{
echo "${APPLICATION} Credentials"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
echo "Database Name: $DB_NAME"
echo "Minio Root Password: ${MINIO_PASS}"
} >>~/${APPLICATION}.creds
} >>~/"$APPLICATION".creds
msg_ok "Configured applications"
msg_info "Creating Services"
@@ -136,7 +133,7 @@ WorkingDirectory=/usr/local/bin
EnvironmentFile=/opt/minio/.env
EOF
cat <<EOF >/etc/systemd/system/${APPLICATION}.service
cat <<EOF >/etc/systemd/system/"$APPLICATION".service
[Unit]
Description=${APPLICATION} Service
After=network.target postgresql.service minio.service
@@ -167,15 +164,14 @@ Restart=unless-stopped
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now minio.service ${APPLICATION}.service browserless.service
systemctl enable -q --now minio.service "$APPLICATION".service browserless.service
msg_ok "Created Services"
motd_ssh
customize
msg_info "Cleaning up"
rm -f /tmp/v${RELEASE}.zip
rm -f /tmp/v${TAG}.zip
rm -f /tmp/v"$TAG".zip
rm -f /tmp/minio.deb
$STD apt-get -y autoremove
$STD apt-get -y autoclean

View File

@@ -15,7 +15,6 @@ update_os
msg_info "Installing Dependencies (Patience)"
$STD apt-get install -y \
git \
automake \
autoconf \
libtool \
@@ -25,10 +24,26 @@ $STD apt-get install -y \
make \
g++ \
unpaper \
fonts-urw-base35 \
qpdf \
poppler-utils
msg_ok "Installed Dependencies"
PYTHON_VERSION="3.12" setup_uv
JAVA_VERSION="21" setup_java
read -r -p "${TAB3}Do you want to Stirling-PDF with Login? (no/n = without Login) [Y/n] " response
response=${response,,} # Convert to lowercase
login_mode="false"
if [[ "$response" == "y" || "$response" == "yes" || -z "$response" ]]; then
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF-with-login.jar"
mv /opt/Stirling-PDF/Stirling-PDF-with-login.jar /opt/Stirling-PDF/Stirling-PDF.jar
touch ~/.Stirling-PDF-login
login_mode="true"
else
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF.jar"
fi
msg_info "Installing LibreOffice Components"
$STD apt-get install -y \
libreoffice-writer \
@@ -37,32 +52,35 @@ $STD apt-get install -y \
libreoffice-core \
libreoffice-common \
libreoffice-base-core \
python3-uno
libreoffice-script-provider-python \
libreoffice-java-common \
unoconv \
pngquant \
weasyprint
msg_ok "Installed LibreOffice Components"
msg_info "Installing Python Dependencies"
$STD apt-get install -y \
python3 \
python3-pip
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
$STD pip3 install \
uno \
mkdir -p /tmp/stirling-pdf
$STD uv venv /opt/.venv
export PATH="/opt/.venv/bin:$PATH"
source /opt/.venv/bin/activate
$STD uv pip install --upgrade pip
$STD uv pip install \
opencv-python-headless \
unoconv \
pngquant \
WeasyPrint
ocrmypdf \
pillow \
pdf2image
$STD apt-get install -y python3-uno python3-pip
$STD pip3 install --break-system-packages unoserver
ln -sf /opt/.venv/bin/python3 /usr/local/bin/python3
ln -sf /opt/.venv/bin/pip /usr/local/bin/pip
msg_ok "Installed Python Dependencies"
msg_info "Installing Azul Zulu"
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 "/zulu-repo_1.0.0-3_all.deb"
$STD dpkg -i zulu-repo_1.0.0-3_all.deb
$STD apt-get update
$STD apt-get -y install zulu17-jdk
msg_ok "Installed Azul Zulu"
msg_info "Installing JBIG2"
$STD git clone https://github.com/agl/jbig2enc /opt/jbig2enc
$STD curl -fsSL -o /tmp/jbig2enc.tar.gz https://github.com/agl/jbig2enc/archive/refs/tags/0.30.tar.gz
mkdir -p /opt/jbig2enc
tar -xzf /tmp/jbig2enc.tar.gz -C /opt/jbig2enc --strip-components=1
cd /opt/jbig2enc
$STD bash ./autogen.sh
$STD bash ./configure
@@ -74,25 +92,46 @@ msg_info "Installing Language Packs (Patience)"
$STD apt-get install -y 'tesseract-ocr-*'
msg_ok "Installed Language Packs"
msg_info "Installing Stirling-PDF (Additional Patience)"
RELEASE=$(curl -fsSL https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v${RELEASE}.tar.gz" -o "v${RELEASE}.tar.gz"
tar -xzf v${RELEASE}.tar.gz
cd Stirling-PDF-$RELEASE
chmod +x ./gradlew
$STD ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube
mkdir -p /opt/Stirling-PDF
touch /opt/Stirling-PDF/.env
mv ./stirling-pdf/build/libs/*.jar /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar
mv scripts /opt/Stirling-PDF/
mv pipeline /opt/Stirling-PDF/
mv stirling-pdf/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/
ln -s /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
ln -s /usr/share/tesseract-ocr/5/tessdata/ /usr/share/tessdata
msg_ok "Installed Stirling-PDF"
msg_info "Creating Environment Variables"
cat <<EOF >/opt/Stirling-PDF/.env
# Java tuning
JAVA_BASE_OPTS="-XX:+UnlockExperimentalVMOptions -XX:MaxRAMPercentage=75 -XX:InitiatingHeapOccupancyPercent=20 -XX:+G1PeriodicGCInvokesConcurrent -XX:G1PeriodicGCInterval=10000 -XX:+UseStringDeduplication -XX:G1PeriodicGCSystemLoadThreshold=70"
JAVA_CUSTOM_OPTS=""
# LibreOffice
PATH=/opt/.venv/bin:/usr/lib/libreoffice/program:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
UNO_PATH=/usr/lib/libreoffice/program
URE_BOOTSTRAP=file:///usr/lib/libreoffice/program/fundamentalrc
PYTHONPATH=/usr/lib/libreoffice/program:/opt/.venv/lib/python3.12/site-packages
LD_LIBRARY_PATH=/usr/lib/libreoffice/program
STIRLING_TEMPFILES_DIRECTORY=/tmp/stirling-pdf
TMPDIR=/tmp/stirling-pdf
TEMP=/tmp/stirling-pdf
TMP=/tmp/stirling-pdf
# Paths
PATH=/opt/.venv/bin:/usr/lib/libreoffice/program:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
EOF
if [[ "$login_mode" == "true" ]]; then
cat <<EOF >>/opt/Stirling-PDF/.env
# activate Login
DISABLE_ADDITIONAL_FEATURES=false
SECURITY_ENABLELOGIN=true
# login credentials
SECURITY_INITIALLOGIN_USERNAME=admin
SECURITY_INITIALLOGIN_PASSWORD=stirling
EOF
fi
msg_ok "Created Environment Variables"
msg_info "Refreshing Font Cache"
$STD fc-cache -fv
msg_ok "Font Cache Updated"
msg_info "Creating Service"
# Create LibreOffice listener service
cat <<EOF >/etc/systemd/system/libreoffice-listener.service
[Unit]
Description=LibreOffice Headless Listener Service
@@ -109,14 +148,6 @@ Restart=always
WantedBy=multi-user.target
EOF
# Set up environment variables
cat <<EOF >/opt/Stirling-PDF/.env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/libreoffice/program
UNO_PATH=/usr/lib/libreoffice/program
PYTHONPATH=/usr/lib/python3/dist-packages:/usr/lib/libreoffice/program
LD_LIBRARY_PATH=/usr/lib/libreoffice/program
EOF
cat <<EOF >/etc/systemd/system/stirlingpdf.service
[Unit]
Description=Stirling-PDF service
@@ -139,16 +170,32 @@ RestartSec=10
WantedBy=multi-user.target
EOF
# Enable and start services
cat <<EOF >/etc/systemd/system/unoserver.service
[Unit]
Description=UnoServer RPC Interface
After=libreoffice-listener.service
Requires=libreoffice-listener.service
[Service]
Type=simple
ExecStart=/usr/local/bin/unoserver --port 2003 --interface 127.0.0.1
Restart=always
EnvironmentFile=/opt/Stirling-PDF/.env
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now libreoffice-listener
systemctl enable -q --now stirlingpdf
systemctl enable -q --now unoserver
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
rm -rf v${RELEASE}.tar.gz /zulu-repo_1.0.0-3_all.deb
rm -f /tmp/jbig2enc.tar.gz
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -0,0 +1,56 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: tremor021 (Slaviša Arežina)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://teamspeak.com/en/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | grep -oP 'teamspeak3-server_linux_amd64-\K[0-9]+\.[0-9]+\.[0-9]+' | head -1)
msg_info "Setting up Teamspeak Server"
curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2
tar -xf ./ts3server.tar.bz2
mv teamspeak3-server_linux_amd64/ /opt/teamspeak-server/
touch /opt/teamspeak-server/.ts3server_license_accepted
echo "${RELEASE}" >~/.teamspeak-server
msg_ok "Setup Teamspeak Server"
msg_info "Creating service"
cat <<EOF >/etc/systemd/system/teamspeak-server.service
[Unit]
Description=TeamSpeak3 Server
Wants=network-online.target
After=network.target
[Service]
WorkingDirectory=/opt/teamspeak-server
User=root
Type=forking
ExecStart=/opt/teamspeak-server/ts3server_startscript.sh start
ExecStop=/opt/teamspeak-server/ts3server_startscript.sh stop
ExecReload=/opt/teamspeak-server/ts3server_startscript.sh restart
Restart=always
RestartSec=15
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now teamspeak-server
msg_ok "Created service"
motd_ssh
customize
msg_info "Cleaning up"
rm -f ~/ts3server.tar.bz*
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -20,6 +20,8 @@ $STD apt-get install -y \
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "threadfin" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64"
mv /root/.threadfin /root/.threadfin_version
mkdir -p /root/.threadfin
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/threadfin.service

View File

@@ -192,7 +192,6 @@ base_settings() {
GATE=""
APT_CACHER=""
APT_CACHER_IP=""
#DISABLEIP6="no"
MTU=""
SD=""
NS=""
@@ -236,25 +235,30 @@ CT_TYPE="${CT_TYPE}"
DISK_SIZE="${DISK_SIZE}"
CORE_COUNT="${CORE_COUNT}"
RAM_SIZE="${RAM_SIZE}"
VERBOSE="${VERBOSE}"
PW="${PW##-password }"
#CT_ID=$NEXTID
HN="${HN}"
BRG="${BRG}"
NET="${NET}"
IPV6_METHOD="${IPV6_METHOD:-none}"
# Set this only if using "IPV6_METHOD=static"
#IPV6STATIC="fd00::1234/64"
GATE="${GATE:-none}"
APT_CACHER_IP="${APT_CACHER_IP:-none}"
DISABLEIP6=""
PW='${PW:-none}'
MTU="${MTU:-1500}"
SD="${SD:-none}"
NS="${NS:-none}"
MAC="${MAC:-none}"
VLAN="${VLAN:-none}"
SSH="${SSH}"
SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}"
VERBOSE="${VERBOSE}"
TAGS="${TAGS:-none}"
VLAN="${VLAN:-none}"
MTU="${MTU:-1500}"
GATE="${GATE:-none}"
SD="${SD:-none}"
MAC="${MAC:-none}"
NS="${NS:-none}"
NET="${NET}"
FUSE="${ENABLE_FUSE}"
ENABLE_FUSE="$ENABLE_FUSE"
ENABLE_TUN="$ENABLE_TUN"
EOF
echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}"
else
echo -e "${INFO}${BOLD}${RD}Configuration file already exists at ${FILEPATH}${CL}"
@@ -268,24 +272,29 @@ CT_TYPE="${CT_TYPE}"
DISK_SIZE="${DISK_SIZE}"
CORE_COUNT="${CORE_COUNT}"
RAM_SIZE="${RAM_SIZE}"
VERBOSE="${VERBOSE}"
PW="${PW##-password }"
#CT_ID=$NEXTID
HN="${HN}"
BRG="${BRG}"
NET="${NET}"
IPV6_METHOD="${IPV6_METHOD:-none}"
# Set this only if using "IPV6_METHOD=static"
#IPV6STATIC="fd00::1234/64"
GATE="${GATE:-none}"
APT_CACHER_IP="${APT_CACHER_IP:-none}"
DISABLEIP6=""
PW='${PW:-none}'
MTU="${MTU:-1500}"
SD="${SD:-none}"
NS="${NS:-none}"
MAC="${MAC:-none}"
VLAN="${VLAN:-none}"
SSH="${SSH}"
SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}"
VERBOSE="${VERBOSE}"
TAGS="${TAGS:-none}"
VLAN="${VLAN:-none}"
MTU="${MTU:-1500}"
GATE="${GATE:-none}"
SD="${SD:-none}"
MAC="${MAC:-none}"
NS="${NS:-none}"
NET="${NET}"
FUSE="${ENABLE_FUSE}"
ENABLE_FUSE="$ENABLE_FUSE"
ENABLE_TUN="$ENABLE_TUN"
EOF
echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}"
else
@@ -667,13 +676,6 @@ advanced_settings() {
fi
fi
# if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "IPv6" --yesno "Disable IPv6?" 10 58); then
# DISABLEIP6="yes"
# else
# DISABLEIP6="no"
# fi
# echo -e "${DISABLEIPV6}${BOLD}${DGN}Disable IPv6: ${BGN}$DISABLEIP6${CL}"
if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default [The MTU of your selected vmbr, default is 1500])" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then
if [ -z "$MTU1" ]; then
MTU1="Default"
@@ -815,7 +817,6 @@ DIAGNOSTICS=yes
#"ram_size"
#"os_type"
#"os_version"
#"disableip6"
#"nsapp"
#"method"
#"pve_version"
@@ -842,7 +843,6 @@ DIAGNOSTICS=no
#"ram_size"
#"os_type"
#"os_version"
#"disableip6"
#"nsapp"
#"method"
#"pve_version"
@@ -875,20 +875,24 @@ install_script() {
header_info
while true; do
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --menu "Choose an option:" \
18 60 6 \
TMP_CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" \
--title "SETTINGS" \
--menu "Choose an option:" 20 60 6 \
"1" "Default Settings" \
"2" "Default Settings (with verbose)" \
"3" "Advanced Settings" \
"4" "Use Config File" \
"5" "Diagnostic Settings" \
"6" "Exit" --nocancel --default-item "1" 3>&1 1>&2 2>&3)
"6" "Exit" \
--default-item "1" 3>&1 1>&2 2>&3) || true
if [ $? -ne 0 ]; then
echo -e "${CROSS}${RD} Menu canceled. Exiting.${CL}"
if [ -z "$TMP_CHOICE" ]; then
echo -e "\n${CROSS}${RD}Menu canceled. Exiting script.${CL}\n"
exit 0
fi
CHOICE="$TMP_CHOICE"
case $CHOICE in
1)
header_info
@@ -943,11 +947,11 @@ install_script() {
;;
6)
echo -e "${CROSS}${RD}Exiting.${CL}"
echo -e "\n${CROSS}${RD}Script terminated. Have a great day!${CL}\n"
exit 0
;;
*)
echo -e "${CROSS}${RD}Invalid option, please try again.${CL}"
echo -e "\n${CROSS}${RD}Invalid option, please try again.${CL}\n"
;;
esac
done
@@ -1064,7 +1068,6 @@ build_container() {
export CACHER="$APT_CACHER"
export CACHER_IP="$APT_CACHER_IP"
export tz="$timezone"
#export DISABLEIPV6="$DISABLEIP6"
export APPLICATION="$APP"
export app="$NSAPP"
export PASSWORD="$PW"
@@ -1142,64 +1145,48 @@ EOF
echo ""
msg_custom "⚙️ " "\e[96m" "Configuring VAAPI passthrough for LXC container"
if [ "$CT_TYPE" != "0" ]; then
msg_custom "⚠️ " "\e[33m" "Container is unprivileged VAAPI passthrough may not work without additional host configuration (e.g., idmap)."
fi
msg_custom " " "\e[96m" "VAAPI enables GPU hardware acceleration (e.g., for video transcoding in Jellyfin or Plex)."
echo ""
read -rp "➤ Automatically mount all available VAAPI devices? [Y/n]: " VAAPI_ALL
if [[ "$VAAPI_ALL" =~ ^[Yy]$|^$ ]]; then
# Mount all devices automatically
if [[ -e /dev/dri/renderD128 ]]; then
if [ "$CT_TYPE" == "0" ]; then
# PRV Container → alles zulässig
[[ -e /dev/dri/renderD128 ]] && {
echo "lxc.cgroup2.devices.allow: c 226:128 rwm" >>"$LXC_CONFIG"
echo "lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file" >>"$LXC_CONFIG"
fi
if [[ -e /dev/dri/card0 ]]; then
}
[[ -e /dev/dri/card0 ]] && {
echo "lxc.cgroup2.devices.allow: c 226:0 rwm" >>"$LXC_CONFIG"
echo "lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file" >>"$LXC_CONFIG"
fi
if [[ -e /dev/fb0 ]]; then
}
[[ -e /dev/fb0 ]] && {
echo "lxc.cgroup2.devices.allow: c 29:0 rwm" >>"$LXC_CONFIG"
echo "lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file" >>"$LXC_CONFIG"
fi
if [[ -d /dev/dri ]]; then
}
[[ -d /dev/dri ]] && {
echo "lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir" >>"$LXC_CONFIG"
fi
}
else
# Manual selection per device
if [[ -e /dev/dri/renderD128 ]]; then
read -rp "➤ Mount /dev/dri/renderD128 (GPU rendering)? [y/N]: " MOUNT_D128
if [[ "$MOUNT_D128" =~ ^[Yy]$ ]]; then
echo "lxc.cgroup2.devices.allow: c 226:128 rwm" >>"$LXC_CONFIG"
echo "lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file" >>"$LXC_CONFIG"
# UNPRV Container → nur devX für UI
[[ -e /dev/dri/card0 ]] && echo "dev0: /dev/dri/card0,gid=44" >>"$LXC_CONFIG"
[[ -e /dev/dri/card1 ]] && echo "dev0: /dev/dri/card1,gid=44" >>"$LXC_CONFIG"
[[ -e /dev/dri/renderD128 ]] && echo "dev1: /dev/dri/renderD128,gid=104" >>"$LXC_CONFIG"
fi
fi
fi
if [ "$CT_TYPE" == "1" ] && [ "$is_vaapi_app" == "true" ]; then
if [[ -e /dev/dri/card0 ]]; then
read -rp "➤ Mount /dev/dri/card0 (GPU hardware interface)? [y/N]: " MOUNT_CARD0
if [[ "$MOUNT_CARD0" =~ ^[Yy]$ ]]; then
echo "lxc.cgroup2.devices.allow: c 226:0 rwm" >>"$LXC_CONFIG"
echo "lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file" >>"$LXC_CONFIG"
fi
fi
if [[ -e /dev/fb0 ]]; then
read -rp "➤ Mount /dev/fb0 (Framebuffer, GUI)? [y/N]: " MOUNT_FB0
if [[ "$MOUNT_FB0" =~ ^[Yy]$ ]]; then
echo "lxc.cgroup2.devices.allow: c 29:0 rwm" >>"$LXC_CONFIG"
echo "lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file" >>"$LXC_CONFIG"
fi
fi
if [[ -d /dev/dri ]]; then
echo "lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir" >>"$LXC_CONFIG"
echo "dev0: /dev/dri/card0,gid=44" >>"$LXC_CONFIG"
elif [[ -e /dev/dri/card1 ]]; then
echo "dev0: /dev/dri/card1,gid=44" >>"$LXC_CONFIG"
fi
if [[ -e /dev/dri/renderD128 ]]; then
echo "dev1: /dev/dri/renderD128,gid=104" >>"$LXC_CONFIG"
fi
fi

View File

@@ -269,6 +269,7 @@ 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}"
GATE=""
elif [[ "$NET" =~ $ip_cidr_regex ]]; then
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}$NET${CL}"
if [ ! -z "$GATE" ]; then
@@ -446,6 +447,22 @@ config_file() {
fi
fi
if [[ "$IPV6_METHOD" == "static" ]]; then
if [[ -n "$IPV6STATIC" ]]; then
IP6=",ip6=${IPV6STATIC}"
echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}${IPV6STATIC}${CL}"
else
msg_error "IPV6_METHOD is set to static but IPV6STATIC is empty"
exit
fi
elif [[ "$IPV6_METHOD" == "auto" ]]; then
IP6=",ip6=auto"
echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}auto${CL}"
else
IP6=""
echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}none${CL}"
fi
if [[ -n "${SD-}" ]]; then
if [[ "$SD" == "none" ]]; then
SD=""
@@ -622,6 +639,24 @@ config_file() {
echo -e "${FUSE}${BOLD}${DGN}Enable FUSE: ${BGN}$ENABLE_FUSE${CL}"
fi
if [[ -n "$ENABLE_TUN" ]]; then
if [[ "$ENABLE_TUN" == "yes" ]]; then
echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}Yes${CL}"
elif [[ "$ENABLE_TUN" == "no" ]]; then
echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}No${CL}"
else
msg_error "Enable TUN needs to be 'yes' or 'no', was ${ENABLE_TUN}"
exit
fi
else
if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "TUN" --yesno "Enable TUN?" 10 58); then
ENABLE_TUN="yes"
else
ENABLE_TUN="no"
fi
echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}$ENABLE_TUN${CL}"
fi
if [[ -n "${VERBOSE-}" ]]; then
if [[ "$VERBOSE" == "yes" ]]; then
echo -e "${SEARCH}${BOLD}${DGN}Verbose Mode: ${BGN}$VERBOSE${CL}"

View File

@@ -355,7 +355,6 @@ msg_custom() {
[[ -z "$msg" ]] && return
stop_spinner
echo -e "${BFR:-} ${symbol} ${color}${msg}${CL:-\e[0m}"
printf "\r\033[K\e[?25h\n"
}
run_container_safe() {

View File

@@ -253,7 +253,7 @@ fi
TEMPLATE_SEARCH="${PCT_OSTYPE}-${PCT_OSVERSION:-}"
msg_info "Updating LXC Template List"
if ! timeout 15 pveam update >/dev/null 2>&1; then
if ! pveam update >/dev/null 2>&1; then
TEMPLATE_FALLBACK=$(pveam list "$TEMPLATE_STORAGE" | awk "/$TEMPLATE_SEARCH/ {print \$2}" | sort -t - -k 2 -V | tail -n1)
if [[ -z "$TEMPLATE_FALLBACK" ]]; then
msg_error "Failed to update LXC template list and no local template matching '$TEMPLATE_SEARCH' found."
@@ -284,7 +284,7 @@ if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE" || ! zstdcat "$TEMPLAT
for attempt in {1..3}; do
msg_info "Attempt $attempt: Downloading LXC template..."
if timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null 2>&1; then
if pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null 2>&1; then
msg_ok "Template download successful."
break
fi

View File

@@ -54,10 +54,15 @@ function setup_nodejs() {
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_VERSION}.x nodistro main" \
>/etc/apt/sources.list.d/nodesource.list
sleep 2
if ! apt-get update >/dev/null 2>&1; then
msg_warn "APT update failed retrying in 5s"
sleep 5
if ! apt-get update >/dev/null 2>&1; then
msg_error "Failed to update APT repositories after adding NodeSource"
exit 1
fi
fi
if ! apt-get install -y nodejs >/dev/null 2>&1; then
msg_error "Failed to install Node.js ${NODE_VERSION} from NodeSource"
@@ -368,25 +373,6 @@ function setup_mysql() {
# PHP_MAX_EXECUTION_TIME - (default: 300)
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
# Installs PHP with selected modules and configures Apache/FPM support.
#
# Description:
# - Adds Sury PHP repo if needed
# - Installs default and user-defined modules
# - Patches php.ini for CLI, Apache, and FPM as needed
#
# Variables:
# PHP_VERSION - PHP version to install (default: 8.4)
# PHP_MODULE - Additional comma-separated modules
# PHP_APACHE - Set YES to enable PHP with Apache
# PHP_FPM - Set YES to enable PHP-FPM
# PHP_MEMORY_LIMIT - (default: 512M)
# PHP_UPLOAD_MAX_FILESIZE - (default: 128M)
# PHP_POST_MAX_SIZE - (default: 128M)
# PHP_MAX_EXECUTION_TIME - (default: 300)
# ------------------------------------------------------------------------------
function setup_php() {
local PHP_VERSION="${PHP_VERSION:-8.4}"
local PHP_MODULE="${PHP_MODULE:-}"
@@ -451,7 +437,7 @@ function setup_php() {
MODULE_LIST+=" php${PHP_VERSION}-fpm"
fi
if [[ "$PHP_APACHE" == "YES" ]]; then
$STD apt-get install -y apache2
$STD apt-get install -y apache2 libapache2-mod-php${PHP_VERSION}
$STD systemctl restart apache2 || true
fi
@@ -459,6 +445,8 @@ function setup_php() {
if [[ -f /etc/apache2/mods-enabled/php${CURRENT_PHP}.load ]]; then
$STD a2dismod php${CURRENT_PHP} || true
fi
$STD a2enmod php${PHP_VERSION}
$STD systemctl restart apache2 || true
fi
if [[ "$PHP_FPM" == "YES" ]] && [[ -n "$CURRENT_PHP" ]]; then
@@ -934,7 +922,6 @@ function fetch_and_deploy_gh_release() {
break
;;
esac
done
[[ -z "$asset_url" ]] && {
@@ -950,39 +937,42 @@ function fetch_and_deploy_gh_release() {
return 1
}
local unpack_tmp
unpack_tmp=$(mktemp -d)
mkdir -p "$target"
if [[ "$filename" == *.zip ]]; then
if ! command -v unzip &>/dev/null; then
$STD apt-get install -y unzip
fi
local top_level_entries
top_level_entries=$(unzip -l "$tmpdir/$filename" | awk '{print $4}' | grep -v '^$' | cut -d/ -f1 | sort -u)
if [[ $(wc -l <<<"$top_level_entries") -eq 1 ]]; then
unzip -q "$tmpdir/$filename" -d "$tmpdir/unzip"
shopt -s dotglob nullglob
cp -r "$tmpdir/unzip/"* "$target/"
shopt -u dotglob nullglob
else
unzip -q "$tmpdir/$filename" -d "$target"
fi
unzip -q "$tmpdir/$filename" -d "$unpack_tmp"
elif [[ "$filename" == *.tar.* ]]; then
local top_level_entries
top_level_entries=$(tar -tf "$tmpdir/$filename" | cut -d/ -f1 | sort -u)
if [[ $(wc -l <<<"$top_level_entries") -eq 1 ]]; then
tar --strip-components=1 -xf "$tmpdir/$filename" -C "$target"
else
tar -xf "$tmpdir/$filename" -C "$target"
fi
tar -xf "$tmpdir/$filename" -C "$unpack_tmp"
else
msg_error "Unsupported archive format: $filename"
rm -rf "$tmpdir"
rm -rf "$tmpdir" "$unpack_tmp"
return 1
fi
local top_dirs
top_dirs=$(find "$unpack_tmp" -mindepth 1 -maxdepth 1 -type d | wc -l)
if [[ "$top_dirs" -eq 1 ]]; then
# Strip leading folder
local inner_dir
inner_dir=$(find "$unpack_tmp" -mindepth 1 -maxdepth 1 -type d)
shopt -s dotglob nullglob
cp -r "$inner_dir"/* "$target/"
shopt -u dotglob nullglob
else
# Copy all contents
shopt -s dotglob nullglob
cp -r "$unpack_tmp"/* "$target/"
shopt -u dotglob nullglob
fi
rm -rf "$unpack_tmp"
### Singlefile Mode ###
elif [[ "$mode" == "singlefile" ]]; then
local pattern="${6%\"}"
@@ -1782,6 +1772,7 @@ function setup_ffmpeg() {
libx264-dev libx265-dev libvpx-dev libmp3lame-dev
libfreetype6-dev libass-dev libopus-dev libvorbis-dev
libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev
libva-dev libdrm-dev
)
;;
*)
@@ -1818,6 +1809,7 @@ function setup_ffmpeg() {
if [[ "$TYPE" == "full" ]]; then
args+=(--enable-libx265 --enable-libdav1d --enable-zlib)
args+=(--enable-vaapi --enable-libdrm)
fi
if [[ ${#args[@]} -eq 0 ]]; then

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