From 8a9e9e7fcb9924b53dc8948695bc0aeaa7e6fb64 Mon Sep 17 00:00:00 2001 From: tremor021 Date: Thu, 18 Sep 2025 12:01:41 +0200 Subject: [PATCH 01/53] Update alpine --- install/alpine-caddy-install.sh | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/install/alpine-caddy-install.sh b/install/alpine-caddy-install.sh index 8386dc2e..10d155ed 100644 --- a/install/alpine-caddy-install.sh +++ b/install/alpine-caddy-install.sh @@ -16,16 +16,6 @@ update_os msg_info "Installing Caddy" $STD apk add --no-cache caddy caddy-openrc cat</etc/caddy/Caddyfile -# The Caddyfile is an easy way to configure your Caddy web server. -# -# Unless the file starts with a global options block, the first -# uncommented line is always the address of your site. -# -# To use your own domain name (with automatic HTTPS), first make -# sure your domain's A/AAAA DNS records are properly pointed to -# this machine's public IP, then replace ":80" below with your -# domain name. - :80 { # Set this path to your site's directory. root * /var/www/html @@ -39,9 +29,6 @@ cat</etc/caddy/Caddyfile # Or serve a PHP site through php-fpm: # php_fastcgi localhost:9000 } - -# Refer to the Caddy docs for more information: -# https://caddyserver.com/docs/caddyfile EOF mkdir -p /var/www/html cat</var/www/html/index.html From 71cb94f3094c7a1b6301255a16598e29e7483aa2 Mon Sep 17 00:00:00 2001 From: tremor021 Date: Thu, 18 Sep 2025 12:05:59 +0200 Subject: [PATCH 02/53] Update alpine-caddy --- install/alpine-caddy-install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/alpine-caddy-install.sh b/install/alpine-caddy-install.sh index 10d155ed..882e2e61 100644 --- a/install/alpine-caddy-install.sh +++ b/install/alpine-caddy-install.sh @@ -15,7 +15,7 @@ update_os msg_info "Installing Caddy" $STD apk add --no-cache caddy caddy-openrc -cat</etc/caddy/Caddyfile +cat</etc/caddy/Caddyfile :80 { # Set this path to your site's directory. root * /var/www/html @@ -31,7 +31,7 @@ cat</etc/caddy/Caddyfile } EOF mkdir -p /var/www/html -cat</var/www/html/index.html +cat</var/www/html/index.html From 7101291349e22a9279fde93a461cd90b2fd871dc Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:04:11 +0200 Subject: [PATCH 03/53] Update build.func --- misc/build.func | 89 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/misc/build.func b/misc/build.func index a7ada229..45d5f313 100644 --- a/misc/build.func +++ b/misc/build.func @@ -26,6 +26,94 @@ variables() { #CT_TYPE=${var_unprivileged:-$CT_TYPE} } +#!/usr/bin/env bash +# ----------------------------------------------------------------------------- +# Community-Scripts bootstrap loader +# - Always sources build.func from remote +# - Updates local core files only if build.func changed +# - Local cache: /usr/local/community-scripts/core +# ----------------------------------------------------------------------------- + +FUNC_DIR="/usr/local/community-scripts/core" +mkdir -p "$FUNC_DIR" + +BUILD_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func" +BUILD_REV="$FUNC_DIR/build.rev" + +# --- Step 1: fetch build.func content once, compute hash --- +build_content="$(curl -fsSL "$BUILD_URL")" || { + echo "❌ Failed to fetch build.func" + exit 1 +} + +newhash=$(printf "%s" "$build_content" | sha256sum | awk '{print $1}') +oldhash=$(cat "$BUILD_REV" 2>/dev/null || echo "") + +# --- Step 2: if build.func changed, offer update for core files --- +if [ "$newhash" != "$oldhash" ]; then + echo "⚠️ build.func changed!" + + while true; do + read -rp "Refresh local core files? [y/N/diff]: " ans + case "$ans" in + [Yy]*) + echo "$newhash" >"$BUILD_REV" + + update_func_file() { + local file="$1" + local url="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/$file" + local local_path="$FUNC_DIR/$file" + + echo "⬇️ Downloading $file ..." + curl -fsSL "$url" -o "$local_path" || { + echo "❌ Failed to fetch $file" + exit 1 + } + echo "✔️ Updated $file" + } + + update_func_file core.func + update_func_file error_handler.func + update_func_file tools.func + break + ;; + [Dd]*) + for file in core.func error_handler.func tools.func; do + local_path="$FUNC_DIR/$file" + url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/$file" + remote_tmp="$(mktemp)" + + curl -fsSL "$url" -o "$remote_tmp" || continue + + if [ -f "$local_path" ]; then + echo "🔍 Diff for $file:" + diff -u "$local_path" "$remote_tmp" || echo "(no differences)" + else + echo "📦 New file $file will be installed" + fi + + rm -f "$remote_tmp" + done + ;; + *) + echo "❌ Skipped updating local core files" + break + ;; + esac + done +else + echo "✔️ build.func unchanged → using existing local core files" +fi + +# --- Step 3: always source local versions of the core files --- +source "$FUNC_DIR/core.func" +source "$FUNC_DIR/error_handler.func" +source "$FUNC_DIR/tools.func" + +# --- Step 4: finally, source build.func directly from memory --- +# (no tmp file needed) +source <(printf "%s" "$build_content") + # ------------------------------------------------------------------------------ # Load core + error handler functions from community-scripts repo # @@ -33,6 +121,7 @@ variables() { # - Load: core.func, error_handler.func, api.func # - Initialize error traps after loading # ------------------------------------------------------------------------------ + source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/api.func) if command -v curl >/dev/null 2>&1; then From e6305be04f687b1f3801abc9cb58ffd68ce842ab Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:07:07 +0200 Subject: [PATCH 04/53] Add workflow to bump build.func revision --- .github/workflows/revision-bump.yml | 44 +++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/workflows/revision-bump.yml diff --git a/.github/workflows/revision-bump.yml b/.github/workflows/revision-bump.yml new file mode 100644 index 00000000..6e15d75b --- /dev/null +++ b/.github/workflows/revision-bump.yml @@ -0,0 +1,44 @@ +name: Bump build.func Revision + +on: + push: + branches: [ main ] + paths: + - 'misc/*.func' + - 'misc/*.sh' + +jobs: + bump-revision: + runs-on: ubuntu-latest + if: github.event.head_commit.author.name != 'github-actions[bot]' + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Detect misc changes + id: changes + run: | + git diff --name-only HEAD^ HEAD > changed_files.txt + echo "changed=$(cat changed_files.txt)" >> $GITHUB_OUTPUT + + - name: Bump Revision if needed + if: contains(steps.changes.outputs.changed, 'misc/') && !contains(steps.changes.outputs.changed, 'misc/build.func') + run: | + REV_FILE=".build-revision" + if [ ! -f "$REV_FILE" ]; then echo 0 > "$REV_FILE"; fi + REV_NUM=$(($(cat $REV_FILE) + 1)) + echo $REV_NUM > $REV_FILE + SHORT_SHA=$(git rev-parse --short HEAD) + REV_STR="Revision: r${REV_NUM} (git-${SHORT_SHA})" + sed -i "s/^# Revision:.*/# $REV_STR/" misc/build.func + echo "REV_STR=$REV_STR" >> $GITHUB_ENV + + - name: Commit & push revision + if: contains(steps.changes.outputs.changed, 'misc/') && !contains(steps.changes.outputs.changed, 'misc/build.func') + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add misc/build.func .build-revision + git commit -m "chore: bump build.func to $REV_STR" + git push From ff0e6794d4ef803377c0697dde80a708b2398099 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:07:07 +0200 Subject: [PATCH 05/53] Update build.func --- misc/build.func | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/misc/build.func b/misc/build.func index 45d5f313..77b452d7 100644 --- a/misc/build.func +++ b/misc/build.func @@ -1,9 +1,8 @@ #!/usr/bin/env bash -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) -# Co-Author: MickLesk -# Co-Author: michelroegl-brunner +# Copyright (c) 2021-2025 community-scripts ORG +# Author: tteck (tteckster) | MickLesk | michelroegl-brunner # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Revision: # ------------------------------------------------------------------------------ # variables() From 6d2282e5c31c93878aabea91e93ba3698b08ae9b Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:08:38 +0200 Subject: [PATCH 06/53] Update alpine-tools.func --- misc/alpine-tools.func | 32 +++----------------------------- 1 file changed, 3 insertions(+), 29 deletions(-) diff --git a/misc/alpine-tools.func b/misc/alpine-tools.func index 4bd959d4..788e8e00 100644 --- a/misc/alpine-tools.func +++ b/misc/alpine-tools.func @@ -469,15 +469,15 @@ setup_go() { # ------------------------------ # Composer – Alpine -# nutzt php83-cli + openssl + phar +# uses php83-cli + openssl + phar # ------------------------------ setup_composer() { local COMPOSER_BIN="/usr/local/bin/composer" if ! has php; then - # bevorzugt php83 auf Alpine 3.20/3.21+ + # prefers php83 msg_info "Installing PHP CLI for Composer" apk add --no-cache php83-cli php83-openssl php83-phar php83-iconv >/dev/null 2>&1 || { - # Fallback auf generisches php-cli + # Fallback to generic php if 83 not available apk add --no-cache php-cli php-openssl php-phar php-iconv >/dev/null 2>&1 || { msg_error "Failed to install php-cli for composer" return 1 @@ -504,29 +504,3 @@ setup_composer() { ensure_usr_local_bin_persist msg_ok "Composer ready: $(composer --version 2>/dev/null)" } - -# ------------------------------ -# Adminer/uv/go/java/yq/composer stehen oben -# ------------------------------ - -# ------------------------------ -# (Optional) LOCAL_IP import – POSIX-safe -# ------------------------------ -import_local_ip() { - # lädt LOCAL_IP aus /run/local-ip.env oder ermittelt es best effort - local IP_FILE="/run/local-ip.env" - if [ -f "$IP_FILE" ]; then - # shellcheck disable=SC1090 - . "$IP_FILE" - fi - if [ -z "${LOCAL_IP:-}" ]; then - LOCAL_IP="$(ip route get 1 2>/dev/null | awk '{for(i=1;i<=NF;i++) if($i=="src"){print $(i+1); exit}}')" - [ -z "$LOCAL_IP" ] && LOCAL_IP="$(hostname -i 2>/dev/null | awk '{print $1}')" - [ -z "$LOCAL_IP" ] && { - msg_error "Could not determine LOCAL_IP" - return 1 - } - echo "LOCAL_IP=$LOCAL_IP" >"$IP_FILE" - fi - export LOCAL_IP -} From 84437b0f5e2b73d7d488bd7c5fadda4d0973df2e Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:10:37 +0200 Subject: [PATCH 07/53] Update revision-bump.yml --- .github/workflows/revision-bump.yml | 99 +++++++++++++++++++++++------ 1 file changed, 81 insertions(+), 18 deletions(-) diff --git a/.github/workflows/revision-bump.yml b/.github/workflows/revision-bump.yml index 6e15d75b..a39deccd 100644 --- a/.github/workflows/revision-bump.yml +++ b/.github/workflows/revision-bump.yml @@ -2,28 +2,63 @@ name: Bump build.func Revision on: push: - branches: [ main ] + branches: + - main paths: - - 'misc/*.func' - - 'misc/*.sh' + - "misc/*.func" + - "misc/*.sh" + workflow_dispatch: jobs: bump-revision: + if: github.repository == 'community-scripts/ProxmoxVE' runs-on: ubuntu-latest - if: github.event.head_commit.author.name != 'github-actions[bot]' - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Detect misc changes + permissions: + contents: write + pull-requests: write + + steps: + - name: Generate token for PR + id: generate-token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + + - name: Generate token for auto-merge + id: generate-token-merge + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }} + private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }} + + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 2 + + - name: Get changed files id: changes run: | git diff --name-only HEAD^ HEAD > changed_files.txt - echo "changed=$(cat changed_files.txt)" >> $GITHUB_OUTPUT + echo "Changed files:" + cat changed_files.txt - - name: Bump Revision if needed - if: contains(steps.changes.outputs.changed, 'misc/') && !contains(steps.changes.outputs.changed, 'misc/build.func') + - name: Skip if only build.func changed + id: skipcheck + run: | + if grep -q "^misc/build.func$" changed_files.txt && [ $(wc -l < changed_files.txt) -eq 1 ]; then + echo "skip=true" >> $GITHUB_ENV + else + echo "skip=false" >> $GITHUB_ENV + fi + + - name: Disable file mode changes + run: git config core.fileMode false + + - name: Bump build.func revision + if: env.skip == 'false' run: | REV_FILE=".build-revision" if [ ! -f "$REV_FILE" ]; then echo 0 > "$REV_FILE"; fi @@ -31,14 +66,42 @@ jobs: echo $REV_NUM > $REV_FILE SHORT_SHA=$(git rev-parse --short HEAD) REV_STR="Revision: r${REV_NUM} (git-${SHORT_SHA})" + + echo "Updating build.func with $REV_STR" sed -i "s/^# Revision:.*/# $REV_STR/" misc/build.func echo "REV_STR=$REV_STR" >> $GITHUB_ENV - - name: Commit & push revision - if: contains(steps.changes.outputs.changed, 'misc/') && !contains(steps.changes.outputs.changed, 'misc/build.func') - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "GitHub Actions" + git config --global user.email "github-actions[bot]@users.noreply.github.com" git add misc/build.func .build-revision git commit -m "chore: bump build.func to $REV_STR" - git push + + - name: Create PR + if: env.skip == 'false' + run: | + BRANCH_NAME="pr-build-revision-$(date +'%Y%m%d%H%M%S')" + git checkout -b $BRANCH_NAME + git push origin $BRANCH_NAME + + gh pr create --title "[core] bump build.func to $REV_STR" \ + --body "This PR bumps build.func revision because files in misc/ changed." \ + --head $BRANCH_NAME \ + --base main \ + --label "automated pr" + env: + GH_TOKEN: ${{ steps.generate-token.outputs.token }} + + - name: Approve PR and merge + if: env.skip == 'false' + env: + GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }} + run: | + PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number') + if [ -n "$PR_NUMBER" ]; then + gh pr review $PR_NUMBER --approve + gh pr merge $PR_NUMBER --squash --admin + fi + + - name: Skip log + if: env.skip == 'true' + run: echo "Only build.func changed – nothing to do." From e6931c7c4f83602eeb3aeb3e91fce8ea435c9bb5 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:11:23 +0200 Subject: [PATCH 08/53] Update alpine-tools.func --- misc/alpine-tools.func | 1 + 1 file changed, 1 insertion(+) diff --git a/misc/alpine-tools.func b/misc/alpine-tools.func index 788e8e00..663b5f1d 100644 --- a/misc/alpine-tools.func +++ b/misc/alpine-tools.func @@ -483,6 +483,7 @@ setup_composer() { return 1 } } + msg_ok "PHP CLI ready: $(php -v | head -n1)" fi if [ -x "$COMPOSER_BIN" ]; then From 3deefd6ffb505d8d3dd5ecca2eb2837d1b37b6a3 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:12:43 +0200 Subject: [PATCH 09/53] test --- misc/tools.func | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index 6b619c44..381fe85a 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -232,7 +232,7 @@ function setup_postgresql() { # # Variables: # MARIADB_VERSION - MariaDB version to install (e.g. 10.11, latest) (default: latest) -# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ test setup_mariadb() { local MARIADB_VERSION="${MARIADB_VERSION:-latest}" @@ -2024,7 +2024,7 @@ EOF check_for_gh_release() { local app="$1" local source="$2" - local pinned_version="${3:-}" # optional + local pinned_version="${3:-}" # optional local current_file="$HOME/.${app,,}" msg_info "Check for update: ${app}" @@ -2044,7 +2044,7 @@ check_for_gh_release() { fi # get latest release -local release + local release release=$(curl -fsSL "https://api.github.com/repos/${source}/releases/latest" | jq -r '.tag_name' | sed 's/^v//') @@ -2080,4 +2080,4 @@ local release msg_ok "${app} is up to date (v${release})" return 1 fi -} \ No newline at end of file +} From 5777cd72f40916b306b608d93d43e3a3c1e28716 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:13:58 +0200 Subject: [PATCH 10/53] Update paths in revision-bump workflow --- .github/workflows/revision-bump.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/revision-bump.yml b/.github/workflows/revision-bump.yml index a39deccd..9ff8cbb8 100644 --- a/.github/workflows/revision-bump.yml +++ b/.github/workflows/revision-bump.yml @@ -5,8 +5,9 @@ on: branches: - main paths: - - "misc/*.func" - - "misc/*.sh" + - "misc/**" + paths-ignore: + - "misc/build.func" workflow_dispatch: jobs: From 2844eaf9766ce7475d9af7cdd2efae24de9affe4 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:14:08 +0200 Subject: [PATCH 11/53] Update tools.func --- misc/tools.func | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/tools.func b/misc/tools.func index 381fe85a..6f574c5d 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -232,7 +232,7 @@ function setup_postgresql() { # # Variables: # MARIADB_VERSION - MariaDB version to install (e.g. 10.11, latest) (default: latest) -# ------------------------------------------------------------------------------ test +# ------------------------------------------------------------------------------ te setup_mariadb() { local MARIADB_VERSION="${MARIADB_VERSION:-latest}" From 306bfcced9a297a769797298fb173b43d6cef67b Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:15:13 +0200 Subject: [PATCH 12/53] Update revision-bump.yml to include misc paths --- .github/workflows/revision-bump.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/revision-bump.yml b/.github/workflows/revision-bump.yml index 9ff8cbb8..5295a5c9 100644 --- a/.github/workflows/revision-bump.yml +++ b/.github/workflows/revision-bump.yml @@ -4,10 +4,10 @@ on: push: branches: - main - paths: - - "misc/**" paths-ignore: - "misc/build.func" + paths: + - "misc/**" workflow_dispatch: jobs: From 261a1cec7926d9e6eaf0acf16a8826b27fec225b Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:15:21 +0200 Subject: [PATCH 13/53] Update tools.func --- misc/tools.func | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/tools.func b/misc/tools.func index 6f574c5d..2122bf7f 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -232,7 +232,7 @@ function setup_postgresql() { # # Variables: # MARIADB_VERSION - MariaDB version to install (e.g. 10.11, latest) (default: latest) -# ------------------------------------------------------------------------------ te +# ------------------------------------------------------------------------------ tes setup_mariadb() { local MARIADB_VERSION="${MARIADB_VERSION:-latest}" From f4edff3d95ef499e8d9656b8a3191969a408c7e8 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:16:31 +0200 Subject: [PATCH 14/53] Remove paths-ignore for revision bump workflow --- .github/workflows/revision-bump.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/revision-bump.yml b/.github/workflows/revision-bump.yml index 5295a5c9..60f8135a 100644 --- a/.github/workflows/revision-bump.yml +++ b/.github/workflows/revision-bump.yml @@ -4,8 +4,6 @@ on: push: branches: - main - paths-ignore: - - "misc/build.func" paths: - "misc/**" workflow_dispatch: From f1f2d8895d11d9d1a8dc8e1fd85a69cec63ba58e Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:16:41 +0200 Subject: [PATCH 15/53] Update tools.func --- misc/tools.func | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/tools.func b/misc/tools.func index 6f574c5d..2122bf7f 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -232,7 +232,7 @@ function setup_postgresql() { # # Variables: # MARIADB_VERSION - MariaDB version to install (e.g. 10.11, latest) (default: latest) -# ------------------------------------------------------------------------------ te +# ------------------------------------------------------------------------------ tes setup_mariadb() { local MARIADB_VERSION="${MARIADB_VERSION:-latest}" From 8b45fe992b0f1e2dd58cbe7a27fd7c0d5b4dd26c Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:17:50 +0200 Subject: [PATCH 16/53] Remove paths-ignore from revision-bump workflow --- .github/workflows/revision-bump.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/revision-bump.yml b/.github/workflows/revision-bump.yml index 5295a5c9..60f8135a 100644 --- a/.github/workflows/revision-bump.yml +++ b/.github/workflows/revision-bump.yml @@ -4,8 +4,6 @@ on: push: branches: - main - paths-ignore: - - "misc/build.func" paths: - "misc/**" workflow_dispatch: From 435afc65ccae276509cb1d2dc1cda5176cd26c94 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:18:33 +0200 Subject: [PATCH 17/53] testi --- misc/tools.func | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/tools.func b/misc/tools.func index 2122bf7f..8bbbac5d 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -232,7 +232,7 @@ function setup_postgresql() { # # Variables: # MARIADB_VERSION - MariaDB version to install (e.g. 10.11, latest) (default: latest) -# ------------------------------------------------------------------------------ tes +# ------------------------------------------------------------------------------ testi setup_mariadb() { local MARIADB_VERSION="${MARIADB_VERSION:-latest}" From ebd5630cfa7bb2bf83d288ac8c7779fe3d71cb1f Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:19:46 +0200 Subject: [PATCH 18/53] Update repository condition for revision bump workflow --- .github/workflows/revision-bump.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/revision-bump.yml b/.github/workflows/revision-bump.yml index 60f8135a..65242968 100644 --- a/.github/workflows/revision-bump.yml +++ b/.github/workflows/revision-bump.yml @@ -10,7 +10,7 @@ on: jobs: bump-revision: - if: github.repository == 'community-scripts/ProxmoxVE' + if: github.repository == 'community-scripts/ProxmoxVED' runs-on: ubuntu-latest permissions: From c618b893da3bd3fda51daaafe817f9989bc2533d Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:20:21 +0200 Subject: [PATCH 19/53] Update tools.func --- misc/tools.func | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/tools.func b/misc/tools.func index 8bbbac5d..381fe85a 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -232,7 +232,7 @@ function setup_postgresql() { # # Variables: # MARIADB_VERSION - MariaDB version to install (e.g. 10.11, latest) (default: latest) -# ------------------------------------------------------------------------------ testi +# ------------------------------------------------------------------------------ test setup_mariadb() { local MARIADB_VERSION="${MARIADB_VERSION:-latest}" From e2c8e71c5535fb15c6c6fed06b46c3682c2ae3f1 Mon Sep 17 00:00:00 2001 From: Bas van den Berg <74251551+bvdberg01@users.noreply.github.com> Date: Thu, 18 Sep 2025 19:24:52 +0200 Subject: [PATCH 20/53] Update source URL for build function --- ct/warracker.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/warracker.sh b/ct/warracker.sh index 01ca7eea..d4707ac7 100644 --- a/ct/warracker.sh +++ b/ct/warracker.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/bvdberg01/ProxmoxVED/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: BvdBerg01 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE From afecb023ccfe6308ee74c538a6980f2c929c13ef Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 08:23:41 +0200 Subject: [PATCH 21/53] Update build.func --- misc/build.func | 148 ++++++++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/misc/build.func b/misc/build.func index 77b452d7..c9c5abc8 100644 --- a/misc/build.func +++ b/misc/build.func @@ -2,7 +2,7 @@ # Copyright (c) 2021-2025 community-scripts ORG # Author: tteck (tteckster) | MickLesk | michelroegl-brunner # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Revision: +# Revision: # ------------------------------------------------------------------------------ # variables() @@ -33,93 +33,93 @@ variables() { # - Local cache: /usr/local/community-scripts/core # ----------------------------------------------------------------------------- -FUNC_DIR="/usr/local/community-scripts/core" -mkdir -p "$FUNC_DIR" +# FUNC_DIR="/usr/local/community-scripts/core" +# mkdir -p "$FUNC_DIR" -BUILD_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func" -BUILD_REV="$FUNC_DIR/build.rev" +# BUILD_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func" +# BUILD_REV="$FUNC_DIR/build.rev" -# --- Step 1: fetch build.func content once, compute hash --- -build_content="$(curl -fsSL "$BUILD_URL")" || { - echo "❌ Failed to fetch build.func" - exit 1 -} +# # --- Step 1: fetch build.func content once, compute hash --- +# build_content="$(curl -fsSL "$BUILD_URL")" || { +# echo "❌ Failed to fetch build.func" +# exit 1 +# } -newhash=$(printf "%s" "$build_content" | sha256sum | awk '{print $1}') -oldhash=$(cat "$BUILD_REV" 2>/dev/null || echo "") +# newhash=$(printf "%s" "$build_content" | sha256sum | awk '{print $1}') +# oldhash=$(cat "$BUILD_REV" 2>/dev/null || echo "") -# --- Step 2: if build.func changed, offer update for core files --- -if [ "$newhash" != "$oldhash" ]; then - echo "⚠️ build.func changed!" +# # --- Step 2: if build.func changed, offer update for core files --- +# if [ "$newhash" != "$oldhash" ]; then +# echo "⚠️ build.func changed!" - while true; do - read -rp "Refresh local core files? [y/N/diff]: " ans - case "$ans" in - [Yy]*) - echo "$newhash" >"$BUILD_REV" +# while true; do +# read -rp "Refresh local core files? [y/N/diff]: " ans +# case "$ans" in +# [Yy]*) +# echo "$newhash" >"$BUILD_REV" - update_func_file() { - local file="$1" - local url="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/$file" - local local_path="$FUNC_DIR/$file" +# update_func_file() { +# local file="$1" +# local url="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/$file" +# local local_path="$FUNC_DIR/$file" - echo "⬇️ Downloading $file ..." - curl -fsSL "$url" -o "$local_path" || { - echo "❌ Failed to fetch $file" - exit 1 - } - echo "✔️ Updated $file" - } +# echo "⬇️ Downloading $file ..." +# curl -fsSL "$url" -o "$local_path" || { +# echo "❌ Failed to fetch $file" +# exit 1 +# } +# echo "✔️ Updated $file" +# } - update_func_file core.func - update_func_file error_handler.func - update_func_file tools.func - break - ;; - [Dd]*) - for file in core.func error_handler.func tools.func; do - local_path="$FUNC_DIR/$file" - url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/$file" - remote_tmp="$(mktemp)" +# update_func_file core.func +# update_func_file error_handler.func +# update_func_file tools.func +# break +# ;; +# [Dd]*) +# for file in core.func error_handler.func tools.func; do +# local_path="$FUNC_DIR/$file" +# url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/$file" +# remote_tmp="$(mktemp)" - curl -fsSL "$url" -o "$remote_tmp" || continue +# curl -fsSL "$url" -o "$remote_tmp" || continue - if [ -f "$local_path" ]; then - echo "🔍 Diff for $file:" - diff -u "$local_path" "$remote_tmp" || echo "(no differences)" - else - echo "📦 New file $file will be installed" - fi +# if [ -f "$local_path" ]; then +# echo "🔍 Diff for $file:" +# diff -u "$local_path" "$remote_tmp" || echo "(no differences)" +# else +# echo "📦 New file $file will be installed" +# fi - rm -f "$remote_tmp" - done - ;; - *) - echo "❌ Skipped updating local core files" - break - ;; - esac - done -else - echo "✔️ build.func unchanged → using existing local core files" -fi +# rm -f "$remote_tmp" +# done +# ;; +# *) +# echo "❌ Skipped updating local core files" +# break +# ;; +# esac +# done +# else +# echo "✔️ build.func unchanged → using existing local core files" +# fi -# --- Step 3: always source local versions of the core files --- -source "$FUNC_DIR/core.func" -source "$FUNC_DIR/error_handler.func" -source "$FUNC_DIR/tools.func" +# # --- Step 3: always source local versions of the core files --- +# source "$FUNC_DIR/core.func" +# source "$FUNC_DIR/error_handler.func" +# source "$FUNC_DIR/tools.func" -# --- Step 4: finally, source build.func directly from memory --- -# (no tmp file needed) -source <(printf "%s" "$build_content") +# # --- Step 4: finally, source build.func directly from memory --- +# # (no tmp file needed) +# source <(printf "%s" "$build_content") -# ------------------------------------------------------------------------------ -# Load core + error handler functions from community-scripts repo -# -# - Prefer curl if available, fallback to wget -# - Load: core.func, error_handler.func, api.func -# - Initialize error traps after loading -# ------------------------------------------------------------------------------ +# # ------------------------------------------------------------------------------ +# # Load core + error handler functions from community-scripts repo +# # +# # - Prefer curl if available, fallback to wget +# # - Load: core.func, error_handler.func, api.func +# # - Initialize error traps after loading +# # ------------------------------------------------------------------------------ source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/api.func) From 271665dfefdeb35a3b25b65d1776288168de1323 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 08:26:22 +0200 Subject: [PATCH 22/53] Update build.func --- misc/build.func | 149 ++++++++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 75 deletions(-) diff --git a/misc/build.func b/misc/build.func index c9c5abc8..3e58389b 100644 --- a/misc/build.func +++ b/misc/build.func @@ -2,7 +2,7 @@ # Copyright (c) 2021-2025 community-scripts ORG # Author: tteck (tteckster) | MickLesk | michelroegl-brunner # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE -# Revision: +# Revision: 1 # ------------------------------------------------------------------------------ # variables() @@ -25,7 +25,6 @@ variables() { #CT_TYPE=${var_unprivileged:-$CT_TYPE} } -#!/usr/bin/env bash # ----------------------------------------------------------------------------- # Community-Scripts bootstrap loader # - Always sources build.func from remote @@ -33,93 +32,93 @@ variables() { # - Local cache: /usr/local/community-scripts/core # ----------------------------------------------------------------------------- -# FUNC_DIR="/usr/local/community-scripts/core" -# mkdir -p "$FUNC_DIR" +FUNC_DIR="/usr/local/community-scripts/core" +mkdir -p "$FUNC_DIR" -# BUILD_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func" -# BUILD_REV="$FUNC_DIR/build.rev" +BUILD_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func" +BUILD_REV="$FUNC_DIR/build.rev" -# # --- Step 1: fetch build.func content once, compute hash --- -# build_content="$(curl -fsSL "$BUILD_URL")" || { -# echo "❌ Failed to fetch build.func" -# exit 1 -# } +# --- Step 1: fetch build.func content once, compute hash --- +build_content="$(curl -fsSL "$BUILD_URL")" || { + echo "❌ Failed to fetch build.func" + exit 1 +} -# newhash=$(printf "%s" "$build_content" | sha256sum | awk '{print $1}') -# oldhash=$(cat "$BUILD_REV" 2>/dev/null || echo "") +newhash=$(printf "%s" "$build_content" | sha256sum | awk '{print $1}') +oldhash=$(cat "$BUILD_REV" 2>/dev/null || echo "") -# # --- Step 2: if build.func changed, offer update for core files --- -# if [ "$newhash" != "$oldhash" ]; then -# echo "⚠️ build.func changed!" +# --- Step 2: if build.func changed, offer update for core files --- +if [ "$newhash" != "$oldhash" ]; then + echo "⚠️ build.func changed!" -# while true; do -# read -rp "Refresh local core files? [y/N/diff]: " ans -# case "$ans" in -# [Yy]*) -# echo "$newhash" >"$BUILD_REV" + while true; do + read -rp "Refresh local core files? [y/N/diff]: " ans + case "$ans" in + [Yy]*) + echo "$newhash" >"$BUILD_REV" -# update_func_file() { -# local file="$1" -# local url="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/$file" -# local local_path="$FUNC_DIR/$file" + update_func_file() { + local file="$1" + local url="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/$file" + local local_path="$FUNC_DIR/$file" -# echo "⬇️ Downloading $file ..." -# curl -fsSL "$url" -o "$local_path" || { -# echo "❌ Failed to fetch $file" -# exit 1 -# } -# echo "✔️ Updated $file" -# } + echo "⬇️ Downloading $file ..." + curl -fsSL "$url" -o "$local_path" || { + echo "❌ Failed to fetch $file" + exit 1 + } + echo "✔️ Updated $file" + } -# update_func_file core.func -# update_func_file error_handler.func -# update_func_file tools.func -# break -# ;; -# [Dd]*) -# for file in core.func error_handler.func tools.func; do -# local_path="$FUNC_DIR/$file" -# url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/$file" -# remote_tmp="$(mktemp)" + update_func_file core.func + update_func_file error_handler.func + update_func_file tools.func + break + ;; + [Dd]*) + for file in core.func error_handler.func tools.func; do + local_path="$FUNC_DIR/$file" + url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/$file" + remote_tmp="$(mktemp)" -# curl -fsSL "$url" -o "$remote_tmp" || continue + curl -fsSL "$url" -o "$remote_tmp" || continue -# if [ -f "$local_path" ]; then -# echo "🔍 Diff for $file:" -# diff -u "$local_path" "$remote_tmp" || echo "(no differences)" -# else -# echo "📦 New file $file will be installed" -# fi + if [ -f "$local_path" ]; then + echo "🔍 Diff for $file:" + diff -u "$local_path" "$remote_tmp" || echo "(no differences)" + else + echo "📦 New file $file will be installed" + fi -# rm -f "$remote_tmp" -# done -# ;; -# *) -# echo "❌ Skipped updating local core files" -# break -# ;; -# esac -# done -# else -# echo "✔️ build.func unchanged → using existing local core files" -# fi + rm -f "$remote_tmp" + done + ;; + *) + echo "❌ Skipped updating local core files" + break + ;; + esac + done +else + echo "✔️ build.func unchanged → using existing local core files" +fi -# # --- Step 3: always source local versions of the core files --- -# source "$FUNC_DIR/core.func" -# source "$FUNC_DIR/error_handler.func" -# source "$FUNC_DIR/tools.func" +# --- Step 3: always source local versions of the core files --- +source "$FUNC_DIR/core.func" +source "$FUNC_DIR/error_handler.func" +source "$FUNC_DIR/tools.func" -# # --- Step 4: finally, source build.func directly from memory --- -# # (no tmp file needed) -# source <(printf "%s" "$build_content") +# --- Step 4: finally, source build.func directly from memory --- +# (no tmp file needed) +source <(printf "%s" "$build_content") -# # ------------------------------------------------------------------------------ -# # Load core + error handler functions from community-scripts repo -# # -# # - Prefer curl if available, fallback to wget -# # - Load: core.func, error_handler.func, api.func -# # - Initialize error traps after loading -# # ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ +# Load core + error handler functions from community-scripts repo +# +# - Prefer curl if available, fallback to wget +# - Load: core.func, error_handler.func, api.func +# - Initialize error traps after loading +# ------------------------------------------------------------------------------ source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/api.func) From 864e63c04d70c2e6452f3f575fdbf7e5e0ed0869 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 08:27:08 +0200 Subject: [PATCH 23/53] Update build.func --- misc/build.func | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/misc/build.func b/misc/build.func index 3e58389b..46c9203c 100644 --- a/misc/build.func +++ b/misc/build.func @@ -37,6 +37,7 @@ mkdir -p "$FUNC_DIR" BUILD_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func" BUILD_REV="$FUNC_DIR/build.rev" +DEVMODE="${DEVMODE:-no}" # --- Step 1: fetch build.func content once, compute hash --- build_content="$(curl -fsSL "$BUILD_URL")" || { @@ -100,7 +101,9 @@ if [ "$newhash" != "$oldhash" ]; then esac done else - echo "✔️ build.func unchanged → using existing local core files" + if [ "$DEVMODE" != "yes" ]; then + echo "✔️ build.func unchanged → using existing local core files" + fi fi # --- Step 3: always source local versions of the core files --- From 17cb74a8f0c39dd775947b6b1b1a7913ce0ed0fa Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 08:28:10 +0200 Subject: [PATCH 24/53] Update build.func --- misc/build.func | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/misc/build.func b/misc/build.func index 46c9203c..1802ab0d 100644 --- a/misc/build.func +++ b/misc/build.func @@ -106,6 +106,11 @@ else fi fi +if [ -n "${_COMMUNITY_SCRIPTS_LOADER:-}" ]; then + return 0 2>/dev/null || exit 0 +fi +_COMMUNITY_SCRIPTS_LOADER=1 + # --- Step 3: always source local versions of the core files --- source "$FUNC_DIR/core.func" source "$FUNC_DIR/error_handler.func" From fe3de0715786c7cb991b72be3a34aeb29a7de083 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 08:41:24 +0200 Subject: [PATCH 25/53] Add clean install option to fetch_and_deploy_gh_release Introduces a CLEAN_INSTALL environment variable to optionally remove all files in the target directory before extracting a GitHub release. This ensures a clean deployment when required. --- misc/tools.func | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/misc/tools.func b/misc/tools.func index 381fe85a..88950d69 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -858,6 +858,9 @@ function fetch_and_deploy_gh_release() { msg_info "Fetching GitHub release: $app ($version)" + local clean_install=false + [[ -n "${CLEAN_INSTALL:-}" && "$CLEAN_INSTALL" == "1" ]] && clean_install=true + ### Tarball Mode ### if [[ "$mode" == "tarball" || "$mode" == "source" ]]; then url=$(echo "$json" | jq -r '.tarball_url // empty') @@ -871,6 +874,10 @@ function fetch_and_deploy_gh_release() { } mkdir -p "$target" + if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then + rm -rf "${target:?}/"* + fi + tar -xzf "$tmpdir/$filename" -C "$tmpdir" local unpack_dir unpack_dir=$(find "$tmpdir" -mindepth 1 -maxdepth 1 -type d | head -n1) @@ -940,7 +947,7 @@ function fetch_and_deploy_gh_release() { } } - ### Prebuild Mode ### + ### Prebuild Mode ### elif [[ "$mode" == "prebuild" ]]; then local pattern="${6%\"}" pattern="${pattern#\"}" @@ -977,6 +984,9 @@ function fetch_and_deploy_gh_release() { local unpack_tmp unpack_tmp=$(mktemp -d) mkdir -p "$target" + if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then + rm -rf "${target:?}/"* + fi if [[ "$filename" == *.zip ]]; then if ! command -v unzip &>/dev/null; then From b840a8aa325250f3c3e4208eec74c294fff582cc Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 08:53:49 +0200 Subject: [PATCH 26/53] Replace init_error_traps with catch_errors in scripts Replaces all occurrences of the 'init_error_traps' function with 'catch_errors' across container and install scripts for consistency in error handling. Also adjusts indentation and formatting in some scripts for improved readability. --- ct/alpine-caddy.sh | 30 +-- ct/alpine.sh | 2 +- ct/debian.sh | 2 +- ct/deferred/alpine-homarr.sh | 2 +- ct/deferred/ampache.sh | 2 +- ct/deferred/ghostfolio.sh | 2 +- ct/deferred/hoodik.sh | 2 +- ct/deferred/jumpserver.sh | 2 +- ct/deferred/kasm.sh | 2 +- ct/deferred/koel.sh | 2 +- ct/deferred/librespeed.sh | 2 +- ct/deferred/netbootxyz.sh | 2 +- ct/deferred/nginxproxymanager.sh | 2 +- ct/deferred/ocis.sh | 2 +- ct/deferred/openwebui.sh | 2 +- ct/deferred/pixelfed.sh | 2 +- ct/deferred/polaris.sh | 2 +- ct/deferred/roundcubemail.sh | 2 +- ct/deferred/squirrelserversmanager.sh | 2 +- ct/deferred/vikunja.sh | 2 +- ct/dispatcharr.sh | 2 +- ct/docspell.sh | 2 +- ct/ente.sh | 2 +- ct/freepbx.sh | 2 +- ct/frigate.sh | 2 +- ct/garmin-grafana.sh | 2 +- ct/ghostfolio.sh | 2 +- ct/globaleaks.sh | 24 +- ct/hanko.sh | 2 +- ct/joplin-server.sh | 2 +- ct/kanba.sh | 2 +- ct/leantime.sh | 2 +- ct/librenms.sh | 2 +- ct/livebook.sh | 2 +- ct/manyfold.sh | 2 +- ct/maxun.sh | 2 +- ct/notesnook.sh | 2 +- ct/npmplus.sh | 2 +- ct/opencloud.sh | 2 +- ct/postiz.sh | 2 +- ct/proxmox-datacenter-manager.sh | 2 +- ct/romm.sh | 2 +- ct/rybbit.sh | 2 +- ct/scraparr.sh | 2 +- ct/signoz.sh | 2 +- ct/tunarr.sh | 2 +- ct/ubuntu.sh | 2 +- ct/viseron.sh | 2 +- ct/wallabag.sh | 2 +- ct/warracker.sh | 2 +- install/alpine-caddy-install.sh | 24 +- install/alpine-garage-install.sh | 2 +- install/alpine-install.sh | 2 +- install/debian-install.sh | 2 +- install/deferred/ampache-install.sh | 2 +- install/deferred/freepbx-install_backup.sh | 2 +- install/deferred/funkwhale-install.sh | 2 +- install/deferred/ghostfolio-install.sh | 2 +- install/deferred/hoodik-install.sh | 2 +- install/deferred/jumpserver-install.sh | 2 +- install/deferred/kasm-install.sh | 2 +- install/deferred/koel-install.sh | 2 +- install/deferred/netbootxyz-install.sh | 2 +- install/deferred/nginxproxymanager-install.sh | 2 +- install/deferred/nimbus-install.sh | 2 +- install/deferred/ocis-install.sh | 2 +- install/deferred/openwebui-install.sh | 2 +- install/deferred/pixelfed-install.sh | 2 +- install/deferred/polaris-install.sh | 2 +- install/deferred/roundcubemail-install.sh | 2 +- .../squirrelserversmanager-install.sh | 2 +- install/deferred/timescaledb-install.sh | 2 +- install/deferred/vikunja-install.sh | 2 +- install/dispatcharr-install.sh | 2 +- install/docspell-install.sh | 2 +- install/ente-install.sh | 2 +- install/freepbx-install.sh | 2 +- install/frigate-install.sh | 2 +- install/garmin-grafana-install.sh | 2 +- install/ghostfolio-install.sh | 2 +- install/globaleaks-install.sh | 2 +- install/hanko-install.sh | 2 +- install/joplin-server-install.sh | 2 +- install/kanba-install.sh | 2 +- install/leantime-install.sh | 2 +- install/librenms-install.sh | 2 +- install/livebook-install.sh | 2 +- install/manyfold-install.sh | 2 +- install/maxun-install.sh | 2 +- install/notesnook-install.sh | 2 +- install/npmplus-install.sh | 2 +- install/opencloud-install.sh | 2 +- install/postiz-install.sh | 2 +- install/proxmox-datacenter-manager-install.sh | 2 +- install/romm-install.sh | 2 +- install/rybbit-install.sh | 2 +- install/scraparr-install.sh | 2 +- install/signoz-install.sh | 2 +- install/tunarr-install.sh | 24 +- install/ubuntu-install.sh | 2 +- install/viseron-install.sh | 2 +- install/wallabag-install.sh | 2 +- install/warracker-install.sh | 33 ++- misc/alpine-install.func | 204 +++++++------- misc/build.func | 4 +- misc/error_handler.func | 208 +++++++-------- misc/install.func | 248 +++++++++--------- 107 files changed, 497 insertions(+), 498 deletions(-) diff --git a/ct/alpine-caddy.sh b/ct/alpine-caddy.sh index 75cfe636..89fe099d 100644 --- a/ct/alpine-caddy.sh +++ b/ct/alpine-caddy.sh @@ -17,24 +17,24 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - 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" + header_info + check_container_storage + check_container_resources + 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" - exit + msg_info "Restarting Caddy" + rc-service caddy restart + msg_ok "Restarted Caddy" + exit } start diff --git a/ct/alpine.sh b/ct/alpine.sh index 4940d6fc..ea946a60 100644 --- a/ct/alpine.sh +++ b/ct/alpine.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/debian.sh b/ct/debian.sh index dad59683..a7ed93b3 100644 --- a/ct/debian.sh +++ b/ct/debian.sh @@ -19,7 +19,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/alpine-homarr.sh b/ct/deferred/alpine-homarr.sh index def7cca2..c78398d6 100644 --- a/ct/deferred/alpine-homarr.sh +++ b/ct/deferred/alpine-homarr.sh @@ -18,7 +18,7 @@ header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/ampache.sh b/ct/deferred/ampache.sh index ccf300e2..ada18f09 100644 --- a/ct/deferred/ampache.sh +++ b/ct/deferred/ampache.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/ghostfolio.sh b/ct/deferred/ghostfolio.sh index 36039092..56002d40 100644 --- a/ct/deferred/ghostfolio.sh +++ b/ct/deferred/ghostfolio.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/hoodik.sh b/ct/deferred/hoodik.sh index 1fee14b1..0e7597b1 100644 --- a/ct/deferred/hoodik.sh +++ b/ct/deferred/hoodik.sh @@ -18,7 +18,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/jumpserver.sh b/ct/deferred/jumpserver.sh index 1658a368..f512024c 100644 --- a/ct/deferred/jumpserver.sh +++ b/ct/deferred/jumpserver.sh @@ -17,7 +17,7 @@ var_unprivileged="1" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/kasm.sh b/ct/deferred/kasm.sh index ba78e8d5..565c71fb 100644 --- a/ct/deferred/kasm.sh +++ b/ct/deferred/kasm.sh @@ -19,7 +19,7 @@ var_tun="${var_tun:-yes}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/koel.sh b/ct/deferred/koel.sh index b0c12d86..a4b6ea7e 100644 --- a/ct/deferred/koel.sh +++ b/ct/deferred/koel.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/librespeed.sh b/ct/deferred/librespeed.sh index 4861a568..95650828 100644 --- a/ct/deferred/librespeed.sh +++ b/ct/deferred/librespeed.sh @@ -17,7 +17,7 @@ var_unprivileged="1" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/netbootxyz.sh b/ct/deferred/netbootxyz.sh index 60832ff4..201073af 100644 --- a/ct/deferred/netbootxyz.sh +++ b/ct/deferred/netbootxyz.sh @@ -26,7 +26,7 @@ var_os="${var_os:-debian}" var_version="${var_version:-12}" variables color -init_error_traps +catch_errors function default_settings() { CT_TYPE="1" diff --git a/ct/deferred/nginxproxymanager.sh b/ct/deferred/nginxproxymanager.sh index 41f1aecd..b1ff024d 100644 --- a/ct/deferred/nginxproxymanager.sh +++ b/ct/deferred/nginxproxymanager.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/ocis.sh b/ct/deferred/ocis.sh index 44f5f1ae..167b4593 100644 --- a/ct/deferred/ocis.sh +++ b/ct/deferred/ocis.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/openwebui.sh b/ct/deferred/openwebui.sh index 47a9e74a..85341bd9 100644 --- a/ct/deferred/openwebui.sh +++ b/ct/deferred/openwebui.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/pixelfed.sh b/ct/deferred/pixelfed.sh index 44ac53b3..8ddab519 100644 --- a/ct/deferred/pixelfed.sh +++ b/ct/deferred/pixelfed.sh @@ -16,7 +16,7 @@ var_version="${var_version:-12}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/polaris.sh b/ct/deferred/polaris.sh index c43b57de..c290d770 100644 --- a/ct/deferred/polaris.sh +++ b/ct/deferred/polaris.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/roundcubemail.sh b/ct/deferred/roundcubemail.sh index 6f65e527..75d0e3bc 100644 --- a/ct/deferred/roundcubemail.sh +++ b/ct/deferred/roundcubemail.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/squirrelserversmanager.sh b/ct/deferred/squirrelserversmanager.sh index 751a6026..4403ab5f 100644 --- a/ct/deferred/squirrelserversmanager.sh +++ b/ct/deferred/squirrelserversmanager.sh @@ -16,7 +16,7 @@ var_unprivileged="${var_unprivileged:-1}" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/deferred/vikunja.sh b/ct/deferred/vikunja.sh index 687d4700..fd248351 100644 --- a/ct/deferred/vikunja.sh +++ b/ct/deferred/vikunja.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/dispatcharr.sh b/ct/dispatcharr.sh index 979cd3d0..e2a2971e 100644 --- a/ct/dispatcharr.sh +++ b/ct/dispatcharr.sh @@ -18,7 +18,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/docspell.sh b/ct/docspell.sh index a9667cea..93eb6806 100644 --- a/ct/docspell.sh +++ b/ct/docspell.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/ente.sh b/ct/ente.sh index 7f8b3132..5733886c 100644 --- a/ct/ente.sh +++ b/ct/ente.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/freepbx.sh b/ct/freepbx.sh index 96f8dd02..0552674b 100644 --- a/ct/freepbx.sh +++ b/ct/freepbx.sh @@ -18,7 +18,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/frigate.sh b/ct/frigate.sh index 2cc5d113..479c6b98 100644 --- a/ct/frigate.sh +++ b/ct/frigate.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-0}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/garmin-grafana.sh b/ct/garmin-grafana.sh index f34fec36..f0742dd8 100644 --- a/ct/garmin-grafana.sh +++ b/ct/garmin-grafana.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors # this only updates garmin-grafana, not influxdb or grafana, which are upgraded with apt function update_script() { diff --git a/ct/ghostfolio.sh b/ct/ghostfolio.sh index d74aead6..5acd7f6a 100644 --- a/ct/ghostfolio.sh +++ b/ct/ghostfolio.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/globaleaks.sh b/ct/globaleaks.sh index 3e1abc89..03bc2f08 100644 --- a/ct/globaleaks.sh +++ b/ct/globaleaks.sh @@ -16,21 +16,21 @@ var_version="${var_version:-13}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -f /usr/sbin/globaleaks ]]; then - msg_error "No ${APP} installation found!" - exit - fi + header_info + check_container_storage + check_container_resources + if [[ ! -f /usr/sbin/globaleaks ]]; then + msg_error "No ${APP} installation found!" + exit + fi - msg_info "Updating $APP LXC" - $STD apt update - $STD apt -y upgrade - msg_ok "Updated $APP LXC" + msg_info "Updating $APP LXC" + $STD apt update + $STD apt -y upgrade + msg_ok "Updated $APP LXC" } start diff --git a/ct/hanko.sh b/ct/hanko.sh index 53e295d2..de3079c2 100644 --- a/ct/hanko.sh +++ b/ct/hanko.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/joplin-server.sh b/ct/joplin-server.sh index 02983e10..9f4896fc 100644 --- a/ct/joplin-server.sh +++ b/ct/joplin-server.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/kanba.sh b/ct/kanba.sh index 04f85ace..270f5e00 100644 --- a/ct/kanba.sh +++ b/ct/kanba.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/leantime.sh b/ct/leantime.sh index e6fe9864..13b96061 100644 --- a/ct/leantime.sh +++ b/ct/leantime.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/librenms.sh b/ct/librenms.sh index 3acd3812..aaa71a1a 100644 --- a/ct/librenms.sh +++ b/ct/librenms.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/livebook.sh b/ct/livebook.sh index 7c8f3276..5f801ac7 100755 --- a/ct/livebook.sh +++ b/ct/livebook.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/manyfold.sh b/ct/manyfold.sh index d5b46484..2d782d55 100644 --- a/ct/manyfold.sh +++ b/ct/manyfold.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/maxun.sh b/ct/maxun.sh index 78a865fa..a5561dc5 100644 --- a/ct/maxun.sh +++ b/ct/maxun.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/notesnook.sh b/ct/notesnook.sh index ddb87f82..3d1fbb3c 100644 --- a/ct/notesnook.sh +++ b/ct/notesnook.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/npmplus.sh b/ct/npmplus.sh index e6bb0b98..c3b1755a 100644 --- a/ct/npmplus.sh +++ b/ct/npmplus.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE MODE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 14 60 2 \ diff --git a/ct/opencloud.sh b/ct/opencloud.sh index e97c3af3..2c428f93 100644 --- a/ct/opencloud.sh +++ b/ct/opencloud.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/postiz.sh b/ct/postiz.sh index 32ec0ac3..e5355367 100644 --- a/ct/postiz.sh +++ b/ct/postiz.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/proxmox-datacenter-manager.sh b/ct/proxmox-datacenter-manager.sh index 57796383..dfcb1120 100644 --- a/ct/proxmox-datacenter-manager.sh +++ b/ct/proxmox-datacenter-manager.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/romm.sh b/ct/romm.sh index 771aed1d..129da9a3 100644 --- a/ct/romm.sh +++ b/ct/romm.sh @@ -18,7 +18,7 @@ var_fuse="${var_fuse:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/rybbit.sh b/ct/rybbit.sh index 6e3caddd..e523bde2 100644 --- a/ct/rybbit.sh +++ b/ct/rybbit.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/scraparr.sh b/ct/scraparr.sh index bca478df..efe595dd 100644 --- a/ct/scraparr.sh +++ b/ct/scraparr.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/signoz.sh b/ct/signoz.sh index 3e7d5bcc..6efeec71 100644 --- a/ct/signoz.sh +++ b/ct/signoz.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/tunarr.sh b/ct/tunarr.sh index 9af3bebc..f8d69769 100644 --- a/ct/tunarr.sh +++ b/ct/tunarr.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info check_container_storage diff --git a/ct/ubuntu.sh b/ct/ubuntu.sh index 5bae645b..f208d7d0 100644 --- a/ct/ubuntu.sh +++ b/ct/ubuntu.sh @@ -19,7 +19,7 @@ var_unprivileged="${var_unprivileged:-0}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/viseron.sh b/ct/viseron.sh index 6534ff2e..f65e15de 100644 --- a/ct/viseron.sh +++ b/ct/viseron.sh @@ -14,7 +14,7 @@ header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/wallabag.sh b/ct/wallabag.sh index 910948ff..9325189a 100644 --- a/ct/wallabag.sh +++ b/ct/wallabag.sh @@ -22,7 +22,7 @@ base_settings # Core variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/ct/warracker.sh b/ct/warracker.sh index d4707ac7..8e090b84 100644 --- a/ct/warracker.sh +++ b/ct/warracker.sh @@ -17,7 +17,7 @@ var_unprivileged="${var_unprivileged:-1}" header_info "$APP" variables color -init_error_traps +catch_errors function update_script() { header_info diff --git a/install/alpine-caddy-install.sh b/install/alpine-caddy-install.sh index 882e2e61..43380844 100644 --- a/install/alpine-caddy-install.sh +++ b/install/alpine-caddy-install.sh @@ -8,14 +8,14 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +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 +cat </etc/caddy/Caddyfile :80 { # Set this path to your site's directory. root * /var/www/html @@ -31,7 +31,7 @@ cat</etc/caddy/Caddyfile } EOF mkdir -p /var/www/html -cat</var/www/html/index.html +cat </var/www/html/index.html @@ -47,15 +47,15 @@ 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" + 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" diff --git a/install/alpine-garage-install.sh b/install/alpine-garage-install.sh index c9ca62e5..5138656a 100644 --- a/install/alpine-garage-install.sh +++ b/install/alpine-garage-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/alpine-install.sh b/install/alpine-install.sh index 61acecea..4922f164 100644 --- a/install/alpine-install.sh +++ b/install/alpine-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/debian-install.sh b/install/debian-install.sh index b4e0bf32..e6259184 100644 --- a/install/debian-install.sh +++ b/install/debian-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/ampache-install.sh b/install/deferred/ampache-install.sh index 868c7f9a..35dfe143 100644 --- a/install/deferred/ampache-install.sh +++ b/install/deferred/ampache-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/freepbx-install_backup.sh b/install/deferred/freepbx-install_backup.sh index 5b42cc0e..a5d41953 100644 --- a/install/deferred/freepbx-install_backup.sh +++ b/install/deferred/freepbx-install_backup.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/funkwhale-install.sh b/install/deferred/funkwhale-install.sh index baf8f8e8..573abe1e 100644 --- a/install/deferred/funkwhale-install.sh +++ b/install/deferred/funkwhale-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/ghostfolio-install.sh b/install/deferred/ghostfolio-install.sh index 91e27db2..9a5d30e4 100644 --- a/install/deferred/ghostfolio-install.sh +++ b/install/deferred/ghostfolio-install.sh @@ -9,7 +9,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/hoodik-install.sh b/install/deferred/hoodik-install.sh index 51ed398f..d6505fd4 100644 --- a/install/deferred/hoodik-install.sh +++ b/install/deferred/hoodik-install.sh @@ -9,7 +9,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/jumpserver-install.sh b/install/deferred/jumpserver-install.sh index 23203327..4ccfb09e 100644 --- a/install/deferred/jumpserver-install.sh +++ b/install/deferred/jumpserver-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/kasm-install.sh b/install/deferred/kasm-install.sh index e55cd17c..236d15ba 100644 --- a/install/deferred/kasm-install.sh +++ b/install/deferred/kasm-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/koel-install.sh b/install/deferred/koel-install.sh index 4f033651..38c14d5f 100644 --- a/install/deferred/koel-install.sh +++ b/install/deferred/koel-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/netbootxyz-install.sh b/install/deferred/netbootxyz-install.sh index e3877293..1a7f71f7 100644 --- a/install/deferred/netbootxyz-install.sh +++ b/install/deferred/netbootxyz-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/nginxproxymanager-install.sh b/install/deferred/nginxproxymanager-install.sh index 3fd21279..34db0d6a 100644 --- a/install/deferred/nginxproxymanager-install.sh +++ b/install/deferred/nginxproxymanager-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/nimbus-install.sh b/install/deferred/nimbus-install.sh index 5940020c..c4943048 100644 --- a/install/deferred/nimbus-install.sh +++ b/install/deferred/nimbus-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/ocis-install.sh b/install/deferred/ocis-install.sh index 98be246e..987b0397 100644 --- a/install/deferred/ocis-install.sh +++ b/install/deferred/ocis-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/openwebui-install.sh b/install/deferred/openwebui-install.sh index 9eb6c3c0..0e9384d8 100644 --- a/install/deferred/openwebui-install.sh +++ b/install/deferred/openwebui-install.sh @@ -9,7 +9,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/pixelfed-install.sh b/install/deferred/pixelfed-install.sh index 526922a4..0996ec33 100644 --- a/install/deferred/pixelfed-install.sh +++ b/install/deferred/pixelfed-install.sh @@ -9,7 +9,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/polaris-install.sh b/install/deferred/polaris-install.sh index f9f70c6e..4f4e7727 100644 --- a/install/deferred/polaris-install.sh +++ b/install/deferred/polaris-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/roundcubemail-install.sh b/install/deferred/roundcubemail-install.sh index 40982d9c..cfa37f06 100644 --- a/install/deferred/roundcubemail-install.sh +++ b/install/deferred/roundcubemail-install.sh @@ -10,7 +10,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/squirrelserversmanager-install.sh b/install/deferred/squirrelserversmanager-install.sh index 86eab5fb..9e6cedd0 100644 --- a/install/deferred/squirrelserversmanager-install.sh +++ b/install/deferred/squirrelserversmanager-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/timescaledb-install.sh b/install/deferred/timescaledb-install.sh index e5db3223..edcb20fa 100644 --- a/install/deferred/timescaledb-install.sh +++ b/install/deferred/timescaledb-install.sh @@ -7,7 +7,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/deferred/vikunja-install.sh b/install/deferred/vikunja-install.sh index b51da342..f56d073d 100644 --- a/install/deferred/vikunja-install.sh +++ b/install/deferred/vikunja-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/dispatcharr-install.sh b/install/dispatcharr-install.sh index 17c23648..1daedb24 100644 --- a/install/dispatcharr-install.sh +++ b/install/dispatcharr-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/docspell-install.sh b/install/docspell-install.sh index 3cdf2b7c..43534d72 100644 --- a/install/docspell-install.sh +++ b/install/docspell-install.sh @@ -7,7 +7,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/ente-install.sh b/install/ente-install.sh index f9afec8f..b08386d4 100644 --- a/install/ente-install.sh +++ b/install/ente-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/freepbx-install.sh b/install/freepbx-install.sh index 24c14a0a..4a4bd271 100644 --- a/install/freepbx-install.sh +++ b/install/freepbx-install.sh @@ -12,7 +12,7 @@ INSTALL_PATH="/opt/sng_freepbx_debian_install.sh" source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/frigate-install.sh b/install/frigate-install.sh index e6852aaa..018261a1 100644 --- a/install/frigate-install.sh +++ b/install/frigate-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/garmin-grafana-install.sh b/install/garmin-grafana-install.sh index 23fb8797..70070f8c 100644 --- a/install/garmin-grafana-install.sh +++ b/install/garmin-grafana-install.sh @@ -9,7 +9,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/ghostfolio-install.sh b/install/ghostfolio-install.sh index 7988124b..090b209b 100644 --- a/install/ghostfolio-install.sh +++ b/install/ghostfolio-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/globaleaks-install.sh b/install/globaleaks-install.sh index 966eb32d..650c8cbd 100644 --- a/install/globaleaks-install.sh +++ b/install/globaleaks-install.sh @@ -7,7 +7,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/hanko-install.sh b/install/hanko-install.sh index 40ab829d..e1ec43c9 100644 --- a/install/hanko-install.sh +++ b/install/hanko-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/joplin-server-install.sh b/install/joplin-server-install.sh index 07b7920e..6187f565 100644 --- a/install/joplin-server-install.sh +++ b/install/joplin-server-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/kanba-install.sh b/install/kanba-install.sh index d7335fd5..10a306dd 100644 --- a/install/kanba-install.sh +++ b/install/kanba-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/leantime-install.sh b/install/leantime-install.sh index b5c2f5e7..98aa77a1 100644 --- a/install/leantime-install.sh +++ b/install/leantime-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/librenms-install.sh b/install/librenms-install.sh index 296f0351..ad1cbb6f 100644 --- a/install/librenms-install.sh +++ b/install/librenms-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/livebook-install.sh b/install/livebook-install.sh index 251f078d..5d922b72 100644 --- a/install/livebook-install.sh +++ b/install/livebook-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index be4dcd84..f7bb7c2f 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -7,7 +7,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/maxun-install.sh b/install/maxun-install.sh index 27e3e710..004546bc 100644 --- a/install/maxun-install.sh +++ b/install/maxun-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/notesnook-install.sh b/install/notesnook-install.sh index ab95849e..cedb85ca 100644 --- a/install/notesnook-install.sh +++ b/install/notesnook-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/npmplus-install.sh b/install/npmplus-install.sh index e8e5f1bf..f63192c7 100644 --- a/install/npmplus-install.sh +++ b/install/npmplus-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/opencloud-install.sh b/install/opencloud-install.sh index a791ed0b..59f15950 100644 --- a/install/opencloud-install.sh +++ b/install/opencloud-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/postiz-install.sh b/install/postiz-install.sh index 2ed155c8..5b9e3592 100644 --- a/install/postiz-install.sh +++ b/install/postiz-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/proxmox-datacenter-manager-install.sh b/install/proxmox-datacenter-manager-install.sh index c4a3f387..e9a3c300 100644 --- a/install/proxmox-datacenter-manager-install.sh +++ b/install/proxmox-datacenter-manager-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/romm-install.sh b/install/romm-install.sh index bd5f9a28..438e4e5a 100644 --- a/install/romm-install.sh +++ b/install/romm-install.sh @@ -9,7 +9,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/rybbit-install.sh b/install/rybbit-install.sh index 1f9481f9..055a101a 100644 --- a/install/rybbit-install.sh +++ b/install/rybbit-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/scraparr-install.sh b/install/scraparr-install.sh index 18b02425..8c0de782 100644 --- a/install/scraparr-install.sh +++ b/install/scraparr-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/signoz-install.sh b/install/signoz-install.sh index f506f315..fb52d12b 100644 --- a/install/signoz-install.sh +++ b/install/signoz-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/tunarr-install.sh b/install/tunarr-install.sh index 57d7f16e..854db713 100644 --- a/install/tunarr-install.sh +++ b/install/tunarr-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os @@ -16,18 +16,18 @@ update_os msg_info "Setting Up Hardware Acceleration" $STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} if [[ "$CTTYPE" == "0" ]]; then - chgrp video /dev/dri - chmod 755 /dev/dri - chmod 660 /dev/dri/* - $STD adduser $(id -u -n) video - $STD adduser $(id -u -n) render + chgrp video /dev/dri + chmod 755 /dev/dri + chmod 660 /dev/dri/* + $STD adduser $(id -u -n) video + $STD adduser $(id -u -n) render fi msg_ok "Set Up Hardware Acceleration" read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 12 only)? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - msg_info "Installing Intel Hardware Acceleration (non-free)" - cat </etc/apt/sources.list.d/non-free.list + msg_info "Installing Intel Hardware Acceleration (non-free)" + cat </etc/apt/sources.list.d/non-free.list deb http://deb.debian.org/debian bookworm non-free non-free-firmware deb-src http://deb.debian.org/debian bookworm non-free non-free-firmware @@ -38,11 +38,11 @@ deb-src http://deb.debian.org/debian-security bookworm-security non-free non-fre deb http://deb.debian.org/debian bookworm-updates non-free non-free-firmware deb-src http://deb.debian.org/debian bookworm-updates non-free non-free-firmware EOF - $STD apt-get update - $STD apt-get -y install {intel-media-va-driver-non-free,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} + $STD apt-get update + $STD apt-get -y install {intel-media-va-driver-non-free,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} else - msg_info "Installing Intel Hardware Acceleration" - $STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} + msg_info "Installing Intel Hardware Acceleration" + $STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} fi msg_ok "Installed and Set Up Intel Hardware Acceleration" diff --git a/install/ubuntu-install.sh b/install/ubuntu-install.sh index aa5766a0..97283d83 100644 --- a/install/ubuntu-install.sh +++ b/install/ubuntu-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/viseron-install.sh b/install/viseron-install.sh index 67cf18c4..e0835a59 100644 --- a/install/viseron-install.sh +++ b/install/viseron-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/wallabag-install.sh b/install/wallabag-install.sh index 3bcbce9c..2c1231d2 100644 --- a/install/wallabag-install.sh +++ b/install/wallabag-install.sh @@ -7,7 +7,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os diff --git a/install/warracker-install.sh b/install/warracker-install.sh index 18ce630c..fb83fba0 100644 --- a/install/warracker-install.sh +++ b/install/warracker-install.sh @@ -8,7 +8,7 @@ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 -init_error_traps +catch_errors setting_up_container network_check update_os @@ -16,8 +16,7 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y \ apt-transport-https \ - ca-certificates\ - nginx + ca-certificates nginx msg_ok "Installed Dependencies" PYTHON_VERSION="3.11" setup_uv @@ -37,12 +36,12 @@ $STD sudo -u postgres psql -d "$DB_NAME" -c "GRANT USAGE ON SCHEMA public TO $DB $STD sudo -u postgres psql -d "$DB_NAME" -c "GRANT CREATE ON SCHEMA public TO $DB_USER;" $STD sudo -u postgres psql -d "$DB_NAME" -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO $DB_USER;" { - echo "Application Credentials" - echo "DB_NAME: $DB_NAME" - echo "DB_USER: $DB_USER" - echo "DB_PASS: $DB_PASS" - echo "DB_ADMIN_USER: $DB_ADMIN_USER" - echo "DB_ADMIN_PASS: $DB_ADMIN_PASS" + echo "Application Credentials" + echo "DB_NAME: $DB_NAME" + echo "DB_USER: $DB_USER" + echo "DB_PASS: $DB_PASS" + echo "DB_ADMIN_USER: $DB_ADMIN_USER" + echo "DB_ADMIN_PASS: $DB_ADMIN_PASS" } >>~/warracker.creds msg_ok "Installed PostgreSQL" @@ -55,17 +54,17 @@ $STD source .venv/bin/activate $STD uv pip install -r requirements.txt mv /opt/warracker/env.example /opt/warracker/.env sed -i \ - -e "s/your_secure_database_password/$DB_PASS/" \ - -e "s/your_secure_admin_password/$DB_ADMIN_PASS/" \ - -e "s|^# DB_PORT=5432$|DB_HOST=127.0.0.1|" \ - /opt/warracker/.env + -e "s/your_secure_database_password/$DB_PASS/" \ + -e "s/your_secure_admin_password/$DB_ADMIN_PASS/" \ + -e "s|^# DB_PORT=5432$|DB_HOST=127.0.0.1|" \ + /opt/warracker/.env mv /opt/warracker/nginx.conf /etc/nginx/sites-available/warracker.conf sed -i \ - -e "s|alias /var/www/html/locales/;|alias /opt/warracker/locales/;|" \ - -e "s|/var/www/html|/opt/warracker/frontend|g" \ - -e "s/client_max_body_size __NGINX_MAX_BODY_SIZE_CONFIG_VALUE__/client_max_body_size 32M/" \ - /etc/nginx/sites-available/warracker.conf + -e "s|alias /var/www/html/locales/;|alias /opt/warracker/locales/;|" \ + -e "s|/var/www/html|/opt/warracker/frontend|g" \ + -e "s/client_max_body_size __NGINX_MAX_BODY_SIZE_CONFIG_VALUE__/client_max_body_size 32M/" \ + /etc/nginx/sites-available/warracker.conf ln -s /etc/nginx/sites-available/warracker.conf /etc/nginx/sites-enabled/warracker.conf rm /etc/nginx/sites-enabled/default systemctl restart nginx diff --git a/misc/alpine-install.func b/misc/alpine-install.func index 0ba607ca..ce396f75 100644 --- a/misc/alpine-install.func +++ b/misc/alpine-install.func @@ -5,22 +5,22 @@ # https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE if ! command -v curl >/dev/null 2>&1; then - apk update && apk add curl >/dev/null 2>&1 + apk update && apk add curl >/dev/null 2>&1 fi source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/core.func) source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/error_handler.func) load_functions -init_error_traps +catch_errors # This function enables IPv6 if it's not disabled and sets verbose mode verb_ip6() { - set_std_mode # Set STD mode based on VERBOSE + set_std_mode # Set STD mode based on VERBOSE - if [ "$DISABLEIPV6" == "yes" ]; then - $STD sysctl -w net.ipv6.conf.all.disable_ipv6=1 - echo "net.ipv6.conf.all.disable_ipv6 = 1" >>/etc/sysctl.conf - $STD rc-update add sysctl default - fi + if [ "$DISABLEIPV6" == "yes" ]; then + $STD sysctl -w net.ipv6.conf.all.disable_ipv6=1 + echo "net.ipv6.conf.all.disable_ipv6 = 1" >>/etc/sysctl.conf + $STD rc-update add sysctl default + fi } set -Eeuo pipefail @@ -30,149 +30,149 @@ trap on_interrupt INT trap on_terminate TERM error_handler() { - local exit_code="$1" - local line_number="$2" - local command="$3" + local exit_code="$1" + local line_number="$2" + local command="$3" - # Exitcode 0 = kein Fehler → ignorieren - if [[ "$exit_code" -eq 0 ]]; then - return 0 - fi + # Exitcode 0 = kein Fehler → ignorieren + if [[ "$exit_code" -eq 0 ]]; then + return 0 + fi - printf "\e[?25h" - echo -e "\n${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}\n" - exit "$exit_code" + printf "\e[?25h" + echo -e "\n${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}\n" + exit "$exit_code" } on_exit() { - local exit_code="$?" - [[ -n "${lockfile:-}" && -e "$lockfile" ]] && rm -f "$lockfile" - exit "$exit_code" + local exit_code="$?" + [[ -n "${lockfile:-}" && -e "$lockfile" ]] && rm -f "$lockfile" + exit "$exit_code" } on_interrupt() { - echo -e "\n${RD}Interrupted by user (SIGINT)${CL}" - exit 130 + echo -e "\n${RD}Interrupted by user (SIGINT)${CL}" + exit 130 } on_terminate() { - echo -e "\n${RD}Terminated by signal (SIGTERM)${CL}" - exit 143 + echo -e "\n${RD}Terminated by signal (SIGTERM)${CL}" + exit 143 } # This function sets up the Container OS by generating the locale, setting the timezone, and checking the network connection setting_up_container() { - msg_info "Setting up Container OS" - while [ $i -gt 0 ]; do - if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" != "" ]; then - break - fi - echo 1>&2 -en "${CROSS}${RD} No Network! " - sleep $RETRY_EVERY - i=$((i - 1)) - done + msg_info "Setting up Container OS" + while [ $i -gt 0 ]; do + if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" != "" ]; then + break + fi + echo 1>&2 -en "${CROSS}${RD} No Network! " + sleep $RETRY_EVERY + i=$((i - 1)) + done - if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" = "" ]; then - echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}" - echo -e "${NETWORK}Check Network Settings" - exit 1 - fi - msg_ok "Set up Container OS" - msg_ok "Network Connected: ${BL}$(ip addr show | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1 | tail -n1)${CL}" + if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" = "" ]; then + echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}" + echo -e "${NETWORK}Check Network Settings" + exit 1 + fi + msg_ok "Set up Container OS" + msg_ok "Network Connected: ${BL}$(ip addr show | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1 | tail -n1)${CL}" } # This function checks the network connection by pinging a known IP address and prompts the user to continue if the internet is not connected network_check() { - set +e - trap - ERR - if ping -c 1 -W 1 1.1.1.1 &>/dev/null || ping -c 1 -W 1 8.8.8.8 &>/dev/null || ping -c 1 -W 1 9.9.9.9 &>/dev/null; then - msg_ok "Internet Connected" - else - msg_error "Internet NOT Connected" - read -r -p "Would you like to continue anyway? " prompt - if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - echo -e "${INFO}${RD}Expect Issues Without Internet${CL}" + set +e + trap - ERR + if ping -c 1 -W 1 1.1.1.1 &>/dev/null || ping -c 1 -W 1 8.8.8.8 &>/dev/null || ping -c 1 -W 1 9.9.9.9 &>/dev/null; then + msg_ok "Internet Connected" else - echo -e "${NETWORK}Check Network Settings" - exit 1 + msg_error "Internet NOT Connected" + read -r -p "Would you like to continue anyway? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + echo -e "${INFO}${RD}Expect Issues Without Internet${CL}" + else + echo -e "${NETWORK}Check Network Settings" + exit 1 + fi fi - fi - RESOLVEDIP=$(getent hosts github.com | awk '{ print $1 }') - if [[ -z "$RESOLVEDIP" ]]; then msg_error "DNS Lookup Failure"; else msg_ok "DNS Resolved github.com to ${BL}$RESOLVEDIP${CL}"; fi - set -e - trap 'error_handler $LINENO "$BASH_COMMAND"' ERR + RESOLVEDIP=$(getent hosts github.com | awk '{ print $1 }') + if [[ -z "$RESOLVEDIP" ]]; then msg_error "DNS Lookup Failure"; else msg_ok "DNS Resolved github.com to ${BL}$RESOLVEDIP${CL}"; fi + set -e + trap 'error_handler $LINENO "$BASH_COMMAND"' ERR } # This function updates the Container OS by running apt-get update and upgrade update_os() { - msg_info "Updating Container OS" - $STD apk update && $STD apk upgrade - source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/alpine-tools.func) - msg_ok "Updated Container OS" + msg_info "Updating Container OS" + $STD apk update && $STD apk upgrade + source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/alpine-tools.func) + msg_ok "Updated Container OS" } # This function modifies the message of the day (motd) and SSH settings motd_ssh() { - echo "export TERM='xterm-256color'" >>/root/.bashrc - IP=$(ip -4 addr show eth0 | awk '/inet / {print $2}' | cut -d/ -f1 | head -n 1) + echo "export TERM='xterm-256color'" >>/root/.bashrc + IP=$(ip -4 addr show eth0 | awk '/inet / {print $2}' | cut -d/ -f1 | head -n 1) - if [ -f "/etc/os-release" ]; then - OS_NAME=$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '"') - OS_VERSION=$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '"') - else - OS_NAME="Alpine Linux" - OS_VERSION="Unknown" - fi + if [ -f "/etc/os-release" ]; then + OS_NAME=$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '"') + OS_VERSION=$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '"') + else + OS_NAME="Alpine Linux" + OS_VERSION="Unknown" + fi - PROFILE_FILE="/etc/profile.d/00_lxc-details.sh" - echo "echo -e \"\"" >"$PROFILE_FILE" - echo -e "echo -e \"${BOLD}${YW}${APPLICATION} LXC Container - DEV Repository${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${RD}WARNING: This is a DEVELOPMENT version (ProxmoxVED). Do NOT use in production!${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${YW} OS: ${GN}${OS_NAME} - Version: ${OS_VERSION}${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${YW} IP Address: ${GN}${IP}${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${YW} Repository: ${GN}https://github.com/community-scripts/ProxmoxVED${CL}\"" >>"$PROFILE_FILE" - echo "echo \"\"" >>"$PROFILE_FILE" + PROFILE_FILE="/etc/profile.d/00_lxc-details.sh" + echo "echo -e \"\"" >"$PROFILE_FILE" + echo -e "echo -e \"${BOLD}${YW}${APPLICATION} LXC Container - DEV Repository${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${RD}WARNING: This is a DEVELOPMENT version (ProxmoxVED). Do NOT use in production!${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${YW} OS: ${GN}${OS_NAME} - Version: ${OS_VERSION}${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${YW} IP Address: ${GN}${IP}${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${YW} Repository: ${GN}https://github.com/community-scripts/ProxmoxVED${CL}\"" >>"$PROFILE_FILE" + echo "echo \"\"" >>"$PROFILE_FILE" - if [[ "${SSH_ROOT}" == "yes" ]]; then - $STD rc-update add sshd - sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config - $STD /etc/init.d/sshd start - fi + if [[ "${SSH_ROOT}" == "yes" ]]; then + $STD rc-update add sshd + sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config + $STD /etc/init.d/sshd start + fi } # Validate Timezone for some LXC's validate_tz() { - [[ -f "/usr/share/zoneinfo/$1" ]] + [[ -f "/usr/share/zoneinfo/$1" ]] } # This function customizes the container and enables passwordless login for the root user customize() { - if [[ "$PASSWORD" == "" ]]; then - msg_info "Customizing Container" - passwd -d root >/dev/null 2>&1 + if [[ "$PASSWORD" == "" ]]; then + msg_info "Customizing Container" + passwd -d root >/dev/null 2>&1 - # Ensure agetty is available - apk add --no-cache --force-broken-world util-linux >/dev/null 2>&1 + # Ensure agetty is available + apk add --no-cache --force-broken-world util-linux >/dev/null 2>&1 - # Create persistent autologin boot script - mkdir -p /etc/local.d - cat <<'EOF' >/etc/local.d/autologin.start + # Create persistent autologin boot script + mkdir -p /etc/local.d + cat <<'EOF' >/etc/local.d/autologin.start #!/bin/sh sed -i 's|^tty1::respawn:.*|tty1::respawn:/sbin/agetty --autologin root --noclear tty1 38400 linux|' /etc/inittab kill -HUP 1 EOF - touch /root/.hushlogin + touch /root/.hushlogin - chmod +x /etc/local.d/autologin.start - rc-update add local >/dev/null 2>&1 + chmod +x /etc/local.d/autologin.start + rc-update add local >/dev/null 2>&1 - # Apply autologin immediately for current session - /etc/local.d/autologin.start + # Apply autologin immediately for current session + /etc/local.d/autologin.start - msg_ok "Customized Container" - fi + msg_ok "Customized Container" + fi - echo "bash -c \"\$(curl -fsSL https://github.com/community-scripts/ProxmoxVED/raw/main/ct/${app}.sh)\"" >/usr/bin/update - chmod +x /usr/bin/update + echo "bash -c \"\$(curl -fsSL https://github.com/community-scripts/ProxmoxVED/raw/main/ct/${app}.sh)\"" >/usr/bin/update + chmod +x /usr/bin/update } diff --git a/misc/build.func b/misc/build.func index 1802ab0d..c112f27d 100644 --- a/misc/build.func +++ b/misc/build.func @@ -134,13 +134,13 @@ if command -v curl >/dev/null 2>&1; then source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/core.func) source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/error_handler.func) load_functions - init_error_traps + catch_errors #echo "(build.func) Loaded core.func via curl" elif command -v wget >/dev/null 2>&1; then source <(wget -qO- https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/core.func) source <(wget -qO- https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/error_handler.func) load_functions - init_error_traps + catch_errors #echo "(build.func) Loaded core.func via wget" fi diff --git a/misc/error_handler.func b/misc/error_handler.func index 21996969..d2f21d08 100644 --- a/misc/error_handler.func +++ b/misc/error_handler.func @@ -8,141 +8,141 @@ # ------------------------------------------------------------------------------ explain_exit_code() { - local code="$1" - case "$code" in - # --- Generic / Shell --- - 1) echo "General error / Operation not permitted" ;; - 2) echo "Misuse of shell builtins (e.g. syntax error)" ;; - 126) echo "Command invoked cannot execute (permission problem?)" ;; - 127) echo "Command not found" ;; - 128) echo "Invalid argument to exit" ;; - 130) echo "Terminated by Ctrl+C (SIGINT)" ;; - 137) echo "Killed (SIGKILL / Out of memory?)" ;; - 139) echo "Segmentation fault (core dumped)" ;; - 143) echo "Terminated (SIGTERM)" ;; + local code="$1" + case "$code" in + # --- Generic / Shell --- + 1) echo "General error / Operation not permitted" ;; + 2) echo "Misuse of shell builtins (e.g. syntax error)" ;; + 126) echo "Command invoked cannot execute (permission problem?)" ;; + 127) echo "Command not found" ;; + 128) echo "Invalid argument to exit" ;; + 130) echo "Terminated by Ctrl+C (SIGINT)" ;; + 137) echo "Killed (SIGKILL / Out of memory?)" ;; + 139) echo "Segmentation fault (core dumped)" ;; + 143) echo "Terminated (SIGTERM)" ;; - # --- Package manager / APT / DPKG --- - 100) echo "APT: Package manager error (broken packages / dependency problems)" ;; - 101) echo "APT: Configuration error (bad sources.list, malformed config)" ;; - 255) echo "DPKG: Fatal internal error" ;; + # --- Package manager / APT / DPKG --- + 100) echo "APT: Package manager error (broken packages / dependency problems)" ;; + 101) echo "APT: Configuration error (bad sources.list, malformed config)" ;; + 255) echo "DPKG: Fatal internal error" ;; - # --- Node.js / npm / pnpm / yarn --- - 243) echo "Node.js: Out of memory (JavaScript heap out of memory)" ;; - 245) echo "Node.js: Invalid command-line option" ;; - 246) echo "Node.js: Internal JavaScript Parse Error" ;; - 247) echo "Node.js: Fatal internal error" ;; - 248) echo "Node.js: Invalid C++ addon / N-API failure" ;; - 249) echo "Node.js: Inspector error" ;; - 254) echo "npm/pnpm/yarn: Unknown fatal error" ;; + # --- Node.js / npm / pnpm / yarn --- + 243) echo "Node.js: Out of memory (JavaScript heap out of memory)" ;; + 245) echo "Node.js: Invalid command-line option" ;; + 246) echo "Node.js: Internal JavaScript Parse Error" ;; + 247) echo "Node.js: Fatal internal error" ;; + 248) echo "Node.js: Invalid C++ addon / N-API failure" ;; + 249) echo "Node.js: Inspector error" ;; + 254) echo "npm/pnpm/yarn: Unknown fatal error" ;; - # --- Python / pip / uv --- - 210) echo "Python: Virtualenv / uv environment missing or broken" ;; - 211) echo "Python: Dependency resolution failed" ;; - 212) echo "Python: Installation aborted (permissions or EXTERNALLY-MANAGED)" ;; + # --- Python / pip / uv --- + 210) echo "Python: Virtualenv / uv environment missing or broken" ;; + 211) echo "Python: Dependency resolution failed" ;; + 212) echo "Python: Installation aborted (permissions or EXTERNALLY-MANAGED)" ;; - # --- PostgreSQL --- - 231) echo "PostgreSQL: Connection failed (server not running / wrong socket)" ;; - 232) echo "PostgreSQL: Authentication failed (bad user/password)" ;; - 233) echo "PostgreSQL: Database does not exist" ;; - 234) echo "PostgreSQL: Fatal error in query / syntax" ;; + # --- PostgreSQL --- + 231) echo "PostgreSQL: Connection failed (server not running / wrong socket)" ;; + 232) echo "PostgreSQL: Authentication failed (bad user/password)" ;; + 233) echo "PostgreSQL: Database does not exist" ;; + 234) echo "PostgreSQL: Fatal error in query / syntax" ;; - # --- MySQL / MariaDB --- - 241) echo "MySQL/MariaDB: Connection failed (server not running / wrong socket)" ;; - 242) echo "MySQL/MariaDB: Authentication failed (bad user/password)" ;; - 243) echo "MySQL/MariaDB: Database does not exist" ;; - 244) echo "MySQL/MariaDB: Fatal error in query / syntax" ;; + # --- MySQL / MariaDB --- + 241) echo "MySQL/MariaDB: Connection failed (server not running / wrong socket)" ;; + 242) echo "MySQL/MariaDB: Authentication failed (bad user/password)" ;; + 243) echo "MySQL/MariaDB: Database does not exist" ;; + 244) echo "MySQL/MariaDB: Fatal error in query / syntax" ;; - # --- MongoDB --- - 251) echo "MongoDB: Connection failed (server not running)" ;; - 252) echo "MongoDB: Authentication failed (bad user/password)" ;; - 253) echo "MongoDB: Database not found" ;; - 254) echo "MongoDB: Fatal query error" ;; + # --- MongoDB --- + 251) echo "MongoDB: Connection failed (server not running)" ;; + 252) echo "MongoDB: Authentication failed (bad user/password)" ;; + 253) echo "MongoDB: Database not found" ;; + 254) echo "MongoDB: Fatal query error" ;; - # --- Proxmox Custom Codes --- - 200) echo "Custom: Failed to create lock file" ;; - 203) echo "Custom: Missing CTID variable" ;; - 204) echo "Custom: Missing PCT_OSTYPE variable" ;; - 205) echo "Custom: Invalid CTID (<100)" ;; - 209) echo "Custom: Container creation failed" ;; - 210) echo "Custom: Cluster not quorate" ;; - 214) echo "Custom: Not enough storage space" ;; - 215) echo "Custom: Container ID not listed" ;; - 216) echo "Custom: RootFS entry missing in config" ;; - 217) echo "Custom: Storage does not support rootdir" ;; - 220) echo "Custom: Unable to resolve template path" ;; - 222) echo "Custom: Template download failed after 3 attempts" ;; - 223) echo "Custom: Template not available after download" ;; - 231) echo "Custom: LXC stack upgrade/retry failed" ;; + # --- Proxmox Custom Codes --- + 200) echo "Custom: Failed to create lock file" ;; + 203) echo "Custom: Missing CTID variable" ;; + 204) echo "Custom: Missing PCT_OSTYPE variable" ;; + 205) echo "Custom: Invalid CTID (<100)" ;; + 209) echo "Custom: Container creation failed" ;; + 210) echo "Custom: Cluster not quorate" ;; + 214) echo "Custom: Not enough storage space" ;; + 215) echo "Custom: Container ID not listed" ;; + 216) echo "Custom: RootFS entry missing in config" ;; + 217) echo "Custom: Storage does not support rootdir" ;; + 220) echo "Custom: Unable to resolve template path" ;; + 222) echo "Custom: Template download failed after 3 attempts" ;; + 223) echo "Custom: Template not available after download" ;; + 231) echo "Custom: LXC stack upgrade/retry failed" ;; - # --- Default --- - *) echo "Unknown error" ;; - esac + # --- Default --- + *) echo "Unknown error" ;; + esac } # === Error handler ============================================================ error_handler() { - local exit_code=${1:-$?} - local command=${2:-${BASH_COMMAND:-unknown}} - local line_number=${BASH_LINENO[0]:-unknown} + local exit_code=${1:-$?} + local command=${2:-${BASH_COMMAND:-unknown}} + local line_number=${BASH_LINENO[0]:-unknown} - command="${command//\$STD/}" + command="${command//\$STD/}" - if [[ "$exit_code" -eq 0 ]]; then - return 0 - fi + if [[ "$exit_code" -eq 0 ]]; then + return 0 + fi - local explanation - explanation="$(explain_exit_code "$exit_code")" + local explanation + explanation="$(explain_exit_code "$exit_code")" - printf "\e[?25h" - echo -e "\n${RD}[ERROR]${CL} in line ${RD}${line_number}${CL}: exit code ${RD}${exit_code}${CL} (${explanation}): while executing command ${YWB}${command}${CL}\n" + printf "\e[?25h" + echo -e "\n${RD}[ERROR]${CL} in line ${RD}${line_number}${CL}: exit code ${RD}${exit_code}${CL} (${explanation}): while executing command ${YWB}${command}${CL}\n" - if [[ -n "${DEBUG_LOGFILE:-}" ]]; then - { - echo "------ ERROR ------" - echo "Timestamp : $(date '+%Y-%m-%d %H:%M:%S')" - echo "Exit Code : $exit_code ($explanation)" - echo "Line : $line_number" - echo "Command : $command" - echo "-------------------" - } >>"$DEBUG_LOGFILE" - fi + if [[ -n "${DEBUG_LOGFILE:-}" ]]; then + { + echo "------ ERROR ------" + echo "Timestamp : $(date '+%Y-%m-%d %H:%M:%S')" + echo "Exit Code : $exit_code ($explanation)" + echo "Line : $line_number" + echo "Command : $command" + echo "-------------------" + } >>"$DEBUG_LOGFILE" + fi - if [[ -n "${SILENT_LOGFILE:-}" && -s "$SILENT_LOGFILE" ]]; then - echo "--- Last 20 lines of silent log ($SILENT_LOGFILE) ---" - tail -n 20 "$SILENT_LOGFILE" - echo "---------------------------------------------------" - fi + if [[ -n "${SILENT_LOGFILE:-}" && -s "$SILENT_LOGFILE" ]]; then + echo "--- Last 20 lines of silent log ($SILENT_LOGFILE) ---" + tail -n 20 "$SILENT_LOGFILE" + echo "---------------------------------------------------" + fi - exit "$exit_code" + exit "$exit_code" } # === Exit handler ============================================================= on_exit() { - local exit_code=$? - [[ -n "${lockfile:-}" && -e "$lockfile" ]] && rm -f "$lockfile" - exit "$exit_code" + local exit_code=$? + [[ -n "${lockfile:-}" && -e "$lockfile" ]] && rm -f "$lockfile" + exit "$exit_code" } # === Signal handlers ========================================================== on_interrupt() { - echo -e "\n${RD}Interrupted by user (SIGINT)${CL}" - exit 130 + echo -e "\n${RD}Interrupted by user (SIGINT)${CL}" + exit 130 } on_terminate() { - echo -e "\n${RD}Terminated by signal (SIGTERM)${CL}" - exit 143 + echo -e "\n${RD}Terminated by signal (SIGTERM)${CL}" + exit 143 } # === Init traps =============================================================== -init_error_traps() { - set -Ee -o pipefail - if [ "${STRICT_UNSET:-0}" = "1" ]; then - set -u - fi - trap 'error_handler' ERR - trap on_exit EXIT - trap on_interrupt INT - trap on_terminate TERM +catch_errors() { + set -Ee -o pipefail + if [ "${STRICT_UNSET:-0}" = "1" ]; then + set -u + fi + trap 'error_handler' ERR + trap on_exit EXIT + trap on_interrupt INT + trap on_terminate TERM } diff --git a/misc/install.func b/misc/install.func index b27bfc01..f741b921 100644 --- a/misc/install.func +++ b/misc/install.func @@ -5,23 +5,23 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE if ! command -v curl >/dev/null 2>&1; then - printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2 - apt-get update >/dev/null 2>&1 - apt-get install -y curl >/dev/null 2>&1 + printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2 + apt-get update >/dev/null 2>&1 + apt-get install -y curl >/dev/null 2>&1 fi source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/core.func) source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/error_handler.func) load_functions -init_error_traps +catch_errors # This function enables IPv6 if it's not disabled and sets verbose mode verb_ip6() { - set_std_mode # Set STD mode based on VERBOSE + set_std_mode # Set STD mode based on VERBOSE - if [ "$DISABLEIPV6" == "yes" ]; then - echo "net.ipv6.conf.all.disable_ipv6 = 1" >>/etc/sysctl.conf - $STD sysctl -p - fi + if [ "$DISABLEIPV6" == "yes" ]; then + echo "net.ipv6.conf.all.disable_ipv6 = 1" >>/etc/sysctl.conf + $STD sysctl -p + fi } # # This function sets error handling options and defines the error_handler function to handle errors @@ -48,92 +48,92 @@ verb_ip6() { # This function sets up the Container OS by generating the locale, setting the timezone, and checking the network connection setting_up_container() { - msg_info "Setting up Container OS" - for ((i = RETRY_NUM; i > 0; i--)); do - if [ "$(hostname -I)" != "" ]; then - break + msg_info "Setting up Container OS" + for ((i = RETRY_NUM; i > 0; i--)); do + if [ "$(hostname -I)" != "" ]; then + break + fi + echo 1>&2 -en "${CROSS}${RD} No Network! " + sleep $RETRY_EVERY + done + if [ "$(hostname -I)" = "" ]; then + echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}" + echo -e "${NETWORK}Check Network Settings" + exit 1 fi - echo 1>&2 -en "${CROSS}${RD} No Network! " - sleep $RETRY_EVERY - done - if [ "$(hostname -I)" = "" ]; then - echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}" - echo -e "${NETWORK}Check Network Settings" - exit 1 - fi - rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED - systemctl disable -q --now systemd-networkd-wait-online.service - msg_ok "Set up Container OS" - #msg_custom "${CM}" "${GN}" "Network Connected: ${BL}$(hostname -I)" - msg_ok "Network Connected: ${BL}$(hostname -I)" + rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED + systemctl disable -q --now systemd-networkd-wait-online.service + msg_ok "Set up Container OS" + #msg_custom "${CM}" "${GN}" "Network Connected: ${BL}$(hostname -I)" + msg_ok "Network Connected: ${BL}$(hostname -I)" } # This function checks the network connection by pinging a known IP address and prompts the user to continue if the internet is not connected network_check() { - set +e - trap - ERR - ipv4_connected=false - ipv6_connected=false - sleep 1 + set +e + trap - ERR + ipv4_connected=false + ipv6_connected=false + sleep 1 - # Check IPv4 connectivity to Google, Cloudflare & Quad9 DNS servers. - if ping -c 1 -W 1 1.1.1.1 &>/dev/null || ping -c 1 -W 1 8.8.8.8 &>/dev/null || ping -c 1 -W 1 9.9.9.9 &>/dev/null; then - msg_ok "IPv4 Internet Connected" - ipv4_connected=true - else - msg_error "IPv4 Internet Not Connected" - fi - - # Check IPv6 connectivity to Google, Cloudflare & Quad9 DNS servers. - if ping6 -c 1 -W 1 2606:4700:4700::1111 &>/dev/null || ping6 -c 1 -W 1 2001:4860:4860::8888 &>/dev/null || ping6 -c 1 -W 1 2620:fe::fe &>/dev/null; then - msg_ok "IPv6 Internet Connected" - ipv6_connected=true - else - msg_error "IPv6 Internet Not Connected" - fi - - # If both IPv4 and IPv6 checks fail, prompt the user - if [[ $ipv4_connected == false && $ipv6_connected == false ]]; then - read -r -p "No Internet detected, would you like to continue anyway? " prompt - if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - echo -e "${INFO}${RD}Expect Issues Without Internet${CL}" + # Check IPv4 connectivity to Google, Cloudflare & Quad9 DNS servers. + if ping -c 1 -W 1 1.1.1.1 &>/dev/null || ping -c 1 -W 1 8.8.8.8 &>/dev/null || ping -c 1 -W 1 9.9.9.9 &>/dev/null; then + msg_ok "IPv4 Internet Connected" + ipv4_connected=true else - echo -e "${NETWORK}Check Network Settings" - exit 1 + msg_error "IPv4 Internet Not Connected" fi - fi - # DNS resolution checks for GitHub-related domains (IPv4 and/or IPv6) - GIT_HOSTS=("github.com" "raw.githubusercontent.com" "api.github.com" "git.community-scripts.org") - GIT_STATUS="Git DNS:" - DNS_FAILED=false - - for HOST in "${GIT_HOSTS[@]}"; do - RESOLVEDIP=$(getent hosts "$HOST" | awk '{ print $1 }' | grep -E '(^([0-9]{1,3}\.){3}[0-9]{1,3}$)|(^[a-fA-F0-9:]+$)' | head -n1) - if [[ -z "$RESOLVEDIP" ]]; then - GIT_STATUS+="$HOST:($DNSFAIL)" - DNS_FAILED=true + # Check IPv6 connectivity to Google, Cloudflare & Quad9 DNS servers. + if ping6 -c 1 -W 1 2606:4700:4700::1111 &>/dev/null || ping6 -c 1 -W 1 2001:4860:4860::8888 &>/dev/null || ping6 -c 1 -W 1 2620:fe::fe &>/dev/null; then + msg_ok "IPv6 Internet Connected" + ipv6_connected=true else - GIT_STATUS+=" $HOST:($DNSOK)" + msg_error "IPv6 Internet Not Connected" fi - done - if [[ "$DNS_FAILED" == true ]]; then - fatal "$GIT_STATUS" - else - msg_ok "$GIT_STATUS" - fi + # If both IPv4 and IPv6 checks fail, prompt the user + if [[ $ipv4_connected == false && $ipv6_connected == false ]]; then + read -r -p "No Internet detected, would you like to continue anyway? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + echo -e "${INFO}${RD}Expect Issues Without Internet${CL}" + else + echo -e "${NETWORK}Check Network Settings" + exit 1 + fi + fi - set -e - trap 'error_handler $LINENO "$BASH_COMMAND"' ERR + # DNS resolution checks for GitHub-related domains (IPv4 and/or IPv6) + GIT_HOSTS=("github.com" "raw.githubusercontent.com" "api.github.com" "git.community-scripts.org") + GIT_STATUS="Git DNS:" + DNS_FAILED=false + + for HOST in "${GIT_HOSTS[@]}"; do + RESOLVEDIP=$(getent hosts "$HOST" | awk '{ print $1 }' | grep -E '(^([0-9]{1,3}\.){3}[0-9]{1,3}$)|(^[a-fA-F0-9:]+$)' | head -n1) + if [[ -z "$RESOLVEDIP" ]]; then + GIT_STATUS+="$HOST:($DNSFAIL)" + DNS_FAILED=true + else + GIT_STATUS+=" $HOST:($DNSOK)" + fi + done + + if [[ "$DNS_FAILED" == true ]]; then + fatal "$GIT_STATUS" + else + msg_ok "$GIT_STATUS" + fi + + set -e + trap 'error_handler $LINENO "$BASH_COMMAND"' ERR } # This function updates the Container OS by running apt-get update and upgrade update_os() { - msg_info "Updating Container OS" - if [[ "$CACHER" == "yes" ]]; then - echo "Acquire::http::Proxy-Auto-Detect \"/usr/local/bin/apt-proxy-detect.sh\";" >/etc/apt/apt.conf.d/00aptproxy - cat <<'EOF' >/usr/local/bin/apt-proxy-detect.sh + msg_info "Updating Container OS" + if [[ "$CACHER" == "yes" ]]; then + echo "Acquire::http::Proxy-Auto-Detect \"/usr/local/bin/apt-proxy-detect.sh\";" >/etc/apt/apt.conf.d/00aptproxy + cat <<'EOF' >/usr/local/bin/apt-proxy-detect.sh #!/bin/bash if nc -w1 -z "${CACHER_IP}" 3142; then echo -n "http://${CACHER_IP}:3142" @@ -141,66 +141,66 @@ else echo -n "DIRECT" fi EOF - chmod +x /usr/local/bin/apt-proxy-detect.sh - fi - $STD apt-get update - $STD apt-get -o Dpkg::Options::="--force-confold" -y dist-upgrade - rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED - msg_ok "Updated Container OS" - source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/tools.func) + chmod +x /usr/local/bin/apt-proxy-detect.sh + fi + $STD apt-get update + $STD apt-get -o Dpkg::Options::="--force-confold" -y dist-upgrade + rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED + msg_ok "Updated Container OS" + source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/tools.func) } # This function modifies the message of the day (motd) and SSH settings motd_ssh() { - grep -qxF "export TERM='xterm-256color'" /root/.bashrc || echo "export TERM='xterm-256color'" >>/root/.bashrc + grep -qxF "export TERM='xterm-256color'" /root/.bashrc || echo "export TERM='xterm-256color'" >>/root/.bashrc - if [ -f "/etc/os-release" ]; then - OS_NAME=$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '"') - OS_VERSION=$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '"') - elif [ -f "/etc/debian_version" ]; then - OS_NAME="Debian" - OS_VERSION=$(cat /etc/debian_version) - fi + if [ -f "/etc/os-release" ]; then + OS_NAME=$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '"') + OS_VERSION=$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '"') + elif [ -f "/etc/debian_version" ]; then + OS_NAME="Debian" + OS_VERSION=$(cat /etc/debian_version) + fi - PROFILE_FILE="/etc/profile.d/00_lxc-details.sh" - echo "echo -e \"\"" >"$PROFILE_FILE" - echo -e "echo -e \"${BOLD}${YW}${APPLICATION} LXC Container - DEV Repository${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${RD}WARNING: This is a DEVELOPMENT version (ProxmoxVED). Do NOT use in production!${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${YW} OS: ${GN}${OS_NAME} - Version: ${OS_VERSION}${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${YW} IP Address: ${GN}\$(hostname -I | awk '{print \$1}')${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${YW} Repository: ${GN}https://github.com/community-scripts/ProxmoxVED${CL}\"" >>"$PROFILE_FILE" - echo "echo \"\"" >>"$PROFILE_FILE" + PROFILE_FILE="/etc/profile.d/00_lxc-details.sh" + echo "echo -e \"\"" >"$PROFILE_FILE" + echo -e "echo -e \"${BOLD}${YW}${APPLICATION} LXC Container - DEV Repository${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${RD}WARNING: This is a DEVELOPMENT version (ProxmoxVED). Do NOT use in production!${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${YW} OS: ${GN}${OS_NAME} - Version: ${OS_VERSION}${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${YW} IP Address: ${GN}\$(hostname -I | awk '{print \$1}')${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${YW} Repository: ${GN}https://github.com/community-scripts/ProxmoxVED${CL}\"" >>"$PROFILE_FILE" + echo "echo \"\"" >>"$PROFILE_FILE" - chmod -x /etc/update-motd.d/* + chmod -x /etc/update-motd.d/* - if [[ "${SSH_ROOT}" == "yes" ]]; then - sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config - systemctl restart sshd - fi + if [[ "${SSH_ROOT}" == "yes" ]]; then + sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config + systemctl restart sshd + fi } # This function customizes the container by modifying the getty service and enabling auto-login for the root user customize() { - if [[ "$PASSWORD" == "" ]]; then - msg_info "Customizing Container" - GETTY_OVERRIDE="/etc/systemd/system/container-getty@1.service.d/override.conf" - mkdir -p $(dirname $GETTY_OVERRIDE) - cat <$GETTY_OVERRIDE + if [[ "$PASSWORD" == "" ]]; then + msg_info "Customizing Container" + GETTY_OVERRIDE="/etc/systemd/system/container-getty@1.service.d/override.conf" + mkdir -p $(dirname $GETTY_OVERRIDE) + cat <$GETTY_OVERRIDE [Service] ExecStart= ExecStart=-/sbin/agetty --autologin root --noclear --keep-baud tty%I 115200,38400,9600 \$TERM EOF - systemctl daemon-reload - systemctl restart $(basename $(dirname $GETTY_OVERRIDE) | sed 's/\.d//') - msg_ok "Customized Container" - fi - echo "bash -c \"\$(curl -fsSL https://github.com/community-scripts/ProxmoxVED/raw/main/ct/${app}.sh)\"" >/usr/bin/update - chmod +x /usr/bin/update - if [[ -n "${SSH_AUTHORIZED_KEY}" ]]; then - mkdir -p /root/.ssh - echo "${SSH_AUTHORIZED_KEY}" >/root/.ssh/authorized_keys - chmod 700 /root/.ssh - chmod 600 /root/.ssh/authorized_keys - fi + systemctl daemon-reload + systemctl restart $(basename $(dirname $GETTY_OVERRIDE) | sed 's/\.d//') + msg_ok "Customized Container" + fi + echo "bash -c \"\$(curl -fsSL https://github.com/community-scripts/ProxmoxVED/raw/main/ct/${app}.sh)\"" >/usr/bin/update + chmod +x /usr/bin/update + if [[ -n "${SSH_AUTHORIZED_KEY}" ]]; then + mkdir -p /root/.ssh + echo "${SSH_AUTHORIZED_KEY}" >/root/.ssh/authorized_keys + chmod 700 /root/.ssh + chmod 600 /root/.ssh/authorized_keys + fi } From f924fa60634a5a63889fed6dd05356be785b4329 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 08:59:17 +0200 Subject: [PATCH 27/53] Update tunarr.sh --- ct/tunarr.sh | 90 ++++++++++++++++++++++++++-------------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/ct/tunarr.sh b/ct/tunarr.sh index f8d69769..d804606c 100644 --- a/ct/tunarr.sh +++ b/ct/tunarr.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) -# Copyright (c) 2021-2025 tteck +# Copyright (c) 2021-2025 community-scripts ORG # Author: chrisbenincasa # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://tunarr.com/ @@ -19,51 +19,51 @@ variables color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/tunarr ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - if check_for_gh_release "tunarr" "chrisbenincasa/tunarr"; then - msg_info "Stopping ${APP}" - systemctl stop tunarr - msg_ok "Stopped ${APP}" - - msg_info "Creating Backup" - tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /usr/.local/share/tunarr - msg_ok "Backup Created" - - fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "singlefile" "latest" "/opt/tunarr" "*linux-x64" - - msg_info "Starting ${APP}" - systemctl start tunarr - msg_ok "Started ${APP}" - - msg_ok "Updated Successfully" - fi - - if check_for_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg"; then - msg_info "Stopping ${APP}" - systemctl stop tunarr - msg_ok "Stopped ${APP}" - - fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz" - - msg_info "Set ErsatzTV-ffmpeg links" - chmod +x /opt/ErsatzTV-ffmpeg/bin/* - ln -sf /opt/ErsatzTV-ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg - ln -sf /opt/ErsatzTV-ffmpeg/bin/ffplay /usr/local/bin/ffplay - ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe - msg_ok "ffmpeg links set" - - msg_info "Starting ${APP}" - systemctl start tunarr - msg_ok "Started ${APP}" - msg_ok "Updated Successfully" - fi + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/tunarr ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + if check_for_gh_release "tunarr" "chrisbenincasa/tunarr"; then + msg_info "Stopping ${APP}" + systemctl stop tunarr + msg_ok "Stopped ${APP}" + + msg_info "Creating Backup" + tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /usr/.local/share/tunarr + msg_ok "Backup Created" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "singlefile" "latest" "/opt/tunarr" "*linux-x64" + + msg_info "Starting ${APP}" + systemctl start tunarr + msg_ok "Started ${APP}" + + msg_ok "Updated Successfully" + fi + + if check_for_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg"; then + msg_info "Stopping ${APP}" + systemctl stop tunarr + msg_ok "Stopped ${APP}" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz" + + msg_info "Set ErsatzTV-ffmpeg links" + chmod +x /opt/ErsatzTV-ffmpeg/bin/* + ln -sf /opt/ErsatzTV-ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg + ln -sf /opt/ErsatzTV-ffmpeg/bin/ffplay /usr/local/bin/ffplay + ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe + msg_ok "ffmpeg links set" + + msg_info "Starting ${APP}" + systemctl start tunarr + msg_ok "Started ${APP}" + msg_ok "Updated Successfully" + fi + exit } start From 6f21fec430c243c88a5ce29fa777bb2894ce038a Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:00:30 +0200 Subject: [PATCH 28/53] Update tunarr.sh --- ct/tunarr.sh | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/ct/tunarr.sh b/ct/tunarr.sh index d804606c..cc8d2aed 100644 --- a/ct/tunarr.sh +++ b/ct/tunarr.sh @@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}" var_ram="${var_ram:-1024}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" -var_version="${var_version:-12}" +var_version="${var_version:-13}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -27,9 +27,9 @@ function update_script() { exit fi if check_for_gh_release "tunarr" "chrisbenincasa/tunarr"; then - msg_info "Stopping ${APP}" + msg_info "Stopping Service" systemctl stop tunarr - msg_ok "Stopped ${APP}" + msg_ok "Stopped Service" msg_info "Creating Backup" tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /usr/.local/share/tunarr @@ -37,17 +37,16 @@ function update_script() { CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "singlefile" "latest" "/opt/tunarr" "*linux-x64" - msg_info "Starting ${APP}" + msg_info "Starting Service" systemctl start tunarr - msg_ok "Started ${APP}" - - msg_ok "Updated Successfully" + msg_ok "Started Service" + msg_ok "Update Successfully" fi if check_for_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg"; then - msg_info "Stopping ${APP}" + msg_info "Stopping Service" systemctl stop tunarr - msg_ok "Stopped ${APP}" + msg_ok "Stopped Service" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz" @@ -58,10 +57,10 @@ function update_script() { ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe msg_ok "ffmpeg links set" - msg_info "Starting ${APP}" + msg_info "Starting Service" systemctl start tunarr - msg_ok "Started ${APP}" - msg_ok "Updated Successfully" + msg_ok "Started Service" + msg_ok "Update Successfully" fi exit } From 6d907e50ed96b211be9bf348bf83a9623baf716c Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:03:51 +0200 Subject: [PATCH 29/53] fixes --- ct/tunarr.sh | 8 ++++++-- install/tunarr-install.sh | 32 +++++++++++++++++++------------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/ct/tunarr.sh b/ct/tunarr.sh index cc8d2aed..0934e9a8 100644 --- a/ct/tunarr.sh +++ b/ct/tunarr.sh @@ -32,8 +32,12 @@ function update_script() { msg_ok "Stopped Service" msg_info "Creating Backup" - tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /usr/.local/share/tunarr - msg_ok "Backup Created" + if [ -d "/usr/local/share/tunarr" ]; then + tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /usr/local/share/tunarr $STD + msg_ok "Backup Created" + else + msg_error "Backup failed: /usr/local/share/tunarr does not exist" + fi CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "singlefile" "latest" "/opt/tunarr" "*linux-x64" diff --git a/install/tunarr-install.sh b/install/tunarr-install.sh index 854db713..b93e569d 100644 --- a/install/tunarr-install.sh +++ b/install/tunarr-install.sh @@ -27,22 +27,27 @@ msg_ok "Set Up Hardware Acceleration" read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 12 only)? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then msg_info "Installing Intel Hardware Acceleration (non-free)" - cat </etc/apt/sources.list.d/non-free.list + cat <<'EOF' >/etc/apt/sources.list.d/non-free.sources +Types: deb deb-src +URIs: http://deb.debian.org/debian +Suites: trixie +Components: non-free non-free-firmware -deb http://deb.debian.org/debian bookworm non-free non-free-firmware -deb-src http://deb.debian.org/debian bookworm non-free non-free-firmware +Types: deb deb-src +URIs: http://deb.debian.org/debian-security +Suites: trixie-security +Components: non-free non-free-firmware -deb http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware -deb-src http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware - -deb http://deb.debian.org/debian bookworm-updates non-free non-free-firmware -deb-src http://deb.debian.org/debian bookworm-updates non-free non-free-firmware +Types: deb deb-src +URIs: http://deb.debian.org/debian +Suites: trixie-updates +Components: non-free non-free-firmware EOF - $STD apt-get update - $STD apt-get -y install {intel-media-va-driver-non-free,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} + $STD apt update + $STD apt -y install {intel-media-va-driver-non-free,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} else msg_info "Installing Intel Hardware Acceleration" - $STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} + $STD apt -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} fi msg_ok "Installed and Set Up Intel Hardware Acceleration" @@ -80,6 +85,7 @@ motd_ssh customize msg_info "Cleaning up" -$STD apt-get -y autoremove -$STD apt-get -y autoclean +$STD apt -y autoremove +$STD apt -y autoclean +$STD apt -y clean msg_ok "Cleaned" From 703c4d96b572a648393b415580616dc1a003221e Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:04:32 +0200 Subject: [PATCH 30/53] Update tunarr.json --- frontend/public/json/tunarr.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/public/json/tunarr.json b/frontend/public/json/tunarr.json index d77f28d1..5529ab51 100644 --- a/frontend/public/json/tunarr.json +++ b/frontend/public/json/tunarr.json @@ -12,7 +12,7 @@ "interface_port": 8000, "documentation": "https://tunarr.com/", "website": "https://tunarr.com/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/tunarr.png", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tunarr.webp", "description": "Create a classic TV experience using your own media - IPTV backed by Plex/Jellyfin/Emby.", "install_methods": [ { @@ -23,7 +23,7 @@ "ram": 1024, "hdd": 5, "os": "Debian", - "version": "12" + "version": "13" } } ], From d2e2b33c83f48e7909344897dbff598c35285656 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:09:17 +0200 Subject: [PATCH 31/53] Update build.func --- misc/build.func | 146 ++++++++++++++++++++++++------------------------ 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/misc/build.func b/misc/build.func index c112f27d..ecff0329 100644 --- a/misc/build.func +++ b/misc/build.func @@ -32,93 +32,93 @@ variables() { # - Local cache: /usr/local/community-scripts/core # ----------------------------------------------------------------------------- -FUNC_DIR="/usr/local/community-scripts/core" -mkdir -p "$FUNC_DIR" +# FUNC_DIR="/usr/local/community-scripts/core" +# mkdir -p "$FUNC_DIR" -BUILD_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func" -BUILD_REV="$FUNC_DIR/build.rev" -DEVMODE="${DEVMODE:-no}" +# BUILD_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func" +# BUILD_REV="$FUNC_DIR/build.rev" +# DEVMODE="${DEVMODE:-no}" -# --- Step 1: fetch build.func content once, compute hash --- -build_content="$(curl -fsSL "$BUILD_URL")" || { - echo "❌ Failed to fetch build.func" - exit 1 -} +# # --- Step 1: fetch build.func content once, compute hash --- +# build_content="$(curl -fsSL "$BUILD_URL")" || { +# echo "❌ Failed to fetch build.func" +# exit 1 +# } -newhash=$(printf "%s" "$build_content" | sha256sum | awk '{print $1}') -oldhash=$(cat "$BUILD_REV" 2>/dev/null || echo "") +# newhash=$(printf "%s" "$build_content" | sha256sum | awk '{print $1}') +# oldhash=$(cat "$BUILD_REV" 2>/dev/null || echo "") -# --- Step 2: if build.func changed, offer update for core files --- -if [ "$newhash" != "$oldhash" ]; then - echo "⚠️ build.func changed!" +# # --- Step 2: if build.func changed, offer update for core files --- +# if [ "$newhash" != "$oldhash" ]; then +# echo "⚠️ build.func changed!" - while true; do - read -rp "Refresh local core files? [y/N/diff]: " ans - case "$ans" in - [Yy]*) - echo "$newhash" >"$BUILD_REV" +# while true; do +# read -rp "Refresh local core files? [y/N/diff]: " ans +# case "$ans" in +# [Yy]*) +# echo "$newhash" >"$BUILD_REV" - update_func_file() { - local file="$1" - local url="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/$file" - local local_path="$FUNC_DIR/$file" +# update_func_file() { +# local file="$1" +# local url="https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/$file" +# local local_path="$FUNC_DIR/$file" - echo "⬇️ Downloading $file ..." - curl -fsSL "$url" -o "$local_path" || { - echo "❌ Failed to fetch $file" - exit 1 - } - echo "✔️ Updated $file" - } +# echo "⬇️ Downloading $file ..." +# curl -fsSL "$url" -o "$local_path" || { +# echo "❌ Failed to fetch $file" +# exit 1 +# } +# echo "✔️ Updated $file" +# } - update_func_file core.func - update_func_file error_handler.func - update_func_file tools.func - break - ;; - [Dd]*) - for file in core.func error_handler.func tools.func; do - local_path="$FUNC_DIR/$file" - url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/$file" - remote_tmp="$(mktemp)" +# update_func_file core.func +# update_func_file error_handler.func +# update_func_file tools.func +# break +# ;; +# [Dd]*) +# for file in core.func error_handler.func tools.func; do +# local_path="$FUNC_DIR/$file" +# url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/$file" +# remote_tmp="$(mktemp)" - curl -fsSL "$url" -o "$remote_tmp" || continue +# curl -fsSL "$url" -o "$remote_tmp" || continue - if [ -f "$local_path" ]; then - echo "🔍 Diff for $file:" - diff -u "$local_path" "$remote_tmp" || echo "(no differences)" - else - echo "📦 New file $file will be installed" - fi +# if [ -f "$local_path" ]; then +# echo "🔍 Diff for $file:" +# diff -u "$local_path" "$remote_tmp" || echo "(no differences)" +# else +# echo "📦 New file $file will be installed" +# fi - rm -f "$remote_tmp" - done - ;; - *) - echo "❌ Skipped updating local core files" - break - ;; - esac - done -else - if [ "$DEVMODE" != "yes" ]; then - echo "✔️ build.func unchanged → using existing local core files" - fi -fi +# rm -f "$remote_tmp" +# done +# ;; +# *) +# echo "❌ Skipped updating local core files" +# break +# ;; +# esac +# done +# else +# if [ "$DEVMODE" != "yes" ]; then +# echo "✔️ build.func unchanged → using existing local core files" +# fi +# fi -if [ -n "${_COMMUNITY_SCRIPTS_LOADER:-}" ]; then - return 0 2>/dev/null || exit 0 -fi -_COMMUNITY_SCRIPTS_LOADER=1 +# if [ -n "${_COMMUNITY_SCRIPTS_LOADER:-}" ]; then +# return 0 2>/dev/null || exit 0 +# fi +# _COMMUNITY_SCRIPTS_LOADER=1 -# --- Step 3: always source local versions of the core files --- -source "$FUNC_DIR/core.func" -source "$FUNC_DIR/error_handler.func" -source "$FUNC_DIR/tools.func" +# # --- Step 3: always source local versions of the core files --- +# source "$FUNC_DIR/core.func" +# source "$FUNC_DIR/error_handler.func" +# source "$FUNC_DIR/tools.func" -# --- Step 4: finally, source build.func directly from memory --- -# (no tmp file needed) -source <(printf "%s" "$build_content") +# # --- Step 4: finally, source build.func directly from memory --- +# # (no tmp file needed) +# source <(printf "%s" "$build_content") # ------------------------------------------------------------------------------ # Load core + error handler functions from community-scripts repo From d4b006aec1959cfa5d135826771dfe33e40fd258 Mon Sep 17 00:00:00 2001 From: tremor021 Date: Fri, 19 Sep 2025 09:10:54 +0200 Subject: [PATCH 32/53] Add Outline for testing --- ct/outline.sh | 67 ++++++++++++++++++++++++++++ install/outline-install.sh | 90 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 ct/outline.sh create mode 100644 install/outline-install.sh diff --git a/ct/outline.sh b/ct/outline.sh new file mode 100644 index 00000000..c94eb63b --- /dev/null +++ b/ct/outline.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: Slaviša Arežina (tremor021) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/outline/outline + +APP="Outline" +var_tags="${var_tags:-documentation}" +var_disk="${var_disk:-8}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-4096}" +var_os="${var_os:-debian}" +var_version="${var_version:-12}" +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/outline ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "outline" "outline/outline"; then + msg_info "Stopping Services" + systemctl stop outline + msg_ok "Services Stopped" + + msg_info "Creating backup" + cp /opt/outline/.env /opt + msg_ok "Backup created" + + fetch_and_deploy_gh_release "outline" "outline/outline" "tarball" + + msg_info "Updating ${APP}" + cd /opt/outline + mv /opt/.env /opt/outline + export NODE_ENV=development + export NODE_OPTIONS="--max-old-space-size=3584" + $STD yarn install --frozen-lockfile + export NODE_ENV=production + $STD yarn build + msg_ok "Updated ${APP}" + + msg_info "Starting Services" + systemctl start outline + msg_ok "Started Services" + msg_ok "Updated Successfully" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/install/outline-install.sh b/install/outline-install.sh new file mode 100644 index 00000000..068d1b38 --- /dev/null +++ b/install/outline-install.sh @@ -0,0 +1,90 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: Slaviša Arežina (tremor021) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/outline/outline + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt-get install -y \ + mkcert \ + git \ + redis +msg_ok "Installed Dependencies" + +NODE_VERSION="20" NODE_MODULE="yarn@latest" setup_nodejs +PG_VERSION="16" setup_postgresql + +msg_info "Set up PostgreSQL Database" +DB_NAME="outline" +DB_USER="outline" +DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)" +$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';" +$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;" +$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';" +$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';" +$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';" +{ + echo "Outline-Credentials" + echo "Outline Database User: $DB_USER" + echo "Outline Database Password: $DB_PASS" + echo "Outline Database Name: $DB_NAME" +} >>~/outline.creds +msg_ok "Set up PostgreSQL Database" + +fetch_and_deploy_gh_release "outline" "outline/outline" "tarball" + +msg_info "Configuring Outline (Patience)" +SECRET_KEY="$(openssl rand -hex 32)" +LOCAL_IP="$(hostname -I | awk '{print $1}')" +cd /opt/outline +cp .env.sample .env +export NODE_ENV=development +sed -i 's/NODE_ENV=production/NODE_ENV=development/g' /opt/outline/.env +sed -i "s/generate_a_new_key/${SECRET_KEY}/g" /opt/outline/.env +sed -i "s/user:pass@postgres/${DB_USER}:${DB_PASS}@localhost/g" /opt/outline/.env +sed -i 's/redis:6379/localhost:6379/g' /opt/outline/.env +sed -i "5s#URL=#URL=http://${LOCAL_IP}#g" /opt/outline/.env +sed -i 's/FORCE_HTTPS=true/FORCE_HTTPS=false/g' /opt/outline/.env +export NODE_OPTIONS="--max-old-space-size=3584" +$STD yarn install --frozen-lockfile +export NODE_ENV=production +sed -i 's/NODE_ENV=development/NODE_ENV=production/g' /opt/outline/.env +$STD yarn build +msg_ok "Configured Outline" + +msg_info "Creating Service" +cat </etc/systemd/system/outline.service +[Unit] +Description=Outline Service +After=network.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/outline +ExecStart=/usr/bin/yarn start +Restart=always +EnvironmentFile=/opt/outline/.env + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now outline +msg_ok "Created Service" + +motd_ssh +customize + +msg_info "Cleaning up" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" From 53d5127c5ad8d326bb5ce6c95ee18b5870f7a3f7 Mon Sep 17 00:00:00 2001 From: tremor021 Date: Fri, 19 Sep 2025 09:13:40 +0200 Subject: [PATCH 33/53] Update Outline --- ct/outline.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/outline.sh b/ct/outline.sh index c94eb63b..41bfa2fb 100644 --- a/ct/outline.sh +++ b/ct/outline.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: Slaviša Arežina (tremor021) # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE From 14bac9468fd87efb0e95166fd150c5cdf5799fe0 Mon Sep 17 00:00:00 2001 From: tremor021 Date: Fri, 19 Sep 2025 09:23:39 +0200 Subject: [PATCH 34/53] Pin Outline version --- install/outline-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/outline-install.sh b/install/outline-install.sh index 068d1b38..ed496101 100644 --- a/install/outline-install.sh +++ b/install/outline-install.sh @@ -40,7 +40,7 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';" } >>~/outline.creds msg_ok "Set up PostgreSQL Database" -fetch_and_deploy_gh_release "outline" "outline/outline" "tarball" +fetch_and_deploy_gh_release "outline" "outline/outline" "tarball" "v0.87.3" msg_info "Configuring Outline (Patience)" SECRET_KEY="$(openssl rand -hex 32)" From d3c0a0773d564836b6ab7157c3fb5881c5921bb0 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:35:04 +0200 Subject: [PATCH 35/53] Refactor backup and package install in tunarr scripts Removes backup creation from the tunarr update script to streamline the update process. Refactors package installation in the install script for better readability and updates messaging for open package installation. --- ct/tunarr.sh | 8 -------- install/tunarr-install.sh | 15 ++++++++++++--- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/ct/tunarr.sh b/ct/tunarr.sh index 0934e9a8..f0ed721a 100644 --- a/ct/tunarr.sh +++ b/ct/tunarr.sh @@ -31,14 +31,6 @@ function update_script() { systemctl stop tunarr msg_ok "Stopped Service" - msg_info "Creating Backup" - if [ -d "/usr/local/share/tunarr" ]; then - tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /usr/local/share/tunarr $STD - msg_ok "Backup Created" - else - msg_error "Backup failed: /usr/local/share/tunarr does not exist" - fi - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "singlefile" "latest" "/opt/tunarr" "*linux-x64" msg_info "Starting Service" diff --git a/install/tunarr-install.sh b/install/tunarr-install.sh index b93e569d..4039de2f 100644 --- a/install/tunarr-install.sh +++ b/install/tunarr-install.sh @@ -43,11 +43,20 @@ URIs: http://deb.debian.org/debian Suites: trixie-updates Components: non-free non-free-firmware EOF + $STD apt update - $STD apt -y install {intel-media-va-driver-non-free,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} + $STD apt -y install \ + intel-media-va-driver-non-free \ + ocl-icd-libopencl1 \ + vainfo \ + intel-gpu-tools else - msg_info "Installing Intel Hardware Acceleration" - $STD apt -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} + msg_info "Installing Intel Hardware Acceleration (open packages)" + $STD apt -y install \ + va-driver-all \ + ocl-icd-libopencl1 \ + vainfo \ + intel-gpu-tools fi msg_ok "Installed and Set Up Intel Hardware Acceleration" From 177e45cc2325aa904d52f06390b8e2aba51ddef8 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:35:40 +0200 Subject: [PATCH 36/53] Update tunarr-install.sh --- install/tunarr-install.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/install/tunarr-install.sh b/install/tunarr-install.sh index 4039de2f..9efb8614 100644 --- a/install/tunarr-install.sh +++ b/install/tunarr-install.sh @@ -48,6 +48,10 @@ EOF $STD apt -y install \ intel-media-va-driver-non-free \ ocl-icd-libopencl1 \ + mesa-opencl-icd \ + mesa-va-drivers \ + libmfx1 \ + libvpl2 \ vainfo \ intel-gpu-tools else @@ -55,6 +59,8 @@ else $STD apt -y install \ va-driver-all \ ocl-icd-libopencl1 \ + mesa-opencl-icd \ + mesa-va-drivers \ vainfo \ intel-gpu-tools fi From c2ee70029ded6443d9d613405e77973a8d04be08 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:38:33 +0200 Subject: [PATCH 37/53] Refactor hardware acceleration setup in install script Improves package installation formatting, removes unnecessary device permission changes, and updates prompt to reference Debian 13 for the non-free Intel driver. Also refines user group addition commands for clarity and reliability. --- install/tunarr-install.sh | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/install/tunarr-install.sh b/install/tunarr-install.sh index 9efb8614..606ea4ef 100644 --- a/install/tunarr-install.sh +++ b/install/tunarr-install.sh @@ -14,17 +14,18 @@ network_check update_os msg_info "Setting Up Hardware Acceleration" -$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools} +$STD apt-get -y install \ + va-driver-all \ + ocl-icd-libopencl1 \ + vainfo \ + intel-gpu-tools if [[ "$CTTYPE" == "0" ]]; then - chgrp video /dev/dri - chmod 755 /dev/dri - chmod 660 /dev/dri/* - $STD adduser $(id -u -n) video - $STD adduser $(id -u -n) render + $STD adduser "$(id -un)" video + $STD adduser "$(id -un)" render fi -msg_ok "Set Up Hardware Acceleration" +msg_ok "Base Hardware Acceleration Set Up" -read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 12 only)? " prompt +read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 13 only)? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then msg_info "Installing Intel Hardware Acceleration (non-free)" cat <<'EOF' >/etc/apt/sources.list.d/non-free.sources From 91d2f5f5eedf0e5d9b90e9144240c0bb95db40b9 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:51:14 +0200 Subject: [PATCH 38/53] Update tunarr-install.sh --- install/tunarr-install.sh | 6 ------ 1 file changed, 6 deletions(-) diff --git a/install/tunarr-install.sh b/install/tunarr-install.sh index 606ea4ef..ebad1df2 100644 --- a/install/tunarr-install.sh +++ b/install/tunarr-install.sh @@ -14,11 +14,6 @@ network_check update_os msg_info "Setting Up Hardware Acceleration" -$STD apt-get -y install \ - va-driver-all \ - ocl-icd-libopencl1 \ - vainfo \ - intel-gpu-tools if [[ "$CTTYPE" == "0" ]]; then $STD adduser "$(id -un)" video $STD adduser "$(id -un)" render @@ -51,7 +46,6 @@ EOF ocl-icd-libopencl1 \ mesa-opencl-icd \ mesa-va-drivers \ - libmfx1 \ libvpl2 \ vainfo \ intel-gpu-tools From 1ac0e0e792922a7e8c57ba01da35b042a4e61498 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:55:41 +0200 Subject: [PATCH 39/53] Update outline.sh --- ct/outline.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/outline.sh b/ct/outline.sh index 41bfa2fb..24a42b12 100644 --- a/ct/outline.sh +++ b/ct/outline.sh @@ -37,7 +37,7 @@ function update_script() { cp /opt/outline/.env /opt msg_ok "Backup created" - fetch_and_deploy_gh_release "outline" "outline/outline" "tarball" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "outline" "outline/outline" "tarball" msg_info "Updating ${APP}" cd /opt/outline From 37e6c5070e66a7211c536e35be821a016e3d5fa7 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 19 Sep 2025 07:55:57 +0000 Subject: [PATCH 40/53] Update .app files --- ct/headers/outline | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ct/headers/outline diff --git a/ct/headers/outline b/ct/headers/outline new file mode 100644 index 00000000..66e98f4d --- /dev/null +++ b/ct/headers/outline @@ -0,0 +1,6 @@ + ____ __ ___ + / __ \__ __/ /_/ (_)___ ___ + / / / / / / / __/ / / __ \/ _ \ +/ /_/ / /_/ / /_/ / / / / / __/ +\____/\__,_/\__/_/_/_/ /_/\___/ + From a03d46f5b2fa0210f047ad98637c289ec55fc0d0 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 19 Sep 2025 11:03:21 +0200 Subject: [PATCH 41/53] Update build.func --- misc/build.func | 72 +++++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 38 deletions(-) diff --git a/misc/build.func b/misc/build.func index ecff0329..8ad9ec13 100644 --- a/misc/build.func +++ b/misc/build.func @@ -2372,47 +2372,43 @@ EOF if [ "$var_os" != "alpine" ]; then msg_info "Waiting for network in LXC container" sleep 2 + for i in {1..10}; do - # 1. Primary check: ICMP ping (fastest, but may be blocked by ISP/firewall) - if pct exec "$CTID" -- ping -c1 -W1 deb.debian.org >/dev/null 2>&1; then - msg_ok "Network in LXC is reachable (ping)" - break + # --- Check 1: Has CT an IP? --- + ip_in_lxc=$(pct exec "$CTID" -- ip -4 addr show dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) + if [ -z "$ip_in_lxc" ]; then + msg_warn "No IP in LXC yet (try $i/10) – waiting..." + sleep 3 + continue fi - # Wait and retry if not reachable yet - if [ "$i" -lt 10 ]; then - if [ "$i" -le 3 ]; then - sleep 2 - else - msg_warn "No network in LXC yet (try $i/10) – waiting..." - sleep 3 - fi - else - # After 10 unsuccessful ping attempts, try HTTP connectivity via wget as fallback - msg_warn "Ping failed 10 times. Trying HTTP connectivity check (wget) as fallback..." - if pct exec "$CTID" -- wget -q --spider http://deb.debian.org; then - msg_ok "Network in LXC is reachable (wget fallback)" - else - msg_error "No network in LXC after all checks." - read -r -p "Set fallback DNS (1.1.1.1/8.8.8.8)? [y/N]: " choice - case "$choice" in - [yY]*) - pct set "$CTID" --nameserver 1.1.1.1 - pct set "$CTID" --nameserver 8.8.8.8 - # Final attempt with wget after DNS change - if pct exec "$CTID" -- wget -q --spider http://deb.debian.org; then - msg_ok "Network reachable after DNS fallback" - else - msg_error "Still no network/DNS in LXC! Aborting customization." - exit_script - fi - ;; - *) - msg_error "Aborted by user – no DNS fallback set." - exit_script - ;; - esac - fi + + # --- Check 2: Can reach gateway? --- + if ! pct exec "$CTID" -- ping -c1 -W1 "$GATEWAY" >/dev/null 2>&1; then + msg_warn "CT $CTID has IP $ip_in_lxc but cannot reach gateway $GATEWAY (try $i/10)" + sleep 3 + continue + fi + + # --- Check 3: Can resolve DNS? --- + if pct exec "$CTID" -- getent hosts deb.debian.org >/dev/null 2>&1; then + msg_ok "Network in LXC is reachable (DNS OK, IP $ip_in_lxc)" break + else + msg_warn "CT $CTID has IP $ip_in_lxc, gateway OK, but DNS failed (try $i/10)" + sleep 3 + fi + + # --- End of loop fallback --- + if [ "$i" -eq 10 ]; then + msg_warn "DNS still failing after 10 attempts. Applying fallback resolv.conf..." + pct exec "$CTID" -- bash -c 'echo "nameserver 1.1.1.1" > /etc/resolv.conf && echo "nameserver 8.8.8.8" >> /etc/resolv.conf' + + if pct exec "$CTID" -- getent hosts deb.debian.org >/dev/null 2>&1; then + msg_ok "Network reachable after DNS fallback" + else + msg_error "Still no DNS/network in LXC! Aborting customization." + exit_script + fi fi done fi From 419c780153c8b5cd3f9c2dc4fd6706ddaaef683d Mon Sep 17 00:00:00 2001 From: Cobalt <65132371+cobaltgit@users.noreply.github.com> Date: Thu, 18 Sep 2025 10:57:40 +0100 Subject: [PATCH 42/53] alpine-caddy: change name and slug in frontend json --- frontend/public/json/caddy.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/public/json/caddy.json b/frontend/public/json/caddy.json index 0f59a88d..607a9f7e 100644 --- a/frontend/public/json/caddy.json +++ b/frontend/public/json/caddy.json @@ -1,6 +1,6 @@ { - "name": "Alpine-Caddy", - "slug": "alpine-caddy", + "name": "Caddy", + "slug": "caddy", "categories": [ 21 ], From e9d15d413ee13949a1541ea1dddea9ef61f2e496 Mon Sep 17 00:00:00 2001 From: cobaltgit Date: Thu, 18 Sep 2025 17:40:53 +0100 Subject: [PATCH 43/53] ct: add alpine-ntfy todo: add json, change port to 80 --- ct/alpine-ntfy.sh | 43 ++++++++++++++++++++++++++++++++++ ct/ntfy.sh | 1 + install/alpine-ntfy-install.sh | 24 +++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 ct/alpine-ntfy.sh create mode 100644 ct/ntfy.sh create mode 100644 install/alpine-ntfy-install.sh diff --git a/ct/alpine-ntfy.sh b/ct/alpine-ntfy.sh new file mode 100644 index 00000000..2fdba679 --- /dev/null +++ b/ct/alpine-ntfy.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: cobalt (cobaltgit) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://ntfy.sh/ + +APP="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.22}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +init_error_traps + +function update_script() { + header_info + check_container_storage + check_container_resources + if [[ ! -d /var ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + msg_info "Updating $APP LXC" + $STD apk -U upgrade + msg_ok "Updated $APP LXC" + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" diff --git a/ct/ntfy.sh b/ct/ntfy.sh new file mode 100644 index 00000000..c2c61a72 --- /dev/null +++ b/ct/ntfy.sh @@ -0,0 +1 @@ +# placeholder for CI/CD to run diff --git a/install/alpine-ntfy-install.sh b/install/alpine-ntfy-install.sh new file mode 100644 index 00000000..85e123e7 --- /dev/null +++ b/install/alpine-ntfy-install.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 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 +init_error_traps +setting_up_container +network_check +update_os + +msg_info "Installing ntfy" +$STD apk add --no-cache ntfy ntfy-openrc +$STD rc-update add ntfy default +$STD service ntfy start +msg_ok "Installed ntfy" + +motd_ssh +customize + From 0f774893149e5bf2fc9a82f386ff92b2e828715b Mon Sep 17 00:00:00 2001 From: cobaltgit Date: Thu, 18 Sep 2025 17:42:22 +0100 Subject: [PATCH 44/53] alpine-ntfy: add json --- frontend/public/json/ntfy.json | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 frontend/public/json/ntfy.json diff --git a/frontend/public/json/ntfy.json b/frontend/public/json/ntfy.json new file mode 100644 index 00000000..0bc32bbc --- /dev/null +++ b/frontend/public/json/ntfy.json @@ -0,0 +1,47 @@ +{ + "name": "ntfy", + "slug": "ntfy", + "categories": [ + 19 + ], + "date_created": "2024-05-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 80, + "documentation": "https://docs.ntfy.sh/", + "website": "https://ntfy.sh/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/ntfy.webp", + "config_path": "/etc/ntfy/server.yml", + "description": "ntfy (pronounced notify) is a simple HTTP-based pub-sub notification service. It allows you to send notifications to your phone or desktop via scripts from any computer, and/or using a REST API. It's infinitely flexible, and 100% free software.", + "install_methods": [ + { + "type": "default", + "script": "ct/ntfy.sh", + "resources": { + "cpu": 1, + "ram": 512, + "hdd": 2, + "os": "debian", + "version": "12" + } + }, + { + "type": "alpine", + "script": "ct/alpine-ntfy.sh", + "resources": { + "cpu": 1, + "ram": 256, + "hdd": 2, + "os": "alpine", + "version": "3.22" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} + From 331f7c31f9047a415c5d182d9eb2dab80920babc Mon Sep 17 00:00:00 2001 From: cobaltgit Date: Thu, 18 Sep 2025 17:58:49 +0100 Subject: [PATCH 45/53] alpine-ntfy: use setcap and bind to 80 --- ct/alpine-ntfy.sh | 3 ++- install/alpine-ntfy-install.sh | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ct/alpine-ntfy.sh b/ct/alpine-ntfy.sh index 2fdba679..11892490 100644 --- a/ct/alpine-ntfy.sh +++ b/ct/alpine-ntfy.sh @@ -23,12 +23,13 @@ function update_script() { header_info check_container_storage check_container_resources - if [[ ! -d /var ]]; then + if [[ ! -d /etc/ntfy ]]; then msg_error "No ${APP} Installation Found!" exit fi msg_info "Updating $APP LXC" $STD apk -U upgrade + setcap 'cap_net_bind_service=+ep' /usr/bin/ntfy msg_ok "Updated $APP LXC" exit } diff --git a/install/alpine-ntfy-install.sh b/install/alpine-ntfy-install.sh index 85e123e7..0369e896 100644 --- a/install/alpine-ntfy-install.sh +++ b/install/alpine-ntfy-install.sh @@ -14,7 +14,9 @@ network_check update_os msg_info "Installing ntfy" -$STD apk add --no-cache ntfy ntfy-openrc +$STD apk add --no-cache ntfy ntfy-openrc libcap +sed -i '/^listen-http/s/^\(.*\)$/#\1\n/' /etc/ntfy/server.yml # listen on port 80 +setcap 'cap_net_bind_service=+ep' /usr/bin/ntfy # work around permission denied error when binding to :80 $STD rc-update add ntfy default $STD service ntfy start msg_ok "Installed ntfy" From 05a8a13bfd65c8ad98019ada2e3ef1bb6dacf5cb Mon Sep 17 00:00:00 2001 From: cobaltgit Date: Thu, 18 Sep 2025 18:00:08 +0100 Subject: [PATCH 46/53] alpine-ntfy: rename app to alpine-ntfy --- ct/alpine-ntfy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/alpine-ntfy.sh b/ct/alpine-ntfy.sh index 11892490..f1cf340c 100644 --- a/ct/alpine-ntfy.sh +++ b/ct/alpine-ntfy.sh @@ -5,7 +5,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE # Source: https://ntfy.sh/ -APP="ntfy" +APP="Alpine-ntfy" var_tags="${var_tags:-notification}" var_cpu="${var_cpu:-1}" var_ram="${var_ram:-256}" From 0e0352c2f9e7b7b14bfd28427e44c448f08d87ac Mon Sep 17 00:00:00 2001 From: cobaltgit Date: Thu, 18 Sep 2025 18:00:58 +0100 Subject: [PATCH 47/53] alpine-ntfy: restart ntfy after update --- ct/alpine-ntfy.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ct/alpine-ntfy.sh b/ct/alpine-ntfy.sh index f1cf340c..94e47f77 100644 --- a/ct/alpine-ntfy.sh +++ b/ct/alpine-ntfy.sh @@ -31,6 +31,10 @@ function update_script() { $STD apk -U upgrade setcap 'cap_net_bind_service=+ep' /usr/bin/ntfy msg_ok "Updated $APP LXC" + + msg_info "Restarting ntfy" + rc-service ntfy restart + msg_ok "Restarted ntfy" exit } From 8770140fc49418ae8ea762bfa910aaba0686d53d Mon Sep 17 00:00:00 2001 From: cobaltgit Date: Thu, 18 Sep 2025 18:02:03 +0100 Subject: [PATCH 48/53] alpine-caddy: revert thingy, forgot to change branch n allat --- frontend/public/json/caddy.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/public/json/caddy.json b/frontend/public/json/caddy.json index 607a9f7e..0f59a88d 100644 --- a/frontend/public/json/caddy.json +++ b/frontend/public/json/caddy.json @@ -1,6 +1,6 @@ { - "name": "Caddy", - "slug": "caddy", + "name": "Alpine-Caddy", + "slug": "alpine-caddy", "categories": [ 21 ], From 0207cdbc925fbaabfc8817fbd39075ae204e1309 Mon Sep 17 00:00:00 2001 From: cobaltgit Date: Thu, 18 Sep 2025 18:06:54 +0100 Subject: [PATCH 49/53] alpine-caddy: remove commands, listen on 8080 for now? --- install/alpine-ntfy-install.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/install/alpine-ntfy-install.sh b/install/alpine-ntfy-install.sh index 0369e896..85e123e7 100644 --- a/install/alpine-ntfy-install.sh +++ b/install/alpine-ntfy-install.sh @@ -14,9 +14,7 @@ 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 # listen on port 80 -setcap 'cap_net_bind_service=+ep' /usr/bin/ntfy # work around permission denied error when binding to :80 +$STD apk add --no-cache ntfy ntfy-openrc $STD rc-update add ntfy default $STD service ntfy start msg_ok "Installed ntfy" From 73e7b0d9f350d27fec9e6834bb12d6b0949ffe44 Mon Sep 17 00:00:00 2001 From: cobaltgit Date: Thu, 18 Sep 2025 18:08:10 +0100 Subject: [PATCH 50/53] alpine-ntfy: revert, and lament using the wrong commit message HAH ohh it was comments, not commands --- install/alpine-ntfy-install.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/install/alpine-ntfy-install.sh b/install/alpine-ntfy-install.sh index 85e123e7..4fc3f89c 100644 --- a/install/alpine-ntfy-install.sh +++ b/install/alpine-ntfy-install.sh @@ -14,7 +14,9 @@ network_check update_os msg_info "Installing ntfy" -$STD apk add --no-cache ntfy ntfy-openrc +$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" From ef76064f7c9b3a728ee803a38d6a99802abdb9da Mon Sep 17 00:00:00 2001 From: cobaltgit Date: Thu, 18 Sep 2025 18:17:22 +0100 Subject: [PATCH 51/53] alpine-ntfy: add header --- ct/headers/alpine-ntfy | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ct/headers/alpine-ntfy diff --git a/ct/headers/alpine-ntfy b/ct/headers/alpine-ntfy new file mode 100644 index 00000000..bc416434 --- /dev/null +++ b/ct/headers/alpine-ntfy @@ -0,0 +1,6 @@ + ___ __ _ __ ____ + / | / /___ (_)___ ___ ____ / /_/ __/_ __ + / /| | / / __ \/ / __ \/ _ \______/ __ \/ __/ /_/ / / / + / ___ |/ / /_/ / / / / / __/_____/ / / / /_/ __/ /_/ / +/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/\__/_/ \__, / + /_/ /____/ From 06e2ed38a003ccd46e53fd39e73974262a98982b Mon Sep 17 00:00:00 2001 From: cobaltgit Date: Thu, 18 Sep 2025 19:06:16 +0100 Subject: [PATCH 52/53] alpine-ntfy: revert header --- ct/headers/alpine-ntfy | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 ct/headers/alpine-ntfy diff --git a/ct/headers/alpine-ntfy b/ct/headers/alpine-ntfy deleted file mode 100644 index bc416434..00000000 --- a/ct/headers/alpine-ntfy +++ /dev/null @@ -1,6 +0,0 @@ - ___ __ _ __ ____ - / | / /___ (_)___ ___ ____ / /_/ __/_ __ - / /| | / / __ \/ / __ \/ _ \______/ __ \/ __/ /_/ / / / - / ___ |/ / /_/ / / / / / __/_____/ / / / /_/ __/ /_/ / -/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/\__/_/ \__, / - /_/ /____/ From f2271e46fdb078bdcf4af1e0391aff8a2102db5a Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 19 Sep 2025 09:44:33 +0000 Subject: [PATCH 53/53] Update .app files --- ct/headers/alpine-ntfy | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ct/headers/alpine-ntfy diff --git a/ct/headers/alpine-ntfy b/ct/headers/alpine-ntfy new file mode 100644 index 00000000..bc416434 --- /dev/null +++ b/ct/headers/alpine-ntfy @@ -0,0 +1,6 @@ + ___ __ _ __ ____ + / | / /___ (_)___ ___ ____ / /_/ __/_ __ + / /| | / / __ \/ / __ \/ _ \______/ __ \/ __/ /_/ / / / + / ___ |/ / /_/ / / / / / __/_____/ / / / /_/ __/ /_/ / +/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/\__/_/ \__, / + /_/ /____/