Compare commits

...

85 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
38a8773d2f Update CHANGELOG.md (#7934)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-27 00:13:08 +00:00
community-scripts-pr-app[bot]
e7dafcbf3e Update versions.json (#7933)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-27 02:12:41 +02:00
community-scripts-pr-app[bot]
380fb1cfb7 Update CHANGELOG.md (#7932)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-26 20:59:46 +00:00
Slaviša Arežina
10cd6c3f0b Odoo: Fix missing dependencies (#7931)
* Fix odoo

* Update
2025-09-26 22:59:21 +02:00
community-scripts-pr-app[bot]
710bd7f4e7 Update CHANGELOG.md (#7930)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-26 19:37:04 +00:00
Slaviša Arežina
4d72852e53 Clarify descriptions of update scripts (#7929) 2025-09-26 21:36:43 +02:00
community-scripts-pr-app[bot]
9ad538c2d2 Update CHANGELOG.md (#7926)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-26 16:42:24 +00:00
Michel Roegl-Brunner
ee3872e7e1 OpenWebUI: Update NODE_OPTIONS to increase memory limit (#7919) 2025-09-26 18:41:58 +02:00
community-scripts-pr-app[bot]
f6ca81833e Update versions.json (#7916)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-26 14:05:29 +02:00
community-scripts-pr-app[bot]
c41b18f083 Update CHANGELOG.md (#7909)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-26 00:13:48 +00:00
community-scripts-pr-app[bot]
f983f75b30 Update versions.json (#7908)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-26 02:13:21 +02:00
community-scripts-pr-app[bot]
137dd647dd Update CHANGELOG.md (#7903)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-25 13:03:41 +00:00
community-scripts-pr-app[bot]
2f5c608f45 Update CHANGELOG.md (#7902)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-25 13:03:20 +00:00
community-scripts-pr-app[bot]
b8e06c05d0 Update date in json (#7901)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-09-25 13:03:15 +00:00
push-app-to-main[bot]
2beb89055c 'Add new script' (#7900)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2025-09-25 15:02:52 +02:00
community-scripts-pr-app[bot]
308897fdc7 Update versions.json (#7898)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-25 14:07:08 +02:00
community-scripts-pr-app[bot]
5b73367c80 Update CHANGELOG.md (#7897)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-25 09:07:03 +00:00
Tobias
5c0eefa652 ntfy: bump to debian 13 (#7895)
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-09-25 11:06:39 +02:00
community-scripts-pr-app[bot]
7c5c654dbe Update CHANGELOG.md (#7896)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-25 08:49:43 +00:00
Bram Suurd
984eeedf31 Enhance category metadata in JSON and update script accordion to display icons. Added 'icon' property to categories in metadata.json and modified script-accordion component to render corresponding icons for each category. (#7894) 2025-09-25 10:49:12 +02:00
community-scripts-pr-app[bot]
7fd08cbe69 Update CHANGELOG.md (#7892)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-25 00:13:14 +00:00
community-scripts-pr-app[bot]
285447b67f Update versions.json (#7891)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-25 02:12:49 +02:00
community-scripts-pr-app[bot]
b394cdf6e0 Update CHANGELOG.md (#7884)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-24 12:28:46 +00:00
community-scripts-pr-app[bot]
ab2a6ed38e Update CHANGELOG.md (#7883)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-24 12:28:32 +00:00
community-scripts-pr-app[bot]
f8e109c529 Update .app files (#7882)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-09-24 12:28:28 +00:00
community-scripts-pr-app[bot]
46e4bc3a04 Update date in json (#7881)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-09-24 12:28:21 +00:00
push-app-to-main[bot]
d0a1f305c7 Add Script: Joplin Server (#7879)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-09-24 14:28:02 +02:00
community-scripts-pr-app[bot]
6948e1f695 Update CHANGELOG.md (#7880)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-24 12:26:43 +00:00
Slaviša Arežina
8c860da4ed Fix dependencies (#7877) 2025-09-24 14:26:19 +02:00
community-scripts-pr-app[bot]
d32e9fad59 Update versions.json (#7878)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-24 14:06:22 +02:00
community-scripts-pr-app[bot]
9096a388c7 Update CHANGELOG.md (#7873)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-24 07:42:47 +00:00
Michel Roegl-Brunner
9f0efc27df Update name in lxc-delete.json to 'PVE LXC Deletion' (#7872) 2025-09-24 09:42:20 +02:00
community-scripts-pr-app[bot]
06ca6e2087 Update CHANGELOG.md (#7871)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-24 00:13:00 +00:00
community-scripts-pr-app[bot]
8c48ea6718 Update versions.json (#7870)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-24 02:12:36 +02:00
community-scripts-pr-app[bot]
b626e705eb Update CHANGELOG.md (#7869)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 20:39:42 +00:00
community-scripts-pr-app[bot]
f103d09c09 Update CHANGELOG.md (#7867)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 19:35:46 +00:00
Chris
82a7d252ab Bump Immich to v1.143.1 (#7864) 2025-09-23 21:35:27 +02:00
community-scripts-pr-app[bot]
48af77e928 Update CHANGELOG.md (#7866)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 19:21:34 +00:00
Chris
d24308a409 Manage My Damn Life: use NodeJS 22 (#7861) 2025-09-23 21:21:05 +02:00
community-scripts-pr-app[bot]
584365fff1 Update CHANGELOG.md (#7863)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 19:03:42 +00:00
Giovanni Pellerano
95c54dccd7 Improve globaleaks install ensuring install can proceed without user input (#7860) 2025-09-23 21:03:15 +02:00
community-scripts-pr-app[bot]
eb28463d86 Update CHANGELOG.md (#7859)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 18:01:51 +00:00
community-scripts-pr-app[bot]
bddde99252 Update CHANGELOG.md (#7858)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 18:01:39 +00:00
Chris
f1f8c1b279 BookLore: increase RAM (#7855)
- Build was failing due to OOM
2025-09-23 20:01:24 +02:00
community-scripts-pr-app[bot]
37a0a4add9 Update CHANGELOG.md (#7857)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 18:01:15 +00:00
Chris
02cede3f5d tools.func: Check for /usr/local/bin in PATH during yq setup (#7856)
- My Booklore update failed due to yq not being found despite installed
2025-09-23 20:00:48 +02:00
community-scripts-pr-app[bot]
42a7d57a42 Update versions.json (#7851)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 14:05:40 +02:00
community-scripts-pr-app[bot]
53b5f0d1fe Update CHANGELOG.md (#7850)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 11:23:29 +00:00
CanbiZ
4a56d8d9aa Remove not exist admin credentials from output (#7849) 2025-09-23 13:23:03 +02:00
community-scripts-pr-app[bot]
f819188a5e Update CHANGELOG.md (#7847)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 10:11:48 +00:00
Slaviša Arežina
4d6e3e5977 Update openwebui.json (#7843) 2025-09-23 12:11:21 +02:00
community-scripts-pr-app[bot]
d6fc527200 Update CHANGELOG.md (#7846)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 10:07:01 +00:00
community-scripts-pr-app[bot]
c103c3b03d Update CHANGELOG.md (#7845)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 10:06:51 +00:00
CanbiZ
2d290cb27f VM: Increase pv & xz functions (HA OS / Umbrel OS) (#7838) 2025-09-23 12:06:35 +02:00
community-scripts-pr-app[bot]
883efd1cd2 Update CHANGELOG.md (#7844)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 10:06:31 +00:00
CanbiZ
1f40670ea0 cosmos: add info note for configuration file (#7824) 2025-09-23 12:06:07 +02:00
community-scripts-pr-app[bot]
cec4e2d5c1 Update CHANGELOG.md (#7841)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 09:40:12 +00:00
CanbiZ
1fafb3f661 Suppress wrong errors from uv shell integration in setup_uv (#7822) 2025-09-23 11:39:46 +02:00
community-scripts-pr-app[bot]
b56b053e8b Update CHANGELOG.md (#7840)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 09:38:32 +00:00
CanbiZ
21f98835dc Update Tandoor install scripts for newer dependencies (#7826) 2025-09-23 11:38:07 +02:00
community-scripts-pr-app[bot]
ab455d7748 Update CHANGELOG.md (#7839)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 09:36:51 +00:00
CanbiZ
5382fa1dbd Update Monica and Outline to use Node.js 22 (#7833) 2025-09-23 11:36:29 +02:00
community-scripts-pr-app[bot]
6fa1938360 Update CHANGELOG.md (#7837)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 08:47:49 +00:00
community-scripts-pr-app[bot]
2a2df5b5cc Update CHANGELOG.md (#7836)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 08:47:27 +00:00
CanbiZ
f99d582eb5 ElementSynapse: add note for Bridge Install Methods (#7820) 2025-09-23 10:47:25 +02:00
community-scripts-pr-app[bot]
d3f24ae5b2 Update CHANGELOG.md (#7835)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 08:47:05 +00:00
CanbiZ
25e89f7bac Refactor Caddyfile configuration for headscale-admin (#7821) 2025-09-23 10:47:00 +02:00
community-scripts-pr-app[bot]
2686753448 Update CHANGELOG.md (#7834)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 08:46:56 +00:00
CanbiZ
19678e2534 Update Zabbix install for Debian 13 and agent selection (#7819) 2025-09-23 10:46:32 +02:00
community-scripts-pr-app[bot]
1ac8f90281 Update CHANGELOG.md (#7832)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 08:46:29 +00:00
Tobias
7cd3e40f9c tracktor: bump to debian 13 | feature bump (#7818) 2025-09-23 10:46:03 +02:00
community-scripts-pr-app[bot]
42191bdb5a Update CHANGELOG.md (#7831)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 08:45:46 +00:00
CanbiZ
aab1a9bce5 LiteLLM: Bump to Debian 13 & add deps (#7815) 2025-09-23 10:45:20 +02:00
community-scripts-pr-app[bot]
208226065b Update CHANGELOG.md (#7830)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 08:44:49 +00:00
community-scripts-pr-app[bot]
54e62749be Update CHANGELOG.md (#7829)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 08:44:40 +00:00
community-scripts-pr-app[bot]
2a8e2e62cd Update date in json (#7827)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-09-23 10:44:24 +02:00
CanbiZ
b15d7be4c3 Improve subscription element removal in post-install script (#7814) 2025-09-23 10:44:14 +02:00
community-scripts-pr-app[bot]
e208bc110b Update CHANGELOG.md (#7828)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 08:43:52 +00:00
push-app-to-main[bot]
b26ad61a33 UpSnap (#7825)
* 'Add new script'

* Remove redundant success message in upsnap.sh

* Update upsnap.json

* Fix JSON formatting in upsnap.json

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-09-23 10:43:29 +02:00
community-scripts-pr-app[bot]
5beaec9514 Update CHANGELOG.md (#7823)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 07:47:32 +00:00
CanbiZ
3a668870b7 gh: remove ai autolabel test (#7817) 2025-09-23 09:47:05 +02:00
community-scripts-pr-app[bot]
3266962630 Update CHANGELOG.md (#7816)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 06:14:21 +00:00
Chris
2a3f5d7b47 Immich: bump to v1.143.0 (#7801) 2025-09-23 08:13:57 +02:00
community-scripts-pr-app[bot]
fb4c3cf9e9 Update CHANGELOG.md (#7813)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-23 05:00:17 +00:00
Slaviša Arežina
e96ea4eb40 Fix release fetching (#7807) 2025-09-23 06:59:52 +02:00
62 changed files with 1651 additions and 648 deletions

38
.github/label-priority.json generated vendored
View File

@@ -1,38 +0,0 @@
{
"priorities": {
"refactor": 3,
"feature": 2,
"bugfix": 1,
"new script": 3,
"update script": 2,
"delete script": 2,
"json": 3,
"website": 2,
"maintenance": 1,
"documentation": 1,
"core": 2,
"api": 2,
"addon": 2,
"pve-tool": 2,
"vm": 2,
"github": 1
},
"conflicts": {
"bugfix": ["refactor"],
"website": ["json"],
"update script": ["new script", "delete script"],
"new script": ["update script", "delete script"],
"delete script": ["new script", "update script"]
},
"rules": {
"always_combine": [
"maintenance",
"core",
"api",
"addon",
"pve-tool",
"vm",
"github"
]
}
}

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

@@ -112,119 +112,3 @@ jobs:
labels: Array.from(labelsToAdd), labels: Array.from(labelsToAdd),
}); });
} }
ai-check:
needs: autolabeler
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Load priority config
run: |
echo "PRIORITY_JSON=$(jq -c . .github/label-priority.json)" >> $GITHUB_ENV
- name: Fetch PR metadata
id: pr
uses: actions/github-script@v7
with:
script: |
const pr = context.payload.pull_request;
const files = await github.rest.pulls.listFiles({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number
});
const prData = {
title: pr.title || "",
body: pr.body || "",
files: files.data.map(f => f.filename)
};
require('fs').writeFileSync(process.env.GITHUB_ENV, `PR_DATA=${JSON.stringify(prData)}\n`, {flag: 'a'});
- name: AI Label Review
id: ai
uses: actions/github-script@v7
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
with:
script: |
const prData = JSON.parse(process.env.PR_DATA);
const prompt = `
You are a GitHub labeling bot.
Task:
- Analyze PR title, body, and file list.
- For each possible label, return a confidence score (01).
- If both bugfix and refactor apply, prefer refactor.
- Output JSON: {"labels":[{"name":"bugfix","score":0.9},{"name":"refactor","score":0.6}]}
Valid labels: [new script, update script, delete script, bugfix, feature, maintenance, refactor, website, json, api, core, github, addon, pve-tool, vm].
PR data: ${JSON.stringify(prData)}
`;
const response = await fetch("https://api.openai.com/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer " + process.env.OPENAI_API_KEY,
},
body: JSON.stringify({
model: "gpt-4.1-mini",
messages: [{ role: "user", content: prompt }],
temperature: 0
})
});
const data = await response.json();
const labels = JSON.parse(data.choices[0].message.content).labels;
core.setOutput("labels", JSON.stringify(labels));
- name: Apply AI Labels
uses: actions/github-script@v7
with:
script: |
const raw = JSON.parse('${{ steps.ai.outputs.labels }}');
const prNumber = context.payload.pull_request.number;
const config = JSON.parse(process.env.PRIORITY_JSON);
let toApply = [];
let toSuggest = [];
raw.forEach(l => {
if (l.score >= 0.8) {
const conflicts = config.conflicts[l.name] || [];
const hasStrongerConflict = conflicts.some(c =>
raw.some(x =>
x.name === c &&
x.score >= 0.6 &&
(config.priorities[c] || 0) >= (config.priorities[l.name] || 0)
)
);
if (!hasStrongerConflict) {
toApply.push(l.name);
}
} else if (l.score >= 0.5) {
toSuggest.push(`${l.name} (${Math.round(l.score*100)}%)`);
}
});
if (toApply.length > 0) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
labels: toApply
});
}
if (toSuggest.length > 0) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: `🤖 AI suggests these possible labels (uncertain): ${toSuggest.join(", ")}`
});
}

View File

@@ -10,8 +10,104 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-09-27
## 2025-09-26
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Odoo: Fix missing dependencies [@tremor021](https://github.com/tremor021) ([#7931](https://github.com/community-scripts/ProxmoxVE/pull/7931))
- OpenWebUI: Update NODE_OPTIONS to increase memory limit [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#7919](https://github.com/community-scripts/ProxmoxVE/pull/7919))
### 🌐 Website
- #### 📝 Script Information
- Clarify descriptions of update scripts [@tremor021](https://github.com/tremor021) ([#7929](https://github.com/community-scripts/ProxmoxVE/pull/7929))
## 2025-09-25
### 🆕 New Scripts
- GoAway ([#7900](https://github.com/community-scripts/ProxmoxVE/pull/7900))
### 🚀 Updated Scripts
- #### ✨ New Features
- ntfy: bump to debian 13 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7895](https://github.com/community-scripts/ProxmoxVE/pull/7895))
### 🌐 Website
- #### ✨ New Features
- feat: add menu icons to website [@BramSuurdje](https://github.com/BramSuurdje) ([#7894](https://github.com/community-scripts/ProxmoxVE/pull/7894))
## 2025-09-24
### 🆕 New Scripts
- Add Script: Joplin Server ([#7879](https://github.com/community-scripts/ProxmoxVE/pull/7879))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Monica: Fix dependencies [@tremor021](https://github.com/tremor021) ([#7877](https://github.com/community-scripts/ProxmoxVE/pull/7877))
### 🌐 Website
- #### 📝 Script Information
- Update name in lxc-delete.json to 'PVE LXC Deletion' [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#7872](https://github.com/community-scripts/ProxmoxVE/pull/7872))
## 2025-09-23 ## 2025-09-23
### 🆕 New Scripts
- UpSnap ([#7825](https://github.com/community-scripts/ProxmoxVE/pull/7825))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- tools.func: Check for /usr/local/bin in PATH during yq setup [@vhsdream](https://github.com/vhsdream) ([#7856](https://github.com/community-scripts/ProxmoxVE/pull/7856))
- BookLore: increase RAM [@vhsdream](https://github.com/vhsdream) ([#7855](https://github.com/community-scripts/ProxmoxVE/pull/7855))
- Bump Immich to v1.143.1 [@vhsdream](https://github.com/vhsdream) ([#7864](https://github.com/community-scripts/ProxmoxVE/pull/7864))
- zabbix: Remove not exist admin credentials from output [@MickLesk](https://github.com/MickLesk) ([#7849](https://github.com/community-scripts/ProxmoxVE/pull/7849))
- Suppress wrong errors from uv shell integration in setup_uv [@MickLesk](https://github.com/MickLesk) ([#7822](https://github.com/community-scripts/ProxmoxVE/pull/7822))
- Refactor Caddyfile configuration for headscale-admin [@MickLesk](https://github.com/MickLesk) ([#7821](https://github.com/community-scripts/ProxmoxVE/pull/7821))
- Improve subscription element removal (mobile) in post-pve script [@MickLesk](https://github.com/MickLesk) ([#7814](https://github.com/community-scripts/ProxmoxVE/pull/7814))
- Blocky: Fix release fetching [@tremor021](https://github.com/tremor021) ([#7807](https://github.com/community-scripts/ProxmoxVE/pull/7807))
- #### ✨ New Features
- Improve globaleaks install ensuring install can proceed without user … [@evilaliv3](https://github.com/evilaliv3) ([#7860](https://github.com/community-scripts/ProxmoxVE/pull/7860))
- Manage My Damn Life: use NodeJS 22 [@vhsdream](https://github.com/vhsdream) ([#7861](https://github.com/community-scripts/ProxmoxVE/pull/7861))
- VM: Increase pv & xz functions (HA OS / Umbrel OS) [@MickLesk](https://github.com/MickLesk) ([#7838](https://github.com/community-scripts/ProxmoxVE/pull/7838))
- Tandoor: update for newer dependencies (psql) + bump nodejs to 22 [@MickLesk](https://github.com/MickLesk) ([#7826](https://github.com/community-scripts/ProxmoxVE/pull/7826))
- Update Monica and Outline to use Node.js 22 [@MickLesk](https://github.com/MickLesk) ([#7833](https://github.com/community-scripts/ProxmoxVE/pull/7833))
- Update Zabbix install for Debian 13 and agent selection [@MickLesk](https://github.com/MickLesk) ([#7819](https://github.com/community-scripts/ProxmoxVE/pull/7819))
- tracktor: bump to debian 13 | feature bump [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7818](https://github.com/community-scripts/ProxmoxVE/pull/7818))
- LiteLLM: Bump to Debian 13 & add deps [@MickLesk](https://github.com/MickLesk) ([#7815](https://github.com/community-scripts/ProxmoxVE/pull/7815))
- Immich: bump to v1.143.0 [@vhsdream](https://github.com/vhsdream) ([#7801](https://github.com/community-scripts/ProxmoxVE/pull/7801))
### 🧰 Maintenance
- #### 📂 Github
- gh: remove ai autolabel test [@MickLesk](https://github.com/MickLesk) ([#7817](https://github.com/community-scripts/ProxmoxVE/pull/7817))
### 🌐 Website
- #### 📝 Script Information
- OpenWebUI: Add information about Ollama [@tremor021](https://github.com/tremor021) ([#7843](https://github.com/community-scripts/ProxmoxVE/pull/7843))
- cosmos: add info note for configuration file [@MickLesk](https://github.com/MickLesk) ([#7824](https://github.com/community-scripts/ProxmoxVE/pull/7824))
- ElementSynapse: add note for Bridge Install Methods [@MickLesk](https://github.com/MickLesk) ([#7820](https://github.com/community-scripts/ProxmoxVE/pull/7820))
## 2025-09-22 ## 2025-09-22
### 🚀 Updated Scripts ### 🚀 Updated Scripts

View File

@@ -40,7 +40,7 @@ function update_script() {
rm -rf /opt/blocky rm -rf /opt/blocky
msg_ok "Removed Old Version" msg_ok "Removed Old Version"
fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_linux_x86_64.tar.gz" fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_Linux_x86_64.tar.gz"
msg_info "Restore Config" msg_info "Restore Config"
mv /opt/config.yml /opt/blocky/config.yml mv /opt/config.yml /opt/blocky/config.yml

View File

@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="BookLore" APP="BookLore"
var_tags="${var_tags:-books;library}" var_tags="${var_tags:-books;library}"
var_cpu="${var_cpu:-3}" var_cpu="${var_cpu:-3}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-3072}"
var_disk="${var_disk:-7}" var_disk="${var_disk:-7}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-12}"

54
ct/goaway.sh Normal file
View File

@@ -0,0 +1,54 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/pommee/goaway
APP="GoAway"
var_tags="${var_tags:-network}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/goaway ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "goaway" "pommee/goaway"; then
msg_info "Stopping Services"
systemctl stop goaway
msg_ok "Stopped Services"
fetch_and_deploy_gh_release "goaway" "pommee/goaway" "prebuild" "latest" "/opt/goaway" "goaway_*_linux_amd64.tar.gz"
msg_info "Starting Services"
systemctl start goaway
msg_ok "Started Services"
msg_ok "Updated Successfully"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

6
ct/headers/goaway Normal file
View File

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

6
ct/headers/joplin-server Normal file
View File

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

6
ct/headers/upsnap Normal file
View File

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

View File

@@ -53,3 +53,5 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}Headscale API: ${IP}/api (no Frontend) | headscale-admin: http://${IP}/admin/${CL}"

View File

@@ -74,7 +74,7 @@ function update_script() {
done done
msg_ok "Image-processing libraries up to date" msg_ok "Image-processing libraries up to date"
fi fi
RELEASE="1.142.1" RELEASE="1.143.1"
if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop immich-web systemctl stop immich-web

62
ct/joplin-server.sh Normal file
View File

@@ -0,0 +1,62 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://joplinapp.org/
APP="Joplin-Server"
var_tags="${var_tags:-notes}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-20}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/joplin-server ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "joplin-server" "laurent22/joplin"; then
msg_info "Stopping Services"
systemctl stop joplin-server
msg_ok "Stopped Services"
fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball" "latest"
msg_info "Updating ${APP}"
cd /opt/joplin-server
sed -i "/onenote-converter/d" packages/lib/package.json
$STD yarn config set --home enableTelemetry 0
export BUILD_SEQUENCIAL=1
$STD yarn install --inline-builds
msg_ok "Updated ${APP}"
msg_info "Starting Services"
systemctl start joplin-server
msg_ok "Started Services"
msg_ok "Updated Successfully"
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}:22300${CL}"

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -29,23 +29,24 @@ function update_script() {
exit exit
fi fi
msg_info "Stopping ${APP}" msg_info "Stopping Service"
systemctl stop litellm systemctl stop litellm
msg_ok "Stopped ${APP}" msg_ok "Stopped Service"
VENV_PATH="/opt/litellm/.venv" VENV_PATH="/opt/litellm/.venv"
PYTHON_VERSION="3.13" setup_uv PYTHON_VERSION="3.13" setup_uv
msg_info "Updating $APP" msg_info "Updating LiteLLM"
$STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma $STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma
msg_ok "LiteLLM updated"
msg_info "Updating DB Schema" msg_info "Updating DB Schema"
$STD uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup $STD uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
msg_ok "DB Schema Updated" msg_ok "DB Schema Updated"
msg_info "Starting ${APP}" msg_info "Starting Service"
systemctl start litellm systemctl start litellm
msg_ok "Started ${APP}" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }

View File

@@ -35,12 +35,15 @@ function update_script() {
msg_info "Creating Backup" msg_info "Creating Backup"
cp /opt/mmdl/.env /opt/mmdl.env cp /opt/mmdl/.env /opt/mmdl.env
rm -rf /opt/mmdl
msg_ok "Backup Created" msg_ok "Backup Created"
fetch_and_deploy_gh_release "mmdl" "intri-in/manage-my-damn-life-nextjs" "tarball" fetch_and_deploy_gh_release "mmdl" "intri-in/manage-my-damn-life-nextjs" "tarball"
NODE_VERSION="22" setup_nodejs
msg_info "Configuring ${APP}" msg_info "Configuring ${APP}"
cd /opt/mmdl cd /opt/mmdl
export NEXT_TELEMETRY_DISABLED=1
$STD npm install $STD npm install
$STD npm run migrate $STD npm run migrate
$STD npm run build $STD npm run build

View File

@@ -27,6 +27,9 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
if check_for_gh_release "monica" "monicahq/monica"; then if check_for_gh_release "monica" "monicahq/monica"; then
msg_info "Stopping Service" msg_info "Stopping Service"
systemctl stop apache2 systemctl stop apache2
@@ -43,6 +46,7 @@ function update_script() {
cp -r /opt/monica-backup/.env /opt/monica cp -r /opt/monica-backup/.env /opt/monica
cp -r /opt/monica-backup/storage/* /opt/monica/storage/ cp -r /opt/monica-backup/storage/* /opt/monica/storage/
$STD composer install --no-interaction --no-dev $STD composer install --no-interaction --no-dev
$STD yarn config set ignore-engines true
$STD yarn install $STD yarn install
$STD yarn run production $STD yarn run production
$STD php artisan monica:update --force $STD php artisan monica:update --force

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 community-scripts ORG
# Author: tteck (tteckster) # Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://ntfy.sh/ # Source: https://ntfy.sh/
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}" var_disk="${var_disk:-2}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -23,13 +23,31 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /var ]]; then if [[ ! -d /etc/ntfy ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
if [ -f /etc/apt/keyrings/archive.heckel.io.gpg ]; then
msg_info "Correcting old Ntfy Repository"
rm -f /etc/apt/keyrings/archive.heckel.io.gpg
rm -f /etc/apt/sources.list.d/archive.heckel.io.list
rm -f /etc/apt/sources.list.d/archive.heckel.io.list.bak
rm -f /etc/apt/sources.list.d/archive.heckel.io.sources
curl -fsSL -o /etc/apt/keyrings/ntfy.gpg https://archive.ntfy.sh/apt/keyring.gpg
cat <<'EOF' >/etc/apt/sources.list.d/ntfy.sources
Types: deb
URIs: https://archive.ntfy.sh/apt/
Suites: stable
Components: main
Signed-By: /etc/apt/keyrings/ntfy.gpg
EOF
msg_ok "Corrected old Ntfy Repository"
fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
$STD apt-get update $STD apt update
$STD apt-get -y upgrade $STD apt -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@@ -28,6 +28,13 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit 1
fi fi
if ! [[ $(dpkg -s python3-lxml-html-clean 2>/dev/null) ]]; then
$STD apt-get install python-lxml
curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/universe/l/lxml-html-clean/python3-lxml-html-clean_0.1.1-1_all.deb" -o /opt/python3-lxml-html-clean.deb
$STD dpkg -i /opt/python3-lxml-html-clean.deb
rm -f /opt/python3-lxml-html-clean.deb
fi
RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1) RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1)
LATEST_VERSION=$(curl -fsSL "https://nightly.odoo.com/${RELEASE}/nightly/deb/" | LATEST_VERSION=$(curl -fsSL "https://nightly.odoo.com/${RELEASE}/nightly/deb/" |
grep -oP "odoo_${RELEASE}\.\d+_all\.deb" | grep -oP "odoo_${RELEASE}\.\d+_all\.deb" |

View File

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

View File

@@ -28,6 +28,8 @@ function update_script() {
exit exit
fi fi
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
if check_for_gh_release "outline" "outline/outline"; then if check_for_gh_release "outline" "outline/outline"; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop outline systemctl stop outline
@@ -37,7 +39,7 @@ function update_script() {
cp /opt/outline/.env /opt cp /opt/outline/.env /opt
msg_ok "Backup created" msg_ok "Backup created"
fetch_and_deploy_gh_release "outline" "outline/outline" "tarball" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "outline" "outline/outline" "tarball"
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
cd /opt/outline cd /opt/outline

View File

@@ -42,7 +42,7 @@ function update_script() {
mv /opt/tandoor /opt/tandoor.bak mv /opt/tandoor /opt/tandoor.bak
msg_ok "Backup Created" msg_ok "Backup Created"
NODE_VERSION="20" NODE_MODULE="yarn" setup_nodejs NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
PYTHON_VERSION="3.13" setup_uv PYTHON_VERSION="3.13" setup_uv
fetch_and_deploy_gh_release "tandoor" "TandoorRecipes/recipes" "tarball" "latest" "/opt/tandoor" fetch_and_deploy_gh_release "tandoor" "TandoorRecipes/recipes" "tarball" "latest" "/opt/tandoor"

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}" var_ram="${var_ram:-4096}"
var_disk="${var_disk:-6}" var_disk="${var_disk:-6}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -33,22 +33,23 @@ function update_script() {
systemctl stop tracktor systemctl stop tracktor
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Creating Backup" msg_info "Correcting Services"
cp /opt/tracktor/app/backend/.env /opt/tracktor.env if [ -f /opt/tracktor/app/backend/.env ]; then
msg_ok "Created Backup" mv /opt/tracktor/app/backend/.env /opt/tracktor.env
echo 'AUTH_PIN=123456' >> /opt/tracktor.env
sed -i 's|^EnvironmentFile=.*|EnvironmentFile=/opt/tracktor.env|' /etc/systemd/system/tracktor.service
systemctl daemon-reload
fi
msg_ok "Corrected Services"
setup_nodejs setup_nodejs
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
msg_info "Updating ${APP}" msg_info "Updating tracktor"
cd /opt/tracktor cd /opt/tracktor
$STD npm install $STD npm install
$STD npm run build $STD npm run build
msg_ok "Updated $APP" msg_ok "Updated tracktor"
msg_info "Restoring Backup"
cp /opt/tracktor.env /opt/tracktor/app/backend/.env
msg_ok "Restored Backup"
msg_info "Starting Service" msg_info "Starting Service"
systemctl start tracktor systemctl start tracktor

53
ct/upsnap.sh Normal file
View File

@@ -0,0 +1,53 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/seriousm4x/UpSnap
APP="UpSnap"
var_tags="${var_tags:-network}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/upsnap ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "upsnap" "seriousm4x/UpSnap"; then
msg_info "Stopping Services"
systemctl stop upsnap
msg_ok "Stopped Services"
fetch_and_deploy_gh_release "upsnap" "seriousm4x/UpSnap" "prebuild" "latest" "/opt/upsnap" "UpSnap_*_linux_amd64.zip"
msg_info "Starting Services"
systemctl start upsnap
msg_ok "Started Services"
msg_ok "Updated Successfully"
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}:8090${CL}"

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}" var_ram="${var_ram:-4096}"
var_disk="${var_disk:-6}" var_disk="${var_disk:-6}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -23,37 +23,72 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f /etc/zabbix/zabbix_server.conf ]]; then if [[ ! -f /etc/zabbix/zabbix_server.conf ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Stopping ${APP} Services"
systemctl stop zabbix-server zabbix-agent2
msg_ok "Stopped ${APP} Services"
msg_info "Updating $APP LXC" . /etc/os-release
if [ "$VERSION_CODENAME" != "trixie" ]; then
msg_error "Unsupported Debian version: $VERSION_CODENAME please upgrade to Debian 13 (Trixie) before updating Zabbix."
exit 1
fi
if systemctl list-unit-files | grep -q zabbix-agent2.service; then
AGENT_SERVICE="zabbix-agent2"
else
AGENT_SERVICE="zabbix-agent"
fi
msg_info "Stopping Services"
systemctl stop zabbix-server $AGENT_SERVICE
msg_ok "Stopped Services"
msg_info "Updating Zabbix"
mkdir -p /opt/zabbix-backup/ mkdir -p /opt/zabbix-backup/
cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/ cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/
cp /etc/apache2/conf-enabled/zabbix.conf /opt/zabbix-backup/ cp /etc/apache2/conf-enabled/zabbix.conf /opt/zabbix-backup/
cp -R /usr/share/zabbix/ /opt/zabbix-backup/ cp -R /usr/share/zabbix/ /opt/zabbix-backup/
#cp -R /usr/share/zabbix-* /opt/zabbix-backup/ Remove temporary
rm -Rf /etc/apt/sources.list.d/zabbix.list rm -Rf /etc/apt/sources.list.d/zabbix.list
cd /tmp cd /tmp
curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ | curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ |
grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 | grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 |
xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")" \ xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian13_all.deb")" \
-o /tmp/zabbix-release_latest+debian12_all.deb -o /tmp/zabbix-release_latest+debian13_all.deb
$STD dpkg -i zabbix-release_latest+debian12_all.deb $STD dpkg -i zabbix-release_latest+debian13_all.deb
$STD apt-get update $STD apt update
$STD apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-*
msg_info "Starting ${APP} Services" $STD apt install --only-upgrade zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql
systemctl start zabbix-server zabbix-agent2
if [ "$AGENT_SERVICE" = "zabbix-agent2" ]; then
$STD apt install --only-upgrade zabbix-agent2 zabbix-agent2-plugin-postgresql
if [ -f /etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf ]; then
sed -i 's|^Plugins.NVIDIA.System.Path=.*|# Plugins.NVIDIA.System.Path=/usr/libexec/zabbix/zabbix-agent2-plugin-nvidia-gpu|' \
/etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf
fi
else
$STD apt install --only-upgrade zabbix-agent
fi
if command -v fping >/dev/null 2>&1; then
FPING_PATH=$(command -v fping)
sed -i "s|^#\?FpingLocation=.*|FpingLocation=$FPING_PATH|" /etc/zabbix/zabbix_server.conf
fi
if command -v fping6 >/dev/null 2>&1; then
FPING6_PATH=$(command -v fping6)
sed -i "s|^#\?Fping6Location=.*|Fping6Location=$FPING6_PATH|" /etc/zabbix/zabbix_server.conf
fi
msg_ok "Updated Zabbix"
msg_info "Starting Services"
systemctl start zabbix-server $AGENT_SERVICE
systemctl restart apache2 systemctl restart apache2
msg_ok "Started ${APP} Services" msg_ok "Started Services"
msg_info "Cleaning Up" msg_info "Cleaning Up"
rm -rf /tmp/zabbix-release_latest+debian12_all.deb rm -rf /tmp/zabbix-release_latest+debian13_all.deb
msg_ok "Cleaned" msg_ok "Cleaned"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit

View File

@@ -20,7 +20,7 @@
"script": "ct/booklore.sh", "script": "ct/booklore.sh",
"resources": { "resources": {
"cpu": 3, "cpu": 3,
"ram": 2048, "ram": 3072,
"hdd": 7, "hdd": 7,
"os": "debian", "os": "debian",
"version": "12" "version": "12"

View File

@@ -32,5 +32,10 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [
{
"type": "info",
"text": "The file `/etc/sysconfig/CosmosCloud` is optional. If you need custom settings, you can create it yourself."
}
]
} }

View File

@@ -13,7 +13,7 @@
"website": null, "website": null,
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp",
"config_path": "", "config_path": "",
"description": "This script will add/remove a crontab schedule that updates all LXCs every Sunday at midnight.", "description": "This script will add/remove a crontab schedule that updates the operating system of all LXCs every Sunday at midnight.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",

View File

@@ -39,6 +39,10 @@
{ {
"type": "info", "type": "info",
"text": "Synapse-Admin is running on port 5173" "text": "Synapse-Admin is running on port 5173"
},
{
"type": "info",
"text": "For bridges Installation methods (WhatsApp, Signal, Discord, etc.), see: ´https://docs.mau.fi/bridges/go/setup.html´"
} }
] ]
} }

View File

@@ -0,0 +1,40 @@
{
"name": "GoAway",
"slug": "goaway",
"categories": [
5
],
"date_created": "2025-09-25",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://github.com/pommee/goaway#configuration-file",
"config_path": "/opt/goaway/config/settings.yaml",
"website": "https://github.com/pommee/goaway",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/goaway.webp",
"description": "Lightweight DNS sinkhole written in Go with a modern dashboard client. Very good looking new alternative to Pi-Hole and Adguard Home.",
"install_methods": [
{
"type": "default",
"script": "ct/goaway.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 4,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Type `cat ~/goaway.creds` to see login credentials.",
"type": "info"
}
]
}

View File

@@ -0,0 +1,40 @@
{
"name": "Joplin Server",
"slug": "joplin-server",
"categories": [
12
],
"date_created": "2025-09-24",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 22300,
"documentation": "https://joplinapp.org/help/",
"config_path": "/opt/joplin-server/.env",
"website": "https://joplinapp.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/joplin.webp",
"description": "Joplin - the privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and iOS.",
"install_methods": [
{
"type": "default",
"script": "ct/joplin-server.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 20,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "admin@localhost",
"password": "admin"
},
"notes": [
{
"text": "Application can take some time to build, depending on your host speed. Please be patient.",
"type": "info"
}
]
}

View File

@@ -23,7 +23,7 @@
"ram": 2048, "ram": 2048,
"hdd": 4, "hdd": 4,
"os": "Debian", "os": "Debian",
"version": "12" "version": "13"
} }
} }
], ],

View File

@@ -1,5 +1,5 @@
{ {
"name": "Container LXC Deletion", "name": "PVE LXC Deletion",
"slug": "lxc-delete", "slug": "lxc-delete",
"categories": [ "categories": [
1 1

View File

@@ -1,31 +1,186 @@
{ {
"categories": [ "categories": [
{ "name": "Proxmox & Virtualization", "id": 1, "sort_order": 1.0, "description": "Tools and scripts to manage Proxmox VE and virtualization platforms effectively." }, {
{ "name": "Operating Systems", "id": 2, "sort_order": 2.0, "description": "Scripts for deploying and managing various operating systems." }, "name": "Proxmox & Virtualization",
{ "name": "Containers & Docker", "id": 3, "sort_order": 3.0, "description": "Solutions for containerization using Docker and related technologies." }, "id": 1,
{ "name": "Network & Firewall", "id": 4, "sort_order": 4.0, "description": "Enhance network security and configure firewalls with ease." }, "sort_order": 1.0,
{ "name": "Adblock & DNS", "id": 5, "sort_order": 5.0, "description": "Optimize your network with DNS and ad-blocking solutions." }, "description": "Tools and scripts to manage Proxmox VE and virtualization platforms effectively.",
{ "name": "Authentication & Security", "id": 6, "sort_order": 6.0, "description": "Secure your infrastructure with authentication and security tools." }, "icon": "server"
{ "name": "Backup & Recovery", "id": 7, "sort_order": 7.0, "description": "Reliable backup and recovery scripts to protect your data." }, },
{ "name": "Databases", "id": 8, "sort_order": 8.0, "description": "Deploy and manage robust database systems with ease." }, {
{ "name": "Monitoring & Analytics", "id": 9, "sort_order": 9.0, "description": "Monitor system performance and analyze data seamlessly." }, "name": "Operating Systems",
{ "name": "Dashboards & Frontends", "id": 10, "sort_order": 10.0, "description": "Create interactive dashboards and user-friendly frontends." }, "id": 2,
{ "name": "Files & Downloads", "id": 11, "sort_order": 11.0, "description": "Manage file sharing and downloading solutions efficiently." }, "sort_order": 2.0,
{ "name": "Documents & Notes", "id": 12, "sort_order": 12.0, "description": "Organize and manage documents and note-taking tools." }, "description": "Scripts for deploying and managing various operating systems.",
{ "name": "Media & Streaming", "id": 13, "sort_order": 13.0, "description": "Stream and manage media effortlessly across devices." }, "icon": "monitor"
{ "name": "*Arr Suite", "id": 14, "sort_order": 14.0, "description": "Automated media management with the popular *Arr suite tools." }, },
{ "name": "NVR & Cameras", "id": 15, "sort_order": 15.0, "description": "Manage network video recorders and camera setups." }, {
{ "name": "IoT & Smart Home", "id": 16, "sort_order": 16.0, "description": "Control and automate IoT devices and smart home systems." }, "name": "Containers & Docker",
{ "name": "ZigBee, Z-Wave & Matter", "id": 17, "sort_order": 17.0, "description": "Solutions for ZigBee, Z-Wave, and Matter-based device management." }, "id": 3,
{ "name": "MQTT & Messaging", "id": 18, "sort_order": 18.0, "description": "Set up reliable messaging and MQTT-based communication systems." }, "sort_order": 3.0,
{ "name": "Automation & Scheduling", "id": 19, "sort_order": 19.0, "description": "Automate tasks and manage scheduling with powerful tools." }, "description": "Solutions for containerization using Docker and related technologies.",
{ "name": "AI / Coding & Dev-Tools", "id": 20, "sort_order": 20.0, "description": "Leverage AI and developer tools for smarter coding workflows." }, "icon": "box"
{ "name": "Webservers & Proxies", "id": 21, "sort_order": 21.0, "description": "Deploy and configure web servers and proxy solutions." }, },
{ "name": "Bots & ChatOps", "id": 22, "sort_order": 22.0, "description": "Enhance collaboration with bots and ChatOps integrations." }, {
{ "name": "Finance & Budgeting", "id": 23, "sort_order": 23.0, "description": "Track expenses and manage budgets efficiently." }, "name": "Network & Firewall",
{ "name": "Gaming & Leisure", "id": 24, "sort_order": 24.0, "description": "Scripts for gaming servers and leisure-related tools." }, "id": 4,
{ "name": "Business & ERP", "id": 25, "sort_order": 25.0, "description": "Streamline business operations with ERP and management tools." }, "sort_order": 4.0,
{ "name": "Miscellaneous", "id": 0, "sort_order": 99.0, "description": "General scripts and tools that don't fit into other categories." } "description": "Enhance network security and configure firewalls with ease.",
"icon": "shield"
},
{
"name": "Adblock & DNS",
"id": 5,
"sort_order": 5.0,
"description": "Optimize your network with DNS and ad-blocking solutions.",
"icon": "ban"
},
{
"name": "Authentication & Security",
"id": 6,
"sort_order": 6.0,
"description": "Secure your infrastructure with authentication and security tools.",
"icon": "lock"
},
{
"name": "Backup & Recovery",
"id": 7,
"sort_order": 7.0,
"description": "Reliable backup and recovery scripts to protect your data.",
"icon": "archive"
},
{
"name": "Databases",
"id": 8,
"sort_order": 8.0,
"description": "Deploy and manage robust database systems with ease.",
"icon": "database"
},
{
"name": "Monitoring & Analytics",
"id": 9,
"sort_order": 9.0,
"description": "Monitor system performance and analyze data seamlessly.",
"icon": "bar-chart"
},
{
"name": "Dashboards & Frontends",
"id": 10,
"sort_order": 10.0,
"description": "Create interactive dashboards and user-friendly frontends.",
"icon": "layout"
},
{
"name": "Files & Downloads",
"id": 11,
"sort_order": 11.0,
"description": "Manage file sharing and downloading solutions efficiently.",
"icon": "download"
},
{
"name": "Documents & Notes",
"id": 12,
"sort_order": 12.0,
"description": "Organize and manage documents and note-taking tools.",
"icon": "file-text"
},
{
"name": "Media & Streaming",
"id": 13,
"sort_order": 13.0,
"description": "Stream and manage media effortlessly across devices.",
"icon": "play"
},
{
"name": "*Arr Suite",
"id": 14,
"sort_order": 14.0,
"description": "Automated media management with the popular *Arr suite tools.",
"icon": "tv"
},
{
"name": "NVR & Cameras",
"id": 15,
"sort_order": 15.0,
"description": "Manage network video recorders and camera setups.",
"icon": "camera"
},
{
"name": "IoT & Smart Home",
"id": 16,
"sort_order": 16.0,
"description": "Control and automate IoT devices and smart home systems.",
"icon": "home"
},
{
"name": "ZigBee, Z-Wave & Matter",
"id": 17,
"sort_order": 17.0,
"description": "Solutions for ZigBee, Z-Wave, and Matter-based device management.",
"icon": "radio"
},
{
"name": "MQTT & Messaging",
"id": 18,
"sort_order": 18.0,
"description": "Set up reliable messaging and MQTT-based communication systems.",
"icon": "message-circle"
},
{
"name": "Automation & Scheduling",
"id": 19,
"sort_order": 19.0,
"description": "Automate tasks and manage scheduling with powerful tools.",
"icon": "clock"
},
{
"name": "AI / Coding & Dev-Tools",
"id": 20,
"sort_order": 20.0,
"description": "Leverage AI and developer tools for smarter coding workflows.",
"icon": "code"
},
{
"name": "Webservers & Proxies",
"id": 21,
"sort_order": 21.0,
"description": "Deploy and configure web servers and proxy solutions.",
"icon": "globe"
},
{
"name": "Bots & ChatOps",
"id": 22,
"sort_order": 22.0,
"description": "Enhance collaboration with bots and ChatOps integrations.",
"icon": "bot"
},
{
"name": "Finance & Budgeting",
"id": 23,
"sort_order": 23.0,
"description": "Track expenses and manage budgets efficiently.",
"icon": "dollar-sign"
},
{
"name": "Gaming & Leisure",
"id": 24,
"sort_order": 24.0,
"description": "Scripts for gaming servers and leisure-related tools.",
"icon": "gamepad-2"
},
{
"name": "Business & ERP",
"id": 25,
"sort_order": 25.0,
"description": "Streamline business operations with ERP and management tools.",
"icon": "building"
},
{
"name": "Miscellaneous",
"id": 0,
"sort_order": 99.0,
"description": "General scripts and tools that don't fit into other categories.",
"icon": "more-horizontal"
}
] ]
} }

View File

@@ -23,7 +23,7 @@
"ram": 512, "ram": 512,
"hdd": 2, "hdd": 2,
"os": "debian", "os": "debian",
"version": "12" "version": "13"
} }
} }
], ],

View File

@@ -31,5 +31,10 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [
{
"text": "Script contains optional installation of Ollama.",
"type": "info"
}
]
} }

View File

@@ -10,7 +10,7 @@
"privileged": false, "privileged": false,
"interface_port": 3000, "interface_port": 3000,
"documentation": "https://tracktor.bytedge.in/introduction.html", "documentation": "https://tracktor.bytedge.in/introduction.html",
"config_path": "/opt/tracktor/app/server/.env", "config_path": "/opt/tracktor.env",
"website": "https://tracktor.bytedge.in/", "website": "https://tracktor.bytedge.in/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tracktor.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tracktor.webp",
"description": "Tracktor is an open-source web application for comprehensive vehicle management.\nEasily track fuel consumption, maintenance, insurance, and regulatory documents for all your vehicles in one place.", "description": "Tracktor is an open-source web application for comprehensive vehicle management.\nEasily track fuel consumption, maintenance, insurance, and regulatory documents for all your vehicles in one place.",
@@ -23,17 +23,17 @@
"ram": 1024, "ram": 1024,
"hdd": 6, "hdd": 6,
"os": "Debian", "os": "Debian",
"version": "12" "version": "13"
} }
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": null,
"password": null "password": "123456"
}, },
"notes": [ "notes": [
{ {
"text": "Please check and update the '/opt/tracktor/app/backend/.env' file if using behind reverse proxy.", "text": "Please check and update the '/opt/tracktor.env' file if using behind reverse proxy.",
"type": "info" "type": "info"
} }
] ]

View File

@@ -13,7 +13,7 @@
"website": null, "website": null,
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/linuxcontainers.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/linuxcontainers.webp",
"config_path": "", "config_path": "",
"description": "This script has been created to simplify and speed up the process of updating all LXC containers across various Linux distributions, such as Ubuntu, Debian, Devuan, Alpine Linux, CentOS-Rocky-Alma, Fedora, and ArchLinux. It's designed to automatically skip templates and specific containers during the update, enhancing its convenience and usability.", "description": "This script has been created to simplify and speed up the process of updating the operating system running inside LXC containers across various Linux distributions, such as Ubuntu, Debian, Devuan, Alpine Linux, CentOS-Rocky-Alma, Fedora, and ArchLinux. It's designed to automatically skip templates and specific containers during the update, enhancing its convenience and usability.",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",
@@ -35,6 +35,10 @@
{ {
"text": "Execute within the Proxmox shell", "text": "Execute within the Proxmox shell",
"type": "info" "type": "info"
},
{
"text": "The script updates only the operating system of the LXC container. It DOES NOT update the application installed within the container!",
"type": "warning"
} }
] ]
} }

View File

@@ -0,0 +1,40 @@
{
"name": "UpSnap",
"slug": "upsnap",
"categories": [
4
],
"date_created": "2025-09-23",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8090,
"documentation": "https://github.com/seriousm4x/UpSnap/wiki",
"config_path": "",
"website": "https://github.com/seriousm4x/UpSnap",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/upsnap.webp",
"description": "UpSnap is a self-hosted web app that lets you wake up, manage and monitor devices on your network with ease. Built with SvelteKit, Go and PocketBase, it offers a clean dashboard, scheduled wake-ups, device discovery and secure user management.",
"install_methods": [
{
"type": "default",
"script": "ct/upsnap.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "The first user you register will be the admin user.",
"type": "info"
}
]
}

View File

@@ -1,44 +1,364 @@
[ [
{ {
"name": "henrygd/beszel", "name": "wizarrrr/wizarr",
"version": "v0.12.10", "version": "v2025.9.6",
"date": "2025-09-22T22:40:43Z" "date": "2025-09-26T22:38:58Z"
}, },
{ {
"name": "immich-app/immich", "name": "coder/code-server",
"version": "v1.143.0", "version": "v4.104.2",
"date": "2025-09-22T19:57:20Z" "date": "2025-09-26T22:34:32Z"
}, },
{ {
"name": "gtsteffaniak/filebrowser", "name": "runtipi/runtipi",
"version": "v0.8.7-beta", "version": "nightly",
"date": "2025-09-22T18:24:54Z" "date": "2025-09-21T18:15:06Z"
},
{
"name": "home-assistant/core",
"version": "2025.9.4",
"date": "2025-09-19T21:09:39Z"
},
{
"name": "evcc-io/evcc",
"version": "0.208.0",
"date": "2025-09-26T21:26:14Z"
},
{
"name": "Ombi-app/Ombi",
"version": "v4.47.1",
"date": "2025-01-05T21:14:23Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.0",
"date": "2025-09-13T16:38:21Z"
},
{
"name": "bastienwirtz/homer",
"version": "v25.09.1",
"date": "2025-09-26T19:22:16Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.39.0",
"date": "2025-09-26T19:15:10Z"
},
{
"name": "influxdata/influxdb",
"version": "v3.5.0-1.rc.1",
"date": "2025-09-26T18:34:22Z"
},
{
"name": "javedh-dev/tracktor",
"version": "0.3.16",
"date": "2025-09-26T16:33:48Z"
},
{
"name": "theonedev/onedev",
"version": "v13.0.3",
"date": "2025-09-26T13:53:41Z"
}, },
{ {
"name": "bunkerity/bunkerweb", "name": "bunkerity/bunkerweb",
"version": "v1.6.4", "version": "v1.6.4",
"date": "2025-08-18T20:22:07Z" "date": "2025-08-18T20:22:07Z"
}, },
{
"name": "n8n-io/n8n",
"version": "n8n@1.112.6",
"date": "2025-09-26T10:56:27Z"
},
{
"name": "silverbulletmd/silverbullet",
"version": "2.1.4",
"date": "2025-09-26T10:20:10Z"
},
{
"name": "traefik/traefik",
"version": "v3.5.3",
"date": "2025-09-26T09:31:01Z"
},
{
"name": "wazuh/wazuh",
"version": "v4.13.1",
"date": "2025-09-25T15:43:49Z"
},
{
"name": "jupyter/notebook",
"version": "v7.4.6",
"date": "2025-09-26T06:40:06Z"
},
{
"name": "emqx/emqx",
"version": "e6.0.0-beta.1",
"date": "2025-09-26T06:28:11Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.23.69",
"date": "2025-09-26T05:55:57Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.3",
"date": "2025-09-01T09:47:06Z"
},
{
"name": "ollama/ollama",
"version": "v0.12.2",
"date": "2025-09-24T21:19:20Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-09-26T00:27:15Z"
},
{ {
"name": "steveiliop56/tinyauth", "name": "steveiliop56/tinyauth",
"version": "v3.6.2", "version": "v3.6.2",
"date": "2025-07-17T12:08:03Z" "date": "2025-07-17T12:08:03Z"
}, },
{
"name": "documenso/documenso",
"version": "v1.12.7",
"date": "2025-09-25T23:57:34Z"
},
{
"name": "henrygd/beszel",
"version": "v0.12.12",
"date": "2025-09-25T23:46:01Z"
},
{
"name": "booklore-app/booklore",
"version": "v1.3.4",
"date": "2025-09-25T21:19:48Z"
},
{
"name": "open-webui/open-webui",
"version": "v0.6.31",
"date": "2025-09-25T20:28:17Z"
},
{
"name": "go-gitea/gitea",
"version": "v1.26.0-dev",
"date": "2025-09-24T16:45:38Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.7.0",
"date": "2025-09-01T10:10:34Z"
},
{
"name": "TandoorRecipes/recipes",
"version": "2.2.7",
"date": "2025-09-25T19:04:38Z"
},
{
"name": "kyantech/Palmr",
"version": "v3.2.2-beta",
"date": "2025-09-25T18:44:52Z"
},
{
"name": "keycloak/keycloak",
"version": "26.3.5",
"date": "2025-09-25T06:23:28Z"
},
{
"name": "pommee/goaway",
"version": "v0.62.2",
"date": "2025-09-25T17:21:23Z"
},
{
"name": "Threadfin/Threadfin",
"version": "1.2.39",
"date": "2025-09-25T15:57:02Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.88.3",
"date": "2025-09-25T15:49:37Z"
},
{
"name": "duplicati/duplicati",
"version": "v2.1.1.103-2.1.1.103_canary_2025-09-25",
"date": "2025-09-25T15:17:46Z"
},
{
"name": "linkwarden/linkwarden",
"version": "v2.13.0",
"date": "2025-09-25T15:19:02Z"
},
{
"name": "SigNoz/signoz",
"version": "v0.96.1",
"date": "2025-09-25T15:18:19Z"
},
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2025-09-25T14:32:13Z"
},
{
"name": "bluenviron/mediamtx",
"version": "v1.15.1",
"date": "2025-09-25T13:35:14Z"
},
{
"name": "forgejo/forgejo",
"version": "v14.0.0-dev",
"date": "2025-09-25T13:19:45Z"
},
{
"name": "laurent22/joplin",
"version": "server-v3.4.4",
"date": "2025-09-25T13:19:26Z"
},
{
"name": "element-hq/synapse",
"version": "v1.138.2",
"date": "2025-09-24T12:45:13Z"
},
{
"name": "Cleanuparr/Cleanuparr",
"version": "v2.3.2",
"date": "2025-09-25T09:34:35Z"
},
{
"name": "rabbitmq/rabbitmq-server",
"version": "v4.1.4",
"date": "2025-09-02T14:26:24Z"
},
{
"name": "jellyfin/jellyfin",
"version": "v10.10.7",
"date": "2025-04-05T19:14:59Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{
"name": "mongodb/mongo",
"version": "r8.2.1-rc1",
"date": "2025-09-24T19:54:34Z"
},
{
"name": "gelbphoenix/autocaliweb",
"version": "v0.10.2",
"date": "2025-09-24T18:23:36Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.77.4-nightly",
"date": "2025-09-24T18:23:13Z"
},
{ {
"name": "msgbyte/tianji", "name": "msgbyte/tianji",
"version": "v1.26.1", "version": "v1.26.3",
"date": "2025-09-22T16:46:29Z" "date": "2025-09-24T17:37:55Z"
},
{
"name": "rclone/rclone",
"version": "v1.71.1",
"date": "2025-09-24T16:32:16Z"
},
{
"name": "alexta69/metube",
"version": "2025.09.24",
"date": "2025-09-24T13:51:23Z"
},
{
"name": "AlexxIT/go2rtc",
"version": "v1.9.10",
"date": "2025-09-24T13:49:53Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-typescript@4.0.9",
"date": "2025-09-24T12:52:59Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v11.3.1",
"date": "2025-09-24T11:58:00Z"
},
{
"name": "syncthing/syncthing",
"version": "v2.0.10",
"date": "2025-09-24T08:33:37Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v0.22.5",
"date": "2025-09-24T00:01:40Z"
},
{
"name": "grafana/grafana",
"version": "v12.2.0",
"date": "2025-09-23T23:47:02Z"
},
{
"name": "9001/copyparty",
"version": "v1.19.14",
"date": "2025-09-23T22:57:50Z"
},
{
"name": "HabitRPG/habitica",
"version": "v5.41.3",
"date": "2025-09-23T22:21:04Z"
},
{
"name": "Part-DB/Part-DB-server",
"version": "v2.2.0",
"date": "2025-09-23T21:46:21Z"
},
{
"name": "immich-app/immich",
"version": "v1.143.1",
"date": "2025-09-23T19:00:49Z"
},
{
"name": "getumbrel/umbrel",
"version": "1.4.2",
"date": "2025-05-09T08:54:49Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.529",
"date": "2025-09-23T14:40:20Z"
},
{
"name": "zabbix/zabbix",
"version": "7.4.3rc1",
"date": "2025-09-23T13:54:56Z"
},
{
"name": "chrisvel/tududi",
"version": "v0.82-rc5",
"date": "2025-09-23T07:31:12Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3",
"date": "2025-09-20T12:12:33Z"
},
{
"name": "postgres/postgres",
"version": "REL_18_0",
"date": "2025-09-22T20:11:33Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v0.8.7-beta",
"date": "2025-09-22T18:24:54Z"
}, },
{ {
"name": "gethomepage/homepage", "name": "gethomepage/homepage",
"version": "v1.5.0", "version": "v1.5.0",
"date": "2025-09-22T15:28:49Z" "date": "2025-09-22T15:28:49Z"
}, },
{
"name": "n8n-io/n8n",
"version": "n8n@1.111.1",
"date": "2025-09-19T09:26:05Z"
},
{ {
"name": "cloudflare/cloudflared", "name": "cloudflare/cloudflared",
"version": "2025.9.1", "version": "2025.9.1",
@@ -49,11 +369,6 @@
"version": "4.5.3", "version": "4.5.3",
"date": "2025-08-25T13:59:56Z" "date": "2025-08-25T13:59:56Z"
}, },
{
"name": "nzbgetcom/nzbget",
"version": "v25.3",
"date": "2025-09-01T09:47:06Z"
},
{ {
"name": "Graylog2/graylog2-server", "name": "Graylog2/graylog2-server",
"version": "7.0.0-beta.1", "version": "7.0.0-beta.1",
@@ -69,46 +384,16 @@
"version": "v3.6.0", "version": "v3.6.0",
"date": "2025-09-22T08:24:59Z" "date": "2025-09-22T08:24:59Z"
}, },
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.23.52",
"date": "2025-09-22T05:54:10Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.0",
"date": "2025-09-13T16:38:21Z"
},
{ {
"name": "Athou/commafeed", "name": "Athou/commafeed",
"version": "5.11.1", "version": "5.11.1",
"date": "2025-09-22T02:21:27Z" "date": "2025-09-22T02:21:27Z"
}, },
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-09-22T00:27:08Z"
},
{ {
"name": "TwiN/gatus", "name": "TwiN/gatus",
"version": "v5.24.3", "version": "v5.24.3",
"date": "2025-09-22T00:04:38Z" "date": "2025-09-22T00:04:38Z"
}, },
{
"name": "ollama/ollama",
"version": "v0.12.0-rc1",
"date": "2025-09-18T23:11:08Z"
},
{
"name": "9001/copyparty",
"version": "v1.19.12",
"date": "2025-09-21T22:39:26Z"
},
{ {
"name": "Radarr/Radarr", "name": "Radarr/Radarr",
"version": "v5.27.5.10198", "version": "v5.27.5.10198",
@@ -124,21 +409,6 @@
"version": "v2.13.3.4711", "version": "v2.13.3.4711",
"date": "2025-08-28T20:06:24Z" "date": "2025-08-28T20:06:24Z"
}, },
{
"name": "runtipi/runtipi",
"version": "nightly",
"date": "2025-09-21T18:15:06Z"
},
{
"name": "Ombi-app/Ombi",
"version": "v4.47.1",
"date": "2025-01-05T21:14:23Z"
},
{
"name": "wizarrrr/wizarr",
"version": "v2025.9.5",
"date": "2025-09-21T13:26:53Z"
},
{ {
"name": "openhab/openhab-core", "name": "openhab/openhab-core",
"version": "5.1.0.M1", "version": "5.1.0.M1",
@@ -149,6 +419,11 @@
"version": "v2.7.3", "version": "v2.7.3",
"date": "2025-09-21T12:07:19Z" "date": "2025-09-21T12:07:19Z"
}, },
{
"name": "globaleaks/globaleaks-whistleblowing-software",
"version": "v5.0.83",
"date": "2025-09-21T07:40:35Z"
},
{ {
"name": "thomiceli/opengist", "name": "thomiceli/opengist",
"version": "v1.11.0", "version": "v1.11.0",
@@ -179,71 +454,21 @@
"version": "v6.10.0", "version": "v6.10.0",
"date": "2025-09-20T15:40:36Z" "date": "2025-09-20T15:40:36Z"
}, },
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3",
"date": "2025-09-20T12:12:33Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-openapi@9.3.11",
"date": "2025-09-20T09:52:40Z"
},
{
"name": "keycloak/keycloak",
"version": "26.2.9",
"date": "2025-09-17T15:11:25Z"
},
{
"name": "forgejo/forgejo",
"version": "v12.0.4",
"date": "2025-09-20T07:16:15Z"
},
{
"name": "theonedev/onedev",
"version": "v13.0.1",
"date": "2025-09-20T00:15:38Z"
},
{ {
"name": "inventree/InvenTree", "name": "inventree/InvenTree",
"version": "1.0.1", "version": "1.0.1",
"date": "2025-09-19T22:28:31Z" "date": "2025-09-19T22:28:31Z"
}, },
{ {
"name": "HabitRPG/habitica", "name": "mmastrac/stylus",
"version": "v5.41.2", "version": "v0.17.0",
"date": "2025-09-19T21:47:42Z" "date": "2025-09-19T22:23:28Z"
}, },
{ {
"name": "ipfs/kubo", "name": "ipfs/kubo",
"version": "v0.37.0", "version": "v0.37.0",
"date": "2025-08-27T20:03:52Z" "date": "2025-08-27T20:03:52Z"
}, },
{
"name": "home-assistant/core",
"version": "2025.9.4",
"date": "2025-09-19T21:09:39Z"
},
{
"name": "coder/code-server",
"version": "v4.104.1",
"date": "2025-09-19T19:36:44Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.38.0",
"date": "2025-09-19T19:14:55Z"
},
{
"name": "wazuh/wazuh",
"version": "v4.13.0",
"date": "2025-09-19T16:35:02Z"
},
{
"name": "TandoorRecipes/recipes",
"version": "2.2.3",
"date": "2025-09-19T15:02:57Z"
},
{ {
"name": "hargata/lubelog", "name": "hargata/lubelog",
"version": "v1.5.2", "version": "v1.5.2",
@@ -274,21 +499,21 @@
"version": "v0.23.2", "version": "v0.23.2",
"date": "2025-09-18T17:18:59Z" "date": "2025-09-18T17:18:59Z"
}, },
{
"name": "bluenviron/mediamtx",
"version": "v1.15.0",
"date": "2025-09-18T17:14:15Z"
},
{
"name": "emqx/emqx",
"version": "e5.10.1",
"date": "2025-09-18T16:43:47Z"
},
{ {
"name": "YunoHost/yunohost", "name": "YunoHost/yunohost",
"version": "debian/12.1.25", "version": "debian/12.1.25",
"date": "2025-09-18T15:40:25Z" "date": "2025-09-18T15:40:25Z"
}, },
{
"name": "neo4j/neo4j",
"version": "2025.09.0",
"date": "2025-09-18T15:07:01Z"
},
{
"name": "sassanix/Warracker",
"version": "0.10.1.12",
"date": "2025-09-18T14:24:55Z"
},
{ {
"name": "grokability/snipe-it", "name": "grokability/snipe-it",
"version": "v8.3.2", "version": "v8.3.2",
@@ -299,11 +524,6 @@
"version": "v4.2.2", "version": "v4.2.2",
"date": "2025-09-18T10:45:22Z" "date": "2025-09-18T10:45:22Z"
}, },
{
"name": "chrisvel/tududi",
"version": "v0.82-rc5",
"date": "2025-09-18T09:57:28Z"
},
{ {
"name": "NLnetLabs/unbound", "name": "NLnetLabs/unbound",
"version": "release-1.24.0", "version": "release-1.24.0",
@@ -324,16 +544,6 @@
"version": "2.1.0-test1", "version": "2.1.0-test1",
"date": "2025-09-17T18:21:45Z" "date": "2025-09-17T18:21:45Z"
}, },
{
"name": "open-webui/open-webui",
"version": "v0.6.30",
"date": "2025-09-17T17:25:37Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.88.2",
"date": "2025-09-17T17:25:12Z"
},
{ {
"name": "heiher/hev-socks5-server", "name": "heiher/hev-socks5-server",
"version": "2.10.0", "version": "2.10.0",
@@ -344,16 +554,6 @@
"version": "10.0.20", "version": "10.0.20",
"date": "2025-09-10T12:00:00Z" "date": "2025-09-10T12:00:00Z"
}, },
{
"name": "silverbulletmd/silverbullet",
"version": "2.0.0",
"date": "2025-08-29T13:38:35Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.528",
"date": "2025-09-17T13:09:51Z"
},
{ {
"name": "cockpit-project/cockpit", "name": "cockpit-project/cockpit",
"version": "347", "version": "347",
@@ -379,11 +579,6 @@
"version": "v4.3.0.1", "version": "v4.3.0.1",
"date": "2025-09-17T08:50:39Z" "date": "2025-09-17T08:50:39Z"
}, },
{
"name": "Cleanuparr/Cleanuparr",
"version": "v2.3.1",
"date": "2025-09-16T20:41:01Z"
},
{ {
"name": "webmin/webmin", "name": "webmin/webmin",
"version": "2.510", "version": "2.510",
@@ -394,11 +589,6 @@
"version": "v0.107.66", "version": "v0.107.66",
"date": "2025-09-15T13:39:52Z" "date": "2025-09-15T13:39:52Z"
}, },
{
"name": "booklore-app/booklore",
"version": "v1.3.2",
"date": "2025-09-16T16:04:50Z"
},
{ {
"name": "netbox-community/netbox", "name": "netbox-community/netbox",
"version": "v4.4.1", "version": "v4.4.1",
@@ -409,11 +599,6 @@
"version": "version/2025.8.3", "version": "version/2025.8.3",
"date": "2025-09-16T15:19:06Z" "date": "2025-09-16T15:19:06Z"
}, },
{
"name": "zwave-js/zwave-js-ui",
"version": "v11.3.0",
"date": "2025-09-16T13:53:44Z"
},
{ {
"name": "tobychui/zoraxy", "name": "tobychui/zoraxy",
"version": "v3.2.5r2", "version": "v3.2.5r2",
@@ -434,16 +619,16 @@
"version": "2.1.1", "version": "2.1.1",
"date": "2025-09-16T06:21:32Z" "date": "2025-09-16T06:21:32Z"
}, },
{
"name": "seriousm4x/UpSnap",
"version": "5.2.1",
"date": "2025-09-15T21:26:25Z"
},
{ {
"name": "Paymenter/Paymenter", "name": "Paymenter/Paymenter",
"version": "v1.3.4", "version": "v1.3.4",
"date": "2025-09-15T20:48:02Z" "date": "2025-09-15T20:48:02Z"
}, },
{
"name": "rabbitmq/rabbitmq-server",
"version": "v4.1.4",
"date": "2025-09-02T14:26:24Z"
},
{ {
"name": "Kozea/Radicale", "name": "Kozea/Radicale",
"version": "v3.5.6", "version": "v3.5.6",
@@ -489,11 +674,6 @@
"version": "v2.7.6", "version": "v2.7.6",
"date": "2025-09-15T15:50:44Z" "date": "2025-09-15T15:50:44Z"
}, },
{
"name": "mongodb/mongo",
"version": "r8.0.14",
"date": "2025-09-15T15:39:18Z"
},
{ {
"name": "usememos/memos", "name": "usememos/memos",
"version": "v0.25.1", "version": "v0.25.1",
@@ -504,11 +684,6 @@
"version": "pmm-6401-v1.126.0", "version": "pmm-6401-v1.126.0",
"date": "2025-09-15T11:32:31Z" "date": "2025-09-15T11:32:31Z"
}, },
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2025-09-15T11:12:14Z"
},
{ {
"name": "authelia/authelia", "name": "authelia/authelia",
"version": "v4.39.10", "version": "v4.39.10",
@@ -544,16 +719,6 @@
"version": "v0.8.1", "version": "v0.8.1",
"date": "2025-09-14T06:45:23Z" "date": "2025-09-14T06:45:23Z"
}, },
{
"name": "syncthing/syncthing",
"version": "v2.0.9",
"date": "2025-09-13T09:37:24Z"
},
{
"name": "documenso/documenso",
"version": "v1.12.4",
"date": "2025-09-13T08:08:55Z"
},
{ {
"name": "cloudreve/cloudreve", "name": "cloudreve/cloudreve",
"version": "4.8.0", "version": "4.8.0",
@@ -564,61 +729,31 @@
"version": "v1.0.0-rc0", "version": "v1.0.0-rc0",
"date": "2025-08-17T18:47:15Z" "date": "2025-08-17T18:47:15Z"
}, },
{
"name": "influxdata/influxdb",
"version": "v3.4.2",
"date": "2025-09-11T20:43:23Z"
},
{ {
"name": "zerotier/ZeroTierOne", "name": "zerotier/ZeroTierOne",
"version": "1.16.0", "version": "1.16.0",
"date": "2025-09-11T18:01:57Z" "date": "2025-09-11T18:01:57Z"
}, },
{
"name": "Threadfin/Threadfin",
"version": "1.2.37",
"date": "2025-09-11T16:13:41Z"
},
{ {
"name": "rcourtman/Pulse", "name": "rcourtman/Pulse",
"version": "v4.14.0", "version": "v4.14.0",
"date": "2025-09-05T18:28:28Z" "date": "2025-09-05T18:28:28Z"
}, },
{
"name": "go-gitea/gitea",
"version": "v1.24.6",
"date": "2025-09-11T04:20:27Z"
},
{ {
"name": "aceberg/WatchYourLAN", "name": "aceberg/WatchYourLAN",
"version": "2.1.4", "version": "2.1.4",
"date": "2025-09-10T12:08:09Z" "date": "2025-09-10T12:08:09Z"
}, },
{
"name": "kyantech/Palmr",
"version": "v3.2.1-beta",
"date": "2025-09-09T19:47:13Z"
},
{
"name": "Part-DB/Part-DB-server",
"version": "v2.1.2",
"date": "2025-09-09T19:34:11Z"
},
{
"name": "element-hq/synapse",
"version": "v1.138.0",
"date": "2025-09-09T11:25:50Z"
},
{
"name": "traefik/traefik",
"version": "v3.5.2",
"date": "2025-09-09T10:28:12Z"
},
{ {
"name": "OctoPrint/OctoPrint", "name": "OctoPrint/OctoPrint",
"version": "1.11.3", "version": "1.11.3",
"date": "2025-09-09T08:03:31Z" "date": "2025-09-09T08:03:31Z"
}, },
{
"name": "influxdata/telegraf",
"version": "v1.36.1",
"date": "2025-09-09T06:44:22Z"
},
{ {
"name": "gotson/komga", "name": "gotson/komga",
"version": "1.23.4", "version": "1.23.4",
@@ -644,11 +779,6 @@
"version": "16.2", "version": "16.2",
"date": "2025-09-08T14:03:25Z" "date": "2025-09-08T14:03:25Z"
}, },
{
"name": "evcc-io/evcc",
"version": "0.207.6",
"date": "2025-09-08T11:52:00Z"
},
{ {
"name": "autobrr/autobrr", "name": "autobrr/autobrr",
"version": "v1.66.1", "version": "v1.66.1",
@@ -729,20 +859,15 @@
"version": "2.1.1", "version": "2.1.1",
"date": "2025-06-14T17:45:06Z" "date": "2025-06-14T17:45:06Z"
}, },
{
"name": "neo4j/neo4j",
"version": "5.26.12",
"date": "2025-09-03T12:03:22Z"
},
{ {
"name": "apache/cassandra", "name": "apache/cassandra",
"version": "cassandra-4.1.10", "version": "cassandra-4.1.10",
"date": "2025-09-03T08:46:02Z" "date": "2025-09-03T08:46:02Z"
}, },
{ {
"name": "postgres/postgres", "name": "healthchecks/healthchecks",
"version": "REL_18_RC1", "version": "v3.11.2",
"date": "2025-09-01T20:03:08Z" "date": "2025-09-02T08:36:57Z"
}, },
{ {
"name": "project-zot/zot", "name": "project-zot/zot",
@@ -759,16 +884,6 @@
"version": "v0.11.0", "version": "v0.11.0",
"date": "2025-09-01T16:19:38Z" "date": "2025-09-01T16:19:38Z"
}, },
{
"name": "grafana/grafana",
"version": "rrc_steady_12.2.0-17245430286.patch1",
"date": "2025-09-01T14:19:14Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.7.0",
"date": "2025-09-01T10:10:34Z"
},
{ {
"name": "LibreTranslate/LibreTranslate", "name": "LibreTranslate/LibreTranslate",
"version": "v1.7.3", "version": "v1.7.3",
@@ -779,11 +894,6 @@
"version": "v2.1.0", "version": "v2.1.0",
"date": "2025-08-29T12:56:13Z" "date": "2025-08-29T12:56:13Z"
}, },
{
"name": "linkwarden/linkwarden",
"version": "v2.12.2",
"date": "2025-08-28T20:34:30Z"
},
{ {
"name": "benjaminjonard/koillection", "name": "benjaminjonard/koillection",
"version": "1.7.0", "version": "1.7.0",
@@ -809,11 +919,6 @@
"version": "v2.29.0", "version": "v2.29.0",
"date": "2025-08-25T22:43:20Z" "date": "2025-08-25T22:43:20Z"
}, },
{
"name": "zabbix/zabbix",
"version": "7.4.2",
"date": "2025-08-25T12:38:14Z"
},
{ {
"name": "plexguide/Huntarr.io", "name": "plexguide/Huntarr.io",
"version": "8.2.10", "version": "8.2.10",
@@ -829,26 +934,21 @@
"version": "v0.21.0", "version": "v0.21.0",
"date": "2025-08-23T18:33:53Z" "date": "2025-08-23T18:33:53Z"
}, },
{
"name": "maxdorninger/MediaManager",
"version": "1.8.0",
"date": "2025-08-23T16:22:30Z"
},
{ {
"name": "caddyserver/caddy", "name": "caddyserver/caddy",
"version": "v2.10.2", "version": "v2.10.2",
"date": "2025-08-23T03:10:31Z" "date": "2025-08-23T03:10:31Z"
}, },
{
"name": "rclone/rclone",
"version": "v1.71.0",
"date": "2025-08-22T16:41:23Z"
},
{ {
"name": "lazy-media/Reactive-Resume", "name": "lazy-media/Reactive-Resume",
"version": "v1.2.4", "version": "v1.2.4",
"date": "2025-08-22T07:40:01Z" "date": "2025-08-22T07:40:01Z"
}, },
{
"name": "duplicati/duplicati",
"version": "v2.1.2.0-2.1.2.0_beta_2025-08-20",
"date": "2025-08-20T08:15:46Z"
},
{ {
"name": "karlomikus/bar-assistant", "name": "karlomikus/bar-assistant",
"version": "v5.8.0", "version": "v5.8.0",
@@ -874,11 +974,6 @@
"version": "8.2.1", "version": "8.2.1",
"date": "2025-08-18T15:42:48Z" "date": "2025-08-18T15:42:48Z"
}, },
{
"name": "jupyter/notebook",
"version": "@jupyter-notebook/ui-components@7.5.0-alpha.2",
"date": "2025-08-18T07:39:41Z"
},
{ {
"name": "lldap/lldap", "name": "lldap/lldap",
"version": "v0.6.2", "version": "v0.6.2",
@@ -894,21 +989,31 @@
"version": "3.3.0", "version": "3.3.0",
"date": "2025-08-17T19:57:11Z" "date": "2025-08-17T19:57:11Z"
}, },
{
"name": "thecfu/scraparr",
"version": "v2.2.4",
"date": "2025-08-17T10:12:21Z"
},
{ {
"name": "mylar3/mylar3", "name": "mylar3/mylar3",
"version": "v0.8.3", "version": "v0.8.3",
"date": "2025-08-17T06:24:54Z" "date": "2025-08-17T06:24:54Z"
}, },
{ {
"name": "jellyfin/jellyfin", "name": "Leantime/leantime",
"version": "v10.10.7", "version": "latest",
"date": "2025-04-05T19:14:59Z" "date": "2025-08-15T15:33:51Z"
}, },
{ {
"name": "Kometa-Team/Kometa", "name": "Kometa-Team/Kometa",
"version": "v2.2.1", "version": "v2.2.1",
"date": "2025-08-13T19:49:01Z" "date": "2025-08-13T19:49:01Z"
}, },
{
"name": "swapplications/uhf-server-dist",
"version": "1.5.1",
"date": "2025-08-13T15:43:57Z"
},
{ {
"name": "requarks/wiki", "name": "requarks/wiki",
"version": "v2.5.308", "version": "v2.5.308",
@@ -934,11 +1039,6 @@
"version": "mariadb-12.0.2", "version": "mariadb-12.0.2",
"date": "2025-08-07T21:23:15Z" "date": "2025-08-07T21:23:15Z"
}, },
{
"name": "bastienwirtz/homer",
"version": "v25.08.1",
"date": "2025-08-06T21:04:07Z"
},
{ {
"name": "TryGhost/Ghost-CLI", "name": "TryGhost/Ghost-CLI",
"version": "v1.28.3", "version": "v1.28.3",
@@ -964,11 +1064,6 @@
"version": "v4.8.0", "version": "v4.8.0",
"date": "2025-08-02T09:12:10Z" "date": "2025-08-02T09:12:10Z"
}, },
{
"name": "alexta69/metube",
"version": "2025.07.31",
"date": "2025-08-01T14:44:48Z"
},
{ {
"name": "Suwayomi/Suwayomi-Server", "name": "Suwayomi/Suwayomi-Server",
"version": "v2.1.1867", "version": "v2.1.1867",
@@ -1019,6 +1114,11 @@
"version": "v2.19.0", "version": "v2.19.0",
"date": "2025-07-27T22:25:00Z" "date": "2025-07-27T22:25:00Z"
}, },
{
"name": "verdaccio/verdaccio",
"version": "v6.1.6",
"date": "2025-07-25T06:43:12Z"
},
{ {
"name": "PCJones/UmlautAdaptarr", "name": "PCJones/UmlautAdaptarr",
"version": "v0.7.3", "version": "v0.7.3",
@@ -1199,11 +1299,6 @@
"version": "v0.2.3", "version": "v0.2.3",
"date": "2025-05-10T21:14:45Z" "date": "2025-05-10T21:14:45Z"
}, },
{
"name": "getumbrel/umbrel",
"version": "1.4.2",
"date": "2025-05-09T08:54:49Z"
},
{ {
"name": "ZoeyVid/NPMplus", "name": "ZoeyVid/NPMplus",
"version": "2025-05-07-r1", "version": "2025-05-07-r1",
@@ -1279,6 +1374,11 @@
"version": "v1.55.4", "version": "v1.55.4",
"date": "2025-03-24T11:31:02Z" "date": "2025-03-24T11:31:02Z"
}, },
{
"name": "redlib-org/redlib",
"version": "v0.36.0",
"date": "2025-03-20T03:06:11Z"
},
{ {
"name": "Donkie/Spoolman", "name": "Donkie/Spoolman",
"version": "v0.22.1", "version": "v0.22.1",
@@ -1294,11 +1394,6 @@
"version": "v0.18.0", "version": "v0.18.0",
"date": "2025-03-11T12:47:22Z" "date": "2025-03-11T12:47:22Z"
}, },
{
"name": "AlexxIT/go2rtc",
"version": "v1.9.9",
"date": "2025-03-10T03:22:11Z"
},
{ {
"name": "awawa-dev/HyperHDR", "name": "awawa-dev/HyperHDR",
"version": "v21.0.0.0", "version": "v21.0.0.0",
@@ -1448,5 +1543,10 @@
"name": "thelounge/thelounge-deb", "name": "thelounge/thelounge-deb",
"version": "v4.4.3", "version": "v4.4.3",
"date": "2024-04-06T12:24:35Z" "date": "2024-04-06T12:24:35Z"
},
{
"name": "deepch/RTSPtoWeb",
"version": "v2.4.3",
"date": "2023-03-29T12:05:02Z"
} }
] ]

View File

@@ -23,7 +23,7 @@
"ram": 4096, "ram": 4096,
"hdd": 6, "hdd": 6,
"os": "debian", "os": "debian",
"version": "12" "version": "13"
} }
} }
], ],
@@ -33,11 +33,19 @@
}, },
"notes": [ "notes": [
{ {
"text": "Database credentials: `cat zabbix.creds`", "text": "Database credentials: `cat ~/zabbix.creds`",
"type": "info" "type": "info"
}, },
{ {
"text": "Zabbix agent 2 is used by default", "text": "You can choose between Zabbix agent (classic) and agent2 (modern) during installation",
"type": "info"
},
{
"text": "For agent2 the PostgreSQL plugin is installed by default; all plugins are optional",
"type": "info"
},
{
"text": "If agent2 with NVIDIA plugin is installed in an environment without GPU, the installer disables it automatically",
"type": "info" "type": "info"
} }
] ]

View File

@@ -1,4 +1,5 @@
import { useCallback, useEffect, useRef, useState } from "react"; import { useCallback, useEffect, useRef, useState } from "react";
import * as Icons from "lucide-react";
import Image from "next/image"; import Image from "next/image";
import Link from "next/link"; import Link from "next/link";
@@ -9,6 +10,17 @@ import { formattedBadge } from "@/components/command-menu";
import { basePath } from "@/config/site-config"; import { basePath } from "@/config/site-config";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
function getCategoryIcon(iconName: string) {
// Convert kebab-case to PascalCase for Lucide icon names
const pascalCaseName = iconName
.split("-")
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
.join("");
const IconComponent = (Icons as any)[pascalCaseName];
return IconComponent ? <IconComponent className="size-4 text-[#0083c3] mr-2" /> : null;
}
export default function ScriptAccordion({ export default function ScriptAccordion({
items, items,
selectedScript, selectedScript,
@@ -81,10 +93,13 @@ export default function ScriptAccordion({
)} )}
> >
<div className="mr-2 flex w-full items-center justify-between"> <div className="mr-2 flex w-full items-center justify-between">
<span className="pl-2 text-left"> <div className="flex items-center pl-2 text-left">
{getCategoryIcon(category.icon)}
<span>
{category.name} {category.name}
{" "} {" "}
</span> </span>
</div>
<span className="rounded-full bg-gray-200 px-2 py-1 text-xs text-muted-foreground hover:no-underline dark:bg-blue-800/20"> <span className="rounded-full bg-gray-200 px-2 py-1 text-xs text-muted-foreground hover:no-underline dark:bg-blue-800/20">
{category.scripts.length} {category.scripts.length}
</span> </span>
@@ -103,8 +118,7 @@ export default function ScriptAccordion({
query: { id: script.slug, category: category.name }, query: { id: script.slug, category: category.name },
}} }}
prefetch={false} prefetch={false}
className={`flex cursor-pointer items-center justify-between gap-1 px-1 py-1 text-muted-foreground hover:rounded-lg hover:bg-accent/60 hover:dark:bg-accent/20 ${ className={`flex cursor-pointer items-center justify-between gap-1 px-1 py-1 text-muted-foreground hover:rounded-lg hover:bg-accent/60 hover:dark:bg-accent/20 ${selectedScript === script.slug
selectedScript === script.slug
? "rounded-lg bg-accent font-semibold dark:bg-accent/30 dark:text-white" ? "rounded-lg bg-accent font-semibold dark:bg-accent/30 dark:text-white"
: "" : ""
}`} }`}

View File

@@ -41,6 +41,8 @@ export type Category = {
name: string; name: string;
id: number; id: number;
sort_order: number; sort_order: number;
description: string;
icon: string;
scripts: Script[]; scripts: Script[];
}; };

View File

@@ -13,7 +13,7 @@ setting_up_container
network_check network_check
update_os update_os
fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_linux_x86_64.tar.gz" fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_Linux_x86_64.tar.gz"
msg_info "Configuring Blocky" msg_info "Configuring Blocky"
if systemctl is-active systemd-resolved >/dev/null 2>&1; then if systemctl is-active systemd-resolved >/dev/null 2>&1; then

View File

@@ -18,7 +18,7 @@ curl -fsSL https://deb.globaleaks.org/globaleaks.asc | gpg --dearmor -o /etc/apt
echo "deb [signed-by=/etc/apt/trusted.gpg.d/globaleaks.gpg] http://deb.globaleaks.org $DISTRO_CODENAME/" >/etc/apt/sources.list.d/globaleaks.list echo "deb [signed-by=/etc/apt/trusted.gpg.d/globaleaks.gpg] http://deb.globaleaks.org $DISTRO_CODENAME/" >/etc/apt/sources.list.d/globaleaks.list
echo 'APPARMOR_SANDBOXING=0' >/etc/default/globaleaks echo 'APPARMOR_SANDBOXING=0' >/etc/default/globaleaks
$STD apt update $STD apt update
$STD apt -y install globaleaks $STD apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install globaleaks
msg_ok "Setup GlobaLeaks" msg_ok "Setup GlobaLeaks"
motd_ssh motd_ssh

58
install/goaway-install.sh Normal file
View File

@@ -0,0 +1,58 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/pommee/goaway
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y net-tools
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "goaway" "pommee/goaway" "prebuild" "latest" "/opt/goaway" "goaway_*_linux_amd64.tar.gz"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/goaway.service
[Unit]
Description=GoAway Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/goaway
ExecStart=/opt/goaway/goaway
StandardOutput=file:/var/log/goaway.log
StandardError=inherit
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now goaway
sleep 10
ADMIN_PASS=$(awk -F': ' '/Randomly generated admin password:/ {print $2}' /var/log/goaway.log | tail -n1)
{
echo "GoAway Credentials"
echo "Admin User: admin"
echo "Admin Password: $ADMIN_PASS"
} >>~/goaway.creds
msg_ok "Service Created"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned"

View File

@@ -24,28 +24,26 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
$STD caddy stop $STD caddy stop
rm /etc/caddy/Caddyfile rm /etc/caddy/Caddyfile
cat <<'EOF' >/etc/caddy/Caddyfile cat <<'EOF' >/etc/caddy/Caddyfile
:{$PORT:80} :80
redir /admin /admin/
handle_path /admin* { handle_path /admin* {
root * /opt/headscale-admin root * /opt/headscale-admin
encode gzip zstd encode gzip zstd
# Correct MIME types for JS/WASM
header { header {
@js_files path *.js
@wasm_files path *.wasm
Content-Type @js_files application/javascript
Content-Type @wasm_files application/wasm
X-Content-Type-Options nosniff X-Content-Type-Options nosniff
} }
# Fallback for SPA routing try_files {path} {path}/ /opt/headscale-admin/index.html
try_files {path} {path}/ index.html
file_server file_server
} }
handle /api/* {
reverse_proxy localhost:8080
}
EOF EOF
caddy fmt --overwrite /etc/caddy/Caddyfile caddy fmt --overwrite /etc/caddy/Caddyfile
systemctl start caddy systemctl start caddy

View File

@@ -272,7 +272,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
mkdir -p "$INSTALL_DIR" mkdir -p "$INSTALL_DIR"
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache} mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.142.1" "$SRC_DIR" fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.143.1" "$SRC_DIR"
msg_info "Installing ${APPLICATION} (patience)" msg_info "Installing ${APPLICATION} (patience)"

View File

@@ -0,0 +1,98 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://joplinapp.org/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
git \
rsync
msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql
NODE_VERSION=22 NODE_MODULE="yarn@latest,npm@latest,pm2@latest" setup_nodejs
mkdir -p /opt/pm2
export PM2_HOME=/opt/pm2
$STD pm2 install pm2-logrotate
$STD pm2 set pm2-logrotate:max_size 100MB
$STD pm2 set pm2-logrotate:retain 5
$STD pm2 set pm2-logrotate:compress tr
msg_info "Setting up PostgreSQL Database"
DB_NAME=joplin
DB_USER=joplin
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
{
echo "Joplin-Credentials"
echo "Joplin Database User: $DB_USER"
echo "Joplin Database Password: $DB_PASS"
echo "Joplin Database Name: $DB_NAME"
} >>~/joplin.creds
msg_ok "Set up PostgreSQL Database"
fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball" "latest"
msg_info "Setting up Joplin Server (Patience)"
LOCAL_IP=$(hostname -I | awk '{print $1}')
cd /opt/joplin-server
sed -i "/onenote-converter/d" packages/lib/package.json
$STD yarn config set --home enableTelemetry 0
export BUILD_SEQUENCIAL=1
$STD yarn install --inline-builds
cat <<EOF >/opt/joplin-server/.env
PM2_HOME=/opt/pm2
NODE_ENV=production
APP_BASE_URL=http://$LOCAL_IP:22300
APP_PORT=22300
DB_CLIENT=pg
POSTGRES_PASSWORD=$DB_PASS
POSTGRES_DATABASE=$DB_NAME
POSTGRES_USER=$DB_USER
POSTGRES_PORT=5432
POSTGRES_HOST=localhost
EOF
msg_ok "Setup Joplin Server"
msg_info "Setting up Service"
cat <<EOF >/etc/systemd/system/joplin-server.service
[Unit]
Description=Joplin Server Service
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/joplin-server/packages/server
EnvironmentFile=/opt/joplin-server/.env
ExecStart=/usr/bin/yarn start-prod
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now joplin-server
msg_ok "Service Setup"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -13,6 +13,12 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Dependencies"
$STD apt install -y \
build-essential \
python3-dev
msg_ok "Installed Dependencies"
PG_VERSION="17" setup_postgresql PG_VERSION="17" setup_postgresql
PYTHON_VERSION="3.13" setup_uv PYTHON_VERSION="3.13" setup_uv
@@ -75,6 +81,7 @@ motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
$STD apt-get -y autoremove $STD apt -y autoremove
$STD apt-get -y autoclean $STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -17,7 +17,7 @@ msg_info "Installing dependencies"
$STD apt-get install --no-install-recommends -y build-essential $STD apt-get install --no-install-recommends -y build-essential
msg_ok "Installed dependencies" msg_ok "Installed dependencies"
NODE_VERSION="20" setup_nodejs NODE_VERSION="22" setup_nodejs
MYSQL_VERSION="8.0" setup_mysql MYSQL_VERSION="8.0" setup_mysql
msg_info "Setting up Database" msg_info "Setting up Database"
@@ -48,7 +48,7 @@ sed -i -e 's|db|localhost|' \
-e "s|=PASSWORD|=$(openssl rand -base64 40 | tr -dc 'a-zA-Z0-9' | head -c40)|" \ -e "s|=PASSWORD|=$(openssl rand -base64 40 | tr -dc 'a-zA-Z0-9' | head -c40)|" \
/opt/mmdl/.env /opt/mmdl/.env
cd /opt/mmdl cd /opt/mmdl
export NEXT_TELEMETRY_DISABLE=1 export NEXT_TELEMETRY_DISABLED=1
export CI="true" export CI="true"
$STD npm install $STD npm install
$STD npm run migrate $STD npm run migrate

View File

@@ -16,7 +16,7 @@ update_os
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="dom,gmp,iconv,mysqli,pdo-mysql,redis,tokenizer" setup_php PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="dom,gmp,iconv,mysqli,pdo-mysql,redis,tokenizer" setup_php
setup_composer setup_composer
setup_mariadb setup_mariadb
NODE_VERSION="20" NODE_MODULE="yarn@latest" setup_nodejs NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
msg_info "Setting up MariaDB" msg_info "Setting up MariaDB"
DB_NAME=monica DB_NAME=monica
@@ -44,6 +44,7 @@ sed -i -e "s|^DB_USERNAME=.*|DB_USERNAME=${DB_USER}|" \
-e "s|^HASH_SALT=.*|HASH_SALT=${HASH_SALT}|" \ -e "s|^HASH_SALT=.*|HASH_SALT=${HASH_SALT}|" \
/opt/monica/.env /opt/monica/.env
$STD composer install --no-dev -o --no-interaction $STD composer install --no-dev -o --no-interaction
$STD yarn config set ignore-engines true
$STD yarn install $STD yarn install
$STD yarn run production $STD yarn run production
$STD php artisan key:generate $STD php artisan key:generate

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 community-scripts ORG
# Author: tteck (tteckster) # Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://ntfy.sh/ # Source: https://ntfy.sh/
@@ -13,17 +13,19 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
apt-transport-https
msg_ok "Installed Dependencies"
msg_info "Installing ntfy" msg_info "Installing ntfy"
mkdir -p /etc/apt/keyrings mkdir -p /etc/apt/keyrings
curl -fsSL https://archive.heckel.io/apt/pubkey.txt | gpg --dearmor -o /etc/apt/keyrings/archive.heckel.io.gpg curl -fsSL -o /etc/apt/keyrings/ntfy.gpg https://archive.ntfy.sh/apt/keyring.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/archive.heckel.io.gpg] https://archive.heckel.io/apt debian main" >/etc/apt/sources.list.d/archive.heckel.io.list cat <<EOF >/etc/apt/sources.list.d/ntfy.sources
$STD apt-get update Types: deb
$STD apt-get install -y ntfy URIs: https://archive.ntfy.sh/apt/
Suites: stable
Components: main
Signed-By: /etc/apt/keyrings/ntfy.gpg
EOF
$STD apt update
$STD apt install -y ntfy
systemctl enable -q --now ntfy systemctl enable -q --now ntfy
msg_ok "Installed ntfy" msg_ok "Installed ntfy"
@@ -31,6 +33,7 @@ motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
$STD apt-get -y autoremove $STD apt -y autoremove
$STD apt-get -y autoclean $STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -14,11 +14,13 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y \ $STD apt-get install -y python3-lxml
build-essential \ curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/universe/l/lxml-html-clean/python3-lxml-html-clean_0.1.1-1_all.deb" -o /opt/python3-lxml-html-clean.deb
make $STD dpkg -i /opt/python3-lxml-html-clean.deb
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
PG_VERSION="18" setup_postgresql
RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1) RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1)
LATEST_VERSION=$(curl -fsSL "https://nightly.odoo.com/${RELEASE}/nightly/deb/" | LATEST_VERSION=$(curl -fsSL "https://nightly.odoo.com/${RELEASE}/nightly/deb/" |
grep -oP "odoo_${RELEASE}\.\d+_all\.deb" | grep -oP "odoo_${RELEASE}\.\d+_all\.deb" |
@@ -69,6 +71,7 @@ customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -f /opt/odoo.deb rm -f /opt/odoo.deb
rm -f /opt/python3-lxml-html-clean.deb
$STD apt-get autoremove $STD apt-get autoremove
$STD apt-get autoclean $STD apt-get autoclean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

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

View File

@@ -20,7 +20,7 @@ $STD apt-get install -y \
redis redis
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
NODE_VERSION="20" NODE_MODULE="yarn@latest" setup_nodejs NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
PG_VERSION="16" setup_postgresql PG_VERSION="16" setup_postgresql
msg_info "Set up PostgreSQL Database" msg_info "Set up PostgreSQL Database"

View File

@@ -30,9 +30,9 @@ $STD apt-get install -y --no-install-recommends \
libxmlsec1-openssl libxmlsec1-openssl
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
NODE_VERSION="20" NODE_MODULE="yarn" setup_nodejs NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
fetch_and_deploy_gh_release "tandoor" "TandoorRecipes/recipes" "tarball" "latest" "/opt/tandoor" fetch_and_deploy_gh_release "tandoor" "TandoorRecipes/recipes" "tarball" "latest" "/opt/tandoor"
PG_VERSION="16" setup_postgresql PG_VERSION="17" PG_MODULES="contrib" setup_postgresql
PYTHON_VERSION="3.13" setup_uv PYTHON_VERSION="3.13" setup_uv
msg_info "Set up PostgreSQL Database" msg_info "Set up PostgreSQL Database"
@@ -45,6 +45,8 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS unaccent;"
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
{ {
echo "Tandoor-Credentials" echo "Tandoor-Credentials"
echo "Tandoor Database Name: $DB_NAME" echo "Tandoor Database Name: $DB_NAME"

View File

@@ -22,7 +22,7 @@ $STD npm install
$STD npm run build $STD npm run build
mkdir /opt/tracktor-data mkdir /opt/tracktor-data
HOST_IP=$(hostname -I | awk '{print $1}') HOST_IP=$(hostname -I | awk '{print $1}')
cat <<EOF >/opt/tracktor/app/backend/.env cat <<EOF >/opt/tracktor.env
NODE_ENV=production NODE_ENV=production
PUBLIC_DEMO_MODE=false PUBLIC_DEMO_MODE=false
DB_PATH=/opt/tracktor-data/tracktor.db DB_PATH=/opt/tracktor-data/tracktor.db
@@ -31,6 +31,7 @@ PUBLIC_API_BASE_URL=http://$HOST_IP:3000
# Here add the reverse proxy url as well to avoid cross errors from the app. # Here add the reverse proxy url as well to avoid cross errors from the app.
CORS_ORIGINS=http://$HOST_IP:3000 CORS_ORIGINS=http://$HOST_IP:3000
PORT=3000 PORT=3000
AUTH_PIN=123456
EOF EOF
msg_ok "Configured Tracktor" msg_ok "Configured Tracktor"
@@ -43,7 +44,7 @@ After=network.target
[Service] [Service]
Type=simple Type=simple
WorkingDirectory=/opt/tracktor WorkingDirectory=/opt/tracktor
EnvironmentFile=/opt/tracktor/app/backend/.env EnvironmentFile=/opt/tracktor.env
ExecStart=/usr/bin/npm start ExecStart=/usr/bin/npm start
[Install] [Install]
@@ -56,6 +57,7 @@ motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
$STD apt-get -y autoremove $STD apt -y autoremove
$STD apt-get -y autoclean $STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned" msg_ok "Cleaned"

56
install/upsnap-install.sh Normal file
View File

@@ -0,0 +1,56 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/seriousm4x/UpSnap
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
nmap \
samba \
samba-common-bin \
openssh-client \
openssh-server \
sshpass
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "upsnap" "seriousm4x/UpSnap" "prebuild" "latest" "/opt/upsnap" "UpSnap_*_linux_amd64.zip"
setcap 'cap_net_raw=+ep' /opt/upsnap/upsnap
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/upsnap.service
[Unit]
Description=UpSnap Service
Documentation=https://github.com/seriousm4x/UpSnap/wiki
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
WorkingDirectory=/opt/upsnap
ExecStart=/opt/upsnap/upsnap serve --http=0.0.0.0:8090
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now upsnap
msg_ok "Service Created"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned"

View File

@@ -13,20 +13,61 @@ setting_up_container
network_check network_check
update_os update_os
PG_VERSION="17" setup_postgresql
msg_info "Installing Zabbix" msg_info "Installing Zabbix"
cd /tmp cd /tmp
curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ | curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ |
grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 | grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 |
xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")" \ xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian13_all.deb")" \
-o /tmp/zabbix-release_latest+debian12_all.deb -o /tmp/zabbix-release_latest+debian13_all.deb
$STD dpkg -i /tmp/zabbix-release_latest+debian12_all.deb $STD dpkg -i /tmp/zabbix-release_latest+debian13_all.deb
$STD apt-get update $STD apt update
$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts $STD apt install -y zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql zabbix-apache-conf zabbix-sql-scripts
$STD apt-get install -y zabbix-agent2 zabbix-agent2-plugin-*
msg_ok "Installed Zabbix" msg_ok "Installed Zabbix"
while true; do
read -rp "Which agent do you want to install? [1=agent (classic), 2=agent2 (modern), default=1]: " AGENT_CHOICE
case "$AGENT_CHOICE" in
2)
AGENT_PKG="zabbix-agent2"
break
;;
"" | 1)
AGENT_PKG="zabbix-agent"
break
;;
*)
echo "Invalid choice. Please enter 1 or 2."
;;
esac
done
msg_ok "Selected $AGENT_PKG"
if [ "$AGENT_PKG" = "zabbix-agent2" ]; then
echo "Choose plugins for Zabbix Agent2:"
echo "1) PostgreSQL only (default, recommended)"
echo "2) All plugins (may cause issues)"
read -rp "Choose option [1-2]: " PLUGIN_CHOICE
case "$PLUGIN_CHOICE" in
2)
$STD apt install -y zabbix-agent2 zabbix-agent2-plugin-*
;;
*)
$STD apt install -y zabbix-agent2 zabbix-agent2-plugin-postgresql
;;
esac
if [ -f /etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf ]; then
sed -i 's|^Plugins.NVIDIA.System.Path=.*|# Plugins.NVIDIA.System.Path=/usr/libexec/zabbix/zabbix-agent2-plugin-nvidia-gpu|' \
/etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf
fi
else
$STD apt install -y zabbix-agent
fi
msg_info "Setting up PostgreSQL" msg_info "Setting up PostgreSQL"
$STD apt-get install -y postgresql
DB_NAME=zabbixdb DB_NAME=zabbixdb
DB_USER=zabbix DB_USER=zabbix
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13) DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
@@ -35,18 +76,31 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCO
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
{
echo "Zabbix-Credentials"
echo "Zabbix Database User: $DB_USER"
echo "Zabbix Database Password: $DB_PASS"
echo "Zabbix Database Name: $DB_NAME"
} >>~/zabbix.creds
zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u $DB_USER psql $DB_NAME &>/dev/null zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u $DB_USER psql $DB_NAME &>/dev/null
sed -i "s/^DBName=.*/DBName=$DB_NAME/" /etc/zabbix/zabbix_server.conf sed -i "s/^DBName=.*/DBName=$DB_NAME/" /etc/zabbix/zabbix_server.conf
sed -i "s/^DBUser=.*/DBUser=$DB_USER/" /etc/zabbix/zabbix_server.conf sed -i "s/^DBUser=.*/DBUser=$DB_USER/" /etc/zabbix/zabbix_server.conf
sed -i "s/^# DBPassword=.*/DBPassword=$DB_PASS/" /etc/zabbix/zabbix_server.conf sed -i "s/^# DBPassword=.*/DBPassword=$DB_PASS/" /etc/zabbix/zabbix_server.conf
echo "" >~/zabbix.creds
echo "zabbix Database Credentials" >>~/zabbix.creds
echo "" >>~/zabbix.creds
echo -e "zabbix Database User: \e[32m$DB_USER\e[0m" >>~/zabbix.creds
echo -e "zabbix Database Password: \e[32m$DB_PASS\e[0m" >>~/zabbix.creds
echo -e "zabbix Database Name: \e[32m$DB_NAME\e[0m" >>~/zabbix.creds
msg_ok "Set up PostgreSQL" msg_ok "Set up PostgreSQL"
msg_info "Configuring Fping"
if command -v fping >/dev/null 2>&1; then
FPING_PATH=$(command -v fping)
sed -i "s|^#\?FpingLocation=.*|FpingLocation=$FPING_PATH|" /etc/zabbix/zabbix_server.conf
fi
if command -v fping6 >/dev/null 2>&1; then
FPING6_PATH=$(command -v fping6)
sed -i "s|^#\?Fping6Location=.*|Fping6Location=$FPING6_PATH|" /etc/zabbix/zabbix_server.conf
fi
msg_ok "Configured Fping"
msg_info "Starting Services" msg_info "Starting Services"
systemctl restart zabbix-server zabbix-agent2 apache2 systemctl restart zabbix-server zabbix-agent2 apache2
systemctl enable -q --now zabbix-server zabbix-agent2 apache2 systemctl enable -q --now zabbix-server zabbix-agent2 apache2
@@ -56,7 +110,8 @@ motd_ssh
customize customize
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf /tmp/zabbix-release_latest+debian12_all.deb rm -rf /tmp/zabbix-release_latest+debian13_all.deb
$STD apt-get -y autoremove $STD apt -y autoremove
$STD apt-get -y autoclean $STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -1970,9 +1970,8 @@ function setup_uv() {
export PATH="/usr/local/bin:$PATH" export PATH="/usr/local/bin:$PATH"
fi fi
ensure_usr_local_bin_persist ensure_usr_local_bin_persist
if ! $STD uv python update-shell; then
msg_error "uv shell integration failed continuing anyway" $STD uv python update-shell >/dev/null 2>&1 || true
fi
msg_ok "Setup uv $LATEST_VERSION" msg_ok "Setup uv $LATEST_VERSION"
# Optional: install specific Python version # Optional: install specific Python version
@@ -2022,6 +2021,8 @@ function setup_yq() {
} }
fi fi
[[ ":$PATH:" != *":/usr/local/bin:"* ]] && echo 'export PATH="/usr/local/bin:$PATH"' >>~/.bashrc && source ~/.bashrc
if command -v yq &>/dev/null; then if command -v yq &>/dev/null; then
if ! yq --version 2>&1 | grep -q 'mikefarah'; then if ! yq --version 2>&1 | grep -q 'mikefarah'; then
rm -f "$(command -v yq)" rm -f "$(command -v yq)"

View File

@@ -532,20 +532,28 @@ if [ -f "$MOBILE_TPL" ] && ! grep -q "$MARKER" "$MOBILE_TPL"; then
"$MARKER" \ "$MARKER" \
"<script>" \ "<script>" \
" function removeSubscriptionElements() {" \ " function removeSubscriptionElements() {" \
" // --- Remove subscription dialogs ---" \
" const dialogs = document.querySelectorAll('dialog.pwt-outer-dialog');" \ " const dialogs = document.querySelectorAll('dialog.pwt-outer-dialog');" \
" dialogs.forEach(dialog => {" \ " dialogs.forEach(dialog => {" \
" const closeButton = dialog.querySelector('.fa-close');" \ " const text = (dialog.textContent || '').toLowerCase();" \
" const exclamationIcon = dialog.querySelector('.fa-exclamation-triangle');" \ " if (text.includes('subscription')) {" \
" const continueButton = dialog.querySelector('button');" \ " dialog.remove();" \
" if (closeButton && exclamationIcon && continueButton) { dialog.remove(); console.log('Removed subscription dialog'); }" \ " console.log('Removed subscription dialog');" \
" }" \
" });" \ " });" \
"" \
" // --- Remove subscription cards, but keep Reboot/Shutdown/Console ---" \
" const cards = document.querySelectorAll('.pwt-card.pwt-p-2.pwt-d-flex.pwt-interactive.pwt-justify-content-center');" \ " const cards = document.querySelectorAll('.pwt-card.pwt-p-2.pwt-d-flex.pwt-interactive.pwt-justify-content-center');" \
" cards.forEach(card => {" \ " cards.forEach(card => {" \
" const hasInteractiveElements = card.querySelector('button, input, a');" \ " const text = (card.textContent || '').toLowerCase();" \
" const hasComplexStructure = card.querySelector('.pwt-grid, .pwt-flex, .pwt-button');" \ " const hasButton = card.querySelector('button');" \
" if (!hasInteractiveElements && !hasComplexStructure) { card.remove(); console.log('Removed subscription card'); }" \ " if (!hasButton && text.includes('subscription')) {" \
" card.remove();" \
" console.log('Removed subscription card');" \
" }" \
" });" \ " });" \
" }" \ " }" \
"" \
" const observer = new MutationObserver(removeSubscriptionElements);" \ " const observer = new MutationObserver(removeSubscriptionElements);" \
" observer.observe(document.body, { childList: true, subtree: true });" \ " observer.observe(document.body, { childList: true, subtree: true });" \
" removeSubscriptionElements();" \ " removeSubscriptionElements();" \
@@ -555,7 +563,6 @@ if [ -f "$MOBILE_TPL" ] && ! grep -q "$MARKER" "$MOBILE_TPL"; then
"" >> "$MOBILE_TPL" "" >> "$MOBILE_TPL"
fi fi
EOF EOF
chmod 755 /usr/local/bin/pve-remove-nag.sh chmod 755 /usr/local/bin/pve-remove-nag.sh
cat >/etc/apt/apt.conf.d/no-nag-script <<'EOF' cat >/etc/apt/apt.conf.d/no-nag-script <<'EOF'

View File

@@ -205,15 +205,69 @@ function exit-script() {
exit exit
} }
# Ensure pv is installed or abort with instructions
function ensure_pv() { function ensure_pv() {
if ! command -v pv &>/dev/null; then if ! command -v pv &>/dev/null; then
msg_info "Installing required package: pv" msg_info "Installing required package: pv"
apt-get update -qq &>/dev/null if ! apt-get update -qq &>/dev/null || ! apt-get install -y pv &>/dev/null; then
apt-get install -y pv &>/dev/null msg_error "Failed to install pv automatically."
echo -e "\nPlease run manually on the Proxmox host:\n apt install pv\n"
exit 1
fi
msg_ok "Installed pv" msg_ok "Installed pv"
fi fi
} }
# Download an .xz file and validate it
# Args: $1=url $2=cache_file
function download_and_validate_xz() {
local url="$1"
local file="$2"
# If file exists, check validity
if [[ -s "$file" ]]; then
if xz -t "$file" &>/dev/null; then
msg_ok "Using cached image $(basename "$file")"
return 0
else
msg_error "Cached file $(basename "$file") is corrupted. Deleting and retrying download..."
rm -f "$file"
fi
fi
# Download fresh file
msg_info "Downloading image: $(basename "$file")"
if ! curl -fSL -o "$file" "$url"; then
msg_error "Download failed: $url"
rm -f "$file"
exit 1
fi
# Validate again
if ! xz -t "$file" &>/dev/null; then
msg_error "Downloaded file $(basename "$file") is corrupted. Please try again later."
rm -f "$file"
exit 1
fi
msg_ok "Downloaded and validated $(basename "$file")"
}
# Extract .xz with pv
# Args: $1=cache_file $2=target_img
function extract_xz_with_pv() {
set -o pipefail
local file="$1"
local target="$2"
msg_info "Decompressing $(basename "$file") to $target"
if ! xz -dc "$file" | pv -N "Extracting" >"$target"; then
msg_error "Failed to extract $file"
rm -f "$target"
exit 1
fi
msg_ok "Decompressed to $target"
}
function default_settings() { function default_settings() {
BRANCH="$stable" BRANCH="$stable"
VMID=$(get_valid_nextid) VMID=$(get_valid_nextid)
@@ -507,23 +561,15 @@ FILE_IMG="/var/lib/vz/template/tmp/${CACHE_FILE##*/%.xz}" # .qcow2
mkdir -p "$CACHE_DIR" "$(dirname "$FILE_IMG")" mkdir -p "$CACHE_DIR" "$(dirname "$FILE_IMG")"
msg_ok "${CL}${BL}${URL}${CL}" msg_ok "${CL}${BL}${URL}${CL}"
if [[ ! -s "$CACHE_FILE" ]]; then download_and_validate_xz "$URL" "$CACHE_FILE"
curl -f#SL -o "$CACHE_FILE" "$URL"
msg_ok "Downloaded ${CL}${BL}$(basename "$CACHE_FILE")${CL}"
else
msg_ok "Using cached image ${CL}${BL}$(basename "$CACHE_FILE")${CL}"
fi
set -o pipefail
msg_info "Creating Home Assistant OS VM shell" msg_info "Creating Home Assistant OS VM shell"
qm create "$VMID" -machine q35 -bios ovmf -agent 1 -tablet 0 -localtime 1 ${CPU_TYPE} \ qm create "$VMID" -machine q35 -bios ovmf -agent 1 -tablet 0 -localtime 1 ${CPU_TYPE} \
-cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" -tags community-script \ -cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" -tags community-script \
-net0 "virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU" -onboot 1 -ostype l26 -scsihw virtio-scsi-pci >/dev/null -net0 "virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU" -onboot 1 -ostype l26 -scsihw virtio-scsi-pci >/dev/null
msg_ok "Created VM shell" msg_ok "Created VM shell"
msg_info "Decompressing $(basename "$CACHE_FILE") to $FILE_IMG" extract_xz_with_pv "$CACHE_FILE" "$FILE_IMG"
xz -dc "$CACHE_FILE" | pv -N "Extracting" >"$FILE_IMG"
msg_ok "Decompressed to $FILE_IMG"
msg_info "Importing disk into storage ($STORAGE)" msg_info "Importing disk into storage ($STORAGE)"
if qm disk import --help >/dev/null 2>&1; then if qm disk import --help >/dev/null 2>&1; then

View File

@@ -35,7 +35,6 @@ GN=$(echo "\033[1;92m")
DGN=$(echo "\033[32m") DGN=$(echo "\033[32m")
CL=$(echo "\033[m") CL=$(echo "\033[m")
CL=$(echo "\033[m")
BOLD=$(echo "\033[1m") BOLD=$(echo "\033[1m")
BFR="\\r\\033[K" BFR="\\r\\033[K"
HOLD=" " HOLD=" "
@@ -201,15 +200,69 @@ function exit-script() {
exit exit
} }
# Ensure pv is installed or abort with instructions
function ensure_pv() { function ensure_pv() {
if ! command -v pv &>/dev/null; then if ! command -v pv &>/dev/null; then
msg_info "Installing required package: pv" msg_info "Installing required package: pv"
apt-get update -qq &>/dev/null if ! apt-get update -qq &>/dev/null || ! apt-get install -y pv &>/dev/null; then
apt-get install -y pv &>/dev/null msg_error "Failed to install pv automatically."
echo -e "\nPlease run manually on the Proxmox host:\n apt install pv\n"
exit 1
fi
msg_ok "Installed pv" msg_ok "Installed pv"
fi fi
} }
# Download an .xz file and validate it
# Args: $1=url $2=cache_file
function download_and_validate_xz() {
local url="$1"
local file="$2"
# If file exists, check validity
if [[ -s "$file" ]]; then
if xz -t "$file" &>/dev/null; then
msg_ok "Using cached image $(basename "$file")"
return 0
else
msg_error "Cached file $(basename "$file") is corrupted. Deleting and retrying download..."
rm -f "$file"
fi
fi
# Download fresh file
msg_info "Downloading image: $(basename "$file")"
if ! curl -fSL -o "$file" "$url"; then
msg_error "Download failed: $url"
rm -f "$file"
exit 1
fi
# Validate again
if ! xz -t "$file" &>/dev/null; then
msg_error "Downloaded file $(basename "$file") is corrupted. Please try again later."
rm -f "$file"
exit 1
fi
msg_ok "Downloaded and validated $(basename "$file")"
}
# Extract .xz with pv
# Args: $1=cache_file $2=target_img
function extract_xz_with_pv() {
set -o pipefail
local file="$1"
local target="$2"
msg_info "Decompressing $(basename "$file") to $target"
if ! xz -dc "$file" | pv -N "Extracting" >"$target"; then
msg_error "Failed to extract $file"
rm -f "$target"
exit 1
fi
msg_ok "Decompressed to $target"
}
function default_settings() { function default_settings() {
VMID=$(get_valid_nextid) VMID=$(get_valid_nextid)
MACHINE="q35" MACHINE="q35"
@@ -475,19 +528,13 @@ FILE_IMG="/var/lib/vz/template/tmp/${CACHE_FILE##*/%.xz}"
mkdir -p "$CACHE_DIR" "$(dirname "$FILE_IMG")" mkdir -p "$CACHE_DIR" "$(dirname "$FILE_IMG")"
if [[ ! -s "$CACHE_FILE" ]]; then download_and_validate_xz "$URL" "$CACHE_FILE"
msg_ok "Downloading Umbrel OS image"
curl -f#SL -o "$CACHE_FILE" "$URL"
else
msg_ok "Using cached Umbrel OS image"
fi
set -o pipefail
qm create "$VMID" -machine q35 -bios ovmf -agent 1 -tablet 0 -localtime 1 ${CPU_TYPE} \ qm create "$VMID" -machine q35 -bios ovmf -agent 1 -tablet 0 -localtime 1 ${CPU_TYPE} \
-cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" -tags community-script \ -cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" -tags community-script \
-net0 "virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU" -onboot 1 -ostype l26 -scsihw virtio-scsi-pci >/dev/null -net0 "virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU" -onboot 1 -ostype l26 -scsihw virtio-scsi-pci >/dev/null
xz -dc "$CACHE_FILE" | pv -N "Extracting" >"$FILE_IMG" extract_xz_with_pv "$CACHE_FILE" "$FILE_IMG"
if qm disk import --help >/dev/null 2>&1; then if qm disk import --help >/dev/null 2>&1; then
IMPORT_CMD=(qm disk import) IMPORT_CMD=(qm disk import)