Compare commits

..

1 Commits

Author SHA1 Message Date
54a89547be Update versions.json 2025-12-13 12:06:31 +00:00
10 changed files with 76 additions and 495 deletions

View File

@ -10,15 +10,12 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-12-14
## 2025-12-13
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Umami: Use `pnpm` [@tremor021](https://github.com/tremor021) ([#9937](https://github.com/community-scripts/ProxmoxVE/pull/9937))
- Tunarr: Switch to prebuild archive [@tremor021](https://github.com/tremor021) ([#9920](https://github.com/community-scripts/ProxmoxVE/pull/9920))
- [HOTFIX] NetVisor: backup OIDC config before update [@vhsdream](https://github.com/vhsdream) ([#9895](https://github.com/community-scripts/ProxmoxVE/pull/9895))
- Update OPNsense download URL to version 14.3 [@jaredcarling42-design](https://github.com/jaredcarling42-design) ([#9899](https://github.com/community-scripts/ProxmoxVE/pull/9899))
@ -31,15 +28,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- Refactor: Spoolman [@tremor021](https://github.com/tremor021) ([#9873](https://github.com/community-scripts/ProxmoxVE/pull/9873))
### 🧰 Tools
- AdGuardHome-Sync ([#9783](https://github.com/community-scripts/ProxmoxVE/pull/9783))
### ❔ Uncategorized
- Update category value in glance.json and adguard-home.json [@Bensonheimer992](https://github.com/Bensonheimer992) ([#9932](https://github.com/community-scripts/ProxmoxVE/pull/9932))
- Change category ID from 6 to 3 in coolify.json and dokploy.json [@Bensonheimer992](https://github.com/Bensonheimer992) ([#9930](https://github.com/community-scripts/ProxmoxVE/pull/9930))
## 2025-12-12
### 🆕 New Scripts

View File

@ -37,8 +37,8 @@ function update_script() {
msg_info "Updating Umami"
cd /opt/umami
$STD pnpm install
$STD pnpm run build
$STD yarn install
$STD yarn run build
msg_ok "Updated Umami"
msg_info "Starting Service"

View File

@ -1,59 +0,0 @@
{
"name": "AdGuardHome-Sync",
"slug": "adguardhome-sync",
"categories": [
5
],
"date_created": "2025-12-13",
"type": "addon",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://github.com/bakito/adguardhome-sync",
"website": "https://github.com/bakito/adguardhome-sync",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/adguardhome-sync.webp",
"config_path": "/opt/adguardhome-sync/adguardhome-sync.yaml",
"description": "Synchronize AdGuardHome config to one or multiple replica instances. Syncs General Settings, Filters, Rewrites, Services, Clients, DNS Config, DHCP Config and Theme.",
"install_methods": [
{
"type": "default",
"script": "tools/addon/adguardhome-sync.sh",
"resources": {
"cpu": null,
"ram": null,
"hdd": null,
"os": null,
"version": null
}
},
{
"type": "alpine",
"script": "tools/addon/adguardhome-sync.sh",
"resources": {
"cpu": null,
"ram": null,
"hdd": null,
"os": null,
"version": null
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Edit /opt/adguardhome-sync/adguardhome-sync.yaml to configure your AdGuardHome instances",
"type": "info"
},
{
"text": "Origin = Primary instance, Replicas = Instances to sync to",
"type": "info"
},
{
"text": "Update with: update_adguardhome-sync",
"type": "info"
}
]
}

View File

@ -2,7 +2,7 @@
"name": "Coolify",
"slug": "coolify",
"categories": [
3
6
],
"date_created": "2025-12-09",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Dokploy",
"slug": "dokploy",
"categories": [
3
6
],
"date_created": "2025-12-09",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Glance",
"slug": "glance",
"categories": [
10
9
],
"date_created": "2024-12-02",
"type": "ct",

View File

@ -1,73 +1,8 @@
[
{
"name": "nickheyer/discopanel",
"version": "v1.0.14",
"date": "2025-12-14T00:04:18Z"
},
{
"name": "martabal/qbittorrent-exporter",
"version": "v1.13.2",
"date": "2025-12-13T22:59:03Z"
},
{
"name": "diced/zipline",
"version": "v4.4.0",
"date": "2025-12-13T22:49:07Z"
},
{
"name": "netvisor-io/netvisor",
"version": "v0.11.9",
"date": "2025-12-13T21:48:17Z"
},
{
"name": "karlomikus/bar-assistant",
"version": "v5.10.0",
"date": "2025-12-13T20:17:27Z"
},
{
"name": "fosrl/pangolin",
"version": "1.13.1",
"date": "2025-12-13T18:00:27Z"
},
{
"name": "leiweibau/Pi.Alert",
"version": "v2025-12-14",
"date": "2025-12-13T16:39:17Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v1.1.4-beta",
"date": "2025-12-13T15:59:06Z"
},
{
"name": "WGDashboard/WGDashboard",
"version": "v4.3.1",
"date": "2025-12-13T15:38:37Z"
},
{
"name": "alam00000/bentopdf",
"version": "v1.11.2",
"date": "2025-12-13T15:28:49Z"
},
{
"name": "autobrr/autobrr",
"version": "v1.71.0",
"date": "2025-12-13T14:38:09Z"
},
{
"name": "karakeep-app/karakeep",
"version": "cli/v0.29.1",
"date": "2025-12-13T13:55:51Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v1.0.2",
"date": "2025-12-13T13:34:22Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-openapi@10.1.4",
"date": "2025-12-13T12:01:58Z"
"version": "create-fumadocs-app@16.0.25",
"date": "2025-12-13T10:22:03Z"
},
{
"name": "chrisvel/tududi",
@ -79,6 +14,11 @@
"version": "v0.13.4-rc0",
"date": "2025-12-13T00:29:01Z"
},
{
"name": "netvisor-io/netvisor",
"version": "v0.11.8",
"date": "2025-12-13T08:38:03Z"
},
{
"name": "Dokploy/dokploy",
"version": "v0.26.2",
@ -119,11 +59,21 @@
"version": "v2.20.2",
"date": "2025-12-12T23:47:48Z"
},
{
"name": "nickheyer/discopanel",
"version": "v1.0.13-dev",
"date": "2025-12-12T23:45:54Z"
},
{
"name": "fccview/jotty",
"version": "1.13.1",
"date": "2025-12-12T21:34:22Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v1.0.1",
"date": "2025-12-12T21:09:19Z"
},
{
"name": "mongodb/mongo",
"version": "r7.0.27",
@ -234,6 +184,11 @@
"version": "4.0.1-rc.1",
"date": "2025-12-12T10:52:28Z"
},
{
"name": "karakeep-app/karakeep",
"version": "v0.29.3",
"date": "2025-12-12T09:14:41Z"
},
{
"name": "grokability/snipe-it",
"version": "v8.3.7",
@ -254,6 +209,16 @@
"version": "v3.0.3",
"date": "2025-12-12T02:39:27Z"
},
{
"name": "fosrl/pangolin",
"version": "1.13.0",
"date": "2025-12-11T23:19:41Z"
},
{
"name": "WGDashboard/WGDashboard",
"version": "v4.3.0.3",
"date": "2025-12-11T23:03:52Z"
},
{
"name": "motioneye-project/motioneye",
"version": "0.43.1",
@ -279,6 +244,11 @@
"version": "v0.16.2",
"date": "2025-12-11T15:16:01Z"
},
{
"name": "alam00000/bentopdf",
"version": "v1.11.1",
"date": "2025-12-11T14:12:20Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v2.1.3",
@ -629,6 +599,11 @@
"version": "11.0.4",
"date": "2025-12-04T09:26:37Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v1.2.0-experimental-sql-indexing",
"date": "2025-12-04T01:35:46Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.36.2",
@ -734,6 +709,11 @@
"version": "v0.16.0",
"date": "2025-12-01T21:35:19Z"
},
{
"name": "martabal/qbittorrent-exporter",
"version": "v1.13.0",
"date": "2025-12-01T21:06:38Z"
},
{
"name": "slskd/slskd",
"version": "0.24.1",
@ -809,6 +789,11 @@
"version": "v25.9.0",
"date": "2025-11-29T16:37:28Z"
},
{
"name": "autobrr/autobrr",
"version": "v1.70.0",
"date": "2025-11-29T14:44:38Z"
},
{
"name": "Kozea/Radicale",
"version": "v3.5.9",
@ -879,6 +864,11 @@
"version": "release-1.24.2",
"date": "2025-11-26T11:22:30Z"
},
{
"name": "karlomikus/bar-assistant",
"version": "v5.9.3",
"date": "2025-11-25T18:18:34Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "22.0.3",
@ -1169,6 +1159,11 @@
"version": "v0.9.1",
"date": "2025-11-06T02:26:53Z"
},
{
"name": "leiweibau/Pi.Alert",
"version": "v2025-11-05",
"date": "2025-11-05T18:08:26Z"
},
{
"name": "javedh-dev/tracktor",
"version": "0.5.1",
@ -1284,6 +1279,11 @@
"version": "v4.5.0",
"date": "2025-10-18T22:00:50Z"
},
{
"name": "diced/zipline",
"version": "v4.3.2",
"date": "2025-10-17T04:13:23Z"
},
{
"name": "minio/minio",
"version": "RELEASE.2025-10-15T17-29-55Z",

View File

@ -13,16 +13,16 @@ setting_up_container
network_check
update_os
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
PG_VERSION="17" setup_postgresql
PG_DB_NAME="umamidb" PG_DB_USER="umami" setup_postgresql_db
fetch_and_deploy_gh_release "umami" "umami-software/umami" "tarball"
msg_info "Configuring Umami"
cd /opt/umami
$STD pnpm install
$STD yarn install
echo -e "DATABASE_URL=postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME" >>/opt/umami/.env
$STD pnpm run build
$STD yarn run build
msg_ok "Configured Umami"
msg_info "Creating Service"
@ -35,7 +35,7 @@ Type=simple
Restart=always
User=root
WorkingDirectory=/opt/umami
ExecStart=/usr/bin/pnpm run start
ExecStart=/usr/bin/yarn run start
[Install]
WantedBy=multi-user.target

View File

@ -1,342 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/bakito/adguardhome-sync
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
# ==============================================================================
# CONFIGURATION
# ==============================================================================
APP="AdGuardHome-Sync"
APP_TYPE="addon"
INSTALL_PATH="/opt/adguardhome-sync"
CONFIG_PATH="/opt/adguardhome-sync/adguardhome-sync.yaml"
DEFAULT_PORT=8080
# Initialize all core functions (colors, formatting, icons, STD mode)
load_functions
# ==============================================================================
# HEADER
# ==============================================================================
function header_info {
clear
cat <<"EOF"
___ __ ____ __ _____
/ | ____/ /___ ___ ______ __________/ / / / /___ ____ ___ ___ / ___/__ ______ _____
/ /| |/ __ / __ `/ / / / __ `/ ___/ __ / /_/ / __ \/ __ `__ \/ _ \ \__ \/ / / / __ \/ ___/
/ ___ / /_/ / /_/ / /_/ / /_/ / / / /_/ / __ / /_/ / / / / / / __/ ___/ / /_/ / / / / /__
/_/ |_\__,_/\__, /\__,_/\__,_/_/ \__,_/_/ /_/\____/_/ /_/ /_/\___/ /____/\__, /_/ /_/\___/
/____/ /____/
EOF
}
# ==============================================================================
# HELPER FUNCTIONS
# ==============================================================================
get_ip() {
hostname -I 2>/dev/null | awk '{print $1}' || echo "127.0.0.1"
}
# ==============================================================================
# OS DETECTION
# ==============================================================================
if [[ -f "/etc/alpine-release" ]]; then
OS="Alpine"
SERVICE_PATH="/etc/init.d/adguardhome-sync"
elif [[ -f "/etc/debian_version" ]]; then
OS="Debian"
SERVICE_PATH="/etc/systemd/system/adguardhome-sync.service"
else
msg_error "Unsupported OS detected. Exiting."
exit 1
fi
# ==============================================================================
# UNINSTALL
# ==============================================================================
function uninstall() {
msg_info "Uninstalling ${APP}"
if [[ "$OS" == "Alpine" ]]; then
rc-service adguardhome-sync stop &>/dev/null || true
rc-update del adguardhome-sync &>/dev/null || true
rm -f "$SERVICE_PATH"
else
systemctl disable --now adguardhome-sync.service &>/dev/null || true
rm -f "$SERVICE_PATH"
fi
rm -rf "$INSTALL_PATH"
rm -f "/usr/local/bin/update_adguardhome-sync"
rm -f "$HOME/.adguardhome-sync"
msg_ok "${APP} has been uninstalled"
}
# ==============================================================================
# UPDATE
# ==============================================================================
function update() {
if check_for_gh_release "adguardhome-sync" "bakito/adguardhome-sync"; then
msg_info "Stopping service"
if [[ "$OS" == "Alpine" ]]; then
rc-service adguardhome-sync stop &>/dev/null || true
else
systemctl stop adguardhome-sync.service &>/dev/null || true
fi
msg_ok "Stopped service"
msg_info "Backing up configuration"
cp "$CONFIG_PATH" /tmp/adguardhome-sync.yaml.bak 2>/dev/null || true
msg_ok "Backed up configuration"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "adguardhome-sync" "bakito/adguardhome-sync" "prebuild" "latest" "$INSTALL_PATH" "adguardhome-sync_*_linux_amd64.tar.gz"
msg_info "Restoring configuration"
cp /tmp/adguardhome-sync.yaml.bak "$CONFIG_PATH" 2>/dev/null || true
rm -f /tmp/adguardhome-sync.yaml.bak
msg_ok "Restored configuration"
msg_info "Starting service"
if [[ "$OS" == "Alpine" ]]; then
rc-service adguardhome-sync start
else
systemctl start adguardhome-sync.service
fi
msg_ok "Started service"
msg_ok "Updated successfully"
exit
fi
}
# ==============================================================================
# INSTALL
# ==============================================================================
function install() {
local ip
ip=$(get_ip)
fetch_and_deploy_gh_release "adguardhome-sync" "bakito/adguardhome-sync" "prebuild" "latest" "$INSTALL_PATH" "adguardhome-sync_*_linux_amd64.tar.gz"
# Gather configuration from user
echo ""
echo -e "${TAB}Enter details for your AdGuard Home instances."
echo -e "${TAB}The Origin is your primary instance, Replica will sync from it."
echo ""
# Origin instance
echo -e "${YW}── Origin (Primary) Instance ──${CL}"
local origin_url origin_user origin_pass
read -rp " Origin URL (e.g., http://192.168.1.1): " origin_url
origin_url="${origin_url:-http://192.168.1.1}"
# Add http:// if no protocol specified
[[ ! "$origin_url" =~ ^https?:// ]] && origin_url="http://${origin_url}"
read -rp " Origin Username [admin]: " origin_user
origin_user="${origin_user:-admin}"
read -rsp " Origin Password: " origin_pass
echo ""
origin_pass="${origin_pass:-changeme}"
# Replica instance
echo ""
echo -e "${YW}── Replica Instance ──${CL}"
local replica_url replica_user replica_pass
read -rp " Replica URL (e.g., http://192.168.1.2): " replica_url
replica_url="${replica_url:-http://192.168.1.2}"
# Add http:// if no protocol specified
[[ ! "$replica_url" =~ ^https?:// ]] && replica_url="http://${replica_url}"
read -rp " Replica Username [admin]: " replica_user
replica_user="${replica_user:-admin}"
read -rsp " Replica Password: " replica_pass
echo ""
replica_pass="${replica_pass:-changeme}"
echo ""
msg_info "Creating configuration"
cat <<EOF >"$CONFIG_PATH"
# AdGuardHome-Sync Configuration
# Documentation: https://github.com/bakito/adguardhome-sync
# Cron expression for sync interval (e.g., every 2 hours: "0 */2 * * *")
cron: "0 */2 * * *"
# Run sync on startup
runOnStart: true
# Continue sync on errors
continueOnError: false
# Origin AdGuardHome instance (primary)
origin:
url: "${origin_url}"
username: "${origin_user}"
password: "${origin_pass}"
insecureSkipVerify: false
# Replica instances (one or more)
replicas:
- url: "${replica_url}"
username: "${replica_user}"
password: "${replica_pass}"
insecureSkipVerify: false
# Add more replicas as needed:
# - url: "http://192.168.1.3"
# username: "admin"
# password: "changeme"
# API settings (web UI)
api:
port: ${DEFAULT_PORT}
darkMode: true
metrics:
enabled: false
# Sync features (all enabled by default)
features:
dns:
accessLists: true
serverConfig: true
rewrites: true
dhcp:
serverConfig: true
staticLeases: true
generalSettings: true
queryLogConfig: true
statsConfig: true
clientSettings: true
services: true
filters: true
theme: true
EOF
chmod 600 "$CONFIG_PATH"
msg_ok "Created configuration"
msg_info "Creating service"
if [[ "$OS" == "Alpine" ]]; then
cat <<EOF >"$SERVICE_PATH"
#!/sbin/openrc-run
name="adguardhome-sync"
description="AdGuardHome Sync"
command="${INSTALL_PATH}/adguardhome-sync"
command_args="run --config ${CONFIG_PATH}"
command_background=true
pidfile="/run/\${RC_SVCNAME}.pid"
output_log="/var/log/adguardhome-sync.log"
error_log="/var/log/adguardhome-sync.log"
depend() {
need net
after firewall
}
EOF
chmod +x "$SERVICE_PATH"
rc-update add adguardhome-sync default
rc-service adguardhome-sync start
else
cat <<EOF >"$SERVICE_PATH"
[Unit]
Description=AdGuardHome Sync
After=network.target
[Service]
Type=simple
ExecStart=${INSTALL_PATH}/adguardhome-sync run --config ${CONFIG_PATH}
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now adguardhome-sync &>/dev/null
fi
msg_ok "Created and started service"
# Create update script
msg_info "Creating update script"
cat <<'UPDATEEOF' >/usr/local/bin/update_adguardhome-sync
#!/usr/bin/env bash
# AdGuardHome-Sync Update Script
type=update bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/adguardhome-sync.sh)"
UPDATEEOF
chmod +x /usr/local/bin/update_adguardhome-sync
msg_ok "Created update script (/usr/local/bin/update_adguardhome-sync)"
echo ""
msg_ok "${APP} installed successfully"
msg_ok "Web UI: ${BL}http://${ip}:${DEFAULT_PORT}${CL}"
msg_ok "Config: ${BL}${CONFIG_PATH}${CL}"
echo ""
msg_warn "Edit the config file to add your AdGuardHome instances!"
msg_warn " Origin: Your primary AdGuardHome instance"
msg_warn " Replicas: One or more replica instances to sync to"
}
# ==============================================================================
# MAIN
# ==============================================================================
# Handle type=update (called from update script)
if [[ "${type:-}" == "update" ]]; then
header_info
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/adguardhome-sync" ]]; then
update
else
msg_error "${APP} is not installed. Nothing to update."
exit 1
fi
exit 0
fi
header_info
IP=$(get_ip)
# Check if already installed
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/adguardhome-sync" ]]; then
msg_warn "${APP} is already installed."
echo ""
echo -n "${TAB}Uninstall ${APP}? (y/N): "
read -r uninstall_prompt
if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then
uninstall
exit 0
fi
echo -n "${TAB}Update ${APP}? (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 "${APP} is not installed."
echo ""
echo -e "${TAB}${INFO} This will install:"
echo -e "${TAB} - AdGuardHome-Sync (Go binary)"
echo -e "${TAB} - Systemd/OpenRC service"
echo -e "${TAB} - Web UI on port ${DEFAULT_PORT}"
echo ""
echo -n "${TAB}Install ${APP}? (y/N): "
read -r install_prompt
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
install
else
msg_warn "Installation cancelled. Exiting."
exit 0
fi

View File

@ -1,6 +0,0 @@
___ ________ ____ __ _____
/ | ____/ / ____/_ ______ __________/ / / / /___ ____ ___ ___ / ___/__ ______ _____
/ /| |/ __ / / __/ / / / __ `/ ___/ __ / /_/ / __ \/ __ `__ \/ _ \______\__ \/ / / / __ \/ ___/
/ ___ / /_/ / /_/ / /_/ / /_/ / / / /_/ / __ / /_/ / / / / / / __/_____/__/ / /_/ / / / / /__
/_/ |_\__,_/\____/\__,_/\__,_/_/ \__,_/_/ /_/\____/_/ /_/ /_/\___/ /____/\__, /_/ /_/\___/
/____/