Compare commits

...

151 Commits

Author SHA1 Message Date
Slaviša Arežina
d781c75dfe Update website with accurate info (#2730) 2025-02-27 23:07:10 +01:00
community-scripts-pr-app[bot]
0c0d1de317 Update CHANGELOG.md (#2729)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 22:28:41 +01:00
Slaviša Arežina
ab370762a4 Removed sed, app supports Node v22 now (#2728) 2025-02-27 22:28:11 +01:00
Tobias
51bb4566e7 EOF not detected (#2726)
* Update web-check-install.sh

* Update web-check-install.sh

* Update web-check-install.sh

* Update web-check-install.sh

* Update web-check-install.sh

* Update web-check-install.sh
2025-02-27 22:27:46 +01:00
community-scripts-pr-app[bot]
0e00057477 Update CHANGELOG.md (#2723)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 19:06:45 +01:00
community-scripts-pr-app[bot]
ccd70a835f Update .app files (#2725)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 19:06:08 +01:00
community-scripts-pr-app[bot]
5bfde87159 Update date in json (#2724)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 19:05:46 +01:00
Tobias
949dcd0b23 web-check (#2662)
* add: web-check-install.sh

* add: web-check.sh

* Create web-check.json

* Update web-check-install.sh

* Update web-check-install.sh

* Update web-check-install.sh

* Update web-check.sh

* Update web-check.json

* Update web-check.sh

* Update web-check-install.sh

* Update web-check.json
2025-02-27 19:05:06 +01:00
Scott Callaway
4cad868175 feat: use HTML button element for copying to clipboard (#2720)
It's much more semantic to use the `<button />` HTML component rather
than trying to build the same functionality out of a `<div />` so that's
what is updated here.

This also updates some of the classes that were on the button as they're
no longer required and removes some commented out code that doesn't need
to be left around.

There was also a `<span />` with the contents "Copy" that I couldn't
work out when it was meant to be displayed, so I swapped that over to an
HTML tooltip on the `<button />`.
2025-02-27 19:04:03 +01:00
community-scripts-pr-app[bot]
35f74cb3b6 Update CHANGELOG.md (#2719)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 17:18:26 +01:00
CanbiZ
51a3361686 Update unbound-install.sh 2025-02-27 16:41:34 +01:00
Slaviša Arežina
0ac0cc263e Keycloak: Update installation script (#2714)
* Update installation script

* fixed tar command

* fix tar again

* fixes

* Update keycloak-install.sh
2025-02-27 16:40:07 +01:00
community-scripts-pr-app[bot]
c730b5c009 Update CHANGELOG.md (#2718)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 16:34:53 +01:00
Michel Roegl-Brunner
8c1cc56321 Revert "Update Runner (#2711)" (#2717)
This reverts commit 3bf4155fec.
2025-02-27 16:03:29 +01:00
Michel Roegl-Brunner
c01abd559b Add basic pagination (#2715) 2025-02-27 15:56:56 +01:00
Michel Roegl-Brunner
a5039cff58 Improve Workflow (#2712) 2025-02-27 14:53:23 +01:00
Michel Roegl-Brunner
3bf4155fec Update Runner (#2711) 2025-02-27 14:53:10 +01:00
community-scripts-pr-app[bot]
fb515bc057 Update CHANGELOG.md (#2708)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 13:16:57 +01:00
bvdberg01
bd0c906c44 Zitadel-install.sh: Remove one version file and update to our standard (#2710) 2025-02-27 13:14:26 +01:00
Slaviša Arežina
0871b9c84c Change key to hex32 (#2709) 2025-02-27 13:13:56 +01:00
bvdberg01
0d4b4a1837 Typo in update scripts (#2707)
* Fix typo

* Change no update function msg
2025-02-27 13:13:31 +01:00
Slaviša Arežina
474954afb6 Fix Node 22 compatibility (thanks t2lc) (#2705) 2025-02-27 12:07:18 +01:00
community-scripts-pr-app[bot]
5041708810 Update CHANGELOG.md (#2698)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:36:06 +01:00
community-scripts-pr-app[bot]
c630378701 Update CHANGELOG.md (#2697)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:29:35 +01:00
Slaviša Arežina
be5e6cc870 Add HTTPS instructions to the website (#2695) 2025-02-27 09:28:11 +01:00
community-scripts-pr-app[bot]
87afc99489 Update CHANGELOG.md (#2696)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:19:50 +01:00
community-scripts-pr-app[bot]
ff49b8fea8 Update CHANGELOG.md (#2692)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:18:53 +01:00
community-scripts-pr-app[bot]
bb0bc65e27 Update .app files (#2694)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:17:48 +01:00
community-scripts-pr-app[bot]
6a60704d8e Update date in json (#2693)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:17:34 +01:00
Slaviša Arežina
cd40beb1eb New Script: ByteStash (#2680)
* Add ByteStash script

* Update bytestash-install.sh
2025-02-27 09:11:22 +01:00
community-scripts-pr-app[bot]
e1df6b0a6f Update CHANGELOG.md (#2691)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:10:18 +01:00
Michel Roegl-Brunner
b582b9f04d [gh] New Workflow to close Script Request Discussions on PR merge (#2688)
* New Workflow

* New Workflow
2025-02-27 09:08:25 +01:00
Michel Roegl-Brunner
407801d9ff Update install.func (#2690) 2025-02-27 09:07:24 +01:00
CanbiZ
6bcbc0ae91 Update pihole-install.sh 2025-02-27 08:41:07 +01:00
community-scripts-pr-app[bot]
62bd7d5eef Update CHANGELOG.md (#2684)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 07:29:06 +01:00
community-scripts-pr-app[bot]
663962e873 Update date in json (#2687)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 07:26:40 +01:00
community-scripts-pr-app[bot]
3e7458dfaa Update .app files (#2686)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 07:26:08 +01:00
community-scripts-pr-app[bot]
db5cc430c7 Update date in json (#2685)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 07:25:30 +01:00
bvdberg01
5b91a776f1 New script: Pelican Panel (#2678) 2025-02-27 07:24:11 +01:00
bvdberg01
0aa13fbea7 New Script: Pelican Wings (#2677)
* New Script: Pelican Wings

* Remove $STD for stopping/starting service
2025-02-27 07:23:00 +01:00
CanbiZ
2d20686131 SFTPGo Remove unneeded RELEASE variable (#2683) 2025-02-27 07:12:22 +01:00
community-scripts-pr-app[bot]
5f2163bff4 Update CHANGELOG.md (#2679)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 23:35:46 +01:00
Tobias
9c59bdaea1 Fix: Homarr - Manually correct db-migration wrong-folder (#2676)
* Update homarr-install.sh

* Update homarr.sh
2025-02-26 23:23:03 +01:00
CanbiZ
7f4c116b2c Update zigbee2mqtt-install.sh 2025-02-26 20:08:01 +01:00
community-scripts-pr-app[bot]
ba842a1e49 Update CHANGELOG.md (#2672)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 19:52:10 +01:00
Slaviša Arežina
41f4aebdc7 Fix infinite spinner (#2673) 2025-02-26 19:51:46 +01:00
Slaviša Arežina
c12470ff12 Fix: SABnzbd - Removed few artefacts in the code preventing the update (#2670)
* Fix copy files to folder

* Fix untaring the archive
2025-02-26 19:20:48 +01:00
community-scripts-pr-app[bot]
6722e52c9b Update CHANGELOG.md (#2664)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 18:43:25 +01:00
community-scripts-pr-app[bot]
e68355d880 Update .app files (#2665)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-26 16:21:35 +01:00
Slaviša Arežina
7d29d8a05a New Script: Outline (#2653)
* Added Outline script

* Update outline-install.sh
2025-02-26 16:17:22 +01:00
Michel Roegl-Brunner
e6792790cc Update autolabeler.yml (#2660) 2025-02-26 15:51:30 +02:00
community-scripts-pr-app[bot]
4354079c4e Update CHANGELOG.md (#2659)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 14:45:52 +01:00
community-scripts-pr-app[bot]
a02a9d803e Update CHANGELOG.md (#2652)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 14:39:16 +01:00
Michel Roegl-Brunner
46462a790c [gh] Furhter Impove Changelog Workflow (#2655)
* Impove Workflow

* Impove Workflow
2025-02-26 14:38:35 +01:00
Slaviša Arežina
a971cedde5 Improve application description for website (#2658) 2025-02-26 14:32:16 +01:00
CanbiZ
fda9557811 Kimai: add local.yaml & fix path permissions (#2646)
* Update kimai-install.sh

* Update kimai.sh

* Update kimai.sh
2025-02-26 13:16:11 +01:00
community-scripts-pr-app[bot]
633dbe3e2b Update CHANGELOG.md (#2648)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 09:57:04 +01:00
CanbiZ
981baed9d3 PiHole: Fix Unbound sed for DNS (#2647) 2025-02-26 09:50:13 +01:00
community-scripts-pr-app[bot]
90fc30a228 Update CHANGELOG.md (#2645) 2025-02-26 10:43:30 +02:00
Sven Schneider
0641ec1e2a fix(pocketid): Website and documentation links updated (#2643)
fix: #2639
2025-02-26 09:35:22 +01:00
CanbiZ
82d4ee01d2 Alpine IT-Tools fix typo "unexpected EOF while looking for matching `"' (#2644) 2025-02-26 09:18:00 +01:00
community-scripts-pr-app[bot]
d564dc0ecb Update CHANGELOG.md (#2634)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-25 12:38:57 +01:00
Michel Roegl-Brunner
cb462dcb39 Update add-tailscale-lxc.sh (#2633) 2025-02-25 11:41:08 +01:00
Michel Roegl-Brunner
3401b76c44 Updated Changelog Workflow (#2632) 2025-02-25 11:27:31 +01:00
community-scripts-pr-app[bot]
599a518cc3 Update CHANGELOG.md (#2631)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-25 09:27:14 +01:00
Michel Roegl-Brunner
59223628af Update Tailscale-lxc Json: Add message for Supported OS (#2629)
* Update add-tailscale-lxc.json

* Update json/add-tailscale-lxc.json

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

* Update json/add-tailscale-lxc.json

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

---------

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-02-25 09:20:41 +01:00
Michel Roegl-Brunner
029332fb51 Revert "[gh] Update Changelog Workflow (#2621)" (#2630)
This reverts commit 893bff1b59.
2025-02-25 09:20:09 +01:00
community-scripts-pr-app[bot]
aba73bd0f8 Update CHANGELOG.md (#2628)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-25 09:00:28 +01:00
Michel Roegl-Brunner
893bff1b59 [gh] Update Changelog Workflow (#2621)
* Update Workflow

* Update Workflow
2025-02-25 08:55:17 +01:00
CanbiZ
bef3ccd164 Update omada.sh 2025-02-25 08:46:18 +01:00
CanbiZ
02fb3ab9b4 Update omada-install.sh 2025-02-25 08:44:53 +01:00
Jc Miñarro
87c17fc16d Downgrade mongodb to v7.0 when installing Omada controller (#2625) 2025-02-25 08:42:48 +01:00
CanbiZ
03424f0474 Update bookstack.sh 2025-02-24 17:19:18 +01:00
community-scripts-pr-app[bot]
bf9edf41d9 Update CHANGELOG.md (#2620)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 16:40:39 +01:00
Slaviša Arežina
377d11bf48 Fix: Authelia - Make user enter their domain manually (#2618)
* Make user enter domain manually

* Update json to remind user

* Update authelia.json

---------

Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-02-24 16:19:41 +01:00
community-scripts-pr-app[bot]
42ad6832ea Update CHANGELOG.md (#2617)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 15:12:00 +01:00
CanbiZ
e2b6296cdf Update changelog-pr-config.json 2025-02-24 15:11:21 +01:00
CanbiZ
a3b1984d0a Update changelog-pr-config.json 2025-02-24 15:10:26 +01:00
community-scripts-pr-app[bot]
f24286b717 Update CHANGELOG.md (#2616)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 15:08:16 +01:00
CanbiZ
375275b9c0 Update changelog-pr.yml 2025-02-24 15:07:13 +01:00
CanbiZ
8c41fb692b Update autolabeler.yml 2025-02-24 15:04:11 +01:00
CanbiZ
5de3075252 Update autolabeler.yml 2025-02-24 15:03:37 +01:00
community-scripts-pr-app[bot]
c72e8d3da6 Update CHANGELOG.md (#2614)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 14:55:53 +01:00
Michel Roegl-Brunner
40469c5de5 [gh] Update Script Test Workflow (#2599)
* Update Workflow

* Update Workflow
2025-02-24 14:54:51 +01:00
CanbiZ
6827056a1d Fix: Firefly III - Update-Script based on their docs (#2534)
* Fix: Update-Script Firefly III Based on there docs

* Update autolabeler.yml

* Update autolabeler.yml

* Update firefly.sh

* Update firefly.sh
2025-02-24 14:52:23 +01:00
CanbiZ
1172662095 Fix: Omada check for AVX Support and use the correct MongoDB Version (#2600)
* Update omada-install.sh

* Update omada-install.sh

* Update omada.sh
2025-02-24 14:50:09 +01:00
community-scripts-pr-app[bot]
43dc12074d Update CHANGELOG.md (#2613)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 14:46:41 +01:00
community-scripts-pr-app[bot]
6eb272ba4a Update .app files (#2612)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 14:46:13 +01:00
community-scripts-pr-app[bot]
1bb6e4e899 Update CHANGELOG.md (#2611)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 14:45:54 +01:00
community-scripts-pr-app[bot]
157657b298 Update date in json (#2610)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 14:45:41 +01:00
Slaviša Arežina
188712936f New Script: wger (#2574)
* Add wger script

* fixes

* fixes v2

* fix json

* Moved Apache config
2025-02-24 14:41:06 +01:00
Slaviša Arežina
0e5be846be Fix config file missing domain if hostname fails (#2609) 2025-02-24 14:39:35 +01:00
community-scripts-pr-app[bot]
05364685af Update CHANGELOG.md (#2606)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 14:28:40 +01:00
CanbiZ
03a2c41718 Update create_lxc.sh 2025-02-24 14:23:05 +01:00
CanbiZ
de4f7c3166 Feature: Template-Check, Better Handling of Downloads, Better Network… (#2592)
* Feature: Template-Check, Better Handling of Downloads, Better Network Check, Better CTID check

* fix missing }

* Update misc/build.func

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

* remove useless space

---------

Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>
2025-02-24 13:55:31 +01:00
community-scripts-pr-app[bot]
ba0153539d Update CHANGELOG.md (#2605)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 13:43:14 +01:00
Michel Roegl-Brunner
8a64d345a4 Update pihole.json (#2602) 2025-02-24 13:42:36 +01:00
Michel Roegl-Brunner
62939edc2e Update AppName.md & AppName.sh (#2603) 2025-02-24 13:42:04 +01:00
CanbiZ
56a7505f15 Fix: Authelia Unbound Variable Argon2id (#2604) 2025-02-24 13:40:09 +01:00
community-scripts-pr-app[bot]
01a02c41ff Update CHANGELOG.md (#2597)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 13:13:32 +01:00
bvdberg01
a03a1034de Fix Docmost: default upload size and saving data when updating (#2598) 2025-02-24 13:10:32 +01:00
CanbiZ
ece3ad2b13 Feature: Use Verbose Mode for all Scripts (removed &>/dev/null) (#2596)
* Feature: Use Verbose Mode for all Scripts (removed &>/dev/null)

* Update crafty-controller.sh
2025-02-24 12:49:16 +01:00
community-scripts-pr-app[bot]
20cc7572a5 Update CHANGELOG.md (#2595)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 12:27:20 +01:00
community-scripts-pr-app[bot]
7700b1a541 Update .app files (#2594)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 12:26:50 +01:00
community-scripts-pr-app[bot]
fc9a7f2cd4 Update date in json (#2593)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 12:26:34 +01:00
Slaviša Arežina
a97a56bf88 New Script: VictoriaMetrics (#2565)
* Add VictoriaMetrics script

* fix file name

* Update json/victoriametrics.json

Co-authored-by: bvdberg01 <74251551+bvdberg01@users.noreply.github.com>

* Update ct/victoriametrics.sh

Co-authored-by: bvdberg01 <74251551+bvdberg01@users.noreply.github.com>

* Update victoriametrics.sh

---------

Co-authored-by: bvdberg01 <74251551+bvdberg01@users.noreply.github.com>
2025-02-24 12:25:18 +01:00
community-scripts-pr-app[bot]
de2e785731 Update CHANGELOG.md (#2591)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 11:31:13 +01:00
community-scripts-pr-app[bot]
eb3a2e41ed Update CHANGELOG.md (#2588)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 11:25:30 +01:00
TyrantRey
acf5eda756 Fix: Wireguard - Restart wgdashboard after update (#2587)
Fix: Restart wgdashboard automatically after update
2025-02-24 11:24:58 +01:00
community-scripts-pr-app[bot]
df110695cd Update .app files (#2590)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 11:24:48 +01:00
community-scripts-pr-app[bot]
ebf63f55e6 Update date in json (#2589)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 11:24:25 +01:00
Thorsten
0a1248861b New Script: Authelia (#2060)
* fixed subscription nag removal

* Authelia + Dev env

* unbound var fix

* fixes

* service start and update function

* remove dev env

* remove dev env

* Apply suggestions from code review

Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>

* Update authelia.sh

* Update authelia-install.sh

---------

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-02-24 11:22:43 +01:00
CanbiZ
10d4ce4eef Verbose_Update (#2583) 2025-02-24 11:18:38 +01:00
community-scripts-pr-app[bot]
35f635bdb4 Update CHANGELOG.md (#2585)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 10:06:43 +01:00
CanbiZ
27c764afd3 Fix Jupyter Json (#2584) 2025-02-24 09:46:49 +01:00
community-scripts-pr-app[bot]
1f500d5aeb Update CHANGELOG.md (#2581)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 09:24:08 +01:00
community-scripts-pr-app[bot]
4e13134774 Update .app files (#2582)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 09:18:51 +01:00
Dave
2dbd03b74c New Script: Jupyter Notebook (#2561)
* Add jupyter notebook script, install script and json

* Add jupyter notebook script, install script and json

* Update jupyternotebook.sh

* Update jupyternotebook-install.sh

* Update jupyternotebook.sh

* Update jupyternotebook-install.sh

* Update jupyternotebook.json

---------

Co-authored-by: Dat Ta <datta@macmini.homeserver.local>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-02-24 09:10:43 +01:00
community-scripts-pr-app[bot]
0084169c02 Update CHANGELOG.md (#2579)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 08:42:43 +01:00
Tobias
4aabbefcc8 fix: homarr db migration (#2575)
* Update homarr.sh

* Update homarr-install.sh
2025-02-24 08:23:54 +01:00
community-scripts-pr-app[bot]
6daeb7e288 Update CHANGELOG.md (#2577)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-23 23:47:19 +01:00
Miguel Torres
81b367df07 Fix: wrong text in description (#2576) 2025-02-23 23:41:52 +01:00
community-scripts-pr-app[bot]
0f410e11eb Update CHANGELOG.md (#2571)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-23 19:04:19 +01:00
community-scripts-pr-app[bot]
0a9dffb7a1 Update date in json (#2570)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-23 19:03:42 +01:00
community-scripts-pr-app[bot]
67b90f5582 Update .app files (#2572)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-23 19:02:56 +01:00
Miguel Vila Rodríguez
eaceba3ed3 New Script: Hev socks5 server (#2454)
* initial test

* fix port message and replace back github urls

* best practices

* final fixes

* add username ct

* last test, uyndo this commit

* final

* remove editor formatting chagnes from build.func

* trailing line

* remove comments

* get tarball, generate credentials

* test1

* arreglito

* arreglo clean up

* final

* reduce sys reqs

* typo

* url change

* remove backup and clean up
2025-02-23 18:44:04 +01:00
community-scripts-pr-app[bot]
d7dceede4b Update CHANGELOG.md (#2567)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-23 18:38:45 +01:00
community-scripts-pr-app[bot]
9c867b467a Update date in json (#2568)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-23 18:38:01 +01:00
community-scripts-pr-app[bot]
d35a01f5c4 Update .app files (#2569)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-23 18:37:33 +01:00
Slaviša Arežina
1e2f953a8f Remove setting NAT as its already in PostUp/Down (#2510) 2025-02-23 18:36:26 +01:00
Slaviša Arežina
2937516869 New Script: bolt.diy (#2528)
* Add bolt.diy script

* fixes
2025-02-23 18:35:44 +01:00
community-scripts-pr-app[bot]
92d2065f1d Update CHANGELOG.md (#2550)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-23 18:06:29 +01:00
bvdberg01
13c2f50f19 Fix: URL's in CONTRIBUTING.md (#2552) 2025-02-22 12:26:17 +01:00
Michael Casey
dccc45d492 Fix a few broken icon links (#2548) 2025-02-22 10:52:45 +01:00
community-scripts-pr-app[bot]
a9362e0b4a Update CHANGELOG.md (#2545)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-21 16:32:17 +01:00
jaminmc
10c46723fe Add ZFS to Podman. Now it works on ZFS! (#2526)
* Allow Podman to work on ZFS containers

* Fix ZFS for Podman-Create missing folder.

* Added option to install Portainer or Portainer agent in Podman

* Fix source for Podman Homeassistant so Portainer and other containers can be installed.

* fix Podman not creating storage/volumes, until one exists.
2025-02-21 16:45:30 +02:00
community-scripts-pr-app[bot]
666e170f7d Update CHANGELOG.md (#2536)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-21 10:46:48 +01:00
CanbiZ
109c48694e Update changelog-pr.yml 2025-02-21 10:45:58 +01:00
CanbiZ
d0cd58e923 Update changelog-pr.yml 2025-02-21 10:44:54 +01:00
CanbiZ
16b8bbfca6 Update changelog-pr.yml 2025-02-21 10:42:01 +01:00
CanbiZ
209aa220b0 Update changelog-pr.yml 2025-02-21 10:40:28 +01:00
CanbiZ
dd8db43dea General Cleanup & Moving Files / Folders (#2532) 2025-02-21 10:31:17 +01:00
CanbiZ
7d40e148e9 Update autolabeler.yml 2025-02-21 10:04:16 +01:00
CanbiZ
ef6eeea608 Update changelog-pr.yml 2025-02-21 08:29:30 +01:00
CanbiZ
0c13b71466 Update changelog-pr.yml 2025-02-21 08:24:37 +01:00
community-scripts-pr-app[bot]
e1c25a3c8e Update CHANGELOG.md (#2531)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-21 08:23:24 +01:00
CanbiZ
e5bfb8f8a3 Update changelog-pr-config.json 2025-02-21 08:21:27 +01:00
CanbiZ
4dfcd32d92 Update changelog-pr-config.json 2025-02-21 08:16:25 +01:00
CanbiZ
167deb5d7f Update autolabeler.yml 2025-02-21 08:15:38 +01:00
CanbiZ
8cb3007d66 Update autolabeler.yml 2025-02-21 08:13:54 +01:00
CanbiZ
49bcd30e77 Fix: Tianji - Downgrade Node (#2530) 2025-02-21 08:09:50 +01:00
282 changed files with 4058 additions and 1158 deletions

View File

@@ -40,27 +40,27 @@ Before contributing, please ensure that you have the following setup:
- [Shell Format](https://marketplace.visualstudio.com/items?itemName=foxundermoon.shell-format) - [Shell Format](https://marketplace.visualstudio.com/items?itemName=foxundermoon.shell-format)
### Important Notes ### Important Notes
- Use [AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/ct/AppName.sh) and [AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/install/AppName-install.sh) as templates when creating new scripts. - Use [AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh) and [AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh) as templates when creating new scripts.
--- ---
# 🚀 The Application Script (ct/AppName.sh) # 🚀 The Application Script (ct/AppName.sh)
- You can find all coding standards, as well as the structure for this file [here](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/ct/AppName.md). - You can find all coding standards, as well as the structure for this file [here](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.md).
- These scripts are responsible for container creation, setting the necessary variables and handling the update of the application once installed. - These scripts are responsible for container creation, setting the necessary variables and handling the update of the application once installed.
--- ---
# 🛠 The Installation Script (install/AppName-install.sh) # 🛠 The Installation Script (install/AppName-install.sh)
- You can find all coding standards, as well as the structure for this file [here](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/install/AppName-install.md). - You can find all coding standards, as well as the structure for this file [here](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.md).
- These scripts are responsible for the installation of the application. - These scripts are responsible for the installation of the application.
--- ---
## 🚀 Building Your Own Scripts ## 🚀 Building Your Own Scripts
Start with the [template script](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/install/AppName-install.sh) Start with the [template script](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh)
--- ---
@@ -99,8 +99,8 @@ Open a Pull Request from your feature branch to the main repository branch. You
## 📚 Pages ## 📚 Pages
- [CT Template: AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/ct/AppName.sh) - [CT Template: AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh)
- [Install Template: AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/install/AppName-install.sh) - [Install Template: AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh)
- [JSON Template: AppName.json](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_GUIDE/json/AppName.json) - [JSON Template: AppName.json](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/json/AppName.json)

View File

@@ -95,7 +95,7 @@ Example:
>| Variable | Description | Notes | >| Variable | Description | Notes |
>|----------|-------------|-------| >|----------|-------------|-------|
>| `APP` | Application name | Must match ct\AppName.sh | >| `APP` | Application name | Must match ct\AppName.sh |
>| `TAGS` | Proxmox display tags without Spaces, only ; | Limit the number | >| `var_tags` | Proxmox display tags without Spaces, only ; | Limit the number |
>| `var_cpu` | CPU cores | Number of cores | >| `var_cpu` | CPU cores | Number of cores |
>| `var_ram` | RAM | In MB | >| `var_ram` | RAM | In MB |
>| `var_disk` | Disk capacity | In GB | >| `var_disk` | Disk capacity | In GB |
@@ -193,13 +193,13 @@ wget -q
unzip -q unzip -q
``` ```
- If a command does not come with this functionality use `&>/dev/null` to suppress it's output. - If a command does not come with this functionality use `$STD` to suppress it's output.
Example: Example:
```bash ```bash
php artisan migrate --force &>/dev/null $STD php artisan migrate --force
php artisan config:clear &>/dev/null $STD php artisan config:clear
``` ```
### 3.5 **Backups** ### 3.5 **Backups**
@@ -247,7 +247,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no automatic update function for ${APP}." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }
``` ```

View File

@@ -8,7 +8,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
# App Default Values # App Default Values
APP="[APP_NAME]" APP="[APP_NAME]"
# Name of the app (e.g. Google, Adventurelog, Apache-Guacamole" # Name of the app (e.g. Google, Adventurelog, Apache-Guacamole"
TAGS="[TAGS]" var_tags="[TAGS]"
# Tags for Proxmox VE, maximum 2 pcs., no spaces allowed, separated by a semicolon ; (e.g. database | adblock;dhcp) # Tags for Proxmox VE, maximum 2 pcs., no spaces allowed, separated by a semicolon ; (e.g. database | adblock;dhcp)
var_cpu="[CPU]" var_cpu="[CPU]"
# Number of cores (1-X) (e.g. 4) - default are 2 # Number of cores (1-X) (e.g. 4) - default are 2

View File

@@ -1,17 +1,5 @@
{ {
"breaking change": [
{
"fileStatus": "renamed",
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
"excludeGlobs": []
},
{
"fileStatus": "removed",
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
"excludeGlobs": []
}
],
"new script": [ "new script": [
{ {
"fileStatus": "added", "fileStatus": "added",
@@ -33,10 +21,17 @@
"excludeGlobs": [] "excludeGlobs": []
} }
], ],
"rename script": [ "maintenance": [
{ {
"fileStatus": "renamed", "fileStatus": null,
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"], "includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh", "api/**"],
"excludeGlobs": []
}
],
"core": [
{
"fileStatus": null,
"includeGlobs": ["misc/*.func", "ct/create_lxc.sh"],
"excludeGlobs": [] "excludeGlobs": []
} }
], ],
@@ -47,20 +42,28 @@
"excludeGlobs": [] "excludeGlobs": []
} }
], ],
"maintenance": [ "api": [
{
"fileStatus": null,
"includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh"],
"excludeGlobs": ["misc/api.func"]
}
],
"api": [
{ {
"fileStatus": null, "fileStatus": null,
"includeGlobs": ["api/**", "misc/api.func"], "includeGlobs": ["api/**", "misc/api.func"],
"excludeGlobs": [] "excludeGlobs": []
} }
], ],
"github": [
{
"fileStatus": null,
"includeGlobs": [".github/**"],
"excludeGlobs": []
}
],
"json": [
{
"fileStatus": "modified",
"includeGlobs": ["json/**"],
"excludeGlobs": []
}
],
"high risk": [ "high risk": [
{ {
"fileStatus": null, "fileStatus": null,
@@ -68,4 +71,6 @@
"excludeGlobs": [] "excludeGlobs": []
} }
] ]
}
}

View File

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

View File

@@ -1,25 +1,25 @@
## ✍️ Description ## ✍️ Description
<!-- Provide a clear and concise description of your changes. --> <!-- Provide a clear and concise description of your changes. -->
## 🔗 Related PR / Discussion / Issue ## 🔗 Related PR / Discussion / Issue
Link: # Link: #
## ✅ Prerequisites ## ✅ Prerequisites
Before this PR can be reviewed, the following must be completed: Before this PR can be reviewed, the following must be completed:
- [] **Self-review performed** Code follows established patterns and conventions. - [] **Self-review performed** Code follows established patterns and conventions.
- [] **Testing performed** Changes have been thoroughly tested and verified. - [] **Testing performed** Changes have been thoroughly tested and verified.
## 🛠️ Type of Change ## 🛠️ Type of Change
Select all that apply:
- [] 🐞 **Bug fix** Resolves an issue without breaking functionality.
- [] ✨ **New feature** Adds new, non-breaking functionality.
- [] 💥 **Breaking change** Alters existing functionality in a way that may require updates.
- [] 🆕 **New script** A fully functional and tested script or script set.
Select all that apply:
- [] 🆕 **New script** A fully functional and tested script or script set.
- [] 🐞 **Bug fix** Resolves an issue without breaking functionality.
- [] ✨ **New feature** Adds new, non-breaking functionality.
- [] 💥 **Breaking change** Alters existing functionality in a way that may require updates.
## 📋 Additional Information (optional) ## 📋 Additional Information (optional)
<!-- Provide extra context, screenshots, or references if needed. --> <!-- Provide extra context, screenshots, or references if needed. -->

View File

@@ -19,7 +19,7 @@ jobs:
- name: Install minimatch - name: Install minimatch
run: npm install minimatch run: npm install minimatch
- name: Label PR based on file changes - name: Label PR based on file changes and PR template
uses: actions/github-script@v7 uses: actions/github-script@v7
with: with:
script: | script: |
@@ -30,24 +30,29 @@ jobs:
const configPath = path.resolve(process.env.CONFIG_PATH); const configPath = path.resolve(process.env.CONFIG_PATH);
const fileContent = await fs.readFile(configPath, 'utf-8'); const fileContent = await fs.readFile(configPath, 'utf-8');
const autolabelerConfig = JSON.parse(fileContent); const autolabelerConfig = JSON.parse(fileContent);
const prNumber = context.payload.pull_request.number; const prNumber = context.payload.pull_request.number;
const prBody = context.payload.pull_request.body.toLowerCase();
let labelsToAdd = new Set();
const prListFilesResponse = await github.rest.pulls.listFiles({ const prListFilesResponse = await github.rest.pulls.listFiles({
owner: context.repo.owner, owner: context.repo.owner,
repo: context.repo.repo, repo: context.repo.repo,
pull_number: prNumber, pull_number: prNumber,
}); });
const prFiles = prListFilesResponse.data; const prFiles = prListFilesResponse.data;
let labelsToAdd = new Set();
// Apply labels based on file changes
for (const [label, rules] of Object.entries(autolabelerConfig)) { for (const [label, rules] of Object.entries(autolabelerConfig)) {
const shouldAddLabel = prFiles.some((prFile) => { const shouldAddLabel = prFiles.some((prFile) => {
return rules.some((rule) => { return rules.some((rule) => {
const isFileStatusMatch = rule.fileStatus ? rule.fileStatus === prFile.status : true; const isFileStatusMatch = rule.fileStatus ? rule.fileStatus === prFile.status : true;
const isIncludeGlobMatch = rule.includeGlobs.some((glob) => minimatch(prFile.filename, glob)); const isIncludeGlobMatch = rule.includeGlobs.some((glob) => minimatch(prFile.filename, glob));
const isExcludeGlobMatch = rule.excludeGlobs.some((glob) => minimatch(prFile.filename, glob)); const isExcludeGlobMatch = rule.excludeGlobs.some((glob) => minimatch(prFile.filename, glob));
return isFileStatusMatch && isIncludeGlobMatch && !isExcludeGlobMatch; return isFileStatusMatch && isIncludeGlobMatch && !isExcludeGlobMatch;
}); });
}); });
@@ -56,38 +61,23 @@ jobs:
labelsToAdd.add(label); labelsToAdd.add(label);
} }
} }
const templateLabelMappings = {
if (labelsToAdd.size > 0) { "🐞 **Bug fix**": "bugfix",
console.log(`Adding labels ${Array.from(labelsToAdd).join(", ")} to PR ${prNumber}`); "✨ **New feature**": "feature",
await github.rest.issues.addLabels({ "💥 **Breaking change**": "breaking change",
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
labels: Array.from(labelsToAdd),
});
}
- name: Label PR based on PR template selections
uses: actions/github-script@v7
with:
script: |
const prBody = context.payload.pull_request.body.toLowerCase();
const prNumber = context.payload.pull_request.number;
const labelMappings = {
"🐞 bug fix": "bug fix",
"✨ new feature": "new feature",
"💥 breaking change": "breaking change",
"🆕 new script": "new script"
}; };
let labelsToAdd = new Set(); for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
for (const [checkbox, label] of Object.entries(labelMappings)) { const regex = new RegExp(`- \\[(x|X)\\]\\s*.*${escapedCheckbox}`, "i");
const regex = new RegExp(`- \\[(.*?)\\] ${checkbox}`, "i"); const match = prBody.match(regex);
if (regex.test(prBody)) { if (match) {
console.log(`Match: ${match}`);
labelsToAdd.add(label); labelsToAdd.add(label);
} }
} }
console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`);
if (labelsToAdd.size > 0) { if (labelsToAdd.size > 0) {
console.log(`Adding labels ${Array.from(labelsToAdd).join(", ")} to PR ${prNumber}`); console.log(`Adding labels ${Array.from(labelsToAdd).join(", ")} to PR ${prNumber}`);

View File

@@ -30,7 +30,6 @@ jobs:
- name: Get latest dates in changelog - name: Get latest dates in changelog
run: | run: |
# Extrahiere die neuesten zwei Daten aus dem Changelog
DATES=$(grep -E '^## [0-9]{4}-[0-9]{2}-[0-9]{2}' CHANGELOG.md | head -n 2 | awk '{print $2}') DATES=$(grep -E '^## [0-9]{4}-[0-9]{2}-[0-9]{2}' CHANGELOG.md | head -n 2 | awk '{print $2}')
LATEST_DATE=$(echo "$DATES" | sed -n '1p') LATEST_DATE=$(echo "$DATES" | sed -n '1p')
@@ -55,7 +54,31 @@ jobs:
const configPath = path.resolve(process.env.CONFIG_PATH); const configPath = path.resolve(process.env.CONFIG_PATH);
const fileContent = await fs.readFile(configPath, 'utf-8'); const fileContent = await fs.readFile(configPath, 'utf-8');
const changelogConfig = JSON.parse(fileContent); const changelogConfig = JSON.parse(fileContent);
const categorizedPRs = changelogConfig.map(obj => ({ ...obj, notes: [] }));
const categorizedPRs = changelogConfig.map(obj => ({
...obj,
notes: [],
subCategories: obj.subCategories ?? (
obj.labels.includes("update script") ? [
{ title: "🐞 Bug Fixes", labels: ["bugfix"], notes: [] },
{ title: "✨ New Features", labels: ["feature"], notes: [] },
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] }
] :
obj.labels.includes("maintenance") ? [
{ title: "🐞 Bug Fixes", labels: ["bugfix"], notes: [] },
{ title: "✨ New Features", labels: ["feature"], notes: [] },
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] },
{ title: "📡 API", labels: ["api"], notes: [] },
{ title: "Github", labels: ["github"], notes: [] }
] :
obj.labels.includes("website") ? [
{ title: "🐞 Bug Fixes", labels: ["bugfix"], notes: [] },
{ title: "✨ New Features", labels: ["feature"], notes: [] },
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] },
{ title: "Script Information", labels: ["json"], notes: [] }
] : []
)
}));
const latestDateInChangelog = new Date(process.env.LATEST_DATE); const latestDateInChangelog = new Date(process.env.LATEST_DATE);
latestDateInChangelog.setUTCHours(23, 59, 59, 999); latestDateInChangelog.setUTCHours(23, 59, 59, 999);
@@ -70,24 +93,40 @@ jobs:
per_page: 100, per_page: 100,
}); });
pulls.filter(pr => pulls.filter(pr =>
pr.merged_at && pr.merged_at &&
new Date(pr.merged_at) > latestDateInChangelog && new Date(pr.merged_at) > latestDateInChangelog &&
!pr.labels.some(label => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase())) !pr.labels.some(label =>
["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase())
)
).forEach(pr => { ).forEach(pr => {
const prLabels = pr.labels.map(label => label.name.toLowerCase()); const prLabels = pr.labels.map(label => label.name.toLowerCase());
const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`; const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
for (const { labels, notes } of categorizedPRs) { const updateScriptsCategory = categorizedPRs.find(category =>
if (labels.length === 0 || labels.some(label => prLabels.includes(label))) { category.labels.some(label => prLabels.includes(label))
notes.push(prNote); );
break;
if (updateScriptsCategory) {
const subCategory = updateScriptsCategory.subCategories.find(sub =>
sub.labels.some(label => prLabels.includes(label))
);
if (subCategory) {
subCategory.notes.push(prNote);
} else {
updateScriptsCategory.notes.push(prNote);
} }
} }
}); });
console.log(JSON.stringify(categorizedPRs, null, 2));
return categorizedPRs; return categorizedPRs;
- name: Update CHANGELOG.md - name: Update CHANGELOG.md
uses: actions/github-script@v7 uses: actions/github-script@v7
with: with:
@@ -100,17 +139,36 @@ jobs:
const changelogPath = path.resolve('CHANGELOG.md'); const changelogPath = path.resolve('CHANGELOG.md');
const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }}; const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }};
let newReleaseNotes = `## ${today}\n\n### Changes\n\n`; console.log(JSON.stringify(categorizedPRs, null, 2));
for (const { title, notes } of categorizedPRs) {
if (notes.length > 0) {
newReleaseNotes += `### ${title}\n\n${notes.join("\n")}\n\n`;
}
}
let newReleaseNotes = `## ${today}\n\n`;
for (const { title, notes, subCategories } of categorizedPRs) {
const hasSubcategories = subCategories && subCategories.length > 0;
const hasMainNotes = notes.length > 0;
const hasSubNotes = hasSubcategories && subCategories.some(sub => sub.notes && sub.notes.length > 0);
if (hasMainNotes || hasSubNotes) {
newReleaseNotes += `### ${title}\n\n`;
}
if (hasMainNotes) {
newReleaseNotes += ` ${notes.join("\n")}\n\n`;
}
if (hasSubcategories) {
for (const { title: subTitle, notes: subNotes } of subCategories) {
if (subNotes && subNotes.length > 0) {
newReleaseNotes += ` - #### ${subTitle}\n\n`;
newReleaseNotes += ` ${subNotes.join("\n ")}\n\n`;
}
}
}
}
const changelogContent = await fs.readFile(changelogPath, 'utf-8'); const changelogContent = await fs.readFile(changelogPath, 'utf-8');
const changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`); const changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`);
// Ersetze oder füge Release Notes ein
const regex = changelogIncludesTodaysReleaseNotes const regex = changelogIncludesTodaysReleaseNotes
? new RegExp(`## ${today}.*(?=## ${latestDateInChangelog})`, "gs") ? new RegExp(`## ${today}.*(?=## ${latestDateInChangelog})`, "gs")
: new RegExp(`(?=## ${latestDateInChangelog})`, "gs"); : new RegExp(`(?=## ${latestDateInChangelog})`, "gs");
@@ -165,4 +223,4 @@ jobs:
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number') PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve gh pr review $PR_NUMBER --approve
fi fi

122
.github/workflows/close-discussion.yml vendored Normal file
View File

@@ -0,0 +1,122 @@
name: Close Discussion on PR Merge
on:
pull_request:
types: [closed]
jobs:
close-discussion:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set Up Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install Dependencies
run: npm install zx @octokit/graphql
- name: Close Discussion
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_BODY: ${{ github.event.pull_request.body }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO_OWNER: ${{ github.repository_owner }}
REPO_NAME: ${{ github.event.repository.name }}
run: |
npx zx << 'EOF'
import { graphql } from "@octokit/graphql";
(async function() {
try {
const token = process.env.GITHUB_TOKEN;
const prBody = process.env.PR_BODY;
const prNumber = process.env.PR_NUMBER;
const owner = process.env.REPO_OWNER;
const repo = process.env.REPO_NAME;
if (!token || !prBody || !prNumber || !owner || !repo) {
console.log("Missing required environment variables.");
process.exit(1);
}
const match = prBody.match(/#(\d+)/);
if (!match) {
console.log("No discussion ID found in PR body.");
return;
}
const discussionNumber = match[1];
console.log(`Extracted Discussion Number: ${discussionNumber}`);
console.log(`PR Number: ${prNumber}`);
console.log(`Repository: ${owner}/${repo}`);
const graphqlWithAuth = graphql.defaults({
headers: { authorization: `Bearer ${token}` },
});
const discussionQuery = `
query($owner: String!, $repo: String!, $number: Int!) {
repository(owner: $owner, name: $repo) {
discussion(number: $number) {
id
}
}
}
`;
const discussionResponse = await graphqlWithAuth(discussionQuery, {
owner,
repo,
number: parseInt(discussionNumber, 10),
});
const discussionQLId = discussionResponse.repository.discussion.id;
if (!discussionQLId) {
console.log("Failed to fetch discussion GraphQL ID.");
return;
}
console.log(`GraphQL Discussion ID: ${discussionQLId}`);
const commentMutation = `
mutation($discussionId: ID!, $body: String!) {
addDiscussionComment(input: { discussionId: $discussionId, body: $body }) {
comment { id body }
}
}
`;
const commentResponse = await graphqlWithAuth(commentMutation, {
discussionId: discussionQLId,
body: `Merged with PR #${prNumber}`,
});
const commentId = commentResponse.addDiscussionComment.comment.id;
if (!commentId) {
console.log("Failed to post the comment.");
return;
}
console.log(`Comment Posted Successfully! Comment ID: ${commentId}`);
const markAnswerMutation = `
mutation($id: ID!) {
markDiscussionCommentAsAnswer(input: { id: $id }) {
discussion { id title }
}
}
`;
await graphqlWithAuth(markAnswerMutation, { id: commentId });
console.log("Comment marked as answer successfully!");
} catch (error) {
console.error("Error:", error);
return;
}
})();
EOF

View File

@@ -13,7 +13,7 @@ jobs:
run-install-script: run-install-script:
runs-on: pvenode runs-on: pvenode
steps: steps:
- name: Checkout PR branch (supports forks) - name: Checkout PR branch
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
ref: ${{ github.event.pull_request.head.ref }} ref: ${{ github.event.pull_request.head.ref }}
@@ -37,7 +37,8 @@ jobs:
echo "Changed files: $CHANGED_FILES" echo "Changed files: $CHANGED_FILES"
echo "SCRIPT=$CHANGED_FILES" >> $GITHUB_ENV echo "SCRIPT=$CHANGED_FILES" >> $GITHUB_ENV
env: env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Get scripts - name: Get scripts
id: check-install-script id: check-install-script
@@ -61,59 +62,71 @@ jobs:
id: run-install id: run-install
continue-on-error: true continue-on-error: true
run: | run: |
set +e set +e
#run for each files in /ct #run for each files in /ct
for FILE in ${{ env.ALL_FILES }}; do for FILE in ${{ env.ALL_FILES }}; do
STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//') STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
echo "Running Test for: $STRIPPED_NAME" echo "Running Test for: $STRIPPED_NAME"
if [[ $FILE =~ ^install/.*-install\.sh$ ]]; then if grep -E -q 'read\s+-r\s+-p\s+".*"\s+\w+' "$FILE"; then
CT_SCRIPT="ct/$STRIPPED_NAME.sh" echo "The script contains an interactive prompt. Skipping execution."
if [[ ! -f $CT_SCRIPT ]]; then
echo "No CT script found for $STRIPPED_NAME"
ERROR_MSG="No CT script found for $FILE"
echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
continue continue
fi fi
echo "Found CT script for $STRIPPED_NAME" if [[ $FILE =~ ^install/.*-install\.sh$ ]]; then
chmod +x "$CT_SCRIPT" CT_SCRIPT="ct/$STRIPPED_NAME.sh"
RUNNING_FILE=$CT_SCRIPT if [[ ! -f $CT_SCRIPT ]]; then
elif [[ $FILE =~ ^ct/.*\.sh$ ]]; then echo "No CT script found for $STRIPPED_NAME"
INSTALL_SCRIPT="install/$STRIPPED_NAME-install.sh" ERROR_MSG="No CT script found for $FILE"
if [[ ! -f $INSTALL_SCRIPT ]]; then echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
echo "No install script found for $STRIPPED_NAME" continue
ERROR_MSG="No install script found for $FILE" fi
if grep -E -q 'read\s+-r\s+-p\s+".*"\s+\w+' "install/$STRIPPED_NAME-install.sh"; then
echo "The script contains an interactive prompt. Skipping execution."
continue
fi
echo "Found CT script for $STRIPPED_NAME"
chmod +x "$CT_SCRIPT"
RUNNING_FILE=$CT_SCRIPT
elif [[ $FILE =~ ^ct/.*\.sh$ ]]; then
INSTALL_SCRIPT="install/$STRIPPED_NAME-install.sh"
if [[ ! -f $INSTALL_SCRIPT ]]; then
echo "No install script found for $STRIPPED_NAME"
ERROR_MSG="No install script found for $FILE"
echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
continue
fi
echo "Found install script for $STRIPPED_NAME"
chmod +x "$INSTALL_SCRIPT"
RUNNING_FILE=$FILE
if grep -E -q 'read\s+-r\s+-p\s+".*"\s+\w+' "ct/$STRIPPED_NAME.sh"; then
echo "The script contains an interactive prompt. Skipping execution."
continue
fi
fi
git remote add community-scripts https://github.com/community-scripts/ProxmoxVE.git
git fetch community-scripts
rm -f .github/workflows/scripts/app-test/pr-build.func || true
rm -f .github/workflows/scripts/app-test/pr-install.func || true
rm -f .github/workflows/scripts/app-test/pr-alpine-install.func || true
rm -f .github/workflows/scripts/app-test/pr-create-lxc.sh || true
git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-build.func
git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-install.func
git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-alpine-install.func
git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-create-lxc.sh
chmod +x $RUNNING_FILE
chmod +x .github/workflows/scripts/app-test/pr-create-lxc.sh
chmod +x .github/workflows/scripts/app-test/pr-install.func
chmod +x .github/workflows/scripts/app-test/pr-alpine-install.func
chmod +x .github/workflows/scripts/app-test/pr-build.func
sed -i 's|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)|source .github/workflows/scripts/app-test/pr-build.func|g' "$RUNNING_FILE"
echo "Executing $RUNNING_FILE"
ERROR_MSG=$(./$RUNNING_FILE 2>&1 > /dev/null)
echo "Finished running $FILE"
if [ -n "$ERROR_MSG" ]; then
echo "ERROR in $STRIPPED_NAME: $ERROR_MSG"
echo "$ERROR_MSG" > result_$STRIPPED_NAME.log echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
continue fi
fi done
echo "Found install script for $STRIPPED_NAME" set -e # Restore exit-on-error
chmod +x "$INSTALL_SCRIPT"
RUNNING_FILE=$FILE
fi
git remote add community-scripts https://github.com/community-scripts/ProxmoxVE.git
git fetch community-scripts
rm -f .github/workflows/scripts/app-test/pr-build.func || true
rm -f .github/workflows/scripts/app-test/pr-install.func || true
rm -f .github/workflows/scripts/app-test/pr-alpine-install.func || true
rm -f .github/workflows/scripts/app-test/pr-create-lxc.sh || true
git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-build.func
git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-install.func
git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-alpine-install.func
git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-create-lxc.sh
chmod +x $RUNNING_FILE
chmod +x .github/workflows/scripts/app-test/pr-create-lxc.sh
chmod +x .github/workflows/scripts/app-test/pr-install.func
chmod +x .github/workflows/scripts/app-test/pr-alpine-install.func
chmod +x .github/workflows/scripts/app-test/pr-build.func
sed -i 's|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)|source .github/workflows/scripts/app-test/pr-build.func|g' "$RUNNING_FILE"
echo "Executing $RUNNING_FILE"
ERROR_MSG=$(./$RUNNING_FILE 2>&1 > /dev/null)
echo "Finished running $FILE"
if [ -n "$ERROR_MSG" ]; then
echo "ERROR in $STRIPPED_NAME: $ERROR_MSG"
echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
fi
done
set -e # Restore exit-on-error
- name: Cleanup PVE Node - name: Cleanup PVE Node
run: | run: |
@@ -125,12 +138,13 @@ jobs:
pct stop $container_id pct stop $container_id
pct destroy $container_id pct destroy $container_id
fi fi
done done
- name: Post error comments - name: Post error comments
run: | run: |
ERROR="false" ERROR="false"
SEARCH_LINE=".github/workflows/scripts/app-test/pr-build.func: line 253:" SEARCH_LINE=".github/workflows/scripts/app-test/pr-build.func: line 255"
for FILE in ${{ env.ALL_FILES }}; do for FILE in ${{ env.ALL_FILES }}; do
STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//') STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
if [[ ! -f result_$STRIPPED_NAME.log ]]; then if [[ ! -f result_$STRIPPED_NAME.log ]]; then
@@ -145,8 +159,6 @@ jobs:
gh pr comment ${{ github.event.pull_request.number }} \ gh pr comment ${{ github.event.pull_request.number }} \
--repo ${{ github.repository }} \ --repo ${{ github.repository }} \
--body ":warning: The script _**$FILE**_ failed with the following message: <br> <div><strong>${CLEANED_ERROR_MSG}</strong></div>" --body ":warning: The script _**$FILE**_ failed with the following message: <br> <div><strong>${CLEANED_ERROR_MSG}</strong></div>"
ERROR="true" ERROR="true"
fi fi
done done
@@ -157,3 +169,5 @@ jobs:
- name: Fail if error - name: Fail if error
if: ${{ env.ERROR == 'true' }} if: ${{ env.ERROR == 'true' }}
run: exit 1 run: exit 1

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG # Copyright (c) 2021-2025 community-scripts ORG
# Author: michelroegl-brunner # Author: Michel Roegl-Brunner (michelroegl-brunner)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
color() { color() {
@@ -11,7 +11,7 @@ catch_errors() {
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
} }
# This function handles errors
error_handler() { error_handler() {
local line_number="$1" local line_number="$1"
local command="$2" local command="$2"
@@ -21,8 +21,8 @@ error_handler() {
exit 0 exit 0
} }
verb_ip6() { verb_ip6() {
STD="" STD=""
return return
} }
msg_info() { msg_info() {
@@ -30,13 +30,13 @@ msg_info() {
echo -ne "${msg}\n" echo -ne "${msg}\n"
} }
msg_ok() { msg_ok() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
msg_error() { msg_error() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
@@ -71,7 +71,7 @@ network_check() {
} }
update_os() { update_os() {
msg_info "Updating Container OS" msg_info "Updating Container OS"
apk update apk update
apk upgrade apk upgrade
msg_ok "Updated Container OS" msg_ok "Updated Container OS"
@@ -82,7 +82,5 @@ motd_ssh() {
} }
customize() { customize() {
return return
} }

View File

@@ -6,12 +6,13 @@
variables() { variables() {
NSAPP=$(echo ${APP,,} | tr -d ' ') # This function sets the NSAPP variable by converting the value of the APP variable to lowercase and removing any spaces. NSAPP=$(echo ${APP,,} | tr -d ' ') # This function sets the NSAPP variable by converting the value of the APP variable to lowercase and removing any spaces.
var_install="${NSAPP}-install" # sets the var_install variable by appending "-install" to the value of NSAPP. var_install="${NSAPP}-install" # sets the var_install variable by appending "-install" to the value of NSAPP.
} }
NEXTID=$(pvesh get /cluster/nextid) NEXTID=$(pvesh get /cluster/nextid)
timezone=$(cat /etc/timezone) timezone=$(cat /etc/timezone)
header_info(){ header_info() {
return return
} }
base_settings() { base_settings() {
@@ -20,10 +21,10 @@ base_settings() {
DISK_SIZE="4" DISK_SIZE="4"
CORE_COUNT="1" CORE_COUNT="1"
RAM_SIZE="1024" RAM_SIZE="1024"
VERBOSE="${1:-no}" VERBOSE="no"
PW="" PW=""
CT_ID=$NEXTID CT_ID=$NEXTID
HN="Testing" HN=$NSAPP
BRG="vmbr0" BRG="vmbr0"
NET="dhcp" NET="dhcp"
GATE="" GATE=""
@@ -106,7 +107,7 @@ catch_errors() {
} }
# This function handles errors # This function handles errors
error_handler() { error_handler() {
local line_number="$1" local line_number="$1"
local command="$2" local command="$2"
SCRIPT_NAME=$(basename "$0") SCRIPT_NAME=$(basename "$0")
@@ -120,17 +121,17 @@ msg_info() {
echo -ne "${msg}\n" echo -ne "${msg}\n"
} }
msg_ok() { msg_ok() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
msg_error() { msg_error() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
start(){ start() {
base_settings base_settings
return return
} }
@@ -146,9 +147,9 @@ build_container() {
TEMP_DIR=$(mktemp -d) TEMP_DIR=$(mktemp -d)
pushd $TEMP_DIR >/dev/null pushd $TEMP_DIR >/dev/null
if [ "$var_os" == "alpine" ]; then if [ "$var_os" == "alpine" ]; then
export FUNCTIONS_FILE_PATH="$(cat /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/.github/workflows/scripts/app-test/pr-alpine-install.func)" export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/.github/workflows/scripts/app-test/pr-alpine-install.func)"
else else
export FUNCTIONS_FILE_PATH="$(cat /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/.github/workflows/scripts/app-test/pr-install.func)" export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/.github/workflows/scripts/app-test/pr-install.func)"
fi fi
export CACHER="$APT_CACHER" export CACHER="$APT_CACHER"
@@ -182,9 +183,8 @@ build_container() {
" "
echo "Container ID: $CTID" echo "Container ID: $CTID"
# This executes create_lxc.sh and creates the container and .conf file # This executes create_lxc.sh and creates the container and .conf file
bash /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/.github/workflows/scripts/app-test/pr-create-lxc.sh bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/.github/workflows/scripts/app-test/pr-create-lxc.sh)"
LXC_CONFIG=/etc/pve/lxc/${CTID}.conf LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
if [ "$CT_TYPE" == "0" ]; then if [ "$CT_TYPE" == "0" ]; then
@@ -233,6 +233,7 @@ EOF
fi fi
fi fi
fi fi
# 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"
@@ -242,7 +243,7 @@ EOF
msg_error "No install script found for $APP" msg_error "No install script found for $APP"
exit 1 exit 1
fi fi
if [ "$var_os" == "alpine" ]; then if [ "$var_os" == "alpine" ]; then
sleep 3 sleep 3
pct exec "$CTID" -- /bin/sh -c 'cat <<EOF >/etc/apk/repositories pct exec "$CTID" -- /bin/sh -c 'cat <<EOF >/etc/apk/repositories
http://dl-cdn.alpinelinux.org/alpine/latest-stable/main http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
@@ -250,11 +251,10 @@ http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
EOF' EOF'
pct exec "$CTID" -- ash -c "apk add bash >/dev/null" pct exec "$CTID" -- ash -c "apk add bash >/dev/null"
fi fi
lxc-attach -n "$CTID" -- bash -c "$(cat /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/install/$var_install.sh)" $var_install.sh lxc-attach -n "$CTID" -- bash -c "$(cat /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/install/$var_install.sh)"
} }
description(){ description() {
IP=$(pct exec "$CTID" ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) IP=$(pct exec "$CTID" ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
return }
}

View File

@@ -11,8 +11,9 @@ catch_errors() {
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
} }
# This function handles errors
error_handler() { error_handler() {
local exit_code="$?" local exit_code="$?"
local line_number="$1" local line_number="$1"
local command="$2" local command="$2"
local error_message="Failure in line $line_number: exit code $exit_code: while executing command $command" local error_message="Failure in line $line_number: exit code $exit_code: while executing command $command"
@@ -20,7 +21,7 @@ error_handler() {
exit 100 exit 100
} }
verb_ip6() { verb_ip6() {
return return
} }
msg_info() { msg_info() {
@@ -28,18 +29,17 @@ msg_info() {
echo -ne "${msg}\n" echo -ne "${msg}\n"
} }
msg_ok() { msg_ok() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
msg_error() { msg_error() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
VALIDCT=$(pvesm status -content rootdir | awk 'NR>1') VALIDCT=$(pvesm status -content rootdir | awk 'NR>1')
if [ -z "$VALIDCT" ]; then if [ -z "$VALIDCT" ]; then
msg_error "Unable to detect a valid Container Storage location." msg_error "Unable to detect a valid Container Storage location."
@@ -64,9 +64,12 @@ function select_storage() {
CONTENT='vztmpl' CONTENT='vztmpl'
CONTENT_LABEL='Container template' CONTENT_LABEL='Container template'
;; ;;
*) false || { msg_error "Invalid storage class."; exit 201; };; *) false || {
msg_error "Invalid storage class."
exit 201
} ;;
esac esac
# This Queries all storage locations # This Queries all storage locations
local -a MENU local -a MENU
while read -r line; do while read -r line; do
@@ -80,23 +83,32 @@ function select_storage() {
fi fi
MENU+=("$TAG" "$ITEM" "OFF") MENU+=("$TAG" "$ITEM" "OFF")
done < <(pvesm status -content $CONTENT | awk 'NR>1') done < <(pvesm status -content $CONTENT | awk 'NR>1')
# Select storage location # Select storage location
if [ $((${#MENU[@]}/3)) -eq 1 ]; then if [ $((${#MENU[@]} / 3)) -eq 1 ]; then
printf ${MENU[0]} printf ${MENU[0]}
else else
msg_error "STORAGE ISSUES!" msg_error "STORAGE ISSUES!"
exit 202 exit 202
fi fi
} }
[[ "${CTID:-}" ]] || {
msg_error "You need to set 'CTID' variable."
exit 203
}
[[ "${PCT_OSTYPE:-}" ]] || {
msg_error "You need to set 'PCT_OSTYPE' variable."
exit 204
}
# Test if ID is valid
[ "$CTID" -ge "100" ] || {
msg_error "ID cannot be less than 100."
exit 205
}
[[ "${CTID:-}" ]] || { msg_error "You need to set 'CTID' variable."; exit 203; } # Test if ID is in use
[[ "${PCT_OSTYPE:-}" ]] || { msg_error "You need to set 'PCT_OSTYPE' variable."; exit 204; }
[ "$CTID" -ge "100" ] || { msg_error "ID cannot be less than 100."; exit 205; }
if pct status $CTID &>/dev/null; then if pct status $CTID &>/dev/null; then
echo -e "ID '$CTID' is already in use." echo -e "ID '$CTID' is already in use."
unset CTID unset CTID
@@ -110,10 +122,12 @@ CONTAINER_STORAGE=$(select_storage container) || exit
pveam update >/dev/null pveam update >/dev/null
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-} TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V) mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V)
[ ${#TEMPLATES[@]} -gt 0 ] || { msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."; exit 207; } [ ${#TEMPLATES[@]} -gt 0 ] || {
msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."
exit 207
}
TEMPLATE="${TEMPLATES[-1]}" TEMPLATE="${TEMPLATES[-1]}"
TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE" TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE"
@@ -121,28 +135,29 @@ TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE"
if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE"; then if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE"; then
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH" [[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null || pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||
{ msg_error "A problem occurred while downloading the LXC template."; exit 208; } {
msg_error "A problem occurred while downloading the LXC template."
exit 208
}
fi fi
grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >>/etc/subuid
grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >> /etc/subuid grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >>/etc/subgid
grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >> /etc/subgid
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}}) PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}") [[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||
{
msg_error "A problem occurred while re-downloading the LXC template."
exit 208
}
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH" msg_error "A problem occurred while trying to create container after re-downloading template."
exit 200
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||
{ msg_error "A problem occurred while re-downloading the LXC template."; exit 208; }
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
msg_error "A problem occurred while trying to create container after re-downloading template."
exit 200
fi
fi fi
fi

View File

@@ -1,31 +1,31 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG # Copyright (c) 2021-2025 community-scripts ORG
# Author: michelroegl-brunner # Author: Michel Roegl-Brunner (michelroegl-brunner)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
color() { color() {
return return
} }
SCRIPT_NAME="${BASH_SOURCE[0]:-unknown_script}"
catch_errors() { catch_errors() {
set -Euoe pipefail set -Euo pipefail
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
} }
error_handler() { error_handler() {
local line_number="$1" local line_number="$1"
local command="$2" local command="$2"
local error_message="$SCRIPT_NAME: Failure in line $line_number while executing command '$command'" local error_message="Failure in line $line_number while executing command '$command'"
echo -e "\n$error_message" echo -e "\n$error_message\n" >&2
exit 300 exit 1
} }
verb_ip6() { verb_ip6() {
STD="silent" STD="silent"
silent() { silent() {
"$@" >/dev/null 2>&1 || error_handler "${BASH_LINENO[0]}" "$*" "$@" >/dev/null 2>&1 || error_handler "${BASH_LINENO[0]}" "$*"
} }
return
} }
msg_info() { msg_info() {
@@ -33,19 +33,21 @@ msg_info() {
echo -ne "${msg}\n" echo -ne "${msg}\n"
} }
msg_ok() { msg_ok() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
msg_error() { msg_error() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
RETRY_NUM=10
RETRY_EVERY=3 RETRY_NUM=10
RETRY_EVERY=3
setting_up_container() { setting_up_container() {
sed -i "/$LANG/ s/\(^# \)//" /etc/locale.gen sed -i "/$LANG/ s/\(^# \)//" /etc/locale.gen
locale_line=$(grep -v '^#' /etc/locale.gen | grep -E '^[a-zA-Z]' | awk '{print $1}' | head -n 1) locale_line=$(grep -v '^#' /etc/locale.gen | grep -E '^[a-zA-Z]' | awk '{print $1}' | head -n 1)
echo "LANG=${locale_line}" >/etc/default/locale echo "LANG=${locale_line}" >/etc/default/locale
@@ -53,12 +55,11 @@ setting_up_container() {
export LANG=${locale_line} export LANG=${locale_line}
echo $tz >/etc/timezone echo $tz >/etc/timezone
ln -sf /usr/share/zoneinfo/$tz /etc/localtime ln -sf /usr/share/zoneinfo/$tz /etc/localtime
for ((i = RETRY_NUM; i > 0; i--)); do for ((i = RETRY_NUM; i > 0; i--)); do
if [ "$(hostname -I)" != "" ]; then if [ "$(hostname -I)" != "" ]; then
break break
fi fi
echo 1>&2 -en "No Network! "
sleep $RETRY_EVERY sleep $RETRY_EVERY
done done
if [ "$(hostname -I)" = "" ]; then if [ "$(hostname -I)" = "" ]; then
@@ -68,8 +69,6 @@ setting_up_container() {
fi fi
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
systemctl disable -q --now systemd-networkd-wait-online.service systemctl disable -q --now systemd-networkd-wait-online.service
msg_ok "Set up Container OS"
msg_ok "Network Connected: $(hostname -I)"
} }
network_check() { network_check() {
@@ -79,11 +78,10 @@ network_check() {
} }
update_os() { update_os() {
msg_info "Updating Container OS" export DEBIAN_FRONTEND=noninteractive
apt-get update apt-get update >/dev/null 2>&1
apt-get -o Dpkg::Options::="--force-confold" -y dist-upgrade apt-get -o Dpkg::Options::="--force-confold" -y dist-upgrade >/dev/null
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
msg_ok "Updated Container OS"
} }
motd_ssh() { motd_ssh() {
@@ -91,5 +89,5 @@ motd_ssh() {
} }
customize() { customize() {
return return
} }

View File

@@ -17,6 +17,186 @@ All LXC instances created using this repository come pre-installed with Midnight
Do not break established syntax in this file, as it is automatically updated by a Github Workflow Do not break established syntax in this file, as it is automatically updated by a Github Workflow
## 2025-02-27
### 🆕 New Scripts
- web-check [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2662](https://github.com/community-scripts/ProxmoxVE/pull/2662))
- Pelican Panel [@bvdberg01](https://github.com/bvdberg01) ([#2678](https://github.com/community-scripts/ProxmoxVE/pull/2678))
- Pelican Wings [@bvdberg01](https://github.com/bvdberg01) ([#2677](https://github.com/community-scripts/ProxmoxVE/pull/2677))
- ByteStash [@tremor021](https://github.com/tremor021) ([#2680](https://github.com/community-scripts/ProxmoxVE/pull/2680))
### 🚀 Updated Scripts
- ByteStash: Removed sed, app supports Node v22 now [@tremor021](https://github.com/tremor021) ([#2728](https://github.com/community-scripts/ProxmoxVE/pull/2728))
- Keycloak: Update installation script [@tremor021](https://github.com/tremor021) ([#2714](https://github.com/community-scripts/ProxmoxVE/pull/2714))
- ByteStash: Fix Node 22 compatibility (thanks t2lc) [@tremor021](https://github.com/tremor021) ([#2705](https://github.com/community-scripts/ProxmoxVE/pull/2705))
- #### 🐞 Bug Fixes
- EOF not detected [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2726](https://github.com/community-scripts/ProxmoxVE/pull/2726))
- Zitadel-install.sh: Remove one version file and update to our standard [@bvdberg01](https://github.com/bvdberg01) ([#2710](https://github.com/community-scripts/ProxmoxVE/pull/2710))
- Outline: Change key to hex32 [@tremor021](https://github.com/tremor021) ([#2709](https://github.com/community-scripts/ProxmoxVE/pull/2709))
- Typo in update scripts [@bvdberg01](https://github.com/bvdberg01) ([#2707](https://github.com/community-scripts/ProxmoxVE/pull/2707))
- SFTPGo Remove unneeded RELEASE variable [@MickLesk](https://github.com/MickLesk) ([#2683](https://github.com/community-scripts/ProxmoxVE/pull/2683))
### 🧰 Maintenance
- #### 🐞 Bug Fixes
- Update install.func: Change Line Number for Error message. [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2690](https://github.com/community-scripts/ProxmoxVE/pull/2690))
- #### 📂 Github
- New Workflow to close Script Request Discussions on PR merge [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2688](https://github.com/community-scripts/ProxmoxVE/pull/2688))
- Improve Script-Test Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2712](https://github.com/community-scripts/ProxmoxVE/pull/2712))
- Switch all actions to self-hosted Runners [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2711](https://github.com/community-scripts/ProxmoxVE/pull/2711))
### 🌐 Website
- #### ✨ New Features
- Use HTML button element for copying to clipboard [@scallaway](https://github.com/scallaway) ([#2720](https://github.com/community-scripts/ProxmoxVE/pull/2720))
- Add basic pagination to Data Viewer [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2715](https://github.com/community-scripts/ProxmoxVE/pull/2715))
- #### 📝 Script Information
- wger - Add HTTPS instructions to the website [@tremor021](https://github.com/tremor021) ([#2695](https://github.com/community-scripts/ProxmoxVE/pull/2695))
## 2025-02-26
### 🆕 New Scripts
- New Script: Outline [@tremor021](https://github.com/tremor021) ([#2653](https://github.com/community-scripts/ProxmoxVE/pull/2653))
### 🚀 Updated Scripts
- Fix: SABnzbd - Removed few artefacts in the code preventing the update [@tremor021](https://github.com/tremor021) ([#2670](https://github.com/community-scripts/ProxmoxVE/pull/2670))
- #### 🐞 Bug Fixes
- Fix: Homarr - Manually correct db-migration wrong-folder [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2676](https://github.com/community-scripts/ProxmoxVE/pull/2676))
- Kimai: add local.yaml & fix path permissions [@MickLesk](https://github.com/MickLesk) ([#2646](https://github.com/community-scripts/ProxmoxVE/pull/2646))
- PiHole: Fix Unbound sed for DNS [@MickLesk](https://github.com/MickLesk) ([#2647](https://github.com/community-scripts/ProxmoxVE/pull/2647))
- Alpine IT-Tools fix typo "unexpected EOF while looking for matching `"' [@MickLesk](https://github.com/MickLesk) ([#2644](https://github.com/community-scripts/ProxmoxVE/pull/2644))
### 🧰 Maintenance
- #### 📂 Github
- [gh] Furhter Impove Changelog Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2655](https://github.com/community-scripts/ProxmoxVE/pull/2655))
### 🌐 Website
- #### 🐞 Bug Fixes
- Website: PocketID Change of website and documentation links [@schneider-de-com](https://github.com/schneider-de-com) ([#2643](https://github.com/community-scripts/ProxmoxVE/pull/2643))
- #### 📝 Script Information
- Fix: Graylog - Improve application description for website [@tremor021](https://github.com/tremor021) ([#2658](https://github.com/community-scripts/ProxmoxVE/pull/2658))
## 2025-02-25
### Changes
### ✨ New Features
- Update Tailscale: Add Tag when installation is finished [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2633](https://github.com/community-scripts/ProxmoxVE/pull/2633))
### 🚀 Updated Scripts
#### 🐞 Bug Fixes
- Fix Omada installer [@JcMinarro](https://github.com/JcMinarro) ([#2625](https://github.com/community-scripts/ProxmoxVE/pull/2625))
### 🌐 Website
- Update Tailscale-lxc Json: Add message for Supported OS [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2629](https://github.com/community-scripts/ProxmoxVE/pull/2629))
### 🧰 Maintenance
- [gh] Updated Changelog Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2632](https://github.com/community-scripts/ProxmoxVE/pull/2632))
## 2025-02-24
### Changes
### 🆕 New Scripts
- New Script: wger [@tremor021](https://github.com/tremor021) ([#2574](https://github.com/community-scripts/ProxmoxVE/pull/2574))
- New Script: VictoriaMetrics [@tremor021](https://github.com/tremor021) ([#2565](https://github.com/community-scripts/ProxmoxVE/pull/2565))
- New Script: Authelia [@thost96](https://github.com/thost96) ([#2060](https://github.com/community-scripts/ProxmoxVE/pull/2060))
- New Script: Jupyter Notebook [@Dave-code-creater](https://github.com/Dave-code-creater) ([#2561](https://github.com/community-scripts/ProxmoxVE/pull/2561))
### 🐞 Bug Fixes
- Fix Docmost: default upload size and saving data when updating [@bvdberg01](https://github.com/bvdberg01) ([#2598](https://github.com/community-scripts/ProxmoxVE/pull/2598))
- Fix: homarr db migration [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2575](https://github.com/community-scripts/ProxmoxVE/pull/2575))
- Fix: Wireguard - Restart wgdashboard automatically after update [@LostALice](https://github.com/LostALice) ([#2587](https://github.com/community-scripts/ProxmoxVE/pull/2587))
- Fix: Authelia Unbound Variable Argon2id [@MickLesk](https://github.com/MickLesk) ([#2604](https://github.com/community-scripts/ProxmoxVE/pull/2604))
- Fix: Omada check for AVX Support and use the correct MongoDB Version [@MickLesk](https://github.com/MickLesk) ([#2600](https://github.com/community-scripts/ProxmoxVE/pull/2600))
- Fix: Update-Script Firefly III based on their docs [@MickLesk](https://github.com/MickLesk) ([#2534](https://github.com/community-scripts/ProxmoxVE/pull/2534))
### ✨ New Features
- Feature: Template-Check, Better Handling of Downloads, Better Network… [@MickLesk](https://github.com/MickLesk) ([#2592](https://github.com/community-scripts/ProxmoxVE/pull/2592))
- Feature: Possibility to perform updates in silent / verbose (+ logging) [@MickLesk](https://github.com/MickLesk) ([#2583](https://github.com/community-scripts/ProxmoxVE/pull/2583))
- Feature: Use Verbose Mode for all Scripts (removed &>/dev/null) [@MickLesk](https://github.com/MickLesk) ([#2596](https://github.com/community-scripts/ProxmoxVE/pull/2596))
### 🌐 Website
- Fix: Authelia - Make user enter their domain manually [@tremor021](https://github.com/tremor021) ([#2618](https://github.com/community-scripts/ProxmoxVE/pull/2618))
- Website: Change Info for PiHole Password [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2602](https://github.com/community-scripts/ProxmoxVE/pull/2602))
- Fix: Jupyter Json (missing logo & improve name on website) [@MickLesk](https://github.com/MickLesk) ([#2584](https://github.com/community-scripts/ProxmoxVE/pull/2584))
### 🧰 Maintenance
- [gh] Update Script Test Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2599](https://github.com/community-scripts/ProxmoxVE/pull/2599))
- [gh] Contributor-Guide: Update AppName.md & AppName.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2603](https://github.com/community-scripts/ProxmoxVE/pull/2603))
## 2025-02-23
### Changes
### 🆕 New Scripts
- New Script: Hev socks5 server [@miviro](https://github.com/miviro) ([#2454](https://github.com/community-scripts/ProxmoxVE/pull/2454))
- New Script: bolt.diy [@tremor021](https://github.com/tremor021) ([#2528](https://github.com/community-scripts/ProxmoxVE/pull/2528))
### 🚀 Updated Scripts
- Fix: Wireguard - Remove setting NAT as its already in PostUp/Down [@tremor021](https://github.com/tremor021) ([#2510](https://github.com/community-scripts/ProxmoxVE/pull/2510))
### 🌐 Website
- Fix: Home Assistant Core - fixed wrong text in application description on website [@TMigue](https://github.com/TMigue) ([#2576](https://github.com/community-scripts/ProxmoxVE/pull/2576))
## 2025-02-22
### Changes
### 🌐 Website
- Fix a few broken icon links [@Snarkenfaugister](https://github.com/Snarkenfaugister) ([#2548](https://github.com/community-scripts/ProxmoxVE/pull/2548))
### 🧰 Maintenance
- Fix: URL's in CONTRIBUTING.md [@bvdberg01](https://github.com/bvdberg01) ([#2552](https://github.com/community-scripts/ProxmoxVE/pull/2552))
## 2025-02-21
### Changes
### 🚀 Updated Scripts
- Add ZFS to Podman. Now it works on ZFS! [@jaminmc](https://github.com/jaminmc) ([#2526](https://github.com/community-scripts/ProxmoxVE/pull/2526))
- Fix: Tianji - Downgrade Node [@MickLesk](https://github.com/MickLesk) ([#2530](https://github.com/community-scripts/ProxmoxVE/pull/2530))
### 🧰 Maintenance
- [gh] General Cleanup & Moving Files / Folders [@MickLesk](https://github.com/MickLesk) ([#2532](https://github.com/community-scripts/ProxmoxVE/pull/2532))
## 2025-02-20 ## 2025-02-20
### Changes ### Changes

View File

@@ -19,10 +19,10 @@
<a href="https://ko-fi.com/community_scripts"> <a href="https://ko-fi.com/community_scripts">
<img src="https://img.shields.io/badge/Support-FF5F5F?style=for-the-badge&logo=ko-fi&logoColor=white" alt="Donate" /> <img src="https://img.shields.io/badge/Support-FF5F5F?style=for-the-badge&logo=ko-fi&logoColor=white" alt="Donate" />
</a> </a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTING.md"> <a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md">
<img src="https://img.shields.io/badge/Contribute-ff4785?style=for-the-badge&logo=git&logoColor=white" alt="Contribute" /> <img src="https://img.shields.io/badge/Contribute-ff4785?style=for-the-badge&logo=git&logoColor=white" alt="Contribute" />
</a> </a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/USER_SUBMITTED_GUIDES.md"> <a href="https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md">
<img src="https://img.shields.io/badge/Guides-0077b5?style=for-the-badge&logo=read-the-docs&logoColor=white" alt="Guides" /> <img src="https://img.shields.io/badge/Guides-0077b5?style=for-the-badge&logo=read-the-docs&logoColor=white" alt="Guides" />
</a> </a>
<a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md"> <a href="https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md">

View File

@@ -35,8 +35,8 @@ function update_script() {
if [[ "${RELEASE}" != "$(cat /opt/2fauth_version.txt)" ]] || [[ ! -f /opt/2fauth_version.txt ]]; then if [[ "${RELEASE}" != "$(cat /opt/2fauth_version.txt)" ]] || [[ ! -f /opt/2fauth_version.txt ]]; then
msg_info "Updating $APP to ${RELEASE}" msg_info "Updating $APP to ${RELEASE}"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
# Creating Backup # Creating Backup
msg_info "Creating Backup" msg_info "Creating Backup"
@@ -55,7 +55,7 @@ function update_script() {
chmod -R 755 "/opt/2fauth" chmod -R 755 "/opt/2fauth"
export COMPOSER_ALLOW_SUPERUSER=1 export COMPOSER_ALLOW_SUPERUSER=1
composer install --no-dev --prefer-source &>/dev/null $STD composer install --no-dev --prefer-source
php artisan 2fauth:install php artisan 2fauth:install

View File

@@ -42,13 +42,13 @@ function update_script() {
wget -q "https://github.com/actualbudget/actual-server/archive/refs/tags/v${RELEASE}.tar.gz" wget -q "https://github.com/actualbudget/actual-server/archive/refs/tags/v${RELEASE}.tar.gz"
mv /opt/actualbudget /opt/actualbudget_bak mv /opt/actualbudget /opt/actualbudget_bak
tar -xzf "v${RELEASE}.tar.gz" &>/dev/null $STD tar -xzf "v${RELEASE}.tar.gz"
mv *ctual-server-* /opt/actualbudget mv *ctual-server-* /opt/actualbudget
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config} mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
for dir in server-files .migrate user-files migrations; do for dir in server-files .migrate user-files migrations; do
if [[ -d /opt/actualbudget_bak/$dir ]]; then if [[ -d /opt/actualbudget_bak/$dir ]]; then
mv /opt/actualbudget_bak/$dir/* /opt/actualbudget-data/$dir/ 2>/dev/null || true mv /opt/actualbudget_bak/$dir/* /opt/actualbudget-data/$dir/ || true
fi fi
done done
if [[ -f /opt/actualbudget-data/migrate/.migrations ]]; then if [[ -f /opt/actualbudget-data/migrate/.migrations ]]; then
@@ -74,7 +74,7 @@ ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
EOF EOF
fi fi
cd /opt/actualbudget cd /opt/actualbudget
yarn install &>/dev/null $STD yarn install
echo "${RELEASE}" > /opt/actualbudget_version.txt echo "${RELEASE}" > /opt/actualbudget_version.txt
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"

View File

@@ -43,15 +43,15 @@ function update_script() {
mv /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env mv /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
mv /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media mv /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
cd /opt/adventurelog/backend/server cd /opt/adventurelog/backend/server
pip install --upgrade pip &>/dev/null $STD pip install --upgrade pip
pip install -r requirements.txt &>/dev/null $STD pip install -r requirements.txt
python3 manage.py collectstatic --noinput &>/dev/null $STD python3 manage.py collectstatic --noinput
python3 manage.py migrate &>/dev/null $STD python3 manage.py migrate
mv /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env mv /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
cd /opt/adventurelog/frontend cd /opt/adventurelog/frontend
pnpm install &>/dev/null $STD pnpm install
pnpm run build &>/dev/null $STD pnpm run build
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"

View File

@@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@@ -30,7 +30,7 @@ if [ ! -d /usr/share/nginx/html ]; then
fi fi
RELEASE=$(curl -s https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4) RELEASE=$(curl -s https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt 2>/dev/null)" ] || [ ! -f /opt/${APP}_version.txt ]; then if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ] || [ ! -f /opt/${APP}_version.txt ]; then
DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip" DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip"
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
curl -fsSL -o it-tools.zip "$DOWNLOAD_URL" curl -fsSL -o it-tools.zip "$DOWNLOAD_URL"

View File

@@ -28,7 +28,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "Ther is currently no automatic update function for ${APP}." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

55
ct/authelia.sh Normal file
View File

@@ -0,0 +1,55 @@
#!/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: thost96 (thost96)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.authelia.com/
APP="Authelia"
TAGS=""
var_cpu="1"
var_ram="512"
var_disk="2"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
base_settings
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d "/etc/authelia/" ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
RELEASE=$(curl -s https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(/usr/bin/authelia -v | awk '{print substr($3, 2, length($2)) }' )" ]]; then
msg_info "Updating $APP to ${RELEASE}"
$STD apt-get update
$STD apt-get -y upgrade
wget -q "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb"
$STD dpkg -i "authelia_${RELEASE}_amd64.deb"
msg_info "Cleaning Up"
rm -f "authelia_${RELEASE}_amd64.deb"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleanup Completed"
msg_ok "Updated $APP to ${RELEASE}"
else
msg_ok "No update required. ${APP} is already at ${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}:9091${CL}"

View File

@@ -40,11 +40,11 @@ function update_script() {
tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite
rm -rf authentik.tar.gz rm -rf authentik.tar.gz
cd /opt/authentik/website cd /opt/authentik/website
npm install &>/dev/null $STD npm install
npm run build-bundled &>/dev/null $STD npm run build-bundled
cd /opt/authentik/web cd /opt/authentik/web
npm install &>/dev/null $STD npm install
npm run build &>/dev/null $STD npm run build
msg_ok "Built ${APP} website" msg_ok "Built ${APP} website"
msg_info "Building ${APP} server" msg_info "Building ${APP} server"
@@ -56,15 +56,15 @@ function update_script() {
msg_info "Installing Python Dependencies" msg_info "Installing Python Dependencies"
cd /opt/authentik cd /opt/authentik
poetry install --only=main --no-ansi --no-interaction --no-root &>/dev/null $STD poetry install --only=main --no-ansi --no-interaction --no-root
poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt &>/dev/null $STD poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt
pip install --no-cache-dir -r requirements.txt &>/dev/null $STD pip install --no-cache-dir -r requirements.txt
pip install . &>/dev/null $STD pip install .
msg_ok "Installed Python Dependencies" msg_ok "Installed Python Dependencies"
msg_info "Updating ${APP} to v${RELEASE} (Patience)" msg_info "Updating ${APP} to v${RELEASE} (Patience)"
cp -r /opt/authentik/authentik/blueprints /opt/authentik/blueprints cp -r /opt/authentik/authentik/blueprints /opt/authentik/blueprints
bash /opt/authentik/lifecycle/ak migrate &>/dev/null $STD bash /opt/authentik/lifecycle/ak migrate
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to v${RELEASE}" msg_ok "Updated ${APP} to v${RELEASE}"

View File

@@ -25,8 +25,8 @@ function update_script() {
check_container_resources check_container_resources
if [[ ! -d /var/lib/bazarr/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi if [[ ! -d /var/lib/bazarr/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@@ -28,7 +28,7 @@ function update_script() {
exit exit
fi fi
/opt/beszel/beszel update /opt/beszel/beszel update
msg_error "Ther is currently no automatic update function for ${APP}." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@@ -25,8 +25,8 @@ function update_script() {
check_container_resources check_container_resources
if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

71
ct/boltdiy.sh Normal file
View File

@@ -0,0 +1,71 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/stackblitz-labs/bolt.diy/
APP="boltdiy"
TAGS="code;ai"
var_cpu="2"
var_ram="3072"
var_disk="6"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/bolt.diy ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/stackblitz-labs/bolt.diy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/boltdiy_version.txt)" ]] || [[ ! -f /opt/boltdiy_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop boltdiy
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
temp_dir=$(mktemp -d)
temp_file=$(mktemp)
cd $temp_dir
wget -q "https://github.com/stackblitz-labs/bolt.diy/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
tar xzf $temp_file
cp -rf bolt.diy-${RELEASE}/* /opt/bolt.diy
cd /opt/bolt.diy
$STD pnpm install
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start boltdiy
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -rf $temp_file
rm -rf $temp_dir
msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/boltdiy_version.txt
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}:5173${CL}"

View File

@@ -39,12 +39,13 @@ function update_script() {
unzip -q /opt/v${RELEASE}.zip -d /opt unzip -q /opt/v${RELEASE}.zip -d /opt
mv /opt/BookStack-${RELEASE} /opt/bookstack mv /opt/BookStack-${RELEASE} /opt/bookstack
cp /opt/bookstack-backup/.env /opt/bookstack/.env cp /opt/bookstack-backup/.env /opt/bookstack/.env
cp -r /opt/bookstack-backup/public/uploads/* /opt/bookstack/public/uploads/ 2>/dev/null || true cp -r /opt/bookstack-backup/public/uploads/* /opt/bookstack/public/uploads/ || true
cp -r /opt/bookstack-backup/storage/uploads/* /opt/bookstack/storage/uploads/ 2>/dev/null || true cp -r /opt/bookstack-backup/storage/uploads/* /opt/bookstack/storage/uploads/ || true
cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/ 2>/dev/null || true cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/ || true
cd /opt/bookstack cd /opt/bookstack
COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev &>/dev/null export COMPOSER_ALLOW_SUPERUSER=1
php artisan migrate --force &>/dev/null $STD composer install --no-dev
$STD php artisan migrate --force
chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads

73
ct/bytestash.sh Normal file
View File

@@ -0,0 +1,73 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/jordan-dalby/ByteStash
APP="ByteStash"
var_tags="code"
var_disk="4"
var_cpu="1"
var_ram="1024"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/bytestash ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/jordan-dalby/ByteStash/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Services"
systemctl stop bytestash-backend
systemctl stop bytestash-frontend
msg_ok "Services Stopped"
msg_info "Updating ${APP} to ${RELEASE}"
temp_file=$(mktemp)
wget -q "https://github.com/jordan-dalby/ByteStash/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
tar zxf $temp_file
rm -rf /opt/bytestash/server/node_modules
rm -rf /opt/bytestash/client/node_modules
cp -rf ByteStash-${RELEASE}/* /opt/bytestash
cd /opt/bytestash/server
$STD npm install
cd /opt/bytestash/client
$STD npm install
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}"
msg_info "Starting Services"
systemctl start bytestash-backend
systemctl start bytestash-frontend
msg_ok "Started Services"
msg_info "Cleaning Up"
rm -f $temp_file
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${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}:3000${CL}"

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@@ -115,10 +115,10 @@ function update_script() {
echo "${options[*]}" echo "${options[*]}"
) )
echo $cps_options >/opt/calibre-web/options.txt echo $cps_options >/opt/calibre-web/options.txt
pip install --upgrade calibreweb[$cps_options] &>/dev/null $STD pip install --upgrade calibreweb[$cps_options]
else else
rm -rf /opt/calibre-web/options.txt rm -rf /opt/calibre-web/options.txt
pip install --upgrade calibreweb &>/dev/null $STD pip install --upgrade calibreweb
fi fi
msg_info "Starting ${APP}" msg_info "Starting ${APP}"

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC" msg_ok "Updated ${APP} LXC"
exit exit
} }

View File

@@ -31,31 +31,31 @@ function update_script() {
if ! dpkg -s libjpeg-dev >/dev/null 2>&1; then if ! dpkg -s libjpeg-dev >/dev/null 2>&1; then
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
apt-get update $STD apt-get update
apt-get install -y libjpeg-dev $STD apt-get install -y libjpeg-dev
msg_ok "Updated Dependencies" msg_ok "Updated Dependencies"
fi fi
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
pip3 install changedetection.io --upgrade &>/dev/null $STD pip3 install changedetection.io --upgrade
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
msg_info "Updating Playwright" msg_info "Updating Playwright"
pip3 install playwright --upgrade &>/dev/null $STD pip3 install playwright --upgrade
msg_ok "Updated Playwright" msg_ok "Updated Playwright"
if [[ -f /etc/systemd/system/browserless.service ]]; then if [[ -f /etc/systemd/system/browserless.service ]]; then
msg_info "Updating Browserless (Patience)" msg_info "Updating Browserless (Patience)"
git -C /opt/browserless/ fetch --all &>/dev/null $STD git -C /opt/browserless/ fetch --all
git -C /opt/browserless/ reset --hard origin/main &>/dev/null $STD git -C /opt/browserless/ reset --hard origin/main
npm update --prefix /opt/browserless &>/dev/null $STD npm update --prefix /opt/browserless
/opt/browserless/node_modules/playwright-core/cli.js install --with-deps &>/dev/null $STD /opt/browserless/node_modules/playwright-core/cli.js install --with-deps
# Update Chrome separately, as it has to be done with the force option. Otherwise the installation of other browsers will not be done if Chrome is already installed. # Update Chrome separately, as it has to be done with the force option. Otherwise the installation of other browsers will not be done if Chrome is already installed.
/opt/browserless/node_modules/playwright-core/cli.js install --force chrome &>/dev/null $STD /opt/browserless/node_modules/playwright-core/cli.js install --force chrome
/opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit &>/dev/null $STD /opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit
npm run build --prefix /opt/browserless &>/dev/null $STD npm run build --prefix /opt/browserless
npm run build:function --prefix /opt/browserless &>/dev/null $STD npm run build:function --prefix /opt/browserless
npm prune production --prefix /opt/browserless &>/dev/null $STD npm prune production --prefix /opt/browserless
systemctl restart browserless systemctl restart browserless
msg_ok "Updated Browserless" msg_ok "Updated Browserless"
else else

View File

@@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@@ -30,14 +30,14 @@ function update_script() {
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -v '\-rc' | sort -V | tail -n 1) RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -v '\-rc' | sort -V | tail -n 1)
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Updating ${APP} to v${RELEASE}" msg_info "Updating ${APP} to v${RELEASE}"
omd stop monitoring &>/dev/null $STD omd stop monitoring
omd cp monitoring monitoringbackup &>/dev/null $STD omd cp monitoring monitoringbackup
wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb
apt-get install -y /opt/checkmk.deb &>/dev/null $STD apt-get install -y /opt/checkmk.deb
omd --force -V ${RELEASE}.cre update --conflict=install monitoring &>/dev/null $STD omd --force -V ${RELEASE}.cre update --conflict=install monitoring
omd start monitoring &>/dev/null $STD omd start monitoring
omd -f rm monitoringbackup &>/dev/null $STD omd -f rm monitoringbackup
omd cleanup &>/dev/null $STD omd cleanup
rm -rf /opt/checkmk.deb rm -rf /opt/checkmk.deb
msg_ok "Updated ${APP} to v${RELEASE}" msg_ok "Updated ${APP} to v${RELEASE}"
else else

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@@ -36,48 +36,48 @@ function update_script() {
if [ "$UPD" == "1" ]; then if [ "$UPD" == "1" ]; then
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC" msg_ok "Updated ${APP} LXC"
exit exit
fi fi
if [ "$UPD" == "2" ]; then if [ "$UPD" == "2" ]; then
msg_info "Installing dependencies (patience)" msg_info "Installing dependencies (patience)"
apt-get install -y attr &>/dev/null $STD apt-get install -y attr
apt-get install -y nfs-kernel-server &>/dev/null $STD apt-get install -y nfs-kernel-server
apt-get install -y samba &>/dev/null $STD apt-get install -y samba
apt-get install -y samba-common-bin &>/dev/null $STD apt-get install -y samba-common-bin
apt-get install -y winbind &>/dev/null $STD apt-get install -y winbind
apt-get install -y gawk &>/dev/null $STD apt-get install -y gawk
msg_ok "Installed dependencies" msg_ok "Installed dependencies"
msg_info "Installing Cockpit file sharing" msg_info "Installing Cockpit file sharing"
wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-file-sharing/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4) wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-file-sharing/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
dpkg -i cockpit-file-sharing_*focal_all.deb &>/dev/null $STD dpkg -i cockpit-file-sharing_*focal_all.deb
rm cockpit-file-sharing_*focal_all.deb rm cockpit-file-sharing_*focal_all.deb
msg_ok "Installed Cockpit file sharing" msg_ok "Installed Cockpit file sharing"
exit exit
fi fi
if [ "$UPD" == "3" ]; then if [ "$UPD" == "3" ]; then
msg_info "Installing dependencies (patience)" msg_info "Installing dependencies (patience)"
apt-get install -y psmisc &>/dev/null $STD apt-get install -y psmisc
apt-get install -y samba &>/dev/null $STD apt-get install -y samba
apt-get install -y samba-common-bin &>/dev/null $STD apt-get install -y samba-common-bin
msg_ok "Installed dependencies" msg_ok "Installed dependencies"
msg_info "Installing Cockpit identities" msg_info "Installing Cockpit identities"
wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-identities/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4) wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-identities/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
dpkg -i cockpit-identities_*focal_all.deb &>/dev/null $STD dpkg -i cockpit-identities_*focal_all.deb
rm cockpit-identities_*focal_all.deb rm cockpit-identities_*focal_all.deb
msg_ok "Installed Cockpit identities" msg_ok "Installed Cockpit identities"
exit exit
fi fi
if [ "$UPD" == "4" ]; then if [ "$UPD" == "4" ]; then
msg_info "Installing dependencies" msg_info "Installing dependencies"
apt-get install -y rsync &>/dev/null $STD apt-get install -y rsync
apt-get install -y zip &>/dev/null $STD apt-get install -y zip
msg_ok "Installed dependencies" msg_ok "Installed dependencies"
msg_info "Installing Cockpit navigator" msg_info "Installing Cockpit navigator"
wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-navigator/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4) wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-navigator/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
dpkg -i cockpit-navigator_*focal_all.deb &>/dev/null $STD dpkg -i cockpit-navigator_*focal_all.deb
rm cockpit-navigator_*focal_all.deb rm cockpit-navigator_*focal_all.deb
msg_ok "Installed Cockpit navigator" msg_ok "Installed Cockpit navigator"
exit exit

View File

@@ -36,7 +36,7 @@ trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
# This function handles errors # This function handles errors
function error_handler() { function error_handler() {
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
printf "\e[?25h" printf "\e[?25h"
local exit_code="$?" local exit_code="$?"
local line_number="$1" local line_number="$1"
@@ -51,13 +51,13 @@ function spinner() {
local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏') local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local spin_i=0 local spin_i=0
local interval=0.1 local interval=0.1
printf "\e[?25l" printf "\e[?25l"
local color="${YWB}" local color="${YWB}"
while true; do while true; do
printf "\r ${color}%s${CL}" "${frames[spin_i]}" printf "\r ${color}%s${CL}" "${frames[spin_i]}"
spin_i=$(( (spin_i + 1) % ${#frames[@]} )) spin_i=$(((spin_i + 1) % ${#frames[@]}))
sleep "$interval" sleep "$interval"
done done
} }
@@ -70,9 +70,16 @@ function msg_info() {
SPINNER_PID=$! SPINNER_PID=$!
} }
function msg_warn() {
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
printf "\e[?25h"
local msg="$1"
echo -e "${BFR}${INFO}${YWB}${msg}${CL}"
}
# This function displays a success message with a green color. # This function displays a success message with a green color.
function msg_ok() { function msg_ok() {
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
printf "\e[?25h" printf "\e[?25h"
local msg="$1" local msg="$1"
echo -e "${BFR}${CM}${GN}${msg}${CL}" echo -e "${BFR}${CM}${GN}${msg}${CL}"
@@ -80,7 +87,7 @@ function msg_ok() {
# This function displays a error message with a red color. # This function displays a error message with a red color.
function msg_error() { function msg_error() {
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
printf "\e[?25h" printf "\e[?25h"
local msg="$1" local msg="$1"
echo -e "${BFR}${CROSS}${RD}${msg}${CL}" echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
@@ -113,9 +120,12 @@ function select_storage() {
CONTENT='vztmpl' CONTENT='vztmpl'
CONTENT_LABEL='Container template' CONTENT_LABEL='Container template'
;; ;;
*) false || { msg_error "Invalid storage class."; exit 201; }; *) false || {
msg_error "Invalid storage class."
exit 201
} ;;
esac esac
# This Queries all storage locations # This Queries all storage locations
local -a MENU local -a MENU
while read -r line; do while read -r line; do
@@ -129,34 +139,60 @@ function select_storage() {
fi fi
MENU+=("$TAG" "$ITEM" "OFF") MENU+=("$TAG" "$ITEM" "OFF")
done < <(pvesm status -content $CONTENT | awk 'NR>1') done < <(pvesm status -content $CONTENT | awk 'NR>1')
# Select storage location # Select storage location
if [ $((${#MENU[@]}/3)) -eq 1 ]; then if [ $((${#MENU[@]} / 3)) -eq 1 ]; then
printf ${MENU[0]} printf ${MENU[0]}
else else
local STORAGE local STORAGE
while [ -z "${STORAGE:+x}" ]; do while [ -z "${STORAGE:+x}" ]; do
STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
"Which storage pool you would like to use for the ${CONTENT_LABEL,,}?\nTo make a selection, use the Spacebar.\n" \ "Which storage pool you would like to use for the ${CONTENT_LABEL,,}?\nTo make a selection, use the Spacebar.\n" \
16 $(($MSG_MAX_LENGTH + 23)) 6 \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \
"${MENU[@]}" 3>&1 1>&2 2>&3) || { msg_error "Menu aborted."; exit 202; } "${MENU[@]}" 3>&1 1>&2 2>&3) || {
msg_error "Menu aborted."
exit 202
}
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo -e "${CROSS}${RD} Menu aborted by user.${CL}" echo -e "${CROSS}${RD} Menu aborted by user.${CL}"
exit 0 exit 0
fi fi
done done
printf "%s" "$STORAGE" printf "%s" "$STORAGE"
fi fi
} }
# Test if required variables are set # Test if required variables are set
[[ "${CTID:-}" ]] || { msg_error "You need to set 'CTID' variable."; exit 203; } [[ "${CTID:-}" ]] || {
[[ "${PCT_OSTYPE:-}" ]] || { msg_error "You need to set 'PCT_OSTYPE' variable."; exit 204; } msg_error "You need to set 'CTID' variable."
exit 203
}
[[ "${PCT_OSTYPE:-}" ]] || {
msg_error "You need to set 'PCT_OSTYPE' variable."
exit 204
}
# Test if ID is valid # Test if ID is valid
[ "$CTID" -ge "100" ] || { msg_error "ID cannot be less than 100."; exit 205; } [ "$CTID" -ge "100" ] || {
msg_error "ID cannot be less than 100."
exit 205
}
# Check for network connectivity (IPv4 & IPv6)
#function check_network() {
# local CHECK_URLS=("8.8.8.8" "1.1.1.1" "9.9.9.9" "2606:4700:4700::1111" "2001:4860:4860::8888" "2620:fe::fe")
#
# for url in "${CHECK_URLS[@]}"; do
# if ping -c 1 -W 2 "$url" &>/dev/null; then
# return 0 # Success: At least one connection works
# fi
# done
#
# msg_error "No network connection detected. Check your internet connection."
# exit 101
#}
# Test if ID is in use # Test if ID is in use
if pct status $CTID &>/dev/null; then if qm status "$CTID" &>/dev/null || pct status "$CTID" &>/dev/null; then
echo -e "ID '$CTID' is already in use." echo -e "ID '$CTID' is already in use."
unset CTID unset CTID
msg_error "Cannot use ID that is already in use." msg_error "Cannot use ID that is already in use."
@@ -173,46 +209,73 @@ msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage."
# Update LXC template list # Update LXC template list
msg_info "Updating LXC Template List" msg_info "Updating LXC Template List"
#check_network
pveam update >/dev/null pveam update >/dev/null
msg_ok "Updated LXC Template List" msg_ok "Updated LXC Template List"
# Get LXC template string # Get LXC template string
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-} TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V) mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V)
[ ${#TEMPLATES[@]} -gt 0 ] || { msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."; exit 207; } [ ${#TEMPLATES[@]} -gt 0 ] || {
msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."
exit 207
}
TEMPLATE="${TEMPLATES[-1]}" TEMPLATE="${TEMPLATES[-1]}"
TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE" TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE"
# Check if template exists, if corrupt remove and redownload # Check if template exists, if corrupt remove and redownload
if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE"; then if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE" || ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
msg_warn "Template $TEMPLATE not found in storage or seems to be corrupted. Redownloading."
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH" [[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
msg_info "Downloading LXC Template"
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null || # Download with 3 attempts
{ msg_error "A problem occurred while downloading the LXC template."; exit 208; } for attempt in {1..3}; do
msg_ok "Downloaded LXC Template" msg_info "Attempt $attempt: Downloading LXC template..."
if timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
msg_ok "Template download successful."
break
fi
if [ $attempt -eq 3 ]; then
msg_error "Three failed attempts. Aborting."
exit 208
fi
sleep $((attempt * 5))
done
fi fi
msg_ok "LXC Template is ready to use."
# Check and fix subuid/subgid # Check and fix subuid/subgid
grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >> /etc/subuid grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >>/etc/subuid
grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >> /etc/subgid grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >>/etc/subgid
# Combine all options # Combine all options
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}}) PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}") [[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
# Create container with template integrity check
msg_info "Creating LXC Container" msg_info "Creating LXC Container"
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH" msg_error "Container creation failed. Checking if template is corrupted."
msg_ok "Template integrity check completed" if ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null || msg_error "Template appears to be corrupted. Removing and re-downloading."
{ msg_error "A problem occurred while re-downloading the LXC template."; exit 208; } rm -f "$TEMPLATE_PATH"
if ! timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
msg_error "Failed to re-download template."
exit 208
fi
msg_ok "Re-downloaded LXC Template" msg_ok "Re-downloaded LXC Template"
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
msg_error "A problem occurred while trying to create container after re-downloading template." msg_error "Container creation failed after re-downloading template."
exit 200 exit 200
fi fi
else
msg_error "Container creation failed, but template is not corrupted."
exit 209
fi fi
fi
msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created." msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created."

View File

@@ -36,12 +36,12 @@ function update_script() {
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if ! command -v npm >/dev/null 2>&1; then if ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..." echo "Installing NPM..."
apt-get install -y npm >/dev/null 2>&1 $STD apt-get install -y npm
echo "Installed NPM..." echo "Installed NPM..."
fi fi
fi fi
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
/opt/cronicle/bin/control.sh upgrade &>/dev/null $STD /opt/cronicle/bin/control.sh upgrade
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
exit exit
fi fi
@@ -49,7 +49,7 @@ function update_script() {
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if ! command -v npm >/dev/null 2>&1; then if ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..." echo "Installing NPM..."
apt-get install -y npm >/dev/null 2>&1 $STD apt-get install -y npm
echo "Installed NPM..." echo "Installed NPM..."
fi fi
fi fi
@@ -57,12 +57,12 @@ function update_script() {
IP=$(hostname -I | awk '{print $1}') IP=$(hostname -I | awk '{print $1}')
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
apt-get install -y git &>/dev/null $STD apt-get install -y git
apt-get install -y make &>/dev/null $STD apt-get install -y make
apt-get install -y g++ &>/dev/null $STD apt-get install -y g++
apt-get install -y gcc &>/dev/null $STD apt-get install -y gcc
apt-get install -y ca-certificates &>/dev/null $STD apt-get install -y ca-certificates
apt-get install -y gnupg &>/dev/null $STD apt-get install -y gnupg
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Setting up Node.js Repository" msg_info "Setting up Node.js Repository"
@@ -72,21 +72,21 @@ function update_script() {
msg_ok "Set up Node.js Repository" msg_ok "Set up Node.js Repository"
msg_info "Installing Node.js" msg_info "Installing Node.js"
apt-get update &>/dev/null $STD apt-get update
apt-get install -y nodejs &>/dev/null $STD apt-get install -y nodejs
msg_ok "Installed Node.js" msg_ok "Installed Node.js"
msg_info "Installing Cronicle Worker" msg_info "Installing Cronicle Worker"
mkdir -p /opt/cronicle mkdir -p /opt/cronicle
cd /opt/cronicle cd /opt/cronicle
tar zxvf <(curl -fsSL https://github.com/jhuckaby/Cronicle/archive/${LATEST}.tar.gz) --strip-components 1 &>/dev/null $STD tar zxvf <(curl -fsSL https://github.com/jhuckaby/Cronicle/archive/${LATEST}.tar.gz) --strip-components 1
npm install &>/dev/null $STD npm install
node bin/build.js dist &>/dev/null $STD node bin/build.js dist
sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
/opt/cronicle/bin/control.sh start &>/dev/null $STD /opt/cronicle/bin/control.sh start
cp /opt/cronicle/bin/cronicled.init /etc/init.d/cronicled &>/dev/null $STD cp /opt/cronicle/bin/cronicled.init /etc/init.d/cronicled
chmod 775 /etc/init.d/cronicled chmod 775 /etc/init.d/cronicled
update-rc.d cronicled defaults &>/dev/null $STD update-rc.d cronicled defaults
msg_ok "Installed Cronicle Worker" msg_ok "Installed Cronicle Worker"
echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n" echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
exit exit

View File

@@ -29,7 +29,7 @@ function update_script() {
latest_version=$(npm show cross-seed version) latest_version=$(npm show cross-seed version)
if [ "$current_version" != "$latest_version" ]; then if [ "$current_version" != "$latest_version" ]; then
msg_info "Updating ${APP} from version v${current_version} to v${latest_version}" msg_info "Updating ${APP} from version v${current_version} to v${latest_version}"
npm install -g cross-seed@latest &> /dev/null $STD npm install -g cross-seed@latest
systemctl restart cross-seed systemctl restart cross-seed
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else else

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@@ -28,7 +28,7 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
pip3 install deluge[all] --upgrade pip3 install deluge[all] --upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC" msg_ok "Updated ${APP} LXC"
exit exit
} }

View File

@@ -34,6 +34,7 @@ function update_script() {
msg_info "Updating ${APP} to v${RELEASE}" msg_info "Updating ${APP} to v${RELEASE}"
cp /opt/docmost/.env /opt/ cp /opt/docmost/.env /opt/
cp -r /opt/docmost/data /opt/
rm -rf /opt/docmost rm -rf /opt/docmost
temp_file=$(mktemp) temp_file=$(mktemp)
wget -q "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file" wget -q "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
@@ -41,8 +42,9 @@ function update_script() {
mv docmost-${RELEASE} /opt/docmost mv docmost-${RELEASE} /opt/docmost
cd /opt/docmost cd /opt/docmost
mv /opt/.env /opt/docmost/.env mv /opt/.env /opt/docmost/.env
pnpm install --force &>/dev/null mv /opt/data /opt/docmost/data
pnpm build &>/dev/null $STD pnpm install --force
$STD pnpm build
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@@ -33,8 +33,8 @@ function update_script() {
msg_ok "Stopped ${APP}" msg_ok "Stopped ${APP}"
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
wget https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb &>/dev/null $STD wget https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb
dpkg -i emby-server-deb_${LATEST}_amd64.deb &>/dev/null $STD dpkg -i emby-server-deb_${LATEST}_amd64.deb
rm emby-server-deb_${LATEST}_amd64.deb rm emby-server-deb_${LATEST}_amd64.deb
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@@ -33,9 +33,9 @@ function update_script() {
msg_info "Updating ESPHome" msg_info "Updating ESPHome"
if [[ -d /srv/esphome ]]; then if [[ -d /srv/esphome ]]; then
source /srv/esphome/bin/activate &>/dev/null $STD source /srv/esphome/bin/activate
fi fi
pip3 install -U esphome &>/dev/null $STD pip3 install -U esphome
msg_ok "Updated ESPHome" msg_ok "Updated ESPHome"
msg_info "Starting ESPHome" msg_info "Starting ESPHome"

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating evcc LXC" msg_info "Updating evcc LXC"
apt update &>/dev/null $STD apt update
apt --only-upgrade install -y evcc &>/dev/null $STD apt --only-upgrade install -y evcc
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }

View File

@@ -43,7 +43,7 @@ function update_script() {
rm -rf /opt/excalidraw rm -rf /opt/excalidraw
mv excalidraw-${RELEASE} /opt/excalidraw mv excalidraw-${RELEASE} /opt/excalidraw
cd /opt/excalidraw cd /opt/excalidraw
yarn &> /dev/null $STD yarn
msg_ok "Updated $APP to v${RELEASE}" msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP" msg_info "Starting $APP"

View File

@@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
systemctl stop ${APP} systemctl stop ${APP}

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }

View File

@@ -37,21 +37,19 @@ check_container_resources
msg_info "Updating ${APP} to v${RELEASE}" msg_info "Updating ${APP} to v${RELEASE}"
cp /opt/firefly/.env /opt/.env cp /opt/firefly/.env /opt/.env
cp -r /opt/firefly/storage /opt/storage cp -r /opt/firefly/storage /opt/storage
rm -rf /opt/firefly/*
cd /opt cd /opt
wget -q "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz" wget -q "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz"
tar -xzf FireflyIII-v${RELEASE}.tar.gz -C /opt/firefly --exclude='storage' tar -xzf FireflyIII-v${RELEASE}.tar.gz -C /opt/firefly --exclude='storage'
cp /opt/.env /opt/firefly/.env
cp -r /opt/storage /opt/firefly/storage
cd /opt/firefly cd /opt/firefly
composer install --no-dev --no-interaction &>/dev/null
php artisan migrate --seed --force &>/dev/null
php artisan firefly:decrypt-all &>/dev/null
php artisan cache:clear &>/dev/null
php artisan view:clear &>/dev/null
php artisan firefly:upgrade-database &>/dev/null
php artisan firefly:laravel-passport-keys &>/dev/null
chown -R www-data:www-data /opt/firefly chown -R www-data:www-data /opt/firefly
chmod -R 775 /opt/firefly/storage chmod -R 775 /opt/firefly/storage
$STD php artisan migrate --seed --force
$STD php artisan cache:clear
$STD php artisan view:clear
$STD php artisan firefly-iii:upgrade-database
$STD php artisan firefly-iii:laravel-passport-keys
echo "${RELEASE}" >"/opt/${APP}_version.txt" echo "${RELEASE}" >"/opt/${APP}_version.txt"
msg_ok "Updated ${APP} to v${RELEASE}" msg_ok "Updated ${APP} to v${RELEASE}"
@@ -76,4 +74,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@@ -30,7 +30,7 @@ function update_script() {
latest_version=$(npm show ghost-cli version) latest_version=$(npm show ghost-cli version)
if [ "$current_version" != "$latest_version" ]; then if [ "$current_version" != "$latest_version" ]; then
msg_info "Updating ${APP} from version v${current_version} to v${latest_version}" msg_info "Updating ${APP} from version v${current_version} to v${latest_version}"
npm install -g ghost-cli@latest &> /dev/null $STD npm install -g ghost-cli@latest
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else else
msg_ok "${APP} is already at v${current_version}" msg_ok "${APP} is already at v${current_version}"

View File

@@ -30,7 +30,7 @@ function update_script() {
fi fi
RELEASE=$(curl -s https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/') RELEASE=$(curl -s https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_error "Ther is currently no automatic update function for ${APP}." msg_error "Currently we don't provide an update function for this ${APP}."
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

View File

@@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }

View File

@@ -34,8 +34,8 @@ function update_script() {
msg_ok "Stopped $APP" msg_ok "Stopped $APP"
msg_info "Updating $APP" msg_info "Updating $APP"
apt-get update &> /dev/null $STD apt-get update
apt-get upgrade -y &> /dev/null $STD apt-get upgrade -y
msg_ok "Updated $APP" msg_ok "Updated $APP"
msg_info "Starting $APP" msg_info "Starting $APP"

View File

@@ -51,15 +51,15 @@ function update_script() {
cd grist cd grist
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
yarn install >/dev/null 2>&1 $STD yarn install
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Building" msg_info "Building"
yarn run build:prod >/dev/null 2>&1 $STD yarn run build:prod
msg_ok "Done building" msg_ok "Done building"
msg_info "Installing Python" msg_info "Installing Python"
yarn run install:python >/dev/null 2>&1 $STD yarn run install:python
msg_ok "Installed Python" msg_ok "Installed Python"
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt

6
ct/headers/authelia Normal file
View File

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

6
ct/headers/boltdiy Normal file
View File

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

6
ct/headers/bytestash Normal file
View File

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

View File

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

View File

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

6
ct/headers/outline Normal file
View File

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

6
ct/headers/pelican-panel Normal file
View File

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

6
ct/headers/pelican-wings Normal file
View File

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

View File

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

6
ct/headers/web-check Normal file
View File

@@ -0,0 +1,6 @@
__ __ __
_ _____ / /_ _____/ /_ ___ _____/ /__
| | /| / / _ \/ __ \______/ ___/ __ \/ _ \/ ___/ //_/
| |/ |/ / __/ /_/ /_____/ /__/ / / / __/ /__/ ,<
|__/|__/\___/_.___/ \___/_/ /_/\___/\___/_/|_|

6
ct/headers/wger Normal file
View File

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

View File

@@ -44,8 +44,8 @@ function update_script() {
VER=$(curl -s https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') VER=$(curl -s https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
cp -R Heimdall-${VER}/* /opt/Heimdall cp -R Heimdall-${VER}/* /opt/Heimdall
cd /opt/Heimdall cd /opt/Heimdall
apt-get install -y composer &>/dev/null $STD apt-get install -y composer
COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload &>/dev/null $STD COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated Heimdall Dashboard to ${RELEASE}" msg_ok "Updated Heimdall Dashboard to ${RELEASE}"
msg_info "Restoring Data" msg_info "Restoring Data"

64
ct/hev-socks5-server.sh Normal file
View File

@@ -0,0 +1,64 @@
#!/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: miviro
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/heiher/hev-socks5-server
APP="hev-socks5-server"
TAGS="proxy,socks5"
var_cpu="1"
var_ram="512"
var_disk="2"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /opt/${APP} ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/heiher/${APP}/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop $APP
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
curl -L -o "${APP}" "https://github.com/heiher/${APP}/releases/download/${RELEASE}/hev-socks5-server-linux-x86_64"
mv ${APP} /opt/${APP}
chmod +x /opt/${APP}
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start $APP
msg_ok "Started $APP"
echo "${RELEASE}" >/opt/${APP}_version.txt
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 with a SOCKS5 client using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}${IP}:1080${CL}"
echo -e "${INFO}${YW} and the credentials stored at /root/hev.creds${CL}"

View File

@@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@@ -35,7 +35,7 @@ function update_script() {
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Updating ${APP} to v${RELEASE}" msg_info "Updating ${APP} to v${RELEASE}"
if [[ $(corepack -v) < "0.31.0" ]]; then if [[ $(corepack -v) < "0.31.0" ]]; then
npm install -g corepack@0.31.0 &>/dev/null $STD npm install -g corepack@0.31.0
fi fi
cd /opt cd /opt
if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then
@@ -47,14 +47,14 @@ function update_script() {
unzip -q v${RELEASE}.zip unzip -q v${RELEASE}.zip
mv hoarder-${RELEASE} /opt/hoarder mv hoarder-${RELEASE} /opt/hoarder
cd /opt/hoarder/apps/web cd /opt/hoarder/apps/web
pnpm install --frozen-lockfile &>/dev/null $STD pnpm install --frozen-lockfile
pnpm exec next build --experimental-build-mode compile &>/dev/null $STD pnpm exec next build --experimental-build-mode compile
cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
cd /opt/hoarder/apps/workers cd /opt/hoarder/apps/workers
pnpm install --frozen-lockfile &>/dev/null $STD pnpm install --frozen-lockfile
export DATA_DIR=/opt/hoarder_data export DATA_DIR=/opt/hoarder_data
cd /opt/hoarder/packages/db cd /opt/hoarder/packages/db
pnpm migrate &>/dev/null $STD pnpm migrate
sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/hoarder/hoarder.env sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/hoarder/hoarder.env
msg_ok "Updated ${APP} to v${RELEASE}" msg_ok "Updated ${APP} to v${RELEASE}"

View File

@@ -38,14 +38,22 @@ fi
if [[ ! -f /opt/run_homarr.sh ]]; then if [[ ! -f /opt/run_homarr.sh ]]; then
msg_info "Detected outdated and missing service files" msg_info "Detected outdated and missing service files"
msg_error "Warning - The port of homarr changed from 3000 to 7575" msg_error "Warning - The port of homarr changed from 3000 to 7575"
apt-get install -y nginx gettext openssl gpg &>/dev/null $STD apt-get install -y nginx gettext openssl gpg
sed -i '/^NODE_ENV=/d' /opt/homarr/.env && echo "NODE_ENV='production'" >> /opt/homarr/.env sed -i '/^NODE_ENV=/d' /opt/homarr/.env && echo "NODE_ENV='production'" >> /opt/homarr/.env
sed -i '/^DB_DIALECT=/d' /opt/homarr/.env && echo "DB_DIALECT='sqlite'" >> /opt/homarr/.env sed -i '/^DB_DIALECT=/d' /opt/homarr/.env && echo "DB_DIALECT='sqlite'" >> /opt/homarr/.env
cat <<'EOF' >/opt/run_homarr.sh cat <<'EOF' >/opt/run_homarr.sh
#!/bin/bash #!/bin/bash
set -a
source /opt/homarr/.env
set +a
export DB_DIALECT='sqlite' export DB_DIALECT='sqlite'
export AUTH_SECRET=$(openssl rand -base64 32) export AUTH_SECRET=$(openssl rand -base64 32)
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
dirname=$(basename "$dir")
mkdir -p "/opt/homarr_db/migrations/$dirname"
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
done
export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+') export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
nginx -g 'daemon off;' & nginx -g 'daemon off;' &
@@ -85,6 +93,30 @@ fi
msg_ok "Backup Data" msg_ok "Backup Data"
msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)" msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)"
rm /opt/run_homarr.sh
cat <<'EOF' >/opt/run_homarr.sh
#!/bin/bash
set -a
source /opt/homarr/.env
set +a
export DB_DIALECT='sqlite'
export AUTH_SECRET=$(openssl rand -base64 32)
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
dirname=$(basename "$dir")
mkdir -p "/opt/homarr_db/migrations/$dirname"
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
done
export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
nginx -g 'daemon off;' &
redis-server /opt/homarr/packages/redis/redis.conf &
node apps/tasks/tasks.cjs &
node apps/websocket/wssServer.cjs &
node apps/nextjs/server.js & PID=$!
wait $PID
EOF
chmod +x /opt/run_homarr.sh
wget -q "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" wget -q "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip"
unzip -q v${RELEASE}.zip unzip -q v${RELEASE}.zip
rm -rf v${RELEASE}.zip rm -rf v${RELEASE}.zip
@@ -92,8 +124,8 @@ fi
mv homarr-${RELEASE} /opt/homarr mv homarr-${RELEASE} /opt/homarr
mv /opt/homarr-data-backup/.env /opt/homarr/.env mv /opt/homarr-data-backup/.env /opt/homarr/.env
cd /opt/homarr cd /opt/homarr
pnpm install &>/dev/null $STD pnpm install
pnpm build &>/dev/null $STD pnpm build
cp /opt/homarr/apps/nextjs/next.config.ts . cp /opt/homarr/apps/nextjs/next.config.ts .
cp /opt/homarr/apps/nextjs/package.json . cp /opt/homarr/apps/nextjs/package.json .
cp -r /opt/homarr/packages/db/migrations /opt/homarr_db/migrations cp -r /opt/homarr/packages/db/migrations /opt/homarr_db/migrations

View File

@@ -59,7 +59,7 @@ function update_script() {
msg_info "Updating Home Assistant" msg_info "Updating Home Assistant"
source /srv/homeassistant/bin/activate source /srv/homeassistant/bin/activate
pip install ${BR}--upgrade homeassistant &>/dev/null $STD pip install ${BR}--upgrade homeassistant
msg_ok "Updated Home Assistant" msg_ok "Updated Home Assistant"
msg_info "Starting Home Assistant" msg_info "Starting Home Assistant"
@@ -72,10 +72,10 @@ function update_script() {
fi fi
if [ "$UPD" == "2" ]; then if [ "$UPD" == "2" ]; then
msg_info "Installing Home Assistant Community Store (HACS)" msg_info "Installing Home Assistant Community Store (HACS)"
apt update &>/dev/null $STD apt update
apt install -y unzip &>/dev/null $STD apt install -y unzip
cd .homeassistant cd .homeassistant
bash <(curl -fsSL https://get.hacs.xyz) &>/dev/null $STD bash <(curl -fsSL https://get.hacs.xyz)
msg_ok "Installed Home Assistant Community Store (HACS)" msg_ok "Installed Home Assistant Community Store (HACS)"
echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n" echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n"
exit exit
@@ -85,17 +85,17 @@ function update_script() {
read -r -p "Would you like to use No Authentication? <y/N> " prompt read -r -p "Would you like to use No Authentication? <y/N> " prompt
msg_info "Installing FileBrowser" msg_info "Installing FileBrowser"
RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g') RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null $STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
filebrowser config init -a '0.0.0.0' &>/dev/null $STD filebrowser config init -a '0.0.0.0'
filebrowser config set -a '0.0.0.0' &>/dev/null $STD filebrowser config set -a '0.0.0.0'
filebrowser config set --auth.method=noauth &>/dev/null $STD filebrowser config set --auth.method=noauth
filebrowser users add ID 1 --perm.admin &>/dev/null $STD filebrowser users add ID 1 --perm.admin
else else
filebrowser config init -a '0.0.0.0' &>/dev/null $STD filebrowser config init -a '0.0.0.0'
filebrowser config set -a '0.0.0.0' &>/dev/null $STD filebrowser config set -a '0.0.0.0'
filebrowser users add admin helper-scripts.com --perm.admin &>/dev/null $STD filebrowser users add admin helper-scripts.com --perm.admin
fi fi
msg_ok "Installed FileBrowser" msg_ok "Installed FileBrowser"

View File

@@ -61,10 +61,10 @@ function update_script() {
fi fi
if [ "$UPD" == "3" ]; then if [ "$UPD" == "3" ]; then
msg_info "Installing Home Assistant Community Store (HACS)" msg_info "Installing Home Assistant Community Store (HACS)"
apt update &>/dev/null $STD apt update
apt install unzip &>/dev/null $STD apt install unzip
cd /var/lib/docker/volumes/hass_config/_data cd /var/lib/docker/volumes/hass_config/_data
bash <(curl -fsSL https://get.hacs.xyz) &>/dev/null $STD bash <(curl -fsSL https://get.hacs.xyz)
msg_ok "Installed Home Assistant Community Store (HACS)" msg_ok "Installed Home Assistant Community Store (HACS)"
echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n" echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n"
exit exit
@@ -73,10 +73,10 @@ function update_script() {
IP=$(hostname -I | awk '{print $1}') IP=$(hostname -I | awk '{print $1}')
msg_info "Installing FileBrowser" msg_info "Installing FileBrowser"
RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g') RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/v2.23.0/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null $STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/v2.23.0/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin
filebrowser config init -a '0.0.0.0' &>/dev/null $STD filebrowser config init -a '0.0.0.0'
filebrowser config set -a '0.0.0.0' &>/dev/null $STD filebrowser config set -a '0.0.0.0'
filebrowser users add admin helper-scripts.com --perm.admin &>/dev/null $STD filebrowser users add admin helper-scripts.com --perm.admin
msg_ok "Installed FileBrowser" msg_ok "Installed FileBrowser"
msg_info "Creating Service" msg_info "Creating Service"
@@ -91,7 +91,7 @@ ExecStart=/usr/local/bin/filebrowser -r /
[Install] [Install]
WantedBy=default.target" >$service_path WantedBy=default.target" >$service_path
systemctl enable --now filebrowser.service &>/dev/null $STD systemctl enable --now filebrowser.service
msg_ok "Created Service" msg_ok "Created Service"
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get install -y homebridge &>/dev/null $STD apt-get install -y homebridge
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }

View File

@@ -30,8 +30,8 @@ function update_script() {
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if ! command -v npm >/dev/null 2>&1; then if ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..." echo "Installing NPM..."
apt-get install -y npm >/dev/null 2>&1 $STD apt-get install -y npm
npm install -g pnpm >/dev/null 2>&1 $STD npm install -g pnpm
echo "Installed NPM..." echo "Installed NPM..."
fi fi
fi fi
@@ -45,11 +45,11 @@ function update_script() {
cp -r homepage-${RELEASE}/* /opt/homepage/ cp -r homepage-${RELEASE}/* /opt/homepage/
rm -rf homepage-${RELEASE} rm -rf homepage-${RELEASE}
cd /opt/homepage cd /opt/homepage
npx --yes update-browserslist-db@latest >/dev/null 2>&1 $STD npx --yes update-browserslist-db@latest
pnpm install >/dev/null 2>&1 $STD pnpm install
export NEXT_PUBLIC_VERSION="v$RELEASE" export NEXT_PUBLIC_VERSION="v$RELEASE"
export NEXT_PUBLIC_REVISION="source" export NEXT_PUBLIC_REVISION="source"
pnpm build >/dev/null 2>&1 $STD pnpm build
systemctl start homepage systemctl start homepage
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated Homepage to v${RELEASE}" msg_ok "Updated Homepage to v${RELEASE}"

View File

@@ -41,7 +41,7 @@ function update_script() {
rm -rf /opt/homer/* rm -rf /opt/homer/*
cd /opt/homer cd /opt/homer
wget -q https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip wget -q https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip
unzip homer.zip &>/dev/null $STD unzip homer.zip
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
msg_info "Restoring assets directory" msg_info "Restoring assets directory"

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get install -y hyperion &>/dev/null $STD apt-get install -y hyperion
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }

View File

@@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }

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