Compare commits

..

23 Commits

Author SHA1 Message Date
2a0b061c34 Merge branch 'refactor-cosmos-debian13' of https://github.com/community-scripts/ProxmoxVE into refactor-cosmos-debian13 2025-12-19 13:45:40 +01:00
908daaefee [Refactor] Cosmos: Upgrade to Debian 13 and modernize with tools.func
Major refactoring to fix mergerfs dependency issues and modernize the installation:

Changes in ct/cosmos.sh:
- Updated from Debian 12 to Debian 13 (Trixie)
- Fixed APP name capitalization: cosmos  Cosmos
- Improved tags formatting: os,docker  cloud;docker

Changes in install/cosmos-install.sh:
- Install mergerfs via apt (available in Debian 13 repos)
  * Automatically handles fuse dependencies
  * Removes need for manual .deb installation
  * No more hardcoded Bullseye package
- Added ca-certificates and openssl (per official Dockerfile)
- Replaced manual Docker installation with setup_docker helper
- Replaced manual GitHub release download with fetch_and_deploy_gh_release
  * Uses prebuild mode with cosmos-cloud-*-amd64.zip pattern
  * Automatic version detection and extraction
  * Proper error handling and retry logic
- Standardized apt-get  apt usage
- Added unzip to dependencies (required by fetch_and_deploy_gh_release)

