mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-05 19:02:50 +00:00
Compare commits
135 Commits
2025-09-18
...
2025-09-27
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7ddc50bfe7 | ||
|
|
484a46beb1 | ||
|
|
b85d1e5062 | ||
|
|
05e41f67e1 | ||
|
|
bfe6445c64 | ||
|
|
ffde3a731c | ||
|
|
d5b9da8f5f | ||
|
|
1b8d790a14 | ||
|
|
175b925ae4 | ||
|
|
38a8773d2f | ||
|
|
e7dafcbf3e | ||
|
|
380fb1cfb7 | ||
|
|
10cd6c3f0b | ||
|
|
710bd7f4e7 | ||
|
|
4d72852e53 | ||
|
|
9ad538c2d2 | ||
|
|
ee3872e7e1 | ||
|
|
f6ca81833e | ||
|
|
c41b18f083 | ||
|
|
f983f75b30 | ||
|
|
137dd647dd | ||
|
|
2f5c608f45 | ||
|
|
b8e06c05d0 | ||
|
|
2beb89055c | ||
|
|
308897fdc7 | ||
|
|
5b73367c80 | ||
|
|
5c0eefa652 | ||
|
|
7c5c654dbe | ||
|
|
984eeedf31 | ||
|
|
7fd08cbe69 | ||
|
|
285447b67f | ||
|
|
b394cdf6e0 | ||
|
|
ab2a6ed38e | ||
|
|
f8e109c529 | ||
|
|
46e4bc3a04 | ||
|
|
d0a1f305c7 | ||
|
|
6948e1f695 | ||
|
|
8c860da4ed | ||
|
|
d32e9fad59 | ||
|
|
9096a388c7 | ||
|
|
9f0efc27df | ||
|
|
06ca6e2087 | ||
|
|
8c48ea6718 | ||
|
|
b626e705eb | ||
|
|
f103d09c09 | ||
|
|
82a7d252ab | ||
|
|
48af77e928 | ||
|
|
d24308a409 | ||
|
|
584365fff1 | ||
|
|
95c54dccd7 | ||
|
|
eb28463d86 | ||
|
|
bddde99252 | ||
|
|
f1f8c1b279 | ||
|
|
37a0a4add9 | ||
|
|
02cede3f5d | ||
|
|
42a7d57a42 | ||
|
|
53b5f0d1fe | ||
|
|
4a56d8d9aa | ||
|
|
f819188a5e | ||
|
|
4d6e3e5977 | ||
|
|
d6fc527200 | ||
|
|
c103c3b03d | ||
|
|
2d290cb27f | ||
|
|
883efd1cd2 | ||
|
|
1f40670ea0 | ||
|
|
cec4e2d5c1 | ||
|
|
1fafb3f661 | ||
|
|
b56b053e8b | ||
|
|
21f98835dc | ||
|
|
ab455d7748 | ||
|
|
5382fa1dbd | ||
|
|
6fa1938360 | ||
|
|
2a2df5b5cc | ||
|
|
f99d582eb5 | ||
|
|
d3f24ae5b2 | ||
|
|
25e89f7bac | ||
|
|
2686753448 | ||
|
|
19678e2534 | ||
|
|
1ac8f90281 | ||
|
|
7cd3e40f9c | ||
|
|
42191bdb5a | ||
|
|
aab1a9bce5 | ||
|
|
208226065b | ||
|
|
54e62749be | ||
|
|
2a8e2e62cd | ||
|
|
b15d7be4c3 | ||
|
|
e208bc110b | ||
|
|
b26ad61a33 | ||
|
|
5beaec9514 | ||
|
|
3a668870b7 | ||
|
|
3266962630 | ||
|
|
2a3f5d7b47 | ||
|
|
fb4c3cf9e9 | ||
|
|
e96ea4eb40 | ||
|
|
dfbe5f03ce | ||
|
|
9c53c70f6b | ||
|
|
a3c7f468ef | ||
|
|
605f7a0330 | ||
|
|
306627378e | ||
|
|
0e464cb192 | ||
|
|
277f6ce7d1 | ||
|
|
a6d6f79943 | ||
|
|
a7ced850ab | ||
|
|
eadca5f81f | ||
|
|
5ab375fd89 | ||
|
|
2dc95b6b22 | ||
|
|
57dd3d5a44 | ||
|
|
25ddf48190 | ||
|
|
01b6bec1fe | ||
|
|
d1ff8201b1 | ||
|
|
c5c5ba1ede | ||
|
|
e3aabd81a3 | ||
|
|
4713941415 | ||
|
|
adda76f587 | ||
|
|
cf597b6a26 | ||
|
|
20e8730a34 | ||
|
|
9ce9de8e84 | ||
|
|
ac3f969016 | ||
|
|
c0597842f8 | ||
|
|
667d354059 | ||
|
|
d56c1e2f50 | ||
|
|
3dfbc2d6ea | ||
|
|
31b33d370e | ||
|
|
d4d4c0e07a | ||
|
|
aded4d5809 | ||
|
|
c00308524b | ||
|
|
fef7786714 | ||
|
|
0dfd337a9a | ||
|
|
d99862fa24 | ||
|
|
ac08d385c0 | ||
|
|
7a9de76acb | ||
|
|
35f3f043a7 | ||
|
|
4276df26d7 | ||
|
|
5fec573533 | ||
|
|
ebd269a808 |
2
.github/ISSUE_TEMPLATE/bug_report.yml
generated
vendored
2
.github/ISSUE_TEMPLATE/bug_report.yml
generated
vendored
@@ -60,7 +60,7 @@ body:
|
|||||||
- Alpine
|
- Alpine
|
||||||
- Debian 11
|
- Debian 11
|
||||||
- Debian 12
|
- Debian 12
|
||||||
- Ubuntu 20.04
|
- Debian 13
|
||||||
- Ubuntu 22.04
|
- Ubuntu 22.04
|
||||||
- Ubuntu 24.04
|
- Ubuntu 24.04
|
||||||
- Ubuntu 24.10
|
- Ubuntu 24.10
|
||||||
|
|||||||
38
.github/label-priority.json
generated
vendored
38
.github/label-priority.json
generated
vendored
@@ -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
116
.github/workflows/autolabeler.yml
generated
vendored
@@ -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 (0–1).
|
|
||||||
- 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(", ")}`
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|||||||
165
CHANGELOG.md
165
CHANGELOG.md
@@ -10,8 +10,173 @@
|
|||||||
> [!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-28
|
||||||
|
|
||||||
|
## 2025-09-27
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- GoAway: Make admin password aquisition more reliable [@tremor021](https://github.com/tremor021) ([#7946](https://github.com/community-scripts/ProxmoxVE/pull/7946))
|
||||||
|
- MeTube: Various fixes [@vhsdream](https://github.com/vhsdream) ([#7936](https://github.com/community-scripts/ProxmoxVE/pull/7936))
|
||||||
|
- Oddo: Fix typo in update procedure [@tremor021](https://github.com/tremor021) ([#7941](https://github.com/community-scripts/ProxmoxVE/pull/7941))
|
||||||
|
|
||||||
|
## 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
|
||||||
|
|
||||||
|
### 🆕 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
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [core]: Update detection of current running subshell [@tremor021](https://github.com/tremor021) ([#7796](https://github.com/community-scripts/ProxmoxVE/pull/7796))
|
||||||
|
- Paymenter: Installation and update fixes [@tremor021](https://github.com/tremor021) ([#7792](https://github.com/community-scripts/ProxmoxVE/pull/7792))
|
||||||
|
|
||||||
|
## 2025-09-21
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix openwebui update and installer [@HeedfulCrayon](https://github.com/HeedfulCrayon) ([#7788](https://github.com/community-scripts/ProxmoxVE/pull/7788))
|
||||||
|
- tracktor: add: cleanup before upgrade [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7782](https://github.com/community-scripts/ProxmoxVE/pull/7782))
|
||||||
|
- Fix regex to extract MySQL version correctly [@MickLesk](https://github.com/MickLesk) ([#7774](https://github.com/community-scripts/ProxmoxVE/pull/7774))
|
||||||
|
- Update Ollama Installer in OpenWebUI to resume downloads if interrupted [@HeedfulCrayon](https://github.com/HeedfulCrayon) ([#7779](https://github.com/community-scripts/ProxmoxVE/pull/7779))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Implement clean install option in tools.func (fetch_and_deploy_gh_release) [@MickLesk](https://github.com/MickLesk) ([#7785](https://github.com/community-scripts/ProxmoxVE/pull/7785))
|
||||||
|
- caddy: modify disk size and implement xCaddy update [@MickLesk](https://github.com/MickLesk) ([#7775](https://github.com/community-scripts/ProxmoxVE/pull/7775))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Harmonize and shorten JSON Names for PVE/PBS/PMG [@MickLesk](https://github.com/MickLesk) ([#7773](https://github.com/community-scripts/ProxmoxVE/pull/7773))
|
||||||
|
|
||||||
|
## 2025-09-20
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- checkmk.sh Update: Revert old Pr [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#7765](https://github.com/community-scripts/ProxmoxVE/pull/7765))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Wazuh: Increase HDD size [@tremor021](https://github.com/tremor021) ([#7759](https://github.com/community-scripts/ProxmoxVE/pull/7759))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- #### 📂 Github
|
||||||
|
|
||||||
|
- Add Debian 13 in bug report template [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#7757](https://github.com/community-scripts/ProxmoxVE/pull/7757))
|
||||||
|
|
||||||
## 2025-09-19
|
## 2025-09-19
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Tunarr ([#7735](https://github.com/community-scripts/ProxmoxVE/pull/7735))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- SigNoz: Fix wrong URL for Zookeeper [@tremor021](https://github.com/tremor021) ([#7742](https://github.com/community-scripts/ProxmoxVE/pull/7742))
|
||||||
|
|
||||||
## 2025-09-18
|
## 2025-09-18
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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}"
|
||||||
|
|||||||
15
ct/caddy.sh
15
ct/caddy.sh
@@ -9,7 +9,7 @@ APP="Caddy"
|
|||||||
var_tags="${var_tags:-webserver}"
|
var_tags="${var_tags:-webserver}"
|
||||||
var_cpu="${var_cpu:-1}"
|
var_cpu="${var_cpu:-1}"
|
||||||
var_ram="${var_ram:-512}"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-6}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
@@ -31,6 +31,19 @@ function update_script() {
|
|||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get -y upgrade
|
$STD apt-get -y upgrade
|
||||||
msg_ok "Updated $APP LXC"
|
msg_ok "Updated $APP LXC"
|
||||||
|
|
||||||
|
if command -v xcaddy >/dev/null 2>&1; then
|
||||||
|
install_go
|
||||||
|
msg_info "Updating xCaddy"
|
||||||
|
cd /opt
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
|
||||||
|
VERSION="${RELEASE#v}"
|
||||||
|
curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${VERSION}_linux_amd64.deb" -o "xcaddy_${VERSION}_linux_amd64.deb"
|
||||||
|
$STD dpkg -i "xcaddy_${VERSION}_linux_amd64.deb"
|
||||||
|
rm -f "xcaddy_${VERSION}_linux_amd64.deb"
|
||||||
|
$STD xcaddy build
|
||||||
|
msg_ok "Updated xCaddy"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "checkmk" "checkmk/checkmk"; then
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -Ev 'rc|b' | sort -V | tail -n 1)
|
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -Ev 'rc|b' | sort -V | tail -n 1)
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
$STD omd stop monitoring
|
$STD omd stop monitoring
|
||||||
@@ -41,7 +41,7 @@ function update_script() {
|
|||||||
rm -rf /opt/checkmk.deb
|
rm -rf /opt/checkmk.deb
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
fi
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
54
ct/goaway.sh
Normal file
54
ct/goaway.sh
Normal 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
6
ct/headers/goaway
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
______ ___
|
||||||
|
/ ____/___ / |_ ______ ___ __
|
||||||
|
/ / __/ __ \/ /| | | /| / / __ `/ / / /
|
||||||
|
/ /_/ / /_/ / ___ | |/ |/ / /_/ / /_/ /
|
||||||
|
\____/\____/_/ |_|__/|__/\__,_/\__, /
|
||||||
|
/____/
|
||||||
6
ct/headers/joplin-server
Normal file
6
ct/headers/joplin-server
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ ___ _____
|
||||||
|
/ /___ ____ / (_)___ / ___/___ ______ _____ _____
|
||||||
|
__ / / __ \/ __ \/ / / __ \______\__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||||
|
/ /_/ / /_/ / /_/ / / / / / /_____/__/ / __/ / | |/ / __/ /
|
||||||
|
\____/\____/ .___/_/_/_/ /_/ /____/\___/_/ |___/\___/_/
|
||||||
|
/_/
|
||||||
6
ct/headers/tunarr
Normal file
6
ct/headers/tunarr
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
______
|
||||||
|
/_ __/_ ______ ____ ___________
|
||||||
|
/ / / / / / __ \/ __ `/ ___/ ___/
|
||||||
|
/ / / /_/ / / / / /_/ / / / /
|
||||||
|
/_/ \__,_/_/ /_/\__,_/_/ /_/
|
||||||
|
|
||||||
6
ct/headers/upsnap
Normal file
6
ct/headers/upsnap
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ __ _____
|
||||||
|
/ / / /___ / ___/____ ____ _____
|
||||||
|
/ / / / __ \\__ \/ __ \/ __ `/ __ \
|
||||||
|
/ /_/ / /_/ /__/ / / / / /_/ / /_/ /
|
||||||
|
\____/ .___/____/_/ /_/\__,_/ .___/
|
||||||
|
/_/ /_/
|
||||||
@@ -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}"
|
||||||
|
|||||||
@@ -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
62
ct/joplin-server.sh
Normal 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}"
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
41
ct/metube.sh
41
ct/metube.sh
@@ -29,6 +29,18 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ $(echo ":$PATH:" != *":/usr/local/bin:"*) ]]; then
|
||||||
|
echo 'export PATH="/usr/local/bin:$PATH"' >>~/.bashrc
|
||||||
|
source ~/.bashrc
|
||||||
|
if ! command -v deno &>/dev/null; then
|
||||||
|
export DENO_INSTALL="/usr/local"
|
||||||
|
curl -fsSL https://deno.land/install.sh | $STD sh -s -- -y
|
||||||
|
else
|
||||||
|
$STD deno upgrade
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "metube" "alexta69/metube"; then
|
||||||
msg_info "Stopping ${APP} Service"
|
msg_info "Stopping ${APP} Service"
|
||||||
systemctl stop metube
|
systemctl stop metube
|
||||||
msg_ok "Stopped ${APP} Service"
|
msg_ok "Stopped ${APP} Service"
|
||||||
@@ -40,9 +52,7 @@ function update_script() {
|
|||||||
mv /opt/metube /opt/metube_bak
|
mv /opt/metube /opt/metube_bak
|
||||||
msg_ok "Backup created"
|
msg_ok "Backup created"
|
||||||
|
|
||||||
msg_info "Cloning Latest ${APP} Release"
|
fetch_and_deploy_gh_release "metube" "alexta69/metube" "tarball" "latest"
|
||||||
$STD git clone https://github.com/alexta69/metube /opt/metube
|
|
||||||
msg_ok "Cloned ${APP}"
|
|
||||||
|
|
||||||
msg_info "Building Frontend"
|
msg_info "Building Frontend"
|
||||||
cd /opt/metube/ui
|
cd /opt/metube/ui
|
||||||
@@ -52,16 +62,9 @@ function update_script() {
|
|||||||
|
|
||||||
PYTHON_VERSION="3.13" setup_uv
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
|
|
||||||
msg_info "Setting up Python Environment (uv)"
|
|
||||||
$STD uv venv /opt/metube/.venv
|
|
||||||
$STD /opt/metube/.venv/bin/python -m ensurepip --upgrade
|
|
||||||
$STD /opt/metube/.venv/bin/python -m pip install --upgrade pip
|
|
||||||
$STD /opt/metube/.venv/bin/python -m pip install pipenv
|
|
||||||
msg_ok "Python Environment Ready"
|
|
||||||
|
|
||||||
msg_info "Installing Backend Requirements"
|
msg_info "Installing Backend Requirements"
|
||||||
cd /opt/metube
|
cd /opt/metube
|
||||||
$STD /opt/metube/.venv/bin/pipenv install
|
$STD uv sync --frozen --no-dev
|
||||||
msg_ok "Installed Backend"
|
msg_ok "Installed Backend"
|
||||||
|
|
||||||
msg_info "Restoring Environment File"
|
msg_info "Restoring Environment File"
|
||||||
@@ -70,16 +73,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
msg_ok "Restored .env"
|
msg_ok "Restored .env"
|
||||||
|
|
||||||
if [[ ! -d /opt/metube/.venv ]]; then
|
if grep -q 'pipenv' /etc/systemd/system/metube.service; then
|
||||||
msg_info "Migrating to uv-based environment"
|
|
||||||
PYTHON_VERSION="3.13" setup_uv
|
|
||||||
$STD uv venv /opt/metube/.venv
|
|
||||||
$STD /opt/metube/.venv/bin/python -m ensurepip --upgrade
|
|
||||||
$STD /opt/metube/.venv/bin/python -m pip install --upgrade pip
|
|
||||||
$STD /opt/metube/.venv/bin/python -m pip install pipenv
|
|
||||||
$STD /opt/metube/.venv/bin/pipenv install
|
|
||||||
$STD /opt/metube/.venv/bin/pipenv update yt-dlp
|
|
||||||
|
|
||||||
msg_info "Patching systemd Service"
|
msg_info "Patching systemd Service"
|
||||||
cat <<EOF >/etc/systemd/system/metube.service
|
cat <<EOF >/etc/systemd/system/metube.service
|
||||||
[Unit]
|
[Unit]
|
||||||
@@ -90,7 +84,7 @@ After=network.target
|
|||||||
Type=simple
|
Type=simple
|
||||||
WorkingDirectory=/opt/metube
|
WorkingDirectory=/opt/metube
|
||||||
EnvironmentFile=/opt/metube/.env
|
EnvironmentFile=/opt/metube/.env
|
||||||
ExecStart=/opt/metube/.venv/bin/pipenv run python3 app/main.py
|
ExecStart=/opt/metube/.venv/bin/python3 app/main.py
|
||||||
Restart=always
|
Restart=always
|
||||||
User=root
|
User=root
|
||||||
|
|
||||||
@@ -109,11 +103,12 @@ EOF
|
|||||||
msg_ok "Cleaned Up"
|
msg_ok "Cleaned Up"
|
||||||
|
|
||||||
msg_info "Starting ${APP} Service"
|
msg_info "Starting ${APP} Service"
|
||||||
systemctl enable -q --now metube
|
systemctl start metube
|
||||||
sleep 1
|
sleep 1
|
||||||
msg_ok "Started ${APP} Service"
|
msg_ok "Started ${APP} Service"
|
||||||
|
|
||||||
msg_ok "Updated Successfully!"
|
msg_ok "Updated Successfully!"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
30
ct/ntfy.sh
30
ct/ntfy.sh
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 python3-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" |
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ function update_script() {
|
|||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop ollama
|
systemctl stop ollama
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz
|
curl -fsSLO -C - https://ollama.com/download/ollama-linux-amd64.tgz
|
||||||
rm -rf /usr/lib/ollama
|
rm -rf /usr/lib/ollama
|
||||||
rm -rf /usr/bin/ollama
|
rm -rf /usr/bin/ollama
|
||||||
tar -C /usr -xzf ollama-linux-amd64.tgz
|
tar -C /usr -xzf ollama-linux-amd64.tgz
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ function update_script() {
|
|||||||
if check_for_gh_release "paymenter" "paymenter/paymenter"; then
|
if check_for_gh_release "paymenter" "paymenter/paymenter"; then
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
cd /opt/paymenter
|
cd /opt/paymenter
|
||||||
$STD php artisan p:upgrade --no-interaction
|
$STD php artisan app:upgrade --no-interaction
|
||||||
echo "${CHECK_UPDATE_RELEASE}" >~/.paymenter
|
echo "${CHECK_UPDATE_RELEASE}" >~/.paymenter
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
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
|
||||||
|
|||||||
79
ct/tunarr.sh
Normal file
79
ct/tunarr.sh
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
#!/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: chrisbenincasa
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://tunarr.com/
|
||||||
|
|
||||||
|
APP="Tunarr"
|
||||||
|
var_tags="${var_tags:-iptv}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
var_disk="${var_disk:-5}"
|
||||||
|
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/tunarr ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
if check_for_gh_release "tunarr" "chrisbenincasa/tunarr"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop tunarr
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
if [ -d "/usr/local/share/tunarr" ]; then
|
||||||
|
tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /usr/local/share/tunarr $STD
|
||||||
|
msg_ok "Backup Created"
|
||||||
|
else
|
||||||
|
msg_error "Backup failed: /usr/local/share/tunarr does not exist"
|
||||||
|
fi
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "singlefile" "latest" "/opt/tunarr" "*linux-x64"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start tunarr
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Update Successfully"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop tunarr
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
|
||||||
|
|
||||||
|
msg_info "Set ErsatzTV-ffmpeg links"
|
||||||
|
chmod +x /opt/ErsatzTV-ffmpeg/bin/*
|
||||||
|
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg
|
||||||
|
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffplay /usr/local/bin/ffplay
|
||||||
|
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe
|
||||||
|
msg_ok "ffmpeg links set"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start tunarr
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Update 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}:8000${CL}"
|
||||||
53
ct/upsnap.sh
Normal file
53
ct/upsnap.sh
Normal 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}"
|
||||||
@@ -9,7 +9,7 @@ APP="Wazuh"
|
|||||||
var_tags="${var_tags:-security;monitoring}"
|
var_tags="${var_tags:-security;monitoring}"
|
||||||
var_cpu="${var_cpu:-4}"
|
var_cpu="${var_cpu:-4}"
|
||||||
var_ram="${var_ram:-4096}"
|
var_ram="${var_ram:-4096}"
|
||||||
var_disk="${var_disk:-18}"
|
var_disk="${var_disk:-25}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|||||||
65
ct/zabbix.sh
65
ct/zabbix.sh
@@ -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
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE LXC Tag",
|
"name": "PVE LXC Tag",
|
||||||
"slug": "add-iptag",
|
"slug": "add-iptag",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 1,
|
"cpu": 1,
|
||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 4,
|
"hdd": 6,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE LXC Cleaner",
|
"name": "PVE LXC Cleaner",
|
||||||
"slug": "clean-lxcs",
|
"slug": "clean-lxcs",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Clean Orphaned LVM",
|
"name": "PVE Clean Orphaned LVM",
|
||||||
"slug": "clean-orphaned-lvm",
|
"slug": "clean-orphaned-lvm",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -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."
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Cron LXC Updater",
|
"name": "PVE Cron LXC Updater",
|
||||||
"slug": "cron-update-lxcs",
|
"slug": "cron-update-lxcs",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
@@ -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",
|
||||||
|
|||||||
@@ -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´"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE LXC Filesystem Trim",
|
"name": "PVE LXC Filesystem Trim",
|
||||||
"slug": "fstrim",
|
"slug": "fstrim",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
40
frontend/public/json/goaway.json
Normal file
40
frontend/public/json/goaway.json
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Host Backup",
|
"name": "PVE Host Backup",
|
||||||
"slug": "host-backup",
|
"slug": "host-backup",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
40
frontend/public/json/joplin-server.json
Normal file
40
frontend/public/json/joplin-server.json
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Kernel Clean",
|
"name": "PVE Kernel Clean",
|
||||||
"slug": "kernel-clean",
|
"slug": "kernel-clean",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Kernel Pin",
|
"name": "PVE Kernel Pin",
|
||||||
"slug": "kernel-pin",
|
"slug": "kernel-pin",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 4,
|
"hdd": 4,
|
||||||
"os": "Debian",
|
"os": "Debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Container LXC Deletion",
|
"name": "PVE LXC Deletion",
|
||||||
"slug": "lxc-delete",
|
"slug": "lxc-delete",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -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"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Processor Microcode",
|
"name": "PVE Processor Microcode",
|
||||||
"slug": "microcode",
|
"slug": "microcode",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Monitor-All",
|
"name": "PVE Monitor-All",
|
||||||
"slug": "monitor-all",
|
"slug": "monitor-all",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Netdata",
|
"name": "PVE Netdata",
|
||||||
"slug": "netdata",
|
"slug": "netdata",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 2,
|
"hdd": 2,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -31,5 +31,10 @@
|
|||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Script contains optional installation of Ollama.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Backup Server Processor Microcode",
|
"name": "PBS Processor Microcode",
|
||||||
"slug": "pbs-microcode",
|
"slug": "pbs-microcode",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Backup Server Post Install",
|
"name": "PBS Post Install",
|
||||||
"slug": "post-pbs-install",
|
"slug": "post-pbs-install",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
@@ -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": "The script will give options to Disable the Enterprise Repo, Add/Correct PBS Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Backup Server and Reboot PBS.",
|
"description": "The script is designed for Proxmox Backup Server (PBS) and will give options to Disable the Enterprise Repo, Add/Correct PBS Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Backup Server and Reboot PBS.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Mail Gateway Post Install",
|
"name": "PMG Post Install",
|
||||||
"slug": "post-pmg-install",
|
"slug": "post-pmg-install",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
@@ -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": "The script will give options to Disable the Enterprise Repo, Add/Correct PMG Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Mail Gateway and Reboot PMG.",
|
"description": "The script is designed for Proxmox Mail Gateway and will give options to Disable the Enterprise Repo, Add/Correct PMG Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Mail Gateway and Reboot PMG.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE Post Install",
|
"name": "PVE Post Install",
|
||||||
"slug": "post-pve-install",
|
"slug": "post-pve-install",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Backup Server",
|
"name": "Proxmox Backup Server (PBS)",
|
||||||
"slug": "proxmox-backup-server",
|
"slug": "proxmox-backup-server",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Datacenter Manager",
|
"name": "Proxmox Datacenter Manager (PDM)",
|
||||||
"slug": "proxmox-datacenter-manager",
|
"slug": "proxmox-datacenter-manager",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Mail Gateway",
|
"name": "Proxmox Mail Gateway (PMG)",
|
||||||
"slug": "proxmox-mail-gateway",
|
"slug": "proxmox-mail-gateway",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE CPU Scaling Governor",
|
"name": "PVE CPU Scaling Governor",
|
||||||
"slug": "scaling-governor",
|
"slug": "scaling-governor",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
35
frontend/public/json/tunarr.json
Normal file
35
frontend/public/json/tunarr.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Tunarr",
|
||||||
|
"slug": "tunarr",
|
||||||
|
"categories": [
|
||||||
|
13
|
||||||
|
],
|
||||||
|
"date_created": "2025-09-19",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"config_path": "/opt/tunarr/.env",
|
||||||
|
"interface_port": 8000,
|
||||||
|
"documentation": "https://tunarr.com/",
|
||||||
|
"website": "https://tunarr.com/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tunarr.webp",
|
||||||
|
"description": "Create a classic TV experience using your own media - IPTV backed by Plex/Jellyfin/Emby.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/tunarr.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 5,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE LXC Updater",
|
"name": "PVE LXC Updater",
|
||||||
"slug": "update-lxcs",
|
"slug": "update-lxcs",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
@@ -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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Update Repositories",
|
"name": "PVE Update Repositories",
|
||||||
"slug": "update-repo",
|
"slug": "update-repo",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
|
|||||||
40
frontend/public/json/upsnap.json
Normal file
40
frontend/public/json/upsnap.json
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -21,7 +21,7 @@
|
|||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 4,
|
"cpu": 4,
|
||||||
"ram": 4096,
|
"ram": 4096,
|
||||||
"hdd": 18,
|
"hdd": 25,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -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"
|
||||||
: ""
|
: ""
|
||||||
}`}
|
}`}
|
||||||
|
|||||||
@@ -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[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
62
install/goaway-install.sh
Normal file
62
install/goaway-install.sh
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
#!/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
|
||||||
|
for i in {1..30}; do
|
||||||
|
ADMIN_PASS=$(awk -F': ' "/Randomly generated admin password:/ {print \$2; exit}" /var/log/goaway.log)
|
||||||
|
[ -n "$ADMIN_PASS" ] && break
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
{
|
||||||
|
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"
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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)"
|
||||||
|
|
||||||
|
|||||||
98
install/joplin-server-install.sh
Normal file
98
install/joplin-server-install.sh
Normal 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"
|
||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ $STD apt-get install -y --no-install-recommends \
|
|||||||
g++ \
|
g++ \
|
||||||
musl-dev \
|
musl-dev \
|
||||||
ffmpeg \
|
ffmpeg \
|
||||||
git \
|
|
||||||
make \
|
make \
|
||||||
ca-certificates
|
ca-certificates
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
@@ -30,25 +29,29 @@ msg_ok "Installed Dependencies"
|
|||||||
PYTHON_VERSION="3.13" setup_uv
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
|
msg_info "Installing Deno"
|
||||||
|
export DENO_INSTALL="/usr/local"
|
||||||
|
curl -fsSL https://deno.land/install.sh | $STD sh -s -- -y
|
||||||
|
[[ ":$PATH:" != *":/usr/local/bin:"* ]] &&
|
||||||
|
echo 'export PATH="/usr/local/bin:$PATH"' >>~/.bashrc &&
|
||||||
|
source ~/.bashrc
|
||||||
|
msg_ok "Installed Deno"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "metube" "alexta69/metube" "tarball" "latest"
|
||||||
|
|
||||||
msg_info "Installing MeTube"
|
msg_info "Installing MeTube"
|
||||||
$STD git clone https://github.com/alexta69/metube /opt/metube
|
|
||||||
cd /opt/metube/ui
|
cd /opt/metube/ui
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD node_modules/.bin/ng build
|
$STD node_modules/.bin/ng build
|
||||||
cd /opt/metube
|
cd /opt/metube
|
||||||
$STD uv venv /opt/metube/.venv
|
$STD uv sync --frozen --no-dev
|
||||||
$STD /opt/metube/.venv/bin/python -m ensurepip --upgrade
|
|
||||||
$STD /opt/metube/.venv/bin/python -m pip install --upgrade pip
|
|
||||||
$STD /opt/metube/.venv/bin/python -m pip install pipenv
|
|
||||||
$STD /opt/metube/.venv/bin/pipenv install
|
|
||||||
$STD /opt/metube/.venv/bin/pipenv update yt-dlp
|
|
||||||
|
|
||||||
mkdir -p /opt/metube_downloads /opt/metube_downloads/.metube /opt/metube_downloads/music /opt/metube_downloads/videos
|
mkdir -p /opt/metube_downloads /opt/metube_downloads/.metube /opt/metube_downloads/music /opt/metube_downloads/videos
|
||||||
cat <<EOF >/opt/metube/.env
|
cat <<EOF >/opt/metube/.env
|
||||||
DOWNLOAD_DIR=/opt/metube_downloads
|
DOWNLOAD_DIR=/opt/metube_downloads
|
||||||
STATE_DIR=/opt/metube_downloads/.metube
|
STATE_DIR=/opt/metube_downloads/.metube
|
||||||
TEMP_DIR=/opt/metube_downloads
|
TEMP_DIR=/opt/metube_downloads
|
||||||
YTDL_OPTIONS={"trim_file_name":10}
|
YTDL_OPTIONS={"trim_file_name":10,"extractor_args":{"youtube":{"player_client":["default","-tv_simply"]}}}
|
||||||
EOF
|
EOF
|
||||||
msg_ok "Installed MeTube"
|
msg_ok "Installed MeTube"
|
||||||
|
|
||||||
@@ -62,7 +65,7 @@ After=network.target
|
|||||||
Type=simple
|
Type=simple
|
||||||
WorkingDirectory=/opt/metube
|
WorkingDirectory=/opt/metube
|
||||||
EnvironmentFile=/opt/metube/.env
|
EnvironmentFile=/opt/metube/.env
|
||||||
ExecStart=/opt/metube/.venv/bin/pipenv run python3 app/main.py
|
ExecStart=/opt/metube/.venv/bin/python3 app/main.py
|
||||||
Restart=always
|
Restart=always
|
||||||
User=root
|
User=root
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -41,14 +41,14 @@ 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"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt
|
read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Ollama"
|
msg_info "Installing Ollama"
|
||||||
curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz
|
curl -fsSLO -C - https://ollama.com/download/ollama-linux-amd64.tgz
|
||||||
tar -C /usr -xzf ollama-linux-amd64.tgz
|
tar -C /usr -xzf ollama-linux-amd64.tgz
|
||||||
rm -rf ollama-linux-amd64.tgz
|
rm -rf ollama-linux-amd64.tgz
|
||||||
cat <<EOF >/etc/systemd/system/ollama.service
|
cat <<EOF >/etc/systemd/system/ollama.service
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ $STD apt-get install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="common,mysql,fpm,redis" setup_php
|
PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="common,mysql,redis" setup_php
|
||||||
setup_composer
|
setup_composer
|
||||||
fetch_and_deploy_gh_release "paymenter" "paymenter/paymenter" "prebuild" "latest" "/opt/paymenter" "paymenter.tar.gz"
|
fetch_and_deploy_gh_release "paymenter" "paymenter/paymenter" "prebuild" "latest" "/opt/paymenter" "paymenter.tar.gz"
|
||||||
chmod -R 755 /opt/paymenter/storage/* /opt/paymenter/bootstrap/cache/
|
chmod -R 755 /opt/paymenter/storage/* /opt/paymenter/bootstrap/cache/
|
||||||
@@ -30,7 +30,7 @@ msg_info "Setting up database"
|
|||||||
DB_NAME=paymenter
|
DB_NAME=paymenter
|
||||||
DB_USER=paymenter
|
DB_USER=paymenter
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql
|
mariadb-tzinfo-to-sql /usr/share/zoneinfo | mariadb mysql
|
||||||
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
|
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
|
||||||
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
||||||
$STD mariadb -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost' WITH GRANT OPTION;"
|
$STD mariadb -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost' WITH GRANT OPTION;"
|
||||||
@@ -108,8 +108,8 @@ RestartSec=5s
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable --now paymenter
|
systemctl enable -q --now paymenter
|
||||||
systemctl enable --now redis-server
|
systemctl enable -q --now redis-server
|
||||||
msg_ok "Setup Service"
|
msg_ok "Setup Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -30,12 +30,13 @@ $STD apt-get install -y clickhouse-server clickhouse-client
|
|||||||
msg_ok "Setup ClickHouse"
|
msg_ok "Setup ClickHouse"
|
||||||
|
|
||||||
msg_info "Setting up Zookeeper"
|
msg_info "Setting up Zookeeper"
|
||||||
curl -fsSL "https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz" -o "$HOME/zookeeper.tar.gz"
|
ZOOURL=$(curl -fsSL https://dlcdn.apache.org/zookeeper/current/ | grep -o 'apache-zookeeper-[0-9.]\+-bin\.tar\.gz' | head -n1)
|
||||||
|
curl -fsSL "https://dlcdn.apache.org/zookeeper/current/$ZOOURL" -o ~/zookeeper.tar.gz
|
||||||
tar -xzf "$HOME/zookeeper.tar.gz" -C "$HOME"
|
tar -xzf "$HOME/zookeeper.tar.gz" -C "$HOME"
|
||||||
mkdir -p /opt/zookeeper
|
mkdir -p /opt/zookeeper
|
||||||
mkdir -p /var/lib/zookeeper
|
mkdir -p /var/lib/zookeeper
|
||||||
mkdir -p /var/log/zookeeper
|
mkdir -p /var/log/zookeeper
|
||||||
cp -r ~/apache-zookeeper-3.8.4-bin/* /opt/zookeeper
|
cp -r ~/apache-zookeeper-*-bin/* /opt/zookeeper
|
||||||
|
|
||||||
cat <<EOF >/opt/zookeeper/conf/zoo.cfg
|
cat <<EOF >/opt/zookeeper/conf/zoo.cfg
|
||||||
tickTime=2000
|
tickTime=2000
|
||||||
@@ -256,7 +257,7 @@ customize
|
|||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf ~/zookeeper.tar.gz
|
rm -rf ~/zookeeper.tar.gz
|
||||||
rm -rf ~/apache-zookeeper-3.8.4-bin
|
rm -rf ~/apache-zookeeper-*-bin
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
101
install/tunarr-install.sh
Normal file
101
install/tunarr-install.sh
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 tteck
|
||||||
|
# Author: chrisbenincasa
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://tunarr.com/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Setting Up Hardware Acceleration"
|
||||||
|
if [[ "$CTTYPE" == "0" ]]; then
|
||||||
|
$STD adduser "$(id -un)" video
|
||||||
|
$STD adduser "$(id -un)" render
|
||||||
|
fi
|
||||||
|
msg_ok "Base Hardware Acceleration Set Up"
|
||||||
|
|
||||||
|
read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 13 only)? <y/N> " prompt
|
||||||
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
|
msg_info "Installing Intel Hardware Acceleration (non-free)"
|
||||||
|
cat <<'EOF' >/etc/apt/sources.list.d/non-free.sources
|
||||||
|
Types: deb deb-src
|
||||||
|
URIs: http://deb.debian.org/debian
|
||||||
|
Suites: trixie
|
||||||
|
Components: non-free non-free-firmware
|
||||||
|
|
||||||
|
Types: deb deb-src
|
||||||
|
URIs: http://deb.debian.org/debian-security
|
||||||
|
Suites: trixie-security
|
||||||
|
Components: non-free non-free-firmware
|
||||||
|
|
||||||
|
Types: deb deb-src
|
||||||
|
URIs: http://deb.debian.org/debian
|
||||||
|
Suites: trixie-updates
|
||||||
|
Components: non-free non-free-firmware
|
||||||
|
EOF
|
||||||
|
|
||||||
|
$STD apt update
|
||||||
|
$STD apt -y install \
|
||||||
|
intel-media-va-driver-non-free \
|
||||||
|
ocl-icd-libopencl1 \
|
||||||
|
mesa-opencl-icd \
|
||||||
|
mesa-va-drivers \
|
||||||
|
libvpl2 \
|
||||||
|
vainfo \
|
||||||
|
intel-gpu-tools
|
||||||
|
else
|
||||||
|
msg_info "Installing Intel Hardware Acceleration (open packages)"
|
||||||
|
$STD apt -y install \
|
||||||
|
va-driver-all \
|
||||||
|
ocl-icd-libopencl1 \
|
||||||
|
mesa-opencl-icd \
|
||||||
|
mesa-va-drivers \
|
||||||
|
vainfo \
|
||||||
|
intel-gpu-tools
|
||||||
|
fi
|
||||||
|
msg_ok "Installed and Set Up Intel Hardware Acceleration"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "singlefile" "latest" "/opt/tunarr" "*linux-x64"
|
||||||
|
fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
|
||||||
|
|
||||||
|
msg_info "Set ErsatzTV-ffmpeg links"
|
||||||
|
chmod +x /opt/ErsatzTV-ffmpeg/bin/*
|
||||||
|
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffmpeg /usr/bin/ffmpeg
|
||||||
|
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffplay /usr/bin/ffplay
|
||||||
|
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/bin/ffprobe
|
||||||
|
msg_ok "ffmpeg links set"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/tunarr.service
|
||||||
|
[Unit]
|
||||||
|
Description=Tunarr Service
|
||||||
|
After=multi-user.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/tunarr
|
||||||
|
ExecStart=/opt/tunarr/tunarr
|
||||||
|
Restart=always
|
||||||
|
RestartSec=30
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now tunarr
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt -y autoremove
|
||||||
|
$STD apt -y autoclean
|
||||||
|
$STD apt -y clean
|
||||||
|
msg_ok "Cleaned"
|
||||||
56
install/upsnap-install.sh
Normal file
56
install/upsnap-install.sh
Normal 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"
|
||||||
@@ -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"
|
||||||
|
|||||||
@@ -42,11 +42,11 @@ error_handler() {
|
|||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if the shell is using bash
|
# Check if the current shell is using bash
|
||||||
shell_check() {
|
shell_check() {
|
||||||
if [[ "$(basename "$SHELL")" != "bash" ]]; then
|
if [[ "$(ps -p $$ -o comm=)" != "bash" ]]; then
|
||||||
clear
|
clear
|
||||||
msg_error "Your default shell is currently not set to Bash. To use these scripts, please switch to the Bash shell."
|
msg_error "Your default shell is not bash. Please report this to our github issues or discord."
|
||||||
echo -e "\nExiting..."
|
echo -e "\nExiting..."
|
||||||
sleep 2
|
sleep 2
|
||||||
exit
|
exit
|
||||||
|
|||||||
@@ -306,6 +306,9 @@ function fetch_and_deploy_gh_release() {
|
|||||||
|
|
||||||
msg_info "Fetching GitHub release: $app ($version)"
|
msg_info "Fetching GitHub release: $app ($version)"
|
||||||
|
|
||||||
|
local clean_install=false
|
||||||
|
[[ -n "${CLEAN_INSTALL:-}" && "$CLEAN_INSTALL" == "1" ]] && clean_install=true
|
||||||
|
|
||||||
### Tarball Mode ###
|
### Tarball Mode ###
|
||||||
if [[ "$mode" == "tarball" || "$mode" == "source" ]]; then
|
if [[ "$mode" == "tarball" || "$mode" == "source" ]]; then
|
||||||
url=$(echo "$json" | jq -r '.tarball_url // empty')
|
url=$(echo "$json" | jq -r '.tarball_url // empty')
|
||||||
@@ -319,6 +322,10 @@ function fetch_and_deploy_gh_release() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mkdir -p "$target"
|
mkdir -p "$target"
|
||||||
|
if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then
|
||||||
|
rm -rf "${target:?}/"*
|
||||||
|
fi
|
||||||
|
|
||||||
tar -xzf "$tmpdir/$filename" -C "$tmpdir"
|
tar -xzf "$tmpdir/$filename" -C "$tmpdir"
|
||||||
local unpack_dir
|
local unpack_dir
|
||||||
unpack_dir=$(find "$tmpdir" -mindepth 1 -maxdepth 1 -type d | head -n1)
|
unpack_dir=$(find "$tmpdir" -mindepth 1 -maxdepth 1 -type d | head -n1)
|
||||||
@@ -425,6 +432,9 @@ function fetch_and_deploy_gh_release() {
|
|||||||
local unpack_tmp
|
local unpack_tmp
|
||||||
unpack_tmp=$(mktemp -d)
|
unpack_tmp=$(mktemp -d)
|
||||||
mkdir -p "$target"
|
mkdir -p "$target"
|
||||||
|
if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then
|
||||||
|
rm -rf "${target:?}/"*
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "$filename" == *.zip ]]; then
|
if [[ "$filename" == *.zip ]]; then
|
||||||
if ! command -v unzip &>/dev/null; then
|
if ! command -v unzip &>/dev/null; then
|
||||||
@@ -1322,7 +1332,7 @@ function setup_mysql() {
|
|||||||
CURRENT_OS="$(awk -F= '/^ID=/{print $2}' /etc/os-release)"
|
CURRENT_OS="$(awk -F= '/^ID=/{print $2}' /etc/os-release)"
|
||||||
|
|
||||||
if command -v mysql >/dev/null; then
|
if command -v mysql >/dev/null; then
|
||||||
CURRENT_VERSION="$(mysql --version | grep -oP 'Distrib\s+\K[0-9]+\.[0-9]+')"
|
CURRENT_VERSION="$(mysql --version | grep -oP '[0-9]+\.[0-9]+' | head -n1)"
|
||||||
if [[ "$CURRENT_VERSION" != "$MYSQL_VERSION" ]]; then
|
if [[ "$CURRENT_VERSION" != "$MYSQL_VERSION" ]]; then
|
||||||
$STD msg_info "MySQL $CURRENT_VERSION will be upgraded to $MYSQL_VERSION"
|
$STD msg_info "MySQL $CURRENT_VERSION will be upgraded to $MYSQL_VERSION"
|
||||||
NEED_INSTALL=true
|
NEED_INSTALL=true
|
||||||
@@ -1960,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
|
||||||
@@ -2012,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)"
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user