mirror of
https://github.com/marcogll/omarchy_setup.git
synced 2026-01-13 13:25:16 +00:00
234 lines
8.4 KiB
Bash
Executable File
234 lines
8.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ===============================================================
|
|
# davinci-resolve.sh - Instalador de DaVinci Resolve (Intel Edition)
|
|
# ===============================================================
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "${SCRIPT_DIR}/common.sh"
|
|
|
|
install_davinci_resolve() {
|
|
log_step "Instalación de DaVinci Resolve (Intel Edition)"
|
|
|
|
# Comprobar que el ZIP está en Downloads
|
|
ZIP_DIR="${HOME}/Downloads"
|
|
RESOLVE_ZIP="$(ls -1t "${ZIP_DIR}"/DaVinci_Resolve*_Linux.zip 2>/dev/null | head -n1 || true)"
|
|
|
|
if [[ -z "${RESOLVE_ZIP}" ]]; then
|
|
log_error "No se encontró ningún ZIP de DaVinci Resolve en ${ZIP_DIR}."
|
|
log_info "Ve al sitio de descargas de Blackmagic Design:"
|
|
log_info "https://www.blackmagicdesign.com/support/"
|
|
log_info "Descarga el archivo Linux ZIP y colócalo en ${ZIP_DIR}"
|
|
return 1
|
|
fi
|
|
|
|
log_info "Usando ZIP: ${RESOLVE_ZIP}"
|
|
|
|
# Instalación de paquetes básicos
|
|
log_info "Instalando paquetes básicos..."
|
|
sudo pacman -S --needed --noconfirm \
|
|
unzip patchelf libarchive xdg-user-dirs desktop-file-utils \
|
|
file gtk-update-icon-cache rsync clinfo qt5-base qt5-svg qt5-x11extras \
|
|
libpng libtiff libcurl || true
|
|
|
|
# Configurar OpenCL / Intel GPU
|
|
log_info "Configurando runtime OpenCL de Intel y drivers de video..."
|
|
|
|
# Eliminar posibles paquetes NVIDIA conflictivos
|
|
if pacman -Qi nvidia &>/dev/null; then
|
|
log_warning "Quitando paquetes NVIDIA para evitar conflictos..."
|
|
sudo pacman -Rns --noconfirm nvidia nvidia-utils nvidia-settings opencl-nvidia || true
|
|
fi
|
|
|
|
# Instalar headers del kernel si son necesarios
|
|
KVER="$(uname -r)"
|
|
if [[ ! -d "/usr/lib/modules/${KVER}/build" ]]; then
|
|
log_info "Instalando headers de kernel..."
|
|
sudo pacman -S --needed --noconfirm linux-headers linux-zen-headers || true
|
|
fi
|
|
|
|
# Instalar runtime OpenCL (compute runtime), desde AUR si es necesario
|
|
if ! pacman -Qi intel-compute-runtime &>/dev/null; then
|
|
log_info "Instalando intel-compute-runtime (puede venir del AUR)..."
|
|
AUR_HELPER=$(ensure_aur_helper)
|
|
if [ "$AUR_HELPER" = "yay" ]; then
|
|
yay -S --noconfirm intel-compute-runtime || {
|
|
log_error "No se pudo instalar intel-compute-runtime"
|
|
return 1
|
|
}
|
|
elif [ "$AUR_HELPER" = "paru" ]; then
|
|
paru -S --noconfirm intel-compute-runtime || {
|
|
log_error "No se pudo instalar intel-compute-runtime"
|
|
return 1
|
|
}
|
|
else
|
|
if ! sudo pacman -S --needed --noconfirm intel-compute-runtime; then
|
|
log_error "No se pudo instalar intel-compute-runtime desde pacman."
|
|
log_error "Asegúrate de tener un helper AUR como yay o paru"
|
|
return 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Instalar otros paquetes Intel / VA-API / OpenCL
|
|
log_info "Instalando paquetes Intel / VA-API / OpenCL..."
|
|
sudo pacman -S --needed --noconfirm \
|
|
intel-media-driver \
|
|
ocl-icd \
|
|
libxcrypt-compat \
|
|
ffmpeg \
|
|
glu \
|
|
gtk2 \
|
|
fuse2 \
|
|
libva-utils libvdpau-va-gl || true
|
|
|
|
# Asegurar el archivo ICD para OpenCL de Intel
|
|
if [[ ! -f /etc/OpenCL/vendors/intel.icd ]]; then
|
|
log_info "Creando vendor file de OpenCL para Intel..."
|
|
sudo mkdir -p /etc/OpenCL/vendors
|
|
echo "/usr/lib/intel-opencl/libigdrcl.so" | sudo tee /etc/OpenCL/vendors/intel.icd >/dev/null
|
|
fi
|
|
|
|
# Crear enlace /etc/pki/tls si es necesario
|
|
if [[ ! -e /etc/pki/tls ]]; then
|
|
log_info "Creando enlace /etc/pki/tls → /etc/ssl"
|
|
sudo mkdir -p /etc/pki
|
|
sudo ln -sf /etc/ssl /etc/pki/tls
|
|
fi
|
|
|
|
sudo ldconfig || true
|
|
|
|
# Verificaciones
|
|
log_info "Verificando OpenCL instalado..."
|
|
clinfo | grep -E "Platform Name|Device Name" || true
|
|
|
|
log_info "Verificando soporte de decodificación VA-API para H264 / HEVC..."
|
|
vainfo | grep -E "H264|HEVC" || true
|
|
|
|
# Extraer DaVinci Resolve
|
|
log_info "Extrayendo DaVinci Resolve del ZIP..."
|
|
NEEDED_GB=10
|
|
FREE_KB=$(df --output=avail -k "${ZIP_DIR}" | tail -n1)
|
|
FREE_GB=$((FREE_KB / 1024 / 1024))
|
|
if (( FREE_GB < NEEDED_GB )); then
|
|
log_error "No hay suficiente espacio libre en ${ZIP_DIR}: ${FREE_GB} GiB < ${NEEDED_GB} GiB"
|
|
return 1
|
|
fi
|
|
|
|
WORKDIR="$(mktemp -d -p "${ZIP_DIR}" .resolve-extract-XXXXXXXX)"
|
|
trap 'rm -rf "${WORKDIR}"' EXIT
|
|
unzip -q "${RESOLVE_ZIP}" -d "${WORKDIR}"
|
|
|
|
RUN_FILE="$(find "${WORKDIR}" -maxdepth 2 -type f -name 'DaVinci_Resolve_*_Linux.run' | head -n1 || true)"
|
|
if [[ -z "${RUN_FILE}" ]]; then
|
|
log_error "No se encontró el archivo .run dentro del ZIP."
|
|
return 1
|
|
fi
|
|
chmod +x "${RUN_FILE}"
|
|
|
|
EX_DIR="$(dirname "${RUN_FILE}")"
|
|
( cd "${EX_DIR}" && "./$(basename "${RUN_FILE}")" --appimage-extract >/dev/null )
|
|
|
|
APPDIR="${EX_DIR}/squashfs-root"
|
|
if [[ ! -d "${APPDIR}" ]]; then
|
|
log_error "No se extrajo correctamente la carpeta squashfs-root."
|
|
return 1
|
|
fi
|
|
|
|
chmod -R u+rwX,go+rX,go-w "${APPDIR}"
|
|
if [[ ! -s "${APPDIR}/bin/resolve" ]]; then
|
|
log_error "El binario resolve no existe o está vacío."
|
|
return 1
|
|
fi
|
|
|
|
# Reemplazar librerías glib/gio/gmodule
|
|
log_info "Ajustando bibliotecas glib/gio/gmodule para usar las del sistema..."
|
|
pushd "${APPDIR}" >/dev/null
|
|
rm -f libs/libglib-2.0.so.0 libs/libgio-2.0.so.0 libs/libgmodule-2.0.so.0 || true
|
|
ln -sf /usr/lib/libglib-2.0.so.0 libs/libglib-2.0.so.0
|
|
ln -sf /usr/lib/libgio-2.0.so.0 libs/libgio-2.0.so.0
|
|
ln -sf /usr/lib/libgmodule-2.0.so.0 libs/libgmodule-2.0.so.0
|
|
popd >/dev/null
|
|
|
|
# Aplicar RPATH
|
|
log_info "Aplicando RPATH con patchelf..."
|
|
RPATH_DIRS=(
|
|
"libs"
|
|
"libs/plugins/sqldrivers"
|
|
"libs/plugins/xcbglintegrations"
|
|
"libs/plugins/imageformats"
|
|
"libs/plugins/platforms"
|
|
"libs/Fusion"
|
|
"plugins"
|
|
"bin"
|
|
)
|
|
RPATH_ABS=""
|
|
for p in "${RPATH_DIRS[@]}"; do
|
|
RPATH_ABS+="/opt/resolve/${p}:"
|
|
done
|
|
RPATH_ABS+="\$ORIGIN"
|
|
|
|
if command -v patchelf &>/dev/null; then
|
|
find "${APPDIR}" -type f -exec bash -c '
|
|
file -b "$1" | grep -q ELF && sudo patchelf --set-rpath "'"${RPATH_ABS}"'" "$1"
|
|
' _ {} \; || true
|
|
fi
|
|
|
|
# Instalar en /opt/resolve
|
|
log_info "Instalando DaVinci Resolve en /opt/resolve..."
|
|
sudo rm -rf /opt/resolve
|
|
sudo mkdir -p /opt/resolve
|
|
sudo rsync -a --delete "${APPDIR}/" /opt/resolve/
|
|
sudo mkdir -p /opt/resolve/.license
|
|
|
|
# Enlazar libcrypt legado si es necesario
|
|
sudo pacman -S --needed --noconfirm libxcrypt-compat || true
|
|
sudo ldconfig || true
|
|
if [[ -e /usr/lib/libcrypt.so.1 ]]; then
|
|
sudo ln -sf /usr/lib/libcrypt.so.1 /opt/resolve/libs/libcrypt.so.1
|
|
fi
|
|
|
|
# Crear wrapper + acceso en escritorio
|
|
log_info "Creando wrapper y acceso para DaVinci Resolve..."
|
|
cat << 'EOF' | sudo tee /usr/local/bin/resolve-intel >/dev/null
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
find /tmp -maxdepth 1 -type f -name "qtsingleapp-DaVinci*lockfile" -delete 2>/dev/null || true
|
|
export QT_QPA_PLATFORM=xcb
|
|
export QT_AUTO_SCREEN_SCALE_FACTOR=1
|
|
export OCL_ICD_VENDORS=/etc/OpenCL/vendors
|
|
exec /opt/resolve/bin/resolve "$@"
|
|
EOF
|
|
|
|
sudo chmod +x /usr/local/bin/resolve-intel
|
|
|
|
mkdir -p "${HOME}/.local/share/applications"
|
|
cat > "${HOME}/.local/share/applications/davinci-resolve-wrapper.desktop" << EOF
|
|
[Desktop Entry]
|
|
Type=Application
|
|
Name=DaVinci Resolve (Intel)
|
|
Comment=DaVinci Resolve usando OpenCL de Intel
|
|
Exec=/usr/local/bin/resolve-intel %U
|
|
TryExec=/usr/local/bin/resolve-intel
|
|
Terminal=false
|
|
Icon=davinci-resolve
|
|
Categories=AudioVideo;Video;Graphics;
|
|
StartupWMClass=resolve
|
|
X-GNOME-UsesNotifications=true
|
|
EOF
|
|
|
|
update-desktop-database "${HOME}/.local/share/applications" >/dev/null 2>&1 || true
|
|
sudo gtk-update-icon-cache -f /usr/share/icons/hicolor >/dev/null 2>&1 || true
|
|
|
|
log_success "DaVinci Resolve (Intel Edition) instalado en /opt/resolve"
|
|
log_info "Usa 'resolve-intel' para lanzar la aplicación"
|
|
log_info "Para verificar OpenCL: clinfo | grep -E 'Platform Name|Device Name'"
|
|
|
|
return 0
|
|
}
|
|
|
|
# Ejecutar si se llama directamente
|
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
install_davinci_resolve "$@"
|
|
fi
|
|
|