Compare commits

..

1 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
8d6675ffb7 fix(migration): atomic /usr/bin/update replacement to prevent syntax errors
All 8 migration scripts (runtipi, dockge, dokploy, coolify, komodo,
alpine-komodo, overseerr, jellyseerr) overwrote /usr/bin/update in-place
while the parent shell still had the file open for reading. Since the
new content is longer than the original, bash would read leftover bytes
after the child process exited, causing garbled output or syntax errors
like: /usr/bin/update: line 2: syntax error near unexpected token )

Fix:
- Write to a temp file first, then mv over /usr/bin/update (atomic
  inode replacement so parent shell sees EOF on old fd)
- Remove unnecessary shebang from heredoc content in overseerr/jellyseerr
  (consistent with all other update scripts and install.func)
2026-03-04 07:44:14 +01:00
5 changed files with 29 additions and 127 deletions

View File

@@ -416,8 +416,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### 🐞 Bug Fixes
- PowerDNS: use gsqlite3 backend instead of BIND [@MickLesk](https://github.com/MickLesk) ([#12538](https://github.com/community-scripts/ProxmoxVE/pull/12538))
- addon migrations: /usr/bin/update replacement to prevent syntax error [@MickLesk](https://github.com/MickLesk) ([#12540](https://github.com/community-scripts/ProxmoxVE/pull/12540))
- fix(immich): correct LibRaw clone URL to official upstream [@DenislavDenev](https://github.com/DenislavDenev) ([#12526](https://github.com/community-scripts/ProxmoxVE/pull/12526))
### 💾 Core

View File

@@ -20,33 +20,10 @@ $STD apt install -y \
zstd
msg_ok "Installed Dependencies"
# ══════════════════════════════════════════════════════════════════════════════
# GPU Detection - determine which GPU backend to configure
# ══════════════════════════════════════════════════════════════════════════════
GPU_BACKEND="cpu"
if [[ -e /dev/kfd ]]; then
GPU_BACKEND="rocm"
msg_ok "Detected AMD GPU (/dev/kfd present) - will configure ROCm backend"
elif [[ -d /dev/dri ]]; then
# Check if Intel GPU is available (default for this script)
if lspci 2>/dev/null | grep -iE 'VGA|3D|Display' | grep -qi 'Intel'; then
GPU_BACKEND="intel"
msg_ok "Detected Intel GPU - will configure SYCL/oneAPI backend"
elif [[ -e /dev/dri/renderD128 ]]; then
GPU_BACKEND="intel"
msg_ok "Detected GPU (assuming Intel) - will configure SYCL/oneAPI backend"
fi
fi
# ══════════════════════════════════════════════════════════════════════════════
# Intel GPU Setup
# ══════════════════════════════════════════════════════════════════════════════
if [[ "$GPU_BACKEND" == "intel" ]]; 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
cat <<EOF >/etc/apt/sources.list.d/intel-gpu.sources
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
@@ -54,56 +31,37 @@ 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
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"
fi
$STD apt update
msg_ok "Set up Intel® Repositories"
setup_hwaccel
# ══════════════════════════════════════════════════════════════════════════════
# Intel-specific: Level Zero + oneAPI
# ══════════════════════════════════════════════════════════════════════════════
if [[ "$GPU_BACKEND" == "intel" ]]; then
msg_info "Installing Intel® Level Zero"
if is_debian && [[ "$(get_os_version_major)" -ge 13 ]]; then
$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
$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 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"
# ══════════════════════════════════════════════════════════════════════════════
# AMD ROCm-specific: ensure ROCm libraries are present for Ollama
# ══════════════════════════════════════════════════════════════════════════════
if [[ "$GPU_BACKEND" == "rocm" ]]; then
msg_info "Verifying ROCm runtime for Ollama"
# ROCm base libraries should already be installed by setup_hwaccel -> _setup_amd_gpu
# Ensure the ollama-relevant pieces are present
if ! ldconfig -p 2>/dev/null | grep -q libamdhip64; then
msg_warn "ROCm HIP runtime not found - Ollama may fall back to CPU"
msg_info "You can manually install ROCm following: https://rocm.docs.amd.com/projects/install-on-linux/en/latest/"
else
msg_ok "ROCm HIP runtime available"
fi
msg_ok "Verified ROCm runtime"
fi
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}')
@@ -146,24 +104,11 @@ After=network-online.target
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
EOF
# Add GPU-specific environment variables
if [[ "$GPU_BACKEND" == "intel" ]]; then
cat <<EOF >>/etc/systemd/system/ollama.service
Environment=OLLAMA_INTEL_GPU=true
Environment=SYCL_CACHE_PERSISTENT=1
Environment=ZES_ENABLE_SYSMAN=1
EOF
elif [[ "$GPU_BACKEND" == "rocm" ]]; then
cat <<EOF >>/etc/systemd/system/ollama.service
Environment=HSA_OVERRIDE_GFX_VERSION=11.0.0
EOF
fi
cat <<EOF >>/etc/systemd/system/ollama.service
Restart=always
RestartSec=3

View File

@@ -38,12 +38,6 @@ msg_info "Setting up PowerDNS"
$STD apt install -y \
pdns-server \
pdns-backend-sqlite3
sed -i 's/^launch=$/# launch=/' /etc/powerdns/pdns.conf
rm -f /etc/powerdns/pdns.d/bind.conf
cat <<EOF >/etc/powerdns/pdns.d/gsqlite3.conf
launch+=gsqlite3
gsqlite3-database=/opt/poweradmin/powerdns.db
EOF
msg_ok "Setup PowerDNS"
fetch_and_deploy_gh_release "poweradmin" "poweradmin/poweradmin" "tarball"
@@ -132,10 +126,7 @@ cat <<EOF >/etc/apache2/sites-enabled/poweradmin.conf
EOF
$STD a2enmod rewrite headers
chown -R www-data:www-data /opt/poweradmin
chown pdns:pdns /opt/poweradmin/powerdns.db
chmod 664 /opt/poweradmin/powerdns.db
usermod -aG pdns www-data
$STD systemctl restart pdns apache2
$STD systemctl restart apache2
msg_info "Created Service"
motd_ssh

View File

@@ -3738,11 +3738,6 @@ $PCT_OPTIONS_STRING"
done
fi
fi
# /dev/kfd is required for AMD ROCm compute (GPU inference in Ollama, etc.)
if [[ -e /dev/kfd ]]; then
AMD_DEVICES+=("/dev/kfd")
msg_custom "🎮" "${RD}" "Detected /dev/kfd (ROCm compute device)"
fi
fi
# Check for NVIDIA GPU - look for NVIDIA vendor ID [10de]

View File

@@ -4451,36 +4451,9 @@ _setup_amd_gpu() {
fi
# Ubuntu includes AMD firmware in linux-firmware by default
# ROCm for GPU compute (needed for AI/ML workloads like Ollama)
if [[ -e /dev/kfd ]]; then
msg_info "Installing ROCm runtime (AMD GPU compute)"
if [[ "$os_id" == "ubuntu" ]]; then
# Official AMD ROCm repo for Ubuntu
mkdir -p /usr/share/keyrings
curl -fsSL https://repo.radeon.com/rocm/rocm.gpg.key | gpg --dearmor -o /usr/share/keyrings/rocm-archive-keyring.gpg 2>/dev/null || true
local rocm_version="6.4.1"
cat <<EOF >/etc/apt/sources.list.d/rocm.sources
Types: deb
URIs: https://repo.radeon.com/rocm/apt/${rocm_version}
Suites: noble
Components: main
Signed-By: /usr/share/keyrings/rocm-archive-keyring.gpg
EOF
cat <<EOF >/etc/apt/sources.list.d/amdgpu.sources
Types: deb
URIs: https://repo.radeon.com/amdgpu/${rocm_version}/ubuntu
Suites: noble
Components: main
Signed-By: /usr/share/keyrings/rocm-archive-keyring.gpg
EOF
$STD apt update 2>/dev/null || true
$STD apt -y install rocm-opencl-runtime rocm-hip-runtime 2>/dev/null || msg_warn "ROCm install failed - GPU compute may not work"
elif [[ "$os_id" == "debian" ]]; then
# Debian: use distro ROCm packages if available
$STD apt -y install rocm-opencl-runtime 2>/dev/null || msg_warn "ROCm not available in Debian repos"
fi
msg_ok "Installed ROCm runtime"
fi
# ROCm for compute (optional - large download)
# Uncomment if needed:
# $STD apt -y install rocm-opencl-runtime 2>/dev/null || true
msg_ok "AMD GPU configured"
}