mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-15 19:53:31 +01:00
Compare commits
60 Commits
2025-09-21
...
2025-09-23
| Author | SHA1 | Date | |
|---|---|---|---|
| 06ca6e2087 | |||
| 8c48ea6718 | |||
| b626e705eb | |||
| f103d09c09 | |||
| 82a7d252ab | |||
| 48af77e928 | |||
| d24308a409 | |||
| 584365fff1 | |||
| 95c54dccd7 | |||
| eb28463d86 | |||
| bddde99252 | |||
| f1f8c1b279 | |||
| 37a0a4add9 | |||
| 02cede3f5d | |||
| 42a7d57a42 | |||
| 53b5f0d1fe | |||
| 4a56d8d9aa | |||
| f819188a5e | |||
| 4d6e3e5977 | |||
| d6fc527200 | |||
| c103c3b03d | |||
| 2d290cb27f | |||
| 883efd1cd2 | |||
| 1f40670ea0 | |||
| cec4e2d5c1 | |||
| 1fafb3f661 | |||
| b56b053e8b | |||
| 21f98835dc | |||
| ab455d7748 | |||
| 5382fa1dbd | |||
| 6fa1938360 | |||
| 2a2df5b5cc | |||
| f99d582eb5 | |||
| d3f24ae5b2 | |||
| 25e89f7bac | |||
| 2686753448 | |||
| 19678e2534 | |||
| 1ac8f90281 | |||
| 7cd3e40f9c | |||
| 42191bdb5a | |||
| aab1a9bce5 | |||
| 208226065b | |||
| 54e62749be | |||
| 2a8e2e62cd | |||
| b15d7be4c3 | |||
| e208bc110b | |||
| b26ad61a33 | |||
| 5beaec9514 | |||
| 3a668870b7 | |||
| 3266962630 | |||
| 2a3f5d7b47 | |||
| fb4c3cf9e9 | |||
| e96ea4eb40 | |||
| dfbe5f03ce | |||
| 9c53c70f6b | |||
| a3c7f468ef | |||
| 605f7a0330 | |||
| 306627378e | |||
| 0e464cb192 | |||
| 277f6ce7d1 |
38
.github/label-priority.json
generated
vendored
38
.github/label-priority.json
generated
vendored
@ -1,38 +0,0 @@
|
||||
{
|
||||
"priorities": {
|
||||
"refactor": 3,
|
||||
"feature": 2,
|
||||
"bugfix": 1,
|
||||
"new script": 3,
|
||||
"update script": 2,
|
||||
"delete script": 2,
|
||||
"json": 3,
|
||||
"website": 2,
|
||||
"maintenance": 1,
|
||||
"documentation": 1,
|
||||
"core": 2,
|
||||
"api": 2,
|
||||
"addon": 2,
|
||||
"pve-tool": 2,
|
||||
"vm": 2,
|
||||
"github": 1
|
||||
},
|
||||
"conflicts": {
|
||||
"bugfix": ["refactor"],
|
||||
"website": ["json"],
|
||||
"update script": ["new script", "delete script"],
|
||||
"new script": ["update script", "delete script"],
|
||||
"delete script": ["new script", "update script"]
|
||||
},
|
||||
"rules": {
|
||||
"always_combine": [
|
||||
"maintenance",
|
||||
"core",
|
||||
"api",
|
||||
"addon",
|
||||
"pve-tool",
|
||||
"vm",
|
||||
"github"
|
||||
]
|
||||
}
|
||||
}
|
||||
116
.github/workflows/autolabeler.yml
generated
vendored
116
.github/workflows/autolabeler.yml
generated
vendored
@ -112,119 +112,3 @@ jobs:
|
||||
labels: Array.from(labelsToAdd),
|
||||
});
|
||||
}
|
||||
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(", ")}`
|
||||
});
|
||||
}
|
||||
|
||||
54
CHANGELOG.md
54
CHANGELOG.md
@ -10,8 +10,62 @@
|
||||
> [!CAUTION]
|
||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||
|
||||
## 2025-09-24
|
||||
|
||||
## 2025-09-23
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- UpSnap ([#7825](https://github.com/community-scripts/ProxmoxVE/pull/7825))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- tools.func: Check for /usr/local/bin in PATH during yq setup [@vhsdream](https://github.com/vhsdream) ([#7856](https://github.com/community-scripts/ProxmoxVE/pull/7856))
|
||||
- BookLore: increase RAM [@vhsdream](https://github.com/vhsdream) ([#7855](https://github.com/community-scripts/ProxmoxVE/pull/7855))
|
||||
- Bump Immich to v1.143.1 [@vhsdream](https://github.com/vhsdream) ([#7864](https://github.com/community-scripts/ProxmoxVE/pull/7864))
|
||||
- zabbix: Remove not exist admin credentials from output [@MickLesk](https://github.com/MickLesk) ([#7849](https://github.com/community-scripts/ProxmoxVE/pull/7849))
|
||||
- Suppress wrong errors from uv shell integration in setup_uv [@MickLesk](https://github.com/MickLesk) ([#7822](https://github.com/community-scripts/ProxmoxVE/pull/7822))
|
||||
- Refactor Caddyfile configuration for headscale-admin [@MickLesk](https://github.com/MickLesk) ([#7821](https://github.com/community-scripts/ProxmoxVE/pull/7821))
|
||||
- Improve subscription element removal (mobile) in post-pve script [@MickLesk](https://github.com/MickLesk) ([#7814](https://github.com/community-scripts/ProxmoxVE/pull/7814))
|
||||
- Blocky: Fix release fetching [@tremor021](https://github.com/tremor021) ([#7807](https://github.com/community-scripts/ProxmoxVE/pull/7807))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Improve globaleaks install ensuring install can proceed without user … [@evilaliv3](https://github.com/evilaliv3) ([#7860](https://github.com/community-scripts/ProxmoxVE/pull/7860))
|
||||
- Manage My Damn Life: use NodeJS 22 [@vhsdream](https://github.com/vhsdream) ([#7861](https://github.com/community-scripts/ProxmoxVE/pull/7861))
|
||||
- VM: Increase pv & xz functions (HA OS / Umbrel OS) [@MickLesk](https://github.com/MickLesk) ([#7838](https://github.com/community-scripts/ProxmoxVE/pull/7838))
|
||||
- Tandoor: update for newer dependencies (psql) + bump nodejs to 22 [@MickLesk](https://github.com/MickLesk) ([#7826](https://github.com/community-scripts/ProxmoxVE/pull/7826))
|
||||
- Update Monica and Outline to use Node.js 22 [@MickLesk](https://github.com/MickLesk) ([#7833](https://github.com/community-scripts/ProxmoxVE/pull/7833))
|
||||
- Update Zabbix install for Debian 13 and agent selection [@MickLesk](https://github.com/MickLesk) ([#7819](https://github.com/community-scripts/ProxmoxVE/pull/7819))
|
||||
- tracktor: bump to debian 13 | feature bump [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7818](https://github.com/community-scripts/ProxmoxVE/pull/7818))
|
||||
- LiteLLM: Bump to Debian 13 & add deps [@MickLesk](https://github.com/MickLesk) ([#7815](https://github.com/community-scripts/ProxmoxVE/pull/7815))
|
||||
- Immich: bump to v1.143.0 [@vhsdream](https://github.com/vhsdream) ([#7801](https://github.com/community-scripts/ProxmoxVE/pull/7801))
|
||||
|
||||
### 🧰 Maintenance
|
||||
|
||||
- #### 📂 Github
|
||||
|
||||
- gh: remove ai autolabel test [@MickLesk](https://github.com/MickLesk) ([#7817](https://github.com/community-scripts/ProxmoxVE/pull/7817))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 📝 Script Information
|
||||
|
||||
- OpenWebUI: Add information about Ollama [@tremor021](https://github.com/tremor021) ([#7843](https://github.com/community-scripts/ProxmoxVE/pull/7843))
|
||||
- cosmos: add info note for configuration file [@MickLesk](https://github.com/MickLesk) ([#7824](https://github.com/community-scripts/ProxmoxVE/pull/7824))
|
||||
- ElementSynapse: add note for Bridge Install Methods [@MickLesk](https://github.com/MickLesk) ([#7820](https://github.com/community-scripts/ProxmoxVE/pull/7820))
|
||||
|
||||
## 2025-09-22
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- [core]: Update detection of current running subshell [@tremor021](https://github.com/tremor021) ([#7796](https://github.com/community-scripts/ProxmoxVE/pull/7796))
|
||||
- Paymenter: Installation and update fixes [@tremor021](https://github.com/tremor021) ([#7792](https://github.com/community-scripts/ProxmoxVE/pull/7792))
|
||||
|
||||
## 2025-09-21
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
@ -40,7 +40,7 @@ function update_script() {
|
||||
rm -rf /opt/blocky
|
||||
msg_ok "Removed Old Version"
|
||||
|
||||
fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_linux_x86_64.tar.gz"
|
||||
fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_Linux_x86_64.tar.gz"
|
||||
|
||||
msg_info "Restore Config"
|
||||
mv /opt/config.yml /opt/blocky/config.yml
|
||||
|
||||
@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
APP="BookLore"
|
||||
var_tags="${var_tags:-books;library}"
|
||||
var_cpu="${var_cpu:-3}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_ram="${var_ram:-3072}"
|
||||
var_disk="${var_disk:-7}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
|
||||
6
ct/headers/upsnap
Normal file
6
ct/headers/upsnap
Normal file
@ -0,0 +1,6 @@
|
||||
__ __ _____
|
||||
/ / / /___ / ___/____ ____ _____
|
||||
/ / / / __ \\__ \/ __ \/ __ `/ __ \
|
||||
/ /_/ / /_/ /__/ / / / / /_/ / /_/ /
|
||||
\____/ .___/____/_/ /_/\__,_/ .___/
|
||||
/_/ /_/
|
||||
@ -53,3 +53,5 @@ description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}Headscale API: ${IP}/api (no Frontend) | headscale-admin: http://${IP}/admin/${CL}"
|
||||
|
||||
@ -74,7 +74,7 @@ function update_script() {
|
||||
done
|
||||
msg_ok "Image-processing libraries up to date"
|
||||
fi
|
||||
RELEASE="1.142.1"
|
||||
RELEASE="1.143.1"
|
||||
if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop immich-web
|
||||
|
||||
@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@ -29,23 +29,24 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Stopping ${APP}"
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop litellm
|
||||
msg_ok "Stopped ${APP}"
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
VENV_PATH="/opt/litellm/.venv"
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
|
||||
msg_info "Updating $APP"
|
||||
msg_info "Updating LiteLLM"
|
||||
$STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma
|
||||
msg_ok "LiteLLM updated"
|
||||
|
||||
msg_info "Updating DB Schema"
|
||||
$STD uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
|
||||
msg_ok "DB Schema Updated"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
msg_info "Starting Service"
|
||||
systemctl start litellm
|
||||
msg_ok "Started ${APP}"
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated Successfully"
|
||||
exit
|
||||
}
|
||||
|
||||
@ -35,12 +35,15 @@ function update_script() {
|
||||
|
||||
msg_info "Creating Backup"
|
||||
cp /opt/mmdl/.env /opt/mmdl.env
|
||||
rm -rf /opt/mmdl
|
||||
msg_ok "Backup Created"
|
||||
|
||||
fetch_and_deploy_gh_release "mmdl" "intri-in/manage-my-damn-life-nextjs" "tarball"
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
msg_info "Configuring ${APP}"
|
||||
cd /opt/mmdl
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
$STD npm install
|
||||
$STD npm run migrate
|
||||
$STD npm run build
|
||||
|
||||
@ -27,6 +27,9 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||
|
||||
if check_for_gh_release "monica" "monicahq/monica"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop apache2
|
||||
|
||||
@ -28,6 +28,8 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||
|
||||
if check_for_gh_release "outline" "outline/outline"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop outline
|
||||
@ -37,7 +39,7 @@ function update_script() {
|
||||
cp /opt/outline/.env /opt
|
||||
msg_ok "Backup created"
|
||||
|
||||
fetch_and_deploy_gh_release "outline" "outline/outline" "tarball"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "outline" "outline/outline" "tarball"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
cd /opt/outline
|
||||
|
||||
@ -39,7 +39,7 @@ function update_script() {
|
||||
if check_for_gh_release "paymenter" "paymenter/paymenter"; then
|
||||
msg_info "Updating ${APP}"
|
||||
cd /opt/paymenter
|
||||
$STD php artisan p:upgrade --no-interaction
|
||||
$STD php artisan app:upgrade --no-interaction
|
||||
echo "${CHECK_UPDATE_RELEASE}" >~/.paymenter
|
||||
msg_ok "Updated Successfully"
|
||||
fi
|
||||
|
||||
@ -42,7 +42,7 @@ function update_script() {
|
||||
mv /opt/tandoor /opt/tandoor.bak
|
||||
msg_ok "Backup Created"
|
||||
|
||||
NODE_VERSION="20" NODE_MODULE="yarn" setup_nodejs
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
fetch_and_deploy_gh_release "tandoor" "TandoorRecipes/recipes" "tarball" "latest" "/opt/tandoor"
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-6}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@ -33,22 +33,23 @@ function update_script() {
|
||||
systemctl stop tracktor
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
cp /opt/tracktor/app/backend/.env /opt/tracktor.env
|
||||
msg_ok "Created Backup"
|
||||
msg_info "Correcting Services"
|
||||
if [ -f /opt/tracktor/app/backend/.env ]; then
|
||||
mv /opt/tracktor/app/backend/.env /opt/tracktor.env
|
||||
echo 'AUTH_PIN=123456' >> /opt/tracktor.env
|
||||
sed -i 's|^EnvironmentFile=.*|EnvironmentFile=/opt/tracktor.env|' /etc/systemd/system/tracktor.service
|
||||
systemctl daemon-reload
|
||||
fi
|
||||
msg_ok "Corrected Services"
|
||||
|
||||
setup_nodejs
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
msg_info "Updating tracktor"
|
||||
cd /opt/tracktor
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
msg_ok "Updated $APP"
|
||||
|
||||
msg_info "Restoring Backup"
|
||||
cp /opt/tracktor.env /opt/tracktor/app/backend/.env
|
||||
msg_ok "Restored Backup"
|
||||
msg_ok "Updated tracktor"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start tracktor
|
||||
|
||||
53
ct/upsnap.sh
Normal file
53
ct/upsnap.sh
Normal file
@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/seriousm4x/UpSnap
|
||||
|
||||
APP="UpSnap"
|
||||
var_tags="${var_tags:-network}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/upsnap ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "upsnap" "seriousm4x/UpSnap"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop upsnap
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
fetch_and_deploy_gh_release "upsnap" "seriousm4x/UpSnap" "prebuild" "latest" "/opt/upsnap" "UpSnap_*_linux_amd64.zip"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start upsnap
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated Successfully"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}"
|
||||
65
ct/zabbix.sh
65
ct/zabbix.sh
@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-6}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@ -23,37 +23,72 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -f /etc/zabbix/zabbix_server.conf ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Stopping ${APP} Services"
|
||||
systemctl stop zabbix-server zabbix-agent2
|
||||
msg_ok "Stopped ${APP} Services"
|
||||
|
||||
msg_info "Updating $APP LXC"
|
||||
. /etc/os-release
|
||||
if [ "$VERSION_CODENAME" != "trixie" ]; then
|
||||
msg_error "Unsupported Debian version: $VERSION_CODENAME – please upgrade to Debian 13 (Trixie) before updating Zabbix."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if systemctl list-unit-files | grep -q zabbix-agent2.service; then
|
||||
AGENT_SERVICE="zabbix-agent2"
|
||||
else
|
||||
AGENT_SERVICE="zabbix-agent"
|
||||
fi
|
||||
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop zabbix-server $AGENT_SERVICE
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
msg_info "Updating Zabbix"
|
||||
mkdir -p /opt/zabbix-backup/
|
||||
cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/
|
||||
cp /etc/apache2/conf-enabled/zabbix.conf /opt/zabbix-backup/
|
||||
cp -R /usr/share/zabbix/ /opt/zabbix-backup/
|
||||
#cp -R /usr/share/zabbix-* /opt/zabbix-backup/ Remove temporary
|
||||
|
||||
rm -Rf /etc/apt/sources.list.d/zabbix.list
|
||||
cd /tmp
|
||||
curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ |
|
||||
grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 |
|
||||
xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")" \
|
||||
-o /tmp/zabbix-release_latest+debian12_all.deb
|
||||
$STD dpkg -i zabbix-release_latest+debian12_all.deb
|
||||
$STD apt-get update
|
||||
$STD apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-*
|
||||
xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian13_all.deb")" \
|
||||
-o /tmp/zabbix-release_latest+debian13_all.deb
|
||||
$STD dpkg -i zabbix-release_latest+debian13_all.deb
|
||||
$STD apt update
|
||||
|
||||
msg_info "Starting ${APP} Services"
|
||||
systemctl start zabbix-server zabbix-agent2
|
||||
$STD apt install --only-upgrade zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql
|
||||
|
||||
if [ "$AGENT_SERVICE" = "zabbix-agent2" ]; then
|
||||
$STD apt install --only-upgrade zabbix-agent2 zabbix-agent2-plugin-postgresql
|
||||
if [ -f /etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf ]; then
|
||||
sed -i 's|^Plugins.NVIDIA.System.Path=.*|# Plugins.NVIDIA.System.Path=/usr/libexec/zabbix/zabbix-agent2-plugin-nvidia-gpu|' \
|
||||
/etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf
|
||||
fi
|
||||
else
|
||||
$STD apt install --only-upgrade zabbix-agent
|
||||
fi
|
||||
|
||||
if command -v fping >/dev/null 2>&1; then
|
||||
FPING_PATH=$(command -v fping)
|
||||
sed -i "s|^#\?FpingLocation=.*|FpingLocation=$FPING_PATH|" /etc/zabbix/zabbix_server.conf
|
||||
fi
|
||||
if command -v fping6 >/dev/null 2>&1; then
|
||||
FPING6_PATH=$(command -v fping6)
|
||||
sed -i "s|^#\?Fping6Location=.*|Fping6Location=$FPING6_PATH|" /etc/zabbix/zabbix_server.conf
|
||||
fi
|
||||
msg_ok "Updated Zabbix"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start zabbix-server $AGENT_SERVICE
|
||||
systemctl restart apache2
|
||||
msg_ok "Started ${APP} Services"
|
||||
msg_ok "Started Services"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf /tmp/zabbix-release_latest+debian12_all.deb
|
||||
rm -rf /tmp/zabbix-release_latest+debian13_all.deb
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
exit
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
"script": "ct/booklore.sh",
|
||||
"resources": {
|
||||
"cpu": 3,
|
||||
"ram": 2048,
|
||||
"ram": 3072,
|
||||
"hdd": 7,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
|
||||
@ -32,5 +32,10 @@
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
"notes": [
|
||||
{
|
||||
"type": "info",
|
||||
"text": "The file `/etc/sysconfig/CosmosCloud` is optional. If you need custom settings, you can create it yourself."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -39,6 +39,10 @@
|
||||
{
|
||||
"type": "info",
|
||||
"text": "Synapse-Admin is running on port 5173"
|
||||
},
|
||||
{
|
||||
"type": "info",
|
||||
"text": "For bridges Installation methods (WhatsApp, Signal, Discord, etc.), see: ´https://docs.mau.fi/bridges/go/setup.html´"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
"ram": 2048,
|
||||
"hdd": 4,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@ -31,5 +31,10 @@
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
"notes": [
|
||||
{
|
||||
"text": "Script contains optional installation of Ollama.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
"privileged": false,
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://tracktor.bytedge.in/introduction.html",
|
||||
"config_path": "/opt/tracktor/app/server/.env",
|
||||
"config_path": "/opt/tracktor.env",
|
||||
"website": "https://tracktor.bytedge.in/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tracktor.webp",
|
||||
"description": "Tracktor is an open-source web application for comprehensive vehicle management.\nEasily track fuel consumption, maintenance, insurance, and regulatory documents for all your vehicles in one place.",
|
||||
@ -23,17 +23,17 @@
|
||||
"ram": 1024,
|
||||
"hdd": 6,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
"password": "123456"
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Please check and update the '/opt/tracktor/app/backend/.env' file if using behind reverse proxy.",
|
||||
"text": "Please check and update the '/opt/tracktor.env' file if using behind reverse proxy.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
|
||||
40
frontend/public/json/upsnap.json
Normal file
40
frontend/public/json/upsnap.json
Normal file
@ -0,0 +1,40 @@
|
||||
{
|
||||
"name": "UpSnap",
|
||||
"slug": "upsnap",
|
||||
"categories": [
|
||||
4
|
||||
],
|
||||
"date_created": "2025-09-23",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8090,
|
||||
"documentation": "https://github.com/seriousm4x/UpSnap/wiki",
|
||||
"config_path": "",
|
||||
"website": "https://github.com/seriousm4x/UpSnap",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/upsnap.webp",
|
||||
"description": "UpSnap is a self-hosted web app that lets you wake up, manage and monitor devices on your network with ease. Built with SvelteKit, Go and PocketBase, it offers a clean dashboard, scheduled wake-ups, device discovery and secure user management.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/upsnap.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 2,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "The first user you register will be the admin user.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,8 +1,208 @@
|
||||
[
|
||||
{
|
||||
"name": "9001/copyparty",
|
||||
"version": "v1.19.12",
|
||||
"date": "2025-09-21T22:39:26Z"
|
||||
"version": "v1.19.14",
|
||||
"date": "2025-09-23T22:57:50Z"
|
||||
},
|
||||
{
|
||||
"name": "grafana/grafana",
|
||||
"version": "v12.2.0",
|
||||
"date": "2025-09-23T23:47:02Z"
|
||||
},
|
||||
{
|
||||
"name": "HabitRPG/habitica",
|
||||
"version": "v5.41.3",
|
||||
"date": "2025-09-23T22:21:04Z"
|
||||
},
|
||||
{
|
||||
"name": "Part-DB/Part-DB-server",
|
||||
"version": "v2.2.0",
|
||||
"date": "2025-09-23T21:46:21Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r8.2.1-rc0",
|
||||
"date": "2025-09-23T21:09:30Z"
|
||||
},
|
||||
{
|
||||
"name": "immich-app/immich",
|
||||
"version": "v1.143.1",
|
||||
"date": "2025-09-23T19:00:49Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.4.0",
|
||||
"date": "2025-09-13T16:38:21Z"
|
||||
},
|
||||
{
|
||||
"name": "Threadfin/Threadfin",
|
||||
"version": "1.2.38",
|
||||
"date": "2025-09-23T17:49:33Z"
|
||||
},
|
||||
{
|
||||
"name": "msgbyte/tianji",
|
||||
"version": "v1.26.2",
|
||||
"date": "2025-09-23T17:32:47Z"
|
||||
},
|
||||
{
|
||||
"name": "getumbrel/umbrel",
|
||||
"version": "1.4.2",
|
||||
"date": "2025-05-09T08:54:49Z"
|
||||
},
|
||||
{
|
||||
"name": "bunkerity/bunkerweb",
|
||||
"version": "v1.6.4",
|
||||
"date": "2025-08-18T20:22:07Z"
|
||||
},
|
||||
{
|
||||
"name": "element-hq/synapse",
|
||||
"version": "v1.139.0rc1",
|
||||
"date": "2025-09-23T13:28:58Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.529",
|
||||
"date": "2025-09-23T14:40:20Z"
|
||||
},
|
||||
{
|
||||
"name": "wazuh/wazuh",
|
||||
"version": "v4.13.0",
|
||||
"date": "2025-09-19T16:35:02Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.4.3rc1",
|
||||
"date": "2025-09-23T13:54:56Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
"version": "v2.1.1.102-2.1.1.102_canary_2025-09-23",
|
||||
"date": "2025-09-23T13:32:25Z"
|
||||
},
|
||||
{
|
||||
"name": "syncthing/syncthing",
|
||||
"version": "v2.0.9",
|
||||
"date": "2025-09-13T09:37:24Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.112.4",
|
||||
"date": "2025-09-23T11:10:21Z"
|
||||
},
|
||||
{
|
||||
"name": "documenso/documenso",
|
||||
"version": "v1.12.5",
|
||||
"date": "2025-09-23T11:00:48Z"
|
||||
},
|
||||
{
|
||||
"name": "meilisearch/meilisearch",
|
||||
"version": "prototype-speedup-post-processing-1",
|
||||
"date": "2025-09-23T09:02:57Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisvel/tududi",
|
||||
"version": "v0.82-rc5",
|
||||
"date": "2025-09-23T07:31:12Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.12.1-rc2",
|
||||
"date": "2025-09-23T06:20:20Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.3",
|
||||
"date": "2025-09-20T12:12:33Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.23.56",
|
||||
"date": "2025-09-23T05:54:39Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
"version": "v1.3.3",
|
||||
"date": "2025-09-23T00:41:08Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.4.20",
|
||||
"date": "2025-09-23T00:27:09Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v3.6.2",
|
||||
"date": "2025-07-17T12:08:03Z"
|
||||
},
|
||||
{
|
||||
"name": "henrygd/beszel",
|
||||
"version": "v0.12.10",
|
||||
"date": "2025-09-22T22:40:43Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.2.9",
|
||||
"date": "2025-09-17T15:11:25Z"
|
||||
},
|
||||
{
|
||||
"name": "postgres/postgres",
|
||||
"version": "REL_18_0",
|
||||
"date": "2025-09-22T20:11:33Z"
|
||||
},
|
||||
{
|
||||
"name": "gtsteffaniak/filebrowser",
|
||||
"version": "v0.8.7-beta",
|
||||
"date": "2025-09-22T18:24:54Z"
|
||||
},
|
||||
{
|
||||
"name": "gethomepage/homepage",
|
||||
"version": "v1.5.0",
|
||||
"date": "2025-09-22T15:28:49Z"
|
||||
},
|
||||
{
|
||||
"name": "cloudflare/cloudflared",
|
||||
"version": "2025.9.1",
|
||||
"date": "2025-09-22T13:32:14Z"
|
||||
},
|
||||
{
|
||||
"name": "sabnzbd/sabnzbd",
|
||||
"version": "4.5.3",
|
||||
"date": "2025-08-25T13:59:56Z"
|
||||
},
|
||||
{
|
||||
"name": "nzbgetcom/nzbget",
|
||||
"version": "v25.3",
|
||||
"date": "2025-09-01T09:47:06Z"
|
||||
},
|
||||
{
|
||||
"name": "Graylog2/graylog2-server",
|
||||
"version": "7.0.0-beta.1",
|
||||
"date": "2025-09-22T11:53:27Z"
|
||||
},
|
||||
{
|
||||
"name": "itsmng/itsm-ng",
|
||||
"version": "v2.1.0",
|
||||
"date": "2025-09-22T09:23:37Z"
|
||||
},
|
||||
{
|
||||
"name": "prometheus/prometheus",
|
||||
"version": "v3.6.0",
|
||||
"date": "2025-09-22T08:24:59Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.2",
|
||||
"date": "2025-06-26T22:08:00Z"
|
||||
},
|
||||
{
|
||||
"name": "Athou/commafeed",
|
||||
"version": "5.11.1",
|
||||
"date": "2025-09-22T02:21:27Z"
|
||||
},
|
||||
{
|
||||
"name": "TwiN/gatus",
|
||||
"version": "v5.24.3",
|
||||
"date": "2025-09-22T00:04:38Z"
|
||||
},
|
||||
{
|
||||
"name": "Radarr/Radarr",
|
||||
@ -20,25 +220,15 @@
|
||||
"date": "2025-08-28T20:06:24Z"
|
||||
},
|
||||
{
|
||||
"name": "prometheus/prometheus",
|
||||
"version": "v0.306.0",
|
||||
"date": "2025-09-21T19:49:23Z"
|
||||
},
|
||||
{
|
||||
"name": "msgbyte/tianji",
|
||||
"version": "v1.26.0",
|
||||
"date": "2025-09-21T17:48:02Z"
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "nightly",
|
||||
"date": "2025-09-21T18:15:06Z"
|
||||
},
|
||||
{
|
||||
"name": "Ombi-app/Ombi",
|
||||
"version": "v4.47.1",
|
||||
"date": "2025-01-05T21:14:23Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.4.0",
|
||||
"date": "2025-09-13T16:38:21Z"
|
||||
},
|
||||
{
|
||||
"name": "wizarrrr/wizarr",
|
||||
"version": "v2025.9.5",
|
||||
@ -54,31 +244,11 @@
|
||||
"version": "v2.7.3",
|
||||
"date": "2025-09-21T12:07:19Z"
|
||||
},
|
||||
{
|
||||
"name": "TwiN/gatus",
|
||||
"version": "v5.24.2",
|
||||
"date": "2025-09-21T11:09:36Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.23.48",
|
||||
"date": "2025-09-21T05:52:38Z"
|
||||
},
|
||||
{
|
||||
"name": "thomiceli/opengist",
|
||||
"version": "v1.11.0",
|
||||
"date": "2025-09-21T02:53:18Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.4.20",
|
||||
"date": "2025-09-21T00:27:05Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v3.6.2",
|
||||
"date": "2025-07-17T12:08:03Z"
|
||||
},
|
||||
{
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "3.2.8",
|
||||
@ -89,11 +259,6 @@
|
||||
"version": "preview-fix-watchlist-error",
|
||||
"date": "2025-09-20T21:07:50Z"
|
||||
},
|
||||
{
|
||||
"name": "bunkerity/bunkerweb",
|
||||
"version": "v1.6.4",
|
||||
"date": "2025-08-18T20:22:07Z"
|
||||
},
|
||||
{
|
||||
"name": "pocket-id/pocket-id",
|
||||
"version": "v1.11.2",
|
||||
@ -104,36 +269,16 @@
|
||||
"version": "v6.13.4",
|
||||
"date": "2025-09-20T20:03:29Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.12.1-rc0",
|
||||
"date": "2025-09-20T19:40:33Z"
|
||||
},
|
||||
{
|
||||
"name": "traccar/traccar",
|
||||
"version": "v6.10.0",
|
||||
"date": "2025-09-20T15:40:36Z"
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "nightly",
|
||||
"date": "2025-09-20T15:21:44Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.3",
|
||||
"date": "2025-09-20T12:12:33Z"
|
||||
},
|
||||
{
|
||||
"name": "fuma-nama/fumadocs",
|
||||
"version": "fumadocs-openapi@9.3.11",
|
||||
"date": "2025-09-20T09:52:40Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.2.9",
|
||||
"date": "2025-09-17T15:11:25Z"
|
||||
},
|
||||
{
|
||||
"name": "forgejo/forgejo",
|
||||
"version": "v12.0.4",
|
||||
@ -149,11 +294,6 @@
|
||||
"version": "1.0.1",
|
||||
"date": "2025-09-19T22:28:31Z"
|
||||
},
|
||||
{
|
||||
"name": "HabitRPG/habitica",
|
||||
"version": "v5.41.2",
|
||||
"date": "2025-09-19T21:47:42Z"
|
||||
},
|
||||
{
|
||||
"name": "ipfs/kubo",
|
||||
"version": "v0.37.0",
|
||||
@ -174,16 +314,6 @@
|
||||
"version": "v1.38.0",
|
||||
"date": "2025-09-19T19:14:55Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.2",
|
||||
"date": "2025-06-26T22:08:00Z"
|
||||
},
|
||||
{
|
||||
"name": "wazuh/wazuh",
|
||||
"version": "v4.13.0",
|
||||
"date": "2025-09-19T07:02:27Z"
|
||||
},
|
||||
{
|
||||
"name": "TandoorRecipes/recipes",
|
||||
"version": "2.2.3",
|
||||
@ -194,11 +324,6 @@
|
||||
"version": "v1.5.2",
|
||||
"date": "2025-09-19T14:18:53Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.111.1",
|
||||
"date": "2025-09-19T09:26:05Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "mattermost-redux@10.12.0",
|
||||
@ -249,16 +374,6 @@
|
||||
"version": "v4.2.2",
|
||||
"date": "2025-09-18T10:45:22Z"
|
||||
},
|
||||
{
|
||||
"name": "cloudflare/cloudflared",
|
||||
"version": "2025.9.0",
|
||||
"date": "2025-09-18T10:23:49Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisvel/tududi",
|
||||
"version": "v0.82-rc5",
|
||||
"date": "2025-09-18T09:57:28Z"
|
||||
},
|
||||
{
|
||||
"name": "NLnetLabs/unbound",
|
||||
"version": "release-1.24.0",
|
||||
@ -269,11 +384,6 @@
|
||||
"version": "v0.87.4",
|
||||
"date": "2025-09-18T00:47:08Z"
|
||||
},
|
||||
{
|
||||
"name": "henrygd/beszel",
|
||||
"version": "v0.12.9",
|
||||
"date": "2025-09-17T20:13:59Z"
|
||||
},
|
||||
{
|
||||
"name": "TasmoAdmin/TasmoAdmin",
|
||||
"version": "v4.3.1",
|
||||
@ -309,11 +419,6 @@
|
||||
"version": "2.0.0",
|
||||
"date": "2025-08-29T13:38:35Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.528",
|
||||
"date": "2025-09-17T13:09:51Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "347",
|
||||
@ -334,21 +439,11 @@
|
||||
"version": "v2.16.31",
|
||||
"date": "2025-09-17T09:57:55Z"
|
||||
},
|
||||
{
|
||||
"name": "nzbgetcom/nzbget",
|
||||
"version": "v25.3",
|
||||
"date": "2025-09-01T09:47:06Z"
|
||||
},
|
||||
{
|
||||
"name": "WGDashboard/WGDashboard",
|
||||
"version": "v4.3.0.1",
|
||||
"date": "2025-09-17T08:50:39Z"
|
||||
},
|
||||
{
|
||||
"name": "gtsteffaniak/filebrowser",
|
||||
"version": "v0.8.6-beta",
|
||||
"date": "2025-09-17T00:57:54Z"
|
||||
},
|
||||
{
|
||||
"name": "Cleanuparr/Cleanuparr",
|
||||
"version": "v2.3.1",
|
||||
@ -364,11 +459,6 @@
|
||||
"version": "v0.107.66",
|
||||
"date": "2025-09-15T13:39:52Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
"version": "v1.3.2",
|
||||
"date": "2025-09-16T16:04:50Z"
|
||||
},
|
||||
{
|
||||
"name": "netbox-community/netbox",
|
||||
"version": "v4.4.1",
|
||||
@ -379,11 +469,6 @@
|
||||
"version": "version/2025.8.3",
|
||||
"date": "2025-09-16T15:19:06Z"
|
||||
},
|
||||
{
|
||||
"name": "immich-app/immich",
|
||||
"version": "v1.142.1",
|
||||
"date": "2025-09-16T14:51:53Z"
|
||||
},
|
||||
{
|
||||
"name": "zwave-js/zwave-js-ui",
|
||||
"version": "v11.3.0",
|
||||
@ -464,11 +549,6 @@
|
||||
"version": "v2.7.6",
|
||||
"date": "2025-09-15T15:50:44Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r8.0.14",
|
||||
"date": "2025-09-15T15:39:18Z"
|
||||
},
|
||||
{
|
||||
"name": "usememos/memos",
|
||||
"version": "v0.25.1",
|
||||
@ -479,11 +559,6 @@
|
||||
"version": "pmm-6401-v1.126.0",
|
||||
"date": "2025-09-15T11:32:31Z"
|
||||
},
|
||||
{
|
||||
"name": "meilisearch/meilisearch",
|
||||
"version": "latest",
|
||||
"date": "2025-09-15T11:12:14Z"
|
||||
},
|
||||
{
|
||||
"name": "authelia/authelia",
|
||||
"version": "v4.39.10",
|
||||
@ -519,16 +594,6 @@
|
||||
"version": "v0.8.1",
|
||||
"date": "2025-09-14T06:45:23Z"
|
||||
},
|
||||
{
|
||||
"name": "syncthing/syncthing",
|
||||
"version": "v2.0.9",
|
||||
"date": "2025-09-13T09:37:24Z"
|
||||
},
|
||||
{
|
||||
"name": "documenso/documenso",
|
||||
"version": "v1.12.4",
|
||||
"date": "2025-09-13T08:08:55Z"
|
||||
},
|
||||
{
|
||||
"name": "cloudreve/cloudreve",
|
||||
"version": "4.8.0",
|
||||
@ -549,11 +614,6 @@
|
||||
"version": "1.16.0",
|
||||
"date": "2025-09-11T18:01:57Z"
|
||||
},
|
||||
{
|
||||
"name": "Threadfin/Threadfin",
|
||||
"version": "1.2.37",
|
||||
"date": "2025-09-11T16:13:41Z"
|
||||
},
|
||||
{
|
||||
"name": "rcourtman/Pulse",
|
||||
"version": "v4.14.0",
|
||||
@ -574,16 +634,6 @@
|
||||
"version": "v3.2.1-beta",
|
||||
"date": "2025-09-09T19:47:13Z"
|
||||
},
|
||||
{
|
||||
"name": "Part-DB/Part-DB-server",
|
||||
"version": "v2.1.2",
|
||||
"date": "2025-09-09T19:34:11Z"
|
||||
},
|
||||
{
|
||||
"name": "element-hq/synapse",
|
||||
"version": "v1.138.0",
|
||||
"date": "2025-09-09T11:25:50Z"
|
||||
},
|
||||
{
|
||||
"name": "traefik/traefik",
|
||||
"version": "v3.5.2",
|
||||
@ -704,11 +754,6 @@
|
||||
"version": "2.1.1",
|
||||
"date": "2025-06-14T17:45:06Z"
|
||||
},
|
||||
{
|
||||
"name": "Graylog2/graylog2-server",
|
||||
"version": "6.1.15",
|
||||
"date": "2025-09-03T14:51:37Z"
|
||||
},
|
||||
{
|
||||
"name": "neo4j/neo4j",
|
||||
"version": "5.26.12",
|
||||
@ -719,11 +764,6 @@
|
||||
"version": "cassandra-4.1.10",
|
||||
"date": "2025-09-03T08:46:02Z"
|
||||
},
|
||||
{
|
||||
"name": "postgres/postgres",
|
||||
"version": "REL_18_RC1",
|
||||
"date": "2025-09-01T20:03:08Z"
|
||||
},
|
||||
{
|
||||
"name": "project-zot/zot",
|
||||
"version": "v2.1.8",
|
||||
@ -739,11 +779,6 @@
|
||||
"version": "v0.11.0",
|
||||
"date": "2025-09-01T16:19:38Z"
|
||||
},
|
||||
{
|
||||
"name": "grafana/grafana",
|
||||
"version": "rrc_steady_12.2.0-17245430286.patch1",
|
||||
"date": "2025-09-01T14:19:14Z"
|
||||
},
|
||||
{
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
"version": "v1.7.0",
|
||||
@ -789,16 +824,6 @@
|
||||
"version": "v2.29.0",
|
||||
"date": "2025-08-25T22:43:20Z"
|
||||
},
|
||||
{
|
||||
"name": "sabnzbd/sabnzbd",
|
||||
"version": "4.5.3",
|
||||
"date": "2025-08-25T13:59:56Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.4.2",
|
||||
"date": "2025-08-25T12:38:14Z"
|
||||
},
|
||||
{
|
||||
"name": "plexguide/Huntarr.io",
|
||||
"version": "8.2.10",
|
||||
@ -829,16 +854,6 @@
|
||||
"version": "v1.2.4",
|
||||
"date": "2025-08-22T07:40:01Z"
|
||||
},
|
||||
{
|
||||
"name": "gethomepage/homepage",
|
||||
"version": "v1.4.6",
|
||||
"date": "2025-08-21T14:05:58Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
"version": "v2.1.2.0-2.1.2.0_beta_2025-08-20",
|
||||
"date": "2025-08-20T08:15:46Z"
|
||||
},
|
||||
{
|
||||
"name": "karlomikus/bar-assistant",
|
||||
"version": "v5.8.0",
|
||||
@ -924,11 +939,6 @@
|
||||
"version": "mariadb-12.0.2",
|
||||
"date": "2025-08-07T21:23:15Z"
|
||||
},
|
||||
{
|
||||
"name": "Athou/commafeed",
|
||||
"version": "5.11.0",
|
||||
"date": "2025-08-06T21:14:18Z"
|
||||
},
|
||||
{
|
||||
"name": "bastienwirtz/homer",
|
||||
"version": "v25.08.1",
|
||||
@ -1094,11 +1104,6 @@
|
||||
"version": "v2.18.0",
|
||||
"date": "2025-06-24T08:29:55Z"
|
||||
},
|
||||
{
|
||||
"name": "itsmng/itsm-ng",
|
||||
"version": "v2.0.7",
|
||||
"date": "2025-06-23T14:35:40Z"
|
||||
},
|
||||
{
|
||||
"name": "clusterzx/paperless-ai",
|
||||
"version": "v3.0.7",
|
||||
@ -1199,11 +1204,6 @@
|
||||
"version": "v0.2.3",
|
||||
"date": "2025-05-10T21:14:45Z"
|
||||
},
|
||||
{
|
||||
"name": "getumbrel/umbrel",
|
||||
"version": "1.4.2",
|
||||
"date": "2025-05-09T08:54:49Z"
|
||||
},
|
||||
{
|
||||
"name": "ZoeyVid/NPMplus",
|
||||
"version": "2025-05-07-r1",
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
"ram": 4096,
|
||||
"hdd": 6,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
@ -33,11 +33,19 @@
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Database credentials: `cat zabbix.creds`",
|
||||
"text": "Database credentials: `cat ~/zabbix.creds`",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Zabbix agent 2 is used by default",
|
||||
"text": "You can choose between Zabbix agent (classic) and agent2 (modern) during installation",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "For agent2 the PostgreSQL plugin is installed by default; all plugins are optional",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "If agent2 with NVIDIA plugin is installed in an environment without GPU, the installer disables it automatically",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
|
||||
@ -13,7 +13,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_linux_x86_64.tar.gz"
|
||||
fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_Linux_x86_64.tar.gz"
|
||||
|
||||
msg_info "Configuring Blocky"
|
||||
if systemctl is-active systemd-resolved >/dev/null 2>&1; then
|
||||
|
||||
@ -18,7 +18,7 @@ curl -fsSL https://deb.globaleaks.org/globaleaks.asc | gpg --dearmor -o /etc/apt
|
||||
echo "deb [signed-by=/etc/apt/trusted.gpg.d/globaleaks.gpg] http://deb.globaleaks.org $DISTRO_CODENAME/" >/etc/apt/sources.list.d/globaleaks.list
|
||||
echo 'APPARMOR_SANDBOXING=0' >/etc/default/globaleaks
|
||||
$STD apt update
|
||||
$STD apt -y install globaleaks
|
||||
$STD apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install globaleaks
|
||||
msg_ok "Setup GlobaLeaks"
|
||||
|
||||
motd_ssh
|
||||
|
||||
@ -24,26 +24,24 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
$STD caddy stop
|
||||
rm /etc/caddy/Caddyfile
|
||||
cat <<'EOF' >/etc/caddy/Caddyfile
|
||||
:{$PORT:80}
|
||||
:80
|
||||
|
||||
redir /admin /admin/
|
||||
|
||||
handle_path /admin* {
|
||||
root * /opt/headscale-admin
|
||||
encode gzip zstd
|
||||
root * /opt/headscale-admin
|
||||
encode gzip zstd
|
||||
|
||||
# Correct MIME types for JS/WASM
|
||||
header {
|
||||
@js_files path *.js
|
||||
@wasm_files path *.wasm
|
||||
header {
|
||||
X-Content-Type-Options nosniff
|
||||
}
|
||||
|
||||
Content-Type @js_files application/javascript
|
||||
Content-Type @wasm_files application/wasm
|
||||
try_files {path} {path}/ /opt/headscale-admin/index.html
|
||||
file_server
|
||||
}
|
||||
|
||||
X-Content-Type-Options nosniff
|
||||
}
|
||||
|
||||
# Fallback for SPA routing
|
||||
try_files {path} {path}/ index.html
|
||||
file_server
|
||||
handle /api/* {
|
||||
reverse_proxy localhost:8080
|
||||
}
|
||||
|
||||
EOF
|
||||
|
||||
@ -272,7 +272,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
|
||||
|
||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.142.1" "$SRC_DIR"
|
||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.143.1" "$SRC_DIR"
|
||||
|
||||
msg_info "Installing ${APPLICATION} (patience)"
|
||||
|
||||
|
||||
@ -13,6 +13,12 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
build-essential \
|
||||
python3-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="17" setup_postgresql
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
|
||||
@ -75,6 +81,7 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
$STD apt -y autoremove
|
||||
$STD apt -y autoclean
|
||||
$STD apt -y clean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@ -17,7 +17,7 @@ msg_info "Installing dependencies"
|
||||
$STD apt-get install --no-install-recommends -y build-essential
|
||||
msg_ok "Installed dependencies"
|
||||
|
||||
NODE_VERSION="20" setup_nodejs
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
MYSQL_VERSION="8.0" setup_mysql
|
||||
|
||||
msg_info "Setting up Database"
|
||||
@ -48,7 +48,7 @@ sed -i -e 's|db|localhost|' \
|
||||
-e "s|=PASSWORD|=$(openssl rand -base64 40 | tr -dc 'a-zA-Z0-9' | head -c40)|" \
|
||||
/opt/mmdl/.env
|
||||
cd /opt/mmdl
|
||||
export NEXT_TELEMETRY_DISABLE=1
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
export CI="true"
|
||||
$STD npm install
|
||||
$STD npm run migrate
|
||||
|
||||
@ -16,7 +16,7 @@ update_os
|
||||
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="dom,gmp,iconv,mysqli,pdo-mysql,redis,tokenizer" setup_php
|
||||
setup_composer
|
||||
setup_mariadb
|
||||
NODE_VERSION="20" NODE_MODULE="yarn@latest" setup_nodejs
|
||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||
|
||||
msg_info "Setting up MariaDB"
|
||||
DB_NAME=monica
|
||||
|
||||
@ -20,7 +20,7 @@ $STD apt-get install -y \
|
||||
redis
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="20" NODE_MODULE="yarn@latest" setup_nodejs
|
||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||
PG_VERSION="16" setup_postgresql
|
||||
|
||||
msg_info "Set up PostgreSQL Database"
|
||||
|
||||
@ -21,7 +21,7 @@ $STD apt-get install -y \
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_mariadb
|
||||
PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="common,mysql,fpm,redis" setup_php
|
||||
PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="common,mysql,redis" setup_php
|
||||
setup_composer
|
||||
fetch_and_deploy_gh_release "paymenter" "paymenter/paymenter" "prebuild" "latest" "/opt/paymenter" "paymenter.tar.gz"
|
||||
chmod -R 755 /opt/paymenter/storage/* /opt/paymenter/bootstrap/cache/
|
||||
@ -30,7 +30,7 @@ msg_info "Setting up database"
|
||||
DB_NAME=paymenter
|
||||
DB_USER=paymenter
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql
|
||||
mariadb-tzinfo-to-sql /usr/share/zoneinfo | mariadb mysql
|
||||
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
|
||||
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
||||
$STD mariadb -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost' WITH GRANT OPTION;"
|
||||
@ -108,8 +108,8 @@ RestartSec=5s
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable --now paymenter
|
||||
systemctl enable --now redis-server
|
||||
systemctl enable -q --now paymenter
|
||||
systemctl enable -q --now redis-server
|
||||
msg_ok "Setup Service"
|
||||
|
||||
motd_ssh
|
||||
|
||||
@ -30,9 +30,9 @@ $STD apt-get install -y --no-install-recommends \
|
||||
libxmlsec1-openssl
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="20" NODE_MODULE="yarn" setup_nodejs
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
fetch_and_deploy_gh_release "tandoor" "TandoorRecipes/recipes" "tarball" "latest" "/opt/tandoor"
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_VERSION="17" PG_MODULES="contrib" setup_postgresql
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
|
||||
msg_info "Set up PostgreSQL Database"
|
||||
@ -45,6 +45,8 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
|
||||
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS unaccent;"
|
||||
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
|
||||
{
|
||||
echo "Tandoor-Credentials"
|
||||
echo "Tandoor Database Name: $DB_NAME"
|
||||
|
||||
@ -22,7 +22,7 @@ $STD npm install
|
||||
$STD npm run build
|
||||
mkdir /opt/tracktor-data
|
||||
HOST_IP=$(hostname -I | awk '{print $1}')
|
||||
cat <<EOF >/opt/tracktor/app/backend/.env
|
||||
cat <<EOF >/opt/tracktor.env
|
||||
NODE_ENV=production
|
||||
PUBLIC_DEMO_MODE=false
|
||||
DB_PATH=/opt/tracktor-data/tracktor.db
|
||||
@ -31,6 +31,7 @@ PUBLIC_API_BASE_URL=http://$HOST_IP:3000
|
||||
# Here add the reverse proxy url as well to avoid cross errors from the app.
|
||||
CORS_ORIGINS=http://$HOST_IP:3000
|
||||
PORT=3000
|
||||
AUTH_PIN=123456
|
||||
EOF
|
||||
msg_ok "Configured Tracktor"
|
||||
|
||||
@ -43,7 +44,7 @@ After=network.target
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/tracktor
|
||||
EnvironmentFile=/opt/tracktor/app/backend/.env
|
||||
EnvironmentFile=/opt/tracktor.env
|
||||
ExecStart=/usr/bin/npm start
|
||||
|
||||
[Install]
|
||||
@ -56,6 +57,7 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
$STD apt -y autoremove
|
||||
$STD apt -y autoclean
|
||||
$STD apt -y clean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
56
install/upsnap-install.sh
Normal file
56
install/upsnap-install.sh
Normal file
@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/seriousm4x/UpSnap
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
nmap \
|
||||
samba \
|
||||
samba-common-bin \
|
||||
openssh-client \
|
||||
openssh-server \
|
||||
sshpass
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
fetch_and_deploy_gh_release "upsnap" "seriousm4x/UpSnap" "prebuild" "latest" "/opt/upsnap" "UpSnap_*_linux_amd64.zip"
|
||||
setcap 'cap_net_raw=+ep' /opt/upsnap/upsnap
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/upsnap.service
|
||||
[Unit]
|
||||
Description=UpSnap Service
|
||||
Documentation=https://github.com/seriousm4x/UpSnap/wiki
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
Restart=on-failure
|
||||
WorkingDirectory=/opt/upsnap
|
||||
ExecStart=/opt/upsnap/upsnap serve --http=0.0.0.0:8090
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now upsnap
|
||||
msg_ok "Service Created"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt -y autoremove
|
||||
$STD apt -y autoclean
|
||||
$STD apt -y clean
|
||||
msg_ok "Cleaned"
|
||||
@ -13,20 +13,61 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
PG_VERSION="17" setup_postgresql
|
||||
|
||||
msg_info "Installing Zabbix"
|
||||
cd /tmp
|
||||
curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ |
|
||||
grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 |
|
||||
xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")" \
|
||||
-o /tmp/zabbix-release_latest+debian12_all.deb
|
||||
$STD dpkg -i /tmp/zabbix-release_latest+debian12_all.deb
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts
|
||||
$STD apt-get install -y zabbix-agent2 zabbix-agent2-plugin-*
|
||||
xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian13_all.deb")" \
|
||||
-o /tmp/zabbix-release_latest+debian13_all.deb
|
||||
$STD dpkg -i /tmp/zabbix-release_latest+debian13_all.deb
|
||||
$STD apt update
|
||||
$STD apt install -y zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql zabbix-apache-conf zabbix-sql-scripts
|
||||
msg_ok "Installed Zabbix"
|
||||
|
||||
while true; do
|
||||
read -rp "Which agent do you want to install? [1=agent (classic), 2=agent2 (modern), default=1]: " AGENT_CHOICE
|
||||
case "$AGENT_CHOICE" in
|
||||
2)
|
||||
AGENT_PKG="zabbix-agent2"
|
||||
break
|
||||
;;
|
||||
"" | 1)
|
||||
AGENT_PKG="zabbix-agent"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
echo "Invalid choice. Please enter 1 or 2."
|
||||
;;
|
||||
esac
|
||||
done
|
||||
msg_ok "Selected $AGENT_PKG"
|
||||
|
||||
if [ "$AGENT_PKG" = "zabbix-agent2" ]; then
|
||||
echo "Choose plugins for Zabbix Agent2:"
|
||||
echo "1) PostgreSQL only (default, recommended)"
|
||||
echo "2) All plugins (may cause issues)"
|
||||
read -rp "Choose option [1-2]: " PLUGIN_CHOICE
|
||||
|
||||
case "$PLUGIN_CHOICE" in
|
||||
2)
|
||||
$STD apt install -y zabbix-agent2 zabbix-agent2-plugin-*
|
||||
;;
|
||||
*)
|
||||
$STD apt install -y zabbix-agent2 zabbix-agent2-plugin-postgresql
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -f /etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf ]; then
|
||||
sed -i 's|^Plugins.NVIDIA.System.Path=.*|# Plugins.NVIDIA.System.Path=/usr/libexec/zabbix/zabbix-agent2-plugin-nvidia-gpu|' \
|
||||
/etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf
|
||||
fi
|
||||
else
|
||||
$STD apt install -y zabbix-agent
|
||||
fi
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
$STD apt-get install -y postgresql
|
||||
DB_NAME=zabbixdb
|
||||
DB_USER=zabbix
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||
@ -35,18 +76,31 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCO
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
|
||||
{
|
||||
echo "Zabbix-Credentials"
|
||||
echo "Zabbix Database User: $DB_USER"
|
||||
echo "Zabbix Database Password: $DB_PASS"
|
||||
echo "Zabbix Database Name: $DB_NAME"
|
||||
} >>~/zabbix.creds
|
||||
|
||||
zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u $DB_USER psql $DB_NAME &>/dev/null
|
||||
sed -i "s/^DBName=.*/DBName=$DB_NAME/" /etc/zabbix/zabbix_server.conf
|
||||
sed -i "s/^DBUser=.*/DBUser=$DB_USER/" /etc/zabbix/zabbix_server.conf
|
||||
sed -i "s/^# DBPassword=.*/DBPassword=$DB_PASS/" /etc/zabbix/zabbix_server.conf
|
||||
echo "" >~/zabbix.creds
|
||||
echo "zabbix Database Credentials" >>~/zabbix.creds
|
||||
echo "" >>~/zabbix.creds
|
||||
echo -e "zabbix Database User: \e[32m$DB_USER\e[0m" >>~/zabbix.creds
|
||||
echo -e "zabbix Database Password: \e[32m$DB_PASS\e[0m" >>~/zabbix.creds
|
||||
echo -e "zabbix Database Name: \e[32m$DB_NAME\e[0m" >>~/zabbix.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
msg_info "Configuring Fping"
|
||||
if command -v fping >/dev/null 2>&1; then
|
||||
FPING_PATH=$(command -v fping)
|
||||
sed -i "s|^#\?FpingLocation=.*|FpingLocation=$FPING_PATH|" /etc/zabbix/zabbix_server.conf
|
||||
fi
|
||||
|
||||
if command -v fping6 >/dev/null 2>&1; then
|
||||
FPING6_PATH=$(command -v fping6)
|
||||
sed -i "s|^#\?Fping6Location=.*|Fping6Location=$FPING6_PATH|" /etc/zabbix/zabbix_server.conf
|
||||
fi
|
||||
msg_ok "Configured Fping"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl restart zabbix-server zabbix-agent2 apache2
|
||||
systemctl enable -q --now zabbix-server zabbix-agent2 apache2
|
||||
@ -56,7 +110,8 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /tmp/zabbix-release_latest+debian12_all.deb
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
rm -rf /tmp/zabbix-release_latest+debian13_all.deb
|
||||
$STD apt -y autoremove
|
||||
$STD apt -y autoclean
|
||||
$STD apt -y clean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@ -42,11 +42,11 @@ error_handler() {
|
||||
echo -e "\n$error_message\n"
|
||||
}
|
||||
|
||||
# Check if the shell is using bash
|
||||
# Check if the current shell is using bash
|
||||
shell_check() {
|
||||
if [[ "$(basename "$SHELL")" != "bash" ]]; then
|
||||
if [[ "$(ps -p $$ -o comm=)" != "bash" ]]; then
|
||||
clear
|
||||
msg_error "Your default shell is currently not set to Bash. To use these scripts, please switch to the Bash shell."
|
||||
msg_error "Your default shell is not bash. Please report this to our github issues or discord."
|
||||
echo -e "\nExiting..."
|
||||
sleep 2
|
||||
exit
|
||||
|
||||
@ -1970,9 +1970,8 @@ function setup_uv() {
|
||||
export PATH="/usr/local/bin:$PATH"
|
||||
fi
|
||||
ensure_usr_local_bin_persist
|
||||
if ! $STD uv python update-shell; then
|
||||
msg_error "uv shell integration failed – continuing anyway"
|
||||
fi
|
||||
|
||||
$STD uv python update-shell >/dev/null 2>&1 || true
|
||||
msg_ok "Setup uv $LATEST_VERSION"
|
||||
|
||||
# Optional: install specific Python version
|
||||
@ -2022,6 +2021,8 @@ function setup_yq() {
|
||||
}
|
||||
fi
|
||||
|
||||
[[ ":$PATH:" != *":/usr/local/bin:"* ]] && echo 'export PATH="/usr/local/bin:$PATH"' >>~/.bashrc && source ~/.bashrc
|
||||
|
||||
if command -v yq &>/dev/null; then
|
||||
if ! yq --version 2>&1 | grep -q 'mikefarah'; then
|
||||
rm -f "$(command -v yq)"
|
||||
|
||||
@ -532,20 +532,28 @@ if [ -f "$MOBILE_TPL" ] && ! grep -q "$MARKER" "$MOBILE_TPL"; then
|
||||
"$MARKER" \
|
||||
"<script>" \
|
||||
" function removeSubscriptionElements() {" \
|
||||
" // --- Remove subscription dialogs ---" \
|
||||
" const dialogs = document.querySelectorAll('dialog.pwt-outer-dialog');" \
|
||||
" dialogs.forEach(dialog => {" \
|
||||
" const closeButton = dialog.querySelector('.fa-close');" \
|
||||
" const exclamationIcon = dialog.querySelector('.fa-exclamation-triangle');" \
|
||||
" const continueButton = dialog.querySelector('button');" \
|
||||
" if (closeButton && exclamationIcon && continueButton) { dialog.remove(); console.log('Removed subscription dialog'); }" \
|
||||
" const text = (dialog.textContent || '').toLowerCase();" \
|
||||
" if (text.includes('subscription')) {" \
|
||||
" dialog.remove();" \
|
||||
" console.log('Removed subscription dialog');" \
|
||||
" }" \
|
||||
" });" \
|
||||
"" \
|
||||
" // --- Remove subscription cards, but keep Reboot/Shutdown/Console ---" \
|
||||
" const cards = document.querySelectorAll('.pwt-card.pwt-p-2.pwt-d-flex.pwt-interactive.pwt-justify-content-center');" \
|
||||
" cards.forEach(card => {" \
|
||||
" const hasInteractiveElements = card.querySelector('button, input, a');" \
|
||||
" const hasComplexStructure = card.querySelector('.pwt-grid, .pwt-flex, .pwt-button');" \
|
||||
" if (!hasInteractiveElements && !hasComplexStructure) { card.remove(); console.log('Removed subscription card'); }" \
|
||||
" const text = (card.textContent || '').toLowerCase();" \
|
||||
" const hasButton = card.querySelector('button');" \
|
||||
" if (!hasButton && text.includes('subscription')) {" \
|
||||
" card.remove();" \
|
||||
" console.log('Removed subscription card');" \
|
||||
" }" \
|
||||
" });" \
|
||||
" }" \
|
||||
"" \
|
||||
" const observer = new MutationObserver(removeSubscriptionElements);" \
|
||||
" observer.observe(document.body, { childList: true, subtree: true });" \
|
||||
" removeSubscriptionElements();" \
|
||||
@ -555,9 +563,8 @@ if [ -f "$MOBILE_TPL" ] && ! grep -q "$MARKER" "$MOBILE_TPL"; then
|
||||
"" >> "$MOBILE_TPL"
|
||||
fi
|
||||
EOF
|
||||
|
||||
chmod 755 /usr/local/bin/pve-remove-nag.sh
|
||||
|
||||
|
||||
cat >/etc/apt/apt.conf.d/no-nag-script <<'EOF'
|
||||
DPkg::Post-Invoke { "/usr/local/bin/pve-remove-nag.sh"; };
|
||||
EOF
|
||||
|
||||
@ -205,15 +205,69 @@ function exit-script() {
|
||||
exit
|
||||
}
|
||||
|
||||
# Ensure pv is installed or abort with instructions
|
||||
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
|
||||
if ! apt-get update -qq &>/dev/null || ! apt-get install -y pv &>/dev/null; then
|
||||
msg_error "Failed to install pv automatically."
|
||||
echo -e "\nPlease run manually on the Proxmox host:\n apt install pv\n"
|
||||
exit 1
|
||||
fi
|
||||
msg_ok "Installed pv"
|
||||
fi
|
||||
}
|
||||
|
||||
# Download an .xz file and validate it
|
||||
# Args: $1=url $2=cache_file
|
||||
function download_and_validate_xz() {
|
||||
local url="$1"
|
||||
local file="$2"
|
||||
|
||||
# If file exists, check validity
|
||||
if [[ -s "$file" ]]; then
|
||||
if xz -t "$file" &>/dev/null; then
|
||||
msg_ok "Using cached image $(basename "$file")"
|
||||
return 0
|
||||
else
|
||||
msg_error "Cached file $(basename "$file") is corrupted. Deleting and retrying download..."
|
||||
rm -f "$file"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Download fresh file
|
||||
msg_info "Downloading image: $(basename "$file")"
|
||||
if ! curl -fSL -o "$file" "$url"; then
|
||||
msg_error "Download failed: $url"
|
||||
rm -f "$file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Validate again
|
||||
if ! xz -t "$file" &>/dev/null; then
|
||||
msg_error "Downloaded file $(basename "$file") is corrupted. Please try again later."
|
||||
rm -f "$file"
|
||||
exit 1
|
||||
fi
|
||||
msg_ok "Downloaded and validated $(basename "$file")"
|
||||
}
|
||||
|
||||
# Extract .xz with pv
|
||||
# Args: $1=cache_file $2=target_img
|
||||
function extract_xz_with_pv() {
|
||||
set -o pipefail
|
||||
local file="$1"
|
||||
local target="$2"
|
||||
|
||||
msg_info "Decompressing $(basename "$file") to $target"
|
||||
if ! xz -dc "$file" | pv -N "Extracting" >"$target"; then
|
||||
msg_error "Failed to extract $file"
|
||||
rm -f "$target"
|
||||
exit 1
|
||||
fi
|
||||
msg_ok "Decompressed to $target"
|
||||
}
|
||||
|
||||
function default_settings() {
|
||||
BRANCH="$stable"
|
||||
VMID=$(get_valid_nextid)
|
||||
@ -507,23 +561,15 @@ FILE_IMG="/var/lib/vz/template/tmp/${CACHE_FILE##*/%.xz}" # .qcow2
|
||||
mkdir -p "$CACHE_DIR" "$(dirname "$FILE_IMG")"
|
||||
msg_ok "${CL}${BL}${URL}${CL}"
|
||||
|
||||
if [[ ! -s "$CACHE_FILE" ]]; then
|
||||
curl -f#SL -o "$CACHE_FILE" "$URL"
|
||||
msg_ok "Downloaded ${CL}${BL}$(basename "$CACHE_FILE")${CL}"
|
||||
else
|
||||
msg_ok "Using cached image ${CL}${BL}$(basename "$CACHE_FILE")${CL}"
|
||||
fi
|
||||
download_and_validate_xz "$URL" "$CACHE_FILE"
|
||||
|
||||
set -o pipefail
|
||||
msg_info "Creating Home Assistant OS VM shell"
|
||||
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 \
|
||||
-net0 "virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU" -onboot 1 -ostype l26 -scsihw virtio-scsi-pci >/dev/null
|
||||
msg_ok "Created VM shell"
|
||||
|
||||
msg_info "Decompressing $(basename "$CACHE_FILE") to $FILE_IMG"
|
||||
xz -dc "$CACHE_FILE" | pv -N "Extracting" >"$FILE_IMG"
|
||||
msg_ok "Decompressed to $FILE_IMG"
|
||||
extract_xz_with_pv "$CACHE_FILE" "$FILE_IMG"
|
||||
|
||||
msg_info "Importing disk into storage ($STORAGE)"
|
||||
if qm disk import --help >/dev/null 2>&1; then
|
||||
|
||||
@ -35,7 +35,6 @@ GN=$(echo "\033[1;92m")
|
||||
DGN=$(echo "\033[32m")
|
||||
CL=$(echo "\033[m")
|
||||
|
||||
CL=$(echo "\033[m")
|
||||
BOLD=$(echo "\033[1m")
|
||||
BFR="\\r\\033[K"
|
||||
HOLD=" "
|
||||
@ -201,15 +200,69 @@ function exit-script() {
|
||||
exit
|
||||
}
|
||||
|
||||
# Ensure pv is installed or abort with instructions
|
||||
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
|
||||
if ! apt-get update -qq &>/dev/null || ! apt-get install -y pv &>/dev/null; then
|
||||
msg_error "Failed to install pv automatically."
|
||||
echo -e "\nPlease run manually on the Proxmox host:\n apt install pv\n"
|
||||
exit 1
|
||||
fi
|
||||
msg_ok "Installed pv"
|
||||
fi
|
||||
}
|
||||
|
||||
# Download an .xz file and validate it
|
||||
# Args: $1=url $2=cache_file
|
||||
function download_and_validate_xz() {
|
||||
local url="$1"
|
||||
local file="$2"
|
||||
|
||||
# If file exists, check validity
|
||||
if [[ -s "$file" ]]; then
|
||||
if xz -t "$file" &>/dev/null; then
|
||||
msg_ok "Using cached image $(basename "$file")"
|
||||
return 0
|
||||
else
|
||||
msg_error "Cached file $(basename "$file") is corrupted. Deleting and retrying download..."
|
||||
rm -f "$file"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Download fresh file
|
||||
msg_info "Downloading image: $(basename "$file")"
|
||||
if ! curl -fSL -o "$file" "$url"; then
|
||||
msg_error "Download failed: $url"
|
||||
rm -f "$file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Validate again
|
||||
if ! xz -t "$file" &>/dev/null; then
|
||||
msg_error "Downloaded file $(basename "$file") is corrupted. Please try again later."
|
||||
rm -f "$file"
|
||||
exit 1
|
||||
fi
|
||||
msg_ok "Downloaded and validated $(basename "$file")"
|
||||
}
|
||||
|
||||
# Extract .xz with pv
|
||||
# Args: $1=cache_file $2=target_img
|
||||
function extract_xz_with_pv() {
|
||||
set -o pipefail
|
||||
local file="$1"
|
||||
local target="$2"
|
||||
|
||||
msg_info "Decompressing $(basename "$file") to $target"
|
||||
if ! xz -dc "$file" | pv -N "Extracting" >"$target"; then
|
||||
msg_error "Failed to extract $file"
|
||||
rm -f "$target"
|
||||
exit 1
|
||||
fi
|
||||
msg_ok "Decompressed to $target"
|
||||
}
|
||||
|
||||
function default_settings() {
|
||||
VMID=$(get_valid_nextid)
|
||||
MACHINE="q35"
|
||||
@ -475,19 +528,13 @@ FILE_IMG="/var/lib/vz/template/tmp/${CACHE_FILE##*/%.xz}"
|
||||
|
||||
mkdir -p "$CACHE_DIR" "$(dirname "$FILE_IMG")"
|
||||
|
||||
if [[ ! -s "$CACHE_FILE" ]]; then
|
||||
msg_ok "Downloading Umbrel OS image"
|
||||
curl -f#SL -o "$CACHE_FILE" "$URL"
|
||||
else
|
||||
msg_ok "Using cached Umbrel OS image"
|
||||
fi
|
||||
download_and_validate_xz "$URL" "$CACHE_FILE"
|
||||
|
||||
set -o pipefail
|
||||
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 \
|
||||
-net0 "virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU" -onboot 1 -ostype l26 -scsihw virtio-scsi-pci >/dev/null
|
||||
|
||||
xz -dc "$CACHE_FILE" | pv -N "Extracting" >"$FILE_IMG"
|
||||
extract_xz_with_pv "$CACHE_FILE" "$FILE_IMG"
|
||||
|
||||
if qm disk import --help >/dev/null 2>&1; then
|
||||
IMPORT_CMD=(qm disk import)
|
||||
|
||||
Reference in New Issue
Block a user