Compare commits

...

79 Commits

Author SHA1 Message Date
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
213 changed files with 2309 additions and 884 deletions

View File

@@ -95,7 +95,7 @@ Example:
>| Variable | Description | Notes |
>|----------|-------------|-------|
>| `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_ram` | RAM | In MB |
>| `var_disk` | Disk capacity | In GB |
@@ -193,13 +193,13 @@ wget -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:
```bash
php artisan migrate --force &>/dev/null
php artisan config:clear &>/dev/null
$STD php artisan migrate --force
$STD php artisan config:clear
```
### 3.5 **Backups**

View File

@@ -8,7 +8,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
# App Default Values
APP="[APP_NAME]"
# 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)
var_cpu="[CPU]"
# 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": [
{
"fileStatus": "added",
@@ -33,10 +21,17 @@
"excludeGlobs": []
}
],
"rename script": [
"maintenance": [
{
"fileStatus": "renamed",
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
"fileStatus": null,
"includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh", "api/**"],
"excludeGlobs": []
}
],
"core": [
{
"fileStatus": null,
"includeGlobs": ["misc/*.func", "ct/create_lxc.sh"],
"excludeGlobs": []
}
],
@@ -47,20 +42,28 @@
"excludeGlobs": []
}
],
"maintenance": [
{
"fileStatus": null,
"includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh"],
"excludeGlobs": ["misc/api.func"]
}
],
"api": [
"api": [
{
"fileStatus": null,
"includeGlobs": ["api/**", "misc/api.func"],
"excludeGlobs": []
}
],
"github": [
{
"fileStatus": null,
"includeGlobs": [".github/**"],
"excludeGlobs": []
}
],
"json": [
{
"fileStatus": "modified",
"includeGlobs": ["json/**"],
"excludeGlobs": []
}
],
"high risk": [
{
"fileStatus": null,
@@ -68,4 +71,6 @@
"excludeGlobs": []
}
]
}
}

View File

@@ -1,42 +1,97 @@
[
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"]
},
{
"title": "🆕 New Scripts",
"labels": ["new script"]
},
{
"title": "🚀 Updated Scripts",
"labels": ["update script"]
},
{
"title": "🐞 Bug Fixes (Updated Scripts)",
"labels": ["update script", "bugfix"]
},
{
"title": "✨ Feature Updates (Updated Scripts)",
"labels": ["update script", "feature"]
},
{
"title": "✨ New Features",
"labels": ["feature"]
},
{
"title": "🌐 Website",
"labels": ["website"]
},
{
"title": "📡 API",
"labels": ["api"]
"labels": ["update script"],
"subCategories": [
{
"title": "🐞 Bug Fixes",
"labels": ["bugfix"],
"notes" : []
},
{
"title": "✨ New Features",
"labels": ["feature"],
"notes" : []
},
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"],
"notes" : []
}
]
},
{
"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": "🌐 Website",
"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",
"labels": []
},
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"]
}
]

View File

@@ -1,25 +1,25 @@
## ✍️ Description
<!-- Provide a clear and concise description of your changes. -->
## 🔗 Related PR / Discussion / Issue
Link: #
## ✅ Prerequisites
Before this PR can be reviewed, the following must be completed:
- [] **Self-review performed** Code follows established patterns and conventions.
- [] **Testing performed** Changes have been thoroughly tested and verified.
## 🛠️ 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)
<!-- Provide extra context, screenshots, or references if needed. -->

View File

@@ -33,25 +33,26 @@ jobs:
const prNumber = context.payload.pull_request.number;
const prBody = context.payload.pull_request.body.toLowerCase();
// Label-Sammlung (um doppelte API-Calls zu vermeiden)
let labelsToAdd = new Set();
// Prüfe Datei-Änderungen
const prListFilesResponse = await github.rest.pulls.listFiles({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber,
});
const prFiles = prListFilesResponse.data;
// Apply labels based on file changes
for (const [label, rules] of Object.entries(autolabelerConfig)) {
const shouldAddLabel = prFiles.some((prFile) => {
return rules.some((rule) => {
const isFileStatusMatch = rule.fileStatus ? rule.fileStatus === prFile.status : true;
const isIncludeGlobMatch = rule.includeGlobs.some((glob) => minimatch(prFile.filename, glob));
const isExcludeGlobMatch = rule.excludeGlobs.some((glob) => minimatch(prFile.filename, glob));
return isFileStatusMatch && isIncludeGlobMatch && !isExcludeGlobMatch;
});
});
@@ -60,27 +61,24 @@ jobs:
labelsToAdd.add(label);
}
}
// Prüfe PR-Template Checkboxen mit den korrekten Labels
const templateLabelMappings = {
"🐞 bug fix": "bugfix",
"✨ new feature": "feature",
"💥 breaking change": "breaking change",
"🆕 new script": "new script"
"🐞 **Bug fix**": "bugfix",
"✨ **New feature**": "feature",
"💥 **Breaking change**": "breaking change",
};
for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
const regex = new RegExp(`- \\[(.*?)\\] ${checkbox}`, "i");
const match = prBody.match(regex);
if (match && match[1].trim() !== "") { // Checkbox ist gesetzt
const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
const regex = new RegExp(`- \\[(x|X)\\]\\s*.*${escapedCheckbox}`, "i");
const match = prBody.match(regex);
if (match) {
console.log(`Match: ${match}`);
labelsToAdd.add(label);
}
}
// Debugging: Anzeigen, welche Labels tatsächlich erkannt wurden
console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`);
// Labels setzen, falls neue erkannt wurden
if (labelsToAdd.size > 0) {
console.log(`Adding labels ${Array.from(labelsToAdd).join(", ")} to PR ${prNumber}`);
await github.rest.issues.addLabels({

View File

@@ -30,7 +30,6 @@ jobs:
- name: Get latest dates in changelog
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}')
LATEST_DATE=$(echo "$DATES" | sed -n '1p')
@@ -55,7 +54,31 @@ jobs:
const configPath = path.resolve(process.env.CONFIG_PATH);
const fileContent = await fs.readFile(configPath, 'utf-8');
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);
latestDateInChangelog.setUTCHours(23, 59, 59, 999);
@@ -70,24 +93,40 @@ jobs:
per_page: 100,
});
pulls.filter(pr =>
pr.merged_at &&
new Date(pr.merged_at) > latestDateInChangelog &&
!pr.labels.some(label => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase()))
pulls.filter(pr =>
pr.merged_at &&
new Date(pr.merged_at) > latestDateInChangelog &&
!pr.labels.some(label =>
["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase())
)
).forEach(pr => {
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}))`;
for (const { labels, notes } of categorizedPRs) {
if (labels.length === 0 || labels.some(label => prLabels.includes(label))) {
notes.push(prNote);
break;
const updateScriptsCategory = categorizedPRs.find(category =>
category.labels.some(label => prLabels.includes(label))
);
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;
- name: Update CHANGELOG.md
uses: actions/github-script@v7
with:
@@ -100,17 +139,36 @@ jobs:
const changelogPath = path.resolve('CHANGELOG.md');
const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }};
let newReleaseNotes = `## ${today}\n\n### Changes\n\n`;
for (const { title, notes } of categorizedPRs) {
if (notes.length > 0) {
newReleaseNotes += `### ${title}\n\n${notes.join("\n")}\n\n`;
}
}
console.log(JSON.stringify(categorizedPRs, null, 2));
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 changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`);
// Ersetze oder füge Release Notes ein
const regex = changelogIncludesTodaysReleaseNotes
? new RegExp(`## ${today}.*(?=## ${latestDateInChangelog})`, "gs")
: new RegExp(`(?=## ${latestDateInChangelog})`, "gs");
@@ -165,4 +223,4 @@ jobs:
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
fi
fi

