From 13af794be928afbd521a6638a99fff3178c6efbe Mon Sep 17 00:00:00 2001 From: Sam Heinz <54530346+asylumexp@users.noreply.github.com> Date: Sat, 20 Jun 2026 19:29:49 +1000 Subject: [PATCH] [arm64] port hyperhdr-kometa to arm64 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 | 23 ++++++++++++++++++-- install/kavita-install.sh | 6 +++++- install/keycloak-install.sh | 2 +- install/kometa-install.sh | 5 +++-- misc/tools.func | 23 ++++++++++++++------ 41 files changed, 142 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 f5dbd024f..d921933a4 100644 --- a/install/kasm-install.sh +++ b/install/kasm-install.sh @@ -14,7 +14,26 @@ network_check update_os msg_info "Installing Docker" -$STD sh <(curl -fsSL https://get.docker.com/) +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" @@ -53,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 || {