From 95ddaf0f225c608800901c7a24fd1feac33ddf4d Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Sat, 20 Jun 2026 08:34:00 +1000 Subject: [PATCH 01/98] [arm64] Port scripts between garage-hortusfox to support arm64 (#15207) * add helper function for get_arch_value * [arm64] Port scripts between garage-hortusfox to support arm64 Adds check for docker tag & arm64 in build.func and if present adds apparmor unconfined to get docker to work on non pve kernel * revert added tags, remove apparmor unconfined, move to setup_docker --- ct/garage.sh | 2 +- ct/geopulse.sh | 2 +- ct/gitea.sh | 2 +- ct/github-runner.sh | 2 +- ct/glance.sh | 2 +- ct/gluetun.sh | 2 +- ct/go2rtc.sh | 2 +- ct/gogs.sh | 2 +- ct/gokapi.sh | 2 +- ct/gotify.sh | 2 +- ct/gramps-web.sh | 2 +- ct/healthchecks.sh | 2 +- ct/hermesagent.sh | 2 +- ct/hev-socks5-server.sh | 2 +- ct/homarr.sh | 2 +- ct/homeassistant.sh | 4 ++-- ct/homebox.sh | 2 +- ct/homelable.sh | 2 +- ct/hoodik.sh | 2 +- install/docker-install.sh | 22 ++-------------------- install/garage-install.sh | 2 +- install/gitea-install.sh | 2 +- install/github-runner-install.sh | 2 +- install/glance-install.sh | 2 +- install/go2rtc-install.sh | 4 ++-- install/gogs-install.sh | 2 +- install/gokapi-install.sh | 2 +- install/gotify-install.sh | 6 +++--- install/hev-socks5-server-install.sh | 2 +- install/homarr-install.sh | 2 +- install/homeassistant-install.sh | 25 +------------------------ install/homebox-install.sh | 2 +- install/hoodik-install.sh | 2 +- install/kasm-install.sh | 4 +--- install/pelican-wings-install.sh | 8 +------- install/pterodactyl-wings-install.sh | 8 +------- 36 files changed, 41 insertions(+), 96 deletions(-) diff --git a/ct/garage.sh b/ct/garage.sh index fefc96926..b65bccc9a 100644 --- a/ct/garage.sh +++ b/ct/garage.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/geopulse.sh b/ct/geopulse.sh index 12189eb7f..8c2079a60 100644 --- a/ct/geopulse.sh +++ b/ct/geopulse.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/gitea.sh b/ct/gitea.sh index 9c0e75a07..5bc3d35e2 100644 --- a/ct/gitea.sh +++ b/ct/gitea.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/github-runner.sh b/ct/github-runner.sh index 245270c20..f2734fb4e 100644 --- a/ct/github-runner.sh +++ b/ct/github-runner.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_nesting="${var_nesting:-1}" var_keyctl="${var_keyctl:-1}" diff --git a/ct/glance.sh b/ct/glance.sh index d377c6fb5..e33a264b0 100644 --- a/ct/glance.sh +++ b/ct/glance.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/gluetun.sh b/ct/gluetun.sh index f86032460..c6cd1331a 100644 --- a/ct/gluetun.sh +++ b/ct/gluetun.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_tun="${var_tun:-yes}" diff --git a/ct/go2rtc.sh b/ct/go2rtc.sh index 36c27bc17..55635befd 100644 --- a/ct/go2rtc.sh +++ b/ct/go2rtc.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" diff --git a/ct/gogs.sh b/ct/gogs.sh index 6342738b2..f714e6d1d 100644 --- a/ct/gogs.sh +++ b/ct/gogs.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/gokapi.sh b/ct/gokapi.sh index 7164015c6..ee06611fe 100644 --- a/ct/gokapi.sh +++ b/ct/gokapi.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/gotify.sh b/ct/gotify.sh index 7b5ffbb38..c1c963bf9 100644 --- a/ct/gotify.sh +++ b/ct/gotify.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/gramps-web.sh b/ct/gramps-web.sh index 19f5190e4..287145ec7 100644 --- a/ct/gramps-web.sh +++ b/ct/gramps-web.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/healthchecks.sh b/ct/healthchecks.sh index b3704ca60..2bfb8b014 100644 --- a/ct/healthchecks.sh +++ b/ct/healthchecks.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/hermesagent.sh b/ct/hermesagent.sh index 78a2d2476..daf62e436 100644 --- a/ct/hermesagent.sh +++ b/ct/hermesagent.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/hev-socks5-server.sh b/ct/hev-socks5-server.sh index 9141aa4a1..734b118ab 100644 --- a/ct/hev-socks5-server.sh +++ b/ct/hev-socks5-server.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/homarr.sh b/ct/homarr.sh index 87d7ff2bb..df0eb342f 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/homeassistant.sh b/ct/homeassistant.sh index 67b42aa28..fd725f821 100644 --- a/ct/homeassistant.sh +++ b/ct/homeassistant.sh @@ -6,13 +6,13 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV # Source: https://www.home-assistant.io/ APP="Home Assistant" -var_tags="${var_tags:-automation;smarthome}" +var_tags="${var_tags:-automation;smarthome;docker}" var_cpu="${var_cpu:-2}" var_ram="${var_ram:-2048}" var_disk="${var_disk:-16}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/homebox.sh b/ct/homebox.sh index bc36c2547..3ebb6ea64 100644 --- a/ct/homebox.sh +++ b/ct/homebox.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/homelable.sh b/ct/homelable.sh index 8348cd529..61104b54c 100644 --- a/ct/homelable.sh +++ b/ct/homelable.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/hoodik.sh b/ct/hoodik.sh index 7acd7a3d6..65f50fbbc 100644 --- a/ct/hoodik.sh +++ b/ct/hoodik.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/install/docker-install.sh b/install/docker-install.sh index 217ee6bdb..d80909e6c 100644 --- a/install/docker-install.sh +++ b/install/docker-install.sh @@ -13,31 +13,13 @@ setting_up_container network_check update_os -DOCKER_LATEST_VERSION=$(get_latest_github_release "moby/moby") -PORTAINER_LATEST_VERSION=$(get_latest_github_release "portainer/portainer") PORTAINER_AGENT_LATEST_VERSION=$(get_latest_github_release "portainer/agent") -msg_info "Installing Docker $DOCKER_LATEST_VERSION (with Compose, Buildx)" -DOCKER_CONFIG_PATH='/etc/docker/daemon.json' -mkdir -p $(dirname $DOCKER_CONFIG_PATH) -echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json -$STD sh <(curl -fsSL https://get.docker.com) -msg_ok "Installed Docker $DOCKER_LATEST_VERSION" - read -r -p "${TAB3}Would you like to add Portainer (UI)? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - msg_info "Installing Portainer $PORTAINER_LATEST_VERSION" - docker volume create portainer_data >/dev/null - $STD docker run -d \ - -p 8000:8000 \ - -p 9443:9443 \ - --name=portainer \ - --restart=always \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -v portainer_data:/data \ - portainer/portainer-ce:latest - msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION" + DOCKER_PORTAINER="true" setup_docker else + setup_docker read -r -p "${TAB3}Would you like to install the Portainer Agent (for remote management)? " prompt_agent if [[ ${prompt_agent,,} =~ ^(y|yes)$ ]]; then msg_info "Installing Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" diff --git a/install/garage-install.sh b/install/garage-install.sh index 5ba1d24ea..92b66f7fe 100644 --- a/install/garage-install.sh +++ b/install/garage-install.sh @@ -15,7 +15,7 @@ update_os msg_info "Setup Garage" GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name') -curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage +curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage chmod +x /usr/local/bin/garage mkdir -p /var/lib/garage/{data,meta,snapshots} mkdir -p /etc/garage diff --git a/install/gitea-install.sh b/install/gitea-install.sh index fc68c7da6..83da30c41 100644 --- a/install/gitea-install.sh +++ b/install/gitea-install.sh @@ -20,7 +20,7 @@ $STD apt install -y \ sqlite3 msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-amd64" +fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-$(arch_resolve)" msg_info "Configuring Gitea" chmod +x /usr/local/bin/gitea diff --git a/install/github-runner-install.sh b/install/github-runner-install.sh index 80a9d24cf..f6ac73236 100644 --- a/install/github-runner-install.sh +++ b/install/github-runner-install.sh @@ -25,7 +25,7 @@ msg_info "Creating runner user (no sudo)" useradd -m -s /bin/bash runner msg_ok "Runner user ready" -fetch_and_deploy_gh_release "actions-runner" "actions/runner" "prebuild" "latest" "/opt/actions-runner" "actions-runner-linux-x64-*.tar.gz" +fetch_and_deploy_gh_release "actions-runner" "actions/runner" "prebuild" "latest" "/opt/actions-runner" "actions-runner-linux-$(arch_resolve "x64" "arm64")-*.tar.gz" msg_info "Setting ownership for runner user" chown -R runner:runner /opt/actions-runner diff --git a/install/glance-install.sh b/install/glance-install.sh index 2c1f97a34..2d6c8b233 100644 --- a/install/glance-install.sh +++ b/install/glance-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "glance" "glanceapp/glance" "prebuild" "latest" "/opt/glance" "glance-linux-amd64.tar.gz" +fetch_and_deploy_gh_release "glance" "glanceapp/glance" "prebuild" "latest" "/opt/glance" "glance-linux-$(arch_resolve).tar.gz" msg_info "Configuring Glance" mkdir -p /opt/glance_data diff --git a/install/go2rtc-install.sh b/install/go2rtc-install.sh index 82927161c..15db9c73b 100644 --- a/install/go2rtc-install.sh +++ b/install/go2rtc-install.sh @@ -18,7 +18,7 @@ msg_info "Installing Dependencies" $STD apt install -y ffmpeg msg_ok "Installed Dependencies" -USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_amd64" +USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_$(arch_resolve)" msg_info "Creating Service" cat </etc/systemd/system/go2rtc.service @@ -30,7 +30,7 @@ After=network.target Type=simple User=root WorkingDirectory=/opt/go2rtc -ExecStart=/opt/go2rtc/go2rtc_linux_amd64 +ExecStart=/opt/go2rtc/go2rtc_linux_$(arch_resolve) [Install] WantedBy=multi-user.target diff --git a/install/gogs-install.sh b/install/gogs-install.sh index e58e1d36c..63b168e23 100644 --- a/install/gogs-install.sh +++ b/install/gogs-install.sh @@ -17,7 +17,7 @@ msg_info "Installing Dependencies" $STD apt install -y git msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "gogs" "gogs/gogs" "prebuild" "latest" "/opt/gogs" "gogs_*_linux_amd64.tar.gz" +fetch_and_deploy_gh_release "gogs" "gogs/gogs" "prebuild" "latest" "/opt/gogs" "gogs_*_linux_$(arch_resolve).tar.gz" msg_info "Setting up Gogs" mkdir -p /opt/gogs/{custom/conf,data,log} diff --git a/install/gokapi-install.sh b/install/gokapi-install.sh index d45fa580b..3df5ddee1 100644 --- a/install/gokapi-install.sh +++ b/install/gokapi-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "gokapi" "Forceu/Gokapi" "prebuild" "latest" "/opt/gokapi" "*linux*amd64.zip" +fetch_and_deploy_gh_release "gokapi" "Forceu/Gokapi" "prebuild" "latest" "/opt/gokapi" "*linux*$(arch_resolve).zip" msg_info "Configuring Gokapi" mkdir -p /opt/gokapi/{data,config} diff --git a/install/gotify-install.sh b/install/gotify-install.sh index cab11a785..44444c74f 100644 --- a/install/gotify-install.sh +++ b/install/gotify-install.sh @@ -13,8 +13,8 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "gotify" "gotify/server" "prebuild" "latest" "/opt/gotify" "gotify-linux-amd64.zip" -chmod +x /opt/gotify/gotify-linux-amd64 +fetch_and_deploy_gh_release "gotify" "gotify/server" "prebuild" "latest" "/opt/gotify" "gotify-linux-$(arch_resolve).zip" +chmod +x /opt/gotify/gotify-linux-$(arch_resolve) msg_info "Creating Service" cat </etc/systemd/system/gotify.service @@ -27,7 +27,7 @@ After=network.target Type=simple User=root WorkingDirectory=/opt/gotify -ExecStart=/opt/gotify/./gotify-linux-amd64 +ExecStart=/opt/gotify/./gotify-linux-$(arch_resolve) Restart=always RestartSec=3 diff --git a/install/hev-socks5-server-install.sh b/install/hev-socks5-server-install.sh index ee58634b5..02871583c 100644 --- a/install/hev-socks5-server-install.sh +++ b/install/hev-socks5-server-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "hev-socks5-server" "heiher/hev-socks5-server" "singlefile" "latest" "/opt" "hev-socks5-server-linux-x86_64" +fetch_and_deploy_gh_release "hev-socks5-server" "heiher/hev-socks5-server" "singlefile" "latest" "/opt" "hev-socks5-server-linux-$(arch_resolve "x86_64" "arm64")" msg_info "Setup hev-socks5-server" mkdir -p /etc/hev-socks5-server diff --git a/install/homarr-install.sh b/install/homarr-install.sh index f8e39c3a6..f46d09c5b 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -23,7 +23,7 @@ msg_ok "Installed Dependencies" NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]') setup_nodejs -fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-debian-amd64.tar.gz" +fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-debian-$(arch_resolve).tar.gz" msg_info "Installing Homarr" mkdir -p /opt/homarr_db diff --git a/install/homeassistant-install.sh b/install/homeassistant-install.sh index 5af67d7c6..3534f2222 100644 --- a/install/homeassistant-install.sh +++ b/install/homeassistant-install.sh @@ -30,32 +30,9 @@ get_latest_release() { curl -fsSL https://api.github.com/repos/$1/releases/latest | grep '"tag_name":' | cut -d'"' -f4 } -DOCKER_LATEST_VERSION=$(get_latest_release "moby/moby") CORE_LATEST_VERSION=$(get_latest_release "home-assistant/core") -PORTAINER_LATEST_VERSION=$(get_latest_release "portainer/portainer") -msg_info "Installing Docker $DOCKER_LATEST_VERSION" -DOCKER_CONFIG_PATH='/etc/docker/daemon.json' -mkdir -p $(dirname $DOCKER_CONFIG_PATH) -echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json -$STD sh <(curl -fsSL https://get.docker.com) -msg_ok "Installed Docker $DOCKER_LATEST_VERSION" - -msg_info "Pulling Portainer $PORTAINER_LATEST_VERSION Image" -$STD docker pull portainer/portainer-ce:latest -msg_ok "Pulled Portainer $PORTAINER_LATEST_VERSION Image" - -msg_info "Installing Portainer $PORTAINER_LATEST_VERSION" -$STD docker volume create portainer_data -$STD docker run -d \ - -p 8000:8000 \ - -p 9443:9443 \ - --name=portainer \ - --restart=always \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -v portainer_data:/data \ - portainer/portainer-ce:latest -msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION" +DOCKER_PORTAINER="true" setup_docker msg_info "Pulling Home Assistant $CORE_LATEST_VERSION Image" $STD docker pull ghcr.io/home-assistant/home-assistant:stable diff --git a/install/homebox-install.sh b/install/homebox-install.sh index 065a16874..fce110b08 100644 --- a/install/homebox-install.sh +++ b/install/homebox-install.sh @@ -14,7 +14,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_x86_64.tar.gz" +fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_$(arch_resolve "x86_64" "arm64").tar.gz" msg_info "Configuring Homebox" chmod +x /opt/homebox/homebox diff --git a/install/hoodik-install.sh b/install/hoodik-install.sh index d524c503e..5cbb863e0 100644 --- a/install/hoodik-install.sh +++ b/install/hoodik-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "hoodik" "hudikhq/hoodik" "prebuild" "latest" "/opt/hoodik" "*x86_64.tar.gz" +fetch_and_deploy_gh_release "hoodik" "hudikhq/hoodik" "prebuild" "latest" "/opt/hoodik" "*$(arch_resolve "x86_64" "arm64").tar.gz" msg_info "Configuring Hoodik" mkdir -p /opt/hoodik_data diff --git a/install/kasm-install.sh b/install/kasm-install.sh index f5dbd024f..ee0a9f0e1 100644 --- a/install/kasm-install.sh +++ b/install/kasm-install.sh @@ -13,9 +13,7 @@ setting_up_container network_check update_os -msg_info "Installing Docker" -$STD sh <(curl -fsSL https://get.docker.com/) -msg_ok "Installed Docker" +setup_docker msg_info "Detecting latest Kasm Workspaces release" KASM_URL=$(curl -s https://kasm.com/downloads \ diff --git a/install/pelican-wings-install.sh b/install/pelican-wings-install.sh index 7a7674f4d..167561ea4 100644 --- a/install/pelican-wings-install.sh +++ b/install/pelican-wings-install.sh @@ -13,13 +13,7 @@ setting_up_container network_check update_os -msg_info "Installing Docker" -DOCKER_CONFIG_PATH='/etc/docker/daemon.json' -mkdir -p "$(dirname $DOCKER_CONFIG_PATH)" -echo -e '{\n "log-driver": "journald"\n}' >"$DOCKER_CONFIG_PATH" -$STD sh <(curl -fsSL https://get.docker.com) -systemctl enable -q --now docker -msg_ok "Installed Docker" +setup_docker fetch_and_deploy_gh_release "wings" "pelican-dev/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64" mkdir -p /etc/pelican /var/run/wings diff --git a/install/pterodactyl-wings-install.sh b/install/pterodactyl-wings-install.sh index 8655726cd..bbee94045 100644 --- a/install/pterodactyl-wings-install.sh +++ b/install/pterodactyl-wings-install.sh @@ -13,13 +13,7 @@ setting_up_container network_check update_os -msg_info "Installing Docker" -DOCKER_CONFIG_PATH='/etc/docker/daemon.json' -mkdir -p $(dirname $DOCKER_CONFIG_PATH) -echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json -$STD sh <(curl -fsSL https://get.docker.com) -systemctl enable -q --now docker -msg_ok "Installed Docker" +setup_docker fetch_and_deploy_gh_release "wings" "pterodactyl/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64" mkdir -p /etc/pterodactyl From 8d635c210a63cf281f7ecd617719e43c709fbac8 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Fri, 19 Jun 2026 22:34:21 +0000 Subject: [PATCH 02/98] Update CHANGELOG.md (#15231) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fce04bbaf..2d6e1679e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -495,6 +495,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### ✨ New Features + - [arm64] Port scripts between garage-hortusfox to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15207](https://github.com/community-scripts/ProxmoxVE/pull/15207)) - [arm64] Port scripts titled between A-F to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15181](https://github.com/community-scripts/ProxmoxVE/pull/15181)) ### 📂 Github From 7789f1c58c4aef47b6a817fb12db075e203e4173 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sat, 20 Jun 2026 05:23:25 +0200 Subject: [PATCH 03/98] fix(nginxproxymanager): repair broken certbot pip before update (#15224) Use ensurepip when the certbot venv pip module is missing, then upgrade via python -m pip. Co-authored-by: Cursor --- ct/nginxproxymanager.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ct/nginxproxymanager.sh b/ct/nginxproxymanager.sh index be81295a6..1be12903a 100644 --- a/ct/nginxproxymanager.sh +++ b/ct/nginxproxymanager.sh @@ -108,8 +108,13 @@ EOF cd /root if [ -d /opt/certbot ]; then msg_info "Updating Certbot" - $STD /opt/certbot/bin/pip install --upgrade pip setuptools wheel - $STD /opt/certbot/bin/pip install --upgrade certbot certbot-dns-cloudflare + CERTBOT_PYTHON="/opt/certbot/bin/python" + if ! "$CERTBOT_PYTHON" -m pip --version &>/dev/null; then + msg_info "Repairing Certbot pip" + $STD "$CERTBOT_PYTHON" -m ensurepip --upgrade + fi + $STD "$CERTBOT_PYTHON" -m pip install --upgrade pip setuptools wheel + $STD "$CERTBOT_PYTHON" -m pip install --upgrade certbot certbot-dns-cloudflare msg_ok "Updated Certbot" fi From 6c55f61efc960330dea01db3dad1fb9fa00acadf Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 03:23:50 +0000 Subject: [PATCH 04/98] Update CHANGELOG.md (#15233) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d6e1679e..fbe09c4b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -483,6 +483,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-06-20 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Nginxproxymanager: repair broken certbot pip before update [@MickLesk](https://github.com/MickLesk) ([#15224](https://github.com/community-scripts/ProxmoxVE/pull/15224)) + ## 2026-06-19 ### 🚀 Updated Scripts From 76d98edaa1cb4073f6d87cc396ffe97932212193 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 19:45:50 +1000 Subject: [PATCH 05/98] Add plane (ct) (#15227) Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> --- ct/headers/plane | 6 + ct/plane.sh | 88 +++++++++ install/plane-install.sh | 386 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 480 insertions(+) create mode 100644 ct/headers/plane create mode 100644 ct/plane.sh create mode 100644 install/plane-install.sh diff --git a/ct/headers/plane b/ct/headers/plane new file mode 100644 index 000000000..d2c671d48 --- /dev/null +++ b/ct/headers/plane @@ -0,0 +1,6 @@ + ____ __ + / __ \/ /___ _____ ___ + / /_/ / / __ `/ __ \/ _ \ + / ____/ / /_/ / / / / __/ +/_/ /_/\__,_/_/ /_/\___/ + diff --git a/ct/plane.sh b/ct/plane.sh new file mode 100644 index 000000000..845266690 --- /dev/null +++ b/ct/plane.sh @@ -0,0 +1,88 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: onionrings29 +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://plane.so | GitHub: https://github.com/makeplane/plane + +APP="Plane" +var_tags="${var_tags:-project-management}" +var_cpu="${var_cpu:-4}" +var_ram="${var_ram:-6144}" +var_disk="${var_disk:-8}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -d /opt/plane ]]; then + msg_error "No Plane Installation Found!" + exit 1 + fi + + if check_for_gh_release "plane" "makeplane/plane"; then + msg_info "Stopping Services" + systemctl stop plane-api plane-worker plane-beat plane-live plane-space + msg_ok "Stopped Services" + + create_backup /opt/plane/.env \ + /opt/plane/apps/admin/.env \ + /opt/plane/apps/api/.env \ + /opt/plane/apps/space/.env \ + /opt/plane/apps/web/.env + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "plane" "makeplane/plane" "tarball" + + restore_backup + + msg_info "Rebuilding Frontend (Patience)" + cd /opt/plane + export NODE_OPTIONS="--max-old-space-size=4096" + export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 + $STD corepack enable pnpm + $STD pnpm install --frozen-lockfile + $STD pnpm turbo run build --filter=web --filter=admin --filter=space --filter=live + msg_ok "Rebuilt Frontend" + + msg_info "Updating Python Dependencies" + cd /opt/plane/apps/api + export VIRTUAL_ENV=/opt/plane-venv + $STD uv pip install --upgrade -r requirements/production.txt + msg_ok "Updated Python Dependencies" + + msg_info "Running Migrations" + cd /opt/plane/apps/api + set -a + source /opt/plane/apps/api/.env + set +a + $STD /opt/plane-venv/bin/python manage.py migrate + $STD /opt/plane-venv/bin/python manage.py collectstatic --noinput + $STD /opt/plane-venv/bin/python manage.py configure_instance + msg_ok "Ran Migrations" + + msg_info "Starting Services" + systemctl start plane-api plane-worker plane-beat plane-live plane-space + 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}${CL}" diff --git a/install/plane-install.sh b/install/plane-install.sh new file mode 100644 index 000000000..960b2fbc6 --- /dev/null +++ b/install/plane-install.sh @@ -0,0 +1,386 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: onionrings29 +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://plane.so + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y \ + nginx \ + build-essential \ + libpq-dev \ + libxml2-dev \ + libxslt1-dev \ + libxmlsec1-dev \ + libxmlsec1-openssl \ + pkg-config \ + python3-dev \ + python3-venv \ + redis-server \ + erlang-base \ + erlang-{asn1,crypto,eldap,ftp,inets,mnesia,os-mon,parsetools} \ + erlang-{public-key,runtime-tools,snmp,ssl,syntax-tools,tftp,tools,xmerl} \ + rabbitmq-server +msg_ok "Installed Dependencies" + +NODE_VERSION="24" setup_nodejs +PG_VERSION="16" setup_postgresql +PG_DB_NAME="plane" PG_DB_USER="plane" setup_postgresql_db + +msg_info "Configuring RabbitMQ" +RABBITMQ_PASS=$(openssl rand -base64 24 | tr -dc 'a-zA-Z0-9' | head -c16) +$STD rabbitmqctl add_vhost plane +$STD rabbitmqctl add_user plane "${RABBITMQ_PASS}" +$STD rabbitmqctl set_permissions -p plane plane ".*" ".*" ".*" +msg_ok "Configured RabbitMQ" + +msg_info "Installing MinIO" +curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio -o /usr/local/bin/minio +chmod +x /usr/local/bin/minio +mkdir -p /opt/minio/data +MINIO_ACCESS_KEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16) +MINIO_SECRET_KEY=$(openssl rand -base64 36 | tr -dc 'a-zA-Z0-9' | head -c32) +cat </etc/default/minio +MINIO_ROOT_USER="${MINIO_ACCESS_KEY}" +MINIO_ROOT_PASSWORD="${MINIO_SECRET_KEY}" +MINIO_VOLUMES="/opt/minio/data" +EOF +cat </etc/systemd/system/minio.service +[Unit] +Description=MinIO Object Storage +After=network.target + +[Service] +Type=simple +EnvironmentFile=/etc/default/minio +ExecStart=/usr/local/bin/minio server \$MINIO_VOLUMES --console-address ":9090" +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now minio +msg_ok "Installed MinIO" + +fetch_and_deploy_gh_release "plane" "makeplane/plane" "tarball" + +msg_info "Building Frontend Apps (Patience)" +cd /opt/plane +FRONTEND_ENV="VITE_API_BASE_URL=http://${LOCAL_IP} +VITE_WEB_BASE_URL=http://${LOCAL_IP} +VITE_ADMIN_BASE_URL=http://${LOCAL_IP} +VITE_ADMIN_BASE_PATH=/god-mode +VITE_SPACE_BASE_URL=http://${LOCAL_IP} +VITE_SPACE_BASE_PATH=/spaces +VITE_LIVE_BASE_URL=http://${LOCAL_IP} +VITE_LIVE_BASE_PATH=/live" +# Each Vite app needs its own .env for the build +for app in web admin space; do + echo "$FRONTEND_ENV" >/opt/plane/apps/${app}/.env +done +export NODE_OPTIONS="--max-old-space-size=4096" +export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 +$STD corepack enable pnpm +$STD pnpm install --frozen-lockfile +$STD pnpm turbo run build --filter=web --filter=admin --filter=space --filter=live +msg_ok "Built Frontend Apps" + +msg_info "Setting up Python API" +setup_uv +$STD uv venv /opt/plane-venv +export VIRTUAL_ENV=/opt/plane-venv +$STD uv pip install -r /opt/plane/apps/api/requirements/production.txt +msg_ok "Set up Python API" + +msg_info "Configuring Plane" +SECRET_KEY=$(openssl rand -hex 32) +MACHINE_SIG=$(echo -n "$(hostname)-$(date +%s)" | sha256sum | head -c64) +LIVE_SECRET=$(openssl rand -hex 16) +cat </opt/plane/apps/api/.env +DEBUG=0 +CORS_ALLOWED_ORIGINS=http://${LOCAL_IP} + +POSTGRES_USER=plane +POSTGRES_PASSWORD=${PG_DB_PASS} +POSTGRES_HOST=localhost +POSTGRES_DB=plane +POSTGRES_PORT=5432 +DATABASE_URL=postgresql://plane:${PG_DB_PASS}@localhost:5432/plane + +REDIS_HOST=localhost +REDIS_PORT=6379 +REDIS_URL=redis://localhost:6379/ + +RABBITMQ_HOST=localhost +RABBITMQ_PORT=5672 +RABBITMQ_USER=plane +RABBITMQ_PASSWORD=${RABBITMQ_PASS} +RABBITMQ_VHOST=plane +AMQP_URL=amqp://plane:${RABBITMQ_PASS}@localhost:5672/plane + +AWS_REGION=us-east-1 +AWS_ACCESS_KEY_ID=${MINIO_ACCESS_KEY} +AWS_SECRET_ACCESS_KEY=${MINIO_SECRET_KEY} +AWS_S3_ENDPOINT_URL=http://localhost:9000 +AWS_S3_BUCKET_NAME=uploads +FILE_SIZE_LIMIT=104857600 + +USE_MINIO=1 +MINIO_ENDPOINT_SSL=0 +SECRET_KEY=${SECRET_KEY} +MACHINE_SIGNATURE=${MACHINE_SIG} + +WEB_URL=http://${LOCAL_IP} +ADMIN_BASE_URL=http://${LOCAL_IP} +ADMIN_BASE_PATH=/god-mode +SPACE_BASE_URL=http://${LOCAL_IP} +SPACE_BASE_PATH=/spaces +APP_BASE_URL=http://${LOCAL_IP} +APP_BASE_PATH= +LIVE_BASE_URL=http://${LOCAL_IP} +LIVE_BASE_PATH=/live + +GUNICORN_WORKERS=2 +LIVE_SERVER_SECRET_KEY=${LIVE_SECRET} +API_KEY_RATE_LIMIT=60/minute +EOF +cat </opt/plane/.env +API_BASE_URL=http://localhost:8000 +LIVE_SERVER_SECRET_KEY=${LIVE_SECRET} +REDIS_HOST=localhost +REDIS_PORT=6379 +REDIS_URL=redis://localhost:6379/ +PORT=3100 +EOF +msg_ok "Configured Plane" + +msg_info "Running Database Migrations" +cd /opt/plane/apps/api +set -a +source /opt/plane/apps/api/.env +set +a +$STD /opt/plane-venv/bin/python manage.py migrate +$STD /opt/plane-venv/bin/python manage.py collectstatic --noinput +$STD /opt/plane-venv/bin/python manage.py configure_instance +$STD /opt/plane-venv/bin/python manage.py register_instance "${MACHINE_SIG}" +msg_ok "Ran Database Migrations" + +msg_info "Creating Services and MinIO Bucket" +curl -fsSL https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/bin/mcli +chmod +x /usr/local/bin/mcli +$STD /usr/local/bin/mcli alias set plane http://localhost:9000 "${MINIO_ACCESS_KEY}" "${MINIO_SECRET_KEY}" +$STD /usr/local/bin/mcli mb plane/uploads --ignore-existing +$STD /usr/local/bin/mcli anonymous set download plane/uploads + +cat </etc/systemd/system/plane-api.service +[Unit] +Description=Plane API +After=network.target postgresql.service redis-server.service rabbitmq-server.service minio.service + +[Service] +Type=simple +WorkingDirectory=/opt/plane/apps/api +EnvironmentFile=/opt/plane/apps/api/.env +ExecStart=/opt/plane-venv/bin/gunicorn -w 2 -k uvicorn.workers.UvicornWorker plane.asgi:application --bind 0.0.0.0:8000 --max-requests 1200 --max-requests-jitter 1000 --access-logfile - +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/plane-worker.service +[Unit] +Description=Plane Celery Worker +After=plane-api.service +Requires=plane-api.service + +[Service] +Type=simple +WorkingDirectory=/opt/plane/apps/api +EnvironmentFile=/opt/plane/apps/api/.env +ExecStart=/opt/plane-venv/bin/celery -A plane worker -l info +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/plane-beat.service +[Unit] +Description=Plane Celery Beat +After=plane-api.service +Requires=plane-api.service + +[Service] +Type=simple +WorkingDirectory=/opt/plane/apps/api +EnvironmentFile=/opt/plane/apps/api/.env +ExecStart=/opt/plane-venv/bin/celery -A plane beat -l info +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/plane-live.service +[Unit] +Description=Plane Live Server +After=network.target + +[Service] +Type=simple +WorkingDirectory=/opt/plane +EnvironmentFile=/opt/plane/.env +ExecStart=/usr/bin/node apps/live/dist/start.mjs +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/plane-space.service +[Unit] +Description=Plane Space Server +After=network.target + +[Service] +Type=simple +WorkingDirectory=/opt/plane/apps/space +Environment=PORT=3002 +Environment=NODE_ENV=production +ExecStart=/opt/plane/apps/space/node_modules/.bin/react-router-serve ./build/server/index.js +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl daemon-reload +systemctl enable -q --now plane-api plane-worker plane-beat plane-live plane-space +{ + echo "RabbitMQ User: plane" + echo "RabbitMQ Password: ${RABBITMQ_PASS}" + echo "MinIO Access Key: ${MINIO_ACCESS_KEY}" + echo "MinIO Secret Key: ${MINIO_SECRET_KEY}" + echo "Secret Key: ${SECRET_KEY}" + echo "Config: /opt/plane/apps/api/.env" +} >>~/plane.creds +msg_ok "Created Services and MinIO Bucket" + +msg_info "Configuring Nginx" +cat <<'EOF' >/etc/nginx/sites-available/plane.conf +upstream plane-api { + server 127.0.0.1:8000; +} + +upstream plane-live { + server 127.0.0.1:3100; +} + +upstream plane-space { + server 127.0.0.1:3002; +} + +upstream plane-minio { + server 127.0.0.1:9000; +} + +server { + listen 80 default_server; + server_name _; + client_max_body_size 100M; + + location /api/ { + proxy_pass http://plane-api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /auth/ { + proxy_pass http://plane-api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /static/ { + alias /opt/plane/apps/api/plane/static-assets/collected-static/; + } + + location /live/ { + proxy_pass http://plane-live; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location = /uploads { + proxy_pass http://plane-minio; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + location /uploads/ { + proxy_pass http://plane-minio; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + location /spaces/ { + proxy_pass http://plane-space; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /spaces { + return 301 /spaces/; + } + + location /god-mode/ { + alias /opt/plane/apps/admin/build/client/; + try_files $uri $uri/ /god-mode/index.html; + } + + location /god-mode { + return 301 /god-mode/; + } + + location / { + root /opt/plane/apps/web/build/client; + try_files $uri $uri/ /index.html; + } +} +EOF +ln -sf /etc/nginx/sites-available/plane.conf /etc/nginx/sites-enabled/plane.conf +rm -f /etc/nginx/sites-enabled/default +$STD systemctl reload nginx +msg_ok "Configured Nginx" + +motd_ssh +customize +cleanup_lxc From d1c8711207a8d4744a061e4b9af5b04fbb8b35c3 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 19:46:09 +1000 Subject: [PATCH 06/98] Apache-Airflow (#15228) * Add apache-airflow (ct) * Fix indentation for restore_backup function call --------- Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com> --- ct/apache-airflow.sh | 75 ++++++++++++++++ ct/headers/apache-airflow | 6 ++ install/apache-airflow-install.sh | 141 ++++++++++++++++++++++++++++++ 3 files changed, 222 insertions(+) create mode 100644 ct/apache-airflow.sh create mode 100644 ct/headers/apache-airflow create mode 100644 install/apache-airflow-install.sh diff --git a/ct/apache-airflow.sh b/ct/apache-airflow.sh new file mode 100644 index 000000000..d6a331177 --- /dev/null +++ b/ct/apache-airflow.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/apache/airflow + +APP="Apache-Airflow" +var_tags="${var_tags:-workflow;scheduler;automation}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-4096}" +var_disk="${var_disk:-16}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -d /opt/airflow ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + INSTALLED=$(cat ~/.airflow 2>/dev/null || echo "0") + LATEST=$(curl -fsSL "https://pypi.org/pypi/apache-airflow/json" | jq -r '.info.version') + + if [[ "$INSTALLED" == "$LATEST" ]]; then + msg_ok "Already on the latest version (${LATEST})" + exit + fi + + msg_info "Stopping Services" + systemctl stop airflow-api-server airflow-scheduler airflow-dag-processor airflow-triggerer + msg_ok "Stopped Services" + + create_backup /opt/airflow/.env + + msg_info "Updating Apache Airflow to ${LATEST}" + $STD uv pip install --python /opt/airflow/.venv/bin/python \ + "apache-airflow[postgres,fab]==${LATEST}" \ + --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-${LATEST}/constraints-3.12.txt" + echo "${LATEST}" >~/.airflow + msg_ok "Updated Apache Airflow to ${LATEST}" + + restore_backup + + msg_info "Running Database Migrations" + set -a && source /opt/airflow/.env && set +a + $STD /opt/airflow/.venv/bin/airflow db migrate + msg_ok "Ran Database Migrations" + + msg_info "Starting Services" + systemctl start airflow-api-server airflow-scheduler airflow-dag-processor airflow-triggerer + msg_ok "Started Services" + msg_ok "Updated successfully!" + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}" diff --git a/ct/headers/apache-airflow b/ct/headers/apache-airflow new file mode 100644 index 000000000..0c0912393 --- /dev/null +++ b/ct/headers/apache-airflow @@ -0,0 +1,6 @@ + ___ __ ___ _ ______ + / | ____ ____ ______/ /_ ___ / | (_)____/ __/ /___ _ __ + / /| | / __ \/ __ `/ ___/ __ \/ _ \______/ /| | / / ___/ /_/ / __ \ | /| / / + / ___ |/ /_/ / /_/ / /__/ / / / __/_____/ ___ |/ / / / __/ / /_/ / |/ |/ / +/_/ |_/ .___/\__,_/\___/_/ /_/\___/ /_/ |_/_/_/ /_/ /_/\____/|__/|__/ + /_/ diff --git a/install/apache-airflow-install.sh b/install/apache-airflow-install.sh new file mode 100644 index 000000000..89ec4835c --- /dev/null +++ b/install/apache-airflow-install.sh @@ -0,0 +1,141 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/apache/airflow + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y \ + build-essential \ + libpq-dev \ + libssl-dev \ + libffi-dev \ + python3-dev +msg_ok "Installed Dependencies" + +UV_PYTHON="3.12" setup_uv +PG_VERSION="16" setup_postgresql +PG_DB_NAME="airflow" PG_DB_USER="airflow" setup_postgresql_db + +msg_info "Installing Apache Airflow" +AIRFLOW_VERSION="3.2.1" +mkdir -p /opt/airflow/{dags,logs,plugins} +cd /opt/airflow +$STD uv venv --python 3.12 +$STD uv pip install --python /opt/airflow/.venv/bin/python \ + "apache-airflow[postgres,fab]==${AIRFLOW_VERSION}" \ + --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-3.12.txt" +echo "${AIRFLOW_VERSION}" >~/.airflow +msg_ok "Installed Apache Airflow" + +msg_info "Configuring Application" +FERNET_KEY=$(/opt/airflow/.venv/bin/python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())") +SECRET_KEY=$(openssl rand -hex 32) +ADMIN_PASS=$(openssl rand -base64 12 | tr -dc 'a-zA-Z0-9' | cut -c1-12) +cat </opt/airflow/.env +AIRFLOW_HOME=/opt/airflow +AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME} +AIRFLOW__CORE__EXECUTOR=LocalExecutor +AIRFLOW__CORE__FERNET_KEY=${FERNET_KEY} +AIRFLOW__CORE__DAGS_FOLDER=/opt/airflow/dags +AIRFLOW__CORE__LOAD_EXAMPLES=false +AIRFLOW__CORE__AUTH_MANAGER=airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager +AIRFLOW__API__AUTH_BACKENDS=airflow.api.auth.backend.basic_auth,airflow.api.auth.backend.session +AIRFLOW__WEBSERVER__SECRET_KEY=${SECRET_KEY} +AIRFLOW__WEBSERVER__BASE_URL=http://${LOCAL_IP}:8080 +AIRFLOW_ADMIN_PASSWORD=${ADMIN_PASS} +EOF +set -a && source /opt/airflow/.env && set +a +$STD /opt/airflow/.venv/bin/airflow db migrate +$STD /opt/airflow/.venv/bin/airflow users create \ + --username admin \ + --firstname Admin \ + --lastname User \ + --role Admin \ + --email admin@example.com \ + --password "${ADMIN_PASS}" +msg_ok "Configured Application" + +msg_info "Creating Services" +cat </etc/systemd/system/airflow-api-server.service +[Unit] +Description=Apache Airflow API Server +After=network.target postgresql.service + +[Service] +Type=simple +User=root +EnvironmentFile=/opt/airflow/.env +ExecStart=/opt/airflow/.venv/bin/airflow api-server --port 8080 +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/airflow-scheduler.service +[Unit] +Description=Apache Airflow Scheduler +After=network.target postgresql.service + +[Service] +Type=simple +User=root +EnvironmentFile=/opt/airflow/.env +ExecStart=/opt/airflow/.venv/bin/airflow scheduler +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/airflow-dag-processor.service +[Unit] +Description=Apache Airflow DAG Processor +After=network.target postgresql.service + +[Service] +Type=simple +User=root +EnvironmentFile=/opt/airflow/.env +ExecStart=/opt/airflow/.venv/bin/airflow dag-processor +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/airflow-triggerer.service +[Unit] +Description=Apache Airflow Triggerer +After=network.target postgresql.service + +[Service] +Type=simple +User=root +EnvironmentFile=/opt/airflow/.env +ExecStart=/opt/airflow/.venv/bin/airflow triggerer +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now airflow-api-server airflow-scheduler airflow-dag-processor airflow-triggerer +msg_ok "Created Services" + +motd_ssh +customize +cleanup_lxc From 589659068d077595177115f058f8c246d5603ee6 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 09:46:14 +0000 Subject: [PATCH 07/98] Update CHANGELOG.md (#15236) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fbe09c4b8..b3405874e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -485,6 +485,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-06-20 +### 🆕 New Scripts + + - Plane ([#15227](https://github.com/community-scripts/ProxmoxVE/pull/15227)) + ### 🚀 Updated Scripts - #### 🐞 Bug Fixes From a40fbfec3b50e470b28b0601186c8c824e08359c Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 09:46:32 +0000 Subject: [PATCH 08/98] Update CHANGELOG.md (#15237) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3405874e..d2b7321b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -487,7 +487,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🆕 New Scripts - - Plane ([#15227](https://github.com/community-scripts/ProxmoxVE/pull/15227)) + - Apache-Airflow ([#15228](https://github.com/community-scripts/ProxmoxVE/pull/15228)) +- Plane ([#15227](https://github.com/community-scripts/ProxmoxVE/pull/15227)) ### 🚀 Updated Scripts From 59285b8b64cb5f7259dbc6ec81a577f6c1e01d89 Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Sun, 21 Jun 2026 01:48:59 +1000 Subject: [PATCH 09/98] Update docker-install.sh (#15243) --- install/docker-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/docker-install.sh b/install/docker-install.sh index d80909e6c..5ed717b2f 100644 --- a/install/docker-install.sh +++ b/install/docker-install.sh @@ -58,7 +58,7 @@ if [[ -n "$socket" ]]; then cat </etc/systemd/system/docker.service.d/override.conf [Service] ExecStart= -ExecStart=/usr/bin/dockerd +ExecStart=$(command -v dockerd || echo /usr/sbin/dockerd) EOF $STD systemctl daemon-reexec From ca678a39e20b0b49e83962d16edbc8a9bb6cb393 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 15:49:26 +0000 Subject: [PATCH 10/98] Update CHANGELOG.md (#15244) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d2b7321b2..60ad272d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -494,6 +494,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Fix docker service crash [@asylumexp](https://github.com/asylumexp) ([#15243](https://github.com/community-scripts/ProxmoxVE/pull/15243)) - Nginxproxymanager: repair broken certbot pip before update [@MickLesk](https://github.com/MickLesk) ([#15224](https://github.com/community-scripts/ProxmoxVE/pull/15224)) ## 2026-06-19 From 1134f4cdc6bd2a4d6d6d93bf4184a44a1cc97b32 Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Sun, 21 Jun 2026 02:56:49 +1000 Subject: [PATCH 11/98] [arm64] port hyperhdr-kometa to arm64 (#15234) also port apprise-api, archivebox. Update meilisearch function to support arm64. invoiceshelf changes are an existing bug. changes to kasm are required to get docker working, as old docker provided by setup_docker will not work. The --ignore-dep-failures is required as there is a bug in the install script. --- ct/apprise-api.sh | 7 ++++-- ct/archivebox.sh | 6 +++--- ct/hyperion.sh | 2 +- ct/igotify.sh | 2 +- ct/immich.sh | 2 +- ct/immichframe.sh | 2 +- ct/influxdb.sh | 2 +- ct/investbrain.sh | 2 +- ct/invoiceshelf.sh | 2 +- ct/ironclaw.sh | 2 +- ct/isponsorblocktv.sh | 2 +- ct/jackett.sh | 2 +- ct/jellyfin.sh | 2 +- ct/jellyseerr.sh | 2 +- ct/jitsi-meet.sh | 2 +- ct/jotty.sh | 2 +- ct/kan.sh | 2 +- ct/karakeep.sh | 2 +- ct/kavita.sh | 2 +- ct/keycloak.sh | 2 +- ct/kimai.sh | 2 +- ct/kitchenowl.sh | 2 +- ct/kiwix.sh | 2 +- ct/kometa.sh | 5 +++-- install/apprise-api-install.sh | 5 ++++- install/archivebox-install.sh | 4 ++-- install/igotify-install.sh | 2 +- install/immich-install.sh | 18 ++++++++++++---- install/immichframe-install.sh | 34 ++++++++++++++++++------------ install/influxdb-install.sh | 8 +++---- install/investbrain-install.sh | 1 + install/invoiceshelf-install.sh | 12 +++++------ install/isponsorblocktv-install.sh | 4 ++-- install/jackett-install.sh | 6 +++++- install/jellyfin-install.sh | 2 +- install/karakeep-install.sh | 4 ++-- install/kasm-install.sh | 25 ++++++++++++++++++++-- install/kavita-install.sh | 6 +++++- install/keycloak-install.sh | 2 +- install/kometa-install.sh | 5 +++-- misc/tools.func | 23 ++++++++++++++------ 41 files changed, 144 insertions(+), 77 deletions(-) diff --git a/ct/apprise-api.sh b/ct/apprise-api.sh index 43728c874..06cd29783 100644 --- a/ct/apprise-api.sh +++ b/ct/apprise-api.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -34,6 +34,7 @@ function update_script() { systemctl stop apprise-api msg_ok "Stopped Service" + export UV_PYTHON_INSTALL_DIR=/opt/uv-python PYTHON_VERSION="3.12" setup_uv CLEAN_INSTALL=1 fetch_and_deploy_gh_release "apprise" "caronc/apprise-api" "tarball" @@ -41,7 +42,9 @@ function update_script() { cd /opt/apprise cp ./requirements.txt /etc/requirements.txt $STD apt install -y nginx git - $STD uv pip install -r requirements.txt gunicorn supervisor --system + $STD uv venv /opt/apprise/.venv + $STD uv pip install -r requirements.txt gunicorn supervisor -p /opt/apprise/.venv/bin/python + ln -sf /opt/apprise/.venv/bin/supervisord /opt/apprise/.venv/bin/gunicorn /usr/local/bin/ cp -fr apprise_api/static /usr/share/nginx/html/s/ mv apprise_api/ webapp touch /etc/nginx/server-override.conf diff --git a/ct/archivebox.sh b/ct/archivebox.sh index 2baa8a795..76c170560 100644 --- a/ct/archivebox.sh +++ b/ct/archivebox.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-12}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -39,13 +39,13 @@ function update_script() { msg_ok "Stopped Service" msg_info "Upgrading Playwright" - $STD uv pip install playwright --system + $STD uv pip install playwright --system --break-system-packages $STD playwright install-deps chromium msg_ok "Upgraded Playwright" msg_info "Updating ArchiveBox" cd /opt/archivebox/data - $STD uv pip install --system --upgrade --no-reinstall archivebox + $STD uv pip install --system --break-system-packages --upgrade --no-reinstall archivebox sudo -u archivebox archivebox init msg_ok "Updated ArchiveBox" diff --git a/ct/hyperion.sh b/ct/hyperion.sh index 6c1f385c5..89dd97c0b 100644 --- a/ct/hyperion.sh +++ b/ct/hyperion.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" diff --git a/ct/igotify.sh b/ct/igotify.sh index 10b153966..5f73f384a 100644 --- a/ct/igotify.sh +++ b/ct/igotify.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/immich.sh b/ct/immich.sh index f0362c2df..5615d267b 100644 --- a/ct/immich.sh +++ b/ct/immich.sh @@ -12,7 +12,7 @@ var_cpu="${var_cpu:-4}" var_ram="${var_ram:-6144}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" diff --git a/ct/immichframe.sh b/ct/immichframe.sh index c4da9fe1e..e0ee17aad 100644 --- a/ct/immichframe.sh +++ b/ct/immichframe.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/influxdb.sh b/ct/influxdb.sh index 96dd1332e..aa75ebcbd 100644 --- a/ct/influxdb.sh +++ b/ct/influxdb.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/investbrain.sh b/ct/investbrain.sh index 3d619fc0f..0c2f48310 100644 --- a/ct/investbrain.sh +++ b/ct/investbrain.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/invoiceshelf.sh b/ct/invoiceshelf.sh index 15fa2c368..4d62ac6a5 100644 --- a/ct/invoiceshelf.sh +++ b/ct/invoiceshelf.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/ironclaw.sh b/ct/ironclaw.sh index b2e3eed28..123577f80 100644 --- a/ct/ironclaw.sh +++ b/ct/ironclaw.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/isponsorblocktv.sh b/ct/isponsorblocktv.sh index 30ae32f4d..43de41c19 100644 --- a/ct/isponsorblocktv.sh +++ b/ct/isponsorblocktv.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/jackett.sh b/ct/jackett.sh index 47904057f..1d414e662 100644 --- a/ct/jackett.sh +++ b/ct/jackett.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/jellyfin.sh b/ct/jellyfin.sh index 2072d6bc5..ab8f33b23 100644 --- a/ct/jellyfin.sh +++ b/ct/jellyfin.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-16}" var_os="${var_os:-ubuntu}" var_version="${var_version:-24.04}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" diff --git a/ct/jellyseerr.sh b/ct/jellyseerr.sh index 46b2611de..86128bb11 100644 --- a/ct/jellyseerr.sh +++ b/ct/jellyseerr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-12}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/jitsi-meet.sh b/ct/jitsi-meet.sh index d7efe1230..efac14ff5 100644 --- a/ct/jitsi-meet.sh +++ b/ct/jitsi-meet.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-12}" var_os="${var_os:-debian}" var_version="${var_version:-12}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/jotty.sh b/ct/jotty.sh index 74267afda..af0e610d0 100644 --- a/ct/jotty.sh +++ b/ct/jotty.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/kan.sh b/ct/kan.sh index 221668159..1817ab674 100644 --- a/ct/kan.sh +++ b/ct/kan.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-12}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/karakeep.sh b/ct/karakeep.sh index 93c3cd41b..2cc623d65 100644 --- a/ct/karakeep.sh +++ b/ct/karakeep.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-15}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/kavita.sh b/ct/kavita.sh index fb2d67c54..e69855cb0 100644 --- a/ct/kavita.sh +++ b/ct/kavita.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/keycloak.sh b/ct/keycloak.sh index 19e032eb8..be953f9e8 100644 --- a/ct/keycloak.sh +++ b/ct/keycloak.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/kimai.sh b/ct/kimai.sh index 95b1ca1b3..e88a35a36 100644 --- a/ct/kimai.sh +++ b/ct/kimai.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-7}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/kitchenowl.sh b/ct/kitchenowl.sh index fcdda0438..362f29b2d 100644 --- a/ct/kitchenowl.sh +++ b/ct/kitchenowl.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-6}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/kiwix.sh b/ct/kiwix.sh index 88016ef4e..c66803e2e 100644 --- a/ct/kiwix.sh +++ b/ct/kiwix.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-ubuntu}" var_version="${var_version:-24.04}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/kometa.sh b/ct/kometa.sh index c37bdd786..b0a9e0caa 100644 --- a/ct/kometa.sh +++ b/ct/kometa.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -44,7 +44,8 @@ function update_script() { msg_info "Updating Kometa" cd /opt/kometa - $STD uv pip install -r requirements.txt --system + [[ -d /opt/kometa/.venv ]] || $STD uv venv /opt/kometa/.venv + $STD uv pip install -r requirements.txt -p /opt/kometa/.venv/bin/python mkdir -p config/assets cp /opt/config.yml config/config.yml msg_ok "Updated Kometa" diff --git a/install/apprise-api-install.sh b/install/apprise-api-install.sh index 27296b53b..89bcc0b8e 100644 --- a/install/apprise-api-install.sh +++ b/install/apprise-api-install.sh @@ -19,13 +19,16 @@ $STD apt install -y \ git msg_ok "Installed Dependencies" +export UV_PYTHON_INSTALL_DIR=/opt/uv-python PYTHON_VERSION="3.12" setup_uv fetch_and_deploy_gh_release "apprise" "caronc/apprise-api" "tarball" msg_info "Setup Apprise-API" cd /opt/apprise cp ./requirements.txt /etc/requirements.txt -$STD uv pip install -r requirements.txt gunicorn supervisor --system +$STD uv venv /opt/apprise/.venv +$STD uv pip install -r requirements.txt gunicorn supervisor -p /opt/apprise/.venv/bin/python +ln -sf /opt/apprise/.venv/bin/supervisord /opt/apprise/.venv/bin/gunicorn /usr/local/bin/ cp -fr apprise_api/static /usr/share/nginx/html/s/ mv apprise_api/ webapp touch /etc/nginx/server-override.conf diff --git a/install/archivebox-install.sh b/install/archivebox-install.sh index 1a0f3ccc9..5ae2c25e9 100644 --- a/install/archivebox-install.sh +++ b/install/archivebox-install.sh @@ -37,7 +37,7 @@ NODE_VERSION="22" NODE_MODULE="@postlight/parser@latest,single-file-cli@latest" PYTHON_VERSION="3.13" setup_uv msg_info "Installing Playwright" -$STD uv pip install playwright --system +$STD uv pip install playwright --system --break-system-packages $STD playwright install-deps chromium msg_ok "Installed Playwright" @@ -46,7 +46,7 @@ mkdir -p /opt/archivebox/{data,.npm,.cache,.local} $STD adduser --system --shell /bin/bash --gecos 'Archive Box User' --group --disabled-password --home /home/archivebox archivebox chown -R archivebox:archivebox /opt/archivebox/{data,.npm,.cache,.local} chmod -R 755 /opt/archivebox/data -$STD uv pip install archivebox --system +$STD uv pip install archivebox --system --break-system-packages cd /opt/archivebox/data expect </opt/igotify/.env diff --git a/install/immich-install.sh b/install/immich-install.sh index 378dd0642..3637fed98 100644 --- a/install/immich-install.sh +++ b/install/immich-install.sh @@ -124,13 +124,23 @@ msg_ok "Dependencies Installed" msg_info "Installing Mise" curl -fSs https://mise.jdx.dev/gpg-key.pub | tee /etc/apt/keyrings/mise-archive-keyring.pub 1>/dev/null -echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=amd64] https://mise.jdx.dev/deb stable main" >/etc/apt/sources.list.d/mise.list +echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=$(arch_resolve)] https://mise.jdx.dev/deb stable main" >/etc/apt/sources.list.d/mise.list $STD apt update $STD apt install -y mise msg_ok "Installed Mise" msg_info "Configuring Debian Testing Repo" -sed -i 's/ trixie-updates/ trixie-updates testing/g' /etc/apt/sources.list.d/debian.sources +if [[ -f /etc/apt/sources.list.d/debian.sources ]]; then + sed -i 's/ trixie-updates/ trixie-updates testing/g' /etc/apt/sources.list.d/debian.sources +else + cat </etc/apt/sources.list.d/testing.sources +Types: deb +URIs: http://deb.debian.org/debian +Suites: testing +Components: main +Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg +EOF +fi cat </etc/apt/preferences.d/preferences Package: * Pin: release a=unstable @@ -153,7 +163,7 @@ ACTUAL_PG_VERSION=$(ls /etc/postgresql/ 2>/dev/null | sort -V | tail -1) ACTUAL_PG_VERSION=${ACTUAL_PG_VERSION:-16} VCHORD_RELEASE="0.5.3" -fetch_and_deploy_gh_release "VectorChord" "tensorchord/VectorChord" "binary" "${VCHORD_RELEASE}" "/tmp" "postgresql-${ACTUAL_PG_VERSION}-vchord_*_amd64.deb" +fetch_and_deploy_gh_release "VectorChord" "tensorchord/VectorChord" "binary" "${VCHORD_RELEASE}" "/tmp" "postgresql-${ACTUAL_PG_VERSION}-vchord_*_$(arch_resolve).deb" sed -i "s/^#shared_preload.*/shared_preload_libraries = 'vchord.so'/" /etc/postgresql/${ACTUAL_PG_VERSION}/main/postgresql.conf systemctl restart postgresql.service @@ -376,7 +386,7 @@ if [[ -f ~/.openvino ]]; then $STD sudo --preserve-env=VIRTUAL_ENV,UV_HTTP_TIMEOUT -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p "${ML_PYTHON}" --managed-python && break [[ $attempt -lt 3 ]] && msg_warn "uv sync attempt $attempt failed, retrying..." && sleep 10 done - patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.13/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-313-x86_64-linux-gnu.so" + patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.13/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-313-$(arch_resolve "x86_64" "aarch64")-linux-gnu.so" msg_ok "Installed Intel OpenVINO machine-learning" else ML_PYTHON="python3.11" diff --git a/install/immichframe-install.sh b/install/immichframe-install.sh index 683ee162c..6daa4ce04 100644 --- a/install/immichframe-install.sh +++ b/install/immichframe-install.sh @@ -14,18 +14,26 @@ network_check update_os msg_info "Installing Dependencies" -setup_deb822_repo \ - "microsoft" \ - "https://packages.microsoft.com/keys/microsoft-2025.asc" \ - "https://packages.microsoft.com/debian/13/prod/" \ - "trixie" \ - "main" -$STD apt install -y \ - libicu-dev \ - libssl-dev \ - gettext-base \ - dotnet-sdk-8.0 \ - aspnetcore-runtime-8.0 +if [[ "$(arch_resolve)" == "arm64" ]]; then + $STD apt install -y libicu-dev libssl-dev gettext-base + curl -fsSL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh + $STD bash /tmp/dotnet-install.sh --channel 8.0 --install-dir /usr/lib/dotnet8 + ln -sf /usr/lib/dotnet8/dotnet /usr/bin/dotnet + rm -f /tmp/dotnet-install.sh +else + setup_deb822_repo \ + "microsoft" \ + "https://packages.microsoft.com/keys/microsoft-2025.asc" \ + "https://packages.microsoft.com/debian/13/prod/" \ + "trixie" \ + "main" + $STD apt install -y \ + libicu-dev \ + libssl-dev \ + gettext-base \ + dotnet-sdk-8.0 \ + aspnetcore-runtime-8.0 +fi msg_ok "Installed Dependencies" NODE_VERSION="22" setup_nodejs @@ -36,7 +44,7 @@ mkdir -p /opt/immichframe cd /tmp/immichframe $STD dotnet publish ImmichFrame.WebApi/ImmichFrame.WebApi.csproj \ --configuration Release \ - --runtime linux-x64 \ + --runtime "$(arch_resolve "linux-x64" "linux-arm64")" \ --self-contained false \ --output /opt/immichframe cd /tmp/immichframe/immichFrame.Web diff --git a/install/influxdb-install.sh b/install/influxdb-install.sh index 9e4af3e53..772b22d21 100644 --- a/install/influxdb-install.sh +++ b/install/influxdb-install.sh @@ -32,7 +32,7 @@ fi msg_info "Installing InfluxDB v${INFLUX}" if [[ $INFLUX == "3" ]]; then - if ! grep -qm1 'avx2' /proc/cpuinfo; then + if [[ "$(arch_resolve)" == "amd64" ]] && ! grep -qm1 'avx2' /proc/cpuinfo; then msg_error "InfluxDB v3 requires AVX2 support, which is not available on this system." exit 106 fi @@ -43,9 +43,9 @@ elif [[ $INFLUX == "2" ]]; then systemctl enable -q --now influxdb else $STD apt install -y influxdb - download_file "https://dl.influxdata.com/chronograf/releases/chronograf_1.10.8_amd64.deb" "${HOME}/chronograf_1.10.8_amd64.deb" - $STD dpkg -i "${HOME}/chronograf_1.10.8_amd64.deb" - rm -rf "${HOME}/chronograf_1.10.8_amd64.deb" + download_file "https://dl.influxdata.com/chronograf/releases/chronograf_1.10.8_$(arch_resolve).deb" "${HOME}/chronograf_1.10.8_$(arch_resolve).deb" + $STD dpkg -i "${HOME}/chronograf_1.10.8_$(arch_resolve).deb" + rm -rf "${HOME}/chronograf_1.10.8_$(arch_resolve).deb" systemctl enable -q --now influxdb fi msg_ok "Installed InfluxDB" diff --git a/install/investbrain-install.sh b/install/investbrain-install.sh index 9163166e8..bd678e654 100644 --- a/install/investbrain-install.sh +++ b/install/investbrain-install.sh @@ -17,6 +17,7 @@ msg_info "Installing Dependencies" $STD apt install -y \ nginx \ supervisor \ + cron \ redis-server \ libfreetype-dev \ libjpeg62-turbo-dev \ diff --git a/install/invoiceshelf-install.sh b/install/invoiceshelf-install.sh index 368fcf6e6..c604ab2c4 100644 --- a/install/invoiceshelf-install.sh +++ b/install/invoiceshelf-install.sh @@ -19,7 +19,7 @@ msg_ok "Installed Dependencies" PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULES="bcmath,gd,intl,xml,zip,pdo_pgsql,mbstring,curl,exif" setup_php setup_composer -NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs +NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs PG_VERSION="16" setup_postgresql PG_DB_NAME="invoiceshelf" PG_DB_USER="invoiceshelf" setup_postgresql_db @@ -38,14 +38,14 @@ sed -i "s|^DB_DATABASE=.*|DB_DATABASE=${PG_DB_NAME}|" .env sed -i "s|^DB_USERNAME=.*|DB_USERNAME=${PG_DB_USER}|" .env sed -i "s|^DB_PASSWORD=.*|DB_PASSWORD=${PG_DB_PASS}|" .env COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev --optimize-autoloader --no-interaction -$STD php artisan key:generate +$STD php artisan key:generate --force if command -v corepack >/dev/null 2>&1; then $STD corepack enable - $STD corepack yarn install - $STD corepack yarn build + $STD corepack pnpm install + $STD corepack pnpm run build else - $STD yarn install - $STD yarn build + $STD pnpm install + $STD pnpm run build fi mkdir -p storage/framework/{cache,sessions,views} storage/logs bootstrap/cache chown -R www-data:www-data /opt/invoiceshelf diff --git a/install/isponsorblocktv-install.sh b/install/isponsorblocktv-install.sh index 1fc861610..1f3d5044b 100644 --- a/install/isponsorblocktv-install.sh +++ b/install/isponsorblocktv-install.sh @@ -13,9 +13,9 @@ setting_up_container network_check update_os -ISBTV_BINARY="iSponsorBlockTV-x86_64-linux-v1" +ISBTV_BINARY="$(arch_resolve "iSponsorBlockTV-x86_64-linux-v1" "iSponsorBlockTV-aarch64-linux")" if grep -q ' avx ' /proc/cpuinfo 2>/dev/null && grep -q ' avx2 ' /proc/cpuinfo 2>/dev/null && grep -q ' movbe ' /proc/cpuinfo 2>/dev/null; then - ISBTV_BINARY="iSponsorBlockTV-x86_64-linux" + ISBTV_BINARY="$(arch_resolve "iSponsorBlockTV-x86_64-linux" "iSponsorBlockTV-aarch64-linux")" fi fetch_and_deploy_gh_release "isponsorblocktv" "dmunozv04/iSponsorBlockTV" "singlefile" "latest" "/opt/isponsorblocktv" "${ISBTV_BINARY}" diff --git a/install/jackett-install.sh b/install/jackett-install.sh index 2cc45770a..291d6f3e1 100644 --- a/install/jackett-install.sh +++ b/install/jackett-install.sh @@ -13,7 +13,11 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.LinuxAMDx64.tar.gz" +msg_info "Installing Dependencies" +$STD apt-get install -y libicu-dev +msg_ok "Installed Dependencies" + +fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.Linux$(arch_resolve "AMDx64" "ARM64").tar.gz" cat </opt/.env DisableRootWarning=true diff --git a/install/jellyfin-install.sh b/install/jellyfin-install.sh index a25ac387f..9c205df73 100644 --- a/install/jellyfin-install.sh +++ b/install/jellyfin-install.sh @@ -18,7 +18,7 @@ msg_custom "â„šī¸" "${GN}" "If NVIDIA GPU passthrough is detected, you'll be as msg_info "Installing Dependencies" ensure_dependencies libjemalloc2 if [[ ! -f /usr/lib/libjemalloc.so ]]; then - ln -sf /usr/lib/x86_64-linux-gnu/libjemalloc.so.2 /usr/lib/libjemalloc.so + ln -sf "/usr/lib/$(arch_resolve "x86_64-linux-gnu" "aarch64-linux-gnu")/libjemalloc.so.2" /usr/lib/libjemalloc.so fi msg_ok "Installed Dependencies" diff --git a/install/karakeep-install.sh b/install/karakeep-install.sh index a0eea98da..4f1d0c3ab 100644 --- a/install/karakeep-install.sh +++ b/install/karakeep-install.sh @@ -24,7 +24,7 @@ $STD apt install -y \ ffmpeg msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "monolith" "Y2Z/monolith" "singlefile" "latest" "/usr/bin" "monolith-gnu-linux-x86_64" +fetch_and_deploy_gh_release "monolith" "Y2Z/monolith" "singlefile" "latest" "/usr/bin" "monolith-gnu-linux-$(arch_resolve "x86_64" "aarch64")" fetch_and_deploy_gh_release "yt-dlp" "yt-dlp/yt-dlp-nightly-builds" "singlefile" "latest" "/usr/bin" "yt-dlp_linux" fetch_and_deploy_gh_release "deno" "denoland/deno" "prebuild" "latest" "/usr/local/bin" "deno-$(uname -m)-unknown-linux-gnu.zip" setup_meilisearch @@ -35,7 +35,7 @@ MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package. NODE_VERSION="24" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs msg_info "Installing external JavaScript Extension for yt-dlp" -$STD pip install -U yt-dlp-ejs +$STD pip install -U yt-dlp-ejs --break-system-packages mkdir -p ~/.config/pip cat <~/.config/pip/pip.conf [global] diff --git a/install/kasm-install.sh b/install/kasm-install.sh index ee0a9f0e1..d921933a4 100644 --- a/install/kasm-install.sh +++ b/install/kasm-install.sh @@ -13,7 +13,28 @@ setting_up_container network_check update_os -setup_docker +msg_info "Installing Docker" +if [[ "$(arch_resolve)" == "arm64" ]]; then + setup_deb822_repo "docker" \ + "https://download.docker.com/linux/$(get_os_info id)/gpg" \ + "https://download.docker.com/linux/$(get_os_info id)" \ + "$(get_os_info codename)" \ + "stable" + $STD apt install -y \ + docker-ce=5:28.5.2-1~debian.13~trixie \ + docker-ce-cli=5:28.5.2-1~debian.13~trixie \ + containerd.io=1.7.29-1~debian.13~trixie \ + docker-buildx-plugin docker-compose-plugin + runc_tmp=$(mktemp -d) + (cd "$runc_tmp" && apt-get download runc && dpkg-deb -x runc_*.deb x) + dpkg-divert --local --rename --add /usr/bin/runc + install -m755 "$runc_tmp"/x/usr/sbin/runc /usr/bin/runc + rm -rf "$runc_tmp" + systemctl restart containerd docker +else + $STD sh <(curl -fsSL https://get.docker.com/) +fi +msg_ok "Installed Docker" msg_info "Detecting latest Kasm Workspaces release" KASM_URL=$(curl -s https://kasm.com/downloads \ @@ -51,7 +72,7 @@ curl_download "/opt/kasm_release_${KASM_VERSION}.tar.gz" "$KASM_URL" cd /opt tar -xf "kasm_release_${KASM_VERSION}.tar.gz" chmod +x /opt/kasm_release/install.sh -printf 'y\ny\ny\n4\n' | bash /opt/kasm_release/install.sh >~/kasm-install.output 2>&1 +printf 'y\ny\ny\n4\n' | bash /opt/kasm_release/install.sh --ignore-dep-failures >~/kasm-install.output 2>&1 awk ' /^Kasm UI Login Credentials$/ {capture=1} capture {print} diff --git a/install/kavita-install.sh b/install/kavita-install.sh index 138942834..3f618bd48 100644 --- a/install/kavita-install.sh +++ b/install/kavita-install.sh @@ -13,7 +13,11 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "Kavita" "Kareadita/Kavita" "prebuild" "latest" "/opt/Kavita" "kavita-linux-x64.tar.gz" +msg_info "Installing Dependencies" +$STD apt-get install -y libicu-dev +msg_ok "Installed Dependencies" + +fetch_and_deploy_gh_release "Kavita" "Kareadita/Kavita" "prebuild" "latest" "/opt/Kavita" "kavita-linux-$(arch_resolve "x64" "arm64").tar.gz" msg_info "Creating Service" cat </etc/systemd/system/kavita.service diff --git a/install/keycloak-install.sh b/install/keycloak-install.sh index 2616459dc..b36a62c3f 100644 --- a/install/keycloak-install.sh +++ b/install/keycloak-install.sh @@ -42,7 +42,7 @@ ExecStart=/opt/keycloak/bin/kc.sh start ExecStop=/opt/keycloak/bin/kc.sh stop Restart=always RestartSec=3 -Environment="JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-amd64" +Environment="JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-$(arch_resolve)" Environment="KC_DB=postgres" Environment="KC_DB_USERNAME=$DB_USER" Environment="KC_DB_PASSWORD=$DB_PASS" diff --git a/install/kometa-install.sh b/install/kometa-install.sh index 135080bc7..b0b2e2e96 100644 --- a/install/kometa-install.sh +++ b/install/kometa-install.sh @@ -18,7 +18,8 @@ fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa" "tarball" msg_info "Setup Kometa" cd /opt/kometa -$STD uv pip install -r requirements.txt --system +$STD uv venv /opt/kometa/.venv +$STD uv pip install -r requirements.txt -p /opt/kometa/.venv/bin/python mkdir -p config/assets cp config/config.yml.template config/config.yml msg_ok "Setup Kometa" @@ -47,7 +48,7 @@ After=network-online.target [Service] Type=simple WorkingDirectory=/opt/kometa -ExecStart=/usr/bin/python3 kometa.py +ExecStart=/opt/kometa/.venv/bin/python kometa.py Restart=always RestartSec=30 diff --git a/misc/tools.func b/misc/tools.func index 6a0c3ed88..624822415 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -6742,7 +6742,11 @@ setup_meilisearch() { # Stop service and update binary systemctl stop meilisearch - fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary" + if [[ "$(arch_resolve)" == "arm64" ]]; then + fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "singlefile" "latest" "/usr/bin" "meilisearch-linux-aarch64" + else + fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary" + fi # If migration needed and dump was created, remove old data and import dump if [[ "$NEEDS_MIGRATION" == "true" ]] && [[ -n "$DUMP_UID" ]]; then @@ -6810,11 +6814,18 @@ setup_meilisearch() { # Fresh install msg_info "Setup MeiliSearch" - # Install binary - fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary" || { - msg_error "Failed to install MeiliSearch binary" - return 250 - } + # Install binary (meilisearch publishes only an amd64 .deb; arm64 uses the raw linux-aarch64 binary) + if [[ "$(arch_resolve)" == "arm64" ]]; then + fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "singlefile" "latest" "/usr/bin" "meilisearch-linux-aarch64" || { + msg_error "Failed to install MeiliSearch binary" + return 250 + } + else + fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary" || { + msg_error "Failed to install MeiliSearch binary" + return 250 + } + fi # Download default config curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml || { From 8064b505def38794ffd0bf2904ef6da3a90b26d1 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 16:57:12 +0000 Subject: [PATCH 12/98] Update CHANGELOG.md (#15246) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 60ad272d8..2b8ae355d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -497,6 +497,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - Fix docker service crash [@asylumexp](https://github.com/asylumexp) ([#15243](https://github.com/community-scripts/ProxmoxVE/pull/15243)) - Nginxproxymanager: repair broken certbot pip before update [@MickLesk](https://github.com/MickLesk) ([#15224](https://github.com/community-scripts/ProxmoxVE/pull/15224)) + - #### ✨ New Features + + - [arm64] port scripts between hyperhdr & kometa to arm64 [@asylumexp](https://github.com/asylumexp) ([#15234](https://github.com/community-scripts/ProxmoxVE/pull/15234)) + ## 2026-06-19 ### 🚀 Updated Scripts From 603ff05a39a47a7413807049d64e60e15d6433c6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 19:08:26 +0200 Subject: [PATCH 13/98] chore(ct): sync limesurvey defaults from PocketBase (#15247) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- ct/limesurvey.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/limesurvey.sh b/ct/limesurvey.sh index 10f24b983..b1c20946c 100644 --- a/ct/limesurvey.sh +++ b/ct/limesurvey.sh @@ -9,7 +9,7 @@ APP="LimeSurvey" var_tags="${var_tags:-os}" var_cpu="${var_cpu:-1}" var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" +var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" var_arm64="${var_arm64:-no}" From f6377d6be38f41165bbcb8e845be819f0196ff16 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 17:08:54 +0000 Subject: [PATCH 14/98] Update CHANGELOG.md (#15248) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b8ae355d..4a010bff6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -501,6 +501,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - [arm64] port scripts between hyperhdr & kometa to arm64 [@asylumexp](https://github.com/asylumexp) ([#15234](https://github.com/community-scripts/ProxmoxVE/pull/15234)) +### ❔ Uncategorized + + - chore(ct): sync limesurvey defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15247](https://github.com/community-scripts/ProxmoxVE/pull/15247)) + ## 2026-06-19 ### 🚀 Updated Scripts From 18b9cd2e6488b33cbf27c90b7da1516870805f63 Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Sun, 21 Jun 2026 08:21:58 +1000 Subject: [PATCH 15/98] [arm64] Port scripts between komga & mediamanager to support arm64 (#15245) * [arm64] Port scripts between komga-mediamanager to support arm64 adds override to make debian cts on arm64 use ubuntu mongodb binaries * bump limesurvey --- ct/komga.sh | 2 +- ct/kubo.sh | 4 ++-- ct/kutt.sh | 2 +- ct/languagetool.sh | 2 +- ct/lazylibrarian.sh | 2 +- ct/librechat.sh | 2 +- ct/librenms.sh | 2 +- ct/librespeed-rust.sh | 4 ++-- ct/libretranslate.sh | 2 +- ct/lidarr.sh | 4 ++-- ct/limesurvey.sh | 2 +- ct/linkding.sh | 4 ++-- ct/listmonk.sh | 4 ++-- ct/livebook.sh | 2 +- ct/lobehub.sh | 2 +- ct/loki.sh | 2 +- ct/lychee.sh | 2 +- ct/lyrionmusicserver.sh | 9 +++++---- ct/mail-archiver.sh | 2 +- ct/managemydamnlife.sh | 2 +- ct/manyfold.sh | 2 +- ct/matomo.sh | 2 +- ct/matter-server.sh | 4 ++-- ct/matterjs-server.sh | 2 +- ct/mediamanager.sh | 2 +- install/komga-install.sh | 4 ++-- install/kubo-install.sh | 3 ++- install/lazylibrarian-install.sh | 10 +++++----- install/librespeed-rust-install.sh | 2 +- install/lidarr-install.sh | 3 ++- install/linkding-install.sh | 2 +- install/listmonk-install.sh | 2 +- install/lyrionmusicserver-install.sh | 7 ++++--- install/mail-archiver-install.sh | 8 +++++++- install/matter-server-install.sh | 2 +- misc/tools.func | 7 +++++-- 36 files changed, 66 insertions(+), 53 deletions(-) diff --git a/ct/komga.sh b/ct/komga.sh index 201adb8a0..4f9558383 100644 --- a/ct/komga.sh +++ b/ct/komga.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/kubo.sh b/ct/kubo.sh index eb4d98463..8d7425a47 100644 --- a/ct/kubo.sh +++ b/ct/kubo.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -33,7 +33,7 @@ function update_script() { systemctl stop ipfs msg_ok "Stopped service" - fetch_and_deploy_gh_release "kubo" "ipfs/kubo" "prebuild" "latest" "/usr/local/kubo" "kubo*linux-amd64.tar.gz" + fetch_and_deploy_gh_release "kubo" "ipfs/kubo" "prebuild" "latest" "/usr/local/kubo" "kubo*linux-$(arch_resolve).tar.gz" msg_info "Starting service" systemctl start ipfs diff --git a/ct/kutt.sh b/ct/kutt.sh index 6c9e64e0a..c118172f7 100644 --- a/ct/kutt.sh +++ b/ct/kutt.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/languagetool.sh b/ct/languagetool.sh index 40c21d043..a938792c8 100644 --- a/ct/languagetool.sh +++ b/ct/languagetool.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-16}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/lazylibrarian.sh b/ct/lazylibrarian.sh index 5a86550bf..c07abac96 100644 --- a/ct/lazylibrarian.sh +++ b/ct/lazylibrarian.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/librechat.sh b/ct/librechat.sh index 5c60e0a52..d6d62cca2 100644 --- a/ct/librechat.sh +++ b/ct/librechat.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-6144}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/librenms.sh b/ct/librenms.sh index 6659e4208..e5dd91fc9 100644 --- a/ct/librenms.sh +++ b/ct/librenms.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/librespeed-rust.sh b/ct/librespeed-rust.sh index 37a66f5e3..bb921bb03 100644 --- a/ct/librespeed-rust.sh +++ b/ct/librespeed-rust.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -34,7 +34,7 @@ function update_script() { systemctl stop speedtest_rs msg_ok "Services Stopped" - fetch_and_deploy_gh_release "librespeed-rust" "librespeed/speedtest-rust" "binary" "latest" "/opt/librespeed-rust" "librespeed-rs-x86_64-unknown-linux-gnu.deb" + fetch_and_deploy_gh_release "librespeed-rust" "librespeed/speedtest-rust" "binary" "latest" "/opt/librespeed-rust" "librespeed-rs-$(arch_resolve "x86_64" "aarch64")-unknown-linux-gnu.deb" msg_info "Starting Service" systemctl start speedtest_rs diff --git a/ct/libretranslate.sh b/ct/libretranslate.sh index c3a5955c1..7cf601fa4 100644 --- a/ct/libretranslate.sh +++ b/ct/libretranslate.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" diff --git a/ct/lidarr.sh b/ct/lidarr.sh index 4e4c7024e..141197a57 100644 --- a/ct/lidarr.sh +++ b/ct/lidarr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -35,7 +35,7 @@ function update_script() { systemctl stop lidarr msg_ok "Service stopped" - fetch_and_deploy_gh_release "lidarr" "Lidarr/Lidarr" "prebuild" "latest" "/opt/Lidarr" "Lidarr.master*linux-core-x64.tar.gz" + fetch_and_deploy_gh_release "lidarr" "Lidarr/Lidarr" "prebuild" "latest" "/opt/Lidarr" "Lidarr.master*linux-core-$(arch_resolve "x64" "arm64").tar.gz" chmod 775 /opt/Lidarr msg_info "Starting service" diff --git a/ct/limesurvey.sh b/ct/limesurvey.sh index b1c20946c..7f8537fe7 100644 --- a/ct/limesurvey.sh +++ b/ct/limesurvey.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/linkding.sh b/ct/linkding.sh index 09119791e..b0ae20025 100644 --- a/ct/linkding.sh +++ b/ct/linkding.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -46,7 +46,7 @@ function update_script() { cp -r /opt/linkding_data_backup/. /opt/linkding/data cp /opt/linkding_env_backup /opt/linkding/.env rm -rf /opt/linkding_data_backup /opt/linkding_env_backup - ln -sf /usr/lib/x86_64-linux-gnu/mod_icu.so /opt/linkding/libicu.so + ln -sf /usr/lib/$(arch_resolve "x86_64-linux-gnu" "aarch64-linux-gnu")/mod_icu.so /opt/linkding/libicu.so msg_ok "Restored Data" msg_info "Updating LinkDing" diff --git a/ct/listmonk.sh b/ct/listmonk.sh index 11483bf46..774672905 100644 --- a/ct/listmonk.sh +++ b/ct/listmonk.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -37,7 +37,7 @@ function update_script() { mv /opt/listmonk/ /opt/listmonk-backup msg_ok "Backed up data" - fetch_and_deploy_gh_release "listmonk" "knadh/listmonk" "prebuild" "latest" "/opt/listmonk" "listmonk*linux_amd64.tar.gz" + fetch_and_deploy_gh_release "listmonk" "knadh/listmonk" "prebuild" "latest" "/opt/listmonk" "listmonk*linux_$(arch_resolve).tar.gz" msg_info "Configuring listmonk" mv /opt/listmonk-backup/config.toml /opt/listmonk/config.toml diff --git a/ct/livebook.sh b/ct/livebook.sh index b31503330..928ef33e1 100755 --- a/ct/livebook.sh +++ b/ct/livebook.sh @@ -12,7 +12,7 @@ var_cpu="${var_cpu:-2}" var_ram="${var_ram:-1024}" var_os="${var_os:-ubuntu}" var_version="${var_version:-24.04}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/lobehub.sh b/ct/lobehub.sh index d42912c1b..1a856e428 100644 --- a/ct/lobehub.sh +++ b/ct/lobehub.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-10240}" var_disk="${var_disk:-15}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/loki.sh b/ct/loki.sh index 745fcd672..c1effaf39 100644 --- a/ct/loki.sh +++ b/ct/loki.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/lychee.sh b/ct/lychee.sh index e5d630290..887d1f3ac 100644 --- a/ct/lychee.sh +++ b/ct/lychee.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/lyrionmusicserver.sh b/ct/lyrionmusicserver.sh index 275f91024..8ef432b93 100644 --- a/ct/lyrionmusicserver.sh +++ b/ct/lyrionmusicserver.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-3}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -31,9 +31,10 @@ function update_script() { exit fi - DEB_URL=$(curl_with_retry 'https://lyrion.org/getting-started/' | grep -oP ']*href="\K[^"]*amd64\.deb(?="[^>]*>)' | head -n 1) - RELEASE=$(echo "$DEB_URL" | grep -oP 'lyrionmusicserver_\K[0-9.]+(?=_amd64\.deb)') - DEB_FILE="/tmp/lyrionmusicserver_${RELEASE}_amd64.deb" + DEB_ARCH=$(arch_resolve "amd64" "arm") + DEB_URL=$(curl_with_retry 'https://lyrion.org/getting-started/' | grep -oP "]*href=\"\K[^\"]*${DEB_ARCH}\.deb(?=\"[^>]*>)" | head -n 1) + RELEASE=$(echo "$DEB_URL" | grep -oP "lyrionmusicserver_\K[0-9.]+(?=_${DEB_ARCH}\.deb)") + DEB_FILE="/tmp/lyrionmusicserver_${RELEASE}_${DEB_ARCH}.deb" if [[ ! -f /opt/lyrion_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/lyrion_version.txt)" ]]; then msg_info "Updating $APP to ${RELEASE}" curl_with_retry "$DEB_URL" "$DEB_FILE" diff --git a/ct/mail-archiver.sh b/ct/mail-archiver.sh index 366d367a6..944ed4336 100644 --- a/ct/mail-archiver.sh +++ b/ct/mail-archiver.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/managemydamnlife.sh b/ct/managemydamnlife.sh index ae9643d14..eedda1f85 100644 --- a/ct/managemydamnlife.sh +++ b/ct/managemydamnlife.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-6}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/manyfold.sh b/ct/manyfold.sh index 86e1022dd..2537736fd 100644 --- a/ct/manyfold.sh +++ b/ct/manyfold.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-15}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/matomo.sh b/ct/matomo.sh index a753daf68..e00eec688 100644 --- a/ct/matomo.sh +++ b/ct/matomo.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-16}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/matter-server.sh b/ct/matter-server.sh index ffbb5a559..1f2a4337d 100644 --- a/ct/matter-server.sh +++ b/ct/matter-server.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -41,7 +41,7 @@ function update_script() { echo "${MATTER_VERSION}" >~/.matter-server msg_ok "Updated Matter Server" - fetch_and_deploy_gh_release "chip-ota-provider-app" "home-assistant-libs/matter-linux-ota-provider" "singlefile" "latest" "/usr/local/bin" "chip-ota-provider-app-x86-64" + fetch_and_deploy_gh_release "chip-ota-provider-app" "home-assistant-libs/matter-linux-ota-provider" "singlefile" "latest" "/usr/local/bin" "chip-ota-provider-app-$(arch_resolve "x86-64" "aarch64")" msg_info "Starting Service" systemctl start matter-server diff --git a/ct/matterjs-server.sh b/ct/matterjs-server.sh index 9758ab6cd..65d53f5f5 100644 --- a/ct/matterjs-server.sh +++ b/ct/matterjs-server.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/mediamanager.sh b/ct/mediamanager.sh index 9a2d07dce..3ae88f893 100644 --- a/ct/mediamanager.sh +++ b/ct/mediamanager.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-3072}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/install/komga-install.sh b/install/komga-install.sh index 329f9f0a9..7943dbfac 100644 --- a/install/komga-install.sh +++ b/install/komga-install.sh @@ -22,7 +22,7 @@ $STD apt -y install \ msg_ok "Installed dependencies" JAVA_VERSION="23" setup_java -fetch_and_deploy_gh_release "kepubify" "pgaskin/kepubify" "singlefile" "latest" "/usr/bin" "kepubify-linux-64bit" +fetch_and_deploy_gh_release "kepubify" "pgaskin/kepubify" "singlefile" "latest" "/usr/bin" "kepubify-linux-$(arch_resolve "64bit" "arm64")" USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "komga-org" "gotson/komga" "singlefile" "latest" "/opt/komga" "komga*.jar" mv /opt/komga/komga-*.jar /opt/komga/komga.jar @@ -35,7 +35,7 @@ After=syslog.target network.target [Service] Type=simple WorkingDirectory=/opt/komga/ -Environment=LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu +Environment=LD_LIBRARY_PATH=/usr/lib/$(arch_resolve "x86_64-linux-gnu" "aarch64-linux-gnu") ExecStart=/usr/bin/java --enable-native-access=ALL-UNNAMED -jar -Xmx2g komga.jar TimeoutStopSec=20 KillMode=process diff --git a/install/kubo-install.sh b/install/kubo-install.sh index cc86dae3b..adcd3fae4 100644 --- a/install/kubo-install.sh +++ b/install/kubo-install.sh @@ -14,9 +14,10 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "kubo" "ipfs/kubo" "prebuild" "latest" "/usr/local/kubo" "kubo*linux-amd64.tar.gz" +fetch_and_deploy_gh_release "kubo" "ipfs/kubo" "prebuild" "latest" "/usr/local/kubo" "kubo*linux-$(arch_resolve).tar.gz" msg_info "Configuring IPFS" +export HOME="${HOME:-/root}" $STD ln -s /usr/local/kubo/ipfs /usr/local/bin/ipfs $STD ipfs init ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001 diff --git a/install/lazylibrarian-install.sh b/install/lazylibrarian-install.sh index a78976ec6..28b72b1d5 100644 --- a/install/lazylibrarian-install.sh +++ b/install/lazylibrarian-install.sh @@ -27,16 +27,16 @@ msg_info "Setup Python3" $STD apt install -y \ pip \ python3-irc -$STD pip install jaraco.stream -$STD pip install python-Levenshtein -$STD pip install soupsieve -$STD pip install pypdf +$STD pip install --break-system-packages jaraco.stream +$STD pip install --break-system-packages python-Levenshtein +$STD pip install --break-system-packages soupsieve +$STD pip install --break-system-packages pypdf msg_ok "Setup Python3" msg_info "Installing LazyLibrarian" $STD git clone https://gitlab.com/LazyLibrarian/LazyLibrarian /opt/LazyLibrarian cd /opt/LazyLibrarian -$STD pip install . +$STD pip install --break-system-packages . msg_ok "Installed LazyLibrarian" msg_info "Creating Service" diff --git a/install/librespeed-rust-install.sh b/install/librespeed-rust-install.sh index 31e74037e..e05418822 100644 --- a/install/librespeed-rust-install.sh +++ b/install/librespeed-rust-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "librespeed-rust" "librespeed/speedtest-rust" "binary" "latest" "/opt/librespeed-rust" "librespeed-rs-x86_64-unknown-linux-gnu.deb" +fetch_and_deploy_gh_release "librespeed-rust" "librespeed/speedtest-rust" "binary" "latest" "/opt/librespeed-rust" "librespeed-rs-$(arch_resolve "x86_64" "aarch64")-unknown-linux-gnu.deb" msg_info "Enabling Service" systemctl enable -q --now speedtest_rs diff --git a/install/lidarr-install.sh b/install/lidarr-install.sh index 85f0073ec..83bc66ac1 100644 --- a/install/lidarr-install.sh +++ b/install/lidarr-install.sh @@ -17,10 +17,11 @@ msg_info "Installing Dependencies" $STD apt install -y \ sqlite3 \ libchromaprint-tools \ + libicu-dev \ mediainfo msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "lidarr" "Lidarr/Lidarr" "prebuild" "latest" "/opt/Lidarr" "Lidarr.master*linux-core-x64.tar.gz" +fetch_and_deploy_gh_release "lidarr" "Lidarr/Lidarr" "prebuild" "latest" "/opt/Lidarr" "Lidarr.master*linux-core-$(arch_resolve "x64" "arm64").tar.gz" msg_info "Configuring Lidarr" mkdir -p /var/lib/lidarr/ diff --git a/install/linkding-install.sh b/install/linkding-install.sh index 88ed1d433..9ab3e8e94 100644 --- a/install/linkding-install.sh +++ b/install/linkding-install.sh @@ -33,7 +33,7 @@ msg_info "Building Frontend" cd /opt/linkding $STD npm ci $STD npm run build -ln -sf /usr/lib/x86_64-linux-gnu/mod_icu.so /opt/linkding/libicu.so +ln -sf /usr/lib/$(arch_resolve "x86_64-linux-gnu" "aarch64-linux-gnu")/mod_icu.so /opt/linkding/libicu.so msg_ok "Built Frontend" msg_info "Setting up LinkDing" diff --git a/install/listmonk-install.sh b/install/listmonk-install.sh index 14bb4ebad..22c42a96c 100644 --- a/install/listmonk-install.sh +++ b/install/listmonk-install.sh @@ -29,7 +29,7 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP } >>~/listmonk.creds msg_ok "Configured PostgreSQL" -fetch_and_deploy_gh_release "listmonk" "knadh/listmonk" "prebuild" "latest" "/opt/listmonk" "listmonk*linux_amd64.tar.gz" +fetch_and_deploy_gh_release "listmonk" "knadh/listmonk" "prebuild" "latest" "/opt/listmonk" "listmonk*linux_$(arch_resolve).tar.gz" msg_info "Configuring listmonk" mkdir -p /opt/listmonk/uploads diff --git a/install/lyrionmusicserver-install.sh b/install/lyrionmusicserver-install.sh index a348c9fbb..b12f55c06 100644 --- a/install/lyrionmusicserver-install.sh +++ b/install/lyrionmusicserver-install.sh @@ -14,9 +14,10 @@ network_check update_os msg_info "Setup Lyrion Music Server" -DEB_URL=$(curl_with_retry 'https://lyrion.org/getting-started/' | grep -oP ']*href="\K[^"]*amd64\.deb(?="[^>]*>)' | head -n 1) -RELEASE=$(echo "$DEB_URL" | grep -oP 'lyrionmusicserver_\K[0-9.]+(?=_amd64\.deb)') -DEB_FILE="/tmp/lyrionmusicserver_${RELEASE}_amd64.deb" +DEB_ARCH=$(arch_resolve "amd64" "arm") +DEB_URL=$(curl_with_retry 'https://lyrion.org/getting-started/' | grep -oP "]*href=\"\K[^\"]*${DEB_ARCH}\.deb(?=\"[^>]*>)" | head -n 1) +RELEASE=$(echo "$DEB_URL" | grep -oP "lyrionmusicserver_\K[0-9.]+(?=_${DEB_ARCH}\.deb)") +DEB_FILE="/tmp/lyrionmusicserver_${RELEASE}_${DEB_ARCH}.deb" curl_with_retry "$DEB_URL" "$DEB_FILE" $STD apt install "$DEB_FILE" -y rm -f "$DEB_FILE" diff --git a/install/mail-archiver-install.sh b/install/mail-archiver-install.sh index 24fb81061..d4dfc839c 100644 --- a/install/mail-archiver-install.sh +++ b/install/mail-archiver-install.sh @@ -22,8 +22,14 @@ setup_deb822_repo \ "main" $STD apt install -y \ dotnet-sdk-10.0 \ - aspnetcore-runtime-8.0 \ libgssapi-krb5-2 +if [[ "$(arch_resolve)" == "arm64" ]]; then + curl -fsSL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh + $STD bash /tmp/dotnet-install.sh --channel 8.0 --runtime aspnetcore --install-dir /usr/lib/dotnet + rm -f /tmp/dotnet-install.sh +else + $STD apt install -y aspnetcore-runtime-8.0 +fi msg_ok "Installed Dependencies" PG_VERSION="17" setup_postgresql diff --git a/install/matter-server-install.sh b/install/matter-server-install.sh index 4fff7775d..acedc4eb3 100644 --- a/install/matter-server-install.sh +++ b/install/matter-server-install.sh @@ -39,7 +39,7 @@ $STD uv pip install --python /opt/matter-server/.venv/bin/python "python-matter- echo "${MATTER_VERSION}" >~/.matter-server msg_ok "Set up Matter Server" -fetch_and_deploy_gh_release "chip-ota-provider-app" "home-assistant-libs/matter-linux-ota-provider" "singlefile" "latest" "/usr/local/bin" "chip-ota-provider-app-x86-64" +fetch_and_deploy_gh_release "chip-ota-provider-app" "home-assistant-libs/matter-linux-ota-provider" "singlefile" "latest" "/usr/local/bin" "chip-ota-provider-app-$(arch_resolve "x86-64" "aarch64")" msg_info "Configuring Network" cat </etc/sysctl.d/99-matter.conf diff --git a/misc/tools.func b/misc/tools.func index 624822415..727c02bb2 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -764,8 +764,11 @@ manage_tool_repository() { local distro_codename distro_codename=$(get_os_info codename) - # Suite mapping with fallback for newer releases not yet supported by upstream - if [[ "$distro_id" == "debian" ]]; then + if [[ "$distro_id" == "debian" && "$(dpkg --print-architecture)" == "arm64" ]]; then + distro_id="ubuntu" + suite="noble" + repo_url="https://repo.mongodb.org/apt/ubuntu" + elif [[ "$distro_id" == "debian" ]]; then case "$distro_codename" in trixie | forky | sid) # Testing/unstable releases fallback to latest stable suite From 59b560a40287c7a21b79ea2090fc92d6ee2ec8fd Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 22:22:20 +0000 Subject: [PATCH 16/98] Update CHANGELOG.md (#15250) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a010bff6..6cb408c24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -499,6 +499,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### ✨ New Features + - [arm64] Port scripts between komga & mediamanager to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15245](https://github.com/community-scripts/ProxmoxVE/pull/15245)) - [arm64] port scripts between hyperhdr & kometa to arm64 [@asylumexp](https://github.com/asylumexp) ([#15234](https://github.com/community-scripts/ProxmoxVE/pull/15234)) ### ❔ Uncategorized From 610a3d56b72437ada6d1b902acb06677fc323aba Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Sun, 21 Jun 2026 08:48:19 +1000 Subject: [PATCH 17/98] add arm64 title check to autolabeler (#15235) --- .github/workflows/autolabeler.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/autolabeler.yml b/.github/workflows/autolabeler.yml index 899a8d3c3..78695b181 100644 --- a/.github/workflows/autolabeler.yml +++ b/.github/workflows/autolabeler.yml @@ -21,7 +21,7 @@ jobs: - name: Install dependencies run: npm install minimatch - - name: Label PR based on file changes and PR template + - name: Label PR based on file changes, title, and PR template uses: actions/github-script@v7 with: script: | @@ -35,6 +35,7 @@ jobs: const prNumber = context.payload.pull_request.number; const prBody = context.payload.pull_request.body || ""; + const prTitle = context.payload.pull_request.title || ""; let labelsToAdd = new Set(); @@ -68,6 +69,11 @@ jobs: } } + // Add arm64 label if PR title contains "arm64" + if (/arm64/i.test(prTitle)) { + labelsToAdd.add("arm64"); + } + // Always parse template checkboxes to add content-type labels (bugfix, feature, etc.) const templateLabelMappings = { "🐞 **Bug fix**": "bugfix", From 2d5441f3d523eab24bf301056b9acd6e0dc4d864 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 22:48:45 +0000 Subject: [PATCH 18/98] Update CHANGELOG.md (#15251) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cb408c24..6b484f50d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -502,6 +502,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - [arm64] Port scripts between komga & mediamanager to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15245](https://github.com/community-scripts/ProxmoxVE/pull/15245)) - [arm64] port scripts between hyperhdr & kometa to arm64 [@asylumexp](https://github.com/asylumexp) ([#15234](https://github.com/community-scripts/ProxmoxVE/pull/15234)) +### 📂 Github + + - add arm64 title check to autolabeler [@asylumexp](https://github.com/asylumexp) ([#15235](https://github.com/community-scripts/ProxmoxVE/pull/15235)) + ### ❔ Uncategorized - chore(ct): sync limesurvey defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15247](https://github.com/community-scripts/ProxmoxVE/pull/15247)) From ecd563b94eb868cbfb90d9890dad661c856ecaa9 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 00:26:06 +0000 Subject: [PATCH 19/98] Archive old changelog entries (#15252) Co-authored-by: github-actions[bot] --- .github/changelogs/2026/06.md | 144 ++++++++++++++++++++++++++++++++++ CHANGELOG.md | 123 ++--------------------------- 2 files changed, 149 insertions(+), 118 deletions(-) diff --git a/.github/changelogs/2026/06.md b/.github/changelogs/2026/06.md index ddd1c030d..429f376cf 100644 --- a/.github/changelogs/2026/06.md +++ b/.github/changelogs/2026/06.md @@ -1,3 +1,147 @@ +## 2026-06-20 + +### 🆕 New Scripts + + - Apache-Airflow ([#15228](https://github.com/community-scripts/ProxmoxVE/pull/15228)) +- Plane ([#15227](https://github.com/community-scripts/ProxmoxVE/pull/15227)) + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Fix docker service crash [@asylumexp](https://github.com/asylumexp) ([#15243](https://github.com/community-scripts/ProxmoxVE/pull/15243)) + - Nginxproxymanager: repair broken certbot pip before update [@MickLesk](https://github.com/MickLesk) ([#15224](https://github.com/community-scripts/ProxmoxVE/pull/15224)) + + - #### ✨ New Features + + - [arm64] Port scripts between komga & mediamanager to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15245](https://github.com/community-scripts/ProxmoxVE/pull/15245)) + - [arm64] port scripts between hyperhdr & kometa to arm64 [@asylumexp](https://github.com/asylumexp) ([#15234](https://github.com/community-scripts/ProxmoxVE/pull/15234)) + +### 📂 Github + + - add arm64 title check to autolabeler [@asylumexp](https://github.com/asylumexp) ([#15235](https://github.com/community-scripts/ProxmoxVE/pull/15235)) + +### ❔ Uncategorized + + - chore(ct): sync limesurvey defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15247](https://github.com/community-scripts/ProxmoxVE/pull/15247)) + +## 2026-06-19 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - add avx2 check to influxdb3 [@asylumexp](https://github.com/asylumexp) ([#15208](https://github.com/community-scripts/ProxmoxVE/pull/15208)) + - Step ca leaf data patch [@heinemannj](https://github.com/heinemannj) ([#15210](https://github.com/community-scripts/ProxmoxVE/pull/15210)) + - Kimai: Add APP_SECRET env var [@tremor021](https://github.com/tremor021) ([#15199](https://github.com/community-scripts/ProxmoxVE/pull/15199)) + + - #### ✨ New Features + + - [arm64] Port scripts between garage-hortusfox to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15207](https://github.com/community-scripts/ProxmoxVE/pull/15207)) + - [arm64] Port scripts titled between A-F to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15181](https://github.com/community-scripts/ProxmoxVE/pull/15181)) + +### 📂 Github + + - fix (workflow): YAML syntax error in pocketbase stub generation [@Trollfjorden](https://github.com/Trollfjorden) ([#15174](https://github.com/community-scripts/ProxmoxVE/pull/15174)) + +### ❔ Uncategorized + + - chore(ct): sync coredns defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15182](https://github.com/community-scripts/ProxmoxVE/pull/15182)) +- chore(ct): sync gatus defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15184](https://github.com/community-scripts/ProxmoxVE/pull/15184)) +- chore(ct): sync bitmagnet defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15183](https://github.com/community-scripts/ProxmoxVE/pull/15183)) + +## 2026-06-18 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - flowise: add deps / uv / python 3.11 [@MickLesk](https://github.com/MickLesk) ([#15177](https://github.com/community-scripts/ProxmoxVE/pull/15177)) + + - #### đŸ’Ĩ Breaking Changes + + - refactor: crafty-controller [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15178](https://github.com/community-scripts/ProxmoxVE/pull/15178)) + +## 2026-06-17 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - kasm: fix release detection [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15151](https://github.com/community-scripts/ProxmoxVE/pull/15151)) + + - #### ✨ New Features + + - trek: update install and upgrade workflow for v3.1.0 [@MickLesk](https://github.com/MickLesk) ([#15165](https://github.com/community-scripts/ProxmoxVE/pull/15165)) + + - #### đŸ’Ĩ Breaking Changes + + - TREK: Pin version [@tremor021](https://github.com/tremor021) ([#15156](https://github.com/community-scripts/ProxmoxVE/pull/15156)) + + - #### 🔧 Refactor + + - chore(paperless-ngx): pin version to prevent v3 update [@tomfrenzel](https://github.com/tomfrenzel) ([#15171](https://github.com/community-scripts/ProxmoxVE/pull/15171)) + +### 🧰 Tools + + - #### 🐞 Bug Fixes + + - immich public proxy: replace npm install with npm ci for consistent dependency installation [@MickLesk](https://github.com/MickLesk) ([#15166](https://github.com/community-scripts/ProxmoxVE/pull/15166)) + +## 2026-06-16 + +### 🆕 New Scripts + + - Feishin ([#15130](https://github.com/community-scripts/ProxmoxVE/pull/15130)) +- Kiwix ([#15131](https://github.com/community-scripts/ProxmoxVE/pull/15131)) +- Add runtime status guard and deleted script stubs [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15125](https://github.com/community-scripts/ProxmoxVE/pull/15125)) + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - fix(degoog): use localhost for valkey url [@ethan-hgwr](https://github.com/ethan-hgwr) ([#15149](https://github.com/community-scripts/ProxmoxVE/pull/15149)) + - Fix InvoiceShelf install/update Yarn package manager mismatch [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15141](https://github.com/community-scripts/ProxmoxVE/pull/15141)) + - fix storyteller install failure with yarn 4 corepack [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15140](https://github.com/community-scripts/ProxmoxVE/pull/15140)) + - fix: generate policy-compliant OpenObserve root password [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15137](https://github.com/community-scripts/ProxmoxVE/pull/15137)) + +## 2026-06-15 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Watcharr: Clean install on update [@tremor021](https://github.com/tremor021) ([#15119](https://github.com/community-scripts/ProxmoxVE/pull/15119)) + - Vaultwarden: extend version check for VaultWarden update [@MickLesk](https://github.com/MickLesk) ([#15105](https://github.com/community-scripts/ProxmoxVE/pull/15105)) + + - #### ✨ New Features + + - degoog: add curl-impersonate to script [@MickLesk](https://github.com/MickLesk) ([#15117](https://github.com/community-scripts/ProxmoxVE/pull/15117)) + +### 💾 Core + + - #### ✨ New Features + + - tools.func: extend mesa-vulkan-drivers and vulkan-tools to installation for ARC GPU's [@MickLesk](https://github.com/MickLesk) ([#15106](https://github.com/community-scripts/ProxmoxVE/pull/15106)) + + - #### 🔧 Refactor + + - core: improve mirror selection and error handling [@MickLesk](https://github.com/MickLesk) ([#15108](https://github.com/community-scripts/ProxmoxVE/pull/15108)) + - core: implement gateway validation for DHCP and static networks [@MickLesk](https://github.com/MickLesk) ([#15107](https://github.com/community-scripts/ProxmoxVE/pull/15107)) + +## 2026-06-14 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - Iinvoiceninja: fix nginx setup assets port [@MickLesk](https://github.com/MickLesk) ([#15090](https://github.com/community-scripts/ProxmoxVE/pull/15090)) + - CheckMK: remove stale backup site before creating new backup during update [@MickLesk](https://github.com/MickLesk) ([#15088](https://github.com/community-scripts/ProxmoxVE/pull/15088)) + + - #### 🔧 Refactor + + - Refactor: Implement backup functions for scripts C-D [@tremor021](https://github.com/tremor021) ([#15096](https://github.com/community-scripts/ProxmoxVE/pull/15096)) + ## 2026-06-13 ### 🆕 New Scripts diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b484f50d..d66cd7016 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -65,6 +65,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit + + + @@ -78,7 +81,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
-

June (13 entries)

+

June (20 entries)

[View June 2026 Changelog](.github/changelogs/2026/06.md) @@ -1080,120 +1083,4 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🔧 Refactor - - core: suppress MOTD for non-interactive shells [@MickLesk](https://github.com/MickLesk) ([#14638](https://github.com/community-scripts/ProxmoxVE/pull/14638)) - -## 2026-05-21 - -### 🚀 Updated Scripts - - - #### 🐞 Bug Fixes - - - snowshare: use mv instead of cp for uploads backup to prevent disk fill [@TuroYT](https://github.com/TuroYT) ([#14558](https://github.com/community-scripts/ProxmoxVE/pull/14558)) - - Technitium DNS: download release before stopping the service on update [@w-gitops](https://github.com/w-gitops) ([#14616](https://github.com/community-scripts/ProxmoxVE/pull/14616)) - - - #### ✨ New Features - - - Proxmox VE 9.2 support [@MickLesk](https://github.com/MickLesk) ([#14624](https://github.com/community-scripts/ProxmoxVE/pull/14624)) - -## 2026-05-20 - -### 🚀 Updated Scripts - - - #### 🐞 Bug Fixes - - - Update mylar3 to point to new Repo [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#14606](https://github.com/community-scripts/ProxmoxVE/pull/14606)) - - Ollama: Fix for latest version [@tremor021](https://github.com/tremor021) ([#14596](https://github.com/community-scripts/ProxmoxVE/pull/14596)) - - - #### ✨ New Features - - - Profilarr v2: Update and Refactor whole Script [@MickLesk](https://github.com/MickLesk) ([#14584](https://github.com/community-scripts/ProxmoxVE/pull/14584)) - -## 2026-05-19 - -### 🆕 New Scripts - - - LobeHub ([#14441](https://github.com/community-scripts/ProxmoxVE/pull/14441)) - -### 🚀 Updated Scripts - - - Update nodejs Versions [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#14582](https://github.com/community-scripts/ProxmoxVE/pull/14582)) - - - #### 🐞 Bug Fixes - - - ESPConnect: Fix paths to SSL certificates [@tremor021](https://github.com/tremor021) ([#14591](https://github.com/community-scripts/ProxmoxVE/pull/14591)) - - ReactiveResume: set correct WorkingDirectory for systemd service [@MickLesk](https://github.com/MickLesk) ([#14579](https://github.com/community-scripts/ProxmoxVE/pull/14579)) - - Sparkyfitness: add missing nginx template variable substitutions [@MickLesk](https://github.com/MickLesk) ([#14578](https://github.com/community-scripts/ProxmoxVE/pull/14578)) - - Wanderer: include dev dependencies during build [@MickLesk](https://github.com/MickLesk) ([#14577](https://github.com/community-scripts/ProxmoxVE/pull/14577)) - - Whisparr: switch from nightly to stable GitHub release [@MickLesk](https://github.com/MickLesk) ([#14581](https://github.com/community-scripts/ProxmoxVE/pull/14581)) - - - #### 🔧 Refactor - - - Refactor: SonarQube [@tremor021](https://github.com/tremor021) ([#14594](https://github.com/community-scripts/ProxmoxVE/pull/14594)) - -## 2026-05-18 - -### 🆕 New Scripts - - - ESPconnect ([#14444](https://github.com/community-scripts/ProxmoxVE/pull/14444)) -- degoog ([#14533](https://github.com/community-scripts/ProxmoxVE/pull/14533)) -- Webtrees ([#14532](https://github.com/community-scripts/ProxmoxVE/pull/14532)) - -### 🚀 Updated Scripts - - - #### 🐞 Bug Fixes - - - Bichon: Support v1 migration [@tomfrenzel](https://github.com/tomfrenzel) ([#14524](https://github.com/community-scripts/ProxmoxVE/pull/14524)) - - - #### ✨ New Features - - - Pangolin: bump to 1.18.4, fix missing statusHistory migration [@MickLesk](https://github.com/MickLesk) ([#14566](https://github.com/community-scripts/ProxmoxVE/pull/14566)) - -## 2026-05-17 - -### 🚀 Updated Scripts - - - #### 🐞 Bug Fixes - - - dashy: fix yarn-missing on update and back up full user-data [@lissy93](https://github.com/lissy93) ([#14548](https://github.com/community-scripts/ProxmoxVE/pull/14548)) - - - #### ✨ New Features - - - tools.func: replace max-time with speed-limit stall detection in curl_download [@MickLesk](https://github.com/MickLesk) ([#14545](https://github.com/community-scripts/ProxmoxVE/pull/14545)) - -## 2026-05-16 - -### 🚀 Updated Scripts - - - #### 🐞 Bug Fixes - - - Homelable: replace passlib with bcrypt for password hashing [@MickLesk](https://github.com/MickLesk) ([#14530](https://github.com/community-scripts/ProxmoxVE/pull/14530)) - - dashy: fix: restore [@CrazyWolf13](https://github.com/CrazyWolf13) ([#14527](https://github.com/community-scripts/ProxmoxVE/pull/14527)) - - Update Tinyauth source URL in installation script [@MehrunesSky](https://github.com/MehrunesSky) ([#14483](https://github.com/community-scripts/ProxmoxVE/pull/14483)) - - Excalidraw: Fix build [@tremor021](https://github.com/tremor021) ([#14509](https://github.com/community-scripts/ProxmoxVE/pull/14509)) - - - #### ✨ New Features - - - Update authentik version to 2026.2.3 [@thieneret](https://github.com/thieneret) ([#14517](https://github.com/community-scripts/ProxmoxVE/pull/14517)) - -## 2026-05-15 - -### 🚀 Updated Scripts - - - #### 🐞 Bug Fixes - - - OPNsense: replace undefined msg_warn with inline echo in alloc retry [@MickLesk](https://github.com/MickLesk) ([#14500](https://github.com/community-scripts/ProxmoxVE/pull/14500)) - - Checkmk: detect OMD version suffix dynamically on update [@MickLesk](https://github.com/MickLesk) ([#14496](https://github.com/community-scripts/ProxmoxVE/pull/14496)) - - - #### ✨ New Features - - - SearXNG: enable JSON format by default for API integrations [@MickLesk](https://github.com/MickLesk) ([#14498](https://github.com/community-scripts/ProxmoxVE/pull/14498)) - - - #### 🔧 Refactor - - - Refactor: Ollama use tools.func [@MickLesk](https://github.com/MickLesk) ([#14501](https://github.com/community-scripts/ProxmoxVE/pull/14501)) - -### 💾 Core - - - #### 🐞 Bug Fixes - - - core: fall back to silent mode when no TTY or whiptail unavailable [@MickLesk](https://github.com/MickLesk) ([#14497](https://github.com/community-scripts/ProxmoxVE/pull/14497)) \ No newline at end of file + - core: suppress MOTD for non-interactive shells [@MickLesk](https://github.com/MickLesk) ([#14638](https://github.com/community-scripts/ProxmoxVE/pull/14638)) \ No newline at end of file From 518b8406e3f04e4c2485918a2164e9ee9f95014e Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 00:26:32 +0000 Subject: [PATCH 20/98] Update CHANGELOG.md (#15253) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d66cd7016..0ce0d6446 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -486,6 +486,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
+## 2026-06-21 + ## 2026-06-20 ### 🆕 New Scripts From df187136ef6d2c4117dcd3dc12e9417ca4ee2f63 Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Mon, 22 Jun 2026 04:42:17 +1000 Subject: [PATCH 21/98] [arm64] Port scripts between mediamtx-nocodb to support arm64 (#15254) --- ct/mediamtx.sh | 4 ++-- ct/memos.sh | 4 ++-- ct/mini-qr.sh | 2 +- ct/minthcm.sh | 2 +- ct/mongodb.sh | 2 +- ct/musicseerr.sh | 2 +- ct/n8n.sh | 2 +- ct/nagios.sh | 2 +- ct/nametag.sh | 2 +- ct/navidrome.sh | 2 +- ct/neko.sh | 2 +- ct/netbird.sh | 2 +- ct/netboot-xyz.sh | 2 +- ct/netvisor.sh | 4 ++-- ct/nextexplorer.sh | 2 +- ct/nextpvr.sh | 2 +- ct/nginx-ui.sh | 4 ++-- ct/nginxproxymanager.sh | 2 +- ct/nightscout.sh | 2 +- ct/nocodb.sh | 4 ++-- install/mediamtx-install.sh | 2 +- install/memos-install.sh | 2 +- install/minthcm-install.sh | 4 ++++ install/mongodb-install.sh | 10 +++++++--- install/nextpvr-install.sh | 1 + install/nginx-ui-install.sh | 2 +- install/nocodb-install.sh | 2 +- 27 files changed, 41 insertions(+), 32 deletions(-) diff --git a/ct/mediamtx.sh b/ct/mediamtx.sh index 36bffe8a4..eec17f329 100644 --- a/ct/mediamtx.sh +++ b/ct/mediamtx.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" @@ -35,7 +35,7 @@ function update_script() { systemctl stop mediamtx msg_ok "Service stopped" - fetch_and_deploy_gh_release "mediamtx" "bluenviron/mediamtx" "prebuild" "latest" "/opt/mediamtx" "mediamtx*linux_amd64.tar.gz" + fetch_and_deploy_gh_release "mediamtx" "bluenviron/mediamtx" "prebuild" "latest" "/opt/mediamtx" "mediamtx*linux_$(arch_resolve).tar.gz" msg_info "Starting service" systemctl start mediamtx diff --git a/ct/memos.sh b/ct/memos.sh index 56e909289..f2ceee908 100644 --- a/ct/memos.sh +++ b/ct/memos.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-3}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -33,7 +33,7 @@ function update_script() { systemctl stop memos msg_ok "Service stopped" - fetch_and_deploy_gh_release "memos" "usememos/memos" "prebuild" "latest" "/opt/memos" "memos*linux_amd64.tar.gz" + fetch_and_deploy_gh_release "memos" "usememos/memos" "prebuild" "latest" "/opt/memos" "memos*linux_$(arch_resolve).tar.gz" msg_info "Starting service" systemctl start memos diff --git a/ct/mini-qr.sh b/ct/mini-qr.sh index 0912d9b20..0e8a1038c 100644 --- a/ct/mini-qr.sh +++ b/ct/mini-qr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-6}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/minthcm.sh b/ct/minthcm.sh index f2badd08d..4bdbd7813 100644 --- a/ct/minthcm.sh +++ b/ct/minthcm.sh @@ -12,7 +12,7 @@ var_cpu="${var_cpu:-4}" var_ram="${var_ram:-4096}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/mongodb.sh b/ct/mongodb.sh index c1f644a17..ec4f27a28 100644 --- a/ct/mongodb.sh +++ b/ct/mongodb.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/musicseerr.sh b/ct/musicseerr.sh index a20484fb8..f7aa74e6d 100644 --- a/ct/musicseerr.sh +++ b/ct/musicseerr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/n8n.sh b/ct/n8n.sh index 3a11fac91..9d5f793ac 100644 --- a/ct/n8n.sh +++ b/ct/n8n.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/nagios.sh b/ct/nagios.sh index a73a55fe5..55df3a9c4 100644 --- a/ct/nagios.sh +++ b/ct/nagios.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/nametag.sh b/ct/nametag.sh index 0fd45d877..9346a80f7 100644 --- a/ct/nametag.sh +++ b/ct/nametag.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/navidrome.sh b/ct/navidrome.sh index 7d3233934..b7fbb27ca 100644 --- a/ct/navidrome.sh +++ b/ct/navidrome.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/neko.sh b/ct/neko.sh index 107573757..6b8a92c3c 100644 --- a/ct/neko.sh +++ b/ct/neko.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-12}" var_os="${var_os:-debian}" var_version="${var_version:-12}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" diff --git a/ct/netbird.sh b/ct/netbird.sh index 0975a9bac..336094791 100644 --- a/ct/netbird.sh +++ b/ct/netbird.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_tun="${var_tun:-yes}" diff --git a/ct/netboot-xyz.sh b/ct/netboot-xyz.sh index 95e5b63a0..16283c18d 100644 --- a/ct/netboot-xyz.sh +++ b/ct/netboot-xyz.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/netvisor.sh b/ct/netvisor.sh index ae0b1aae8..370f10bca 100644 --- a/ct/netvisor.sh +++ b/ct/netvisor.sh @@ -8,11 +8,11 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Scanopy" var_tags="${var_tags:-analytics}" var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-3072}" +var_ram="${var_ram:-4096}" var_disk="${var_disk:-6}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/nextexplorer.sh b/ct/nextexplorer.sh index 3a869f72c..a60d11a2f 100644 --- a/ct/nextexplorer.sh +++ b/ct/nextexplorer.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-3072}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/nextpvr.sh b/ct/nextpvr.sh index 7bb7a3439..d63b72b15 100644 --- a/ct/nextpvr.sh +++ b/ct/nextpvr.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" diff --git a/ct/nginx-ui.sh b/ct/nginx-ui.sh index 1f9c3ec69..a257c9090 100644 --- a/ct/nginx-ui.sh +++ b/ct/nginx-ui.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -39,7 +39,7 @@ function update_script() { cp /usr/local/etc/nginx-ui/app.ini /tmp/nginx-ui-app.ini.bak msg_ok "Backed up Configuration" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nginx-ui" "0xJacky/nginx-ui" "prebuild" "latest" "/opt/nginx-ui" "nginx-ui-linux-64.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nginx-ui" "0xJacky/nginx-ui" "prebuild" "latest" "/opt/nginx-ui" "nginx-ui-linux-$(arch_resolve "64" "arm64-v8a").tar.gz" msg_info "Updating Binary" cp /opt/nginx-ui/nginx-ui /usr/local/bin/nginx-ui diff --git a/ct/nginxproxymanager.sh b/ct/nginxproxymanager.sh index 1be12903a..71b4939f6 100644 --- a/ct/nginxproxymanager.sh +++ b/ct/nginxproxymanager.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-12}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/nightscout.sh b/ct/nightscout.sh index e6133a250..ff5bf789b 100644 --- a/ct/nightscout.sh +++ b/ct/nightscout.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/nocodb.sh b/ct/nocodb.sh index f55cb5d24..2a5263e79 100644 --- a/ct/nocodb.sh +++ b/ct/nocodb.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -35,7 +35,7 @@ function update_script() { systemctl stop nocodb msg_ok "Stopped Service" - fetch_and_deploy_gh_release "nocodb" "nocodb/nocodb" "singlefile" "latest" "/opt/nocodb/" "Noco-linux-x64" + fetch_and_deploy_gh_release "nocodb" "nocodb/nocodb" "singlefile" "latest" "/opt/nocodb/" "Noco-linux-$(arch_resolve "x64" "arm64")" msg_info "Starting Service" systemctl start nocodb diff --git a/install/mediamtx-install.sh b/install/mediamtx-install.sh index a657aa03e..0fcf7f910 100644 --- a/install/mediamtx-install.sh +++ b/install/mediamtx-install.sh @@ -18,7 +18,7 @@ msg_info "Installing Dependencies" $STD apt install -y ffmpeg msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "mediamtx" "bluenviron/mediamtx" "prebuild" "latest" "/opt/mediamtx" "mediamtx*linux_amd64.tar.gz" +fetch_and_deploy_gh_release "mediamtx" "bluenviron/mediamtx" "prebuild" "latest" "/opt/mediamtx" "mediamtx*linux_$(arch_resolve).tar.gz" msg_info "Creating Service" cat </etc/systemd/system/mediamtx.service diff --git a/install/memos-install.sh b/install/memos-install.sh index f95530327..704865d6f 100644 --- a/install/memos-install.sh +++ b/install/memos-install.sh @@ -14,7 +14,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "memos" "usememos/memos" "prebuild" "latest" "/opt/memos" "memos*linux_amd64.tar.gz" +fetch_and_deploy_gh_release "memos" "usememos/memos" "prebuild" "latest" "/opt/memos" "memos*linux_$(arch_resolve).tar.gz" mkdir -p /opt/memos_data msg_info "Creating Service" diff --git a/install/minthcm-install.sh b/install/minthcm-install.sh index d9d5071bd..629c6a6ce 100644 --- a/install/minthcm-install.sh +++ b/install/minthcm-install.sh @@ -13,6 +13,10 @@ setting_up_container network_check update_os +msg_info "Installing Dependencies" +$STD apt install -y cron +msg_ok "Installed Dependencies" + PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="mysql,redis" PHP_FPM="YES" setup_php setup_composer diff --git a/install/mongodb-install.sh b/install/mongodb-install.sh index 2ac811ce4..4c9d34f03 100644 --- a/install/mongodb-install.sh +++ b/install/mongodb-install.sh @@ -13,11 +13,15 @@ setting_up_container network_check update_os -read -p "${TAB3}Do you want to install MongoDB 8.0 instead of 7.0? [y/N]: " install_mongodb_8 -if [[ "$install_mongodb_8" =~ ^[Yy]$ ]]; then +if [[ "$(arch_resolve)" == "arm64" ]]; then MONGO_VERSION="8.0" setup_mongodb else - MONGO_VERSION="7.0" setup_mongodb + read -p "${TAB3}Do you want to install MongoDB 8.0 instead of 7.0? [y/N]: " install_mongodb_8 + if [[ "$install_mongodb_8" =~ ^[Yy]$ ]]; then + MONGO_VERSION="8.0" setup_mongodb + else + MONGO_VERSION="7.0" setup_mongodb + fi fi sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf diff --git a/install/nextpvr-install.sh b/install/nextpvr-install.sh index ec77f2cbc..5fe143618 100644 --- a/install/nextpvr-install.sh +++ b/install/nextpvr-install.sh @@ -25,6 +25,7 @@ $STD apt install -y \ libdvbv5-0 \ dtv-scan-tables \ libc6-dev \ + libicu-dev \ ffmpeg msg_ok "Installed Dependencies" diff --git a/install/nginx-ui-install.sh b/install/nginx-ui-install.sh index 194322fdb..7ddfc2b57 100644 --- a/install/nginx-ui-install.sh +++ b/install/nginx-ui-install.sh @@ -19,7 +19,7 @@ $STD apt install -y \ logrotate msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "nginx-ui" "0xJacky/nginx-ui" "prebuild" "latest" "/opt/nginx-ui" "nginx-ui-linux-64.tar.gz" +fetch_and_deploy_gh_release "nginx-ui" "0xJacky/nginx-ui" "prebuild" "latest" "/opt/nginx-ui" "nginx-ui-linux-$(arch_resolve "64" "arm64-v8a").tar.gz" msg_info "Installing Nginx UI" cp /opt/nginx-ui/nginx-ui /usr/local/bin/nginx-ui diff --git a/install/nocodb-install.sh b/install/nocodb-install.sh index 81e31e7d8..7ac0a98ce 100644 --- a/install/nocodb-install.sh +++ b/install/nocodb-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "nocodb" "nocodb/nocodb" "singlefile" "latest" "/opt/nocodb/" "Noco-linux-x64" +fetch_and_deploy_gh_release "nocodb" "nocodb/nocodb" "singlefile" "latest" "/opt/nocodb/" "Noco-linux-$(arch_resolve "x64" "arm64")" msg_info "Creating Service" cat </etc/systemd/system/nocodb.service From a6db986d9721ecad7ad6bd4c64d69295d2007c66 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 18:42:42 +0000 Subject: [PATCH 22/98] Update CHANGELOG.md (#15262) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ce0d6446..6d60c8b79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -488,6 +488,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-06-21 +### 🚀 Updated Scripts + + - #### ✨ New Features + + - [arm64] Port scripts between mediamtx-nocodb to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15254](https://github.com/community-scripts/ProxmoxVE/pull/15254)) + ## 2026-06-20 ### 🆕 New Scripts From dd2d2a169694d96da2005042abe828f81e48c2c1 Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Mon, 22 Jun 2026 04:44:06 +1000 Subject: [PATCH 23/98] [arm64] port papra-qbit to support arm64 (#15258) not supported (all dont ship arm64 binaries): proxmox-datacenter-manager proxmox-mail-gateway protonmail-bridge --- ct/papra.sh | 2 +- ct/passbolt.sh | 2 +- ct/patchmon.sh | 2 +- ct/paymenter.sh | 2 +- ct/pelican-panel.sh | 2 +- ct/pelican-wings.sh | 2 +- ct/photoprism.sh | 2 +- ct/pialert.sh | 2 +- ct/plane.sh | 2 +- ct/planka.sh | 2 +- ct/pocketbase.sh | 2 +- ct/pocketid.sh | 2 +- ct/powerdns.sh | 2 +- ct/profilarr.sh | 2 +- ct/projectsend.sh | 2 +- ct/prometheus-alertmanager.sh | 2 +- ct/prometheus-blackbox-exporter.sh | 2 +- ct/prometheus.sh | 2 +- ct/prowlarr.sh | 2 +- ct/proxmox-backup-server.sh | 2 +- ct/pterodactyl-panel.sh | 2 +- ct/pterodactyl-wings.sh | 2 +- ct/pulse.sh | 2 +- ct/qbittorrent.sh | 2 +- install/patchmon-install.sh | 2 +- install/paymenter-install.sh | 3 +- install/pelican-panel-install.sh | 4 +++ install/pelican-wings-install.sh | 2 +- install/photoprism-install.sh | 4 +-- install/pialert-install.sh | 3 +- install/plane-install.sh | 4 +-- install/pocketbase-install.sh | 2 +- install/pocketid-install.sh | 2 +- install/prometheus-alertmanager-install.sh | 2 +- .../prometheus-blackbox-exporter-install.sh | 2 +- install/prometheus-install.sh | 2 +- install/prowlarr-install.sh | 4 +-- install/proxmox-backup-server-install.sh | 30 ++++++++++++++----- install/pterodactyl-panel-install.sh | 3 +- install/pterodactyl-wings-install.sh | 2 +- install/pulse-install.sh | 2 +- install/qbittorrent-install.sh | 2 +- 42 files changed, 72 insertions(+), 51 deletions(-) diff --git a/ct/papra.sh b/ct/papra.sh index e3646edf4..9e4fed221 100644 --- a/ct/papra.sh +++ b/ct/papra.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/passbolt.sh b/ct/passbolt.sh index c3510e2e5..b65a9d37f 100644 --- a/ct/passbolt.sh +++ b/ct/passbolt.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/patchmon.sh b/ct/patchmon.sh index 72a7b99b2..81523244e 100644 --- a/ct/patchmon.sh +++ b/ct/patchmon.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/paymenter.sh b/ct/paymenter.sh index f65319d51..6eaee71f9 100644 --- a/ct/paymenter.sh +++ b/ct/paymenter.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/pelican-panel.sh b/ct/pelican-panel.sh index f61e3cf8d..0f15d1092 100644 --- a/ct/pelican-panel.sh +++ b/ct/pelican-panel.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/pelican-wings.sh b/ct/pelican-wings.sh index f97d21cae..8b96d8a67 100644 --- a/ct/pelican-wings.sh +++ b/ct/pelican-wings.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/photoprism.sh b/ct/photoprism.sh index a9554c581..1c1b3740e 100644 --- a/ct/photoprism.sh +++ b/ct/photoprism.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-3072}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" diff --git a/ct/pialert.sh b/ct/pialert.sh index 3d49bf209..c03e1d266 100644 --- a/ct/pialert.sh +++ b/ct/pialert.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-3}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/plane.sh b/ct/plane.sh index 845266690..33148a6a9 100644 --- a/ct/plane.sh +++ b/ct/plane.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-6144}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/planka.sh b/ct/planka.sh index 6fc3c517f..a875347d8 100644 --- a/ct/planka.sh +++ b/ct/planka.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/pocketbase.sh b/ct/pocketbase.sh index c7cb30b61..2d8b393a2 100644 --- a/ct/pocketbase.sh +++ b/ct/pocketbase.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/pocketid.sh b/ct/pocketid.sh index baa2a6723..a1c818e9c 100755 --- a/ct/pocketid.sh +++ b/ct/pocketid.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/powerdns.sh b/ct/powerdns.sh index b378c3f01..f6dd45e70 100644 --- a/ct/powerdns.sh +++ b/ct/powerdns.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/profilarr.sh b/ct/profilarr.sh index 565351af5..d56990581 100644 --- a/ct/profilarr.sh +++ b/ct/profilarr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-7}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/projectsend.sh b/ct/projectsend.sh index cc4f78217..688262708 100644 --- a/ct/projectsend.sh +++ b/ct/projectsend.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/prometheus-alertmanager.sh b/ct/prometheus-alertmanager.sh index 86d5431e1..b7456a833 100755 --- a/ct/prometheus-alertmanager.sh +++ b/ct/prometheus-alertmanager.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/prometheus-blackbox-exporter.sh b/ct/prometheus-blackbox-exporter.sh index 757e447b7..a2a9e8924 100644 --- a/ct/prometheus-blackbox-exporter.sh +++ b/ct/prometheus-blackbox-exporter.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/prometheus.sh b/ct/prometheus.sh index 236442745..3b10fdb43 100644 --- a/ct/prometheus.sh +++ b/ct/prometheus.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/prowlarr.sh b/ct/prowlarr.sh index b6b7fe7c8..e3c5e6ce2 100644 --- a/ct/prowlarr.sh +++ b/ct/prowlarr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/proxmox-backup-server.sh b/ct/proxmox-backup-server.sh index b32d23618..0e9cdad19 100644 --- a/ct/proxmox-backup-server.sh +++ b/ct/proxmox-backup-server.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/pterodactyl-panel.sh b/ct/pterodactyl-panel.sh index 1f10ac765..d2002c01b 100644 --- a/ct/pterodactyl-panel.sh +++ b/ct/pterodactyl-panel.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/pterodactyl-wings.sh b/ct/pterodactyl-wings.sh index c9ee0dadc..b59912be2 100644 --- a/ct/pterodactyl-wings.sh +++ b/ct/pterodactyl-wings.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/pulse.sh b/ct/pulse.sh index 9eaaf78e6..ecf7eef73 100644 --- a/ct/pulse.sh +++ b/ct/pulse.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/qbittorrent.sh b/ct/qbittorrent.sh index be40d772f..a3f581179 100644 --- a/ct/qbittorrent.sh +++ b/ct/qbittorrent.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/install/patchmon-install.sh b/install/patchmon-install.sh index fddc32394..12b88686f 100644 --- a/install/patchmon-install.sh +++ b/install/patchmon-install.sh @@ -21,7 +21,7 @@ PG_VERSION="17" setup_postgresql PG_DB_NAME="patchmon_db" PG_DB_USER="patchmon_usr" setup_postgresql_db RELEASE="v2.0.2" -fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "singlefile" "latest" "/opt/patchmon" "patchmon-server-linux-amd64" +fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "singlefile" "latest" "/opt/patchmon" "patchmon-server-linux-$(arch_resolve)" mv /opt/patchmon/PatchMon /opt/patchmon/patchmon-server msg_info "Configuring PatchMon" diff --git a/install/paymenter-install.sh b/install/paymenter-install.sh index fde781ad7..70b281d98 100644 --- a/install/paymenter-install.sh +++ b/install/paymenter-install.sh @@ -17,7 +17,8 @@ msg_info "Installing Dependencies" $STD apt install -y \ git \ nginx \ - redis-server + redis-server \ + cron msg_ok "Installed Dependencies" setup_mariadb diff --git a/install/pelican-panel-install.sh b/install/pelican-panel-install.sh index 9d3846320..ba4bb8286 100644 --- a/install/pelican-panel-install.sh +++ b/install/pelican-panel-install.sh @@ -13,6 +13,10 @@ setting_up_container network_check update_os +msg_info "Installing Dependencies" +$STD apt install -y cron +msg_ok "Installed Dependencies" + PHP_VERSION="8.4" PHP_APACHE="YES" PHP_FPM="YES" setup_php setup_composer setup_mariadb diff --git a/install/pelican-wings-install.sh b/install/pelican-wings-install.sh index 167561ea4..74fe0e298 100644 --- a/install/pelican-wings-install.sh +++ b/install/pelican-wings-install.sh @@ -15,7 +15,7 @@ update_os setup_docker -fetch_and_deploy_gh_release "wings" "pelican-dev/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64" +fetch_and_deploy_gh_release "wings" "pelican-dev/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_$(arch_resolve)" mkdir -p /etc/pelican /var/run/wings msg_info "Creating Service" diff --git a/install/photoprism-install.sh b/install/photoprism-install.sh index 1d54199ce..741a20ed1 100644 --- a/install/photoprism-install.sh +++ b/install/photoprism-install.sh @@ -34,13 +34,13 @@ echo 'export $(grep -v "^#" /opt/photoprism/config/.env | xargs)' >>~/.bashrc export PATH=/usr/local:$PATH msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "photoprism" "photoprism/photoprism" "prebuild" "latest" "/opt/photoprism" "*linux-amd64.tar.gz" +fetch_and_deploy_gh_release "photoprism" "photoprism/photoprism" "prebuild" "latest" "/opt/photoprism" "*linux-$(arch_resolve).tar.gz" msg_info "Installing PhotoPrism (Patience)" mkdir -p /opt/photoprism/{cache,config,photos,storage,temp} mkdir -p /opt/photoprism/photos/{originals,import} mkdir -p /opt/photoprism_backups -LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-bookworm-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1) +LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-bookworm-$(arch_resolve)-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1) curl -fsSL "https://dl.photoprism.app/dist/libheif/$LIBHEIF_URL" -o /tmp/libheif.tar.gz tar -xzf /tmp/libheif.tar.gz -C /usr/local ldconfig diff --git a/install/pialert-install.sh b/install/pialert-install.sh index 4be4eb9e2..58e60c38e 100644 --- a/install/pialert-install.sh +++ b/install/pialert-install.sh @@ -30,7 +30,8 @@ $STD apt -y install \ wakeonlan \ fping \ zip \ - libtext-csv-perl + libtext-csv-perl \ + cron msg_ok "Installed Dependencies" msg_info "Installing PHP Dependencies" diff --git a/install/plane-install.sh b/install/plane-install.sh index 960b2fbc6..c0ae16c46 100644 --- a/install/plane-install.sh +++ b/install/plane-install.sh @@ -44,7 +44,7 @@ $STD rabbitmqctl set_permissions -p plane plane ".*" ".*" ".*" msg_ok "Configured RabbitMQ" msg_info "Installing MinIO" -curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio -o /usr/local/bin/minio +curl -fsSL https://dl.min.io/server/minio/release/linux-$(arch_resolve)/minio -o /usr/local/bin/minio chmod +x /usr/local/bin/minio mkdir -p /opt/minio/data MINIO_ACCESS_KEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16) @@ -176,7 +176,7 @@ $STD /opt/plane-venv/bin/python manage.py register_instance "${MACHINE_SIG}" msg_ok "Ran Database Migrations" msg_info "Creating Services and MinIO Bucket" -curl -fsSL https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/bin/mcli +curl -fsSL https://dl.min.io/client/mc/release/linux-$(arch_resolve)/mc -o /usr/local/bin/mcli chmod +x /usr/local/bin/mcli $STD /usr/local/bin/mcli alias set plane http://localhost:9000 "${MINIO_ACCESS_KEY}" "${MINIO_SECRET_KEY}" $STD /usr/local/bin/mcli mb plane/uploads --ignore-existing diff --git a/install/pocketbase-install.sh b/install/pocketbase-install.sh index b68cdcf8e..31fd8fdab 100644 --- a/install/pocketbase-install.sh +++ b/install/pocketbase-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "pocketbase" "pocketbase/pocketbase" "prebuild" "latest" "/opt/pocketbase" "pocketbase*linux_amd64.zip" +fetch_and_deploy_gh_release "pocketbase" "pocketbase/pocketbase" "prebuild" "latest" "/opt/pocketbase" "pocketbase*linux_$(arch_resolve).zip" msg_info "Configuring Pocketbase" mkdir -p /opt/pocketbase/{pb_public,pb_migrations,pb_hooks} diff --git a/install/pocketid-install.sh b/install/pocketid-install.sh index 06c33d924..47f945d3b 100644 --- a/install/pocketid-install.sh +++ b/install/pocketid-install.sh @@ -14,7 +14,7 @@ network_check update_os read -r -p "${TAB3}What public URL do you want to use (e.g. pocketid.mydomain.com)? " public_url -fetch_and_deploy_gh_release "pocket-id" "pocket-id/pocket-id" "singlefile" "latest" "/opt/pocket-id/" "pocket-id-linux-amd64" +fetch_and_deploy_gh_release "pocket-id" "pocket-id/pocket-id" "singlefile" "latest" "/opt/pocket-id/" "pocket-id-linux-$(arch_resolve)" msg_info "Configuring Pocket ID" ENCRYPTION_KEY=$(openssl rand -base64 32) diff --git a/install/prometheus-alertmanager-install.sh b/install/prometheus-alertmanager-install.sh index b74835782..6189a59e4 100755 --- a/install/prometheus-alertmanager-install.sh +++ b/install/prometheus-alertmanager-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "alertmanager" "prometheus/alertmanager" "prebuild" "latest" "/usr/local/bin/" "alertmanager*linux-amd64.tar.gz" +fetch_and_deploy_gh_release "alertmanager" "prometheus/alertmanager" "prebuild" "latest" "/usr/local/bin/" "alertmanager*linux-$(arch_resolve).tar.gz" msg_info "Configuring Prometheus Alertmanager" mkdir -p /etc/alertmanager /var/lib/alertmanager diff --git a/install/prometheus-blackbox-exporter-install.sh b/install/prometheus-blackbox-exporter-install.sh index 138b0c160..9242838d7 100644 --- a/install/prometheus-blackbox-exporter-install.sh +++ b/install/prometheus-blackbox-exporter-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "blackbox-exporter" "prometheus/blackbox_exporter" "prebuild" "latest" "/opt/blackbox-exporter" "blackbox_exporter-*.linux-amd64.tar.gz" +fetch_and_deploy_gh_release "blackbox-exporter" "prometheus/blackbox_exporter" "prebuild" "latest" "/opt/blackbox-exporter" "blackbox_exporter-*.linux-$(arch_resolve).tar.gz" msg_info "Creating Service" cat </etc/systemd/system/blackbox-exporter.service diff --git a/install/prometheus-install.sh b/install/prometheus-install.sh index 4893e6dc3..3dee5990c 100644 --- a/install/prometheus-install.sh +++ b/install/prometheus-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-amd64.tar.gz" +fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-$(arch_resolve).tar.gz" msg_info "Installing Prometheus" mkdir -p /etc/prometheus diff --git a/install/prowlarr-install.sh b/install/prowlarr-install.sh index c47bc8ef2..1f6fbf98b 100644 --- a/install/prowlarr-install.sh +++ b/install/prowlarr-install.sh @@ -14,10 +14,10 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt install -y sqlite3 +$STD apt install -y sqlite3 libicu-dev msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "prowlarr" "Prowlarr/Prowlarr" "prebuild" "latest" "/opt/Prowlarr" "Prowlarr.master*linux-core-x64.tar.gz" +fetch_and_deploy_gh_release "prowlarr" "Prowlarr/Prowlarr" "prebuild" "latest" "/opt/Prowlarr" "Prowlarr.master*linux-core-$(arch_resolve "x64" "arm64").tar.gz" msg_info "Configuring Prowlarr" mkdir -p /var/lib/prowlarr/ diff --git a/install/proxmox-backup-server-install.sh b/install/proxmox-backup-server-install.sh index 5564500d9..887683d69 100644 --- a/install/proxmox-backup-server-install.sh +++ b/install/proxmox-backup-server-install.sh @@ -13,16 +13,30 @@ setting_up_container network_check update_os -msg_info "Installing Proxmox Backup Server" -setup_deb822_repo \ - "proxmox-backup-server" \ - "https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg" \ - "http://download.proxmox.com/debian/pbs" \ - "trixie" \ - "pbs-no-subscription" export DEBIAN_FRONTEND=noninteractive export IFUPDOWN2_NO_IFRELOAD=1 -$STD apt install -y proxmox-backup-server +if [[ "$(arch_resolve)" == "arm64" ]]; then + msg_info "Installing Proxmox Backup Server (unofficial arm64 build)" + PBS_TMP="$(mktemp -d)" + github_api_call "https://api.github.com/repos/wofferl/proxmox-backup-arm64/releases/latest" "$PBS_TMP/release.json" + cd "$PBS_TMP" + for url in $(jq -r '.assets[].browser_download_url + | select(endswith(".deb")) + | select(test("dbgsym|client-static|file-restore") | not)' release.json); do + curl_with_retry "$url" "$(basename "$url")" + done + $STD apt install -y ./*.deb + rm -rf "$PBS_TMP" +else + msg_info "Installing Proxmox Backup Server" + setup_deb822_repo \ + "proxmox-backup-server" \ + "https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg" \ + "http://download.proxmox.com/debian/pbs" \ + "trixie" \ + "pbs-no-subscription" + $STD apt install -y proxmox-backup-server +fi msg_ok "Installed Proxmox Backup Server" motd_ssh diff --git a/install/pterodactyl-panel-install.sh b/install/pterodactyl-panel-install.sh index 42a9b2ce4..7c5d3f8f8 100644 --- a/install/pterodactyl-panel-install.sh +++ b/install/pterodactyl-panel-install.sh @@ -18,7 +18,8 @@ $STD apt install -y \ lsb-release \ redis \ apache2 \ - composer + composer \ + cron msg_ok "Installed Dependencies" setup_mariadb diff --git a/install/pterodactyl-wings-install.sh b/install/pterodactyl-wings-install.sh index bbee94045..4b9efd112 100644 --- a/install/pterodactyl-wings-install.sh +++ b/install/pterodactyl-wings-install.sh @@ -15,7 +15,7 @@ update_os setup_docker -fetch_and_deploy_gh_release "wings" "pterodactyl/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64" +fetch_and_deploy_gh_release "wings" "pterodactyl/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_$(arch_resolve)" mkdir -p /etc/pterodactyl msg_info "Creating Service" diff --git a/install/pulse-install.sh b/install/pulse-install.sh index 54db6fb13..a6847618e 100644 --- a/install/pulse-install.sh +++ b/install/pulse-install.sh @@ -29,7 +29,7 @@ else fi mkdir -p /etc/pulse -fetch_and_deploy_gh_release "pulse" "rcourtman/Pulse" "prebuild" "latest" "/opt/pulse" "pulse-v*-linux-amd64.tar.gz" +fetch_and_deploy_gh_release "pulse" "rcourtman/Pulse" "prebuild" "latest" "/opt/pulse" "pulse-v*-linux-$(arch_resolve).tar.gz" ln -sf /opt/pulse/bin/pulse /usr/local/bin/pulse chown -R pulse:pulse /etc/pulse /opt/pulse msg_ok "Installed Pulse" diff --git a/install/qbittorrent-install.sh b/install/qbittorrent-install.sh index bd57c2e8e..6f02ae8c4 100644 --- a/install/qbittorrent-install.sh +++ b/install/qbittorrent-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "qbittorrent" "userdocs/qbittorrent-nox-static" "singlefile" "latest" "/opt/qbittorrent" "x86_64-qbittorrent-nox" +fetch_and_deploy_gh_release "qbittorrent" "userdocs/qbittorrent-nox-static" "singlefile" "latest" "/opt/qbittorrent" "$(arch_resolve "x86_64" "aarch64")-qbittorrent-nox" msg_info "Setup qBittorrent-nox" mv /opt/qbittorrent/qbittorrent /opt/qbittorrent/qbittorrent-nox From c0c230058b86a48efe05027e221063e563e899ce Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 18:44:26 +0000 Subject: [PATCH 24/98] Update CHANGELOG.md (#15263) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d60c8b79..8c65d64aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -492,6 +492,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### ✨ New Features + - [arm64] port scripts titled between papra and qbittorrent to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15258](https://github.com/community-scripts/ProxmoxVE/pull/15258)) - [arm64] Port scripts between mediamtx-nocodb to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15254](https://github.com/community-scripts/ProxmoxVE/pull/15254)) ## 2026-06-20 From 3799d565dafc1da079372524da8d49a79135588e Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Mon, 22 Jun 2026 04:45:41 +1000 Subject: [PATCH 25/98] [arm64] Port scripts between nodered & paperlessngx to support arm64 (#15255) * [arm64] Port scripts between nodered-paperlessngx to support arm64 * Update paperclip.sh --- ct/npmplus.sh | 2 +- ct/nxwitness.sh | 10 +++++----- ct/oauth2-proxy.sh | 4 ++-- ct/ollama.sh | 4 ++-- ct/omada.sh | 4 ++-- ct/ombi.sh | 4 ++-- ct/opencloud.sh | 4 ++-- ct/opengist.sh | 4 ++-- ct/openobserve.sh | 4 ++-- ct/openthread-br.sh | 2 +- ct/openwebui.sh | 4 ++-- ct/ots.sh | 4 ++-- ct/owncast.sh | 4 ++-- ct/ownfoil.sh | 2 +- ct/pangolin.sh | 4 ++-- ct/paperclip.sh | 2 +- install/npmplus-install.sh | 2 +- install/nxwitness-install.sh | 8 ++++---- install/oauth2-proxy-install.sh | 2 +- install/ollama-install.sh | 4 +++- install/omada-install.sh | 4 ++-- install/ombi-install.sh | 6 +++++- install/opencloud-install.sh | 2 +- install/opengist-install.sh | 2 +- install/openobserve-install.sh | 2 +- install/openwebui-install.sh | 4 +++- install/ots-install.sh | 2 +- install/owncast-install.sh | 2 +- install/pangolin-install.sh | 4 ++-- misc/tools.func | 8 ++++++-- 30 files changed, 63 insertions(+), 51 deletions(-) diff --git a/ct/npmplus.sh b/ct/npmplus.sh index abc5168ac..9bf8c30b1 100644 --- a/ct/npmplus.sh +++ b/ct/npmplus.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-3}" var_os="${var_os:-alpine}" var_version="${var_version:-3.23}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/nxwitness.sh b/ct/nxwitness.sh index 346963f65..263c6ea05 100644 --- a/ct/nxwitness.sh +++ b/ct/nxwitness.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-ubuntu}" var_version="${var_version:-24.04}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-0}" var_gpu="${var_gpu:-yes}" @@ -32,7 +32,7 @@ function update_script() { BASE_URL="https://updates.networkoptix.com/default/index.html" RELEASE=$(curl -fsSL "$BASE_URL" | grep -oP '(?<=)[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(?=)' | head -n 1) DETAIL_PAGE=$(curl -fsSL "$BASE_URL#note_$RELEASE") - DOWNLOAD_URL=$(echo "$DETAIL_PAGE" | grep -oP "https://updates.networkoptix.com/default/$RELEASE/linux/nxwitness-server-[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-linux_x64\.deb" | head -n 1) + DOWNLOAD_URL=$(echo "$DETAIL_PAGE" | grep -oP "https://updates.networkoptix.com/default/$RELEASE/$(arch_resolve "linux" "arm")/nxwitness-server-[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-linux_$(arch_resolve "x64" "arm64")\.deb" | head -n 1) if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then msg_info "Stopping Service" systemctl stop networkoptix-root-tool networkoptix-mediaserver @@ -40,11 +40,11 @@ function update_script() { msg_info "Updating ${APP} to ${RELEASE}" cd /tmp - curl -fsSL "$DOWNLOAD_URL" -o ""nxwitness-server-$RELEASE-linux_x64.deb"" + curl -fsSL "$DOWNLOAD_URL" -o ""nxwitness-server-$RELEASE-linux_$(arch_resolve "x64" "arm64").deb"" export DEBIAN_FRONTEND=noninteractive export DEBCONF_NOWARNINGS=yes - $STD dpkg -i nxwitness-server-$RELEASE-linux_x64.deb - rm -f /tmp/nxwitness-server-$RELEASE-linux_x64.deb + $STD dpkg -i nxwitness-server-$RELEASE-linux_$(arch_resolve "x64" "arm64").deb + rm -f /tmp/nxwitness-server-$RELEASE-linux_$(arch_resolve "x64" "arm64").deb echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated ${APP}" diff --git a/ct/oauth2-proxy.sh b/ct/oauth2-proxy.sh index f84edddbf..42a669bb2 100644 --- a/ct/oauth2-proxy.sh +++ b/ct/oauth2-proxy.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-3}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -34,7 +34,7 @@ function update_script() { systemctl stop oauth2-proxy msg_ok "Stopped Service" - fetch_and_deploy_gh_release "oauth2-proxy" "oauth2-proxy/oauth2-proxy" "prebuild" "latest" "/opt/oauth2-proxy" "oauth2-proxy*linux-amd64.tar.gz" + fetch_and_deploy_gh_release "oauth2-proxy" "oauth2-proxy/oauth2-proxy" "prebuild" "latest" "/opt/oauth2-proxy" "oauth2-proxy*linux-$(arch_resolve).tar.gz" msg_info "Starting Service" systemctl start oauth2-proxy diff --git a/ct/ollama.sh b/ct/ollama.sh index 02f099740..d1595d98e 100644 --- a/ct/ollama.sh +++ b/ct/ollama.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-40}" var_os="${var_os:-ubuntu}" var_version="${var_version:-24.04}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_gpu="${var_gpu:-yes}" header_info "$APP" @@ -40,7 +40,7 @@ function update_script() { OLLAMA_INSTALL_DIR="/usr/local/lib/ollama" rm -rf "$OLLAMA_INSTALL_DIR" /usr/local/bin/ollama mkdir -p "$OLLAMA_INSTALL_DIR" - if ! fetch_and_deploy_gh_release "ollama-com" "ollama/ollama" "prebuild" "latest" "$OLLAMA_INSTALL_DIR" "ollama-linux-amd64.tar.zst"; then + if ! fetch_and_deploy_gh_release "ollama-com" "ollama/ollama" "prebuild" "latest" "$OLLAMA_INSTALL_DIR" "ollama-linux-$(arch_resolve).tar.zst"; then msg_error "Download or deployment failed – check network connectivity and GitHub API availability" exit 250 fi diff --git a/ct/omada.sh b/ct/omada.sh index 71f347bc1..e339190f0 100644 --- a/ct/omada.sh +++ b/ct/omada.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-3072}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-12}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -30,7 +30,7 @@ function update_script() { fi msg_info "Updating MongoDB" - if lscpu | grep -q 'avx'; then + if [[ "$(arch_resolve)" == "arm64" ]] || lscpu | grep -q 'avx'; then MONGO_VERSION="8.0" else msg_error "No AVX detected (CPU-Flag)! We have discontinued support for this. You are welcome to try it manually with a Debian LXC, but due to the many issues with Omada, we currently only support AVX CPUs." diff --git a/ct/ombi.sh b/ct/ombi.sh index cbb8d4790..c4644122c 100644 --- a/ct/ombi.sh +++ b/ct/ombi.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -41,7 +41,7 @@ function update_script() { msg_ok "Backup created" rm -rf /opt/ombi - fetch_and_deploy_gh_release "ombi" "Ombi-app/Ombi" "prebuild" "latest" "/opt/ombi" "linux-x64.tar.gz" + fetch_and_deploy_gh_release "ombi" "Ombi-app/Ombi" "prebuild" "latest" "/opt/ombi" "linux-$(arch_resolve "x64" "arm64").tar.gz" [[ -f /opt/Ombi.db ]] && mv /opt/Ombi.db /opt/ombi [[ -f /opt/OmbiExternal.db ]] && mv /opt/OmbiExternal.db /opt/ombi [[ -f /opt/OmbiSettings.db ]] && mv /opt/OmbiSettings.db /opt/ombi diff --git a/ct/opencloud.sh b/ct/opencloud.sh index b148d49b8..d2d78c805 100644 --- a/ct/opencloud.sh +++ b/ct/opencloud.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -43,7 +43,7 @@ function update_script() { msg_ok "Updated packages" rm -f /usr/bin/{OpenCloud,opencloud} - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "${RELEASE}" "/usr/bin" "opencloud-*-linux-amd64" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "${RELEASE}" "/usr/bin" "opencloud-*-linux-$(arch_resolve)" mv /usr/bin/OpenCloud /usr/bin/opencloud if ! grep -q 'POSIX_WATCH' /etc/opencloud/opencloud.env; then diff --git a/ct/opengist.sh b/ct/opengist.sh index 2336b699c..8f470ef1e 100644 --- a/ct/opengist.sh +++ b/ct/opengist.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -37,7 +37,7 @@ function update_script() { mv /opt/opengist /opt/opengist-backup msg_ok "Backup created" - fetch_and_deploy_gh_release "opengist" "thomiceli/opengist" "prebuild" "latest" "/opt/opengist" "opengist*linux-amd64.tar.gz" + fetch_and_deploy_gh_release "opengist" "thomiceli/opengist" "prebuild" "latest" "/opt/opengist" "opengist*linux-$(arch_resolve).tar.gz" msg_info "Restoring Configuration" mv /opt/opengist-backup/config.yml /opt/opengist/config.yml diff --git a/ct/openobserve.sh b/ct/openobserve.sh index d74eab8da..94e2f7bf0 100644 --- a/ct/openobserve.sh +++ b/ct/openobserve.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-3}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -33,7 +33,7 @@ function update_script() { msg_info "Updating OpenObserve" systemctl stop openobserve RELEASE=$(get_latest_github_release "openobserve/openobserve") - tar zxf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/v$RELEASE/openobserve-v$RELEASE-linux-amd64.tar.gz) -C /opt/openobserve + tar zxf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/v$RELEASE/openobserve-v$RELEASE-linux-$(arch_resolve).tar.gz) -C /opt/openobserve systemctl start openobserve msg_ok "Updated OpenObserve" msg_ok "Updated successfully!" diff --git a/ct/openthread-br.sh b/ct/openthread-br.sh index f63fb8421..7222e28ad 100644 --- a/ct/openthread-br.sh +++ b/ct/openthread-br.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-0}" var_tun="${var_tun:-yes}" diff --git a/ct/openwebui.sh b/ct/openwebui.sh index 1cce85f3b..db1341922 100644 --- a/ct/openwebui.sh +++ b/ct/openwebui.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-8192}" var_disk="${var_disk:-50}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" @@ -99,7 +99,7 @@ EOF msg_ok "Stopped Service" rm -rf /usr/lib/ollama /usr/bin/ollama - if ! fetch_and_deploy_gh_release "ollama-com" "ollama/ollama" "prebuild" "latest" "/usr/lib/ollama" "ollama-linux-amd64.tar.zst"; then + if ! fetch_and_deploy_gh_release "ollama-com" "ollama/ollama" "prebuild" "latest" "/usr/lib/ollama" "ollama-linux-$(arch_resolve).tar.zst"; then msg_error "Ollama download or deployment failed – check network connectivity and GitHub API availability" else ln -sf /usr/lib/ollama/bin/ollama /usr/bin/ollama diff --git a/ct/ots.sh b/ct/ots.sh index 1e86aa6fd..11cdd0d80 100644 --- a/ct/ots.sh +++ b/ct/ots.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-3}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -34,7 +34,7 @@ function update_script() { systemctl stop nginx msg_ok "Stopped Services" - fetch_and_deploy_gh_release "ots" "Luzifer/ots" "prebuild" "latest" "/opt/ots" "ots_linux_amd64.tgz" + fetch_and_deploy_gh_release "ots" "Luzifer/ots" "prebuild" "latest" "/opt/ots" "ots_linux_$(arch_resolve).tgz" msg_info "Starting Services" systemctl start ots diff --git a/ct/owncast.sh b/ct/owncast.sh index b8b3ba60d..29eccb7f3 100644 --- a/ct/owncast.sh +++ b/ct/owncast.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" @@ -34,7 +34,7 @@ function update_script() { systemctl stop owncast msg_ok "Stopped Service" - fetch_and_deploy_gh_release "owncast" "owncast/owncast" "prebuild" "latest" "/opt/owncast" "owncast*linux-64bit.zip" + fetch_and_deploy_gh_release "owncast" "owncast/owncast" "prebuild" "latest" "/opt/owncast" "owncast*linux-$(arch_resolve "64bit" "arm64").zip" msg_info "Starting Service" systemctl start owncast diff --git a/ct/ownfoil.sh b/ct/ownfoil.sh index 8c78d9ece..6144dd7ab 100644 --- a/ct/ownfoil.sh +++ b/ct/ownfoil.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/pangolin.sh b/ct/pangolin.sh index 0ea3d7bc0..08d604277 100644 --- a/ct/pangolin.sh +++ b/ct/pangolin.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_tun="${var_tun:-1}" @@ -50,7 +50,7 @@ function update_script() { msg_ok "Created backup" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball" "$PANGOLIN_VERSION" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_amd64" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_$(arch_resolve)" msg_info "Updating Pangolin" cd /opt/pangolin diff --git a/ct/paperclip.sh b/ct/paperclip.sh index ff61931a4..e7c1f5101 100644 --- a/ct/paperclip.sh +++ b/ct/paperclip.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-8192}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/install/npmplus-install.sh b/install/npmplus-install.sh index 64f04dae9..7424d5d5e 100644 --- a/install/npmplus-install.sh +++ b/install/npmplus-install.sh @@ -31,7 +31,7 @@ get_latest_release() { DOCKER_COMPOSE_LATEST_VERSION=$(get_latest_release "docker/compose") DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} mkdir -p $DOCKER_CONFIG/cli-plugins -curl -fsSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_LATEST_VERSION/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose +curl -fsSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_LATEST_VERSION/docker-compose-linux-$(arch_resolve "x86_64" "aarch64") -o ~/.docker/cli-plugins/docker-compose chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose msg_ok "Installed Docker & Compose" diff --git a/install/nxwitness-install.sh b/install/nxwitness-install.sh index ff5a5e734..6c5d479fe 100644 --- a/install/nxwitness-install.sh +++ b/install/nxwitness-install.sh @@ -30,11 +30,11 @@ cd /tmp BASE_URL="https://updates.networkoptix.com/default/index.html" RELEASE=$(curl -fsSL "$BASE_URL" | grep -oP '(?<=)[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(?=)' | head -n 1) DETAIL_PAGE=$(curl -fsSL "$BASE_URL#note_$RELEASE") -DOWNLOAD_URL=$(echo "$DETAIL_PAGE" | grep -oP "https://updates.networkoptix.com/default/$RELEASE/linux/nxwitness-server-[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-linux_x64\.deb" | head -n 1) -curl -fsSL "$DOWNLOAD_URL" -o ""nxwitness-server-$RELEASE-linux_x64.deb"" +DOWNLOAD_URL=$(echo "$DETAIL_PAGE" | grep -oP "https://updates.networkoptix.com/default/$RELEASE/$(arch_resolve "linux" "arm")/nxwitness-server-[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-linux_$(arch_resolve "x64" "arm64")\.deb" | head -n 1) +curl -fsSL "$DOWNLOAD_URL" -o ""nxwitness-server-$RELEASE-linux_$(arch_resolve "x64" "arm64").deb"" export DEBIAN_FRONTEND=noninteractive -$STD dpkg -i nxwitness-server-$RELEASE-linux_x64.deb -rm -f /tmp/nxwitness-server-$RELEASE-linux_x64.deb +$STD dpkg -i nxwitness-server-$RELEASE-linux_$(arch_resolve "x64" "arm64").deb +rm -f /tmp/nxwitness-server-$RELEASE-linux_$(arch_resolve "x64" "arm64").deb echo "${RELEASE}" >/opt/${APPLICATION}_version.txt msg_ok "Setup Nx Witness" diff --git a/install/oauth2-proxy-install.sh b/install/oauth2-proxy-install.sh index 15312fa68..51ecaaf60 100644 --- a/install/oauth2-proxy-install.sh +++ b/install/oauth2-proxy-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "oauth2-proxy" "oauth2-proxy/oauth2-proxy" "prebuild" "latest" "/opt/oauth2-proxy" "oauth2-proxy*linux-amd64.tar.gz" +fetch_and_deploy_gh_release "oauth2-proxy" "oauth2-proxy/oauth2-proxy" "prebuild" "latest" "/opt/oauth2-proxy" "oauth2-proxy*linux-$(arch_resolve).tar.gz" touch /opt/oauth2-proxy/config.toml msg_info "Creating Service" diff --git a/install/ollama-install.sh b/install/ollama-install.sh index 52f69856b..d7174e887 100644 --- a/install/ollama-install.sh +++ b/install/ollama-install.sh @@ -20,6 +20,7 @@ $STD apt install -y \ zstd msg_ok "Installed Dependencies" +if [[ "$(arch_resolve)" == "amd64" ]]; then msg_info "Setting up IntelÂŽ Repositories" mkdir -p /usr/share/keyrings curl -fsSL https://repositories.intel.com/gpu/intel-graphics.key | gpg --dearmor -o /usr/share/keyrings/intel-graphics.gpg 2>/dev/null || true @@ -60,12 +61,13 @@ msg_ok "Installed IntelÂŽ Level Zero" msg_info "Installing IntelÂŽ oneAPI Base Toolkit (Patience)" $STD apt install -y --no-install-recommends intel-basekit-2024.1 msg_ok "Installed IntelÂŽ oneAPI Base Toolkit" +fi msg_info "Installing Ollama (Patience)" OLLAMA_INSTALL_DIR="/usr/local/lib/ollama" BINDIR="/usr/local/bin" mkdir -p "$OLLAMA_INSTALL_DIR" -if ! fetch_and_deploy_gh_release "ollama-com" "ollama/ollama" "prebuild" "latest" "$OLLAMA_INSTALL_DIR" "ollama-linux-amd64.tar.zst"; then +if ! fetch_and_deploy_gh_release "ollama-com" "ollama/ollama" "prebuild" "latest" "$OLLAMA_INSTALL_DIR" "ollama-linux-$(arch_resolve).tar.zst"; then msg_error "Failed to download or deploy Ollama – check network connectivity and GitHub API availability" exit 250 fi diff --git a/install/omada-install.sh b/install/omada-install.sh index bfc51e092..64203e155 100644 --- a/install/omada-install.sh +++ b/install/omada-install.sh @@ -19,7 +19,7 @@ msg_ok "Installed Dependencies" JAVA_VERSION="21" setup_java -if lscpu | grep -q 'avx'; then +if [[ "$(arch_resolve)" == "arm64" ]] || lscpu | grep -q 'avx'; then MONGO_VERSION="8.0" setup_mongodb else msg_error "No AVX detected (CPU-Flag)! We have discontinued support for this. You are welcome to try it manually with a Debian LXC, but due to the many issues with Omada, we currently only support AVX CPUs." @@ -28,7 +28,7 @@ fi if ! dpkg -l | grep -q 'libssl1.1'; then msg_info "Installing libssl (if needed)" - curl_download "/tmp/libssl.deb" "https://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1w-0+deb11u5_amd64.deb" + curl_download "/tmp/libssl.deb" "https://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1w-0+deb11u8_$(arch_resolve).deb" $STD dpkg -i /tmp/libssl.deb rm -f /tmp/libssl.deb msg_ok "Installed libssl1.1" diff --git a/install/ombi-install.sh b/install/ombi-install.sh index 96f6135e5..c0a6449a6 100644 --- a/install/ombi-install.sh +++ b/install/ombi-install.sh @@ -13,7 +13,11 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "ombi" "Ombi-app/Ombi" "prebuild" "latest" "/opt/ombi" "linux-x64.tar.gz" +msg_info "Installing Dependencies" +$STD apt install -y libicu-dev +msg_ok "Installed Dependencies" + +fetch_and_deploy_gh_release "ombi" "Ombi-app/Ombi" "prebuild" "latest" "/opt/ombi" "linux-$(arch_resolve "x64" "arm64").tar.gz" msg_info "Creating Service" cat </etc/systemd/system/ombi.service diff --git a/install/opencloud-install.sh b/install/opencloud-install.sh index f91185ece..807dd2e75 100644 --- a/install/opencloud-install.sh +++ b/install/opencloud-install.sh @@ -64,7 +64,7 @@ $STD sudo -u cool coolconfig set-admin-password --user=admin --password="$COOLPA echo "$COOLPASS" >~/.coolpass msg_ok "Installed Collabora Online" -fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "v7.0.0" "/usr/bin" "opencloud-*-linux-amd64" +fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "v7.0.0" "/usr/bin" "opencloud-*-linux-$(arch_resolve)" mv /usr/bin/OpenCloud /usr/bin/opencloud msg_info "Configuring OpenCloud" diff --git a/install/opengist-install.sh b/install/opengist-install.sh index ae7496bd9..814d1c2d9 100644 --- a/install/opengist-install.sh +++ b/install/opengist-install.sh @@ -17,7 +17,7 @@ msg_info "Installing Dependencies" $STD apt install -y git msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "opengist" "thomiceli/opengist" "prebuild" "latest" "/opt/opengist" "opengist*linux-amd64.tar.gz" +fetch_and_deploy_gh_release "opengist" "thomiceli/opengist" "prebuild" "latest" "/opt/opengist" "opengist*linux-$(arch_resolve).tar.gz" mkdir -p /opt/opengist-data sed -i 's|opengist-home:.*|opengist-home: /opt/opengist-data|' /opt/opengist/config.yml diff --git a/install/openobserve-install.sh b/install/openobserve-install.sh index 1057ff629..84c1a79c8 100644 --- a/install/openobserve-install.sh +++ b/install/openobserve-install.sh @@ -16,7 +16,7 @@ update_os msg_info "Installing OpenObserve" mkdir -p /opt/openobserve/data RELEASE=$(get_latest_github_release "openobserve/openobserve") -tar zxf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/v$RELEASE/openobserve-v$RELEASE-linux-amd64.tar.gz) -C /opt/openobserve +tar zxf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/v$RELEASE/openobserve-v$RELEASE-linux-$(arch_resolve).tar.gz) -C /opt/openobserve ROOT_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c9)Aa1!" cat </opt/openobserve/data/.env diff --git a/install/openwebui-install.sh b/install/openwebui-install.sh index 874cd1211..4b82715a1 100644 --- a/install/openwebui-install.sh +++ b/install/openwebui-install.sh @@ -31,6 +31,7 @@ msg_ok "Installed Open WebUI" read -r -p "${TAB3}Would you like to add Ollama? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then + if [[ "$(arch_resolve)" == "amd64" ]]; then msg_info "Setting up IntelÂŽ Repositories" mkdir -p /usr/share/keyrings curl -fsSL https://repositories.intel.com/gpu/intel-graphics.key | gpg --dearmor -o /usr/share/keyrings/intel-graphics.gpg 2>/dev/null || true @@ -71,9 +72,10 @@ EOF msg_info "Installing IntelÂŽ oneAPI Base Toolkit (Patience)" $STD apt install -y --no-install-recommends intel-basekit-2024.1 2>/dev/null || true msg_ok "Installed IntelÂŽ oneAPI Base Toolkit" + fi msg_info "Installing Ollama" - if ! fetch_and_deploy_gh_release "ollama-com" "ollama/ollama" "prebuild" "latest" "/usr/lib/ollama" "ollama-linux-amd64.tar.zst"; then + if ! fetch_and_deploy_gh_release "ollama-com" "ollama/ollama" "prebuild" "latest" "/usr/lib/ollama" "ollama-linux-$(arch_resolve).tar.zst"; then msg_error "Failed to download or deploy Ollama – check network connectivity and GitHub API availability" else ln -sf /usr/lib/ollama/bin/ollama /usr/bin/ollama diff --git a/install/ots-install.sh b/install/ots-install.sh index ddad7d671..e6f1dff2e 100644 --- a/install/ots-install.sh +++ b/install/ots-install.sh @@ -19,7 +19,7 @@ $STD apt install -y \ nginx msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "ots" "Luzifer/ots" "prebuild" "latest" "/opt/ots" "ots_linux_amd64.tgz" +fetch_and_deploy_gh_release "ots" "Luzifer/ots" "prebuild" "latest" "/opt/ots" "ots_linux_$(arch_resolve).tgz" create_self_signed_cert msg_info "Setup OTS" diff --git a/install/owncast-install.sh b/install/owncast-install.sh index 32cecf022..3bbc8b6e2 100644 --- a/install/owncast-install.sh +++ b/install/owncast-install.sh @@ -19,7 +19,7 @@ msg_info "Installing Dependencies (Patience)" $STD apt install -y ffmpeg msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "owncast" "owncast/owncast" "prebuild" "latest" "/opt/owncast" "owncast*linux-64bit.zip" +fetch_and_deploy_gh_release "owncast" "owncast/owncast" "prebuild" "latest" "/opt/owncast" "owncast*linux-$(arch_resolve "64bit" "arm64").zip" msg_info "Creating Service" cat </etc/systemd/system/owncast.service diff --git a/install/pangolin-install.sh b/install/pangolin-install.sh index fb15fb015..ab3fc5095 100644 --- a/install/pangolin-install.sh +++ b/install/pangolin-install.sh @@ -24,8 +24,8 @@ msg_ok "Installed Dependencies" NODE_VERSION="24" setup_nodejs PANGOLIN_VERSION="${PANGOLIN_VERSION:-1.18.4}" fetch_and_deploy_gh_release "pangolin" "fosrl/pangolin" "tarball" "$PANGOLIN_VERSION" -fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_amd64" -fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_amd64.tar.gz" +fetch_and_deploy_gh_release "gerbil" "fosrl/gerbil" "singlefile" "latest" "/usr/bin" "gerbil_linux_$(arch_resolve)" +fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_$(arch_resolve).tar.gz" read -rp "${TAB3}Enter your Pangolin URL (ex: https://pangolin.example.com): " pango_url read -rp "${TAB3}Enter your email address: " pango_email diff --git a/misc/tools.func b/misc/tools.func index 727c02bb2..278a015e9 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -765,8 +765,12 @@ manage_tool_repository() { distro_codename=$(get_os_info codename) if [[ "$distro_id" == "debian" && "$(dpkg --print-architecture)" == "arm64" ]]; then - distro_id="ubuntu" - suite="noble" + case "$distro_codename" in + trixie | forky) suite="noble" ;; + bookworm) suite="jammy" ;; + *) suite="noble" ;; + esac + distro_id="ubuntu" repo_url="https://repo.mongodb.org/apt/ubuntu" elif [[ "$distro_id" == "debian" ]]; then case "$distro_codename" in From c98d2da1bd693046fc660aacc5ecff4f95633cc7 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 18:46:05 +0000 Subject: [PATCH 26/98] Update CHANGELOG.md (#15264) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c65d64aa..d7c2470c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -492,6 +492,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### ✨ New Features + - [arm64] Port scripts between nodered & paperlessngx to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15255](https://github.com/community-scripts/ProxmoxVE/pull/15255)) - [arm64] port scripts titled between papra and qbittorrent to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15258](https://github.com/community-scripts/ProxmoxVE/pull/15258)) - [arm64] Port scripts between mediamtx-nocodb to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15254](https://github.com/community-scripts/ProxmoxVE/pull/15254)) From b5c31d58f47c9360c8ba5452a34628d0535cb7bd Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 21 Jun 2026 22:24:10 +0200 Subject: [PATCH 27/98] tools.func: centralize Node.js corepack and npm handling in `setup_nodejs()` (#15268) --- ct/bookorbit.sh | 5 +- ct/databasus.sh | 4 +- ct/feishin.sh | 4 +- ct/gramps-web.sh | 4 +- ct/immich.sh | 3 +- ct/invoiceshelf.sh | 2 +- ct/karakeep.sh | 4 +- ct/linkwarden.sh | 4 +- ct/manyfold.sh | 4 +- ct/metube.sh | 4 +- ct/outline.sh | 4 +- ct/plane.sh | 4 +- ct/reactive-resume.sh | 4 +- ct/storyteller.sh | 2 +- ct/twenty.sh | 4 +- install/bookorbit-install.sh | 4 +- install/databasus-install.sh | 4 +- install/feishin-install.sh | 4 +- install/foldergram-install.sh | 2 +- install/gramps-web-install.sh | 4 +- install/immich-install.sh | 3 +- install/invoiceshelf-install.sh | 4 +- install/linkwarden-install.sh | 4 +- install/manyfold-install.sh | 6 +-- install/metube-install.sh | 4 +- install/outline-install.sh | 4 +- install/plane-install.sh | 4 +- install/reactive-resume-install.sh | 4 +- install/storyteller-install.sh | 4 +- install/tracearr-install.sh | 4 +- install/twenty-install.sh | 4 +- install/wger-install.sh | 2 +- misc/tools.func | 79 +++++++++++++++++++----------- 33 files changed, 114 insertions(+), 86 deletions(-) diff --git a/ct/bookorbit.sh b/ct/bookorbit.sh index 25b19cddf..16e330e24 100644 --- a/ct/bookorbit.sh +++ b/ct/bookorbit.sh @@ -30,6 +30,8 @@ function update_script() { exit fi + NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs + if check_for_gh_release "bookorbit" "bookorbit/bookorbit"; then msg_info "Stopping Service" systemctl stop bookorbit @@ -42,7 +44,7 @@ function update_script() { msg_info "Rebuilding Application" cd /opt/bookorbit PNPM_VERSION=$(jq -r '.packageManager | ltrimstr("pnpm@")' /opt/bookorbit/package.json) - $STD corepack enable + $STD corepack prepare "pnpm@${PNPM_VERSION}" --activate $STD pnpm install --frozen-lockfile $STD pnpm --filter client run build-only @@ -59,7 +61,6 @@ function update_script() { $STD uv pip install --python /opt/bookorbit-python/bin/python -r /opt/bookorbit/server/requirements/kobo-cloudscraper.txt msg_ok "Updated Kobo Python Runtime" - msg_info "Starting Service" systemctl start bookorbit msg_ok "Started Service" diff --git a/ct/databasus.sh b/ct/databasus.sh index e07104331..8e5cc5df9 100644 --- a/ct/databasus.sh +++ b/ct/databasus.sh @@ -30,6 +30,8 @@ function update_script() { exit fi + NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs + if check_for_gh_release "databasus" "databasus/databasus"; then msg_info "Stopping Databasus" $STD systemctl stop databasus @@ -70,7 +72,7 @@ function update_script() { msg_info "Updating Databasus" export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 cd /opt/databasus/frontend - $STD corepack enable + $STD corepack prepare pnpm@latest --activate $STD pnpm install --frozen-lockfile $STD pnpm run build diff --git a/ct/feishin.sh b/ct/feishin.sh index b13b280e5..4f3f8cd63 100644 --- a/ct/feishin.sh +++ b/ct/feishin.sh @@ -30,6 +30,8 @@ function update_script() { exit fi + NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs + if check_for_gh_release "feishin" "jeffvli/feishin"; then create_backup /opt/feishin/.env @@ -38,7 +40,7 @@ function update_script() { msg_info "Rebuilding Feishin Web" cd /opt/feishin #PNPM_VERSION=$(jq -r '.packageManager | ltrimstr("pnpm@")' /opt/feishin/package.json) - $STD corepack enable + $STD corepack prepare "pnpm@10" --activate $STD pnpm install $STD pnpm run build:web diff --git a/ct/gramps-web.sh b/ct/gramps-web.sh index 287145ec7..04c369452 100644 --- a/ct/gramps-web.sh +++ b/ct/gramps-web.sh @@ -31,7 +31,7 @@ function update_script() { fi PYTHON_VERSION="3.12" setup_uv - NODE_VERSION="22" setup_nodejs + NODE_VERSION="22" NODE_MODULE="corepack" setup_nodejs if check_for_gh_release "gramps-web-api" "gramps-project/gramps-web-api"; then msg_info "Stopping Service" @@ -84,7 +84,7 @@ function update_script() { msg_info "Updating Gramps Web Frontend" cd /opt/gramps-web/frontend export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 - $STD corepack enable + $STD npm install $STD npm run build msg_ok "Updated Gramps Web Frontend" diff --git a/ct/immich.sh b/ct/immich.sh index 5615d267b..53d1d9699 100644 --- a/ct/immich.sh +++ b/ct/immich.sh @@ -168,13 +168,12 @@ EOF setup_uv CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "${RELEASE}" "$SRC_DIR" PNPM_VERSION="$(jq -r '.packageManager | split("@")[1] | split("+")[0]' ${SRC_DIR}/package.json)" - NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs + NODE_VERSION="24" NODE_MODULE="corepack,pnpm@${PNPM_VERSION}" setup_nodejs msg_info "Updating Immich web and microservices" cd "$SRC_DIR"/server export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 export CI=1 - corepack enable # server build export SHARP_IGNORE_GLOBAL_LIBVIPS=true diff --git a/ct/invoiceshelf.sh b/ct/invoiceshelf.sh index 4d62ac6a5..0e6c8fbe7 100644 --- a/ct/invoiceshelf.sh +++ b/ct/invoiceshelf.sh @@ -53,7 +53,7 @@ function update_script() { cd /opt/invoiceshelf $STD composer install --no-dev --optimize-autoloader if command -v corepack >/dev/null 2>&1; then - $STD corepack enable + $STD corepack yarn install $STD corepack yarn build else diff --git a/ct/karakeep.sh b/ct/karakeep.sh index 2cc623d65..c52db636c 100644 --- a/ct/karakeep.sh +++ b/ct/karakeep.sh @@ -89,11 +89,11 @@ EOF fi sed -i "s/^SERVER_VERSION=.*$/SERVER_VERSION=${CHECK_UPDATE_RELEASE#v}/" /etc/karakeep/karakeep.env MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)" - NODE_VERSION="24" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs + NODE_VERSION="24" NODE_MODULE="corepack,pnpm@${MODULE_VERSION}" setup_nodejs setup_meilisearch msg_info "Updating Karakeep" - corepack enable + export PUPPETEER_SKIP_DOWNLOAD="true" export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true" export NEXT_TELEMETRY_DISABLED=1 diff --git a/ct/linkwarden.sh b/ct/linkwarden.sh index 59eb32c04..6fb08596b 100644 --- a/ct/linkwarden.sh +++ b/ct/linkwarden.sh @@ -28,7 +28,7 @@ function update_script() { exit fi if check_for_gh_release "linkwarden" "linkwarden/linkwarden"; then - NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs + NODE_VERSION="22" NODE_MODULE="corepack,yarn@latest" setup_nodejs msg_info "Stopping Service" systemctl stop linkwarden msg_ok "Stopped Service" @@ -54,7 +54,7 @@ function update_script() { fi fi if command -v corepack >/dev/null 2>&1; then - $STD corepack enable + $STD corepack prepare "yarn@${yarn_ver}" --activate || true fi $STD yarn diff --git a/ct/manyfold.sh b/ct/manyfold.sh index 2537736fd..52c9b76c3 100644 --- a/ct/manyfold.sh +++ b/ct/manyfold.sh @@ -29,7 +29,7 @@ function update_script() { exit fi - NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs + NODE_VERSION="24" NODE_MODULE="corepack,yarn" setup_nodejs ensure_dependencies f3d if check_for_gh_release "manyfold" "manyfold3d/manyfold"; then @@ -65,8 +65,6 @@ function update_script() { msg_ok "Restored Data" msg_info "Installing Manyfold" - $STD npm install --global corepack - $STD corepack enable yarn sudo -u manyfold bash -c ' source /opt/manyfold/.env diff --git a/ct/metube.sh b/ct/metube.sh index fbaeee46c..b00f4e833 100644 --- a/ct/metube.sh +++ b/ct/metube.sh @@ -41,7 +41,7 @@ function update_script() { fi fi - NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs + NODE_VERSION="24" NODE_MODULE="corepack,pnpm" setup_nodejs if check_for_gh_release "metube" "alexta69/metube"; then msg_info "Stopping Service" @@ -60,7 +60,7 @@ function update_script() { msg_info "Building Frontend" cd /opt/metube/ui if command -v corepack >/dev/null 2>&1; then - $STD corepack enable + $STD corepack prepare pnpm --activate || true fi echo 'onlyBuiltDependencies=*' >> .npmrc diff --git a/ct/outline.sh b/ct/outline.sh index cf38d4bd2..a67b7ff2e 100644 --- a/ct/outline.sh +++ b/ct/outline.sh @@ -29,7 +29,7 @@ function update_script() { exit fi - NODE_VERSION="24" setup_nodejs + NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs if check_for_gh_release "outline" "outline/outline"; then msg_info "Stopping Services" @@ -48,7 +48,7 @@ function update_script() { export NODE_ENV=development export NODE_OPTIONS="--max-old-space-size=3584" export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 - $STD corepack enable + $STD yarn install --immutable export NODE_ENV=production $STD yarn build diff --git a/ct/plane.sh b/ct/plane.sh index 33148a6a9..13c29969c 100644 --- a/ct/plane.sh +++ b/ct/plane.sh @@ -30,6 +30,8 @@ function update_script() { exit 1 fi + NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs + if check_for_gh_release "plane" "makeplane/plane"; then msg_info "Stopping Services" systemctl stop plane-api plane-worker plane-beat plane-live plane-space @@ -49,7 +51,7 @@ function update_script() { cd /opt/plane export NODE_OPTIONS="--max-old-space-size=4096" export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 - $STD corepack enable pnpm + $STD pnpm install --frozen-lockfile $STD pnpm turbo run build --filter=web --filter=admin --filter=space --filter=live msg_ok "Rebuilt Frontend" diff --git a/ct/reactive-resume.sh b/ct/reactive-resume.sh index 33dada404..e1da974db 100644 --- a/ct/reactive-resume.sh +++ b/ct/reactive-resume.sh @@ -37,13 +37,13 @@ function update_script() { ensure_dependencies git cp /opt/reactive-resume/.env /opt/reactive-resume.env.bak - NODE_VERSION="24" setup_nodejs + NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs CLEAN_INSTALL=1 fetch_and_deploy_gh_release "reactive-resume" "amruthpillai/reactive-resume" "tarball" "latest" "/opt/reactive-resume" msg_info "Updating Reactive Resume (Patience)" cd /opt/reactive-resume export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 - corepack enable + corepack prepare --activate export CI="true" export NODE_ENV="production" diff --git a/ct/storyteller.sh b/ct/storyteller.sh index a461a6d02..a4f31c5f3 100644 --- a/ct/storyteller.sh +++ b/ct/storyteller.sh @@ -48,7 +48,7 @@ function update_script() { msg_info "Rebuilding Storyteller" cd /opt/storyteller export NODE_OPTIONS="--max-old-space-size=4096" - $STD corepack enable + $STD corepack yarn install --network-timeout 600000 $STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so export CI=1 diff --git a/ct/twenty.sh b/ct/twenty.sh index 19871062f..eac19594c 100644 --- a/ct/twenty.sh +++ b/ct/twenty.sh @@ -31,6 +31,8 @@ function update_script() { exit fi + NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs + if check_for_gh_release "twenty" "twentyhq/twenty"; then msg_info "Stopping Services" systemctl stop twenty-worker twenty-server @@ -47,7 +49,7 @@ function update_script() { msg_info "Building Application" cd /opt/twenty export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 - $STD corepack enable + $STD corepack prepare yarn@4.9.2 --activate export NODE_OPTIONS="--max-old-space-size=3072" $STD yarn install --immutable || $STD yarn install diff --git a/install/bookorbit-install.sh b/install/bookorbit-install.sh index 48c249a2d..baf220dfb 100644 --- a/install/bookorbit-install.sh +++ b/install/bookorbit-install.sh @@ -22,7 +22,7 @@ msg_ok "Installed Dependencies" PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql PG_DB_NAME="bookorbit" PG_DB_USER="bookorbit" PG_DB_EXTENSIONS="uuid-ossp,pg_trgm,vector" setup_postgresql_db -NODE_VERSION="24" setup_nodejs +NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs setup_uv fetch_and_deploy_gh_release "bookorbit" "bookorbit/bookorbit" "tarball" @@ -30,7 +30,7 @@ fetch_and_deploy_gh_release "bookorbit" "bookorbit/bookorbit" "tarball" msg_info "Building Application" cd /opt/bookorbit PNPM_VERSION=$(jq -r '.packageManager | ltrimstr("pnpm@")' /opt/bookorbit/package.json) -$STD corepack enable + $STD corepack prepare "pnpm@${PNPM_VERSION}" --activate $STD pnpm install --frozen-lockfile $STD pnpm --filter client run build-only diff --git a/install/databasus-install.sh b/install/databasus-install.sh index c9808d3e2..1f81d8b0d 100644 --- a/install/databasus-install.sh +++ b/install/databasus-install.sh @@ -23,7 +23,7 @@ msg_ok "Installed Dependencies" PG_VERSION="17" setup_postgresql setup_go -NODE_VERSION="24" setup_nodejs +NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs msg_info "Installing Database Clients" # Create PostgreSQL version symlinks for compatibility @@ -56,7 +56,7 @@ fetch_and_deploy_gh_release "databasus" "databasus/databasus" "tarball" "latest" msg_info "Building Databasus (Patience)" export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 cd /opt/databasus/frontend -$STD corepack enable + $STD corepack prepare pnpm@latest --activate $STD pnpm install --frozen-lockfile $STD pnpm run build diff --git a/install/feishin-install.sh b/install/feishin-install.sh index 68669db7d..6a12898d0 100644 --- a/install/feishin-install.sh +++ b/install/feishin-install.sh @@ -19,14 +19,14 @@ $STD apt install -y \ gettext-base msg_ok "Installed Dependencies" -NODE_VERSION="24" setup_nodejs +NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs fetch_and_deploy_gh_release "feishin" "jeffvli/feishin" "tarball" msg_info "Building Feishin Web" cd /opt/feishin #PNPM_VERSION=$(jq -r '.packageManager | ltrimstr("pnpm@")' /opt/feishin/package.json) -$STD corepack enable + $STD corepack prepare "pnpm@10" --activate $STD pnpm install $STD pnpm run build:web diff --git a/install/foldergram-install.sh b/install/foldergram-install.sh index 895a619a8..92b6bef06 100644 --- a/install/foldergram-install.sh +++ b/install/foldergram-install.sh @@ -23,7 +23,7 @@ fetch_and_deploy_gh_release "foldergram" "foldergram/foldergram" "tarball" msg_info "Configuring Foldergram" export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 -$STD corepack enable + cd /opt/foldergram $STD pnpm install $STD pnpm run build diff --git a/install/gramps-web-install.sh b/install/gramps-web-install.sh index 7924847a2..f7df3692b 100644 --- a/install/gramps-web-install.sh +++ b/install/gramps-web-install.sh @@ -38,7 +38,7 @@ $STD apt install -y \ msg_ok "Installed Dependencies" PYTHON_VERSION="3.12" setup_uv -NODE_VERSION="22" setup_nodejs +NODE_VERSION="22" NODE_MODULE="corepack" setup_nodejs fetch_and_deploy_gh_release "gramps-web-api" "gramps-project/gramps-web-api" "tarball" "latest" "/opt/gramps-web-api" fetch_and_deploy_gh_release "gramps-web" "gramps-project/gramps-web" "tarball" "latest" "/opt/gramps-web/frontend" @@ -92,7 +92,7 @@ msg_ok "Installed Gramps Addons" cd /opt/gramps-web/frontend export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 -$STD corepack enable + $STD npm install $STD npm run build cd /opt/gramps-web-api diff --git a/install/immich-install.sh b/install/immich-install.sh index 3637fed98..d64589727 100644 --- a/install/immich-install.sh +++ b/install/immich-install.sh @@ -313,14 +313,13 @@ mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache} fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "v2.7.5" "$SRC_DIR" PNPM_VERSION="$(jq -r '.packageManager | split("@")[1] | split("+")[0]' ${SRC_DIR}/package.json)" -NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs +NODE_VERSION="24" NODE_MODULE="corepack,pnpm@${PNPM_VERSION}" setup_nodejs msg_info "Installing Immich (patience)" cd "$SRC_DIR"/server export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 export CI=1 -corepack enable # server build export SHARP_IGNORE_GLOBAL_LIBVIPS=true diff --git a/install/invoiceshelf-install.sh b/install/invoiceshelf-install.sh index c604ab2c4..657054f37 100644 --- a/install/invoiceshelf-install.sh +++ b/install/invoiceshelf-install.sh @@ -19,7 +19,7 @@ msg_ok "Installed Dependencies" PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULES="bcmath,gd,intl,xml,zip,pdo_pgsql,mbstring,curl,exif" setup_php setup_composer -NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs +NODE_VERSION="24" NODE_MODULE="corepack,pnpm" setup_nodejs PG_VERSION="16" setup_postgresql PG_DB_NAME="invoiceshelf" PG_DB_USER="invoiceshelf" setup_postgresql_db @@ -40,7 +40,7 @@ sed -i "s|^DB_PASSWORD=.*|DB_PASSWORD=${PG_DB_PASS}|" .env COMPOSER_ALLOW_SUPERUSER=1 $STD composer install --no-dev --optimize-autoloader --no-interaction $STD php artisan key:generate --force if command -v corepack >/dev/null 2>&1; then - $STD corepack enable + $STD corepack pnpm install $STD corepack pnpm run build else diff --git a/install/linkwarden-install.sh b/install/linkwarden-install.sh index 8c4f6f664..93d9ab841 100644 --- a/install/linkwarden-install.sh +++ b/install/linkwarden-install.sh @@ -19,7 +19,7 @@ $STD apt install -y \ build-essential msg_ok "Installed Dependencies" -NODE_VERSION="22" setup_nodejs +NODE_VERSION="22" NODE_MODULE="corepack" setup_nodejs PG_VERSION="16" setup_postgresql RUST_CRATES="monolith" setup_rust PG_DB_NAME="linkwardendb" PG_DB_USER="linkwarden" setup_postgresql_db @@ -44,7 +44,7 @@ if [[ -f package.json ]]; then fi fi if command -v corepack >/dev/null 2>&1; then - $STD corepack enable + $STD corepack prepare "yarn@${yarn_ver}" --activate || true fi $STD yarn diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index 7007fa74d..dfc43b49e 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -27,7 +27,7 @@ msg_ok "Installed Dependencies" setup_imagemagick PG_VERSION="16" setup_postgresql PG_DB_NAME="manyfold" PG_DB_USER="manyfold" setup_postgresql_db -NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs +NODE_VERSION="24" NODE_MODULE="corepack,yarn" setup_nodejs fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold/app" @@ -66,7 +66,7 @@ gem install bundler bundle install gem install sidekiq gem install foreman -corepack enable yarn + rm -f /opt/manyfold/app/config/credentials.yml.enc corepack prepare $YARN_VERSION --activate corepack use $YARN_VERSION @@ -81,7 +81,7 @@ msg_ok "Configured Manyfold" msg_info "Installing Manyfold" chown -R manyfold:manyfold {/home/manyfold,/opt/manyfold} chmod +x /opt/manyfold/user_setup.sh -$STD npm install --global corepack + $STD sudo -u manyfold bash /opt/manyfold/user_setup.sh rm -f /opt/manyfold/user_setup.sh msg_ok "Installed Manyfold" diff --git a/install/metube-install.sh b/install/metube-install.sh index 734cf583c..ee4a6247b 100644 --- a/install/metube-install.sh +++ b/install/metube-install.sh @@ -23,7 +23,7 @@ $STD apt install -y \ msg_ok "Installed Dependencies" PYTHON_VERSION="3.13" setup_uv -NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs +NODE_VERSION="24" NODE_MODULE="corepack,pnpm" setup_nodejs msg_info "Installing Deno" export DENO_INSTALL="/usr/local" @@ -38,7 +38,7 @@ fetch_and_deploy_gh_release "metube" "alexta69/metube" "tarball" "latest" msg_info "Installing MeTube" cd /opt/metube/ui if command -v corepack >/dev/null 2>&1; then - $STD corepack enable + $STD corepack prepare pnpm --activate || true fi echo 'onlyBuiltDependencies=*' >> .npmrc diff --git a/install/outline-install.sh b/install/outline-install.sh index 9bacffe8f..222fdd016 100644 --- a/install/outline-install.sh +++ b/install/outline-install.sh @@ -20,7 +20,7 @@ $STD apt install -y \ redis msg_ok "Installed Dependencies" -NODE_VERSION="24" setup_nodejs +NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs PG_VERSION="16" setup_postgresql PG_DB_NAME="outline" PG_DB_USER="outline" setup_postgresql_db @@ -39,7 +39,7 @@ 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" export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 -$STD corepack enable + $STD yarn install --immutable export NODE_ENV=production sed -i 's/NODE_ENV=development/NODE_ENV=production/g' /opt/outline/.env diff --git a/install/plane-install.sh b/install/plane-install.sh index c0ae16c46..e5fa04712 100644 --- a/install/plane-install.sh +++ b/install/plane-install.sh @@ -32,7 +32,7 @@ $STD apt install -y \ rabbitmq-server msg_ok "Installed Dependencies" -NODE_VERSION="24" setup_nodejs +NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs PG_VERSION="16" setup_postgresql PG_DB_NAME="plane" PG_DB_USER="plane" setup_postgresql_db @@ -90,7 +90,7 @@ for app in web admin space; do done export NODE_OPTIONS="--max-old-space-size=4096" export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 -$STD corepack enable pnpm + $STD pnpm install --frozen-lockfile $STD pnpm turbo run build --filter=web --filter=admin --filter=space --filter=live msg_ok "Built Frontend Apps" diff --git a/install/reactive-resume-install.sh b/install/reactive-resume-install.sh index 1eb864b0f..35cbee5f2 100644 --- a/install/reactive-resume-install.sh +++ b/install/reactive-resume-install.sh @@ -15,7 +15,7 @@ update_os PG_VERSION="16" setup_postgresql PG_DB_NAME="reactive_resume" PG_DB_USER="reactive_resume" setup_postgresql_db -NODE_VERSION="24" setup_nodejs +NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs msg_info "Installing Dependencies" $STD apt install -y \ @@ -28,7 +28,7 @@ fetch_and_deploy_gh_release "reactive-resume" "amruthpillai/reactive-resume" "ta msg_info "Building Reactive Resume (Patience)" cd /opt/reactive-resume export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 -corepack enable + corepack prepare --activate export NODE_ENV="production" export CI="true" diff --git a/install/storyteller-install.sh b/install/storyteller-install.sh index 3bf66cea6..a3f71fe7d 100644 --- a/install/storyteller-install.sh +++ b/install/storyteller-install.sh @@ -24,7 +24,7 @@ $STD apt install -y \ ffmpeg msg_ok "Installed Dependencies" -NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs +NODE_VERSION="22" NODE_MODULE="corepack,yarn" setup_nodejs fetch_and_deploy_gh_release "readium" "readium/cli" "prebuild" "latest" "/opt/readium" "readium_linux_x86_64.tar.gz" ln -sf /opt/readium/readium /usr/local/bin/readium @@ -32,7 +32,7 @@ fetch_and_deploy_gl_release "storyteller" "storyteller-platform/storyteller" "ta msg_info "Setting up Storyteller" cd /opt/storyteller -$STD corepack enable + $STD corepack yarn install --network-timeout 600000 $STD gcc -g -fPIC -rdynamic -shared web/sqlite/uuid.c -o web/sqlite/uuid.c.so STORYTELLER_SECRET_KEY=$(openssl rand -base64 32) diff --git a/install/tracearr-install.sh b/install/tracearr-install.sh index f714fb652..a1f6cdc85 100644 --- a/install/tracearr-install.sh +++ b/install/tracearr-install.sh @@ -17,13 +17,13 @@ msg_info "Installing Dependencies" $STD apt install -y redis-server msg_ok "Installed Dependencies" -NODE_VERSION="24" setup_nodejs +NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs PG_VERSION="18" setup_postgresql msg_info "Installing pnpm" PNPM_VERSION="$(curl -fsSL "https://raw.githubusercontent.com/connorgallopo/Tracearr/refs/heads/main/package.json" | jq -r '.packageManager | split("@")[1]' | cut -d'+' -f1)" export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 -$STD corepack enable pnpm + $STD corepack prepare pnpm@${PNPM_VERSION} --activate msg_ok "Installed pnpm" diff --git a/install/twenty-install.sh b/install/twenty-install.sh index 033b3e140..23819f20d 100644 --- a/install/twenty-install.sh +++ b/install/twenty-install.sh @@ -21,14 +21,14 @@ msg_ok "Installed Dependencies" PG_VERSION="17" PG_MODULES="pgvector" setup_postgresql PG_DB_NAME="twenty_db" PG_DB_USER="twenty" PG_DB_SCHEMA_PERMS="true" PG_DB_EXTENSIONS="vector" setup_postgresql_db -NODE_VERSION="24" setup_nodejs +NODE_VERSION="24" NODE_MODULE="corepack" setup_nodejs fetch_and_deploy_gh_release "twenty" "twentyhq/twenty" "tarball" msg_info "Building Application" cd /opt/twenty export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 -$STD corepack enable + $STD corepack prepare yarn@4.9.2 --activate yarn install --immutable >/dev/null 2>&1 || $STD yarn install export NODE_OPTIONS="--max-old-space-size=4096" diff --git a/install/wger-install.sh b/install/wger-install.sh index 213c29f38..dabdfd1e1 100644 --- a/install/wger-install.sh +++ b/install/wger-install.sh @@ -31,7 +31,7 @@ msg_info "Setting up wger" mkdir -p /opt/wger/{static,media} chmod o+w /opt/wger/media cd /opt/wger -$STD corepack enable + $STD npm install $STD npm run build:css:sass $STD uv venv diff --git a/misc/tools.func b/misc/tools.func index 278a015e9..5baa8bb7a 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -7283,13 +7283,18 @@ EOF # - Optionally installs or updates global npm modules # # Variables: -# NODE_VERSION - Node.js version to install (default: 24 LTS) -# NODE_MODULE - Comma-separated list of global modules (e.g. "yarn,@vue/cli@5.0.0") +# NODE_VERSION - Node.js version to install (default: 24 LTS) +# NODE_MODULE - Comma-separated global modules (e.g. "yarn,corepack,pnpm@10") +# NODE_COREPACK_ENABLE - Run corepack enable after install (default: 1 when corepack is used) # ------------------------------------------------------------------------------ setup_nodejs() { local NODE_VERSION="${NODE_VERSION:-24}" local NODE_MODULE="${NODE_MODULE:-}" + local NODE_COREPACK_ENABLE="${NODE_COREPACK_ENABLE:-1}" + local node_major="${NODE_VERSION%%.*}" + local wants_corepack=0 + local node_setup_ok_msg="" # ALWAYS clean up legacy installations first (nvm, etc.) to prevent conflicts cleanup_legacy_install "nodejs" @@ -7316,18 +7321,17 @@ setup_nodejs() { # Upgrade to the latest minor/patch release from NodeSource $STD apt-get install -y --only-upgrade nodejs 2>/dev/null || true - # Pin npm to 11.11.0 to work around Node.js 22.22.2 regression (nodejs/node#62425) - $STD npm install -g npm@11.11.0 2>/dev/null || true - cache_installed_version "nodejs" "$NODE_VERSION" msg_ok "Update Node.js $NODE_VERSION" else # Scenario 2: Different version installed - clean upgrade if [[ -n "$CURRENT_NODE_VERSION" && "$CURRENT_NODE_VERSION" != "$NODE_VERSION" ]]; then msg_info "Upgrade Node.js from $CURRENT_NODE_VERSION to $NODE_VERSION" + node_setup_ok_msg="Upgrade Node.js to $NODE_VERSION" remove_old_tool_version "nodejs" else msg_info "Setup Node.js $NODE_VERSION" + node_setup_ok_msg="Setup Node.js $NODE_VERSION" fi # Remove ALL Debian nodejs packages BEFORE adding NodeSource repo @@ -7336,6 +7340,7 @@ setup_nodejs() { $STD apt purge -y nodejs nodejs-doc libnode* node-* 2>/dev/null || true $STD apt autoremove -y 2>/dev/null || true $STD apt clean 2>/dev/null || true + msg_ok "Removed Debian-packaged Node.js" fi # Remove any APT pinning (not needed) @@ -7381,17 +7386,19 @@ setup_nodejs() { return 127 fi - # Pin npm to 11.11.0 to work around Node.js 22.22.2 regression (nodejs/node#62425) - local NPM_VERSION - NPM_VERSION=$(npm -v 2>/dev/null || echo "0") - if [[ "$NPM_VERSION" != "0" ]]; then - $STD npm install -g npm@11.11.0 2>/dev/null || { - msg_warn "Failed to update npm to 11.11.0 (continuing with bundled npm $NPM_VERSION)" - } - fi - cache_installed_version "nodejs" "$NODE_VERSION" - msg_ok "Setup Node.js $NODE_VERSION" + msg_ok "$node_setup_ok_msg" + fi + + # Node 22.22.2 bundles npm 10.9.7 which cannot self-upgrade (nodejs/node#62425) + if [[ "$NODE_VERSION" == "22" && "$(npm -v 2>/dev/null)" == "10.9.7" ]]; then + msg_info "Updating npm (Node 22 regression fix)" + $STD npm install -g npm@10.9.8 2>/dev/null || true + if $STD npm install -g npm@latest 2>/dev/null; then + msg_ok "Updated npm ($(npm -v))" + else + msg_warn "npm update failed on Node 22.22.2" + fi fi # Set a safe default heap limit for Node.js builds if not explicitly provided. @@ -7436,12 +7443,18 @@ setup_nodejs() { } # Install global Node modules - if [[ -n "$NODE_MODULE" ]]; then + if [[ -n "$NODE_MODULE" ]] || (( node_major >= 25 )); then + if (( node_major >= 25 )) && [[ ",${NODE_MODULE}," != *",corepack,"* ]] && [[ "$NODE_MODULE" != corepack* ]]; then + NODE_MODULE="${NODE_MODULE:+$NODE_MODULE,}corepack" + fi + IFS=',' read -ra MODULES <<<"$NODE_MODULE" - # Pin pnpm to v10 to avoid breaking changes from newer major versions for i in "${!MODULES[@]}"; do - if [[ "${MODULES[$i]}" =~ ^pnpm(@.*)?$ ]]; then + if [[ "${MODULES[$i]}" == "corepack" || "${MODULES[$i]}" == corepack@* ]]; then + wants_corepack=1 + fi + if [[ "${MODULES[$i]}" == "pnpm" ]]; then MODULES[$i]="pnpm@^10" fi done @@ -7467,33 +7480,43 @@ setup_nodejs() { if $STD npm list -g --depth=0 "$MODULE_NAME" 2>&1 | grep -q "$MODULE_NAME@"; then MODULE_INSTALLED_VERSION="$(npm list -g --depth=0 "$MODULE_NAME" 2>&1 | grep "$MODULE_NAME@" | awk -F@ '{print $2}' 2>/dev/null | tr -d '[:space:]' || echo '')" if [[ "$MODULE_REQ_VERSION" != "latest" && "$MODULE_REQ_VERSION" != "$MODULE_INSTALLED_VERSION" ]]; then - msg_info "Updating $MODULE_NAME from v$MODULE_INSTALLED_VERSION to v$MODULE_REQ_VERSION" - if ! $STD npm install -g "${MODULE_NAME}@${MODULE_REQ_VERSION}" 2>/dev/null; then + msg_info "Updating $MODULE_NAME to v$MODULE_REQ_VERSION" + if $STD npm install -g "${MODULE_NAME}@${MODULE_REQ_VERSION}" 2>/dev/null; then + msg_ok "Updated $MODULE_NAME" + else msg_warn "Failed to update $MODULE_NAME to version $MODULE_REQ_VERSION" ((failed_modules++)) || true - continue fi elif [[ "$MODULE_REQ_VERSION" == "latest" ]]; then msg_info "Updating $MODULE_NAME to latest version" - if ! $STD npm install -g "${MODULE_NAME}@latest" 2>/dev/null; then + if $STD npm install -g "${MODULE_NAME}@latest" 2>/dev/null; then + msg_ok "Updated $MODULE_NAME" + else msg_warn "Failed to update $MODULE_NAME to latest version" ((failed_modules++)) || true - continue fi fi else msg_info "Installing $MODULE_NAME@$MODULE_REQ_VERSION" - if ! $STD npm install -g "${MODULE_NAME}@${MODULE_REQ_VERSION}" 2>/dev/null; then + if $STD npm install -g "${MODULE_NAME}@${MODULE_REQ_VERSION}" 2>/dev/null; then + msg_ok "Installed $MODULE_NAME" + else msg_warn "Failed to install $MODULE_NAME@$MODULE_REQ_VERSION" ((failed_modules++)) || true - continue fi fi done - if [[ $failed_modules -eq 0 ]]; then - msg_ok "Installed Node.js modules: $NODE_MODULE" + if (( failed_modules > 0 )); then + msg_warn "$failed_modules Node.js module(s) failed: $NODE_MODULE" + fi + fi + + if [[ "$NODE_COREPACK_ENABLE" == "1" ]] && (( wants_corepack )) && command -v corepack >/dev/null 2>&1; then + msg_info "Enabling corepack" + if $STD corepack enable 2>/dev/null; then + msg_ok "Enabled corepack" else - msg_warn "Installed Node.js modules with $failed_modules failure(s): $NODE_MODULE" + msg_warn "corepack enable failed" fi fi } From 89d82d324c0cfcb1292469cc49f6eabf77b387cc Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 20:24:34 +0000 Subject: [PATCH 28/98] Update CHANGELOG.md (#15270) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7c2470c9..412601e20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -496,6 +496,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - [arm64] port scripts titled between papra and qbittorrent to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15258](https://github.com/community-scripts/ProxmoxVE/pull/15258)) - [arm64] Port scripts between mediamtx-nocodb to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15254](https://github.com/community-scripts/ProxmoxVE/pull/15254)) + - #### 🔧 Refactor + + - tools.func: centralize Node.js corepack and npm handling in `setup_nodejs()` [@MickLesk](https://github.com/MickLesk) ([#15268](https://github.com/community-scripts/ProxmoxVE/pull/15268)) + ## 2026-06-20 ### 🆕 New Scripts From 53efcadfa9e66096eb4f4aace74944bc59ff7406 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 21 Jun 2026 23:09:51 +0200 Subject: [PATCH 29/98] tools.func: runtime hardening for API helpers and Docker/MeiliSearch (#15273) Co-authored-by: Cursor --- misc/tools.func | 175 +++++++++++++++++++++++++++--------------------- 1 file changed, 99 insertions(+), 76 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index 5baa8bb7a..88c7b71c3 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -2482,6 +2482,8 @@ check_for_gh_tag() { # - Does not modify anything, only checks version state # - Does not support pre-releases # ------------------------------------------------------------------------------ +TOOLS_GH_REL_JSON="" + check_for_gh_release() { local app="$1" local source="$2" @@ -2501,6 +2503,10 @@ check_for_gh_release() { ensure_dependencies jq + local gh_check_json + gh_check_json=$(mktemp /tmp/tools-gh-check-XXXXXX.json) || return 7 + trap 'rm -f "$gh_check_json"' RETURN + # Build auth header if token is available local header_args=() [[ -n "${GITHUB_TOKEN:-}" ]] && header_args=(-H "Authorization: Bearer $GITHUB_TOKEN") @@ -2511,14 +2517,14 @@ check_for_gh_release() { # For pinned versions, query the specific release tag directly if [[ -n "$pinned_version_in" ]]; then local pinned_version_encoded="${pinned_version_in//\//%2F}" - http_code=$(curl -sSL --max-time 20 -w "%{http_code}" -o /tmp/gh_check.json \ + http_code=$(curl -sSL --max-time 20 -w "%{http_code}" -o "$gh_check_json" \ -H 'Accept: application/vnd.github+json' \ -H 'X-GitHub-Api-Version: 2022-11-28' \ "${header_args[@]}" \ "https://api.github.com/repos/${source}/releases/tags/${pinned_version_encoded}" 2>/dev/null) || true - if [[ "$http_code" == "200" ]] && [[ -s /tmp/gh_check.json ]]; then - releases_json="[$(/dev/null) || true - if [[ "$http_code" == "200" ]] && [[ -s /tmp/gh_check.json ]]; then - releases_json="[$(/dev/null) || true - if [[ "$http_code" == "200" ]] && [[ -s /tmp/gh_check.json ]]; then - releases_json=$(/dev/null) || true + http_code=$(curl --connect-timeout 10 --max-time "${api_timeouts[$((attempt - 1))]:-240}" -sSL -w "%{http_code}" -o "$gh_rel_json" "${header[@]}" "$api_url" 2>/dev/null) || true if [[ "$http_code" == "200" ]]; then success=true break @@ -3690,7 +3707,7 @@ fetch_and_deploy_gh_release() { fi local json tag_name - json=$( " prompt - if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - msg_info "Updating Portainer" - docker stop portainer - docker rm portainer - docker pull portainer/portainer-ce:latest - docker run -d \ - -p 9000:9000 \ - -p 9443:9443 \ - --name=portainer \ - --restart=always \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -v portainer_data:/data \ - portainer/portainer-ce:latest - msg_ok "Updated Portainer to $PORTAINER_LATEST" + if _docker_is_noninteractive; then + msg_info "Skipping Portainer update prompt (non-interactive)" + else + read -r -p "${TAB3}Update Portainer $PORTAINER_CURRENT → $PORTAINER_LATEST? " prompt + if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then + msg_info "Updating Portainer" + docker stop portainer + docker rm portainer + docker pull portainer/portainer-ce:latest + docker run -d \ + -p 9000:9000 \ + -p 9443:9443 \ + --name=portainer \ + --restart=always \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v portainer_data:/data \ + portainer/portainer-ce:latest + msg_ok "Updated Portainer to $PORTAINER_LATEST" + fi fi else msg_ok "Portainer is up-to-date ($PORTAINER_CURRENT)" @@ -4472,7 +4498,7 @@ EOF fi # Interactive Container Update Check - if [[ "${DOCKER_SKIP_UPDATES:-}" != "true" ]] && [ "$docker_installed" = true ]; then + if [[ "${DOCKER_SKIP_UPDATES:-}" != "true" ]] && [ "$docker_installed" = true ] && ! _docker_is_noninteractive; then msg_info "Checking for container updates" # Get list of running containers with update status @@ -5246,15 +5272,15 @@ setup_hwaccel() { # ══════════════════════════════════════════════════════════════════════════════ # Resolve the IGC tag that the latest compute-runtime was built against. # Must be called AFTER a fetch_and_deploy_gh_release for intel/compute-runtime -# so that /tmp/gh_rel.json contains the compute-runtime release metadata. +# so that TOOLS_GH_REL_JSON contains the compute-runtime release metadata. # Sets the variable named by $1 (default: igc_tag) to the discovered tag. # ══════════════════════════════════════════════════════════════════════════════ _resolve_igc_tag() { local -n _out_ref="${1:-igc_tag}" _out_ref="latest" - if [[ -f /tmp/gh_rel.json ]]; then + if [[ -n "${TOOLS_GH_REL_JSON:-}" && -f "$TOOLS_GH_REL_JSON" ]]; then local _body _parsed - _body=$(jq -r '.body // empty' /tmp/gh_rel.json 2>/dev/null) || return 0 + _body=$(jq -r '.body // empty' "$TOOLS_GH_REL_JSON" 2>/dev/null) || return 0 _parsed=$(grep -oP 'intel-graphics-compiler/releases/tag/\K[^\s\)]+' <<<"$_body" | head -1) [[ -n "$_parsed" ]] && _out_ref="$_parsed" fi @@ -5288,7 +5314,7 @@ _setup_intel_arc() { if [[ "$os_codename" == "trixie" || "$os_codename" == "sid" ]]; then msg_info "Fetching Intel compute-runtime from GitHub for Arc support" - # Fetch a compute-runtime package first so /tmp/gh_rel.json is populated, + # Fetch a compute-runtime package first so TOOLS_GH_REL_JSON is populated, # then resolve the matching IGC tag from the release notes. # libigdgmm - bundled in compute-runtime releases fetch_and_deploy_gh_release "libigdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb" || true @@ -5352,7 +5378,7 @@ _setup_intel_modern() { if [[ "$os_codename" == "trixie" || "$os_codename" == "sid" ]]; then msg_info "Fetching Intel compute-runtime from GitHub" - # Fetch a compute-runtime package first so /tmp/gh_rel.json is populated, + # Fetch a compute-runtime package first so TOOLS_GH_REL_JSON is populated, # then resolve the matching IGC tag from the release notes. # libigdgmm first (bundled in compute-runtime releases) fetch_and_deploy_gh_release "libigdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb" || true @@ -6727,24 +6753,13 @@ setup_meilisearch() { fi fi - # If migration is needed but dump failed, we have options: - # 1. Abort the update (safest, but annoying) - # 2. Backup data directory and proceed (allows manual recovery) - # 3. Just proceed and hope for the best (dangerous) - # We choose option 2: backup and proceed with warning if [[ "$NEEDS_MIGRATION" == "true" ]] && [[ -z "$DUMP_UID" ]]; then - local MEILI_DB_PATH - MEILI_DB_PATH=$(grep -E "^db_path\s*=" /etc/meilisearch.toml 2>/dev/null | sed 's/.*=\s*"\(.*\)"/\1/' | tr -d ' ' || true) - MEILI_DB_PATH="${MEILI_DB_PATH:-/var/lib/meilisearch/data}" - - if [[ -d "$MEILI_DB_PATH" ]] && [[ -n "$(ls -A "$MEILI_DB_PATH" 2>/dev/null)" ]]; then - local BACKUP_PATH="${MEILI_DB_PATH}.backup.$(date +%Y%m%d%H%M%S)" - msg_warn "Backing up MeiliSearch data to ${BACKUP_PATH}" - mv "$MEILI_DB_PATH" "$BACKUP_PATH" - mkdir -p "$MEILI_DB_PATH" - msg_info "Data backed up. After update, you may need to reindex your data." - msg_info "Old data is preserved at: ${BACKUP_PATH}" + msg_error "MeiliSearch migration requires a successful dump before upgrade" + msg_error "Ensure the service is running and master_key is configured, or set MEILISEARCH_SKIP_MIGRATION=1 to force (data loss risk)" + if [[ "${MEILISEARCH_SKIP_MIGRATION:-}" != "1" ]]; then + return 100 fi + msg_warn "MEILISEARCH_SKIP_MIGRATION=1 — proceeding without dump (manual reindex may be required)" fi # Stop service and update binary @@ -9041,6 +9056,10 @@ check_for_gl_release() { ensure_dependencies jq + local gl_check_json + gl_check_json=$(mktemp /tmp/tools-gl-check-XXXXXX.json) || return 7 + trap 'rm -f "$gl_check_json"' RETURN + local repo_encoded repo_encoded=$(printf '%s' "$source" | sed 's|/|%2F|g') @@ -9052,23 +9071,23 @@ check_for_gl_release() { # For pinned versions, try to fetch the specific release tag first if [[ -n "$pinned_version_in" ]]; then local pinned_encoded="${pinned_version_in//\//%2F}" - http_code=$(curl -sSL --max-time 20 -w "%{http_code}" -o /tmp/gl_check.json \ + http_code=$(curl -sSL --max-time 20 -w "%{http_code}" -o "$gl_check_json" \ "${header[@]}" \ "https://gitlab.com/api/v4/projects/$repo_encoded/releases/$pinned_encoded" 2>/dev/null) || true - if [[ "$http_code" == "200" ]] && [[ -s /tmp/gl_check.json ]]; then - releases_json="[$(/dev/null) || true - if [[ "$http_code" == "200" ]] && [[ -s /tmp/gl_check.json ]]; then - releases_json=$(/dev/null) || true + http_code=$(curl $api_timeout -sSL -w "%{http_code}" -o "$gl_rel_json" "${header[@]}" "$api_url" 2>/dev/null) || true if [[ "$http_code" == "200" ]]; then success=true break @@ -9375,7 +9398,7 @@ fetch_and_deploy_gl_release() { fi local json tag_name - json=$( Date: Sun, 21 Jun 2026 23:10:08 +0200 Subject: [PATCH 30/98] tools.func: prevent MySQL data loss and fix repo version matching (#15271) Co-authored-by: Cursor --- misc/tools.func | 96 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 87 insertions(+), 9 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index 88c7b71c3..a7dd12c4f 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -24,6 +24,7 @@ # cleanup_tool_keyrings() - Remove keyrings from all 3 locations # stop_all_services() - Stop services by pattern (e.g. "php*-fpm") # verify_tool_version() - Validate installed version matches expected +# version_matches_spec() - Compare installed semver against spec (8.0 matches 8.0.40) # cleanup_legacy_install() - Remove nvm, rbenv, rustup, etc. # prepare_repository_setup() - Cleanup repos + keyrings + validate APT # install_packages_with_retry() - Install with 3 retries and APT refresh @@ -344,6 +345,37 @@ verify_tool_version() { return 0 } +# ------------------------------------------------------------------------------ +# Compare installed semver against a version spec at the spec's precision. +# Returns: 0 if match (e.g. spec 8.0 matches installed 8.0.40), 1 otherwise +# Usage: version_matches_spec "8.0.40" "8.0" +# ------------------------------------------------------------------------------ +version_matches_spec() { + local installed="$1" + local spec="$2" + local spec_depth prefix i + local -a spec_parts installed_parts + + [[ -n "$installed" && -n "$spec" ]] || return 1 + + IFS='.' read -ra spec_parts <<<"$spec" + spec_depth=${#spec_parts[@]} + ((spec_depth > 0)) || return 1 + + if ((spec_depth == 1)); then + [[ "${installed%%.*}" == "$spec" ]] && return 0 + return 1 + fi + + IFS='.' read -ra installed_parts <<<"$installed" + prefix="" + for ((i = 0; i < spec_depth && i < ${#installed_parts[@]}; i++)); do + [[ -n "$prefix" ]] && prefix+="." + prefix+="${installed_parts[i]}" + done + [[ "$prefix" == "$spec" ]] +} + # ------------------------------------------------------------------------------ # Clean up legacy installation methods (nvm, rbenv, rustup, etc.) # Usage: cleanup_legacy_install "nodejs" -> removes nvm @@ -620,13 +652,15 @@ remove_old_tool_version() { mysql) stop_all_services "mysql" $STD apt purge -y 'mysql*' >/dev/null 2>&1 || true - rm -rf /var/lib/mysql 2>/dev/null || true + # Keep data directory for safety (remove manually if needed) + # rm -rf /var/lib/mysql 2>/dev/null || true cleanup_tool_keyrings "mysql" ;; mongodb) stop_all_services "mongod" $STD apt purge -y 'mongodb*' >/dev/null 2>&1 || true - rm -rf /var/lib/mongodb 2>/dev/null || true + # Keep data directory for safety (remove manually if needed) + # rm -rf /var/lib/mongodb 2>/dev/null || true cleanup_tool_keyrings "mongodb" ;; node | nodejs) @@ -671,7 +705,8 @@ remove_old_tool_version() { clickhouse) stop_all_services "clickhouse-server" $STD apt purge -y 'clickhouse*' >/dev/null 2>&1 || true - rm -rf /var/lib/clickhouse 2>/dev/null || true + # Keep data directory for safety (remove manually if needed) + # rm -rf /var/lib/clickhouse 2>/dev/null || true cleanup_tool_keyrings "clickhouse" ;; esac @@ -695,8 +730,8 @@ should_update_tool() { # Get currently installed version current_version=$(is_tool_installed "$tool_name" 2>/dev/null) || return 0 # Not installed = needs install - # If versions are identical, no update needed - if [[ "$current_version" == "$target_version" ]]; then + # If versions match at the requested precision, no update needed + if version_matches_spec "$current_version" "$target_version"; then return 1 # No update needed fi @@ -891,6 +926,49 @@ Suites: $distro_codename Components: main Architectures: $(dpkg --print-architecture) Signed-By: /usr/share/keyrings/deb.sury.org-php.gpg +EOF + return 0 + ;; + + mysql) + if [[ -z "$gpg_key_url" ]]; then + msg_error "MySQL repository requires gpg_key_url" + return 65 + fi + + cleanup_old_repo_files "mysql" + + if ! download_gpg_key "$gpg_key_url" "/etc/apt/keyrings/mysql.gpg" "dearmor"; then + msg_error "Failed to import MySQL GPG key" + return 7 + fi + + local distro_codename suite component + distro_codename=$(get_os_info codename) + + if [[ "$distro_id" == "debian" ]]; then + case "$distro_codename" in + trixie | forky | sid) suite="bookworm" ;; + bookworm | bullseye) suite="$distro_codename" ;; + *) suite="bookworm" ;; + esac + else + suite=$(get_fallback_suite "$distro_id" "$distro_codename" "$repo_url") + fi + + case "$version" in + 8.4 | 8.4.*) component="mysql-8.4-lts" ;; + 8.0 | 8.0.*) component="mysql-8.0" ;; + *) component="mysql-${version}" ;; + esac + + cat </etc/apt/sources.list.d/mysql.sources +Types: deb +URIs: ${repo_url}/ +Suites: ${suite} +Components: ${component} +Architectures: $(dpkg --print-architecture) +Signed-By: /etc/apt/keyrings/mysql.gpg EOF return 0 ;; @@ -6432,7 +6510,7 @@ EOF fi # Scenario 1: Already installed at target version - just update packages - if [[ -n "$CURRENT_VERSION" && "$CURRENT_VERSION" == "$MARIADB_VERSION" ]]; then + if [[ -n "$CURRENT_VERSION" ]] && version_matches_spec "$CURRENT_VERSION" "$MARIADB_VERSION"; then msg_info "Update MariaDB $MARIADB_VERSION" # Ensure APT is working @@ -6464,7 +6542,7 @@ EOF fi # Scenario 2b: Different version installed - clean upgrade - if [[ -n "$CURRENT_VERSION" && "$CURRENT_VERSION" != "$MARIADB_VERSION" ]]; then + if [[ -n "$CURRENT_VERSION" ]] && ! version_matches_spec "$CURRENT_VERSION" "$MARIADB_VERSION"; then msg_info "Upgrade MariaDB from $CURRENT_VERSION to $MARIADB_VERSION" remove_old_tool_version "mariadb" fi @@ -7168,7 +7246,7 @@ setup_mysql() { # Scenario 2: Use official MySQL repository (USE_MYSQL_REPO=true) # Scenario 2a: Already at target version - just update packages - if [[ -n "$CURRENT_VERSION" && "$CURRENT_VERSION" == "$MYSQL_VERSION" ]]; then + if [[ -n "$CURRENT_VERSION" ]] && version_matches_spec "$CURRENT_VERSION" "$MYSQL_VERSION"; then msg_info "Update MySQL $MYSQL_VERSION" ensure_apt_working || return 100 @@ -7184,7 +7262,7 @@ setup_mysql() { fi # Scenario 2: Different version installed - clean upgrade - if [[ -n "$CURRENT_VERSION" && "$CURRENT_VERSION" != "$MYSQL_VERSION" ]]; then + if [[ -n "$CURRENT_VERSION" ]] && ! version_matches_spec "$CURRENT_VERSION" "$MYSQL_VERSION"; then msg_info "Upgrade MySQL from $CURRENT_VERSION to $MYSQL_VERSION" remove_old_tool_version "mysql" else From 6192225be70ee727345d4b1c36fbe1be2b6b32b1 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:10:13 +0000 Subject: [PATCH 31/98] Update CHANGELOG.md (#15275) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 412601e20..491546128 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -500,6 +500,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - tools.func: centralize Node.js corepack and npm handling in `setup_nodejs()` [@MickLesk](https://github.com/MickLesk) ([#15268](https://github.com/community-scripts/ProxmoxVE/pull/15268)) +### 💾 Core + + - #### 🐞 Bug Fixes + + - tools.func: runtime hardening for API helpers and Docker/MeiliSearch [@MickLesk](https://github.com/MickLesk) ([#15273](https://github.com/community-scripts/ProxmoxVE/pull/15273)) + ## 2026-06-20 ### 🆕 New Scripts From 8b877f1c9f2faf54d07e9be9ed63100a9684c2c8 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 21 Jun 2026 23:10:27 +0200 Subject: [PATCH 32/98] tools.func: APT install and deb822 repo reliability (#15272) Co-authored-by: Cursor --- misc/tools.func | 46 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index a7dd12c4f..a1aa4be30 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -283,7 +283,7 @@ get_cached_version() { cat "/var/cache/app-versions/${app}_version.txt" return 0 fi - return 0 + return 1 } # ------------------------------------------------------------------------------ @@ -494,10 +494,10 @@ install_packages_with_retry() { fi fi done - # If some packages installed, consider partial success if [[ ${#failed[@]} -lt ${#packages[@]} ]]; then if [[ ${#failed[@]} -gt 0 ]]; then - msg_warn "Partially installed. Failed packages: ${failed[*]}" + msg_error "Partial install — failed packages: ${failed[*]}" + return 100 fi return 0 fi @@ -1200,11 +1200,34 @@ get_system_arch() { # ------------------------------------------------------------------------------ # Create temporary directory with automatic cleanup +# Appends to a shared list so existing EXIT traps are preserved. # ------------------------------------------------------------------------------ +_tools_temp_dirs=() + +_tools_cleanup_temp_dirs() { + local d + for d in "${_tools_temp_dirs[@]}"; do + rm -rf "$d" 2>/dev/null || true + done +} + +_tools_register_temp_cleanup() { + [[ "${_TOOLS_TEMP_TRAP_SET:-}" == "1" ]] && return 0 + _TOOLS_TEMP_TRAP_SET=1 + local existing + existing=$(trap -p EXIT 2>/dev/null | sed -n "s/^trap -- '\\(.*\\)' EXIT/\1/p" || true) + if [[ -n "$existing" && "$existing" != "_tools_cleanup_temp_dirs" ]]; then + trap "_tools_cleanup_temp_dirs; ${existing}" EXIT ERR INT TERM + else + trap _tools_cleanup_temp_dirs EXIT ERR INT TERM + fi +} + create_temp_dir() { - local tmp_dir=$(mktemp -d) - # Set trap to cleanup on EXIT, ERR, INT, TERM - trap "rm -rf '$tmp_dir'" EXIT ERR INT TERM + local tmp_dir + tmp_dir=$(mktemp -d) || return 1 + _tools_temp_dirs+=("$tmp_dir") + _tools_register_temp_cleanup echo "$tmp_dir" } @@ -2127,9 +2150,11 @@ setup_deb822_repo() { [[ -n "$enabled" ]] && echo "Enabled: $enabled" } >/etc/apt/sources.list.d/${name}.sources - $STD apt update || { - msg_warn "apt update failed after adding repository: ${name}" - } + if ! $STD apt update; then + msg_error "apt update failed after adding repository: ${name}" + msg_error "Hint: Verify suite '${suite}' and URI '${repo_url}' are valid for this distribution." + return 100 + fi } # ------------------------------------------------------------------------------ @@ -8652,13 +8677,10 @@ setup_uv() { local UV_BIN="/usr/local/bin/uv" local UVX_BIN="/usr/local/bin/uvx" local TMP_DIR=$(mktemp -d) - local CACHED_VERSION # trap for TMP Cleanup trap "rm -rf '$TMP_DIR'" EXIT - CACHED_VERSION=$(get_cached_version "uv") - # Architecture Detection local ARCH=$(uname -m) local OS_TYPE="" From f7210f3a66e9a85cdb3bd566ad13ae403b9860e4 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:10:32 +0000 Subject: [PATCH 33/98] Update CHANGELOG.md (#15276) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 491546128..7859a828b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -504,6 +504,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - tools.func: prevent MySQL data loss and fix repo version matching [@MickLesk](https://github.com/MickLesk) ([#15271](https://github.com/community-scripts/ProxmoxVE/pull/15271)) - tools.func: runtime hardening for API helpers and Docker/MeiliSearch [@MickLesk](https://github.com/MickLesk) ([#15273](https://github.com/community-scripts/ProxmoxVE/pull/15273)) ## 2026-06-20 From 73c55bed9f3ab1d686cec09d1bd594e0a7735bbd Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:10:51 +0000 Subject: [PATCH 34/98] Update CHANGELOG.md (#15277) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7859a828b..4b41975b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -504,6 +504,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - tools.func: APT install and deb822 repo reliability [@MickLesk](https://github.com/MickLesk) ([#15272](https://github.com/community-scripts/ProxmoxVE/pull/15272)) - tools.func: prevent MySQL data loss and fix repo version matching [@MickLesk](https://github.com/MickLesk) ([#15271](https://github.com/community-scripts/ProxmoxVE/pull/15271)) - tools.func: runtime hardening for API helpers and Docker/MeiliSearch [@MickLesk](https://github.com/MickLesk) ([#15273](https://github.com/community-scripts/ProxmoxVE/pull/15273)) From 6345455031393677d655c905eee1680a4ee0535b Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Sun, 21 Jun 2026 23:11:31 +0200 Subject: [PATCH 35/98] Matomo: flatten nested deploy layout after update (#15267) Co-authored-by: Cursor --- ct/matomo.sh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/ct/matomo.sh b/ct/matomo.sh index e00eec688..c2407600f 100644 --- a/ct/matomo.sh +++ b/ct/matomo.sh @@ -43,6 +43,16 @@ function update_script() { CLEAN_INSTALL=1 fetch_and_deploy_gh_release "matomo" "matomo-org/matomo" "prebuild" "latest" "/opt/matomo" "matomo-*.zip" + msg_info "Setting up Matomo" + if [[ -d /opt/matomo/matomo ]]; then + rm -rf /opt/matomo/tmp "/opt/matomo/How to install Matomo.html" + find /opt/matomo/matomo -mindepth 1 -maxdepth 1 -exec mv -t /opt/matomo {} + + rm -rf /opt/matomo/matomo + fi + mkdir -p /opt/matomo/tmp + chmod -R 755 /opt/matomo/tmp + msg_ok "Set up Matomo" + msg_info "Restoring Data" if [[ -f /opt/matomo_config.bak ]]; then mkdir -p /opt/matomo/config @@ -58,7 +68,16 @@ function update_script() { chown -R www-data:www-data /opt/matomo msg_ok "Restored Data" + if [[ -f /opt/matomo/console ]]; then + msg_info "Running Matomo database upgrade" + cd /opt/matomo + $STD runuser -u www-data -- php console core:update --no-interaction + msg_ok "Ran Matomo database upgrade" + fi + msg_info "Starting Services" + PHP_VER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION;') + systemctl restart "php${PHP_VER}-fpm" systemctl start caddy msg_ok "Started Services" msg_ok "Updated successfully!" From cf2252f5487b15398e98e7abd66b02c1afb96f35 Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Mon, 22 Jun 2026 07:11:47 +1000 Subject: [PATCH 36/98] [arm64] Port scripts between qdrant & snipeit to support arm64 (#15274) --- ct/qdrant.sh | 2 +- ct/qui.sh | 4 ++-- ct/rabbitmq.sh | 2 +- ct/radarr.sh | 4 ++-- ct/rclone.sh | 4 ++-- ct/rdtclient.sh | 2 +- ct/readarr.sh | 2 +- ct/readeck.sh | 4 ++-- ct/recyclarr.sh | 4 ++-- ct/reitti.sh | 2 +- ct/rustdeskserver.sh | 10 +++++----- ct/sabnzbd.sh | 4 ++-- ct/scanopy.sh | 4 ++-- ct/scraparr.sh | 2 +- ct/seaweedfs.sh | 4 ++-- ct/seerr.sh | 2 +- ct/semaphore.sh | 4 ++-- ct/shelfmark.sh | 2 +- ct/shlink.sh | 2 +- ct/signoz.sh | 8 ++++---- ct/silverbullet.sh | 4 ++-- ct/slskd.sh | 4 ++-- install/qdrant-install.sh | 6 +++++- install/qui-install.sh | 2 +- install/radarr-install.sh | 4 ++-- install/rclone-install.sh | 2 +- install/readarr-install.sh | 4 ++-- install/readeck-install.sh | 2 +- install/recyclarr-install.sh | 4 ++-- install/romm-install.sh | 10 +++++++--- install/rustdeskserver-install.sh | 8 ++++---- install/sabnzbd-install.sh | 2 +- install/seaweedfs-install.sh | 2 +- install/semaphore-install.sh | 2 +- install/shelfmark-install.sh | 4 ++++ install/signoz-install.sh | 8 ++++---- install/silverbullet-install.sh | 2 +- install/slskd-install.sh | 6 +++++- 38 files changed, 82 insertions(+), 66 deletions(-) diff --git a/ct/qdrant.sh b/ct/qdrant.sh index d8d8e7510..9c28542f2 100644 --- a/ct/qdrant.sh +++ b/ct/qdrant.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/qui.sh b/ct/qui.sh index 43ab17c34..6857a73a0 100644 --- a/ct/qui.sh +++ b/ct/qui.sh @@ -12,7 +12,7 @@ var_cpu="${var_cpu:-1}" var_ram="${var_ram:-1024}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -33,7 +33,7 @@ function update_script() { systemctl stop qui msg_ok "Stopped Service" - fetch_and_deploy_gh_release "qui" "autobrr/qui" "prebuild" "latest" "/tmp/qui" "qui_*_linux_x86_64.tar.gz" + fetch_and_deploy_gh_release "qui" "autobrr/qui" "prebuild" "latest" "/tmp/qui" "qui_*_linux_$(arch_resolve "x86_64" "arm64").tar.gz" msg_info "Updating qui" mv /tmp/qui/qui /usr/local/bin/qui diff --git a/ct/rabbitmq.sh b/ct/rabbitmq.sh index 355efb7ab..d797034e4 100644 --- a/ct/rabbitmq.sh +++ b/ct/rabbitmq.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/radarr.sh b/ct/radarr.sh index aee60a2f5..2c3f9c1c3 100644 --- a/ct/radarr.sh +++ b/ct/radarr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -36,7 +36,7 @@ function update_script() { msg_ok "Stopped Service" rm -rf /opt/Radarr - fetch_and_deploy_gh_release "Radarr" "Radarr/Radarr" "prebuild" "latest" "/opt/Radarr" "Radarr.master*linux-core-x64.tar.gz" + fetch_and_deploy_gh_release "Radarr" "Radarr/Radarr" "prebuild" "latest" "/opt/Radarr" "Radarr.master*linux-core-$(arch_resolve "x64" "arm64").tar.gz" chmod 775 /opt/Radarr msg_info "Starting Service" diff --git a/ct/rclone.sh b/ct/rclone.sh index bef8873d6..6c791d258 100644 --- a/ct/rclone.sh +++ b/ct/rclone.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_fuse="${var_fuse:-yes}" @@ -34,7 +34,7 @@ function update_script() { systemctl stop rclone-web msg_ok "Stopped Service" - fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-amd64.zip" + fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-$(arch_resolve).zip" msg_info "Starting Service" systemctl start rclone-web diff --git a/ct/rdtclient.sh b/ct/rdtclient.sh index 1502c9256..14f3f657d 100755 --- a/ct/rdtclient.sh +++ b/ct/rdtclient.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/readarr.sh b/ct/readarr.sh index 23a3c06fa..889bd511c 100644 --- a/ct/readarr.sh +++ b/ct/readarr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/readeck.sh b/ct/readeck.sh index adc963e1a..e8c368760 100644 --- a/ct/readeck.sh +++ b/ct/readeck.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -33,7 +33,7 @@ function update_script() { systemctl stop readeck msg_ok "Stopped Service" - fetch_and_deploy_codeberg_release "readeck" "readeck/readeck" "singlefile" "latest" "/opt/readeck" "readeck-*-linux-amd64" + fetch_and_deploy_codeberg_release "readeck" "readeck/readeck" "singlefile" "latest" "/opt/readeck" "readeck-*-linux-$(arch_resolve)" msg_info "Starting Service" systemctl start readeck diff --git a/ct/recyclarr.sh b/ct/recyclarr.sh index 021ffdf1a..f2e95e4ef 100644 --- a/ct/recyclarr.sh +++ b/ct/recyclarr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -32,7 +32,7 @@ function update_script() { msg_info "Updating ${APP}" - fetch_and_deploy_gh_release "recyclarr" "recyclarr/recyclarr" "prebuild" "latest" "/usr/local/bin" "recyclarr-linux-x64.tar.xz" + fetch_and_deploy_gh_release "recyclarr" "recyclarr/recyclarr" "prebuild" "latest" "/usr/local/bin" "recyclarr-linux-$(arch_resolve "x64" "arm64").tar.xz" # Migrate includes from configs/ to includes/ (recyclarr v8) RECYCLARR_DIR="/root/.config/recyclarr" diff --git a/ct/reitti.sh b/ct/reitti.sh index c06e4789d..f160176d4 100644 --- a/ct/reitti.sh +++ b/ct/reitti.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-15}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/rustdeskserver.sh b/ct/rustdeskserver.sh index 529cb56a2..921ab1130 100644 --- a/ct/rustdeskserver.sh +++ b/ct/rustdeskserver.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -39,10 +39,10 @@ function update_script() { fi msg_info "Stopped Service" - fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb" - fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb" - fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb" - fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb" + fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*$(arch_resolve).deb" + fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*$(arch_resolve).deb" + fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*$(arch_resolve).deb" + fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*$(arch_resolve).deb" msg_info "Starting services" systemctl start -q rustdesk-* diff --git a/ct/sabnzbd.sh b/ct/sabnzbd.sh index 30b0cdcab..e5a6143d0 100644 --- a/ct/sabnzbd.sh +++ b/ct/sabnzbd.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -26,7 +26,7 @@ function update_script() { check_container_resources if par2 --version | grep -q "par2cmdline-turbo"; then - fetch_and_deploy_gh_release "par2cmdline-turbo" "animetosho/par2cmdline-turbo" "prebuild" "latest" "/usr/bin/" "*-linux-amd64.zip" + fetch_and_deploy_gh_release "par2cmdline-turbo" "animetosho/par2cmdline-turbo" "prebuild" "latest" "/usr/bin/" "*-linux-$(arch_resolve).zip" fi if [[ ! -d /opt/sabnzbd ]]; then diff --git a/ct/scanopy.sh b/ct/scanopy.sh index 7363953a9..e290dc367 100644 --- a/ct/scanopy.sh +++ b/ct/scanopy.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -70,7 +70,7 @@ function update_script() { msg_ok "Created frontend UI" if [[ -f /etc/systemd/system/scanopy-daemon.service ]]; then - fetch_and_deploy_gh_release "Scanopy Daemon" "scanopy/scanopy" "singlefile" "latest" "/usr/local/bin" "scanopy-daemon-linux-amd64" + fetch_and_deploy_gh_release "Scanopy Daemon" "scanopy/scanopy" "singlefile" "latest" "/usr/local/bin" "scanopy-daemon-linux-$(arch_resolve)" mv "/usr/local/bin/Scanopy Daemon" /usr/local/bin/scanopy-daemon rm -f /usr/bin/scanopy-daemon ~/configure_daemon.sh sed -i -e 's|usr/bin|usr/local/bin|' \ diff --git a/ct/scraparr.sh b/ct/scraparr.sh index 4dd1e11eb..2e87272dd 100644 --- a/ct/scraparr.sh +++ b/ct/scraparr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/seaweedfs.sh b/ct/seaweedfs.sh index a669e4994..94a14a57d 100644 --- a/ct/seaweedfs.sh +++ b/ct/seaweedfs.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-16}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_fuse="${var_fuse:-yes}" @@ -36,7 +36,7 @@ function update_script() { systemctl stop seaweedfs msg_ok "Stopped Service" - fetch_and_deploy_gh_release "seaweedfs" "seaweedfs/seaweedfs" "prebuild" "latest" "/opt/seaweedfs" "linux_amd64.tar.gz" + fetch_and_deploy_gh_release "seaweedfs" "seaweedfs/seaweedfs" "prebuild" "latest" "/opt/seaweedfs" "linux_$(arch_resolve).tar.gz" msg_info "Starting Service" systemctl start seaweedfs diff --git a/ct/seerr.sh b/ct/seerr.sh index 4ea49c8f8..9b43ec2cb 100644 --- a/ct/seerr.sh +++ b/ct/seerr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-12}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/semaphore.sh b/ct/semaphore.sh index 6013a8edf..e4adf7ef0 100644 --- a/ct/semaphore.sh +++ b/ct/semaphore.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-ubuntu}" var_version="${var_version:-24.04}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -55,7 +55,7 @@ function update_script() { systemctl stop semaphore msg_ok "Stopped Service" - fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary" "latest" "/opt/semaphore" "semaphore_*_linux_amd64.deb" + fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary" "latest" "/opt/semaphore" "semaphore_*_linux_$(arch_resolve).deb" if [[ -f /opt/semaphore/semaphore_db.bolt ]]; then $STD semaphore migrate --from-boltdb /opt/semaphore/semaphore_db.bolt --config /opt/semaphore/config.json diff --git a/ct/shelfmark.sh b/ct/shelfmark.sh index ab7e541bc..25ce77236 100644 --- a/ct/shelfmark.sh +++ b/ct/shelfmark.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/shlink.sh b/ct/shlink.sh index 1f6d1cf4c..0d6a210dd 100644 --- a/ct/shlink.sh +++ b/ct/shlink.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/signoz.sh b/ct/signoz.sh index cb7a48689..65690d7de 100644 --- a/ct/signoz.sh +++ b/ct/signoz.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -35,9 +35,9 @@ function update_script() { systemctl stop signoz-otel-collector msg_ok "Stopped Services" - fetch_and_deploy_gh_release "signoz" "SigNoz/signoz" "prebuild" "latest" "/opt/signoz" "signoz-community_linux_amd64.tar.gz" - fetch_and_deploy_gh_release "signoz-otel-collector" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-otel-collector" "signoz-otel-collector_linux_amd64.tar.gz" - fetch_and_deploy_gh_release "signoz-schema-migrator" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-schema-migrator" "signoz-schema-migrator_linux_amd64.tar.gz" + fetch_and_deploy_gh_release "signoz" "SigNoz/signoz" "prebuild" "latest" "/opt/signoz" "signoz-community_linux_$(arch_resolve).tar.gz" + fetch_and_deploy_gh_release "signoz-otel-collector" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-otel-collector" "signoz-otel-collector_linux_$(arch_resolve).tar.gz" + fetch_and_deploy_gh_release "signoz-schema-migrator" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-schema-migrator" "signoz-schema-migrator_linux_$(arch_resolve).tar.gz" msg_info "Updating SigNoz" cd /opt/signoz-schema-migrator/bin diff --git a/ct/silverbullet.sh b/ct/silverbullet.sh index af23e1bd8..58c1240c8 100644 --- a/ct/silverbullet.sh +++ b/ct/silverbullet.sh @@ -12,7 +12,7 @@ var_disk="${var_disk:-2}" var_ram="${var_ram:-512}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" header_info "${APP}" variables @@ -33,7 +33,7 @@ function update_script() { systemctl stop silverbullet msg_ok "Stopped Service" - fetch_and_deploy_gh_release "silverbullet" "silverbulletmd/silverbullet" "prebuild" "latest" "/opt/silverbullet/bin" "silverbullet-server-linux-x86_64.zip" + fetch_and_deploy_gh_release "silverbullet" "silverbulletmd/silverbullet" "prebuild" "latest" "/opt/silverbullet/bin" "silverbullet-server-linux-$(arch_resolve "x86_64" "aarch64").zip" msg_info "Starting Service" systemctl start silverbullet diff --git a/ct/slskd.sh b/ct/slskd.sh index 474ee1dd3..f3c34e412 100644 --- a/ct/slskd.sh +++ b/ct/slskd.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -40,7 +40,7 @@ function update_script() { cp /opt/slskd/config/slskd.yml /opt/slskd.yml.bak msg_ok "Backed up config" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Slskd" "slskd/slskd" "prebuild" "latest" "/opt/slskd" "slskd-*-linux-x64.zip" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Slskd" "slskd/slskd" "prebuild" "latest" "/opt/slskd" "slskd-*-linux-$(arch_resolve "x64" "arm64").zip" msg_info "Restoring config" mv /opt/slskd.yml.bak /opt/slskd/config/slskd.yml diff --git a/install/qdrant-install.sh b/install/qdrant-install.sh index ede3a9cea..16c0a0894 100644 --- a/install/qdrant-install.sh +++ b/install/qdrant-install.sh @@ -13,7 +13,11 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "qdrant" "qdrant/qdrant" "binary" "latest" "/usr/bin/qdrant" +if [[ "$(arch_resolve)" == "arm64" ]]; then + fetch_and_deploy_gh_release "qdrant" "qdrant/qdrant" "prebuild" "latest" "/usr/bin" "qdrant-aarch64-unknown-linux-musl.tar.gz" +else + fetch_and_deploy_gh_release "qdrant" "qdrant/qdrant" "binary" "latest" "/usr/bin/qdrant" +fi msg_info "Creating Qdrant Configuration" mkdir -p /etc/qdrant diff --git a/install/qui-install.sh b/install/qui-install.sh index 8e45ed000..7e0d2ca3c 100644 --- a/install/qui-install.sh +++ b/install/qui-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "qui" "autobrr/qui" "prebuild" "latest" "/usr/local/bin" "qui_*_linux_x86_64.tar.gz" +fetch_and_deploy_gh_release "qui" "autobrr/qui" "prebuild" "latest" "/usr/local/bin" "qui_*_linux_$(arch_resolve "x86_64" "arm64").tar.gz" chmod +x /usr/local/bin/qui ln -sf /usr/local/bin/qui /usr/bin/qui ln -sf /usr/local/bin/qui /opt/qui diff --git a/install/radarr-install.sh b/install/radarr-install.sh index e98eeb05f..d51f8ec03 100644 --- a/install/radarr-install.sh +++ b/install/radarr-install.sh @@ -14,10 +14,10 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt install -y sqlite3 +$STD apt install -y sqlite3 libicu-dev msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "Radarr" "Radarr/Radarr" "prebuild" "latest" "/opt/Radarr" "Radarr.master*linux-core-x64.tar.gz" +fetch_and_deploy_gh_release "Radarr" "Radarr/Radarr" "prebuild" "latest" "/opt/Radarr" "Radarr.master*linux-core-$(arch_resolve "x64" "arm64").tar.gz" msg_info "Configuring Radarr" mkdir -p /var/lib/radarr/ diff --git a/install/rclone-install.sh b/install/rclone-install.sh index 8087fe601..2ab54de3c 100644 --- a/install/rclone-install.sh +++ b/install/rclone-install.sh @@ -17,7 +17,7 @@ msg_info "Installing Dependencies" $STD apt install -y apache2-utils fuse3 msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-amd64.zip" +fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-$(arch_resolve).zip" msg_info "Installing rclone" cd /opt/rclone diff --git a/install/readarr-install.sh b/install/readarr-install.sh index 42f21ec76..882d0569b 100644 --- a/install/readarr-install.sh +++ b/install/readarr-install.sh @@ -14,14 +14,14 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt install -y sqlite3 +$STD apt install -y sqlite3 libicu-dev msg_ok "Installed Dependencies" msg_info "Installing Readarr" mkdir -p /var/lib/readarr/ chmod 775 /var/lib/readarr/ cd /var/lib/readarr/ -$STD curl -fsSL 'https://readarr.servarr.com/v1/update/develop/updatefile?os=linux&runtime=netcore&arch=x64' -o readarr.tar.gz +$STD curl -fsSL "https://readarr.servarr.com/v1/update/develop/updatefile?os=linux&runtime=netcore&arch=$(arch_resolve "x64" "arm64")" -o readarr.tar.gz $STD tar -xvzf readarr.tar.gz mv Readarr /opt chmod 775 /opt/Readarr diff --git a/install/readeck-install.sh b/install/readeck-install.sh index 5b6599bbd..d5fdb42f5 100644 --- a/install/readeck-install.sh +++ b/install/readeck-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_codeberg_release "readeck" "readeck/readeck" "singlefile" "latest" "/opt/readeck" "readeck-*-linux-amd64" +fetch_and_deploy_codeberg_release "readeck" "readeck/readeck" "singlefile" "latest" "/opt/readeck" "readeck-*-linux-$(arch_resolve)" msg_info "Creating Service" cat </etc/systemd/system/readeck.service diff --git a/install/recyclarr-install.sh b/install/recyclarr-install.sh index 299aca685..e523b38f6 100644 --- a/install/recyclarr-install.sh +++ b/install/recyclarr-install.sh @@ -14,10 +14,10 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt install -y git +$STD apt install -y git libicu-dev cron msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "recyclarr" "recyclarr/recyclarr" "prebuild" "latest" "/usr/local/bin" "recyclarr-linux-x64.tar.xz" +fetch_and_deploy_gh_release "recyclarr" "recyclarr/recyclarr" "prebuild" "latest" "/usr/local/bin" "recyclarr-linux-$(arch_resolve "x64" "arm64").tar.xz" msg_info "Configuring Recyclarr" mkdir -p /root/.config/recyclarr/{configs,includes} diff --git a/install/romm-install.sh b/install/romm-install.sh index 95f591f5d..fcf2a99a8 100644 --- a/install/romm-install.sh +++ b/install/romm-install.sh @@ -126,9 +126,13 @@ EOF chmod 644 /var/lib/romm/config/config.yml msg_ok "Created configuration file" -fetch_and_deploy_gh_release "RAHasher" "RetroAchievements/RALibretro" "prebuild" "latest" "/opt/RALibretro" "RAHasher-x64-Linux-*.zip" -cp /opt/RALibretro/RAHasher /usr/bin/RAHasher -chmod +x /usr/bin/RAHasher +if [[ "$(arch_resolve)" != "arm64" ]]; then + fetch_and_deploy_gh_release "RAHasher" "RetroAchievements/RALibretro" "prebuild" "latest" "/opt/RALibretro" "RAHasher-x64-Linux-*.zip" + cp /opt/RALibretro/RAHasher /usr/bin/RAHasher + chmod +x /usr/bin/RAHasher +else + msg_warn "RAHasher (RetroAchievements hashing) has no arm64 build; skipping. RA hash features will be unavailable." +fi fetch_and_deploy_gh_release "romm" "rommapp/romm" "tarball" diff --git a/install/rustdeskserver-install.sh b/install/rustdeskserver-install.sh index 273d9bc13..56b301cf6 100644 --- a/install/rustdeskserver-install.sh +++ b/install/rustdeskserver-install.sh @@ -13,10 +13,10 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb" -fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb" -fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb" -fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb" +fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*$(arch_resolve).deb" +fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*$(arch_resolve).deb" +fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*$(arch_resolve).deb" +fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*$(arch_resolve).deb" systemctl enable -q --now rustdesk-hbbr systemctl enable -q --now rustdesk-hbbs systemctl enable -q --now rustdesk-api diff --git a/install/sabnzbd-install.sh b/install/sabnzbd-install.sh index fd85b775e..4193ee0ec 100644 --- a/install/sabnzbd-install.sh +++ b/install/sabnzbd-install.sh @@ -43,7 +43,7 @@ msg_ok "Installed SABnzbd" read -r -p "Would you like to install par2cmdline-turbo? " prompt if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then mv /usr/bin/par2 /usr/bin/par2.old - fetch_and_deploy_gh_release "par2cmdline-turbo" "animetosho/par2cmdline-turbo" "prebuild" "latest" "/usr/bin/" "*-linux-amd64.zip" + fetch_and_deploy_gh_release "par2cmdline-turbo" "animetosho/par2cmdline-turbo" "prebuild" "latest" "/usr/bin/" "*-linux-$(arch_resolve).zip" fi msg_info "Creating Service" diff --git a/install/seaweedfs-install.sh b/install/seaweedfs-install.sh index 6d4aec60b..940a638d5 100644 --- a/install/seaweedfs-install.sh +++ b/install/seaweedfs-install.sh @@ -17,7 +17,7 @@ msg_info "Installing Dependencies" $STD apt install -y fuse3 msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "seaweedfs" "seaweedfs/seaweedfs" "prebuild" "latest" "/opt/seaweedfs" "linux_amd64.tar.gz" +fetch_and_deploy_gh_release "seaweedfs" "seaweedfs/seaweedfs" "prebuild" "latest" "/opt/seaweedfs" "linux_$(arch_resolve).tar.gz" msg_info "Setting up SeaweedFS" mkdir -p /opt/seaweedfs-data diff --git a/install/semaphore-install.sh b/install/semaphore-install.sh index 1cd334dcd..f86d61be5 100644 --- a/install/semaphore-install.sh +++ b/install/semaphore-install.sh @@ -19,7 +19,7 @@ $STD apt install -y \ ansible msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary" "latest" "/opt/semaphore" "semaphore_*_linux_amd64.deb" +fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary" "latest" "/opt/semaphore" "semaphore_*_linux_$(arch_resolve).deb" msg_info "Configuring Semaphore" mkdir -p /opt/semaphore diff --git a/install/shelfmark-install.sh b/install/shelfmark-install.sh index 22597eaf9..c477caca3 100644 --- a/install/shelfmark-install.sh +++ b/install/shelfmark-install.sh @@ -49,6 +49,10 @@ echo "" read -r -p "${TAB3}Select deployment type [1]: " DEPLOYMENT_TYPE DEPLOYMENT_TYPE="${DEPLOYMENT_TYPE:-1}" +if [[ "$(arch_resolve)" == "arm64" && "$DEPLOYMENT_TYPE" == "2" ]]; then + msg_warn "FlareSolverr has no arm64 build; using Shelfmark's internal bypasser instead" + DEPLOYMENT_TYPE="1" +fi case "$DEPLOYMENT_TYPE" in 1) diff --git a/install/signoz-install.sh b/install/signoz-install.sh index 6714b97b3..72cbf83a4 100644 --- a/install/signoz-install.sh +++ b/install/signoz-install.sh @@ -28,7 +28,7 @@ Types: deb URIs: https://packages.clickhouse.com/deb Suites: stable Components: main -Architectures: amd64 +Architectures: $(arch_resolve) Signed-By: /usr/share/keyrings/clickhouse-keyring.gpg EOF $STD apt update @@ -108,7 +108,7 @@ EOF systemctl enable -q --now clickhouse-server msg_ok "Configured ClickHouse" -fetch_and_deploy_gh_release "signoz-schema-migrator" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-schema-migrator" "signoz-schema-migrator_linux_amd64.tar.gz" +fetch_and_deploy_gh_release "signoz-schema-migrator" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-schema-migrator" "signoz-schema-migrator_linux_$(arch_resolve).tar.gz" msg_info "Running ClickHouse migrations" cd /opt/signoz-schema-migrator/bin @@ -116,7 +116,7 @@ $STD ./signoz-schema-migrator sync --dsn="tcp://localhost:9000?password=" --repl $STD ./signoz-schema-migrator async --dsn="tcp://localhost:9000?password=" --replication=true --up= msg_ok "ClickHouse Migrations Completed" -fetch_and_deploy_gh_release "signoz" "SigNoz/signoz" "prebuild" "latest" "/opt/signoz" "signoz-community_linux_amd64.tar.gz" +fetch_and_deploy_gh_release "signoz" "SigNoz/signoz" "prebuild" "latest" "/opt/signoz" "signoz-community_linux_$(arch_resolve).tar.gz" msg_info "Setting up SigNoz" mkdir -p /var/lib/signoz @@ -153,7 +153,7 @@ EOF systemctl enable -q --now signoz msg_ok "Setup Signoz" -fetch_and_deploy_gh_release "signoz-otel-collector" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-otel-collector" "signoz-otel-collector_linux_amd64.tar.gz" +fetch_and_deploy_gh_release "signoz-otel-collector" "SigNoz/signoz-otel-collector" "prebuild" "latest" "/opt/signoz-otel-collector" "signoz-otel-collector_linux_$(arch_resolve).tar.gz" msg_info "Setting up SigNoz OTel Collector" mkdir -p /var/lib/signoz-otel-collector diff --git a/install/silverbullet-install.sh b/install/silverbullet-install.sh index 9f28acc57..6e26d9ccd 100644 --- a/install/silverbullet-install.sh +++ b/install/silverbullet-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "silverbullet" "silverbulletmd/silverbullet" "prebuild" "latest" "/opt/silverbullet/bin" "silverbullet-server-linux-x86_64.zip" +fetch_and_deploy_gh_release "silverbullet" "silverbulletmd/silverbullet" "prebuild" "latest" "/opt/silverbullet/bin" "silverbullet-server-linux-$(arch_resolve "x86_64" "aarch64").zip" mkdir -p /opt/silverbullet/space msg_info "Creating Service" diff --git a/install/slskd-install.sh b/install/slskd-install.sh index 448839a71..5a49fb1d0 100644 --- a/install/slskd-install.sh +++ b/install/slskd-install.sh @@ -13,7 +13,11 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "Slskd" "slskd/slskd" "prebuild" "latest" "/opt/slskd" "slskd-*-linux-x64.zip" +msg_info "Installing Dependencies" +$STD apt install -y libicu-dev +msg_ok "Installed Dependencies" + +fetch_and_deploy_gh_release "Slskd" "slskd/slskd" "prebuild" "latest" "/opt/slskd" "slskd-*-linux-$(arch_resolve "x64" "arm64").zip" msg_info "Configuring Slskd" JWT_KEY=$(openssl rand -base64 44) From 92c22b40d7bb2e2aa245d315da4ac67566174e30 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:11:54 +0000 Subject: [PATCH 37/98] Update CHANGELOG.md (#15278) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b41975b1..e374acac9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -490,6 +490,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts + - #### 🐞 Bug Fixes + + - Matomo: flatten nested deploy layout after update [@MickLesk](https://github.com/MickLesk) ([#15267](https://github.com/community-scripts/ProxmoxVE/pull/15267)) + - #### ✨ New Features - [arm64] Port scripts between nodered & paperlessngx to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15255](https://github.com/community-scripts/ProxmoxVE/pull/15255)) From a3794d2eb69453ac090f786b5059eba03000a832 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:12:21 +0000 Subject: [PATCH 38/98] Update CHANGELOG.md (#15279) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e374acac9..42b8bb43f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -496,6 +496,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### ✨ New Features + - [arm64] Port scripts between qdrant & snipeit to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15274](https://github.com/community-scripts/ProxmoxVE/pull/15274)) - [arm64] Port scripts between nodered & paperlessngx to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15255](https://github.com/community-scripts/ProxmoxVE/pull/15255)) - [arm64] port scripts titled between papra and qbittorrent to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15258](https://github.com/community-scripts/ProxmoxVE/pull/15258)) - [arm64] Port scripts between mediamtx-nocodb to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15254](https://github.com/community-scripts/ProxmoxVE/pull/15254)) From 9996ed71ba50500b7156cfcf2ef519415d9e0187 Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Mon, 22 Jun 2026 19:41:14 +1000 Subject: [PATCH 39/98] [arm64] Port scripts between snowshare & thelounge to support arm64 (#15280) --- ct/solidtime.sh | 2 +- ct/sonarqube.sh | 2 +- ct/sonarr.sh | 2 +- ct/sonobarr.sh | 2 +- ct/soulsync.sh | 2 +- ct/sparkyfitness.sh | 2 +- ct/speedtest-tracker.sh | 2 +- ct/split-pro.sh | 2 +- ct/sportarr.sh | 2 +- ct/step-ca.sh | 2 +- ct/storybook.sh | 2 +- ct/storyteller.sh | 2 +- ct/strapi.sh | 2 +- ct/stylus.sh | 2 +- ct/sure.sh | 2 +- ct/tandoor.sh | 2 +- ct/tdarr.sh | 2 +- ct/teable.sh | 2 +- ct/technitiumdns.sh | 2 +- ct/teleport.sh | 2 +- ct/termix.sh | 2 +- install/sonarr-install.sh | 4 ++-- install/sportarr-install.sh | 5 +++-- install/step-ca-install.sh | 2 +- install/storyteller-install.sh | 2 +- install/stylus-install.sh | 2 +- install/tdarr-install.sh | 2 +- 27 files changed, 30 insertions(+), 29 deletions(-) diff --git a/ct/solidtime.sh b/ct/solidtime.sh index 98dddff80..e5675c178 100644 --- a/ct/solidtime.sh +++ b/ct/solidtime.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/sonarqube.sh b/ct/sonarqube.sh index 1519e9395..0f7331cff 100644 --- a/ct/sonarqube.sh +++ b/ct/sonarqube.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-6144}" var_disk="${var_disk:-25}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/sonarr.sh b/ct/sonarr.sh index 78f0f1bd2..31a6e0ff0 100644 --- a/ct/sonarr.sh +++ b/ct/sonarr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/sonobarr.sh b/ct/sonobarr.sh index 57d423993..7b80e1b79 100644 --- a/ct/sonobarr.sh +++ b/ct/sonobarr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/soulsync.sh b/ct/soulsync.sh index 0bd6c3c9f..6f016e56b 100644 --- a/ct/soulsync.sh +++ b/ct/soulsync.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/sparkyfitness.sh b/ct/sparkyfitness.sh index 5954b0bee..98694622b 100644 --- a/ct/sparkyfitness.sh +++ b/ct/sparkyfitness.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-7}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/speedtest-tracker.sh b/ct/speedtest-tracker.sh index aadbba0d6..4d5599063 100644 --- a/ct/speedtest-tracker.sh +++ b/ct/speedtest-tracker.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/split-pro.sh b/ct/split-pro.sh index 059b413fe..1496689c4 100644 --- a/ct/split-pro.sh +++ b/ct/split-pro.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-6}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" variables diff --git a/ct/sportarr.sh b/ct/sportarr.sh index ae0f6e095..99e18e662 100644 --- a/ct/sportarr.sh +++ b/ct/sportarr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/step-ca.sh b/ct/step-ca.sh index 83e0dca13..3f02b838f 100644 --- a/ct/step-ca.sh +++ b/ct/step-ca.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/storybook.sh b/ct/storybook.sh index 68e8e93d5..89ddede43 100644 --- a/ct/storybook.sh +++ b/ct/storybook.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/storyteller.sh b/ct/storyteller.sh index a4f31c5f3..81e30ce4a 100644 --- a/ct/storyteller.sh +++ b/ct/storyteller.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-10240}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/strapi.sh b/ct/strapi.sh index 041142658..6e6255af7 100755 --- a/ct/strapi.sh +++ b/ct/strapi.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/stylus.sh b/ct/stylus.sh index 69996de43..16f1cacd5 100644 --- a/ct/stylus.sh +++ b/ct/stylus.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_fuse="${var_fuse:-1}" diff --git a/ct/sure.sh b/ct/sure.sh index 77e743556..5f8448504 100644 --- a/ct/sure.sh +++ b/ct/sure.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-6}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/tandoor.sh b/ct/tandoor.sh index 575233035..b59803783 100644 --- a/ct/tandoor.sh +++ b/ct/tandoor.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/tdarr.sh b/ct/tdarr.sh index e7c9355c3..fdf2dec69 100644 --- a/ct/tdarr.sh +++ b/ct/tdarr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" diff --git a/ct/teable.sh b/ct/teable.sh index 5d8935f80..9588461fa 100644 --- a/ct/teable.sh +++ b/ct/teable.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-10240}" var_disk="${var_disk:-25}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/technitiumdns.sh b/ct/technitiumdns.sh index d155cb3b9..345ff9eb1 100644 --- a/ct/technitiumdns.sh +++ b/ct/technitiumdns.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/teleport.sh b/ct/teleport.sh index 086fb52aa..f32dbbcac 100644 --- a/ct/teleport.sh +++ b/ct/teleport.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/termix.sh b/ct/termix.sh index 4476c8d5a..8b3140b71 100644 --- a/ct/termix.sh +++ b/ct/termix.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/install/sonarr-install.sh b/install/sonarr-install.sh index 4962c2924..0f47fb19c 100644 --- a/install/sonarr-install.sh +++ b/install/sonarr-install.sh @@ -14,10 +14,10 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt install -y sqlite3 +$STD apt install -y sqlite3 libicu-dev msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "Sonarr" "Sonarr/Sonarr" "prebuild" "latest" "/opt/Sonarr" "Sonarr.main.*.linux-x64.tar.gz" +fetch_and_deploy_gh_release "Sonarr" "Sonarr/Sonarr" "prebuild" "latest" "/opt/Sonarr" "Sonarr.main.*.linux-$(arch_resolve "x64" "arm64").tar.gz" mkdir -p /var/lib/sonarr/ chmod 775 /var/lib/sonarr/ diff --git a/install/sportarr-install.sh b/install/sportarr-install.sh index b35968ca7..aedb4a7d1 100644 --- a/install/sportarr-install.sh +++ b/install/sportarr-install.sh @@ -18,10 +18,11 @@ msg_info "Installing Dependencies" $STD apt install -y \ ffmpeg \ gosu \ - sqlite3 + sqlite3 \ + libicu-dev msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "sportarr" "Sportarr/Sportarr" "prebuild" "latest" "/opt/sportarr" "Sportarr-linux-x64-*.tar.gz" +fetch_and_deploy_gh_release "sportarr" "Sportarr/Sportarr" "prebuild" "latest" "/opt/sportarr" "Sportarr-linux-$(arch_resolve "x64" "arm64")-*.tar.gz" msg_info "Creating Service" cat </opt/sportarr/.env diff --git a/install/step-ca-install.sh b/install/step-ca-install.sh index 2a13fadfe..f034a2b25 100644 --- a/install/step-ca-install.sh +++ b/install/step-ca-install.sh @@ -333,7 +333,7 @@ EOF $STD systemctl enable -q --now step-ca msg_ok "Started step-ca as a Daemon" -fetch_and_deploy_gh_release "step-badger" "lukasz-lobocki/step-badger" "prebuild" "latest" "/opt/step-badger" "step-badger_Linux_x86_64.tar.gz" +fetch_and_deploy_gh_release "step-badger" "lukasz-lobocki/step-badger" "prebuild" "latest" "/opt/step-badger" "step-badger_Linux_$(arch_resolve "x86_64" "arm64").tar.gz" ln -s /opt/step-badger/step-badger /usr/local/bin/step-badger motd_ssh diff --git a/install/storyteller-install.sh b/install/storyteller-install.sh index a3f71fe7d..3e23a1bdf 100644 --- a/install/storyteller-install.sh +++ b/install/storyteller-install.sh @@ -26,7 +26,7 @@ msg_ok "Installed Dependencies" NODE_VERSION="22" NODE_MODULE="corepack,yarn" setup_nodejs -fetch_and_deploy_gh_release "readium" "readium/cli" "prebuild" "latest" "/opt/readium" "readium_linux_x86_64.tar.gz" +fetch_and_deploy_gh_release "readium" "readium/cli" "prebuild" "latest" "/opt/readium" "readium_linux_$(arch_resolve "x86_64" "arm64").tar.gz" ln -sf /opt/readium/readium /usr/local/bin/readium fetch_and_deploy_gl_release "storyteller" "storyteller-platform/storyteller" "tarball" "latest" "/opt/storyteller" diff --git a/install/stylus-install.sh b/install/stylus-install.sh index 96086b403..81594675a 100644 --- a/install/stylus-install.sh +++ b/install/stylus-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "stylus" "mmastrac/stylus" "singlefile" "latest" "/usr/bin/" "*_linux_amd64" +fetch_and_deploy_gh_release "stylus" "mmastrac/stylus" "singlefile" "latest" "/usr/bin/" "*_linux_$(arch_resolve)" msg_info "Configuring Stylus" $STD stylus init /opt/stylus/ diff --git a/install/tdarr-install.sh b/install/tdarr-install.sh index 5cc28bfd8..9024e2002 100644 --- a/install/tdarr-install.sh +++ b/install/tdarr-install.sh @@ -20,7 +20,7 @@ msg_ok "Installed Dependencies" msg_info "Installing Tdarr" mkdir -p /opt/tdarr cd /opt/tdarr -RELEASE=$(curl_with_retry "https://f000.backblazeb2.com/file/tdarrs/versions.json" "-" | grep -oP '(?<="Tdarr_Updater": ")[^"]+' | grep linux_x64 | head -n 1) +RELEASE=$(curl_with_retry "https://f000.backblazeb2.com/file/tdarrs/versions.json" "-" | grep -oP '(?<="Tdarr_Updater": ")[^"]+' | grep "linux_$(arch_resolve "x64" "arm64")" | head -n 1) curl_with_retry "$RELEASE" "Tdarr_Updater.zip" $STD unzip Tdarr_Updater.zip chmod +x Tdarr_Updater From ca6eacdd92c2b86310aae976d6bb773cf91fdb68 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 09:41:42 +0000 Subject: [PATCH 40/98] Update CHANGELOG.md (#15285) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42b8bb43f..8bfe67d0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -486,6 +486,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-06-22 + +### 🚀 Updated Scripts + + - #### ✨ New Features + + - [arm64] Port scripts between snowshare & thelounge to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15280](https://github.com/community-scripts/ProxmoxVE/pull/15280)) + ## 2026-06-21 ### 🚀 Updated Scripts From c218deddd1f8d73189c3f97b16eb42b10a316d8d Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Mon, 22 Jun 2026 21:27:16 +1000 Subject: [PATCH 41/98] [arm64] Port scripts between thingsboard & wanderer to support arm64 (#15286) --- ct/thingsboard.sh | 2 +- ct/threadfin.sh | 2 +- ct/tianji.sh | 2 +- ct/tinyauth.sh | 2 +- ct/tolgee.sh | 2 +- ct/traccar.sh | 2 +- ct/tracearr.sh | 2 +- ct/traefik.sh | 2 +- ct/transmute.sh | 2 +- ct/trek.sh | 2 +- ct/trilium.sh | 2 +- ct/trip.sh | 2 +- ct/tubearchivist.sh | 2 +- ct/tunarr.sh | 2 +- ct/twenty.sh | 2 +- ct/uhf.sh | 2 +- ct/unbound.sh | 2 +- ct/unifi-os-server.sh | 2 +- ct/unmanic.sh | 2 +- ct/upgopher.sh | 2 +- ct/upsnap.sh | 2 +- ct/urbackupserver.sh | 2 +- ct/versitygw.sh | 2 +- ct/victoriametrics.sh | 2 +- ct/wallos.sh | 2 +- ct/wanderer.sh | 2 +- install/threadfin-install.sh | 2 +- install/tinyauth-install.sh | 2 +- install/traccar-install.sh | 2 +- install/traefik-install.sh | 2 +- install/transmute-install.sh | 6 +++--- install/trilium-install.sh | 2 +- install/tubearchivist-install.sh | 2 +- install/tunarr-install.sh | 4 ++-- install/uhf-install.sh | 4 ++-- install/unifi-os-server-install.sh | 5 +++-- install/unmanic-install.sh | 2 +- install/upgopher-install.sh | 2 +- install/upsnap-install.sh | 2 +- install/victoriametrics-install.sh | 10 +++++----- install/wallos-install.sh | 3 ++- install/wanderer-install.sh | 6 +++++- 42 files changed, 57 insertions(+), 51 deletions(-) diff --git a/ct/thingsboard.sh b/ct/thingsboard.sh index b0c3231f2..87f796480 100644 --- a/ct/thingsboard.sh +++ b/ct/thingsboard.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/threadfin.sh b/ct/threadfin.sh index 1945490b4..d027de51c 100644 --- a/ct/threadfin.sh +++ b/ct/threadfin.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" diff --git a/ct/tianji.sh b/ct/tianji.sh index 3bc530ff8..c1888724a 100644 --- a/ct/tianji.sh +++ b/ct/tianji.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-12}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/tinyauth.sh b/ct/tinyauth.sh index 6cb0bc656..60e3892c7 100644 --- a/ct/tinyauth.sh +++ b/ct/tinyauth.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/tolgee.sh b/ct/tolgee.sh index c5dd8b86f..fab3dc278 100644 --- a/ct/tolgee.sh +++ b/ct/tolgee.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/traccar.sh b/ct/traccar.sh index 1d482d8b5..24db56252 100644 --- a/ct/traccar.sh +++ b/ct/traccar.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/tracearr.sh b/ct/tracearr.sh index fa5a82620..47a98053b 100644 --- a/ct/tracearr.sh +++ b/ct/tracearr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-8192}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/traefik.sh b/ct/traefik.sh index 5f306f1b1..1c5f5cb96 100644 --- a/ct/traefik.sh +++ b/ct/traefik.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/transmute.sh b/ct/transmute.sh index 195bc70c7..694960303 100644 --- a/ct/transmute.sh +++ b/ct/transmute.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-16}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/trek.sh b/ct/trek.sh index 9d411730d..be958f75f 100644 --- a/ct/trek.sh +++ b/ct/trek.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/trilium.sh b/ct/trilium.sh index 750e662f8..334554d4c 100644 --- a/ct/trilium.sh +++ b/ct/trilium.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/trip.sh b/ct/trip.sh index 074f0702e..b77245aba 100644 --- a/ct/trip.sh +++ b/ct/trip.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/tubearchivist.sh b/ct/tubearchivist.sh index a087e7d27..9cb445b4a 100644 --- a/ct/tubearchivist.sh +++ b/ct/tubearchivist.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-6144}" var_disk="${var_disk:-30}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/tunarr.sh b/ct/tunarr.sh index cc5bd86f4..b29cd0abd 100644 --- a/ct/tunarr.sh +++ b/ct/tunarr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" diff --git a/ct/twenty.sh b/ct/twenty.sh index eac19594c..3bde6f746 100644 --- a/ct/twenty.sh +++ b/ct/twenty.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-10240}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/uhf.sh b/ct/uhf.sh index 515978849..f81bd45f4 100644 --- a/ct/uhf.sh +++ b/ct/uhf.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" var_gpu="${var_gpu:-yes}" diff --git a/ct/unbound.sh b/ct/unbound.sh index 7eb707b48..95c1a18bc 100644 --- a/ct/unbound.sh +++ b/ct/unbound.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/unifi-os-server.sh b/ct/unifi-os-server.sh index f53787308..cc35f23b1 100644 --- a/ct/unifi-os-server.sh +++ b/ct/unifi-os-server.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-20}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-0}" var_tun="${var_tun:-yes}" var_nesting="${var_nesting:-1}" diff --git a/ct/unmanic.sh b/ct/unmanic.sh index 361702007..8a96cb147 100644 --- a/ct/unmanic.sh +++ b/ct/unmanic.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-0}" var_gpu="${var_gpu:-yes}" diff --git a/ct/upgopher.sh b/ct/upgopher.sh index 90a5c97b1..9004f9049 100644 --- a/ct/upgopher.sh +++ b/ct/upgopher.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/upsnap.sh b/ct/upsnap.sh index 550772cbd..056eebbe6 100644 --- a/ct/upsnap.sh +++ b/ct/upsnap.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/urbackupserver.sh b/ct/urbackupserver.sh index 5d63dd6c2..fc6d0e53f 100644 --- a/ct/urbackupserver.sh +++ b/ct/urbackupserver.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-16}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-0}" header_info "$APP" diff --git a/ct/versitygw.sh b/ct/versitygw.sh index f041d2e79..9cc646d60 100644 --- a/ct/versitygw.sh +++ b/ct/versitygw.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/victoriametrics.sh b/ct/victoriametrics.sh index db3c53dcc..c81392bec 100644 --- a/ct/victoriametrics.sh +++ b/ct/victoriametrics.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-16}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/wallos.sh b/ct/wallos.sh index f28b5846a..b1b193ea3 100644 --- a/ct/wallos.sh +++ b/ct/wallos.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/wanderer.sh b/ct/wanderer.sh index 05e5e4f76..432963379 100644 --- a/ct/wanderer.sh +++ b/ct/wanderer.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/install/threadfin-install.sh b/install/threadfin-install.sh index 46fd7d5c4..e85a825df 100644 --- a/install/threadfin-install.sh +++ b/install/threadfin-install.sh @@ -20,7 +20,7 @@ $STD apt install -y \ vlc msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "threadfin-app" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64" +fetch_and_deploy_gh_release "threadfin-app" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_$(arch_resolve)" mv /opt/threadfin/threadfin-app /opt/threadfin/threadfin msg_info "Creating Service" diff --git a/install/tinyauth-install.sh b/install/tinyauth-install.sh index de5981e67..85db46eb7 100644 --- a/install/tinyauth-install.sh +++ b/install/tinyauth-install.sh @@ -19,7 +19,7 @@ $STD apt install -y \ apache2-utils msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "tinyauth" "steveiliop56/tinyauth" "singlefile" "latest" "/opt/tinyauth" "tinyauth-amd64" +fetch_and_deploy_gh_release "tinyauth" "steveiliop56/tinyauth" "singlefile" "latest" "/opt/tinyauth" "tinyauth-$(arch_resolve)" msg_info "Setting up Tinyauth" PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8) diff --git a/install/traccar-install.sh b/install/traccar-install.sh index c7db0f67e..7970a2e86 100644 --- a/install/traccar-install.sh +++ b/install/traccar-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "traccar" "traccar/traccar" "prebuild" "latest" "/opt/traccar" "traccar-linux-64*.zip" +fetch_and_deploy_gh_release "traccar" "traccar/traccar" "prebuild" "latest" "/opt/traccar" "traccar-linux-$(arch_resolve "64*" "arm-*").zip" msg_info "Configuring Traccar" cd /opt/traccar diff --git a/install/traefik-install.sh b/install/traefik-install.sh index 1b8699da2..950fb8b79 100644 --- a/install/traefik-install.sh +++ b/install/traefik-install.sh @@ -17,7 +17,7 @@ msg_info "Installing Dependencies" $STD apt install -y apt-transport-https msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_amd64.tar.gz" +fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_$(arch_resolve).tar.gz" mkdir -p /etc/traefik/{conf.d,ssl} msg_info "Creating Traefik configuration" diff --git a/install/transmute-install.sh b/install/transmute-install.sh index a3b83d72d..8546c0f0c 100644 --- a/install/transmute-install.sh +++ b/install/transmute-install.sh @@ -42,11 +42,11 @@ $STD apt install -y \ python3-cssselect msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "pandoc" "jgm/pandoc" "binary" "latest" "" "pandoc-*-amd64.deb" -fetch_and_deploy_gh_release "calibre" "kovidgoyal/calibre" "prebuild" "latest" "/opt/calibre" "calibre-*-x86_64.txz" +fetch_and_deploy_gh_release "pandoc" "jgm/pandoc" "binary" "latest" "" "pandoc-*-$(arch_resolve).deb" +fetch_and_deploy_gh_release "calibre" "kovidgoyal/calibre" "prebuild" "latest" "/opt/calibre" "calibre-*-$(arch_resolve "x86_64" "arm64").txz" ln -sf /opt/calibre/ebook-convert /usr/bin/ebook-convert ln -sf /usr/local/bin/ffmpeg /usr/bin/ffmpeg -fetch_and_deploy_gh_release "drawio" "jgraph/drawio-desktop" "binary" "latest" "" "drawio-amd64-*.deb" +fetch_and_deploy_gh_release "drawio" "jgraph/drawio-desktop" "binary" "latest" "" "drawio-$(arch_resolve)-*.deb" fetch_and_deploy_gh_release "transmute" "transmute-app/transmute" "tarball" msg_info "Setting up Python Backend" diff --git a/install/trilium-install.sh b/install/trilium-install.sh index 28f379a34..747e3e45a 100644 --- a/install/trilium-install.sh +++ b/install/trilium-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "Trilium" "TriliumNext/Trilium" "prebuild" "latest" "/opt/trilium" "TriliumNotes-Server-*linux-x64.tar.xz" +fetch_and_deploy_gh_release "Trilium" "TriliumNext/Trilium" "prebuild" "latest" "/opt/trilium" "TriliumNotes-Server-*linux-$(arch_resolve "x64" "arm64").tar.xz" msg_info "Creating Service" cat </etc/systemd/system/trilium.service diff --git a/install/tubearchivist-install.sh b/install/tubearchivist-install.sh index 8afe94377..bc69181af 100644 --- a/install/tubearchivist-install.sh +++ b/install/tubearchivist-install.sh @@ -31,7 +31,7 @@ msg_ok "Installed Dependencies" UV_PYTHON="3.13" setup_uv NODE_VERSION="24" setup_nodejs -fetch_and_deploy_gh_release "deno" "denoland/deno" "prebuild" "latest" "/usr/local/bin" "deno-x86_64-unknown-linux-gnu.zip" +fetch_and_deploy_gh_release "deno" "denoland/deno" "prebuild" "latest" "/usr/local/bin" "deno-$(arch_resolve "x86_64" "aarch64")-unknown-linux-gnu.zip" msg_info "Installing ElasticSearch" setup_deb822_repo \ diff --git a/install/tunarr-install.sh b/install/tunarr-install.sh index c3be63dd7..9af700d61 100644 --- a/install/tunarr-install.sh +++ b/install/tunarr-install.sh @@ -15,10 +15,10 @@ update_os setup_hwaccel -fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "prebuild" "latest" "/opt/tunarr" "*linux-x64.tar.gz" +fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "prebuild" "latest" "/opt/tunarr" "*linux-$(arch_resolve "x64" "arm64").tar.gz" cd /opt/tunarr mv tunarr* tunarr -fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz" +fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux$(arch_resolve "64" "arm64")-gpl-7.1.tar.xz" msg_info "Set ErsatzTV-ffmpeg links" chmod +x /opt/ErsatzTV-ffmpeg/bin/* diff --git a/install/uhf-install.sh b/install/uhf-install.sh index 3f66b1fec..7d9913e7b 100644 --- a/install/uhf-install.sh +++ b/install/uhf-install.sh @@ -31,8 +31,8 @@ LOG_LEVEL=INFO EOF msg_ok "Set Up UHF Server Environment" -fetch_and_deploy_gh_release "comskip" "swapplications/comskip" "prebuild" "latest" "/opt/comskip" "comskip-x64-*.zip" -fetch_and_deploy_gh_release "uhf-server" "swapplications/uhf-server-dist" "prebuild" "latest" "/opt/uhf-server" "UHF.Server-linux-x64-*.zip" +fetch_and_deploy_gh_release "comskip" "swapplications/comskip" "prebuild" "latest" "/opt/comskip" "comskip-$(arch_resolve "x64" "arm64")-*.zip" +fetch_and_deploy_gh_release "uhf-server" "swapplications/uhf-server-dist" "prebuild" "latest" "/opt/uhf-server" "UHF.Server-linux-$(arch_resolve "x64" "arm64")-*.zip" msg_info "Creating Service" cat </etc/systemd/system/uhf-server.service diff --git a/install/unifi-os-server-install.sh b/install/unifi-os-server-install.sh index 791c6c91d..842b03cd4 100644 --- a/install/unifi-os-server-install.sh +++ b/install/unifi-os-server-install.sh @@ -50,10 +50,11 @@ if ! curl -fsSL "$API_URL" -o "$TEMP_JSON"; then msg_error "Failed to fetch data from Ubiquiti API" exit 250 fi -LATEST=$(jq -r ' +PLATFORM="linux-$(arch_resolve "x64" "arm64")" +LATEST=$(jq -r --arg platform "$PLATFORM" ' ._embedded.firmware | map(select(.product == "unifi-os-server")) - | map(select(.platform == "linux-x64")) + | map(select(.platform == $platform)) | sort_by(.version_major, .version_minor, .version_patch) | last ' "$TEMP_JSON") diff --git a/install/unmanic-install.sh b/install/unmanic-install.sh index edee43e51..a66c50341 100644 --- a/install/unmanic-install.sh +++ b/install/unmanic-install.sh @@ -22,7 +22,7 @@ msg_ok "Installed Dependencies" setup_hwaccel msg_info "Installing Unmanic" -$STD pip3 install unmanic +$STD pip3 install --break-system-packages unmanic msg_ok "Installed Unmanic" msg_info "Creating Service" diff --git a/install/upgopher-install.sh b/install/upgopher-install.sh index 491be1c2c..c1b1938e1 100644 --- a/install/upgopher-install.sh +++ b/install/upgopher-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "upgopher" "wanetty/upgopher" "prebuild" "latest" "/opt/upgopher" "upgopher_*_linux_amd64.tar.gz" +fetch_and_deploy_gh_release "upgopher" "wanetty/upgopher" "prebuild" "latest" "/opt/upgopher" "upgopher_*_linux_$(arch_resolve).tar.gz" msg_info "Installing Upgopher" chmod +x /opt/upgopher/upgopher diff --git a/install/upsnap-install.sh b/install/upsnap-install.sh index ed9aefab3..4a8fde67e 100644 --- a/install/upsnap-install.sh +++ b/install/upsnap-install.sh @@ -23,7 +23,7 @@ $STD apt install -y \ sshpass msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "upsnap" "seriousm4x/UpSnap" "prebuild" "latest" "/opt/upsnap" "UpSnap_*_linux_amd64.zip" +fetch_and_deploy_gh_release "upsnap" "seriousm4x/UpSnap" "prebuild" "latest" "/opt/upsnap" "UpSnap_*_linux_$(arch_resolve).zip" setcap 'cap_net_raw=+ep' /opt/upsnap/upsnap msg_info "Creating Service" diff --git a/install/victoriametrics-install.sh b/install/victoriametrics-install.sh index 7d5b174d6..5d91d719c 100644 --- a/install/victoriametrics-install.sh +++ b/install/victoriametrics-install.sh @@ -16,10 +16,10 @@ update_os msg_info "Getting latest version of VictoriaMetrics" victoriametrics_release=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases" | - jq -r '.[] | select(.assets[].name | match("^victoria-metrics-linux-amd64-v[0-9.]+.tar.gz$")) | .tag_name' | + jq -r --arg a "$arch_resolve" '.[] | select(.assets[].name | match("^victoria-metrics-linux-" + $a + "-v[0-9.]+.tar.gz$")) | .tag_name' | head -n 1) -victoriametrics_filename="victoria-metrics-linux-amd64-${victoriametrics_release}.tar.gz" -vmutils_filename="vmutils-linux-amd64-${victoriametrics_release}.tar.gz" +victoriametrics_filename="victoria-metrics-linux-${arch_resolve}-${victoriametrics_release}.tar.gz" +vmutils_filename="vmutils-linux-${arch_resolve}-${victoriametrics_release}.tar.gz" msg_ok "Got version $victoriametrics_release of VictoriaMetrics" fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "$victoriametrics_release" "/opt/victoriametrics" "$victoriametrics_filename" @@ -30,10 +30,10 @@ read -r -p "${TAB3}Would you like to add VictoriaLogs? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then vmlogs_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" | jq -r '.assets[].name' | - grep -E '^victoria-logs-linux-amd64-v[0-9.]+\.tar\.gz$') + grep -E "^victoria-logs-linux-${arch_resolve}-v[0-9.]+\.tar\.gz$") vlutils_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" | jq -r '.assets[].name' | - grep -E '^vlutils-linux-amd64-v[0-9.]+\.tar\.gz$') + grep -E "^vlutils-linux-${arch_resolve}-v[0-9.]+\.tar\.gz$") fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "$vmlogs_filename" fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "$vlutils_filename" fi diff --git a/install/wallos-install.sh b/install/wallos-install.sh index a37a07938..982cf91c3 100644 --- a/install/wallos-install.sh +++ b/install/wallos-install.sh @@ -39,11 +39,12 @@ cat </etc/apache2/sites-available/wallos.conf EOF $STD a2ensite wallos.conf $STD a2dissite 000-default.conf -$STD systemctl reload apache2 +$STD systemctl restart apache2 $STD curl http://localhost/endpoints/db/migrate.php msg_ok "Installed Wallos" msg_info "Setting up Crontabs" +$STD apt-get install -y cron mkdir -p /var/log/cron cat </opt/wallos.cron 0 1 * * * php /opt/wallos/endpoints/cronjobs/updatenextpayment.php >> /var/log/cron/updatenextpayment.log 2>&1 diff --git a/install/wanderer-install.sh b/install/wanderer-install.sh index 71bab2676..3cebc9fef 100644 --- a/install/wanderer-install.sh +++ b/install/wanderer-install.sh @@ -15,7 +15,11 @@ update_os setup_go NODE_VERSION="22" setup_nodejs -fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary" "latest" "/opt/wanderer/source/search" +if [[ "$(arch_resolve)" == "arm64" ]]; then + fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "singlefile" "latest" "/usr/local/bin" "meilisearch-linux-aarch64" +else + fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary" "latest" "/opt/wanderer/source/search" +fi mkdir -p /opt/wanderer/{source,data/pb_data,data/meili_data} fetch_and_deploy_gh_release "wanderer" "open-wanderer/wanderer" "tarball" "latest" "/opt/wanderer/source" From 0783cefae2ef136c50ae9ff0f392277adcec23c3 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 11:27:41 +0000 Subject: [PATCH 42/98] Update CHANGELOG.md (#15287) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bfe67d0d..41f635901 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -492,6 +492,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### ✨ New Features + - [arm64] Port scripts between thingsboard & wanderer to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15286](https://github.com/community-scripts/ProxmoxVE/pull/15286)) - [arm64] Port scripts between snowshare & thelounge to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15280](https://github.com/community-scripts/ProxmoxVE/pull/15280)) ## 2026-06-21 From 6e82dc8bce1aa446462efc6221ddeffae4d8545b Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Mon, 22 Jun 2026 23:31:34 +1000 Subject: [PATCH 43/98] Fix type in victoriametrics (#15289) --- install/victoriametrics-install.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/install/victoriametrics-install.sh b/install/victoriametrics-install.sh index 5d91d719c..7adfe5e02 100644 --- a/install/victoriametrics-install.sh +++ b/install/victoriametrics-install.sh @@ -18,8 +18,8 @@ msg_info "Getting latest version of VictoriaMetrics" victoriametrics_release=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases" | jq -r --arg a "$arch_resolve" '.[] | select(.assets[].name | match("^victoria-metrics-linux-" + $a + "-v[0-9.]+.tar.gz$")) | .tag_name' | head -n 1) -victoriametrics_filename="victoria-metrics-linux-${arch_resolve}-${victoriametrics_release}.tar.gz" -vmutils_filename="vmutils-linux-${arch_resolve}-${victoriametrics_release}.tar.gz" +victoriametrics_filename="victoria-metrics-linux-$(arch_resolve)-${victoriametrics_release}.tar.gz" +vmutils_filename="vmutils-linux-$(arch_resolve)-${victoriametrics_release}.tar.gz" msg_ok "Got version $victoriametrics_release of VictoriaMetrics" fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "$victoriametrics_release" "/opt/victoriametrics" "$victoriametrics_filename" @@ -30,10 +30,10 @@ read -r -p "${TAB3}Would you like to add VictoriaLogs? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then vmlogs_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" | jq -r '.assets[].name' | - grep -E "^victoria-logs-linux-${arch_resolve}-v[0-9.]+\.tar\.gz$") + grep -E "^victoria-logs-linux-$(arch_resolve)-v[0-9.]+\.tar\.gz$") vlutils_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" | jq -r '.assets[].name' | - grep -E "^vlutils-linux-${arch_resolve}-v[0-9.]+\.tar\.gz$") + grep -E "^vlutils-linux-$(arch_resolve)-v[0-9.]+\.tar\.gz$") fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "$vmlogs_filename" fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "$vlutils_filename" fi From 826311c0d62f1198d1d4ab8f586373b6be567c42 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 13:32:07 +0000 Subject: [PATCH 44/98] Update CHANGELOG.md (#15295) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41f635901..f0973dc99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -490,6 +490,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 🚀 Updated Scripts + - #### 🐞 Bug Fixes + + - Fix typo in victoriametrics [@asylumexp](https://github.com/asylumexp) ([#15289](https://github.com/community-scripts/ProxmoxVE/pull/15289)) + - #### ✨ New Features - [arm64] Port scripts between thingsboard & wanderer to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15286](https://github.com/community-scripts/ProxmoxVE/pull/15286)) From 6545c0b731f5091ed49e0eae0428d5a445cf7e35 Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Mon, 22 Jun 2026 23:35:14 +1000 Subject: [PATCH 45/98] [arm64] fix update functions to support arm64 (#15290) oops forgot about a few update functions --- ct/agentdvr.sh | 6 +++--- ct/bitfocus-companion.sh | 7 +++++-- ct/configarr.sh | 2 +- ct/duplicati.sh | 2 +- ct/garage.sh | 2 +- ct/gitea.sh | 2 +- ct/github-runner.sh | 2 +- ct/glance.sh | 2 +- ct/go2rtc.sh | 2 +- ct/gogs.sh | 2 +- ct/gokapi.sh | 2 +- ct/gotify.sh | 4 ++-- ct/hev-socks5-server.sh | 2 +- ct/homarr.sh | 2 +- ct/homeassistant.sh | 2 +- ct/homebox.sh | 2 +- ct/hoodik.sh | 2 +- ct/igotify.sh | 2 +- ct/immich.sh | 6 +++--- ct/immichframe.sh | 2 +- ct/isponsorblocktv.sh | 4 ++-- ct/jackett.sh | 2 +- ct/jellyfin.sh | 4 ++-- ct/kavita.sh | 2 +- ct/patchmon.sh | 2 +- ct/pelican-wings.sh | 2 +- ct/photoprism.sh | 4 ++-- ct/pocketid.sh | 2 +- ct/prometheus-alertmanager.sh | 2 +- ct/prometheus-blackbox-exporter.sh | 2 +- ct/prometheus.sh | 2 +- ct/prowlarr.sh | 2 +- ct/pterodactyl-wings.sh | 2 +- ct/pulse.sh | 2 +- ct/qbittorrent.sh | 2 +- ct/sonarr.sh | 2 +- ct/sportarr.sh | 2 +- ct/step-ca.sh | 2 +- ct/stylus.sh | 2 +- ct/tdarr.sh | 2 +- ct/threadfin.sh | 2 +- ct/tinyauth.sh | 2 +- ct/traccar.sh | 2 +- ct/traefik.sh | 2 +- ct/transmute.sh | 6 +++--- ct/trilium.sh | 2 +- ct/tunarr.sh | 4 ++-- ct/uhf.sh | 4 ++-- ct/upgopher.sh | 2 +- ct/upsnap.sh | 2 +- ct/victoriametrics.sh | 10 +++++----- 51 files changed, 71 insertions(+), 68 deletions(-) diff --git a/ct/agentdvr.sh b/ct/agentdvr.sh index 7c0e486ee..73360ced2 100644 --- a/ct/agentdvr.sh +++ b/ct/agentdvr.sh @@ -30,7 +30,7 @@ function update_script() { exit fi - RELEASE=$(curl -fsSL "https://www.ispyconnect.com/api/Agent/DownloadLocation4?platform=Linux64&fromVersion=0" | grep -o 'https://.*\.zip') + RELEASE=$(curl -fsSL "https://www.ispyconnect.com/api/Agent/DownloadLocation4?platform=$(arch_resolve "Linux64" "LinuxARM64")&fromVersion=0" | grep -o 'https://.*\.zip') if [[ "${RELEASE}" != "$(cat ~/.agentdvr 2>/dev/null)" ]] || [[ ! -f ~/.agentdvr ]]; then msg_info "Stopping service" systemctl stop AgentDVR @@ -39,10 +39,10 @@ function update_script() { msg_info "Updating AgentDVR" cd /opt/agentdvr/agent curl -fsSL "$RELEASE" -o $(basename "$RELEASE") - $STD unzip -o Agent_Linux64*.zip + $STD unzip -o Agent_$(arch_resolve "Linux64" "LinuxARM64")*.zip chmod +x ./Agent echo $RELEASE >~/.agentdvr - rm -rf Agent_Linux64*.zip + rm -rf Agent_$(arch_resolve "Linux64" "LinuxARM64")*.zip msg_ok "Updated AgentDVR" msg_info "Starting service" diff --git a/ct/bitfocus-companion.sh b/ct/bitfocus-companion.sh index 368548da1..c6687383c 100644 --- a/ct/bitfocus-companion.sh +++ b/ct/bitfocus-companion.sh @@ -31,11 +31,14 @@ function update_script() { fi RELEASE_JSON=$(curl -fsSL "https://api.bitfocus.io/v1/product/companion/packages?limit=20") - PACKAGE_JSON=$(echo "$RELEASE_JSON" | jq -c '(if type == "array" then . else .packages end) | [.[] | select(.target=="linux-tgz" and (.uri | contains("linux-x64")))] | first') + PACKAGE_JSON=$(echo "$RELEASE_JSON" | jq -c \ + --arg target "linux-$(arch_resolve "tgz" "arm64-tgz")" \ + --arg arch "linux-$(arch_resolve "x64" "arm64")" \ + '(if type == "array" then . else .packages end) | [.[] | select(.target==$target and (.uri | contains($arch)))] | first') RELEASE=$(echo "$PACKAGE_JSON" | jq -r '.version // empty') ASSET_URL=$(echo "$PACKAGE_JSON" | jq -r '.uri // empty') if [[ -z "$RELEASE" || -z "$ASSET_URL" ]]; then - msg_error "Could not resolve a matching Linux x64 Companion package from the Bitfocus API." + msg_error "Could not resolve a matching Linux $(arch_resolve "x64" "arm64") Companion package from the Bitfocus API." exit 1 fi diff --git a/ct/configarr.sh b/ct/configarr.sh index 636e3d8a8..6590f3383 100644 --- a/ct/configarr.sh +++ b/ct/configarr.sh @@ -37,7 +37,7 @@ function update_script() { /opt/configarr/secrets.yml \ /opt/configarr/.env - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "configarr" "raydak-labs/configarr" "prebuild" "latest" "/opt/configarr" "configarr-linux-x64.tar.xz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "configarr" "raydak-labs/configarr" "prebuild" "latest" "/opt/configarr" "configarr-linux-$(arch_resolve "x64" "arm64").tar.xz" restore_backup diff --git a/ct/duplicati.sh b/ct/duplicati.sh index 5601f4da0..7770d1de5 100644 --- a/ct/duplicati.sh +++ b/ct/duplicati.sh @@ -34,7 +34,7 @@ function update_script() { systemctl stop duplicati msg_info "Stopped Service" - fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "duplicati-*-linux-x64-gui.deb" + fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "duplicati-*-linux-$(arch_resolve "x64" "arm64")-gui.deb" msg_info "Starting Service" systemctl start duplicati diff --git a/ct/garage.sh b/ct/garage.sh index b65bccc9a..ebca5a3b4 100644 --- a/ct/garage.sh +++ b/ct/garage.sh @@ -40,7 +40,7 @@ function update_script() { msg_ok "Backed Up Data" msg_info "Updating Garage" - curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage + curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl/garage" -o /usr/local/bin/garage chmod +x /usr/local/bin/garage echo "${GITEA_RELEASE}" >~/.garage msg_ok "Updated Garage" diff --git a/ct/gitea.sh b/ct/gitea.sh index 5bc3d35e2..f29289de8 100644 --- a/ct/gitea.sh +++ b/ct/gitea.sh @@ -35,7 +35,7 @@ function update_script() { msg_ok "Service stopped" rm -rf /usr/local/bin/gitea - fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-amd64" + fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-$(arch_resolve)" chmod +x /usr/local/bin/gitea msg_info "Starting service" diff --git a/ct/github-runner.sh b/ct/github-runner.sh index f2734fb4e..6bc0a36bc 100644 --- a/ct/github-runner.sh +++ b/ct/github-runner.sh @@ -46,7 +46,7 @@ function update_script() { done msg_ok "Backed up configuration" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "actions-runner" "actions/runner" "prebuild" "latest" "/opt/actions-runner" "actions-runner-linux-x64-*.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "actions-runner" "actions/runner" "prebuild" "latest" "/opt/actions-runner" "actions-runner-linux-$(arch_resolve "x64" "arm64")-*.tar.gz" msg_info "Restoring runner configuration" for f in .runner .credentials .credentials_rsaparams .env .path; do diff --git a/ct/glance.sh b/ct/glance.sh index e33a264b0..d98eaca00 100644 --- a/ct/glance.sh +++ b/ct/glance.sh @@ -43,7 +43,7 @@ function update_script() { systemctl stop glance msg_ok "Stopped Service" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "glance" "glanceapp/glance" "prebuild" "latest" "/opt/glance" "glance-linux-amd64.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "glance" "glanceapp/glance" "prebuild" "latest" "/opt/glance" "glance-linux-$(arch_resolve).tar.gz" msg_info "Starting Service" systemctl start glance diff --git a/ct/go2rtc.sh b/ct/go2rtc.sh index 55635befd..bee6a2479 100644 --- a/ct/go2rtc.sh +++ b/ct/go2rtc.sh @@ -35,7 +35,7 @@ function update_script() { systemctl stop go2rtc msg_ok "Stopped service" - fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_amd64" + fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_$(arch_resolve)" msg_info "Starting service" systemctl start go2rtc diff --git a/ct/gogs.sh b/ct/gogs.sh index f714e6d1d..d00561852 100644 --- a/ct/gogs.sh +++ b/ct/gogs.sh @@ -40,7 +40,7 @@ function update_script() { cp -r /opt/gogs/data /opt/gogs_data_backup msg_ok "Backed up Data" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gogs" "gogs/gogs" "prebuild" "latest" "/opt/gogs" "gogs_*_linux_amd64.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "gogs" "gogs/gogs" "prebuild" "latest" "/opt/gogs" "gogs_*_linux_$(arch_resolve).tar.gz" msg_info "Restoring Data" cp -r /opt/gogs_custom_backup/. /opt/gogs/custom diff --git a/ct/gokapi.sh b/ct/gokapi.sh index ee06611fe..8024187f7 100644 --- a/ct/gokapi.sh +++ b/ct/gokapi.sh @@ -33,7 +33,7 @@ function update_script() { systemctl stop gokapi msg_ok "Stopped Service" - fetch_and_deploy_gh_release "gokapi" "Forceu/Gokapi" "prebuild" "latest" "/opt/gokapi" "*linux*amd64.zip" + fetch_and_deploy_gh_release "gokapi" "Forceu/Gokapi" "prebuild" "latest" "/opt/gokapi" "*linux*$(arch_resolve).zip" # Migrate from pre-v2.2.4 binary name (gokapi-linux_amd64 -> gokapi) if [[ -f /opt/gokapi/gokapi-linux_amd64 ]]; then diff --git a/ct/gotify.sh b/ct/gotify.sh index c1c963bf9..0615a2342 100644 --- a/ct/gotify.sh +++ b/ct/gotify.sh @@ -33,8 +33,8 @@ function update_script() { systemctl stop gotify msg_ok "Stopped Service" - fetch_and_deploy_gh_release "gotify" "gotify/server" "prebuild" "latest" "/opt/gotify" "gotify-linux-amd64.zip" - chmod +x /opt/gotify/gotify-linux-amd64 + fetch_and_deploy_gh_release "gotify" "gotify/server" "prebuild" "latest" "/opt/gotify" "gotify-linux-$(arch_resolve).zip" + chmod +x /opt/gotify/gotify-linux-$(arch_resolve) msg_info "Starting Service" systemctl start gotify diff --git a/ct/hev-socks5-server.sh b/ct/hev-socks5-server.sh index 734b118ab..3b9ffe873 100644 --- a/ct/hev-socks5-server.sh +++ b/ct/hev-socks5-server.sh @@ -36,7 +36,7 @@ function update_script() { systemctl stop hev-socks5-server msg_ok "Stopped Service" - fetch_and_deploy_gh_release "hev-socks5-server" "heiher/hev-socks5-server" "singlefile" "latest" "/opt" "hev-socks5-server-linux-x86_64" + fetch_and_deploy_gh_release "hev-socks5-server" "heiher/hev-socks5-server" "singlefile" "latest" "/opt" "hev-socks5-server-linux-$(arch_resolve "x86_64" "arm64")" msg_info "Starting Service" systemctl start hev-socks5-server diff --git a/ct/homarr.sh b/ct/homarr.sh index df0eb342f..c288cab41 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -62,7 +62,7 @@ EOF NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]') setup_nodejs - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-debian-amd64.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr" "prebuild" "latest" "/opt/homarr" "build-debian-$(arch_resolve).tar.gz" msg_info "Updating Homarr" cp /opt/homarr/redis.conf /etc/redis/redis.conf diff --git a/ct/homeassistant.sh b/ct/homeassistant.sh index fd725f821..8bdc36d30 100644 --- a/ct/homeassistant.sh +++ b/ct/homeassistant.sh @@ -71,7 +71,7 @@ function update_script() { if [ "$UPD" == "4" ]; then msg_info "Installing FileBrowser" RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g') - $STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/v2.23.0/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin + $STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/v2.23.0/linux-$(arch_resolve)-filebrowser.tar.gz | tar -xzv -C /usr/local/bin $STD filebrowser config init -a '0.0.0.0' $STD filebrowser config set -a '0.0.0.0' $STD filebrowser users add admin community-scripts.org --perm.admin diff --git a/ct/homebox.sh b/ct/homebox.sh index 3ebb6ea64..3d956ee8d 100644 --- a/ct/homebox.sh +++ b/ct/homebox.sh @@ -39,7 +39,7 @@ function update_script() { systemctl stop homebox msg_ok "Stopped Service" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_x86_64.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_$(arch_resolve "x86_64" "arm64").tar.gz" chmod +x /opt/homebox/homebox [ -f /opt/.env ] && mv /opt/.env /opt/homebox/.env [ -d /opt/.data ] && mv /opt/.data /opt/homebox/.data diff --git a/ct/hoodik.sh b/ct/hoodik.sh index 65f50fbbc..c81e3f32f 100644 --- a/ct/hoodik.sh +++ b/ct/hoodik.sh @@ -40,7 +40,7 @@ function update_script() { cp /opt/hoodik/.env /opt/hoodik.env.bak msg_ok "Backed up Configuration" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "hoodik" "hudikhq/hoodik" "prebuild" "latest" "/opt/hoodik" "*x86_64.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "hoodik" "hudikhq/hoodik" "prebuild" "latest" "/opt/hoodik" "*$(arch_resolve "x86_64" "arm64").tar.gz" msg_info "Restoring Configuration" cp /opt/hoodik.env.bak /opt/hoodik/.env diff --git a/ct/igotify.sh b/ct/igotify.sh index 5f73f384a..aad49d7fe 100644 --- a/ct/igotify.sh +++ b/ct/igotify.sh @@ -39,7 +39,7 @@ function update_script() { cp /opt/igotify/.env /opt/igotify.env.bak msg_ok "Backed up Configuration" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "igotify" "androidseb25/iGotify-Notification-Assistent" "prebuild" "latest" "/opt/igotify" "iGotify-Notification-Service-amd64-v*.zip" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "igotify" "androidseb25/iGotify-Notification-Assistent" "prebuild" "latest" "/opt/igotify" "iGotify-Notification-Service-$(arch_resolve)-v*.zip" msg_info "Restoring Configuration" cp /opt/igotify.env.bak /opt/igotify/.env diff --git a/ct/immich.sh b/ct/immich.sh index 53d1d9699..e97231997 100644 --- a/ct/immich.sh +++ b/ct/immich.sh @@ -67,7 +67,7 @@ EOF if [[ ! -f /etc/apt/sources.list.d/mise.list ]]; then msg_info "Installing Mise" curl -fSs https://mise.jdx.dev/gpg-key.pub | tee /etc/apt/keyrings/mise-archive-keyring.pub 1>/dev/null - echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=amd64] https://mise.jdx.dev/deb stable main" >/etc/apt/sources.list.d/mise.list + echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.pub arch=$(arch_resolve)] https://mise.jdx.dev/deb stable main" >/etc/apt/sources.list.d/mise.list ensure_dependencies mise msg_ok "Installed Mise" fi @@ -127,7 +127,7 @@ EOF VCHORD_RELEASE="0.5.3" [[ -f ~/.vchord_version ]] && mv ~/.vchord_version ~/.vectorchord if check_for_gh_release "VectorChord" "tensorchord/VectorChord" "${VCHORD_RELEASE}" "updated together with Immich after testing"; then - fetch_and_deploy_gh_release "VectorChord" "tensorchord/VectorChord" "binary" "${VCHORD_RELEASE}" "/tmp" "postgresql-16-vchord_*_amd64.deb" + fetch_and_deploy_gh_release "VectorChord" "tensorchord/VectorChord" "binary" "${VCHORD_RELEASE}" "/tmp" "postgresql-16-vchord_*_$(arch_resolve).deb" systemctl restart postgresql $STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vector UPDATE;" $STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;" @@ -240,7 +240,7 @@ EOF $STD sudo --preserve-env=VIRTUAL_ENV,UV_HTTP_TIMEOUT -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p "${ML_PYTHON}" --managed-python && break [[ $attempt -lt 3 ]] && msg_warn "uv sync attempt $attempt failed, retrying..." && sleep 10 done - patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.13/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-313-x86_64-linux-gnu.so" + patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.13/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-313-$(arch_resolve "x86_64" "aarch64")-linux-gnu.so" msg_ok "Updated Intel OpenVINO machine-learning" else ML_PYTHON="python3.11" diff --git a/ct/immichframe.sh b/ct/immichframe.sh index e0ee17aad..3abf19051 100644 --- a/ct/immichframe.sh +++ b/ct/immichframe.sh @@ -45,7 +45,7 @@ function update_script() { cd /tmp/immichframe $STD dotnet publish ImmichFrame.WebApi/ImmichFrame.WebApi.csproj \ --configuration Release \ - --runtime linux-x64 \ + --runtime "$(arch_resolve "linux-x64" "linux-arm64")" \ --self-contained false \ --output /opt/immichframe diff --git a/ct/isponsorblocktv.sh b/ct/isponsorblocktv.sh index 43de41c19..f1ebc374b 100644 --- a/ct/isponsorblocktv.sh +++ b/ct/isponsorblocktv.sh @@ -36,9 +36,9 @@ function update_script() { systemctl stop isponsorblocktv msg_ok "Stopped Service" - ISBTV_BINARY="iSponsorBlockTV-x86_64-linux-v1" + ISBTV_BINARY="iSponsorBlockTV-$(arch_resolve "x86_64-linux-v1" "aarch64-linux")" if grep -q ' avx ' /proc/cpuinfo 2>/dev/null && grep -q ' avx2 ' /proc/cpuinfo 2>/dev/null && grep -q ' movbe ' /proc/cpuinfo 2>/dev/null; then - ISBTV_BINARY="iSponsorBlockTV-x86_64-linux" + ISBTV_BINARY="iSponsorBlockTV-$(arch_resolve "x86_64" "aarch64")-linux" fi CLEAN_INSTALL=1 fetch_and_deploy_gh_release "isponsorblocktv" "dmunozv04/iSponsorBlockTV" "singlefile" "latest" "/opt/isponsorblocktv" "${ISBTV_BINARY}" diff --git a/ct/jackett.sh b/ct/jackett.sh index 1d414e662..f08ba37ea 100644 --- a/ct/jackett.sh +++ b/ct/jackett.sh @@ -41,7 +41,7 @@ EOF systemctl stop jackett msg_ok "Stopped Service" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.LinuxAMDx64.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.Linux$(arch_resolve "AMDx64" "ARM64").tar.gz" msg_info "Starting Service" systemctl start jackett diff --git a/ct/jellyfin.sh b/ct/jellyfin.sh index ab8f33b23..f497d916e 100644 --- a/ct/jellyfin.sh +++ b/ct/jellyfin.sh @@ -30,7 +30,7 @@ function update_script() { exit fi - if ! grep -qEi 'ubuntu' /etc/os-release; then + if ! grep -qEi 'ubuntu' /etc/os-release && [[ "$(arch_resolve)" == "amd64" ]]; then msg_info "Updating Intel Dependencies" rm -f ~/.intel-* || true @@ -57,7 +57,7 @@ function update_script() { msg_info "Updating Jellyfin" ensure_dependencies libjemalloc2 if [[ ! -f /usr/lib/libjemalloc.so ]]; then - ln -sf /usr/lib/x86_64-linux-gnu/libjemalloc.so.2 /usr/lib/libjemalloc.so + ln -sf "/usr/lib/$(arch_resolve "x86_64-linux-gnu" "aarch64-linux-gnu")/libjemalloc.so.2" /usr/lib/libjemalloc.so fi $STD apt -y upgrade $STD apt -y --with-new-pkgs upgrade jellyfin jellyfin-server jellyfin-ffmpeg7 diff --git a/ct/kavita.sh b/ct/kavita.sh index e69855cb0..f12acf119 100644 --- a/ct/kavita.sh +++ b/ct/kavita.sh @@ -34,7 +34,7 @@ function update_script() { systemctl stop kavita msg_ok "Service Stopped" - fetch_and_deploy_gh_release "kavita" "Kareadita/Kavita" "prebuild" "latest" "/opt/Kavita" "kavita-linux-x64.tar.gz" + fetch_and_deploy_gh_release "kavita" "Kareadita/Kavita" "prebuild" "latest" "/opt/Kavita" "kavita-linux-$(arch_resolve "x64" "arm64").tar.gz" chmod +x /opt/Kavita/Kavita && chown root:root /opt/Kavita/Kavita msg_info "Starting Service" diff --git a/ct/patchmon.sh b/ct/patchmon.sh index 81523244e..9414c5a73 100644 --- a/ct/patchmon.sh +++ b/ct/patchmon.sh @@ -73,7 +73,7 @@ function update_script() { msg_ok "Migration complete!" fi - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "singlefile" "latest" "/opt/patchmon" "patchmon-server-linux-amd64" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "singlefile" "latest" "/opt/patchmon" "patchmon-server-linux-$(arch_resolve)" mv /opt/patchmon/PatchMon /opt/patchmon/patchmon-server msg_info "Fetching PatchMon agent binaries" diff --git a/ct/pelican-wings.sh b/ct/pelican-wings.sh index 8b96d8a67..b8a8666a1 100644 --- a/ct/pelican-wings.sh +++ b/ct/pelican-wings.sh @@ -34,7 +34,7 @@ function update_script() { systemctl stop wings msg_ok "Stopped Service" - fetch_and_deploy_gh_release "wings" "pelican-dev/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64" + fetch_and_deploy_gh_release "wings" "pelican-dev/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_$(arch_resolve)" msg_info "Starting Service" systemctl start wings diff --git a/ct/photoprism.sh b/ct/photoprism.sh index 1c1b3740e..7e8d15e46 100644 --- a/ct/photoprism.sh +++ b/ct/photoprism.sh @@ -43,9 +43,9 @@ function update_script() { msg_ok "Added environment export" fi - fetch_and_deploy_gh_release "photoprism" "photoprism/photoprism" "prebuild" "latest" "/opt/photoprism" "*linux-amd64.tar.gz" + fetch_and_deploy_gh_release "photoprism" "photoprism/photoprism" "prebuild" "latest" "/opt/photoprism" "*linux-$(arch_resolve).tar.gz" - LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-bookworm-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1) + LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-bookworm-$(arch_resolve)-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1) if [[ "${LIBHEIF_URL}" != "$(cat ~/.photoprism_libheif 2>/dev/null)" ]] || [[ ! -f ~/.photoprism_libheif ]]; then msg_info "Updating PhotoPrism LibHeif" ensure_dependencies libvips42 diff --git a/ct/pocketid.sh b/ct/pocketid.sh index a1c818e9c..6153b40c0 100755 --- a/ct/pocketid.sh +++ b/ct/pocketid.sh @@ -71,7 +71,7 @@ function update_script() { cp /opt/pocket-id/.env /opt/env fi - fetch_and_deploy_gh_release "pocket-id" "pocket-id/pocket-id" "singlefile" "latest" "/opt/pocket-id/" "pocket-id-linux-amd64" + fetch_and_deploy_gh_release "pocket-id" "pocket-id/pocket-id" "singlefile" "latest" "/opt/pocket-id/" "pocket-id-linux-$(arch_resolve)" mv /opt/env /opt/pocket-id/.env msg_info "Starting Service" diff --git a/ct/prometheus-alertmanager.sh b/ct/prometheus-alertmanager.sh index b7456a833..2f006a424 100755 --- a/ct/prometheus-alertmanager.sh +++ b/ct/prometheus-alertmanager.sh @@ -33,7 +33,7 @@ function update_script() { systemctl stop prometheus-alertmanager msg_ok "Stopped Service" - fetch_and_deploy_gh_release "alertmanager" "prometheus/alertmanager" "prebuild" "latest" "/usr/local/bin/" "alertmanager*linux-amd64.tar.gz" + fetch_and_deploy_gh_release "alertmanager" "prometheus/alertmanager" "prebuild" "latest" "/usr/local/bin/" "alertmanager*linux-$(arch_resolve).tar.gz" msg_info "Starting Service" systemctl start prometheus-alertmanager diff --git a/ct/prometheus-blackbox-exporter.sh b/ct/prometheus-blackbox-exporter.sh index a2a9e8924..0f7072314 100644 --- a/ct/prometheus-blackbox-exporter.sh +++ b/ct/prometheus-blackbox-exporter.sh @@ -38,7 +38,7 @@ function update_script() { mv /opt/blackbox-exporter/blackbox.yml /opt msg_ok "Backup created" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "blackbox-exporter" "prometheus/blackbox_exporter" "prebuild" "latest" "/opt/blackbox-exporter" "blackbox_exporter-*.linux-amd64.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "blackbox-exporter" "prometheus/blackbox_exporter" "prebuild" "latest" "/opt/blackbox-exporter" "blackbox_exporter-*.linux-$(arch_resolve).tar.gz" msg_info "Restoring backup" cp -r /opt/blackbox.yml /opt/blackbox-exporter diff --git a/ct/prometheus.sh b/ct/prometheus.sh index 3b10fdb43..d6507ba29 100644 --- a/ct/prometheus.sh +++ b/ct/prometheus.sh @@ -33,7 +33,7 @@ function update_script() { systemctl stop prometheus msg_ok "Stopped Service" - fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-amd64.tar.gz" + fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-$(arch_resolve).tar.gz" rm -f /usr/local/bin/prometheus.yml msg_info "Starting Service" diff --git a/ct/prowlarr.sh b/ct/prowlarr.sh index e3c5e6ce2..548e3e834 100644 --- a/ct/prowlarr.sh +++ b/ct/prowlarr.sh @@ -34,7 +34,7 @@ function update_script() { msg_ok "Stopped Service" rm -rf /opt/Prowlarr - fetch_and_deploy_gh_release "prowlarr" "Prowlarr/Prowlarr" "prebuild" "latest" "/opt/Prowlarr" "Prowlarr.master*linux-core-x64.tar.gz" + fetch_and_deploy_gh_release "prowlarr" "Prowlarr/Prowlarr" "prebuild" "latest" "/opt/Prowlarr" "Prowlarr.master*linux-core-$(arch_resolve "x64" "arm64").tar.gz" chmod 775 /opt/Prowlarr msg_info "Starting Service" diff --git a/ct/pterodactyl-wings.sh b/ct/pterodactyl-wings.sh index b59912be2..92e5be251 100644 --- a/ct/pterodactyl-wings.sh +++ b/ct/pterodactyl-wings.sh @@ -35,7 +35,7 @@ function update_script() { msg_ok "Stopped Service" rm /usr/local/bin/wings - fetch_and_deploy_gh_release "wings" "pterodactyl/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64" + fetch_and_deploy_gh_release "wings" "pterodactyl/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_$(arch_resolve)" msg_info "Starting Service" systemctl start wings diff --git a/ct/pulse.sh b/ct/pulse.sh index ecf7eef73..fe0235fd4 100644 --- a/ct/pulse.sh +++ b/ct/pulse.sh @@ -39,7 +39,7 @@ function update_script() { rm -f /opt/pulse/pulse fi - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "pulse" "rcourtman/Pulse" "prebuild" "latest" "/opt/pulse" "pulse-v*-linux-amd64.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "pulse" "rcourtman/Pulse" "prebuild" "latest" "/opt/pulse" "pulse-v*-linux-$(arch_resolve).tar.gz" ln -sf /opt/pulse/bin/pulse /usr/local/bin/pulse mkdir -p /etc/pulse chown pulse:pulse /etc/pulse diff --git a/ct/qbittorrent.sh b/ct/qbittorrent.sh index a3f581179..9ffb5260d 100644 --- a/ct/qbittorrent.sh +++ b/ct/qbittorrent.sh @@ -38,7 +38,7 @@ function update_script() { msg_ok "Stopped Service" rm -f /opt/qbittorrent/qbittorrent-nox - fetch_and_deploy_gh_release "qbittorrent" "userdocs/qbittorrent-nox-static" "singlefile" "latest" "/opt/qbittorrent" "x86_64-qbittorrent-nox" + fetch_and_deploy_gh_release "qbittorrent" "userdocs/qbittorrent-nox-static" "singlefile" "latest" "/opt/qbittorrent" "$(arch_resolve "x86_64" "aarch64")-qbittorrent-nox" mv /opt/qbittorrent/qbittorrent /opt/qbittorrent/qbittorrent-nox msg_info "Starting Service" diff --git a/ct/sonarr.sh b/ct/sonarr.sh index 31a6e0ff0..bf45b463e 100644 --- a/ct/sonarr.sh +++ b/ct/sonarr.sh @@ -35,7 +35,7 @@ function update_script() { systemctl stop sonarr msg_ok "Stopped Service" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Sonarr" "Sonarr/Sonarr" "prebuild" "latest" "/opt/Sonarr" "Sonarr.main.*.linux-x64.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Sonarr" "Sonarr/Sonarr" "prebuild" "latest" "/opt/Sonarr" "Sonarr.main.*.linux-$(arch_resolve "x64" "arm64").tar.gz" msg_info "Starting Service" systemctl start sonarr diff --git a/ct/sportarr.sh b/ct/sportarr.sh index 99e18e662..126adac86 100644 --- a/ct/sportarr.sh +++ b/ct/sportarr.sh @@ -34,7 +34,7 @@ function update_script() { systemctl stop sportarr msg_ok "Stopped Services" - fetch_and_deploy_gh_release "sportarr" "Sportarr/Sportarr" "prebuild" "latest" "/opt/sportarr" "Sportarr-linux-x64-*.tar.gz" + fetch_and_deploy_gh_release "sportarr" "Sportarr/Sportarr" "prebuild" "latest" "/opt/sportarr" "Sportarr-linux-$(arch_resolve "x64" "arm64")-*.tar.gz" msg_info "Starting Services" systemctl start sportarr diff --git a/ct/step-ca.sh b/ct/step-ca.sh index 3f02b838f..3c0eef66e 100644 --- a/ct/step-ca.sh +++ b/ct/step-ca.sh @@ -57,7 +57,7 @@ function update_script() { msg_ok "Updated step-ca and step-cli" if check_for_gh_release "step-badger" "lukasz-lobocki/step-badger"; then - fetch_and_deploy_gh_release "step-badger" "lukasz-lobocki/step-badger" "prebuild" "latest" "/opt/step-badger" "step-badger_Linux_x86_64.tar.gz" + fetch_and_deploy_gh_release "step-badger" "lukasz-lobocki/step-badger" "prebuild" "latest" "/opt/step-badger" "step-badger_Linux_$(arch_resolve "x86_64" "arm64").tar.gz" msg_ok "Updated step-badger" fi exit diff --git a/ct/stylus.sh b/ct/stylus.sh index 16f1cacd5..8eecfb7b1 100644 --- a/ct/stylus.sh +++ b/ct/stylus.sh @@ -35,7 +35,7 @@ function update_script() { systemctl stop stylus msg_info "Stopped Service" - fetch_and_deploy_gh_release "stylus" "mmastrac/stylus" "singlefile" "latest" "/usr/bin/" "*_linux_amd64" + fetch_and_deploy_gh_release "stylus" "mmastrac/stylus" "singlefile" "latest" "/usr/bin/" "*_linux_$(arch_resolve)" msg_info "Starting Service" systemctl start stylus diff --git a/ct/tdarr.sh b/ct/tdarr.sh index fdf2dec69..fad25eccf 100644 --- a/ct/tdarr.sh +++ b/ct/tdarr.sh @@ -34,7 +34,7 @@ function update_script() { $STD apt upgrade -y rm -rf /opt/tdarr/Tdarr_Updater cd /opt/tdarr - RELEASE=$(curl_with_retry "https://f000.backblazeb2.com/file/tdarrs/versions.json" "-" | grep -oP '(?<="Tdarr_Updater": ")[^"]+' | grep linux_x64 | head -n 1) + RELEASE=$(curl_with_retry "https://f000.backblazeb2.com/file/tdarrs/versions.json" "-" | grep -oP '(?<="Tdarr_Updater": ")[^"]+' | grep "linux_$(arch_resolve "x64" "arm64")" | head -n 1) curl_with_retry "$RELEASE" "Tdarr_Updater.zip" $STD unzip Tdarr_Updater.zip chmod +x Tdarr_Updater diff --git a/ct/threadfin.sh b/ct/threadfin.sh index d027de51c..462de9ca1 100644 --- a/ct/threadfin.sh +++ b/ct/threadfin.sh @@ -35,7 +35,7 @@ function update_script() { systemctl stop threadfin msg_ok "Stopped Service" - fetch_and_deploy_gh_release "threadfin-app" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64" + fetch_and_deploy_gh_release "threadfin-app" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_$(arch_resolve)" mv /opt/threadfin/threadfin-app /opt/threadfin/threadfin msg_info "Starting Service" diff --git a/ct/tinyauth.sh b/ct/tinyauth.sh index 60e3892c7..4209e974a 100644 --- a/ct/tinyauth.sh +++ b/ct/tinyauth.sh @@ -34,7 +34,7 @@ function update_script() { systemctl stop tinyauth msg_ok "Stopped Service" - fetch_and_deploy_gh_release "tinyauth" "tinyauthapp/tinyauth" "singlefile" "latest" "/opt/tinyauth" "tinyauth-amd64" + fetch_and_deploy_gh_release "tinyauth" "tinyauthapp/tinyauth" "singlefile" "latest" "/opt/tinyauth" "tinyauth-$(arch_resolve)" msg_info "Starting Service" systemctl start tinyauth diff --git a/ct/traccar.sh b/ct/traccar.sh index 24db56252..174e45f70 100644 --- a/ct/traccar.sh +++ b/ct/traccar.sh @@ -40,7 +40,7 @@ function update_script() { [[ -d /opt/traccar/media ]] && mv /opt/traccar/media /opt msg_ok "Backup created" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "traccar" "traccar/traccar" "prebuild" "latest" "/opt/traccar" "traccar-linux-64*.zip" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "traccar" "traccar/traccar" "prebuild" "latest" "/opt/traccar" "traccar-linux-$(arch_resolve "64*" "arm-*").zip" msg_info "Perform Update" cd /opt/traccar diff --git a/ct/traefik.sh b/ct/traefik.sh index 1c5f5cb96..523f648ef 100644 --- a/ct/traefik.sh +++ b/ct/traefik.sh @@ -34,7 +34,7 @@ function update_script() { systemctl stop traefik msg_ok "Stopped Service" - fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_amd64.tar.gz" + fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_$(arch_resolve).tar.gz" msg_info "Starting Service" systemctl start traefik diff --git a/ct/transmute.sh b/ct/transmute.sh index 694960303..4b107744d 100644 --- a/ct/transmute.sh +++ b/ct/transmute.sh @@ -30,10 +30,10 @@ function update_script() { exit fi - fetch_and_deploy_gh_release "calibre" "kovidgoyal/calibre" "prebuild" "latest" "/opt/calibre" "calibre-*-x86_64.txz" + fetch_and_deploy_gh_release "calibre" "kovidgoyal/calibre" "prebuild" "latest" "/opt/calibre" "calibre-*-$(arch_resolve "x86_64" "arm64").txz" ln -sf /opt/calibre/ebook-convert /usr/bin/ebook-convert - fetch_and_deploy_gh_release "drawio" "jgraph/drawio-desktop" "binary" "latest" "" "drawio-amd64-*.deb" - fetch_and_deploy_gh_release "pandoc" "jgm/pandoc" "binary" "latest" "" "pandoc-*-amd64.deb" + fetch_and_deploy_gh_release "drawio" "jgraph/drawio-desktop" "binary" "latest" "" "drawio-$(arch_resolve)-*.deb" + fetch_and_deploy_gh_release "pandoc" "jgm/pandoc" "binary" "latest" "" "pandoc-*-$(arch_resolve).deb" if check_for_gh_release "transmute" "transmute-app/transmute"; then msg_info "Stopping Service" diff --git a/ct/trilium.sh b/ct/trilium.sh index 334554d4c..66f7c1b06 100644 --- a/ct/trilium.sh +++ b/ct/trilium.sh @@ -51,7 +51,7 @@ function update_script() { rm -rf /opt/trilium msg_ok "Backed up Database" - fetch_and_deploy_gh_release "Trilium" "TriliumNext/Trilium" "prebuild" "latest" "/opt/trilium" "TriliumNotes-Server-*linux-x64.tar.xz" + fetch_and_deploy_gh_release "Trilium" "TriliumNext/Trilium" "prebuild" "latest" "/opt/trilium" "TriliumNotes-Server-*linux-$(arch_resolve "x64" "arm64").tar.xz" msg_info "Restoring Database" mkdir -p "$(dirname "${DB_RESTORE_PATH}")" diff --git a/ct/tunarr.sh b/ct/tunarr.sh index b29cd0abd..b19cd13a6 100644 --- a/ct/tunarr.sh +++ b/ct/tunarr.sh @@ -41,7 +41,7 @@ function update_script() { msg_error "Backup failed: /root/.local/share/tunarr does not exist" fi - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "prebuild" "latest" "/opt/tunarr" "*linux-x64.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tunarr" "chrisbenincasa/tunarr" "prebuild" "latest" "/opt/tunarr" "*linux-$(arch_resolve "x64" "arm64").tar.gz" cd /opt/tunarr mv tunarr* tunarr @@ -56,7 +56,7 @@ function update_script() { systemctl stop tunarr 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" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux$(arch_resolve "64" "arm64")-gpl-7.1.tar.xz" msg_info "Set ErsatzTV-ffmpeg links" chmod +x /opt/ErsatzTV-ffmpeg/bin/* diff --git a/ct/uhf.sh b/ct/uhf.sh index f81bd45f4..fabb2f6ed 100644 --- a/ct/uhf.sh +++ b/ct/uhf.sh @@ -44,8 +44,8 @@ function update_script() { apt remove ffmpeg -y && apt autoremove -y fi setup_ffmpeg - fetch_and_deploy_gh_release "comskip" "swapplications/comskip" "prebuild" "latest" "/opt/comskip" "comskip-x64-*.zip" - fetch_and_deploy_gh_release "uhf-server" "swapplications/uhf-server-dist" "prebuild" "latest" "/opt/uhf-server" "UHF.Server-linux-x64-*.zip" + fetch_and_deploy_gh_release "comskip" "swapplications/comskip" "prebuild" "latest" "/opt/comskip" "comskip-$(arch_resolve "x64" "arm64")-*.zip" + fetch_and_deploy_gh_release "uhf-server" "swapplications/uhf-server-dist" "prebuild" "latest" "/opt/uhf-server" "UHF.Server-linux-$(arch_resolve "x64" "arm64")-*.zip" msg_ok "Updated UHF Server" msg_info "Starting Service" diff --git a/ct/upgopher.sh b/ct/upgopher.sh index 9004f9049..067bd4b23 100644 --- a/ct/upgopher.sh +++ b/ct/upgopher.sh @@ -34,7 +34,7 @@ function update_script() { systemctl stop upgopher msg_ok "Stopped Service" - fetch_and_deploy_gh_release "upgopher" "wanetty/upgopher" "prebuild" "latest" "/opt/upgopher" "upgopher_*_linux_amd64.tar.gz" + fetch_and_deploy_gh_release "upgopher" "wanetty/upgopher" "prebuild" "latest" "/opt/upgopher" "upgopher_*_linux_$(arch_resolve).tar.gz" chmod +x /opt/upgopher/upgopher msg_info "Starting Service" diff --git a/ct/upsnap.sh b/ct/upsnap.sh index 056eebbe6..7fec8506d 100644 --- a/ct/upsnap.sh +++ b/ct/upsnap.sh @@ -34,7 +34,7 @@ function update_script() { systemctl stop upsnap msg_ok "Stopped Services" - fetch_and_deploy_gh_release "upsnap" "seriousm4x/UpSnap" "prebuild" "latest" "/opt/upsnap" "UpSnap_*_linux_amd64.zip" + fetch_and_deploy_gh_release "upsnap" "seriousm4x/UpSnap" "prebuild" "latest" "/opt/upsnap" "UpSnap_*_linux_$(arch_resolve).zip" msg_info "Starting Services" systemctl start upsnap diff --git a/ct/victoriametrics.sh b/ct/victoriametrics.sh index c81392bec..e6c8e5c2a 100644 --- a/ct/victoriametrics.sh +++ b/ct/victoriametrics.sh @@ -38,13 +38,13 @@ function update_script() { msg_ok "Stopped Service" victoriametrics_release=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases" | - jq -r '.[] | select(.assets[].name | match("^victoria-metrics-linux-amd64-v[0-9.]+.tar.gz$")) | .tag_name' | + jq -r --arg a "$(arch_resolve)" '.[] | select(.assets[].name | match("^victoria-metrics-linux-" + $a + "-v[0-9.]+.tar.gz$")) | .tag_name' | head -n 1) msg_debug "Using release $victoriametrics_release" - victoriametrics_filename="victoria-metrics-linux-amd64-${victoriametrics_release}.tar.gz" - vmutils_filename="vmutils-linux-amd64-${victoriametrics_release}.tar.gz" + victoriametrics_filename="victoria-metrics-linux-$(arch_resolve)-${victoriametrics_release}.tar.gz" + vmutils_filename="vmutils-linux-$(arch_resolve)-${victoriametrics_release}.tar.gz" fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "$victoriametrics_release" "/opt/victoriametrics" "$victoriametrics_filename" fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "$victoriametrics_release" "/opt/victoriametrics" "$vmutils_filename" @@ -52,10 +52,10 @@ function update_script() { if [[ -f /etc/systemd/system/victoriametrics-logs.service ]]; then vmlogs_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" | jq -r '.assets[].name' | - grep -E '^victoria-logs-linux-amd64-v[0-9.]+\.tar\.gz$') + grep -E "^victoria-logs-linux-$(arch_resolve)-v[0-9.]+\.tar\.gz$") vlutils_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaLogs/releases/latest" | jq -r '.assets[].name' | - grep -E '^vlutils-linux-amd64-v[0-9.]+\.tar\.gz$') + grep -E "^vlutils-linux-$(arch_resolve)-v[0-9.]+\.tar\.gz$") fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "$vmlogs_filename" fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "$vlutils_filename" From afd20452b5d15553207488100c0436946b0882a7 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 13:35:47 +0000 Subject: [PATCH 46/98] Update CHANGELOG.md (#15296) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0973dc99..98af4ea00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -492,6 +492,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - [arm64] fix update functions to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15290](https://github.com/community-scripts/ProxmoxVE/pull/15290)) - Fix typo in victoriametrics [@asylumexp](https://github.com/asylumexp) ([#15289](https://github.com/community-scripts/ProxmoxVE/pull/15289)) - #### ✨ New Features From b581ce74e781c9aabbd12950d1e0162b7aeaf23b Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 22 Jun 2026 14:13:27 -0400 Subject: [PATCH 47/98] Degoog: Fix valkey url in update; set mandatory settings password (#15300) --- ct/degoog.sh | 4 +++- install/degoog-install.sh | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ct/degoog.sh b/ct/degoog.sh index fa98bbf99..97312acdb 100644 --- a/ct/degoog.sh +++ b/ct/degoog.sh @@ -57,9 +57,11 @@ function update_script() { restore_backup if [[ -f /opt/degoog/.env ]]; then - grep -q "^DEGOOG_VALKEY_URL=" /opt/degoog/.env && sed -i "s|^DEGOOG_VALKEY_URL=.*|DEGOOG_VALKEY_URL=redis://valkey:6379|" /opt/degoog/.env || echo "DEGOOG_VALKEY_URL=redis://valkey:6379" >>/opt/degoog/.env + grep -q "^DEGOOG_VALKEY_URL=" /opt/degoog/.env && sed -i "s|^DEGOOG_VALKEY_URL=.*|DEGOOG_VALKEY_URL=redis://127.0.0.1:6379|" /opt/degoog/.env || echo "DEGOOG_VALKEY_URL=redis://127.0.0.1:6379" >>/opt/degoog/.env grep -q "^DEGOOG_CACHE_MAX_ENTRIES=" /opt/degoog/.env && sed -i "s|^DEGOOG_CACHE_MAX_ENTRIES=.*|DEGOOG_CACHE_MAX_ENTRIES=1000|" /opt/degoog/.env || echo "DEGOOG_CACHE_MAX_ENTRIES=1000" >>/opt/degoog/.env grep -q "^DEGOOG_CACHE_TTL_MS=" /opt/degoog/.env && sed -i "s|^DEGOOG_CACHE_TTL_MS=.*|DEGOOG_CACHE_TTL_MS=43200000|" /opt/degoog/.env || echo "DEGOOG_CACHE_TTL_MS=43200000" >>/opt/degoog/.env + grep -q "^# DEGOOG_SETTINGS_PASSWORDS" /opt/degoog/.env && sed -i "s|^# DEGOOG_SETTINGS_PASSWORDS=.*|DEGOOG_SETTINGS_PASSWORDS=$(openssl rand -hex 32)|" /opt/degoog/.env && + msg_warn "Mandatory Settings Password created - check /opt/degoog/.env" fi msg_ok "Restored Configuration & Data" diff --git a/install/degoog-install.sh b/install/degoog-install.sh index 7e120eb2c..6eb782b97 100644 --- a/install/degoog-install.sh +++ b/install/degoog-install.sh @@ -33,6 +33,7 @@ fetch_and_deploy_gh_release "degoog" "fccview/degoog" "prebuild" "latest" "/opt/ msg_info "Setting up degoog" mkdir -p /opt/degoog/data/{engines,plugins,themes,store} +SETTINGS_PASS="$(openssl rand -hex 32)" cat </opt/degoog/.env DEGOOG_PORT=4444 DEGOOG_ENGINES_DIR=/opt/degoog/data/engines @@ -43,7 +44,7 @@ DEGOOG_PLUGIN_SETTINGS_FILE=/opt/degoog/data/plugin-settings.json DEGOOG_VALKEY_URL=redis://127.0.0.1:6379 DEGOOG_CACHE_MAX_ENTRIES=1000 DEGOOG_CACHE_TTL_MS=43200000 -# DEGOOG_SETTINGS_PASSWORDS=changeme +DEGOOG_SETTINGS_PASSWORDS=${SETTINGS_PASS} # DEGOOG_PUBLIC_INSTANCE=false # LOGGER=debug EOF From 7b3afbc60958fcb012c4e6fbcda22bce6a068874 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 18:13:56 +0000 Subject: [PATCH 48/98] Update CHANGELOG.md (#15303) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98af4ea00..39ccf30fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -492,6 +492,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Degoog: Fix valkey url in update; set mandatory settings password [@vhsdream](https://github.com/vhsdream) ([#15300](https://github.com/community-scripts/ProxmoxVE/pull/15300)) - [arm64] fix update functions to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15290](https://github.com/community-scripts/ProxmoxVE/pull/15290)) - Fix typo in victoriametrics [@asylumexp](https://github.com/asylumexp) ([#15289](https://github.com/community-scripts/ProxmoxVE/pull/15289)) From 0940119aeab339c805519c99ddd5619144f2b5cd Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 22 Jun 2026 21:08:09 +0200 Subject: [PATCH 49/98] feat(build): add pre-install storage health checks (#15226) Warn or block container creation when target storage is above 85% or 95% full. Co-authored-by: Cursor --- misc/build.func | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/misc/build.func b/misc/build.func index b90c89901..a0879a3d3 100644 --- a/misc/build.func +++ b/misc/build.func @@ -4001,6 +4001,7 @@ $PCT_OPTIONS_STRING" exit 214 fi msg_ok "Storage space validated" + check_storage_health "$CONTAINER_STORAGE" "$DISK_SIZE" fi create_lxc_container || exit $? @@ -5383,6 +5384,7 @@ select_storage() { # Validate storage space for container storage if [[ "$CLASS" == "container" && -n "${DISK_SIZE:-}" ]]; then validate_storage_space "$STORAGE_RESULT" "$DISK_SIZE" "yes" + check_storage_health "$STORAGE_RESULT" "$DISK_SIZE" # Continue even if validation fails - user was warned fi @@ -5448,6 +5450,51 @@ validate_storage_space() { return 0 } +# ------------------------------------------------------------------------------ +# check_storage_health() +# +# - Warns or blocks when target storage is nearly full +# - Complements validate_storage_space (free space vs. requested disk) +# - Uses pvesm status usage when available +# ------------------------------------------------------------------------------ +check_storage_health() { + local storage="$1" + local required_gb="${2:-8}" + [[ -z "$storage" ]] && return 0 + + local storage_line storage_type total_kb avail_kb used_pct free_gb_fmt + storage_line=$(pvesm status 2>/dev/null | awk -v s="$storage" '$1 == s {print $0}') + [[ -z "$storage_line" ]] && return 0 + + storage_type=$(awk '{print $2}' <<<"$storage_line") + total_kb=$(awk '{print $4}' <<<"$storage_line") + avail_kb=$(awk '{print $6}' <<<"$storage_line") + + [[ -z "$total_kb" || "$total_kb" == "0" || -z "$avail_kb" ]] && return 0 + + used_pct=$(( (total_kb - avail_kb) * 100 / total_kb )) + free_gb_fmt=$(numfmt --to=iec --from-unit=1024 --suffix=B --format %.1f "$avail_kb" 2>/dev/null || echo "${avail_kb}KB") + + if (( used_pct >= 95 )); then + msg_warn "Storage '${storage}' (${storage_type}) is ${used_pct}% full (${free_gb_fmt} free)" + if ! is_unattended && command -v whiptail >/dev/null 2>&1 && [[ -t 0 ]]; then + if ! whiptail --backtitle "Proxmox VE Helper Scripts" \ + --title "STORAGE ALMOST FULL" \ + --yesno "Storage '${storage}' is ${used_pct}% full.\n\nType: ${storage_type}\nAvailable: ${free_gb_fmt}\nRequired for CT: ${required_gb} GB\n\nContinue anyway?" 14 70; then + msg_error "Installation cancelled – storage nearly full" + exit 214 + fi + elif (( used_pct >= 98 )); then + msg_error "Storage '${storage}' is ${used_pct}% full – refusing install in unattended mode" + exit 214 + fi + elif (( used_pct >= 85 )); then + msg_warn "Storage '${storage}' (${storage_type}) is ${used_pct}% full (${free_gb_fmt} free)" + fi + + return 0 +} + # ============================================================================== # SECTION 8: CONTAINER CREATION # ============================================================================== From a5f21f63e836ab7f2d54f93d8ba046e5b549fee5 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 19:08:36 +0000 Subject: [PATCH 50/98] Update CHANGELOG.md (#15304) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39ccf30fb..5e102b874 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -501,6 +501,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - [arm64] Port scripts between thingsboard & wanderer to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15286](https://github.com/community-scripts/ProxmoxVE/pull/15286)) - [arm64] Port scripts between snowshare & thelounge to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15280](https://github.com/community-scripts/ProxmoxVE/pull/15280)) +### 💾 Core + + - #### ✨ New Features + + - core: add pre-install storage health checks [@MickLesk](https://github.com/MickLesk) ([#15226](https://github.com/community-scripts/ProxmoxVE/pull/15226)) + ## 2026-06-21 ### 🚀 Updated Scripts From bf815a847bfeb81a9c45fcc82afab7e02cad8ab8 Mon Sep 17 00:00:00 2001 From: hugo <75113230+hug-efrei@users.noreply.github.com> Date: Mon, 22 Jun 2026 21:10:14 +0200 Subject: [PATCH 51/98] fix(romm): resolve 403 Forbidden error on nginx mod_zip installation (#15134) * Update Nginx installation and mod_zip configuration Replaced nginx with nginx-extras and modified Nginx mod_zip installation to use the native Debian module. * Update source URL for build functions in romm.sh * Update install script URL in build.func * Update romm-install.sh for Nginx and mod_zip installation Updated the installation script to include Nginx and libpcre2-dev, and modified the process for installing the Nginx mod_zip module. * Install Nginx mod_zip module and create symlinks Add installation steps for Nginx mod_zip module. * Modify Nginx installation to use custom modules path Updated installation script to use a custom modules directory for Nginx. * Install Nginx mod_zip without HTTP rewrite module Removed unnecessary HTTP rewrite module from Nginx configuration. * Simplify Nginx mod_zip installation script Removed redundant installation of libpcre3-dev for Nginx mod_zip. * Update romm-install.sh * Remove temporary files after Nginx module installation Clean up temporary files after installing the Nginx mod_zip module. * Update source URL in romm.sh script * Update install script URL to community repository * fix(romm): replace getpagespeed repo with source compilation for mod_zip The `getpagespeed` repository now requires a paid subscription, causing the RomM installation to fail with a 403 Forbidden error. Additionally, Debian 13 (Trixie) introduced an APT conflict between `libpcre3-dev` and `libpcre2-dev`. This commit fixes the installation by: - Removing the proprietary `getpagespeed` repository dependency. - Replacing `libpcre3-dev` with `libpcre2-dev` to resolve APT conflicts on Debian 13. - Downloading the `mod_zip` tarball directly from GitHub (avoiding `git clone`). - Downloading the exact Nginx source code matching the installed APT version. - Compiling the dynamic module (`ngx_http_zip_module.so`) using `--with-compat`. - Placing the compiled module in a custom directory (`/etc/nginx/custom-modules/`) to bypass Debian's default symlink quirks. - Cleaning up compilation files in `/tmp` to keep the container footprint small. * migrate from nginx to angie so dont need to then install nginx from tarball just to compile the zip module --------- Co-authored-by: Sam Heinz <54530346+asylumexp@users.noreply.github.com> --- ct/romm.sh | 9 +++++++-- install/romm-install.sh | 33 +++++++++++++++------------------ 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/ct/romm.sh b/ct/romm.sh index dc49b8af7..7a34a8e75 100644 --- a/ct/romm.sh +++ b/ct/romm.sh @@ -59,8 +59,13 @@ function update_script() { ROMM_BASE=${ROMM_BASE:-/var/lib/romm} ln -sfn "$ROMM_BASE"/resources /opt/romm/frontend/dist/assets/romm/resources ln -sfn "$ROMM_BASE"/assets /opt/romm/frontend/dist/assets/romm/assets - sed -i "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" /etc/nginx/sites-available/romm - systemctl reload nginx + if [[ -f /etc/angie/http.d/romm.conf ]]; then + sed -i "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" /etc/angie/http.d/romm.conf + systemctl reload angie + elif [[ -f /etc/nginx/sites-available/romm ]]; then + sed -i "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" /etc/nginx/sites-available/romm + systemctl reload nginx + fi msg_ok "Updated ROMM" msg_info "Starting Services" diff --git a/install/romm-install.sh b/install/romm-install.sh index fcf2a99a8..bf126dea0 100644 --- a/install/romm-install.sh +++ b/install/romm-install.sh @@ -37,20 +37,19 @@ $STD apt install -y \ redis-server \ redis-tools \ p7zip-full \ - tzdata \ - nginx + tzdata msg_ok "Installed Dependencies" -msg_info "Installing Nginx mod_zip module" +msg_info "Installing Angie with mod_zip module" setup_deb822_repo \ - "getpagespeed-extras" \ - "https://extras.getpagespeed.com/deb-archive-keyring.gpg" \ - "https://extras.getpagespeed.com/debian" \ + "angie" \ + "https://angie.software/keys/angie-signing.gpg" \ + "https://download.angie.software/angie/debian/$(get_os_info version_id)" \ "$(get_os_info codename)" \ "main" -$STD apt-get install -y nginx nginx-module-zip -msg_ok "Installed Nginx mod_zip module" - +$STD apt-get install -y angie angie-module-zip +sed -i '1i load_module modules/ngx_http_zip_module.so;' /etc/angie/angie.conf +msg_ok "Installed Angie with mod_zip module" PYTHON_VERSION="3.13" setup_uv NODE_VERSION="24" setup_nodejs setup_mariadb @@ -196,8 +195,8 @@ ln -sfn "$ROMM_BASE"/resources /opt/romm/frontend/dist/assets/romm/resources ln -sfn "$ROMM_BASE"/assets /opt/romm/frontend/dist/assets/romm/assets msg_ok "Set up RomM Frontend" -msg_info "Configuring Nginx" -cat <<'EOF' >/etc/nginx/sites-available/romm +msg_info "Configuring Angie" +cat <<'EOF' >/etc/angie/http.d/romm.conf upstream romm_backend { server 127.0.0.1:5000; } @@ -267,13 +266,11 @@ server { } EOF -sed -i "s|alias /var/lib/romm/library/;|alias ${ROMM_BASE}/library/;|" /etc/nginx/sites-available/romm -rm -f /etc/nginx/sites-enabled/default -rm -f /etc/nginx/conf.d/default.conf -ln -sf /etc/nginx/sites-available/romm /etc/nginx/sites-enabled/romm -systemctl restart nginx -systemctl enable -q --now nginx -msg_ok "Configured Nginx" +sed -i "s|alias /var/lib/romm/library/;|alias ${ROMM_BASE}/library/;|" /etc/angie/http.d/romm.conf +rm -f /etc/angie/http.d/default.conf +systemctl restart angie +systemctl enable -q --now angie +msg_ok "Configured Angie" msg_info "Creating Services" cat </etc/systemd/system/romm-backend.service From 7f363170f345667d8c08befd39d4b57f4579673e Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 19:10:44 +0000 Subject: [PATCH 52/98] Update CHANGELOG.md (#15305) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e102b874..c99bd5cb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -492,6 +492,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - fix(romm): resolve 403 Forbidden error on nginx mod_zip installation [@hug-efrei](https://github.com/hug-efrei) ([#15134](https://github.com/community-scripts/ProxmoxVE/pull/15134)) - Degoog: Fix valkey url in update; set mandatory settings password [@vhsdream](https://github.com/vhsdream) ([#15300](https://github.com/community-scripts/ProxmoxVE/pull/15300)) - [arm64] fix update functions to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15290](https://github.com/community-scripts/ProxmoxVE/pull/15290)) - Fix typo in victoriametrics [@asylumexp](https://github.com/asylumexp) ([#15289](https://github.com/community-scripts/ProxmoxVE/pull/15289)) From c1a6dc29ee13fea39a1730c599e14b7cba5640cd Mon Sep 17 00:00:00 2001 From: galz55 Date: Mon, 22 Jun 2026 21:11:14 +0200 Subject: [PATCH 53/98] Fix-15015: check correct path for certbot (#15034) Co-authored-by: galz55 --- ct/nginxproxymanager.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ct/nginxproxymanager.sh b/ct/nginxproxymanager.sh index 71b4939f6..2bcfa34d4 100644 --- a/ct/nginxproxymanager.sh +++ b/ct/nginxproxymanager.sh @@ -221,7 +221,13 @@ EOF msg_ok "Initialized Backend" msg_info "Starting Services" - CERTBOT_VER=$(/opt/certbot/bin/certbot --version 2>&1 | awk '{print $NF}') + if [ -f /opt/certbot/bin/certbot ]; then + CERTBOT_VER=$(/opt/certbot/bin/certbot --version 2>&1 | awk '{print $NF}' || echo "0.0.0") + elif command -v certbot &>/dev/null; then + CERTBOT_VER=$(certbot --version 2>&1 | awk '{print $NF}' || echo "0.0.0") + else + CERTBOT_VER="2.0.0" + fi if grep -q "Environment=CERTBOT_VERSION" /lib/systemd/system/npm.service; then sed -i "s|Environment=CERTBOT_VERSION=.*|Environment=CERTBOT_VERSION=${CERTBOT_VER}|" /lib/systemd/system/npm.service else From 0524e7feb5743ae54fbef9aee456d88f27b397c9 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 19:11:45 +0000 Subject: [PATCH 54/98] Update CHANGELOG.md (#15306) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c99bd5cb7..d867e8afa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -492,6 +492,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Fix-15015: check correct path for certbot [@galz55](https://github.com/galz55) ([#15034](https://github.com/community-scripts/ProxmoxVE/pull/15034)) - fix(romm): resolve 403 Forbidden error on nginx mod_zip installation [@hug-efrei](https://github.com/hug-efrei) ([#15134](https://github.com/community-scripts/ProxmoxVE/pull/15134)) - Degoog: Fix valkey url in update; set mandatory settings password [@vhsdream](https://github.com/vhsdream) ([#15300](https://github.com/community-scripts/ProxmoxVE/pull/15300)) - [arm64] fix update functions to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15290](https://github.com/community-scripts/ProxmoxVE/pull/15290)) From 834f2dbd2916e811c80bbf41b40dba874b893791 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 21:11:47 +0200 Subject: [PATCH 55/98] Postiz (#15048) * Add postiz (ct) * Update postiz.sh * rm: python --------- Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- ct/headers/postiz | 6 + ct/postiz.sh | 78 ++++++++++++ install/postiz-install.sh | 248 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 332 insertions(+) create mode 100644 ct/headers/postiz create mode 100644 ct/postiz.sh create mode 100644 install/postiz-install.sh diff --git a/ct/headers/postiz b/ct/headers/postiz new file mode 100644 index 000000000..2c5c0ba81 --- /dev/null +++ b/ct/headers/postiz @@ -0,0 +1,6 @@ + ____ __ _ + / __ \____ _____/ /_(_)___ + / /_/ / __ \/ ___/ __/ /_ / + / ____/ /_/ (__ ) /_/ / / /_ +/_/ \____/____/\__/_/ /___/ + diff --git a/ct/postiz.sh b/ct/postiz.sh new file mode 100644 index 000000000..cdfbc51b2 --- /dev/null +++ b/ct/postiz.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/gitroomhq/postiz-app + +APP="Postiz" +var_tags="${var_tags:-social-media;scheduling;automation}" +var_cpu="${var_cpu:-4}" +var_ram="${var_ram:-8192}" +var_disk="${var_disk:-20}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -d /opt/postiz ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "postiz" "gitroomhq/postiz-app"; then + msg_info "Stopping Services" + systemctl stop postiz-orchestrator postiz-frontend postiz-backend + msg_ok "Stopped Services" + + create_backup /opt/postiz/.env \ + /opt/postiz/uploads + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "postiz" "gitroomhq/postiz-app" "tarball" + + msg_info "Building Application" + cd /opt/postiz + cp /opt/postiz_env.bak /opt/postiz/.env + set -a && source /opt/postiz/.env && set +a + export NODE_OPTIONS="--max-old-space-size=4096" + $STD pnpm install + $STD pnpm run build + unset NODE_OPTIONS + msg_ok "Built Application" + + msg_info "Running Database Migrations" + cd /opt/postiz + $STD pnpm run prisma-db-push + msg_ok "Ran Database Migrations" + + + mkdir -p /opt/postiz/uploads + restore_backup + + msg_info "Starting Services" + systemctl start postiz-backend postiz-frontend postiz-orchestrator + 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}${CL}" diff --git a/install/postiz-install.sh b/install/postiz-install.sh new file mode 100644 index 000000000..b5c3efd6f --- /dev/null +++ b/install/postiz-install.sh @@ -0,0 +1,248 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/gitroomhq/postiz-app + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y \ + build-essential \ + redis-server \ + nginx +msg_ok "Installed Dependencies" + +PG_VERSION="17" setup_postgresql +PG_DB_NAME="postiz" PG_DB_USER="postiz" setup_postgresql_db +NODE_VERSION="24" setup_nodejs + +fetch_and_deploy_gh_release "temporal" "temporalio/cli" "prebuild" "latest" "/opt/temporal" "temporal_cli_*_linux_amd64.tar.gz" +chmod +x /opt/temporal/temporal +fetch_and_deploy_gh_release "postiz" "gitroomhq/postiz-app" "tarball" + +msg_info "Installing pnpm" +PNPM_VERSION=$(sed -n 's/.*"packageManager":\s*"pnpm@\([^"]*\)".*/\1/p' /opt/postiz/package.json) +$STD npm install -g "pnpm@${PNPM_VERSION}" +msg_ok "Installed pnpm" + +msg_info "Configuring Application" +JWT_SECRET=$(openssl rand -base64 32) +mkdir -p /opt/postiz/uploads +cat </opt/postiz/.env +DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME} +REDIS_URL=redis://localhost:6379 +JWT_SECRET=${JWT_SECRET} +MAIN_URL=http://${LOCAL_IP} +FRONTEND_URL=http://${LOCAL_IP} +NEXT_PUBLIC_BACKEND_URL=http://${LOCAL_IP}/api +BACKEND_INTERNAL_URL=http://localhost:3000 +NOT_SECURED=true +TEMPORAL_ADDRESS=localhost:7233 +IS_GENERAL=true +STORAGE_PROVIDER=local +UPLOAD_DIRECTORY=/opt/postiz/uploads +NEXT_PUBLIC_UPLOAD_DIRECTORY=/uploads +NX_ADD_PLUGINS=false +EOF +msg_ok "Configured Application" + +msg_info "Building Application" +cd /opt/postiz +set -a && source /opt/postiz/.env && set +a +export NODE_OPTIONS="--max-old-space-size=4096" +$STD pnpm install +$STD pnpm run build +unset NODE_OPTIONS +msg_ok "Built Application" + +msg_info "Running Database Migrations" +cd /opt/postiz +set -a && source /opt/postiz/.env && set +a +$STD pnpm run prisma-db-push +msg_ok "Ran Database Migrations" + +msg_info "Creating Services" +PNPM_BIN="$(command -v pnpm)" +cat </etc/systemd/system/postiz-temporal.service +[Unit] +Description=Temporal Dev Server (Postiz) +After=network.target + +[Service] +Type=simple +User=root +ExecStart=/opt/temporal/temporal server start-dev --db-filename /opt/temporal/temporal.db --log-format json --log-level warn +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/postiz-backend.service +[Unit] +Description=Postiz Backend +After=network.target postgresql.service redis-server.service postiz-temporal.service +Requires=postgresql.service redis-server.service + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/postiz +EnvironmentFile=/opt/postiz/.env +ExecStart=${PNPM_BIN} run start:prod:backend +Environment=NODE_OPTIONS=--max-old-space-size=512 +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/postiz-frontend.service +[Unit] +Description=Postiz Frontend +After=network.target postiz-backend.service + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/postiz +EnvironmentFile=/opt/postiz/.env +Environment=PORT=4200 +ExecStart=${PNPM_BIN} run start:prod:frontend +Environment=NODE_OPTIONS=--max-old-space-size=512 +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/postiz-orchestrator.service +[Unit] +Description=Postiz Orchestrator +After=network.target postiz-temporal.service postiz-backend.service +Requires=postiz-temporal.service + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/postiz +EnvironmentFile=/opt/postiz/.env +ExecStart=${PNPM_BIN} run start:prod:orchestrator +Environment=NODE_OPTIONS=--max-old-space-size=384 +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +systemctl enable -q --now redis-server postiz-temporal postiz-backend postiz-frontend postiz-orchestrator +msg_ok "Created Services" + +msg_info "Creating Helper Scripts" +cat <<'EOF' >/usr/local/bin/postiz-rebuild +#!/usr/bin/env bash +echo "=== Postiz Rebuild ===" +echo "Stopping services..." +systemctl stop postiz-orchestrator postiz-frontend postiz-backend + +cd /opt/postiz +set -a && source /opt/postiz/.env && set +a +export NODE_OPTIONS="--max-old-space-size=4096" + +echo "Building application (this may take a while)..." +pnpm run build +BUILD_RC=$? +unset NODE_OPTIONS + +if [[ $BUILD_RC -ne 0 ]]; then + echo "ERROR: Build failed! Check the output above." + echo "Starting services with previous build..." + systemctl start postiz-backend postiz-frontend postiz-orchestrator + exit 1 +fi + +echo "Running database migrations..." +pnpm run prisma-db-push + +echo "Starting services..." +systemctl start postiz-backend postiz-frontend postiz-orchestrator +echo "=== Rebuild complete ===" +EOF +chmod +x /usr/local/bin/postiz-rebuild +msg_ok "Created Helper Scripts" + +msg_info "Configuring Nginx" +cat </etc/nginx/sites-available/postiz +server { + listen 80 default_server; + server_name _; + + client_max_body_size 100M; + + gzip on; + gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; + + location /api/ { + proxy_pass http://127.0.0.1:3000/; + proxy_http_version 1.1; + proxy_set_header Upgrade \$http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$scheme; + proxy_set_header Reload \$http_reload; + proxy_set_header Onboarding \$http_onboarding; + proxy_set_header Activate \$http_activate; + proxy_set_header Auth \$http_auth; + proxy_set_header Showorg \$http_showorg; + proxy_set_header Impersonate \$http_impersonate; + proxy_set_header Accept-Language \$http_accept_language; + } + + location /uploads/ { + alias /opt/postiz/uploads/; + } + + location / { + proxy_pass http://127.0.0.1:4200/; + proxy_http_version 1.1; + proxy_set_header Upgrade \$http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$scheme; + proxy_set_header Reload \$http_reload; + proxy_set_header Onboarding \$http_onboarding; + proxy_set_header Activate \$http_activate; + proxy_set_header Auth \$http_auth; + proxy_set_header Showorg \$http_showorg; + proxy_set_header Impersonate \$http_impersonate; + proxy_set_header Accept-Language \$http_accept_language; + proxy_set_header i18next \$http_i18next; + } +} +EOF +ln -sf /etc/nginx/sites-available/postiz /etc/nginx/sites-enabled/postiz +rm -f /etc/nginx/sites-enabled/default +$STD nginx -t +systemctl enable -q nginx +systemctl reload -q nginx +msg_ok "Configured Nginx" + +motd_ssh +customize +cleanup_lxc From 490aa20dabb467642426fd1bdfd44a9c77b33ad9 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 19:12:16 +0000 Subject: [PATCH 56/98] Update CHANGELOG.md (#15307) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d867e8afa..5ee5ff720 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -488,6 +488,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-06-22 +### 🆕 New Scripts + + - Postiz ([#15048](https://github.com/community-scripts/ProxmoxVE/pull/15048)) + ### 🚀 Updated Scripts - #### 🐞 Bug Fixes From bc9ceb187d34d0ecab131b63cd841007ad84ea1a Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Tue, 23 Jun 2026 05:12:42 +1000 Subject: [PATCH 57/98] add proxy headers to dispatcharr from #15143 (#15293) --- ct/dispatcharr.sh | 71 ++++++++++++++++++++++++++++++++-- install/dispatcharr-install.sh | 19 +++++++-- 2 files changed, 84 insertions(+), 6 deletions(-) diff --git a/ct/dispatcharr.sh b/ct/dispatcharr.sh index cd9636770..1c523eaf8 100644 --- a/ct/dispatcharr.sh +++ b/ct/dispatcharr.sh @@ -32,11 +32,76 @@ function update_script() { setup_uv NODE_VERSION="24" setup_nodejs + if [[ -f "/etc/nginx/sites-available/dispatcharr.conf" ]] && ! grep -q "real_forwarded_proto" "/etc/nginx/sites-available/dispatcharr.conf"; then + msg_info "Migrating Nginx Configuration" + cat <"/etc/nginx/sites-available/dispatcharr.conf" +map \$http_x_forwarded_proto \$real_forwarded_proto { + "" \$scheme; + default \$http_x_forwarded_proto; +} - # Fix for nginx not allowing large files - if ! grep -q "client_max_body_size 100M;" /etc/nginx/sites-available/dispatcharr.conf; then - sed -i '/server_name _;/a \ client_max_body_size 100M;' /etc/nginx/sites-available/dispatcharr.conf +map \$http_x_forwarded_port \$real_forwarded_port { + "" \$server_port; + default \$http_x_forwarded_port; +} + +server { + listen 9191; + server_name _; + client_max_body_size 100M; + + # Serve static assets with correct MIME types + location /assets/ { + alias /opt/dispatcharr/frontend/dist/assets/; + expires 30d; + add_header Cache-Control "public, immutable"; + + # Explicitly set MIME types for webpack-built assets + types { + text/javascript js; + text/css css; + image/png png; + image/svg+xml svg svgz; + font/woff2 woff2; + font/woff woff; + font/ttf ttf; + } + } + + location /static/ { + alias /opt/dispatcharr/static/; + expires 30d; + add_header Cache-Control "public, immutable"; + } + + location /media/ { + alias /opt/dispatcharr/media/; + } + + location /ws/ { + proxy_pass http://127.0.0.1:8001; + proxy_http_version 1.1; + proxy_set_header Upgrade \$http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$real_forwarded_proto; + } + + # All other requests proxy to uWSGI + location / { + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$real_forwarded_proto; + proxy_set_header X-Forwarded-Port \$real_forwarded_port; + proxy_pass http://127.0.0.1:5656; + } +} +EOF systemctl reload nginx + msg_ok "Migrated Nginx Configuration" fi ensure_dependencies vlc-bin vlc-plugin-base diff --git a/install/dispatcharr-install.sh b/install/dispatcharr-install.sh index f39dee893..f02b3c1b6 100644 --- a/install/dispatcharr-install.sh +++ b/install/dispatcharr-install.sh @@ -74,6 +74,16 @@ msg_ok "Configured Dispatcharr" msg_info "Configuring Nginx" cat </etc/nginx/sites-available/dispatcharr.conf +map \$http_x_forwarded_proto \$real_forwarded_proto { + "" \$scheme; + default \$http_x_forwarded_proto; +} + +map \$http_x_forwarded_port \$real_forwarded_port { + "" \$server_port; + default \$http_x_forwarded_port; +} + server { listen 9191; server_name _; @@ -115,13 +125,16 @@ server { proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto \$scheme; + proxy_set_header X-Forwarded-Proto \$real_forwarded_proto; } # All other requests proxy to uWSGI location / { - include proxy_params; - proxy_set_header X-Forwarded-Port \$server_port; + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$real_forwarded_proto; + proxy_set_header X-Forwarded-Port \$real_forwarded_port; proxy_pass http://127.0.0.1:5656; } } From 51db1a9d7de093c26027422df199df16a55ee524 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 19:13:17 +0000 Subject: [PATCH 58/98] Update CHANGELOG.md (#15308) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ee5ff720..75d209573 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -496,6 +496,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - add proxy headers to dispatcharr from #15143 [@asylumexp](https://github.com/asylumexp) ([#15293](https://github.com/community-scripts/ProxmoxVE/pull/15293)) - Fix-15015: check correct path for certbot [@galz55](https://github.com/galz55) ([#15034](https://github.com/community-scripts/ProxmoxVE/pull/15034)) - fix(romm): resolve 403 Forbidden error on nginx mod_zip installation [@hug-efrei](https://github.com/hug-efrei) ([#15134](https://github.com/community-scripts/ProxmoxVE/pull/15134)) - Degoog: Fix valkey url in update; set mandatory settings password [@vhsdream](https://github.com/vhsdream) ([#15300](https://github.com/community-scripts/ProxmoxVE/pull/15300)) From 3fc187efb800cf5ce04c77e739b6e697edd64848 Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Tue, 23 Jun 2026 05:13:32 +1000 Subject: [PATCH 59/98] [arm64] Port scripts between warracker-zwavejsui to support arm64 (#15291) * [arm64] Port scripts between warracker-zwavejsui to support arm64 * Update zerotier-one-install.sh --- ct/wastebin.sh | 4 ++-- ct/wazuh.sh | 2 +- ct/web-check.sh | 2 +- ct/whisparr.sh | 2 +- ct/whodb.sh | 4 ++-- ct/wishlist.sh | 2 +- ct/writefreely.sh | 4 ++-- ct/xyops.sh | 2 +- ct/yamtrack.sh | 2 +- ct/yourls.sh | 2 +- ct/yt-dlp-webui.sh | 4 ++-- ct/yubal.sh | 2 +- ct/zerobyte.sh | 2 +- ct/zerotier-one.sh | 4 ++-- ct/zitadel.sh | 4 ++-- ct/zoraxy.sh | 4 ++-- ct/zot-registry.sh | 4 ++-- ct/zwave-js-ui.sh | 4 ++-- install/wastebin-install.sh | 2 +- install/whisparr-install.sh | 4 ++-- install/whodb-install.sh | 2 +- install/wishlist-install.sh | 2 +- install/writefreely-install.sh | 2 +- install/yt-dlp-webui-install.sh | 2 +- install/zerobyte-install.sh | 6 ++--- install/zerotier-one-install.sh | 40 +++++++++++++++++++++++++++++++-- install/zitadel-install.sh | 4 ++-- install/zoraxy-install.sh | 2 +- install/zot-registry-install.sh | 2 +- install/zwave-js-ui-install.sh | 4 ++-- 30 files changed, 81 insertions(+), 45 deletions(-) diff --git a/ct/wastebin.sh b/ct/wastebin.sh index cd9ff6900..0b44f1820 100644 --- a/ct/wastebin.sh +++ b/ct/wastebin.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -66,7 +66,7 @@ EOF msg_info "Updating Wastebin" temp_file=$(mktemp) - curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst" -o "$temp_file" + curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl.tar.zst" -o "$temp_file" tar -xf "$temp_file" cp -f wastebin* /opt/wastebin/ chmod +x /opt/wastebin/wastebin diff --git a/ct/wazuh.sh b/ct/wazuh.sh index 937b513d8..4158920f2 100644 --- a/ct/wazuh.sh +++ b/ct/wazuh.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-25}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/web-check.sh b/ct/web-check.sh index 327878810..d664014ac 100644 --- a/ct/web-check.sh +++ b/ct/web-check.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-12}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/whisparr.sh b/ct/whisparr.sh index b2b270971..3d72004dd 100644 --- a/ct/whisparr.sh +++ b/ct/whisparr.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/whodb.sh b/ct/whodb.sh index f39190b46..7bf803056 100644 --- a/ct/whodb.sh +++ b/ct/whodb.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-2}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -35,7 +35,7 @@ function update_script() { systemctl stop whodb msg_ok "Stopped Service" - fetch_and_deploy_gh_release "whodb" "clidey/whodb" "singlefile" "latest" "/opt/whodb" "whodb-*-linux-amd64" + fetch_and_deploy_gh_release "whodb" "clidey/whodb" "singlefile" "latest" "/opt/whodb" "whodb-*-linux-$(arch_resolve)" msg_info "Starting Service" systemctl start whodb diff --git a/ct/wishlist.sh b/ct/wishlist.sh index 7542941eb..58a9789ef 100644 --- a/ct/wishlist.sh +++ b/ct/wishlist.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/writefreely.sh b/ct/writefreely.sh index daf3f6dcb..c38b805c5 100644 --- a/ct/writefreely.sh +++ b/ct/writefreely.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -41,7 +41,7 @@ function update_script() { cp /opt/writefreely/config.ini /tmp/writefreely_backup/ 2>/dev/null msg_ok "Created Backup" - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "writefreely" "writefreely/writefreely" "prebuild" "latest" "/opt/writefreely" "writefreely_*_linux_amd64.tar.gz" + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "writefreely" "writefreely/writefreely" "prebuild" "latest" "/opt/writefreely" "writefreely_*_linux_$(arch_resolve).tar.gz" msg_info "Restoring Data" cp /tmp/writefreely_backup/config.ini /opt/writefreely/ 2>/dev/null diff --git a/ct/xyops.sh b/ct/xyops.sh index 140db1450..61f641119 100644 --- a/ct/xyops.sh +++ b/ct/xyops.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/yamtrack.sh b/ct/yamtrack.sh index 06eba2335..1537d8329 100644 --- a/ct/yamtrack.sh +++ b/ct/yamtrack.sh @@ -13,7 +13,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/yourls.sh b/ct/yourls.sh index 680c0a0b3..212290816 100644 --- a/ct/yourls.sh +++ b/ct/yourls.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-512}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/yt-dlp-webui.sh b/ct/yt-dlp-webui.sh index 8be401bdb..9f0e69028 100644 --- a/ct/yt-dlp-webui.sh +++ b/ct/yt-dlp-webui.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -39,7 +39,7 @@ function update_script() { msg_ok "Updated yt-dlp" rm -rf /usr/local/bin/yt-dlp-webui - fetch_and_deploy_gh_release "yt-dlp-webui" "marcopiovanello/yt-dlp-web-ui" "singlefile" "latest" "/usr/local/bin" "yt-dlp-webui_linux-amd64" + fetch_and_deploy_gh_release "yt-dlp-webui" "marcopiovanello/yt-dlp-web-ui" "singlefile" "latest" "/usr/local/bin" "yt-dlp-webui_linux-$(arch_resolve)" msg_info "Starting Service" systemctl start yt-dlp-webui diff --git a/ct/yubal.sh b/ct/yubal.sh index b4630d115..ea1c56a6f 100644 --- a/ct/yubal.sh +++ b/ct/yubal.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-15}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/zerobyte.sh b/ct/zerobyte.sh index 16b3bd17b..1f65eeeea 100644 --- a/ct/zerobyte.sh +++ b/ct/zerobyte.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-6144}" var_disk="${var_disk:-10}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/zerotier-one.sh b/ct/zerotier-one.sh index 187c281d3..0cf3dc1c5 100644 --- a/ct/zerotier-one.sh +++ b/ct/zerotier-one.sh @@ -8,11 +8,11 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV APP="Zerotier-One" var_tags="${var_tags:-networking}" var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" +var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" diff --git a/ct/zitadel.sh b/ct/zitadel.sh index 75fd6b2d7..9963c1046 100644 --- a/ct/zitadel.sh +++ b/ct/zitadel.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-8}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -35,7 +35,7 @@ function update_script() { msg_ok "Stopped Service" rm -f /usr/local/bin/zitadel - fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "latest" "/usr/local/bin" "zitadel-linux-amd64.tar.gz" + fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "latest" "/usr/local/bin" "zitadel-linux-$(arch_resolve).tar.gz" msg_info "Updating Zitadel" $STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true diff --git a/ct/zoraxy.sh b/ct/zoraxy.sh index 3bc2fbb8e..29801afd9 100644 --- a/ct/zoraxy.sh +++ b/ct/zoraxy.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-2048}" var_disk="${var_disk:-6}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -34,7 +34,7 @@ function update_script() { msg_ok "Service stopped" rm -rf /opt/zoraxy/zoraxy - fetch_and_deploy_gh_release "zoraxy" "tobychui/zoraxy" "singlefile" "latest" "/opt/zoraxy" "zoraxy_linux_amd64" + fetch_and_deploy_gh_release "zoraxy" "tobychui/zoraxy" "singlefile" "latest" "/opt/zoraxy" "zoraxy_linux_$(arch_resolve)" msg_info "Starting service" systemctl start zoraxy diff --git a/ct/zot-registry.sh b/ct/zot-registry.sh index 4ceb94c5f..183527b76 100644 --- a/ct/zot-registry.sh +++ b/ct/zot-registry.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-4096}" var_disk="${var_disk:-5}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" @@ -35,7 +35,7 @@ function update_script() { msg_ok "Stopped Zot service" rm -f /usr/bin/zot - fetch_and_deploy_gh_release "zot" "project-zot/zot" "singlefile" "latest" "/usr/bin" "zot-linux-amd64" + fetch_and_deploy_gh_release "zot" "project-zot/zot" "singlefile" "latest" "/usr/bin" "zot-linux-$(arch_resolve)" msg_info "Configuring Zot Registry" chown root:root /usr/bin/zot diff --git a/ct/zwave-js-ui.sh b/ct/zwave-js-ui.sh index 5790c571b..16ad05d3a 100644 --- a/ct/zwave-js-ui.sh +++ b/ct/zwave-js-ui.sh @@ -12,7 +12,7 @@ var_ram="${var_ram:-1024}" var_disk="${var_disk:-4}" var_os="${var_os:-debian}" var_version="${var_version:-13}" -var_arm64="${var_arm64:-no}" +var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-0}" header_info "$APP" @@ -35,7 +35,7 @@ function update_script() { msg_ok "Stopped Service" rm -rf /opt/zwave-js-ui/* - fetch_and_deploy_gh_release "zwave-js-ui" "zwave-js/zwave-js-ui" "prebuild" "latest" "/opt/zwave-js-ui" "zwave-js-ui*-linux.zip" + fetch_and_deploy_gh_release "zwave-js-ui" "zwave-js/zwave-js-ui" "prebuild" "latest" "/opt/zwave-js-ui" "zwave-js-ui*-$(arch_resolve "linux" "linux-arm64").zip" msg_info "Starting Service" systemctl start zwave-js-ui diff --git a/install/wastebin-install.sh b/install/wastebin-install.sh index 8b44dcf91..782486080 100644 --- a/install/wastebin-install.sh +++ b/install/wastebin-install.sh @@ -20,7 +20,7 @@ msg_ok "Installed dependencies" msg_info "Installing Wastebin" temp_file=$(mktemp) RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst" -o "$temp_file" +curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_$(arch_resolve "x86_64" "aarch64")-unknown-linux-musl.tar.zst" -o "$temp_file" tar -xf "$temp_file" mkdir -p /opt/wastebin mv wastebin* /opt/wastebin/ diff --git a/install/whisparr-install.sh b/install/whisparr-install.sh index fc0327b41..d328ed221 100644 --- a/install/whisparr-install.sh +++ b/install/whisparr-install.sh @@ -14,10 +14,10 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt install -y sqlite3 +$STD apt install -y sqlite3 libicu-dev msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "Whisparr" "Whisparr/Whisparr" "prebuild" "latest" "/opt/Whisparr" "Whisparr.*.linux-x64.tar.gz" +fetch_and_deploy_gh_release "Whisparr" "Whisparr/Whisparr" "prebuild" "latest" "/opt/Whisparr" "Whisparr.*.linux-$(arch_resolve "x64" "arm64").tar.gz" msg_info "Configuring Whisparr" mkdir -p /var/lib/whisparr/ diff --git a/install/whodb-install.sh b/install/whodb-install.sh index 78e7ef802..7e407f5f9 100644 --- a/install/whodb-install.sh +++ b/install/whodb-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "whodb" "clidey/whodb" "singlefile" "latest" "/opt/whodb" "whodb-*-linux-amd64" +fetch_and_deploy_gh_release "whodb" "clidey/whodb" "singlefile" "latest" "/opt/whodb" "whodb-*-linux-$(arch_resolve)" msg_info "Creating Service" cat </etc/systemd/system/whodb.service diff --git a/install/wishlist-install.sh b/install/wishlist-install.sh index 841f6d2b0..fd029cdaa 100644 --- a/install/wishlist-install.sh +++ b/install/wishlist-install.sh @@ -20,7 +20,7 @@ $STD apt install -y \ caddy msg_ok "Installed dependencies" -NODE_VERSION="24" NODE_MODULE="pnpm@10" setup_nodejs +NODE_VERSION="24" NODE_MODULE="pnpm@11" setup_nodejs fetch_and_deploy_gh_release "wishlist" "cmintey/wishlist" "tarball" LATEST_APP_VERSION=$(get_latest_github_release "cmintey/wishlist") diff --git a/install/writefreely-install.sh b/install/writefreely-install.sh index e87e89184..335e3f7de 100644 --- a/install/writefreely-install.sh +++ b/install/writefreely-install.sh @@ -19,7 +19,7 @@ msg_ok "Installed Dependencies" setup_mariadb MARIADB_DB_NAME="writefreely" MARIADB_DB_USER="writefreely" setup_mariadb_db -fetch_and_deploy_gh_release "writefreely" "writefreely/writefreely" "prebuild" "latest" "/opt/writefreely" "writefreely_*_linux_amd64.tar.gz" +fetch_and_deploy_gh_release "writefreely" "writefreely/writefreely" "prebuild" "latest" "/opt/writefreely" "writefreely_*_linux_$(arch_resolve).tar.gz" msg_info "Setting up WriteFreely" cd /opt/writefreely diff --git a/install/yt-dlp-webui-install.sh b/install/yt-dlp-webui-install.sh index bfc69c2aa..fb6665ede 100644 --- a/install/yt-dlp-webui-install.sh +++ b/install/yt-dlp-webui-install.sh @@ -17,7 +17,7 @@ msg_info "Installing Dependencies" $STD apt install -y ffmpeg msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "yt-dlp-webui" "marcopiovanello/yt-dlp-web-ui" "singlefile" "latest" "/usr/local/bin" "yt-dlp-webui_linux-amd64" +fetch_and_deploy_gh_release "yt-dlp-webui" "marcopiovanello/yt-dlp-web-ui" "singlefile" "latest" "/usr/local/bin" "yt-dlp-webui_linux-$(arch_resolve)" fetch_and_deploy_gh_release "yt-dlp" "yt-dlp/yt-dlp" "singlefile" "latest" "/usr/local/bin" "yt-dlp" msg_info "Setting up YT-DLP-WEBUI" diff --git a/install/zerobyte-install.sh b/install/zerobyte-install.sh index 4d43d5e50..0625c5fa3 100644 --- a/install/zerobyte-install.sh +++ b/install/zerobyte-install.sh @@ -24,15 +24,15 @@ $STD apt-get install -y \ openssh-client msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "restic" "restic/restic" "singlefile" "latest" "/usr/local/bin" "restic_*_linux_amd64.bz2" +fetch_and_deploy_gh_release "restic" "restic/restic" "singlefile" "latest" "/usr/local/bin" "restic_*_linux_$(arch_resolve).bz2" mv /usr/local/bin/restic /usr/local/bin/restic.bz2 bzip2 -d /usr/local/bin/restic.bz2 chmod +x /usr/local/bin/restic -fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone-*-linux-amd64.zip" +fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone-*-linux-$(arch_resolve).zip" ln -sf /opt/rclone/rclone /usr/local/bin/rclone -fetch_and_deploy_gh_release "shoutrrr" "nicholas-fedor/shoutrrr" "prebuild" "latest" "/opt/shoutrrr" "shoutrrr_linux_amd64_*.tar.gz" +fetch_and_deploy_gh_release "shoutrrr" "nicholas-fedor/shoutrrr" "prebuild" "latest" "/opt/shoutrrr" "shoutrrr_linux_$(arch_resolve "amd64" "arm64v8")_*.tar.gz" ln -sf /opt/shoutrrr/shoutrrr /usr/local/bin/shoutrrr msg_info "Installing Bun" diff --git a/install/zerotier-one-install.sh b/install/zerotier-one-install.sh index 2dc1114d7..6fd368011 100644 --- a/install/zerotier-one-install.sh +++ b/install/zerotier-one-install.sh @@ -36,8 +36,44 @@ fi msg_ok "Setup Zerotier-One" msg_info "Setting up UI" -curl -O https://s3-us-west-1.amazonaws.com/key-networks/deb/ztncui/1/x86_64/ztncui_0.8.14_amd64.deb -dpkg -i ztncui_0.8.14_amd64.deb +if [[ "$(arch_resolve)" == "arm64" ]]; then + $STD apt-get install -y build-essential python3 openssl + NODE_VERSION="20" setup_nodejs + curl -fsSL "https://github.com/key-networks/ztncui/archive/refs/heads/master.tar.gz" -o /tmp/ztncui.tar.gz + $STD tar -xzf /tmp/ztncui.tar.gz -C /tmp + mkdir -p /opt/key-networks + cp -r /tmp/ztncui-master/src /opt/key-networks/ztncui + cd /opt/key-networks/ztncui + $STD npm install --omit=dev + cp etc/default.passwd etc/passwd + create_self_signed_cert "ztncui" + mkdir -p etc/tls + cp /etc/ssl/ztncui/ztncui.key etc/tls/privkey.pem + cp /etc/ssl/ztncui/ztncui.crt etc/tls/fullchain.pem + id -u ztncui &>/dev/null || useradd --system --home-dir /opt/key-networks/ztncui --shell /usr/sbin/nologin ztncui + chown -R ztncui:ztncui /opt/key-networks/ztncui + cat <<'EOF' >/lib/systemd/system/ztncui.service +[Unit] +Description=ztncui - ZeroTier network controller user interface +Documentation=https://key-networks.com +After=network.target + +[Service] +Type=simple +User=ztncui +WorkingDirectory=/opt/key-networks/ztncui +ExecStart=/usr/bin/node /opt/key-networks/ztncui/bin/www +Restart=on-failure + +[Install] +WantedBy=multi-user.target +EOF + systemctl daemon-reload + systemctl enable -q ztncui +else + curl -O https://s3-us-west-1.amazonaws.com/key-networks/deb/ztncui/1/x86_64/ztncui_0.8.14_amd64.deb + dpkg -i ztncui_0.8.14_amd64.deb +fi sh -c "echo ZT_TOKEN=$(cat /var/lib/zerotier-one/authtoken.secret) > /opt/key-networks/ztncui/.env" echo HTTPS_PORT=3443 >>/opt/key-networks/ztncui/.env echo NODE_ENV=production >>/opt/key-networks/ztncui/.env diff --git a/install/zitadel-install.sh b/install/zitadel-install.sh index e19f957e0..82f32e398 100644 --- a/install/zitadel-install.sh +++ b/install/zitadel-install.sh @@ -14,7 +14,7 @@ network_check update_os msg_info "Installing Dependencies (Patience)" -$STD apt install -y ca-certificates +$STD apt install -y ca-certificates lsof msg_ok "Installed Dependecies" PG_VERSION="17" setup_postgresql @@ -39,7 +39,7 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_ADMIN_USER;" } >>~/zitadel.creds msg_ok "Installed PostgreSQL" -fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "latest" "/usr/local/bin" "zitadel-linux-amd64.tar.gz" +fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "latest" "/usr/local/bin" "zitadel-linux-$(arch_resolve).tar.gz" msg_info "Setting up Zitadel Environments" mkdir -p /opt/zitadel diff --git a/install/zoraxy-install.sh b/install/zoraxy-install.sh index 5141f7185..f79b7f28e 100644 --- a/install/zoraxy-install.sh +++ b/install/zoraxy-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "zoraxy" "tobychui/zoraxy" "singlefile" "latest" "/opt/zoraxy" "zoraxy_linux_amd64" +fetch_and_deploy_gh_release "zoraxy" "tobychui/zoraxy" "singlefile" "latest" "/opt/zoraxy" "zoraxy_linux_$(arch_resolve)" ln -s /opt/zoraxy/zoraxy /usr/local/bin/zoraxy msg_info "Creating Service" diff --git a/install/zot-registry-install.sh b/install/zot-registry-install.sh index fad3682dd..39d7a2d48 100644 --- a/install/zot-registry-install.sh +++ b/install/zot-registry-install.sh @@ -17,7 +17,7 @@ msg_info "Installing Dependencies" $STD apt install -y apache2-utils msg_ok "Installed Dependencies" -fetch_and_deploy_gh_release "zot" "project-zot/zot" "singlefile" "latest" "/usr/bin" "zot-linux-amd64" +fetch_and_deploy_gh_release "zot" "project-zot/zot" "singlefile" "latest" "/usr/bin" "zot-linux-$(arch_resolve)" msg_info "Configuring Zot Registry" mkdir -p /etc/zot diff --git a/install/zwave-js-ui-install.sh b/install/zwave-js-ui-install.sh index 620dcf241..89f0bdb5e 100644 --- a/install/zwave-js-ui-install.sh +++ b/install/zwave-js-ui-install.sh @@ -13,7 +13,7 @@ setting_up_container network_check update_os -fetch_and_deploy_gh_release "zwave-js-ui" "zwave-js/zwave-js-ui" "prebuild" "latest" "/opt/zwave-js-ui" "zwave-js-ui*-linux.zip" +fetch_and_deploy_gh_release "zwave-js-ui" "zwave-js/zwave-js-ui" "prebuild" "latest" "/opt/zwave-js-ui" "zwave-js-ui*-$(arch_resolve "linux" "linux-arm64").zip" msg_info "Configuring Z-Wave JS UI" mkdir -p /opt/zwave_store @@ -33,7 +33,7 @@ After=network-online.target [Service] User=root WorkingDirectory=/opt/zwave-js-ui -ExecStart=/opt/zwave-js-ui/zwave-js-ui-linux +ExecStart=/opt/zwave-js-ui/$(arch_resolve "zwave-js-ui-linux" "zwave-js-ui") EnvironmentFile=/opt/.env [Install] From 10d19362a2b434593b55adb21d4481eec04fe04d Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 19:13:50 +0000 Subject: [PATCH 60/98] Update CHANGELOG.md (#15309) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75d209573..f56feb0f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -505,6 +505,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### ✨ New Features + - [arm64] Port scripts between warracker-zwavejsui to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15291](https://github.com/community-scripts/ProxmoxVE/pull/15291)) - [arm64] Port scripts between thingsboard & wanderer to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15286](https://github.com/community-scripts/ProxmoxVE/pull/15286)) - [arm64] Port scripts between snowshare & thelounge to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15280](https://github.com/community-scripts/ProxmoxVE/pull/15280)) From edbd570adfabcc1d94ad42f555443e3d60532907 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 22 Jun 2026 21:46:52 +0200 Subject: [PATCH 62/98] Endurain: pin uv to the version required by the project (#15313) --- ct/endurain.sh | 2 ++ install/endurain-install.sh | 2 ++ misc/tools.func | 32 +++++++++++++++++--------------- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/ct/endurain.sh b/ct/endurain.sh index 664efe62a..ae372adf1 100644 --- a/ct/endurain.sh +++ b/ct/endurain.sh @@ -61,6 +61,8 @@ function update_script() { msg_info "Updating Backend" cd /opt/endurain/backend + UV_VERSION=$(grep -Po 'required-version\s*=\s*"\K[^"]+' pyproject.toml 2>/dev/null || echo "0.11.18") + UV_VERSION="$UV_VERSION" setup_uv $STD poetry export -f requirements.txt --output requirements.txt --without-hashes $STD uv venv --clear $STD uv pip install -r requirements.txt diff --git a/install/endurain-install.sh b/install/endurain-install.sh index 6aef73f66..805797204 100644 --- a/install/endurain-install.sh +++ b/install/endurain-install.sh @@ -81,6 +81,8 @@ msg_ok "Built Frontend" msg_info "Setting up Backend" cd /opt/endurain/backend +UV_VERSION=$(grep -Po 'required-version\s*=\s*"\K[^"]+' pyproject.toml 2>/dev/null || echo "0.11.18") +UV_VERSION="$UV_VERSION" setup_uv $STD uv tool install poetry $STD uv tool update-shell export PATH="/root/.local/bin:$PATH" diff --git a/misc/tools.func b/misc/tools.func index a1aa4be30..4a41f3ce3 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -8710,12 +8710,14 @@ setup_uv() { ensure_dependencies jq - # Fetch latest version - local LATEST_VERSION - LATEST_VERSION=$(get_latest_github_release "astral-sh/uv") || { - msg_error "Could not fetch latest uv version from GitHub API" - return 7 - } + # Fetch target version (pinned via UV_VERSION or latest release) + local TARGET_VERSION="${UV_VERSION:-}" + if [[ -z "$TARGET_VERSION" ]]; then + TARGET_VERSION=$(get_latest_github_release "astral-sh/uv") || { + msg_error "Could not fetch latest uv version from GitHub API" + return 7 + } + fi # Get currently installed version local INSTALLED_VERSION="" @@ -8723,9 +8725,9 @@ setup_uv() { INSTALLED_VERSION=$("$UV_BIN" --version 2>/dev/null | awk '{print $2}') fi - # Scenario 1: Already at latest version - if [[ -n "$INSTALLED_VERSION" && "$INSTALLED_VERSION" == "$LATEST_VERSION" ]]; then - cache_installed_version "uv" "$LATEST_VERSION" + # Scenario 1: Already at target version + if [[ -n "$INSTALLED_VERSION" && "$INSTALLED_VERSION" == "$TARGET_VERSION" ]]; then + cache_installed_version "uv" "$TARGET_VERSION" # Check if uvx is needed and missing if [[ "${USE_UVX:-NO}" == "YES" ]] && [[ ! -x "$UVX_BIN" ]]; then @@ -8738,13 +8740,13 @@ setup_uv() { fi # Scenario 2: New install or upgrade - if [[ -n "$INSTALLED_VERSION" && "$INSTALLED_VERSION" != "$LATEST_VERSION" ]]; then - msg_info "Upgrade uv from $INSTALLED_VERSION to $LATEST_VERSION" + if [[ -n "$INSTALLED_VERSION" && "$INSTALLED_VERSION" != "$TARGET_VERSION" ]]; then + msg_info "Upgrade uv from $INSTALLED_VERSION to $TARGET_VERSION" else - msg_info "Setup uv $LATEST_VERSION" + msg_info "Setup uv $TARGET_VERSION" fi - local UV_URL="https://github.com/astral-sh/uv/releases/download/${LATEST_VERSION}/${UV_TAR}" + local UV_URL="https://github.com/astral-sh/uv/releases/download/${TARGET_VERSION}/${UV_TAR}" if ! curl_with_retry "$UV_URL" "$TMP_DIR/uv.tar.gz"; then msg_error "Failed to download uv from $UV_URL" @@ -8799,8 +8801,8 @@ setup_uv() { msg_ok "Python $PYTHON_VERSION installed" fi - cache_installed_version "uv" "$LATEST_VERSION" - msg_ok "Setup uv $LATEST_VERSION" + cache_installed_version "uv" "$TARGET_VERSION" + msg_ok "Setup uv $TARGET_VERSION" } # Helper function to install uvx wrapper From 68bf362a9db2c9d7f972527adb29f504b55d8ae4 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 19:47:16 +0000 Subject: [PATCH 63/98] Update CHANGELOG.md (#15320) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f56feb0f7..f174084a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -496,6 +496,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - Endurain: pin uv to the version required by the project [@MickLesk](https://github.com/MickLesk) ([#15313](https://github.com/community-scripts/ProxmoxVE/pull/15313)) - add proxy headers to dispatcharr from #15143 [@asylumexp](https://github.com/asylumexp) ([#15293](https://github.com/community-scripts/ProxmoxVE/pull/15293)) - Fix-15015: check correct path for certbot [@galz55](https://github.com/galz55) ([#15034](https://github.com/community-scripts/ProxmoxVE/pull/15034)) - fix(romm): resolve 403 Forbidden error on nginx mod_zip installation [@hug-efrei](https://github.com/hug-efrei) ([#15134](https://github.com/community-scripts/ProxmoxVE/pull/15134)) From fd1dbf2ba1d14fd31a6f49e8ecec3fb2a7883ba5 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 22 Jun 2026 21:59:27 +0200 Subject: [PATCH 64/98] core:: skip LXC stack upgrade prompt in unattended mode (#15319) --- misc/build.func | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/misc/build.func b/misc/build.func index a0879a3d3..a04d76fb1 100644 --- a/misc/build.func +++ b/misc/build.func @@ -5722,6 +5722,11 @@ create_lxc_container() { return 0 fi + if [[ "${PHS_SILENT:-0}" == "1" || "${DISABLE_UPDATE,,}" == "yes" ]]; then + msg_info "Skipping host LXC stack upgrade prompt (unattended mode)" + return 2 + fi + msg_warn "An update for the Proxmox LXC stack is available" echo " pve-container: installed=${_pvec_i:-n/a} candidate=${_pvec_c:-n/a}" echo " lxc-pve : installed=${_lxcp_i:-n/a} candidate=${_lxcp_c:-n/a}" From 1cdf74dd414d340d553a73793e8b876d9360163e Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 22 Jun 2026 21:59:43 +0200 Subject: [PATCH 65/98] update-apps: sanitize service detection and fail on invalid names (#15318) --- tools/pve/update-apps.sh | 65 ++++++++++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/tools/pve/update-apps.sh b/tools/pve/update-apps.sh index e8164b9f7..6e2bd3aac 100644 --- a/tools/pve/update-apps.sh +++ b/tools/pve/update-apps.sh @@ -145,11 +145,35 @@ function header_info { EOF } +function sanitize_service_name() { + local name="${1//$'\r'/}" + name="${name//$'\n'/}" + [[ -z "$name" ]] && return 1 + [[ "$name" == *'#!'* ]] && return 1 + [[ ! "$name" =~ ^[a-zA-Z0-9._-]+$ ]] && return 1 + return 0 +} + +function validate_service_script() { + local name="$1" + sanitize_service_name "$name" || return 1 + curl -fsSL --max-time 10 -o /dev/null \ + "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${name}.sh" 2>/dev/null +} + function detect_service() { - pushd $(mktemp -d) >/dev/null - pct pull "$1" /usr/bin/update update 2>/dev/null - service=$(cat update | sed 's|.*/ct/||g' | sed 's|\.sh).*||g') - popd >/dev/null + local container="$1" + local tmpdir update_file + service="" + tmpdir=$(mktemp -d) + update_file="$tmpdir/update" + pct pull "$container" /usr/bin/update "$update_file" 2>/dev/null || true + if [[ ! -s "$update_file" ]]; then + rm -rf "$tmpdir" + return 1 + fi + service=$(grep -oE '/ct/[a-zA-Z0-9._-]+\.sh' "$update_file" 2>/dev/null | head -n1 | sed 's|.*/ct/||; s|\.sh$||') + rm -rf "$tmpdir" } function dry_run_container() { @@ -447,24 +471,33 @@ for container in $CHOICE; do #1) Detect service using the service name in the update command detect_service $container - #1.1) If update script not detected, return - if [ -z "${service}" ]; then - echo -e "${YW}[WARN]${CL} Update script not found. Skipping to next container" - log_result "$container" "(unknown)" "SKIPPED" "No update script found in container" - log_write "Container $container: SKIPPED — no update script found" + #1.1) If update script not detected or service name is invalid, skip + if [ -z "${service}" ] || ! sanitize_service_name "${service}"; then + echo -e "${RD}[ERROR]${CL} Could not detect a valid service name for container $container" + log_result "$container" "(unknown)" "ERROR" "Invalid or missing service name in /usr/bin/update" + log_write "Container $container: ERROR — invalid or missing service name" continue - else - echo -e "${BL}[INFO]${CL} Detected service: ${GN}${service}${CL}" - log_write "Container $container: detected service '$service'" fi + if ! validate_service_script "${service}"; then + echo -e "${RD}[ERROR]${CL} Service '${service}' does not resolve to ct/${service}.sh" + log_result "$container" "${service}" "ERROR" "No matching ct/${service}.sh script found" + log_write "Container $container: ERROR — ct/${service}.sh not found" + continue + fi + + echo -e "${BL}[INFO]${CL} Detected service: ${GN}${service}${CL}" + log_write "Container $container: detected service '${service}'" + #2) Extract service build/update resource requirements from config/installation file - script=$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${service}.sh) + script=$(curl -fsSL "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${service}.sh") #2.1) Check if the script downloaded successfully - if [ $? -ne 0 ]; then - echo -e "${RD}[ERROR]${CL} Issue while downloading install script." - echo -e "${YW}[WARN]${CL} Unable to assess build resource requirements. Proceeding with current resources." + if [ $? -ne 0 ] || [ -z "${script}" ]; then + echo -e "${RD}[ERROR]${CL} Failed to download ct/${service}.sh" + log_result "$container" "${service}" "ERROR" "Failed to download ct/${service}.sh" + log_write "Container $container (${service}): ERROR — failed to download install script" + continue fi config=$(pct config "$container") From f1321ce38b3516e1d5e2b5f358ff198c287a592e Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 19:59:57 +0000 Subject: [PATCH 66/98] Update CHANGELOG.md (#15321) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f174084a4..5a9bba0c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -516,6 +516,16 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - core: add pre-install storage health checks [@MickLesk](https://github.com/MickLesk) ([#15226](https://github.com/community-scripts/ProxmoxVE/pull/15226)) + - #### 🔧 Refactor + + - core:: skip LXC stack upgrade prompt in unattended mode [@MickLesk](https://github.com/MickLesk) ([#15319](https://github.com/community-scripts/ProxmoxVE/pull/15319)) + +### 🧰 Tools + + - #### 🔧 Refactor + + - update-apps: sanitize service detection and fail on invalid names [@MickLesk](https://github.com/MickLesk) ([#15318](https://github.com/community-scripts/ProxmoxVE/pull/15318)) + ## 2026-06-21 ### 🚀 Updated Scripts From 084993ba605553a274763760233b176d19e3bdf7 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 22 Jun 2026 22:00:23 +0200 Subject: [PATCH 68/98] VictoriaMetrics: resolve architecture before jq asset filter (#15316) --- install/victoriametrics-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/victoriametrics-install.sh b/install/victoriametrics-install.sh index 7adfe5e02..6768211bc 100644 --- a/install/victoriametrics-install.sh +++ b/install/victoriametrics-install.sh @@ -16,7 +16,7 @@ update_os msg_info "Getting latest version of VictoriaMetrics" victoriametrics_release=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases" | - jq -r --arg a "$arch_resolve" '.[] | select(.assets[].name | match("^victoria-metrics-linux-" + $a + "-v[0-9.]+.tar.gz$")) | .tag_name' | + jq -r --arg a "$(arch_resolve)" '.[] | select(.assets[].name | match("^victoria-metrics-linux-" + $a + "-v[0-9.]+.tar.gz$")) | .tag_name' | head -n 1) victoriametrics_filename="victoria-metrics-linux-$(arch_resolve)-${victoriametrics_release}.tar.gz" vmutils_filename="vmutils-linux-$(arch_resolve)-${victoriametrics_release}.tar.gz" From fdd6704b3c817df8cc11425368f9be24ae71ef40 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 20:00:49 +0000 Subject: [PATCH 69/98] Update CHANGELOG.md (#15323) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a9bba0c9..bdae3ccf3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -496,6 +496,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - VictoriaMetrics: resolve architecture before jq asset filter [@MickLesk](https://github.com/MickLesk) ([#15316](https://github.com/community-scripts/ProxmoxVE/pull/15316)) - Endurain: pin uv to the version required by the project [@MickLesk](https://github.com/MickLesk) ([#15313](https://github.com/community-scripts/ProxmoxVE/pull/15313)) - add proxy headers to dispatcharr from #15143 [@asylumexp](https://github.com/asylumexp) ([#15293](https://github.com/community-scripts/ProxmoxVE/pull/15293)) - Fix-15015: check correct path for certbot [@galz55](https://github.com/galz55) ([#15034](https://github.com/community-scripts/ProxmoxVE/pull/15034)) From bd228edb21419abbd2a6d396535bb90096000328 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 22 Jun 2026 22:01:40 +0200 Subject: [PATCH 70/98] tools.func: refresh ruby-build when requested version is missing (#15315) --- misc/tools.func | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/misc/tools.func b/misc/tools.func index 4a41f3ce3..14c86488e 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -8452,29 +8452,34 @@ setup_ruby() { fi # Install ruby-build plugin - if [[ ! -d "$RBENV_DIR/plugins/ruby-build" ]]; then + _install_ruby_build_plugin() { local RUBY_BUILD_RELEASE RUBY_BUILD_RELEASE=$(get_latest_github_release "rbenv/ruby-build") || { msg_error "Failed to fetch latest ruby-build version from GitHub" - rm -rf "$TMP_DIR" return 7 } if ! curl_with_retry "https://github.com/rbenv/ruby-build/archive/refs/tags/v${RUBY_BUILD_RELEASE}.tar.gz" "$TMP_DIR/ruby-build.tar.gz"; then msg_error "Failed to download ruby-build" msg_error "Hint: Check connectivity to github.com/rbenv/ruby-build" - rm -rf "$TMP_DIR" return 7 fi tar -xzf "$TMP_DIR/ruby-build.tar.gz" -C "$TMP_DIR" || { msg_error "Failed to extract ruby-build" - rm -rf "$TMP_DIR" return 251 } mkdir -p "$RBENV_DIR/plugins/ruby-build" cp -r "$TMP_DIR/ruby-build-${RUBY_BUILD_RELEASE}/." "$RBENV_DIR/plugins/ruby-build/" + return 0 + } + + if [[ ! -d "$RBENV_DIR/plugins/ruby-build" ]]; then + _install_ruby_build_plugin || { + rm -rf "$TMP_DIR" + return 7 + } fi # Setup PATH and install Ruby version @@ -8482,6 +8487,14 @@ setup_ruby() { eval "$("$RBENV_BIN" init - bash)" 2>/dev/null || true if ! "$RBENV_BIN" versions --bare 2>/dev/null | grep -qx "$RUBY_VERSION"; then + if [[ ! -f "$RBENV_DIR/plugins/ruby-build/share/ruby-build/$RUBY_VERSION" ]]; then + msg_info "Updating ruby-build definitions" + _install_ruby_build_plugin || { + rm -rf "$TMP_DIR" + return 7 + } + msg_ok "Updated ruby-build definitions" + fi $STD "$RBENV_BIN" install "$RUBY_VERSION" || { msg_error "Failed to install Ruby $RUBY_VERSION" rm -rf "$TMP_DIR" From d87905029385abfe5657dd6832de9d73aa613326 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 20:02:04 +0000 Subject: [PATCH 71/98] Update CHANGELOG.md (#15324) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bdae3ccf3..96662cac8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -513,6 +513,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ### 💾 Core + - #### 🐞 Bug Fixes + + - tools.func: refresh ruby-build when requested version is missing [@MickLesk](https://github.com/MickLesk) ([#15315](https://github.com/community-scripts/ProxmoxVE/pull/15315)) + - #### ✨ New Features - core: add pre-install storage health checks [@MickLesk](https://github.com/MickLesk) ([#15226](https://github.com/community-scripts/ProxmoxVE/pull/15226)) From cfb5114d8b917285712df38f67b61ee311db1d46 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 22 Jun 2026 22:02:17 +0200 Subject: [PATCH 72/98] invoiceshelf: use pnpm instead of yarn for frontend build (#15312) --- ct/invoiceshelf.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/ct/invoiceshelf.sh b/ct/invoiceshelf.sh index 0e6c8fbe7..5d2faa82d 100644 --- a/ct/invoiceshelf.sh +++ b/ct/invoiceshelf.sh @@ -53,12 +53,11 @@ function update_script() { cd /opt/invoiceshelf $STD composer install --no-dev --optimize-autoloader if command -v corepack >/dev/null 2>&1; then - - $STD corepack yarn install - $STD corepack yarn build + $STD corepack pnpm install + $STD corepack pnpm run build else - $STD yarn install - $STD yarn build + $STD pnpm install + $STD pnpm run build fi $STD php artisan migrate --force $STD php artisan optimize:clear From 7ac60ac88eb36ffbb832fcf56fb7f9f03d517dfa Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 20:02:33 +0000 Subject: [PATCH 73/98] Update CHANGELOG.md (#15325) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 96662cac8..2c7fd4c2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -496,6 +496,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - invoiceshelf: use pnpm instead of yarn for frontend build [@MickLesk](https://github.com/MickLesk) ([#15312](https://github.com/community-scripts/ProxmoxVE/pull/15312)) - VictoriaMetrics: resolve architecture before jq asset filter [@MickLesk](https://github.com/MickLesk) ([#15316](https://github.com/community-scripts/ProxmoxVE/pull/15316)) - Endurain: pin uv to the version required by the project [@MickLesk](https://github.com/MickLesk) ([#15313](https://github.com/community-scripts/ProxmoxVE/pull/15313)) - add proxy headers to dispatcharr from #15143 [@asylumexp](https://github.com/asylumexp) ([#15293](https://github.com/community-scripts/ProxmoxVE/pull/15293)) From 9b619969ad346ac5d5dd599b856daef2c84c1b3d Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 23 Jun 2026 08:06:36 +1200 Subject: [PATCH 75/98] update: esphome to install and run ESPHome Device Builder (#15195) --- ct/esphome.sh | 36 ++++++++++++++++++++---------------- install/esphome-install.sh | 12 ++++++------ 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/ct/esphome.sh b/ct/esphome.sh index 5695991a0..4dcf1ea06 100644 --- a/ct/esphome.sh +++ b/ct/esphome.sh @@ -24,13 +24,14 @@ function update_script() { header_info check_container_storage check_container_resources - if [[ ! -f /etc/systemd/system/esphomeDashboard.service ]]; then + if [[ ! -f /etc/systemd/system/esphome-device-builder.service && ! -f /etc/systemd/system/esphomeDashboard.service ]]; then msg_error "No ${APP} Installation Found!" exit fi msg_info "Stopping Service" - systemctl stop esphomeDashboard + systemctl stop esphome-device-builder 2>/dev/null || true + systemctl stop esphomeDashboard 2>/dev/null || true msg_ok "Stopped Service" VENV_PATH="/opt/esphome/.venv" @@ -46,33 +47,36 @@ function update_script() { $STD uv venv --clear "$VENV_PATH" $STD "$VENV_PATH/bin/python" -m ensurepip --upgrade $STD "$VENV_PATH/bin/python" -m pip install --upgrade pip - $STD "$VENV_PATH/bin/python" -m pip install esphome tornado esptool + $STD "$VENV_PATH/bin/python" -m pip install esphome esphome-device-builder esptool msg_ok "Migrated to uv/venv" else - msg_info "Updating ESPHome" + msg_info "Updating ESPHome Device Builder" PYTHON_VERSION="3.12" setup_uv - $STD "$VENV_PATH/bin/python" -m pip install --upgrade esphome tornado esptool - msg_ok "Updated ESPHome" + $STD "$VENV_PATH/bin/python" -m pip install --upgrade esphome esphome-device-builder esptool + msg_ok "Updated ESPHome Device Builder" fi - SERVICE_FILE="/etc/systemd/system/esphomeDashboard.service" - if ! grep -q "${VENV_PATH}/bin/esphome" "$SERVICE_FILE"; then - msg_info "Updating systemd service" - cat <"$SERVICE_FILE" + + msg_info "Migrating to ESPHome Device Builder service" + if [[ -f /etc/systemd/system/esphomeDashboard.service ]]; then + systemctl disable -q esphomeDashboard 2>/dev/null || true + rm -f /etc/systemd/system/esphomeDashboard.service + fi + cat </etc/systemd/system/esphome-device-builder.service [Unit] -Description=ESPHome Dashboard +Description=ESPHome Device Builder After=network.target [Service] -ExecStart=${VENV_PATH}/bin/esphome dashboard /root/config/ +ExecStart=${VENV_PATH}/bin/esphome-device-builder /root/config/ Restart=always User=root [Install] WantedBy=multi-user.target EOF - $STD systemctl daemon-reload - msg_ok "Updated systemd service" - fi + $STD systemctl daemon-reload + $STD systemctl enable esphome-device-builder + msg_ok "Migrated to ESPHome Device Builder service" msg_info "Linking esphome to /usr/local/bin" rm -f /usr/local/bin/esphome @@ -80,7 +84,7 @@ EOF msg_ok "Linked esphome binary" msg_info "Starting Service" - systemctl start esphomeDashboard + systemctl start esphome-device-builder msg_ok "Started Service" msg_ok "Updated successfully!" exit diff --git a/install/esphome-install.sh b/install/esphome-install.sh index 9b6a665c8..1b5b7367d 100644 --- a/install/esphome-install.sh +++ b/install/esphome-install.sh @@ -26,8 +26,8 @@ cd /opt/esphome $STD uv venv --clear /opt/esphome/.venv $STD /opt/esphome/.venv/bin/python -m ensurepip --upgrade $STD /opt/esphome/.venv/bin/python -m pip install --upgrade pip -$STD /opt/esphome/.venv/bin/python -m pip install esphome tornado esptool -msg_ok "Setup and Installed ESPHome" +$STD /opt/esphome/.venv/bin/python -m pip install esphome esphome-device-builder esptool +msg_ok "Setup and Installed ESPHome Device Builder" msg_info "Linking esphome to /usr/local/bin" rm -f /usr/local/bin/esphome @@ -36,13 +36,13 @@ msg_ok "Linked esphome binary" msg_info "Creating Service" mkdir -p /root/config -cat </etc/systemd/system/esphomeDashboard.service +cat </etc/systemd/system/esphome-device-builder.service [Unit] -Description=ESPHome Dashboard +Description=ESPHome Device Builder After=network.target [Service] -ExecStart=/opt/esphome/.venv/bin/esphome dashboard /root/config/ +ExecStart=/opt/esphome/.venv/bin/esphome-device-builder /root/config/ Restart=always User=root @@ -50,7 +50,7 @@ User=root WantedBy=multi-user.target EOF -systemctl enable -q --now esphomeDashboard +systemctl enable -q --now esphome-device-builder msg_ok "Created Service" motd_ssh From a96402797e7f35489be0401c6dbbb67579327d2a Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 20:07:11 +0000 Subject: [PATCH 76/98] Update CHANGELOG.md (#15327) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c7fd4c2a..f7a6223c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -508,6 +508,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### ✨ New Features + - update: esphome to install and run ESPHome Device Builder [@jesserockz](https://github.com/jesserockz) ([#15195](https://github.com/community-scripts/ProxmoxVE/pull/15195)) - [arm64] Port scripts between warracker-zwavejsui to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15291](https://github.com/community-scripts/ProxmoxVE/pull/15291)) - [arm64] Port scripts between thingsboard & wanderer to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15286](https://github.com/community-scripts/ProxmoxVE/pull/15286)) - [arm64] Port scripts between snowshare & thelounge to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15280](https://github.com/community-scripts/ProxmoxVE/pull/15280)) From b18e9298b1bcd4b28cd798b696d97f1611a0f964 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Tue, 23 Jun 2026 06:31:44 +0200 Subject: [PATCH 77/98] Implement local _disable_update for conditional upgrade handling Add a local variable to manage update disabling based on environment settings. --- misc/build.func | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/misc/build.func b/misc/build.func index a04d76fb1..250d2a2a9 100644 --- a/misc/build.func +++ b/misc/build.func @@ -5721,7 +5721,8 @@ create_lxc_container() { msg_debug "No newer candidate for pve-container/lxc-pve (installed=$_pvec_i/$_lxcp_i, cand=$_pvec_c/$_lxcp_c)" return 0 fi - + local _disable_update="${DISABLE_UPDATE:-no}" + if [[ "${PHS_SILENT:-0}" == "1" || "${_disable_update,,}" == "yes" ]]; then if [[ "${PHS_SILENT:-0}" == "1" || "${DISABLE_UPDATE,,}" == "yes" ]]; then msg_info "Skipping host LXC stack upgrade prompt (unattended mode)" return 2 From aab46b25e3e774274762214e52f20767744e7f48 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 04:32:10 +0000 Subject: [PATCH 78/98] Update CHANGELOG.md (#15330) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7a6223c0..9f046d982 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -486,6 +486,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-06-23 + ## 2026-06-22 ### 🆕 New Scripts From 89b6678d1fb8566465443ef0a5a1a5a76814f7e4 Mon Sep 17 00:00:00 2001 From: l0caldadmin <153696487+l0caldadmin@users.noreply.github.com> Date: Mon, 22 Jun 2026 22:25:51 -0700 Subject: [PATCH 79/98] Fix syntax error in build function (#15337) --- misc/build.func | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/build.func b/misc/build.func index 250d2a2a9..e9caa476d 100644 --- a/misc/build.func +++ b/misc/build.func @@ -5821,7 +5821,7 @@ create_lxc_container() { ;; *) return 2 ;; esac - } + ;; ARCH="$(dpkg --print-architecture)" From 23ee4c37226a59fca99cc9439a344da5d974b1ef Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 05:26:16 +0000 Subject: [PATCH 80/98] Update CHANGELOG.md (#15339) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f046d982..950f0b0d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -488,6 +488,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-06-23 +### 💾 Core + + - Fix syntax error in build function [@l0caldadmin](https://github.com/l0caldadmin) ([#15337](https://github.com/community-scripts/ProxmoxVE/pull/15337)) + ## 2026-06-22 ### 🆕 New Scripts From 52e4e5ff39b2f605b72d7e5e85aee2e096aed98a Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Tue, 23 Jun 2026 07:29:05 +0200 Subject: [PATCH 81/98] fix(build.func): remove duplicate if statement causing syntax error on container creation (#15338) * Initial plan * fix(build.func): remove duplicate if statement causing syntax error --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> --- misc/build.func | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/misc/build.func b/misc/build.func index e9caa476d..38c331945 100644 --- a/misc/build.func +++ b/misc/build.func @@ -5721,9 +5721,8 @@ create_lxc_container() { msg_debug "No newer candidate for pve-container/lxc-pve (installed=$_pvec_i/$_lxcp_i, cand=$_pvec_c/$_lxcp_c)" return 0 fi - local _disable_update="${DISABLE_UPDATE:-no}" + local _disable_update="${DISABLE_UPDATE:-no}" if [[ "${PHS_SILENT:-0}" == "1" || "${_disable_update,,}" == "yes" ]]; then - if [[ "${PHS_SILENT:-0}" == "1" || "${DISABLE_UPDATE,,}" == "yes" ]]; then msg_info "Skipping host LXC stack upgrade prompt (unattended mode)" return 2 fi From f7dff0a6425b711f167a1b413d829d90f9edac7c Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 05:29:32 +0000 Subject: [PATCH 82/98] Update CHANGELOG.md (#15341) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 950f0b0d1..73dd38beb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -492,6 +492,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - Fix syntax error in build function [@l0caldadmin](https://github.com/l0caldadmin) ([#15337](https://github.com/community-scripts/ProxmoxVE/pull/15337)) +### ❔ Uncategorized + + - fix(build.func): remove duplicate if statement causing syntax error on container creation [@Copilot](https://github.com/Copilot) ([#15338](https://github.com/community-scripts/ProxmoxVE/pull/15338)) + ## 2026-06-22 ### 🆕 New Scripts From e076322c0fcb3fa7cad77271dd2f1f9d3c7c9ee8 Mon Sep 17 00:00:00 2001 From: Luna <69462155+ServerBP@users.noreply.github.com> Date: Tue, 23 Jun 2026 07:39:36 +0200 Subject: [PATCH 83/98] fix: close lxc build function (#15343) --- misc/build.func | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/build.func b/misc/build.func index 38c331945..4dee28f87 100644 --- a/misc/build.func +++ b/misc/build.func @@ -5820,7 +5820,7 @@ create_lxc_container() { ;; *) return 2 ;; esac - ;; + } ARCH="$(dpkg --print-architecture)" From eabfaf25dc4833707b875fd64f3b798ef4e1f816 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 05:39:57 +0000 Subject: [PATCH 84/98] Update CHANGELOG.md (#15345) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73dd38beb..e4a99585a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -492,6 +492,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - Fix syntax error in build function [@l0caldadmin](https://github.com/l0caldadmin) ([#15337](https://github.com/community-scripts/ProxmoxVE/pull/15337)) + - #### 🐞 Bug Fixes + + - fix: close lxc build function [@ServerBP](https://github.com/ServerBP) ([#15343](https://github.com/community-scripts/ProxmoxVE/pull/15343)) + ### ❔ Uncategorized - fix(build.func): remove duplicate if statement causing syntax error on container creation [@Copilot](https://github.com/Copilot) ([#15338](https://github.com/community-scripts/ProxmoxVE/pull/15338)) From 33a18190fcbb1b6740c74722f9cb70b2e9c697da Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Tue, 23 Jun 2026 07:48:52 +0200 Subject: [PATCH 85/98] fix(librenms): run daily.sh as librenms user with git available (#15314) --- ct/librenms.sh | 17 ++++++++++++++--- install/librenms-install.sh | 11 +++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/ct/librenms.sh b/ct/librenms.sh index e5dd91fc9..7404dd93e 100644 --- a/ct/librenms.sh +++ b/ct/librenms.sh @@ -29,10 +29,21 @@ function update_script() { exit fi setup_mariadb + ensure_dependencies git + if [[ ! -d /opt/librenms/.git ]]; then + msg_info "Initializing LibreNMS git metadata" + LIBRENMS_VERSION=$(cat ~/.librenms 2>/dev/null) + cd /opt/librenms + git init -q + git remote add origin https://github.com/librenms/librenms.git + git fetch --depth 1 origin "refs/tags/v${LIBRENMS_VERSION}" 2>/dev/null || + git fetch --depth 1 origin "refs/tags/${LIBRENMS_VERSION}" 2>/dev/null || true + git checkout -qf FETCH_HEAD 2>/dev/null || true + chown -R librenms:librenms .git + msg_ok "Initialized LibreNMS git metadata" + fi msg_info "Updating LibreNMS" - su librenms - cd /opt/librenms - ./daily.sh + $STD su - librenms -s /bin/bash -c 'cd /opt/librenms && ./daily.sh' msg_ok "Updated LibreNMS" exit } diff --git a/install/librenms-install.sh b/install/librenms-install.sh index 9fa2a0f27..b50472227 100644 --- a/install/librenms-install.sh +++ b/install/librenms-install.sh @@ -17,6 +17,7 @@ msg_info "Installing Dependencies" $STD apt install -y \ acl \ fping \ + git \ graphviz \ imagemagick \ mtr-tiny \ @@ -64,6 +65,16 @@ EOF chown -R librenms:librenms /opt/librenms chmod 771 /opt/librenms chmod -R ug=rwX /opt/librenms/bootstrap/cache /opt/librenms/storage /opt/librenms/logs /opt/librenms/rrd +if [[ ! -d /opt/librenms/.git ]]; then + LIBRENMS_VERSION=$(cat ~/.librenms 2>/dev/null) + cd /opt/librenms + git init -q + git remote add origin https://github.com/librenms/librenms.git + git fetch --depth 1 origin "refs/tags/v${LIBRENMS_VERSION}" 2>/dev/null || + git fetch --depth 1 origin "refs/tags/${LIBRENMS_VERSION}" 2>/dev/null || true + git checkout -qf FETCH_HEAD 2>/dev/null || true + chown -R librenms:librenms .git +fi msg_ok "Configured LibreNMS" msg_info "Configure MariaDB" From 5fe4c20cccad8dff563a66c94683b62926bf2ffb Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 05:49:14 +0000 Subject: [PATCH 86/98] Update CHANGELOG.md (#15346) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4a99585a..3e0e38586 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -488,6 +488,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit ## 2026-06-23 +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - LibreNMS: run daily.sh as librenms user with git available [@MickLesk](https://github.com/MickLesk) ([#15314](https://github.com/community-scripts/ProxmoxVE/pull/15314)) + ### 💾 Core - Fix syntax error in build function [@l0caldadmin](https://github.com/l0caldadmin) ([#15337](https://github.com/community-scripts/ProxmoxVE/pull/15337)) From 812200ccd64b8bd2f861a9007b3d94eefbd51afe Mon Sep 17 00:00:00 2001 From: Brad Baker Date: Tue, 23 Jun 2026 16:08:27 +1000 Subject: [PATCH 87/98] termix - patch tmp nginx behaviour to match the install script (#15283) * Update Nginx configuration and service files to deal with /tmp update issues Create necessary directories and configuration files for Nginx service. * Refactor pidfile.conf creation in termix.sh Reformatted the creation of pidfile.conf for consistency. * Clean up old nginx configuration files Remove old nginx configuration files before creating new ones. * Update ct/termix.sh Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> * Update ct/termix.sh Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> * Update ct/termix.sh only create if it doesn't exist * Update termix.sh * Fix heredoc syntax --------- Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> Co-authored-by: Sam Heinz --- ct/termix.sh | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/ct/termix.sh b/ct/termix.sh index 8b3140b71..a7551f6e0 100644 --- a/ct/termix.sh +++ b/ct/termix.sh @@ -206,9 +206,25 @@ EOF sed -i 's|/app/html|/opt/termix/html|g' /etc/nginx/nginx.conf sed -i 's|/app/nginx|/opt/termix/nginx|g' /etc/nginx/nginx.conf sed -i 's|listen ${PORT};|listen 80;|g' /etc/nginx/nginx.conf - rm -f /etc/systemd/system/nginx.service.d/pidfile.conf rm -f /etc/tmpfiles.d/nginx-termix.conf + + if [ ! -d /tmp/nginx ]; then + mkdir -p /tmp/nginx + fi + + if [ ! -f /etc/tmpfiles.d/nginx-termix.conf ]; then + echo "d /tmp/nginx 0755 nobody nogroup -" >/etc/tmpfiles.d/nginx-termix.conf + fi + + if [ ! -f /etc/systemd/system/nginx.service.d/pidfile.conf ]; then + mkdir -p /etc/systemd/system/nginx.service.d/ + cat <<'EOF' >/etc/systemd/system/nginx.service.d/pidfile.conf +[Service] +PIDFile=/tmp/nginx/nginx.pid +EOF + fi + systemctl daemon-reload nginx -t && systemctl restart nginx msg_ok "Updated Nginx Configuration" From 13f348ce1bd3d655e71b06cf87df9c1b996dcb81 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 06:08:55 +0000 Subject: [PATCH 88/98] Update CHANGELOG.md (#15347) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e0e38586..cec09cafc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -494,6 +494,10 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - LibreNMS: run daily.sh as librenms user with git available [@MickLesk](https://github.com/MickLesk) ([#15314](https://github.com/community-scripts/ProxmoxVE/pull/15314)) + - #### ✨ New Features + + - termix - patch tmp nginx behaviour to match the install script [@xyzulu](https://github.com/xyzulu) ([#15283](https://github.com/community-scripts/ProxmoxVE/pull/15283)) + ### 💾 Core - Fix syntax error in build function [@l0caldadmin](https://github.com/l0caldadmin) ([#15337](https://github.com/community-scripts/ProxmoxVE/pull/15337)) From a1c7097ef5c514f3b7ca1cb53cb5997d1262f288 Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Tue, 23 Jun 2026 21:49:52 +1000 Subject: [PATCH 89/98] [arm64] port pve scripts to support arm64 (#15288) --- tools/pve/hw-acceleration.sh | 5 +++++ tools/pve/microcode.sh | 6 ++++++ tools/pve/pbs-microcode.sh | 6 ++++++ tools/pve/pbs3-upgrade.sh | 6 ++++++ tools/pve/pbs4-upgrade.sh | 6 ++++++ tools/pve/post-pbs-install.sh | 12 ++++++++++++ tools/pve/post-pmg-install.sh | 5 +++++ tools/pve/post-pve-install.sh | 12 ++++++++++++ tools/pve/pve8-upgrade.sh | 6 ++++++ 9 files changed, 64 insertions(+) diff --git a/tools/pve/hw-acceleration.sh b/tools/pve/hw-acceleration.sh index a8727b695..d983157be 100644 --- a/tools/pve/hw-acceleration.sh +++ b/tools/pve/hw-acceleration.sh @@ -54,6 +54,11 @@ if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then exit fi +if [ "$(dpkg --print-architecture 2>/dev/null)" = "arm64" ]; then + echo -e "${RD}Intel HW acceleration is only available on x86 (Intel) systems.${CL}" + exit 0 +fi + whiptail --backtitle "Proxmox VE Helper Scripts" --title "Add Intel HW Acceleration" --yesno "This Will Add Intel HW Acceleration to an existing LXC Container. Proceed?" 8 72 NODE=$(hostname) PREV_MENU=() diff --git a/tools/pve/microcode.sh b/tools/pve/microcode.sh index b1b236ad5..4ac47b51d 100644 --- a/tools/pve/microcode.sh +++ b/tools/pve/microcode.sh @@ -139,6 +139,12 @@ if ! command -v pveversion >/dev/null 2>&1; then exit fi +if [ "$(dpkg --print-architecture 2>/dev/null)" = "arm64" ]; then + header_info + msg_error "CPU microcode updates are only available for x86 (Intel/AMD) systems." + exit 0 +fi + whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE Processor Microcode" --yesno "This will check for CPU microcode packages with the option to install. Proceed?" 10 58 msg_info "Checking CPU Vendor" diff --git a/tools/pve/pbs-microcode.sh b/tools/pve/pbs-microcode.sh index 0c6222899..e592e8e95 100644 --- a/tools/pve/pbs-microcode.sh +++ b/tools/pve/pbs-microcode.sh @@ -157,6 +157,12 @@ if [ ! -f /etc/proxmox-backup/user.cfg ]; then exit fi +if [ "$(dpkg --print-architecture 2>/dev/null)" = "arm64" ]; then + header_info + msg_error "CPU microcode updates are only available for x86 (Intel/AMD) systems." + exit 0 +fi + whiptail --backtitle "Proxmox Backup Server Helper Scripts" \ --title "Proxmox Backup Server Processor Microcode" \ --yesno "This script searches for CPU microcode packages and offers the option to install them.\nProceed?" 10 68 diff --git a/tools/pve/pbs3-upgrade.sh b/tools/pve/pbs3-upgrade.sh index aa41e3512..fe0f14790 100644 --- a/tools/pve/pbs3-upgrade.sh +++ b/tools/pve/pbs3-upgrade.sh @@ -175,4 +175,10 @@ while true; do esac done +if [ "$(dpkg --print-architecture 2>/dev/null)" = "arm64" ]; then + header_info + msg_error "This upgrade script targets the amd64 Proxmox repositories and is not supported on ARM64." + exit 1 +fi + start_routines diff --git a/tools/pve/pbs4-upgrade.sh b/tools/pve/pbs4-upgrade.sh index 73304b62d..172617fd6 100644 --- a/tools/pve/pbs4-upgrade.sh +++ b/tools/pve/pbs4-upgrade.sh @@ -199,4 +199,10 @@ while true; do esac done +if [ "$(dpkg --print-architecture 2>/dev/null)" = "arm64" ]; then + header_info + msg_error "This upgrade script targets the amd64 Proxmox repositories and is not supported on ARM64." + exit 1 +fi + start_routines diff --git a/tools/pve/post-pbs-install.sh b/tools/pve/post-pbs-install.sh index b099d7032..9c4af7664 100644 --- a/tools/pve/post-pbs-install.sh +++ b/tools/pve/post-pbs-install.sh @@ -135,6 +135,12 @@ EOF no) msg_error "Selected no to Correcting Debian Sources" ;; esac + if [[ "$(dpkg --print-architecture 2>/dev/null)" == "arm64" ]]; then + msg_ok "ARM64 detected - skipping Proxmox repository setup" + post_routines_common + return + fi + # --- Enterprise repo --- read -r state file <<<"$(repo_state_list pbs-enterprise)" case $state in @@ -209,6 +215,12 @@ EOF no) msg_error "Selected no to Correcting Debian Sources" ;; esac + if [[ "$(dpkg --print-architecture 2>/dev/null)" == "arm64" ]]; then + msg_ok "ARM64 detected - skipping Proxmox repository setup" + post_routines_common + return + fi + # --- Enterprise repo --- if component_exists_in_sources "pbs-enterprise"; then CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS Enterprise Repository" --menu \ diff --git a/tools/pve/post-pmg-install.sh b/tools/pve/post-pmg-install.sh index 2f8627358..519fe39de 100644 --- a/tools/pve/post-pmg-install.sh +++ b/tools/pve/post-pmg-install.sh @@ -53,6 +53,11 @@ if ! dpkg -s proxmox-mailgateway-container >/dev/null 2>&1 && exit 232 fi +if [ "$(dpkg --print-architecture 2>/dev/null)" = "arm64" ]; then + msg_error "Proxmox Mail Gateway does not support ARM64." + exit 1 +fi + repo_state() { # $1 = repo name (e.g. pmg-enterprise, pmg-no-subscription, pmgtest) local repo="$1" diff --git a/tools/pve/post-pve-install.sh b/tools/pve/post-pve-install.sh index 9e07cd906..ffecb812e 100644 --- a/tools/pve/post-pve-install.sh +++ b/tools/pve/post-pve-install.sh @@ -125,6 +125,12 @@ EOF no) msg_error "Selected no to Correcting Proxmox VE Sources" ;; esac + if [[ "$(dpkg --print-architecture 2>/dev/null)" == "arm64" ]]; then + msg_ok "ARM64 detected - skipping Proxmox repository setup" + post_routines_common + return + fi + CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PVE-ENTERPRISE" --menu "The 'pve-enterprise' repository is only available to users who have purchased a Proxmox VE subscription.\n \nDisable 'pve-enterprise' repository?" 14 58 2 \ "yes" " " \ "no" " " 3>&2 2>&1 1>&3) @@ -282,6 +288,12 @@ EOF esac fi + if [[ "$(dpkg --print-architecture 2>/dev/null)" == "arm64" ]]; then + msg_ok "ARM64 detected - skipping Proxmox repository setup" + post_routines_common + return + fi + # ---- PVE-ENTERPRISE ---- if component_exists_in_sources "pve-enterprise"; then CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" \ diff --git a/tools/pve/pve8-upgrade.sh b/tools/pve/pve8-upgrade.sh index 7149002ff..3db17a109 100644 --- a/tools/pve/pve8-upgrade.sh +++ b/tools/pve/pve8-upgrade.sh @@ -131,6 +131,12 @@ if ! command -v pveversion >/dev/null 2>&1; then exit fi +if [ "$(dpkg --print-architecture 2>/dev/null)" = "arm64" ]; then + header_info + msg_error "This upgrade script targets the amd64 Proxmox VE repositories and is not supported on ARM64." + exit 1 +fi + if ! pveversion | grep -Eq "pve-manager/(7\.4-(16|17|18|19))"; then header_info msg_error "This version of Proxmox Virtual Environment is not supported" From d3623d2da552004dfcec7170ebf23ff0925fbfc6 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 11:50:14 +0000 Subject: [PATCH 90/98] Update CHANGELOG.md (#15350) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cec09cafc..b828385eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -506,6 +506,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - fix: close lxc build function [@ServerBP](https://github.com/ServerBP) ([#15343](https://github.com/community-scripts/ProxmoxVE/pull/15343)) +### 🧰 Tools + + - #### ✨ New Features + + - [arm64] port pve scripts to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15288](https://github.com/community-scripts/ProxmoxVE/pull/15288)) + ### ❔ Uncategorized - fix(build.func): remove duplicate if statement causing syntax error on container creation [@Copilot](https://github.com/Copilot) ([#15338](https://github.com/community-scripts/ProxmoxVE/pull/15338)) From 97cf2ea2940c64201c1f8ddb3a527b9aee4a46fb Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Wed, 24 Jun 2026 02:20:47 +1000 Subject: [PATCH 91/98] fix docker update function (#15353) * fix docker update function * Update docker.sh --- ct/docker.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ct/docker.sh b/ct/docker.sh index d14a6901d..0ef27e8bc 100644 --- a/ct/docker.sh +++ b/ct/docker.sh @@ -27,12 +27,14 @@ function update_script() { msg_info "Updating base system" $STD apt update - $STD apt upgrade -y + $STD apt upgrade -y msg_ok "Base system updated" - msg_info "Updating Docker Engine" - $STD apt install --only-upgrade -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin - msg_ok "Docker Engine updated" + if dpkg-query -W -f='${Status}' docker-ce 2>/dev/null | grep -q "ok installed"; then + USE_DOCKER_REPO="true" setup_docker + else + setup_docker + fi if docker ps -a --format '{{.Image}}' | grep -q '^portainer/portainer-ce:latest$'; then msg_info "Updating Portainer" From 49a5bfeda3950366a56a9ce20d0be4968a28ee2a Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 16:21:18 +0000 Subject: [PATCH 92/98] Update CHANGELOG.md (#15355) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b828385eb..6ed1ec9d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -492,6 +492,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - fix docker update function [@asylumexp](https://github.com/asylumexp) ([#15353](https://github.com/community-scripts/ProxmoxVE/pull/15353)) - LibreNMS: run daily.sh as librenms user with git available [@MickLesk](https://github.com/MickLesk) ([#15314](https://github.com/community-scripts/ProxmoxVE/pull/15314)) - #### ✨ New Features From ef2a8408428c58780f6bcb97a9534f9ec92b5eb0 Mon Sep 17 00:00:00 2001 From: Sam Heinz Date: Wed, 24 Jun 2026 02:21:48 +1000 Subject: [PATCH 93/98] update jdk when updating crafty-controller (#15349) --- ct/crafty-controller.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ct/crafty-controller.sh b/ct/crafty-controller.sh index 2c31aee82..89b0012c2 100644 --- a/ct/crafty-controller.sh +++ b/ct/crafty-controller.sh @@ -46,6 +46,12 @@ function update_script() { restore_backup + msg_info "Updating TemurinJDK" + setup_java + $STD apt install -y temurin-{8,11,17,21,25}-jre + $STD update-alternatives --set java /usr/lib/jvm/temurin-25-jre-$(arch_resolve)/bin/java + msg_ok "Updated TemurinJDK" + msg_info "Updating Python dependencies" chown -R crafty:crafty /opt/crafty-controller cd /opt/crafty-controller/crafty/crafty-4 From 50eb6c37cf51cebc4a44cc8dd2a51fe6c0b2e029 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 16:22:20 +0000 Subject: [PATCH 94/98] Update CHANGELOG.md (#15356) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ed1ec9d2..53a591fbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -492,6 +492,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - #### 🐞 Bug Fixes + - update jdk when updating crafty-controller [@asylumexp](https://github.com/asylumexp) ([#15349](https://github.com/community-scripts/ProxmoxVE/pull/15349)) - fix docker update function [@asylumexp](https://github.com/asylumexp) ([#15353](https://github.com/community-scripts/ProxmoxVE/pull/15353)) - LibreNMS: run daily.sh as librenms user with git available [@MickLesk](https://github.com/MickLesk) ([#15314](https://github.com/community-scripts/ProxmoxVE/pull/15314)) From 5670e3721dfd168ac6be210ce43146c75482850c Mon Sep 17 00:00:00 2001 From: Marvin <51963571+d3v3lop3rDE@users.noreply.github.com> Date: Wed, 24 Jun 2026 03:37:18 +0200 Subject: [PATCH 95/98] enabling rewirte module in apache (#15360) The rewrite module is essential for beautiful domains like "https://myexample.com/problematicSite". With the currently provided setup these domains end up in a 404, as apache is not rewriting the domain. --- install/wordpress-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install/wordpress-install.sh b/install/wordpress-install.sh index 5cae303fe..52a14c7d0 100644 --- a/install/wordpress-install.sh +++ b/install/wordpress-install.sh @@ -47,6 +47,7 @@ cat </etc/apache2/sites-available/wordpress.conf EOF $STD a2ensite wordpress.conf $STD a2dissite 000-default.conf +$STD a2enmod rewrite systemctl reload apache2 msg_ok "Created Services" From 2acf3ba19e9bedbd6c061d5811442ba9661acc97 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 24 Jun 2026 01:37:44 +0000 Subject: [PATCH 96/98] Update CHANGELOG.md (#15363) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53a591fbc..aea653237 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -486,6 +486,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit +## 2026-06-24 + +### 🚀 Updated Scripts + + - enabling rewirte module in apache [@d3v3lop3rDE](https://github.com/d3v3lop3rDE) ([#15360](https://github.com/community-scripts/ProxmoxVE/pull/15360)) + ## 2026-06-23 ### 🚀 Updated Scripts From 0b94d4f54a9a81245ec5a520020991f957e765f0 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Wed, 24 Jun 2026 06:58:32 +0200 Subject: [PATCH 97/98] core: add var_http_proxy and var_http_no_proxy support (#15225) Co-authored-by: Cursor --- misc/alpine-install.func | 3 +- misc/build.func | 158 ++++++++++++++++++++++++++++++++++----- misc/core.func | 47 ++++++++++++ misc/install.func | 5 +- 4 files changed, 193 insertions(+), 20 deletions(-) diff --git a/misc/alpine-install.func b/misc/alpine-install.func index 874558e2f..893817a1f 100644 --- a/misc/alpine-install.func +++ b/misc/alpine-install.func @@ -138,6 +138,7 @@ network_check() { # This function updates the Container OS by running apk upgrade with mirror fallback update_os() { msg_info "Updating Container OS" + configure_http_proxy if ! $STD apk -U upgrade; then msg_warn "apk update failed (dl-cdn.alpinelinux.org), trying alternate mirrors..." local alpine_mirrors="mirror.init7.net ftp.halifax.rwth-aachen.de mirrors.edge.kernel.org alpine.mirror.wearetriple.com mirror.leaseweb.com uk.alpinelinux.org dl-2.alpinelinux.org dl-4.alpinelinux.org" @@ -243,7 +244,7 @@ EOF msg_ok "Customized Container" fi - echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update + echo 'set -a; [ -f /etc/profile.d/90-http-proxy.sh ] && . /etc/profile.d/90-http-proxy.sh; set +a; bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/'"${app}"'.sh)"' >/usr/bin/update chmod +x /usr/bin/update post_progress_to_api } diff --git a/misc/build.func b/misc/build.func index 4dee28f87..3ccd2102d 100644 --- a/misc/build.func +++ b/misc/build.func @@ -1018,6 +1018,9 @@ base_settings() { fi fi + HTTP_PROXY="${var_http_proxy:-}" + HTTP_NO_PROXY="${var_http_no_proxy:-}" + MTU=${var_mtu:-""} _sd_val="${var_searchdomain:-""}" [[ -n "$_sd_val" ]] && SD="-searchdomain=$_sd_val" || SD="" @@ -1071,7 +1074,7 @@ load_vars_file() { # Allowed var_* keys local VAR_WHITELIST=( - var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_github_token var_gpu var_keyctl + var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_github_token var_gpu var_http_no_proxy var_http_proxy var_keyctl var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu var_net var_nesting var_ns var_os var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage var_searchdomain @@ -1250,6 +1253,18 @@ load_vars_file() { continue fi ;; + var_http_proxy) + if [[ -n "$var_val" ]] && ! [[ "$var_val" =~ ^https?://[^[:space:]]+(:[0-9]+)?/?$ ]]; then + msg_warn "Invalid HTTP proxy URL '$var_val' in $file, ignoring" + continue + fi + ;; + var_http_no_proxy) + if [[ -n "$var_val" ]] && [[ ! "$var_val" =~ ^[a-zA-Z0-9.*_:/-]+(,[a-zA-Z0-9.*_:/-]+)*$ ]]; then + msg_warn "Invalid no_proxy value '$var_val' in $file, ignoring" + continue + fi + ;; var_container_storage | var_template_storage) # Validate that the storage exists and is active on the current node local _storage_status @@ -1289,7 +1304,7 @@ default_var_settings() { # Allowed var_* keys (alphabetically sorted) # Note: Removed var_ctid (can only exist once), var_ipv6_static (static IPs are unique) local VAR_WHITELIST=( - var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_github_token var_gpu var_keyctl + var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_github_token var_gpu var_http_no_proxy var_http_proxy var_keyctl var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu var_net var_nesting var_ns var_os var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage @@ -1369,6 +1384,10 @@ var_ssh=no # var_apt_cacher_ip=http://proxy.local # var_apt_cacher_ip=https://proxy.local:443 +# HTTP/HTTPS proxy (optional - for networks requiring a proxy) +# var_http_proxy=http://proxy.local:8080 +# var_http_no_proxy=localhost,127.0.0.1,.local + # Features/Tags/verbosity var_fuse=no var_tun=no @@ -1468,7 +1487,7 @@ get_app_defaults_path() { if ! declare -p VAR_WHITELIST >/dev/null 2>&1; then # Note: Removed var_ctid (can only exist once), var_ipv6_static (static IPs are unique) declare -ag VAR_WHITELIST=( - var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_github_token var_gpu var_keyctl + var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_github_token var_gpu var_http_no_proxy var_http_proxy var_keyctl var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu var_net var_nesting var_ns var_os var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage var_searchdomain @@ -1616,6 +1635,8 @@ _build_current_app_vars_tmp() { _ssh_auth="${SSH_AUTHORIZED_KEY:-}" _apt_cacher="${APT_CACHER:-}" _apt_cacher_ip="${APT_CACHER_IP:-}" + _http_proxy="${HTTP_PROXY:-${var_http_proxy:-}}" + _http_no_proxy="${HTTP_NO_PROXY:-${var_http_no_proxy:-}}" _fuse="${ENABLE_FUSE:-no}" _tun="${ENABLE_TUN:-no}" _gpu="${ENABLE_GPU:-no}" @@ -1667,6 +1688,8 @@ _build_current_app_vars_tmp() { [ -n "$_apt_cacher" ] && echo "var_apt_cacher=$(_sanitize_value "$_apt_cacher")" [ -n "$_apt_cacher_ip" ] && echo "var_apt_cacher_ip=$(_sanitize_value "$_apt_cacher_ip")" + [ -n "$_http_proxy" ] && echo "var_http_proxy=$(_sanitize_value "$_http_proxy")" + [ -n "$_http_no_proxy" ] && echo "var_http_no_proxy=$(_sanitize_value "$_http_no_proxy")" [ -n "$_fuse" ] && echo "var_fuse=$(_sanitize_value "$_fuse")" [ -n "$_tun" ] && echo "var_tun=$(_sanitize_value "$_tun")" @@ -1830,7 +1853,7 @@ advanced_settings() { TAGS="community-script${var_tags:+;${var_tags}}" fi local STEP=1 - local MAX_STEP=29 + local MAX_STEP=30 # Store values for back navigation - inherit from var_* app defaults local _ct_type="${var_unprivileged:-1}" @@ -1849,6 +1872,8 @@ advanced_settings() { local _ipv6_gate="" local _apt_cacher="${var_apt_cacher:-no}" local _apt_cacher_ip="${var_apt_cacher_ip:-}" + local _http_proxy="${var_http_proxy:-}" + local _http_no_proxy="${var_http_no_proxy:-}" local _mtu="${var_mtu:-}" local _sd="${var_searchdomain:-}" local _ns="${var_ns:-}" @@ -2626,9 +2651,46 @@ advanced_settings() { ;; # ═══════════════════════════════════════════════════════════════════════════ - # STEP 24: Container Timezone + # STEP 24: HTTP/HTTPS Proxy # ═══════════════════════════════════════════════════════════════════════════ 24) + local http_proxy_default_flag="--defaultno" + [[ -n "$_http_proxy" ]] && http_proxy_default_flag="" + + if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \ + --title "HTTP/HTTPS PROXY" \ + --ok-button "Next" --cancel-button "Back" \ + $http_proxy_default_flag \ + --yesno "\nUse HTTP/HTTPS proxy?\n\nRequired when internet access must go through a proxy server.\n(e.g. corporate networks)\n\n(App default: ${var_http_proxy:-none})" 14 62; then + if result=$(whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \ + --title "HTTP PROXY URL" \ + --inputbox "\nEnter HTTP proxy URL:\n(e.g. http://proxy.local:8080)" 12 62 "$_http_proxy" \ + 3>&1 1>&2 2>&3); then + _http_proxy="$result" + local _no_proxy_default="${_http_no_proxy:-localhost,127.0.0.1,.local}" + if result=$(whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \ + --title "NO_PROXY EXCEPTIONS" \ + --inputbox "\nEnter NO_PROXY exceptions (comma-separated):\nLeave empty for defaults." 12 62 "$_no_proxy_default" \ + 3>&1 1>&2 2>&3); then + _http_no_proxy="$result" + fi + fi + else + if [ $? -eq 1 ]; then + _http_proxy="" + _http_no_proxy="" + else + ((STEP--)) + continue + fi + fi + ((STEP++)) + ;; + + # ═══════════════════════════════════════════════════════════════════════════ + # STEP 25: Container Timezone + # ═══════════════════════════════════════════════════════════════════════════ + 25) local tz_hint="$_ct_timezone" [[ -z "$tz_hint" ]] && tz_hint="(empty - will use host timezone)" @@ -2651,9 +2713,9 @@ advanced_settings() { ;; # ═══════════════════════════════════════════════════════════════════════════ - # STEP 25: Container Protection + # STEP 26: Container Protection # ═══════════════════════════════════════════════════════════════════════════ - 25) + 26) local protect_default_flag="--defaultno" [[ "$_protect_ct" == "yes" || "$_protect_ct" == "1" ]] && protect_default_flag="" @@ -2675,9 +2737,9 @@ advanced_settings() { ;; # ═══════════════════════════════════════════════════════════════════════════ - # STEP 26: Device Node Creation (mknod) + # STEP 27: Device Node Creation (mknod) # ═══════════════════════════════════════════════════════════════════════════ - 26) + 27) local mknod_default_flag="--defaultno" [[ "$_enable_mknod" == "1" ]] && mknod_default_flag="" @@ -2699,9 +2761,9 @@ advanced_settings() { ;; # ═══════════════════════════════════════════════════════════════════════════ - # STEP 27: Mount Filesystems + # STEP 28: Mount Filesystems # ═══════════════════════════════════════════════════════════════════════════ - 27) + 28) local mount_hint="" [[ -n "$_mount_fs" ]] && mount_hint="$_mount_fs" || mount_hint="(none)" @@ -2722,9 +2784,9 @@ advanced_settings() { ;; # ═══════════════════════════════════════════════════════════════════════════ - # STEP 28: Optional host-side post-install hook (path on the Proxmox HOST) + # STEP 29: Optional host-side post-install hook (path on the Proxmox HOST) # ═══════════════════════════════════════════════════════════════════════════ - 28) + 29) local _hook_prompt="Optional: absolute path to a *.sh file ON THE PROXMOX HOST. It runs as root on the HOST (NOT in the LXC) after the container @@ -2774,9 +2836,9 @@ Leave empty to skip." ;; # ═══════════════════════════════════════════════════════════════════════════ - # STEP 29: Verbose Mode & Confirmation + # STEP 30: Verbose Mode & Confirmation # ═══════════════════════════════════════════════════════════════════════════ - 29) + 30) local verbose_default_flag="--defaultno" [[ "$_verbose" == "yes" ]] && verbose_default_flag="" @@ -2804,6 +2866,7 @@ Leave empty to skip." local tz_display="${_ct_timezone:-Host TZ}" local apt_display="${_apt_cacher:-no}" [[ "$_apt_cacher" == "yes" && -n "$_apt_cacher_ip" ]] && apt_display="$_apt_cacher_ip" + local http_proxy_display="${_http_proxy:-(none)}" local post_install_display="${_post_install:-(none)}" local post_install_warn="" @@ -2833,6 +2896,7 @@ Features: Advanced: Timezone: $tz_display APT Cacher: $apt_display + HTTP Proxy: $http_proxy_display Verbose: $_verbose Post-Install Script: ${post_install_display}${post_install_warn}" @@ -2876,6 +2940,8 @@ Advanced: CT_TIMEZONE="$_ct_timezone" APT_CACHER="$_apt_cacher" APT_CACHER_IP="$_apt_cacher_ip" + HTTP_PROXY="$_http_proxy" + HTTP_NO_PROXY="$_http_no_proxy" VERBOSE="$_verbose" var_post_install="$_post_install" @@ -2891,6 +2957,8 @@ Advanced: var_timezone="$_ct_timezone" var_apt_cacher="$_apt_cacher" var_apt_cacher_ip="$_apt_cacher_ip" + var_http_proxy="$_http_proxy" + var_http_no_proxy="$_http_no_proxy" # Format optional values [[ -n "$_mtu" ]] && MTU=",mtu=$_mtu" || MTU="" @@ -2928,6 +2996,7 @@ Advanced: [[ "${PROTECT_CT:-no}" == "yes" || "${PROTECT_CT:-no}" == "1" ]] && echo -e "${CONTAINERTYPE}${BOLD}${DGN}Protection: ${BGN}Enabled${CL}" [[ -n "${CT_TIMEZONE:-}" ]] && echo -e "${INFO}${BOLD}${DGN}Timezone: ${BGN}$CT_TIMEZONE${CL}" [[ "$APT_CACHER" == "yes" ]] && echo -e "${INFO}${BOLD}${DGN}APT Cacher: ${BGN}$APT_CACHER_IP${CL}" + [[ -n "${HTTP_PROXY:-}" ]] && echo -e "${INFO}${BOLD}${DGN}HTTP Proxy: ${BGN}$HTTP_PROXY${CL}" echo -e "${SEARCH}${BOLD}${DGN}Verbose Mode: ${BGN}$VERBOSE${CL}" echo -e "${CREATING}${BOLD}${RD}Creating an LXC of ${APP} using the above advanced settings${CL}" @@ -3765,6 +3834,47 @@ start() { # SECTION 8: CONTAINER CREATION & DEPLOYMENT # ============================================================================== +# ------------------------------------------------------------------------------ +# _apply_http_proxy_in_container() +# +# - Writes persistent proxy settings into the LXC before base package install +# - Ensures apt/apk/curl work behind corporate proxies during early setup +# ------------------------------------------------------------------------------ +_apply_http_proxy_in_container() { + local proxy="${HTTP_PROXY:-}" + local noproxy="${HTTP_NO_PROXY:-}" + [[ -z "$proxy" || -z "${CTID:-}" ]] && return 0 + [[ -z "$noproxy" ]] && noproxy="localhost,127.0.0.1,.local" + + msg_info "Applying HTTP proxy in container" + local tmpf + tmpf="$(mktemp)" + cat >"$tmpf" </dev/null 2>&1 || { + rm -f "$tmpf" + msg_warn "Failed to push HTTP proxy profile into container" + return 0 + } + pct exec "$CTID" -- chmod 644 /etc/profile.d/90-http-proxy.sh >/dev/null 2>&1 || true + + if [[ "$var_os" != "alpine" && "${APT_CACHER:-}" != "yes" ]]; then + cat >"$tmpf" </dev/null 2>&1 || true + fi + rm -f "$tmpf" + msg_ok "Applied HTTP proxy in container" +} + # ------------------------------------------------------------------------------ # build_container() # @@ -3891,6 +4001,12 @@ build_container() { export SESSION_ID="$SESSION_ID" export CACHER="$APT_CACHER" export CACHER_IP="$APT_CACHER_IP" + if [[ -n "${HTTP_PROXY:-}" ]]; then + export HTTP_PROXY HTTPS_PROXY="$HTTP_PROXY" http_proxy="$HTTP_PROXY" https_proxy="$HTTP_PROXY" + export NO_PROXY="${HTTP_NO_PROXY:-}" no_proxy="${HTTP_NO_PROXY:-}" + export var_http_proxy="$HTTP_PROXY" + export var_http_no_proxy="${HTTP_NO_PROXY:-}" + fi export tz="$timezone" export APPLICATION="$APP" export app="$NSAPP" @@ -4375,6 +4491,8 @@ EOF local install_exit_code=0 + _apply_http_proxy_in_container + # Continue with standard container setup if [ "$var_os" == "alpine" ]; then sleep 3 @@ -4382,10 +4500,13 @@ EOF https://dl-cdn.alpinelinux.org/alpine/latest-stable/main https://dl-cdn.alpinelinux.org/alpine/latest-stable/community EOF' - pct exec "$CTID" -- ash -c "apk add bash newt curl openssh nano mc ncurses jq" >>"$BUILD_LOG" 2>&1 || { + pct exec "$CTID" -- ash -c 'set -a; [ -f /etc/profile.d/90-http-proxy.sh ] && . /etc/profile.d/90-http-proxy.sh; set +a; apk add bash newt curl openssh nano mc ncurses jq' >>"$BUILD_LOG" 2>&1 || { msg_warn "apk install failed (dl-cdn.alpinelinux.org), trying alternate mirrors..." local alpine_exit=0 pct exec "$CTID" -- ash -c ' + set -a + [ -f /etc/profile.d/90-http-proxy.sh ] && . /etc/profile.d/90-http-proxy.sh + set +a ALPINE_MIRRORS="mirror.init7.net ftp.halifax.rwth-aachen.de mirrors.edge.kernel.org alpine.mirror.wearetriple.com mirror.leaseweb.com uk.alpinelinux.org dl-2.alpinelinux.org dl-4.alpinelinux.org" for m in $(printf "%s\n" $ALPINE_MIRRORS | shuf); do if wget -q --spider --timeout=2 "http://$m/alpine/latest-stable/main/" 2>/dev/null; then @@ -4444,13 +4565,16 @@ EOF pct exec "$CTID" -- bash -c "echo -e 'nameserver 8.8.8.8\nnameserver 1.1.1.1' >/etc/resolv.conf" fi - pct exec "$CTID" -- bash -c "apt-get update 2>&1 && apt-get install -y ${_base_pkgs} 2>&1" >>"$BUILD_LOG" 2>&1 || { + pct exec "$CTID" -- bash -c "set -a; [ -f /etc/profile.d/90-http-proxy.sh ] && . /etc/profile.d/90-http-proxy.sh; set +a; apt-get update 2>&1 && apt-get install -y ${_base_pkgs} 2>&1" >>"$BUILD_LOG" 2>&1 || { local failed_mirror failed_mirror=$(pct exec "$CTID" -- bash -c "grep -m1 -oP '(?<=URIs: https?://)[^/]+' /etc/apt/sources.list.d/debian.sources 2>/dev/null || grep -m1 -oP '(?<=deb https?://)[^/]+' /etc/apt/sources.list 2>/dev/null" 2>/dev/null || echo "unknown") msg_warn "apt-get update failed (${failed_mirror})." msg_custom "â„šī¸" "${YW}" "Probing alternate mirrors (this can take 1-2 minutes on network issues)" local mirror_exit=0 pct exec "$CTID" -- env APT_BASE="$_base_pkgs" bash -c ' + set -a + [ -f /etc/profile.d/90-http-proxy.sh ] && . /etc/profile.d/90-http-proxy.sh + set +a DISTRO=$(. /etc/os-release 2>/dev/null && echo "$ID" || echo "debian") echo " Mirror fallback for distro: $DISTRO" diff --git a/misc/core.func b/misc/core.func index 6e9e590e0..adf5a68d9 100644 --- a/misc/core.func +++ b/misc/core.func @@ -970,6 +970,53 @@ is_verbose_mode() { [[ "$verbose" != "no" ]] } +# ------------------------------------------------------------------------------ +# configure_http_proxy() +# +# - Applies var_http_proxy / var_http_no_proxy inside the container +# - Persists proxy env for login shells, systemd, and package managers +# - Skips APT proxy config when APT Cacher-NG is active +# ------------------------------------------------------------------------------ +configure_http_proxy() { + local proxy="${HTTP_PROXY:-${http_proxy:-${var_http_proxy:-}}}" + local noproxy="${HTTP_NO_PROXY:-${no_proxy:-${var_http_no_proxy:-}}}" + [[ -z "$proxy" ]] && return 0 + [[ -z "$noproxy" ]] && noproxy="localhost,127.0.0.1,.local" + + msg_info "Configuring HTTP proxy" + cat >/etc/profile.d/90-http-proxy.sh </etc/apt/apt.conf.d/00aptproxy local _proxy_raw="${CACHER_IP}" local _proxy_host _proxy_port _proxy_url @@ -509,7 +510,7 @@ EOF systemctl restart "$(basename "$(dirname "$GETTY_OVERRIDE")" | sed 's/\.d//')" msg_ok "Customized Container" fi - echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update + echo 'set -a; [ -f /etc/profile.d/90-http-proxy.sh ] && . /etc/profile.d/90-http-proxy.sh; set +a; bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/'"${app}"'.sh)"' >/usr/bin/update chmod +x /usr/bin/update if [[ -n "${SSH_AUTHORIZED_KEY}" ]]; then From f71005cc48207506d26e120158931603b757c45f Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 24 Jun 2026 04:58:53 +0000 Subject: [PATCH 98/98] Update CHANGELOG.md (#15364) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aea653237..c765dc730 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -492,6 +492,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit - enabling rewirte module in apache [@d3v3lop3rDE](https://github.com/d3v3lop3rDE) ([#15360](https://github.com/community-scripts/ProxmoxVE/pull/15360)) +### 💾 Core + + - #### ✨ New Features + + - core: add var_http_proxy and var_http_no_proxy support [@MickLesk](https://github.com/MickLesk) ([#15225](https://github.com/community-scripts/ProxmoxVE/pull/15225)) + ## 2026-06-23 ### 🚀 Updated Scripts