Compare commits

...

10 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
f9d17ca121 Update documentation for check_for_gh_tag function 2026-03-17 09:05:04 +01:00
CanbiZ (MickLesk)
d01f5c7a6f tools.func Implement check_for_gh_tag function
Adds a function to check for new GitHub tags for repositories without releases. (needed for termix / guacd-server)
2026-03-17 08:55:00 +01:00
community-scripts-pr-app[bot]
4aa83fd98e Update CHANGELOG.md (#12996)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-17 07:32:12 +00:00
CanbiZ (MickLesk)
6747f0c340 fix broken rocm setup 2026-03-17 08:31:42 +01:00
MickLesk
8ef2c445c8 immich: increase uv timeout to 300 2026-03-16 20:41:21 +01:00
MickLesk
e4a7ed6965 immcih: crop sha from pnpm 2026-03-16 20:36:21 +01:00
MickLesk
c69dae5326 immich: use curl with retry function 2026-03-16 20:23:46 +01:00
MickLesk
fee4617802 qf: add gcc13 fallback and use gcc14 2026-03-16 20:03:45 +01:00
community-scripts-pr-app[bot]
339301947b Update .app files (#12982)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2026-03-16 17:56:32 +01:00
community-scripts-pr-app[bot]
5df3c2cd34 Update CHANGELOG.md (#12981)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-16 16:45:48 +00:00
5 changed files with 105 additions and 31 deletions

View File

@@ -423,11 +423,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details> </details>
## 2026-03-17
## 2026-03-16 ## 2026-03-16
### 🆕 New Scripts ### 🆕 New Scripts
- Anytype-Server ([#12974](https://github.com/community-scripts/ProxmoxVE/pull/12974)) - Gluetun ([#12976](https://github.com/community-scripts/ProxmoxVE/pull/12976))
- Anytype-Server ([#12974](https://github.com/community-scripts/ProxmoxVE/pull/12974))
### 🚀 Updated Scripts ### 🚀 Updated Scripts

6
ct/headers/gluetun Normal file
View File

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

View File

@@ -76,7 +76,7 @@ EOF
SOURCE_DIR=${STAGING_DIR}/image-source SOURCE_DIR=${STAGING_DIR}/image-source
cd /tmp cd /tmp
if [[ -f ~/.intel_version ]]; then if [[ -f ~/.intel_version ]]; then
curl -fsSLO https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/machine-learning/Dockerfile curl_with_retry "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/machine-learning/Dockerfile" "Dockerfile"
readarray -t INTEL_URLS < <( readarray -t INTEL_URLS < <(
sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $3}' sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $3}'
sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}' sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}'
@@ -85,7 +85,7 @@ EOF
if [[ "$INTEL_RELEASE" != "$(cat ~/.intel_version)" ]]; then if [[ "$INTEL_RELEASE" != "$(cat ~/.intel_version)" ]]; then
msg_info "Updating Intel iGPU dependencies" msg_info "Updating Intel iGPU dependencies"
for url in "${INTEL_URLS[@]}"; do for url in "${INTEL_URLS[@]}"; do
curl -fsSLO "$url" curl_with_retry "$url" "$(basename "$url")"
done done
$STD apt-mark unhold libigdgmm12 $STD apt-mark unhold libigdgmm12
$STD apt install -y --allow-downgrades ./libigdgmm12*.deb $STD apt install -y --allow-downgrades ./libigdgmm12*.deb
@@ -134,8 +134,6 @@ EOF
$STD sudo -u postgres psql -d immich -c "REINDEX INDEX clip_index;" $STD sudo -u postgres psql -d immich -c "REINDEX INDEX clip_index;"
fi fi
ensure_dependencies ccache gcc-13 g++-13 ensure_dependencies ccache gcc-13 g++-13
export CC=gcc-13
export CXX=g++-13
INSTALL_DIR="/opt/${APP}" INSTALL_DIR="/opt/${APP}"
UPLOAD_DIR="$(sed -n '/^IMMICH_MEDIA_LOCATION/s/[^=]*=//p' /opt/immich/.env)" UPLOAD_DIR="$(sed -n '/^IMMICH_MEDIA_LOCATION/s/[^=]*=//p' /opt/immich/.env)"
@@ -168,7 +166,7 @@ EOF
setup_uv setup_uv
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "${RELEASE}" "$SRC_DIR" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "${RELEASE}" "$SRC_DIR"
PNPM_VERSION="$(jq -r '.packageManager | split("@")[1]' ${SRC_DIR}/package.json)" 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="pnpm@${PNPM_VERSION}" setup_nodejs
msg_info "Updating Immich web and microservices" msg_info "Updating Immich web and microservices"
@@ -219,6 +217,7 @@ EOF
chown -R immich:immich "$INSTALL_DIR" chown -R immich:immich "$INSTALL_DIR"
chown immich:immich ./uv.lock chown immich:immich ./uv.lock
export VIRTUAL_ENV="${ML_DIR}"/ml-venv export VIRTUAL_ENV="${ML_DIR}"/ml-venv
export UV_HTTP_TIMEOUT=300
if [[ -f ~/.openvino ]]; then if [[ -f ~/.openvino ]]; then
ML_PYTHON="python3.13" ML_PYTHON="python3.13"
msg_info "Pre-installing Python ${ML_PYTHON} for machine-learning" msg_info "Pre-installing Python ${ML_PYTHON} for machine-learning"
@@ -229,7 +228,10 @@ EOF
msg_ok "Pre-installed Python ${ML_PYTHON}" msg_ok "Pre-installed Python ${ML_PYTHON}"
msg_info "Updating HW-accelerated machine-learning" msg_info "Updating HW-accelerated machine-learning"
$STD uv add --no-sync --optional openvino onnxruntime-openvino==1.24.1 --active -n -p "${ML_PYTHON}" --managed-python $STD uv add --no-sync --optional openvino onnxruntime-openvino==1.24.1 --active -n -p "${ML_PYTHON}" --managed-python
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p "${ML_PYTHON}" --managed-python for attempt in $(seq 1 3); do
$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-x86_64-linux-gnu.so"
msg_ok "Updated HW-accelerated machine-learning" msg_ok "Updated HW-accelerated machine-learning"
else else
@@ -241,7 +243,10 @@ EOF
done done
msg_ok "Pre-installed Python ${ML_PYTHON}" msg_ok "Pre-installed Python ${ML_PYTHON}"
msg_info "Updating machine-learning" msg_info "Updating machine-learning"
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra cpu --no-dev --active --link-mode copy -n -p "${ML_PYTHON}" --managed-python for attempt in $(seq 1 3); do
$STD sudo --preserve-env=VIRTUAL_ENV,UV_HTTP_TIMEOUT -nu immich uv sync --extra cpu --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
msg_ok "Updated machine-learning" msg_ok "Updated machine-learning"
fi fi
cd "$SRC_DIR" cd "$SRC_DIR"

View File

@@ -32,13 +32,13 @@ if [ -d /dev/dri ]; then
$STD apt install -y --no-install-recommends patchelf $STD apt install -y --no-install-recommends patchelf
tmp_dir=$(mktemp -d) tmp_dir=$(mktemp -d)
$STD pushd "$tmp_dir" $STD pushd "$tmp_dir"
curl -fsSLO https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/machine-learning/Dockerfile curl_with_retry "https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/machine-learning/Dockerfile" "Dockerfile"
readarray -t INTEL_URLS < <( readarray -t INTEL_URLS < <(
sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $3}' sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $3}'
sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}' sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}'
) )
for url in "${INTEL_URLS[@]}"; do for url in "${INTEL_URLS[@]}"; do
curl -fsSLO "$url" curl_with_retry "$url" "$(basename "$url")"
done done
$STD apt install -y ./libigdgmm12*.deb $STD apt install -y ./libigdgmm12*.deb
rm ./libigdgmm12*.deb rm ./libigdgmm12*.deb
@@ -154,10 +154,8 @@ sed -i "s/^#shared_preload.*/shared_preload_libraries = 'vchord.so'/" /etc/postg
systemctl restart postgresql.service systemctl restart postgresql.service
PG_DB_NAME="immich" PG_DB_USER="immich" PG_DB_GRANT_SUPERUSER="true" PG_DB_SKIP_ALTER_ROLE="true" setup_postgresql_db PG_DB_NAME="immich" PG_DB_USER="immich" PG_DB_GRANT_SUPERUSER="true" PG_DB_SKIP_ALTER_ROLE="true" setup_postgresql_db
msg_info "Installing GCC-13 (workaround for GCC-14 ICE on Trixie)" msg_info "Installing GCC-13 (available as fallback compiler)"
$STD apt install -y gcc-13 g++-13 $STD apt install -y gcc-13 g++-13
export CC=gcc-13
export CXX=g++-13
msg_ok "Installed GCC-13" msg_ok "Installed GCC-13"
msg_warn "Compiling Custom Photo-processing Libraries (can take anywhere from 15min to 2h)" msg_warn "Compiling Custom Photo-processing Libraries (can take anywhere from 15min to 2h)"
@@ -296,7 +294,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache} mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "v2.5.6" "$SRC_DIR" fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "v2.5.6" "$SRC_DIR"
PNPM_VERSION="$(jq -r '.packageManager | split("@")[1]' ${SRC_DIR}/package.json)" 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="pnpm@${PNPM_VERSION}" setup_nodejs
msg_info "Installing Immich (patience)" msg_info "Installing Immich (patience)"
@@ -346,6 +344,7 @@ cd "$SRC_DIR"/machine-learning
$STD useradd -U -s /usr/sbin/nologin -r -M -d "$INSTALL_DIR" immich $STD useradd -U -s /usr/sbin/nologin -r -M -d "$INSTALL_DIR" immich
mkdir -p "$ML_DIR" && chown -R immich:immich "$INSTALL_DIR" mkdir -p "$ML_DIR" && chown -R immich:immich "$INSTALL_DIR"
export VIRTUAL_ENV="${ML_DIR}/ml-venv" export VIRTUAL_ENV="${ML_DIR}/ml-venv"
export UV_HTTP_TIMEOUT=300
if [[ -f ~/.openvino ]]; then if [[ -f ~/.openvino ]]; then
ML_PYTHON="python3.13" ML_PYTHON="python3.13"
msg_info "Pre-installing Python ${ML_PYTHON} for machine-learning" msg_info "Pre-installing Python ${ML_PYTHON} for machine-learning"
@@ -356,7 +355,10 @@ if [[ -f ~/.openvino ]]; then
msg_ok "Pre-installed Python ${ML_PYTHON}" msg_ok "Pre-installed Python ${ML_PYTHON}"
msg_info "Installing HW-accelerated machine-learning" msg_info "Installing HW-accelerated machine-learning"
$STD uv add --no-sync --optional openvino onnxruntime-openvino==1.24.1 --active -n -p "${ML_PYTHON}" --managed-python $STD uv add --no-sync --optional openvino onnxruntime-openvino==1.24.1 --active -n -p "${ML_PYTHON}" --managed-python
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p "${ML_PYTHON}" --managed-python for attempt in $(seq 1 3); do
$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-x86_64-linux-gnu.so"
msg_ok "Installed HW-accelerated machine-learning" msg_ok "Installed HW-accelerated machine-learning"
else else
@@ -368,7 +370,10 @@ else
done done
msg_ok "Pre-installed Python ${ML_PYTHON}" msg_ok "Pre-installed Python ${ML_PYTHON}"
msg_info "Installing machine-learning" msg_info "Installing machine-learning"
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra cpu --no-dev --active --link-mode copy -n -p "${ML_PYTHON}" --managed-python for attempt in $(seq 1 3); do
$STD sudo --preserve-env=VIRTUAL_ENV,UV_HTTP_TIMEOUT -nu immich uv sync --extra cpu --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
msg_ok "Installed machine-learning" msg_ok "Installed machine-learning"
fi fi
cd "$SRC_DIR" cd "$SRC_DIR"
@@ -385,10 +390,10 @@ ln -s "$UPLOAD_DIR" "$ML_DIR"/upload
msg_info "Installing GeoNames data" msg_info "Installing GeoNames data"
cd "$GEO_DIR" cd "$GEO_DIR"
curl -fsSLZ -O "https://download.geonames.org/export/dump/admin1CodesASCII.txt" \ curl_with_retry "https://download.geonames.org/export/dump/admin1CodesASCII.txt" "admin1CodesASCII.txt"
-O "https://download.geonames.org/export/dump/admin2Codes.txt" \ curl_with_retry "https://download.geonames.org/export/dump/admin2Codes.txt" "admin2Codes.txt"
-O "https://download.geonames.org/export/dump/cities500.zip" \ curl_with_retry "https://download.geonames.org/export/dump/cities500.zip" "cities500.zip"
-O "https://raw.githubusercontent.com/nvkelso/natural-earth-vector/v5.1.2/geojson/ne_10m_admin_0_countries.geojson" curl_with_retry "https://raw.githubusercontent.com/nvkelso/natural-earth-vector/v5.1.2/geojson/ne_10m_admin_0_countries.geojson" "ne_10m_admin_0_countries.geojson"
unzip -q cities500.zip unzip -q cities500.zip
date --iso-8601=seconds | tr -d "\n" >geodata-date.txt date --iso-8601=seconds | tr -d "\n" >geodata-date.txt
rm cities500.zip rm cities500.zip

View File

@@ -2174,6 +2174,49 @@ get_latest_gh_tag() {
return 0 return 0
} }
# ------------------------------------------------------------------------------
# Checks for new GitHub tag (for repos without releases).
#
# Description:
# - Uses get_latest_gh_tag to fetch the latest tag
# - Compares it to a local cached version (~/.<app>)
# - If newer, sets global CHECK_UPDATE_RELEASE and returns 0
#
# Usage:
# if check_for_gh_tag "guacd" "apache/guacamole-server"; then
# fetch_and_deploy_gh_tag "guacd" "apache/guacamole-server" "/opt/guacamole-server"
# fi
#
# Notes:
# - For repos that only publish tags, not GitHub Releases
# - Same interface as check_for_gh_release
# ------------------------------------------------------------------------------
check_for_gh_tag() {
local app="$1"
local repo="$2"
local prefix="${3:-}"
local app_lc=""
app_lc="$(echo "${app,,}" | tr -d ' ')"
local current_file="$HOME/.${app_lc}"
msg_info "Checking for update: ${app}"
local latest=""
latest=$(get_latest_gh_tag "$repo" "$prefix") || return 1
local current=""
[[ -f "$current_file" ]] && current="$(<"$current_file")"
if [[ -z "$current" || "$current" != "$latest" ]]; then
CHECK_UPDATE_RELEASE="$latest"
msg_ok "Update available: ${app} ${current:-not installed}${latest}"
return 0
fi
msg_ok "No update available: ${app} (${latest})"
return 1
}
# ============================================================================== # ==============================================================================
# INSTALL FUNCTIONS # INSTALL FUNCTIONS
# ============================================================================== # ==============================================================================
@@ -4676,16 +4719,9 @@ _setup_rocm() {
return 0 return 0
} }
# AMDGPU driver repository (append to same keyring) # Note: The amdgpu/latest/ubuntu repo (kernel driver packages) is intentionally
{ # omitted — kernel drivers are managed by the Proxmox host, not the LXC container.
echo "" # Only the ROCm userspace compute stack is needed inside the container.
echo "Types: deb"
echo "URIs: https://repo.radeon.com/amdgpu/latest/ubuntu"
echo "Suites: ${ROCM_REPO_CODENAME}"
echo "Components: main"
echo "Architectures: amd64"
echo "Signed-By: /etc/apt/keyrings/rocm.gpg"
} >>/etc/apt/sources.list.d/rocm.sources
# Pin ROCm packages to prefer radeon repo # Pin ROCm packages to prefer radeon repo
cat <<EOF >/etc/apt/preferences.d/rocm-pin-600 cat <<EOF >/etc/apt/preferences.d/rocm-pin-600
@@ -4694,7 +4730,26 @@ Pin: release o=repo.radeon.com
Pin-Priority: 600 Pin-Priority: 600
EOF EOF
$STD apt update || msg_warn "apt update failed (AMD repo may be temporarily unavailable) — continuing anyway" # apt update with retry — repo.radeon.com CDN can be mid-sync (transient size mismatches).
# Run with ERR trap disabled so a transient failure does not abort the entire install.
local _apt_ok=0
for _attempt in 1 2 3; do
if (
set +e
apt-get update -qq 2>&1
exit $?
) 2>/dev/null; then
_apt_ok=1
break
fi
msg_warn "apt update failed (attempt ${_attempt}/3) — AMD repo may be temporarily unavailable, retrying in 30s…"
sleep 30
done
if [[ $_apt_ok -eq 0 ]]; then
msg_warn "apt update still failing after 3 attempts — skipping ROCm install"
return 0
fi
# Install only runtime packages — full 'rocm' meta-package includes 15GB+ dev tools # Install only runtime packages — full 'rocm' meta-package includes 15GB+ dev tools
$STD apt install -y rocm-opencl-runtime rocm-hip-runtime rocm-smi-lib 2>/dev/null || { $STD apt install -y rocm-opencl-runtime rocm-hip-runtime rocm-smi-lib 2>/dev/null || {
msg_warn "ROCm runtime install failed — trying minimal set" msg_warn "ROCm runtime install failed — trying minimal set"