Benefits:
- Fixes mergerfs dependency errors (issue #TMD44)
- More maintainable (uses helper functions instead of manual curl/unzip)
- Better error handling and version tracking
- Automatic architecture detection via apt
- Matches official Cosmos Dockerfile dependency list
- Future-proof for Debian version changes

Fixes dependency issues where mergerfs failed to install due to missing fuse
package. In Debian 13, mergerfs is available via apt and properly declares its
dependencies, so apt handles everything automatically.
2025-12-19 13:45:26 +01:00
38a2fec5d3 [Refactor] Cosmos: Upgrade to Debian 13 and modernize with tools.func
Major refactoring to fix mergerfs dependency issues and modernize the installation:

Changes in ct/cosmos.sh:
- Updated from Debian 12 to Debian 13 (Trixie)
- Fixed APP name capitalization: cosmos  Cosmos
- Improved tags formatting: os,docker  cloud;docker

Changes in install/cosmos-install.sh:
- Install mergerfs via apt (available in Debian 13 repos)
  * Automatically handles fuse dependencies
  * Removes need for manual .deb installation
  * No more hardcoded Bullseye package
- Added ca-certificates and openssl (per official Dockerfile)
- Replaced manual Docker installation with setup_docker helper
- Replaced manual GitHub release download with fetch_and_deploy_gh_release
  * Uses prebuild mode with cosmos-cloud-*-amd64.zip pattern
  * Automatic version detection and extraction
  * Proper error handling and retry logic
- Standardized apt-get  apt usage
- Added unzip to dependencies (required by fetch_and_deploy_gh_release)

Benefits:
- Fixes mergerfs dependency errors (issue #TMD44)
- More maintainable (uses helper functions instead of manual curl/unzip)
- Better error handling and version tracking
- Automatic architecture detection via apt
- Matches official Cosmos Dockerfile dependency list
- Future-proof for Debian version changes

Fixes dependency issues where mergerfs failed to install due to missing fuse
package. In Debian 13, mergerfs is available via apt and properly declares its
dependencies, so apt handles everything automatically.
2025-12-19 13:43:16 +01:00
00137d4441 Update .app files (#10140)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-12-19 13:25:23 +01:00
159b5ee22e Update CHANGELOG.md (#10139)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-19 12:22:30 +00:00
5beb983b7f Refactor (#10070) 2025-12-19 13:22:07 +01:00
13c29e5c51 Update versions.json (#10137)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-19 13:07:20 +01:00
69d17046aa Update CHANGELOG.md (#10135)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-19 08:03:54 +00:00
04f4727de3 Update paymenter.json(#10133) (#10134) 2025-12-19 09:03:30 +01:00
c1445f30bf Update CHANGELOG.md (#10132)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-19 00:14:31 +00:00
891caa7c94 Update versions.json (#10131)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-19 01:14:06 +01:00
17ff4078bb Update CHANGELOG.md (#10127)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-18 21:36:02 +00:00
9022ab0e5f Update CHANGELOG.md (#10126)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-18 21:35:44 +00:00
e646522095 Update date in json (#10125)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-12-18 21:35:39 +00:00
1a567facfa qbittorrent-exporter (#10090)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-12-18 22:35:22 +01:00
2c2a062b6a Update CHANGELOG.md (#10123)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-18 20:32:14 +00:00
8b767ec68a bump pihole to debian 13 (#10118)
* Update debian to version 13

* Update debian version from 12 to 13
2025-12-18 21:31:53 +01:00
f334fda317 Update CHANGELOG.md (#10122)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-18 18:41:53 +00:00
510278960b feat: excecute command in LXC: Script exited, when command isn't available in LXC. Added check if command exists in container, otherwise script will skip the container. (#10089) 2025-12-18 19:41:31 +01:00
0a276749d7 Update CHANGELOG.md (#10120)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-18 17:38:34 +00:00
c1ef6d7c51 Improve error handling and cleanup in shell functions (#10116)
Refactored various shell functions to add more robust error handling by redirecting stderr to /dev/null and using '|| true' to prevent script failures. Enhanced npm cache cleanup to remove both _cacache and _logs directories, and improved reliability of version and keyring extraction commands. These changes increase script resilience and prevent unnecessary errors from halting execution.
2025-12-18 18:38:08 +01:00
e0e7aa94e8 Update CHANGELOG.md (#10119)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-18 16:54:06 +00:00
b829dcc849 Immich: v2.4.0 (#10095)
* [ENHANCEMENT] Immich: Support for newer Intel GPUs

- Add support for newer Intel GPUs: Battlemage, Arrow Lake and Panther
Lake by adding v2.22.2 Intel IGC packages
- Fix: ensure libigdgmm12 is installed before other packages during
update
- Fix: Download and install Intel packages in `/tmp` to allow apt to
drop root privileges during installation

* Bump Immich to v2.4.0
2025-12-18 17:53:41 +01:00
16 changed files with 555 additions and 228 deletions

View File

@ -10,15 +10,46 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-12-19
### 🚀 Updated Scripts
- #### 🔧 Refactor
- Refactor: Proxmox-Mail-Gateway [@tremor021](https://github.com/tremor021) ([#10070](https://github.com/community-scripts/ProxmoxVE/pull/10070))
### ❔ Uncategorized
- Update paymenter.json(#10133) [@DragoQC](https://github.com/DragoQC) ([#10134](https://github.com/community-scripts/ProxmoxVE/pull/10134))
## 2025-12-18 ## 2025-12-18
### 🚀 Updated Scripts ### 🚀 Updated Scripts
- #### 🐞 Bug Fixes - #### 🐞 Bug Fixes
- [HOTFIX] Fix Scanopy release check [@vhsdream](https://github.com/vhsdream) ([#10097](https://github.com/community-scripts/ProxmoxVE/pull/10097))
- Fix cleanup issues in npm cache and rustup toolchain [@MickLesk](https://github.com/MickLesk) ([#10107](https://github.com/community-scripts/ProxmoxVE/pull/10107)) - Fix cleanup issues in npm cache and rustup toolchain [@MickLesk](https://github.com/MickLesk) ([#10107](https://github.com/community-scripts/ProxmoxVE/pull/10107))
- Fix Zabbix 7.0 repository URL structure [@MickLesk](https://github.com/MickLesk) ([#10106](https://github.com/community-scripts/ProxmoxVE/pull/10106)) - Fix Zabbix 7.0 repository URL structure [@MickLesk](https://github.com/MickLesk) ([#10106](https://github.com/community-scripts/ProxmoxVE/pull/10106))
- [HOTFIX] Fix Scanopy release check [@vhsdream](https://github.com/vhsdream) ([#10097](https://github.com/community-scripts/ProxmoxVE/pull/10097))
- #### ✨ New Features
- bump pihole to debian 13 [@mschabhuettl](https://github.com/mschabhuettl) ([#10118](https://github.com/community-scripts/ProxmoxVE/pull/10118))
- Immich: v2.4.0 [@vhsdream](https://github.com/vhsdream) ([#10095](https://github.com/community-scripts/ProxmoxVE/pull/10095))
### 💾 Core
- #### 🔧 Refactor
- tools.func: hardening/Improve error handling and cleanup in shell functions [@MickLesk](https://github.com/MickLesk) ([#10116](https://github.com/community-scripts/ProxmoxVE/pull/10116))
### 🧰 Tools
- qbittorrent-exporter ([#10090](https://github.com/community-scripts/ProxmoxVE/pull/10090))
- #### 🐞 Bug Fixes
- Improved error handling when a command does not exist [@wolle604](https://github.com/wolle604) ([#10089](https://github.com/community-scripts/ProxmoxVE/pull/10089))
## 2025-12-17 ## 2025-12-17

View File

@ -5,14 +5,15 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://https://cosmos-cloud.io/ # Source: https://https://cosmos-cloud.io/
APP="cosmos" APP="Cosmos"
var_tags="${var_tags:-os,docker}" var_tags="${var_tags:-cloud;docker}"
var_cpu="${var_cpu:-2}" var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}" var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}" var_disk="${var_disk:-8}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
var_fuse="${var_fuse:-yes}"
header_info "$APP" header_info "$APP"
variables variables

View File

@ -74,23 +74,28 @@ EOF
STAGING_DIR=/opt/staging STAGING_DIR=/opt/staging
BASE_DIR=${STAGING_DIR}/base-images BASE_DIR=${STAGING_DIR}/base-images
SOURCE_DIR=${STAGING_DIR}/image-source SOURCE_DIR=${STAGING_DIR}/image-source
cd /root cd /tmp
if [[ -f ~/.intel_version ]]; then if [[ -f ~/.intel_version ]]; then
curl -fsSLO https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/machine-learning/Dockerfile curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/Dockerfile
readarray -t INTEL_URLS < <(sed -n "/intel/p" ./Dockerfile | awk '{print $3}') readarray -t INTEL_URLS < <(
INTEL_RELEASE="$(grep "intel-opencl-icd" ./Dockerfile | awk -F '_' '{print $2}')" sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $2}'
sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}'
)
INTEL_RELEASE="$(grep "intel-opencl-icd_" ./Dockerfile | awk -F '_' '{print $2}')"
if [[ "$INTEL_RELEASE" != "$(cat ~/.intel_version)" ]]; then if [[ "$INTEL_RELEASE" != "$(cat ~/.intel_version)" ]]; then
msg_info "Updating Intel iGPU dependencies" msg_info "Updating Intel iGPU dependencies"
for url in "${INTEL_URLS[@]}"; do for url in "${INTEL_URLS[@]}"; do
curl -fsSLO "$url" curl -fsSLO "$url"
done done
$STD apt-mark unhold libigdgmm12 $STD apt-mark unhold libigdgmm12
$STD apt install -y ./libigdgmm12*.deb
rm ./libigdgmm12*.deb
$STD apt install -y ./*.deb $STD apt install -y ./*.deb
rm ./*.deb rm ./*.deb
$STD apt-mark hold libigdgmm12 $STD apt-mark hold libigdgmm12
msg_ok "Intel iGPU dependencies updated" msg_ok "Intel iGPU dependencies updated"
fi fi
rm ~/Dockerfile rm ./Dockerfile
fi fi
if [[ -f ~/.immich_library_revisions ]]; then if [[ -f ~/.immich_library_revisions ]]; then
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips") libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
@ -103,7 +108,7 @@ EOF
msg_ok "Image-processing libraries up to date" msg_ok "Image-processing libraries up to date"
fi fi
RELEASE="2.3.1" RELEASE="2.4.0"
if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
msg_info "Stopping Services" msg_info "Stopping Services"
systemctl stop immich-web systemctl stop immich-web

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}" var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}" var_disk="${var_disk:-2}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"

View File

@ -27,10 +27,11 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating ${APP}"
msg_info "Updating Proxmox-Mail-Gateway"
$STD apt update $STD apt update
$STD apt -y upgrade $STD apt upgrade -y
msg_ok "Updated ${APP}" msg_ok "Updated Proxmox-Mail-Gateway"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
exit exit
} }

View File

@ -24,7 +24,7 @@
"ram": 2048, "ram": 2048,
"hdd": 8, "hdd": 8,
"os": "debian", "os": "debian",
"version": "12" "version": "13"
} }
} }
], ],
@ -36,6 +36,10 @@
{ {
"type": "info", "type": "info",
"text": "The file `/etc/sysconfig/CosmosCloud` is optional. If you need custom settings, you can create it yourself." "text": "The file `/etc/sysconfig/CosmosCloud` is optional. If you need custom settings, you can create it yourself."
},
{
"type": "warning",
"text": "Requires FUSE support for mergerfs functionality. FUSE is enabled by default during installation."
} }
] ]
} }

View File

@ -11,7 +11,7 @@
"interface_port": 80, "interface_port": 80,
"documentation": "https://paymenter.org/docs", "documentation": "https://paymenter.org/docs",
"website": "https://paymenter.org/", "website": "https://paymenter.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/paymeter.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/paymenter.webp",
"config_path": "/opt/paymenter/.env", "config_path": "/opt/paymenter/.env",
"description": "Paymenter is an open source webshop solution for hosting companies. It's developed to provide an more easy way to manage your hosting company.", "description": "Paymenter is an open source webshop solution for hosting companies. It's developed to provide an more easy way to manage your hosting company.",
"install_methods": [ "install_methods": [

View File

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

View File

@ -0,0 +1,46 @@
{
"name": "qbittorrent Exporter",
"slug": "qbittorrent-exporter",
"categories": [
9
],
"date_created": "2025-12-18",
"type": "addon",
"updateable": true,
"privileged": false,
"interface_port": 8090,
"documentation": "https://github.com/martabal/qbittorrent-exporter",
"website": "https://github.com/martabal/qbittorrent-exporter",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/qbittorrent.webp",
"config_path": "/opt/qbittorrent-exporter.env",
"description": "A fast and lightweight prometheus exporter for qBittorrent ",
"install_methods": [
{
"type": "default",
"script": "tools/addon/qbittorrent-exporter.sh",
"resources": {
"cpu": null,
"ram": null,
"hdd": null,
"os": null,
"version": null
}
},
{
"type": "alpine",
"script": "tools/addon/qbittorrent-exporter.sh",
"resources": {
"cpu": null,
"ram": null,
"hdd": null,
"os": null,
"version": null
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -1,29 +1,184 @@
[ [
{
"name": "forgejo/forgejo",
"version": "v15.0.0-dev",
"date": "2025-12-19T11:43:47Z"
},
{
"name": "fccview/jotty",
"version": "1.14.2",
"date": "2025-12-19T11:25:29Z"
},
{
"name": "readeck/readeck",
"version": "0.21.5",
"date": "2025-12-19T11:22:20Z"
},
{
"name": "release-argus/Argus",
"version": "0.28.3",
"date": "2025-12-19T11:05:10Z"
},
{
"name": "wazuh/wazuh",
"version": "coverity-w51-4.14.2",
"date": "2025-12-15T12:34:36Z"
},
{
"name": "TuroYT/snowshare",
"version": "v1.2.5",
"date": "2025-12-19T10:47:19Z"
},
{
"name": "mattermost/mattermost",
"version": "v11.1.2",
"date": "2025-12-17T09:26:24Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3",
"date": "2025-09-20T12:12:33Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.487",
"date": "2025-12-19T05:55:55Z"
},
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.102",
"date": "2025-12-19T03:45:13Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.80.10.rc.5",
"date": "2025-12-19T03:38:23Z"
},
{
"name": "javedh-dev/tracktor",
"version": "1.0.1",
"date": "2025-12-17T23:14:39Z"
},
{
"name": "mealie-recipes/mealie",
"version": "v3.8.0",
"date": "2025-12-19T01:37:16Z"
},
{
"name": "jeedom/core",
"version": "4.5.1",
"date": "2025-12-19T00:27:05Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.1.0",
"date": "2025-11-23T12:13:34Z"
},
{
"name": "moghtech/komodo",
"version": "v1.19.5",
"date": "2025-09-27T20:59:46Z"
},
{
"name": "metabase/metabase",
"version": "v0.57.x",
"date": "2025-12-18T22:02:32Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v1.0.7",
"date": "2025-12-18T21:27:26Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v2.1.5",
"date": "2025-12-18T20:48:01Z"
},
{
"name": "scanopy/scanopy",
"version": "v0.12.4",
"date": "2025-12-18T19:25:47Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.36.2",
"date": "2025-12-03T22:46:29Z"
},
{
"name": "saltstack/salt",
"version": "v3007.10",
"date": "2025-12-18T18:14:16Z"
},
{
"name": "go-gitea/gitea",
"version": "v1.25.3",
"date": "2025-12-18T18:11:48Z"
},
{
"name": "karlomikus/bar-assistant",
"version": "v5.11.0",
"date": "2025-12-18T18:06:05Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.30.23",
"date": "2025-12-18T16:55:01Z"
},
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.37",
"date": "2025-12-18T16:43:23Z"
},
{
"name": "ollama/ollama",
"version": "v0.13.5",
"date": "2025-12-18T16:39:08Z"
},
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2025-12-18T16:38:45Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.7",
"date": "2025-12-01T08:14:11Z"
},
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.20.3",
"date": "2025-12-18T16:10:13Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.123.7",
"date": "2025-12-17T14:01:25Z"
},
{
"name": "immich-app/immich",
"version": "v2.4.0",
"date": "2025-12-18T14:51:33Z"
},
{
"name": "docker/compose",
"version": "v5.0.1",
"date": "2025-12-18T14:22:38Z"
},
{
"name": "coollabsio/coolify",
"version": "v4.0.0-beta.458",
"date": "2025-12-18T12:23:23Z"
},
{ {
"name": "juanfont/headscale", "name": "juanfont/headscale",
"version": "v0.27.1", "version": "v0.27.1",
"date": "2025-11-11T19:32:29Z" "date": "2025-11-11T19:32:29Z"
}, },
{
"name": "docker/compose",
"version": "v5.0.1",
"date": "2025-12-18T10:35:33Z"
},
{ {
"name": "tailscale/tailscale", "name": "tailscale/tailscale",
"version": "v1.92.4", "version": "v1.92.4",
"date": "2025-12-18T10:32:44Z" "date": "2025-12-18T10:32:44Z"
}, },
{
"name": "TuroYT/snowshare",
"version": "v1.2.3",
"date": "2025-12-18T10:06:45Z"
},
{
"name": "coollabsio/coolify",
"version": "v4.0.0-beta.456",
"date": "2025-12-18T08:59:27Z"
},
{ {
"name": "Kozea/Radicale", "name": "Kozea/Radicale",
"version": "v3.5.10", "version": "v3.5.10",
@ -34,11 +189,6 @@
"version": "7.4.6", "version": "7.4.6",
"date": "2025-12-18T07:00:26Z" "date": "2025-12-18T07:00:26Z"
}, },
{
"name": "Jackett/Jackett",
"version": "v0.24.478",
"date": "2025-12-18T05:55:21Z"
},
{ {
"name": "chrisvel/tududi", "name": "chrisvel/tududi",
"version": "v0.88.1", "version": "v0.88.1",
@ -49,51 +199,16 @@
"version": "v0.5.1", "version": "v0.5.1",
"date": "2025-12-18T03:08:43Z" "date": "2025-12-18T03:08:43Z"
}, },
{
"name": "scanopy/scanopy",
"version": "v0.12.3",
"date": "2025-12-18T02:48:06Z"
},
{ {
"name": "openobserve/openobserve", "name": "openobserve/openobserve",
"version": "v0.30.1", "version": "v0.30.1",
"date": "2025-12-18T02:41:34Z" "date": "2025-12-18T02:41:34Z"
}, },
{
"name": "chrisbenincasa/tunarr",
"version": "v1.0.6",
"date": "2025-12-18T01:28:04Z"
},
{
"name": "jeedom/core",
"version": "4.5.1",
"date": "2025-12-18T00:27:07Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.1.0",
"date": "2025-11-23T12:13:34Z"
},
{ {
"name": "goauthentik/authentik", "name": "goauthentik/authentik",
"version": "version/2025.10.3", "version": "version/2025.10.3",
"date": "2025-12-16T18:00:53Z" "date": "2025-12-16T18:00:53Z"
}, },
{
"name": "javedh-dev/tracktor",
"version": "1.0.1",
"date": "2025-12-17T11:31:03Z"
},
{
"name": "ollama/ollama",
"version": "v0.13.5-rc0",
"date": "2025-12-17T21:13:55Z"
},
{
"name": "fccview/jotty",
"version": "1.14.0",
"date": "2025-12-17T20:26:22Z"
},
{ {
"name": "emqx/emqx", "name": "emqx/emqx",
"version": "6.1.0-alpha.2", "version": "6.1.0-alpha.2",
@ -119,26 +234,6 @@
"version": "5.26.19", "version": "5.26.19",
"date": "2025-12-17T18:17:55Z" "date": "2025-12-17T18:17:55Z"
}, },
{
"name": "metabase/metabase",
"version": "v0.57.7",
"date": "2025-12-17T18:16:59Z"
},
{
"name": "immich-app/immich",
"version": "v2.4.0",
"date": "2025-12-17T17:44:24Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.80.10.rc.4",
"date": "2025-12-17T17:43:28Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.7",
"date": "2025-12-01T08:14:11Z"
},
{ {
"name": "semaphoreui/semaphore", "name": "semaphoreui/semaphore",
"version": "v2.16.47", "version": "v2.16.47",
@ -149,11 +244,6 @@
"version": "v4.7.1", "version": "v4.7.1",
"date": "2025-12-17T15:18:55Z" "date": "2025-12-17T15:18:55Z"
}, },
{
"name": "n8n-io/n8n",
"version": "n8n@1.123.7",
"date": "2025-12-17T14:01:25Z"
},
{ {
"name": "bunkerity/bunkerweb", "name": "bunkerity/bunkerweb",
"version": "testing", "version": "testing",
@ -164,11 +254,6 @@
"version": "v2.11.33", "version": "v2.11.33",
"date": "2025-12-17T10:10:19Z" "date": "2025-12-17T10:10:19Z"
}, },
{
"name": "mattermost/mattermost",
"version": "v11.1.2",
"date": "2025-12-17T09:26:24Z"
},
{ {
"name": "zitadel/zitadel", "name": "zitadel/zitadel",
"version": "v4.7.6", "version": "v4.7.6",
@ -179,11 +264,6 @@
"version": "v0.105.1", "version": "v0.105.1",
"date": "2025-12-17T08:48:52Z" "date": "2025-12-17T08:48:52Z"
}, },
{
"name": "meilisearch/meilisearch",
"version": "prototype-v1.30.1-rebuild-hannoy-graph.0",
"date": "2025-12-17T08:38:38Z"
},
{ {
"name": "passbolt/passbolt_api", "name": "passbolt/passbolt_api",
"version": "v5.8.0-test.3", "version": "v5.8.0-test.3",
@ -259,36 +339,16 @@
"version": "jenkins-2.542", "version": "jenkins-2.542",
"date": "2025-12-16T13:49:44Z" "date": "2025-12-16T13:49:44Z"
}, },
{
"name": "release-argus/Argus",
"version": "0.28.2",
"date": "2025-12-16T12:36:26Z"
},
{ {
"name": "prometheus/prometheus", "name": "prometheus/prometheus",
"version": "v3.8.1", "version": "v3.8.1",
"date": "2025-12-16T09:59:22Z" "date": "2025-12-16T09:59:22Z"
}, },
{
"name": "rcourtman/Pulse",
"version": "v4.36.2",
"date": "2025-12-03T22:46:29Z"
},
{ {
"name": "sabnzbd/sabnzbd", "name": "sabnzbd/sabnzbd",
"version": "4.5.5", "version": "4.5.5",
"date": "2025-10-24T11:12:22Z" "date": "2025-10-24T11:12:22Z"
}, },
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3",
"date": "2025-09-20T12:12:33Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v2.1.4",
"date": "2025-12-16T00:02:18Z"
},
{ {
"name": "azukaar/Cosmos-Server", "name": "azukaar/Cosmos-Server",
"version": "v0.19.0", "version": "v0.19.0",
@ -334,11 +394,6 @@
"version": "v0.16.3", "version": "v0.16.3",
"date": "2025-12-15T12:56:50Z" "date": "2025-12-15T12:56:50Z"
}, },
{
"name": "wazuh/wazuh",
"version": "coverity-w51-4.14.2",
"date": "2025-12-15T12:34:36Z"
},
{ {
"name": "LimeSurvey/LimeSurvey", "name": "LimeSurvey/LimeSurvey",
"version": "6.16.2+251209", "version": "6.16.2+251209",
@ -434,11 +489,6 @@
"version": "v4.4.0", "version": "v4.4.0",
"date": "2025-12-13T22:49:07Z" "date": "2025-12-13T22:49:07Z"
}, },
{
"name": "karlomikus/bar-assistant",
"version": "v5.10.0",
"date": "2025-12-13T20:17:27Z"
},
{ {
"name": "fosrl/pangolin", "name": "fosrl/pangolin",
"version": "1.13.1", "version": "1.13.1",
@ -479,16 +529,6 @@
"version": "v0.26.2", "version": "v0.26.2",
"date": "2025-12-13T07:48:09Z" "date": "2025-12-13T07:48:09Z"
}, },
{
"name": "mealie-recipes/mealie",
"version": "v3.7.0",
"date": "2025-12-13T01:20:58Z"
},
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.20.2",
"date": "2025-12-12T23:47:48Z"
},
{ {
"name": "mongodb/mongo", "name": "mongodb/mongo",
"version": "r7.0.27", "version": "r7.0.27",
@ -549,11 +589,6 @@
"version": "0.43.1", "version": "0.43.1",
"date": "2025-12-11T22:45:52Z" "date": "2025-12-11T22:45:52Z"
}, },
{
"name": "msgbyte/tianji",
"version": "v1.30.22",
"date": "2025-12-11T18:02:06Z"
},
{ {
"name": "pommee/goaway", "name": "pommee/goaway",
"version": "v0.62.24", "version": "v0.62.24",
@ -564,11 +599,6 @@
"version": "v2.13.2", "version": "v2.13.2",
"date": "2025-12-11T06:31:24Z" "date": "2025-12-11T06:31:24Z"
}, },
{
"name": "moghtech/komodo",
"version": "v1.19.5",
"date": "2025-09-27T20:59:46Z"
},
{ {
"name": "TwiN/gatus", "name": "TwiN/gatus",
"version": "v5.33.1", "version": "v5.33.1",
@ -629,11 +659,6 @@
"version": "v1.144.0", "version": "v1.144.0",
"date": "2025-12-09T16:29:00Z" "date": "2025-12-09T16:29:00Z"
}, },
{
"name": "readeck/readeck",
"version": "0.21.4",
"date": "2025-12-09T15:25:28Z"
},
{ {
"name": "gelbphoenix/autocaliweb", "name": "gelbphoenix/autocaliweb",
"version": "v0.11.3", "version": "v0.11.3",
@ -729,11 +754,6 @@
"version": "v0.28.0", "version": "v0.28.0",
"date": "2025-12-06T13:32:18Z" "date": "2025-12-06T13:32:18Z"
}, },
{
"name": "YunoHost/yunohost",
"version": "debian/13.0.2",
"date": "2025-12-06T10:46:12Z"
},
{ {
"name": "toniebox-reverse-engineering/teddycloud", "name": "toniebox-reverse-engineering/teddycloud",
"version": "tc_v0.6.5", "version": "tc_v0.6.5",
@ -944,11 +964,6 @@
"version": "v1.7.8", "version": "v1.7.8",
"date": "2025-11-26T22:35:03Z" "date": "2025-11-26T22:35:03Z"
}, },
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.101",
"date": "2025-11-26T17:14:35Z"
},
{ {
"name": "NLnetLabs/unbound", "name": "NLnetLabs/unbound",
"version": "release-1.24.2", "version": "release-1.24.2",
@ -989,11 +1004,6 @@
"version": "v2.5.0", "version": "v2.5.0",
"date": "2025-11-23T12:49:50Z" "date": "2025-11-23T12:49:50Z"
}, },
{
"name": "go-gitea/gitea",
"version": "v1.25.2",
"date": "2025-11-22T19:37:02Z"
},
{ {
"name": "TechnitiumSoftware/DnsServer", "name": "TechnitiumSoftware/DnsServer",
"version": "v14.2.0", "version": "v14.2.0",
@ -1004,11 +1014,6 @@
"version": "v5.6.1", "version": "v5.6.1",
"date": "2025-11-21T16:51:21Z" "date": "2025-11-21T16:51:21Z"
}, },
{
"name": "forgejo/forgejo",
"version": "v13.0.3",
"date": "2025-11-21T12:43:04Z"
},
{ {
"name": "seriousm4x/UpSnap", "name": "seriousm4x/UpSnap",
"version": "5.2.4", "version": "5.2.4",
@ -1029,11 +1034,6 @@
"version": "v2.1.11", "version": "v2.1.11",
"date": "2025-11-20T20:14:44Z" "date": "2025-11-20T20:14:44Z"
}, },
{
"name": "saltstack/salt",
"version": "v3007.9",
"date": "2025-11-20T17:58:32Z"
},
{ {
"name": "kimai/kimai", "name": "kimai/kimai",
"version": "2.44.0", "version": "2.44.0",

View File

@ -14,38 +14,23 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y \ $STD apt install -y \
ca-certificates \
openssl \
snapraid \ snapraid \
avahi-daemon \ avahi-daemon \
fdisk fdisk \
mergerfs \
unzip
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Install mergerfs" setup_docker
MERGERFS_VERSION="2.40.2" fetch_and_deploy_gh_release "cosmos" "azukaar/Cosmos-Server" "prebuild" "latest" "/opt/cosmos" "cosmos-cloud-*-amd64.zip"
curl -fsSL "https://github.com/trapexit/mergerfs/releases/download/${MERGERFS_VERSION}/mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb" -o "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb"
$STD dpkg -i "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb" || $STD apt-get install -f -y
rm "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb"
msg_ok "Installed mergerfs"
msg_info "Install Docker" msg_info "Setting up Cosmos"
curl -fsSL https://get.docker.com -o get-docker.sh
$STD sh get-docker.sh
rm get-docker.sh
msg_ok "Installed Docker"
msg_info "Install Cosmos"
mkdir -p /opt/cosmos
LATEST_RELEASE=$(curl -fsSL https://api.github.com/repos/azukaar/Cosmos-Server/releases/latest | grep "tag_name" | cut -d '"' -f 4)
ZIP_FILE="cosmos-cloud-${LATEST_RELEASE#v}-amd64.zip"
curl -fsSL "https://github.com/azukaar/Cosmos-Server/releases/download/${LATEST_RELEASE}/${ZIP_FILE}" -o "/opt/cosmos/${ZIP_FILE}"
cd /opt/cosmos cd /opt/cosmos
$STD unzip -o -q "${ZIP_FILE}"
LATEST_RELEASE_NO_V=${LATEST_RELEASE#v}
mv /opt/cosmos/cosmos-cloud-${LATEST_RELEASE_NO_V}/* /opt/cosmos/
rmdir /opt/cosmos/cosmos-cloud-${LATEST_RELEASE_NO_V}
chmod +x /opt/cosmos/cosmos chmod +x /opt/cosmos/cosmos
rm -f "/opt/cosmos/cosmos-cloud-${LATEST_RELEASE#v}-amd64.zip" msg_ok "Set up Cosmos"
msg_ok "Installed Cosmos"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/cosmos.service cat <<EOF >/etc/systemd/system/cosmos.service

View File

@ -99,10 +99,15 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
$STD apt install -y --no-install-recommends patchelf $STD apt install -y --no-install-recommends patchelf
tmp_dir=$(mktemp -d) tmp_dir=$(mktemp -d)
$STD pushd "$tmp_dir" $STD pushd "$tmp_dir"
curl -fsSLO https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17384.11/intel-igc-core_1.0.17384.11_amd64.deb curl -fsSLZ -O "https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17537.24/intel-igc-core_1.0.17537.24_amd64.deb" \
curl -fsSLO https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17384.11/intel-igc-opencl_1.0.17384.11_amd64.deb -O "https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17537.24/intel-igc-opencl_1.0.17537.24_amd64.deb" \
curl -fsSLO https://github.com/intel/compute-runtime/releases/download/24.31.30508.7/intel-opencl-icd_24.31.30508.7_amd64.deb -O "https://github.com/intel/compute-runtime/releases/download/24.35.30872.36/intel-opencl-icd-legacy1_24.35.30872.36_amd64.deb" \
curl -fsSLO https://github.com/intel/compute-runtime/releases/download/24.31.30508.7/libigdgmm12_22.4.1_amd64.deb -O "https://github.com/intel/intel-graphics-compiler/releases/download/v2.22.2/intel-igc-core-2_2.22.2+20121_amd64.deb" \
-O "https://github.com/intel/intel-graphics-compiler/releases/download/v2.22.2/intel-igc-opencl-2_2.22.2+20121_amd64.deb" \
-O "https://github.com/intel/compute-runtime/releases/download/25.44.36015.5/intel-opencl-icd_25.44.36015.5-0_amd64.deb" \
-O "https://github.com/intel/compute-runtime/releases/download/25.44.36015.5/libigdgmm12_22.8.2_amd64.deb"
$STD apt install -y ./libigdgmm12*.deb
rm ./libigdgmm12*.deb
$STD apt install -y ./*.deb $STD apt install -y ./*.deb
$STD apt-mark hold libigdgmm12 $STD apt-mark hold libigdgmm12
$STD popd $STD popd
@ -291,7 +296,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
mkdir -p "$INSTALL_DIR" mkdir -p "$INSTALL_DIR"
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache} mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.3.1" "$SRC_DIR" fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.4.0" "$SRC_DIR"
msg_info "Installing ${APPLICATION} (patience)" msg_info "Installing ${APPLICATION} (patience)"

View File

@ -14,16 +14,13 @@ network_check
update_os update_os
msg_info "Installing Proxmox Mail Gateway" msg_info "Installing Proxmox Mail Gateway"
curl -fsSL "https://enterprise.proxmox.com/debian/proxmox-release-trixie.gpg" -o "/usr/share/keyrings/proxmox-release-trixie.gpg" setup_deb822_repo \
cat <<EOF >/etc/apt/sources.list.d/pmg.sources "pmg" \
Types: deb "https://enterprise.proxmox.com/debian/proxmox-release-trixie.gpg" \
URIs: http://download.proxmox.com/debian/pmg "http://download.proxmox.com/debian/pmg" \
Suites: trixie "trixie" \
Components: pmg-no-subscription "pmg-no-subscription"
Signed-By: /usr/share/keyrings/proxmox-release-trixie.gpg $STD apt install -y proxmox-mailgateway-container
EOF
$STD apt update
$STD apt -y install proxmox-mailgateway-container
msg_ok "Installed Proxmox Mail Gateway" msg_ok "Installed Proxmox Mail Gateway"
motd_ssh motd_ssh

View File

@ -0,0 +1,241 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/martabal/qbittorrent-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="qbittorrent-exporter"
APP_TYPE="tools"
INSTALL_PATH="/opt/qbittorrent-exporter"
CONFIG_PATH="/opt/qbittorrent-exporter.env"
header_info
ensure_usr_local_bin_persist
# ==============================================================================
# OS DETECTION
# ==============================================================================
if [[ -f "/etc/alpine-release" ]]; then
OS="Alpine"
SERVICE_PATH="/etc/init.d/qbittorrent-exporter"
elif grep -qE 'ID=debian|ID=ubuntu' /etc/os-release; then
OS="Debian"
SERVICE_PATH="/etc/systemd/system/qbittorrent-exporter.service"
else
echo -e "${CROSS} Unsupported OS detected. Exiting."
exit 1
fi
# ==============================================================================
# UNINSTALL
# ==============================================================================
function uninstall() {
msg_info "Uninstalling qBittorrent-Exporter"
if [[ "$OS" == "Alpine" ]]; then
rc-service qbittorrent-exporter stop &>/dev/null
rc-update del qbittorrent-exporter &>/dev/null
rm -f "$SERVICE_PATH"
else
systemctl disable -q --now qbittorrent-exporter
rm -f "$SERVICE_PATH"
fi
rm -rf "$INSTALL_PATH" "$CONFIG_PATH"
rm -f "/usr/local/bin/update_qbittorrent-exporter"
rm -f "$HOME/.qbittorrent-exporter"
msg_ok "qBittorrent-Exporter has been uninstalled"
}
# ==============================================================================
# UPDATE
# ==============================================================================
function update() {
if check_for_gh_release "qbittorrent-exporter" "martabal/qbittorrent-exporter"; then
msg_info "Stopping service"
if [[ "$OS" == "Alpine" ]]; then
rc-service qbittorrent-exporter stop &>/dev/null
else
systemctl stop qbittorrent-exporter
fi
msg_ok "Stopped service"
fetch_and_deploy_gh_release "qbittorrent-exporter" "martabal/qbittorrent-exporter" "tarball" "latest"
setup_go
msg_info "Building qBittorrent-Exporter"
cd /opt/qbittorrent-exporter
$STD /usr/local/bin/go build -o ./qbittorrent-exporter
msg_ok "Built qBittorrent-Exporter"
msg_info "Starting service"
if [[ "$OS" == "Alpine" ]]; then
rc-service qbittorrent-exporter start &>/dev/null
else
systemctl start qbittorrent-exporter
fi
msg_ok "Started service"
msg_ok "Updated successfully"
exit
fi
}
# ==============================================================================
# INSTALL
# ==============================================================================
function install() {
read -erp "Enter URL of qBittorrent, example: (http://127.0.0.1:8080): " QBITTORRENT_BASE_URL
read -erp "Enter qBittorrent username: " QBITTORRENT_USERNAME
read -rsp "Enter qBittorrent password: " QBITTORRENT_PASSWORD
printf "\n"
fetch_and_deploy_gh_release "qbittorrent-exporter" "martabal/qbittorrent-exporter" "tarball" "latest"
setup_go
msg_info "Building qBittorrent-Exporter on ${OS}"
cd /opt/qbittorrent-exporter
$STD /usr/local/bin/go build -o ./qbittorrent-exporter
msg_ok "Built qBittorrent-Exporter"
msg_info "Creating configuration"
cat <<EOF >"$CONFIG_PATH"
# https://github.com/martabal/qbittorrent-exporter?tab=readme-ov-file#parameters
QBITTORRENT_BASE_URL="${QBITTORRENT_BASE_URL}"
QBITTORRENT_USERNAME="${QBITTORRENT_USERNAME}"
QBITTORRENT_PASSWORD="${QBITTORRENT_PASSWORD}"
EOF
msg_ok "Created configuration"
msg_info "Creating service"
if [[ "$OS" == "Debian" ]]; then
cat <<EOF >"$SERVICE_PATH"
[Unit]
Description=qbittorrent-exporter
After=network.target
[Service]
User=root
WorkingDirectory=/opt/qbittorrent-exporter
EnvironmentFile=$CONFIG_PATH
ExecStart=/opt/qbittorrent-exporter/qbittorrent-exporter
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now qbittorrent-exporter
else
cat <<EOF >"$SERVICE_PATH"
#!/sbin/openrc-run
name="qbittorrent-exporter"
description="qBittorrent Exporter for Prometheus"
command="${INSTALL_PATH}/qbittorrent-exporter"
command_background=true
directory="/opt/qbittorrent-exporter"
pidfile="/run/\${RC_SVCNAME}.pid"
output_log="/var/log/qbittorrent-exporter.log"
error_log="/var/log/qbittorrent-exporter.log"
depend() {
need net
after firewall
}
start_pre() {
if [ -f "$CONFIG_PATH" ]; then
export \$(grep -v '^#' $CONFIG_PATH | xargs)
fi
}
EOF
chmod +x "$SERVICE_PATH"
$STD rc-update add qbittorrent-exporter default
$STD rc-service qbittorrent-exporter start
fi
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_qbittorrent-exporter
#!/usr/bin/env bash
# qbittorrent-exporter Update Script
type=update bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/qbittorrent-exporter.sh)"
UPDATEEOF
chmod +x /usr/local/bin/update_qbittorrent-exporter
msg_ok "Created update script (/usr/local/bin/update_qbittorrent-exporter)"
echo ""
msg_ok "qBittorrent-Exporter installed successfully"
msg_ok "Metrics: ${BL}http://${LOCAL_IP}:8090/metrics${CL}"
msg_ok "Config: ${BL}${CONFIG_PATH}${CL}"
}
# ==============================================================================
# MAIN
# ==============================================================================
header_info
ensure_usr_local_bin_persist
import_local_ip
# Handle type=update (called from update script)
if [[ "${type:-}" == "update" ]]; then
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/qbittorrent-exporter" ]]; then
update
else
msg_error "qBittorrent-Exporter is not installed. Nothing to update."
exit 1
fi
exit 0
fi
# Check if already installed
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/qbittorrent-exporter" ]]; then
msg_warn "qBittorrent-Exporter is already installed."
echo ""
echo -n "${TAB}Uninstall qBittorrent-Exporter? (y/N): "
read -r uninstall_prompt
if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then
uninstall
exit 0
fi
echo -n "${TAB}Update qBittorrent-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 "qBittorrent-Exporter is not installed."
echo ""
echo -e "${TAB}${INFO} This will install:"
echo -e "${TAB} - qBittorrent Exporter (Go binary)"
echo -e "${TAB} - Systemd/OpenRC service"
echo ""
echo -n "${TAB}Install qBittorrent-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

@ -50,7 +50,12 @@ function execute_in() {
container=$1 container=$1
name=$(pct exec "$container" hostname) name=$(pct exec "$container" hostname)
echo -e "${BL}[Info]${GN} Execute inside${BL} ${name}${GN} with output: ${CL}" echo -e "${BL}[Info]${GN} Execute inside${BL} ${name}${GN} with output: ${CL}"
pct exec "$container" -- bash -c "${custom_command}" | tee if ! pct exec "$container" -- bash -c "command -v ${custom_command} >/dev/null 2>&1"
then
echo -e "${BL}[Info]${GN} Skipping ${name} ${RD}$container has no command: ${custom_command}"
else
pct exec "$container" -- bash -c "${custom_command}" | tee
fi
} }
for container in $(pct list | awk '{if(NR>1) print $1}'); do for container in $(pct list | awk '{if(NR>1) print $1}'); do