# syntax=docker/dockerfile:1.7

# ============================================================
# Versions
# ============================================================

ARG SUNSHINE_VERSION=v2025.924.154138

ARG NVIDIA_DRIVER_VERSION=580.126.20
ARG NVIDIA_DRIVER_PACKAGE_VERSION=580.126.20-1ubuntu1

# ============================================================
# ============================================================


# On récupère le paquet Sunshine depuis l'image officielle.
FROM ghcr.io/lizardbyte/sunshine:${SUNSHINE_VERSION}-ubuntu-24.04 AS sunshine

# PoC : on réutilise volontairement notre environnement graphique déjà validé.
FROM image-registry.openshift-image-registry.svc:5000/desktop/desktop:latest

# Import global ARGs into this build stage
ARG NVIDIA_DRIVER_VERSION
ARG NVIDIA_DRIVER_PACKAGE_VERSION

USER root

# L'image Sunshine officielle conserve le .deb utilisé pour installer Sunshine.
COPY --from=sunshine /sunshine.deb /tmp/sunshine.deb

RUN apt-get update \
    && apt-get install --no-install-recommends -y /tmp/sunshine.deb \
    && rm -f /tmp/sunshine.deb \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /var/cache/apt/*

COPY sunshine-entrypoint.sh /etc/sunshine-entrypoint.sh

RUN sed -i 's/\r$//' /etc/sunshine-entrypoint.sh \
    && chmod 0755 /etc/sunshine-entrypoint.sh

# Steam / Proton
RUN dpkg --add-architecture i386 \
    && apt-get update \
    && apt-get install --no-install-recommends -y \
        ca-certificates \
        curl \
    && curl -fsSL \
        https://repo.steampowered.com/steam/archive/stable/steam.gpg \
        -o /usr/share/keyrings/steam.gpg \
    && printf '%s\n' \
        'deb [arch=amd64,i386 signed-by=/usr/share/keyrings/steam.gpg] https://repo.steampowered.com/steam/ stable steam' \
        > /etc/apt/sources.list.d/steam-bootstrap.list \
    && apt-get update \
    && apt-get install --no-install-recommends -y \
        steam-launcher \
        steam-libs-amd64 \
        steam-libs-i386 \
        libegl1:amd64 \
        libegl1:i386 \
        libgbm1:amd64 \
        libgbm1:i386 \
        libgl1:amd64 \
        libgl1:i386 \
        libgl1-mesa-dri:amd64 \
        libgl1-mesa-dri:i386 \
        libglx-mesa0:amd64 \
        libglx-mesa0:i386 \
        libvulkan1:amd64 \
        libvulkan1:i386 \
    && rm -f /etc/apt/sources.list.d/steam-bootstrap.list \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /var/cache/apt/*

# Stack 32bits Nvidia
RUN curl -fsSLO \
        https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb \
    && dpkg -i cuda-keyring_1.1-1_all.deb \
    && rm -f cuda-keyring_1.1-1_all.deb \
    && dpkg --add-architecture i386 \
    && apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
        libnvidia-common-580=${NVIDIA_DRIVER_PACKAGE_VERSION} \
        libnvidia-gpucomp-580:i386=${NVIDIA_DRIVER_PACKAGE_VERSION} \
        libnvidia-decode-580:i386=${NVIDIA_DRIVER_PACKAGE_VERSION} \
        libnvidia-compute-580:i386=${NVIDIA_DRIVER_PACKAGE_VERSION} \
        libnvidia-gl-580:i386=${NVIDIA_DRIVER_PACKAGE_VERSION} \
    && mkdir -p /opt/nvidia-i386 \
    && for f in $(dpkg -L \
        libnvidia-gl-580:i386 \
        libnvidia-compute-580:i386 \
        libnvidia-decode-580:i386 \
        libnvidia-gpucomp-580:i386 \
        | grep '^/usr/lib/i386-linux-gnu/'); do \
          if [ -e "$f" ] || [ -L "$f" ]; then \
            cp -a --parents "$f" /opt/nvidia-i386/; \
          fi; \
       done \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

USER 1000:1000

ENV DISPLAY=:20 \
    HOME=/home/ubuntu \
    USER=ubuntu \
    XDG_RUNTIME_DIR=/tmp/runtime-ubuntu \
    PIPEWIRE_RUNTIME_DIR=/tmp/runtime-ubuntu \
    PULSE_RUNTIME_PATH=/tmp/runtime-ubuntu/pulse \
    PULSE_SERVER=unix:/tmp/runtime-ubuntu/pulse/native \
    NVIDIA_VISIBLE_DEVICES=all \
    NVIDIA_DRIVER_CAPABILITIES=all

WORKDIR /home/ubuntu

EXPOSE 47984-47990/tcp
EXPOSE 48010/tcp
EXPOSE 47998-48000/udp

ENTRYPOINT ["/etc/sunshine-entrypoint.sh"]