From a06ca3cf59c933fef2669eac797397a10f5b0cab Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Sat, 15 Aug 2026 23:33:58 +0200 Subject: [PATCH 01/55] ntopng (#16387) --- ct/headers/ntopng | 6 +++++ ct/ntopng.sh | 53 +++++++++++++++++++++++++++++++++++++++ install/ntopng-install.sh | 35 ++++++++++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 ct/headers/ntopng create mode 100644 ct/ntopng.sh create mode 100644 install/ntopng-install.sh diff --git a/ct/headers/ntopng b/ct/headers/ntopng new file mode 100644 index 000000000..3559d1313 --- /dev/null +++ b/ct/headers/ntopng @@ -0,0 +1,6 @@ + __ + ____ / /_____ ____ ____ ____ _ + / __ \/ __/ __ \/ __ \/ __ \/ __ `/ + / / / / /_/ /_/ / /_/ / / / / /_/ / +/_/ /_/\__/\____/ .___/_/ /_/\__, / + /_/ /____/ diff --git a/ct/ntopng.sh b/ct/ntopng.sh new file mode 100644 index 000000000..cff63efab --- /dev/null +++ b/ct/ntopng.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://www.ntop.org/products/traffic-analysis/ntop/ + +APP="ntopng" +var_tags="${var_tags:-network;monitoring}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-10}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" +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/ntopng/ntopng.conf ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + msg_info "Updating ntopng" + $STD apt update + $STD apt install -y ntopng + msg_ok "Updated ntopng" + + msg_info "Restarting Service" + systemctl restart ntopng + msg_ok "Restarted Service" + msg_ok "Updated successfully!" + 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 "${GATEWAY}${BGN}http://${IP}:3000${CL}" +echo -e "${INFO}${YW}Default login: admin / admin${CL}" diff --git a/install/ntopng-install.sh b/install/ntopng-install.sh new file mode 100644 index 000000000..6538e004e --- /dev/null +++ b/install/ntopng-install.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://www.ntop.org/products/traffic-analysis/ntop/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +fetch_and_deploy_from_url "https://packages.ntop.org/apt-stable/$(get_os_info codename)/all/apt-ntop-stable.deb" "" + +msg_info "Installing ntopng" +$STD apt update +$STD apt install -y ntopng +msg_ok "Installed ntopng" + +msg_info "Configuring ntopng" +cat </etc/ntopng/ntopng.conf +-i=$(ip -4 route | awk '/default/ {print $5; exit}') +-w=3000 +-d=/var/lib/ntopng +--community +EOF +systemctl restart ntopng +msg_ok "Configured ntopng" + +motd_ssh +customize +cleanup_lxc From 28b848ddf25b59d4ae208ad8e7d1e41b36ed008b Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 15 Aug 2026 21:34:24 +0000 Subject: [PATCH 02/55] Update CHANGELOG.md (#16534) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ec42150c..f150ac074 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -523,6 +523,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-08-15 +### πŸ†• New Scripts + + - ntopng ([#16387](https://github.com/community-scripts/ProxmoxVE/pull/16387)) + ### πŸš€ Updated Scripts - #### 🐞 Bug Fixes From f4a36e9200b41d9509407997ddfe141b1ea426be Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Sat, 15 Aug 2026 23:41:31 +0200 Subject: [PATCH 03/55] Securo (#16518) * Add securo (ct) * fix: src * securo: enable nginx site via nginx_enable_site helper Replaces the manual symlink + default removal + restart with the core helper, which also runs nginx -t before restarting and enables the unit. --------- 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> Co-authored-by: MickLesk --- ct/headers/securo | 6 ++ ct/securo.sh | 74 +++++++++++++++++ install/securo-install.sh | 164 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 244 insertions(+) create mode 100644 ct/headers/securo create mode 100644 ct/securo.sh create mode 100644 install/securo-install.sh diff --git a/ct/headers/securo b/ct/headers/securo new file mode 100644 index 000000000..21ee88be5 --- /dev/null +++ b/ct/headers/securo @@ -0,0 +1,6 @@ + _____ + / ___/___ _______ ___________ + \__ \/ _ \/ ___/ / / / ___/ __ \ + ___/ / __/ /__/ /_/ / / / /_/ / +/____/\___/\___/\__,_/_/ \____/ + diff --git a/ct/securo.sh b/ct/securo.sh new file mode 100644 index 000000000..ef635fad9 --- /dev/null +++ b/ct/securo.sh @@ -0,0 +1,74 @@ +#!/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: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/securo-finance/securo + +APP="Securo" +var_tags="${var_tags:-finance;self-hosted}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-4096}" +var_disk="${var_disk:-12}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +#var_arm64="${var_arm64:-no}" # unset = ask the user; set yes/no only when verified +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -d /opt/securo ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "securo" "securo-finance/securo"; then + msg_info "Stopping Services" + systemctl stop securo securo-worker securo-beat + msg_ok "Stopped Services" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "securo" "securo-finance/securo" "tarball" + + msg_info "Updating Backend" + cd /opt/securo/backend + ln -sf /opt/securo_data/.env /opt/securo/backend/.env + $STD uv venv --python 3.12 /opt/securo/backend/.venv + $STD uv pip install --python /opt/securo/backend/.venv -e . + set -a + source /opt/securo_data/.env + set +a + $STD /opt/securo/backend/.venv/bin/alembic upgrade head + msg_ok "Updated Backend" + + msg_info "Rebuilding Frontend" + cd /opt/securo/frontend + export NODE_OPTIONS="--max-old-space-size=4096" + $STD npm install + $STD npm run build + msg_ok "Rebuilt Frontend" + + msg_info "Starting Services" + systemctl start securo securo-worker securo-beat + systemctl reload nginx + msg_ok "Started Services" + msg_ok "Updated successfully!" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW}Access it using the following URL:${CL}" +echo -e "${GATEWAY}${BGN}https://${IP}${CL}" diff --git a/install/securo-install.sh b/install/securo-install.sh new file mode 100644 index 000000000..f24ae935b --- /dev/null +++ b/install/securo-install.sh @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/securo-finance/securo + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y \ + nginx \ + redis-server \ + build-essential +systemctl enable -q --now redis-server +msg_ok "Installed Dependencies" + +PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql +PG_DB_NAME="securo" PG_DB_USER="securo" PG_DB_EXTENSIONS="vector" setup_postgresql_db +NODE_VERSION="22" setup_nodejs +UV_PYTHON="3.12" setup_uv + +fetch_and_deploy_gh_release "securo" "securo-finance/securo" "tarball" + +msg_info "Setting up Backend" +cd /opt/securo/backend +$STD uv venv --python 3.12 /opt/securo/backend/.venv +$STD uv pip install --python /opt/securo/backend/.venv -e . +msg_ok "Set up Backend" + +msg_info "Configuring Securo" +mkdir -p /opt/securo_data +SECRET_KEY=$(openssl rand -hex 32) +cat </opt/securo_data/.env +DATABASE_URL=postgresql+asyncpg://securo:${PG_DB_PASS}@127.0.0.1:5432/securo +REDIS_URL=redis://127.0.0.1:6379/0 +SECRET_KEY=${SECRET_KEY} +DEBUG=false +FRONTEND_URL=https://${LOCAL_IP} +EOF +ln -sf /opt/securo_data/.env /opt/securo/backend/.env +set -a +source /opt/securo_data/.env +set +a +$STD /opt/securo/backend/.venv/bin/alembic upgrade head +msg_ok "Configured Securo" + +msg_info "Building Frontend (Patience)" +cd /opt/securo/frontend +export NODE_OPTIONS="--max-old-space-size=4096" +$STD npm install +$STD npm run build +msg_ok "Built Frontend" + +msg_info "Generating Self-Signed Certificate" +create_self_signed_cert "securo" +msg_ok "Generated Self-Signed Certificate" + +msg_info "Creating Services" +cat </etc/systemd/system/securo.service +[Unit] +Description=Securo Backend (FastAPI) +After=network-online.target postgresql.service redis-server.service +Wants=network-online.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/securo/backend +EnvironmentFile=/opt/securo_data/.env +ExecStart=/opt/securo/backend/.venv/bin/uvicorn app.main:app --host 127.0.0.1 --port 8000 +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/securo-worker.service +[Unit] +Description=Securo Celery Worker +After=network-online.target postgresql.service redis-server.service +Wants=network-online.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/securo/backend +EnvironmentFile=/opt/securo_data/.env +ExecStart=/opt/securo/backend/.venv/bin/celery -A app.worker worker --loglevel=info --concurrency=2 +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/securo-beat.service +[Unit] +Description=Securo Celery Beat +After=network-online.target postgresql.service redis-server.service +Wants=network-online.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/securo/backend +EnvironmentFile=/opt/securo_data/.env +ExecStart=/opt/securo/backend/.venv/bin/celery -A app.worker beat --loglevel=info +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now securo securo-worker securo-beat +msg_ok "Created Services" + +msg_info "Configuring Nginx" +cat <<'EOF' >/etc/nginx/sites-available/securo.conf +server { + listen 80 default_server; + server_name _; + return 301 https://$host$request_uri; +} + +server { + listen 443 ssl default_server; + http2 on; + server_name _; + + ssl_certificate /etc/ssl/securo/securo.crt; + ssl_certificate_key /etc/ssl/securo/securo.key; + + client_max_body_size 25m; + + root /opt/securo/frontend/dist; + index index.html; + + location /api/ { + proxy_pass http://127.0.0.1:8000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location / { + try_files $uri $uri/ /index.html; + } +} +EOF +nginx_enable_site securo.conf +msg_ok "Configured Nginx" + +motd_ssh +customize +cleanup_lxc From bbecb686184d5f4b21778b45262ba7646913a046 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 15 Aug 2026 21:41:59 +0000 Subject: [PATCH 04/55] Update CHANGELOG.md (#16537) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f150ac074..a6cc7215e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -525,7 +525,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸ†• New Scripts - - ntopng ([#16387](https://github.com/community-scripts/ProxmoxVE/pull/16387)) + - Securo ([#16518](https://github.com/community-scripts/ProxmoxVE/pull/16518)) +- ntopng ([#16387](https://github.com/community-scripts/ProxmoxVE/pull/16387)) ### πŸš€ Updated Scripts From ba59f092abb8229892bfd88dc2ee70cb6b3d71c8 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 00:03:21 +0000 Subject: [PATCH 05/55] Archive old changelog entries (#16538) Co-authored-by: github-actions[bot] --- .github/changelogs/2026/08.md | 153 ++++++++++++++++++++++++++++++++++ CHANGELOG.md | 150 ++------------------------------- 2 files changed, 158 insertions(+), 145 deletions(-) diff --git a/.github/changelogs/2026/08.md b/.github/changelogs/2026/08.md index 18c8bc9a6..3dcf87f21 100644 --- a/.github/changelogs/2026/08.md +++ b/.github/changelogs/2026/08.md @@ -1,3 +1,156 @@ +## 2026-08-15 + +### πŸ†• New Scripts + + - Securo ([#16518](https://github.com/community-scripts/ProxmoxVE/pull/16518)) +- ntopng ([#16387](https://github.com/community-scripts/ProxmoxVE/pull/16387)) + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - AdventureLog: remove pnpm build-allowlist override causing pnpm 10.33 conflict [@MickLesk](https://github.com/MickLesk) ([#16478](https://github.com/community-scripts/ProxmoxVE/pull/16478)) + + - #### ✨ New Features + + - PatchMon: add ssg-content [@MickLesk](https://github.com/MickLesk) ([#16481](https://github.com/community-scripts/ProxmoxVE/pull/16481)) + +## 2026-08-14 + +### πŸ†• New Scripts + + - RSS-Bridge ([#16471](https://github.com/community-scripts/ProxmoxVE/pull/16471)) +- GoDoxy ([#16470](https://github.com/community-scripts/ProxmoxVE/pull/16470)) +- Mumble ([#16474](https://github.com/community-scripts/ProxmoxVE/pull/16474)) +- Fleet ([#16472](https://github.com/community-scripts/ProxmoxVE/pull/16472)) +- Newt ([#16473](https://github.com/community-scripts/ProxmoxVE/pull/16473)) + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - calibre-web: install as package for 0.6.27's src-layout restructure [@MickLesk](https://github.com/MickLesk) ([#16480](https://github.com/community-scripts/ProxmoxVE/pull/16480)) + - Wanderer: Refactor of Services / Installation / Paths [@johanngrobe](https://github.com/johanngrobe) ([#16487](https://github.com/community-scripts/ProxmoxVE/pull/16487)) + - pelican-panel: set APP_URL to container IP [@MickLesk](https://github.com/MickLesk) ([#16488](https://github.com/community-scripts/ProxmoxVE/pull/16488)) + - fix(ampache): update to PHP 8.5 asset, auto-upgrade PHP on update [@CervezaStallone](https://github.com/CervezaStallone) ([#16484](https://github.com/community-scripts/ProxmoxVE/pull/16484)) + + - #### ✨ New Features + + - projectsend: rewrite for 2.0.0 (Laravel, nginx, MariaDB) [@MickLesk](https://github.com/MickLesk) ([#16477](https://github.com/community-scripts/ProxmoxVE/pull/16477)) + - Homepage v2.0 [@vhsdream](https://github.com/vhsdream) ([#16500](https://github.com/community-scripts/ProxmoxVE/pull/16500)) + + - #### πŸ”§ Refactor + + - Refactor: PowerDNS move poweradmin database outside the web root [@MickLesk](https://github.com/MickLesk) ([#16476](https://github.com/community-scripts/ProxmoxVE/pull/16476)) + - paperless-ngx: run services with uv --no-sync to avoid startup network dependency [@MickLesk](https://github.com/MickLesk) ([#16479](https://github.com/community-scripts/ProxmoxVE/pull/16479)) + +## 2026-08-13 + +### πŸ†• New Scripts + + - SuggestArr ([#16449](https://github.com/community-scripts/ProxmoxVE/pull/16449)) + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - fix(stirling-pdf): LibreOffice listener collides with unoserver on UNO port 2002, burning a core [@angusmaul](https://github.com/angusmaul) ([#16460](https://github.com/community-scripts/ProxmoxVE/pull/16460)) + - fix(reitti): enable SNI for tile cache [@kylemd](https://github.com/kylemd) ([#16463](https://github.com/community-scripts/ProxmoxVE/pull/16463)) + - [wanderer] refactor [@johanngrobe](https://github.com/johanngrobe) ([#16448](https://github.com/community-scripts/ProxmoxVE/pull/16448)) + + - #### ✨ New Features + + - feat: Update koillection-install.sh to support API usage [@Crazy-Duck](https://github.com/Crazy-Duck) ([#16425](https://github.com/community-scripts/ProxmoxVE/pull/16425)) + +## 2026-08-12 + +### πŸ†• New Scripts + + - Stalwart ([#16388](https://github.com/community-scripts/ProxmoxVE/pull/16388)) + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - networkoptimizer: mitigate dotnet publish hang in LXC [@MickLesk](https://github.com/MickLesk) ([#16436](https://github.com/community-scripts/ProxmoxVE/pull/16436)) + - lazylibrarian: reinstall deps after git pull on update [@MickLesk](https://github.com/MickLesk) ([#16435](https://github.com/community-scripts/ProxmoxVE/pull/16435)) + - wanderer: fix deprecated meilisearch upgrade flag [@MickLesk](https://github.com/MickLesk) ([#16434](https://github.com/community-scripts/ProxmoxVE/pull/16434)) + - calibre-web: fix release asset filename pattern [@MickLesk](https://github.com/MickLesk) ([#16433](https://github.com/community-scripts/ProxmoxVE/pull/16433)) + - fix(stirling-pdf): unoserver installed into the venv, and login mode truncates .env [@angusmaul](https://github.com/angusmaul) ([#16439](https://github.com/community-scripts/ProxmoxVE/pull/16439)) + - fix(pulse): keep the container recoverable when an update fails [@rcourtman](https://github.com/rcourtman) ([#16311](https://github.com/community-scripts/ProxmoxVE/pull/16311)) + + - #### πŸ”§ Refactor + + - ConvertX: add some new dependencies [@MickLesk](https://github.com/MickLesk) ([#16437](https://github.com/community-scripts/ProxmoxVE/pull/16437)) + +## 2026-08-11 + +### πŸš€ Updated Scripts + + - Update source URL for Reactive Resume [@MickLesk](https://github.com/MickLesk) ([#16407](https://github.com/community-scripts/ProxmoxVE/pull/16407)) + + - #### 🐞 Bug Fixes + + - Pelican-Panel: add php artisan p:environment:database [@MickLesk](https://github.com/MickLesk) ([#16397](https://github.com/community-scripts/ProxmoxVE/pull/16397)) + - outline: fix URL sed matching wrong line in .env.sample // refactor .env generation [@MickLesk](https://github.com/MickLesk) ([#16408](https://github.com/community-scripts/ProxmoxVE/pull/16408)) + - paperless-ngx: reindex Tantivy search index on webserver start [@MickLesk](https://github.com/MickLesk) ([#16395](https://github.com/community-scripts/ProxmoxVE/pull/16395)) + - karakeep: pin Node.js to 22 LTS, avoid Node 24.19 better-sqlite3 crash [@MickLesk](https://github.com/MickLesk) ([#16396](https://github.com/community-scripts/ProxmoxVE/pull/16396)) + + - #### ✨ New Features + + - Open WebUI: add optional OpenTelemetry package install [@irishpadres](https://github.com/irishpadres) ([#16415](https://github.com/community-scripts/ProxmoxVE/pull/16415)) + +### 🧰 Tools + + - #### 🐞 Bug Fixes + + - fix(add-tailscale-lxc): stop spinner before whiptail menu [@halcycon](https://github.com/halcycon) ([#16402](https://github.com/community-scripts/ProxmoxVE/pull/16402)) + + - #### πŸ”§ Refactor + + - arcane: fix projects/builds dir ownership for non-root container UID [@MickLesk](https://github.com/MickLesk) ([#16411](https://github.com/community-scripts/ProxmoxVE/pull/16411)) + +## 2026-08-10 + +### πŸ†• New Scripts + + - GitLab ([#16386](https://github.com/community-scripts/ProxmoxVE/pull/16386)) +- TeslaMate ([#16385](https://github.com/community-scripts/ProxmoxVE/pull/16385)) +- tor-snowflake ([#15684](https://github.com/community-scripts/ProxmoxVE/pull/15684)) + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - ErsatzTV: update ffmpeg to 8.1 version [@MickLesk](https://github.com/MickLesk) ([#16383](https://github.com/community-scripts/ProxmoxVE/pull/16383)) + +### 🧰 Tools + + - post-pdm-install ([#16368](https://github.com/community-scripts/ProxmoxVE/pull/16368)) + +## 2026-08-09 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - Fix: CouchDB Erlang cookie breaks vm.args (use hex) [@fudianchn](https://github.com/fudianchn) ([#16361](https://github.com/community-scripts/ProxmoxVE/pull/16361)) + - SparkyFitness: Install Git for frontend builds [@MickLesk](https://github.com/MickLesk) ([#16352](https://github.com/community-scripts/ProxmoxVE/pull/16352)) + - Byparr: Use invisible-playwright browser setup [@MickLesk](https://github.com/MickLesk) ([#16353](https://github.com/community-scripts/ProxmoxVE/pull/16353)) + - Crafty Controller: Restore ownership after updates [@MickLesk](https://github.com/MickLesk) ([#16354](https://github.com/community-scripts/ProxmoxVE/pull/16354)) + - Webtrees: Fix schema check in silent mode [@MickLesk](https://github.com/MickLesk) ([#16355](https://github.com/community-scripts/ProxmoxVE/pull/16355)) + - SigNoz: Allow legacy metadata schema on ClickHouse 26 [@MickLesk](https://github.com/MickLesk) ([#16356](https://github.com/community-scripts/ProxmoxVE/pull/16356)) + +### 🧰 Tools + + - #### ✨ New Features + + - Portainer: Update existing CE and BE installations [@MickLesk](https://github.com/MickLesk) ([#16357](https://github.com/community-scripts/ProxmoxVE/pull/16357)) + +### πŸ“š Documentation + + - github: update Star History links and image sources [@MickLesk](https://github.com/MickLesk) ([#16367](https://github.com/community-scripts/ProxmoxVE/pull/16367)) + ## 2026-08-08 ### πŸ†• New Scripts diff --git a/CHANGELOG.md b/CHANGELOG.md index a6cc7215e..72cd60449 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -89,6 +89,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit + + + @@ -102,7 +105,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
-

August (8 entries)

+

August (15 entries)

[View August 2026 Changelog](.github/changelogs/2026/08.md) @@ -1179,147 +1182,4 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### ✨ New Features - - update-lxc: autoremove and autoclean after apt full-upgrade [@soupy-boy](https://github.com/soupy-boy) ([#15831](https://github.com/community-scripts/ProxmoxVE/pull/15831)) - -## 2026-07-16 - -### πŸ†• New Scripts - - - Sync-In ([#15812](https://github.com/community-scripts/ProxmoxVE/pull/15812)) -- Beaverhabits ([#15813](https://github.com/community-scripts/ProxmoxVE/pull/15813)) -- Notediscovery ([#15811](https://github.com/community-scripts/ProxmoxVE/pull/15811)) - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - Pin Immich to v3.0.3 [@vhsdream](https://github.com/vhsdream) ([#15790](https://github.com/community-scripts/ProxmoxVE/pull/15790)) - -## 2026-07-15 - -### πŸ†• New Scripts - - - Nexterm ([#15688](https://github.com/community-scripts/ProxmoxVE/pull/15688)) - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - 2fauth: minor fixes for 8.0.0 [@MickLesk](https://github.com/MickLesk) ([#15795](https://github.com/community-scripts/ProxmoxVE/pull/15795)) - - SnapOtter: refactor update process to prebuild [@MickLesk](https://github.com/MickLesk) ([#15797](https://github.com/community-scripts/ProxmoxVE/pull/15797)) - -### πŸ’Ύ Core - - - #### πŸ”§ Refactor - - - tools.func: default Docker setup to official repo [@MickLesk](https://github.com/MickLesk) ([#15794](https://github.com/community-scripts/ProxmoxVE/pull/15794)) - -## 2026-07-14 - -### πŸ†• New Scripts - - - Grav ([#15773](https://github.com/community-scripts/ProxmoxVE/pull/15773)) -- Yuvomi ([#15772](https://github.com/community-scripts/ProxmoxVE/pull/15772)) - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - Lychee: Preserve uploads and ownership during update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15768](https://github.com/community-scripts/ProxmoxVE/pull/15768)) - - Wanderer: Clean deploy and install plugins for v0.20.0 update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15759](https://github.com/community-scripts/ProxmoxVE/pull/15759)) - - FileFlows: Handle update API 401, force update, and Node install [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15766](https://github.com/community-scripts/ProxmoxVE/pull/15766)) - - BirdNET-Go: Match new upstream release asset naming [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15758](https://github.com/community-scripts/ProxmoxVE/pull/15758)) - - [Upstream Fix] Immich: Fix loader priority [@vhsdream](https://github.com/vhsdream) ([#15755](https://github.com/community-scripts/ProxmoxVE/pull/15755)) - - - #### ✨ New Features - - - Bump OpenCloud version to v7.2.2 [@MickLesk](https://github.com/MickLesk) ([#15769](https://github.com/community-scripts/ProxmoxVE/pull/15769)) - - Silverbullet: Add optional Runtime API install via Chromium [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15761](https://github.com/community-scripts/ProxmoxVE/pull/15761)) - - - #### πŸ’₯ Breaking Changes - - - Pangolin: Bump to 1.20.0 | BREAKING: Switch to PostgreSQL [@MickLesk](https://github.com/MickLesk) ([#15682](https://github.com/community-scripts/ProxmoxVE/pull/15682)) - - - #### πŸ”§ Refactor - - - AFFiNE: Pin to v0.26.3 [@MickLesk](https://github.com/MickLesk) ([#15782](https://github.com/community-scripts/ProxmoxVE/pull/15782)) - -## 2026-07-13 - -### πŸ†• New Scripts - - - LeafWiki ([#15748](https://github.com/community-scripts/ProxmoxVE/pull/15748)) - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - fix(hyperion): keep service running after container reboot [@TowyTowy](https://github.com/TowyTowy) ([#15653](https://github.com/community-scripts/ProxmoxVE/pull/15653)) - - Change sign-in URL to admin URL in affine.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15741](https://github.com/community-scripts/ProxmoxVE/pull/15741)) - - immich: use actual PostgreSQL version for VectorChord package lookup [@mnavon](https://github.com/mnavon) ([#15705](https://github.com/community-scripts/ProxmoxVE/pull/15705)) - - fix storyteller release selection for stable web tags [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15736](https://github.com/community-scripts/ProxmoxVE/pull/15736)) - - Docmost: Fix update procedure [@MickLesk](https://github.com/MickLesk) ([#15732](https://github.com/community-scripts/ProxmoxVE/pull/15732)) - - fix(shinobi): remove obsolete --unsafe-perm npm flag [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15730](https://github.com/community-scripts/ProxmoxVE/pull/15730)) - - - #### πŸ’₯ Breaking Changes - - - reitti: update to v5 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15635](https://github.com/community-scripts/ProxmoxVE/pull/15635)) - -### πŸ’Ύ Core - - - #### 🐞 Bug Fixes - - - fix(build.func): parse script status without jq dependency [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15729](https://github.com/community-scripts/ProxmoxVE/pull/15729)) - - - #### πŸ”§ Refactor - - - tools.func: some improvements (sql injection / command injection / guard) [@MickLesk](https://github.com/MickLesk) ([#15661](https://github.com/community-scripts/ProxmoxVE/pull/15661)) - -## 2026-07-12 - -### πŸ†• New Scripts - - - AFFiNE ([#15690](https://github.com/community-scripts/ProxmoxVE/pull/15690)) - -### πŸš€ Updated Scripts - - - Immich: Bump version to 3.0.2 [@vhsdream](https://github.com/vhsdream) ([#15668](https://github.com/community-scripts/ProxmoxVE/pull/15668)) - -### ❔ Uncategorized - - - fix(immich): correct Python indentation error in ct/immich.sh heredoc patch [@Copilot](https://github.com/Copilot) ([#15723](https://github.com/community-scripts/ProxmoxVE/pull/15723)) - -## 2026-07-11 - -### πŸ†• New Scripts - - - LocalAGI ([#15687](https://github.com/community-scripts/ProxmoxVE/pull/15687)) - -### πŸš€ Updated Scripts - - - fix(adventurelog): allow pnpm build scripts so install/update doesn't abort [@TowyTowy](https://github.com/TowyTowy) ([#15681](https://github.com/community-scripts/ProxmoxVE/pull/15681)) - - - #### 🐞 Bug Fixes - - - fix(fileflows): install .NET 10 ASP.NET Core Runtime to match current release [@TowyTowy](https://github.com/TowyTowy) ([#15702](https://github.com/community-scripts/ProxmoxVE/pull/15702)) - - Fix spacing on VLAN Input Box in haos-vm.sh [@pumrum](https://github.com/pumrum) ([#15696](https://github.com/community-scripts/ProxmoxVE/pull/15696)) - -### πŸ’Ύ Core - - - #### ✨ New Features - - - [tools.func]: Add function to handle deployment via GitLab release tags [@tremor021](https://github.com/tremor021) ([#15641](https://github.com/community-scripts/ProxmoxVE/pull/15641)) - -## 2026-07-10 - -### πŸ†• New Scripts - - - Squid ([#15605](https://github.com/community-scripts/ProxmoxVE/pull/15605)) - -### πŸš€ Updated Scripts - - - #### 🐞 Bug Fixes - - - Adapt to new artifact filename format for pocket id [@wollew](https://github.com/wollew) ([#15689](https://github.com/community-scripts/ProxmoxVE/pull/15689)) - - Fireshare: Fix for install and upgrade to v1.7.3 [@tremor021](https://github.com/tremor021) ([#15673](https://github.com/community-scripts/ProxmoxVE/pull/15673)) - - Endurain: Fix update procedure [@tremor021](https://github.com/tremor021) ([#15674](https://github.com/community-scripts/ProxmoxVE/pull/15674)) \ No newline at end of file + - update-lxc: autoremove and autoclean after apt full-upgrade [@soupy-boy](https://github.com/soupy-boy) ([#15831](https://github.com/community-scripts/ProxmoxVE/pull/15831)) \ No newline at end of file From 6ee17589976f3bfc084f8184c00e835d4cb19345 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 00:03:46 +0000 Subject: [PATCH 06/55] Update CHANGELOG.md (#16539) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 72cd60449..f49e75ad9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -524,6 +524,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
+## 2026-08-16 + ## 2026-08-15 ### πŸ†• New Scripts From 662adaa6d45342f8165c34e906e6c941058cdf07 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 16 Aug 2026 12:22:54 +0200 Subject: [PATCH 07/55] Remove: NocoDB (#16533) --- ct/nocodb.sh | 55 --------------------------------------- install/nocodb-install.sh | 38 --------------------------- 2 files changed, 93 deletions(-) delete mode 100644 ct/nocodb.sh delete mode 100644 install/nocodb-install.sh diff --git a/ct/nocodb.sh b/ct/nocodb.sh deleted file mode 100644 index 2a5263e79..000000000 --- a/ct/nocodb.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.nocodb.com/ | Github: https://github.com/nocodb/nocodb - -APP="NocoDB" -var_tags="${var_tags:-noCode}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - #RELEASE="0.301.1" - if [[ ! -f /etc/systemd/system/nocodb.service ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - #if check_for_gh_release "nocodb" "nocodb/nocodb" "${RELEASE}"; then - if check_for_gh_release "nocodb" "nocodb/nocodb"; then - msg_info "Stopping Service" - systemctl stop nocodb - msg_ok "Stopped Service" - - fetch_and_deploy_gh_release "nocodb" "nocodb/nocodb" "singlefile" "latest" "/opt/nocodb/" "Noco-linux-$(arch_resolve "x64" "arm64")" - - msg_info "Starting Service" - systemctl start nocodb - 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 "${GATEWAY}${BGN}http://${IP}:8080/dashboard${CL}" diff --git a/install/nocodb-install.sh b/install/nocodb-install.sh deleted file mode 100644 index 7ac0a98ce..000000000 --- a/install/nocodb-install.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.nocodb.com/ | Github: https://github.com/nocodb/nocodb - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -fetch_and_deploy_gh_release "nocodb" "nocodb/nocodb" "singlefile" "latest" "/opt/nocodb/" "Noco-linux-$(arch_resolve "x64" "arm64")" - -msg_info "Creating Service" -cat </etc/systemd/system/nocodb.service -[Unit] -Description=nocodb - -[Service] -Type=simple -Restart=always -User=root -WorkingDirectory=/opt/nocodb -ExecStart=/opt/nocodb/./nocodb - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now nocodb -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc From e5cd138dfbae81a8a174e4e9682e58191e6467d2 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 10:23:23 +0000 Subject: [PATCH 08/55] Update CHANGELOG.md (#16541) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f49e75ad9..2e4f19a20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -526,6 +526,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-08-16 +### πŸ—‘οΈ Deleted Scripts + + - Remove: NocoDB [@MickLesk](https://github.com/MickLesk) ([#16533](https://github.com/community-scripts/ProxmoxVE/pull/16533)) + ## 2026-08-15 ### πŸ†• New Scripts From ab88c8decf7ebed31cbe5d7e18cece244c279448 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 16 Aug 2026 12:24:27 +0200 Subject: [PATCH 09/55] Remove: Swizzin (#16535) --- ct/swizzin.sh | 44 -------------------------------------- install/swizzin-install.sh | 30 -------------------------- 2 files changed, 74 deletions(-) delete mode 100644 ct/swizzin.sh delete mode 100644 install/swizzin-install.sh diff --git a/ct/swizzin.sh b/ct/swizzin.sh deleted file mode 100644 index 659b525ad..000000000 --- a/ct/swizzin.sh +++ /dev/null @@ -1,44 +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: EEJoshua -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://swizzin.ltd/ - -APP="Swizzin" -var_tags="${var_tags:-seedbox}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-4096}" -var_disk="${var_disk:-20}" -var_os="${var_os:-debian}" -var_version="${var_version:-12}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if ! command -v sudo box >/dev/null 2>&1; then - msg_error "No ${APP} installation found!" - exit - fi - msg_info "Running 'sudo box update' inside the container" - $STD sudo box update - msg_ok "Updated successfully!" - 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}If installed panel, access through the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/install/swizzin-install.sh b/install/swizzin-install.sh deleted file mode 100644 index 85804f80c..000000000 --- a/install/swizzin-install.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: EEJoshua -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://swizzin.ltd/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_warn "WARNING: This script will run an external installer from a third-party source (https://swizzin.ltd/)." -msg_warn "The following code is NOT maintained or audited by our repository." -msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:" -msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "β†’ https://s5n.sh" -echo -read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM -if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then - msg_error "Aborted by user. No changes have been made." - exit 10 -fi -bash <(curl -fsSL https://s5n.sh) - -motd_ssh -customize -cleanup_lxc From 714d38b01ad55f0939259edbb4a04095a71c0dae Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 10:25:00 +0000 Subject: [PATCH 10/55] Update CHANGELOG.md (#16543) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e4f19a20..7225f722a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -528,7 +528,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸ—‘οΈ Deleted Scripts - - Remove: NocoDB [@MickLesk](https://github.com/MickLesk) ([#16533](https://github.com/community-scripts/ProxmoxVE/pull/16533)) + - Remove: Swizzin [@MickLesk](https://github.com/MickLesk) ([#16535](https://github.com/community-scripts/ProxmoxVE/pull/16535)) +- Remove: NocoDB [@MickLesk](https://github.com/MickLesk) ([#16533](https://github.com/community-scripts/ProxmoxVE/pull/16533)) ## 2026-08-15 From 2c1a9c953516659715a12cf2a063399d4806006e Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 12:48:43 +0200 Subject: [PATCH 11/55] Update .app files (#16542) Co-authored-by: GitHub Actions --- ct/headers/nocodb | 6 ------ ct/headers/swizzin | 6 ------ 2 files changed, 12 deletions(-) delete mode 100644 ct/headers/nocodb delete mode 100644 ct/headers/swizzin diff --git a/ct/headers/nocodb b/ct/headers/nocodb deleted file mode 100644 index e8398b458..000000000 --- a/ct/headers/nocodb +++ /dev/null @@ -1,6 +0,0 @@ - _ __ ____ ____ - / | / /___ _________ / __ \/ __ ) - / |/ / __ \/ ___/ __ \/ / / / __ | - / /| / /_/ / /__/ /_/ / /_/ / /_/ / -/_/ |_/\____/\___/\____/_____/_____/ - diff --git a/ct/headers/swizzin b/ct/headers/swizzin deleted file mode 100644 index 473b027ed..000000000 --- a/ct/headers/swizzin +++ /dev/null @@ -1,6 +0,0 @@ - _____ _ _ - / ___/ __(_)_______ (_)___ - \__ \ | /| / / /_ /_ / / / __ \ - ___/ / |/ |/ / / / /_/ /_/ / / / / -/____/|__/|__/_/ /___/___/_/_/ /_/ - From 12460484819be59663f56c215fc1c111c0de5256 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 16 Aug 2026 13:57:36 +0200 Subject: [PATCH 12/55] Remove: Jeedom (#16536) --- ct/jeedom.sh | 47 ------------------ install/jeedom-install.sh | 102 -------------------------------------- 2 files changed, 149 deletions(-) delete mode 100644 ct/jeedom.sh delete mode 100644 install/jeedom-install.sh diff --git a/ct/jeedom.sh b/ct/jeedom.sh deleted file mode 100644 index b2f3810d9..000000000 --- a/ct/jeedom.sh +++ /dev/null @@ -1,47 +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: Mips2648 -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://jeedom.com/ - -APP="Jeedom" -var_tags="${var_tags:-automation;smarthome}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-16}" -var_os="${var_os:-debian}" -var_version="${var_version:-12}" -var_arm64="${var_arm64:-yes}" -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 /var/www/html/core/config/version ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - msg_info "Updating OS" - $STD apt update - $STD apt -y upgrade - msg_ok "OS updated, you can now update Jeedom from the Web UI." - 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 "${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/install/jeedom-install.sh b/install/jeedom-install.sh deleted file mode 100644 index e4f307444..000000000 --- a/install/jeedom-install.sh +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: Mips2648 -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://jeedom.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing dependencies" -$STD apt install -y \ - lsb-release \ - git -msg_ok "Dependencies installed" - -msg_warn "WARNING: This script will run an external installer from a third-party source (https://github.com/jeedom/)." -msg_warn "The following code is NOT maintained or audited by our repository." -msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:" -msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "β†’ https://raw.githubusercontent.com/jeedom/core/master/install/install.sh" -echo -read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM -if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then - msg_error "Aborted by user. No changes have been made." - exit 10 -fi - -DEFAULT_BRANCH="master" -REPO_URL="https://github.com/jeedom/core.git" - -echo -while true; do - read -rp "${TAB3}Enter branch to use (master, beta, alpha...) (Default: ${DEFAULT_BRANCH}): " BRANCH - BRANCH="${BRANCH:-$DEFAULT_BRANCH}" - - if git ls-remote --heads "$REPO_URL" "refs/heads/$BRANCH" | grep -q .; then - break - else - msg_error "Branch '$BRANCH' does not exist on remote. Please try again." - fi -done - -msg_info "Downloading Jeedom installation script" -cd /tmp -wget -q https://raw.githubusercontent.com/jeedom/core/"${BRANCH}"/install/install.sh -chmod +x install.sh -msg_ok "Installation script downloaded" - -msg_info "Install Jeedom main dependencies, please wait" -$STD ./install.sh -v "$BRANCH" -s 2 -msg_ok "Installed Jeedom main dependencies" - -msg_info "Install Database" -$STD ./install.sh -v "$BRANCH" -s 3 -msg_ok "Database installed" - -msg_info "Install Apache" -$STD ./install.sh -v "$BRANCH" -s 4 -msg_ok "Apache installed" - -msg_info "Install PHP and dependencies" -$STD ./install.sh -v "$BRANCH" -s 5 -msg_ok "PHP installed" - -msg_info "Download Jeedom core" -$STD ./install.sh -v "$BRANCH" -s 6 -msg_ok "Download done" - -msg_info "Database customisation" -$STD ./install.sh -v "$BRANCH" -s 7 -msg_ok "Database customisation done" - -msg_info "Jeedom customisation" -$STD ./install.sh -v "$BRANCH" -s 8 -msg_ok "Jeedom customisation done" - -msg_info "Configuring Jeedom" -$STD ./install.sh -v "$BRANCH" -s 9 -msg_ok "Jeedom configured" - -msg_info "Installing Jeedom" -$STD ./install.sh -v "$BRANCH" -s 10 -msg_ok "Jeedom installed" - -msg_info "Post installation" -$STD ./install.sh -v "$BRANCH" -s 11 -msg_ok "Post installation done" - -msg_info "Check installation" -$STD ./install.sh -v "$BRANCH" -s 12 -msg_ok "Installation checked, everything is successfuly installed. A reboot is recommended." - -motd_ssh -customize - -rm -rf /tmp/install.sh -cleanup_lxc From d0456f5b771fb5bc904da46cf37a3676126aa344 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 11:57:59 +0000 Subject: [PATCH 13/55] Update CHANGELOG.md (#16545) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7225f722a..b188373b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -528,7 +528,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸ—‘οΈ Deleted Scripts - - Remove: Swizzin [@MickLesk](https://github.com/MickLesk) ([#16535](https://github.com/community-scripts/ProxmoxVE/pull/16535)) + - Remove: Jeedom [@MickLesk](https://github.com/MickLesk) ([#16536](https://github.com/community-scripts/ProxmoxVE/pull/16536)) +- Remove: Swizzin [@MickLesk](https://github.com/MickLesk) ([#16535](https://github.com/community-scripts/ProxmoxVE/pull/16535)) - Remove: NocoDB [@MickLesk](https://github.com/MickLesk) ([#16533](https://github.com/community-scripts/ProxmoxVE/pull/16533)) ## 2026-08-15 From a9ff7e6a13752f344c6e8c07ec3fb322dfdfbef3 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 16 Aug 2026 13:58:07 +0200 Subject: [PATCH 14/55] core: skip mount points during backup and clean installs (#16532) * Skip mount points during backup and clean install Prevent accidental deletion or backup of mount points: - In create_backup(), skip paths that are mount points with a warning - In _deploy_source_tarball(), _deploy_unpacked_archive(), and fetch_and_deploy_from_url(), use find with mountpoint pruning to avoid deleting mount point directories during CLEAN_INSTALL * change comments for new variant Update `_deploy_source_tarball` and related helper comments to note that CLEAN_INSTALL wipes target contents including dotfiles while preserving mount points. This improves guidance around backup/restore of config dotfiles during source deployments. --- misc/tools.func | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index e16a37ad3..109e87e5f 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -1336,6 +1336,10 @@ create_backup() { msg_warn "Skipping backup of '${path}' (not found)" continue fi + if mountpoint -q "$path" 2>/dev/null; then + msg_warn "Skipping backup of '${path}' (is a mount point)" + continue + fi dest="${store}/files${path}" if ! mkdir -p "$(dirname "$dest")" || ! cp -a "$path" "$dest"; then msg_error "Backup of '${path}' failed - aborting update" @@ -2524,9 +2528,9 @@ _download_source_tarball() { # directory). Extracts into , then copies the contents # of that top-level directory into . # -# - Honors CLEAN_INSTALL=1 (wipes first, dotfiles included β€” back -# up config dotfiles like .env via create_backup and call restore_backup -# BEFORE any build step that sources them). +# - Honors CLEAN_INSTALL=1 (wipes first, dotfiles included, mount +# points preserved β€” back up config dotfiles like .env via create_backup +# and call restore_backup BEFORE any build step that sources them). # - Does NOT own : the caller creates it and is responsible for its # cleanup (typically via a RETURN trap on its tmpdir). # - cp failures are non-fatal here, matching the previous inline behavior. @@ -2538,7 +2542,7 @@ _deploy_source_tarball() { mkdir -p "$target" if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then - find "${target:?}" -mindepth 1 -delete + find "${target:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -delete fi tar --no-same-owner -xzf "$tarball" -C "$workdir" || { @@ -2564,9 +2568,9 @@ _deploy_source_tarball() { # a single top-level directory, that directory is stripped (its contents land # directly in ); otherwise the archive contents are copied as-is. # -# - Honors CLEAN_INSTALL=1 (wipes first, dotfiles included β€” back -# up config dotfiles like .env via create_backup and call restore_backup -# BEFORE any build step that sources them). +# - Honors CLEAN_INSTALL=1 (wipes first, dotfiles included, mount +# points preserved β€” back up config dotfiles like .env via create_backup +# and call restore_backup BEFORE any build step that sources them). # - Does NOT own : the caller creates it and cleans it up. # # Returns: 0 on success, 65 on unsupported format, 251 on extraction failure, @@ -2627,7 +2631,7 @@ _deploy_unpacked_archive() { # was truncated, the archive was unreadable, or it unpacked to nothing. mkdir -p "$target" if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then - find "${target:?}" -mindepth 1 -delete + find "${target:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -delete fi if ! cp -r "$source_dir"/* "$target/"; then @@ -9368,7 +9372,7 @@ fetch_and_deploy_from_url() { mkdir -p "$directory" if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then - find "${directory:?}" -mindepth 1 -delete + find "${directory:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -delete fi local unpack_tmp From 74d5fc67d5da7c092fcd774f387c914c9775f9a4 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 11:58:23 +0000 Subject: [PATCH 15/55] Update CHANGELOG.md (#16547) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b188373b1..aefb0ca78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -532,6 +532,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - Remove: Swizzin [@MickLesk](https://github.com/MickLesk) ([#16535](https://github.com/community-scripts/ProxmoxVE/pull/16535)) - Remove: NocoDB [@MickLesk](https://github.com/MickLesk) ([#16533](https://github.com/community-scripts/ProxmoxVE/pull/16533)) +### πŸ’Ύ Core + + - #### πŸ”§ Refactor + + - core: skip mount points during backup and clean installs [@MickLesk](https://github.com/MickLesk) ([#16532](https://github.com/community-scripts/ProxmoxVE/pull/16532)) + ## 2026-08-15 ### πŸ†• New Scripts From cb09223b377872628822812de95cde33348746a9 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 16 Aug 2026 13:59:03 +0200 Subject: [PATCH 17/55] networkoptimizer: also build uwnspeedtest binary for server arch (#16531) --- ct/networkoptimizer.sh | 1 + install/networkoptimizer-install.sh | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ct/networkoptimizer.sh b/ct/networkoptimizer.sh index f52e27b00..5cefaaf09 100644 --- a/ct/networkoptimizer.sh +++ b/ct/networkoptimizer.sh @@ -51,6 +51,7 @@ function update_script() { mkdir -p /opt/networkoptimizer/publish/tools cd /opt/networkoptimizer/src/uwnspeedtest CGO_ENABLED=0 GOOS=linux GOARCH=arm64 $STD go build -trimpath -ldflags "-s -w" -o /opt/networkoptimizer/publish/tools/uwnspeedtest-linux-arm64 . + [[ "$(arch_resolve)" != "arm64" ]] && CGO_ENABLED=0 GOOS=linux GOARCH="$(arch_resolve)" $STD go build -trimpath -ldflags "-s -w" -o "/opt/networkoptimizer/publish/tools/uwnspeedtest-linux-$(arch_resolve)" . msg_ok "Rebuilt NetworkOptimizer" msg_info "Starting Service" diff --git a/install/networkoptimizer-install.sh b/install/networkoptimizer-install.sh index 8f98c672e..88905f29a 100644 --- a/install/networkoptimizer-install.sh +++ b/install/networkoptimizer-install.sh @@ -42,11 +42,12 @@ $STD dotnet publish src/NetworkOptimizer.Web -c Release -r "$RID" --self-contain chmod +x /opt/networkoptimizer/publish/NetworkOptimizer.Web msg_ok "Built NetworkOptimizer" -msg_info "Building Gateway Speed Test Binary" +msg_info "Building Speed Test Binaries" mkdir -p /opt/networkoptimizer/publish/tools cd /opt/networkoptimizer/src/uwnspeedtest CGO_ENABLED=0 GOOS=linux GOARCH=arm64 $STD go build -trimpath -ldflags "-s -w" -o /opt/networkoptimizer/publish/tools/uwnspeedtest-linux-arm64 . -msg_ok "Built Gateway Speed Test Binary" +[[ "$(arch_resolve)" != "arm64" ]] && CGO_ENABLED=0 GOOS=linux GOARCH="$(arch_resolve)" $STD go build -trimpath -ldflags "-s -w" -o "/opt/networkoptimizer/publish/tools/uwnspeedtest-linux-$(arch_resolve)" . +msg_ok "Built Speed Test Binaries" msg_info "Configuring NetworkOptimizer" cat </opt/networkoptimizer/networkoptimizer.env From 756f160eb61b55cd199ee530c9ceae3f28ac6b4d Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 11:59:31 +0000 Subject: [PATCH 18/55] Update CHANGELOG.md (#16549) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aefb0ca78..67de0c759 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -526,6 +526,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-08-16 +### πŸš€ Updated Scripts + + - #### πŸ”§ Refactor + + - networkoptimizer: also build uwnspeedtest binary for server arch [@MickLesk](https://github.com/MickLesk) ([#16531](https://github.com/community-scripts/ProxmoxVE/pull/16531)) + ### πŸ—‘οΈ Deleted Scripts - Remove: Jeedom [@MickLesk](https://github.com/MickLesk) ([#16536](https://github.com/community-scripts/ProxmoxVE/pull/16536)) From 4ccc82e0a47841b6273c90ac53b8e1e536a4a333 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 14:58:42 +0200 Subject: [PATCH 19/55] Update .app files (#16546) Co-authored-by: GitHub Actions --- ct/headers/jeedom | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 ct/headers/jeedom diff --git a/ct/headers/jeedom b/ct/headers/jeedom deleted file mode 100644 index 47ff4dfb6..000000000 --- a/ct/headers/jeedom +++ /dev/null @@ -1,6 +0,0 @@ - __ __ - / /__ ___ ____/ /___ ____ ___ - __ / / _ \/ _ \/ __ / __ \/ __ `__ \ -/ /_/ / __/ __/ /_/ / /_/ / / / / / / -\____/\___/\___/\__,_/\____/_/ /_/ /_/ - From 85a621993d3e1ad08287e327cac164becbdda689 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 16 Aug 2026 20:28:16 +0200 Subject: [PATCH 20/55] wallos: run db migration after apache reload on update (#16528) --- ct/wallos.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ct/wallos.sh b/ct/wallos.sh index b1b193ea3..4ecd57ce8 100644 --- a/ct/wallos.sh +++ b/ct/wallos.sh @@ -48,12 +48,15 @@ function update_script() { chown -R www-data:www-data /opt/wallos chmod -R 755 /opt/wallos mkdir -p /var/log/cron - $STD curl http://localhost/endpoints/db/migrate.php msg_ok "Configured Wallos" msg_info "Reload Apache2" systemctl reload apache2 msg_ok "Apache2 Reloaded" + + msg_info "Running Database Migration" + $STD curl http://localhost/endpoints/db/migrate.php + msg_ok "Ran Database Migration" msg_ok "Updated successfully!" fi exit From fa8e6d5bb77436ace5f6997bd3c5ff24182ccd19 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 16 Aug 2026 20:28:36 +0200 Subject: [PATCH 21/55] tracktor: build with pnpm using upstream's frozen lockfile (#16530) --- ct/tracktor.sh | 7 +++---- install/tracktor-install.sh | 6 +++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/ct/tracktor.sh b/ct/tracktor.sh index 5c8b3991b..25a8b5950 100644 --- a/ct/tracktor.sh +++ b/ct/tracktor.sh @@ -41,7 +41,6 @@ function update_script() { if ! grep -qxF 'BODY_SIZE_LIMIT=Infinity' /opt/tracktor.env; then rm /opt/tracktor.env cat </opt/tracktor.env -cat </opt/tracktor.env NODE_ENV=production # Set this to the path of the database file. Default - ./tracktor.db DB_PATH=/opt/tracktor-data/tracktor.db @@ -67,13 +66,13 @@ EOF fi msg_ok "Corrected Services" - NODE_VERSION="24" setup_nodejs + NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor" msg_info "Updating tracktor" cd /opt/tracktor - $STD npm install - $STD npm run build + $STD pnpm install --frozen-lockfile + $STD pnpm run build msg_ok "Updated tracktor" msg_info "Starting Service" diff --git a/install/tracktor-install.sh b/install/tracktor-install.sh index e0fdf274c..9096812fa 100644 --- a/install/tracktor-install.sh +++ b/install/tracktor-install.sh @@ -13,13 +13,13 @@ setting_up_container network_check update_os -NODE_VERSION="24" setup_nodejs +NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor" msg_info "Configuring Tracktor" cd /opt/tracktor -$STD npm install -$STD npm run build +$STD pnpm install --frozen-lockfile +$STD pnpm run build mkdir -p /opt/tracktor-data/{uploads,logs} cat </opt/tracktor.env NODE_ENV=production From d61764878cb573049c02bf49f61ecc161fe73f99 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 18:28:40 +0000 Subject: [PATCH 22/55] Update CHANGELOG.md (#16557) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 67de0c759..626f8d506 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -528,6 +528,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸš€ Updated Scripts + - #### 🐞 Bug Fixes + + - wallos: run db migration after apache reload on update [@MickLesk](https://github.com/MickLesk) ([#16528](https://github.com/community-scripts/ProxmoxVE/pull/16528)) + - #### πŸ”§ Refactor - networkoptimizer: also build uwnspeedtest binary for server arch [@MickLesk](https://github.com/MickLesk) ([#16531](https://github.com/community-scripts/ProxmoxVE/pull/16531)) From fc61dddffd8c8607463d5addfd388c3454fa5c42 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 18:29:05 +0000 Subject: [PATCH 23/55] Update CHANGELOG.md (#16558) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 626f8d506..f3146a099 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -530,6 +530,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - tracktor: build with pnpm using upstream's frozen lockfile [@MickLesk](https://github.com/MickLesk) ([#16530](https://github.com/community-scripts/ProxmoxVE/pull/16530)) - wallos: run db migration after apache reload on update [@MickLesk](https://github.com/MickLesk) ([#16528](https://github.com/community-scripts/ProxmoxVE/pull/16528)) - #### πŸ”§ Refactor From 3ac1f1dfd4da6f11a518f014fb8b66853882be9a Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 16 Aug 2026 20:34:55 +0200 Subject: [PATCH 24/55] cronmaster: back up scripts, data and snippets folders on update (#16529) --- tools/addon/cronmaster.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/addon/cronmaster.sh b/tools/addon/cronmaster.sh index 2ab4cbb1a..7d8e30747 100644 --- a/tools/addon/cronmaster.sh +++ b/tools/addon/cronmaster.sh @@ -61,7 +61,7 @@ function update() { msg_ok "Stopped service" BACKUP_DIR="/opt/cronmaster_backup" - create_backup "$CONFIG_PATH" + create_backup "$CONFIG_PATH" "$INSTALL_PATH/scripts" "$INSTALL_PATH/data" "$INSTALL_PATH/snippets" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cronmaster" "fccview/cronmaster" "prebuild" "latest" "$INSTALL_PATH" "cronmaster_*_prebuild.tar.gz" From 4255711f06566fd77e619c94a60edc6c37a18255 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 18:35:23 +0000 Subject: [PATCH 25/55] Update CHANGELOG.md (#16559) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3146a099..bbd76f1ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -549,6 +549,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - core: skip mount points during backup and clean installs [@MickLesk](https://github.com/MickLesk) ([#16532](https://github.com/community-scripts/ProxmoxVE/pull/16532)) +### 🧰 Tools + + - #### 🐞 Bug Fixes + + - cronmaster: back up scripts, data and snippets folders on update [@MickLesk](https://github.com/MickLesk) ([#16529](https://github.com/community-scripts/ProxmoxVE/pull/16529)) + ## 2026-08-15 ### πŸ†• New Scripts From abc9e569ad3a18e178b1fc2ad0549ea608570743 Mon Sep 17 00:00:00 2001 From: Tobias <96661824+CrazyWolf13@users.noreply.github.com> Date: Sun, 16 Aug 2026 20:37:12 +0200 Subject: [PATCH 26/55] tubearchivist: fix: enhance update script (#16521) --- ct/tubearchivist.sh | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/ct/tubearchivist.sh b/ct/tubearchivist.sh index 099e42373..3e195a13e 100644 --- a/ct/tubearchivist.sh +++ b/ct/tubearchivist.sh @@ -35,7 +35,10 @@ function update_script() { systemctl stop tubearchivist tubearchivist-celery tubearchivist-beat msg_ok "Stopped Services" - create_backup /opt/tubearchivist/.env + create_backup \ + /opt/tubearchivist/.env \ + /opt/tubearchivist/cache \ + /opt/tubearchivist/backend/run.sh CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tubearchivist" "tubearchivist/tubearchivist" "tarball" @@ -48,6 +51,8 @@ function update_script() { mkdir -p /opt/tubearchivist/backend/static cp -r /opt/tubearchivist/frontend/dist/* /opt/tubearchivist/backend/static/ cp /opt/tubearchivist/docker_assets/backend_start.py /opt/tubearchivist/backend/ + rm -rf /opt/tubearchivist/.venv + $STD uv venv /opt/tubearchivist/.venv --python 3.13 $STD uv pip install --python /opt/tubearchivist/.venv/bin/python -r /opt/tubearchivist/backend/requirements.txt if [[ -f /opt/tubearchivist/backend/requirements.plugins.txt ]]; then mkdir -p /opt/yt_plugins/bgutil @@ -59,8 +64,14 @@ function update_script() { sed -i 's|^TA_APP_DIR=/opt/tubearchivist$|TA_APP_DIR=/opt/tubearchivist/backend|' /opt/tubearchivist/.env sed -i 's|^TA_CACHE_DIR=/opt/tubearchivist/cache$|TA_CACHE_DIR=/cache|' /opt/tubearchivist/.env sed -i 's|^TA_MEDIA_DIR=/opt/tubearchivist/media$|TA_MEDIA_DIR=/youtube|' /opt/tubearchivist/.env - ln -sf /opt/tubearchivist/cache /cache - ln -sf /opt/tubearchivist/media /youtube + ln -sfn /opt/tubearchivist/cache /cache + # /youtube may already be a user-managed Proxmox bind mount. Only create the symlink if nothing is there + if [[ ! -e /youtube ]]; then + mkdir -p /opt/tubearchivist/media + ln -sfn /opt/tubearchivist/media /youtube + elif ! mountpoint -q /youtube && [[ ! -L /youtube ]]; then + msg_error "/youtube exists but is neither a mount nor a symlink - check manually" + fi ln -sf /opt/tubearchivist/.env /opt/tubearchivist/backend/.env msg_ok "Restored Configuration" From 92ec08941026085bee64550704472405f335fe84 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 18:37:34 +0000 Subject: [PATCH 27/55] Update CHANGELOG.md (#16560) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbd76f1ff..c7a1552bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -530,6 +530,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - tubearchivist: fix: enhance update script [@CrazyWolf13](https://github.com/CrazyWolf13) ([#16521](https://github.com/community-scripts/ProxmoxVE/pull/16521)) - tracktor: build with pnpm using upstream's frozen lockfile [@MickLesk](https://github.com/MickLesk) ([#16530](https://github.com/community-scripts/ProxmoxVE/pull/16530)) - wallos: run db migration after apache reload on update [@MickLesk](https://github.com/MickLesk) ([#16528](https://github.com/community-scripts/ProxmoxVE/pull/16528)) From 05fdd15406209056957fe0536474ca11c8927109 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sun, 16 Aug 2026 14:43:14 -0400 Subject: [PATCH 28/55] [FIX] Shelfmark: internal bypasser never starts under the gevent worker (#16495) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Shelfmark: fix internal bypasser under the gevent worker The internal captcha bypasser never worked on this install. Shelfmark is served by gunicorn's GeventWebSocketWorker, and DOCKERMODE controls whether the bypass browser runs in a helper process "isolated from gunicorn/gevent" (upstream's _get_via_subprocess). With DOCKERMODE=false the SeleniumBase CDP browser starts inside the monkey-patched loop, its asyncio websocket never connects, and every bypass dies at "Pure CDP browser startup timed out after 45s" β€” searches then burn their whole retry budget and surface as "mirrors are blocked". Set DOCKERMODE=true for deployment type 1, and migrate existing installs on update. The flag is misnamed upstream: it gates gevent isolation, not Docker. Also drop chromium.service. Nothing in Shelfmark connects to port 9222 β€” the bypasser launches its own browser on a random port β€” so it only consumed ~226MB. With DOCKERMODE enabled it is additionally killed by Shelfmark's orphan-process reaper (pkill -f chromium) on every bypass and respawned by systemd, since an LXC shares its PID namespace. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_012Ln3yVj3sWHG2c6T78W1we * Shelfmark: address review β€” one check, drop comments Collapse the chromium.service removal and the DOCKERMODE migration into the single internal-bypasser check, as every affected install has both. Guard the disable so a second update run does not fail on the removed unit, matching esphome.sh. Drop the explanatory comments. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_012Ln3yVj3sWHG2c6T78W1we --------- Co-authored-by: Claude Opus 5 (1M context) --- ct/shelfmark.sh | 12 ++++++++++-- install/shelfmark-install.sh | 17 +---------------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/ct/shelfmark.sh b/ct/shelfmark.sh index e0ecbf45d..0461e8460 100644 --- a/ct/shelfmark.sh +++ b/ct/shelfmark.sh @@ -36,9 +36,18 @@ function update_script() { if check_for_gh_release "shelfmark" "calibrain/shelfmark"; then msg_info "Stopping Service(s)" systemctl stop shelfmark - [[ -f /etc/systemd/system/chromium.service ]] && systemctl stop chromium msg_ok "Stopped Service(s)" + if [[ $(sed -n '/_BYPASS=/s/[^=]*=//p' /etc/shelfmark/.env) == "true" ]] && + [[ $(sed -n '/BYPASSER=/s/[^=]*=//p' /etc/shelfmark/.env) == "false" ]]; then + msg_info "Updating internal bypasser configuration" + systemctl disable -q --now chromium 2>/dev/null || true + rm -f /etc/systemd/system/chromium.service + systemctl daemon-reload + sed -i '/DOCKERMODE=/s/false/true/' /etc/shelfmark/.env + msg_ok "Updated internal bypasser configuration" + fi + [[ -f /etc/systemd/system/flaresolverr.service ]] && if check_for_gh_release "flaresolverr" "Flaresolverr/Flaresolverr"; then msg_info "Stopping FlareSolverr service" systemctl stop flaresolverr @@ -79,7 +88,6 @@ function update_script() { msg_info "Starting Service(s)" systemctl start shelfmark - [[ -f /etc/systemd/system/chromium.service ]] && systemctl start chromium msg_ok "Started Service(s)" msg_ok "Updated successfully!" fi diff --git a/install/shelfmark-install.sh b/install/shelfmark-install.sh index c477caca3..308f97946 100644 --- a/install/shelfmark-install.sh +++ b/install/shelfmark-install.sh @@ -116,6 +116,7 @@ else chromium-common \ chromium \ python3-tk + sed -i '/DOCKERMODE=/s/false/true/' /etc/shelfmark/.env msg_ok "Installed internal bypasser dependencies" fi @@ -165,22 +166,6 @@ KillMode=mixed WantedBy=multi-user.target EOF -if [[ "$DEPLOYMENT_TYPE" == "1" ]]; then - cat </etc/systemd/system/chromium.service -[Unit] -Description=Chromium Headless Browser -After=network.target - -[Service] -User=root -ExecStart=/usr/bin/chromium --headless --no-sandbox --disable-gpu --disable-dev-shm-usage --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222 --hide-scrollbars -Restart=always - -[Install] -WantedBy=multi-user.target -EOF - systemctl enable -q --now chromium -fi if [[ "$DEPLOYMENT_TYPE" == "2" ]]; then cat </etc/systemd/system/flaresolverr.service [Unit] From 4f04894a19602752dd296f18430ea39a86e8a6d3 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 18:43:38 +0000 Subject: [PATCH 29/55] Update CHANGELOG.md (#16564) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7a1552bc..a73d0e6be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -530,6 +530,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - [FIX] Shelfmark: internal bypasser never starts under the gevent worker [@robbiet480](https://github.com/robbiet480) ([#16495](https://github.com/community-scripts/ProxmoxVE/pull/16495)) - tubearchivist: fix: enhance update script [@CrazyWolf13](https://github.com/CrazyWolf13) ([#16521](https://github.com/community-scripts/ProxmoxVE/pull/16521)) - tracktor: build with pnpm using upstream's frozen lockfile [@MickLesk](https://github.com/MickLesk) ([#16530](https://github.com/community-scripts/ProxmoxVE/pull/16530)) - wallos: run db migration after apache reload on update [@MickLesk](https://github.com/MickLesk) ([#16528](https://github.com/community-scripts/ProxmoxVE/pull/16528)) From b19dad180918365c57aedac5d2f1ad48717426be Mon Sep 17 00:00:00 2001 From: MickLesk Date: Sun, 16 Aug 2026 22:51:27 +0200 Subject: [PATCH 30/55] tools.func: fix invalid find -prune/-delete combination breaking CLEAN_INSTALL --- misc/tools.func | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index 109e87e5f..bfe6cba96 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -2542,7 +2542,7 @@ _deploy_source_tarball() { mkdir -p "$target" if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then - find "${target:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -delete + find "${target:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -print0 | xargs -0 rm -rf -- fi tar --no-same-owner -xzf "$tarball" -C "$workdir" || { @@ -2631,7 +2631,7 @@ _deploy_unpacked_archive() { # was truncated, the archive was unreadable, or it unpacked to nothing. mkdir -p "$target" if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then - find "${target:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -delete + find "${target:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -print0 | xargs -0 rm -rf -- fi if ! cp -r "$source_dir"/* "$target/"; then @@ -9372,7 +9372,7 @@ fetch_and_deploy_from_url() { mkdir -p "$directory" if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then - find "${directory:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -delete + find "${directory:?}" -mindepth 1 \( -type d -exec mountpoint -q {} \; -prune \) -o -print0 | xargs -0 rm -rf -- fi local unpack_tmp From 22e2a6d73eac8aed040f0fa9c9e94dfc9c82020e Mon Sep 17 00:00:00 2001 From: Tim Moore <1232390+angusmaul@users.noreply.github.com> Date: Mon, 17 Aug 2026 17:23:31 +1000 Subject: [PATCH 31/55] fix romm: deploy EmulatorJS and Ruffle after the frontend build (#16571) --- install/romm-install.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/install/romm-install.sh b/install/romm-install.sh index a9ba78ccd..d55faf209 100644 --- a/install/romm-install.sh +++ b/install/romm-install.sh @@ -136,8 +136,6 @@ else fi fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball" -fetch_and_deploy_gh_release "ruffle" "ruffle-rs/ruffle" "prebuild" "latest" "/opt/romm/frontend/dist/assets/ruffle" "ruffle-*-web-selfhosted.zip" -fetch_and_deploy_gh_release "EmulatorJS" "EmulatorJS/EmulatorJS" "prebuild" "v4.2.3" "/opt/romm/frontend/dist/assets/emulatorjs" "4.2.3.7z" msg_info "Creating environment file" sed -i 's/^supervised no/supervised systemd/' /etc/redis/redis.conf @@ -214,6 +212,9 @@ ln -sfn "$ROMM_BASE"/resources /opt/romm/frontend/dist/assets/romm/resources ln -sfn "$ROMM_BASE"/assets /opt/romm/frontend/dist/assets/romm/assets msg_ok "Set up RomM Frontend" +fetch_and_deploy_gh_release "ruffle" "ruffle-rs/ruffle" "prebuild" "latest" "/opt/romm/frontend/dist/assets/ruffle" "ruffle-*-web-selfhosted.zip" +fetch_and_deploy_gh_release "EmulatorJS" "EmulatorJS/EmulatorJS" "prebuild" "v4.2.3" "/opt/romm/frontend/dist/assets/emulatorjs" "4.2.3.7z" + msg_info "Configuring Angie" cat <<'EOF' >/etc/angie/http.d/romm.conf upstream romm_backend { From bb7721b199e67b6a823bc4201c13996e9b3c0baa Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 07:23:58 +0000 Subject: [PATCH 32/55] Update CHANGELOG.md (#16573) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a73d0e6be..ebefda3f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -524,6 +524,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-08-17 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - fix romm: deploy EmulatorJS and Ruffle after the frontend build [@angusmaul](https://github.com/angusmaul) ([#16571](https://github.com/community-scripts/ProxmoxVE/pull/16571)) + ## 2026-08-16 ### πŸš€ Updated Scripts From 4ec4bb26edb0432e6abc9f423dc077a5f51ebb8f Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 17 Aug 2026 11:22:53 +0200 Subject: [PATCH 33/55] kometa: add git, needed by requirements.txt's git dependency (#16562) --- ct/kometa.sh | 1 + install/kometa-install.sh | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/ct/kometa.sh b/ct/kometa.sh index 965076f8c..4cb36e25c 100644 --- a/ct/kometa.sh +++ b/ct/kometa.sh @@ -39,6 +39,7 @@ function update_script() { cp /opt/kometa/config/config.yml /opt msg_ok "Backup completed" + ensure_dependencies git PYTHON_VERSION="3.13" setup_uv fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa" "tarball" diff --git a/install/kometa-install.sh b/install/kometa-install.sh index b0b2e2e96..0b2e90578 100644 --- a/install/kometa-install.sh +++ b/install/kometa-install.sh @@ -13,6 +13,10 @@ setting_up_container network_check update_os +msg_info "Installing Dependencies" +$STD apt install -y git +msg_ok "Installed Dependencies" + PYTHON_VERSION="3.13" setup_uv fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa" "tarball" From b559bcef39290ba032f34458738e007887efbb06 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 17 Aug 2026 11:23:12 +0200 Subject: [PATCH 34/55] Pin ownfoil release to version 2.3.0 (#16574) --- ct/ownfoil.sh | 6 +++--- install/ownfoil-install.sh | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ct/ownfoil.sh b/ct/ownfoil.sh index 8a1750bfb..ec0182898 100644 --- a/ct/ownfoil.sh +++ b/ct/ownfoil.sh @@ -29,15 +29,15 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - - if check_for_gh_release "ownfoil" "a1ex4/ownfoil"; then + RELEASE="2.3.0" + if check_for_gh_release "ownfoil" "a1ex4/ownfoil" "${RELEASE}" "pinned until 2.4.0 (coming soon) is tested, possible Breaking Changes."; then msg_info "Stopping Service" systemctl stop ownfoil msg_ok "Stopped Service" create_backup /opt/ownfoil/app/config - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball" "${RELEASE}" restore_backup diff --git a/install/ownfoil-install.sh b/install/ownfoil-install.sh index 6717cfbe4..202c1f174 100644 --- a/install/ownfoil-install.sh +++ b/install/ownfoil-install.sh @@ -18,7 +18,7 @@ $STD apt install -y git msg_ok "Installed Dependencies" setup_uv -fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball" +fetch_and_deploy_gh_release "ownfoil" "a1ex4/ownfoil" "tarball" "2.3.0" msg_info "Setting up Ownfoil" cd /opt/ownfoil From bdbe5d4043e2a3d1da438b8fb946fb4304930fe0 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 09:23:21 +0000 Subject: [PATCH 35/55] Update CHANGELOG.md (#16575) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebefda3f5..bcec7bf0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -530,6 +530,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - kometa: add git, needed by requirements.txt's git dependency [@MickLesk](https://github.com/MickLesk) ([#16562](https://github.com/community-scripts/ProxmoxVE/pull/16562)) - fix romm: deploy EmulatorJS and Ruffle after the frontend build [@angusmaul](https://github.com/angusmaul) ([#16571](https://github.com/community-scripts/ProxmoxVE/pull/16571)) ## 2026-08-16 From b3531bb0a8769592ae681fb6bbc08ca20faa25be Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 09:23:46 +0000 Subject: [PATCH 36/55] Update CHANGELOG.md (#16576) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bcec7bf0c..442c067ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -530,6 +530,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Pin ownfoil release to version 2.3.0 [@MickLesk](https://github.com/MickLesk) ([#16574](https://github.com/community-scripts/ProxmoxVE/pull/16574)) - kometa: add git, needed by requirements.txt's git dependency [@MickLesk](https://github.com/MickLesk) ([#16562](https://github.com/community-scripts/ProxmoxVE/pull/16562)) - fix romm: deploy EmulatorJS and Ruffle after the frontend build [@angusmaul](https://github.com/angusmaul) ([#16571](https://github.com/community-scripts/ProxmoxVE/pull/16571)) From 7d7db6dd337e0f2749ee4833b0e0a27f3cf2338e Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 17 Aug 2026 11:26:13 +0200 Subject: [PATCH 37/55] keycloak: remove invalid ExecStop, kc.sh has no stop subcommand (#16563) --- ct/keycloak.sh | 8 ++++++++ install/keycloak-install.sh | 1 - 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ct/keycloak.sh b/ct/keycloak.sh index be953f9e8..691af83ad 100644 --- a/ct/keycloak.sh +++ b/ct/keycloak.sh @@ -28,6 +28,14 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi + + if grep -q '^ExecStop=/opt/keycloak/bin/kc.sh stop$' /etc/systemd/system/keycloak.service 2>/dev/null; then + msg_info "Correcting Service" + sed -i '/^ExecStop=\/opt\/keycloak\/bin\/kc.sh stop$/d' /etc/systemd/system/keycloak.service + systemctl daemon-reload + msg_ok "Corrected Service" + fi + if check_for_gh_release "keycloak_app" "keycloak/keycloak"; then msg_info "Stopping Service" systemctl stop keycloak diff --git a/install/keycloak-install.sh b/install/keycloak-install.sh index b36a62c3f..ce0a1cfd4 100644 --- a/install/keycloak-install.sh +++ b/install/keycloak-install.sh @@ -39,7 +39,6 @@ Type=idle User=root WorkingDirectory=/opt/keycloak ExecStart=/opt/keycloak/bin/kc.sh start -ExecStop=/opt/keycloak/bin/kc.sh stop Restart=always RestartSec=3 Environment="JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-$(arch_resolve)" From ee06ad86f1b508cbdda7ea66c096986ec000102d Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 17 Aug 2026 11:26:34 +0200 Subject: [PATCH 38/55] teslamate: use precompiled Elixir (#16561) --- ct/teslamate.sh | 10 ++++++++++ install/teslamate-install.sh | 6 +++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ct/teslamate.sh b/ct/teslamate.sh index 57da73241..443086726 100644 --- a/ct/teslamate.sh +++ b/ct/teslamate.sh @@ -35,6 +35,16 @@ function update_script() { systemctl stop teslamate msg_ok "Stopped Service" + if [[ ! -d /opt/elixir ]]; then + msg_info "Migrating to newer Elixir (required by TeslaMate)" + $STD apt remove -y elixir + fetch_and_deploy_gh_release "elixir" "elixir-lang/elixir" "prebuild" "latest" "/opt/elixir" "elixir-otp-27.zip" + for bin in elixir elixirc iex mix; do + ln -sf "/opt/elixir/bin/$bin" "/usr/local/bin/$bin" + done + msg_ok "Migrated to newer Elixir" + fi + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "teslamate" "teslamate-org/teslamate" "tarball" msg_info "Building TeslaMate (Patience)" diff --git a/install/teslamate-install.sh b/install/teslamate-install.sh index 6a7e4b84d..bc5f221e0 100644 --- a/install/teslamate-install.sh +++ b/install/teslamate-install.sh @@ -19,7 +19,6 @@ $STD apt install -y \ erlang \ erlang-dev \ erlang-syntax-tools \ - elixir \ mosquitto \ locales sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen @@ -27,6 +26,11 @@ $STD locale-gen systemctl enable -q --now mosquitto msg_ok "Installed Dependencies" +fetch_and_deploy_gh_release "elixir" "elixir-lang/elixir" "prebuild" "latest" "/opt/elixir" "elixir-otp-27.zip" +for bin in elixir elixirc iex mix; do + ln -sf "/opt/elixir/bin/$bin" "/usr/local/bin/$bin" +done + PG_VERSION="17" setup_postgresql PG_DB_NAME="teslamate" PG_DB_USER="teslamate" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db NODE_VERSION="22" setup_nodejs From 9e6d1c1c714a68abad5fd6e1e8f118fbe5080e83 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 09:26:38 +0000 Subject: [PATCH 39/55] Update CHANGELOG.md (#16577) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 442c067ed..4430113c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -530,6 +530,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - keycloak: remove invalid ExecStop, kc.sh has no stop subcommand [@MickLesk](https://github.com/MickLesk) ([#16563](https://github.com/community-scripts/ProxmoxVE/pull/16563)) - Pin ownfoil release to version 2.3.0 [@MickLesk](https://github.com/MickLesk) ([#16574](https://github.com/community-scripts/ProxmoxVE/pull/16574)) - kometa: add git, needed by requirements.txt's git dependency [@MickLesk](https://github.com/MickLesk) ([#16562](https://github.com/community-scripts/ProxmoxVE/pull/16562)) - fix romm: deploy EmulatorJS and Ruffle after the frontend build [@angusmaul](https://github.com/angusmaul) ([#16571](https://github.com/community-scripts/ProxmoxVE/pull/16571)) From 8490cd606daa198b9cae2a2b15c7a889f6c69004 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 09:27:02 +0000 Subject: [PATCH 40/55] Update CHANGELOG.md (#16578) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4430113c7..61828c5eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -535,6 +535,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - kometa: add git, needed by requirements.txt's git dependency [@MickLesk](https://github.com/MickLesk) ([#16562](https://github.com/community-scripts/ProxmoxVE/pull/16562)) - fix romm: deploy EmulatorJS and Ruffle after the frontend build [@angusmaul](https://github.com/angusmaul) ([#16571](https://github.com/community-scripts/ProxmoxVE/pull/16571)) + - #### πŸ”§ Refactor + + - teslamate: use precompiled Elixir [@MickLesk](https://github.com/MickLesk) ([#16561](https://github.com/community-scripts/ProxmoxVE/pull/16561)) + ## 2026-08-16 ### πŸš€ Updated Scripts From e683dd92e740f9a398d415091b20d5aab10c3c31 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 17 Aug 2026 11:27:25 +0200 Subject: [PATCH 41/55] patchmon: fetch only SCAP datastream XMLs (#16565) * patchmon: fetch only SCAP datastream XMLs, not the full 2.1GB content archive * Increase default disk size from 4GB to 8GB --- ct/patchmon.sh | 10 +++++++++- install/patchmon-install.sh | 8 +++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/ct/patchmon.sh b/ct/patchmon.sh index cebc1b017..f0401d83a 100644 --- a/ct/patchmon.sh +++ b/ct/patchmon.sh @@ -76,7 +76,15 @@ EOF CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "singlefile" "latest" "/opt/patchmon" "patchmon-server-linux-$(arch_resolve)" mv /opt/patchmon/PatchMon /opt/patchmon/patchmon-server - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ssg-content" "ComplianceAsCode/content" "prebuild" "latest" "/opt/patchmon/ssg-content" "scap-security-guide-*.tar.gz" + + msg_info "Updating SCAP Content" + RELEASE=$(get_latest_github_release "ComplianceAsCode/content") + curl_with_retry "https://github.com/ComplianceAsCode/content/releases/download/v${RELEASE}/scap-security-guide-${RELEASE}.tar.gz" "/tmp/ssg.tar.gz" + mkdir -p /opt/patchmon/ssg-content + find /opt/patchmon/ssg-content -mindepth 1 -delete + tar -xzf /tmp/ssg.tar.gz -C /opt/patchmon/ssg-content --strip-components=1 --wildcards '*/ssg-*-ds.xml' + rm -f /tmp/ssg.tar.gz + msg_ok "Updated SCAP Content" restore_backup diff --git a/install/patchmon-install.sh b/install/patchmon-install.sh index 68bf8a82d..b3627274d 100644 --- a/install/patchmon-install.sh +++ b/install/patchmon-install.sh @@ -86,7 +86,13 @@ for arch in "${AGENT_NAME[@]}"; do done msg_ok "Fetched PatchMon agent binaries" -fetch_and_deploy_gh_release "ssg-content" "ComplianceAsCode/content" "prebuild" "latest" "/opt/patchmon/ssg-content" "scap-security-guide-*.tar.gz" +msg_info "Fetching SCAP Content" +RELEASE=$(get_latest_github_release "ComplianceAsCode/content") +curl_with_retry "https://github.com/ComplianceAsCode/content/releases/download/v${RELEASE}/scap-security-guide-${RELEASE}.tar.gz" "/tmp/ssg.tar.gz" +mkdir -p /opt/patchmon/ssg-content +tar -xzf /tmp/ssg.tar.gz -C /opt/patchmon/ssg-content --strip-components=1 --wildcards '*/ssg-*-ds.xml' +rm -f /tmp/ssg.tar.gz +msg_ok "Fetched SCAP Content" msg_info "Creating service" cat </etc/systemd/system/patchmon-server.service From f0b236ec770dbcebbf7ee0755dd305f6b2c2676f Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 09:27:52 +0000 Subject: [PATCH 42/55] Update CHANGELOG.md (#16579) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61828c5eb..efb4bf8ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -537,6 +537,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### πŸ”§ Refactor + - patchmon: fetch only SCAP datastream XMLs [@MickLesk](https://github.com/MickLesk) ([#16565](https://github.com/community-scripts/ProxmoxVE/pull/16565)) - teslamate: use precompiled Elixir [@MickLesk](https://github.com/MickLesk) ([#16561](https://github.com/community-scripts/ProxmoxVE/pull/16561)) ## 2026-08-16 From 92e72e41377ebe5e3bb98cac8b6a82505e5701bc Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Tue, 18 Aug 2026 12:38:22 +0200 Subject: [PATCH 43/55] Breaking Change: Migrate all "Alpine" Scripts to Normal CT's (#16587) --- ct/adguard.sh | 51 +++++-- ct/alpine-adguard.sh | 47 ------ ct/alpine-bitmagnet.sh | 89 ------------ ct/alpine-caddy.sh | 47 ------ ct/alpine-docker.sh | 34 ----- ct/alpine-forgejo.sh | 46 ------ ct/alpine-garage.sh | 64 --------- ct/alpine-gatus.sh | 62 -------- ct/alpine-gitea.sh | 47 ------ ct/alpine-grafana.sh | 60 -------- ct/alpine-ironclaw.sh | 72 ---------- ct/alpine-loki.sh | 60 -------- ct/alpine-mariadb.sh | 46 ------ ct/alpine-node-red.sh | 50 ------- ct/alpine-ntfy.sh | 49 ------- ct/alpine-postgresql.sh | 46 ------ ct/alpine-prometheus.sh | 46 ------ ct/alpine-rclone.sh | 52 ------- ct/alpine-redis.sh | 63 -------- ct/alpine-rustdeskserver.sh | 77 ---------- ct/alpine-rustypaste.sh | 50 ------- ct/alpine-syncthing.sh | 46 ------ ct/alpine-teamspeak-server.sh | 58 -------- ct/alpine-tinyauth.sh | 77 ---------- ct/alpine-traefik.sh | 43 ------ ct/alpine-transmission.sh | 46 ------ ct/alpine-valkey.sh | 64 --------- ct/alpine-vaultwarden.sh | 65 --------- ct/alpine-wireguard.sh | 51 ------- ct/alpine-zigbee2mqtt.sh | 34 ----- ct/bitmagnet.sh | 92 ++++++++++-- ct/caddy.sh | 51 +++++-- ct/docker.sh | 42 ++++-- ct/forgejo.sh | 51 +++++-- ct/garage.sh | 68 +++++++-- ct/gatus.sh | 66 +++++++-- ct/gitea.sh | 52 +++++-- ct/grafana.sh | 66 +++++++-- ct/ironclaw.sh | 69 +++++++-- ct/loki.sh | 66 +++++++-- ct/mariadb.sh | 51 +++++-- ct/node-red.sh | 54 +++++-- ct/ntfy.sh | 52 +++++-- ct/postgresql.sh | 65 ++++++--- ct/prometheus.sh | 51 +++++-- ct/rclone.sh | 56 ++++++-- ct/redis.sh | 76 ++++++++-- ct/rustdeskserver.sh | 82 +++++++++-- ct/rustypaste.sh | 54 +++++-- ct/syncthing.sh | 51 +++++-- ct/teamspeak-server.sh | 61 ++++++-- ct/tinyauth.sh | 82 +++++++++-- ct/traefik.sh | 47 ++++-- ct/transmission.sh | 51 +++++-- ct/valkey.sh | 84 ++++++++--- ct/vaultwarden.sh | 70 +++++++-- ct/wireguard.sh | 58 ++++++-- ct/zigbee2mqtt.sh | 41 ++++-- install/adguard-install.sh | 46 +++++- install/alpine-adguard-install.sh | 47 ------ install/alpine-bitmagnet-install.sh | 85 ----------- install/alpine-caddy-install.sh | 70 --------- install/alpine-docker-install.sh | 69 --------- install/alpine-forgejo-install.sh | 29 ---- install/alpine-garage-install.sh | 84 ----------- install/alpine-gatus-install.sh | 70 --------- install/alpine-gitea-install.sh | 29 ---- install/alpine-grafana-install.sh | 24 ---- install/alpine-ironclaw-install.sh | 97 ------------- install/alpine-loki-install.sh | 76 ---------- install/alpine-mariadb-install.sh | 64 --------- install/alpine-node-red-install.sh | 62 -------- install/alpine-ntfy-install.sh | 25 ---- install/alpine-postgresql-install.sh | 74 ---------- install/alpine-prometheus-install.sh | 29 ---- install/alpine-rclone-install.sh | 67 --------- install/alpine-redis-install.sh | 24 ---- install/alpine-rustdeskserver-install.sh | 123 ---------------- install/alpine-rustypaste-install.sh | 55 ------- install/alpine-syncthing-install.sh | 33 ----- install/alpine-teamspeak-server-install.sh | 68 --------- install/alpine-tinyauth-install.sh | 73 ---------- install/alpine-traefik-install.sh | 38 ----- install/alpine-transmission-install.sh | 33 ----- install/alpine-valkey-install.sh | 44 ------ install/alpine-vaultwarden-install.sh | 43 ------ install/alpine-wireguard-install.sh | 100 ------------- install/alpine-zigbee2mqtt-install.sh | 27 ---- install/bitmagnet-install.sh | 125 ++++++++++++---- install/caddy-install.sh | 105 +++++++++++--- install/docker-install.sh | 146 +++++++++++++------ install/forgejo-install.sh | 58 +++++--- install/garage-install.sh | 107 +++++++++++--- install/gatus-install.sh | 92 +++++++++--- install/gitea-install.sh | 58 +++++--- install/grafana-install.sh | 43 ++++-- install/ironclaw-install.sh | 160 ++++++++++++++++----- install/loki-install.sh | 92 ++++++++++-- install/mariadb-install.sh | 106 ++++++++++---- install/node-red-install.sh | 121 +++++++++++----- install/ntfy-install.sh | 32 +++-- install/postgresql-install.sh | 99 ++++++++++--- install/prometheus-install.sh | 38 +++-- install/rclone-install.sh | 81 +++++++++-- install/redis-install.sh | 45 +++--- install/rustdeskserver-install.sh | 123 +++++++++++++++- install/rustypaste-install.sh | 63 ++++++-- install/syncthing-install.sh | 48 +++++-- install/teamspeak-server-install.sh | 80 +++++++++-- install/tinyauth-install.sh | 96 ++++++++++--- install/traefik-install.sh | 52 +++++-- install/transmission-install.sh | 34 ++++- install/valkey-install.sh | 106 +++++++++----- install/vaultwarden-install.sh | 112 +++++++++------ install/wireguard-install.sh | 155 +++++++++++++++----- install/zigbee2mqtt-install.sh | 52 ++++--- 116 files changed, 3343 insertions(+), 4145 deletions(-) delete mode 100644 ct/alpine-adguard.sh delete mode 100644 ct/alpine-bitmagnet.sh delete mode 100644 ct/alpine-caddy.sh delete mode 100644 ct/alpine-docker.sh delete mode 100644 ct/alpine-forgejo.sh delete mode 100644 ct/alpine-garage.sh delete mode 100644 ct/alpine-gatus.sh delete mode 100644 ct/alpine-gitea.sh delete mode 100644 ct/alpine-grafana.sh delete mode 100644 ct/alpine-ironclaw.sh delete mode 100644 ct/alpine-loki.sh delete mode 100644 ct/alpine-mariadb.sh delete mode 100644 ct/alpine-node-red.sh delete mode 100644 ct/alpine-ntfy.sh delete mode 100644 ct/alpine-postgresql.sh delete mode 100644 ct/alpine-prometheus.sh delete mode 100644 ct/alpine-rclone.sh delete mode 100644 ct/alpine-redis.sh delete mode 100644 ct/alpine-rustdeskserver.sh delete mode 100644 ct/alpine-rustypaste.sh delete mode 100644 ct/alpine-syncthing.sh delete mode 100644 ct/alpine-teamspeak-server.sh delete mode 100644 ct/alpine-tinyauth.sh delete mode 100644 ct/alpine-traefik.sh delete mode 100644 ct/alpine-transmission.sh delete mode 100644 ct/alpine-valkey.sh delete mode 100644 ct/alpine-vaultwarden.sh delete mode 100644 ct/alpine-wireguard.sh delete mode 100644 ct/alpine-zigbee2mqtt.sh delete mode 100644 install/alpine-adguard-install.sh delete mode 100644 install/alpine-bitmagnet-install.sh delete mode 100644 install/alpine-caddy-install.sh delete mode 100644 install/alpine-docker-install.sh delete mode 100644 install/alpine-forgejo-install.sh delete mode 100644 install/alpine-garage-install.sh delete mode 100644 install/alpine-gatus-install.sh delete mode 100644 install/alpine-gitea-install.sh delete mode 100644 install/alpine-grafana-install.sh delete mode 100644 install/alpine-ironclaw-install.sh delete mode 100644 install/alpine-loki-install.sh delete mode 100644 install/alpine-mariadb-install.sh delete mode 100644 install/alpine-node-red-install.sh delete mode 100644 install/alpine-ntfy-install.sh delete mode 100644 install/alpine-postgresql-install.sh delete mode 100644 install/alpine-prometheus-install.sh delete mode 100644 install/alpine-rclone-install.sh delete mode 100644 install/alpine-redis-install.sh delete mode 100644 install/alpine-rustdeskserver-install.sh delete mode 100644 install/alpine-rustypaste-install.sh delete mode 100644 install/alpine-syncthing-install.sh delete mode 100644 install/alpine-teamspeak-server-install.sh delete mode 100644 install/alpine-tinyauth-install.sh delete mode 100644 install/alpine-traefik-install.sh delete mode 100644 install/alpine-transmission-install.sh delete mode 100644 install/alpine-valkey-install.sh delete mode 100644 install/alpine-vaultwarden-install.sh delete mode 100644 install/alpine-wireguard-install.sh delete mode 100644 install/alpine-zigbee2mqtt-install.sh diff --git a/ct/adguard.sh b/ct/adguard.sh index 87c47f6ed..752cea7f8 100644 --- a/ct/adguard.sh +++ b/ct/adguard.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,28 +10,57 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Adguard" var_tags="${var_tags:-adblock}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/AdGuardHome ]]; then msg_error "No ${APP} Installation Found!" exit fi msg_error "Adguard Home can only be updated via the user interface." - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating AdGuard Home" + $STD /opt/AdGuardHome/AdGuardHome --update + msg_ok "Updated AdGuard Home" + + msg_info "Restarting AdGuard Home" + $STD rc-service adguardhome restart + msg_ok "Restarted AdGuard Home" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/alpine-adguard.sh b/ct/alpine-adguard.sh deleted file mode 100644 index 5e71e166a..000000000 --- a/ct/alpine-adguard.sh +++ /dev/null @@ -1,47 +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: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://adguardhome.com/ - -APP="Alpine-AdGuard" -var_tags="${var_tags:-alpine;adblock}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating AdGuard Home" - $STD /opt/AdGuardHome/AdGuardHome --update - msg_ok "Updated AdGuard Home" - - msg_info "Restarting AdGuard Home" - $STD rc-service adguardhome restart - msg_ok "Restarted AdGuard Home" - msg_ok "Updated successfully!" - exit 0 -} - -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 "${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/alpine-bitmagnet.sh b/ct/alpine-bitmagnet.sh deleted file mode 100644 index 922ed5705..000000000 --- a/ct/alpine-bitmagnet.sh +++ /dev/null @@ -1,89 +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: SlaviΕ‘a AreΕΎina (tremor021) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/bitmagnet-io/bitmagnet - -APP="Alpine-bitmagnet" -var_tags="${var_tags:-alpine;torrent}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-3}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - - if [[ ! -d /opt/bitmagnet ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then - msg_info "Backing up database" - rm -f /tmp/backup.sql - $STD sudo -u postgres pg_dump \ - --column-inserts \ - --data-only \ - --on-conflict-do-nothing \ - --rows-per-insert=1000 \ - --table=metadata_sources \ - --table=content \ - --table=content_attributes \ - --table=content_collections \ - --table=content_collections_content \ - --table=torrent_sources \ - --table=torrents \ - --table=torrent_files \ - --table=torrent_hints \ - --table=torrent_contents \ - --table=torrent_tags \ - --table=torrents_torrent_sources \ - --table=key_values \ - bitmagnet \ - >/tmp/backup.sql - mv /tmp/backup.sql /opt/ - msg_ok "Database backed up" - - msg_info "Updating ${APP} from $(cat /opt/bitmagnet_version.txt) to ${RELEASE}" - $STD apk -U upgrade - $STD service bitmagnet stop - [ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/ - [ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/ - rm -rf /opt/bitmagnet/* - temp_file=$(mktemp) - curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" - tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet - cd /opt/bitmagnet - VREL=v$RELEASE - $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL" - chmod +x bitmagnet - [ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/ - [ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/ - rm -f "$temp_file" - echo "${RELEASE}" >/opt/bitmagnet_version.txt - $STD service bitmagnet start - msg_ok "Updated successfully!" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit 0 -} - -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 IP:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:3333${CL}" diff --git a/ct/alpine-caddy.sh b/ct/alpine-caddy.sh deleted file mode 100644 index 609339ef8..000000000 --- a/ct/alpine-caddy.sh +++ /dev/null @@ -1,47 +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: cobalt (cobaltgit) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://caddyserver.com/ - -APP="Alpine-Caddy" -var_tags="${var_tags:-webserver}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-3}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - if [[ ! -d /etc/caddy ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating $APP LXC" - $STD apk -U upgrade - msg_ok "Updated $APP LXC" - - msg_info "Restarting Caddy" - rc-service caddy restart - msg_ok "Restarted Caddy" - msg_ok "Updated successfully!" - exit 0 -} - -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 "${GATEWAY}${BGN}http://${IP}:80${CL}" diff --git a/ct/alpine-docker.sh b/ct/alpine-docker.sh deleted file mode 100644 index 1d7143d46..000000000 --- a/ct/alpine-docker.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.docker.com/ - -APP="Alpine-Docker" -var_tags="${var_tags:-docker;alpine}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-2}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - $STD apk -U upgrade - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" diff --git a/ct/alpine-forgejo.sh b/ct/alpine-forgejo.sh deleted file mode 100644 index 1de6104c6..000000000 --- a/ct/alpine-forgejo.sh +++ /dev/null @@ -1,46 +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: Johann3s-H (An!ma) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://forgejo.org/ - -APP="Alpine-Forgejo" -var_tags="${var_tags:-alpine;git}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating Forgejo" - $STD apk upgrade forgejo - msg_ok "Updated Forgejo" - - msg_info "Restarting Forgejo" - $STD rc-service forgejo restart - msg_ok "Restarted Forgejo" - msg_ok "Updated successfully!" - exit 0 -} - -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 "${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/alpine-garage.sh b/ct/alpine-garage.sh deleted file mode 100644 index ae6f2c604..000000000 --- a/ct/alpine-garage.sh +++ /dev/null @@ -1,64 +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: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://garagehq.deuxfleurs.fr/ - -APP="Alpine-Garage" -var_tags="${var_tags:-alpine;object-storage}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-5}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - if [[ ! -f /usr/local/bin/garage ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name') - if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then - msg_info "Stopping Service" - rc-service garage stop || true - msg_ok "Stopped Service" - - msg_info "Backing Up Data" - cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true - cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true - msg_ok "Backed Up Data" - - msg_info "Updating Garage" - curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage - chmod +x /usr/local/bin/garage - echo "${GITEA_RELEASE}" >~/.garage - msg_ok "Updated Garage" - - msg_info "Starting Service" - rc-service garage start || rc-service garage restart - msg_ok "Started Service" - msg_ok "Updated successfully!" - else - msg_ok "No update required. Garage is already at ${GITEA_RELEASE}" - fi - exit 0 -} - -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 "${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/alpine-gatus.sh b/ct/alpine-gatus.sh deleted file mode 100644 index c8c720f4d..000000000 --- a/ct/alpine-gatus.sh +++ /dev/null @@ -1,62 +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: SlaviΕ‘a AreΕΎina (tremor021) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/TwiN/gatus - -APP="Alpine-gatus" -var_tags="${var_tags:-alpine;monitoring}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-3}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - - if [[ ! -d /opt/gatus ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [ "${RELEASE}" != "$(cat /opt/gatus_version.txt)" ] || [ ! -f /opt/gatus_version.txt ]; then - msg_info "Updating ${APP} LXC" - $STD apk -U upgrade - $STD service gatus stop - mv /opt/gatus/config/config.yaml /opt - rm -rf /opt/gatus/* - temp_file=$(mktemp) - curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" - tar zxf "$temp_file" --strip-components=1 -C /opt/gatus - cd /opt/gatus - $STD go mod tidy - CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . - setcap CAP_NET_RAW+ep gatus - mv /opt/config.yaml config - rm -f "$temp_file" - echo "${RELEASE}" >/opt/gatus_version.txt - $STD service gatus start - msg_ok "Updated successfully!" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit 0 -} - -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 IP:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:8080${CL}" diff --git a/ct/alpine-gitea.sh b/ct/alpine-gitea.sh deleted file mode 100644 index bbeb95c9b..000000000 --- a/ct/alpine-gitea.sh +++ /dev/null @@ -1,47 +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: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://gitea.io/ - -APP="Alpine-Gitea" -var_tags="${var_tags:-alpine;git}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating Gitea" - apk upgrade gitea - msg_ok "Updated Gitea" - - msg_info "Restarting Gitea" - rc-service gitea restart - msg_ok "Restarted Gitea" - msg_ok "Updated successfully!" - exit 0 -} - -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 "${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/alpine-grafana.sh b/ct/alpine-grafana.sh deleted file mode 100644 index d95f9a6d0..000000000 --- a/ct/alpine-grafana.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://grafana.com/ - -APP="Alpine-Grafana" -var_tags="${var_tags:-alpine;monitoring}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) - - CHOICE=$(msg_menu "Grafana Update Options" \ - "1" "Check for Grafana Updates" \ - "2" "Allow 0.0.0.0 for listening" \ - "3" "Allow only ${LXCIP} for listening") - - case $CHOICE in - 1) - $STD apk -U upgrade - msg_ok "Updated successfully!" - exit - ;; - 2) - sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana - service grafana restart - msg_ok "Allowed listening on all interfaces!" - exit - ;; - 3) - sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana - service grafana restart - msg_ok "Allowed listening only on ${LXCIP}!" - exit - ;; - esac - exit 0 -} - -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 "${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/alpine-ironclaw.sh b/ct/alpine-ironclaw.sh deleted file mode 100644 index f9d6c9fb2..000000000 --- a/ct/alpine-ironclaw.sh +++ /dev/null @@ -1,72 +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: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/nearai/ironclaw - -APP="Alpine-IronClaw" -var_tags="${var_tags:-ai;agent;alpine}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-8}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - - if [[ ! -f /usr/local/bin/ironclaw ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - RELEASE="ironclaw-v0.29.1" - if check_for_gh_release "ironclaw-bin" "nearai/ironclaw" "${RELEASE}" "IronClaw 1.0 (Reborn) is a ground-up rearchitecture with an incompatible CLI/config format; pinned until this script supports it"; then - msg_info "Stopping Service" - rc-service ironclaw stop 2>/dev/null || true - msg_ok "Stopped Service" - - msg_info "Backing up Configuration" - cp /root/.ironclaw/.env /root/ironclaw.env.bak - msg_ok "Backed up Configuration" - - fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "${RELEASE}" "/usr/local/bin" \ - "ironclaw-$(uname -m)-unknown-linux-musl.tar.gz" - chmod +x /usr/local/bin/ironclaw - - msg_info "Restoring Configuration" - cp /root/ironclaw.env.bak /root/.ironclaw/.env - rm -f /root/ironclaw.env.bak - msg_ok "Restored Configuration" - - msg_info "Starting Service" - rc-service ironclaw start - 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} Next Steps:${CL}" -echo -e "${TAB}1. Complete setup by running:${CL}" -echo -e "${TAB}${TAB}${BGN}/usr/local/bin/ironclaw onboard${CL}" -echo -e "${TAB}2. Start the service:${CL}" -echo -e "${TAB}${TAB}${BGN}rc-service ironclaw start${CL}" -echo -e "${TAB}3. Access the Web UI at:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:3000${CL}" -echo -e "${INFO}${YW} Use Gateway Authentication Token to login:${CL}" -echo -e "${TAB}${TAB}${BGN}cat /root/.ironclaw/gateway.creds${CL}" diff --git a/ct/alpine-loki.sh b/ct/alpine-loki.sh deleted file mode 100644 index 2ea565b56..000000000 --- a/ct/alpine-loki.sh +++ /dev/null @@ -1,60 +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: hoholms -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/grafana/loki - -APP="Alpine-Loki" -var_tags="${var_tags:-alpine;monitoring}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) - - CHOICE=$(msg_menu "Loki Update Options" \ - "1" "Check for Loki Updates" \ - "2" "Allow 0.0.0.0 for listening" \ - "3" "Allow only ${LXCIP} for listening") - - case $CHOICE in - 1) - $STD apk -U upgrade - msg_ok "Updated successfully!" - exit - ;; - 2) - sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/loki - service loki restart - msg_ok "Allowed listening on all interfaces!" - exit - ;; - 3) - sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/loki - service loki restart - msg_ok "Allowed listening only on ${LXCIP}!" - exit - ;; - esac - exit 0 -} - -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 "${GATEWAY}${BGN}http://${IP}:3100${CL}" diff --git a/ct/alpine-mariadb.sh b/ct/alpine-mariadb.sh deleted file mode 100644 index c579bca8f..000000000 --- a/ct/alpine-mariadb.sh +++ /dev/null @@ -1,46 +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: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://mariadb.org/ - -APP="Alpine-MariaDB" -var_tags="${var_tags:-alpine;database}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating MariaDB" - $STD apk upgrade mariadb mariadb-client - msg_ok "Updated MariaDB" - - msg_info "Restarting MariaDB" - $STD rc-service mariadb restart - msg_ok "Restarted MariaDB" - msg_ok "Updated successfully!" - exit 0 -} - -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 IP:${CL}" -echo -e "${GATEWAY}${BGN}${IP}:3306${CL}" diff --git a/ct/alpine-node-red.sh b/ct/alpine-node-red.sh deleted file mode 100644 index 006698ea1..000000000 --- a/ct/alpine-node-red.sh +++ /dev/null @@ -1,50 +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: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://nodered.org/ - -APP="Alpine-Node-RED" -var_tags="${var_tags:-alpine;automation}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating Node.js and npm" - $STD apk upgrade nodejs npm - msg_ok "Updated Node.js and npm" - - msg_info "Updating Node-RED" - $STD npm install -g --unsafe-perm node-red - msg_ok "Updated Node-RED" - - msg_info "Restarting Node-RED" - $STD rc-service nodered restart - msg_ok "Restarted Node-RED" - msg_ok "Updated successfully!" - exit 0 -} - -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 "${GATEWAY}${BGN}http://${IP}:1880${CL}" diff --git a/ct/alpine-ntfy.sh b/ct/alpine-ntfy.sh deleted file mode 100644 index b98384e19..000000000 --- a/ct/alpine-ntfy.sh +++ /dev/null @@ -1,49 +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: cobalt (cobaltgit) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Source: https://ntfy.sh/ - -APP="Alpine-ntfy" -var_tags="${var_tags:-notification}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-2}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - if [[ ! -d /etc/ntfy ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating ntfy LXC" - $STD apk -U upgrade - setcap 'cap_net_bind_service=+ep' /usr/bin/ntfy - msg_ok "Updated ntfy LXC" - - msg_info "Restarting ntfy" - rc-service ntfy restart - msg_ok "Restarted ntfy" - msg_ok "Updated successfully!" - 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 "${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/alpine-postgresql.sh b/ct/alpine-postgresql.sh deleted file mode 100644 index 558a07a6a..000000000 --- a/ct/alpine-postgresql.sh +++ /dev/null @@ -1,46 +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: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.postgresql.org/ - -APP="Alpine-PostgreSQL" -var_tags="${var_tags:-alpine;database}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating PostgreSQL" - $STD apk upgrade postgresql postgresql-contrib - msg_ok "Updated PostgreSQL" - - msg_info "Restarting PostgreSQL" - $STD rc-service postgresql restart - msg_ok "Restarted PostgreSQL" - msg_ok "Updated successfully!" - exit 0 -} - -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 IP:${CL}" -echo -e "${GATEWAY}${BGN}${IP}:5432${CL}" diff --git a/ct/alpine-prometheus.sh b/ct/alpine-prometheus.sh deleted file mode 100644 index 466c3ffd7..000000000 --- a/ct/alpine-prometheus.sh +++ /dev/null @@ -1,46 +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: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://prometheus.io/ - -APP="Alpine-Prometheus" -var_tags="${var_tags:-alpine;monitoring}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating Prometheus" - $STD apk upgrade prometheus - msg_ok "Updated Prometheus" - - msg_info "Restarting Prometheus" - $STD rc-service prometheus restart - msg_ok "Restarted Prometheus" - msg_ok "Updated successfully!" - exit 0 -} - -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 "${GATEWAY}${BGN}http://${IP}:9090${CL}" diff --git a/ct/alpine-rclone.sh b/ct/alpine-rclone.sh deleted file mode 100644 index 8aec2bff3..000000000 --- a/ct/alpine-rclone.sh +++ /dev/null @@ -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: SlaviΕ‘a AreΕΎina (tremor021) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/rclone/rclone - -APP="Alpine-rclone" -var_tags="${var_tags:-alpine;backup}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" -var_fuse="${var_fuse:-yes}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - if [ ! -d /opt/rclone ]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [ "${RELEASE}" != "$(cat /opt/rclone_version.txt)" ] || [ ! -f /opt/rclone_version.txt ]; then - msg_info "Updating ${APP} LXC" - temp_file=$(mktemp) - curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-$(arch_resolve).zip" -o "$temp_file" - $STD unzip -o "$temp_file" '*/**' -d /opt/rclone - rm -f "$temp_file" - echo "${RELEASE}" >/opt/rclone_version.txt - msg_ok "Updated successfully!" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit 0 -} - -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 IP:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/alpine-redis.sh b/ct/alpine-redis.sh deleted file mode 100644 index 9db9706f3..000000000 --- a/ct/alpine-redis.sh +++ /dev/null @@ -1,63 +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: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://redis.io/ - -APP="Alpine-Redis" -var_tags="${var_tags:-alpine;database}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) - - CHOICE=$(msg_menu "Redis Management" \ - "1" "Update Redis" \ - "2" "Allow 0.0.0.0 for listening" \ - "3" "Allow only ${LXCIP} for listening") - - case $CHOICE in - 1) - msg_info "Updating Redis" - apk update && apk upgrade redis - rc-service redis restart - msg_ok "Updated successfully!" - exit - ;; - 2) - msg_info "Setting Redis to listen on all interfaces" - sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf - rc-service redis restart - msg_ok "Redis now listens on all interfaces!" - exit - ;; - 3) - msg_info "Setting Redis to listen only on ${LXCIP}" - sed -i "s/^bind .*/bind ${LXCIP}/" /etc/redis.conf - rc-service redis restart - msg_ok "Redis now listens only on ${LXCIP}!" - exit - ;; - esac -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Connect to Redis CLI using the following command:${CL}" -echo -e "${GATEWAY}${BGN}redis-cli -h ${IP} -p 6379${CL}" diff --git a/ct/alpine-rustdeskserver.sh b/ct/alpine-rustdeskserver.sh deleted file mode 100644 index 29187338f..000000000 --- a/ct/alpine-rustdeskserver.sh +++ /dev/null @@ -1,77 +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: SlaviΕ‘a AreΕΎina (tremor021) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/rustdesk/rustdesk-server - -APP="Alpine-RustDeskServer" -var_tags="${var_tags:-alpine;monitoring}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-3}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - if [[ ! -d /opt/rustdesk-server ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - RELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - if [ "${RELEASE}" != "$(cat ~/.rustdesk-server 2>/dev/null)" ] || [ ! -f ~/.rustdesk-server ]; then - msg_info "Updating RustDesk Server to v${RELEASE}" - $STD apk -U upgrade - $STD service rustdesk-server-hbbs stop - $STD service rustdesk-server-hbbr stop - temp_file1=$(mktemp) - ARCH=$(arch_resolve "amd64" "arm64v8") - curl -fsSL "https://github.com/lejianwen/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-${ARCH}.zip" -o "$temp_file1" - $STD unzip "$temp_file1" - cp -r "$ARCH"/* /opt/rustdesk-server/ - echo "${RELEASE}" >~/.rustdesk-server - $STD service rustdesk-server-hbbs start - $STD service rustdesk-server-hbbr start - rm -rf "$ARCH" - rm -f "$temp_file1" - msg_ok "Updated RustDesk Server" - else - msg_ok "No update required. ${APP} is already at v${RELEASE}" - fi - if [ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ] || [ ! -f ~/.rustdesk-api ]; then - msg_info "Updating RustDesk API to v${APIRELEASE}" - $STD service rustdesk-api stop - temp_file2=$(mktemp) - curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-$(arch_resolve).tar.gz" -o "$temp_file2" - $STD tar zxvf "$temp_file2" - cp -r release/* /opt/rustdesk-api - echo "${APIRELEASE}" >~/.rustdesk-api - $STD service rustdesk-api start - rm -rf release - rm -f "$temp_file2" - msg_ok "Updated RustDesk API" - else - msg_ok "No update required. RustDesk API is already at v${APIRELEASE}" - fi - msg_ok "Updated successfully!" - exit 0 -} - -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 IP:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:21114${CL}" diff --git a/ct/alpine-rustypaste.sh b/ct/alpine-rustypaste.sh deleted file mode 100644 index 6a9cf3029..000000000 --- a/ct/alpine-rustypaste.sh +++ /dev/null @@ -1,50 +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: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/orhun/rustypaste - -APP="Alpine-RustyPaste" -var_tags="${var_tags:-alpine;pastebin;storage}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-4}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - - if ! apk info -e rustypaste >/dev/null 2>&1; then - msg_error "No ${APP} Installation Found!" - exit - fi - - msg_info "Updating RustyPaste" - $STD apk update - $STD apk upgrade rustypaste --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community - msg_ok "Updated RustyPaste" - - msg_info "Restarting Services" - $STD rc-service rustypaste restart - msg_ok "Restarted Services" - msg_ok "Updated successfully!" - 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 "${GATEWAY}${BGN}http://${IP}:8000${CL}" diff --git a/ct/alpine-syncthing.sh b/ct/alpine-syncthing.sh deleted file mode 100644 index ee60e1460..000000000 --- a/ct/alpine-syncthing.sh +++ /dev/null @@ -1,46 +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: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://syncthing.net/ - -APP="Alpine-Syncthing" -var_tags="${var_tags:-alpine;networking}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating Syncthing" - $STD apk upgrade syncthing - msg_ok "Updated Syncthing" - - msg_info "Restarting Syncthing" - $STD rc-service syncthing restart - msg_ok "Restarted Syncthing" - msg_ok "Updated successfully!" - exit 0 -} - -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 "${GATEWAY}${BGN}http://${IP}:8384${CL}" diff --git a/ct/alpine-teamspeak-server.sh b/ct/alpine-teamspeak-server.sh deleted file mode 100644 index 79fd91b6a..000000000 --- a/ct/alpine-teamspeak-server.sh +++ /dev/null @@ -1,58 +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: tremor021 (SlaviΕ‘a AreΕΎina) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://teamspeak.com/en/ - -APP="Alpine-TeamSpeak-Server" -var_tags="${var_tags:-alpine;communication}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-2}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-no}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - - if [[ ! -d /opt/teamspeak-server ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | awk 'NR==1') - - if [ "${RELEASE}" != "$(cat ~/.teamspeak-server)" ] || [ ! -f ~/.teamspeak-server ]; then - msg_info "Updating ${APP} LXC" - $STD apk -U upgrade - $STD service teamspeak stop - curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2 - tar -xf ./ts3server.tar.bz2 - cp -ru teamspeak3-server_linux_amd64/* /opt/teamspeak-server/ - rm -f ~/ts3server.tar.bz* - rm -rf teamspeak3-server_linux_amd64 - echo "${RELEASE}" >~/.teamspeak-server - $STD service teamspeak start - msg_ok "Updated successfully!" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit 0 -} - -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 IP:${CL}" -echo -e "${GATEWAY}${BGN}${IP}:9987${CL}" diff --git a/ct/alpine-tinyauth.sh b/ct/alpine-tinyauth.sh deleted file mode 100644 index c47ca2f22..000000000 --- a/ct/alpine-tinyauth.sh +++ /dev/null @@ -1,77 +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: SlaviΕ‘a AreΕΎina (tremor021) | Co-Author: Stavros (steveiliop56) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/tinyauthapp/tinyauth - -APP="Alpine-Tinyauth" -var_tags="${var_tags:-alpine;auth}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-2}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - if [[ ! -d /opt/tinyauth ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - msg_info "Updating packages" - $STD apk -U upgrade - msg_ok "Updated packages" - - RELEASE=$(curl -s https://api.github.com/repos/tinyauthapp/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - if [ "${RELEASE}" != "$(cat ~/.tinyauth 2>/dev/null)" ] || [ ! -f ~/.tinyauth ]; then - msg_info "Stopping Service" - $STD service tinyauth stop - msg_ok "Service Stopped" - - if [[ -f /opt/tinyauth/.env ]] && ! grep -q "^TINYAUTH_" /opt/tinyauth/.env; then - msg_info "Migrating .env to v5 format" - sed -i \ - -e 's/^DATABASE_PATH=/TINYAUTH_DATABASE_PATH=/' \ - -e 's/^USERS=/TINYAUTH_AUTH_USERS=/' \ - -e "s/^USERS='/TINYAUTH_AUTH_USERS='/" \ - -e 's/^APP_URL=/TINYAUTH_APPURL=/' \ - -e 's/^SECRET=/TINYAUTH_AUTH_SECRET=/' \ - -e 's/^PORT=/TINYAUTH_SERVER_PORT=/' \ - -e 's/^ADDRESS=/TINYAUTH_SERVER_ADDRESS=/' \ - /opt/tinyauth/.env - msg_ok "Migrated .env to v5 format" - fi - - msg_info "Updating Tinyauth" - rm -f /opt/tinyauth/tinyauth - curl -fsSL "https://github.com/tinyauthapp/tinyauth/releases/download/v${RELEASE}/tinyauth-$(arch_resolve)" -o /opt/tinyauth/tinyauth - chmod +x /opt/tinyauth/tinyauth - echo "${RELEASE}" >~/.tinyauth - msg_ok "Updated Tinyauth" - - msg_info "Restarting Tinyauth" - $STD service tinyauth start - msg_ok "Restarted Tinyauth" - msg_ok "Updated successfully!" - else - msg_ok "No update required. ${APP} is already at ${RELEASE}" - fi - exit 0 -} - -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 "${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/alpine-traefik.sh b/ct/alpine-traefik.sh deleted file mode 100644 index 8d7190dbe..000000000 --- a/ct/alpine-traefik.sh +++ /dev/null @@ -1,43 +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: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://alpinelinux.org/ - -APP="Alpine-Traefik" -var_tags="${var_tags:-os;alpine}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating traefik from edge" - $STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community - msg_ok "Updated traefik" - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} WebUI Access (if configured) - using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:8080/dashboard${CL}" diff --git a/ct/alpine-transmission.sh b/ct/alpine-transmission.sh deleted file mode 100644 index dee98ec80..000000000 --- a/ct/alpine-transmission.sh +++ /dev/null @@ -1,46 +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: SlaviΕ‘a AreΕΎina (tremor021) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://transmissionbt.com/ - -APP="Alpine-Transmission" -var_tags="${var_tags:-alpine;torrent}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "Updating Transmission" - $STD apk upgrade transmission-daemon - msg_ok "Updated Transmission" - - msg_info "Restarting Transmission" - $STD rc-service transmission-daemon restart - msg_ok "Restarted Transmission" - msg_ok "Updated successfully!" - exit 0 -} - -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 "${GATEWAY}${BGN}http://${IP}:9091${CL}" diff --git a/ct/alpine-valkey.sh b/ct/alpine-valkey.sh deleted file mode 100644 index 25bd097a8..000000000 --- a/ct/alpine-valkey.sh +++ /dev/null @@ -1,64 +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: pshankinclarke (lazarillo) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://valkey.io/ - -APP="Alpine-Valkey" -var_tags="${var_tags:-alpine;database}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) - - CHOICE=$(msg_menu "Valkey Management" \ - "1" "Update Valkey" \ - "2" "Allow 0.0.0.0 for listening" \ - "3" "Allow only ${LXCIP} for listening") - - case $CHOICE in - 1) - msg_info "Updating Valkey" - apk update && apk upgrade valkey - rc-service valkey restart - msg_ok "Updated Valkey" - msg_ok "Updated successfully!" - exit - ;; - 2) - msg_info "Setting Valkey to listen on all interfaces" - sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf - rc-service valkey restart - msg_ok "Valkey now listens on all interfaces!" - exit - ;; - 3) - msg_info "Setting Valkey to listen only on ${LXCIP}" - sed -i "s/^bind .*/bind ${LXCIP}/" /etc/valkey/valkey.conf - rc-service valkey restart - msg_ok "Valkey now listens only on ${LXCIP}!" - exit - ;; - esac -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Connect to Valkey CLI using the following command:${CL}" -echo -e "${GATEWAY}${BGN}valkey-cli -h ${IP} -p 6379${CL}" diff --git a/ct/alpine-vaultwarden.sh b/ct/alpine-vaultwarden.sh deleted file mode 100644 index df6c01185..000000000 --- a/ct/alpine-vaultwarden.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/dani-garcia/vaultwarden - -APP="Alpine-Vaultwarden" -var_tags="${var_tags:-alpine;vault}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - CHOICE=$(msg_menu "Vaultwarden Update Options" \ - "1" "Update Vaultwarden" \ - "2" "Reset ADMIN_TOKEN") - - case $CHOICE in - 1) - $STD apk -U upgrade - rc-service vaultwarden restart -q - msg_ok "Updated successfully!" - exit - ;; - 2) - if [[ "${PHS_SILENT:-0}" == "1" ]]; then - msg_warn "Reset ADMIN_TOKEN requires interactive mode, skipping." - exit - fi - read -r -s -p "Setup your ADMIN_TOKEN (make it strong): " NEWTOKEN - echo "" - if [[ -n "$NEWTOKEN" ]]; then - if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi - TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1) - if [[ ! -f /var/lib/vaultwarden/config.json ]]; then - sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden - else - sed -i "s|\"admin_token\": .*|\"admin_token\": \"${TOKEN}\",|" /var/lib/vaultwarden/config.json - fi - rc-service vaultwarden restart -q - msg_ok "Admin token updated" - fi - exit - ;; - esac -} - -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 "${GATEWAY}${BGN}https://${IP}:8000${CL}" diff --git a/ct/alpine-wireguard.sh b/ct/alpine-wireguard.sh deleted file mode 100644 index 930334605..000000000 --- a/ct/alpine-wireguard.sh +++ /dev/null @@ -1,51 +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: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.wireguard.com/ - -APP="Alpine-Wireguard" -var_tags="${var_tags:-alpine;vpn}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_disk="${var_disk:-1}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-1}" -var_tun="${var_tun:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - msg_info "Updating Alpine Packages" - $STD apk -U upgrade - msg_ok "Updated Alpine Packages" - - msg_info "update wireguard-tools" - $STD apk add --no-cache --upgrade wireguard-tools - msg_ok "wireguard-tools updated" - - if [[ -d /etc/wgdashboard/src ]]; then - msg_info "update WGDashboard" - cd /etc/wgdashboard/src - echo "y" | ./wgd.sh update >/dev/null 2>&1 - $STD ./wgd.sh start - msg_ok "WGDashboard updated" - fi - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} WGDashboardAccess it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:10086${CL}" diff --git a/ct/alpine-zigbee2mqtt.sh b/ct/alpine-zigbee2mqtt.sh deleted file mode 100644 index 8048cc870..000000000 --- a/ct/alpine-zigbee2mqtt.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.zigbee2mqtt.io/ - -APP="Alpine-Zigbee2MQTT" -var_tags="${var_tags:-alpine;zigbee;mqtt;smarthome}" -var_disk="${var_disk:-1}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-256}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.24}" -var_arm64="${var_arm64:-yes}" -var_unprivileged="${var_unprivileged:-0}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - $STD apk -U upgrade - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" diff --git a/ct/bitmagnet.sh b/ct/bitmagnet.sh index 56966f954..fa5c8ed5e 100644 --- a/ct/bitmagnet.sh +++ b/ct/bitmagnet.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: SlaviΕ‘a AreΕΎina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Bitmagnet" var_tags="${var_tags:-os}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-3}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/bitmagnet ]]; then msg_error "No ${APP} Installation Found!" exit @@ -75,7 +85,69 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + if [[ ! -d /opt/bitmagnet ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then + msg_info "Backing up database" + rm -f /tmp/backup.sql + $STD sudo -u postgres pg_dump \ + --column-inserts \ + --data-only \ + --on-conflict-do-nothing \ + --rows-per-insert=1000 \ + --table=metadata_sources \ + --table=content \ + --table=content_attributes \ + --table=content_collections \ + --table=content_collections_content \ + --table=torrent_sources \ + --table=torrents \ + --table=torrent_files \ + --table=torrent_hints \ + --table=torrent_contents \ + --table=torrent_tags \ + --table=torrents_torrent_sources \ + --table=key_values \ + bitmagnet \ + >/tmp/backup.sql + mv /tmp/backup.sql /opt/ + msg_ok "Database backed up" + + msg_info "Updating ${APP} from $(cat /opt/bitmagnet_version.txt) to ${RELEASE}" + $STD apk -U upgrade + $STD service bitmagnet stop + [ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/ + [ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/ + rm -rf /opt/bitmagnet/* + temp_file=$(mktemp) + curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" + tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet + cd /opt/bitmagnet + VREL=v$RELEASE + $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL" + chmod +x bitmagnet + [ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/ + [ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/ + rm -f "$temp_file" + echo "${RELEASE}" >/opt/bitmagnet_version.txt + $STD service bitmagnet start + msg_ok "Updated successfully!" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/caddy.sh b/ct/caddy.sh index 7cd9a0750..34db90c9e 100644 --- a/ct/caddy.sh +++ b/ct/caddy.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Caddy" var_tags="${var_tags:-webserver}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-6}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-3}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-6}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /etc/caddy ]]; then msg_error "No ${APP} Installation Found!" exit @@ -45,7 +55,28 @@ function update_script() { fi fi msg_ok "Updated successfully!" - exit +} + +update_alpine() { + if [[ ! -d /etc/caddy ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_info "Updating $APP LXC" + $STD apk -U upgrade + msg_ok "Updated $APP LXC" + + msg_info "Restarting Caddy" + rc-service caddy restart + msg_ok "Restarted Caddy" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/docker.sh b/ct/docker.sh index 9f6984027..d1cd3ba78 100644 --- a/ct/docker.sh +++ b/ct/docker.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Docker" var_tags="${var_tags:-docker}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-2}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { msg_info "Updating base system" $STD apt update $STD apt upgrade -y @@ -43,7 +52,18 @@ function update_script() { fi msg_ok "Updated successfully!" - exit +} + +update_alpine() { + $STD apk -U upgrade + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/forgejo.sh b/ct/forgejo.sh index 19c10aad6..12b4325c0 100644 --- a/ct/forgejo.sh +++ b/ct/forgejo.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Forgejo" var_tags="${var_tags:-git}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-10}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-10}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/forgejo ]]; then msg_error "No ${APP} Installation Found!" exit @@ -50,7 +60,28 @@ function update_script() { else msg_ok "No update required. ${APP} is already at the latest version." fi - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Forgejo" + $STD apk upgrade forgejo + msg_ok "Updated Forgejo" + + msg_info "Restarting Forgejo" + $STD rc-service forgejo restart + msg_ok "Restarted Forgejo" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/garage.sh b/ct/garage.sh index ebca5a3b4..93268168a 100644 --- a/ct/garage.sh +++ b/ct/garage.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Garage" var_tags="${var_tags:-object-storage}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-5}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-512}" + var_disk="${var_disk:-5}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-5}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /usr/local/bin/garage ]]; then msg_error "No ${APP} Installation Found!" exit @@ -52,7 +62,45 @@ function update_script() { else msg_ok "No update required. Garage is already at ${GITEA_RELEASE}" fi - exit +} + +update_alpine() { + if [[ ! -f /usr/local/bin/garage ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name') + if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then + msg_info "Stopping Service" + rc-service garage stop || true + msg_ok "Stopped Service" + + msg_info "Backing Up Data" + cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true + cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true + msg_ok "Backed Up Data" + + msg_info "Updating Garage" + curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage + chmod +x /usr/local/bin/garage + echo "${GITEA_RELEASE}" >~/.garage + msg_ok "Updated Garage" + + msg_info "Starting Service" + rc-service garage start || rc-service garage restart + msg_ok "Started Service" + msg_ok "Updated successfully!" + else + msg_ok "No update required. Garage is already at ${GITEA_RELEASE}" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/gatus.sh b/ct/gatus.sh index 726bcb652..2faf7bec3 100644 --- a/ct/gatus.sh +++ b/ct/gatus.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: SlaviΕ‘a AreΕΎina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="gatus" var_tags="${var_tags:-monitoring}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-512}" + var_disk="${var_disk:-3}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if [[ ! -d /opt/gatus ]]; then msg_error "No ${APP} Installation Found!" exit @@ -50,7 +59,42 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + if [[ ! -d /opt/gatus ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [ "${RELEASE}" != "$(cat /opt/gatus_version.txt)" ] || [ ! -f /opt/gatus_version.txt ]; then + msg_info "Updating ${APP} LXC" + $STD apk -U upgrade + $STD service gatus stop + mv /opt/gatus/config/config.yaml /opt + rm -rf /opt/gatus/* + temp_file=$(mktemp) + curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" + tar zxf "$temp_file" --strip-components=1 -C /opt/gatus + cd /opt/gatus + $STD go mod tidy + CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . + setcap CAP_NET_RAW+ep gatus + mv /opt/config.yaml config + rm -f "$temp_file" + echo "${RELEASE}" >/opt/gatus_version.txt + $STD service gatus start + msg_ok "Updated successfully!" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/gitea.sh b/ct/gitea.sh index f29289de8..98977f66e 100644 --- a/ct/gitea.sh +++ b/ct/gitea.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) | Co-Author: Rogue-King # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Gitea" var_tags="${var_tags:-git}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-8}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-8}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if [[ ! -f /usr/local/bin/gitea ]]; then msg_error "No ${APP} Installation Found!" exit @@ -43,7 +52,28 @@ function update_script() { msg_ok "Started service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Gitea" + apk upgrade gitea + msg_ok "Updated Gitea" + + msg_info "Restarting Gitea" + rc-service gitea restart + msg_ok "Restarted Gitea" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/grafana.sh b/ct/grafana.sh index 3c04e141a..6101bd30a 100644 --- a/ct/grafana.sh +++ b/ct/grafana.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Grafana" var_tags="${var_tags:-monitoring;visualization}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if ! dpkg -s grafana >/dev/null 2>&1; then msg_error "No ${APP} Installation Found!" exit 233 @@ -43,7 +52,42 @@ function update_script() { $STD apt update $STD apt --only-upgrade install -y grafana msg_ok "Updated successfully!" - exit +} + +update_alpine() { + LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) + + CHOICE=$(msg_menu "Grafana Update Options" \ + "1" "Check for Grafana Updates" \ + "2" "Allow 0.0.0.0 for listening" \ + "3" "Allow only ${LXCIP} for listening") + + case $CHOICE in + 1) + $STD apk -U upgrade + msg_ok "Updated successfully!" + exit + ;; + 2) + sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana + service grafana restart + msg_ok "Allowed listening on all interfaces!" + exit + ;; + 3) + sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana + service grafana restart + msg_ok "Allowed listening only on ${LXCIP}!" + exit + ;; + esac +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/ironclaw.sh b/ct/ironclaw.sh index b56f76e54..4362a2621 100644 --- a/ct/ironclaw.sh +++ b/ct/ironclaw.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="IronClaw" var_tags="${var_tags:-ai;agent;security}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-8}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-8}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-8}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if [[ ! -f /usr/local/bin/ironclaw ]]; then msg_error "No ${APP} Installation Found!" exit @@ -54,7 +63,45 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + if [[ ! -f /usr/local/bin/ironclaw ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + RELEASE="ironclaw-v0.29.1" + if check_for_gh_release "ironclaw-bin" "nearai/ironclaw" "${RELEASE}" "IronClaw 1.0 (Reborn) is a ground-up rearchitecture with an incompatible CLI/config format; pinned until this script supports it"; then + msg_info "Stopping Service" + rc-service ironclaw stop 2>/dev/null || true + msg_ok "Stopped Service" + + msg_info "Backing up Configuration" + cp /root/.ironclaw/.env /root/ironclaw.env.bak + msg_ok "Backed up Configuration" + + fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "${RELEASE}" "/usr/local/bin" \ + "ironclaw-$(uname -m)-unknown-linux-musl.tar.gz" + chmod +x /usr/local/bin/ironclaw + + msg_info "Restoring Configuration" + cp /root/ironclaw.env.bak /root/.ironclaw/.env + rm -f /root/ironclaw.env.bak + msg_ok "Restored Configuration" + + msg_info "Starting Service" + rc-service ironclaw start + msg_ok "Started Service" + msg_ok "Updated successfully!" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/loki.sh b/ct/loki.sh index d1c6a2570..b2373529e 100644 --- a/ct/loki.sh +++ b/ct/loki.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: hoholms # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Loki" var_tags="${var_tags:-monitoring;logs}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if ! dpkg -s loki >/dev/null 2>&1; then msg_error "No ${APP} Installation Found!" exit 233 @@ -69,7 +78,42 @@ function update_script() { exit ;; esac - exit 0 +} + +update_alpine() { + LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) + + CHOICE=$(msg_menu "Loki Update Options" \ + "1" "Check for Loki Updates" \ + "2" "Allow 0.0.0.0 for listening" \ + "3" "Allow only ${LXCIP} for listening") + + case $CHOICE in + 1) + $STD apk -U upgrade + msg_ok "Updated successfully!" + exit + ;; + 2) + sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/loki + service loki restart + msg_ok "Allowed listening on all interfaces!" + exit + ;; + 3) + sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/loki + service loki restart + msg_ok "Allowed listening only on ${LXCIP}!" + exit + ;; + esac +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/mariadb.sh b/ct/mariadb.sh index 4d425132d..30687acb2 100644 --- a/ct/mariadb.sh +++ b/ct/mariadb.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="MariaDB" var_tags="${var_tags:-database}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /etc/mysql/mariadb.conf.d ]]; then msg_error "No ${APP} Installation Found!" exit @@ -33,7 +43,28 @@ function update_script() { $STD apt update $STD apt -y upgrade msg_ok "Updated successfully!" - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating MariaDB" + $STD apk upgrade mariadb mariadb-client + msg_ok "Updated MariaDB" + + msg_info "Restarting MariaDB" + $STD rc-service mariadb restart + msg_ok "Restarted MariaDB" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/node-red.sh b/ct/node-red.sh index 6debbd438..317c1dd89 100644 --- a/ct/node-red.sh +++ b/ct/node-red.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Node-Red" var_tags="${var_tags:-automation}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /root/.node-red ]]; then msg_error "No ${APP} Installation Found!" exit @@ -86,6 +96,32 @@ function update_script() { fi } +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Node.js and npm" + $STD apk upgrade nodejs npm + msg_ok "Updated Node.js and npm" + + msg_info "Updating Node-RED" + $STD npm install -g --unsafe-perm node-red + msg_ok "Updated Node-RED" + + msg_info "Restarting Node-RED" + $STD rc-service nodered restart + msg_ok "Restarted Node-RED" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update +} + start build_container description diff --git a/ct/ntfy.sh b/ct/ntfy.sh index da1c46911..aa6dc0bc2 100644 --- a/ct/ntfy.sh +++ b/ct/ntfy.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: CrazyWolf13 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="ntfy" var_tags="${var_tags:-notification}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-2}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /etc/ntfy ]]; then msg_error "No ${APP} Installation Found!" exit @@ -48,7 +58,29 @@ function update_script() { $STD apt upgrade -y msg_ok "Updated ntfy" msg_ok "Updated successfully!" - exit +} + +update_alpine() { + if [[ ! -d /etc/ntfy ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_info "Updating ntfy LXC" + $STD apk -U upgrade + setcap 'cap_net_bind_service=+ep' /usr/bin/ntfy + msg_ok "Updated ntfy LXC" + + msg_info "Restarting ntfy" + rc-service ntfy restart + msg_ok "Restarted ntfy" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/postgresql.sh b/ct/postgresql.sh index f84563ab6..91fb6a542 100644 --- a/ct/postgresql.sh +++ b/ct/postgresql.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,31 +10,60 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="PostgreSQL" var_tags="${var_tags:-database}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors +update_deb_based() { + if ! command -v psql >/dev/null 2>&1; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_info "Updating ${APP} LXC" + $STD apt update + $STD apt -y upgrade + msg_ok "Updated successfully!" +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating PostgreSQL" + $STD apk upgrade postgresql postgresql-contrib + msg_ok "Updated PostgreSQL" + + msg_info "Restarting PostgreSQL" + $STD rc-service postgresql restart + msg_ok "Restarted PostgreSQL" + msg_ok "Updated successfully!" +} + function update_script() { - header_info - check_container_storage - check_container_resources - if ! command -v psql >/dev/null 2>&1; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating ${APP} LXC" - $STD apt update - $STD apt -y upgrade - msg_ok "Updated successfully!" - exit + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/prometheus.sh b/ct/prometheus.sh index d6507ba29..9692bf5a9 100644 --- a/ct/prometheus.sh +++ b/ct/prometheus.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Prometheus" var_tags="${var_tags:-monitoring}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /etc/systemd/system/prometheus.service ]]; then msg_error "No ${APP} Installation Found!" exit @@ -42,7 +52,28 @@ function update_script() { msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Prometheus" + $STD apk upgrade prometheus + msg_ok "Updated Prometheus" + + msg_info "Restarting Prometheus" + $STD rc-service prometheus restart + msg_ok "Restarted Prometheus" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/rclone.sh b/ct/rclone.sh index 6c791d258..5e468725f 100644 --- a/ct/rclone.sh +++ b/ct/rclone.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: SlaviΕ‘a AreΕΎina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Rclone" var_tags="${var_tags:-os}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" -var_fuse="${var_fuse:-yes}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/rclone ]]; then msg_error "No ${APP} Installation Found!" exit @@ -41,7 +50,32 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + if [ ! -d /opt/rclone ]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [ "${RELEASE}" != "$(cat /opt/rclone_version.txt)" ] || [ ! -f /opt/rclone_version.txt ]; then + msg_info "Updating ${APP} LXC" + temp_file=$(mktemp) + curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-$(arch_resolve).zip" -o "$temp_file" + $STD unzip -o "$temp_file" '*/**' -d /opt/rclone + rm -f "$temp_file" + echo "${RELEASE}" >/opt/rclone_version.txt + msg_ok "Updated successfully!" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/redis.sh b/ct/redis.sh index e1c8e509c..c15b17780 100644 --- a/ct/redis.sh +++ b/ct/redis.sh @@ -1,40 +1,90 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) +# Author: tteck (tteckster) | MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://redis.io/ APP="Redis" var_tags="${var_tags:-database}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine 3.24 (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /lib/systemd/system/redis-server.service ]]; then msg_error "No ${APP} Installation Found!" - exit + exit 1 fi msg_info "Updating $APP LXC" $STD apt update $STD apt upgrade -y msg_ok "Updated $APP LXC" - msg_ok "Updated successfully!" - exit +} + +update_alpine() { + if [[ ! -f /etc/init.d/redis ]]; then + msg_error "No ${APP} Installation Found!" + exit 1 + fi + + LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) + CHOICE=$(msg_menu "Redis Management" \ + "1" "Update Redis" \ + "2" "Allow 0.0.0.0 for listening" \ + "3" "Allow only ${LXCIP} for listening") + + case "$CHOICE" in + 1) + msg_info "Updating Redis" + $STD apk update + $STD apk upgrade redis + rc-service redis restart + msg_ok "Updated Redis" + ;; + 2) + msg_info "Setting Redis to listen on all interfaces" + sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf + rc-service redis restart + msg_ok "Redis now listens on all interfaces" + ;; + 3) + msg_info "Setting Redis to listen only on ${LXCIP}" + sed -i "s/^bind .*/bind ${LXCIP}/" /etc/redis.conf + rc-service redis restart + msg_ok "Redis now listens only on ${LXCIP}" + ;; + esac +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/rustdeskserver.sh b/ct/rustdeskserver.sh index 8831bda20..27b0a6cf2 100644 --- a/ct/rustdeskserver.sh +++ b/ct/rustdeskserver.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: SlaviΕ‘a AreΕΎina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="RustDesk Server" var_tags="${var_tags:-remote-desktop}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-512}" + var_disk="${var_disk:-3}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if [[ ! -x /usr/bin/hbbr ]]; then msg_error "No ${APP} Installation Found!" exit @@ -50,7 +59,58 @@ function update_script() { msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + if [[ ! -d /opt/rustdesk-server ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + if [ "${RELEASE}" != "$(cat ~/.rustdesk-server 2>/dev/null)" ] || [ ! -f ~/.rustdesk-server ]; then + msg_info "Updating RustDesk Server to v${RELEASE}" + $STD apk -U upgrade + $STD service rustdesk-server-hbbs stop + $STD service rustdesk-server-hbbr stop + temp_file1=$(mktemp) + ARCH=$(arch_resolve "amd64" "arm64v8") + curl -fsSL "https://github.com/lejianwen/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-${ARCH}.zip" -o "$temp_file1" + $STD unzip "$temp_file1" + cp -r "$ARCH"/* /opt/rustdesk-server/ + echo "${RELEASE}" >~/.rustdesk-server + $STD service rustdesk-server-hbbs start + $STD service rustdesk-server-hbbr start + rm -rf "$ARCH" + rm -f "$temp_file1" + msg_ok "Updated RustDesk Server" + else + msg_ok "No update required. ${APP} is already at v${RELEASE}" + fi + if [ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ] || [ ! -f ~/.rustdesk-api ]; then + msg_info "Updating RustDesk API to v${APIRELEASE}" + $STD service rustdesk-api stop + temp_file2=$(mktemp) + curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-$(arch_resolve).tar.gz" -o "$temp_file2" + $STD tar zxvf "$temp_file2" + cp -r release/* /opt/rustdesk-api + echo "${APIRELEASE}" >~/.rustdesk-api + $STD service rustdesk-api start + rm -rf release + rm -f "$temp_file2" + msg_ok "Updated RustDesk API" + else + msg_ok "No update required. RustDesk API is already at v${APIRELEASE}" + fi + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/rustypaste.sh b/ct/rustypaste.sh index 33b705fd4..a1215436c 100644 --- a/ct/rustypaste.sh +++ b/ct/rustypaste.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: GoldenSpringness # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,23 +10,30 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m APP="rustypaste" var_tags="${var_tags:-pastebin;storage}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-20}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-4}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-20}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - +update_deb_based() { if [[ ! -f /opt/rustypaste/rustypaste ]]; then msg_error "No ${APP} Installation Found!" exit @@ -50,7 +59,30 @@ function update_script() { if check_for_gh_release "rustypaste-cli" "orhun/rustypaste-cli"; then fetch_and_deploy_gh_release "rustypaste-cli" "orhun/rustypaste-cli" "prebuild" "latest" "/usr/local/bin" "*x86_64-unknown-linux-gnu.tar.gz" fi - exit +} + +update_alpine() { + if ! apk info -e rustypaste >/dev/null 2>&1; then + msg_error "No ${APP} Installation Found!" + exit + fi + + msg_info "Updating RustyPaste" + $STD apk update + $STD apk upgrade rustypaste --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community + msg_ok "Updated RustyPaste" + + msg_info "Restarting Services" + $STD rc-service rustypaste restart + msg_ok "Restarted Services" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/syncthing.sh b/ct/syncthing.sh index d786a1bf7..d47850341 100644 --- a/ct/syncthing.sh +++ b/ct/syncthing.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Syncthing" var_tags="${var_tags:-sync}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-8}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-8}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /etc/apt/sources.list.d/syncthing.list && ! -f /etc/apt/sources.list.d/syncthing.sources ]]; then msg_error "No ${APP} Installation Found!" exit @@ -33,7 +43,28 @@ function update_script() { $STD apt update $STD apt upgrade -y msg_ok "Updated successfully!" - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Syncthing" + $STD apk upgrade syncthing + msg_ok "Updated Syncthing" + + msg_info "Restarting Syncthing" + $STD rc-service syncthing restart + msg_ok "Restarted Syncthing" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/teamspeak-server.sh b/ct/teamspeak-server.sh index f85706708..0476fa98b 100644 --- a/ct/teamspeak-server.sh +++ b/ct/teamspeak-server.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: tremor021 (SlaviΕ‘a AreΕΎina) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Teamspeak-Server" var_tags="${var_tags:-voice;communication}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-no}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-2}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/teamspeak-server ]]; then msg_error "No ${APP} Installation Found!" exit @@ -50,7 +60,38 @@ function update_script() { else msg_ok "Already up to date" fi - exit +} + +update_alpine() { + if [[ ! -d /opt/teamspeak-server ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | awk 'NR==1') + + if [ "${RELEASE}" != "$(cat ~/.teamspeak-server)" ] || [ ! -f ~/.teamspeak-server ]; then + msg_info "Updating ${APP} LXC" + $STD apk -U upgrade + $STD service teamspeak stop + curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2 + tar -xf ./ts3server.tar.bz2 + cp -ru teamspeak3-server_linux_amd64/* /opt/teamspeak-server/ + rm -f ~/ts3server.tar.bz* + rm -rf teamspeak3-server_linux_amd64 + echo "${RELEASE}" >~/.teamspeak-server + $STD service teamspeak start + msg_ok "Updated successfully!" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/tinyauth.sh b/ct/tinyauth.sh index 4209e974a..d31d11040 100644 --- a/ct/tinyauth.sh +++ b/ct/tinyauth.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Tinyauth" var_tags="${var_tags:-auth}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-2}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/tinyauth ]]; then msg_error "No ${APP} Installation Found!" exit @@ -41,7 +51,59 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + if [[ ! -d /opt/tinyauth ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + msg_info "Updating packages" + $STD apk -U upgrade + msg_ok "Updated packages" + + RELEASE=$(curl -s https://api.github.com/repos/tinyauthapp/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + if [ "${RELEASE}" != "$(cat ~/.tinyauth 2>/dev/null)" ] || [ ! -f ~/.tinyauth ]; then + msg_info "Stopping Service" + $STD service tinyauth stop + msg_ok "Service Stopped" + + if [[ -f /opt/tinyauth/.env ]] && ! grep -q "^TINYAUTH_" /opt/tinyauth/.env; then + msg_info "Migrating .env to v5 format" + sed -i \ + -e 's/^DATABASE_PATH=/TINYAUTH_DATABASE_PATH=/' \ + -e 's/^USERS=/TINYAUTH_AUTH_USERS=/' \ + -e "s/^USERS='/TINYAUTH_AUTH_USERS='/" \ + -e 's/^APP_URL=/TINYAUTH_APPURL=/' \ + -e 's/^SECRET=/TINYAUTH_AUTH_SECRET=/' \ + -e 's/^PORT=/TINYAUTH_SERVER_PORT=/' \ + -e 's/^ADDRESS=/TINYAUTH_SERVER_ADDRESS=/' \ + /opt/tinyauth/.env + msg_ok "Migrated .env to v5 format" + fi + + msg_info "Updating Tinyauth" + rm -f /opt/tinyauth/tinyauth + curl -fsSL "https://github.com/tinyauthapp/tinyauth/releases/download/v${RELEASE}/tinyauth-$(arch_resolve)" -o /opt/tinyauth/tinyauth + chmod +x /opt/tinyauth/tinyauth + echo "${RELEASE}" >~/.tinyauth + msg_ok "Updated Tinyauth" + + msg_info "Restarting Tinyauth" + $STD service tinyauth start + msg_ok "Restarted Tinyauth" + msg_ok "Updated successfully!" + else + msg_ok "No update required. ${APP} is already at ${RELEASE}" + fi +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/traefik.sh b/ct/traefik.sh index 523f648ef..b135c8a60 100644 --- a/ct/traefik.sh +++ b/ct/traefik.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Traefik" var_tags="${var_tags:-proxy}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-512}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-2}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /etc/systemd/system/traefik.service ]]; then msg_error "No ${APP} Installation Found!" exit @@ -41,7 +51,24 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating traefik from edge" + $STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community + msg_ok "Updated traefik" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/transmission.sh b/ct/transmission.sh index 0257ce7ec..ee86f8194 100644 --- a/ct/transmission.sh +++ b/ct/transmission.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Transmission" var_tags="${var_tags:-torrent}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-8}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-2048}" + var_disk="${var_disk:-8}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /etc/transmission-daemon/settings.json ]]; then msg_error "No ${APP} Installation Found!" exit @@ -33,7 +43,28 @@ function update_script() { $STD apt -y upgrade msg_ok "Updated Transmission" msg_ok "Updated successfully!" - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "Updating Transmission" + $STD apk upgrade transmission-daemon + msg_ok "Updated Transmission" + + msg_info "Restarting Transmission" + $STD rc-service transmission-daemon restart + msg_ok "Restarted Transmission" + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/valkey.sh b/ct/valkey.sh index 7d5e2694f..73645a22d 100644 --- a/ct/valkey.sh +++ b/ct/valkey.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 community-scripts ORG # Author: pshankinclarke (lazarillo) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,32 +10,80 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Valkey" var_tags="${var_tags:-database}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -f /lib/systemd/system/valkey-server.service ]]; then - msg_error "No Valkey Installation Found!" - exit - fi - msg_info "Updating Valkey LXC" - $STD apt update - $STD apt -y upgrade - msg_ok "Updated Valkey LXC" +update_deb_based() { + if [[ ! -f /lib/systemd/system/valkey-server.service ]]; then + msg_error "No Valkey Installation Found!" + exit + fi + msg_info "Updating Valkey LXC" + $STD apt update + $STD apt -y upgrade + msg_ok "Updated Valkey LXC" + msg_ok "Updated successfully!" +} + +update_alpine() { + LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) + + CHOICE=$(msg_menu "Valkey Management" \ + "1" "Update Valkey" \ + "2" "Allow 0.0.0.0 for listening" \ + "3" "Allow only ${LXCIP} for listening") + + case $CHOICE in + 1) + msg_info "Updating Valkey" + apk update && apk upgrade valkey + rc-service valkey restart + msg_ok "Updated Valkey" msg_ok "Updated successfully!" exit + ;; + 2) + msg_info "Setting Valkey to listen on all interfaces" + sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf + rc-service valkey restart + msg_ok "Valkey now listens on all interfaces!" + exit + ;; + 3) + msg_info "Setting Valkey to listen only on ${LXCIP}" + sed -i "s/^bind .*/bind ${LXCIP}/" /etc/valkey/valkey.conf + rc-service valkey restart + msg_ok "Valkey now listens only on ${LXCIP}!" + exit + ;; + esac +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/vaultwarden.sh b/ct/vaultwarden.sh index 8d7a01345..5ac6f3855 100644 --- a/ct/vaultwarden.sh +++ b/ct/vaultwarden.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Vaultwarden" var_tags="${var_tags:-password-manager}" var_cpu="${var_cpu:-4}" -var_ram="${var_ram:-6144}" -var_disk="${var_disk:-20}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-6144}" + var_disk="${var_disk:-20}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -f /etc/systemd/system/vaultwarden.service ]]; then msg_error "No ${APP} Installation Found!" exit @@ -115,6 +125,48 @@ function update_script() { fi } +update_alpine() { + CHOICE=$(msg_menu "Vaultwarden Update Options" \ + "1" "Update Vaultwarden" \ + "2" "Reset ADMIN_TOKEN") + + case $CHOICE in + 1) + $STD apk -U upgrade + rc-service vaultwarden restart -q + msg_ok "Updated successfully!" + exit + ;; + 2) + if [[ "${PHS_SILENT:-0}" == "1" ]]; then + msg_warn "Reset ADMIN_TOKEN requires interactive mode, skipping." + exit + fi + read -r -s -p "Setup your ADMIN_TOKEN (make it strong): " NEWTOKEN + echo "" + if [[ -n "$NEWTOKEN" ]]; then + if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi + TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1) + if [[ ! -f /var/lib/vaultwarden/config.json ]]; then + sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden + else + sed -i "s|\"admin_token\": .*|\"admin_token\": \"${TOKEN}\",|" /var/lib/vaultwarden/config.json + fi + rc-service vaultwarden restart -q + msg_ok "Admin token updated" + fi + exit + ;; + esac +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update +} + start build_container description diff --git a/ct/wireguard.sh b/ct/wireguard.sh index 864c79222..87d73055f 100644 --- a/ct/wireguard.sh +++ b/ct/wireguard.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,28 +10,35 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Wireguard" var_tags="${var_tags:-network;vpn}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-4}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" -var_tun="${var_tun:-1}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-512}" + var_disk="${var_disk:-4}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /etc/wireguard ]]; then msg_error "No ${APP} Installation Found!" exit fi - + ensure_dependencies git msg_info "Updating LXC" @@ -43,7 +52,32 @@ function update_script() { fi msg_ok "Updated LXC" msg_ok "Updated successfully!" - exit +} + +update_alpine() { + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + msg_info "update wireguard-tools" + $STD apk add --no-cache --upgrade wireguard-tools + msg_ok "wireguard-tools updated" + + if [[ -d /etc/wgdashboard/src ]]; then + msg_info "update WGDashboard" + cd /etc/wgdashboard/src + echo "y" | ./wgd.sh update >/dev/null 2>&1 + $STD ./wgd.sh start + msg_ok "WGDashboard updated" + fi + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/ct/zigbee2mqtt.sh b/ct/zigbee2mqtt.sh index 714090477..0d3cba5b9 100644 --- a/ct/zigbee2mqtt.sh +++ b/ct/zigbee2mqtt.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") # Copyright (c) 2021-2026 tteck # Author: tteck (tteckster) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -8,22 +10,30 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Zigbee2MQTT" var_tags="${var_tags:-smarthome;zigbee;mqtt}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-5}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-0}" +if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then + var_os=$(msg_menu "Choose the container OS" \ + "debian" "Debian 13" \ + "alpine" "Alpine (smaller footprint)") +fi + +if [[ "${var_os:-}" == "alpine" ]]; then + var_ram="${var_ram:-256}" + var_disk="${var_disk:-1}" + var_version="${var_version:-3.24}" +else + var_ram="${var_ram:-1024}" + var_disk="${var_disk:-5}" + var_version="${var_version:-13}" +fi header_info "$APP" variables color catch_errors -function update_script() { - header_info - check_container_storage - check_container_resources +update_deb_based() { if [[ ! -d /opt/zigbee2mqtt ]]; then msg_error "No ${APP} Installation Found!" exit @@ -62,7 +72,18 @@ function update_script() { msg_ok "Started Service" msg_ok "Updated successfully!" fi - exit +} + +update_alpine() { + $STD apk -U upgrade + msg_ok "Updated successfully!" +} + +function update_script() { + header_info + check_container_storage + check_container_resources + run_os_update } start diff --git a/install/adguard-install.sh b/install/adguard-install.sh index 37c80e318..5880d9b31 100644 --- a/install/adguard-install.sh +++ b/install/adguard-install.sh @@ -13,10 +13,11 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "AdGuardHome" "AdguardTeam/AdGuardHome" "prebuild" "latest" "/opt/AdGuardHome" "AdGuardHome_linux_$(arch_resolve).tar.gz" +setup_deb_based() { + fetch_and_deploy_gh_release "AdGuardHome" "AdguardTeam/AdGuardHome" "prebuild" "latest" "/opt/AdGuardHome" "AdGuardHome_linux_$(arch_resolve).tar.gz" -msg_info "Creating Service" -cat </etc/systemd/system/AdGuardHome.service + msg_info "Creating Service" + cat </etc/systemd/system/AdGuardHome.service [Unit] Description=AdGuard Home: Network-level blocker ConditionFileIsExecutable=/opt/AdGuardHome/AdGuardHome @@ -36,8 +37,43 @@ EnvironmentFile=-/etc/sysconfig/AdGuardHome [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now AdGuardHome -msg_ok "Created Service" + systemctl enable -q --now AdGuardHome + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Downloading AdGuard Home" + $STD curl -fsSL -o /tmp/AdGuardHome_linux_$(arch_resolve).tar.gz \ + "https://github.com/AdguardTeam/AdGuardHome/releases/latest/download/AdGuardHome_linux_$(arch_resolve).tar.gz" + msg_ok "Downloaded AdGuard Home" + + msg_info "Installing AdGuard Home" + $STD tar -xzf /tmp/AdGuardHome_linux_$(arch_resolve).tar.gz -C /opt + $STD rm /tmp/AdGuardHome_linux_$(arch_resolve).tar.gz + msg_ok "Installed AdGuard Home" + + msg_info "Creating AdGuard Home Service" + cat </etc/init.d/adguardhome +#!/sbin/openrc-run +name="AdGuardHome" +description="AdGuard Home Service" +command="/opt/AdGuardHome/AdGuardHome" +command_background="yes" +pidfile="/run/adguardhome.pid" +EOF + $STD chmod +x /etc/init.d/adguardhome + msg_ok "Created AdGuard Home Service" + + msg_info "Enabling AdGuard Home Service" + $STD rc-update add adguardhome default + msg_ok "Enabled AdGuard Home Service" + + msg_info "Starting AdGuard Home" + $STD rc-service adguardhome start + msg_ok "Started AdGuard Home" +} + +run_os_setup motd_ssh customize diff --git a/install/alpine-adguard-install.sh b/install/alpine-adguard-install.sh deleted file mode 100644 index d1446bfcb..000000000 --- a/install/alpine-adguard-install.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://adguardhome.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Downloading AdGuard Home" -$STD curl -fsSL -o /tmp/AdGuardHome_linux_$(arch_resolve).tar.gz \ -"https://github.com/AdguardTeam/AdGuardHome/releases/latest/download/AdGuardHome_linux_$(arch_resolve).tar.gz" -msg_ok "Downloaded AdGuard Home" - -msg_info "Installing AdGuard Home" -$STD tar -xzf /tmp/AdGuardHome_linux_$(arch_resolve).tar.gz -C /opt -$STD rm /tmp/AdGuardHome_linux_$(arch_resolve).tar.gz -msg_ok "Installed AdGuard Home" - -msg_info "Creating AdGuard Home Service" -cat </etc/init.d/adguardhome -#!/sbin/openrc-run -name="AdGuardHome" -description="AdGuard Home Service" -command="/opt/AdGuardHome/AdGuardHome" -command_background="yes" -pidfile="/run/adguardhome.pid" -EOF -$STD chmod +x /etc/init.d/adguardhome -msg_ok "Created AdGuard Home Service" - -msg_info "Enabling AdGuard Home Service" -$STD rc-update add adguardhome default -msg_ok "Enabled AdGuard Home Service" - -msg_info "Starting AdGuard Home" -$STD rc-service adguardhome start -msg_ok "Started AdGuard Home" - -motd_ssh -customize diff --git a/install/alpine-bitmagnet-install.sh b/install/alpine-bitmagnet-install.sh deleted file mode 100644 index 6bb31de7b..000000000 --- a/install/alpine-bitmagnet-install.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: SlaviΕ‘a AreΕΎina (tremor021) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/bitmagnet-io/bitmagnet - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing dependencies" -$STD apk add --no-cache \ - gcc \ - musl-dev \ - git \ - iproute2-ss \ - sudo -$STD apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community go -msg_ok "Installed dependencies" - -msg_info "Installing PostgreSQL" -$STD apk add --no-cache \ - postgresql16 \ - postgresql16-contrib \ - postgresql16-openrc -$STD rc-update add postgresql -$STD rc-service postgresql start -msg_ok "Installed PostreSQL" - -RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') - -msg_info "Installing bitmagnet v${RELEASE}" -mkdir -p /opt/bitmagnet -temp_file=$(mktemp) -curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" -tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet -cd /opt/bitmagnet -VREL=v$RELEASE -$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL" -chmod +x bitmagnet -$STD su - postgres -c "psql -c 'CREATE DATABASE bitmagnet;'" -echo "${RELEASE}" >/opt/bitmagnet_version.txt -msg_ok "Installed bitmagnet v${RELEASE}" - -read -rp "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey - -msg_info "Enabling bitmagnet Service" -cat </etc/init.d/bitmagnet -#!/sbin/openrc-run -description="bitmagnet Service" -directory="/opt/bitmagnet" -command="/opt/bitmagnet/bitmagnet" -command_args="worker run --all" -command_background="true" -command_user="root" -pidfile="/var/run/bitmagnet.pid" - -depend() { - use net -} - -start_pre() { - export TMDB_API_KEY="$tmdbapikey" -} -EOF -chmod +x /etc/init.d/bitmagnet -$STD rc-update add bitmagnet default -msg_ok "Enabled bitmagnet Service" - -msg_info "Starting bitmagnet" -$STD service bitmagnet start -msg_ok "Started bitmagnet" - -motd_ssh -customize - -msg_info "Cleaning up" -rm -f "$temp_file" -$STD apk cache clean -msg_ok "Cleaned" diff --git a/install/alpine-caddy-install.sh b/install/alpine-caddy-install.sh deleted file mode 100644 index dc2b7eff2..000000000 --- a/install/alpine-caddy-install.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: cobalt (cobaltgit) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://caddyserver.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Caddy" -$STD apk add --no-cache caddy caddy-openrc -cat </etc/caddy/Caddyfile -:80 { - # Set this path to your site's directory. - root * /var/www/html - - # Enable the static file server. - file_server - - # Another common task is to set up a reverse proxy: - # reverse_proxy localhost:8080 - - # Or serve a PHP site through php-fpm: - # php_fastcgi localhost:9000 -} -EOF -mkdir -p /var/www/html -cat </var/www/html/index.html - - - - Caddy works! - - -

Hello Caddy!

-

For more information, refer to the Caddy documentation

- - -EOF -msg_ok "Installed Caddy" - -read -r -p "${TAB3}Would you like to install xCaddy Addon? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - GO_VERSION="$(curl -fsSL https://go.dev/VERSION?m=text | head -1 | cut -c3-)" setup_go - msg_info "Setup xCaddy" - cd /opt - RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.tar.gz" -o "xcaddy_${RELEASE:1}_linux_amd64.tar.gz" - $STD tar xzf xcaddy_"${RELEASE:1}"_linux_amd64.tar.gz -C /usr/local/bin xcaddy - rm -rf /opt/xcaddy* - $STD xcaddy build - msg_ok "Setup xCaddy" -fi - -msg_info "Enabling Caddy Service" -$STD rc-update add caddy default -msg_ok "Enabled Caddy Service" - -msg_info "Starting Caddy" -$STD service caddy start -msg_ok "Started Caddy" - -motd_ssh -customize diff --git a/install/alpine-docker-install.sh b/install/alpine-docker-install.sh deleted file mode 100644 index 91a07a770..000000000 --- a/install/alpine-docker-install.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.docker.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add tzdata openssl -msg_ok "Installed Dependencies" - -msg_info "Installing Docker" -$STD apk add docker -$STD rc-service docker start -$STD rc-update add docker default -msg_ok "Installed Docker" - -get_latest_release() { - curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4 -} -DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose") -PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent") - -read -r -p "${TAB3}Would you like to add Docker Compose? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" - DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} - mkdir -p "$DOCKER_CONFIG"/cli-plugins - curl -fsSL https://github.com/docker/compose/releases/download/"$DOCKER_COMPOSE_LATEST_VERSION"/docker-compose-linux-$(arch_resolve "x86_64" "aarch64") -o ~/.docker/cli-plugins/docker-compose - chmod +x "$DOCKER_CONFIG"/cli-plugins/docker-compose - msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" -fi - -if prompt_confirm "${TAB3}Would you like to install Portainer (UI) via the community-scripts addon?" "n" 60; then - bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)" <<<"y" -else - read -r -p "${TAB3}Would you like to add the Portainer Agent? " prompt - if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION" - $STD docker run -d \ - -p 9001:9001 \ - --name portainer_agent \ - --restart=always \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -v /var/lib/docker/volumes:/var/lib/docker/volumes \ - portainer/agent - msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" - fi -fi - -read -r -p "${TAB3}Would you like to expose the Docker TCP socket? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Exposing Docker TCP socket" - $STD mkdir -p /etc/docker - $STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' >/etc/docker/daemon.json - $STD rc-service docker restart - msg_ok "Exposed Docker TCP socket at tcp://+:2375" -fi - -motd_ssh -customize diff --git a/install/alpine-forgejo-install.sh b/install/alpine-forgejo-install.sh deleted file mode 100644 index b09a6414f..000000000 --- a/install/alpine-forgejo-install.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: Johann3s-H (An!ma) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://forgejo.org/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Forgejo" -$STD apk add --no-cache forgejo -msg_ok "Installed Forgejo" - -msg_info "Enabling Forgejo Service" -$STD rc-update add forgejo default -msg_ok "Enabled Forgejo Service" - -msg_info "Starting Forgejo" -$STD service forgejo start -msg_ok "Started Forgejo" - -motd_ssh -customize diff --git a/install/alpine-garage-install.sh b/install/alpine-garage-install.sh deleted file mode 100644 index 476f98dd7..000000000 --- a/install/alpine-garage-install.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://garagehq.deuxfleurs.fr/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add --no-cache openssl -msg_ok "Installed Dependencies" - -GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name') -curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage -chmod +x /usr/local/bin/garage -mkdir -p /var/lib/garage/{data,meta,snapshots} -mkdir -p /etc/garage -RPC_SECRET=$(openssl rand -hex 64 | cut -c1-64) -ADMIN_TOKEN=$(openssl rand -base64 32) -METRICS_TOKEN=$(openssl rand -base64 32) -cat <~/garage.creds -Garage Tokens and Secrets -RPC Secret: $RPC_SECRET -Admin Token: $ADMIN_TOKEN -Metrics Token: $METRICS_TOKEN -EOF -echo $GITEA_RELEASE >>~/.garage -cat </etc/garage.toml -metadata_dir = "/var/lib/garage/meta" -data_dir = "/var/lib/garage/data" -db_engine = "sqlite" -replication_factor = 1 - -rpc_bind_addr = "0.0.0.0:3901" -rpc_public_addr = "127.0.0.1:3901" -rpc_secret = "${RPC_SECRET}" - -[s3_api] -s3_region = "garage" -api_bind_addr = "0.0.0.0:3900" -root_domain = ".s3.garage" - -[s3_web] -bind_addr = "0.0.0.0:3902" -root_domain = ".web.garage" -index = "index.html" - -[k2v_api] -api_bind_addr = "0.0.0.0:3904" - -[admin] -api_bind_addr = "0.0.0.0:3903" -admin_token = "${ADMIN_TOKEN}" -metrics_token = "${METRICS_TOKEN}" -EOF -msg_ok "Configured Garage" - -msg_info "Creating Service" -cat <<'EOF' >/etc/init.d/garage -#!/sbin/openrc-run -name="Garage Object Storage" -command="/usr/local/bin/garage" -command_args="server" -command_background="yes" -pidfile="/run/garage.pid" -depend() { - need net -} -EOF - -chmod +x /etc/init.d/garage -$STD rc-update add garage default -$STD rc-service garage restart || rc-service garage start -msg_ok "Service active" - -motd_ssh -customize diff --git a/install/alpine-gatus-install.sh b/install/alpine-gatus-install.sh deleted file mode 100644 index 6bab8a41c..000000000 --- a/install/alpine-gatus-install.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: SlaviΕ‘a AreΕΎina (tremor021) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/TwiN/gatus - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing dependencies" -$STD apk add --no-cache \ - ca-certificates \ - libcap-setcap -$STD apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community go -msg_ok "Installed dependencies" - -RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -msg_info "Installing gatus v${RELEASE}" -temp_file=$(mktemp) -mkdir -p /opt/gatus -curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" -tar zxf "$temp_file" --strip-components=1 -C /opt/gatus -cd /opt/gatus -$STD go mod tidy -CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . -setcap CAP_NET_RAW+ep gatus -mv config.yaml config -echo "${RELEASE}" >/opt/gatus_version.txt -msg_ok "Installed gatus v${RELEASE}" - -msg_info "Enabling gatus Service" -cat </etc/init.d/gatus -#!/sbin/openrc-run -description="gatus Service" -directory="/opt/gatus" -command="/opt/gatus/gatus" -command_args="" -command_background="true" -command_user="root" -pidfile="/var/run/gatus.pid" - -export GATUS_CONFIG_PATH="" -export GATUS_LOG_LEVEL="INFO" -export PORT="8080" - -depend() { - use net -} -EOF -chmod +x /etc/init.d/gatus -$STD rc-update add gatus default -msg_ok "Enabled gatus Service" - -msg_info "Starting gatus" -$STD service gatus start -msg_ok "Started gatus" - -motd_ssh -customize - -msg_info "Cleaning up" -rm -f "$temp_file" -$STD apk cache clean -msg_ok "Cleaned" diff --git a/install/alpine-gitea-install.sh b/install/alpine-gitea-install.sh deleted file mode 100644 index dc7b8225b..000000000 --- a/install/alpine-gitea-install.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://gitea.io/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Gitea" -$STD apk add --no-cache gitea -msg_ok "Installed Gitea" - -msg_info "Enabling Gitea Service" -$STD rc-update add gitea default -msg_ok "Enabled Gitea Service" - -msg_info "Starting Gitea" -$STD service gitea start -msg_ok "Started Gitea" - -motd_ssh -customize diff --git a/install/alpine-grafana-install.sh b/install/alpine-grafana-install.sh deleted file mode 100644 index 6920bceb2..000000000 --- a/install/alpine-grafana-install.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://grafana.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Grafana" -$STD apk add grafana -$STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/grafana -$STD rc-service grafana start -$STD rc-update add grafana default -msg_ok "Installed Grafana" - -motd_ssh -customize diff --git a/install/alpine-ironclaw-install.sh b/install/alpine-ironclaw-install.sh deleted file mode 100644 index 84936637a..000000000 --- a/install/alpine-ironclaw-install.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/nearai/ironclaw - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add openssl dbus gnome-keyring -msg_ok "Installed Dependencies" - -msg_info "Installing PostgreSQL" -$STD apk add postgresql17 postgresql17-openrc postgresql-pgvector postgresql-common -$STD rc-service postgresql setup -$STD rc-update add postgresql default -$STD rc-service postgresql start -msg_ok "Installed PostgreSQL" - -msg_info "Setting up Database" -PG_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13) -$STD su -s /bin/sh postgres -c "psql -c \"CREATE ROLE ironclaw WITH LOGIN PASSWORD '${PG_PASS}';\"" -$STD su -s /bin/sh postgres -c "psql -c \"CREATE DATABASE ironclaw WITH OWNER ironclaw;\"" -$STD su -s /bin/sh postgres -c "psql -d ironclaw -c \"CREATE EXTENSION IF NOT EXISTS vector;\"" -msg_ok "Set up Database" - -fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "ironclaw-v0.29.1" "/usr/local/bin" \ - "ironclaw-$(uname -m)-unknown-linux-musl.tar.gz" -chmod +x /usr/local/bin/ironclaw - -msg_info "Configuring Environment" -GATEWAY_TOKEN=$(openssl rand -hex 32) -mkdir -p /root/.ironclaw -cat </root/.ironclaw/gateway.creds -Gateway-Token -Token: $GATEWAY_TOKEN -EOF - -mkdir -p /root/.ironclaw -cat </root/.ironclaw/.env -DATABASE_BACKEND=postgres -DATABASE_URL=postgresql://ironclaw:${PG_PASS}@localhost:5432/ironclaw?sslmode=disable -GATEWAY_ENABLED=true -GATEWAY_HOST=0.0.0.0 -GATEWAY_PORT=3000 -GATEWAY_AUTH_TOKEN=${GATEWAY_TOKEN} -CLI_ENABLED=false -RUST_LOG=ironclaw=info,tower_http=info -EOF -chmod 600 /root/.ironclaw/.env -msg_ok "Configured Environment" - -msg_info "Configuring IronClaw" -# Set values in the database since it is typically the true source of truth and ensures values are set correctly on first run before the service starts. -/usr/local/bin/ironclaw --no-onboard config set database_backend postgres >/dev/null -/usr/local/bin/ironclaw --no-onboard config set database_url "postgresql://ironclaw:${PG_PASS}@localhost:5432/ironclaw?sslmode=disable" >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_enabled true >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_host 0.0.0.0 >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_port 3000 >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_auth_token "${GATEWAY_TOKEN}" >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.cli_enabled false >/dev/null -/usr/local/bin/ironclaw --no-onboard config set secrets_master_key_source none >/dev/null -# Running ironclaw defaults to use env for secrets and creates this entry, but we want to set that during onboard. -sleep 5 -sed -i '/SECRETS_MASTER_KEY/d' /root/.ironclaw/.env -msg_ok "Configured IronClaw" - -msg_info "Creating Service" -cat </etc/init.d/ironclaw -#!/sbin/openrc-run - -name="IronClaw" -description="IronClaw AI Agent" -command="/usr/bin/dbus-run-session" -command_args="/usr/local/bin/ironclaw" -command_background=true -pidfile="/run/ironclaw.pid" -directory="/root" -supervise_daemon_args="--env-file /root/.ironclaw/.env" - -depend() { - need net postgresql -} -EOF -chmod +x /etc/init.d/ironclaw -$STD rc-update add ironclaw default -msg_ok "Created Service" - -motd_ssh -customize diff --git a/install/alpine-loki-install.sh b/install/alpine-loki-install.sh deleted file mode 100644 index 738d3b8d1..000000000 --- a/install/alpine-loki-install.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 community-scripts ORG -# Author: hoholms -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/grafana/loki - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Loki" -$STD apk add loki -$STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/loki -mkdir -p /var/lib/loki/{chunks,boltdb-shipper-active,boltdb-shipper-cache} -chown -R loki:grafana /var/lib/loki -mkdir -p /var/log/loki -chown -R loki:grafana /var/log/loki -cat </etc/loki/loki-local-config.yaml -auth_enabled: false - -server: - http_listen_port: 3100 - log_level: info - -common: - instance_addr: 127.0.0.1 - path_prefix: /var/lib/loki - storage: - filesystem: - chunks_directory: /var/lib/loki/chunks - rules_directory: /var/lib/loki/rules - replication_factor: 1 - ring: - kvstore: - store: inmemory - -schema_config: - configs: - - from: 2020-10-24 - store: tsdb - object_store: filesystem - schema: v13 - index: - prefix: index_ - period: 24h - -query_range: - results_cache: - cache: - embedded_cache: - enabled: true - max_size_mb: 100 - -limits_config: - metric_aggregation_enabled: true - -ruler: - alertmanager_url: http://localhost:9093 -EOF -chown loki:grafana /etc/loki/loki-local-config.yaml -chmod 644 /etc/loki/loki-local-config.yaml -echo "output_log=\"\${output_log:-/var/log/loki/output.log}\"" >> /etc/init.d/loki -echo "error_log=\"\${error_log:-/var/log/loki/error.log}\"" >> /etc/init.d/loki -echo "start_stop_daemon_args=\"\${SSD_OPTS} -1 \${output_log} -2 \${error_log}\"" >> /etc/init.d/loki -$STD rc-update add loki default -$STD rc-service loki start -msg_ok "Installed Loki" - -motd_ssh -customize -cleanup_lxc diff --git a/install/alpine-mariadb-install.sh b/install/alpine-mariadb-install.sh deleted file mode 100644 index fb3142efa..000000000 --- a/install/alpine-mariadb-install.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://mariadb.org/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing MariaDB" -$STD apk add --no-cache mariadb mariadb-client -$STD rc-update add mariadb default -msg_ok "Installed MariaDB" - -msg_info "Configuring MariaDB" -mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql >/dev/null 2>&1 -$STD rc-service mariadb start -msg_ok "MariaDB Configured" - -read -r -p "${TAB3}Would you like to install Adminer with lighttpd? : " prompt -if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - msg_info "Installing Adminer and dependencies" - $STD apk add --no-cache \ - lighttpd \ - lighttpd-openrc \ - php83 \ - php83-cgi \ - php83-common \ - php83-curl \ - php83-gd \ - php83-mbstring \ - php83-mysqli \ - php83-mysqlnd \ - php83-openssl \ - php83-zip \ - php83-session \ - jq - - sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf - sed -i 's|/usr/bin/php-cgi|/usr/bin/php-cgi83|g' /etc/lighttpd/mod_fastcgi.conf - mkdir -p /var/www/localhost/htdocs - ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//') - curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php - chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php - chmod 755 /var/www/localhost/htdocs/adminer.php - msg_ok "Adminer Installed" - - msg_info "Starting Lighttpd" - $STD rc-update add lighttpd default - $STD rc-service lighttpd restart - msg_ok "Lighttpd Started" -fi - -motd_ssh -customize - -msg_info "Cleaning up" -msg_ok "Cleaned" diff --git a/install/alpine-node-red-install.sh b/install/alpine-node-red-install.sh deleted file mode 100644 index 07cd3ecdd..000000000 --- a/install/alpine-node-red-install.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://nodered.org/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add --no-cache \ - git \ - nodejs \ - npm -msg_ok "Installed Dependencies" - -msg_info "Creating Node-RED User" -adduser -D -H -s /sbin/nologin -G users nodered -msg_ok "Created Node-RED User" - -msg_info "Installing Node-RED" -$STD npm install -g --unsafe-perm node-red -msg_ok "Installed Node-RED" - -msg_info "Creating /home/nodered" -mkdir -p /home/nodered -chown -R nodered:users /home/nodered -chmod 750 /home/nodered -msg_ok "Created /home/nodered" - -msg_info "Creating Node-RED Service" -service_path="/etc/init.d/nodered" - -echo '#!/sbin/openrc-run -description="Node-RED Service" - -command="/usr/local/bin/node-red" -command_args="--max-old-space-size=128 -v" -command_user="nodered" -pidfile="/var/run/nodered.pid" -command_background="yes" - -depend() { - use net -}' >$service_path - -chmod +x $service_path -msg_ok "Created Node-RED Service" - -msg_info "Starting Node-RED" -$STD rc-update add nodered -$STD rc-service nodered start -msg_ok "Started Node-RED" - -motd_ssh -customize diff --git a/install/alpine-ntfy-install.sh b/install/alpine-ntfy-install.sh deleted file mode 100644 index 4f14c79e0..000000000 --- a/install/alpine-ntfy-install.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: cobalt (cobaltgit) -# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Source: https://ntfy.sh/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing ntfy" -$STD apk add --no-cache ntfy ntfy-openrc libcap -sed -i '/^listen-http/s/^\(.*\)$/#\1\n/' /etc/ntfy/server.yml -setcap 'cap_net_bind_service=+ep' /usr/bin/ntfy -$STD rc-update add ntfy default -$STD service ntfy start -msg_ok "Installed ntfy" - -motd_ssh -customize diff --git a/install/alpine-postgresql-install.sh b/install/alpine-postgresql-install.sh deleted file mode 100644 index 0156237fd..000000000 --- a/install/alpine-postgresql-install.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.postgresql.org/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -read -r -p "${TAB3}Enter PostgreSQL version (15/16/17): " ver -[[ $ver =~ ^(15|16|17)$ ]] || { echo "Invalid version"; exit 64; } - -msg_info "Installing PostgreSQL ${ver}" -$STD apk add --no-cache postgresql${ver} postgresql${ver}-contrib postgresql${ver}-openrc sudo -msg_ok "Installed PostgreSQL ${ver}" - -msg_info "Enabling PostgreSQL Service" -$STD rc-update add postgresql default -msg_ok "Enabled PostgreSQL Service" - -msg_info "Starting PostgreSQL" -$STD rc-service postgresql start -msg_ok "Started PostgreSQL" - -msg_info "Configuring PostgreSQL for External Access" -conf_file="/etc/postgresql${ver}/postgresql.conf" -hba_file="/etc/postgresql${ver}/pg_hba.conf" -sed -i 's/^#listen_addresses =.*/listen_addresses = '\''*'\''/' "$conf_file" -sed -i '/^host\s\+all\s\+all\s\+127.0.0.1\/32\s\+md5/ s/.*/host all all 0.0.0.0\/0 md5/' "$hba_file" -$STD rc-service postgresql restart -msg_ok "Configured and Restarted PostgreSQL" - -read -r -p "${TAB3}Would you like to install Adminer with lighttpd? : " prompt -if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - msg_info "Installing Adminer and dependencies" - $STD apk add --no-cache \ - lighttpd \ - lighttpd-openrc \ - php83 \ - php83-cgi \ - php83-common \ - php83-curl \ - php83-gd \ - php83-mbstring \ - php83-pdo \ - php83-pgsql \ - php83-openssl \ - php83-zip \ - php83-session \ - jq - - sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf - sed -i 's|/usr/bin/php-cgi|/usr/bin/php-cgi83|g' /etc/lighttpd/mod_fastcgi.conf - mkdir -p /var/www/localhost/htdocs - ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//') - curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php - chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php - chmod 755 /var/www/localhost/htdocs/adminer.php - msg_ok "Adminer Installed" - - msg_info "Starting Lighttpd" - $STD rc-update add lighttpd default - $STD rc-service lighttpd restart - msg_ok "Lighttpd Started" -fi - -motd_ssh -customize diff --git a/install/alpine-prometheus-install.sh b/install/alpine-prometheus-install.sh deleted file mode 100644 index d374abfb9..000000000 --- a/install/alpine-prometheus-install.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://prometheus.io/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Prometheus" -$STD apk add --no-cache prometheus -msg_ok "Installed Prometheus" - -msg_info "Enabling Prometheus Service" -$STD rc-update add prometheus default -msg_ok "Enabled Prometheus Service" - -msg_info "Starting Prometheus" -$STD service prometheus start -msg_ok "Started Prometheus" - -motd_ssh -customize diff --git a/install/alpine-rclone-install.sh b/install/alpine-rclone-install.sh deleted file mode 100644 index 40b345763..000000000 --- a/install/alpine-rclone-install.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: SlaviΕ‘a AreΕΎina (tremor021) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/rclone/rclone - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing dependencies" -$STD apk add --no-cache \ - apache2-utils fuse3 -msg_ok "Installed dependencies" - -msg_info "Installing rclone" -temp_file=$(mktemp) -mkdir -p /opt/rclone -RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-$(arch_resolve).zip" -o "$temp_file" -$STD unzip -j "$temp_file" '*/**' -d /opt/rclone -cd /opt/rclone -RCLONE_PASSWORD=$(head -c 16 /dev/urandom | xxd -p -c 16) -$STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD" -cat <~/rclone.creds -rclone-Credentials -rclone User Name: admin -rclone Password: $RCLONE_PASSWORD -EOF -echo "${RELEASE}" >/opt/rclone_version.txt -rm -f "$temp_file" -msg_ok "Installed rclone" - -msg_info "Enabling rclone Service" -cat </etc/init.d/rclone -#!/sbin/openrc-run -description="rclone Service" -command="/opt/rclone/rclone" -command_args="rcd --rc-web-gui --rc-web-gui-no-open-browser --rc-addr :3000 --rc-htpasswd /opt/login.pwd" -command_background="true" -command_user="root" -pidfile="/var/run/rclone.pid" - -depend() { - use net -} -EOF -chmod +x /etc/init.d/rclone -$STD rc-update add rclone default -msg_ok "Enabled rclone Service" - -msg_info "Starting rclone" -$STD service rclone start -msg_ok "Started rclone" - -motd_ssh -customize - -msg_info "Cleaning up" -rm -rf "$temp_file" -$STD apk cache clean -msg_ok "Cleaned" diff --git a/install/alpine-redis-install.sh b/install/alpine-redis-install.sh deleted file mode 100644 index 5b0e4e824..000000000 --- a/install/alpine-redis-install.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://redis.io/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Redis" -$STD apk add redis -$STD sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf -$STD rc-update add redis default -$STD rc-service redis start -msg_ok "Installed Redis" - -motd_ssh -customize diff --git a/install/alpine-rustdeskserver-install.sh b/install/alpine-rustdeskserver-install.sh deleted file mode 100644 index 99d3fae4e..000000000 --- a/install/alpine-rustdeskserver-install.sh +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: SlaviΕ‘a AreΕΎina (tremor021) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/rustdesk/rustdesk-server - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -RELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -msg_info "Installing RustDesk Server v${RELEASE}" -temp_file1=$(mktemp) -ARCH=$(arch_resolve "amd64" "arm64v8") -curl -fsSL "https://github.com/lejianwen/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-${ARCH}.zip" -o "$temp_file1" -$STD unzip "$temp_file1" -mv "$ARCH" /opt/rustdesk-server -mkdir -p /root/.config/rustdesk -cd /opt/rustdesk-server -./rustdesk-utils genkeypair >/tmp/rustdesk_keys.txt -grep "Public Key" /tmp/rustdesk_keys.txt | awk '{print $3}' >/root/.config/rustdesk/id_ed25519.pub -grep "Secret Key" /tmp/rustdesk_keys.txt | awk '{print $3}' >/root/.config/rustdesk/id_ed25519 -chmod 600 /root/.config/rustdesk/id_ed25519 -chmod 644 /root/.config/rustdesk/id_ed25519.pub -rm /tmp/rustdesk_keys.txt -echo "${RELEASE}" >~/.rustdesk-server -msg_ok "Installed RustDesk Server v${RELEASE}" - -APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -msg_info "Installing RustDesk API v${APIRELEASE}" -temp_file2=$(mktemp) -curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-$(arch_resolve).tar.gz" -o "$temp_file2" -$STD tar zxvf "$temp_file2" -mv release /opt/rustdesk-api -cd /opt/rustdesk-api -ADMINPASS=$(head -c 16 /dev/urandom | xxd -p -c 16) -$STD ./apimain reset-admin-pwd "$ADMINPASS" -cat <~/rustdesk.creds -RustDesk WebUI - -Username: admin -Password: $ADMINPASS -EOF -echo "${APIRELEASE}" >~/.rustdesk-api -msg_ok "Installed RustDesk API v${APIRELEASE}" - -msg_info "Enabling RustDesk Server Services" -cat </etc/init.d/rustdesk-server-hbbs -#!/sbin/openrc-run -description="RustDesk HBBS Service" -directory="/opt/rustdesk-server" -command="/opt/rustdesk-server/hbbs" -command_args="" -command_background="true" -command_user="root" -pidfile="/var/run/rustdesk-server-hbbs.pid" -output_log="/var/log/rustdesk-hbbs.log" -error_log="/var/log/rustdesk-hbbs.err" - -depend() { - use net -} -EOF - -cat </etc/init.d/rustdesk-server-hbbr -#!/sbin/openrc-run -description="RustDesk HBBR Service" -directory="/opt/rustdesk-server" -command="/opt/rustdesk-server/hbbr" -command_args="" -command_background="true" -command_user="root" -pidfile="/var/run/rustdesk-server-hbbr.pid" -output_log="/var/log/rustdesk-hbbr.log" -error_log="/var/log/rustdesk-hbbr.err" - -depend() { - use net -} -EOF - -cat </etc/init.d/rustdesk-api -#!/sbin/openrc-run -description="RustDesk API Service" -directory="/opt/rustdesk-api" -command="/opt/rustdesk-api/apimain" -command_args="" -command_background="true" -command_user="root" -pidfile="/var/run/rustdesk-api.pid" -output_log="/var/log/rustdesk-api.log" -error_log="/var/log/rustdesk-api.err" - -depend() { - use net -} -EOF -chmod +x /etc/init.d/rustdesk-server-hbbs -chmod +x /etc/init.d/rustdesk-server-hbbr -chmod +x /etc/init.d/rustdesk-api -$STD rc-update add rustdesk-server-hbbs default -$STD rc-update add rustdesk-server-hbbr default -$STD rc-update add rustdesk-api default -msg_ok "Enabled RustDesk Server Services" - -msg_info "Starting RustDesk Server" -$STD service rustdesk-server-hbbs start -$STD service rustdesk-server-hbbr start -$STD service rustdesk-api start -msg_ok "Started RustDesk Server" - -motd_ssh -customize - -msg_info "Cleaning up" -rm -f "$temp_file1" "$temp_file2" -$STD apk cache clean -msg_ok "Cleaned" diff --git a/install/alpine-rustypaste-install.sh b/install/alpine-rustypaste-install.sh deleted file mode 100644 index f45707aba..000000000 --- a/install/alpine-rustypaste-install.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/orhun/rustypaste - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing RustyPaste" -$STD apk add --no-cache rustypaste --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community -msg_ok "Installed RustyPaste" - -msg_info "Configuring RustyPaste" -mkdir -p /var/lib/rustypaste -sed -i 's|^address = ".*"|address = "0.0.0.0:8000"|' /etc/rustypaste/config.toml -msg_ok "Configured RustyPaste" - -msg_info "Creating Service" -cat <<'EOF' >/etc/init.d/rustypaste -#!/sbin/openrc-run - -name="rustypaste" -description="RustyPaste - A minimal file upload/pastebin service" -command="/usr/bin/rustypaste" -command_args="" -command_user="root" -command_background=true -pidfile="/run/${RC_SVCNAME}.pid" -directory="/var/lib/rustypaste" - -depend() { - need net - after firewall -} - -start_pre() { - export CONFIG=/etc/rustypaste/config.toml - checkpath --directory --owner root:root --mode 0755 /var/lib/rustypaste -} -EOF -chmod +x /etc/init.d/rustypaste -$STD rc-update add rustypaste default -$STD rc-service rustypaste start -msg_ok "Created Service" - -motd_ssh -customize -cleanup_lxc diff --git a/install/alpine-syncthing-install.sh b/install/alpine-syncthing-install.sh deleted file mode 100644 index 2dd468c7b..000000000 --- a/install/alpine-syncthing-install.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://syncthing.net/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Setup Syncthing" -$STD apk add --no-cache syncthing -rc-service syncthing start -sleep 3 -rc-service syncthing stop -sed -i "{s/127.0.0.1:8384/0.0.0.0:8384/g}" /var/lib/syncthing/.local/state/syncthing/config.xml -msg_ok "Setup Syncthing" - -msg_info "Enabling Syncthing Service" -$STD rc-update add syncthing default -msg_ok "Enabled Syncthing Service" - -msg_info "Starting Syncthing" -$STD rc-service syncthing start -msg_ok "Started Syncthing" - -motd_ssh -customize diff --git a/install/alpine-teamspeak-server-install.sh b/install/alpine-teamspeak-server-install.sh deleted file mode 100644 index 63ef8a063..000000000 --- a/install/alpine-teamspeak-server-install.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: tremor021 (SlaviΕ‘a AreΕΎina) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://teamspeak.com/en/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing dependencies" -$STD apk add --no-cache \ - ca-certificates \ - libstdc++ \ - libc6-compat -msg_ok "Installed dependencies" - -RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | awk 'NR==1') -msg_info "Installing Teamspeak Server v${RELEASE}" -mkdir -p /opt/teamspeak-server -cd /opt/teamspeak-server -curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2 -tar xf ts3server.tar.bz2 --strip-components=1 -mkdir -p logs data lib -mv *.so lib -touch data/ts3server.sqlitedb data/query_ip_blacklist.txt data/query_ip_whitelist.txt .ts3server_license_accepted -echo "${RELEASE}" >~/.teamspeak-server -msg_ok "Installed TeamSpeak Server v${RELEASE}" - -msg_info "Enabling TeamSpeak Server Service" -cat </etc/init.d/teamspeak -#!/sbin/openrc-run - -name="TeamSpeak Server" -description="TeamSpeak 3 Server" -command="/opt/teamspeak-server/ts3server_startscript.sh" -command_args="start" -output_log="/var/log/teamspeak.out.log" -error_log="/var/log/teamspeak.err.log" -command_background=true -pidfile="/run/teamspeak-server.pid" -directory="/opt/teamspeak-server" - -depend() { - need net - use dns -} -EOF -chmod +x /etc/init.d/teamspeak -$STD rc-update add teamspeak default -msg_ok "Enabled TeamSpeak Server Service" - -msg_info "Starting TeamSpeak Server" -$STD service teamspeak start -msg_ok "Started TeamSpeak Server" - -motd_ssh -customize - -msg_info "Cleaning up" -rm -r ts3server.tar.bz* LICENSE* CHANGELOG doc serverquerydocs tsdns redist -$STD apk cache clean -msg_ok "Cleaned" diff --git a/install/alpine-tinyauth-install.sh b/install/alpine-tinyauth-install.sh deleted file mode 100644 index e9d26a1fa..000000000 --- a/install/alpine-tinyauth-install.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: SlaviΕ‘a AreΕΎina (tremor021) | Co-Author: Stavros (steveiliop56) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/tinyauthapp/tinyauth - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add --no-cache openssl apache2-utils -msg_ok "Installed Dependencies" - -msg_info "Installing Tinyauth" -mkdir -p /opt/tinyauth -RELEASE=$(curl -s https://api.github.com/repos/tinyauthapp/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -curl -fsSL "https://github.com/tinyauthapp/tinyauth/releases/download/v${RELEASE}/tinyauth-$(arch_resolve)" -o /opt/tinyauth/tinyauth -chmod +x /opt/tinyauth/tinyauth -PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8) -USER=$(htpasswd -Bbn "tinyauth" "${PASS}") - -cat </opt/tinyauth/credentials.txt -Tinyauth Credentials -Username: tinyauth -Password: ${PASS} -EOF -echo "${RELEASE}" >~/.tinyauth -msg_ok "Installed Tinyauth" - -read -r -p "${TAB3}Enter your Tinyauth subdomain (e.g. https://tinyauth.example.com): " app_url - -cat </opt/tinyauth/.env -TINYAUTH_DATABASE_PATH=/opt/tinyauth/database.db -TINYAUTH_AUTH_USERS='${USER}' -TINYAUTH_APPURL=${app_url} -EOF - -msg_info "Creating Service" -cat <<'EOF' >/etc/init.d/tinyauth -#!/sbin/openrc-run -description="Tinyauth Service" - -set -a -ENV_FILE="/opt/tinyauth/.env" -[ -f "$ENV_FILE" ] && . "$ENV_FILE" -set +a - -command="/opt/tinyauth/tinyauth" -directory="/opt/tinyauth" -command_user="root" -command_background="true" -pidfile="/var/run/tinyauth.pid" - -depend() { - use net -} -EOF -chmod +x /etc/init.d/tinyauth -$STD rc-update add tinyauth default -msg_ok "Enabled Tinyauth Service" - -msg_info "Starting Tinyauth" -$STD service tinyauth start -msg_ok "Started Tinyauth" - -motd_ssh -customize diff --git a/install/alpine-traefik-install.sh b/install/alpine-traefik-install.sh deleted file mode 100644 index 652e9658b..000000000 --- a/install/alpine-traefik-install.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add ca-certificates -$STD update-ca-certificates -msg_ok "Installed Dependencies" - -msg_info "Installing Traefik" -$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community -msg_ok "Installed Traefik" - -read -p "${TAB3}Enable Traefik WebUI (Port 8080)? [y/N]: " enable_webui -if [[ "$enable_webui" =~ ^[Yy]$ ]]; then - msg_info "Configuring Traefik WebUI" - sed -i 's/localhost//g' /etc/traefik/traefik.yaml - msg_ok "Configured Traefik WebUI" -fi - -msg_info "Enabling and starting Traefik service" -$STD rc-update add traefik default -sed -i '/^command=.*/i directory="/etc/traefik"' /etc/init.d/traefik -$STD rc-service traefik start -msg_ok "Traefik service started" - -motd_ssh -customize diff --git a/install/alpine-transmission-install.sh b/install/alpine-transmission-install.sh deleted file mode 100644 index d7cc76e1f..000000000 --- a/install/alpine-transmission-install.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: SlaviΕ‘a AreΕΎina (tremor021) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://transmissionbt.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Transmission" -$STD apk add --no-cache transmission-cli transmission-daemon -$STD rc-service transmission-daemon start -sleep 5 -$STD rc-service transmission-daemon stop -sed -i '{s/"rpc-whitelist-enabled": true/"rpc-whitelist-enabled": false/g; s/"rpc-host-whitelist-enabled": true,/"rpc-host-whitelist-enabled": false,/g}' /var/lib/transmission/config/settings.json -msg_ok "Installed Transmission" - -msg_info "Enabling Transmission Service" -$STD rc-update add transmission-daemon default -msg_ok "Enabled Transmission Service" - -msg_info "Starting Transmission" -$STD rc-service transmission-daemon start -msg_ok "Started Transmission" - -motd_ssh -customize diff --git a/install/alpine-valkey-install.sh b/install/alpine-valkey-install.sh deleted file mode 100644 index 02d80865e..000000000 --- a/install/alpine-valkey-install.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: pshankinclarke (lazarillo) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://valkey.io/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Valkey" -$STD apk add valkey valkey-openrc valkey-cli -sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf - -PASS="$(head -c 100 /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c32)" -echo "requirepass $PASS" >>/etc/valkey/valkey.conf -echo "$PASS" >~/valkey.creds -chmod 600 ~/valkey.creds - -MEMTOTAL_MB=$(free -m | grep ^Mem: | awk '{print $2}') -MAXMEMORY_MB=$((MEMTOTAL_MB * 75 / 100)) - -cat </etc/valkey/valkey.conf -# Memory-optimized settings for small-scale deployments -maxmemory ${MAXMEMORY_MB}mb -maxmemory-policy allkeys-lru -maxmemory-samples 10 -EOF -msg_ok "Installed Valkey" - -# Note: Alpine's valkey package is compiled without TLS support -# For TLS, use the Debian-based valkey script instead - -$STD rc-update add valkey default -$STD rc-service valkey start - -motd_ssh -customize -cleanup_lxc diff --git a/install/alpine-vaultwarden-install.sh b/install/alpine-vaultwarden-install.sh deleted file mode 100644 index 729ef050b..000000000 --- a/install/alpine-vaultwarden-install.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) | Co-Author: SlaviΕ‘a AreΕΎina (tremor021) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/dani-garcia/vaultwarden - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add --no-cache \ - openssl \ - argon2 -msg_ok "Installed Dependencies" - -msg_info "Installing Alpine-Vaultwarden" -$STD apk add --no-cache vaultwarden -sed -i 's|export WEB_VAULT_ENABLED=.*|export WEB_VAULT_ENABLED=true|' /etc/conf.d/vaultwarden -echo -e "export ADMIN_TOKEN=''" >>/etc/conf.d/vaultwarden -echo -e "export ROCKET_ADDRESS=0.0.0.0" >>/etc/conf.d/vaultwarden -echo -e "export ROCKET_TLS='{certs=\"/etc/ssl/certs/vaultwarden-selfsigned.crt\",key=\"/etc/ssl/private/vaultwarden-selfsigned.key\"}'" >>/etc/conf.d/vaultwarden -$STD openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/vaultwarden-selfsigned.key -out /etc/ssl/certs/vaultwarden-selfsigned.crt -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost" -chown vaultwarden:vaultwarden /etc/ssl/certs/vaultwarden-selfsigned.crt -chown vaultwarden:vaultwarden /etc/ssl/private/vaultwarden-selfsigned.key -msg_ok "Installed Alpine-Vaultwarden" - -msg_info "Installing Web-Vault" -$STD apk add --no-cache vaultwarden-web-vault -msg_ok "Installed Web-Vault" - -msg_info "Starting Alpine-Vaultwarden" -$STD rc-service vaultwarden start -$STD rc-update add vaultwarden default -msg_ok "Started Alpine-Vaultwarden" - -motd_ssh -customize diff --git a/install/alpine-wireguard-install.sh b/install/alpine-wireguard-install.sh deleted file mode 100644 index 8456f0365..000000000 --- a/install/alpine-wireguard-install.sh +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.wireguard.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add \ - iptables \ - openrc -msg_ok "Installed Dependencies" - -msg_info "Installing WireGuard" -$STD apk add --no-cache wireguard-tools -if [[ ! -L /etc/init.d/wg-quick.wg0 ]]; then - ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg0 -fi - -private_key=$(wg genkey) -cat </etc/wireguard/wg0.conf -[Interface] -PrivateKey = ${private_key} -Address = 10.0.0.1/24 -SaveConfig = true -PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; -PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; -ListenPort = 51820 -EOF -echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf -$STD rc-update add sysctl -$STD sysctl -p /etc/sysctl.conf -msg_ok "Installed WireGuard" - -read -rp "${TAB3}Do you want to install WGDashboard? (y/N): " INSTALL_WGD -if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then - msg_info "Installing additional dependencies for WGDashboard" - $STD apk add --no-cache \ - python3 \ - py3-pip \ - git \ - sudo \ - musl-dev \ - linux-headers \ - gcc \ - python3-dev - msg_ok "Installed additional dependencies for WGDashboard" - msg_info "Installing WGDashboard" - git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard - cd /etc/wgdashboard/src - chmod u+x wgd.sh - $STD ./wgd.sh install - msg_ok "Installed WGDashboard" - - msg_info "Creating Service for WGDashboard" - cat </etc/init.d/wg-dashboard -#!/sbin/openrc-run - -description="WireGuard Dashboard Service" - -depend() { - need net - after firewall -} - -start() { - ebegin "Starting WGDashboard" - cd /etc/wgdashboard/src/ - ./wgd.sh start & - eend $? -} - -stop() { - ebegin "Stopping WGDashboard" - pkill -f "wgd.sh" - eend $? -} -EOF - chmod +x /etc/init.d/wg-dashboard - $STD rc-update add wg-dashboard default - $STD rc-service wg-dashboard start - msg_ok "Created Service for WGDashboard" - -fi - -msg_info "Starting Services" -$STD rc-update add wg-quick.wg0 default -$STD rc-service wg-quick.wg0 start -msg_ok "Started Services" - -motd_ssh -customize diff --git a/install/alpine-zigbee2mqtt-install.sh b/install/alpine-zigbee2mqtt-install.sh deleted file mode 100644 index bb0c1816c..000000000 --- a/install/alpine-zigbee2mqtt-install.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://www.zigbee2mqtt.io/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Alpine-Zigbee2MQTT" -mkdir -p /root/.z2m /etc/zigbee2mqtt -$STD apk add zigbee2mqtt -ln -s /etc/zigbee2mqtt/ /root/.z2m -chown -R root:root /etc/zigbee2mqtt /root/.z2m -sed -i -e 's/#datadir="\/var\/lib\/zigbee2mqtt"/datadir="\/etc\/zigbee2mqtt"/' -e 's/#command_user="zigbee2mqtt"/command_user="root"/' /etc/conf.d/zigbee2mqtt -$STD rc-update add zigbee2mqtt -$STD rc-service zigbee2mqtt restart -msg_ok "Installed Alpine-Zigbee2MQTT" - -motd_ssh -customize diff --git a/install/bitmagnet-install.sh b/install/bitmagnet-install.sh index de33f083e..6a10f33e6 100644 --- a/install/bitmagnet-install.sh +++ b/install/bitmagnet-install.sh @@ -13,43 +13,44 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - iproute2 \ - gcc \ - musl-dev -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + iproute2 \ + gcc \ + musl-dev + msg_ok "Installed Dependencies" -PG_VERSION="16" setup_postgresql -PG_DB_NAME="bitmagnet" PG_DB_USER="bitmagnet" setup_postgresql_db -setup_go + PG_VERSION="16" setup_postgresql + PG_DB_NAME="bitmagnet" PG_DB_USER="bitmagnet" setup_postgresql_db + setup_go -fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" "tarball" -RELEASE=$(cat ~/.bitmagnet) + fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet" "tarball" + RELEASE=$(cat ~/.bitmagnet) -msg_info "Configuring bitmagnet" -cd /opt/bitmagnet -$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=v${RELEASE}" -chmod +x bitmagnet -msg_ok "Configured bitmagnet" + msg_info "Configuring bitmagnet" + cd /opt/bitmagnet + $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=v${RELEASE}" + chmod +x bitmagnet + msg_ok "Configured bitmagnet" -read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey + read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey -cat </etc/bitmagnet.env + cat </etc/bitmagnet.env POSTGRES_HOST=localhost POSTGRES_USER=${PG_DB_USER} POSTGRES_NAME=${PG_DB_NAME} POSTGRES_PASSWORD=${PG_DB_PASS} EOF -if [ -z "$tmdbapikey" ]; then - echo "TMDB_ENABLED=false" >>/etc/bitmagnet.env -else - echo "TMDB_API_KEY=$tmdbapikey" >>/etc/bitmagnet.env -fi + if [ -z "$tmdbapikey" ]; then + echo "TMDB_ENABLED=false" >>/etc/bitmagnet.env + else + echo "TMDB_API_KEY=$tmdbapikey" >>/etc/bitmagnet.env + fi -msg_info "Creating Service" -cat </etc/systemd/system/bitmagnet-web.service + msg_info "Creating Service" + cat </etc/systemd/system/bitmagnet-web.service [Unit] Description=bitmagnet Web GUI After=network-online.target @@ -65,8 +66,78 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now bitmagnet-web -msg_ok "Created Service" + systemctl enable -q --now bitmagnet-web + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing dependencies" + $STD apk add --no-cache \ + gcc \ + musl-dev \ + git \ + iproute2-ss \ + sudo + $STD apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community go + msg_ok "Installed dependencies" + + msg_info "Installing PostgreSQL" + $STD apk add --no-cache \ + postgresql16 \ + postgresql16-contrib \ + postgresql16-openrc + $STD rc-update add postgresql + $STD rc-service postgresql start + msg_ok "Installed PostreSQL" + + RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + + msg_info "Installing bitmagnet v${RELEASE}" + mkdir -p /opt/bitmagnet + temp_file=$(mktemp) + curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" + tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet + cd /opt/bitmagnet + VREL=v$RELEASE + $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL" + chmod +x bitmagnet + $STD su - postgres -c "psql -c 'CREATE DATABASE bitmagnet;'" + echo "${RELEASE}" >/opt/bitmagnet_version.txt + msg_ok "Installed bitmagnet v${RELEASE}" + + read -rp "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey + + msg_info "Enabling bitmagnet Service" + cat </etc/init.d/bitmagnet +#!/sbin/openrc-run +description="bitmagnet Service" +directory="/opt/bitmagnet" +command="/opt/bitmagnet/bitmagnet" +command_args="worker run --all" +command_background="true" +command_user="root" +pidfile="/var/run/bitmagnet.pid" + +depend() { + use net +} + +start_pre() { + export TMDB_API_KEY="$tmdbapikey" +} +EOF + chmod +x /etc/init.d/bitmagnet + $STD rc-update add bitmagnet default + msg_ok "Enabled bitmagnet Service" + + msg_info "Starting bitmagnet" + $STD service bitmagnet start + msg_ok "Started bitmagnet" + + rm -f "$temp_file" +} + +run_os_setup motd_ssh customize diff --git a/install/caddy-install.sh b/install/caddy-install.sh index 6591d4fd0..75e511ad0 100644 --- a/install/caddy-install.sh +++ b/install/caddy-install.sh @@ -13,32 +13,91 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - debian-keyring \ - debian-archive-keyring \ - apt-transport-https -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + debian-keyring \ + debian-archive-keyring \ + apt-transport-https + msg_ok "Installed Dependencies" -msg_info "Installing Caddy" -setup_deb822_repo \ - "caddy" \ - "https://dl.cloudsmith.io/public/caddy/stable/gpg.key" \ - "https://dl.cloudsmith.io/public/caddy/stable/deb/debian" \ - "any-version" -$STD apt install -y caddy -msg_ok "Installed Caddy" + msg_info "Installing Caddy" + setup_deb822_repo \ + "caddy" \ + "https://dl.cloudsmith.io/public/caddy/stable/gpg.key" \ + "https://dl.cloudsmith.io/public/caddy/stable/deb/debian" \ + "any-version" + $STD apt install -y caddy + msg_ok "Installed Caddy" -read -r -p "${TAB3}Would you like to install xCaddy Addon? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - setup_go - fetch_and_deploy_gh_release "xcaddy" "caddyserver/xcaddy" "binary" + read -r -p "${TAB3}Would you like to install xCaddy Addon? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + setup_go + fetch_and_deploy_gh_release "xcaddy" "caddyserver/xcaddy" "binary" - msg_info "Setup xCaddy" - $STD apt install -y git - $STD xcaddy build - msg_ok "Setup xCaddy" -fi + msg_info "Setup xCaddy" + $STD apt install -y git + $STD xcaddy build + msg_ok "Setup xCaddy" + fi +} + +setup_alpine() { + msg_info "Installing Caddy" + $STD apk add --no-cache caddy caddy-openrc + cat </etc/caddy/Caddyfile +:80 { + # Set this path to your site's directory. + root * /var/www/html + + # Enable the static file server. + file_server + + # Another common task is to set up a reverse proxy: + # reverse_proxy localhost:8080 + + # Or serve a PHP site through php-fpm: + # php_fastcgi localhost:9000 +} +EOF + mkdir -p /var/www/html + cat </var/www/html/index.html + + + + Caddy works! + + +

Hello Caddy!

+

For more information, refer to the Caddy documentation

+ + +EOF + msg_ok "Installed Caddy" + + read -r -p "${TAB3}Would you like to install xCaddy Addon? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + GO_VERSION="$(curl -fsSL https://go.dev/VERSION?m=text | head -1 | cut -c3-)" setup_go + msg_info "Setup xCaddy" + cd /opt + RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.tar.gz" -o "xcaddy_${RELEASE:1}_linux_amd64.tar.gz" + $STD tar xzf xcaddy_"${RELEASE:1}"_linux_amd64.tar.gz -C /usr/local/bin xcaddy + rm -rf /opt/xcaddy* + $STD xcaddy build + msg_ok "Setup xCaddy" + fi + + msg_info "Enabling Caddy Service" + $STD rc-update add caddy default + msg_ok "Enabled Caddy Service" + + msg_info "Starting Caddy" + $STD service caddy start + msg_ok "Started Caddy" +} + +run_os_setup motd_ssh customize diff --git a/install/docker-install.sh b/install/docker-install.sh index 904a65938..e042d85f5 100644 --- a/install/docker-install.sh +++ b/install/docker-install.sh @@ -13,64 +13,122 @@ setting_up_container network_check update_os -PORTAINER_AGENT_LATEST_VERSION=$(get_latest_github_release "portainer/agent") +setup_deb_based() { + PORTAINER_AGENT_LATEST_VERSION=$(get_latest_github_release "portainer/agent") -setup_docker + setup_docker -if prompt_confirm "${TAB3}Would you like to install Portainer (UI) via the community-scripts addon?" "n" 60; then - bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)" <<<"y" -else - read -r -p "${TAB3}Would you like to install the Portainer Agent (for remote management)? " prompt_agent - if [[ ${prompt_agent,,} =~ ^(y|yes)$ ]]; then - msg_info "Installing Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" - $STD docker run -d \ - -p 9001:9001 \ - --name portainer_agent \ - --restart=always \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -v /var/lib/docker/volumes:/var/lib/docker/volumes \ - portainer/agent - msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" + if prompt_confirm "${TAB3}Would you like to install Portainer (UI) via the community-scripts addon?" "n" 60; then + bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)" <<<"y" + else + read -r -p "${TAB3}Would you like to install the Portainer Agent (for remote management)? " prompt_agent + if [[ ${prompt_agent,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" + $STD docker run -d \ + -p 9001:9001 \ + --name portainer_agent \ + --restart=always \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /var/lib/docker/volumes:/var/lib/docker/volumes \ + portainer/agent + msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" + fi fi -fi -read -r -p "${TAB3}Expose Docker TCP socket (insecure) ? [n = No, l = Local only (127.0.0.1), a = All interfaces (0.0.0.0)] : " socket_choice -case "${socket_choice,,}" in -l) - socket="tcp://127.0.0.1:2375" - ;; -a) - socket="tcp://0.0.0.0:2375" - ;; -*) - socket="" - ;; -esac + read -r -p "${TAB3}Expose Docker TCP socket (insecure) ? [n = No, l = Local only (127.0.0.1), a = All interfaces (0.0.0.0)] : " socket_choice + case "${socket_choice,,}" in + l) + socket="tcp://127.0.0.1:2375" + ;; + a) + socket="tcp://0.0.0.0:2375" + ;; + *) + socket="" + ;; + esac -if [[ -n "$socket" ]]; then - msg_info "Enabling Docker TCP socket on $socket" - $STD apt-get install -y jq + if [[ -n "$socket" ]]; then + msg_info "Enabling Docker TCP socket on $socket" + $STD apt-get install -y jq - tmpfile=$(mktemp) - jq --arg sock "$socket" '. + { "hosts": ["unix:///var/run/docker.sock", $sock] }' /etc/docker/daemon.json >"$tmpfile" && mv "$tmpfile" /etc/docker/daemon.json + tmpfile=$(mktemp) + jq --arg sock "$socket" '. + { "hosts": ["unix:///var/run/docker.sock", $sock] }' /etc/docker/daemon.json >"$tmpfile" && mv "$tmpfile" /etc/docker/daemon.json - mkdir -p /etc/systemd/system/docker.service.d - cat </etc/systemd/system/docker.service.d/override.conf + mkdir -p /etc/systemd/system/docker.service.d + cat </etc/systemd/system/docker.service.d/override.conf [Service] ExecStart= ExecStart=$(command -v dockerd || echo /usr/sbin/dockerd) EOF - $STD systemctl daemon-reexec - $STD systemctl daemon-reload + $STD systemctl daemon-reexec + $STD systemctl daemon-reload - if systemctl restart docker; then - msg_ok "Docker TCP socket available on $socket" - else - msg_error "Docker failed to restart. Check journalctl -xeu docker.service" - exit 150 + if systemctl restart docker; then + msg_ok "Docker TCP socket available on $socket" + else + msg_error "Docker failed to restart. Check journalctl -xeu docker.service" + exit 150 + fi fi -fi +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add tzdata openssl + msg_ok "Installed Dependencies" + + msg_info "Installing Docker" + $STD apk add docker + $STD rc-service docker start + $STD rc-update add docker default + msg_ok "Installed Docker" + + get_latest_release() { + curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4 + } + DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose") + PORTAINER_AGENT_LATEST_VERSION=$(get_latest_release "portainer/agent") + + read -r -p "${TAB3}Would you like to add Docker Compose? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" + DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} + mkdir -p "$DOCKER_CONFIG"/cli-plugins + curl -fsSL https://github.com/docker/compose/releases/download/"$DOCKER_COMPOSE_LATEST_VERSION"/docker-compose-linux-$(arch_resolve "x86_64" "aarch64") -o ~/.docker/cli-plugins/docker-compose + chmod +x "$DOCKER_CONFIG"/cli-plugins/docker-compose + msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" + fi + + if prompt_confirm "${TAB3}Would you like to install Portainer (UI) via the community-scripts addon?" "n" 60; then + bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/portainer.sh)" <<<"y" + else + read -r -p "${TAB3}Would you like to add the Portainer Agent? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION" + $STD docker run -d \ + -p 9001:9001 \ + --name portainer_agent \ + --restart=always \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /var/lib/docker/volumes:/var/lib/docker/volumes \ + portainer/agent + msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" + fi + fi + + read -r -p "${TAB3}Would you like to expose the Docker TCP socket? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + msg_info "Exposing Docker TCP socket" + $STD mkdir -p /etc/docker + $STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' >/etc/docker/daemon.json + $STD rc-service docker restart + msg_ok "Exposed Docker TCP socket at tcp://+:2375" + fi +} + +run_os_setup motd_ssh customize diff --git a/install/forgejo-install.sh b/install/forgejo-install.sh index 38fa16813..8ab802d25 100644 --- a/install/forgejo-install.sh +++ b/install/forgejo-install.sh @@ -13,27 +13,28 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - git \ - git-lfs -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + git \ + git-lfs + msg_ok "Installed Dependencies" -fetch_and_deploy_codeberg_release "forgejo" "forgejo/forgejo" "singlefile" "latest" "/opt/forgejo" "forgejo-*-linux-$(arch_resolve)" -ln -sf /opt/forgejo/forgejo /usr/local/bin/forgejo + fetch_and_deploy_codeberg_release "forgejo" "forgejo/forgejo" "singlefile" "latest" "/opt/forgejo" "forgejo-*-linux-$(arch_resolve)" + ln -sf /opt/forgejo/forgejo /usr/local/bin/forgejo -msg_info "Setting up Forgejo" -$STD adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git -mkdir /var/lib/forgejo -chown git:git /var/lib/forgejo -chmod 750 /var/lib/forgejo -mkdir /etc/forgejo -chown root:git /etc/forgejo -chmod 770 /etc/forgejo -msg_ok "Setup Forgejo" + msg_info "Setting up Forgejo" + $STD adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git + mkdir /var/lib/forgejo + chown git:git /var/lib/forgejo + chmod 750 /var/lib/forgejo + mkdir /etc/forgejo + chown root:git /etc/forgejo + chmod 770 /etc/forgejo + msg_ok "Setup Forgejo" -msg_info "Creating Service" -cat </etc/systemd/system/forgejo.service + msg_info "Creating Service" + cat </etc/systemd/system/forgejo.service [Unit] Description=Forgejo After=syslog.target @@ -50,8 +51,25 @@ Environment=USER=git HOME=/home/git FORGEJO_WORK_DIR=/var/lib/forgejo [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now forgejo -msg_ok "Created Service" + systemctl enable -q --now forgejo + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Forgejo" + $STD apk add --no-cache forgejo + msg_ok "Installed Forgejo" + + msg_info "Enabling Forgejo Service" + $STD rc-update add forgejo default + msg_ok "Enabled Forgejo Service" + + msg_info "Starting Forgejo" + $STD service forgejo start + msg_ok "Started Forgejo" +} + +run_os_setup motd_ssh customize diff --git a/install/garage-install.sh b/install/garage-install.sh index 469f5c123..4aff53c7b 100644 --- a/install/garage-install.sh +++ b/install/garage-install.sh @@ -13,23 +13,24 @@ setting_up_container network_check update_os -msg_info "Setup Garage" -GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name') -curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage -chmod +x /usr/local/bin/garage -mkdir -p /var/lib/garage/{data,meta,snapshots} -mkdir -p /etc/garage -RPC_SECRET=$(openssl rand -hex 32) -ADMIN_TOKEN=$(openssl rand -base64 32) -METRICS_TOKEN=$(openssl rand -base64 32) -cat <~/garage.creds +setup_deb_based() { + msg_info "Setup Garage" + GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name') + curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage + chmod +x /usr/local/bin/garage + mkdir -p /var/lib/garage/{data,meta,snapshots} + mkdir -p /etc/garage + RPC_SECRET=$(openssl rand -hex 32) + ADMIN_TOKEN=$(openssl rand -base64 32) + METRICS_TOKEN=$(openssl rand -base64 32) + cat <~/garage.creds Garage Tokens and Secrets RPC Secret: $RPC_SECRET Admin Token: $ADMIN_TOKEN Metrics Token: $METRICS_TOKEN EOF -echo $GITEA_RELEASE >>~/.garage -cat </etc/garage.toml + echo $GITEA_RELEASE >>~/.garage + cat </etc/garage.toml metadata_dir = "/var/lib/garage/meta" data_dir = "/var/lib/garage/data" db_engine = "sqlite" @@ -57,10 +58,10 @@ api_bind_addr = "[::]:3903" admin_token = "${ADMIN_TOKEN}" metrics_token = "${METRICS_TOKEN}" EOF -msg_ok "Set up Garage" + msg_ok "Set up Garage" -msg_info "Creating service" -cat <<'EOF' >/etc/systemd/system/garage.service + msg_info "Creating service" + cat <<'EOF' >/etc/systemd/system/garage.service [Unit] Description=Garage Object Storage (Deuxfleurs) After=network-online.target @@ -81,8 +82,80 @@ LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF -$STD systemctl enable -q --now garage -msg_ok "Created Service" + $STD systemctl enable -q --now garage + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add --no-cache openssl + msg_ok "Installed Dependencies" + + GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name') + curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage + chmod +x /usr/local/bin/garage + mkdir -p /var/lib/garage/{data,meta,snapshots} + mkdir -p /etc/garage + RPC_SECRET=$(openssl rand -hex 64 | cut -c1-64) + ADMIN_TOKEN=$(openssl rand -base64 32) + METRICS_TOKEN=$(openssl rand -base64 32) + cat <~/garage.creds +Garage Tokens and Secrets +RPC Secret: $RPC_SECRET +Admin Token: $ADMIN_TOKEN +Metrics Token: $METRICS_TOKEN +EOF + echo $GITEA_RELEASE >>~/.garage + cat </etc/garage.toml +metadata_dir = "/var/lib/garage/meta" +data_dir = "/var/lib/garage/data" +db_engine = "sqlite" +replication_factor = 1 + +rpc_bind_addr = "0.0.0.0:3901" +rpc_public_addr = "127.0.0.1:3901" +rpc_secret = "${RPC_SECRET}" + +[s3_api] +s3_region = "garage" +api_bind_addr = "0.0.0.0:3900" +root_domain = ".s3.garage" + +[s3_web] +bind_addr = "0.0.0.0:3902" +root_domain = ".web.garage" +index = "index.html" + +[k2v_api] +api_bind_addr = "0.0.0.0:3904" + +[admin] +api_bind_addr = "0.0.0.0:3903" +admin_token = "${ADMIN_TOKEN}" +metrics_token = "${METRICS_TOKEN}" +EOF + msg_ok "Configured Garage" + + msg_info "Creating Service" + cat <<'EOF' >/etc/init.d/garage +#!/sbin/openrc-run +name="Garage Object Storage" +command="/usr/local/bin/garage" +command_args="server" +command_background="yes" +pidfile="/run/garage.pid" +depend() { + need net +} +EOF + + chmod +x /etc/init.d/garage + $STD rc-update add garage default + $STD rc-service garage restart || rc-service garage start + msg_ok "Service active" +} + +run_os_setup motd_ssh customize diff --git a/install/gatus-install.sh b/install/gatus-install.sh index 2da993fe1..90b4c33e4 100644 --- a/install/gatus-install.sh +++ b/install/gatus-install.sh @@ -13,25 +13,26 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - ca-certificates \ - libcap2-bin -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + ca-certificates \ + libcap2-bin + msg_ok "Installed Dependencies" -setup_go -fetch_and_deploy_gh_release "gatus" "TwiN/gatus" "tarball" + setup_go + fetch_and_deploy_gh_release "gatus" "TwiN/gatus" "tarball" -msg_info "Configuring gatus" -cd /opt/gatus -$STD go mod tidy -CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . -setcap CAP_NET_RAW+ep gatus -mv config.yaml config -msg_ok "Configured gatus" + msg_info "Configuring gatus" + cd /opt/gatus + $STD go mod tidy + CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . + setcap CAP_NET_RAW+ep gatus + mv config.yaml config + msg_ok "Configured gatus" -msg_info "Creating Service" -cat </etc/systemd/system/gatus.service + msg_info "Creating Service" + cat </etc/systemd/system/gatus.service [Unit] Description=gatus Service After=network.target @@ -46,8 +47,63 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now gatus -msg_ok "Created Service" + systemctl enable -q --now gatus + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing dependencies" + $STD apk add --no-cache \ + ca-certificates \ + libcap-setcap + $STD apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community go + msg_ok "Installed dependencies" + + RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + msg_info "Installing gatus v${RELEASE}" + temp_file=$(mktemp) + mkdir -p /opt/gatus + curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" + tar zxf "$temp_file" --strip-components=1 -C /opt/gatus + cd /opt/gatus + $STD go mod tidy + CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus . + setcap CAP_NET_RAW+ep gatus + mv config.yaml config + echo "${RELEASE}" >/opt/gatus_version.txt + msg_ok "Installed gatus v${RELEASE}" + + msg_info "Enabling gatus Service" + cat </etc/init.d/gatus +#!/sbin/openrc-run +description="gatus Service" +directory="/opt/gatus" +command="/opt/gatus/gatus" +command_args="" +command_background="true" +command_user="root" +pidfile="/var/run/gatus.pid" + +export GATUS_CONFIG_PATH="" +export GATUS_LOG_LEVEL="INFO" +export PORT="8080" + +depend() { + use net +} +EOF + chmod +x /etc/init.d/gatus + $STD rc-update add gatus default + msg_ok "Enabled gatus Service" + + msg_info "Starting gatus" + $STD service gatus start + msg_ok "Started gatus" + + rm -f "$temp_file" +} + +run_os_setup motd_ssh customize diff --git a/install/gitea-install.sh b/install/gitea-install.sh index 83da30c41..4e0da848b 100644 --- a/install/gitea-install.sh +++ b/install/gitea-install.sh @@ -14,27 +14,28 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - git \ - sqlite3 -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + git \ + sqlite3 + msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-$(arch_resolve)" + fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-$(arch_resolve)" -msg_info "Configuring Gitea" -chmod +x /usr/local/bin/gitea -$STD adduser --system --group --disabled-password --shell /bin/bash --home /etc/gitea gitea -mkdir -p /var/lib/gitea/{custom,data,log} -chown -R gitea:gitea /var/lib/gitea/ -chmod -R 750 /var/lib/gitea/ -chown root:gitea /etc/gitea -chmod 770 /etc/gitea -sudo -u gitea ln -s /var/lib/gitea/data/.ssh/ /etc/gitea/.ssh -msg_ok "Configured Gitea" + msg_info "Configuring Gitea" + chmod +x /usr/local/bin/gitea + $STD adduser --system --group --disabled-password --shell /bin/bash --home /etc/gitea gitea + mkdir -p /var/lib/gitea/{custom,data,log} + chown -R gitea:gitea /var/lib/gitea/ + chmod -R 750 /var/lib/gitea/ + chown root:gitea /etc/gitea + chmod 770 /etc/gitea + sudo -u gitea ln -s /var/lib/gitea/data/.ssh/ /etc/gitea/.ssh + msg_ok "Configured Gitea" -msg_info "Creating Service" -cat </etc/systemd/system/gitea.service + msg_info "Creating Service" + cat </etc/systemd/system/gitea.service [Unit] Description=Gitea (Git with a cup of tea) After=syslog.target @@ -64,8 +65,25 @@ Environment=USER=gitea HOME=/var/lib/gitea/data GITEA_WORK_DIR=/var/lib/gitea [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now gitea -msg_ok "Created Service" + systemctl enable -q --now gitea + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Gitea" + $STD apk add --no-cache gitea + msg_ok "Installed Gitea" + + msg_info "Enabling Gitea Service" + $STD rc-update add gitea default + msg_ok "Enabled Gitea Service" + + msg_info "Starting Gitea" + $STD service gitea start + msg_ok "Started Gitea" +} + +run_os_setup motd_ssh customize diff --git a/install/grafana-install.sh b/install/grafana-install.sh index 964c75f67..b33c750f1 100644 --- a/install/grafana-install.sh +++ b/install/grafana-install.sh @@ -13,23 +13,36 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y apt-transport-https -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y apt-transport-https + msg_ok "Installed Dependencies" -msg_info "Setting up Grafana Repository" -setup_deb822_repo \ - "grafana" \ - "https://apt.grafana.com/gpg.key" \ - "https://apt.grafana.com" \ - "stable" \ - "main" -msg_ok "Grafana Repository setup sucessfully" + msg_info "Setting up Grafana Repository" + setup_deb822_repo \ + "grafana" \ + "https://apt.grafana.com/gpg.key" \ + "https://apt.grafana.com" \ + "stable" \ + "main" + msg_ok "Grafana Repository setup sucessfully" -msg_info "Installing Grafana" -$STD apt install -y grafana -systemctl enable -q --now grafana-server -msg_ok "Installed Grafana" + msg_info "Installing Grafana" + $STD apt install -y grafana + systemctl enable -q --now grafana-server + msg_ok "Installed Grafana" +} + +setup_alpine() { + msg_info "Installing Grafana" + $STD apk add grafana + $STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/grafana + $STD rc-service grafana start + $STD rc-update add grafana default + msg_ok "Installed Grafana" +} + +run_os_setup motd_ssh customize diff --git a/install/ironclaw-install.sh b/install/ironclaw-install.sh index b1ba733bf..f88875e5e 100644 --- a/install/ironclaw-install.sh +++ b/install/ironclaw-install.sh @@ -13,30 +13,31 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - dbus-user-session \ - gnome-keyring \ - libsecret-tools -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + dbus-user-session \ + gnome-keyring \ + libsecret-tools + msg_ok "Installed Dependencies" -PG_VERSION="17" PG_MODULES="pgvector" setup_postgresql -PG_DB_NAME="ironclaw" PG_DB_USER="ironclaw" PG_DB_EXTENSIONS="vector" setup_postgresql_db + PG_VERSION="17" PG_MODULES="pgvector" setup_postgresql + PG_DB_NAME="ironclaw" PG_DB_USER="ironclaw" PG_DB_EXTENSIONS="vector" setup_postgresql_db -fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "ironclaw-v0.29.1" "/usr/local/bin" \ - "ironclaw-$(uname -m)-unknown-linux-gnu.tar.gz" -chmod +x /usr/local/bin/ironclaw + fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "ironclaw-v0.29.1" "/usr/local/bin" \ + "ironclaw-$(uname -m)-unknown-linux-gnu.tar.gz" + chmod +x /usr/local/bin/ironclaw -msg_info "Configuring Environment" -GATEWAY_TOKEN=$(openssl rand -hex 32) -mkdir -p /root/.ironclaw -cat </root/.ironclaw/gateway.creds + msg_info "Configuring Environment" + GATEWAY_TOKEN=$(openssl rand -hex 32) + mkdir -p /root/.ironclaw + cat </root/.ironclaw/gateway.creds Gateway-Token Token: $GATEWAY_TOKEN EOF -mkdir -p /root/.ironclaw -cat </root/.ironclaw/.env + mkdir -p /root/.ironclaw + cat </root/.ironclaw/.env DATABASE_BACKEND=postgres DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}?sslmode=disable GATEWAY_ENABLED=true @@ -46,26 +47,26 @@ GATEWAY_AUTH_TOKEN=${GATEWAY_TOKEN} CLI_ENABLED=false RUST_LOG=ironclaw=info,tower_http=info EOF -chmod 600 /root/.ironclaw/.env -msg_ok "Configured Environment" + chmod 600 /root/.ironclaw/.env + msg_ok "Configured Environment" -msg_info "Configuring IronClaw" -# Set values in the database since it is typically the true source of truth and ensures values are set correctly on first run before the service starts. -/usr/local/bin/ironclaw --no-onboard config set database_backend postgres >/dev/null -/usr/local/bin/ironclaw --no-onboard config set database_url "postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}?sslmode=disable" >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_enabled true >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_host 0.0.0.0 >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_port 3000 >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.gateway_auth_token "${GATEWAY_TOKEN}" >/dev/null -/usr/local/bin/ironclaw --no-onboard config set channels.cli_enabled false >/dev/null -/usr/local/bin/ironclaw --no-onboard config set secrets_master_key_source none >/dev/null -# Running ironclaw defaults to use env for secrets and creates this entry, but we want to set that during onboard. -sleep 5 -sed -i '/SECRETS_MASTER_KEY/d' /root/.ironclaw/.env -msg_ok "Configured IronClaw" + msg_info "Configuring IronClaw" + # Set values in the database since it is typically the true source of truth and ensures values are set correctly on first run before the service starts. + /usr/local/bin/ironclaw --no-onboard config set database_backend postgres >/dev/null + /usr/local/bin/ironclaw --no-onboard config set database_url "postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}?sslmode=disable" >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_enabled true >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_host 0.0.0.0 >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_port 3000 >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_auth_token "${GATEWAY_TOKEN}" >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.cli_enabled false >/dev/null + /usr/local/bin/ironclaw --no-onboard config set secrets_master_key_source none >/dev/null + # Running ironclaw defaults to use env for secrets and creates this entry, but we want to set that during onboard. + sleep 5 + sed -i '/SECRETS_MASTER_KEY/d' /root/.ironclaw/.env + msg_ok "Configured IronClaw" -msg_info "Creating Service" -cat </etc/systemd/system/ironclaw.service + msg_info "Creating Service" + cat </etc/systemd/system/ironclaw.service [Unit] Description=IronClaw AI Agent After=network.target postgresql.service @@ -79,8 +80,93 @@ RestartSec=5 [Install] WantedBy=multi-user.target EOF -systemctl enable -q ironclaw -msg_ok "Created Service" + systemctl enable -q ironclaw + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add openssl dbus gnome-keyring + msg_ok "Installed Dependencies" + + msg_info "Installing PostgreSQL" + $STD apk add postgresql17 postgresql17-openrc postgresql-pgvector postgresql-common + $STD rc-service postgresql setup + $STD rc-update add postgresql default + $STD rc-service postgresql start + msg_ok "Installed PostgreSQL" + + msg_info "Setting up Database" + PG_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13) + $STD su -s /bin/sh postgres -c "psql -c \"CREATE ROLE ironclaw WITH LOGIN PASSWORD '${PG_PASS}';\"" + $STD su -s /bin/sh postgres -c "psql -c \"CREATE DATABASE ironclaw WITH OWNER ironclaw;\"" + $STD su -s /bin/sh postgres -c "psql -d ironclaw -c \"CREATE EXTENSION IF NOT EXISTS vector;\"" + msg_ok "Set up Database" + + fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "ironclaw-v0.29.1" "/usr/local/bin" \ + "ironclaw-$(uname -m)-unknown-linux-musl.tar.gz" + chmod +x /usr/local/bin/ironclaw + + msg_info "Configuring Environment" + GATEWAY_TOKEN=$(openssl rand -hex 32) + mkdir -p /root/.ironclaw + cat </root/.ironclaw/gateway.creds +Gateway-Token +Token: $GATEWAY_TOKEN +EOF + + mkdir -p /root/.ironclaw + cat </root/.ironclaw/.env +DATABASE_BACKEND=postgres +DATABASE_URL=postgresql://ironclaw:${PG_PASS}@localhost:5432/ironclaw?sslmode=disable +GATEWAY_ENABLED=true +GATEWAY_HOST=0.0.0.0 +GATEWAY_PORT=3000 +GATEWAY_AUTH_TOKEN=${GATEWAY_TOKEN} +CLI_ENABLED=false +RUST_LOG=ironclaw=info,tower_http=info +EOF + chmod 600 /root/.ironclaw/.env + msg_ok "Configured Environment" + + msg_info "Configuring IronClaw" + # Set values in the database since it is typically the true source of truth and ensures values are set correctly on first run before the service starts. + /usr/local/bin/ironclaw --no-onboard config set database_backend postgres >/dev/null + /usr/local/bin/ironclaw --no-onboard config set database_url "postgresql://ironclaw:${PG_PASS}@localhost:5432/ironclaw?sslmode=disable" >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_enabled true >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_host 0.0.0.0 >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_port 3000 >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.gateway_auth_token "${GATEWAY_TOKEN}" >/dev/null + /usr/local/bin/ironclaw --no-onboard config set channels.cli_enabled false >/dev/null + /usr/local/bin/ironclaw --no-onboard config set secrets_master_key_source none >/dev/null + # Running ironclaw defaults to use env for secrets and creates this entry, but we want to set that during onboard. + sleep 5 + sed -i '/SECRETS_MASTER_KEY/d' /root/.ironclaw/.env + msg_ok "Configured IronClaw" + + msg_info "Creating Service" + cat </etc/init.d/ironclaw +#!/sbin/openrc-run + +name="IronClaw" +description="IronClaw AI Agent" +command="/usr/bin/dbus-run-session" +command_args="/usr/local/bin/ironclaw" +command_background=true +pidfile="/run/ironclaw.pid" +directory="/root" +supervise_daemon_args="--env-file /root/.ironclaw/.env" + +depend() { + need net postgresql +} +EOF + chmod +x /etc/init.d/ironclaw + $STD rc-update add ironclaw default + msg_ok "Created Service" +} + +run_os_setup motd_ssh customize diff --git a/install/loki-install.sh b/install/loki-install.sh index a47a5c4e3..6066620a0 100644 --- a/install/loki-install.sh +++ b/install/loki-install.sh @@ -13,18 +13,19 @@ setting_up_container network_check update_os -setup_deb822_repo \ - "grafana" \ - "https://apt.grafana.com/gpg.key" \ - "https://apt.grafana.com" \ - "stable" \ - "main" +setup_deb_based() { + setup_deb822_repo \ + "grafana" \ + "https://apt.grafana.com/gpg.key" \ + "https://apt.grafana.com" \ + "stable" \ + "main" -msg_info "Installing Loki" -$STD apt install -y loki -mkdir -p /var/lib/loki/{chunks,boltdb-shipper-active,boltdb-shipper-cache} -chown -R loki /var/lib/loki -cat </etc/loki/config.yml + msg_info "Installing Loki" + $STD apt install -y loki + mkdir -p /var/lib/loki/{chunks,boltdb-shipper-active,boltdb-shipper-cache} + chown -R loki /var/lib/loki + cat </etc/loki/config.yml auth_enabled: false server: @@ -66,9 +67,72 @@ limits_config: ruler: alertmanager_url: http://localhost:9093 EOF -chown loki /etc/loki/config.yml -systemctl enable -q --now loki -msg_ok "Installed Loki" + chown loki /etc/loki/config.yml + systemctl enable -q --now loki + msg_ok "Installed Loki" +} + +setup_alpine() { + msg_info "Installing Loki" + $STD apk add loki + $STD sed -i '/http_addr/s/127.0.0.1/0.0.0.0/g' /etc/conf.d/loki + mkdir -p /var/lib/loki/{chunks,boltdb-shipper-active,boltdb-shipper-cache} + chown -R loki:grafana /var/lib/loki + mkdir -p /var/log/loki + chown -R loki:grafana /var/log/loki + cat </etc/loki/loki-local-config.yaml +auth_enabled: false + +server: + http_listen_port: 3100 + log_level: info + +common: + instance_addr: 127.0.0.1 + path_prefix: /var/lib/loki + storage: + filesystem: + chunks_directory: /var/lib/loki/chunks + rules_directory: /var/lib/loki/rules + replication_factor: 1 + ring: + kvstore: + store: inmemory + +schema_config: + configs: + - from: 2020-10-24 + store: tsdb + object_store: filesystem + schema: v13 + index: + prefix: index_ + period: 24h + +query_range: + results_cache: + cache: + embedded_cache: + enabled: true + max_size_mb: 100 + +limits_config: + metric_aggregation_enabled: true + +ruler: + alertmanager_url: http://localhost:9093 +EOF + chown loki:grafana /etc/loki/loki-local-config.yaml + chmod 644 /etc/loki/loki-local-config.yaml + echo "output_log=\"\${output_log:-/var/log/loki/output.log}\"" >> /etc/init.d/loki + echo "error_log=\"\${error_log:-/var/log/loki/error.log}\"" >> /etc/init.d/loki + echo "start_stop_daemon_args=\"\${SSD_OPTS} -1 \${output_log} -2 \${error_log}\"" >> /etc/init.d/loki + $STD rc-update add loki default + $STD rc-service loki start + msg_ok "Installed Loki" +} + +run_os_setup motd_ssh customize diff --git a/install/mariadb-install.sh b/install/mariadb-install.sh index 242611ebf..8a5d200fc 100644 --- a/install/mariadb-install.sh +++ b/install/mariadb-install.sh @@ -13,37 +13,87 @@ setting_up_container network_check update_os -setup_mariadb +setup_deb_based() { + setup_mariadb -msg_info "Setup MariaDB" -sed -i 's/^# *\(port *=.*\)/\1/' /etc/mysql/my.cnf -sed -i 's/^bind-address/#bind-address/g' /etc/mysql/mariadb.conf.d/50-server.cnf -msg_ok "Setup MariaDB" + msg_info "Setup MariaDB" + sed -i 's/^# *\(port *=.*\)/\1/' /etc/mysql/my.cnf + sed -i 's/^bind-address/#bind-address/g' /etc/mysql/mariadb.conf.d/50-server.cnf + msg_ok "Setup MariaDB" -read -r -p "${TAB3}Would you like to add PhpMyAdmin? " prompt -if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - msg_info "Installing phpMyAdmin" - $STD apt install -y \ - apache2 \ - php \ - php-mysqli \ - php-mbstring \ - php-zip \ - php-gd \ - php-json \ - php-curl + read -r -p "${TAB3}Would you like to add PhpMyAdmin? " prompt + if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing phpMyAdmin" + $STD apt install -y \ + apache2 \ + php \ + php-mysqli \ + php-mbstring \ + php-zip \ + php-gd \ + php-json \ + php-curl - curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.2/phpMyAdmin-5.2.2-all-languages.tar.gz" -o "phpMyAdmin-5.2.2-all-languages.tar.gz" - mkdir -p /var/www/html/phpMyAdmin - tar xf phpMyAdmin-5.2.2-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin - cp /var/www/html/phpMyAdmin/config.sample.inc.php /var/www/html/phpMyAdmin/config.inc.php - SECRET=$(openssl rand -base64 24) - sed -i "s#\$cfg\['blowfish_secret'\] = '';#\$cfg['blowfish_secret'] = '${SECRET}';#" /var/www/html/phpMyAdmin/config.inc.php - chmod 660 /var/www/html/phpMyAdmin/config.inc.php - chown -R www-data:www-data /var/www/html/phpMyAdmin - systemctl restart apache2 - msg_ok "Installed phpMyAdmin" -fi + curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.2/phpMyAdmin-5.2.2-all-languages.tar.gz" -o "phpMyAdmin-5.2.2-all-languages.tar.gz" + mkdir -p /var/www/html/phpMyAdmin + tar xf phpMyAdmin-5.2.2-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin + cp /var/www/html/phpMyAdmin/config.sample.inc.php /var/www/html/phpMyAdmin/config.inc.php + SECRET=$(openssl rand -base64 24) + sed -i "s#\$cfg\['blowfish_secret'\] = '';#\$cfg['blowfish_secret'] = '${SECRET}';#" /var/www/html/phpMyAdmin/config.inc.php + chmod 660 /var/www/html/phpMyAdmin/config.inc.php + chown -R www-data:www-data /var/www/html/phpMyAdmin + systemctl restart apache2 + msg_ok "Installed phpMyAdmin" + fi +} + +setup_alpine() { + msg_info "Installing MariaDB" + $STD apk add --no-cache mariadb mariadb-client + $STD rc-update add mariadb default + msg_ok "Installed MariaDB" + + msg_info "Configuring MariaDB" + mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql >/dev/null 2>&1 + $STD rc-service mariadb start + msg_ok "MariaDB Configured" + + read -r -p "${TAB3}Would you like to install Adminer with lighttpd? : " prompt + if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing Adminer and dependencies" + $STD apk add --no-cache \ + lighttpd \ + lighttpd-openrc \ + php83 \ + php83-cgi \ + php83-common \ + php83-curl \ + php83-gd \ + php83-mbstring \ + php83-mysqli \ + php83-mysqlnd \ + php83-openssl \ + php83-zip \ + php83-session \ + jq + + sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf + sed -i 's|/usr/bin/php-cgi|/usr/bin/php-cgi83|g' /etc/lighttpd/mod_fastcgi.conf + mkdir -p /var/www/localhost/htdocs + ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//') + curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php + chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php + chmod 755 /var/www/localhost/htdocs/adminer.php + msg_ok "Adminer Installed" + + msg_info "Starting Lighttpd" + $STD rc-update add lighttpd default + $STD rc-service lighttpd restart + msg_ok "Lighttpd Started" + fi +} + +run_os_setup motd_ssh customize diff --git a/install/node-red-install.sh b/install/node-red-install.sh index 5f8f25fe5..b9266d5ac 100644 --- a/install/node-red-install.sh +++ b/install/node-red-install.sh @@ -13,48 +13,99 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - git \ - ca-certificates -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + git \ + ca-certificates + msg_ok "Installed Dependencies" -NODE_VERSION="22" setup_nodejs + NODE_VERSION="22" setup_nodejs -msg_info "Installing Node-Red" -$STD npm install -g --unsafe-perm node-red -echo "journalctl -f -n 100 -u nodered -o cat" >/usr/bin/node-red-log -chmod +x /usr/bin/node-red-log -echo "systemctl stop nodered" >/usr/bin/node-red-stop -chmod +x /usr/bin/node-red-stop -echo "systemctl start nodered" >/usr/bin/node-red-start -chmod +x /usr/bin/node-red-start -echo "systemctl restart nodered" >/usr/bin/node-red-restart -chmod +x /usr/bin/node-red-restart -msg_ok "Installed Node-Red" + msg_info "Installing Node-Red" + $STD npm install -g --unsafe-perm node-red + echo "journalctl -f -n 100 -u nodered -o cat" >/usr/bin/node-red-log + chmod +x /usr/bin/node-red-log + echo "systemctl stop nodered" >/usr/bin/node-red-stop + chmod +x /usr/bin/node-red-stop + echo "systemctl start nodered" >/usr/bin/node-red-start + chmod +x /usr/bin/node-red-start + echo "systemctl restart nodered" >/usr/bin/node-red-restart + chmod +x /usr/bin/node-red-restart + msg_ok "Installed Node-Red" -msg_info "Creating Service" -service_path="/etc/systemd/system/nodered.service" -echo "[Unit] -Description=Node-RED -After=syslog.target network.target + msg_info "Creating Service" + service_path="/etc/systemd/system/nodered.service" + echo "[Unit] + Description=Node-RED + After=syslog.target network.target -[Service] -ExecStart=/usr/bin/node-red --max-old-space-size=128 -v -Restart=on-failure -KillSignal=SIGINT + [Service] + ExecStart=/usr/bin/node-red --max-old-space-size=128 -v + Restart=on-failure + KillSignal=SIGINT -SyslogIdentifier=node-red -StandardOutput=syslog + SyslogIdentifier=node-red + StandardOutput=syslog -WorkingDirectory=/root/ -User=root -Group=root + WorkingDirectory=/root/ + User=root + Group=root -[Install] -WantedBy=multi-user.target" >$service_path -systemctl enable -q --now nodered -msg_ok "Created Service" + [Install] + WantedBy=multi-user.target" >$service_path + systemctl enable -q --now nodered + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add --no-cache \ + git \ + nodejs \ + npm + msg_ok "Installed Dependencies" + + msg_info "Creating Node-RED User" + adduser -D -H -s /sbin/nologin -G users nodered + msg_ok "Created Node-RED User" + + msg_info "Installing Node-RED" + $STD npm install -g --unsafe-perm node-red + msg_ok "Installed Node-RED" + + msg_info "Creating /home/nodered" + mkdir -p /home/nodered + chown -R nodered:users /home/nodered + chmod 750 /home/nodered + msg_ok "Created /home/nodered" + + msg_info "Creating Node-RED Service" + service_path="/etc/init.d/nodered" + + echo '#!/sbin/openrc-run + description="Node-RED Service" + + command="/usr/local/bin/node-red" + command_args="--max-old-space-size=128 -v" + command_user="nodered" + pidfile="/var/run/nodered.pid" + command_background="yes" + + depend() { + use net + }' >$service_path + + chmod +x $service_path + msg_ok "Created Node-RED Service" + + msg_info "Starting Node-RED" + $STD rc-update add nodered + $STD rc-service nodered start + msg_ok "Started Node-RED" +} + +run_os_setup motd_ssh customize diff --git a/install/ntfy-install.sh b/install/ntfy-install.sh index dbbac4af6..18b55e0d2 100644 --- a/install/ntfy-install.sh +++ b/install/ntfy-install.sh @@ -13,15 +13,29 @@ setting_up_container network_check update_os -msg_info "Setting up ntfy" -setup_deb822_repo \ - "ntfy" \ - "https://archive.ntfy.sh/apt/keyring.gpg" \ - "https://archive.ntfy.sh/apt/" \ - "stable" -$STD apt install -y ntfy -systemctl enable -q --now ntfy -msg_ok "Setup ntfy" +setup_deb_based() { + msg_info "Setting up ntfy" + setup_deb822_repo \ + "ntfy" \ + "https://archive.ntfy.sh/apt/keyring.gpg" \ + "https://archive.ntfy.sh/apt/" \ + "stable" + $STD apt install -y ntfy + systemctl enable -q --now ntfy + msg_ok "Setup ntfy" +} + +setup_alpine() { + msg_info "Installing ntfy" + $STD apk add --no-cache ntfy ntfy-openrc libcap + sed -i '/^listen-http/s/^\(.*\)$/#\1\n/' /etc/ntfy/server.yml + setcap 'cap_net_bind_service=+ep' /usr/bin/ntfy + $STD rc-update add ntfy default + $STD service ntfy start + msg_ok "Installed ntfy" +} + +run_os_setup motd_ssh customize diff --git a/install/postgresql-install.sh b/install/postgresql-install.sh index bc4e094a3..d6b6cd11a 100644 --- a/install/postgresql-install.sh +++ b/install/postgresql-install.sh @@ -13,14 +13,15 @@ setting_up_container network_check update_os -read -r -p "${TAB3}Enter PostgreSQL version (15/16/17/18): " ver -[[ $ver =~ ^(15|16|17|18)$ ]] || { - echo "Invalid version" - exit 64 -} -PG_VERSION=$ver setup_postgresql +setup_deb_based() { + read -r -p "${TAB3}Enter PostgreSQL version (15/16/17/18): " ver + [[ $ver =~ ^(15|16|17|18)$ ]] || { + echo "Invalid version" + exit 64 + } + PG_VERSION=$ver setup_postgresql -cat </etc/postgresql/$ver/main/pg_hba.conf + cat </etc/postgresql/$ver/main/pg_hba.conf # PostgreSQL Client Authentication Configuration File local all postgres peer # TYPE DATABASE USER ADDRESS METHOD @@ -39,7 +40,7 @@ host replication all 127.0.0.1/32 scram-sha-256 host replication all ::1/128 scram-sha-256 EOF -cat </etc/postgresql/$ver/main/postgresql.conf + cat </etc/postgresql/$ver/main/postgresql.conf # ----------------------------- # PostgreSQL configuration file # ----------------------------- @@ -120,17 +121,79 @@ default_text_search_config = 'pg_catalog.english' include_dir = 'conf.d' EOF -systemctl restart postgresql -msg_ok "Installed PostgreSQL" + systemctl restart postgresql + msg_ok "Installed PostgreSQL" -read -r -p "${TAB3}Would you like to add Adminer? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Installing Adminer" - $STD apt install -y adminer - $STD a2enconf adminer - systemctl reload apache2 - msg_ok "Installed Adminer" -fi + read -r -p "${TAB3}Would you like to add Adminer? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + msg_info "Installing Adminer" + $STD apt install -y adminer + $STD a2enconf adminer + systemctl reload apache2 + msg_ok "Installed Adminer" + fi +} + +setup_alpine() { + read -r -p "${TAB3}Enter PostgreSQL version (15/16/17): " ver + [[ $ver =~ ^(15|16|17)$ ]] || { echo "Invalid version"; exit 64; } + + msg_info "Installing PostgreSQL ${ver}" + $STD apk add --no-cache postgresql${ver} postgresql${ver}-contrib postgresql${ver}-openrc sudo + msg_ok "Installed PostgreSQL ${ver}" + + msg_info "Enabling PostgreSQL Service" + $STD rc-update add postgresql default + msg_ok "Enabled PostgreSQL Service" + + msg_info "Starting PostgreSQL" + $STD rc-service postgresql start + msg_ok "Started PostgreSQL" + + msg_info "Configuring PostgreSQL for External Access" + conf_file="/etc/postgresql${ver}/postgresql.conf" + hba_file="/etc/postgresql${ver}/pg_hba.conf" + sed -i 's/^#listen_addresses =.*/listen_addresses = '\''*'\''/' "$conf_file" + sed -i '/^host\s\+all\s\+all\s\+127.0.0.1\/32\s\+md5/ s/.*/host all all 0.0.0.0\/0 md5/' "$hba_file" + $STD rc-service postgresql restart + msg_ok "Configured and Restarted PostgreSQL" + + read -r -p "${TAB3}Would you like to install Adminer with lighttpd? : " prompt + if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing Adminer and dependencies" + $STD apk add --no-cache \ + lighttpd \ + lighttpd-openrc \ + php83 \ + php83-cgi \ + php83-common \ + php83-curl \ + php83-gd \ + php83-mbstring \ + php83-pdo \ + php83-pgsql \ + php83-openssl \ + php83-zip \ + php83-session \ + jq + + sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf + sed -i 's|/usr/bin/php-cgi|/usr/bin/php-cgi83|g' /etc/lighttpd/mod_fastcgi.conf + mkdir -p /var/www/localhost/htdocs + ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//') + curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php + chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php + chmod 755 /var/www/localhost/htdocs/adminer.php + msg_ok "Adminer Installed" + + msg_info "Starting Lighttpd" + $STD rc-update add lighttpd default + $STD rc-service lighttpd restart + msg_ok "Lighttpd Started" + fi +} + +run_os_setup motd_ssh customize diff --git a/install/prometheus-install.sh b/install/prometheus-install.sh index 3dee5990c..95ff2b694 100644 --- a/install/prometheus-install.sh +++ b/install/prometheus-install.sh @@ -13,16 +13,17 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-$(arch_resolve).tar.gz" +setup_deb_based() { + fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-$(arch_resolve).tar.gz" -msg_info "Installing Prometheus" -mkdir -p /etc/prometheus -mkdir -p /var/lib/prometheus -mv /usr/local/bin/prometheus.yml /etc/prometheus/prometheus.yml -msg_ok "Installed Prometheus" + msg_info "Installing Prometheus" + mkdir -p /etc/prometheus + mkdir -p /var/lib/prometheus + mv /usr/local/bin/prometheus.yml /etc/prometheus/prometheus.yml + msg_ok "Installed Prometheus" -msg_info "Creating Service" -cat <<'EOF' >/etc/systemd/system/prometheus.service + msg_info "Creating Service" + cat <<'EOF' >/etc/systemd/system/prometheus.service [Unit] Description=Prometheus Wants=network-online.target @@ -41,8 +42,25 @@ ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now prometheus -msg_ok "Created Service" + systemctl enable -q --now prometheus + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Prometheus" + $STD apk add --no-cache prometheus + msg_ok "Installed Prometheus" + + msg_info "Enabling Prometheus Service" + $STD rc-update add prometheus default + msg_ok "Enabled Prometheus Service" + + msg_info "Starting Prometheus" + $STD service prometheus start + msg_ok "Started Prometheus" +} + +run_os_setup motd_ssh customize diff --git a/install/rclone-install.sh b/install/rclone-install.sh index af3305a4c..a845760b5 100644 --- a/install/rclone-install.sh +++ b/install/rclone-install.sh @@ -13,25 +13,26 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y apache2-utils fuse3 -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y apache2-utils fuse3 + msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-$(arch_resolve).zip" + fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-$(arch_resolve).zip" -msg_info "Installing rclone" -cd /opt/rclone -RCLONE_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) -$STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD" -cat <~/rclone.creds + msg_info "Installing rclone" + cd /opt/rclone + RCLONE_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) + $STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD" + cat <~/rclone.creds rclone-Credentials rclone User Name: admin rclone Password: $RCLONE_PASSWORD EOF -msg_ok "Installed rclone" + msg_ok "Installed rclone" -msg_info "Creating Service" -cat </etc/systemd/system/rclone-web.service + msg_info "Creating Service" + cat </etc/systemd/system/rclone-web.service [Unit] Description=Rclone Web GUI After=network-online.target @@ -46,8 +47,60 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now rclone-web -msg_ok "Created Service" + systemctl enable -q --now rclone-web + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing dependencies" + $STD apk add --no-cache \ + apache2-utils fuse3 + msg_ok "Installed dependencies" + + msg_info "Installing rclone" + temp_file=$(mktemp) + mkdir -p /opt/rclone + RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-$(arch_resolve).zip" -o "$temp_file" + $STD unzip -j "$temp_file" '*/**' -d /opt/rclone + cd /opt/rclone + RCLONE_PASSWORD=$(head -c 16 /dev/urandom | xxd -p -c 16) + $STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD" + cat <~/rclone.creds +rclone-Credentials +rclone User Name: admin +rclone Password: $RCLONE_PASSWORD +EOF + echo "${RELEASE}" >/opt/rclone_version.txt + rm -f "$temp_file" + msg_ok "Installed rclone" + + msg_info "Enabling rclone Service" + cat </etc/init.d/rclone +#!/sbin/openrc-run +description="rclone Service" +command="/opt/rclone/rclone" +command_args="rcd --rc-web-gui --rc-web-gui-no-open-browser --rc-addr :3000 --rc-htpasswd /opt/login.pwd" +command_background="true" +command_user="root" +pidfile="/var/run/rclone.pid" + +depend() { + use net +} +EOF + chmod +x /etc/init.d/rclone + $STD rc-update add rclone default + msg_ok "Enabled rclone Service" + + msg_info "Starting rclone" + $STD service rclone start + msg_ok "Started rclone" + + rm -rf "$temp_file" +} + +run_os_setup motd_ssh customize diff --git a/install/redis-install.sh b/install/redis-install.sh index 09b02db67..0ba452994 100644 --- a/install/redis-install.sh +++ b/install/redis-install.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) +# Author: tteck (tteckster) | MickLesk (CanbiZ) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://redis.io/ @@ -13,23 +13,36 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y apt-transport-https -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y apt-transport-https + msg_ok "Installed Dependencies" -msg_info "Setting up Redis Repository" -setup_deb822_repo \ - "redis" \ - "https://packages.redis.io/gpg" \ - "https://packages.redis.io/deb" \ - "trixie" -msg_ok "Setup Redis Repository" + msg_info "Setting up Redis Repository" + setup_deb822_repo \ + "redis" \ + "https://packages.redis.io/gpg" \ + "https://packages.redis.io/deb" \ + "trixie" + msg_ok "Setup Redis Repository" -msg_info "Setting up Redis" -$STD apt install -y redis -sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis/redis.conf -systemctl enable -q --now redis-server -msg_ok "Setup Redis" + msg_info "Setting up Redis" + $STD apt install -y redis + sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis/redis.conf + systemctl enable -q --now redis-server + msg_ok "Setup Redis" +} + +setup_alpine() { + msg_info "Installing Redis" + $STD apk add redis + $STD sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf + $STD rc-update add redis default + $STD rc-service redis start + msg_ok "Installed Redis" +} + +run_os_setup motd_ssh customize diff --git a/install/rustdeskserver-install.sh b/install/rustdeskserver-install.sh index 56b301cf6..11b9d5cf8 100644 --- a/install/rustdeskserver-install.sh +++ b/install/rustdeskserver-install.sh @@ -13,13 +13,122 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*$(arch_resolve).deb" -fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*$(arch_resolve).deb" -fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*$(arch_resolve).deb" -fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*$(arch_resolve).deb" -systemctl enable -q --now rustdesk-hbbr -systemctl enable -q --now rustdesk-hbbs -systemctl enable -q --now rustdesk-api +setup_deb_based() { + fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*$(arch_resolve).deb" + fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*$(arch_resolve).deb" + fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*$(arch_resolve).deb" + fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*$(arch_resolve).deb" + systemctl enable -q --now rustdesk-hbbr + systemctl enable -q --now rustdesk-hbbs + systemctl enable -q --now rustdesk-api +} + +setup_alpine() { + RELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + msg_info "Installing RustDesk Server v${RELEASE}" + temp_file1=$(mktemp) + ARCH=$(arch_resolve "amd64" "arm64v8") + curl -fsSL "https://github.com/lejianwen/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-${ARCH}.zip" -o "$temp_file1" + $STD unzip "$temp_file1" + mv "$ARCH" /opt/rustdesk-server + mkdir -p /root/.config/rustdesk + cd /opt/rustdesk-server + ./rustdesk-utils genkeypair >/tmp/rustdesk_keys.txt + grep "Public Key" /tmp/rustdesk_keys.txt | awk '{print $3}' >/root/.config/rustdesk/id_ed25519.pub + grep "Secret Key" /tmp/rustdesk_keys.txt | awk '{print $3}' >/root/.config/rustdesk/id_ed25519 + chmod 600 /root/.config/rustdesk/id_ed25519 + chmod 644 /root/.config/rustdesk/id_ed25519.pub + rm /tmp/rustdesk_keys.txt + echo "${RELEASE}" >~/.rustdesk-server + msg_ok "Installed RustDesk Server v${RELEASE}" + + APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + msg_info "Installing RustDesk API v${APIRELEASE}" + temp_file2=$(mktemp) + curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/linux-$(arch_resolve).tar.gz" -o "$temp_file2" + $STD tar zxvf "$temp_file2" + mv release /opt/rustdesk-api + cd /opt/rustdesk-api + ADMINPASS=$(head -c 16 /dev/urandom | xxd -p -c 16) + $STD ./apimain reset-admin-pwd "$ADMINPASS" + cat <~/rustdesk.creds +RustDesk WebUI + +Username: admin +Password: $ADMINPASS +EOF + echo "${APIRELEASE}" >~/.rustdesk-api + msg_ok "Installed RustDesk API v${APIRELEASE}" + + msg_info "Enabling RustDesk Server Services" + cat </etc/init.d/rustdesk-server-hbbs +#!/sbin/openrc-run +description="RustDesk HBBS Service" +directory="/opt/rustdesk-server" +command="/opt/rustdesk-server/hbbs" +command_args="" +command_background="true" +command_user="root" +pidfile="/var/run/rustdesk-server-hbbs.pid" +output_log="/var/log/rustdesk-hbbs.log" +error_log="/var/log/rustdesk-hbbs.err" + +depend() { + use net +} +EOF + + cat </etc/init.d/rustdesk-server-hbbr +#!/sbin/openrc-run +description="RustDesk HBBR Service" +directory="/opt/rustdesk-server" +command="/opt/rustdesk-server/hbbr" +command_args="" +command_background="true" +command_user="root" +pidfile="/var/run/rustdesk-server-hbbr.pid" +output_log="/var/log/rustdesk-hbbr.log" +error_log="/var/log/rustdesk-hbbr.err" + +depend() { + use net +} +EOF + + cat </etc/init.d/rustdesk-api +#!/sbin/openrc-run +description="RustDesk API Service" +directory="/opt/rustdesk-api" +command="/opt/rustdesk-api/apimain" +command_args="" +command_background="true" +command_user="root" +pidfile="/var/run/rustdesk-api.pid" +output_log="/var/log/rustdesk-api.log" +error_log="/var/log/rustdesk-api.err" + +depend() { + use net +} +EOF + chmod +x /etc/init.d/rustdesk-server-hbbs + chmod +x /etc/init.d/rustdesk-server-hbbr + chmod +x /etc/init.d/rustdesk-api + $STD rc-update add rustdesk-server-hbbs default + $STD rc-update add rustdesk-server-hbbr default + $STD rc-update add rustdesk-api default + msg_ok "Enabled RustDesk Server Services" + + msg_info "Starting RustDesk Server" + $STD service rustdesk-server-hbbs start + $STD service rustdesk-server-hbbr start + $STD service rustdesk-api start + msg_ok "Started RustDesk Server" + + rm -f "$temp_file1" "$temp_file2" +} + +run_os_setup motd_ssh customize diff --git a/install/rustypaste-install.sh b/install/rustypaste-install.sh index 67c495058..6d6def0fc 100644 --- a/install/rustypaste-install.sh +++ b/install/rustypaste-install.sh @@ -13,16 +13,17 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "rustypaste" "orhun/rustypaste" "prebuild" "latest" "/opt/rustypaste" "*x86_64-unknown-linux-gnu.tar.gz" -fetch_and_deploy_gh_release "rustypaste-cli" "orhun/rustypaste-cli" "prebuild" "latest" "/usr/local/bin" "*x86_64-unknown-linux-gnu.tar.gz" +setup_deb_based() { + fetch_and_deploy_gh_release "rustypaste" "orhun/rustypaste" "prebuild" "latest" "/opt/rustypaste" "*x86_64-unknown-linux-gnu.tar.gz" + fetch_and_deploy_gh_release "rustypaste-cli" "orhun/rustypaste-cli" "prebuild" "latest" "/usr/local/bin" "*x86_64-unknown-linux-gnu.tar.gz" -msg_info "Setting up RustyPaste" -cd /opt/rustypaste -sed -i 's|^address = ".*"|address = "0.0.0.0:8000"|' config.toml -msg_ok "Set up RustyPaste" + msg_info "Setting up RustyPaste" + cd /opt/rustypaste + sed -i 's|^address = ".*"|address = "0.0.0.0:8000"|' config.toml + msg_ok "Set up RustyPaste" -msg_info "Creating Service" -cat </etc/systemd/system/rustypaste.service + msg_info "Creating Service" + cat </etc/systemd/system/rustypaste.service [Unit] Description=rustypaste Service After=network.target @@ -35,8 +36,50 @@ Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now rustypaste -msg_ok "Created Service" + systemctl enable -q --now rustypaste + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing RustyPaste" + $STD apk add --no-cache rustypaste --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community + msg_ok "Installed RustyPaste" + + msg_info "Configuring RustyPaste" + mkdir -p /var/lib/rustypaste + sed -i 's|^address = ".*"|address = "0.0.0.0:8000"|' /etc/rustypaste/config.toml + msg_ok "Configured RustyPaste" + + msg_info "Creating Service" + cat <<'EOF' >/etc/init.d/rustypaste +#!/sbin/openrc-run + +name="rustypaste" +description="RustyPaste - A minimal file upload/pastebin service" +command="/usr/bin/rustypaste" +command_args="" +command_user="root" +command_background=true +pidfile="/run/${RC_SVCNAME}.pid" +directory="/var/lib/rustypaste" + +depend() { + need net + after firewall +} + +start_pre() { + export CONFIG=/etc/rustypaste/config.toml + checkpath --directory --owner root:root --mode 0755 /var/lib/rustypaste +} +EOF + chmod +x /etc/init.d/rustypaste + $STD rc-update add rustypaste default + $STD rc-service rustypaste start + msg_ok "Created Service" +} + +run_os_setup motd_ssh customize diff --git a/install/syncthing-install.sh b/install/syncthing-install.sh index f4a347e52..332f6e368 100644 --- a/install/syncthing-install.sh +++ b/install/syncthing-install.sh @@ -13,20 +13,42 @@ setting_up_container network_check update_os -setup_deb822_repo \ - "syncthing" \ - "https://syncthing.net/release-key.gpg" \ - "https://apt.syncthing.net/" \ - "syncthing" \ - "stable-v2" +setup_deb_based() { + setup_deb822_repo \ + "syncthing" \ + "https://syncthing.net/release-key.gpg" \ + "https://apt.syncthing.net/" \ + "syncthing" \ + "stable-v2" -msg_info "Setting up Syncthing" -$STD apt install -y syncthing -systemctl enable -q --now syncthing@root -sleep 5 -sed -i "{s/127.0.0.1:8384/0.0.0.0:8384/g}" /root/.local/state/syncthing/config.xml -systemctl restart syncthing@root -msg_ok "Setup Syncthing" + msg_info "Setting up Syncthing" + $STD apt install -y syncthing + systemctl enable -q --now syncthing@root + sleep 5 + sed -i "{s/127.0.0.1:8384/0.0.0.0:8384/g}" /root/.local/state/syncthing/config.xml + systemctl restart syncthing@root + msg_ok "Setup Syncthing" +} + +setup_alpine() { + msg_info "Setup Syncthing" + $STD apk add --no-cache syncthing + rc-service syncthing start + sleep 3 + rc-service syncthing stop + sed -i "{s/127.0.0.1:8384/0.0.0.0:8384/g}" /var/lib/syncthing/.local/state/syncthing/config.xml + msg_ok "Setup Syncthing" + + msg_info "Enabling Syncthing Service" + $STD rc-update add syncthing default + msg_ok "Enabled Syncthing Service" + + msg_info "Starting Syncthing" + $STD rc-service syncthing start + msg_ok "Started Syncthing" +} + +run_os_setup motd_ssh customize diff --git a/install/teamspeak-server-install.sh b/install/teamspeak-server-install.sh index 110b4f3c5..31a5d691d 100644 --- a/install/teamspeak-server-install.sh +++ b/install/teamspeak-server-install.sh @@ -13,19 +13,20 @@ setting_up_container network_check update_os -RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | grep -oP 'teamspeak3-server_linux_amd64-\K[0-9]+\.[0-9]+\.[0-9]+' | head -1) +setup_deb_based() { + RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | grep -oP 'teamspeak3-server_linux_amd64-\K[0-9]+\.[0-9]+\.[0-9]+' | head -1) -msg_info "Setting up Teamspeak Server" -curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2 -tar -xf ./ts3server.tar.bz2 -mv teamspeak3-server_linux_amd64/ /opt/teamspeak-server/ -touch /opt/teamspeak-server/.ts3server_license_accepted -rm -f ~/ts3server.tar.bz* -echo "${RELEASE}" >~/.teamspeak-server -msg_ok "Setup Teamspeak Server" + msg_info "Setting up Teamspeak Server" + curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2 + tar -xf ./ts3server.tar.bz2 + mv teamspeak3-server_linux_amd64/ /opt/teamspeak-server/ + touch /opt/teamspeak-server/.ts3server_license_accepted + rm -f ~/ts3server.tar.bz* + echo "${RELEASE}" >~/.teamspeak-server + msg_ok "Setup Teamspeak Server" -msg_info "Creating service" -cat </etc/systemd/system/teamspeak-server.service + msg_info "Creating service" + cat </etc/systemd/system/teamspeak-server.service [Unit] Description=TeamSpeak3 Server Wants=network-online.target @@ -44,8 +45,61 @@ RestartSec=15 [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now teamspeak-server -msg_ok "Created service" + systemctl enable -q --now teamspeak-server + msg_ok "Created service" +} + +setup_alpine() { + msg_info "Installing dependencies" + $STD apk add --no-cache \ + ca-certificates \ + libstdc++ \ + libc6-compat + msg_ok "Installed dependencies" + + RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | awk 'NR==1') + msg_info "Installing Teamspeak Server v${RELEASE}" + mkdir -p /opt/teamspeak-server + cd /opt/teamspeak-server + curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2 + tar xf ts3server.tar.bz2 --strip-components=1 + mkdir -p logs data lib + mv *.so lib + touch data/ts3server.sqlitedb data/query_ip_blacklist.txt data/query_ip_whitelist.txt .ts3server_license_accepted + echo "${RELEASE}" >~/.teamspeak-server + msg_ok "Installed TeamSpeak Server v${RELEASE}" + + msg_info "Enabling TeamSpeak Server Service" + cat </etc/init.d/teamspeak +#!/sbin/openrc-run + +name="TeamSpeak Server" +description="TeamSpeak 3 Server" +command="/opt/teamspeak-server/ts3server_startscript.sh" +command_args="start" +output_log="/var/log/teamspeak.out.log" +error_log="/var/log/teamspeak.err.log" +command_background=true +pidfile="/run/teamspeak-server.pid" +directory="/opt/teamspeak-server" + +depend() { + need net + use dns +} +EOF + chmod +x /etc/init.d/teamspeak + $STD rc-update add teamspeak default + msg_ok "Enabled TeamSpeak Server Service" + + msg_info "Starting TeamSpeak Server" + $STD service teamspeak start + msg_ok "Started TeamSpeak Server" + + rm -r ts3server.tar.bz* LICENSE* CHANGELOG doc serverquerydocs tsdns redist +} + +run_os_setup motd_ssh customize diff --git a/install/tinyauth-install.sh b/install/tinyauth-install.sh index 85db46eb7..7ec13281a 100644 --- a/install/tinyauth-install.sh +++ b/install/tinyauth-install.sh @@ -13,33 +13,34 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - openssl \ - apache2-utils -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + openssl \ + apache2-utils + msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "tinyauth" "steveiliop56/tinyauth" "singlefile" "latest" "/opt/tinyauth" "tinyauth-$(arch_resolve)" + fetch_and_deploy_gh_release "tinyauth" "steveiliop56/tinyauth" "singlefile" "latest" "/opt/tinyauth" "tinyauth-$(arch_resolve)" -msg_info "Setting up Tinyauth" -PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8) -USER=$(htpasswd -Bbn "tinyauth" "${PASS}") -cat </opt/tinyauth/credentials.txt + msg_info "Setting up Tinyauth" + PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8) + USER=$(htpasswd -Bbn "tinyauth" "${PASS}") + cat </opt/tinyauth/credentials.txt Tinyauth Credentials Username: tinyauth Password: ${PASS} EOF -msg_ok "Set up Tinyauth" + msg_ok "Set up Tinyauth" -read -r -p "${TAB3}Enter your Tinyauth subdomain (e.g. https://tinyauth.example.com): " app_url + read -r -p "${TAB3}Enter your Tinyauth subdomain (e.g. https://tinyauth.example.com): " app_url -msg_info "Creating Service" -cat </opt/tinyauth/.env + msg_info "Creating Service" + cat </opt/tinyauth/.env TINYAUTH_DATABASE_PATH=/opt/tinyauth/database.db TINYAUTH_AUTH_USERS='${USER}' TINYAUTH_APPURL=${app_url} EOF -cat </etc/systemd/system/tinyauth.service + cat </etc/systemd/system/tinyauth.service [Unit] Description=Tinyauth Service After=network.target @@ -54,8 +55,69 @@ Restart=on-failure [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now tinyauth -msg_ok "Created Service" + systemctl enable -q --now tinyauth + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add --no-cache openssl apache2-utils + msg_ok "Installed Dependencies" + + msg_info "Installing Tinyauth" + mkdir -p /opt/tinyauth + RELEASE=$(curl -s https://api.github.com/repos/tinyauthapp/tinyauth/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + curl -fsSL "https://github.com/tinyauthapp/tinyauth/releases/download/v${RELEASE}/tinyauth-$(arch_resolve)" -o /opt/tinyauth/tinyauth + chmod +x /opt/tinyauth/tinyauth + PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8) + USER=$(htpasswd -Bbn "tinyauth" "${PASS}") + + cat </opt/tinyauth/credentials.txt +Tinyauth Credentials +Username: tinyauth +Password: ${PASS} +EOF + echo "${RELEASE}" >~/.tinyauth + msg_ok "Installed Tinyauth" + + read -r -p "${TAB3}Enter your Tinyauth subdomain (e.g. https://tinyauth.example.com): " app_url + + cat </opt/tinyauth/.env +TINYAUTH_DATABASE_PATH=/opt/tinyauth/database.db +TINYAUTH_AUTH_USERS='${USER}' +TINYAUTH_APPURL=${app_url} +EOF + + msg_info "Creating Service" + cat <<'EOF' >/etc/init.d/tinyauth +#!/sbin/openrc-run +description="Tinyauth Service" + +set -a +ENV_FILE="/opt/tinyauth/.env" +[ -f "$ENV_FILE" ] && . "$ENV_FILE" +set +a + +command="/opt/tinyauth/tinyauth" +directory="/opt/tinyauth" +command_user="root" +command_background="true" +pidfile="/var/run/tinyauth.pid" + +depend() { + use net +} +EOF + chmod +x /etc/init.d/tinyauth + $STD rc-update add tinyauth default + msg_ok "Enabled Tinyauth Service" + + msg_info "Starting Tinyauth" + $STD service tinyauth start + msg_ok "Started Tinyauth" +} + +run_os_setup motd_ssh customize diff --git a/install/traefik-install.sh b/install/traefik-install.sh index 950fb8b79..f051a3f99 100644 --- a/install/traefik-install.sh +++ b/install/traefik-install.sh @@ -13,15 +13,16 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y apt-transport-https -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y apt-transport-https + msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_$(arch_resolve).tar.gz" -mkdir -p /etc/traefik/{conf.d,ssl} + fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_$(arch_resolve).tar.gz" + mkdir -p /etc/traefik/{conf.d,ssl} -msg_info "Creating Traefik configuration" -cat </etc/traefik/traefik.yaml + msg_info "Creating Traefik configuration" + cat </etc/traefik/traefik.yaml providers: file: directory: /etc/traefik/conf.d/ @@ -74,10 +75,10 @@ accessLog: names: User-Agent: keep EOF -msg_ok "Created Traefik configuration" + msg_ok "Created Traefik configuration" -msg_info "Creating Service" -cat <<'EOF' >/etc/systemd/system/traefik.service + msg_info "Creating Service" + cat <<'EOF' >/etc/systemd/system/traefik.service [Unit] Description=Traefik is an open-source Edge Router that makes publishing your services a fun and easy experience @@ -90,8 +91,35 @@ ExecReload=/bin/kill -USR1 \$MAINPID [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now traefik -msg_ok "Created Service" + systemctl enable -q --now traefik + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add ca-certificates + $STD update-ca-certificates + msg_ok "Installed Dependencies" + + msg_info "Installing Traefik" + $STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community + msg_ok "Installed Traefik" + + read -p "${TAB3}Enable Traefik WebUI (Port 8080)? [y/N]: " enable_webui + if [[ "$enable_webui" =~ ^[Yy]$ ]]; then + msg_info "Configuring Traefik WebUI" + sed -i 's/localhost//g' /etc/traefik/traefik.yaml + msg_ok "Configured Traefik WebUI" + fi + + msg_info "Enabling and starting Traefik service" + $STD rc-update add traefik default + sed -i '/^command=.*/i directory="/etc/traefik"' /etc/init.d/traefik + $STD rc-service traefik start + msg_ok "Traefik service started" +} + +run_os_setup motd_ssh customize diff --git a/install/transmission-install.sh b/install/transmission-install.sh index 5d0018c86..1523358c1 100644 --- a/install/transmission-install.sh +++ b/install/transmission-install.sh @@ -13,12 +13,34 @@ setting_up_container network_check update_os -msg_info "Installing Transmission" -$STD apt install -y transmission-daemon -systemctl stop transmission-daemon -sed -i '{s/"rpc-whitelist-enabled": true/"rpc-whitelist-enabled": false/g; s/"rpc-host-whitelist-enabled": true,/"rpc-host-whitelist-enabled": false,/g}' /etc/transmission-daemon/settings.json -systemctl start transmission-daemon -msg_ok "Installed Transmission" +setup_deb_based() { + msg_info "Installing Transmission" + $STD apt install -y transmission-daemon + systemctl stop transmission-daemon + sed -i '{s/"rpc-whitelist-enabled": true/"rpc-whitelist-enabled": false/g; s/"rpc-host-whitelist-enabled": true,/"rpc-host-whitelist-enabled": false,/g}' /etc/transmission-daemon/settings.json + systemctl start transmission-daemon + msg_ok "Installed Transmission" +} + +setup_alpine() { + msg_info "Installing Transmission" + $STD apk add --no-cache transmission-cli transmission-daemon + $STD rc-service transmission-daemon start + sleep 5 + $STD rc-service transmission-daemon stop + sed -i '{s/"rpc-whitelist-enabled": true/"rpc-whitelist-enabled": false/g; s/"rpc-host-whitelist-enabled": true,/"rpc-host-whitelist-enabled": false,/g}' /var/lib/transmission/config/settings.json + msg_ok "Installed Transmission" + + msg_info "Enabling Transmission Service" + $STD rc-update add transmission-daemon default + msg_ok "Enabled Transmission Service" + + msg_info "Starting Transmission" + $STD rc-service transmission-daemon start + msg_ok "Started Transmission" +} + +run_os_setup motd_ssh customize diff --git a/install/valkey-install.sh b/install/valkey-install.sh index e6aa2904b..872044960 100644 --- a/install/valkey-install.sh +++ b/install/valkey-install.sh @@ -13,41 +13,42 @@ setting_up_container network_check update_os -msg_info "Installing Valkey" -$STD apt update -$STD apt install -y valkey openssl -sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf +setup_deb_based() { + msg_info "Installing Valkey" + $STD apt update + $STD apt install -y valkey openssl + sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf -PASS="$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9' | head -c32)" -echo "requirepass $PASS" >>/etc/valkey/valkey.conf -echo "$PASS" >~/valkey.creds -chmod 600 ~/valkey.creds + PASS="$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9' | head -c32)" + echo "requirepass $PASS" >>/etc/valkey/valkey.conf + echo "$PASS" >~/valkey.creds + chmod 600 ~/valkey.creds -MEMTOTAL_MB=$(free -m | grep ^Mem: | awk '{print $2}') -# reserve 25% of a node type's maxmemory value for system use -MAXMEMORY_MB=$((MEMTOTAL_MB * 75 / 100)) + MEMTOTAL_MB=$(free -m | grep ^Mem: | awk '{print $2}') + # reserve 25% of a node type's maxmemory value for system use + MAXMEMORY_MB=$((MEMTOTAL_MB * 75 / 100)) -echo "" >>/etc/valkey/valkey.conf -echo "# Memory-optimized settings for small-scale deployments" >>/etc/valkey/valkey.conf -echo "maxmemory ${MAXMEMORY_MB}mb" >>/etc/valkey/valkey.conf -echo "maxmemory-policy allkeys-lru" >>/etc/valkey/valkey.conf -echo "maxmemory-samples 10" >>/etc/valkey/valkey.conf -msg_ok "Installed Valkey" + echo "" >>/etc/valkey/valkey.conf + echo "# Memory-optimized settings for small-scale deployments" >>/etc/valkey/valkey.conf + echo "maxmemory ${MAXMEMORY_MB}mb" >>/etc/valkey/valkey.conf + echo "maxmemory-policy allkeys-lru" >>/etc/valkey/valkey.conf + echo "maxmemory-samples 10" >>/etc/valkey/valkey.conf + msg_ok "Installed Valkey" -echo -read -r -p "${TAB3}Enable TLS for Valkey (Sentinel mode does not supported)? [y/N]: " prompt -if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - read -r -p "${TAB3}Use TLS-only mode (disable TCP port 6379)? [y/N]: " tls_only - msg_info "Configuring TLS for Valkey..." + echo + read -r -p "${TAB3}Enable TLS for Valkey (Sentinel mode does not supported)? [y/N]: " prompt + if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then + read -r -p "${TAB3}Use TLS-only mode (disable TCP port 6379)? [y/N]: " tls_only + msg_info "Configuring TLS for Valkey..." - create_self_signed_cert "Valkey" - TLS_DIR="/etc/ssl/valkey" - TLS_CERT="$TLS_DIR/valkey.crt" - TLS_KEY="$TLS_DIR/valkey.key" - chown valkey:valkey "$TLS_CERT" "$TLS_KEY" + create_self_signed_cert "Valkey" + TLS_DIR="/etc/ssl/valkey" + TLS_CERT="$TLS_DIR/valkey.crt" + TLS_KEY="$TLS_DIR/valkey.key" + chown valkey:valkey "$TLS_CERT" "$TLS_KEY" - if [[ ${tls_only,,} =~ ^(y|yes)$ ]]; then - cat </etc/valkey/valkey.conf + if [[ ${tls_only,,} =~ ^(y|yes)$ ]]; then + cat </etc/valkey/valkey.conf # TLS configuration generated by Proxmox VE Valkey helper-script port 0 @@ -56,9 +57,9 @@ tls-cert-file $TLS_DIR/valkey.crt tls-key-file $TLS_DIR/valkey.key tls-auth-clients no EOF - msg_ok "Enabled TLS-only mode on port 6379" - else - cat </etc/valkey/valkey.conf + msg_ok "Enabled TLS-only mode on port 6379" + else + cat </etc/valkey/valkey.conf # TLS configuration generated by Proxmox VE Valkey helper-script tls-port 6380 @@ -66,12 +67,43 @@ tls-cert-file $TLS_DIR/valkey.crt tls-key-file $TLS_DIR/valkey.key tls-auth-clients no EOF - msg_ok "Enabled TLS on port 6380 and TCP on 6379" - fi -fi + msg_ok "Enabled TLS on port 6380 and TCP on 6379" + fi + fi -systemctl enable -q --now valkey-server -systemctl restart valkey-server + systemctl enable -q --now valkey-server + systemctl restart valkey-server +} + +setup_alpine() { + msg_info "Installing Valkey" + $STD apk add valkey valkey-openrc valkey-cli + sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf + + PASS="$(head -c 100 /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c32)" + echo "requirepass $PASS" >>/etc/valkey/valkey.conf + echo "$PASS" >~/valkey.creds + chmod 600 ~/valkey.creds + + MEMTOTAL_MB=$(free -m | grep ^Mem: | awk '{print $2}') + MAXMEMORY_MB=$((MEMTOTAL_MB * 75 / 100)) + + cat </etc/valkey/valkey.conf +# Memory-optimized settings for small-scale deployments +maxmemory ${MAXMEMORY_MB}mb +maxmemory-policy allkeys-lru +maxmemory-samples 10 +EOF + msg_ok "Installed Valkey" + + # Note: Alpine's valkey package is compiled without TLS support + # For TLS, use the Debian-based valkey script instead + + $STD rc-update add valkey default + $STD rc-service valkey start +} + +run_os_setup motd_ssh customize diff --git a/install/vaultwarden-install.sh b/install/vaultwarden-install.sh index 9c2858148..92946acea 100644 --- a/install/vaultwarden-install.sh +++ b/install/vaultwarden-install.sh @@ -13,39 +13,40 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - build-essential \ - pkgconf \ - libssl-dev \ - libmariadb-dev-compat \ - libpq-dev \ - argon2 \ - ssl-cert -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + build-essential \ + pkgconf \ + libssl-dev \ + libmariadb-dev-compat \ + libpq-dev \ + argon2 \ + ssl-cert + msg_ok "Installed Dependencies" -setup_rust -fetch_and_deploy_gh_release "vaultwarden" "dani-garcia/vaultwarden" "tarball" "latest" "/tmp/vaultwarden-src" + setup_rust + fetch_and_deploy_gh_release "vaultwarden" "dani-garcia/vaultwarden" "tarball" "latest" "/tmp/vaultwarden-src" -msg_info "Building Vaultwarden (Patience)" -cd /tmp/vaultwarden-src -VW_VERSION=$(get_latest_github_release "dani-garcia/vaultwarden") -export VW_VERSION -$STD cargo build --features "sqlite,mysql,postgresql" --release -msg_ok "Built Vaultwarden" + msg_info "Building Vaultwarden (Patience)" + cd /tmp/vaultwarden-src + VW_VERSION=$(get_latest_github_release "dani-garcia/vaultwarden") + export VW_VERSION + $STD cargo build --features "sqlite,mysql,postgresql" --release + msg_ok "Built Vaultwarden" -msg_info "Setting up Vaultwarden" -$STD addgroup --system vaultwarden -$STD adduser --system --home /opt/vaultwarden --shell /usr/sbin/nologin --no-create-home --gecos 'vaultwarden' --ingroup vaultwarden --disabled-login --disabled-password vaultwarden -mkdir -p /opt/vaultwarden/{bin,data,web-vault} -cp target/release/vaultwarden /opt/vaultwarden/bin/ -cd ~ && rm -rf /tmp/vaultwarden-src -msg_ok "Set up Vaultwarden" + msg_info "Setting up Vaultwarden" + $STD addgroup --system vaultwarden + $STD adduser --system --home /opt/vaultwarden --shell /usr/sbin/nologin --no-create-home --gecos 'vaultwarden' --ingroup vaultwarden --disabled-login --disabled-password vaultwarden + mkdir -p /opt/vaultwarden/{bin,data,web-vault} + cp target/release/vaultwarden /opt/vaultwarden/bin/ + cd ~ && rm -rf /tmp/vaultwarden-src + msg_ok "Set up Vaultwarden" -fetch_and_deploy_gh_release "vaultwarden_webvault" "dani-garcia/bw_web_builds" "prebuild" "latest" "/opt/vaultwarden/web-vault" "bw_web_*.tar.gz" + fetch_and_deploy_gh_release "vaultwarden_webvault" "dani-garcia/bw_web_builds" "prebuild" "latest" "/opt/vaultwarden/web-vault" "bw_web_*.tar.gz" -msg_info "Configuring Vaultwarden" -cat </opt/vaultwarden/.env + msg_info "Configuring Vaultwarden" + cat </opt/vaultwarden/.env ADMIN_TOKEN='' ROCKET_ADDRESS=0.0.0.0 ROCKET_TLS='{certs="/opt/vaultwarden/ssl-cert-snakeoil.pem",key="/opt/vaultwarden/ssl-cert-snakeoil.key"}' @@ -54,18 +55,18 @@ DATABASE_MAX_CONNS=10 WEB_VAULT_FOLDER=/opt/vaultwarden/web-vault WEB_VAULT_ENABLED=true EOF -mv /etc/ssl/certs/ssl-cert-snakeoil.pem /opt/vaultwarden/ -mv /etc/ssl/private/ssl-cert-snakeoil.key /opt/vaultwarden/ + mv /etc/ssl/certs/ssl-cert-snakeoil.pem /opt/vaultwarden/ + mv /etc/ssl/private/ssl-cert-snakeoil.key /opt/vaultwarden/ -chown -R vaultwarden:vaultwarden /opt/vaultwarden/ -chown root:root /opt/vaultwarden/bin/vaultwarden -chmod +x /opt/vaultwarden/bin/vaultwarden -chown -R root:root /opt/vaultwarden/web-vault/ -chmod +r /opt/vaultwarden/.env -msg_ok "Configured Vaultwarden" + chown -R vaultwarden:vaultwarden /opt/vaultwarden/ + chown root:root /opt/vaultwarden/bin/vaultwarden + chmod +x /opt/vaultwarden/bin/vaultwarden + chown -R root:root /opt/vaultwarden/web-vault/ + chmod +r /opt/vaultwarden/.env + msg_ok "Configured Vaultwarden" -msg_info "Creating Service" -cat </etc/systemd/system/vaultwarden.service + msg_info "Creating Service" + cat </etc/systemd/system/vaultwarden.service [Unit] Description=Bitwarden Server (Powered by Vaultwarden) Documentation=https://github.com/dani-garcia/vaultwarden @@ -97,8 +98,39 @@ AmbientCapabilities=CAP_NET_BIND_SERVICE [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now vaultwarden -msg_ok "Created Service" + systemctl enable -q --now vaultwarden + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add --no-cache \ + openssl \ + argon2 + msg_ok "Installed Dependencies" + + msg_info "Installing Alpine-Vaultwarden" + $STD apk add --no-cache vaultwarden + sed -i 's|export WEB_VAULT_ENABLED=.*|export WEB_VAULT_ENABLED=true|' /etc/conf.d/vaultwarden + echo -e "export ADMIN_TOKEN=''" >>/etc/conf.d/vaultwarden + echo -e "export ROCKET_ADDRESS=0.0.0.0" >>/etc/conf.d/vaultwarden + echo -e "export ROCKET_TLS='{certs=\"/etc/ssl/certs/vaultwarden-selfsigned.crt\",key=\"/etc/ssl/private/vaultwarden-selfsigned.key\"}'" >>/etc/conf.d/vaultwarden + $STD openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/vaultwarden-selfsigned.key -out /etc/ssl/certs/vaultwarden-selfsigned.crt -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost" + chown vaultwarden:vaultwarden /etc/ssl/certs/vaultwarden-selfsigned.crt + chown vaultwarden:vaultwarden /etc/ssl/private/vaultwarden-selfsigned.key + msg_ok "Installed Alpine-Vaultwarden" + + msg_info "Installing Web-Vault" + $STD apk add --no-cache vaultwarden-web-vault + msg_ok "Installed Web-Vault" + + msg_info "Starting Alpine-Vaultwarden" + $STD rc-service vaultwarden start + $STD rc-update add vaultwarden default + msg_ok "Started Alpine-Vaultwarden" +} + +run_os_setup motd_ssh customize diff --git a/install/wireguard-install.sh b/install/wireguard-install.sh index b14d7e15f..93a2d7ffd 100644 --- a/install/wireguard-install.sh +++ b/install/wireguard-install.sh @@ -13,37 +13,38 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y git -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y git + msg_ok "Installed Dependencies" -msg_info "Installing WireGuard" -$STD apt install -y wireguard wireguard-tools net-tools iptables -DEBIAN_FRONTEND=noninteractive apt -o Dpkg::Options::="--force-confnew" install -y iptables-persistent &>/dev/null -$STD netfilter-persistent reload -msg_ok "Installed WireGuard" + msg_info "Installing WireGuard" + $STD apt install -y wireguard wireguard-tools net-tools iptables + DEBIAN_FRONTEND=noninteractive apt -o Dpkg::Options::="--force-confnew" install -y iptables-persistent &>/dev/null + $STD netfilter-persistent reload + msg_ok "Installed WireGuard" -read -r -p "${TAB3}Would you like to add WGDashboard? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard + read -r -p "${TAB3}Would you like to add WGDashboard? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard - msg_info "Installing WGDashboard" - cd /etc/wgdashboard/src - chmod u+x wgd.sh - $STD ./wgd.sh install - . /etc/os-release - if [ "$VERSION_CODENAME" = "trixie" ]; then - echo "net.ipv4.ip_forward=1" >>/etc/sysctl.d/sysctl.conf - $STD sysctl -p /etc/sysctl.d/sysctl.conf - else - echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf - $STD sysctl -p /etc/sysctl.conf - fi - msg_ok "Installed WGDashboard" + msg_info "Installing WGDashboard" + cd /etc/wgdashboard/src + chmod u+x wgd.sh + $STD ./wgd.sh install + . /etc/os-release + if [ "$VERSION_CODENAME" = "trixie" ]; then + echo "net.ipv4.ip_forward=1" >>/etc/sysctl.d/sysctl.conf + $STD sysctl -p /etc/sysctl.d/sysctl.conf + else + echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf + $STD sysctl -p /etc/sysctl.conf + fi + msg_ok "Installed WGDashboard" - msg_info "Create Example Config for WGDashboard" - private_key=$(wg genkey) - cat </etc/wireguard/wg0.conf + msg_info "Create Example Config for WGDashboard" + private_key=$(wg genkey) + cat </etc/wireguard/wg0.conf [Interface] PrivateKey = ${private_key} Address = 10.0.0.1/24 @@ -52,10 +53,10 @@ PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACC PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ListenPort = 51820 EOF - msg_ok "Created Example Config for WGDashboard" + msg_ok "Created Example Config for WGDashboard" - msg_info "Creating Service" - cat </etc/systemd/system/wg-dashboard.service + msg_info "Creating Service" + cat </etc/systemd/system/wg-dashboard.service [Unit] After=syslog.target network-online.target Wants=wg-quick.target @@ -75,9 +76,97 @@ Restart=always [Install] WantedBy=multi-user.target EOF - systemctl enable -q --now wg-dashboard - msg_ok "Created Service" -fi + systemctl enable -q --now wg-dashboard + msg_ok "Created Service" + fi +} + +setup_alpine() { + msg_info "Installing Dependencies" + $STD apk add \ + iptables \ + openrc + msg_ok "Installed Dependencies" + + msg_info "Installing WireGuard" + $STD apk add --no-cache wireguard-tools + if [[ ! -L /etc/init.d/wg-quick.wg0 ]]; then + ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg0 + fi + + private_key=$(wg genkey) + cat </etc/wireguard/wg0.conf +[Interface] +PrivateKey = ${private_key} +Address = 10.0.0.1/24 +SaveConfig = true +PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; +PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; +ListenPort = 51820 +EOF + echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf + $STD rc-update add sysctl + $STD sysctl -p /etc/sysctl.conf + msg_ok "Installed WireGuard" + + read -rp "${TAB3}Do you want to install WGDashboard? (y/N): " INSTALL_WGD + if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then + msg_info "Installing additional dependencies for WGDashboard" + $STD apk add --no-cache \ + python3 \ + py3-pip \ + git \ + sudo \ + musl-dev \ + linux-headers \ + gcc \ + python3-dev + msg_ok "Installed additional dependencies for WGDashboard" + msg_info "Installing WGDashboard" + git clone -q https://github.com/WGDashboard/WGDashboard.git /etc/wgdashboard + cd /etc/wgdashboard/src + chmod u+x wgd.sh + $STD ./wgd.sh install + msg_ok "Installed WGDashboard" + + msg_info "Creating Service for WGDashboard" + cat </etc/init.d/wg-dashboard +#!/sbin/openrc-run + +description="WireGuard Dashboard Service" + +depend() { + need net + after firewall +} + +start() { + ebegin "Starting WGDashboard" + cd /etc/wgdashboard/src/ + ./wgd.sh start & + eend $? +} + +stop() { + ebegin "Stopping WGDashboard" + pkill -f "wgd.sh" + eend $? +} +EOF + chmod +x /etc/init.d/wg-dashboard + $STD rc-update add wg-dashboard default + $STD rc-service wg-dashboard start + msg_ok "Created Service for WGDashboard" + + fi + + msg_info "Starting Services" + $STD rc-update add wg-quick.wg0 default + $STD rc-service wg-quick.wg0 start + msg_ok "Started Services" +} + +run_os_setup motd_ssh customize diff --git a/install/zigbee2mqtt-install.sh b/install/zigbee2mqtt-install.sh index 4674bdc1d..4aef0688a 100644 --- a/install/zigbee2mqtt-install.sh +++ b/install/zigbee2mqtt-install.sh @@ -13,25 +13,26 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - git \ - build-essential -msg_ok "Installed Dependencies" +setup_deb_based() { + msg_info "Installing Dependencies" + $STD apt install -y \ + git \ + build-essential + msg_ok "Installed Dependencies" -NODE_VERSION="24" NODE_MODULE="pnpm@$(curl -fsSL https://raw.githubusercontent.com/Koenkk/zigbee2mqtt/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs -fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt" + NODE_VERSION="24" NODE_MODULE="pnpm@$(curl -fsSL https://raw.githubusercontent.com/Koenkk/zigbee2mqtt/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs + fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt" -msg_info "Setting up Zigbee2MQTT" -mv /opt/zigbee2mqtt/data/configuration.example.yaml /opt/zigbee2mqtt/data/configuration.yaml -cd /opt/zigbee2mqtt -echo "packageImportMethod: hardlink" >>./pnpm-workspace.yaml -$STD pnpm install --no-frozen-lockfile -$STD pnpm build -msg_ok "Setup Zigbee2MQTT" + msg_info "Setting up Zigbee2MQTT" + mv /opt/zigbee2mqtt/data/configuration.example.yaml /opt/zigbee2mqtt/data/configuration.yaml + cd /opt/zigbee2mqtt + echo "packageImportMethod: hardlink" >>./pnpm-workspace.yaml + $STD pnpm install --no-frozen-lockfile + $STD pnpm build + msg_ok "Setup Zigbee2MQTT" -msg_info "Creating Service" -cat </etc/systemd/system/zigbee2mqtt.service + msg_info "Creating Service" + cat </etc/systemd/system/zigbee2mqtt.service [Unit] Description=zigbee2mqtt After=network.target @@ -48,8 +49,23 @@ User=root [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now zigbee2mqtt -msg_ok "Created Service" + systemctl enable -q --now zigbee2mqtt + msg_ok "Created Service" +} + +setup_alpine() { + msg_info "Installing Alpine-Zigbee2MQTT" + mkdir -p /root/.z2m /etc/zigbee2mqtt + $STD apk add zigbee2mqtt + ln -s /etc/zigbee2mqtt/ /root/.z2m + chown -R root:root /etc/zigbee2mqtt /root/.z2m + sed -i -e 's/#datadir="\/var\/lib\/zigbee2mqtt"/datadir="\/etc\/zigbee2mqtt"/' -e 's/#command_user="zigbee2mqtt"/command_user="root"/' /etc/conf.d/zigbee2mqtt + $STD rc-update add zigbee2mqtt + $STD rc-service zigbee2mqtt restart + msg_ok "Installed Alpine-Zigbee2MQTT" +} + +run_os_setup motd_ssh customize From e634f499c659dce89507bb2c1c738fc98ed30721 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 18 Aug 2026 10:38:48 +0000 Subject: [PATCH 44/55] Update CHANGELOG.md (#16591) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index efb4bf8ff..4c85562d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -524,6 +524,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-08-18 + +### πŸš€ Updated Scripts + + - #### πŸ’₯ Breaking Changes + + - Breaking Change: Migrate all "Alpine" Scripts to Normal CT's [@MickLesk](https://github.com/MickLesk) ([#16587](https://github.com/community-scripts/ProxmoxVE/pull/16587)) + ## 2026-08-17 ### πŸš€ Updated Scripts From fe214358e8e09c66d111035665f899aaf469e0a2 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 18 Aug 2026 12:45:09 +0200 Subject: [PATCH 45/55] Update .app files (#16592) Co-authored-by: GitHub Actions --- ct/headers/alpine-adguard | 6 ------ ct/headers/alpine-bitmagnet | 6 ------ ct/headers/alpine-caddy | 6 ------ ct/headers/alpine-docker | 6 ------ ct/headers/alpine-forgejo | 6 ------ ct/headers/alpine-garage | 6 ------ ct/headers/alpine-gatus | 6 ------ ct/headers/alpine-gitea | 6 ------ ct/headers/alpine-grafana | 6 ------ ct/headers/alpine-ironclaw | 6 ------ ct/headers/alpine-loki | 6 ------ ct/headers/alpine-mariadb | 6 ------ ct/headers/alpine-node-red | 6 ------ ct/headers/alpine-ntfy | 6 ------ ct/headers/alpine-postgresql | 6 ------ ct/headers/alpine-prometheus | 6 ------ ct/headers/alpine-rclone | 6 ------ ct/headers/alpine-redis | 6 ------ ct/headers/alpine-rustdeskserver | 6 ------ ct/headers/alpine-rustypaste | 6 ------ ct/headers/alpine-syncthing | 6 ------ ct/headers/alpine-teamspeak-server | 6 ------ ct/headers/alpine-tinyauth | 6 ------ ct/headers/alpine-traefik | 6 ------ ct/headers/alpine-transmission | 6 ------ ct/headers/alpine-valkey | 6 ------ ct/headers/alpine-vaultwarden | 6 ------ ct/headers/alpine-wireguard | 6 ------ ct/headers/alpine-zigbee2mqtt | 6 ------ 29 files changed, 174 deletions(-) delete mode 100644 ct/headers/alpine-adguard delete mode 100644 ct/headers/alpine-bitmagnet delete mode 100644 ct/headers/alpine-caddy delete mode 100644 ct/headers/alpine-docker delete mode 100644 ct/headers/alpine-forgejo delete mode 100644 ct/headers/alpine-garage delete mode 100644 ct/headers/alpine-gatus delete mode 100644 ct/headers/alpine-gitea delete mode 100644 ct/headers/alpine-grafana delete mode 100644 ct/headers/alpine-ironclaw delete mode 100644 ct/headers/alpine-loki delete mode 100644 ct/headers/alpine-mariadb delete mode 100644 ct/headers/alpine-node-red delete mode 100644 ct/headers/alpine-ntfy delete mode 100644 ct/headers/alpine-postgresql delete mode 100644 ct/headers/alpine-prometheus delete mode 100644 ct/headers/alpine-rclone delete mode 100644 ct/headers/alpine-redis delete mode 100644 ct/headers/alpine-rustdeskserver delete mode 100644 ct/headers/alpine-rustypaste delete mode 100644 ct/headers/alpine-syncthing delete mode 100644 ct/headers/alpine-teamspeak-server delete mode 100644 ct/headers/alpine-tinyauth delete mode 100644 ct/headers/alpine-traefik delete mode 100644 ct/headers/alpine-transmission delete mode 100644 ct/headers/alpine-valkey delete mode 100644 ct/headers/alpine-vaultwarden delete mode 100644 ct/headers/alpine-wireguard delete mode 100644 ct/headers/alpine-zigbee2mqtt diff --git a/ct/headers/alpine-adguard b/ct/headers/alpine-adguard deleted file mode 100644 index 64d1d6ac8..000000000 --- a/ct/headers/alpine-adguard +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ___ ________ __ - / | / /___ (_)___ ___ / | ____/ / ____/_ ______ __________/ / - / /| | / / __ \/ / __ \/ _ \______/ /| |/ __ / / __/ / / / __ `/ ___/ __ / - / ___ |/ / /_/ / / / / / __/_____/ ___ / /_/ / /_/ / /_/ / /_/ / / / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_\__,_/\____/\__,_/\__,_/_/ \__,_/ - /_/ diff --git a/ct/headers/alpine-bitmagnet b/ct/headers/alpine-bitmagnet deleted file mode 100644 index 20b69a682..000000000 --- a/ct/headers/alpine-bitmagnet +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ __ _ __ __ - / | / /___ (_)___ ___ / /_ (_) /_____ ___ ____ _____ _____ ___ / /_ - / /| | / / __ \/ / __ \/ _ \______/ __ \/ / __/ __ `__ \/ __ `/ __ `/ __ \/ _ \/ __/ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / / /_/ / / / / / /_/ / /_/ / / / / __/ /_ -/_/ |_/_/ .___/_/_/ /_/\___/ /_.___/_/\__/_/ /_/ /_/\__,_/\__, /_/ /_/\___/\__/ - /_/ /____/ diff --git a/ct/headers/alpine-caddy b/ct/headers/alpine-caddy deleted file mode 100644 index 75208a457..000000000 --- a/ct/headers/alpine-caddy +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ __ __ - / | / /___ (_)___ ___ / ____/___ _____/ /___/ /_ __ - / /| | / / __ \/ / __ \/ _ \______/ / / __ `/ __ / __ / / / / - / ___ |/ / /_/ / / / / / __/_____/ /___/ /_/ / /_/ / /_/ / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ \____/\__,_/\__,_/\__,_/\__, / - /_/ /____/ diff --git a/ct/headers/alpine-docker b/ct/headers/alpine-docker deleted file mode 100644 index 7fd1b265d..000000000 --- a/ct/headers/alpine-docker +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ __ - / | / /___ (_)___ ___ / __ \____ _____/ /_____ _____ - / /| | / / __ \/ / __ \/ _ \______/ / / / __ \/ ___/ //_/ _ \/ ___/ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / /__/ ,< / __/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_____/\____/\___/_/|_|\___/_/ - /_/ diff --git a/ct/headers/alpine-forgejo b/ct/headers/alpine-forgejo deleted file mode 100644 index 40c8e23f3..000000000 --- a/ct/headers/alpine-forgejo +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ _ - / | / /___ (_)___ ___ / ____/___ _________ ____ (_)___ - / /| | / / __ \/ / __ \/ _ \______/ /_ / __ \/ ___/ __ `/ _ \ / / __ \ - / ___ |/ / /_/ / / / / / __/_____/ __/ / /_/ / / / /_/ / __/ / / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \____/_/ \__, /\___/_/ /\____/ - /_/ /____/ /___/ diff --git a/ct/headers/alpine-garage b/ct/headers/alpine-garage deleted file mode 100644 index c14c5aaa0..000000000 --- a/ct/headers/alpine-garage +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ - / | / /___ (_)___ ___ / ____/___ __________ _____ ____ - / /| | / / __ \/ / __ \/ _ \______/ / __/ __ `/ ___/ __ `/ __ `/ _ \ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / / / /_/ / /_/ / __/ -/_/ |_/_/ .___/_/_/ /_/\___/ \____/\__,_/_/ \__,_/\__, /\___/ - /_/ /____/ diff --git a/ct/headers/alpine-gatus b/ct/headers/alpine-gatus deleted file mode 100644 index 0eb5bc4e4..000000000 --- a/ct/headers/alpine-gatus +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ __ - / | / /___ (_)___ ___ ____ _____ _/ /___ _______ - / /| | / / __ \/ / __ \/ _ \______/ __ `/ __ `/ __/ / / / ___/ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / /_/ /_/ (__ ) -/_/ |_/_/ .___/_/_/ /_/\___/ \__, /\__,_/\__/\__,_/____/ - /_/ /____/ diff --git a/ct/headers/alpine-gitea b/ct/headers/alpine-gitea deleted file mode 100644 index 085b375a2..000000000 --- a/ct/headers/alpine-gitea +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _______ __ - / | / /___ (_)___ ___ / ____(_) /____ ____ _ - / /| | / / __ \/ / __ \/ _ \______/ / __/ / __/ _ \/ __ `/ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / / /_/ __/ /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ \____/_/\__/\___/\__,_/ - /_/ diff --git a/ct/headers/alpine-grafana b/ct/headers/alpine-grafana deleted file mode 100644 index 3fe493c9d..000000000 --- a/ct/headers/alpine-grafana +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ ____ - / | / /___ (_)___ ___ / ____/________ _/ __/___ _____ ____ _ - / /| | / / __ \/ / __ \/ _ \______/ / __/ ___/ __ `/ /_/ __ `/ __ \/ __ `/ - / ___ |/ / /_/ / / / / / __/_____/ /_/ / / / /_/ / __/ /_/ / / / / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ \____/_/ \__,_/_/ \__,_/_/ /_/\__,_/ - /_/ diff --git a/ct/headers/alpine-ironclaw b/ct/headers/alpine-ironclaw deleted file mode 100644 index f5e6dc2c3..000000000 --- a/ct/headers/alpine-ironclaw +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ ________ - / | / /___ (_)___ ___ / _/________ ____ / ____/ /___ __ __ - / /| | / / __ \/ / __ \/ _ \______ / // ___/ __ \/ __ \/ / / / __ `/ | /| / / - / ___ |/ / /_/ / / / / / __/_____// // / / /_/ / / / / /___/ / /_/ /| |/ |/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /___/_/ \____/_/ /_/\____/_/\__,_/ |__/|__/ - /_/ diff --git a/ct/headers/alpine-loki b/ct/headers/alpine-loki deleted file mode 100644 index fb352058f..000000000 --- a/ct/headers/alpine-loki +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ __ __ _ - / | / /___ (_)___ ___ / / ____ / /__(_) - / /| | / / __ \/ / __ \/ _ \______/ / / __ \/ //_/ / - / ___ |/ / /_/ / / / / / __/_____/ /___/ /_/ / ,< / / -/_/ |_/_/ .___/_/_/ /_/\___/ /_____/\____/_/|_/_/ - /_/ diff --git a/ct/headers/alpine-mariadb b/ct/headers/alpine-mariadb deleted file mode 100644 index 1279f836a..000000000 --- a/ct/headers/alpine-mariadb +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ __ ___ _ ____ ____ - / | / /___ (_)___ ___ / |/ /___ ______(_)___ _/ __ \/ __ ) - / /| | / / __ \/ / __ \/ _ \______/ /|_/ / __ `/ ___/ / __ `/ / / / __ | - / ___ |/ / /_/ / / / / / __/_____/ / / / /_/ / / / / /_/ / /_/ / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/\__,_/_/ /_/\__,_/_____/_____/ - /_/ diff --git a/ct/headers/alpine-node-red b/ct/headers/alpine-node-red deleted file mode 100644 index ef7b8a85a..000000000 --- a/ct/headers/alpine-node-red +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _ __ __ ____ __________ - / | / /___ (_)___ ___ / | / /___ ____/ /__ / __ \/ ____/ __ \ - / /| | / / __ \/ / __ \/ _ \______/ |/ / __ \/ __ / _ \______/ /_/ / __/ / / / / - / ___ |/ / /_/ / / / / / __/_____/ /| / /_/ / /_/ / __/_____/ _, _/ /___/ /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_/\____/\__,_/\___/ /_/ |_/_____/_____/ - /_/ diff --git a/ct/headers/alpine-ntfy b/ct/headers/alpine-ntfy deleted file mode 100644 index bc4164342..000000000 --- a/ct/headers/alpine-ntfy +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ __ ____ - / | / /___ (_)___ ___ ____ / /_/ __/_ __ - / /| | / / __ \/ / __ \/ _ \______/ __ \/ __/ /_/ / / / - / ___ |/ / /_/ / / / / / __/_____/ / / / /_/ __/ /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/\__/_/ \__, / - /_/ /____/ diff --git a/ct/headers/alpine-postgresql b/ct/headers/alpine-postgresql deleted file mode 100644 index 02accbda4..000000000 --- a/ct/headers/alpine-postgresql +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ __ _____ ____ __ - / | / /___ (_)___ ___ / __ \____ _____/ /_____ _________ / ___// __ \ / / - / /| | / / __ \/ / __ \/ _ \______/ /_/ / __ \/ ___/ __/ __ `/ ___/ _ \\__ \/ / / / / / - / ___ |/ / /_/ / / / / / __/_____/ ____/ /_/ (__ ) /_/ /_/ / / / __/__/ / /_/ / / /___ -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \____/____/\__/\__, /_/ \___/____/\___\_\/_____/ - /_/ /____/ diff --git a/ct/headers/alpine-prometheus b/ct/headers/alpine-prometheus deleted file mode 100644 index 5934057fb..000000000 --- a/ct/headers/alpine-prometheus +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ __ __ - / | / /___ (_)___ ___ / __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ - / /| | / / __ \/ / __ \/ _ \______/ /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/ - / ___ |/ / /_/ / / / / / __/_____/ ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ ) -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ - /_/ diff --git a/ct/headers/alpine-rclone b/ct/headers/alpine-rclone deleted file mode 100644 index 0b0e11fda..000000000 --- a/ct/headers/alpine-rclone +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ __ - / | / /___ (_)___ ___ __________/ /___ ____ ___ - / /| | / / __ \/ / __ \/ _ \______/ ___/ ___/ / __ \/ __ \/ _ \ - / ___ |/ / /_/ / / / / / __/_____/ / / /__/ / /_/ / / / / __/ -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \___/_/\____/_/ /_/\___/ - /_/ diff --git a/ct/headers/alpine-redis b/ct/headers/alpine-redis deleted file mode 100644 index d9c0cae4a..000000000 --- a/ct/headers/alpine-redis +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ ___ - / | / /___ (_)___ ___ / __ \___ ____/ (_)____ - / /| | / / __ \/ / __ \/ _ \______/ /_/ / _ \/ __ / / ___/ - / ___ |/ / /_/ / / / / / __/_____/ _, _/ __/ /_/ / (__ ) -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\___/\__,_/_/____/ - /_/ diff --git a/ct/headers/alpine-rustdeskserver b/ct/headers/alpine-rustdeskserver deleted file mode 100644 index 1c99e61fc..000000000 --- a/ct/headers/alpine-rustdeskserver +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ __ ____ __ _____ - / | / /___ (_)___ ___ / __ \__ _______/ /_/ __ \___ _____/ /__/ ___/___ ______ _____ _____ - / /| | / / __ \/ / __ \/ _ \______/ /_/ / / / / ___/ __/ / / / _ \/ ___/ //_/\__ \/ _ \/ ___/ | / / _ \/ ___/ - / ___ |/ / /_/ / / / / / __/_____/ _, _/ /_/ (__ ) /_/ /_/ / __(__ ) ,< ___/ / __/ / | |/ / __/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\__,_/____/\__/_____/\___/____/_/|_|/____/\___/_/ |___/\___/_/ - /_/ diff --git a/ct/headers/alpine-rustypaste b/ct/headers/alpine-rustypaste deleted file mode 100644 index 20bef8e32..000000000 --- a/ct/headers/alpine-rustypaste +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ____ __ ____ __ - / | / /___ (_)___ ___ / __ \__ _______/ /___ __/ __ \____ ______/ /____ - / /| | / / __ \/ / __ \/ _ \______/ /_/ / / / / ___/ __/ / / / /_/ / __ `/ ___/ __/ _ \ - / ___ |/ / /_/ / / / / / __/_____/ _, _/ /_/ (__ ) /_/ /_/ / ____/ /_/ (__ ) /_/ __/ -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\__,_/____/\__/\__, /_/ \__,_/____/\__/\___/ - /_/ /____/ diff --git a/ct/headers/alpine-syncthing b/ct/headers/alpine-syncthing deleted file mode 100644 index 8d684d61b..000000000 --- a/ct/headers/alpine-syncthing +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _____ __ __ _ - / | / /___ (_)___ ___ / ___/__ ______ _____/ /_/ /_ (_)___ ____ _ - / /| | / / __ \/ / __ \/ _ \______\__ \/ / / / __ \/ ___/ __/ __ \/ / __ \/ __ `/ - / ___ |/ / /_/ / / / / / __/_____/__/ / /_/ / / / / /__/ /_/ / / / / / / / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /____/\__, /_/ /_/\___/\__/_/ /_/_/_/ /_/\__, / - /_/ /____/ /____/ diff --git a/ct/headers/alpine-teamspeak-server b/ct/headers/alpine-teamspeak-server deleted file mode 100644 index cfa5aeb9f..000000000 --- a/ct/headers/alpine-teamspeak-server +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ _____ __ _____ - / | / /___ (_)___ ___ /_ __/__ ____ _____ ___ / ___/____ ___ ____ _/ /__ / ___/___ ______ _____ _____ - / /| | / / __ \/ / __ \/ _ \______/ / / _ \/ __ `/ __ `__ \\__ \/ __ \/ _ \/ __ `/ //_/_____\__ \/ _ \/ ___/ | / / _ \/ ___/ - / ___ |/ / /_/ / / / / / __/_____/ / / __/ /_/ / / / / / /__/ / /_/ / __/ /_/ / ,< /_____/__/ / __/ / | |/ / __/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \___/\__,_/_/ /_/ /_/____/ .___/\___/\__,_/_/|_| /____/\___/_/ |___/\___/_/ - /_/ /_/ diff --git a/ct/headers/alpine-tinyauth b/ct/headers/alpine-tinyauth deleted file mode 100644 index 9fff055f8..000000000 --- a/ct/headers/alpine-tinyauth +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _______ __ __ - / | / /___ (_)___ ___ /_ __(_)___ __ ______ ___ __/ /_/ /_ - / /| | / / __ \/ / __ \/ _ \______/ / / / __ \/ / / / __ `/ / / / __/ __ \ - / ___ |/ / /_/ / / / / / __/_____/ / / / / / / /_/ / /_/ / /_/ / /_/ / / / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/_/ /_/\__, /\__,_/\__,_/\__/_/ /_/ - /_/ /____/ diff --git a/ct/headers/alpine-traefik b/ct/headers/alpine-traefik deleted file mode 100644 index 0c2f2996c..000000000 --- a/ct/headers/alpine-traefik +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ _____ __ - / | / /___ (_)___ ___ /_ __/________ ____ / __(_) /__ - / /| | / / __ \/ / __ \/ _ \______/ / / ___/ __ `/ _ \/ /_/ / //_/ - / ___ |/ / /_/ / / / / / __/_____/ / / / / /_/ / __/ __/ / ,< -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \__,_/\___/_/ /_/_/|_| - /_/ diff --git a/ct/headers/alpine-transmission b/ct/headers/alpine-transmission deleted file mode 100644 index 766d185fc..000000000 --- a/ct/headers/alpine-transmission +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ ______ _ _ - / | / /___ (_)___ ___ /_ __/________ _____ _________ ___ (_)_________(_)___ ____ - / /| | / / __ \/ / __ \/ _ \______/ / / ___/ __ `/ __ \/ ___/ __ `__ \/ / ___/ ___/ / __ \/ __ \ - / ___ |/ / /_/ / / / / / __/_____/ / / / / /_/ / / / (__ ) / / / / / (__ |__ ) / /_/ / / / / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \__,_/_/ /_/____/_/ /_/ /_/_/____/____/_/\____/_/ /_/ - /_/ diff --git a/ct/headers/alpine-valkey b/ct/headers/alpine-valkey deleted file mode 100644 index 5304e7a6d..000000000 --- a/ct/headers/alpine-valkey +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _ __ ____ - / | / /___ (_)___ ___ | | / /___ _/ / /_____ __ __ - / /| | / / __ \/ / __ \/ _ \_____| | / / __ `/ / //_/ _ \/ / / / - / ___ |/ / /_/ / / / / / __/_____/ |/ / /_/ / / ,< / __/ /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ |___/\__,_/_/_/|_|\___/\__, / - /_/ /____/ diff --git a/ct/headers/alpine-vaultwarden b/ct/headers/alpine-vaultwarden deleted file mode 100644 index 5dcd88059..000000000 --- a/ct/headers/alpine-vaultwarden +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _ __ ____ __ - / | / /___ (_)___ ___ | | / /___ ___ __/ / /__ ______ __________/ /__ ____ - / /| | / / __ \/ / __ \/ _ \_____| | / / __ `/ / / / / __/ | /| / / __ `/ ___/ __ / _ \/ __ \ - / ___ |/ / /_/ / / / / / __/_____/ |/ / /_/ / /_/ / / /_ | |/ |/ / /_/ / / / /_/ / __/ / / / -/_/ |_/_/ .___/_/_/ /_/\___/ |___/\__,_/\__,_/_/\__/ |__/|__/\__,_/_/ \__,_/\___/_/ /_/ - /_/ diff --git a/ct/headers/alpine-wireguard b/ct/headers/alpine-wireguard deleted file mode 100644 index 0d4c1bf88..000000000 --- a/ct/headers/alpine-wireguard +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _ ___ __ - / | / /___ (_)___ ___ | | / (_)_______ ____ ___ ______ __________/ / - / /| | / / __ \/ / __ \/ _ \_____| | /| / / / ___/ _ \/ __ `/ / / / __ `/ ___/ __ / - / ___ |/ / /_/ / / / / / __/_____/ |/ |/ / / / / __/ /_/ / /_/ / /_/ / / / /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ |__/|__/_/_/ \___/\__, /\__,_/\__,_/_/ \__,_/ - /_/ /____/ diff --git a/ct/headers/alpine-zigbee2mqtt b/ct/headers/alpine-zigbee2mqtt deleted file mode 100644 index 1f5432120..000000000 --- a/ct/headers/alpine-zigbee2mqtt +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ _____ _ __ ___ __ _______ ____________ - / | / /___ (_)___ ___ /__ / (_)___ _/ /_ ___ ___ |__ \ / |/ / __ \/_ __/_ __/ - / /| | / / __ \/ / __ \/ _ \______/ / / / __ `/ __ \/ _ \/ _ \__/ // /|_/ / / / / / / / / - / ___ |/ / /_/ / / / / / __/_____/ /__/ / /_/ / /_/ / __/ __/ __// / / / /_/ / / / / / -/_/ |_/_/ .___/_/_/ /_/\___/ /____/_/\__, /_.___/\___/\___/____/_/ /_/\___\_\/_/ /_/ - /_/ /____/ From 78f381d8a9a90fa6e4cf2383db246688415e918c Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Tue, 18 Aug 2026 15:55:34 +0200 Subject: [PATCH 46/55] odoo: use patched wkhtmltopdf build, apt's is missing --header-html/--footer-html support (#16590) --- ct/odoo.sh | 7 +++++++ install/odoo-install.sh | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ct/odoo.sh b/ct/odoo.sh index 05f0258be..f7e9e89d2 100644 --- a/ct/odoo.sh +++ b/ct/odoo.sh @@ -36,6 +36,13 @@ function update_script() { rm -f /opt/python3-lxml-html-clean.deb fi + if dpkg -s wkhtmltopdf &>/dev/null; then + systemctl stop odoo + $STD apt remove --purge -y wkhtmltopdf + fetch_and_deploy_gh_release "wkhtmltopdf" "wkhtmltopdf/packaging" "binary" "latest" "" "wkhtmltox_*.bookworm_$(arch_resolve).deb" + systemctl start odoo + fi + RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1) LATEST_VERSION=$(curl -fsSL "https://nightly.odoo.com/${RELEASE}/nightly/deb/" | grep -oP "odoo_${RELEASE}\.\d+_all\.deb" | diff --git a/install/odoo-install.sh b/install/odoo-install.sh index 8955a4baf..621084483 100644 --- a/install/odoo-install.sh +++ b/install/odoo-install.sh @@ -14,11 +14,13 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt install -y python3-lxml wkhtmltopdf +$STD apt install -y python3-lxml curl -fsSL --proto '=https' "https://archive.ubuntu.com/ubuntu/pool/universe/l/lxml-html-clean/python3-lxml-html-clean_0.1.1-1_all.deb" -o /opt/python3-lxml-html-clean.deb $STD dpkg -i /opt/python3-lxml-html-clean.deb msg_ok "Installed Dependencies" +fetch_and_deploy_gh_release "wkhtmltopdf" "wkhtmltopdf/packaging" "binary" "latest" "" "wkhtmltox_*.bookworm_$(arch_resolve).deb" + PG_VERSION="18" setup_postgresql RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1) From 2e7600d74e007f0e3059bc336815e0a5f0e5aeff Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 18 Aug 2026 13:56:05 +0000 Subject: [PATCH 47/55] Update CHANGELOG.md (#16595) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c85562d3..82b01d5ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -528,6 +528,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### πŸš€ Updated Scripts + - #### 🐞 Bug Fixes + + - odoo: use patched wkhtmltopdf build [@MickLesk](https://github.com/MickLesk) ([#16590](https://github.com/community-scripts/ProxmoxVE/pull/16590)) + - #### πŸ’₯ Breaking Changes - Breaking Change: Migrate all "Alpine" Scripts to Normal CT's [@MickLesk](https://github.com/MickLesk) ([#16587](https://github.com/community-scripts/ProxmoxVE/pull/16587)) From 0e0ba4bfb3af5628edcc9f9e942c0b35a18e9e47 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Tue, 18 Aug 2026 19:38:19 +0200 Subject: [PATCH 48/55] romm: add missing /decode and /cache Angie locations for multi-file downloads (#16589) --- ct/romm.sh | 108 +++++++++++++++++++++++++++++++++++++++- install/romm-install.sh | 53 +++++++++++++++++--- 2 files changed, 154 insertions(+), 7 deletions(-) diff --git a/ct/romm.sh b/ct/romm.sh index e6cf836ae..65e66d312 100644 --- a/ct/romm.sh +++ b/ct/romm.sh @@ -81,7 +81,113 @@ function update_script() { ln -sfn "$ROMM_BASE"/resources /opt/romm/frontend/dist/assets/romm/resources ln -sfn "$ROMM_BASE"/assets /opt/romm/frontend/dist/assets/romm/assets if [[ -f /etc/angie/http.d/romm.conf ]]; then - sed -i "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" /etc/angie/http.d/romm.conf + if ! grep -q "js_content decode.decodeBase64" /etc/angie/http.d/romm.conf; then + msg_info "Adding missing /decode and /cache locations to Angie config" + dpkg -l angie-module-njs &>/dev/null || $STD apt-get install -y angie-module-njs + grep -q "ngx_http_js_module.so" /etc/angie/angie.conf || sed -i '1i load_module modules/ngx_http_js_module.so;' /etc/angie/angie.conf + mkdir -p /etc/angie/js "${ROMM_BASE}/cache" + cat <<'JSEOF' >/etc/angie/js/decode.js +// Decode a Base64 encoded string received as a query parameter named 'value', +// and return the decoded value in the response body. +function decodeBase64(r) { + var encodedValue = r.args.value; + + if (!encodedValue) { + r.return(400, "Missing 'value' query parameter"); + return; + } + + try { + // Use Buffer to return raw bytes β€” atob() returns a JS string which r.return() + // would re-encode as UTF-8, corrupting any non-ASCII bytes (e.g. in filenames + // like "PokΓ©mon") and causing CRC mismatches in the mod_zip manifest. + r.return(200, Buffer.from(encodedValue, 'base64')); + } catch (e) { + r.return(400, "Invalid Base64 encoding"); + } +} + +export default { decodeBase64 }; +JSEOF + cat </etc/angie/http.d/romm.conf +js_import /etc/angie/js/decode.js; + +upstream romm_backend { + server 127.0.0.1:5000; +} + +map \$http_upgrade \$connection_upgrade { + default upgrade; + '' close; +} + +server { + listen 80; + server_name _; + root /opt/romm/frontend/dist; + client_max_body_size 0; + + location / { + try_files \$uri \$uri/ /index.html; + } + + location /assets { + alias /opt/romm/frontend/dist/assets; + try_files \$uri \$uri/ =404; + expires 1y; + add_header Cache-Control "public, immutable"; + } + + location ~ ^/rom/.*/ejs\$ { + add_header Cross-Origin-Embedder-Policy "require-corp"; + add_header Cross-Origin-Opener-Policy "same-origin"; + try_files \$uri /index.html; + } + + location /api { + proxy_pass http://romm_backend; + proxy_buffering off; + proxy_request_buffering off; + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$scheme; + } + + location ~ ^/(ws|netplay) { + proxy_pass http://romm_backend; + proxy_http_version 1.1; + proxy_set_header Upgrade \$http_upgrade; + proxy_set_header Connection \$connection_upgrade; + proxy_set_header Host \$host; + proxy_read_timeout 86400; + } + + location = /openapi.json { + proxy_pass http://romm_backend; + } + + location /library/ { + internal; + alias ${ROMM_BASE}/library/; + } + + location /cache/ { + internal; + alias ${ROMM_BASE}/cache/; + } + + location /decode { + internal; + js_content decode.decodeBase64; + } +} +EOF + msg_ok "Added /decode and /cache locations" + else + sed -i -e "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" \ + -e "s|alias .*/cache/;|alias ${ROMM_BASE}/cache/;|" /etc/angie/http.d/romm.conf + fi systemctl reload angie elif [[ -f /etc/nginx/sites-available/romm ]]; then sed -i "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" /etc/nginx/sites-available/romm diff --git a/install/romm-install.sh b/install/romm-install.sh index d55faf209..a9f46eec1 100644 --- a/install/romm-install.sh +++ b/install/romm-install.sh @@ -42,16 +42,40 @@ $STD apt install -y \ tzdata msg_ok "Installed Dependencies" -msg_info "Installing Angie with mod_zip module" +msg_info "Installing Angie with mod_zip and njs modules" setup_deb822_repo \ "angie" \ "https://angie.software/keys/angie-signing.gpg" \ "https://download.angie.software/angie/debian/$(get_os_info version_id)" \ "$(get_os_info codename)" \ "main" -$STD apt-get install -y angie angie-module-zip -sed -i '1i load_module modules/ngx_http_zip_module.so;' /etc/angie/angie.conf -msg_ok "Installed Angie with mod_zip module" +$STD apt-get install -y angie angie-module-zip angie-module-njs +sed -i '1i load_module modules/ngx_http_zip_module.so;\nload_module modules/ngx_http_js_module.so;' /etc/angie/angie.conf +mkdir -p /etc/angie/js +cat <<'EOF' >/etc/angie/js/decode.js +// Decode a Base64 encoded string received as a query parameter named 'value', +// and return the decoded value in the response body. +function decodeBase64(r) { + var encodedValue = r.args.value; + + if (!encodedValue) { + r.return(400, "Missing 'value' query parameter"); + return; + } + + try { + // Use Buffer to return raw bytes β€” atob() returns a JS string which r.return() + // would re-encode as UTF-8, corrupting any non-ASCII bytes (e.g. in filenames + // like "PokΓ©mon") and causing CRC mismatches in the mod_zip manifest. + r.return(200, Buffer.from(encodedValue, 'base64')); + } catch (e) { + r.return(400, "Invalid Base64 encoding"); + } +} + +export default { decodeBase64 }; +EOF +msg_ok "Installed Angie with mod_zip and njs modules" PYTHON_VERSION="3.13" setup_uv NODE_VERSION="24" setup_nodejs setup_mariadb @@ -63,7 +87,8 @@ mkdir -p /opt/romm \ /var/lib/romm/resources \ /var/lib/romm/assets/{saves,states,screenshots} \ /var/lib/romm/library/roms \ - /var/lib/romm/library/bios + /var/lib/romm/library/bios \ + /var/lib/romm/cache msg_ok "Created directories" msg_info "Creating configuration file" @@ -217,6 +242,8 @@ fetch_and_deploy_gh_release "EmulatorJS" "EmulatorJS/EmulatorJS" "prebuild" "v4. msg_info "Configuring Angie" cat <<'EOF' >/etc/angie/http.d/romm.conf +js_import /etc/angie/js/decode.js; + upstream romm_backend { server 127.0.0.1:5000; } @@ -283,10 +310,24 @@ server { internal; alias /var/lib/romm/library/; } + + # Internally redirect cached zip file requests (Range-resumable downloads) + location /cache/ { + internal; + alias /var/lib/romm/cache/; + } + + # Internal decoding endpoint, used by mod_zip to decode base64-encoded + # multi-file manifest entries (e.g. the generated .m3u for multi-disc games) + location /decode { + internal; + js_content decode.decodeBase64; + } } EOF -sed -i "s|alias /var/lib/romm/library/;|alias ${ROMM_BASE}/library/;|" /etc/angie/http.d/romm.conf +sed -i -e "s|alias /var/lib/romm/library/;|alias ${ROMM_BASE}/library/;|" \ + -e "s|alias /var/lib/romm/cache/;|alias ${ROMM_BASE}/cache/;|" /etc/angie/http.d/romm.conf rm -f /etc/angie/http.d/default.conf systemctl restart angie systemctl enable -q --now angie From ed40b618929afcad939a84710f4cf600235b534d Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 18 Aug 2026 17:38:43 +0000 Subject: [PATCH 49/55] Update CHANGELOG.md (#16598) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82b01d5ad..5ffe8b628 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -530,6 +530,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - romm: add missing /decode and /cache Angie locations for multi-file downloads [@MickLesk](https://github.com/MickLesk) ([#16589](https://github.com/community-scripts/ProxmoxVE/pull/16589)) - odoo: use patched wkhtmltopdf build [@MickLesk](https://github.com/MickLesk) ([#16590](https://github.com/community-scripts/ProxmoxVE/pull/16590)) - #### πŸ’₯ Breaking Changes From 2c516aa413531141dcf763613437de24bbd0a28c Mon Sep 17 00:00:00 2001 From: rmpratt1 Date: Wed, 19 Aug 2026 12:40:02 -0700 Subject: [PATCH 50/55] Increase default RAM allocation for Gatus (#16601) Gatus install was failing with the existing memory defaults (512M) due to thrashing from memory pressure while compiling the package. Bumped to 2048M as the same issue occurred when using 1024M. Gatus LXC is hovering around 150M post install so this could be bumped down after the install completed but there is no installation time only setting as far as I am aware. --- ct/gatus.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/gatus.sh b/ct/gatus.sh index 2faf7bec3..547f3c278 100644 --- a/ct/gatus.sh +++ b/ct/gatus.sh @@ -19,11 +19,11 @@ if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then fi if [[ "${var_os:-}" == "alpine" ]]; then - var_ram="${var_ram:-512}" + var_ram="${var_ram:-2048}" var_disk="${var_disk:-3}" var_version="${var_version:-3.24}" else - var_ram="${var_ram:-512}" + var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_version="${var_version:-13}" fi From b2584b47ec626108a40678b7dec8e4312181aef3 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 19:40:29 +0000 Subject: [PATCH 51/55] Update CHANGELOG.md (#16618) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ffe8b628..63fc5ce66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -524,6 +524,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-08-19 + +### πŸš€ Updated Scripts + + - #### 🐞 Bug Fixes + + - Increase default RAM allocation for Gatus [@rmpratt1](https://github.com/rmpratt1) ([#16601](https://github.com/community-scripts/ProxmoxVE/pull/16601)) + ## 2026-08-18 ### πŸš€ Updated Scripts From decda83256fede2addaf8390374db3b891c14cbd Mon Sep 17 00:00:00 2001 From: Tim Moore <1232390+angusmaul@users.noreply.github.com> Date: Thu, 20 Aug 2026 05:41:41 +1000 Subject: [PATCH 52/55] VictoriaMetrics: use github_api_call for release lookups so GITHUB_TOKEN is honored (#16607) The release-tag resolution used raw unauthenticated curl calls, which ignore GITHUB_TOKEN and fail with curl exit 22 on the shared 60/hr unauthenticated rate limit - after the container is already created. Resolve via the existing github_api_call helper (auth + retries + rate-limit diagnosis), matching proxmox-backup-server-install.sh. Also collapses the two identical VictoriaLogs /releases/latest calls into one. Fixes community-scripts/ProxmoxVE#16606 Co-authored-by: Claude Fable 5 --- install/victoriametrics-install.sh | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/install/victoriametrics-install.sh b/install/victoriametrics-install.sh index 6768211bc..fefe732ca 100644 --- a/install/victoriametrics-install.sh +++ b/install/victoriametrics-install.sh @@ -15,9 +15,11 @@ update_os msg_info "Getting latest version of VictoriaMetrics" -victoriametrics_release=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases" | - jq -r --arg a "$(arch_resolve)" '.[] | select(.assets[].name | match("^victoria-metrics-linux-" + $a + "-v[0-9.]+.tar.gz$")) | .tag_name' | +vm_releases_json="$(mktemp)" +github_api_call "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases" "$vm_releases_json" +victoriametrics_release=$(jq -r --arg a "$(arch_resolve)" '.[] | select(.assets[].name | match("^victoria-metrics-linux-" + $a + "-v[0-9.]+.tar.gz$")) | .tag_name' "$vm_releases_json" | head -n 1) +rm -f "$vm_releases_json" victoriametrics_filename="victoria-metrics-linux-$(arch_resolve)-${victoriametrics_release}.tar.gz" vmutils_filename="vmutils-linux-$(arch_resolve)-${victoriametrics_release}.tar.gz" msg_ok "Got version $victoriametrics_release of VictoriaMetrics" @@ -28,12 +30,13 @@ fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuil read -r -p "${TAB3}Would you like to add VictoriaLogs? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - vmlogs_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" | - jq -r '.assets[].name' | + vl_release_json="$(mktemp)" + github_api_call "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" "$vl_release_json" + vmlogs_filename=$(jq -r '.assets[].name' "$vl_release_json" | grep -E "^victoria-logs-linux-$(arch_resolve)-v[0-9.]+\.tar\.gz$") - vlutils_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" | - jq -r '.assets[].name' | + vlutils_filename=$(jq -r '.assets[].name' "$vl_release_json" | grep -E "^vlutils-linux-$(arch_resolve)-v[0-9.]+\.tar\.gz$") + rm -f "$vl_release_json" fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "$vmlogs_filename" fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "$vlutils_filename" fi From a1fb54dcec6bc58b85df8a58d116b2c02b9c7195 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 19:42:09 +0000 Subject: [PATCH 53/55] Update CHANGELOG.md (#16619) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63fc5ce66..cbe5cfbee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -530,6 +530,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - VictoriaMetrics: use github_api_call for release lookups so GITHUB_TOKEN is honored [@angusmaul](https://github.com/angusmaul) ([#16607](https://github.com/community-scripts/ProxmoxVE/pull/16607)) - Increase default RAM allocation for Gatus [@rmpratt1](https://github.com/rmpratt1) ([#16601](https://github.com/community-scripts/ProxmoxVE/pull/16601)) ## 2026-08-18 From e6ade070716264112bffa2eb873cd20a75d34c79 Mon Sep 17 00:00:00 2001 From: Brad Schroth <2342157+bferd@users.noreply.github.com> Date: Wed, 19 Aug 2026 15:42:34 -0400 Subject: [PATCH 54/55] fix: clean yarn cache after mealie frontend build to prevent disk growth (#16609) --- ct/mealie.sh | 1 + install/mealie-install.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/ct/mealie.sh b/ct/mealie.sh index 1f3631ccc..6a288ad43 100644 --- a/ct/mealie.sh +++ b/ct/mealie.sh @@ -75,6 +75,7 @@ STARTEOF cd /opt/mealie/frontend $STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000 $STD yarn generate + $STD yarn cache clean msg_ok "Built Frontend" msg_info "Copying Built Frontend" diff --git a/install/mealie-install.sh b/install/mealie-install.sh index f29ea36b4..137b38622 100644 --- a/install/mealie-install.sh +++ b/install/mealie-install.sh @@ -48,6 +48,7 @@ $STD sed -i "s|value: data.buildId,|value: \"v${MEALIE_VERSION}\",|g" "$SITE_SET $STD sed -i "s|value: data.production ? i18n.t(\"about.production\") : i18n.t(\"about.development\"),|value: \"bare-metal\",|g" "$SITE_SETTINGS" $STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000 $STD yarn generate +$STD yarn cache clean msg_ok "Built Frontend" msg_info "Copying Built Frontend" From 041de686e6640aef4ffad057932fee080d3b6055 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 19:42:58 +0000 Subject: [PATCH 55/55] Update CHANGELOG.md (#16620) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbe5cfbee..71d56df74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -530,6 +530,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - fix: clean yarn cache after mealie frontend build to prevent disk growth [@bferd](https://github.com/bferd) ([#16609](https://github.com/community-scripts/ProxmoxVE/pull/16609)) - VictoriaMetrics: use github_api_call for release lookups so GITHUB_TOKEN is honored [@angusmaul](https://github.com/angusmaul) ([#16607](https://github.com/community-scripts/ProxmoxVE/pull/16607)) - Increase default RAM allocation for Gatus [@rmpratt1](https://github.com/rmpratt1) ([#16601](https://github.com/community-scripts/ProxmoxVE/pull/16601))