mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-10-23 19:55:05 +00:00
The Ollama release binaries carry no SYCL build, so the 2.8 GB download was never used. Its handled failure was also what later systemctl failures were reported as.
153 lines
4.7 KiB
Bash
153 lines
4.7 KiB
Bash
#!/usr/bin/env bash
|
||
|
||
# Copyright (c) 2021-2026 tteck
|
||
# Author: tteck | Co-Author: havardthom | Co-Author: Slaviša Arežina (tremor021)
|
||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||
# Source: https://openwebui.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 \
|
||
ffmpeg \
|
||
zstd \
|
||
build-essential \
|
||
libmariadb-dev
|
||
msg_ok "Installed Dependencies"
|
||
|
||
setup_hwaccel
|
||
|
||
PYTHON_VERSION="3.12" setup_uv
|
||
|
||
OTEL_ARGS=()
|
||
prompt="${var_openwebui_otel:-}"
|
||
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to install OpenTelemetry instrumentation packages (requires manual .env configuration)? <y/N> " prompt
|
||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||
for pkg in \
|
||
opentelemetry-api \
|
||
opentelemetry-sdk \
|
||
opentelemetry-exporter-otlp \
|
||
opentelemetry-exporter-otlp-proto-http \
|
||
opentelemetry-instrumentation-fastapi \
|
||
opentelemetry-instrumentation-aiohttp-client \
|
||
opentelemetry-instrumentation-httpx \
|
||
opentelemetry-instrumentation-sqlalchemy \
|
||
opentelemetry-instrumentation-requests \
|
||
opentelemetry-instrumentation-logging \
|
||
opentelemetry-instrumentation-redis \
|
||
opentelemetry-instrumentation-system-metrics; do
|
||
OTEL_ARGS+=(--with "$pkg")
|
||
done
|
||
fi
|
||
|
||
msg_info "Installing Open WebUI"
|
||
installed=0
|
||
for attempt in 1 2; do
|
||
$STD uv tool install --python 3.12 "${OTEL_ARGS[@]}" open-webui[all] && { installed=1; break; }
|
||
msg_warn "Open WebUI install attempt $attempt failed, retrying..."
|
||
sleep 10
|
||
done
|
||
((installed)) || $STD uv tool install --python 3.12 "${OTEL_ARGS[@]}" open-webui[all]
|
||
msg_ok "Installed Open WebUI"
|
||
|
||
prompt="${var_openwebui_ollama:-}"
|
||
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Ollama? <y/N> " 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
|
||
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 2>/dev/null || true
|
||
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
|
||
apt_update_safe
|
||
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"
|
||
fi
|
||
|
||
msg_info "Installing Ollama"
|
||
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
|
||
cat <<EOF >/etc/systemd/system/ollama.service
|
||
[Unit]
|
||
Description=Ollama Service
|
||
After=network-online.target
|
||
|
||
[Service]
|
||
Type=exec
|
||
ExecStart=/usr/bin/ollama serve
|
||
Environment=HOME=$HOME
|
||
Environment=OLLAMA_HOST=0.0.0.0
|
||
Restart=always
|
||
RestartSec=3
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
systemctl enable -q --now ollama
|
||
echo "ENABLE_OLLAMA_API=true" >/root/.env
|
||
msg_ok "Installed Ollama"
|
||
fi
|
||
fi
|
||
|
||
msg_info "Creating Service"
|
||
cat <<EOF >/etc/systemd/system/open-webui.service
|
||
[Unit]
|
||
Description=Open WebUI Service
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
EnvironmentFile=-/root/.env
|
||
Environment=DATA_DIR=/root/.open-webui
|
||
ExecStart=/root/.local/bin/open-webui serve
|
||
WorkingDirectory=/root
|
||
Restart=on-failure
|
||
RestartSec=5
|
||
User=root
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
systemctl enable -q --now open-webui
|
||
msg_ok "Created Service"
|
||
|
||
motd_ssh
|
||
customize
|
||
cleanup_lxc
|