mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-06 11:22:49 +00:00
Compare commits
105 Commits
2025-09-12
...
2025-09-19
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fef7786714 | ||
|
|
0dfd337a9a | ||
|
|
d99862fa24 | ||
|
|
ac08d385c0 | ||
|
|
7a9de76acb | ||
|
|
35f3f043a7 | ||
|
|
4276df26d7 | ||
|
|
5fec573533 | ||
|
|
ebd269a808 | ||
|
|
532c0a95bb | ||
|
|
c078b11aa9 | ||
|
|
ab8b025824 | ||
|
|
e2044a0572 | ||
|
|
59e65eaba3 | ||
|
|
a2306d6b32 | ||
|
|
3e71af1895 | ||
|
|
8a3b41867b | ||
|
|
b4b9efeff2 | ||
|
|
5e2168b2d1 | ||
|
|
c00c1deb79 | ||
|
|
37e3739bd2 | ||
|
|
f5eda37397 | ||
|
|
9e42c801f1 | ||
|
|
e4d6dfc885 | ||
|
|
14894f84b6 | ||
|
|
b5f70e6e77 | ||
|
|
2919ce16f1 | ||
|
|
38cf6b2f46 | ||
|
|
c390fb925d | ||
|
|
a28fdac3f0 | ||
|
|
41b27b31dc | ||
|
|
7ef8afe4d2 | ||
|
|
694d9c203e | ||
|
|
76dcc45e9f | ||
|
|
a0952e9f69 | ||
|
|
3bd6b6e540 | ||
|
|
61be53cc26 | ||
|
|
02eda516df | ||
|
|
25213fabaa | ||
|
|
ad8a4f63c4 | ||
|
|
bcce0e20c1 | ||
|
|
515c4073c4 | ||
|
|
30e22ff661 | ||
|
|
8265abfb20 | ||
|
|
b40d061f3e | ||
|
|
efe598d6ec | ||
|
|
82caa8769e | ||
|
|
7961023f8c | ||
|
|
ea58fdb7e0 | ||
|
|
238895534a | ||
|
|
cc1c2f84ca | ||
|
|
3aff0d9d7e | ||
|
|
7cd332680a | ||
|
|
382e679842 | ||
|
|
a3b5f798de | ||
|
|
c22630c887 | ||
|
|
542f260f31 | ||
|
|
a40cc130bd | ||
|
|
7311f1b843 | ||
|
|
acd9bb1357 | ||
|
|
e2e2459bfd | ||
|
|
caeba37a2e | ||
|
|
44a8c70437 | ||
|
|
1860f4b2ee | ||
|
|
bf0bac1523 | ||
|
|
b6bfe9a4b6 | ||
|
|
634386ea50 | ||
|
|
020c8a76c1 | ||
|
|
8f738e2d26 | ||
|
|
e5e7547eca | ||
|
|
a383aa5679 | ||
|
|
ce68253564 | ||
|
|
65e561dcbe | ||
|
|
dffb291a4f | ||
|
|
f3bcb3211c | ||
|
|
7c22fe5f46 | ||
|
|
600e739005 | ||
|
|
31be78878f | ||
|
|
e47d62d575 | ||
|
|
ec58d6c622 | ||
|
|
bac2b6eade | ||
|
|
bb289203c6 | ||
|
|
fe97056d19 | ||
|
|
65ba9192d9 | ||
|
|
8a096b9e6e | ||
|
|
1c6efa528b | ||
|
|
89c3410f6f | ||
|
|
34b1d70762 | ||
|
|
1860847153 | ||
|
|
58905bf94d | ||
|
|
7d1788a079 | ||
|
|
83e04257d9 | ||
|
|
11c33e34d2 | ||
|
|
52df77cab5 | ||
|
|
17f6264a03 | ||
|
|
9463b0b808 | ||
|
|
eba83f3848 | ||
|
|
e3f6ea73c3 | ||
|
|
06247e742c | ||
|
|
4606782d6b | ||
|
|
a988acf2d5 | ||
|
|
5f44007372 | ||
|
|
8b87272e38 | ||
|
|
ceccf08f69 | ||
|
|
5a80cd7e02 |
38
.github/label-priority.json
generated
vendored
Normal file
38
.github/label-priority.json
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"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,3 +112,119 @@ 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(", ")}`
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
114
CHANGELOG.md
114
CHANGELOG.md
@@ -10,8 +10,122 @@
|
|||||||
> [!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-20
|
||||||
|
|
||||||
|
## 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
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Alpine-Caddy [@tremor021](https://github.com/tremor021) ([#7711](https://github.com/community-scripts/ProxmoxVE/pull/7711))
|
||||||
|
- pve-tool: execute.sh by @jeroenzwart [@MickLesk](https://github.com/MickLesk) ([#7708](https://github.com/community-scripts/ProxmoxVE/pull/7708))
|
||||||
|
- GlobaLeaks ([#7707](https://github.com/community-scripts/ProxmoxVE/pull/7707))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Delay chmod after updating beszel [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7725](https://github.com/community-scripts/ProxmoxVE/pull/7725))
|
||||||
|
- Remove redundant globaleaks configuration [@evilaliv3](https://github.com/evilaliv3) ([#7723](https://github.com/community-scripts/ProxmoxVE/pull/7723))
|
||||||
|
- Gatus: check for GO path before update [@vhsdream](https://github.com/vhsdream) ([#7705](https://github.com/community-scripts/ProxmoxVE/pull/7705))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Cloudflared: Bump to Debian 13 [@MickLesk](https://github.com/MickLesk) ([#7719](https://github.com/community-scripts/ProxmoxVE/pull/7719))
|
||||||
|
- AdGuard Home: Bump to Debian 13 [@MickLesk](https://github.com/MickLesk) ([#7720](https://github.com/community-scripts/ProxmoxVE/pull/7720))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Immich: Debian Trixie [@vhsdream](https://github.com/vhsdream) ([#7728](https://github.com/community-scripts/ProxmoxVE/pull/7728))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Add Warning for Containerized Home Assistant [@ZaxLofful](https://github.com/ZaxLofful) ([#7704](https://github.com/community-scripts/ProxmoxVE/pull/7704))
|
||||||
|
|
||||||
|
## 2025-09-17
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- beszel: fix: binary permission after upgrade [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7697](https://github.com/community-scripts/ProxmoxVE/pull/7697))
|
||||||
|
- RabbitMQ: Update repositories [@tremor021](https://github.com/tremor021) ([#7689](https://github.com/community-scripts/ProxmoxVE/pull/7689))
|
||||||
|
- Komodo: Add docker compose pull for actually updating docker container [@hanneshier](https://github.com/hanneshier) ([#7682](https://github.com/community-scripts/ProxmoxVE/pull/7682))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Debian-LXC: Bump to Debian 13 Trixie [@MickLesk](https://github.com/MickLesk) ([#7683](https://github.com/community-scripts/ProxmoxVE/pull/7683))
|
||||||
|
- Bump Immich to v1.142.1 [@vhsdream](https://github.com/vhsdream) ([#7675](https://github.com/community-scripts/ProxmoxVE/pull/7675))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Grist [@tremor021](https://github.com/tremor021) ([#7681](https://github.com/community-scripts/ProxmoxVE/pull/7681))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- #### 📂 Github
|
||||||
|
|
||||||
|
- Improve: SECURITY.md for clarity and detail + Adding PVE9 as supported [@MickLesk](https://github.com/MickLesk) ([#7690](https://github.com/community-scripts/ProxmoxVE/pull/7690))
|
||||||
|
|
||||||
|
## 2025-09-16
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Improve OpenWrt VM boot and readiness check [@MickLesk](https://github.com/MickLesk) ([#7669](https://github.com/community-scripts/ProxmoxVE/pull/7669))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- hortusfox: fix update check [@MickLesk](https://github.com/MickLesk) ([#7667](https://github.com/community-scripts/ProxmoxVE/pull/7667))
|
||||||
|
|
||||||
|
## 2025-09-15
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- SigNoz ([#7648](https://github.com/community-scripts/ProxmoxVE/pull/7648))
|
||||||
|
- Scraparr ([#7644](https://github.com/community-scripts/ProxmoxVE/pull/7644))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- vm: move pv installation into ensure_pv function [@MickLesk](https://github.com/MickLesk) ([#7642](https://github.com/community-scripts/ProxmoxVE/pull/7642))
|
||||||
|
- Cloudflare-DDNS: Fix the IP6_PROVIDER variable [@hugodantas](https://github.com/hugodantas) ([#7660](https://github.com/community-scripts/ProxmoxVE/pull/7660))
|
||||||
|
- Wikijs: Bump Node.js version to 22 [@MickLesk](https://github.com/MickLesk) ([#7643](https://github.com/community-scripts/ProxmoxVE/pull/7643))
|
||||||
|
|
||||||
|
## 2025-09-14
|
||||||
|
|
||||||
## 2025-09-13
|
## 2025-09-13
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Palmr: hotfix #7622 [@vhsdream](https://github.com/vhsdream) ([#7625](https://github.com/community-scripts/ProxmoxVE/pull/7625))
|
||||||
|
- ollama: fix: ccurl continue on interrupts [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7620](https://github.com/community-scripts/ProxmoxVE/pull/7620))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- pdm: refactor for beta version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7619](https://github.com/community-scripts/ProxmoxVE/pull/7619))
|
||||||
|
- Immich: bump to v1.142.0 [@vhsdream](https://github.com/vhsdream) ([#7594](https://github.com/community-scripts/ProxmoxVE/pull/7594))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- fix: tagline grammar [@jonathanwuki](https://github.com/jonathanwuki) ([#7621](https://github.com/community-scripts/ProxmoxVE/pull/7621))
|
||||||
|
- fix: grammar/capitalization for links and taglines [@jonathanwuki](https://github.com/jonathanwuki) ([#7609](https://github.com/community-scripts/ProxmoxVE/pull/7609))
|
||||||
|
|
||||||
## 2025-09-12
|
## 2025-09-12
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
54
SECURITY.md
54
SECURITY.md
@@ -1,24 +1,64 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
## Supported Versions
|
## Supported Versions
|
||||||
This project currently supports the following versions of Proxmox VE:
|
|
||||||
|
This project currently supports the following versions of Proxmox VE (PVE):
|
||||||
|
|
||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
| ------- | ------------------ |
|
| ------- | ------------------ |
|
||||||
|
| 9.0.x | :white_check_mark: |
|
||||||
| 8.4.x | :white_check_mark: |
|
| 8.4.x | :white_check_mark: |
|
||||||
| 8.3.x | :white_check_mark: |
|
| 8.3.x | :white_check_mark: |
|
||||||
| 8.2.x | :white_check_mark: |
|
| 8.2.x | :white_check_mark: |
|
||||||
| 8.1.x | :white_check_mark: |
|
| 8.1.x | :white_check_mark: |
|
||||||
| 8.0.x | Limited support* ❕|
|
| 8.0.x | Limited support* ❕ |
|
||||||
| < 8.0 | :x: |
|
| < 8.0 | :x: |
|
||||||
|
|
||||||
*Version 8.0.x has limited support. Security updates may not be provided for all issues in this version.
|
*Version 8.0.x has limited support. Security updates may not be provided for all issues affecting this version.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
Security vulnerabilities shouldn’t be reported publicly to prevent potential exploitation. Instead, please report any vulnerabilities privately by reaching out directly to us. You can either join our [Discord server](https://discord.gg/jsYVk5JBxq) and send a direct message to a maintainer or contact us via email at contact@community-scripts.org. Be sure to include a detailed description of the vulnerability and the steps to reproduce it. Thank you for helping us keep our project secure!
|
Security vulnerabilities must not be reported publicly to avoid potential exploitation.
|
||||||
|
Instead, please report them privately via one of the following channels:
|
||||||
|
|
||||||
Once a vulnerability has been reported, the project maintainers will review it and acknowledge the report within 7 business days. We will then work to address the vulnerability and provide a fix as soon as possible. Depending on the severity of the issue, a patch may be released immediately or included in the next scheduled update.
|
- **Discord**: Join our [Discord server](https://discord.gg/jsYVk5JBxq) and send a direct message to a maintainer.
|
||||||
|
- **Email**: Write to us at **contact@community-scripts.org** with the subject line:
|
||||||
|
`Vulnerability Report - <Project/Script Name>`.
|
||||||
|
|
||||||
Please note that not all reported vulnerabilities may be accepted. The project maintainers reserve the right to decline a vulnerability report if it is deemed to be a low-risk issue or if it conflicts with the project's design or architecture. In such cases, we will provide an explanation for the decision.
|
When reporting a vulnerability, please provide:
|
||||||
|
|
||||||
If you have any questions or concerns about this security policy, please don't hesitate to contact the project maintainers.
|
- A clear description of the issue
|
||||||
|
- Steps to reproduce the vulnerability
|
||||||
|
- Affected versions or environments
|
||||||
|
- (Optional) Suggested fixes or workarounds
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Response Process
|
||||||
|
|
||||||
|
1. **Acknowledgment**
|
||||||
|
- We will review and acknowledge your report within **7 business days**.
|
||||||
|
|
||||||
|
2. **Assessment**
|
||||||
|
- The maintainers will verify the issue and classify its severity.
|
||||||
|
- Depending on impact, a patch may be released immediately or scheduled for the next update.
|
||||||
|
|
||||||
|
3. **Resolution**
|
||||||
|
- Critical security fixes will be prioritized.
|
||||||
|
- Non-critical issues may be deferred or declined with an explanation.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Disclaimer
|
||||||
|
|
||||||
|
Not all reported issues will be treated as vulnerabilities.
|
||||||
|
Reports may be declined if they are deemed:
|
||||||
|
- Low-risk
|
||||||
|
- Out of project scope
|
||||||
|
- Conflicting with intended design or architecture
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
If you have any questions or concerns about this security policy, please reach out to the maintainers through the contact options above.
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -27,7 +27,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_error "Adguard Home should be updated via the user interface."
|
msg_error "Adguard Home can only be updated via the user interface."
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
47
ct/alpine-caddy.sh
Normal file
47
ct/alpine-caddy.sh
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
#!/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: cobalt (cobaltgit)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://caddyserver.com/
|
||||||
|
|
||||||
|
APP="Alpine-Caddy"
|
||||||
|
var_tags="${var_tags:-webserver}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-256}"
|
||||||
|
var_disk="${var_disk:-3}"
|
||||||
|
var_os="${var_os:-alpine}"
|
||||||
|
var_version="${var_version:-3.22}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /etc/caddy ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Updating $APP LXC"
|
||||||
|
$STD apk -U upgrade
|
||||||
|
msg_ok "Updated $APP LXC"
|
||||||
|
|
||||||
|
msg_info "Restarting Caddy"
|
||||||
|
rc-service caddy restart
|
||||||
|
msg_ok "Restarted Caddy"
|
||||||
|
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}:80${CL}"
|
||||||
@@ -33,6 +33,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating $APP"
|
msg_info "Updating $APP"
|
||||||
$STD /opt/beszel/beszel update
|
$STD /opt/beszel/beszel update
|
||||||
|
sleep 2 && chmod +x /opt/beszel/beszel
|
||||||
msg_ok "Updated $APP"
|
msg_ok "Updated $APP"
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting $APP"
|
||||||
|
|||||||
@@ -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,13 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -d /var ]]; then
|
if [[ ! -f /etc/systemd/system/cloudflared.service ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -28,8 +28,8 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,11 @@ function update_script() {
|
|||||||
systemctl stop gatus
|
systemctl stop gatus
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
if [[ :$PATH: != *":/usr/local/bin:"* ]]; then
|
||||||
|
echo 'export PATH="/usr/local/bin:$PATH"' >>~/.bashrc
|
||||||
|
source ~/.bashrc
|
||||||
|
fi
|
||||||
|
|
||||||
mv /opt/gatus/config/config.yaml /opt
|
mv /opt/gatus/config/config.yaml /opt
|
||||||
rm -rf /opt/gatus
|
rm -rf /opt/gatus
|
||||||
fetch_and_deploy_gh_release "gatus" "TwiN/gatus"
|
fetch_and_deploy_gh_release "gatus" "TwiN/gatus"
|
||||||
|
|||||||
43
ct/globaleaks.sh
Normal file
43
ct/globaleaks.sh
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 communtiy-scripts ORG
|
||||||
|
# Author: Giovanni Pellerano (evilaliv3)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/globaleaks/globaleaks-whistleblowing-software
|
||||||
|
|
||||||
|
APP="GlobaLeaks"
|
||||||
|
var_tags="${var_tags:-whistleblowing-software}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -f /usr/sbin/globaleaks ]]; then
|
||||||
|
msg_error "No ${APP} installation found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating $APP LXC"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt -y upgrade
|
||||||
|
msg_ok "Updated $APP LXC"
|
||||||
|
}
|
||||||
|
|
||||||
|
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}https://${IP}${CL}"
|
||||||
52
ct/grist.sh
52
ct/grist.sh
@@ -1,5 +1,8 @@
|
|||||||
#!/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 community-scripts ORG
|
||||||
|
# Author: cfurrow | Co-Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/gristlabs/grist-core
|
# Source: https://github.com/gristlabs/grist-core
|
||||||
|
|
||||||
APP="Grist"
|
APP="Grist"
|
||||||
@@ -26,57 +29,34 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/gristlabs/grist-core/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
if check_for_gh_release "grist" "gristlabs/grist-core"; then
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
|
||||||
|
|
||||||
msg_info "Stopping ${APP} Service"
|
msg_info "Stopping ${APP} Service"
|
||||||
systemctl stop grist
|
systemctl stop grist
|
||||||
msg_ok "Stopped ${APP} Service"
|
msg_ok "Stopped ${APP} Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
msg_info "Creating backup"
|
||||||
|
rm -rf /opt/grist_bak
|
||||||
cd /opt
|
|
||||||
rm -rf grist_bak
|
|
||||||
mv grist grist_bak
|
mv grist grist_bak
|
||||||
curl -fsSL "https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip")
|
msg_ok "Backup created"
|
||||||
$STD unzip v$RELEASE.zip
|
|
||||||
mv grist-core-${RELEASE} grist
|
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "grist" "gristlabs/grist-core" "tarball"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
mkdir -p grist/docs
|
mkdir -p grist/docs
|
||||||
|
cp -n /opt/grist_bak/.env /opt/grist/.env
|
||||||
cp -n grist_bak/.env grist/.env || true
|
cp -r /opt/grist_bak/docs/* /opt/grist/docs/
|
||||||
cp -r grist_bak/docs/* grist/docs/ || true
|
cp /opt/grist_bak/grist-sessions.db /opt/grist/grist-sessions.db
|
||||||
cp grist_bak/grist-sessions.db grist/grist-sessions.db || true
|
cp /opt/grist_bak/landing.db /opt/grist/landing.db
|
||||||
cp grist_bak/landing.db grist/landing.db || true
|
|
||||||
|
|
||||||
cd grist
|
|
||||||
msg_info "Installing Dependencies"
|
|
||||||
$STD yarn install
|
$STD yarn install
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
msg_info "Building"
|
|
||||||
$STD yarn run build:prod
|
$STD yarn run build:prod
|
||||||
msg_ok "Done building"
|
|
||||||
|
|
||||||
msg_info "Installing Python"
|
|
||||||
$STD yarn run install:python
|
$STD yarn run install:python
|
||||||
msg_ok "Installed Python"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP} Service"
|
msg_info "Starting ${APP} Service"
|
||||||
systemctl start grist
|
systemctl start grist
|
||||||
msg_ok "Started ${APP} Service"
|
msg_ok "Started ${APP} Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_ok "Updated Successfully"
|
||||||
rm -rf /opt/v$RELEASE.zip
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
|
|
||||||
msg_ok "Updated Successfully!\n"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
6
ct/headers/alpine-caddy
Normal file
6
ct/headers/alpine-caddy
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
___ __ _ ______ __ __
|
||||||
|
/ | / /___ (_)___ ___ / ____/___ _____/ /___/ /_ __
|
||||||
|
/ /| | / / __ \/ / __ \/ _ \______/ / / __ `/ __ / __ / / / /
|
||||||
|
/ ___ |/ / /_/ / / / / / __/_____/ /___/ /_/ / /_/ / /_/ / /_/ /
|
||||||
|
/_/ |_/_/ .___/_/_/ /_/\___/ \____/\__,_/\__,_/\__,_/\__, /
|
||||||
|
/_/ /____/
|
||||||
6
ct/headers/globaleaks
Normal file
6
ct/headers/globaleaks
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
________ __ __ __
|
||||||
|
/ ____/ /___ / /_ ____ _/ / ___ ____ _/ /_______
|
||||||
|
/ / __/ / __ \/ __ \/ __ `/ / / _ \/ __ `/ //_/ ___/
|
||||||
|
/ /_/ / / /_/ / /_/ / /_/ / /___/ __/ /_/ / ,< (__ )
|
||||||
|
\____/_/\____/_.___/\__,_/_____/\___/\__,_/_/|_/____/
|
||||||
|
|
||||||
6
ct/headers/scraparr
Normal file
6
ct/headers/scraparr
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_____
|
||||||
|
/ ___/______________ _____ ____ ___________
|
||||||
|
\__ \/ ___/ ___/ __ `/ __ \/ __ `/ ___/ ___/
|
||||||
|
___/ / /__/ / / /_/ / /_/ / /_/ / / / /
|
||||||
|
/____/\___/_/ \__,_/ .___/\__,_/_/ /_/
|
||||||
|
/_/
|
||||||
6
ct/headers/signoz
Normal file
6
ct/headers/signoz
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_____ _ _ __
|
||||||
|
/ ___/(_)___ _/ | / /___ ____
|
||||||
|
\__ \/ / __ `/ |/ / __ \/_ /
|
||||||
|
___/ / / /_/ / /| / /_/ / / /_
|
||||||
|
/____/_/\__, /_/ |_/\____/ /___/
|
||||||
|
/____/
|
||||||
6
ct/headers/tunarr
Normal file
6
ct/headers/tunarr
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
______
|
||||||
|
/_ __/_ ______ ____ ___________
|
||||||
|
/ / / / / / __ \/ __ `/ ___/ ___/
|
||||||
|
/ / / /_/ / / / / /_/ / / / /
|
||||||
|
/_/ \__,_/_/ /_/\__,_/_/ /_/
|
||||||
|
|
||||||
@@ -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 "danielbrendel" "hortusfox-web"; then
|
if check_for_gh_release "hortusfox" "danielbrendel/hortusfox-web"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|||||||
71
ct/immich.sh
71
ct/immich.sh
@@ -11,7 +11,7 @@ var_disk="${var_disk:-20}"
|
|||||||
var_cpu="${var_cpu:-4}"
|
var_cpu="${var_cpu:-4}"
|
||||||
var_ram="${var_ram:-4096}"
|
var_ram="${var_ram:-4096}"
|
||||||
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"
|
||||||
@@ -27,11 +27,22 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if [[ -f /etc/apt/sources.list.d/immich.list ]]; then
|
||||||
|
msg_error "Wrong Debian version detected!"
|
||||||
|
msg_error "You must upgrade your LXC to Debian Trixie before updating."
|
||||||
|
msg_error "Please visit https://github.com/community-scripts/ProxmoxVE/discussions/7726 for details."
|
||||||
|
echo "${TAB3} If you have upgraded your LXC to Trixie and you still see this message, please open an Issue in the Community-Scripts repo."
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
setup_uv
|
setup_uv
|
||||||
PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')"
|
PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]')"
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
NODE_VERSION="22" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||||
|
|
||||||
|
if dpkg -l | grep -q "libmimalloc2.0"; then
|
||||||
|
$STD apt-get update && $STD apt-get install -y libmimalloc3
|
||||||
|
fi
|
||||||
|
|
||||||
STAGING_DIR=/opt/staging
|
STAGING_DIR=/opt/staging
|
||||||
BASE_DIR=${STAGING_DIR}/base-images
|
BASE_DIR=${STAGING_DIR}/base-images
|
||||||
SOURCE_DIR=${STAGING_DIR}/image-source
|
SOURCE_DIR=${STAGING_DIR}/image-source
|
||||||
@@ -45,8 +56,10 @@ function update_script() {
|
|||||||
for url in "${INTEL_URLS[@]}"; do
|
for url in "${INTEL_URLS[@]}"; do
|
||||||
curl -fsSLO "$url"
|
curl -fsSLO "$url"
|
||||||
done
|
done
|
||||||
|
$STD apt-mark unhold libigdgmm12
|
||||||
$STD apt install -y ./*.deb
|
$STD apt install -y ./*.deb
|
||||||
rm ./*.deb
|
rm ./*.deb
|
||||||
|
$STD apt-mark hold libigdgmm12
|
||||||
msg_ok "Intel iGPU dependencies updated"
|
msg_ok "Intel iGPU dependencies updated"
|
||||||
fi
|
fi
|
||||||
rm ~/Dockerfile
|
rm ~/Dockerfile
|
||||||
@@ -61,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.141.1"
|
RELEASE="1.142.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
|
||||||
@@ -78,22 +91,10 @@ function update_script() {
|
|||||||
|
|
||||||
if [[ ! -f ~/.vchord_version ]] || [[ "$VCHORD_RELEASE" != "$(cat ~/.vchord_version)" ]]; then
|
if [[ ! -f ~/.vchord_version ]] || [[ "$VCHORD_RELEASE" != "$(cat ~/.vchord_version)" ]]; then
|
||||||
msg_info "Updating VectorChord"
|
msg_info "Updating VectorChord"
|
||||||
if [[ ! -f ~/.vchord_version ]] || [[ ! "$(cat ~/.vchord_version)" > "0.3.0" ]]; then
|
|
||||||
$STD sudo -u postgres pg_dumpall --clean --if-exists --username=postgres | gzip >/etc/postgresql/immich-db-vchord0.3.0.sql.gz
|
|
||||||
chown postgres /etc/postgresql/immich-db-vchord0.3.0.sql.gz
|
|
||||||
$STD sudo -u postgres gunzip --stdout /etc/postgresql/immich-db-vchord0.3.0.sql.gz |
|
|
||||||
sed -e "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
|
|
||||||
-e "/vchordrq.prewarm_dim/d" |
|
|
||||||
sudo -u postgres psql
|
|
||||||
fi
|
|
||||||
curl -fsSL "https://github.com/tensorchord/vectorchord/releases/download/${VCHORD_RELEASE}/postgresql-16-vchord_${VCHORD_RELEASE}-1_amd64.deb" -o vchord.deb
|
curl -fsSL "https://github.com/tensorchord/vectorchord/releases/download/${VCHORD_RELEASE}/postgresql-16-vchord_${VCHORD_RELEASE}-1_amd64.deb" -o vchord.deb
|
||||||
$STD apt install -y ./vchord.deb
|
$STD apt install -y ./vchord.deb
|
||||||
$STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;"
|
$STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;"
|
||||||
systemctl restart postgresql
|
systemctl restart postgresql
|
||||||
if [[ ! -f ~/.vchord_version ]] || [[ ! "$(cat ~/.vchord_version)" > "0.3.0" ]]; then
|
|
||||||
$STD sudo -u postgres psql -d immich -c "REINDEX INDEX face_index;"
|
|
||||||
$STD sudo -u postgres psql -d immich -c "REINDEX INDEX clip_index;"
|
|
||||||
fi
|
|
||||||
echo "$VCHORD_RELEASE" >~/.vchord_version
|
echo "$VCHORD_RELEASE" >~/.vchord_version
|
||||||
rm ./vchord.deb
|
rm ./vchord.deb
|
||||||
msg_ok "Updated VectorChord to v${VCHORD_RELEASE}"
|
msg_ok "Updated VectorChord to v${VCHORD_RELEASE}"
|
||||||
@@ -126,9 +127,6 @@ EOF
|
|||||||
|
|
||||||
msg_info "Updating ${APP} web and microservices"
|
msg_info "Updating ${APP} web and microservices"
|
||||||
cd "$SRC_DIR"/server
|
cd "$SRC_DIR"/server
|
||||||
if [[ "$RELEASE" == "1.135.1" ]]; then
|
|
||||||
rm ./src/schema/migrations/1750323941566-UnsetPrewarmDimParameter.ts
|
|
||||||
fi
|
|
||||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||||
export CI=1
|
export CI=1
|
||||||
corepack enable
|
corepack enable
|
||||||
@@ -144,6 +142,7 @@ EOF
|
|||||||
|
|
||||||
# openapi & web build
|
# openapi & web build
|
||||||
cd "$SRC_DIR"
|
cd "$SRC_DIR"
|
||||||
|
echo "packageImportMethod: hardlink" >>./pnpm-workspace.yaml
|
||||||
$STD pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install
|
$STD pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install
|
||||||
$STD pnpm --filter @immich/sdk --filter immich-web build
|
$STD pnpm --filter @immich/sdk --filter immich-web build
|
||||||
cp -a web/build "$APP_DIR"/www
|
cp -a web/build "$APP_DIR"/www
|
||||||
@@ -158,17 +157,16 @@ EOF
|
|||||||
msg_ok "Updated ${APP} web and microservices"
|
msg_ok "Updated ${APP} web and microservices"
|
||||||
|
|
||||||
cd "$SRC_DIR"/machine-learning
|
cd "$SRC_DIR"/machine-learning
|
||||||
mkdir -p "$ML_DIR"
|
mkdir -p "$ML_DIR" && chown -R immich:immich "$ML_DIR"
|
||||||
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
||||||
$STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
|
|
||||||
if [[ -f ~/.openvino ]]; then
|
if [[ -f ~/.openvino ]]; then
|
||||||
msg_info "Updating HW-accelerated machine-learning"
|
msg_info "Updating HW-accelerated machine-learning"
|
||||||
/usr/local/bin/uv -q sync --extra openvino --no-cache --active
|
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --active -n -p python3.11 --managed-python
|
||||||
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so"
|
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so"
|
||||||
msg_ok "Updated HW-accelerated machine-learning"
|
msg_ok "Updated HW-accelerated machine-learning"
|
||||||
else
|
else
|
||||||
msg_info "Updating machine-learning"
|
msg_info "Updating machine-learning"
|
||||||
/usr/local/bin/uv -q sync --extra cpu --no-cache --active
|
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra cpu --active -n -p python3.11 --managed-python
|
||||||
msg_ok "Updated machine-learning"
|
msg_ok "Updated machine-learning"
|
||||||
fi
|
fi
|
||||||
cd "$SRC_DIR"
|
cd "$SRC_DIR"
|
||||||
@@ -187,10 +185,6 @@ EOF
|
|||||||
ln -s "$GEO_DIR" "$APP_DIR"
|
ln -s "$GEO_DIR" "$APP_DIR"
|
||||||
|
|
||||||
chown -R immich:immich "$INSTALL_DIR"
|
chown -R immich:immich "$INSTALL_DIR"
|
||||||
if [[ ! -f ~/.debian_version.bak ]]; then
|
|
||||||
cp /etc/debian_version ~/.debian_version.bak
|
|
||||||
sed -i 's/.*/13.0/' /etc/debian_version
|
|
||||||
fi
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
@@ -206,9 +200,8 @@ function compile_libjxl() {
|
|||||||
SOURCE=${SOURCE_DIR}/libjxl
|
SOURCE=${SOURCE_DIR}/libjxl
|
||||||
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
|
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
|
||||||
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
|
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
|
||||||
# : "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}"
|
: "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}"
|
||||||
: "${LIBJXL_REVISION:=794a5dcf0d54f9f0b20d288a12e87afb91d20dfc}"
|
if [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
if [[ "${update:-}" ]] || [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
|
||||||
msg_info "Recompiling libjxl"
|
msg_info "Recompiling libjxl"
|
||||||
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
|
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
|
||||||
@@ -254,8 +247,7 @@ function compile_libheif() {
|
|||||||
$STD apt-get install -y libaom-dev
|
$STD apt-get install -y libaom-dev
|
||||||
local update="required"
|
local update="required"
|
||||||
fi
|
fi
|
||||||
# : "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
|
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
|
||||||
: "${LIBHEIF_REVISION:=35dad50a9145332a7bfdf1ff6aef6801fb613d68}"
|
|
||||||
if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
msg_info "Recompiling libheif"
|
msg_info "Recompiling libheif"
|
||||||
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
@@ -286,10 +278,8 @@ function compile_libheif() {
|
|||||||
|
|
||||||
function compile_libraw() {
|
function compile_libraw() {
|
||||||
SOURCE=${SOURCE_DIR}/libraw
|
SOURCE=${SOURCE_DIR}/libraw
|
||||||
local update
|
: "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}"
|
||||||
# : "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}"
|
if [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
: "${LIBRAW_REVISION:=09bea31181b43e97959ee5452d91e5bc66365f1f}"
|
|
||||||
if [[ "${update:-}" ]] || [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
|
||||||
msg_info "Recompiling libraw"
|
msg_info "Recompiling libraw"
|
||||||
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
|
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
|
||||||
@@ -309,15 +299,15 @@ function compile_libraw() {
|
|||||||
|
|
||||||
function compile_imagemagick() {
|
function compile_imagemagick() {
|
||||||
SOURCE=$SOURCE_DIR/imagemagick
|
SOURCE=$SOURCE_DIR/imagemagick
|
||||||
# : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/imagemagick.json)}"
|
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/imagemagick.json)}"
|
||||||
: "${IMAGEMAGICK_REVISION:=8289a3388a085ad5ae81aa6812f21554bdfd54f2}"
|
if [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]] ||
|
||||||
if [[ "${update:-}" ]] || [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
! grep -q 'DMAGICK_LIBRAW' /usr/local/lib/ImageMagick-7*/config-Q16HDRI/configure.xml; then
|
||||||
msg_info "Recompiling ImageMagick"
|
msg_info "Recompiling ImageMagick"
|
||||||
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
|
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
|
||||||
cd "$SOURCE"
|
cd "$SOURCE"
|
||||||
$STD git reset --hard "$IMAGEMAGICK_REVISION"
|
$STD git reset --hard "$IMAGEMAGICK_REVISION"
|
||||||
$STD ./configure --with-modules
|
$STD ./configure --with-modules CPPFLAGS="-DMAGICK_LIBRAW_VERSION_TAIL=202502"
|
||||||
$STD make -j"$(nproc)"
|
$STD make -j"$(nproc)"
|
||||||
$STD make install
|
$STD make install
|
||||||
ldconfig /usr/local/lib
|
ldconfig /usr/local/lib
|
||||||
@@ -330,9 +320,8 @@ function compile_imagemagick() {
|
|||||||
|
|
||||||
function compile_libvips() {
|
function compile_libvips() {
|
||||||
SOURCE=$SOURCE_DIR/libvips
|
SOURCE=$SOURCE_DIR/libvips
|
||||||
# : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
|
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
|
||||||
: "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
|
if [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
if [[ "${update:-}" ]] || [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
|
||||||
msg_info "Recompiling libvips"
|
msg_info "Recompiling libvips"
|
||||||
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
|
||||||
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
|
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ function update_script() {
|
|||||||
if ! grep -qxF 'COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env; then
|
if ! grep -qxF 'COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env; then
|
||||||
sed -i '/^COMPOSE_KOMODO_IMAGE_TAG=latest$/a COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env
|
sed -i '/^COMPOSE_KOMODO_IMAGE_TAG=latest$/a COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env
|
||||||
fi
|
fi
|
||||||
|
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull
|
||||||
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
exit
|
exit
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ function update_script() {
|
|||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
TMP_TAR=$(mktemp --suffix=.tgz)
|
TMP_TAR=$(mktemp --suffix=.tgz)
|
||||||
curl -fL# -o "${TMP_TAR}" "https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tgz"
|
curl -fL# -C - -o "${TMP_TAR}" "https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tgz"
|
||||||
msg_info "Updating Ollama to ${RELEASE}"
|
msg_info "Updating Ollama to ${RELEASE}"
|
||||||
rm -rf /usr/local/lib/ollama
|
rm -rf /usr/local/lib/ollama
|
||||||
rm -rf /usr/local/bin/ollama
|
rm -rf /usr/local/bin/ollama
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ function update_script() {
|
|||||||
msg_ok "Stopped Services"
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
cp /opt/palmr/apps/server/.env /opt/palmr.env
|
cp /opt/palmr/apps/server/.env /opt/palmr.env
|
||||||
|
rm -rf /opt/palmr
|
||||||
fetch_and_deploy_gh_release "Palmr" "kyantech/Palmr" "tarball" "latest" "/opt/palmr"
|
fetch_and_deploy_gh_release "Palmr" "kyantech/Palmr" "tarball" "latest" "/opt/palmr"
|
||||||
|
|
||||||
PNPM="$(jq -r '.packageManager' /opt/palmr/package.json)"
|
PNPM="$(jq -r '.packageManager' /opt/palmr/package.json)"
|
||||||
|
|||||||
@@ -27,6 +27,16 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if grep -q 'Debian GNU/Linux 12' /etc/os-release && [ -f /etc/apt/sources.list.d/proxmox-release-bookworm.list ] && [ -f /etc/apt/sources.list.d/pdm-test.list ]; then
|
||||||
|
msg_info "Updating outdated outdated source formats"
|
||||||
|
echo "deb [signed-by=/usr/share/keyrings/proxmox-archive-keyring.gpg] http://download.proxmox.com/debian/pdm bookworm pdm-test" > /etc/apt/sources.list.d/pdm-test.list
|
||||||
|
curl -fsSL https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg -o /usr/share/keyrings/proxmox-archive-keyring.gpg
|
||||||
|
rm -f /etc/apt/keyrings/proxmox-release-bookworm.gpg /etc/apt/sources.list.d/proxmox-release-bookworm.list
|
||||||
|
$STD apt-get update
|
||||||
|
msg_ok "Updated old sources"
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Updating $APP LXC"
|
msg_info "Updating $APP LXC"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get -y upgrade
|
$STD apt-get -y upgrade
|
||||||
|
|||||||
@@ -27,6 +27,20 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if grep -q "dl.cloudsmith.io" /etc/apt/sources.list.d/rabbitmq.list; then
|
||||||
|
rm -f /etc/apt/sources.list.d/rabbitmq.list
|
||||||
|
cat <<EOF >/etc/apt/sources.list.d/rabbitmq.list
|
||||||
|
## Modern Erlang/OTP releases
|
||||||
|
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main
|
||||||
|
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main
|
||||||
|
|
||||||
|
## Provides modern RabbitMQ releases
|
||||||
|
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main
|
||||||
|
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main
|
||||||
|
EOF
|
||||||
|
$STD apt-get update
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Stopping ${APP} Service"
|
msg_info "Stopping ${APP} Service"
|
||||||
systemctl stop rabbitmq-server
|
systemctl stop rabbitmq-server
|
||||||
msg_ok "Stopped ${APP} Service"
|
msg_ok "Stopped ${APP} Service"
|
||||||
|
|||||||
63
ct/scraparr.sh
Normal file
63
ct/scraparr.sh
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: JasonGreenC
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/thecfu/scraparr
|
||||||
|
|
||||||
|
APP="Scraparr"
|
||||||
|
var_tags="${var_tags:-arr;monitoring}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
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/scraparr/ ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
if check_for_gh_release "scraparr" "thecfu/scraparr"; then
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop scraparr
|
||||||
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
|
fetch_and_deploy_gh_release "scrappar" "thecfu/scraparr" "tarball" "latest" "/opt/scraparr"
|
||||||
|
|
||||||
|
msg_info "Updating Scraparr"
|
||||||
|
cd /opt/scraparr
|
||||||
|
$STD uv venv /opt/scraparr/.venv
|
||||||
|
$STD /opt/scraparr/.venv/bin/python -m ensurepip --upgrade
|
||||||
|
$STD /opt/scraparr/.venv/bin/python -m pip install --upgrade pip
|
||||||
|
$STD /opt/scraparr/.venv/bin/python -m pip install -r /opt/scraparr/src/scraparr/requirements.txt
|
||||||
|
chmod -R 755 /opt/scraparr
|
||||||
|
msg_ok "Updated Scraparr"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start scraparr
|
||||||
|
msg_ok "Services Started"
|
||||||
|
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}:7100${CL}"
|
||||||
63
ct/signoz.sh
Normal file
63
ct/signoz.sh
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://signoz.io/
|
||||||
|
|
||||||
|
APP="SigNoz"
|
||||||
|
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/signoz ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "signoz" "SigNoz/signoz"; then
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop signoz
|
||||||
|
systemctl stop signoz-otel-collector
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "signoz" "SigNoz/signoz" "prebuild" "latest" "/opt/signoz" "signoz-community_linux_amd64.tar.gz"
|
||||||
|
fetch_and_deploy_gh_release "signoz-otel-collector" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-otel-collector" "signoz-otel-collector_linux_amd64.tar.gz"
|
||||||
|
fetch_and_deploy_gh_release "signoz-schema-migrator" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-schema-migrator" "signoz-schema-migrator_linux_amd64.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
|
cd /opt/signoz-schema-migrator/bin
|
||||||
|
$STD ./signoz-schema-migrator sync --dsn="tcp://localhost:9000?password=" --replication=true --up=
|
||||||
|
$STD ./signoz-schema-migrator async --dsn="tcp://localhost:9000?password=" --replication=true --up=
|
||||||
|
msg_ok "Updated $APP"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start signoz-otel-collector
|
||||||
|
systemctl start signoz
|
||||||
|
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}"
|
||||||
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}"
|
||||||
@@ -27,7 +27,7 @@ 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,node-gyp" setup_nodejs
|
||||||
if check_for_gh_release "wikijs" "requarks/wiki"; then
|
if check_for_gh_release "wikijs" "requarks/wiki"; then
|
||||||
msg_info "Verifying whether ${APP}' new release is v3.x+ and current install uses SQLite."
|
msg_info "Verifying whether ${APP}' new release is v3.x+ and current install uses SQLite."
|
||||||
SQLITE_INSTALL=$([ -f /opt/wikijs/db.sqlite ] && echo "true" || echo "false")
|
SQLITE_INSTALL=$([ -f /opt/wikijs/db.sqlite ] && echo "true" || echo "false")
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 2,
|
"hdd": 2,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "Adguard Home can be updated via the user interface.",
|
"text": "AdGuard Home can only be updated via the user interface.",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"categories": [
|
"categories": [
|
||||||
21
|
21
|
||||||
],
|
],
|
||||||
"date_created": "2024-05-11",
|
"date_created": "2025-09-17",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
@@ -25,6 +25,17 @@
|
|||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "alpine",
|
||||||
|
"script": "ct/alpine-caddy.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 256,
|
||||||
|
"hdd": 3,
|
||||||
|
"os": "alpine",
|
||||||
|
"version": "3.22"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 2,
|
"hdd": 2,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 2,
|
"hdd": 2,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
48
frontend/public/json/execute.json
Normal file
48
frontend/public/json/execute.json
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"name": "PVE LXC Execute Command",
|
||||||
|
"slug": "lxc-execute",
|
||||||
|
"categories": [
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"date_created": "2025-09-18",
|
||||||
|
"type": "pve",
|
||||||
|
"updateable": false,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": null,
|
||||||
|
"documentation": null,
|
||||||
|
"website": null,
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp",
|
||||||
|
"config_path": "",
|
||||||
|
"description": "This script allows administrators to execute a custom command inside one or multiple LXC containers on a Proxmox VE node. Containers can be selectively excluded via an interactive checklist. If a container is stopped, the script will automatically start it, run the command, and then shut it down again. Only Debian and Ubuntu based containers are supported.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "tools/pve/execute.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": null,
|
||||||
|
"ram": null,
|
||||||
|
"hdd": null,
|
||||||
|
"os": null,
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Execute within the Proxmox shell.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Non-Debian/Ubuntu containers will be skipped automatically.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Stopped containers will be started temporarily to run the command, then shut down again.",
|
||||||
|
"type": "warning"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
35
frontend/public/json/globaleaks.json
Normal file
35
frontend/public/json/globaleaks.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "GlobaLeaks",
|
||||||
|
"slug": "globaleaks",
|
||||||
|
"categories": [
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"date_created": "2025-09-18",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 443,
|
||||||
|
"documentation": "https://docs.globaleaks.org",
|
||||||
|
"website": "https://www.globaleaks.org/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/globaleaks.webp",
|
||||||
|
"config_path": "",
|
||||||
|
"description": "GlobaLeaks is a free and open-source whistleblowing software enabling anyone to easily set up and maintain a secure reporting platform.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/globaleaks.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
"website": "https://www.getgrist.com/",
|
"website": "https://www.getgrist.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/grist.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/grist.webp",
|
||||||
"config_path": "/opt/grist/.env",
|
"config_path": "/opt/grist/.env",
|
||||||
"description": "Grist is a modern, open source spreadsheet that goes beyond the grid",
|
"description": "Grist is like a spreadsheet + database hybrid. It lets you store structured data, use relational links between tables, apply formulas (even with Python), build custom layouts (cards, forms, dashboards), set fine-grained access rules, and visualize data with charts or pivot-tables.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
|
|||||||
@@ -32,6 +32,10 @@
|
|||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Containerized version doesn't allow Home Assistant add-ons.",
|
||||||
|
"type": "warning"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"text": "If the LXC is created Privileged, the script will automatically set up USB passthrough.",
|
"text": "If the LXC is created Privileged, the script will automatically set up USB passthrough.",
|
||||||
"type": "warning"
|
"type": "warning"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
"ram": 4096,
|
"ram": 4096,
|
||||||
"hdd": 20,
|
"hdd": 20,
|
||||||
"os": "Debian",
|
"os": "Debian",
|
||||||
"version": "12"
|
"version": "13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "OpenWrt",
|
"name": "OpenWrt",
|
||||||
"slug": "openwrt",
|
"slug": "openwrt-vm",
|
||||||
"categories": [
|
"categories": [
|
||||||
4,
|
4,
|
||||||
2
|
2
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "vm/openwrt.sh",
|
"script": "vm/openwrt-vm.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 1,
|
"cpu": 1,
|
||||||
"ram": 256,
|
"ram": 256,
|
||||||
40
frontend/public/json/scraparr.json
Normal file
40
frontend/public/json/scraparr.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "Scraparr",
|
||||||
|
"slug": "scraparr",
|
||||||
|
"categories": [
|
||||||
|
14
|
||||||
|
],
|
||||||
|
"date_created": "2025-09-15",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 7100,
|
||||||
|
"documentation": "https://github.com/thecfu/scraparr/blob/main/README.md",
|
||||||
|
"website": "https://github.com/thecfu/scraparr",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/scraparr-dark.svg",
|
||||||
|
"config_path": "/scraparr/config/config.yaml",
|
||||||
|
"description": "Scraparr is a Prometheus exporter for the *arr suite (Sonarr, Radarr, Lidarr, etc.). It provides metrics that can be scraped by Prometheus to monitor and visualize the health and performance of your *arr applications.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/scraparr.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Edit config file then restart the scraparr service: `systemctl restart scraparr`",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
40
frontend/public/json/signoz.json
Normal file
40
frontend/public/json/signoz.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "SigNoz",
|
||||||
|
"slug": "signoz",
|
||||||
|
"categories": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"date_created": "2025-09-15",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8080,
|
||||||
|
"documentation": "https://signoz.io/docs/introduction/",
|
||||||
|
"config_path": "/opt/signoz/conf/systemd.env",
|
||||||
|
"website": "https://signoz.io/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/signoz.webp",
|
||||||
|
"description": "SigNoz is an open-source Datadog or New Relic alternative. Get APM, logs, traces, metrics, exceptions, & alerts in a single tool.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/signoz.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 4096,
|
||||||
|
"hdd": 20,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "The first user you register will be the admin user.",
|
||||||
|
"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": []
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -17,7 +17,7 @@ const inter = Inter({ subsets: ["latin"] });
|
|||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Proxmox VE Helper-Scripts",
|
title: "Proxmox VE Helper-Scripts",
|
||||||
description:
|
description:
|
||||||
"The official website for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 300+ scripts to help you manage your Proxmox VE environment.",
|
"The official website for the Proxmox VE Helper-Scripts (Community) repository. Featuring over 300+ scripts to help you manage your Proxmox Virtual Environment.",
|
||||||
applicationName: "Proxmox VE Helper-Scripts",
|
applicationName: "Proxmox VE Helper-Scripts",
|
||||||
generator: "Next.js",
|
generator: "Next.js",
|
||||||
referrer: "origin-when-cross-origin",
|
referrer: "origin-when-cross-origin",
|
||||||
@@ -57,7 +57,7 @@ export const metadata: Metadata = {
|
|||||||
openGraph: {
|
openGraph: {
|
||||||
title: "Proxmox VE Helper-Scripts",
|
title: "Proxmox VE Helper-Scripts",
|
||||||
description:
|
description:
|
||||||
"The official website for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 300+ scripts to help you manage your Proxmox VE environment.",
|
"The official website for the Proxmox VE Helper-Scripts (Community) repository. Featuring over 300+ scripts to help you manage your Proxmox Virtual Environment.",
|
||||||
url: `https://community-scripts.github.io/${basePath}/`,
|
url: `https://community-scripts.github.io/${basePath}/`,
|
||||||
siteName: "Proxmox VE Helper-Scripts",
|
siteName: "Proxmox VE Helper-Scripts",
|
||||||
images: [
|
images: [
|
||||||
@@ -76,7 +76,7 @@ export const metadata: Metadata = {
|
|||||||
title: "Proxmox VE Helper-Scripts",
|
title: "Proxmox VE Helper-Scripts",
|
||||||
creator: "@BramSuurdje",
|
creator: "@BramSuurdje",
|
||||||
description:
|
description:
|
||||||
"The official website for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 300+ scripts to help you manage your Proxmox VE environment.",
|
"The official website for the Proxmox VE Helper-Scripts (Community) repository. Featuring over 300+ scripts to help you manage your Proxmox Virtual Environment.",
|
||||||
images: [`https://community-scripts.github.io/${basePath}/defaultimg.png`],
|
images: [`https://community-scripts.github.io/${basePath}/defaultimg.png`],
|
||||||
},
|
},
|
||||||
manifest: "/manifest.webmanifest",
|
manifest: "/manifest.webmanifest",
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export default function manifest(): MetadataRoute.Manifest {
|
|||||||
name: "Proxmox VE Helper-Scripts",
|
name: "Proxmox VE Helper-Scripts",
|
||||||
short_name: "Proxmox VE Helper-Scripts",
|
short_name: "Proxmox VE Helper-Scripts",
|
||||||
description:
|
description:
|
||||||
"A Re-designed Front-end for the Proxmox VE Helper-Scripts Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.",
|
"A redesigned front-end for the Proxmox VE Helper-Scripts repository. Featuring over 300+ scripts to help you manage your Proxmox Virtual Environment.",
|
||||||
theme_color: "#030712",
|
theme_color: "#030712",
|
||||||
background_color: "#030712",
|
background_color: "#030712",
|
||||||
display: "standalone",
|
display: "standalone",
|
||||||
|
|||||||
@@ -113,8 +113,8 @@ export default function Page() {
|
|||||||
<p>
|
<p>
|
||||||
With 300+ scripts to help you manage your
|
With 300+ scripts to help you manage your
|
||||||
{" "}
|
{" "}
|
||||||
<b>Proxmox VE environment</b>
|
<b>Proxmox VE</b>
|
||||||
. Whether you're a seasoned
|
, whether you're a seasoned
|
||||||
user or a newcomer, we've got you covered.
|
user or a newcomer, we've got you covered.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ export const basePath = process.env.BASE_PATH || "";
|
|||||||
export const navbarLinks = [
|
export const navbarLinks = [
|
||||||
{
|
{
|
||||||
href: `https://github.com/community-scripts/${basePath}`,
|
href: `https://github.com/community-scripts/${basePath}`,
|
||||||
event: "Github",
|
event: "GitHub",
|
||||||
icon: <FaGithub className="h-4 w-4" />,
|
icon: <FaGithub className="h-4 w-4" />,
|
||||||
text: "Github",
|
text: "GitHub",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
href: `https://discord.gg/2wvnMDgdnU`,
|
href: `https://discord.gg/2wvnMDgdnU`,
|
||||||
@@ -22,9 +22,9 @@ export const navbarLinks = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
href: `https://github.com/community-scripts/${basePath}/blob/main/CHANGELOG.md`,
|
href: `https://github.com/community-scripts/${basePath}/blob/main/CHANGELOG.md`,
|
||||||
event: "Change Log",
|
event: "Changelog",
|
||||||
icon: <Scroll className="h-4 w-4" />,
|
icon: <Scroll className="h-4 w-4" />,
|
||||||
text: "Change Log",
|
text: "Changelog",
|
||||||
mobileHidden: true,
|
mobileHidden: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,9 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing AdGuard Home"
|
fetch_and_deploy_gh_release "AdGuardHome" "AdguardTeam/AdGuardHome" "prebuild" "latest" "/opt/AdGuardHome" "AdGuardHome_linux_amd64.tar.gz"
|
||||||
$STD tar zxvf <(curl -fsSL https://static.adtidy.org/adguardhome/release/AdGuardHome_linux_amd64.tar.gz) -C /opt
|
|
||||||
msg_ok "Installed AdGuard Home"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/AdGuardHome.service
|
cat <<EOF >/etc/systemd/system/AdGuardHome.service
|
||||||
@@ -45,6 +43,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"
|
||||||
|
|||||||
70
install/alpine-caddy-install.sh
Normal file
70
install/alpine-caddy-install.sh
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: cobalt (cobaltgit)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://caddyserver.com/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Caddy"
|
||||||
|
$STD apk add --no-cache caddy caddy-openrc
|
||||||
|
cat <<EOF >/etc/caddy/Caddyfile
|
||||||
|
:80 {
|
||||||
|
# Set this path to your site's directory.
|
||||||
|
root * /var/www/html
|
||||||
|
|
||||||
|
# Enable the static file server.
|
||||||
|
file_server
|
||||||
|
|
||||||
|
# Another common task is to set up a reverse proxy:
|
||||||
|
# reverse_proxy localhost:8080
|
||||||
|
|
||||||
|
# Or serve a PHP site through php-fpm:
|
||||||
|
# php_fastcgi localhost:9000
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
mkdir -p /var/www/html
|
||||||
|
cat <<EOF >/var/www/html/index.html
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Caddy works!</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Hello Caddy!</h1>
|
||||||
|
<p>For more information, refer to the Caddy <a href="https://caddyserver.com/docs/">documentation</a><p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
EOF
|
||||||
|
msg_ok "Installed Caddy"
|
||||||
|
|
||||||
|
read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt
|
||||||
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
|
GO_VERSION="$(curl -fsSL https://go.dev/VERSION?m=text | head -1 | cut -c3-)" setup_go
|
||||||
|
msg_info "Setup xCaddy"
|
||||||
|
cd /opt
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.tar.gz" -o "xcaddy_${RELEASE:1}_linux_amd64.tar.gz"
|
||||||
|
$STD tar xzf xcaddy_"${RELEASE:1}"_linux_amd64.tar.gz -C /usr/local/bin xcaddy
|
||||||
|
rm -rf /opt/xcaddy*
|
||||||
|
$STD xcaddy build
|
||||||
|
msg_ok "Setup xCaddy"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Enabling Caddy Service"
|
||||||
|
$STD rc-update add caddy default
|
||||||
|
msg_ok "Enabled Caddy Service"
|
||||||
|
|
||||||
|
msg_info "Starting Caddy"
|
||||||
|
$STD service caddy start
|
||||||
|
msg_ok "Started Caddy"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
@@ -41,7 +41,7 @@ while true; do
|
|||||||
read -rp "${TAB3}Enable IPv6 support? (y/n): " answer
|
read -rp "${TAB3}Enable IPv6 support? (y/n): " answer
|
||||||
case "$answer" in
|
case "$answer" in
|
||||||
[Yy]*)
|
[Yy]*)
|
||||||
var_cf_ip6_provider="auto"
|
var_cf_ip6_provider="cloudflare.trace"
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
[Nn]*)
|
[Nn]*)
|
||||||
|
|||||||
@@ -15,11 +15,16 @@ update_os
|
|||||||
|
|
||||||
msg_info "Installing Cloudflared"
|
msg_info "Installing Cloudflared"
|
||||||
mkdir -p --mode=0755 /usr/share/keyrings
|
mkdir -p --mode=0755 /usr/share/keyrings
|
||||||
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
|
||||||
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg >/usr/share/keyrings/cloudflare-main.gpg
|
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg >/usr/share/keyrings/cloudflare-main.gpg
|
||||||
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $VERSION main" >/etc/apt/sources.list.d/cloudflared.list
|
cat <<EOF >/etc/apt/sources.list.d/cloudflared.sources
|
||||||
$STD apt-get update
|
Types: deb
|
||||||
$STD apt-get install -y cloudflared
|
URIs: https://pkg.cloudflare.com/cloudflared/
|
||||||
|
Suites: any
|
||||||
|
Components: main
|
||||||
|
Signed-By: /usr/share/keyrings/cloudflare-main.gpg
|
||||||
|
EOF
|
||||||
|
$STD apt update
|
||||||
|
$STD apt install -y cloudflared
|
||||||
msg_ok "Installed Cloudflared"
|
msg_ok "Installed Cloudflared"
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to configure cloudflared as a DNS-over-HTTPS (DoH) proxy? <y/N> " prompt
|
read -r -p "${TAB3}Would you like to configure cloudflared as a DNS-over-HTTPS (DoH) proxy? <y/N> " prompt
|
||||||
@@ -61,6 +66,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,6 +17,8 @@ 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"
|
||||||
|
|
||||||
|
|||||||
30
install/globaleaks-install.sh
Normal file
30
install/globaleaks-install.sh
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Giovanni Pellerano (evilaliv3)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/globaleaks/globaleaks-whistleblowing-software
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Setup GlobaLeaks"
|
||||||
|
DISTRO_CODENAME="$(awk -F= '/^VERSION_CODENAME=/{print $2}' /etc/os-release)"
|
||||||
|
curl -fsSL https://deb.globaleaks.org/globaleaks.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/globaleaks.gpg
|
||||||
|
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
|
||||||
|
$STD apt update
|
||||||
|
$STD apt -y install globaleaks
|
||||||
|
msg_ok "Setup GlobaLeaks"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: cfurrow
|
# Author: cfurrow | Co-Author: Slaviša Arežina (tremor021)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/gristlabs/grist-core
|
# Source: https://github.com/gristlabs/grist-core
|
||||||
|
|
||||||
@@ -17,20 +17,15 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
make \
|
make \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
python3.11-venv
|
python3-venv
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||||
|
fetch_and_deploy_gh_release "grist" "gristlabs/grist-core" "tarball"
|
||||||
|
|
||||||
msg_info "Installing Grist"
|
msg_info "Installing Grist"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/gristlabs/grist-core/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
export CYPRESS_INSTALL_BINARY=0
|
export CYPRESS_INSTALL_BINARY=0
|
||||||
export NODE_OPTIONS="--max-old-space-size=2048"
|
export NODE_OPTIONS="--max-old-space-size=2048"
|
||||||
cd /opt
|
cd /opt/grist
|
||||||
curl -fsSL "https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
|
|
||||||
$STD unzip v$RELEASE.zip
|
|
||||||
mv grist-core-${RELEASE} grist
|
|
||||||
cd grist
|
|
||||||
$STD yarn install
|
$STD yarn install
|
||||||
$STD yarn run build:prod
|
$STD yarn run build:prod
|
||||||
$STD yarn run install:python
|
$STD yarn run install:python
|
||||||
@@ -64,7 +59,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf /opt/v${RELEASE}.zip
|
|
||||||
$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"
|
||||||
|
|||||||
@@ -15,14 +15,7 @@ update_os
|
|||||||
|
|
||||||
setup_uv
|
setup_uv
|
||||||
|
|
||||||
msg_info "Configuring apt and installing dependencies"
|
msg_info "Installing dependencies"
|
||||||
echo "deb http://deb.debian.org/debian testing main contrib" >/etc/apt/sources.list.d/immich.list
|
|
||||||
cat <<EOF >/etc/apt/preferences.d/immich
|
|
||||||
Package: *
|
|
||||||
Pin: release a=testing
|
|
||||||
Pin-Priority: -10
|
|
||||||
EOF
|
|
||||||
|
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get install --no-install-recommends -y \
|
$STD apt-get install --no-install-recommends -y \
|
||||||
git \
|
git \
|
||||||
@@ -53,25 +46,33 @@ $STD apt-get install --no-install-recommends -y \
|
|||||||
libgomp1 \
|
libgomp1 \
|
||||||
liblqr-1-0 \
|
liblqr-1-0 \
|
||||||
libltdl7 \
|
libltdl7 \
|
||||||
libmimalloc2.0 \
|
libmimalloc3 \
|
||||||
libopenjp2-7 \
|
libopenjp2-7 \
|
||||||
meson \
|
meson \
|
||||||
ninja-build \
|
ninja-build \
|
||||||
pkg-config \
|
pkg-config \
|
||||||
cpanminus \
|
|
||||||
mesa-utils \
|
mesa-utils \
|
||||||
mesa-va-drivers \
|
mesa-va-drivers \
|
||||||
mesa-vulkan-drivers \
|
mesa-vulkan-drivers \
|
||||||
ocl-icd-libopencl1 \
|
ocl-icd-libopencl1 \
|
||||||
tini \
|
tini \
|
||||||
zlib1g
|
zlib1g \
|
||||||
|
libio-compress-brotli-perl \
|
||||||
|
libwebp7 \
|
||||||
|
libwebpdemux2 \
|
||||||
|
libwebpmux3 \
|
||||||
|
libhwy1t64 \
|
||||||
|
libdav1d-dev \
|
||||||
|
libhwy-dev \
|
||||||
|
libwebp-dev \
|
||||||
|
libaom-dev
|
||||||
curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg
|
curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg
|
||||||
DPKG_ARCHITECTURE="$(dpkg --print-architecture)"
|
DPKG_ARCHITECTURE="$(dpkg --print-architecture)"
|
||||||
export DPKG_ARCHITECTURE
|
export DPKG_ARCHITECTURE
|
||||||
cat <<EOF >/etc/apt/sources.list.d/jellyfin.sources
|
cat <<EOF >/etc/apt/sources.list.d/jellyfin.sources
|
||||||
Types: deb
|
Types: deb
|
||||||
URIs: https://repo.jellyfin.org/debian
|
URIs: https://repo.jellyfin.org/debian
|
||||||
Suites: bookworm
|
Suites: trixie
|
||||||
Components: main
|
Components: main
|
||||||
Architectures: ${DPKG_ARCHITECTURE}
|
Architectures: ${DPKG_ARCHITECTURE}
|
||||||
Signed-By: /etc/apt/keyrings/jellyfin.gpg
|
Signed-By: /etc/apt/keyrings/jellyfin.gpg
|
||||||
@@ -93,6 +94,7 @@ read -r -p "${TAB3}Install OpenVINO dependencies for Intel HW-accelerated machin
|
|||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing OpenVINO dependencies"
|
msg_info "Installing OpenVINO dependencies"
|
||||||
touch ~/.openvino
|
touch ~/.openvino
|
||||||
|
$STD apt-get install -y --no-install-recommends patchelf
|
||||||
tmp_dir=$(mktemp -d)
|
tmp_dir=$(mktemp -d)
|
||||||
$STD pushd "$tmp_dir"
|
$STD pushd "$tmp_dir"
|
||||||
curl -fsSLO https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17384.11/intel-igc-core_1.0.17384.11_amd64.deb
|
curl -fsSLO https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17384.11/intel-igc-core_1.0.17384.11_amd64.deb
|
||||||
@@ -100,6 +102,7 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
|||||||
curl -fsSLO https://github.com/intel/compute-runtime/releases/download/24.31.30508.7/intel-opencl-icd_24.31.30508.7_amd64.deb
|
curl -fsSLO https://github.com/intel/compute-runtime/releases/download/24.31.30508.7/intel-opencl-icd_24.31.30508.7_amd64.deb
|
||||||
curl -fsSLO https://github.com/intel/compute-runtime/releases/download/24.31.30508.7/libigdgmm12_22.4.1_amd64.deb
|
curl -fsSLO https://github.com/intel/compute-runtime/releases/download/24.31.30508.7/libigdgmm12_22.4.1_amd64.deb
|
||||||
$STD apt install -y ./*.deb
|
$STD apt install -y ./*.deb
|
||||||
|
$STD apt-mark hold libigdgmm12
|
||||||
$STD popd
|
$STD popd
|
||||||
rm -rf "$tmp_dir"
|
rm -rf "$tmp_dir"
|
||||||
dpkg -l | grep "intel-opencl-icd" | awk '{print $3}' >~/.intel_version
|
dpkg -l | grep "intel-opencl-icd" | awk '{print $3}' >~/.intel_version
|
||||||
@@ -134,27 +137,6 @@ $STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
|||||||
} >>~/"$APPLICATION".creds
|
} >>~/"$APPLICATION".creds
|
||||||
msg_ok "Set up Postgresql Database"
|
msg_ok "Set up Postgresql Database"
|
||||||
|
|
||||||
msg_info "Installing Packages from Testing Repo"
|
|
||||||
export APT_LISTCHANGES_FRONTEND=none
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
|
||||||
$STD apt-get install -t testing --no-install-recommends -y \
|
|
||||||
libio-compress-brotli-perl \
|
|
||||||
libwebp7 \
|
|
||||||
libwebpdemux2 \
|
|
||||||
libwebpmux3 \
|
|
||||||
libhwy1t64 \
|
|
||||||
libdav1d-dev \
|
|
||||||
libhwy-dev \
|
|
||||||
libwebp-dev \
|
|
||||||
libaom-dev
|
|
||||||
if [[ -f ~/.openvino ]]; then
|
|
||||||
$STD apt-get install -t testing -y patchelf
|
|
||||||
fi
|
|
||||||
msg_ok "Packages from Testing Repo Installed"
|
|
||||||
|
|
||||||
$STD sudo -u postgres psql -c "ALTER DATABASE postgres REFRESH COLLATION VERSION;"
|
|
||||||
$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME REFRESH COLLATION VERSION;"
|
|
||||||
|
|
||||||
msg_info "Compiling Custom Photo-processing Library (extreme patience)"
|
msg_info "Compiling Custom Photo-processing Library (extreme patience)"
|
||||||
LD_LIBRARY_PATH=/usr/local/lib
|
LD_LIBRARY_PATH=/usr/local/lib
|
||||||
export LD_RUN_PATH=/usr/local/lib
|
export LD_RUN_PATH=/usr/local/lib
|
||||||
@@ -165,12 +147,12 @@ SOURCE_DIR=${STAGING_DIR}/image-source
|
|||||||
$STD git clone -b main "$BASE_REPO" "$BASE_DIR"
|
$STD git clone -b main "$BASE_REPO" "$BASE_DIR"
|
||||||
mkdir -p "$SOURCE_DIR"
|
mkdir -p "$SOURCE_DIR"
|
||||||
|
|
||||||
|
msg_info "(1/5) Compiling libjxl"
|
||||||
cd "$STAGING_DIR"
|
cd "$STAGING_DIR"
|
||||||
SOURCE=${SOURCE_DIR}/libjxl
|
SOURCE=${SOURCE_DIR}/libjxl
|
||||||
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
|
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
|
||||||
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
|
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
|
||||||
# : "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}"
|
: "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}"
|
||||||
: "${LIBJXL_REVISION:=794a5dcf0d54f9f0b20d288a12e87afb91d20dfc}"
|
|
||||||
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
|
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
|
||||||
cd "$SOURCE"
|
cd "$SOURCE"
|
||||||
$STD git reset --hard "$LIBJXL_REVISION"
|
$STD git reset --hard "$LIBJXL_REVISION"
|
||||||
@@ -203,10 +185,11 @@ ldconfig /usr/local/lib
|
|||||||
$STD make clean
|
$STD make clean
|
||||||
cd "$STAGING_DIR"
|
cd "$STAGING_DIR"
|
||||||
rm -rf "$SOURCE"/{build,third_party}
|
rm -rf "$SOURCE"/{build,third_party}
|
||||||
|
msg_ok "(1/5) Compiled libjxl"
|
||||||
|
|
||||||
|
msg_info "(2/5) Compiling libheif"
|
||||||
SOURCE=${SOURCE_DIR}/libheif
|
SOURCE=${SOURCE_DIR}/libheif
|
||||||
# : "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
|
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
|
||||||
: "${LIBHEIF_REVISION:=35dad50a9145332a7bfdf1ff6aef6801fb613d68}"
|
|
||||||
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
|
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
|
||||||
cd "$SOURCE"
|
cd "$SOURCE"
|
||||||
$STD git reset --hard "$LIBHEIF_REVISION"
|
$STD git reset --hard "$LIBHEIF_REVISION"
|
||||||
@@ -227,10 +210,11 @@ ldconfig /usr/local/lib
|
|||||||
$STD make clean
|
$STD make clean
|
||||||
cd "$STAGING_DIR"
|
cd "$STAGING_DIR"
|
||||||
rm -rf "$SOURCE"/build
|
rm -rf "$SOURCE"/build
|
||||||
|
msg_ok "(2/5) Compiled libheif"
|
||||||
|
|
||||||
|
msg_info "(3/5) Compiling libraw"
|
||||||
SOURCE=${SOURCE_DIR}/libraw
|
SOURCE=${SOURCE_DIR}/libraw
|
||||||
# : "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
|
: "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
|
||||||
: "${LIBRAW_REVISION:=09bea31181b43e97959ee5452d91e5bc66365f1f}"
|
|
||||||
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
|
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
|
||||||
cd "$SOURCE"
|
cd "$SOURCE"
|
||||||
$STD git reset --hard "$LIBRAW_REVISION"
|
$STD git reset --hard "$LIBRAW_REVISION"
|
||||||
@@ -241,23 +225,25 @@ $STD make install
|
|||||||
ldconfig /usr/local/lib
|
ldconfig /usr/local/lib
|
||||||
$STD make clean
|
$STD make clean
|
||||||
cd "$STAGING_DIR"
|
cd "$STAGING_DIR"
|
||||||
|
msg_ok "(3/5) Compiled libraw"
|
||||||
|
|
||||||
|
msg_info "(4/5) Compiling imagemagick"
|
||||||
SOURCE=$SOURCE_DIR/imagemagick
|
SOURCE=$SOURCE_DIR/imagemagick
|
||||||
# : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}"
|
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}"
|
||||||
: "${IMAGEMAGICK_REVISION:=8289a3388a085ad5ae81aa6812f21554bdfd54f2}"
|
|
||||||
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
|
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
|
||||||
cd "$SOURCE"
|
cd "$SOURCE"
|
||||||
$STD git reset --hard "$IMAGEMAGICK_REVISION"
|
$STD git reset --hard "$IMAGEMAGICK_REVISION"
|
||||||
$STD ./configure --with-modules
|
$STD ./configure --with-modules CPPFLAGS="-DMAGICK_LIBRAW_VERSION_TAIL=202502"
|
||||||
$STD make -j"$(nproc)"
|
$STD make -j"$(nproc)"
|
||||||
$STD make install
|
$STD make install
|
||||||
ldconfig /usr/local/lib
|
ldconfig /usr/local/lib
|
||||||
$STD make clean
|
$STD make clean
|
||||||
cd "$STAGING_DIR"
|
cd "$STAGING_DIR"
|
||||||
|
msg_ok "(4/5) Compiled imagemagick"
|
||||||
|
|
||||||
|
msg_info "(5/5) Compiling libvips"
|
||||||
SOURCE=$SOURCE_DIR/libvips
|
SOURCE=$SOURCE_DIR/libvips
|
||||||
# : "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
|
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
|
||||||
: "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
|
|
||||||
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
|
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
|
||||||
cd "$SOURCE"
|
cd "$SOURCE"
|
||||||
$STD git reset --hard "$LIBVIPS_REVISION"
|
$STD git reset --hard "$LIBVIPS_REVISION"
|
||||||
@@ -267,6 +253,7 @@ $STD ninja install
|
|||||||
ldconfig /usr/local/lib
|
ldconfig /usr/local/lib
|
||||||
cd "$STAGING_DIR"
|
cd "$STAGING_DIR"
|
||||||
rm -rf "$SOURCE"/build
|
rm -rf "$SOURCE"/build
|
||||||
|
msg_ok "(5/5) Compiled libvips"
|
||||||
{
|
{
|
||||||
echo "imagemagick: $IMAGEMAGICK_REVISION"
|
echo "imagemagick: $IMAGEMAGICK_REVISION"
|
||||||
echo "libheif: $LIBHEIF_REVISION"
|
echo "libheif: $LIBHEIF_REVISION"
|
||||||
@@ -274,7 +261,7 @@ rm -rf "$SOURCE"/build
|
|||||||
echo "libraw: $LIBRAW_REVISION"
|
echo "libraw: $LIBRAW_REVISION"
|
||||||
echo "libvips: $LIBVIPS_REVISION"
|
echo "libvips: $LIBVIPS_REVISION"
|
||||||
} >~/.immich_library_revisions
|
} >~/.immich_library_revisions
|
||||||
msg_ok "Custom Photo-processing Library Compiled"
|
msg_ok "Custom Photo-processing Libraries Compiled Successfully"
|
||||||
|
|
||||||
INSTALL_DIR="/opt/${APPLICATION}"
|
INSTALL_DIR="/opt/${APPLICATION}"
|
||||||
UPLOAD_DIR="${INSTALL_DIR}/upload"
|
UPLOAD_DIR="${INSTALL_DIR}/upload"
|
||||||
@@ -285,9 +272,9 @@ 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.141.1" "$SRC_DIR"
|
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.142.1" "$SRC_DIR"
|
||||||
|
|
||||||
msg_info "Installing ${APPLICATION} (more patience please)"
|
msg_info "Installing ${APPLICATION} (patience)"
|
||||||
|
|
||||||
cd "$SRC_DIR"/server
|
cd "$SRC_DIR"/server
|
||||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||||
@@ -305,6 +292,7 @@ sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
|
|||||||
|
|
||||||
# openapi & web build
|
# openapi & web build
|
||||||
cd "$SRC_DIR"
|
cd "$SRC_DIR"
|
||||||
|
echo "packageImportMethod: hardlink" >>./pnpm-workspace.yaml
|
||||||
$STD pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install
|
$STD pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install
|
||||||
$STD pnpm --filter @immich/sdk --filter immich-web build
|
$STD pnpm --filter @immich/sdk --filter immich-web build
|
||||||
cp -a web/build "$APP_DIR"/www
|
cp -a web/build "$APP_DIR"/www
|
||||||
@@ -317,17 +305,17 @@ $STD pnpm --filter @immich/cli --prod --no-optional deploy "$APP_DIR"/cli
|
|||||||
msg_ok "Installed Immich Server and Web Components"
|
msg_ok "Installed Immich Server and Web Components"
|
||||||
|
|
||||||
cd "$SRC_DIR"/machine-learning
|
cd "$SRC_DIR"/machine-learning
|
||||||
mkdir -p "$ML_DIR"
|
$STD useradd -U -s /usr/sbin/nologin -r -M -d "$INSTALL_DIR" immich
|
||||||
|
mkdir -p "$ML_DIR" && chown -R immich:immich "$INSTALL_DIR"
|
||||||
export VIRTUAL_ENV="${ML_DIR}/ml-venv"
|
export VIRTUAL_ENV="${ML_DIR}/ml-venv"
|
||||||
$STD uv venv "$VIRTUAL_ENV"
|
|
||||||
if [[ -f ~/.openvino ]]; then
|
if [[ -f ~/.openvino ]]; then
|
||||||
msg_info "Installing HW-accelerated machine-learning"
|
msg_info "Installing HW-accelerated machine-learning"
|
||||||
uv -q sync --extra openvino --no-cache --active
|
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --active -n -p python3.11 --managed-python
|
||||||
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so"
|
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so"
|
||||||
msg_ok "Installed HW-accelerated machine-learning"
|
msg_ok "Installed HW-accelerated machine-learning"
|
||||||
else
|
else
|
||||||
msg_info "Installing machine-learning"
|
msg_info "Installing machine-learning"
|
||||||
uv -q sync --extra cpu --no-cache --active
|
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra cpu --active -n -p python3.11 --managed-python
|
||||||
msg_ok "Installed machine-learning"
|
msg_ok "Installed machine-learning"
|
||||||
fi
|
fi
|
||||||
cd "$SRC_DIR"
|
cd "$SRC_DIR"
|
||||||
@@ -366,8 +354,7 @@ mkdir -p /var/log/immich
|
|||||||
touch /var/log/immich/{web.log,ml.log}
|
touch /var/log/immich/{web.log,ml.log}
|
||||||
msg_ok "Installed ${APPLICATION}"
|
msg_ok "Installed ${APPLICATION}"
|
||||||
|
|
||||||
msg_info "Creating user, env file, scripts & services"
|
msg_info "Modifying user, creating env file, scripts & services"
|
||||||
$STD useradd -U -s /usr/sbin/nologin -r -M -d "$INSTALL_DIR" immich
|
|
||||||
usermod -aG video,render immich
|
usermod -aG video,render immich
|
||||||
|
|
||||||
cat <<EOF >"${INSTALL_DIR}"/.env
|
cat <<EOF >"${INSTALL_DIR}"/.env
|
||||||
@@ -456,11 +443,8 @@ WantedBy=multi-user.target
|
|||||||
EOF
|
EOF
|
||||||
chown -R immich:immich "$INSTALL_DIR" /var/log/immich
|
chown -R immich:immich "$INSTALL_DIR" /var/log/immich
|
||||||
systemctl enable -q --now "$APPLICATION"-ml.service "$APPLICATION"-web.service
|
systemctl enable -q --now "$APPLICATION"-ml.service "$APPLICATION"-web.service
|
||||||
msg_ok "Created user, env file, scripts and services"
|
msg_ok "Modified user, created env file, scripts and services"
|
||||||
|
|
||||||
sed -i "$ a VERSION_ID=12" /etc/os-release # otherwise the motd_ssh function will fail
|
|
||||||
cp /etc/debian_version ~/.debian_version.bak
|
|
||||||
sed -i 's/.*/13.0/' /etc/debian_version
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ mkdir -p $OLLAMA_INSTALL_DIR
|
|||||||
OLLAMA_URL="https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tgz"
|
OLLAMA_URL="https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tgz"
|
||||||
TMP_TAR="/tmp/ollama.tgz"
|
TMP_TAR="/tmp/ollama.tgz"
|
||||||
echo -e "\n"
|
echo -e "\n"
|
||||||
if curl -fL# -o "$TMP_TAR" "$OLLAMA_URL"; then
|
if curl -fL# -C - -o "$TMP_TAR" "$OLLAMA_URL"; then
|
||||||
if tar -xzf "$TMP_TAR" -C "$OLLAMA_INSTALL_DIR"; then
|
if tar -xzf "$TMP_TAR" -C "$OLLAMA_INSTALL_DIR"; then
|
||||||
ln -sf "$OLLAMA_INSTALL_DIR/bin/ollama" "$BINDIR/ollama"
|
ln -sf "$OLLAMA_INSTALL_DIR/bin/ollama" "$BINDIR/ollama"
|
||||||
echo "${RELEASE}" >/opt/Ollama_version.txt
|
echo "${RELEASE}" >/opt/Ollama_version.txt
|
||||||
|
|||||||
@@ -14,11 +14,13 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Proxmox Datacenter Manager"
|
msg_info "Installing Proxmox Datacenter Manager"
|
||||||
curl -fsSL https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg | gpg --dearmor -o /etc/apt/keyrings/proxmox-release-bookworm.gpg
|
curl -fsSL https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg -o /usr/share/keyrings/proxmox-archive-keyring.gpg
|
||||||
echo "deb [signed-by=/etc/apt/keyrings/proxmox-release-bookworm.gpg] http://download.proxmox.com/debian/pdm bookworm pdm-test " >/etc/apt/sources.list.d/proxmox-release-bookworm.list
|
echo "deb [signed-by=/usr/share/keyrings/proxmox-archive-keyring.gpg] http://download.proxmox.com/debian/pdm bookworm pdm-test " >/etc/apt/sources.list.d/pdm-test.list
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get install -y \
|
DEBIAN_FRONTEND=noninteractive
|
||||||
proxmox-datacenter-manager \
|
$STD apt-get -o Dpkg::Options::="--force-confdef" \
|
||||||
|
-o Dpkg::Options::="--force-confold" \
|
||||||
|
install -y proxmox-datacenter-manager \
|
||||||
proxmox-datacenter-manager-ui
|
proxmox-datacenter-manager-ui
|
||||||
msg_ok "Installed Proxmox Datacenter Manager"
|
msg_ok "Installed Proxmox Datacenter Manager"
|
||||||
|
|
||||||
|
|||||||
@@ -23,19 +23,17 @@ msg_ok "Installed Dependencies"
|
|||||||
|
|
||||||
msg_info "Adding RabbitMQ signing key"
|
msg_info "Adding RabbitMQ signing key"
|
||||||
curl -fsSL "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | gpg --dearmor >/usr/share/keyrings/com.rabbitmq.team.gpg
|
curl -fsSL "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | gpg --dearmor >/usr/share/keyrings/com.rabbitmq.team.gpg
|
||||||
curl -fsSL "https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key" | gpg --dearmor >/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg
|
|
||||||
curl -fsSL "https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key" | gpg --dearmor >/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg
|
|
||||||
msg_ok "Signing keys added"
|
msg_ok "Signing keys added"
|
||||||
|
|
||||||
msg_info "Adding RabbitMQ repository"
|
msg_info "Adding RabbitMQ repository"
|
||||||
cat <<EOF >/etc/apt/sources.list.d/rabbitmq.list
|
cat <<EOF >/etc/apt/sources.list.d/rabbitmq.list
|
||||||
## Provides modern Erlang/OTP releases from a Cloudsmith mirror
|
## Modern Erlang/OTP releases
|
||||||
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main
|
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main
|
||||||
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/debian $(lsb_release -cs) main
|
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main
|
||||||
|
|
||||||
## Provides RabbitMQ from a Cloudsmith mirror
|
## Provides modern RabbitMQ releases
|
||||||
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main
|
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main
|
||||||
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/debian $(lsb_release -cs) main
|
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main
|
||||||
EOF
|
EOF
|
||||||
msg_ok "RabbitMQ repository added"
|
msg_ok "RabbitMQ repository added"
|
||||||
|
|
||||||
|
|||||||
56
install/scraparr-install.sh
Normal file
56
install/scraparr-install.sh
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: JasonGreenC
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/thecfu/scraparr
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
|
fetch_and_deploy_gh_release "scrappar" "thecfu/scraparr" "tarball" "latest" "/opt/scraparr"
|
||||||
|
|
||||||
|
msg_info "Installing Scraparr"
|
||||||
|
cd /opt/scraparr
|
||||||
|
$STD uv venv /opt/scraparr/.venv
|
||||||
|
$STD /opt/scraparr/.venv/bin/python -m ensurepip --upgrade
|
||||||
|
$STD /opt/scraparr/.venv/bin/python -m pip install --upgrade pip
|
||||||
|
$STD /opt/scraparr/.venv/bin/python -m pip install -r /opt/scraparr/src/scraparr/requirements.txt
|
||||||
|
chmod -R 755 /opt/scraparr
|
||||||
|
mkdir -p /scraparr/config
|
||||||
|
mv /opt/scraparr/config.yaml /scraparr/config/config.yaml
|
||||||
|
chmod -R 755 /scraparr
|
||||||
|
msg_ok "Installed Scraparr"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/scraparr.service
|
||||||
|
[Unit]
|
||||||
|
Description=Scraparr
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/opt/scraparr/src
|
||||||
|
ExecStart=/opt/scraparr/.venv/bin/python -m scraparr.scraparr
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now scraparr
|
||||||
|
msg_ok "Configured Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
263
install/signoz-install.sh
Normal file
263
install/signoz-install.sh
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
#!/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://signoz.io/
|
||||||
|
|
||||||
|
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 \
|
||||||
|
apt-transport-https \
|
||||||
|
ca-certificates
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
JAVA_VERSION="21" setup_java
|
||||||
|
|
||||||
|
msg_info "Setting up ClickHouse"
|
||||||
|
curl -fsSL "https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key" | gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg
|
||||||
|
echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg arch=amd64] https://packages.clickhouse.com/deb stable main" >/etc/apt/sources.list.d/clickhouse.list
|
||||||
|
$STD apt-get update
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
$STD apt-get install -y clickhouse-server clickhouse-client
|
||||||
|
msg_ok "Setup ClickHouse"
|
||||||
|
|
||||||
|
msg_info "Setting up Zookeeper"
|
||||||
|
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"
|
||||||
|
mkdir -p /opt/zookeeper
|
||||||
|
mkdir -p /var/lib/zookeeper
|
||||||
|
mkdir -p /var/log/zookeeper
|
||||||
|
cp -r ~/apache-zookeeper-*-bin/* /opt/zookeeper
|
||||||
|
|
||||||
|
cat <<EOF >/opt/zookeeper/conf/zoo.cfg
|
||||||
|
tickTime=2000
|
||||||
|
dataDir=/var/lib/zookeeper
|
||||||
|
clientPort=2181
|
||||||
|
admin.serverPort=3181
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/opt/zookeeper/conf/zoo.env
|
||||||
|
ZOO_LOG_DIR=/var/log/zookeeper
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/zookeeper.service
|
||||||
|
[Unit]
|
||||||
|
Description=Zookeeper
|
||||||
|
Documentation=http://zookeeper.apache.org
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=/opt/zookeeper/conf/zoo.env
|
||||||
|
Type=forking
|
||||||
|
WorkingDirectory=/opt/zookeeper
|
||||||
|
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
|
||||||
|
ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg
|
||||||
|
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
|
||||||
|
TimeoutSec=30
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now zookeeper
|
||||||
|
msg_ok "Setup Zookeeper"
|
||||||
|
|
||||||
|
msg_info "Configuring ClickHouse"
|
||||||
|
cat <<EOF >/etc/clickhouse-server/config.d/cluster.xml
|
||||||
|
<clickhouse replace="true">
|
||||||
|
<distributed_ddl>
|
||||||
|
<path>/clickhouse/task_queue/ddl</path>
|
||||||
|
</distributed_ddl>
|
||||||
|
<remote_servers>
|
||||||
|
<cluster>
|
||||||
|
<shard>
|
||||||
|
<replica>
|
||||||
|
<host>127.0.0.1</host>
|
||||||
|
<port>9000</port>
|
||||||
|
</replica>
|
||||||
|
</shard>
|
||||||
|
</cluster>
|
||||||
|
</remote_servers>
|
||||||
|
<zookeeper>
|
||||||
|
<node>
|
||||||
|
<host>127.0.0.1</host>
|
||||||
|
<port>2181</port>
|
||||||
|
</node>
|
||||||
|
</zookeeper>
|
||||||
|
<macros>
|
||||||
|
<shard>01</shard>
|
||||||
|
<replica>01</replica>
|
||||||
|
</macros>
|
||||||
|
</clickhouse>
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now clickhouse-server
|
||||||
|
msg_ok "Configured ClickHouse"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "signoz-schema-migrator" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-schema-migrator" "signoz-schema-migrator_linux_amd64.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Running ClickHouse migrations"
|
||||||
|
cd /opt/signoz-schema-migrator/bin
|
||||||
|
$STD ./signoz-schema-migrator sync --dsn="tcp://localhost:9000?password=" --replication=true --up=
|
||||||
|
$STD ./signoz-schema-migrator async --dsn="tcp://localhost:9000?password=" --replication=true --up=
|
||||||
|
msg_ok "ClickHouse Migrations Completed"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "signoz" "SigNoz/signoz" "prebuild" "latest" "/opt/signoz" "signoz-community_linux_amd64.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Setting up SigNoz"
|
||||||
|
mkdir -p /var/lib/signoz
|
||||||
|
cat <<EOF >/opt/signoz/conf/systemd.env
|
||||||
|
SIGNOZ_INSTRUMENTATION_LOGS_LEVEL=info
|
||||||
|
INVITE_EMAIL_TEMPLATE=/opt/signoz/templates/invitation_email_template.html
|
||||||
|
SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db
|
||||||
|
SIGNOZ_WEB_ENABLED=true
|
||||||
|
SIGNOZ_WEB_DIRECTORY=/opt/signoz/web
|
||||||
|
SIGNOZ_JWT_SECRET=secret
|
||||||
|
SIGNOZ_ALERTMANAGER_PROVIDER=signoz
|
||||||
|
SIGNOZ_TELEMETRYSTORE_PROVIDER=clickhouse
|
||||||
|
SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://localhost:9000?password=
|
||||||
|
DOT_METRICS_ENABLED=true
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/signoz.service
|
||||||
|
[Unit]
|
||||||
|
Description=SigNoz
|
||||||
|
Documentation=https://signoz.io/docs
|
||||||
|
After=clickhouse-server.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
KillMode=mixed
|
||||||
|
Restart=on-failure
|
||||||
|
WorkingDirectory=/opt/signoz
|
||||||
|
EnvironmentFile=/opt/signoz/conf/systemd.env
|
||||||
|
ExecStart=/opt/signoz/bin/signoz server
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now signoz
|
||||||
|
msg_ok "Setup Signoz"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "signoz-otel-collector" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-otel-collector" "signoz-otel-collector_linux_amd64.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Setting up SigNoz OTel Collector"
|
||||||
|
mkdir -p /var/lib/signoz-otel-collector
|
||||||
|
cat <<EOF >/opt/signoz-otel-collector/conf/config.yaml
|
||||||
|
receivers:
|
||||||
|
otlp:
|
||||||
|
protocols:
|
||||||
|
grpc:
|
||||||
|
endpoint: 0.0.0.0:4317
|
||||||
|
max_recv_msg_size_mib: 16
|
||||||
|
http:
|
||||||
|
endpoint: 0.0.0.0:4318
|
||||||
|
jaeger:
|
||||||
|
protocols:
|
||||||
|
grpc:
|
||||||
|
endpoint: 0.0.0.0:14250
|
||||||
|
thrift_http:
|
||||||
|
endpoint: 0.0.0.0:14268
|
||||||
|
httplogreceiver/heroku:
|
||||||
|
endpoint: 0.0.0.0:8081
|
||||||
|
source: heroku
|
||||||
|
httplogreceiver/json:
|
||||||
|
endpoint: 0.0.0.0:8082
|
||||||
|
source: json
|
||||||
|
processors:
|
||||||
|
batch:
|
||||||
|
send_batch_size: 50000
|
||||||
|
timeout: 1s
|
||||||
|
signozspanmetrics/delta:
|
||||||
|
metrics_exporter: signozclickhousemetrics
|
||||||
|
latency_histogram_buckets: [100us, 1ms, 2ms, 6ms, 10ms, 50ms, 100ms, 250ms, 500ms, 1000ms, 1400ms, 2000ms, 5s, 10s, 20s, 40s, 60s]
|
||||||
|
dimensions_cache_size: 100000
|
||||||
|
dimensions:
|
||||||
|
- name: service.namespace
|
||||||
|
default: default
|
||||||
|
- name: deployment.environment
|
||||||
|
default: default
|
||||||
|
- name: signoz.collector.id
|
||||||
|
aggregation_temporality: AGGREGATION_TEMPORALITY_DELTA
|
||||||
|
extensions:
|
||||||
|
health_check:
|
||||||
|
endpoint: 0.0.0.0:13133
|
||||||
|
zpages:
|
||||||
|
endpoint: localhost:55679
|
||||||
|
pprof:
|
||||||
|
endpoint: localhost:1777
|
||||||
|
exporters:
|
||||||
|
clickhousetraces:
|
||||||
|
datasource: tcp://localhost:9000/signoz_traces?password=
|
||||||
|
use_new_schema: true
|
||||||
|
signozclickhousemetrics:
|
||||||
|
dsn: tcp://localhost:9000/signoz_metrics?password=
|
||||||
|
timeout: 45s
|
||||||
|
clickhouselogsexporter:
|
||||||
|
dsn: tcp://localhost:9000/signoz_logs?password=
|
||||||
|
timeout: 10s
|
||||||
|
use_new_schema: true
|
||||||
|
metadataexporter:
|
||||||
|
dsn: tcp://localhost:9000/signoz_metadata?password=
|
||||||
|
timeout: 10s
|
||||||
|
tenant_id: default
|
||||||
|
cache:
|
||||||
|
provider: in_memory
|
||||||
|
service:
|
||||||
|
telemetry:
|
||||||
|
logs:
|
||||||
|
encoding: json
|
||||||
|
extensions: [health_check, zpages, pprof]
|
||||||
|
pipelines:
|
||||||
|
traces:
|
||||||
|
receivers: [otlp, jaeger]
|
||||||
|
processors: [signozspanmetrics/delta, batch]
|
||||||
|
exporters: [clickhousetraces, metadataexporter]
|
||||||
|
metrics:
|
||||||
|
receivers: [otlp]
|
||||||
|
processors: [batch]
|
||||||
|
exporters: [metadataexporter, signozclickhousemetrics]
|
||||||
|
logs:
|
||||||
|
receivers: [otlp, httplogreceiver/heroku, httplogreceiver/json]
|
||||||
|
processors: [batch]
|
||||||
|
exporters: [clickhouselogsexporter, metadataexporter]
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/opt/signoz-otel-collector/conf/opamp.yaml
|
||||||
|
server_endpoint: ws://127.0.0.1:4320/v1/opamp
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/signoz-otel-collector.service
|
||||||
|
[Unit]
|
||||||
|
Description=SigNoz OTel Collector
|
||||||
|
Documentation=https://signoz.io/docs
|
||||||
|
After=clickhouse-server.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
KillMode=mixed
|
||||||
|
Restart=on-failure
|
||||||
|
WorkingDirectory=/opt/signoz-otel-collector
|
||||||
|
ExecStart=/opt/signoz-otel-collector/bin/signoz-otel-collector --config=/opt/signoz-otel-collector/conf/config.yaml --manager-config=/opt/signoz-otel-collector/conf/opamp.yaml --copy-path=/var/lib/signoz-otel-collector/config.yaml
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now signoz-otel-collector
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf ~/zookeeper.tar.gz
|
||||||
|
rm -rf ~/apache-zookeeper-*-bin
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
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"
|
||||||
@@ -18,7 +18,7 @@ $STD apt-get install -y \
|
|||||||
git
|
git
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="20" NODE_MODULE="yarn@latest,node-gyp" setup_nodejs
|
NODE_VERSION="22" NODE_MODULE="yarn@latest,node-gyp" setup_nodejs
|
||||||
PG_VERSION="17" setup_postgresql
|
PG_VERSION="17" setup_postgresql
|
||||||
fetch_and_deploy_gh_release "wikijs" "requarks/wiki" "prebuild" "latest" "/opt/wikijs" "wiki-js.tar.gz"
|
fetch_and_deploy_gh_release "wikijs" "requarks/wiki" "prebuild" "latest" "/opt/wikijs" "wiki-js.tar.gz"
|
||||||
|
|
||||||
|
|||||||
84
tools/pve/execute.sh
Normal file
84
tools/pve/execute.sh
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: jeroenzwart
|
||||||
|
# License: MIT
|
||||||
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
function header_info() {
|
||||||
|
clear
|
||||||
|
cat <<"EOF"
|
||||||
|
______ __ __ _ ________
|
||||||
|
/ ____/ _____ _______ __/ /____ / / | |/ / ____/
|
||||||
|
/ __/ | |/_/ _ \/ ___/ / / / __/ _ \ / / | / /
|
||||||
|
/ /____> </ __/ /__/ /_/ / /_/ __/ / /___/ / /___
|
||||||
|
/_____/_/|_|\___/\___/\__,_/\__/\___/ /_____/_/|_\____/
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
set -eEuo pipefail
|
||||||
|
BL=$(echo "\033[36m")
|
||||||
|
RD=$(echo "\033[01;31m")
|
||||||
|
CM='\xE2\x9C\x94\033'
|
||||||
|
GN=$(echo "\033[1;92m")
|
||||||
|
CL=$(echo "\033[m")
|
||||||
|
header_info
|
||||||
|
echo "Loading..."
|
||||||
|
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Execute" --yesno "This will execute a command inside selected LXC Containers. Proceed?" 10 58
|
||||||
|
NODE=$(hostname)
|
||||||
|
EXCLUDE_MENU=()
|
||||||
|
MSG_MAX_LENGTH=0
|
||||||
|
while read -r TAG ITEM; do
|
||||||
|
OFFSET=2
|
||||||
|
((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=${#ITEM}+OFFSET
|
||||||
|
EXCLUDE_MENU+=("$TAG" "$ITEM " "OFF")
|
||||||
|
done < <(pct list | awk 'NR>1')
|
||||||
|
excluded_containers=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --checklist "\nSelect containers to skip from executing:\n" \
|
||||||
|
16 $((MSG_MAX_LENGTH + 23)) 6 "${EXCLUDE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"')
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
read -r -p "Enter here command for inside the containers: " custom_command
|
||||||
|
|
||||||
|
header_info
|
||||||
|
echo "One moment please...\n"
|
||||||
|
|
||||||
|
function execute_in() {
|
||||||
|
container=$1
|
||||||
|
name=$(pct exec "$container" hostname)
|
||||||
|
echo -e "${BL}[Info]${GN} Execute inside${BL} ${name}${GN} with output: ${CL}"
|
||||||
|
pct exec "$container" -- bash -c "${custom_command}" | tee
|
||||||
|
}
|
||||||
|
|
||||||
|
for container in $(pct list | awk '{if(NR>1) print $1}'); do
|
||||||
|
if [[ " ${excluded_containers[@]} " =~ " $container " ]]; then
|
||||||
|
echo -e "${BL}[Info]${GN} Skipping ${BL}$container${CL}"
|
||||||
|
else
|
||||||
|
os=$(pct config "$container" | awk '/^ostype/ {print $2}')
|
||||||
|
if [ "$os" != "debian" ] && [ "$os" != "ubuntu" ]; then
|
||||||
|
echo -e "${BL}[Info]${GN} Skipping ${name} ${RD}$container is not Debian or Ubuntu ${CL}"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
status=$(pct status "$container")
|
||||||
|
template=$(pct config "$container" | grep -q "template:" && echo "true" || echo "false")
|
||||||
|
if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then
|
||||||
|
echo -e "${BL}[Info]${GN} Starting${BL} $container ${CL}"
|
||||||
|
pct start "$container"
|
||||||
|
echo -e "${BL}[Info]${GN} Waiting For${BL} $container${CL}${GN} To Start ${CL}"
|
||||||
|
sleep 5
|
||||||
|
execute_in "$container"
|
||||||
|
echo -e "${BL}[Info]${GN} Shutting down${BL} $container ${CL}"
|
||||||
|
pct shutdown "$container" &
|
||||||
|
elif [ "$status" == "status: running" ]; then
|
||||||
|
execute_in "$container"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
wait
|
||||||
|
|
||||||
|
echo -e "${GN} Finished, execute command inside selected containers. ${CL} \n"
|
||||||
@@ -205,6 +205,15 @@ function exit-script() {
|
|||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ensure_pv() {
|
||||||
|
if ! command -v pv &>/dev/null; then
|
||||||
|
msg_info "Installing required package: pv"
|
||||||
|
apt-get update -qq &>/dev/null
|
||||||
|
apt-get install -y pv &>/dev/null
|
||||||
|
msg_ok "Installed pv"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
function default_settings() {
|
function default_settings() {
|
||||||
BRANCH="$stable"
|
BRANCH="$stable"
|
||||||
VMID=$(get_valid_nextid)
|
VMID=$(get_valid_nextid)
|
||||||
@@ -448,8 +457,8 @@ check_root
|
|||||||
arch_check
|
arch_check
|
||||||
pve_check
|
pve_check
|
||||||
ssh_check
|
ssh_check
|
||||||
|
ensure_pv
|
||||||
start_script
|
start_script
|
||||||
|
|
||||||
post_to_api_vm
|
post_to_api_vm
|
||||||
|
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
@@ -505,10 +514,6 @@ else
|
|||||||
msg_ok "Using cached image ${CL}${BL}$(basename "$CACHE_FILE")${CL}"
|
msg_ok "Using cached image ${CL}${BL}$(basename "$CACHE_FILE")${CL}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! command -v pv &>/dev/null; then
|
|
||||||
apt-get update -qq &>/dev/null && apt-get install -y pv &>/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
set -o pipefail
|
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} \
|
||||||
|
|||||||
@@ -22,13 +22,13 @@ function header_info {
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
header_info
|
header_info
|
||||||
echo -e "Loading..."
|
echo -e "\n Loading..."
|
||||||
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
METHOD=""
|
METHOD=""
|
||||||
NSAPP="openwrt-vm"
|
NSAPP="openwrt-vm"
|
||||||
var_os="openwrt"
|
var_os="openwrt"
|
||||||
var_version=" "
|
var_version=" "
|
||||||
DISK_SIZE="0.5G"
|
DISK_SIZE="1G"
|
||||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
|
|
||||||
@@ -40,10 +40,31 @@ BGN=$(echo "\033[4;92m")
|
|||||||
GN=$(echo "\033[1;92m")
|
GN=$(echo "\033[1;92m")
|
||||||
DGN=$(echo "\033[32m")
|
DGN=$(echo "\033[32m")
|
||||||
CL=$(echo "\033[m")
|
CL=$(echo "\033[m")
|
||||||
|
|
||||||
|
BOLD=$(echo "\033[1m")
|
||||||
BFR="\\r\\033[K"
|
BFR="\\r\\033[K"
|
||||||
HOLD="-"
|
HOLD=" "
|
||||||
CM="${GN}✓${CL}"
|
TAB=" "
|
||||||
CROSS="${RD}✗${CL}"
|
|
||||||
|
CM="${TAB}✔️${TAB}${CL}"
|
||||||
|
CROSS="${TAB}✖️${TAB}${CL}"
|
||||||
|
INFO="${TAB}💡${TAB}${CL}"
|
||||||
|
OS="${TAB}🖥️${TAB}${CL}"
|
||||||
|
CONTAINERTYPE="${TAB}📦${TAB}${CL}"
|
||||||
|
DISKSIZE="${TAB}💾${TAB}${CL}"
|
||||||
|
CPUCORE="${TAB}🧠${TAB}${CL}"
|
||||||
|
RAMSIZE="${TAB}🛠️${TAB}${CL}"
|
||||||
|
CONTAINERID="${TAB}🆔${TAB}${CL}"
|
||||||
|
HOSTNAME="${TAB}🏠${TAB}${CL}"
|
||||||
|
BRIDGE="${TAB}🌉${TAB}${CL}"
|
||||||
|
GATEWAY="${TAB}🌐${TAB}${CL}"
|
||||||
|
DEFAULT="${TAB}⚙️${TAB}${CL}"
|
||||||
|
MACADDRESS="${TAB}🔗${TAB}${CL}"
|
||||||
|
VLANTAG="${TAB}🏷️${TAB}${CL}"
|
||||||
|
CREATING="${TAB}🚀${TAB}${CL}"
|
||||||
|
ADVANCED="${TAB}🧩${TAB}${CL}"
|
||||||
|
CLOUD="${TAB}☁️${TAB}${CL}"
|
||||||
|
|
||||||
set -Eeo pipefail
|
set -Eeo pipefail
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
@@ -248,35 +269,30 @@ function exit-script() {
|
|||||||
|
|
||||||
function default_settings() {
|
function default_settings() {
|
||||||
VMID=$(get_valid_nextid)
|
VMID=$(get_valid_nextid)
|
||||||
HN=openwrt
|
HN="openwrt"
|
||||||
CORE_COUNT="1"
|
CORE_COUNT="1"
|
||||||
RAM_SIZE="256"
|
RAM_SIZE="256"
|
||||||
BRG="vmbr0"
|
BRG="vmbr0"
|
||||||
VLAN=""
|
LAN_BRG="vmbr0"
|
||||||
MAC=$GEN_MAC
|
MAC=$GEN_MAC
|
||||||
LAN_MAC=$GEN_MAC_LAN
|
LAN_MAC=$GEN_MAC_LAN
|
||||||
LAN_BRG="vmbr0"
|
VLAN=""
|
||||||
|
LAN_VLAN=",tag=999"
|
||||||
LAN_IP_ADDR="192.168.1.1"
|
LAN_IP_ADDR="192.168.1.1"
|
||||||
LAN_NETMASK="255.255.255.0"
|
LAN_NETMASK="255.255.255.0"
|
||||||
LAN_VLAN=",tag=999"
|
|
||||||
MTU=""
|
MTU=""
|
||||||
START_VM="yes"
|
START_VM="yes"
|
||||||
METHOD="default"
|
METHOD="default"
|
||||||
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
|
DISK_SIZE="1G"
|
||||||
echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
|
echo -e "${CONTAINERID}${BOLD}${DGN}VMID: ${BGN}${VMID}${CL}"
|
||||||
echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
|
echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
|
||||||
echo -e "${DGN}Allocated RAM: ${BGN}${RAM_SIZE}${CL}"
|
echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
|
||||||
echo -e "${DGN}Using WAN Bridge: ${BGN}${BRG}${CL}"
|
echo -e "${RAMSIZE}${BOLD}${DGN}RAM: ${BGN}${RAM_SIZE}${CL}"
|
||||||
echo -e "${DGN}Using WAN VLAN: ${BGN}Default${CL}"
|
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
||||||
echo -e "${DGN}Using WAN MAC Address: ${BGN}${MAC}${CL}"
|
echo -e "${BRIDGE}${BOLD}${DGN}WAN Bridge: ${BGN}${BRG}${CL}"
|
||||||
echo -e "${DGN}Using LAN MAC Address: ${BGN}${LAN_MAC}${CL}"
|
echo -e "${BRIDGE}${BOLD}${DGN}LAN Bridge: ${BGN}${LAN_BRG}${CL}"
|
||||||
echo -e "${DGN}Using LAN Bridge: ${BGN}${LAN_BRG}${CL}"
|
echo -e "${MACADDRESS}${BOLD}${DGN}WAN MAC: ${BGN}${MAC}${CL}"
|
||||||
echo -e "${DGN}Using LAN VLAN: ${BGN}999${CL}"
|
echo -e "${MACADDRESS}${BOLD}${DGN}LAN MAC: ${BGN}${LAN_MAC}${CL}"
|
||||||
echo -e "${DGN}Using LAN IP Address: ${BGN}${LAN_IP_ADDR}${CL}"
|
|
||||||
echo -e "${DGN}Using LAN NETMASK: ${BGN}${LAN_NETMASK}${CL}"
|
|
||||||
echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}"
|
|
||||||
echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}"
|
|
||||||
echo -e "${BL}Creating a OpenWrt VM using the above default settings${CL}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
@@ -328,6 +344,17 @@ function advanced_settings() {
|
|||||||
exit-script
|
exit-script
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" \
|
||||||
|
--inputbox "Set Disk Size in GiB (e.g., 1, 2, 4)" 8 58 "1" \
|
||||||
|
--title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
|
if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then
|
||||||
|
DISK_SIZE="${DISK_SIZE}G"
|
||||||
|
fi
|
||||||
|
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
||||||
|
else
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
|
||||||
if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a WAN Bridge" 8 58 vmbr0 --title "WAN BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a WAN Bridge" 8 58 vmbr0 --title "WAN BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $BRG ]; then
|
if [ -z $BRG ]; then
|
||||||
BRG="vmbr0"
|
BRG="vmbr0"
|
||||||
@@ -491,47 +518,39 @@ response=$(curl -fsSL https://openwrt.org)
|
|||||||
stableversion=$(echo "$response" | sed -n 's/.*Current stable release - OpenWrt \([0-9.]\+\).*/\1/p' | head -n 1)
|
stableversion=$(echo "$response" | sed -n 's/.*Current stable release - OpenWrt \([0-9.]\+\).*/\1/p' | head -n 1)
|
||||||
URL="https://downloads.openwrt.org/releases/$stableversion/targets/x86/64/openwrt-$stableversion-x86-64-generic-ext4-combined.img.gz"
|
URL="https://downloads.openwrt.org/releases/$stableversion/targets/x86/64/openwrt-$stableversion-x86-64-generic-ext4-combined.img.gz"
|
||||||
|
|
||||||
sleep 2
|
|
||||||
msg_ok "${CL}${BL}${URL}${CL}"
|
msg_ok "${CL}${BL}${URL}${CL}"
|
||||||
curl -f#SL -o "$(basename "$URL")" "$URL"
|
curl -f#SL -o "$(basename "$URL")" "$URL"
|
||||||
echo -en "\e[1A\e[0K"
|
FILE=$(basename "$URL")
|
||||||
FILE=$(basename $URL)
|
|
||||||
msg_ok "Downloaded ${CL}${BL}$FILE${CL}"
|
msg_ok "Downloaded ${CL}${BL}$FILE${CL}"
|
||||||
gunzip -f $FILE >/dev/null 2>/dev/null || true
|
|
||||||
NEWFILE="${FILE%.*}"
|
gunzip -f "$FILE" >/dev/null 2>&1 || true
|
||||||
FILE="$NEWFILE"
|
FILE="${FILE%.*}"
|
||||||
mv $FILE ${FILE%.*}
|
msg_ok "Extracted OpenWrt Disk Image ${CL}${BL}$FILE${CL}"
|
||||||
qemu-img resize -f raw ${FILE%.*} 512M >/dev/null 2>/dev/null
|
|
||||||
msg_ok "Extracted & Resized OpenWrt Disk Image ${CL}${BL}$FILE${CL}"
|
|
||||||
STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}')
|
|
||||||
case $STORAGE_TYPE in
|
|
||||||
nfs | dir)
|
|
||||||
DISK_EXT=".qcow2"
|
|
||||||
DISK_REF="$VMID/"
|
|
||||||
DISK_IMPORT="-format qcow2"
|
|
||||||
;;
|
|
||||||
btrfs)
|
|
||||||
DISK_EXT=".raw"
|
|
||||||
DISK_REF="$VMID/"
|
|
||||||
DISK_IMPORT="-format raw"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
for i in {0,1}; do
|
|
||||||
disk="DISK$i"
|
|
||||||
eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
|
|
||||||
eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
|
|
||||||
done
|
|
||||||
|
|
||||||
msg_info "Creating OpenWrt VM"
|
msg_info "Creating OpenWrt VM"
|
||||||
qm create $VMID -cores $CORE_COUNT -memory $RAM_SIZE -name $HN \
|
qm create "$VMID" -cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" \
|
||||||
-onboot 1 -ostype l26 -scsihw virtio-scsi-pci --tablet 0
|
-onboot 1 -ostype l26 -scsihw virtio-scsi-pci --tablet 0
|
||||||
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
pvesm alloc "$STORAGE" "$VMID" "vm-$VMID-disk-0" 4M >/dev/null
|
||||||
qm importdisk $VMID ${FILE%.*} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
|
||||||
qm set $VMID \
|
IMPORT_OUT="$(qm importdisk "$VMID" "$FILE" "$STORAGE" --format raw 2>&1 || true)"
|
||||||
-efidisk0 ${DISK0_REF},efitype=4m,size=4M \
|
DISK_REF="$(printf '%s\n' "$IMPORT_OUT" | sed -n "s/.*successfully imported disk '\([^']\+\)'.*/\1/p")"
|
||||||
-scsi0 ${DISK1_REF},size=512M \
|
|
||||||
|
if [[ -z "$DISK_REF" ]]; then
|
||||||
|
DISK_REF="$(pvesm list "$STORAGE" | awk -v id="$VMID" '$1 ~ ("vm-"id"-disk-") {print $1}' | sort | tail -n1)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$DISK_REF" ]]; then
|
||||||
|
msg_error "Unable to determine imported disk reference."
|
||||||
|
echo "$IMPORT_OUT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
qm set "$VMID" \
|
||||||
|
-efidisk0 "${STORAGE}:0,efitype=4m,size=4M" \
|
||||||
|
-scsi0 "${DISK_REF},size=${DISK_SIZE}" \
|
||||||
-boot order=scsi0 \
|
-boot order=scsi0 \
|
||||||
-tags community-script >/dev/null
|
-tags community-script >/dev/null
|
||||||
|
msg_ok "Attached disk (${DISK_SIZE})"
|
||||||
|
|
||||||
DESCRIPTION=$(
|
DESCRIPTION=$(
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
@@ -569,37 +588,59 @@ msg_ok "Created OpenWrt VM ${CL}${BL}(${HN})"
|
|||||||
msg_info "OpenWrt is being started in order to configure the network interfaces."
|
msg_info "OpenWrt is being started in order to configure the network interfaces."
|
||||||
qm start $VMID
|
qm start $VMID
|
||||||
sleep 15
|
sleep 15
|
||||||
|
msg_info "Waiting for OpenWrt to boot..."
|
||||||
|
for i in {1..30}; do
|
||||||
|
if qm status "$VMID" | grep -q "running"; then
|
||||||
|
sleep 5
|
||||||
|
msg_ok "OpenWrt is running"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
msg_ok "Network interfaces are being configured as OpenWrt initiates."
|
msg_ok "Network interfaces are being configured as OpenWrt initiates."
|
||||||
send_line_to_vm ""
|
|
||||||
send_line_to_vm "uci delete network.@device[0]"
|
if qm status "$VMID" | grep -q "running"; then
|
||||||
send_line_to_vm "uci set network.wan=interface"
|
send_line_to_vm ""
|
||||||
send_line_to_vm "uci set network.wan.device=eth1"
|
send_line_to_vm "uci delete network.@device[0]"
|
||||||
send_line_to_vm "uci set network.wan.proto=dhcp"
|
send_line_to_vm "uci set network.wan=interface"
|
||||||
send_line_to_vm "uci delete network.lan"
|
send_line_to_vm "uci set network.wan.device=eth1"
|
||||||
send_line_to_vm "uci set network.lan=interface"
|
send_line_to_vm "uci set network.wan.proto=dhcp"
|
||||||
send_line_to_vm "uci set network.lan.device=eth0"
|
send_line_to_vm "uci delete network.lan"
|
||||||
send_line_to_vm "uci set network.lan.proto=static"
|
send_line_to_vm "uci set network.lan=interface"
|
||||||
send_line_to_vm "uci set network.lan.ipaddr=${LAN_IP_ADDR}"
|
send_line_to_vm "uci set network.lan.device=eth0"
|
||||||
send_line_to_vm "uci set network.lan.netmask=${LAN_NETMASK}"
|
send_line_to_vm "uci set network.lan.proto=static"
|
||||||
send_line_to_vm "uci commit"
|
send_line_to_vm "uci set network.lan.ipaddr=${LAN_IP_ADDR}"
|
||||||
send_line_to_vm "halt"
|
send_line_to_vm "uci set network.lan.netmask=${LAN_NETMASK}"
|
||||||
msg_ok "Network interfaces have been successfully configured."
|
send_line_to_vm "uci commit"
|
||||||
until qm status $VMID | grep -q "stopped"; do
|
send_line_to_vm "halt"
|
||||||
|
msg_ok "Network interfaces configured in OpenWrt"
|
||||||
|
else
|
||||||
|
msg_error "VM is not running"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Waiting for OpenWrt to shut down..."
|
||||||
|
until qm status "$VMID" | grep -q "stopped"; do
|
||||||
sleep 2
|
sleep 2
|
||||||
done
|
done
|
||||||
msg_info "Bridge interfaces are being added."
|
msg_ok "OpenWrt has shut down"
|
||||||
qm set $VMID \
|
|
||||||
-net0 virtio,bridge=${LAN_BRG},macaddr=${LAN_MAC}${LAN_VLAN}${MTU} \
|
msg_info "Adding bridge interfaces on Proxmox side"
|
||||||
-net1 virtio,bridge=${BRG},macaddr=${MAC}${VLAN}${MTU} >/dev/null 2>/dev/null
|
qm set "$VMID" \
|
||||||
msg_ok "Bridge interfaces have been successfully added."
|
-net0 virtio,bridge="${LAN_BRG}",macaddr="${LAN_MAC}${LAN_VLAN}${MTU}" \
|
||||||
if [ "$START_VM" == "yes" ]; then
|
-net1 virtio,bridge="${BRG}",macaddr="${MAC}${VLAN}${MTU}" >/dev/null
|
||||||
|
msg_ok "Bridge interfaces added"
|
||||||
|
|
||||||
|
if [ "$START_VM" = "yes" ]; then
|
||||||
msg_info "Starting OpenWrt VM"
|
msg_info "Starting OpenWrt VM"
|
||||||
qm start $VMID
|
qm start "$VMID"
|
||||||
msg_ok "Started OpenWrt VM"
|
msg_ok "Started OpenWrt VM"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
VLAN_FINISH=""
|
VLAN_FINISH=""
|
||||||
if [ "$VLAN" == "" ] && [ "$VLAN2" != "999" ]; then
|
if [ -z "$VLAN" ] && [ "$VLAN2" != "999" ]; then
|
||||||
VLAN_FINISH=" Please remember to adjust the VLAN tags to suit your network."
|
VLAN_FINISH=" Please remember to adjust the VLAN tags to suit your network."
|
||||||
fi
|
fi
|
||||||
post_update_to_api "done" "none"
|
post_update_to_api "done" "none"
|
||||||
msg_ok "Completed Successfully!\n${VLAN_FINISH}"
|
msg_ok "Completed Successfully!${VLAN_FINISH:+\n$VLAN_FINISH}"
|
||||||
@@ -201,6 +201,15 @@ function exit-script() {
|
|||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ensure_pv() {
|
||||||
|
if ! command -v pv &>/dev/null; then
|
||||||
|
msg_info "Installing required package: pv"
|
||||||
|
apt-get update -qq &>/dev/null
|
||||||
|
apt-get install -y pv &>/dev/null
|
||||||
|
msg_ok "Installed pv"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
function default_settings() {
|
function default_settings() {
|
||||||
VMID=$(get_valid_nextid)
|
VMID=$(get_valid_nextid)
|
||||||
MACHINE="q35"
|
MACHINE="q35"
|
||||||
@@ -432,6 +441,7 @@ check_root
|
|||||||
arch_check
|
arch_check
|
||||||
pve_check
|
pve_check
|
||||||
ssh_check
|
ssh_check
|
||||||
|
ensure_pv
|
||||||
start_script
|
start_script
|
||||||
|
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
@@ -472,10 +482,6 @@ else
|
|||||||
msg_ok "Using cached Umbrel OS image"
|
msg_ok "Using cached Umbrel OS image"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! command -v pv &>/dev/null; then
|
|
||||||
apt-get update -qq &>/dev/null && apt-get install -y pv &>/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
set -o pipefail
|
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 \
|
||||||
|
|||||||
Reference in New Issue
Block a user