Files
distrobox-images/davinci/Dockerfile
2026-09-09 11:50:57 +02:00

72 lines
3.2 KiB
Docker

# syntax=docker/dockerfile:1.7
#
# Base image + dependency list copied from zelikos/davincibox
# (https://github.com/zelikos/davincibox), the most battle-tested distrobox
# image for DaVinci Resolve on Linux. One deliberate difference from
# upstream: Resolve itself is baked in at build time here (this repo's
# convention: build once, push, no setup step after `distrobox create`)
# instead of being installed into the box afterwards by their
# `setup-davinci` script.
#
# The silent-install invocation and the patchelf fix below are copied
# verbatim from davincibox's `system_files/usr/bin/setup-davinci` script,
# cross-confirmed against fat-tire/resolve's Dockerfile
# (https://github.com/fat-tire/resolve) which drives the same installer with
# the same `-i -a -y` flags at Docker build time — not guessed.
FROM quay.io/fedora/fedora-toolbox:44 AS base
LABEL com.github.containers.toolbox="true" \
usage="This image is meant to be used with the distrobox command" \
summary="DaVinci Resolve, baked in, for distrobox"
# davincibox's own dependency list, proven against real Resolve installs
# (Fedora Atomic, Bluefin, Bazzite - see davinci/CLAUDE.md).
COPY davinci-dependencies /davinci-dependencies
RUN dnf -y update && \
grep -v '^#' /davinci-dependencies | xargs dnf -y install && \
rm /davinci-dependencies && \
dnf clean all
# The .run installer as downloaded from Blackmagic's site and unzipped
# (DaVinci_Resolve_<version>_Linux.run, or the _Studio_ variant), placed
# next to this Dockerfile.
ARG RESOLVE_INSTALLER=DaVinci_Resolve_Linux.run
COPY ${RESOLVE_INSTALLER} /tmp/resolve.run
# `-i -a -y`: silent install, accept all, assume yes - same flags used by
# davincibox's setup-davinci and by fat-tire/resolve's Dockerfile.
# QT_QPA_PLATFORM=minimal + SKIP_PACKAGE_CHECK=1: needed with no display
# attached, from davincibox (see zelikos/davincibox#35).
RUN cd /tmp && \
chmod +x resolve.run && \
./resolve.run --appimage-extract >/dev/null && \
cd squashfs-root && \
QT_QPA_PLATFORM=minimal SKIP_PACKAGE_CHECK=1 ./AppRun -i -a -y && \
cd /tmp && rm -rf resolve.run squashfs-root
# Resolve's own binaries dlopen these libs without a DT_NEEDED entry
# (avoids the LD_PRELOAD workaround described at
# https://www.reddit.com/r/voidlinux/comments/12g71x0/comment/l2cwo27/).
# Same fix, same (full-path) argument form, as davincibox's setup-davinci.
RUN find /opt/resolve/bin -executable -type f -exec patchelf \
--add-needed /usr/lib64/libglib-2.0.so.0 \
--add-needed /usr/lib64/libgdk_pixbuf-2.0.so.0 \
--add-needed /usr/lib64/libgio-2.0.so.0 \
--add-needed /usr/lib64/libgmodule-2.0.so.0 {} \;
COPY davinci-run /usr/local/bin/davinci-run
RUN chmod +x /usr/local/bin/davinci-run
FROM base AS amd
# Covers AMD (ROCm) and Intel (intel-compute-runtime) in one image, like
# davincibox's "-opencl" variant. mesa-libOpenCL (rusticl) is removed first:
# it breaks ROCm outright (zelikos/davincibox#173).
RUN dnf -y remove mesa-libOpenCL && \
dnf -y install intel-compute-runtime rocm-opencl && \
dnf clean all
FROM base AS nvidia
# OpenCL/CUDA/NVENC come from the host driver, not baked in.
ENV NVIDIA_VISIBLE_DEVICES=all
ENV NVIDIA_DRIVER_CAPABILITIES=all