View File

@@ -13,7 +13,7 @@ jobs:
run-install-script:
runs-on: pvenode
steps:
- name: Checkout PR branch (supports forks)
- name: Checkout PR branch
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
@@ -37,7 +37,8 @@ jobs:
echo "Changed files: $CHANGED_FILES"
echo "SCRIPT=$CHANGED_FILES" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Get scripts
id: check-install-script
@@ -68,11 +69,11 @@ jobs:
echo "Running Test for: $STRIPPED_NAME"
if [[ $FILE =~ ^install/.*-install\.sh$ ]]; then
CT_SCRIPT="ct/$STRIPPED_NAME.sh"
echo $CT_SCRIPT
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
RUN=false
fi
echo "Found CT script for $STRIPPED_NAME"
chmod +x "$CT_SCRIPT"
@@ -82,32 +83,19 @@ jobs:
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
RUN=false
fi
echo "Found install script for $STRIPPED_NAME"
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 [[ $RUN != "false" ]]; then
chmod +x $RUNNING_FILE
sed -i 's|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/.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"
fi
if [ -n "$ERROR_MSG" ]; then
echo "ERROR in $STRIPPED_NAME: $ERROR_MSG"
echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
@@ -125,12 +113,13 @@ jobs:
pct stop $container_id
pct destroy $container_id
fi
done
done
- name: Post error comments
run: |
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
STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
if [[ ! -f result_$STRIPPED_NAME.log ]]; then
@@ -145,8 +134,6 @@ jobs:
gh pr comment ${{ github.event.pull_request.number }} \
--repo ${{ github.repository }} \
--body ":warning: The script _**$FILE**_ failed with the following message: <br> <div><strong>${CLEANED_ERROR_MSG}</strong></div>"
ERROR="true"
fi
done
@@ -157,3 +144,5 @@ jobs:
- name: Fail if error
if: ${{ env.ERROR == 'true' }}
run: exit 1

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# 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
color() {
@@ -11,7 +11,7 @@ catch_errors() {
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
}
# This function handles errors
error_handler() {
local line_number="$1"
local command="$2"
@@ -21,8 +21,8 @@ error_handler() {
exit 0
}
verb_ip6() {
STD=""
return
STD=""
return
}
msg_info() {
@@ -30,13 +30,13 @@ msg_info() {
echo -ne "${msg}\n"
}
msg_ok() {
msg_ok() {
local msg="$1"
echo -e "${msg}\n"
}
msg_error() {
local msg="$1"
echo -e "${msg}\n"
}
@@ -71,7 +71,7 @@ network_check() {
}
update_os() {
msg_info "Updating Container OS"
msg_info "Updating Container OS"
apk update
apk upgrade
msg_ok "Updated Container OS"
@@ -82,7 +82,5 @@ motd_ssh() {
}
customize() {
return
}
return
}

View File

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

View File

@@ -11,8 +11,9 @@ catch_errors() {
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
}
# This function handles errors
error_handler() {
local exit_code="$?"
local exit_code="$?"
local line_number="$1"
local command="$2"
local error_message="Failure in line $line_number: exit code $exit_code: while executing command $command"
@@ -20,7 +21,7 @@ error_handler() {
exit 100
}
verb_ip6() {
return
return
}
msg_info() {
@@ -28,18 +29,17 @@ msg_info() {
echo -ne "${msg}\n"
}
msg_ok() {
msg_ok() {
local msg="$1"
echo -e "${msg}\n"
}
msg_error() {
local msg="$1"
echo -e "${msg}\n"
}
VALIDCT=$(pvesm status -content rootdir | awk 'NR>1')
if [ -z "$VALIDCT" ]; then
msg_error "Unable to detect a valid Container Storage location."
@@ -64,9 +64,12 @@ function select_storage() {
CONTENT='vztmpl'
CONTENT_LABEL='Container template'
;;
*) false || { msg_error "Invalid storage class."; exit 201; };;
*) false || {
msg_error "Invalid storage class."
exit 201
} ;;
esac
# This Queries all storage locations
local -a MENU
while read -r line; do
@@ -80,23 +83,32 @@ function select_storage() {
fi
MENU+=("$TAG" "$ITEM" "OFF")
done < <(pvesm status -content $CONTENT | awk 'NR>1')
# Select storage location
if [ $((${#MENU[@]}/3)) -eq 1 ]; then
if [ $((${#MENU[@]} / 3)) -eq 1 ]; then
printf ${MENU[0]}
else
msg_error "STORAGE ISSUES!"
exit 202
msg_error "STORAGE ISSUES!"
exit 202
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; }
[[ "${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; }
# Test if ID is in use
if pct status $CTID &>/dev/null; then
echo -e "ID '$CTID' is already in use."
unset CTID
@@ -110,10 +122,12 @@ CONTAINER_STORAGE=$(select_storage container) || exit
pveam update >/dev/null
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)
[ ${#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_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
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
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
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/subuid || echo "root:100000:65536" >>/etc/subuid
grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >>/etc/subgid
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
[[ " ${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
[[ -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
msg_error "A problem occurred while trying to create container after re-downloading template."
exit 200
fi
msg_error "A problem occurred while trying to create container after re-downloading template."
exit 200
fi
fi

View File

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

View File

@@ -17,6 +17,98 @@ 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
## 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

View File

@@ -35,8 +35,8 @@ function update_script() {
if [[ "${RELEASE}" != "$(cat /opt/2fauth_version.txt)" ]] || [[ ! -f /opt/2fauth_version.txt ]]; then
msg_info "Updating $APP to ${RELEASE}"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
$STD apt-get update
$STD apt-get -y upgrade
# Creating Backup
msg_info "Creating Backup"
@@ -55,7 +55,7 @@ function update_script() {
chmod -R 755 "/opt/2fauth"
export COMPOSER_ALLOW_SUPERUSER=1
composer install --no-dev --prefer-source &>/dev/null
$STD composer install --no-dev --prefer-source
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"
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
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
for dir in server-files .migrate user-files migrations; do
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
done
if [[ -f /opt/actualbudget-data/migrate/.migrations ]]; then
@@ -74,7 +74,7 @@ ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
EOF
fi
cd /opt/actualbudget
yarn install &>/dev/null
$STD yarn install
echo "${RELEASE}" > /opt/actualbudget_version.txt
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/media /opt/adventurelog/backend/server/media
cd /opt/adventurelog/backend/server
pip install --upgrade pip &>/dev/null
pip install -r requirements.txt &>/dev/null
python3 manage.py collectstatic --noinput &>/dev/null
python3 manage.py migrate &>/dev/null
$STD pip install --upgrade pip
$STD pip install -r requirements.txt
$STD python3 manage.py collectstatic --noinput
$STD python3 manage.py migrate
mv /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
cd /opt/adventurelog/frontend
pnpm install &>/dev/null
pnpm run build &>/dev/null
$STD pnpm install
$STD pnpm run build
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}"

View File

@@ -30,7 +30,7 @@ if [ ! -d /usr/share/nginx/html ]; then
fi
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"
msg_info "Updating ${APP} LXC"
curl -fsSL -o it-tools.zip "$DOWNLOAD_URL"

View File

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

View File

@@ -28,8 +28,8 @@ function update_script() {
exit
fi
msg_info "Updating $APP LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
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
rm -rf authentik.tar.gz
cd /opt/authentik/website
npm install &>/dev/null
npm run build-bundled &>/dev/null
$STD npm install
$STD npm run build-bundled
cd /opt/authentik/web
npm install &>/dev/null
npm run build &>/dev/null
$STD npm install
$STD npm run build
msg_ok "Built ${APP} website"
msg_info "Building ${APP} server"
@@ -56,15 +56,15 @@ function update_script() {
msg_info "Installing Python Dependencies"
cd /opt/authentik
poetry install --only=main --no-ansi --no-interaction --no-root &>/dev/null
poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt &>/dev/null
pip install --no-cache-dir -r requirements.txt &>/dev/null
pip install . &>/dev/null
$STD poetry install --only=main --no-ansi --no-interaction --no-root
$STD poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt
$STD pip install --no-cache-dir -r requirements.txt
$STD pip install .
msg_ok "Installed Python Dependencies"
msg_info "Updating ${APP} to v${RELEASE} (Patience)"
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
msg_ok "Updated ${APP} to v${RELEASE}"

View File

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

View File

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

View File

@@ -39,12 +39,13 @@ function update_script() {
unzip -q /opt/v${RELEASE}.zip -d /opt
mv /opt/BookStack-${RELEASE} /opt/bookstack
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/storage/uploads/* /opt/bookstack/storage/uploads/ 2>/dev/null || true
cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/ 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/ || true
cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/ || true
cd /opt/bookstack
COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev &>/dev/null
php artisan migrate --force &>/dev/null
export COMPOSER_ALLOW_SUPERUSER=1
$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
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

View File

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

View File

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

View File

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

View File

@@ -31,31 +31,31 @@ function update_script() {
if ! dpkg -s libjpeg-dev >/dev/null 2>&1; then
msg_info "Installing Dependencies"
apt-get update
apt-get install -y libjpeg-dev
$STD apt-get update
$STD apt-get install -y libjpeg-dev
msg_ok "Updated Dependencies"
fi
msg_info "Updating ${APP}"
pip3 install changedetection.io --upgrade &>/dev/null
$STD pip3 install changedetection.io --upgrade
msg_ok "Updated ${APP}"
msg_info "Updating Playwright"
pip3 install playwright --upgrade &>/dev/null
$STD pip3 install playwright --upgrade
msg_ok "Updated Playwright"
if [[ -f /etc/systemd/system/browserless.service ]]; then
msg_info "Updating Browserless (Patience)"
git -C /opt/browserless/ fetch --all &>/dev/null
git -C /opt/browserless/ reset --hard origin/main &>/dev/null
npm update --prefix /opt/browserless &>/dev/null
/opt/browserless/node_modules/playwright-core/cli.js install --with-deps &>/dev/null
$STD git -C /opt/browserless/ fetch --all
$STD git -C /opt/browserless/ reset --hard origin/main
$STD npm update --prefix /opt/browserless
$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.
/opt/browserless/node_modules/playwright-core/cli.js install --force chrome &>/dev/null
/opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit &>/dev/null
npm run build --prefix /opt/browserless &>/dev/null
npm run build:function --prefix /opt/browserless &>/dev/null
npm prune production --prefix /opt/browserless &>/dev/null
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force chrome
$STD /opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit
$STD npm run build --prefix /opt/browserless
$STD npm run build:function --prefix /opt/browserless
$STD npm prune production --prefix /opt/browserless
systemctl restart browserless
msg_ok "Updated Browserless"
else

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)
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Updating ${APP} to v${RELEASE}"
omd stop monitoring &>/dev/null
omd cp monitoring monitoringbackup &>/dev/null
$STD omd stop monitoring
$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
apt-get install -y /opt/checkmk.deb &>/dev/null
omd --force -V ${RELEASE}.cre update --conflict=install monitoring &>/dev/null
omd start monitoring &>/dev/null
omd -f rm monitoringbackup &>/dev/null
omd cleanup &>/dev/null
$STD apt-get install -y /opt/checkmk.deb
$STD omd --force -V ${RELEASE}.cre update --conflict=install monitoring
$STD omd start monitoring
$STD omd -f rm monitoringbackup
$STD omd cleanup
rm -rf /opt/checkmk.deb
msg_ok "Updated ${APP} to v${RELEASE}"
else

View File

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

View File

@@ -36,48 +36,48 @@ function update_script() {
if [ "$UPD" == "1" ]; then
msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC"
exit
fi
if [ "$UPD" == "2" ]; then
msg_info "Installing dependencies (patience)"
apt-get install -y attr &>/dev/null
apt-get install -y nfs-kernel-server &>/dev/null
apt-get install -y samba &>/dev/null
apt-get install -y samba-common-bin &>/dev/null
apt-get install -y winbind &>/dev/null
apt-get install -y gawk &>/dev/null
$STD apt-get install -y attr
$STD apt-get install -y nfs-kernel-server
$STD apt-get install -y samba
$STD apt-get install -y samba-common-bin
$STD apt-get install -y winbind
$STD apt-get install -y gawk
msg_ok "Installed dependencies"
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)
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
msg_ok "Installed Cockpit file sharing"
exit
fi
if [ "$UPD" == "3" ]; then
msg_info "Installing dependencies (patience)"
apt-get install -y psmisc &>/dev/null
apt-get install -y samba &>/dev/null
apt-get install -y samba-common-bin &>/dev/null
$STD apt-get install -y psmisc
$STD apt-get install -y samba
$STD apt-get install -y samba-common-bin
msg_ok "Installed dependencies"
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)
dpkg -i cockpit-identities_*focal_all.deb &>/dev/null
$STD dpkg -i cockpit-identities_*focal_all.deb
rm cockpit-identities_*focal_all.deb
msg_ok "Installed Cockpit identities"
exit
fi
if [ "$UPD" == "4" ]; then
msg_info "Installing dependencies"
apt-get install -y rsync &>/dev/null
apt-get install -y zip &>/dev/null
$STD apt-get install -y rsync
$STD apt-get install -y zip
msg_ok "Installed dependencies"
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)
dpkg -i cockpit-navigator_*focal_all.deb &>/dev/null
$STD dpkg -i cockpit-navigator_*focal_all.deb
rm cockpit-navigator_*focal_all.deb
msg_ok "Installed Cockpit navigator"
exit

View File

@@ -36,7 +36,7 @@ trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
# This function handles errors
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"
local exit_code="$?"
local line_number="$1"
@@ -51,13 +51,13 @@ function spinner() {
local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local spin_i=0
local interval=0.1
printf "\e[?25l"
printf "\e[?25l"
local color="${YWB}"
while true; do
printf "\r ${color}%s${CL}" "${frames[spin_i]}"
spin_i=$(( (spin_i + 1) % ${#frames[@]} ))
spin_i=$(((spin_i + 1) % ${#frames[@]}))
sleep "$interval"
done
}
@@ -70,9 +70,16 @@ function msg_info() {
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.
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"
local msg="$1"
echo -e "${BFR}${CM}${GN}${msg}${CL}"
@@ -80,7 +87,7 @@ function msg_ok() {
# This function displays a error message with a red color.
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"
local msg="$1"
echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
@@ -113,9 +120,12 @@ function select_storage() {
CONTENT='vztmpl'
CONTENT_LABEL='Container template'
;;
*) false || { msg_error "Invalid storage class."; exit 201; };
*) false || {
msg_error "Invalid storage class."
exit 201
} ;;
esac
# This Queries all storage locations
local -a MENU
while read -r line; do
@@ -129,34 +139,60 @@ function select_storage() {
fi
MENU+=("$TAG" "$ITEM" "OFF")
done < <(pvesm status -content $CONTENT | awk 'NR>1')
# Select storage location
if [ $((${#MENU[@]}/3)) -eq 1 ]; then
if [ $((${#MENU[@]} / 3)) -eq 1 ]; then
printf ${MENU[0]}
else
local STORAGE
while [ -z "${STORAGE:+x}" ]; do
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" \
16 $(($MSG_MAX_LENGTH + 23)) 6 \
"${MENU[@]}" 3>&1 1>&2 2>&3) || { msg_error "Menu aborted."; exit 202; }
"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 \
"${MENU[@]}" 3>&1 1>&2 2>&3) || {
msg_error "Menu aborted."
exit 202
}
if [ $? -ne 0 ]; then
echo -e "${CROSS}${RD} Menu aborted by user.${CL}"
exit 0
exit 0
fi
done
printf "%s" "$STORAGE"
fi
}
# Test if required variables are set
[[ "${CTID:-}" ]] || { msg_error "You need to set 'CTID' variable."; exit 203; }
[[ "${PCT_OSTYPE:-}" ]] || { msg_error "You need to set 'PCT_OSTYPE' variable."; exit 204; }
[[ "${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" -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
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."
unset CTID
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
msg_info "Updating LXC Template List"
#check_network
pveam update >/dev/null
msg_ok "Updated LXC Template List"
# Get LXC template string
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)
[ ${#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_PATH="/var/lib/vz/template/cache/$TEMPLATE"
# 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"
msg_info "Downloading LXC Template"
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||
{ msg_error "A problem occurred while downloading the LXC template."; exit 208; }
msg_ok "Downloaded LXC Template"
# Download with 3 attempts
for attempt in {1..3}; do
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
msg_ok "LXC Template is ready to use."
# Check and fix subuid/subgid
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/subuid || echo "root:100000:65536" >>/etc/subuid
grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >>/etc/subgid
# Combine all options
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
# Create container with template integrity check
msg_info "Creating LXC Container"
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
msg_ok "Template integrity check completed"
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 "Container creation failed. Checking if template is corrupted."
if ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
msg_error "Template appears to be corrupted. Removing and re-downloading."
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"
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
fi
else
msg_error "Container creation failed, but template is not corrupted."
exit 209
fi
fi
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 ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..."
apt-get install -y npm >/dev/null 2>&1
$STD apt-get install -y npm
echo "Installed NPM..."
fi
fi
msg_info "Updating ${APP}"
/opt/cronicle/bin/control.sh upgrade &>/dev/null
$STD /opt/cronicle/bin/control.sh upgrade
msg_ok "Updated ${APP}"
exit
fi
@@ -49,7 +49,7 @@ function update_script() {
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..."
apt-get install -y npm >/dev/null 2>&1
$STD apt-get install -y npm
echo "Installed NPM..."
fi
fi
@@ -57,12 +57,12 @@ function update_script() {
IP=$(hostname -I | awk '{print $1}')
msg_info "Installing Dependencies"
apt-get install -y git &>/dev/null
apt-get install -y make &>/dev/null
apt-get install -y g++ &>/dev/null
apt-get install -y gcc &>/dev/null
apt-get install -y ca-certificates &>/dev/null
apt-get install -y gnupg &>/dev/null
$STD apt-get install -y git
$STD apt-get install -y make
$STD apt-get install -y g++
$STD apt-get install -y gcc
$STD apt-get install -y ca-certificates
$STD apt-get install -y gnupg
msg_ok "Installed Dependencies"
msg_info "Setting up Node.js Repository"
@@ -72,21 +72,21 @@ function update_script() {
msg_ok "Set up Node.js Repository"
msg_info "Installing Node.js"
apt-get update &>/dev/null
apt-get install -y nodejs &>/dev/null
$STD apt-get update
$STD apt-get install -y nodejs
msg_ok "Installed Node.js"
msg_info "Installing Cronicle Worker"
mkdir -p /opt/cronicle
cd /opt/cronicle
tar zxvf <(curl -fsSL https://github.com/jhuckaby/Cronicle/archive/${LATEST}.tar.gz) --strip-components 1 &>/dev/null
npm install &>/dev/null
node bin/build.js dist &>/dev/null
$STD tar zxvf <(curl -fsSL https://github.com/jhuckaby/Cronicle/archive/${LATEST}.tar.gz) --strip-components 1
$STD npm install
$STD node bin/build.js dist
sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
/opt/cronicle/bin/control.sh start &>/dev/null
cp /opt/cronicle/bin/cronicled.init /etc/init.d/cronicled &>/dev/null
$STD /opt/cronicle/bin/control.sh start
$STD cp /opt/cronicle/bin/cronicled.init /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"
echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
exit

View File

@@ -29,7 +29,7 @@ function update_script() {
latest_version=$(npm show cross-seed version)
if [ "$current_version" != "$latest_version" ]; then
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
msg_ok "Updated Successfully"
else

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -34,6 +34,7 @@ function update_script() {
msg_info "Updating ${APP} to v${RELEASE}"
cp /opt/docmost/.env /opt/
cp -r /opt/docmost/data /opt/
rm -rf /opt/docmost
temp_file=$(mktemp)
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
cd /opt/docmost
mv /opt/.env /opt/docmost/.env
pnpm install --force &>/dev/null
pnpm build &>/dev/null
mv /opt/data /opt/docmost/data
$STD pnpm install --force
$STD pnpm build
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -37,21 +37,19 @@ check_container_resources
msg_info "Updating ${APP} to v${RELEASE}"
cp /opt/firefly/.env /opt/.env
cp -r /opt/firefly/storage /opt/storage
rm -rf /opt/firefly/*
cd /opt
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'
cp /opt/.env /opt/firefly/.env
cp -r /opt/storage /opt/firefly/storage
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
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"
msg_ok "Updated ${APP} to v${RELEASE}"
@@ -76,4 +74,4 @@ description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${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)
if [ "$current_version" != "$latest_version" ]; then
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"
else
msg_ok "${APP} is already at v${current_version}"

View File

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

View File

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

View File

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

6
ct/headers/authelia Normal file
View File

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

View File

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

6
ct/headers/outline Normal file
View File

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

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) }')
cp -R Heimdall-${VER}/* /opt/Heimdall
cd /opt/Heimdall
apt-get install -y composer &>/dev/null
COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload &>/dev/null
$STD apt-get install -y composer
$STD COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated Heimdall Dashboard to ${RELEASE}"
msg_info "Restoring Data"

View File

@@ -35,7 +35,7 @@ function update_script() {
msg_ok "Stopped Services"
msg_info "Updating ${APP} to v${RELEASE}"
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
cd /opt
if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then
@@ -47,14 +47,14 @@ function update_script() {
unzip -q v${RELEASE}.zip
mv hoarder-${RELEASE} /opt/hoarder
cd /opt/hoarder/apps/web
pnpm install --frozen-lockfile &>/dev/null
pnpm exec next build --experimental-build-mode compile &>/dev/null
$STD pnpm install --frozen-lockfile
$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
cd /opt/hoarder/apps/workers
pnpm install --frozen-lockfile &>/dev/null
$STD pnpm install --frozen-lockfile
export DATA_DIR=/opt/hoarder_data
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
msg_ok "Updated ${APP} to v${RELEASE}"

View File

@@ -38,14 +38,22 @@ fi
if [[ ! -f /opt/run_homarr.sh ]]; then
msg_info "Detected outdated and missing service files"
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 '/^DB_DIALECT=/d' /opt/homarr/.env && echo "DB_DIALECT='sqlite'" >> /opt/homarr/.env
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;' &
@@ -85,6 +93,30 @@ fi
msg_ok "Backup Data"
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"
unzip -q v${RELEASE}.zip
rm -rf v${RELEASE}.zip
@@ -92,8 +124,8 @@ fi
mv homarr-${RELEASE} /opt/homarr
mv /opt/homarr-data-backup/.env /opt/homarr/.env
cd /opt/homarr
pnpm install &>/dev/null
pnpm build &>/dev/null
$STD pnpm install
$STD pnpm build
cp /opt/homarr/apps/nextjs/next.config.ts .
cp /opt/homarr/apps/nextjs/package.json .
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"
source /srv/homeassistant/bin/activate
pip install ${BR}--upgrade homeassistant &>/dev/null
$STD pip install ${BR}--upgrade homeassistant
msg_ok "Updated Home Assistant"
msg_info "Starting Home Assistant"
@@ -72,10 +72,10 @@ function update_script() {
fi
if [ "$UPD" == "2" ]; then
msg_info "Installing Home Assistant Community Store (HACS)"
apt update &>/dev/null
apt install -y unzip &>/dev/null
$STD apt update
$STD apt install -y unzip
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)"
echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n"
exit
@@ -85,17 +85,17 @@ function update_script() {
read -r -p "Would you like to use No Authentication? <y/N> " prompt
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')
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
filebrowser config init -a '0.0.0.0' &>/dev/null
filebrowser config set -a '0.0.0.0' &>/dev/null
filebrowser config set --auth.method=noauth &>/dev/null
filebrowser users add ID 1 --perm.admin &>/dev/null
$STD filebrowser config init -a '0.0.0.0'
$STD filebrowser config set -a '0.0.0.0'
$STD filebrowser config set --auth.method=noauth
$STD filebrowser users add ID 1 --perm.admin
else
filebrowser config init -a '0.0.0.0' &>/dev/null
filebrowser config set -a '0.0.0.0' &>/dev/null
filebrowser users add admin helper-scripts.com --perm.admin &>/dev/null
$STD filebrowser config init -a '0.0.0.0'
$STD filebrowser config set -a '0.0.0.0'
$STD filebrowser users add admin helper-scripts.com --perm.admin
fi
msg_ok "Installed FileBrowser"

View File

@@ -61,10 +61,10 @@ function update_script() {
fi
if [ "$UPD" == "3" ]; then
msg_info "Installing Home Assistant Community Store (HACS)"
apt update &>/dev/null
apt install unzip &>/dev/null
$STD apt update
$STD apt install unzip
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)"
echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n"
exit
@@ -73,10 +73,10 @@ function update_script() {
IP=$(hostname -I | awk '{print $1}')
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')
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
filebrowser config init -a '0.0.0.0' &>/dev/null
filebrowser config set -a '0.0.0.0' &>/dev/null
filebrowser users add admin helper-scripts.com --perm.admin &>/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
$STD filebrowser config init -a '0.0.0.0'
$STD filebrowser config set -a '0.0.0.0'
$STD filebrowser users add admin helper-scripts.com --perm.admin
msg_ok "Installed FileBrowser"
msg_info "Creating Service"
@@ -91,7 +91,7 @@ ExecStart=/usr/local/bin/filebrowser -r /
[Install]
WantedBy=default.target" >$service_path
systemctl enable --now filebrowser.service &>/dev/null
$STD systemctl enable --now filebrowser.service
msg_ok "Created Service"
msg_ok "Completed Successfully!\n"

View File

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

View File

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

View File

@@ -41,7 +41,7 @@ function update_script() {
rm -rf /opt/homer/*
cd /opt/homer
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_info "Restoring assets directory"

View File

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

View File

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

View File

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

View File

@@ -36,7 +36,7 @@ function update_script() {
msg_info "Updating ${APP} to v${RELEASE}"
cd /opt
wget -q https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u1_amd64.deb
apt-get install "./inspircd_${RELEASE}.deb12u1_amd64.deb" -y &>/dev/nul
$STD apt-get install "./inspircd_${RELEASE}.deb12u1_amd64.deb" -y
echo "${RELEASE}" >"/opt/${APP}_version.txt"
msg_ok "Updated ${APP} to v${RELEASE}"

View File

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

View File

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

View File

@@ -35,8 +35,8 @@ function update_script() {
msg_ok "Updating Node.js Repository"
msg_info "Updating Packages"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updating Packages"
msg_info "Cleaning up"
@@ -53,10 +53,10 @@ function update_script() {
if [ -z "$pnpm_current" ]; then
msg_error "pnpm not found. Installing version $pnpm_desired..."
npm install -g pnpm@"$pnpm_desired" &>/dev/null
$STD npm install -g pnpm@"$pnpm_desired"
elif ! node -e "const semver = require('semver'); process.exit(semver.satisfies('$pnpm_current', '$pnpm_desired') ? 0 : 1)" ; then
msg_error "Updating pnpm from version $pnpm_current to $pnpm_desired..."
npm install -g pnpm@"$pnpm_desired" &>/dev/null
$STD npm install -g pnpm@"$pnpm_desired"
else
msg_ok "pnpm is already installed and satisfies version $pnpm_desired."
fi
@@ -70,9 +70,9 @@ function update_script() {
systemctl stop jellyseerr
rm -rf dist .next node_modules
export CYPRESS_INSTALL_BINARY=0
pnpm install --frozen-lockfile &>/dev/null
$STD pnpm install --frozen-lockfile
export NODE_OPTIONS="--max-old-space-size=3072"
pnpm build &>/dev/null
$STD pnpm build
cat <<EOF >/etc/systemd/system/jellyseerr.service
[Unit]

View File

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

42
ct/jupyternotebook.sh Normal file
View File

@@ -0,0 +1,42 @@
#!/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: Dave-code-creater (Tan Dat, Ta)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://jupyter.org/
APP="Jupyter Notebook"
var_tags="ai;dev-tools"
var_cpu="2"
var_ram="2048"
var_disk="4"
var_os="ubuntu"
var_version="24.04"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
msg_info "Updating ${APP} LXC"
$STD apt-get update
$STD apt-get install -y upgrade
$STD pip3 install jupyter --upgrade
msg_ok "Updated Successfully"
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8888${CL}"

View File

@@ -30,7 +30,7 @@ function update_script() {
msg_info "Updating $APP LXC"
systemctl stop kavita
RELEASE=$(curl -s https://api.github.com/repos/Kareadita/Kavita/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
tar -xvzf <(curl -fsSL https://github.com/Kareadita/Kavita/releases/download/$RELEASE/kavita-linux-x64.tar.gz) --no-same-owner &>/dev/null
$STD tar -xvzf <(curl -fsSL https://github.com/Kareadita/Kavita/releases/download/$RELEASE/kavita-linux-x64.tar.gz) --no-same-owner
rm -rf Kavita/config
cp -r Kavita/* /opt/Kavita
rm -rf Kavita

View File

@@ -30,8 +30,8 @@ function update_script() {
msg_info "Updating ${APP} LXC"
msg_info "Updating packages"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
$STD apt-get update
$STD apt-get -y upgrade
RELEASE=$(curl -s https://api.github.com/repos/keycloak/keycloak/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
msg_info "Updating Keycloak to v$RELEASE"

View File

@@ -35,19 +35,22 @@ function update_script() {
msg_info "Updating ${APP} to ${RELEASE}"
cp /opt/kimai/.env /opt/.env
[ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml /opt/local.yaml
rm -rf /opt/kimai
wget -q "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip"
unzip -q ${RELEASE}.zip
mv kimai-${RELEASE} /opt/kimai
mv /opt/.env /opt/kimai/.env
[ -f /opt/local.yaml ] && mv /opt/local.yaml /opt/kimai/config/packages/local.yaml
cd /opt/kimai
composer install --no-dev --optimize-autoloader &>/dev/null
bin/console kimai:update &>/dev/null
$STD composer install --no-dev --optimize-autoloader
$STD bin/console kimai:update
chown -R :www-data .
chmod -R g+r .
chmod -R g+rw var/
sudo chown -R www-data:www-data /opt/kimai
sudo chmod -R 755 /opt/kimai
chmod -R 777 /opt/kimai/var/
chown -R www-data:www-data /opt/kimai
chmod -R 755 /opt/kimai
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"
@@ -72,4 +75,4 @@ description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@@ -43,12 +43,12 @@ function update_script() {
cp -r /opt/koillection-backup/.env.local /opt/koillection
cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/
export COMPOSER_ALLOW_SUPERUSER=1
composer install --no-dev -o --no-interaction --classmap-authoritative &>/dev/null
php bin/console doctrine:migrations:migrate --no-interaction &>/dev/null
php bin/console app:translations:dump &>/dev/null
$STD composer install --no-dev -o --no-interaction --classmap-authoritative
$STD php bin/console doctrine:migrations:migrate --no-interaction
$STD php bin/console app:translations:dump
cd assets/
yarn install &>/dev/null
yarn build &>/dev/null
$STD yarn install
$STD yarn build
chown -R www-data:www-data /opt/koillection/public/uploads
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"

View File

@@ -46,7 +46,7 @@ function update_script() {
mv Kometa-${RELEASE} /opt/kometa
cd /opt/kometa
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
pip install -r requirements.txt --ignore-installed &> /dev/null
$STD pip install -r requirements.txt --ignore-installed
mkdir -p config/assets
cp /opt/config.yml config/config.yml
echo "${RELEASE}" >/opt/kometa_version.txt

View File

@@ -54,7 +54,7 @@ function update_script() {
exit 1
}
docker compose -p komodo -f "/opt/komodo/$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d &>/dev/null
$STD docker compose -p komodo -f "/opt/komodo/$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
msg_ok "Updated ${APP}"
}

View File

@@ -30,8 +30,8 @@ function update_script() {
RELEASE=$(wget -q https://github.com/ipfs/kubo/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Updating $APP LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
$STD apt-get update
$STD apt-get -y upgrade
wget -q "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-amd64.tar.gz"
tar -xzf "kubo_${RELEASE}_linux-amd64.tar.gz" -C /usr/local
systemctl restart ipfs.service

View File

@@ -32,7 +32,7 @@ function update_script() {
msg_ok "LazyLibrarian Stopped"
msg_info "Updating $APP LXC"
git -C /opt/LazyLibrarian pull origin master &>/dev/null
$STD git -C /opt/LazyLibrarian pull origin master
msg_ok "Updated $APP LXC"
msg_info "Starting LazyLibrarian"

View File

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

View File

@@ -41,12 +41,12 @@ function update_script() {
unzip -q ${RELEASE}.zip
mv linkwarden-${RELEASE:1} /opt/linkwarden
cd /opt/linkwarden
yarn &>/dev/null
npx playwright install-deps &>/dev/null
yarn playwright install &>/dev/null
$STD yarn
$STD npx playwright install-deps
$STD yarn playwright install
cp /opt/.env /opt/linkwarden/.env
yarn build &>/dev/null
yarn prisma migrate deploy &>/dev/null
$STD yarn build
$STD yarn prisma migrate deploy
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"

View File

@@ -42,7 +42,7 @@ function update_script() {
tar -xzf "listmonk_${RELEASE}_linux_amd64.tar.gz" -C /opt/listmonk
mv /opt/listmonk-backup/config.toml /opt/listmonk/config.toml
mv /opt/listmonk-backup/uploads /opt/listmonk/uploads
/opt/listmonk/listmonk --upgrade --yes --config /opt/listmonk/config.toml &>/dev/null
$STD /opt/listmonk/listmonk --upgrade --yes --config /opt/listmonk/config.toml
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"

View File

@@ -50,7 +50,7 @@ function update_script() {
rm -rf /opt/magicmirror
mv MagicMirror-${RELEASE} /opt/magicmirror
cd /opt/magicmirror
npm run install-mm &> /dev/null
$STD npm run install-mm
cp /opt/magicmirror-backup/config.js /opt/magicmirror/config/
if [[ -f /opt/magicmirror-backup/custom.css ]]; then
cp /opt/magicmirror-backup/custom.css /opt/magicmirror/css/

View File

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

View File

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

View File

@@ -37,13 +37,13 @@ function update_script() {
fi
systemctl stop memos
cd /opt/memos/web
pnpm i --frozen-lockfile &>/dev/null
pnpm build &>/dev/null
$STD pnpm i --frozen-lockfile
$STD pnpm build
cd /opt/memos
mkdir -p /opt/memos/server/dist
cp -r web/dist/* /opt/memos/server/dist/
cp -r web/dist/* /opt/memos/server/router/frontend/dist/
go build -o /opt/memos/memos -tags=embed bin/memos/main.go &>/dev/null
$STD go build -o /opt/memos/memos -tags=embed bin/memos/main.go
systemctl start memos
msg_ok "Updated $APP"
exit

View File

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

View File

@@ -37,14 +37,14 @@ function update_script() {
rm -rf metube_bak
fi
mv metube metube_bak
git clone https://github.com/alexta69/metube /opt/metube >/dev/null 2>&1
$STD git clone https://github.com/alexta69/metube /opt/metube
cd /opt/metube/ui
npm install >/dev/null 2>&1
node_modules/.bin/ng build >/dev/null 2>&1
$STD npm install
$STD node_modules/.bin/ng build
cd /opt/metube
cp /opt/metube_bak/.env /opt/metube/
pip3 install pipenv >/dev/null 2>&1
pipenv install >/dev/null 2>&1
$STD pip3 install pipenv
$STD pipenv install
if [ -d "/opt/metube_bak" ]; then
rm -rf /opt/metube_bak

View File

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

View File

@@ -42,10 +42,10 @@ function update_script() {
cd /opt/monica/
cp -r /opt/monica-backup/.env /opt/monica
cp -r /opt/monica-backup/storage/* /opt/monica/storage/
composer install --no-interaction --no-dev &>/dev/null
yarn install &>/dev/null
yarn run production &>/dev/null
php artisan monica:update --force &>/dev/null
$STD composer install --no-interaction --no-dev
$STD yarn install
$STD yarn run production
$STD php artisan monica:update --force
chown -R www-data:www-data /opt/monica
chmod -R 775 /opt/monica/storage
echo "${RELEASE}" >/opt/${APP}_version.txt

View File

@@ -28,7 +28,7 @@ function update_script() {
exit
fi
msg_info "Updating ${APP} LXC"
pip install motioneye --upgrade &>/dev/null
$STD pip install motioneye --upgrade
msg_ok "Updated Successfully"
exit
}

View File

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

View File

@@ -41,7 +41,7 @@ function update_script() {
wget -q https://github.com/gnmyt/myspeed/releases/download/v$RELEASE/MySpeed-$RELEASE.zip
unzip -q MySpeed-$RELEASE.zip -d myspeed
cd myspeed
npm install >/dev/null 2>&1
$STD npm install
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}"

View File

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

View File

@@ -30,12 +30,12 @@ function update_script() {
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..."
apt-get install -y npm >/dev/null 2>&1
$STD apt-get install -y npm
echo "Installed NPM..."
fi
fi
msg_info "Updating ${APP} LXC"
npm update -g n8n &>/dev/null
$STD npm update -g n8n
systemctl restart n8n
msg_ok "Updated Successfully"
exit

View File

@@ -35,7 +35,7 @@ function update_script() {
msg_info "Updating to v${RELEASE}"
cd /opt
wget -q https://github.com/navidrome/navidrome/releases/download/v${RELEASE}/navidrome_${RELEASE}_linux_amd64.tar.gz -O Navidrome.tar.gz
tar -xvzf Navidrome.tar.gz -C /opt/navidrome/ &>/dev/null
$STD tar -xvzf Navidrome.tar.gz -C /opt/navidrome/
chmod +x /opt/navidrome/navidrome
msg_ok "Updated ${APP}"
rm -rf /opt/Navidrome.tar.gz

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