mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-03-19 08:23:01 +01:00
* fix(tdarr): use curl_with_retry and verify binaries before enabling service Tdarr_Updater downloads the actual server/node binaries from tdarr.io at runtime. If tdarr.io is blocked by local DNS (e.g. OPNsense OISD blocklists), the updater exits silently with code 0, leaving no binaries on disk. The subsequent systemctl enable then fails with 'Operation not permitted' (exit 1) because the ExecStart paths don't exist. Changes: - Replace bare curl with curl_with_retry for versions.json and Tdarr_Updater.zip downloads to gain retry logic, DNS pre-check and exponential backoff - Add msg_info before Tdarr_Updater run so users see this step in the log - Check that Tdarr_Server and Tdarr_Node binaries exist after the updater runs; fail immediately with a clear message pointing to tdarr.io connectivity instead of letting systemctl fail with a confusing 'Operation not permitted' Fixes: #13030 * Improve Tdarr installer error handling Refine post-update validation and failure behavior in tdarr-install.sh: remove a redundant status message, simplify the updater check to only require the Tdarr_Server binary, and replace the previous fatal path with msg_error plus an explicit exit 250. This makes failures (for example when tdarr.io is blocked by local DNS) clearer and avoids false negatives from the Tdarr_Node existence check. * Use curl_with_retry and handle updater failure Replace direct curl calls with curl_with_retry for fetching versions.json and downloading Tdarr_Updater.zip to improve network reliability. Add a post-update check that verifies /opt/tdarr/Tdarr_Server/Tdarr_Server exists; if missing, log an error suggesting possible DNS blocking and exit with code 250. Minor cleanup of updater artifacts remains unchanged. * Reorder hwaccel setup and adjust GPU group usermod Move setup_hwaccel invocations in emby, jellyfin, ollama, and plex installers to occur after package installation/configuration so GPU drivers/repos are present before enabling hardware acceleration. Update _setup_gpu_permissions to call usermod directly (remove $STD wrapper) when adding service users to render/video groups. Includes minor whitespace/ordering cleanups in the installer scripts.
122 lines
3.7 KiB
Bash
122 lines
3.7 KiB
Bash
#!/usr/bin/env bash
|
||
|
||
# Copyright (c) 2021-2026 tteck
|
||
# Author: havardthom | Co-Author: MickLesk (CanbiZ)
|
||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||
# Source: https://ollama.com/
|
||
|
||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||
color
|
||
verb_ip6
|
||
catch_errors
|
||
setting_up_container
|
||
network_check
|
||
update_os
|
||
|
||
msg_info "Installing Dependencies"
|
||
$STD apt install -y \
|
||
build-essential \
|
||
pkg-config \
|
||
zstd
|
||
msg_ok "Installed Dependencies"
|
||
|
||
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
|
||
cat <<EOF >/etc/apt/sources.list.d/intel-gpu.sources
|
||
Types: deb
|
||
URIs: https://repositories.intel.com/gpu/ubuntu
|
||
Suites: jammy
|
||
Components: client
|
||
Architectures: amd64 i386
|
||
Signed-By: /usr/share/keyrings/intel-graphics.gpg
|
||
EOF
|
||
curl -fsSL https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor -o /usr/share/keyrings/oneapi-archive-keyring.gpg
|
||
cat <<EOF >/etc/apt/sources.list.d/oneAPI.sources
|
||
Types: deb
|
||
URIs: https://apt.repos.intel.com/oneapi
|
||
Suites: all
|
||
Components: main
|
||
Signed-By: /usr/share/keyrings/oneapi-archive-keyring.gpg
|
||
EOF
|
||
$STD apt update
|
||
msg_ok "Set up Intel® Repositories"
|
||
|
||
msg_info "Installing Intel® Level Zero"
|
||
# Debian 13+ has newer Level Zero packages in system repos that conflict with Intel repo packages
|
||
if is_debian && [[ "$(get_os_version_major)" -ge 13 ]]; then
|
||
# Use system packages on Debian 13+ (avoid conflicts with libze1)
|
||
$STD apt -y install libze1 libze-dev intel-level-zero-gpu 2>/dev/null || {
|
||
msg_warn "Failed to install some Level Zero packages, continuing anyway"
|
||
}
|
||
else
|
||
# Use Intel repository packages for older systems
|
||
$STD apt -y install intel-level-zero-gpu level-zero level-zero-dev 2>/dev/null || {
|
||
msg_warn "Failed to install Intel Level Zero packages, continuing anyway"
|
||
}
|
||
fi
|
||
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"
|
||
|
||
msg_info "Installing Ollama (Patience)"
|
||
RELEASE=$(curl -fsSL https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
|
||
OLLAMA_INSTALL_DIR="/usr/local/lib/ollama"
|
||
BINDIR="/usr/local/bin"
|
||
mkdir -p $OLLAMA_INSTALL_DIR
|
||
OLLAMA_URL="https://github.com/ollama/ollama/releases/download/${RELEASE}/ollama-linux-amd64.tar.zst"
|
||
TMP_TAR="/tmp/ollama.tar.zst"
|
||
echo -e "\n"
|
||
if curl -fL# -C - -o "$TMP_TAR" "$OLLAMA_URL"; then
|
||
if tar --zstd -xf "$TMP_TAR" -C "$OLLAMA_INSTALL_DIR"; then
|
||
ln -sf "$OLLAMA_INSTALL_DIR/bin/ollama" "$BINDIR/ollama"
|
||
echo "${RELEASE}" >/opt/Ollama_version.txt
|
||
msg_ok "Installed Ollama ${RELEASE}"
|
||
else
|
||
msg_error "Extraction failed – archive corrupt or incomplete"
|
||
exit 251
|
||
fi
|
||
else
|
||
msg_error "Download failed – $OLLAMA_URL not reachable"
|
||
exit 250
|
||
fi
|
||
|
||
msg_info "Creating ollama User and Group"
|
||
if ! id ollama >/dev/null 2>&1; then
|
||
useradd -r -s /usr/sbin/nologin -U -m -d /usr/share/ollama ollama
|
||
fi
|
||
$STD usermod -aG ollama $(id -u -n)
|
||
msg_ok "Created ollama User and adjusted Groups"
|
||
|
||
setup_hwaccel "ollama"
|
||
|
||
msg_info "Creating Service"
|
||
cat <<EOF >/etc/systemd/system/ollama.service
|
||
[Unit]
|
||
Description=Ollama Service
|
||
After=network-online.target
|
||
|
||
[Service]
|
||
Type=exec
|
||
ExecStart=/usr/local/bin/ollama serve
|
||
Environment=HOME=$HOME
|
||
Environment=OLLAMA_INTEL_GPU=true
|
||
Environment=OLLAMA_HOST=0.0.0.0
|
||
Environment=OLLAMA_NUM_GPU=999
|
||
Environment=SYCL_CACHE_PERSISTENT=1
|
||
Environment=ZES_ENABLE_SYSMAN=1
|
||
Restart=always
|
||
RestartSec=3
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
systemctl enable -q --now ollama
|
||
msg_ok "Created Service"
|
||
|
||
motd_ssh
|
||
customize
|
||
cleanup_lxc
|