Compare commits

...

111 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
d19130d8f1 Update CHANGELOG.md (#6169)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-23 00:14:23 +00:00
community-scripts-pr-app[bot]
b36f982fc2 Update versions.json (#6168)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-23 02:14:04 +02:00
community-scripts-pr-app[bot]
d67fa6cf38 Update CHANGELOG.md (#6166)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 18:49:25 +00:00
community-scripts-pr-app[bot]
4201ab58ab Update CHANGELOG.md (#6163)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 17:09:39 +00:00
Denis Chernov
0f3b95b3ff Fixed the previous fix on anti-nag hook, propagated fixed to other ProxMox products and fixed 8.0 compatibility (#6162) 2025-07-22 19:09:14 +02:00
Bram Suurd
feea82e0ba Add GitHub Actions workflow to validate JSON files in the frontend directory (#6152)
* Add GitHub Actions workflow to validate JSON files in the frontend directory

* test new github workflow by invalidating script

* Revalidate json script to also test workflow

* Refactor GitHub Actions workflow to validate JSON files using Python.

* test github workflow

* Update description in apache-tomcat.json for clarity and consistency.

* Consolidate JSON validation workflow: Migrate test-jsons.yml functionality into frontend-cicd.yml, enhancing CI process by validating JSON files in the public directory with Python.

* test to see if workflow fails

* test to see if workflow passes

* testing

* testing to see if workflow runs and works

* test again

* testing to see if it works
2025-07-22 16:00:10 +02:00
community-scripts-pr-app[bot]
0e0c954f0c Update CHANGELOG.md (#6161)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 13:57:17 +00:00
community-scripts-pr-app[bot]
6b74f6247f Update CHANGELOG.md (#6160)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 13:56:51 +00:00
community-scripts-pr-app[bot]
4159ba3970 Update date in json (#6159)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-07-22 13:56:45 +00:00
push-app-to-main[bot]
a53daa3559 Salt (#6116)
* 'Add new script'

* curl

* hdd

* logo

---------

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-22 15:56:22 +02:00
CanbiZ
4b3233d6a8 qf: php 2025-07-22 15:55:56 +02:00
community-scripts-pr-app[bot]
ff51b1e5dc Update CHANGELOG.md (#6157)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 13:53:04 +00:00
TJ
1aab127bdf Update tools.func - typo (#6156)
This was triggered when running the Gitea install script
2025-07-22 15:52:41 +02:00
community-scripts-pr-app[bot]
baf7dff759 Update CHANGELOG.md (#6153)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 13:03:00 +00:00
dependabot[bot]
b4ec04a54f Bump form-data from 4.0.3 to 4.0.4 in /frontend (#6150)
Bumps [form-data](https://github.com/form-data/form-data) from 4.0.3 to 4.0.4.
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v4.0.3...v4.0.4)

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 4.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-22 15:02:33 +02:00
community-scripts-pr-app[bot]
2ee8269684 Update CHANGELOG.md (#6151)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 12:47:13 +00:00
CanbiZ
84860a9893 [core]: Improved LXC Container Startup Handling (#6142)
* [core]: Improved LXC Container Startup Handling

* Update build.func

---------

Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-07-22 14:46:50 +02:00
CanbiZ
ebb7da43c1 Update tools.func 2025-07-22 14:18:34 +02:00
community-scripts-pr-app[bot]
44c584dced Update versions.json (#6149)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 14:05:29 +02:00
community-scripts-pr-app[bot]
2bede5256f Update CHANGELOG.md (#6145)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 11:14:28 +00:00
CanbiZ
2848cf6d6b [core]: tools.func: increase setup_php function (#6141)
* tools.func: increase setup_php function

* better verbose output
2025-07-22 13:14:09 +02:00
community-scripts-pr-app[bot]
bce076161e Update CHANGELOG.md (#6144)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 10:18:15 +00:00
community-scripts-pr-app[bot]
040a15aa3e Update CHANGELOG.md (#6143)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 10:17:58 +00:00
Tobias
5c0cffce6f gitea-mirror: add: migration to 3.0 (#6138) 2025-07-22 12:17:53 +02:00
push-app-to-main[bot]
d552fb86c1 LinkStack (#6137)
* 'Add new script'

* Update linkstack.sh

* Update linkstack.json

* Update linkstack.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-22 12:17:35 +02:00
community-scripts-pr-app[bot]
42af89dd2d Update CHANGELOG.md (#6140)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 08:38:15 +00:00
Jehu Marcos Herrera Puentes
003fc3c080 fix(nginxproxymanager.sh): Set the version number before build. (#6139)
Signed-off-by: JMarcosHP <jehuherrerap@hotmail.com>
2025-07-22 10:37:54 +02:00
community-scripts-pr-app[bot]
a638dc8672 Update CHANGELOG.md (#6135)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-22 06:48:54 +00:00
Tobias
d7668531e7 wallos: add cron in installer for yearly cost (#6133)
* wallos: fix: yearly cost

* Update wallos.sh

* Update wallos.sh

---------

Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-07-22 08:48:29 +02:00
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
56 changed files with 1782 additions and 777 deletions

1
.gitattributes vendored
View File

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

81
.github/workflows/frontend-cicd.yml generated vendored
View File

@@ -24,12 +24,87 @@ concurrency:
cancel-in-progress: false cancel-in-progress: false
jobs: jobs:
build: test-json-files:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: ubuntu-latest runs-on: ubuntu-latest
defaults: defaults:
run: run:
working-directory: frontend # Set default working directory for all run steps working-directory: frontend
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Test JSON files
run: |
python3 << 'EOF'
import json
import glob
import os
import sys
def test_json_files():
# Change to the correct directory
json_dir = "public/json"
if not os.path.exists(json_dir):
print(f"❌ Directory not found: {json_dir}")
return False
# Find all JSON files
pattern = os.path.join(json_dir, "*.json")
json_files = glob.glob(pattern)
if not json_files:
print(f"⚠️ No JSON files found in {json_dir}")
return True
print(f"Testing {len(json_files)} JSON files for valid syntax...")
invalid_files = []
for file_path in json_files:
try:
with open(file_path, 'r', encoding='utf-8') as f:
json.load(f)
print(f"✅ Valid JSON: {file_path}")
except json.JSONDecodeError as e:
print(f"❌ Invalid JSON syntax in: {file_path}")
print(f" Error: {e}")
invalid_files.append(file_path)
except Exception as e:
print(f"⚠️ Error reading: {file_path}")
print(f" Error: {e}")
invalid_files.append(file_path)
print("\n=== JSON Validation Summary ===")
print(f"Total files tested: {len(json_files)}")
print(f"Valid files: {len(json_files) - len(invalid_files)}")
print(f"Invalid files: {len(invalid_files)}")
if invalid_files:
print("\n❌ Found invalid JSON file(s):")
for file_path in invalid_files:
print(f" - {file_path}")
return False
else:
print("\n✅ All JSON files have valid syntax!")
return True
if __name__ == "__main__":
success = test_json_files()
sys.exit(0 if success else 1)
EOF
build:
if: github.repository == 'community-scripts/ProxmoxVE'
needs: test-json-files
runs-on: ubuntu-latest
defaults:
run:
working-directory: frontend
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4

View File

@@ -10,8 +10,138 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-07-23
## 2025-07-22
### 🆕 New Scripts
- Salt ([#6116](https://github.com/community-scripts/ProxmoxVE/pull/6116))
- LinkStack ([#6137](https://github.com/community-scripts/ProxmoxVE/pull/6137))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- tools.func - fix typo for target_file [@tjcomserv](https://github.com/tjcomserv) ([#6156](https://github.com/community-scripts/ProxmoxVE/pull/6156))
- fix(nginxproxymanager.sh): Set the version number before build. [@JMarcosHP](https://github.com/JMarcosHP) ([#6139](https://github.com/community-scripts/ProxmoxVE/pull/6139))
- #### ✨ New Features
- Fixed the previous fix of the anti-nag hook and propagated fixes everywhere [@imcrazytwkr](https://github.com/imcrazytwkr) ([#6162](https://github.com/community-scripts/ProxmoxVE/pull/6162))
- [core]: Improved LXC Container Startup Handling [@MickLesk](https://github.com/MickLesk) ([#6142](https://github.com/community-scripts/ProxmoxVE/pull/6142))
- wallos: add cron in installer for yearly cost [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6133](https://github.com/community-scripts/ProxmoxVE/pull/6133))
- #### 💥 Breaking Changes
- gitea-mirror: add: migration to 3.0 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6138](https://github.com/community-scripts/ProxmoxVE/pull/6138))
- #### 🔧 Refactor
- [core]: tools.func: increase setup_php function [@MickLesk](https://github.com/MickLesk) ([#6141](https://github.com/community-scripts/ProxmoxVE/pull/6141))
### 🌐 Website
- Bump form-data from 4.0.3 to 4.0.4 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#6150](https://github.com/community-scripts/ProxmoxVE/pull/6150))
## 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 ## 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 ## 2025-07-14
### 🆕 New Scripts ### 🆕 New Scripts

View File

@@ -28,8 +28,11 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi 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 ! command -v jq &>/dev/null; then
if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null || cat /opt/2fauth_version.txt 2>/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}" msg_info "Updating $APP to ${RELEASE}"
$STD apt-get update $STD apt-get update
$STD apt-get -y upgrade $STD apt-get -y upgrade
@@ -45,10 +48,11 @@ function update_script() {
$STD apt-get install -y \ $STD apt-get install -y \
lsb-release \ lsb-release \
gnupg2 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 sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
fi fi
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth" fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
setup_composer
mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env" mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage" mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
cd "/opt/2fauth" || return cd "/opt/2fauth" || return

View File

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

View File

@@ -39,6 +39,7 @@ function update_script() {
msg_ok "Backed up data" msg_ok "Backed up data"
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal" fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
setup_composer
msg_info "Configuring Baikal" msg_info "Configuring Baikal"
cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/ cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/

View File

@@ -43,6 +43,7 @@ function update_script() {
msg_ok "Backed up Bar Assistant" msg_ok "Backed up Bar Assistant"
fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/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}" msg_info "Updating ${APP} to ${RELEASE_BARASSISTANT}"
cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.env cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.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

@@ -30,6 +30,10 @@ function update_script() {
systemctl stop emqx systemctl stop emqx
msg_ok "Stopped 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}" msg_info "Downloading EMQX v${RELEASE}"
DEB_FILE="/tmp/emqx-enterprise-${RELEASE}-debian12-amd64.deb" 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" curl -fsSL -o "$DEB_FILE" "https://www.emqx.com/en/downloads/enterprise/v${RELEASE}/emqx-enterprise-${RELEASE}-debian12-amd64.deb"

View File

@@ -26,13 +26,14 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi 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 if [[ "${RELEASE}" != "$(cat ~/.ersatztv 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv ]]; then
msg_info "Stopping ErsatzTV" msg_info "Stopping ErsatzTV"
systemctl stop ersatzTV systemctl stop ersatzTV
msg_ok "Stopped 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" fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
msg_info "Starting ErsatzTV" msg_info "Starting ErsatzTV"
@@ -43,6 +44,29 @@ function update_script() {
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi 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 exit
} }

View File

@@ -40,14 +40,19 @@ function update_script() {
msg_ok "Backed up data" msg_ok "Backed up data"
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip" 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}" msg_info "Updating ${APP} to v${RELEASE}"
rm -rf /opt/firefly/storage rm -rf /opt/firefly/storage
cp /opt/.env /opt/firefly/.env cp /opt/.env /opt/firefly/.env
cp -r /opt/storage /opt/firefly/storage cp -r /opt/storage /opt/firefly/storage
cd /opt/firefly
chown -R www-data:www-data /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 migrate --seed --force
$STD php artisan cache:clear $STD php artisan cache:clear
$STD php artisan view:clear $STD php artisan view:clear

View File

@@ -28,6 +28,26 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
APP_VERSION=$(grep -o '"version": *"[^"]*"' /opt/gitea-mirror/package.json | cut -d'"' -f4)
if [[ $APP_VERSION =~ ^2\. ]]; then
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ VERSION 2.x DETECTED" --yesno \
"WARNING: Version $APP_VERSION detected!\n\nUpdating from version 2.x will CLEAR ALL CONFIGURATION.\n\nThis includes:\n• API tokens\n• User settings\n• Repository configurations\n• All custom settings\n\nDo you want to continue with the update process?" 15 70 --defaultno
then
exit 0
fi
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ FINAL CONFIRMATION" --yesno \
"FINAL WARNING: This update WILL clear all configuration!\n\nBEFORE PROCEEDING, please:\n\n• Copy API tokens to a safe location\n• Backup any custom configurations\n• Note down repository settings\n\nThis action CANNOT be undone!" 18 70 --defaultno
then
whiptail --backtitle "Gitea Mirror Update" --title "Update Cancelled" --msgbox "Update process cancelled. Please backup your configuration before proceeding." 8 60
exit 0
fi
whiptail --backtitle "Gitea Mirror Update" --title "Proceeding with Update" --msgbox \
"Proceeding with version $APP_VERSION update.\n\nAll configuration will be cleared as warned." 8 50
rm -rf /opt/gitea-mirror
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/RayLabsHQ/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/RayLabsHQ/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then

6
ct/headers/cloudreve Normal file
View File

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

6
ct/headers/linkstack Normal file
View File

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

6
ct/headers/salt 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} rm -rf homepage-${RELEASE}
cd /opt/homepage cd /opt/homepage
$STD pnpm install $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_VERSION="v$RELEASE"
export NEXT_PUBLIC_REVISION="source" export NEXT_PUBLIC_REVISION="source"
export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at') export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at')

View File

@@ -27,31 +27,43 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi 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) }') 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 ~/.karakeep && "$RELEASE" == "$(cat ~/.karakeep)" ]]; then
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "${PREV_RELEASE}" ]]; then msg_ok "No update required. ${APP} is already at ${RELEASE}"
exit
fi
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop karakeep-web karakeep-workers karakeep-browser systemctl stop karakeep-web karakeep-workers karakeep-browser
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Updating yt-dlp" msg_info "Updating yt-dlp"
$STD yt-dlp --update-to nightly $STD yt-dlp --update-to nightly
msg_ok "Updated yt-dlp" msg_ok "Updated yt-dlp"
msg_info "Updating ${APP} to v${RELEASE}"
if [[ $(corepack -v) < "0.31.0" ]]; then msg_info "Prepare update"
$STD npm install -g corepack@0.31.0 if [[ -f /opt/${APP}_version.txt && "$(cat /opt/${APP}_version.txt)" < "0.23.0" ]]; then
fi
if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
$STD apt-get install -y graphicsmagick ghostscript $STD apt-get install -y graphicsmagick ghostscript
fi fi
cd /opt
if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
mkdir -p /etc/karakeep mkdir -p /etc/karakeep
mv /opt/karakeep/.env /etc/karakeep/karakeep.env mv /opt/karakeep/.env /etc/karakeep/karakeep.env
fi fi
rm -rf /opt/karakeep rm -rf /opt/karakeep
curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip" msg_ok "Update prepared"
$STD unzip "v${RELEASE}.zip"
mv karakeep-"${RELEASE}" /opt/karakeep 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 cd /opt/karakeep/apps/web
$STD pnpm install --frozen-lockfile $STD pnpm install --frozen-lockfile
$STD pnpm build $STD pnpm build
@@ -60,26 +72,22 @@ function update_script() {
cd /opt/karakeep/apps/cli cd /opt/karakeep/apps/cli
$STD pnpm install --frozen-lockfile $STD pnpm install --frozen-lockfile
$STD pnpm build $STD pnpm build
cd /opt/karakeep/apps/mcp
$STD pnpm install --frozen-lockfile
$STD pnpm build
export DATA_DIR=/opt/karakeep_data export DATA_DIR=/opt/karakeep_data
cd /opt/karakeep/packages/db cd /opt/karakeep/packages/db
$STD pnpm migrate $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_ok "Updated ${APP} to v${RELEASE}"
msg_info "Starting Services" msg_info "Starting Services"
systemctl start karakeep-browser karakeep-workers karakeep-web systemctl start karakeep-browser karakeep-workers karakeep-web
msg_ok "Started Services" msg_ok "Started Services"
msg_info "Cleaning up" msg_info "Cleaning up"
rm -R /opt/v"${RELEASE}".zip $STD apt-get autoremove -y
echo "${RELEASE}" >/opt/${APP}_version.txt $STD apt-get autoclean -y
msg_ok "Cleaned" msg_ok "Cleaned"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}."
fi
exit exit
} }

43
ct/linkstack.sh Normal file
View File

@@ -0,0 +1,43 @@
#!/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: Omar Minaya | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://linkstack.org/
APP="LinkStack"
var_tags="${var_tags:-os}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-5}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f ~/.linkstack ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
PHP_VERSION="8.3" PHP_MODULE="sqlite3" PHP_APACHE="YES" setup_php
msg_warn "LinkStack should be updated via the user interface."
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

@@ -27,15 +27,34 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if ! command -v pnpm &>/dev/null; then if ! command -v pnpm &>/dev/null; then
msg_info "Installing pnpm" msg_info "Installing pnpm"
#export NODE_OPTIONS=--openssl-legacy-provider #export NODE_OPTIONS=--openssl-legacy-provider
$STD npm install -g pnpm@8.15 $STD npm install -g pnpm@8.15
msg_ok "Installed pnpm" msg_ok "Installed pnpm"
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest | RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
grep "tag_name" | grep "tag_name" |
awk '{print substr($2, 3, length($2)-4) }') 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"
(
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
cd ./frontend || exit
$STD pnpm install
$STD pnpm upgrade
$STD pnpm run build
)
msg_ok "Built Frontend"
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop openresty systemctl stop openresty
systemctl stop npm systemctl stop npm
@@ -50,18 +69,11 @@ function update_script() {
"$STD" /var/cache/nginx "$STD" /var/cache/nginx
msg_ok "Cleaned Old Files" msg_ok "Cleaned Old Files"
msg_info "Downloading NPM v${RELEASE}" msg_info "Setting up Environment"
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"
ln -sf /usr/bin/python3 /usr/bin/python ln -sf /usr/bin/python3 /usr/bin/python
ln -sf /usr/bin/certbot /opt/certbot/bin/certbot ln -sf /usr/bin/certbot /opt/certbot/bin/certbot
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
ln -sf /usr/local/openresty/nginx/ /etc/nginx ln -sf /usr/local/openresty/nginx/ /etc/nginx
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf") NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
for NGINX_CONF in $NGINX_CONFS; do for NGINX_CONF in $NGINX_CONFS; do
@@ -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 $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 fi
mkdir -p /app/global /app/frontend/images 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 backend/* /app
cp -r global/* /app/global cp -r global/* /app/global
$STD python3 -m pip install --no-cache-dir --break-system-packages certbot-dns-cloudflare $STD python3 -m pip install --no-cache-dir --break-system-packages certbot-dns-cloudflare
msg_ok "Setup Enviroment" msg_ok "Setup Environment"
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"
msg_info "Initializing Backend" msg_info "Initializing Backend"
$STD rm -rf /app/config/default.json $STD rm -rf /app/config/default.json
@@ -128,7 +133,7 @@ function update_script() {
} }
EOF EOF
fi fi
cd /app cd /app || exit
$STD pnpm install $STD pnpm install
msg_ok "Initialized Backend" msg_ok "Initialized Backend"

View File

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

View File

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

View File

@@ -28,33 +28,33 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi 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 if [[ "${RELEASE}" != "$(cat ~/.planka 2>/dev/null)" ]] || [[ ! -f ~/.planka ]]; then
msg_info "Stopping $APP" msg_info "Stopping $APP"
systemctl stop planka systemctl stop planka
msg_ok "Stopped $APP" msg_ok "Stopped $APP"
msg_info "Updating $APP to ${RELEASE}" msg_info "Backing up data"
mkdir -p /opt/planka-backup mkdir -p /opt/planka-backup/{favicons,user-avatars,background-images,attachments}
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/.env /opt/planka-backup mv /opt/planka/.env /opt/planka-backup
[ -n "$(ls -A /opt/planka/public/favicons 2>/dev/null)" ] && mv /opt/planka/public/favicons/* /opt/planka-backup/favicons/ [ -d /opt/planka/public/favicons ] && find /opt/planka/public/favicons -maxdepth 1 -type f -exec mv -t /opt/planka-backup/favicons {} +
[ -n "$(ls -A /opt/planka/public/user-avatars 2>/dev/null)" ] && mv /opt/planka/public/user-avatars/* /opt/planka-backup/user-avatars/ [ -d /opt/planka/public/user-avatars ] && find /opt/planka/public/user-avatars -maxdepth 1 -type f -exec mv -t /opt/planka-backup/user-avatars {} +
[ -n "$(ls -A /opt/planka/public/background-images 2>/dev/null)" ] && mv /opt/planka/public/background-images/* /opt/planka-backup/background-images/ [ -d /opt/planka/public/background-images ] && find /opt/planka/public/background-images -maxdepth 1 -type f -exec mv -t /opt/planka-backup/background-images {} +
[ -n "$(ls -A /opt/planka/private/attachments 2>/dev/null)" ] && mv /opt/planka/private/attachments/* /opt/planka-backup/attachments/ [ -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 rm -rf /opt/planka
msg_ok "Backed up data"
fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip" fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip"
cd /opt/planka cd /opt/planka
$STD npm install $STD npm install
msg_info "Restoring data"
mv /opt/planka-backup/.env /opt/planka/ mv /opt/planka-backup/.env /opt/planka/
[ -n "$(ls -A /opt/planka-backup/favicons 2>/dev/null)" ] && mv /opt/planka-backup/favicons/* /opt/planka/public/favicons/ [ -d /opt/planka-backup/favicons ] && find /opt/planka-backup/favicons -maxdepth 1 -type f -exec mv -t /opt/planka/public/favicons {} +
[ -n "$(ls -A /opt/planka-backup/user-avatars 2>/dev/null)" ] && mv /opt/planka-backup/user-avatars/* /opt/planka/public/user-avatars/ [ -d /opt/planka-backup/user-avatars ] && find /opt/planka-backup/user-avatars -maxdepth 1 -type f -exec mv -t /opt/planka/public/user-avatars {} +
[ -n "$(ls -A /opt/planka-backup/background-images 2>/dev/null)" ] && mv /opt/planka-backup/background-images/* /opt/planka/public/background-images/ [ -d /opt/planka-backup/background-images ] && find /opt/planka-backup/background-images -maxdepth 1 -type f -exec mv -t /opt/planka/public/background-images {} +
[ -n "$(ls -A /opt/planka-backup/attachments 2>/dev/null)" ] && mv /opt/planka-backup/attachments/* /opt/planka/private/attachments/ [ -d /opt/planka-backup/attachments ] && find /opt/planka-backup/attachments -maxdepth 1 -type f -exec mv -t /opt/planka/private/attachments {} +
msg_ok "Updated $APP to ${RELEASE}" msg_ok "Restored data"
msg_info "Starting $APP" msg_info "Starting $APP"
systemctl start planka 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 # Copyright (c) 2021-2025 community-scripts ORG
# Author: vhsdream # Author: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://rxresu.me # Source: https://rxresume.org
APP="Reactive-Resume" APP="Reactive-Resume"
var_tags="${var_tags:-documents}" var_tags="${var_tags:-documents}"
@@ -25,23 +25,20 @@ function update_script() {
check_container_resources check_container_resources
if [[ ! -f /etc/systemd/system/Reactive-Resume.service ]]; then if [[ ! -f /etc/systemd/system/Reactive-Resume.service ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No $APP Installation Found!"
exit exit
fi 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) }') 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 [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then if [[ ! -f "$HOME"/.reactive-resume ]] || [[ "$RELEASE" != "$(cat "$HOME"/.reactive-resume)" ]]; then
msg_info "Stopping services" msg_info "Stopping services"
systemctl stop Reactive-Resume systemctl stop Reactive-Resume
msg_ok "Stopped services" 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}" msg_info "Updating $APP to v${RELEASE}"
cp /opt/${APP}/.env /opt/rxresume.env cd /opt/"$APP"
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}
export PUPPETEER_SKIP_DOWNLOAD="true" export PUPPETEER_SKIP_DOWNLOAD="true"
export NEXT_TELEMETRY_DISABLED=1 export NEXT_TELEMETRY_DISABLED=1
export CI="true" export CI="true"
@@ -49,7 +46,7 @@ function update_script() {
$STD pnpm install --frozen-lockfile $STD pnpm install --frozen-lockfile
$STD pnpm run build $STD pnpm run build
$STD pnpm run prisma:generate $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_ok "Updated $APP to v${RELEASE}"
msg_info "Updating Minio" msg_info "Updating Minio"
@@ -62,12 +59,12 @@ function update_script() {
msg_info "Updating Browserless (Patience)" msg_info "Updating Browserless (Patience)"
systemctl stop browserless systemctl stop browserless
cp /opt/browserless/.env /opt/browserless.env cp /opt/browserless/.env /opt/browserless.env
rm -rf browserless rm -rf /opt/browserless
brwsr_tmp=$(mktemp) 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) }') 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 curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v"$TAG".zip -o "$brwsr_tmp"
$STD unzip $brwsr_tmp $STD unzip "$brwsr_tmp"
mv browserless-${TAG}/ /opt/browserless mv browserless-"$TAG"/ /opt/browserless
cd /opt/browserless cd /opt/browserless
$STD npm install $STD npm install
rm -rf src/routes/{chrome,edge,firefox,webkit} rm -rf src/routes/{chrome,edge,firefox,webkit}
@@ -84,14 +81,12 @@ function update_script() {
msg_info "Cleaning Up" msg_info "Cleaning Up"
rm -f /tmp/minio.deb rm -f /tmp/minio.deb
rm -f $brwsr_tmp rm -f "$brwsr_tmp"
rm -f $res_tmp
msg_ok "Cleanup Completed" msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Update Successful" msg_ok "Update Successful"
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}" msg_ok "No update required. $APP is already at v{$RELEASE}"
fi fi
exit exit
} }

50
ct/salt.sh Normal file
View File

@@ -0,0 +1,50 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/saltstack/salt
APP="Salt"
var_tags="${var_tags:-automations}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-3}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /etc/salt ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
if [[ ! -f /~.salt ]] || [[ "${RELEASE}" != "$(cat /~.salt)" ]]; then
msg_info "Updating $APP to ${RELEASE}"
sed -i "s/^\(Pin: version \).*/\1${RELEASE}/" /etc/apt/preferences.d/salt-pin-1001
$STD apt-get update
$STD apt-get upgrade -y
echo "${RELEASE}" >/~.salt
msg_ok "Updated ${APP} to ${RELEASE}"
else
msg_ok "${APP} is already up to date (${RELEASE})"
fi
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"

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

@@ -41,6 +41,9 @@ function update_script() {
rm -rf /opt/wallos/db/wallos.empty.db rm -rf /opt/wallos/db/wallos.empty.db
mv /opt/wallos.db /opt/wallos/db/wallos.db mv /opt/wallos.db /opt/wallos/db/wallos.db
mv /opt/logos/* /opt/wallos/images/uploads/logos mv /opt/logos/* /opt/wallos/images/uploads/logos
if ! grep -q "storetotalyearlycost.php" /opt/wallos.cron; then
echo "30 1 * * 1 php /opt/wallos/endpoints/cronjobs/storetotalyearlycost.php >> /var/log/cron/storetotalyearlycost.log 2>&1" >> /opt/wallos.cron
fi
chown -R www-data:www-data /opt/wallos chown -R www-data:www-data /opt/wallos
chmod -R 755 /opt/wallos chmod -R 755 /opt/wallos
mkdir -p /var/log/cron mkdir -p /var/log/cron

View File

@@ -7749,9 +7749,9 @@
} }
}, },
"node_modules/form-data": { "node_modules/form-data": {
"version": "4.0.3", "version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
"integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {

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

@@ -0,0 +1,44 @@
{
"name": "LinkStack",
"slug": "linkstack",
"categories": [
9
],
"date_created": "2025-07-22",
"type": "ct",
"updateable": true,
"privileged": false,
"config_path": "/var/www/html/linkstack/.env",
"interface_port": 80,
"documentation": "https://docs.linkstack.org/",
"website": "https://linkstack.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/linkstack.webp",
"description": "LinkStack is an open-source, self-hosted alternative to Linktree, allowing users to create a customizable profile page to share multiple links, hosted on their own server.",
"install_methods": [
{
"type": "default",
"script": "ct/linkstack.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 5,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "LinkStack can be updated via the user interface.",
"type": "info"
},
{
"text": "Complete setup via the web interface at http://<container-ip>/. Check installation logs: `cat ~/linkstack-install.log`",
"type": "info"
}
]
}

View File

@@ -9,7 +9,7 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"config_path": "/opt/mealie/mealie.env", "config_path": "/opt/mealie/mealie.env",
"interface_port": 3000, "interface_port": 9000,
"documentation": "https://mealie.io/", "documentation": "https://mealie.io/",
"website": "https://mealie.io/", "website": "https://mealie.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mealie.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mealie.webp",

View File

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

View File

@@ -9,8 +9,8 @@
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 3000, "interface_port": 3000,
"documentation": "https://docs.rxresu.me/", "documentation": "https://docs.rxresume.org/",
"website": "https://rxresu.me", "website": "https://rxresume.org",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/reactive-resume-light.png", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/reactive-resume-light.png",
"config_path": "/opt/reactive-resume/.env", "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.", "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

@@ -0,0 +1,35 @@
{
"name": "Salt",
"slug": "salt",
"categories": [
19
],
"date_created": "2025-07-22",
"type": "ct",
"updateable": true,
"privileged": false,
"config_path": "/opt/salt/.env",
"interface_port": 3000,
"documentation": "https://docs.saltproject.io/salt/install-guide/en/latest/",
"website": "https://saltproject.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/salt.webp",
"description": "SaltStack Salt is a software for automating the management and configuration of IT infrastructure and applications. It is an event-driven automation tool and framework used to deploy, configure, and manage complex IT systems. Its primary functions include configuration management, where it ensures consistent configurations and manages operating system deployment and software installation. It also automates and orchestrates routine IT processes and can create self-aware, self-healing systems.",
"install_methods": [
{
"type": "default",
"script": "ct/salt.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 3,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"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 nginx
msg_ok "Installed Dependencies" 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_composer
setup_mariadb setup_mariadb

View File

@@ -71,6 +71,8 @@ msg_ok "Created Service MeiliSearch"
msg_info "Installing Bar Assistant" msg_info "Installing Bar Assistant"
cd /opt/bar-assistant cd /opt/bar-assistant
cp /opt/bar-assistant/.env.dist /opt/bar-assistant/.env 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=$(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/"//') 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}') LOCAL_IP=$(hostname -I | awk '{print $1}')

View File

@@ -24,13 +24,20 @@ motd_ssh
customize customize
msg_info "Creating Service" msg_info "Creating Service"
PASSWORD=$(omd create monitoring | grep "password:" | awk '{print $NF}') SITE_NAME="monitoring"
$STD omd start $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 "Application-Credentials"
echo "Username: cmkadmin" echo "Username: cmkadmin"
echo "Password: $PASSWORD" echo "Password: $MKPASSWORD"
echo "Site: $SITE_NAME"
} >>~/checkmk.creds } >>~/checkmk.creds
msg_ok "Created Service" msg_ok "Created Service"
msg_info "Cleaning up" 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

@@ -13,8 +13,6 @@ setting_up_container
network_check network_check
update_os update_os
FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
msg_info "Setting Up Hardware Acceleration" msg_info "Setting Up Hardware Acceleration"
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} $STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
if [[ "$CTTYPE" == "0" ]]; then if [[ "$CTTYPE" == "0" ]]; then
@@ -26,7 +24,37 @@ if [[ "$CTTYPE" == "0" ]]; then
fi fi
msg_ok "Set Up Hardware Acceleration" 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" "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" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/ersatzTV.service cat <<EOF >/etc/systemd/system/ersatzTV.service

View File

@@ -22,7 +22,8 @@ $STD apt-get install -y \
chromium/stable \ chromium/stable \
chromium-common/stable \ chromium-common/stable \
graphicsmagick \ graphicsmagick \
ghostscript ghostscript \
jq
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Installing Additional Tools" msg_info "Installing Additional Tools"
@@ -48,18 +49,14 @@ sed -i \
/etc/meilisearch.toml /etc/meilisearch.toml
msg_ok "Installed Meilisearch" msg_ok "Installed Meilisearch"
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep"
$STD npm install -g corepack@0.31.0 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" 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 PUPPETEER_SKIP_DOWNLOAD="true"
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
export NEXT_TELEMETRY_DISABLED=1 export NEXT_TELEMETRY_DISABLED=1
export CI="true" export CI="true"
cd /opt/karakeep/apps/web cd /opt/karakeep/apps/web
@@ -70,21 +67,20 @@ $STD pnpm install --frozen-lockfile
cd /opt/karakeep/apps/cli cd /opt/karakeep/apps/cli
$STD pnpm install --frozen-lockfile $STD pnpm install --frozen-lockfile
$STD pnpm build $STD pnpm build
cd /opt/karakeep/apps/mcp $STD pnpm store prune
$STD pnpm install --frozen-lockfile
$STD pnpm build
export DATA_DIR=/opt/karakeep_data export DATA_DIR=/opt/karakeep_data
karakeep_SECRET=$(openssl rand -base64 36 | cut -c1-24) karakeep_SECRET=$(openssl rand -base64 36 | cut -c1-24)
mkdir -p /etc/karakeep mkdir -p /etc/karakeep
cat <<EOF >/etc/karakeep/karakeep.env cat <<EOF >/etc/karakeep/karakeep.env
SERVER_VERSION=$RELEASE SERVER_VERSION="$(cat ~/.karakeep)"
NEXTAUTH_SECRET="$karakeep_SECRET" NEXTAUTH_SECRET="$karakeep_SECRET"
NEXTAUTH_URL="http://localhost:3000" NEXTAUTH_URL="http://localhost:3000"
DATA_DIR="$DATA_DIR" DATA_DIR="$DATA_DIR"
MEILI_ADDR="http://127.0.0.1:7700" MEILI_ADDR="http://127.0.0.1:7700"
MEILI_MASTER_KEY="$MASTER_KEY" MEILI_MASTER_KEY="$MASTER_KEY"
BROWSER_WEB_URL="http://127.0.0.1:9222" 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: # If you're planning to use OpenAI for tagging. Uncomment the following line:
# OPENAI_API_KEY="<API_KEY>" # 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_VIDEO_DOWNLOAD_MAX_SIZE="50"
# CRAWLER_ENABLE_ADBLOCKER=true # CRAWLER_ENABLE_ADBLOCKER=true
EOF EOF
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed karakeep" msg_ok "Installed karakeep"
msg_info "Running Database Migration" msg_info "Running Database Migration"
@@ -190,7 +185,6 @@ customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf /tmp/meilisearch.deb rm -rf /tmp/meilisearch.deb
rm -f /opt/v"${RELEASE}".zip
$STD apt-get autoremove -y $STD apt-get autoremove -y
$STD apt-get autoclean -y $STD apt-get autoclean -y
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -0,0 +1,48 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Omar Minaya | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://linkstack.org/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
PHP_VERSION="8.3" PHP_MODULE="sqlite3" PHP_APACHE="YES" setup_php
fetch_and_deploy_gh_release "linkstack" "linkstackorg/linkstack" "prebuild" "latest" "/var/www/html/linkstack" "linkstack.zip"
msg_info "Configuring LinkStack"
$STD a2enmod rewrite
chown -R www-data:www-data /var/www/html/linkstack
chmod -R 755 /var/www/html/linkstack
cat <<EOF >/etc/apache2/sites-available/linkstack.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/linkstack
ErrorLog /var/log/apache2/linkstack-error.log
CustomLog /var/log/apache2/linkstack-access.log combined
<Directory /var/www/html/linkstack/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
EOF
$STD a2dissite 000-default.conf
$STD a2ensite linkstack.conf
$STD systemctl restart apache2
msg_ok "Configured LinkStack"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -32,9 +32,8 @@ $STD apt-get install -y \
python3-cffi \ python3-cffi \
python3-certbot \ python3-certbot \
python3-certbot-dns-cloudflare 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/ $STD python3 -m venv /opt/certbot/
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
msg_ok "Installed Python Dependencies" msg_ok "Installed Python Dependencies"
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" 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\"|" backend/package.json
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
fi 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 sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf") NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
for NGINX_CONF in $NGINX_CONFS; do for NGINX_CONF in $NGINX_CONFS; do

View File

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

View File

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

View File

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

44
install/salt-install.sh Normal file
View File

@@ -0,0 +1,44 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/saltstack/salt
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 jq
msg_ok "Installed Dependencies"
msg_info "Setup Salt Repo"
mkdir -p /etc/apt/keyrings
curl -fsSL https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public -o /etc/apt/keyrings/salt-archive-keyring.pgp
curl -fsSL https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.sources -o /etc/apt/sources.list.d/salt.sources
$STD apt-get update
msg_ok "Setup Salt Repo"
msg_info "Installing Salt"
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
cat <<EOF >/etc/apt/preferences.d/salt-pin-1001
Package: salt-*
Pin: version ${RELEASE}
Pin-Priority: 1001
EOF
$STD apt-get install -y salt-master
echo "${RELEASE}" >/~.salt
msg_ok "Installed Salt"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -0,0 +1,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

@@ -64,6 +64,7 @@ cat <<EOF >/opt/wallos.cron
*/2 * * * * php /opt/wallos/endpoints/cronjobs/sendverificationemails.php >> /var/log/cron/sendverificationemail.log 2>&1 */2 * * * * php /opt/wallos/endpoints/cronjobs/sendverificationemails.php >> /var/log/cron/sendverificationemail.log 2>&1
*/2 * * * * php /opt/wallos/endpoints/cronjobs/sendresetpasswordemails.php >> /var/log/cron/sendresetpasswordemails.log 2>&1 */2 * * * * php /opt/wallos/endpoints/cronjobs/sendresetpasswordemails.php >> /var/log/cron/sendresetpasswordemails.log 2>&1
0 */6 * * * php /opt/wallos/endpoints/cronjobs/checkforupdates.php >> /var/log/cron/checkforupdates.log 2>&1 0 */6 * * * php /opt/wallos/endpoints/cronjobs/checkforupdates.php >> /var/log/cron/checkforupdates.log 2>&1
30 1 * * 1 php /opt/wallos/endpoints/cronjobs/storetotalyearlycost.php >> /var/log/cron/storetotalyearlycost.log 2>&1
EOF EOF
crontab /opt/wallos.cron crontab /opt/wallos.cron
msg_ok "Crontabs setup" msg_ok "Crontabs setup"

View File

@@ -875,20 +875,24 @@ install_script() {
header_info header_info
while true; do while true; do
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --menu "Choose an option:" \ TMP_CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" \
18 60 6 \ --title "SETTINGS" \
--menu "Choose an option:" 20 60 6 \
"1" "Default Settings" \ "1" "Default Settings" \
"2" "Default Settings (with verbose)" \ "2" "Default Settings (with verbose)" \
"3" "Advanced Settings" \ "3" "Advanced Settings" \
"4" "Use Config File" \ "4" "Use Config File" \
"5" "Diagnostic Settings" \ "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 if [ -z "$TMP_CHOICE" ]; then
echo -e "${CROSS}${RD} Menu canceled. Exiting.${CL}" echo -e "\n${CROSS}${RD}Menu canceled. Exiting script.${CL}\n"
exit 0 exit 0
fi fi
CHOICE="$TMP_CHOICE"
case $CHOICE in case $CHOICE in
1) 1)
header_info header_info
@@ -943,11 +947,11 @@ install_script() {
;; ;;
6) 6)
echo -e "${CROSS}${RD}Exiting.${CL}" echo -e "\n${CROSS}${RD}Script terminated. Have a great day!${CL}\n"
exit 0 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 esac
done done
@@ -1197,7 +1201,52 @@ EOF
# This starts the container and executes <app>-install.sh # This starts the container and executes <app>-install.sh
msg_info "Starting LXC Container" msg_info "Starting LXC Container"
pct start "$CTID" pct start "$CTID"
# wait for status 'running'
for i in {1..10}; do
if pct status "$CTID" | grep -q "status: running"; then
msg_ok "Started LXC Container" msg_ok "Started LXC Container"
break
fi
sleep 1
if [ "$i" -eq 10 ]; then
msg_error "LXC Container did not reach running state"
exit 1
fi
done
if [ "$var_os" != "alpine" ]; then
msg_info "Waiting for network in LXC container"
for i in {1..10}; do
if pct exec "$CTID" -- ping -c1 -W1 deb.debian.org >/dev/null 2>&1; then
msg_ok "Network in LXC is reachable"
break
fi
if [ "$i" -lt 10 ]; then
msg_warn "No network yet in LXC (try $i/10) waiting..."
sleep 3
else
msg_error "No network in LXC after waiting."
read -r -p "Set fallback DNS (1.1.1.1/8.8.8.8)? [y/N]: " choice
case "$choice" in
[yY]*)
pct set "$CTID" --nameserver 1.1.1.1
pct set "$CTID" --nameserver 8.8.8.8
if pct exec "$CTID" -- ping -c1 -W1 deb.debian.org >/dev/null 2>&1; then
msg_ok "Network reachable after DNS fallback"
else
msg_error "Still no network/DNS in LXC! Aborting customization."
exit 1
fi
;;
*)
msg_error "Aborted by user no DNS fallback set."
exit 1
;;
esac
fi
done
fi
msg_info "Customizing LXC Container" msg_info "Customizing LXC Container"
: "${tz:=Etc/UTC}" : "${tz:=Etc/UTC}"
@@ -1207,7 +1256,7 @@ EOF
http://dl-cdn.alpinelinux.org/alpine/latest-stable/main http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
http://dl-cdn.alpinelinux.org/alpine/latest-stable/community http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
EOF' EOF'
pct exec "$CTID" -- ash -c "apk add bash newt curl openssh nano mc ncurses >/dev/null" pct exec "$CTID" -- ash -c "apk add bash newt curl openssh nano mc ncurses jq >/dev/null"
else else
sleep 3 sleep 3
pct exec "$CTID" -- bash -c "sed -i '/$LANG/ s/^# //' /etc/locale.gen" pct exec "$CTID" -- bash -c "sed -i '/$LANG/ s/^# //' /etc/locale.gen"
@@ -1225,7 +1274,7 @@ EOF'
msg_warn "Skipping timezone setup zone '$tz' not found in container" msg_warn "Skipping timezone setup zone '$tz' not found in container"
fi fi
pct exec "$CTID" -- bash -c "apt-get update >/dev/null && apt-get install -y sudo curl mc gnupg2 >/dev/null" pct exec "$CTID" -- bash -c "apt-get update >/dev/null && apt-get install -y sudo curl mc gnupg2 jq >/dev/null"
fi fi
msg_ok "Customized LXC Container" msg_ok "Customized LXC Container"

View File

@@ -269,6 +269,7 @@ config_file() {
if [ "$NET" == "dhcp" ]; then if [ "$NET" == "dhcp" ]; then
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}DHCP${CL}" echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}DHCP${CL}"
echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}Default${CL}" echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}Default${CL}"
GATE=""
elif [[ "$NET" =~ $ip_cidr_regex ]]; then elif [[ "$NET" =~ $ip_cidr_regex ]]; then
echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}$NET${CL}" echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}$NET${CL}"
if [ ! -z "$GATE" ]; then if [ ! -z "$GATE" ]; then

View File

@@ -396,9 +396,10 @@ function setup_php() {
COMBINED_MODULES="${DEFAULT_MODULES}" COMBINED_MODULES="${DEFAULT_MODULES}"
fi fi
# Deduplicate modules # Deduplicate
COMBINED_MODULES=$(echo "$COMBINED_MODULES" | tr ',' '\n' | awk '!seen[$0]++' | paste -sd, -) COMBINED_MODULES=$(echo "$COMBINED_MODULES" | tr ',' '\n' | awk '!seen[$0]++' | paste -sd, -)
# Get current PHP-CLI version
local CURRENT_PHP="" local CURRENT_PHP=""
if command -v php >/dev/null 2>&1; then if command -v php >/dev/null 2>&1; then
CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2) CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
@@ -420,53 +421,44 @@ function setup_php() {
$STD apt-get update $STD apt-get update
fi fi
# Build module list
local MODULE_LIST="php${PHP_VERSION}" local MODULE_LIST="php${PHP_VERSION}"
for pkg in $MODULE_LIST; do
if ! apt-cache show "$pkg" >/dev/null 2>&1; then
msg_error "Package not found: $pkg"
exit 1
fi
done
IFS=',' read -ra MODULES <<<"$COMBINED_MODULES" IFS=',' read -ra MODULES <<<"$COMBINED_MODULES"
for mod in "${MODULES[@]}"; do for mod in "${MODULES[@]}"; do
if apt-cache show "php${PHP_VERSION}-${mod}" >/dev/null 2>&1; then
MODULE_LIST+=" php${PHP_VERSION}-${mod}" MODULE_LIST+=" php${PHP_VERSION}-${mod}"
else
msg_warn "PHP-Module ${mod} for PHP ${PHP_VERSION} not found skipping"
fi
done done
if [[ "$PHP_FPM" == "YES" ]]; then if [[ "$PHP_FPM" == "YES" ]]; then
MODULE_LIST+=" php${PHP_VERSION}-fpm" MODULE_LIST+=" php${PHP_VERSION}-fpm"
fi fi
# install apache2 with PHP support if requested
if [[ "$PHP_APACHE" == "YES" ]]; then if [[ "$PHP_APACHE" == "YES" ]]; then
if ! dpkg -l | grep -q "libapache2-mod-php${PHP_VERSION}"; then
msg_info "Installing Apache with PHP${PHP_VERSION} support"
$STD apt-get install -y apache2 libapache2-mod-php${PHP_VERSION} $STD apt-get install -y apache2 libapache2-mod-php${PHP_VERSION}
$STD systemctl restart apache2 || true else
fi msg_info "Apache with PHP${PHP_VERSION} already installed skipping install"
fi
if [[ "$PHP_APACHE" == "YES" ]] && [[ -n "$CURRENT_PHP" ]]; then
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
$STD systemctl stop php${CURRENT_PHP}-fpm || true
$STD systemctl disable php${CURRENT_PHP}-fpm || true
fi fi
# setup / update PHP modules
$STD apt-get install -y $MODULE_LIST $STD apt-get install -y $MODULE_LIST
msg_ok "Setup PHP $PHP_VERSION" msg_ok "Setup PHP $PHP_VERSION"
if [[ "$PHP_FPM" == "YES" ]]; then # optional stop old PHP-FPM service
$STD systemctl enable php${PHP_VERSION}-fpm if [[ "$PHP_FPM" == "YES" && -n "$CURRENT_PHP" && "$CURRENT_PHP" != "$PHP_VERSION" ]]; then
$STD systemctl restart php${PHP_VERSION}-fpm $STD systemctl stop php"${CURRENT_PHP}"-fpm || true
$STD systemctl disable php"${CURRENT_PHP}"-fpm || true
fi fi
# Patch all relevant php.ini files # Patch all relevant php.ini files
local PHP_INI_PATHS=("/etc/php/${PHP_VERSION}/cli/php.ini") local PHP_INI_PATHS=("/etc/php/${PHP_VERSION}/cli/php.ini")
[[ "$PHP_FPM" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/fpm/php.ini") [[ "$PHP_FPM" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/fpm/php.ini")
[[ "$PHP_APACHE" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/apache2/php.ini") [[ "$PHP_APACHE" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/apache2/php.ini")
for ini in "${PHP_INI_PATHS[@]}"; do for ini in "${PHP_INI_PATHS[@]}"; do
if [[ -f "$ini" ]]; then if [[ -f "$ini" ]]; then
$STD msg_info "Patching $ini" $STD msg_info "Patching $ini"
@@ -477,8 +469,29 @@ function setup_php() {
$STD msg_ok "Patched $ini" $STD msg_ok "Patched $ini"
fi fi
done done
}
# patch Apache configuration if needed
if [[ "$PHP_APACHE" == "YES" ]]; then
for mod in $(ls /etc/apache2/mods-enabled/ 2>/dev/null | grep -E '^php[0-9]\.[0-9]\.conf$' | sed 's/\.conf//'); do
if [[ "$mod" != "php${PHP_VERSION}" ]]; then
$STD a2dismod "$mod" || true
fi
done
$STD a2enmod mpm_prefork
$STD a2enmod "php${PHP_VERSION}"
$STD systemctl restart apache2 || true
fi
# enable and restart PHP-FPM if requested
if [[ "$PHP_FPM" == "YES" ]]; then
if systemctl list-unit-files | grep -q "php${PHP_VERSION}-fpm.service"; then
$STD systemctl enable php${PHP_VERSION}-fpm
$STD systemctl restart php${PHP_VERSION}-fpm
else
msg_warn "FPM requested but service php${PHP_VERSION}-fpm not found"
fi
fi
}
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Installs or updates Composer globally. # Installs or updates Composer globally.
# #
@@ -1772,6 +1785,7 @@ function setup_ffmpeg() {
libx264-dev libx265-dev libvpx-dev libmp3lame-dev libx264-dev libx265-dev libvpx-dev libmp3lame-dev
libfreetype6-dev libass-dev libopus-dev libvorbis-dev libfreetype6-dev libass-dev libopus-dev libvorbis-dev
libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev
libva-dev libdrm-dev
) )
;; ;;
*) *)
@@ -1808,6 +1822,7 @@ function setup_ffmpeg() {
if [[ "$TYPE" == "full" ]]; then if [[ "$TYPE" == "full" ]]; then
args+=(--enable-libx265 --enable-libdav1d --enable-zlib) args+=(--enable-libx265 --enable-libdav1d --enable-zlib)
args+=(--enable-vaapi --enable-libdrm)
fi fi
if [[ ${#args[@]} -eq 0 ]]; then if [[ ${#args[@]} -eq 0 ]]; then

View File

@@ -113,7 +113,6 @@ EOF
;; ;;
esac esac
if [[ ! -f /etc/apt/apt.conf.d/no-nag-script ]]; then
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \
"yes" " " \ "yes" " " \
"no" " " 3>&2 2>&1 1>&3) "no" " " 3>&2 2>&1 1>&3)
@@ -121,8 +120,7 @@ EOF
yes) yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_info "Disabling subscription nag" msg_info "Disabling subscription nag"
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then echo 'Removing subscription nag from UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script
apt --reinstall install proxmox-widget-toolkit &>/dev/null
msg_ok "Disabled subscription nag (Delete browser cache)" msg_ok "Disabled subscription nag (Delete browser cache)"
;; ;;
no) no)
@@ -130,7 +128,7 @@ EOF
msg_error "Selected no to Disabling subscription nag" msg_error "Selected no to Disabling subscription nag"
;; ;;
esac esac
fi apt --reinstall install proxmox-widget-toolkit &>/dev/null
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Backup Server now?" 11 58 2 \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Backup Server now?" 11 58 2 \
"yes" " " \ "yes" " " \

View File

@@ -112,7 +112,6 @@ EOF
;; ;;
esac esac
if [[ ! -f /etc/apt/apt.conf.d/no-nag-script ]]; then
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \
"yes" " " \ "yes" " " \
"no" " " 3>&2 2>&1 1>&3) "no" " " 3>&2 2>&1 1>&3)
@@ -120,11 +119,10 @@ EOF
yes) yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_info "Disabling subscription nag" msg_info "Disabling subscription nag"
# Normal GUI: # Normal GUI (proxmox-widget-toolkit)
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/.*data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then echo 'Removing subscription nag from UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script
# JS-Library used when accessing via mobile device browser # JS library used when accessing via mobile device browser
echo "DPkg::Post-Invoke { \"dpkg -V pmg-gui | grep -q '/pmgmanagerlib-mobile\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from Mobile UI...'; sed -i '/data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; }; fi\"; };" >>/etc/apt/apt.conf.d/no-nag-script echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; then echo 'Removing subscription nag from mobile UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script-pmgmanagerlib-mobile
apt --reinstall install proxmox-widget-toolkit pmg-gui &>/dev/null
msg_ok "Disabled subscription nag (Delete browser cache)" msg_ok "Disabled subscription nag (Delete browser cache)"
;; ;;
no) no)
@@ -132,7 +130,7 @@ EOF
msg_error "Selected no to disabling subscription nag" msg_error "Selected no to disabling subscription nag"
;; ;;
esac esac
fi apt --reinstall install proxmox-widget-toolkit pmg-gui &>/dev/null
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Mail Gateway now?" 11 58 2 \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Mail Gateway now?" 11 58 2 \
"yes" " " \ "yes" " " \

View File

@@ -133,7 +133,6 @@ EOF
;; ;;
esac esac
if [[ ! -f /etc/apt/apt.conf.d/no-nag-script ]]; then
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \
"yes" " " \ "yes" " " \
"no" " " 3>&2 2>&1 1>&3) "no" " " 3>&2 2>&1 1>&3)
@@ -141,16 +140,16 @@ EOF
yes) yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_info "Disabling subscription nag" msg_info "Disabling subscription nag"
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/.*data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then echo 'Removing subscription nag from UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script
apt --reinstall install proxmox-widget-toolkit &>/dev/null
msg_ok "Disabled subscription nag (Delete browser cache)" msg_ok "Disabled subscription nag (Delete browser cache)"
;; ;;
no) no)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58 whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_error "Selected no to Disabling subscription nag" msg_error "Selected no to Disabling subscription nag"
rm /etc/apt/apt.conf.d/no-nag-script 2>/dev/null
;; ;;
esac esac
fi apt --reinstall install proxmox-widget-toolkit &>/dev/null
if ! systemctl is-active --quiet pve-ha-lrm; then if ! systemctl is-active --quiet pve-ha-lrm; then
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "HIGH AVAILABILITY" --menu "Enable high availability?" 10 58 2 \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "HIGH AVAILABILITY" --menu "Enable high availability?" 10 58 2 \