Compare commits

..

32 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
216b389635 chore: update github-versions.json (#11781)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-11 06:26:01 +00:00
community-scripts-pr-app[bot]
d062baf8c9 Update CHANGELOG.md (#11780)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-11 06:25:27 +00:00
Tiago Noronha
e09e244c3d Fix formatting in kutt.json notes section (#11774) 2026-02-11 07:25:02 +01:00
community-scripts-pr-app[bot]
2645f4cf4d Update CHANGELOG.md (#11779)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-11 00:26:43 +00:00
community-scripts-pr-app[bot]
a0b55b6934 chore: update github-versions.json (#11778)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-11 00:26:14 +00:00
community-scripts-pr-app[bot]
b263dc25fe Update CHANGELOG.md (#11777)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-10 22:05:48 +00:00
Chris
ac308c931e Refactor: Slskd & Soularr (#11674) 2026-02-10 23:04:56 +01:00
Chris
a16dfb6d82 Immich: Pin version to 2.5.6 (#11775) 2026-02-10 22:43:15 +01:00
community-scripts-pr-app[bot]
63e9bc3729 Update CHANGELOG.md (#11773)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-10 19:55:15 +00:00
Slaviša Arežina
3735f9251b Fix setuptools (#11772) 2026-02-10 20:54:30 +01:00
community-scripts-pr-app[bot]
fc2559c702 Update CHANGELOG.md (#11770)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-10 18:31:37 +00:00
carlosmaroot
5f2d463408 feat: enhance backup notes with guest name and improve whitespace handling and content line matching in container parsing. (#11752) 2026-02-10 19:30:54 +01:00
community-scripts-pr-app[bot]
69e0dc6968 chore: update github-versions.json (#11769)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-10 18:25:11 +00:00
community-scripts-pr-app[bot]
fccb8a923a Update CHANGELOG.md (#11766)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-10 14:27:13 +00:00
CanbiZ (MickLesk)
53dbb9d705 fix(elementsynapse): prevent systemd invoke failure during apt install in LXC (#11758) 2026-02-10 15:26:22 +01:00
community-scripts-pr-app[bot]
236c5296b8 Update CHANGELOG.md (#11764)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-10 14:19:46 +00:00
CanbiZ (MickLesk)
76c7e3a67f fix(workflow): include addon scripts in github-versions extraction (#11757) 2026-02-10 15:19:09 +01:00
community-scripts-pr-app[bot]
4dbb139c60 Update CHANGELOG.md (#11759)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-10 12:33:09 +00:00
BirdMakingStuff
c581704fdd Snowshare: fix typo in config file path on website (#11754)
* fix: Fixed typo in snowshare systemd service

* Revert "fix: Fixed typo in snowshare systemd service"

This reverts commit cce1449caa.

* update config_path of snowshare.json instead

* fix formatting issue
2026-02-10 13:32:42 +01:00
community-scripts-pr-app[bot]
e0641d1573 chore: update github-versions.json (#11756)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-10 12:19:10 +00:00
community-scripts-pr-app[bot]
058e860f6d Update .app files (#11751)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-02-10 08:27:06 +01:00
community-scripts-pr-app[bot]
2b87aa6d52 Update CHANGELOG.md (#11750)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-10 07:24:02 +00:00
push-app-to-main[bot]
9640caf7bc paperless-exporter (#11737) 2026-02-10 08:23:33 +01:00
community-scripts-pr-app[bot]
fc044a73ca chore: update github-versions.json (#11749)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-10 06:27:33 +00:00
community-scripts-pr-app[bot]
c97ccbe9bb Update CHANGELOG.md (#11747)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-10 00:26:38 +00:00
community-scripts-pr-app[bot]
5f69d8c315 chore: update github-versions.json (#11746)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-10 00:26:07 +00:00
community-scripts-pr-app[bot]
e8cc7ce8ff chore: update github-versions.json (#11741)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-09 18:20:11 +00:00
CanbiZ (MickLesk)
1357a6f26e fix(msg_menu): redirect menu display to /dev/tty to prevent capture in command substitution 2026-02-09 17:12:56 +01:00
community-scripts-pr-app[bot]
d2da5af858 Update CHANGELOG.md (#11736)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-09 14:54:50 +00:00
CanbiZ (MickLesk)
14755d5efe fix: add --clear to uv venv calls for uv 0.10 compatibility (#11723)
uv 0.10 requires --clear flag to overwrite existing virtual environments.
Without it, update scripts fail when the venv already exists.

Affected: 13 ct/ update scripts, 25 install/ scripts, glances addon
2026-02-09 15:54:22 +01:00
community-scripts-pr-app[bot]
927c3a7c48 Update CHANGELOG.md (#11735)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-09 14:53:53 +00:00
CanbiZ (MickLesk)
9ed365e9eb fix(koillection): add missing setup_composer in update script (#11734) 2026-02-09 15:53:21 +01:00
58 changed files with 563 additions and 364 deletions

View File

@@ -89,9 +89,15 @@ jobs:
slug=$(jq -r '.slug // empty' "$json_file" 2>/dev/null)
[[ -z "$slug" ]] && continue
# Find corresponding install script
install_script="install/${slug}-install.sh"
[[ ! -f "$install_script" ]] && continue
# Find corresponding script (install script or addon script)
install_script=""
if [[ -f "install/${slug}-install.sh" ]]; then
install_script="install/${slug}-install.sh"
elif [[ -f "tools/addon/${slug}.sh" ]]; then
install_script="tools/addon/${slug}.sh"
else
continue
fi
# Look for fetch_and_deploy_gh_release calls
# Pattern: fetch_and_deploy_gh_release "app" "owner/repo" ["mode"] ["version"]

View File

@@ -401,15 +401,57 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-02-11
### 📚 Documentation
- Fix formatting in kutt.json notes section [@tiagodenoronha](https://github.com/tiagodenoronha) ([#11774](https://github.com/community-scripts/ProxmoxVE/pull/11774))
## 2026-02-10
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: Pin version to 2.5.6 [@vhsdream](https://github.com/vhsdream) ([#11775](https://github.com/community-scripts/ProxmoxVE/pull/11775))
- Libretranslate: Fix setuptools [@tremor021](https://github.com/tremor021) ([#11772](https://github.com/community-scripts/ProxmoxVE/pull/11772))
- Element Synapse: prevent systemd invoke failure during apt install [@MickLesk](https://github.com/MickLesk) ([#11758](https://github.com/community-scripts/ProxmoxVE/pull/11758))
- #### ✨ New Features
- Refactor: Slskd & Soularr [@vhsdream](https://github.com/vhsdream) ([#11674](https://github.com/community-scripts/ProxmoxVE/pull/11674))
### 🗑️ Deleted Scripts
- move paperless-exporter from LXC to addon ([#11737](https://github.com/community-scripts/ProxmoxVE/pull/11737))
### 🧰 Tools
- #### 🐞 Bug Fixes
- feat: improve storage parsing & add guestname [@carlosmaroot](https://github.com/carlosmaroot) ([#11752](https://github.com/community-scripts/ProxmoxVE/pull/11752))
### 📂 Github
- Github-Version Workflow: include addon scripts in extraction [@MickLesk](https://github.com/MickLesk) ([#11757](https://github.com/community-scripts/ProxmoxVE/pull/11757))
### 🌐 Website
- #### 📝 Script Information
- Snowshare: fix typo in config file path on website [@BirdMakingStuff](https://github.com/BirdMakingStuff) ([#11754](https://github.com/community-scripts/ProxmoxVE/pull/11754))
## 2026-02-09
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- several scripts: add --clear to uv venv calls for uv 0.10 compatibility [@MickLesk](https://github.com/MickLesk) ([#11723](https://github.com/community-scripts/ProxmoxVE/pull/11723))
- Koillection: ensure setup_composer is in update script [@MickLesk](https://github.com/MickLesk) ([#11734](https://github.com/community-scripts/ProxmoxVE/pull/11734))
- PeaNUT: symlink server.js after update [@vhsdream](https://github.com/vhsdream) ([#11696](https://github.com/community-scripts/ProxmoxVE/pull/11696))
- Umlautadaptarr: use release appsettings.json instead of hardcoded copy [@MickLesk](https://github.com/MickLesk) ([#11725](https://github.com/community-scripts/ProxmoxVE/pull/11725))
- tracearr: prepare for next stable release [@durzo](https://github.com/durzo) ([#11673](https://github.com/community-scripts/ProxmoxVE/pull/11673))
- PeaNUT: symlink server.js after update [@vhsdream](https://github.com/vhsdream) ([#11696](https://github.com/community-scripts/ProxmoxVE/pull/11696))
- #### ✨ New Features

View File

@@ -51,7 +51,7 @@ function update_script() {
cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
cd /opt/adventurelog/backend/server
if [[ ! -x .venv/bin/python ]]; then
$STD uv venv .venv
$STD uv venv --clear .venv
$STD .venv/bin/python -m ensurepip --upgrade
fi
$STD .venv/bin/python -m pip install --upgrade pip

View File

@@ -44,7 +44,7 @@ function update_script() {
msg_info "Updating Autocaliweb"
cd "$INSTALL_DIR"
if [[ ! -d "$VIRTUAL_ENV" ]]; then
$STD uv venv "$VIRTUAL_ENV"
$STD uv venv --clear "$VIRTUAL_ENV"
fi
$STD uv sync --all-extras --active
cd "$INSTALL_DIR"/koreader/plugins

View File

@@ -40,7 +40,7 @@ function update_script() {
chmod 775 /opt/bazarr /var/lib/bazarr/
# Always ensure venv exists
if [[ ! -d /opt/bazarr/venv/ ]]; then
$STD uv venv /opt/bazarr/venv --python 3.12
$STD uv venv --clear /opt/bazarr/venv --python 3.12
fi
# Always check and fix service file if needed

View File

@@ -103,7 +103,7 @@ function update_script() {
cd /opt/dispatcharr
rm -rf .venv
$STD uv venv
$STD uv venv --clear
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
$STD uv pip install gunicorn gevent celery redis daphne
msg_ok "Updated Dispatcharr Backend"

View File

@@ -61,7 +61,7 @@ function update_script() {
msg_info "Updating Backend"
cd /opt/endurain/backend
$STD poetry export -f requirements.txt --output requirements.txt --without-hashes
$STD uv venv
$STD uv venv --clear
$STD uv pip install -r requirements.txt
msg_ok "Backend Updated"

View File

@@ -42,7 +42,7 @@ function update_script() {
rm -rf "$VENV_PATH"
mkdir -p /opt/esphome
cd /opt/esphome
$STD uv venv "$VENV_PATH"
$STD uv venv --clear "$VENV_PATH"
$STD "$VENV_PATH/bin/python" -m ensurepip --upgrade
$STD "$VENV_PATH/bin/python" -m pip install --upgrade pip
$STD "$VENV_PATH/bin/python" -m pip install esphome tornado esptool

View File

@@ -1,6 +0,0 @@
____ __ __ ____ __ _ _________ __ ______ __
/ __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ / __ \____ _____ ___ _____/ /__ __________ / | / / ____/ |/ / / ____/ ______ ____ _____/ /____ _____
/ /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /_/ / __ `/ __ \/ _ \/ ___/ / _ \/ ___/ ___/_____/ |/ / / __ | /_____/ __/ | |/_/ __ \/ __ \/ ___/ __/ _ \/ ___/
/ ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )_____/ ____/ /_/ / /_/ / __/ / / / __(__ |__ )_____/ /| / /_/ // /_____/ /____> </ /_/ / /_/ / / / /_/ __/ /
/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ /_/ \__,_/ .___/\___/_/ /_/\___/____/____/ /_/ |_/\____//_/|_| /_____/_/|_/ .___/\____/_/ \__/\___/_/
/_/ /_/

View File

@@ -105,7 +105,7 @@ EOF
msg_ok "Image-processing libraries up to date"
fi
RELEASE="2.5.5"
RELEASE="2.5.6"
if check_for_gh_release "Immich" "immich-app/immich" "${RELEASE}"; then
if [[ $(cat ~/.immich) > "2.5.1" ]]; then
msg_info "Enabling Maintenance Mode"

View File

@@ -34,7 +34,7 @@ function update_script() {
PYTHON_VERSION="3.12" setup_uv
mkdir -p "$INSTALL_DIR"
cd "$INSTALL_DIR"
$STD uv venv .venv
$STD uv venv --clear .venv
$STD "$VENV_PYTHON" -m ensurepip --upgrade
$STD "$VENV_PYTHON" -m pip install --upgrade pip
$STD "$VENV_PYTHON" -m pip install jupyter

View File

@@ -1,52 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Andy Grunwald (andygrunwald)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/hansmi/prometheus-paperless-exporter
APP="Prometheus-Paperless-NGX-Exporter"
var_tags="${var_tags:-monitoring;alerting}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
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 [[ ! -f /etc/systemd/system/prometheus-paperless-ngx-exporter.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter"; then
msg_info "Stopping Service"
systemctl stop prometheus-paperless-ngx-exporter
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter" "binary"
msg_info "Starting Service"
systemctl start prometheus-paperless-ngx-exporter
msg_ok "Started Service"
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}:8081/metrics${CL}"

View File

@@ -41,7 +41,7 @@ function update_script() {
rm -rf "$PVE_VENV_PATH"
mkdir -p /opt/prometheus-pve-exporter
cd /opt/prometheus-pve-exporter
$STD uv venv "$PVE_VENV_PATH"
$STD uv venv --clear "$PVE_VENV_PATH"
$STD "$PVE_VENV_PATH/bin/python" -m ensurepip --upgrade
$STD "$PVE_VENV_PATH/bin/python" -m pip install --upgrade pip
$STD "$PVE_VENV_PATH/bin/python" -m pip install prometheus-pve-exporter

View File

@@ -41,7 +41,7 @@ function update_script() {
# Always ensure venv exists
if [[ ! -d /opt/sabnzbd/venv ]]; then
msg_info "Migrating SABnzbd to uv virtual environment"
$STD uv venv /opt/sabnzbd/venv
$STD uv venv --clear /opt/sabnzbd/venv
msg_ok "Created uv venv at /opt/sabnzbd/venv"
fi

View File

@@ -38,7 +38,7 @@ function update_script() {
msg_info "Updating Scraparr"
cd /opt/scraparr
$STD uv venv /opt/scraparr/.venv
$STD uv venv --clear /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

View File

@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# Copyright (c) 2021-2026 community-scripts ORG
# Author: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/slskd/slskd, https://soularr.net
# Source: https://github.com/slskd/slskd, https://github.com/mrusse/soularr
APP="slskd"
var_tags="${var_tags:-arr;p2p}"
@@ -24,50 +24,65 @@ function update_script() {
check_container_storage
check_container_resources
if [[ ! -d /opt/slskd ]] || [[ ! -d /opt/soularr ]]; then
msg_error "No ${APP} Installation Found!"
if [[ ! -d /opt/slskd ]]; then
msg_error "No Slskd Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/slskd/slskd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping Service"
systemctl stop slskd soularr.timer soularr.service
msg_info "Stopped Service"
if check_for_gh_release "Slskd" "slskd/slskd"; then
msg_info "Stopping Service(s)"
systemctl stop slskd
[[ -f /etc/systemd/system/soularr.service ]] && systemctl stop soularr.timer soularr.service
msg_ok "Stopped Service(s)"
msg_info "Updating $APP to v${RELEASE}"
tmp_file=$(mktemp)
curl -fsSL "https://github.com/slskd/slskd/releases/download/${RELEASE}/slskd-${RELEASE}-linux-x64.zip" -o $tmp_file
$STD unzip -oj $tmp_file slskd -d /opt/${APP}
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Backing up config"
cp /opt/slskd/config/slskd.yml /opt/slskd.yml.bak
msg_ok "Backed up config"
msg_info "Starting Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Slskd" "slskd/slskd" "prebuild" "latest" "/opt/slskd" "slskd-*-linux-x64.zip"
msg_info "Restoring config"
mv /opt/slskd.yml.bak /opt/slskd/config/slskd.yml
msg_ok "Restored config"
msg_info "Starting Service(s)"
systemctl start slskd
msg_ok "Started Service"
rm -rf $tmp_file
else
msg_ok "No ${APP} update required. ${APP} is already at v${RELEASE}"
[[ -f /etc/systemd/system/soularr.service ]] && systemctl start soularr.timer
msg_ok "Started Service(s)"
msg_ok "Updated Slskd successfully!"
fi
msg_info "Updating Soularr"
cp /opt/soularr/config.ini /opt/config.ini.bak
cp /opt/soularr/run.sh /opt/run.sh.bak
cd /tmp
rm -rf /opt/soularr
curl -fsSL -o main.zip https://github.com/mrusse/soularr/archive/refs/heads/main.zip
$STD unzip main.zip
mv soularr-main /opt/soularr
cd /opt/soularr
$STD pip install -r requirements.txt
mv /opt/config.ini.bak /opt/soularr/config.ini
mv /opt/run.sh.bak /opt/soularr/run.sh
rm -rf /tmp/main.zip
msg_ok "Updated soularr"
[[ -d /opt/soularr ]] && if check_for_gh_release "Soularr" "mrusse/soularr"; then
if systemctl is-active soularr.timer >/dev/null; then
msg_info "Stopping Timer and Service"
systemctl stop soularr.timer soularr.service
msg_ok "Stopped Timer and Service"
fi
msg_info "Starting soularr timer"
systemctl start soularr.timer
msg_ok "Started soularr timer"
exit
msg_info "Backing up Soularr config"
cp /opt/soularr/config.ini /opt/soularr_config.ini.bak
cp /opt/soularr/run.sh /opt/soularr_run.sh.bak
msg_ok "Backed up Soularr config"
PYTHON_VERSION="3.11" setup_uv
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Soularr" "mrusse/soularr" "tarball" "latest" "/opt/soularr"
msg_info "Updating Soularr"
cd /opt/soularr
$STD uv venv -c venv
$STD source venv/bin/activate
$STD uv pip install -r requirements.txt
deactivate
msg_ok "Updated Soularr"
msg_info "Restoring Soularr config"
mv /opt/soularr_config.ini.bak /opt/soularr/config.ini
mv /opt/soularr_run.sh.bak /opt/soularr/run.sh
msg_ok "Restored Soularr config"
msg_info "Starting Soularr Timer"
systemctl restart soularr.timer
msg_ok "Started Soularr Timer"
msg_ok "Updated Soularr successfully!"
fi
}
start

View File

@@ -39,7 +39,7 @@ function update_script() {
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "streamlink-webui" "CrazyWolf13/streamlink-webui" "tarball"
msg_info "Updating streamlink-webui"
$STD uv venv /opt/streamlink-webui/backend/src/.venv
$STD uv venv --clear /opt/streamlink-webui/backend/src/.venv
source /opt/streamlink-webui/backend/src/.venv/bin/activate
$STD uv pip install -r /opt/streamlink-webui/backend/src/requirements.txt --python=/opt/streamlink-webui/backend/src/.venv
cd /opt/streamlink-webui/frontend/src

View File

@@ -50,7 +50,7 @@ function update_script() {
cp -r /opt/tandoor.bak/{config,api,mediafiles,staticfiles} /opt/tandoor/
mv /opt/tandoor.bak/.env /opt/tandoor/.env
cd /opt/tandoor
$STD uv venv .venv --python=python3
$STD uv venv --clear .venv --python=python3
$STD uv pip install -r requirements.txt --python .venv/bin/python
cd /opt/tandoor/vue3
$STD yarn install

View File

@@ -39,7 +39,7 @@ function update_script() {
msg_info "Updating Warracker"
cd /opt/warracker/backend
$STD uv venv .venv
$STD uv venv --clear .venv
$STD source .venv/bin/activate
$STD uv pip install -r requirements.txt
msg_ok "Updated Warracker"

View File

@@ -1,5 +1,5 @@
{
"generated": "2026-02-09T12:16:55Z",
"generated": "2026-02-11T06:25:53Z",
"versions": [
{
"slug": "2fauth",
@@ -15,6 +15,13 @@
"pinned": false,
"date": "2025-12-08T14:34:55Z"
},
{
"slug": "adguardhome-sync",
"repo": "bakito/adguardhome-sync",
"version": "v0.8.2",
"pinned": false,
"date": "2025-10-24T17:13:47Z"
},
{
"slug": "adventurelog",
"repo": "seanmorley15/adventurelog",
@@ -200,16 +207,16 @@
{
"slug": "comfyui",
"repo": "comfyanonymous/ComfyUI",
"version": "v0.12.3",
"version": "v0.13.0",
"pinned": false,
"date": "2026-02-05T07:04:07Z"
"date": "2026-02-10T20:27:38Z"
},
{
"slug": "commafeed",
"repo": "Athou/commafeed",
"version": "6.1.1",
"version": "6.2.0",
"pinned": false,
"date": "2026-01-26T15:14:16Z"
"date": "2026-02-09T19:44:58Z"
},
{
"slug": "configarr",
@@ -256,23 +263,23 @@
{
"slug": "discopanel",
"repo": "nickheyer/discopanel",
"version": "v1.0.35",
"version": "v1.0.36",
"pinned": false,
"date": "2026-02-02T05:20:12Z"
"date": "2026-02-09T21:15:44Z"
},
{
"slug": "dispatcharr",
"repo": "Dispatcharr/Dispatcharr",
"version": "v0.18.1",
"version": "v0.19.0",
"pinned": false,
"date": "2026-01-27T17:09:11Z"
"date": "2026-02-10T21:18:10Z"
},
{
"slug": "docmost",
"repo": "docmost/docmost",
"version": "v0.25.2",
"version": "v0.25.3",
"pinned": false,
"date": "2026-02-06T19:50:55Z"
"date": "2026-02-10T02:58:23Z"
},
{
"slug": "domain-locker",
@@ -291,9 +298,9 @@
{
"slug": "donetick",
"repo": "donetick/donetick",
"version": "v0.1.64",
"version": "v0.1.71",
"pinned": false,
"date": "2025-10-03T05:18:24Z"
"date": "2026-02-11T06:01:13Z"
},
{
"slug": "duplicati",
@@ -319,9 +326,9 @@
{
"slug": "endurain",
"repo": "endurain-project/endurain",
"version": "v0.17.3",
"version": "v0.17.4",
"pinned": false,
"date": "2026-01-23T22:02:05Z"
"date": "2026-02-11T04:54:22Z"
},
{
"slug": "ersatztv",
@@ -533,6 +540,13 @@
"pinned": false,
"date": "2026-02-07T04:44:20Z"
},
{
"slug": "immich-public-proxy",
"repo": "alangrainger/immich-public-proxy",
"version": "v1.15.1",
"pinned": false,
"date": "2026-01-26T08:04:27Z"
},
{
"slug": "inspircd",
"repo": "inspircd/inspircd",
@@ -557,9 +571,16 @@
{
"slug": "jackett",
"repo": "Jackett/Jackett",
"version": "v0.24.1074",
"version": "v0.24.1094",
"pinned": false,
"date": "2026-02-09T06:01:19Z"
"date": "2026-02-11T06:01:16Z"
},
{
"slug": "jellystat",
"repo": "CyferShepard/Jellystat",
"version": "V1.1.8",
"pinned": false,
"date": "2026-02-08T08:15:00Z"
},
{
"slug": "joplin-server",
@@ -599,9 +620,9 @@
{
"slug": "keycloak",
"repo": "keycloak/keycloak",
"version": "26.5.2",
"version": "26.5.3",
"pinned": false,
"date": "2026-01-23T14:26:58Z"
"date": "2026-02-10T07:30:08Z"
},
{
"slug": "kimai",
@@ -634,9 +655,9 @@
{
"slug": "kometa",
"repo": "Kometa-Team/Kometa",
"version": "v2.2.2",
"version": "v2.3.0",
"pinned": false,
"date": "2025-10-06T21:31:07Z"
"date": "2026-02-09T21:26:56Z"
},
{
"slug": "komga",
@@ -683,9 +704,9 @@
{
"slug": "libretranslate",
"repo": "LibreTranslate/LibreTranslate",
"version": "v1.8.4",
"version": "v1.9.0",
"pinned": false,
"date": "2026-02-02T17:45:16Z"
"date": "2026-02-10T19:05:48Z"
},
{
"slug": "lidarr",
@@ -718,9 +739,9 @@
{
"slug": "lubelogger",
"repo": "hargata/lubelog",
"version": "v1.5.8",
"version": "v1.6.0",
"pinned": false,
"date": "2026-01-26T18:18:03Z"
"date": "2026-02-10T20:16:32Z"
},
{
"slug": "mafl",
@@ -739,9 +760,9 @@
{
"slug": "mail-archiver",
"repo": "s1t5/mail-archiver",
"version": "2601.3",
"version": "2602.1",
"pinned": false,
"date": "2026-01-25T12:52:24Z"
"date": "2026-02-11T06:23:11Z"
},
{
"slug": "managemydamnlife",
@@ -753,9 +774,9 @@
{
"slug": "manyfold",
"repo": "manyfold3d/manyfold",
"version": "v0.132.0",
"version": "v0.132.1",
"pinned": false,
"date": "2026-01-29T13:53:21Z"
"date": "2026-02-09T22:02:28Z"
},
{
"slug": "mealie",
@@ -816,9 +837,9 @@
{
"slug": "myip",
"repo": "jason5ng32/MyIP",
"version": "v5.2.0",
"version": "v5.2.1",
"pinned": false,
"date": "2026-01-05T05:56:57Z"
"date": "2026-02-10T07:38:47Z"
},
{
"slug": "mylar3",
@@ -837,9 +858,9 @@
{
"slug": "navidrome",
"repo": "navidrome/navidrome",
"version": "v0.60.2",
"version": "v0.60.3",
"pinned": false,
"date": "2026-02-07T19:42:33Z"
"date": "2026-02-10T23:55:04Z"
},
{
"slug": "netbox",
@@ -848,6 +869,13 @@
"pinned": false,
"date": "2026-02-03T13:54:26Z"
},
{
"slug": "nextcloud-exporter",
"repo": "xperimental/nextcloud-exporter",
"version": "v0.9.0",
"pinned": false,
"date": "2025-10-12T20:03:10Z"
},
{
"slug": "nginx-ui",
"repo": "0xJacky/nginx-ui",
@@ -1012,16 +1040,16 @@
{
"slug": "pelican-panel",
"repo": "pelican-dev/panel",
"version": "v1.0.0-beta31",
"version": "v1.0.0-beta32",
"pinned": false,
"date": "2026-01-18T22:43:24Z"
"date": "2026-02-09T22:15:44Z"
},
{
"slug": "pelican-wings",
"repo": "pelican-dev/wings",
"version": "v1.0.0-beta22",
"version": "v1.0.0-beta23",
"pinned": false,
"date": "2026-01-18T22:38:36Z"
"date": "2026-02-09T22:10:26Z"
},
{
"slug": "pf2etools",
@@ -1037,6 +1065,13 @@
"pinned": false,
"date": "2025-12-01T05:07:31Z"
},
{
"slug": "pihole-exporter",
"repo": "eko/pihole-exporter",
"version": "v1.2.0",
"pinned": false,
"date": "2025-07-29T19:15:37Z"
},
{
"slug": "planka",
"repo": "plankanban/planka",
@@ -1131,9 +1166,9 @@
{
"slug": "pulse",
"repo": "rcourtman/Pulse",
"version": "v5.1.5",
"version": "v5.1.8",
"pinned": false,
"date": "2026-02-08T12:19:53Z"
"date": "2026-02-10T22:37:58Z"
},
{
"slug": "pve-scripts-local",
@@ -1149,6 +1184,13 @@
"pinned": false,
"date": "2025-11-19T23:54:34Z"
},
{
"slug": "qbittorrent-exporter",
"repo": "martabal/qbittorrent-exporter",
"version": "v1.13.2",
"pinned": false,
"date": "2025-12-13T22:59:03Z"
},
{
"slug": "qdrant",
"repo": "qdrant/qdrant",
@@ -1236,16 +1278,16 @@
{
"slug": "scanopy",
"repo": "scanopy/scanopy",
"version": "v0.14.3",
"version": "v0.14.4",
"pinned": false,
"date": "2026-02-04T01:41:01Z"
"date": "2026-02-10T03:57:28Z"
},
{
"slug": "scraparr",
"repo": "thecfu/scraparr",
"version": "v2.2.5",
"version": "v3.0.0",
"pinned": false,
"date": "2025-10-07T12:34:31Z"
"date": "2026-02-10T22:30:44Z"
},
{
"slug": "seelf",
@@ -1282,6 +1324,13 @@
"pinned": false,
"date": "2026-01-16T12:08:28Z"
},
{
"slug": "slskd",
"repo": "slskd/slskd",
"version": "0.24.3",
"pinned": false,
"date": "2026-01-15T14:40:15Z"
},
{
"slug": "snipeit",
"repo": "grokability/snipe-it",
@@ -1292,9 +1341,9 @@
{
"slug": "snowshare",
"repo": "TuroYT/snowshare",
"version": "v1.3.3",
"version": "v1.3.4",
"pinned": false,
"date": "2026-02-09T10:52:12Z"
"date": "2026-02-10T14:17:26Z"
},
{
"slug": "sonarr",
@@ -1418,9 +1467,9 @@
{
"slug": "tracearr",
"repo": "connorgallopo/Tracearr",
"version": "v1.4.12",
"version": "v1.4.17",
"pinned": false,
"date": "2026-01-28T23:29:37Z"
"date": "2026-02-11T01:33:21Z"
},
{
"slug": "tracktor",
@@ -1446,9 +1495,9 @@
{
"slug": "trip",
"repo": "itskovacs/TRIP",
"version": "1.39.0",
"version": "1.40.0",
"pinned": false,
"date": "2026-02-07T16:59:51Z"
"date": "2026-02-10T20:12:53Z"
},
{
"slug": "tududi",
@@ -1509,9 +1558,9 @@
{
"slug": "vaultwarden",
"repo": "dani-garcia/vaultwarden",
"version": "1.35.2",
"version": "1.35.3",
"pinned": false,
"date": "2026-01-09T18:37:04Z"
"date": "2026-02-10T20:37:03Z"
},
{
"slug": "victoriametrics",
@@ -1537,9 +1586,9 @@
{
"slug": "wallos",
"repo": "ellite/Wallos",
"version": "v4.6.0",
"version": "v4.6.1",
"pinned": false,
"date": "2025-12-20T15:57:51Z"
"date": "2026-02-10T21:06:46Z"
},
{
"slug": "wanderer",
@@ -1590,6 +1639,13 @@
"pinned": false,
"date": "2025-11-11T14:30:28Z"
},
{
"slug": "wger",
"repo": "wger-project/wger",
"version": "2.4",
"pinned": false,
"date": "2026-01-18T12:12:02Z"
},
{
"slug": "wikijs",
"repo": "requarks/wiki",
@@ -1600,9 +1656,9 @@
{
"slug": "wishlist",
"repo": "cmintey/wishlist",
"version": "v0.59.0",
"version": "v0.60.0",
"pinned": false,
"date": "2026-01-19T16:42:14Z"
"date": "2026-02-10T04:05:26Z"
},
{
"slug": "wizarr",
@@ -1628,9 +1684,9 @@
{
"slug": "yubal",
"repo": "guillevc/yubal",
"version": "v0.4.2",
"version": "v0.5.0",
"pinned": false,
"date": "2026-02-08T21:35:13Z"
"date": "2026-02-09T22:11:32Z"
},
{
"slug": "zigbee2mqtt",
@@ -1642,9 +1698,9 @@
{
"slug": "zipline",
"repo": "diced/zipline",
"version": "v4.4.1",
"version": "v4.4.2",
"pinned": false,
"date": "2026-01-20T01:29:01Z"
"date": "2026-02-11T04:58:54Z"
},
{
"slug": "zitadel",

View File

@@ -33,7 +33,7 @@
},
"notes": [
{
"text": "Kutt needs so be served with an SSL certificate for its login to work. During install, you will be prompted to choose if you want to have Caddy installed for SSL termination or if you want to use your own reverse proxy (in that case point your reverse porxy to port 3000).",
"text": "Kutt needs so be served with an SSL certificate for its login to work. During install, you will be prompted to choose if you want to have Caddy installed for SSL termination or if you want to use your own reverse proxy (in that case point your reverse proxy to port 3000).",
"type": "info"
}
]

View File

@@ -1,44 +1,35 @@
{
"name": "Prometheus Paperless NGX Exporter",
"slug": "prometheus-paperless-ngx-exporter",
"categories": [
9
],
"date_created": "2025-02-07",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8081,
"documentation": null,
"website": "https://github.com/hansmi/prometheus-paperless-exporter",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/paperless-ngx.webp",
"config_path": "",
"description": "Prometheus metrics exporter for Paperless-NGX, a document management system transforming physical documents into a searchable online archive. The exporter relies on Paperless' REST API.",
"install_methods": [
{
"type": "default",
"script": "ct/prometheus-paperless-ngx-exporter.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 2,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Please adjust the Paperless URL in the systemd unit file: /etc/systemd/system/prometheus-paperless-ngx-exporter.service",
"type": "info"
},
{
"text": "Please adjust the Paperless authentication token in the configuration file: /etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file",
"type": "info"
}
]
"name": "Prometheus Paperless NGX Exporter",
"slug": "prometheus-paperless-ngx-exporter",
"categories": [
9
],
"date_created": "2025-02-07",
"type": "addon",
"updateable": true,
"privileged": false,
"interface_port": 8081,
"documentation": "https://github.com/hansmi/prometheus-paperless-exporter",
"website": "https://github.com/hansmi/prometheus-paperless-exporter",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/paperless-ngx.webp",
"config_path": "/etc/prometheus-paperless-ngx-exporter/config.env",
"description": "Prometheus metrics exporter for Paperless-NGX, a document management system transforming physical documents into a searchable online archive. The exporter relies on Paperless' REST API.",
"install_methods": [
{
"type": "default",
"script": "tools/addon/prometheus-paperless-ngx-exporter.sh",
"resources": {
"cpu": null,
"ram": null,
"hdd": null,
"os": null,
"version": null
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -1,5 +1,5 @@
{
"name": "slskd",
"name": "Slskd",
"slug": "slskd",
"categories": [
11
@@ -35,10 +35,6 @@
{
"text": "See /opt/slskd/config/slskd.yml to add your Soulseek credentials",
"type": "info"
},
{
"text": "This LXC includes Soularr; it needs to be configured (/opt/soularr/config.ini) before it will work",
"type": "info"
}
]
}

View File

@@ -10,7 +10,7 @@
"privileged": false,
"interface_port": 3000,
"documentation": "https://github.com/TuroYT/snowshare",
"config_path": "/opt/snowshare/.env",
"config_path": "/opt/snowshare.env",
"website": "https://github.com/TuroYT/snowshare",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/snowshare.png",
"description": "A modern, secure file and link sharing platform built with Next.js, Prisma, and NextAuth. Share URLs, code snippets, and files with customizable expiration, privacy, and QR codes.",

View File

@@ -58,7 +58,7 @@ DISABLE_REGISTRATION=False
EOF
cd /opt/adventurelog/backend/server
mkdir -p /opt/adventurelog/backend/server/media
$STD uv venv /opt/adventurelog/backend/server/.venv
$STD uv venv --clear /opt/adventurelog/backend/server/.venv
$STD /opt/adventurelog/backend/server/.venv/bin/python -m ensurepip --upgrade
$STD /opt/adventurelog/backend/server/.venv/bin/python -m pip install --upgrade pip
$STD /opt/adventurelog/backend/server/.venv/bin/python -m pip install -r requirements.txt

View File

@@ -77,7 +77,7 @@ echo "${KEPUB_VERSION#v}" >"$INSTALL_DIR"/KEPUBIFY_RELEASE
sed 's/^/v/' ~/.autocaliweb >"$INSTALL_DIR"/ACW_RELEASE
cd "$INSTALL_DIR"
$STD uv venv "$VIRTUAL_ENV"
$STD uv venv --clear "$VIRTUAL_ENV"
$STD uv sync --all-extras --active
cat <<EOF >./dirs.json
{

View File

@@ -29,7 +29,7 @@ fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy" "tarball"
msg_info "Installing Babybuddy"
mkdir -p /opt/data
cd /opt/babybuddy
$STD uv venv .venv
$STD uv venv --clear .venv
$STD source .venv/bin/activate
$STD uv pip install -r requirements.txt
cp babybuddy/settings/production.example.py babybuddy/settings/production.py

View File

@@ -20,7 +20,7 @@ msg_info "Installing Bazarr"
mkdir -p /var/lib/bazarr/
chmod 775 /opt/bazarr /var/lib/bazarr/
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
$STD uv venv /opt/bazarr/venv --python 3.12
$STD uv venv --clear /opt/bazarr/venv --python 3.12
$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
msg_ok "Installed Bazarr"

View File

@@ -36,7 +36,7 @@ PYTHON_VERSION="3.12" setup_uv
fetch_and_deploy_gh_release "ComfyUI" "comfyanonymous/ComfyUI" "tarball" "latest" "/opt/ComfyUI"
msg_info "Python dependencies"
$STD uv venv "/opt/ComfyUI/venv"
$STD uv venv --clear "/opt/ComfyUI/venv"
if [[ "${comfyui_gpu_type,,}" == "nvidia" ]]; then
pytorch_url="https://download.pytorch.org/whl/cu130"

View File

@@ -36,7 +36,7 @@ fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr" "tarball"
msg_info "Installing Python Dependencies with uv"
cd /opt/dispatcharr
$STD uv venv
$STD uv venv --clear
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
$STD uv pip install gunicorn gevent celery redis daphne
msg_ok "Installed Python Dependencies"

View File

@@ -31,8 +31,10 @@ setup_deb822_repo "matrix-org" \
"main"
echo "matrix-synapse-py3 matrix-synapse/server-name string $servername" | debconf-set-selections
echo "matrix-synapse-py3 matrix-synapse/report-stats boolean false" | debconf-set-selections
echo "exit 101" >/usr/sbin/policy-rc.d
chmod +x /usr/sbin/policy-rc.d
$STD apt install matrix-synapse-py3 -y
systemctl stop matrix-synapse
rm -f /usr/sbin/policy-rc.d
sed -i 's/127.0.0.1/0.0.0.0/g' /etc/matrix-synapse/homeserver.yaml
sed -i 's/'\''::1'\'', //g' /etc/matrix-synapse/homeserver.yaml
SECRET=$(openssl rand -hex 32)

View File

@@ -86,7 +86,7 @@ $STD uv tool update-shell
export PATH="/root/.local/bin:$PATH"
$STD poetry self add poetry-plugin-export
$STD poetry export -f requirements.txt --output requirements.txt --without-hashes
$STD uv venv
$STD uv venv --clear
$STD uv pip install -r requirements.txt
msg_ok "Setup Backend"

View File

@@ -23,7 +23,7 @@ msg_info "Setting up Virtual Environment"
mkdir -p /opt/esphome
mkdir -p /root/config
cd /opt/esphome
$STD uv venv /opt/esphome/.venv
$STD uv venv --clear /opt/esphome/.venv
$STD /opt/esphome/.venv/bin/python -m ensurepip --upgrade
$STD /opt/esphome/.venv/bin/python -m pip install --upgrade pip
$STD /opt/esphome/.venv/bin/python -m pip install esphome tornado esptool

View File

@@ -17,7 +17,7 @@ PYTHON_VERSION="3.12" setup_uv
fetch_and_deploy_gh_release "huntarr" "plexguide/Huntarr.io" "tarball"
msg_info "Configure Huntarr"
$STD uv venv /opt/huntarr/.venv
$STD uv venv --clear /opt/huntarr/.venv
$STD uv pip install --python /opt/huntarr/.venv/bin/python -r /opt/huntarr/requirements.txt
msg_ok "Configured Huntrarr"

View File

@@ -289,7 +289,7 @@ ML_DIR="${APP_DIR}/machine-learning"
GEO_DIR="${INSTALL_DIR}/geodata"
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "v2.5.5" "$SRC_DIR"
fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "v2.5.6" "$SRC_DIR"
PNPM_VERSION="$(jq -r '.packageManager | split("@")[1]' ${SRC_DIR}/package.json)"
NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs

View File

@@ -18,7 +18,7 @@ PYTHON_VERSION="3.12" setup_uv
msg_info "Installing Jupyter"
mkdir -p /opt/jupyter
cd /opt/jupyter
$STD uv venv /opt/jupyter/.venv
$STD uv venv --clear /opt/jupyter/.venv
$STD /opt/jupyter/.venv/bin/python -m ensurepip --upgrade
$STD /opt/jupyter/.venv/bin/python -m pip install --upgrade pip
$STD /opt/jupyter/.venv/bin/python -m pip install jupyter

View File

@@ -22,7 +22,7 @@ fetch_and_deploy_gh_release "kapowarr" "Casvt/Kapowarr" "tarball"
msg_info "Setup Kapowarr"
cd /opt/kapowarr
$STD uv venv .venv
$STD uv venv --clear .venv
$STD source .venv/bin/activate
$STD uv pip install --upgrade pip
$STD uv pip install --no-cache-dir -r requirements.txt

View File

@@ -50,7 +50,7 @@ $STD useradd librenms -d /opt/librenms -M -r -s "$(which bash)"
mkdir -p /opt/librenms/{rrd,logs,bootstrap/cache,storage,html}
cd /opt/librenms
APP_KEY=$(openssl rand -base64 40 | tr -dc 'a-zA-Z0-9')
$STD uv venv .venv
$STD uv venv --clear .venv
$STD source .venv/bin/activate
$STD uv pip install -r requirements.txt
cat <<EOF >/opt/librenms/.env

View File

@@ -43,9 +43,10 @@ if [[ -z "$TORCH_VERSION" ]]; then
TORCH_VERSION="2.5.0"
fi
cd /opt/libretranslate
$STD uv venv .venv --python 3.12
$STD uv venv --clear .venv --python 3.12
$STD source .venv/bin/activate
$STD uv pip install --upgrade pip setuptools
$STD uv pip install --upgrade pip
$STD uv pip install "setuptools<81"
$STD uv pip install Babel==2.12.1
$STD .venv/bin/python scripts/compile_locales.py
$STD uv pip install "torch==${TORCH_VERSION}" --extra-index-url https://download.pytorch.org/whl/cpu

View File

@@ -42,7 +42,7 @@ msg_ok "Set up PostgreSQL"
msg_info "Setting up Virtual Environment"
mkdir -p /opt/litellm
cd /opt/litellm
$STD uv venv /opt/litellm/.venv
$STD uv venv --clear /opt/litellm/.venv
$STD /opt/litellm/.venv/bin/python -m ensurepip --upgrade
$STD /opt/litellm/.venv/bin/python -m pip install --upgrade pip
$STD /opt/litellm/.venv/bin/python -m pip install litellm[proxy] prisma

View File

@@ -29,7 +29,7 @@ fetch_and_deploy_gh_release "mylar3" "mylar3/mylar3" "tarball"
msg_info "Installing ${APPLICATION}"
mkdir -p /opt/mylar3-data
$STD uv venv /opt/mylar3/.venv
$STD uv venv --clear /opt/mylar3/.venv
$STD /opt/mylar3/.venv/bin/python -m ensurepip --upgrade
$STD /opt/mylar3/.venv/bin/python -m pip install --upgrade pip
$STD /opt/mylar3/.venv/bin/python -m pip install --no-cache-dir -r /opt/mylar3/requirements.txt

View File

@@ -1,47 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Andy Grunwald (andygrunwald)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/hansmi/prometheus-paperless-exporter
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter" "binary"
msg_info "Configuring Prometheus Paperless NGX Exporter"
mkdir -p /etc/prometheus-paperless-ngx-exporter
echo "SECRET_AUTH_TOKEN" >/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
msg_ok "Configured Prometheus Paperless NGX Exporter"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/prometheus-paperless-ngx-exporter.service
[Unit]
Description=Prometheus Paperless NGX Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=root
Restart=always
Type=simple
ExecStart=/usr/bin/prometheus-paperless-exporter \
--paperless_url=http://paperless.example.org \
--paperless_auth_token_file=/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
ExecReload=/bin/kill -HUP \$MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now prometheus-paperless-ngx-exporter
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc

View File

@@ -19,7 +19,7 @@ msg_info "Installing Prometheus Proxmox VE Exporter"
mkdir -p /opt/prometheus-pve-exporter
cd /opt/prometheus-pve-exporter
$STD uv venv /opt/prometheus-pve-exporter/.venv
$STD uv venv --clear /opt/prometheus-pve-exporter/.venv
$STD /opt/prometheus-pve-exporter/.venv/bin/python -m ensurepip --upgrade
$STD /opt/prometheus-pve-exporter/.venv/bin/python -m pip install --upgrade pip
$STD /opt/prometheus-pve-exporter/.venv/bin/python -m pip install prometheus-pve-exporter

View File

@@ -36,7 +36,7 @@ msg_ok "Setup Unrar"
fetch_and_deploy_gh_release "sabnzbd-org" "sabnzbd/sabnzbd" "prebuild" "latest" "/opt/sabnzbd" "SABnzbd-*-src.tar.gz"
msg_info "Installing SABnzbd"
$STD uv venv /opt/sabnzbd/venv
$STD uv venv --clear /opt/sabnzbd/venv
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
msg_ok "Installed SABnzbd"

View File

@@ -18,7 +18,7 @@ fetch_and_deploy_gh_release "scrappar" "thecfu/scraparr" "tarball" "latest" "/op
msg_info "Installing Scraparr"
cd /opt/scraparr
$STD uv venv /opt/scraparr/.venv
$STD uv venv --clear /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

View File

@@ -131,7 +131,7 @@ msg_ok "Built Shelfmark frontend"
msg_info "Configuring Shelfmark"
cd /opt/shelfmark
$STD uv venv ./venv
$STD uv venv --clear ./venv
$STD source ./venv/bin/activate
$STD uv pip install -r ./requirements-base.txt
[[ "$DEPLOYMENT_TYPE" == "1" ]] && $STD uv pip install -r ./requirements-shelfmark.txt

View File

@@ -3,7 +3,7 @@
# Copyright (c) 2021-2026 community-scripts ORG
# Author: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/slskd/slskd/, https://soularr.net
# Source: https://github.com/slskd/slskd/, https://github.com/mrusse/soularr
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
@@ -13,71 +13,71 @@ setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
python3-pip
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "Slskd" "slskd/slskd" "prebuild" "latest" "/opt/slskd" "slskd-*-linux-x64.zip"
msg_info "Setup ${APPLICATION}"
tmp_file=$(mktemp)
RELEASE=$(curl -s https://api.github.com/repos/slskd/slskd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
curl -fsSL "https://github.com/slskd/slskd/releases/download/${RELEASE}/slskd-${RELEASE}-linux-x64.zip" -o $tmp_file
$STD unzip $tmp_file -d /opt/${APPLICATION}
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_info "Configuring Slskd"
JWT_KEY=$(openssl rand -base64 44)
SLSKD_API_KEY=$(openssl rand -base64 44)
cp /opt/${APPLICATION}/config/slskd.example.yml /opt/${APPLICATION}/config/slskd.yml
cp /opt/slskd/config/slskd.example.yml /opt/slskd/config/slskd.yml
sed -i \
-e "\|web:|,\|cidr|s|^#||" \
-e "\|https:|,\|5031|s|false|true|" \
-e '/web:/,/cidr/s/^# //' \
-e '/https:/,/port: 5031/s/false/true/' \
-e '/port: 5030/,/socket/s/,.*$//' \
-e '/content_path:/,/authentication/s/false/true/' \
-e "\|api_keys|,\|cidr|s|<some.*$|$SLSKD_API_KEY|; \
s|role: readonly|role: readwrite|; \
s|0.0.0.0/0,::/0|& # Replace this with your subnet|" \
-e "\|soulseek|,\|write_queue|s|^#||" \
-e "\|jwt:|,\|ttl|s|key: ~|key: $JWT_KEY|" \
-e "s|^ picture|# picture|" \
/opt/${APPLICATION}/config/slskd.yml
msg_ok "Setup ${APPLICATION}"
-e '/soulseek/,/write_queue/s/^# //' \
-e 's/^.*picture/#&/' /opt/slskd/config/slskd.yml
msg_ok "Configured Slskd"
msg_info "Installing Soularr"
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
cd /tmp
curl -fsSL -o main.zip https://github.com/mrusse/soularr/archive/refs/heads/main.zip
$STD unzip main.zip
mv soularr-main /opt/soularr
cd /opt/soularr
$STD pip install -r requirements.txt
sed -i \
-e "\|[Slskd]|,\|host_url|s|yourslskdapikeygoeshere|$SLSKD_API_KEY|" \
-e "/host_url/s/slskd/localhost/" \
/opt/soularr/config.ini
sed -i \
-e "/#This\|#Default\|INTERVAL/{N;d;}" \
-e "/while\|#Pass/d" \
-e "\|python|s|app|opt/soularr|; s|python|python3|" \
-e "/dt/,+2d" \
/opt/soularr/run.sh
sed -i -E "/(soularr.py)/s/.{5}$//; /if/,/fi/s/.{4}//" /opt/soularr/run.sh
chmod +x /opt/soularr/run.sh
msg_ok "Installed Soularr"
read -rp "${TAB3}Do you want to install Soularr? y/N " soularr
if [[ ${soularr,,} =~ ^(y|yes)$ ]]; then
PYTHON_VERSION="3.11" setup_uv
fetch_and_deploy_gh_release "Soularr" "mrusse/soularr" "tarball" "latest" "/opt/soularr"
cd /opt/soularr
$STD uv venv venv
$STD source venv/bin/activate
$STD uv pip install -r requirements.txt
sed -i \
-e "\|[Slskd]|,\|host_url|s|yourslskdapikeygoeshere|$SLSKD_API_KEY|" \
-e "/host_url/s/slskd/localhost/" \
/opt/soularr/config.ini
cat <<EOF >/opt/soularr/run.sh
#!/usr/bin/env bash
msg_info "Creating Services"
cat <<EOF >/etc/systemd/system/${APPLICATION}.service
if ps aux | grep "[s]oularr.py" >/dev/null; then
echo "Soularr is already running. Exiting..."
exit 1
else
source /opt/soularr/venv/bin/activate
uv run python3 -u /opt/soularr/soularr.py --config-dir /opt/soularr
fi
EOF
chmod +x /opt/soularr/run.sh
deactivate
msg_ok "Installed Soularr"
fi
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/slskd.service
[Unit]
Description=${APPLICATION} Service
Description=Slskd Service
After=network.target
Wants=network.target
[Service]
WorkingDirectory=/opt/${APPLICATION}
ExecStart=/opt/${APPLICATION}/slskd --config /opt/${APPLICATION}/config/slskd.yml
WorkingDirectory=/opt/slskd
ExecStart=/opt/slskd/slskd --config /opt/slskd/config/slskd.yml
Restart=always
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/soularr.timer
if [[ -d /opt/soularr ]]; then
cat <<EOF >/etc/systemd/system/soularr.timer
[Unit]
Description=Soularr service timer
RefuseManualStart=no
@@ -85,15 +85,15 @@ RefuseManualStop=no
[Timer]
Persistent=true
# run every 5 minutes
OnCalendar=*-*-* *:0/5:00
# run every 10 minutes
OnCalendar=*-*-* *:0/10:00
Unit=soularr.service
[Install]
WantedBy=timers.target
EOF
cat <<EOF >/etc/systemd/system/soularr.service
cat <<EOF >/etc/systemd/system/soularr.service
[Unit]
Description=Soularr service
After=network.target slskd.service
@@ -106,10 +106,9 @@ ExecStart=/bin/bash -c /opt/soularr/run.sh
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now ${APPLICATION}
systemctl enable -q soularr.timer
rm -rf $tmp_file
rm -rf /tmp/main.zip
msg_warn "Add your Lidarr API key to Soularr in '/opt/soularr/config.ini', then run 'systemctl enable --now soularr.timer'"
fi
systemctl enable -q --now slskd
msg_ok "Created Services"
motd_ssh

View File

@@ -61,7 +61,7 @@ msg_ok "Installed LibreOffice Components"
msg_info "Installing Python Dependencies"
mkdir -p /tmp/stirling-pdf
$STD uv venv /opt/.venv
$STD uv venv --clear /opt/.venv
export PATH="/opt/.venv/bin:$PATH"
source /opt/.venv/bin/activate
$STD uv pip install --upgrade pip

View File

@@ -22,7 +22,7 @@ fetch_and_deploy_gh_release "streamlink-webui" "CrazyWolf13/streamlink-webui" "t
msg_info "Setup ${APPLICATION}"
mkdir -p "/opt/${APPLICATION}-download"
$STD uv venv /opt/"${APPLICATION}"/backend/src/.venv
$STD uv venv --clear /opt/"${APPLICATION}"/backend/src/.venv
source /opt/"${APPLICATION}"/backend/src/.venv/bin/activate
$STD uv pip install -r /opt/streamlink-webui/backend/src/requirements.txt --python=/opt/"${APPLICATION}"/backend/src/.venv
cd /opt/"${APPLICATION}"/frontend/src

View File

@@ -40,7 +40,7 @@ SECRET_KEY=$(openssl rand -base64 45 | sed 's/\//\\\//g')
msg_info "Setup Tandoor"
mkdir -p /opt/tandoor/{config,api,mediafiles,staticfiles}
cd /opt/tandoor
$STD uv venv .venv --python=python3
$STD uv venv --clear .venv --python=python3
$STD uv pip install -r requirements.txt --python .venv/bin/python
cd /opt/tandoor/vue3
$STD yarn install

View File

@@ -25,7 +25,7 @@ cd /opt/Tautulli
TAUTULLI_VERSION=$(get_latest_github_release "Tautulli/Tautulli" "false")
echo "${TAUTULLI_VERSION}" >/opt/Tautulli/version.txt
echo "master" >/opt/Tautulli/branch.txt
$STD uv venv
$STD uv venv --clear
$STD source /opt/Tautulli/.venv/bin/activate
$STD uv pip install -r requirements.txt
$STD uv pip install pyopenssl

View File

@@ -30,7 +30,7 @@ msg_ok "Built Frontend"
msg_info "Setting up Backend"
cd /opt/trip/backend
$STD uv venv /opt/trip/.venv
$STD uv venv --clear /opt/trip/.venv
$STD uv pip install --python /opt/trip/.venv/bin/python -r trip/requirements.txt
msg_ok "Set up Backend"

View File

@@ -49,7 +49,7 @@ fetch_and_deploy_gh_release "warracker" "sassanix/Warracker" "tarball" "latest"
msg_info "Installing Warracker"
cd /opt/warracker/backend
$STD uv venv .venv
$STD uv venv --clear .venv
$STD source .venv/bin/activate
$STD uv pip install -r requirements.txt
mv /opt/warracker/env.example /opt/.env

View File

@@ -3351,19 +3351,21 @@ msg_menu() {
return 0
fi
# Display menu
echo ""
msg_custom "📋" "${BL}" "${title}"
echo ""
for i in "${!tags[@]}"; do
local marker=" "
[[ $i -eq 0 ]] && marker="* "
printf "${TAB3}${marker}%s) %s\n" "${tags[$i]}" "${descs[$i]}"
done
echo ""
# Display menu to /dev/tty so it doesn't get captured by command substitution
{
echo ""
msg_custom "📋" "${BL}" "${title}"
echo ""
for i in "${!tags[@]}"; do
local marker=" "
[[ $i -eq 0 ]] && marker="* "
printf "${TAB3}${marker}%s) %s\n" "${tags[$i]}" "${descs[$i]}"
done
echo ""
} >/dev/tty
local selection=""
read -r -t 10 -p "${TAB3}Select [default=${default_tag}, timeout 10s]: " selection || true
read -r -t 10 -p "${TAB3}Select [default=${default_tag}, timeout 10s]: " selection </dev/tty >/dev/tty || true
# Validate selection
if [[ -n "$selection" ]]; then

View File

@@ -56,7 +56,7 @@ install_glances_debian() {
cd /opt
mkdir -p glances
cd glances
uv venv
uv venv --clear
source .venv/bin/activate >/dev/null 2>&1
uv pip install --upgrade pip wheel setuptools >/dev/null 2>&1
uv pip install "glances[web]" >/dev/null 2>&1
@@ -126,7 +126,7 @@ install_glances_alpine() {
cd /opt
mkdir -p glances
cd glances
uv venv
uv venv --clear
source .venv/bin/activate
uv pip install --upgrade pip wheel setuptools >/dev/null 2>&1
uv pip install "glances[web]" >/dev/null 2>&1

View File

@@ -0,0 +1,188 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Andy Grunwald (andygrunwald)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/hansmi/prometheus-paperless-exporter
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
# Enable error handling
set -Eeuo pipefail
trap 'error_handler' ERR
load_functions
# ==============================================================================
# CONFIGURATION
# ==============================================================================
VERBOSE=${var_verbose:-no}
APP="prometheus-paperless-ngx-exporter"
APP_TYPE="tools"
BINARY_PATH="/usr/bin/prometheus-paperless-exporter"
CONFIG_PATH="/etc/prometheus-paperless-ngx-exporter/config.env"
SERVICE_PATH="/etc/systemd/system/prometheus-paperless-ngx-exporter.service"
AUTH_TOKEN_FILE="/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file"
# ==============================================================================
# OS DETECTION
# ==============================================================================
if ! grep -qE 'ID=debian|ID=ubuntu' /etc/os-release 2>/dev/null; then
echo -e "${CROSS} Unsupported OS detected. This script only supports Debian and Ubuntu."
exit 1
fi
# ==============================================================================
# UNINSTALL
# ==============================================================================
function uninstall() {
msg_info "Uninstalling Prometheus-Paperless-NGX-Exporter"
systemctl disable -q --now prometheus-paperless-ngx-exporter
if dpkg -l | grep -q prometheus-paperless-exporter; then
$STD apt-get remove -y prometheus-paperless-exporter || $STD dpkg -r prometheus-paperless-exporter
fi
rm -f "$SERVICE_PATH"
rm -rf /etc/prometheus-paperless-ngx-exporter
rm -f "/usr/local/bin/update_prometheus-paperless-ngx-exporter"
rm -f "$HOME/.prometheus-paperless-ngx-exporter"
msg_ok "Prometheus-Paperless-NGX-Exporter has been uninstalled"
}
# ==============================================================================
# UPDATE
# ==============================================================================
function update() {
if check_for_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter"; then
msg_info "Stopping service"
systemctl stop prometheus-paperless-ngx-exporter
msg_ok "Stopped service"
fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter" "binary" "latest"
msg_info "Starting service"
systemctl start prometheus-paperless-ngx-exporter
msg_ok "Started service"
msg_ok "Updated successfully!"
exit
fi
}
# ==============================================================================
# INSTALL
# ==============================================================================
function install() {
read -erp "Enter URL of Paperless-NGX, example: (http://127.0.0.1:8000): " PAPERLESS_URL
read -rsp "Enter Paperless-NGX authentication token: " PAPERLESS_AUTH_TOKEN
printf "\n"
fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter" "binary" "latest"
msg_info "Creating configuration"
mkdir -p /etc/prometheus-paperless-ngx-exporter
cat <<EOF >"$CONFIG_PATH"
# https://github.com/hansmi/prometheus-paperless-exporter
PAPERLESS_URL="${PAPERLESS_URL}"
EOF
echo "${PAPERLESS_AUTH_TOKEN}" >"$AUTH_TOKEN_FILE"
chmod 600 "$AUTH_TOKEN_FILE"
msg_ok "Created configuration"
msg_info "Creating service"
cat <<EOF >"$SERVICE_PATH"
[Unit]
Description=Prometheus Paperless NGX Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=root
EnvironmentFile=$CONFIG_PATH
ExecStart=$BINARY_PATH \\
--paperless_url=\${PAPERLESS_URL} \\
--paperless_auth_token_file=$AUTH_TOKEN_FILE
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now prometheus-paperless-ngx-exporter
msg_ok "Created and started service"
# Create update script
msg_info "Creating update script"
ensure_usr_local_bin_persist
cat <<'UPDATEEOF' >/usr/local/bin/update_prometheus-paperless-ngx-exporter
#!/usr/bin/env bash
# prometheus-paperless-ngx-exporter Update Script
type=update bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/prometheus-paperless-ngx-exporter.sh)"
UPDATEEOF
chmod +x /usr/local/bin/update_prometheus-paperless-ngx-exporter
msg_ok "Created update script (/usr/local/bin/update_prometheus-paperless-ngx-exporter)"
echo ""
msg_ok "Prometheus-Paperless-NGX-Exporter installed successfully"
msg_ok "Metrics: ${BL}http://${LOCAL_IP}:8081/metrics${CL}"
msg_ok "Config: ${BL}${CONFIG_PATH}${CL}"
}
# ==============================================================================
# MAIN
# ==============================================================================
header_info
ensure_usr_local_bin_persist
get_lxc_ip
# Handle type=update (called from update script)
if [[ "${type:-}" == "update" ]]; then
if [[ -f "$BINARY_PATH" ]]; then
update
else
msg_error "Prometheus-Paperless-NGX-Exporter is not installed. Nothing to update."
exit 1
fi
exit 0
fi
# Check if already installed
if [[ -f "$BINARY_PATH" ]]; then
msg_warn "Prometheus-Paperless-NGX-Exporter is already installed."
echo ""
echo -n "${TAB}Uninstall Prometheus-Paperless-NGX-Exporter? (y/N): "
read -r uninstall_prompt
if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then
uninstall
exit 0
fi
echo -n "${TAB}Update Prometheus-Paperless-NGX-Exporter? (y/N): "
read -r update_prompt
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
update
exit 0
fi
msg_warn "No action selected. Exiting."
exit 0
fi
# Fresh installation
msg_warn "Prometheus-Paperless-NGX-Exporter is not installed."
echo ""
echo -e "${TAB}${INFO} This will install:"
echo -e "${TAB} - Prometheus Paperless NGX Exporter (binary)"
echo -e "${TAB} - Systemd service"
echo ""
echo -n "${TAB}Install Prometheus-Paperless-NGX-Exporter? (y/N): "
read -r install_prompt
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
install
else
msg_warn "Installation cancelled. Exiting."
exit 0
fi

View File

@@ -0,0 +1,6 @@
__ __ __ __
____ _________ ____ ___ ___ / /_/ /_ ___ __ _______ ____ ____ _____ ___ _____/ /__ __________ ____ ____ __ __ ___ _ ______ ____ _____/ /____ _____
/ __ \/ ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ __ \/ __ `/ __ \/ _ \/ ___/ / _ \/ ___/ ___/_____/ __ \/ __ `/ |/_/_____/ _ \| |/_/ __ \/ __ \/ ___/ __/ _ \/ ___/
/ /_/ / / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )_____/ /_/ / /_/ / /_/ / __/ / / / __(__ |__ )_____/ / / / /_/ /> </_____/ __/> </ /_/ / /_/ / / / /_/ __/ /
/ .___/_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ / .___/\__,_/ .___/\___/_/ /_/\___/____/____/ /_/ /_/\__, /_/|_| \___/_/|_/ .___/\____/_/ \__/\___/_/
/_/ /_/ /_/ /____/ /_/

View File

@@ -131,7 +131,7 @@ function detect_service() {
function backup_container() {
msg_info "Creating backup for container $1"
vzdump $1 --compress zstd --storage $STORAGE_CHOICE -notes-template "community-scripts backup updater" >/dev/null 2>&1
vzdump $1 --compress zstd --storage $STORAGE_CHOICE -notes-template "{{guestname}} - community-scripts backup updater" >/dev/null 2>&1
status=$?
if [ $status -eq 0 ]; then
@@ -151,11 +151,11 @@ function get_backup_storages() {
split($0, a, ":")
type = a[1]
name = a[2]
sub(/^ +/, "", name)
gsub(/^[ \t]+|[ \t]+$/, "", name)
has_content = 0
has_backup = 0
}
/^ +content/ {
/^[ \t]*content/ {
has_content = 1
if ($0 ~ /backup/) has_backup = 1
}