Files
netris-nestri/base.Dockerfile
2024-04-16 03:16:39 +03:00

288 lines
7.4 KiB
Docker

# This builds and updates the screen recorder we use on Netris
# From https://git.dec05eba.com/gpu-screen-recorder
FROM ubuntu:23.10
ENV DEBIAN_FRONTEND=noninteractive \
TIMEZONE=Africa/Nairobi \
XDG_RUNTIME_DIR=/tmp/runtime-ubuntu \
DISPLAY=:0 \
PULSE_SERVER=unix:/run/pulse/native
# WAYLAND_DISPLAY=wayland-0
# Install fundamental packages
RUN apt-get clean \
&& apt-get update \
&& apt-get upgrade -y \
&& apt-get install --no-install-recommends -y \
apt-transport-https \
apt-utils \
build-essential \
ca-certificates \
curl \
gnupg \
locales \
make \
software-properties-common \
wget \
&& rm -rf /var/lib/apt/lists/* \
&& locale-gen en_US.UTF-8
# Set locales
ENV LANG=en_US.UTF-8 \
LANGUAGE=en_US:en \
LC_ALL=en_US.UTF-8
# Install operating system libraries or packages
RUN dpkg --add-architecture i386 \
&& apt-get update \
&& apt-get install --no-install-recommends -y \
alsa-base \
alsa-utils \
cups-browsed \
cups-bsd \
cups-common \
cups-filters \
printer-driver-cups-pdf \
file \
bzip2 \
gzip \
xz-utils \
unar \
rar \
unrar \
zip \
unzip \
zstd \
gcc \
git \
jq \
python3 \
python3-cups \
python3-numpy \
ssl-cert \
nano \
vim \
htop \
fakeroot \
fonts-dejavu \
fonts-freefont-ttf \
fonts-hack \
fonts-liberation \
fonts-noto \
fonts-noto-cjk \
fonts-noto-cjk-extra \
fonts-noto-color-emoji \
fonts-noto-extra \
fonts-noto-ui-extra \
fonts-noto-hinted \
fonts-noto-mono \
fonts-noto-unhinted \
fonts-opensymbol \
fonts-symbola \
fonts-ubuntu \
lame \
less \
libavcodec-extra \
libpulse0 \
pulseaudio \
supervisor \
net-tools \
packagekit-tools \
pkg-config \
mesa-utils \
va-driver-all \
va-driver-all:i386 \
i965-va-driver-shaders \
i965-va-driver-shaders:i386 \
intel-media-va-driver-non-free \
intel-media-va-driver-non-free:i386 \
libva2 \
libva2:i386 \
vainfo \
vdpau-driver-all \
vdpau-driver-all:i386 \
vdpauinfo \
mesa-vulkan-drivers \
mesa-vulkan-drivers:i386 \
libvulkan-dev \
libvulkan-dev:i386 \
vulkan-tools \
ocl-icd-libopencl1 \
clinfo \
dbus-user-session \
dbus-x11 \
libdbus-c++-1-0v5 \
xkb-data \
xauth \
xbitmaps \
xdg-user-dirs \
xdg-utils \
xfonts-base \
xfonts-scalable \
xinit \
xsettingsd \
libxrandr-dev \
x11-xkb-utils \
x11-xserver-utils \
x11-utils \
x11-apps \
xserver-xorg-input-all \
xserver-xorg-input-wacom \
xserver-xorg-video-all \
xserver-xorg-video-intel \
xserver-xorg-video-qxl \
# Install OpenGL libraries
libxau6 \
libxau6:i386 \
libxdmcp6 \
libxdmcp6:i386 \
libxcb1 \
libxcb1:i386 \
libxext6 \
libxext6:i386 \
libx11-6 \
libx11-6:i386 \
libxv1 \
libxv1:i386 \
libxtst6 \
libxtst6:i386 \
libglvnd0 \
libglvnd0:i386 \
libgl1 \
libgl1:i386 \
libglx0 \
libglx0:i386 \
libegl1 \
libegl1:i386 \
libgles2 \
libgles2:i386 \
libglu1 \
libglu1:i386 \
libsm6 \
libsm6:i386 \
mesa-utils \
mesa-utils-extra \
xcvt \
&& rm -rf /var/lib/apt/lists/* \
&& echo "/usr/local/nvidia/lib" >> /etc/ld.so.conf.d/nvidia.conf \
&& echo "/usr/local/nvidia/lib64" >> /etc/ld.so.conf.d/nvidia.conf \
# Configure OpenCL manually
&& mkdir -pm755 /etc/OpenCL/vendors \
&& echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd \
# Configure Vulkan manually
&& VULKAN_API_VERSION=$(dpkg -s libvulkan1 | grep -oP 'Version: [0-9|\.]+' | grep -oP '[0-9]+(\.[0-9]+)(\.[0-9]+)') \
&& mkdir -pm755 /etc/vulkan/icd.d/ \
&& echo "{\n\
\"file_format_version\" : \"1.0.0\",\n\
\"ICD\": {\n\
\"library_path\": \"libGLX_nvidia.so.0\",\n\
\"api_version\" : \"${VULKAN_API_VERSION}\"\n\
}\n\
}" > /etc/vulkan/icd.d/nvidia_icd.json \
# Configure EGL manually
&& mkdir -pm755 /usr/share/glvnd/egl_vendor.d/ \
&& echo "{\n\
\"file_format_version\" : \"1.0.0\",\n\
\"ICD\": {\n\
\"library_path\": \"libEGL_nvidia.so.0\"\n\
}\n\
}" > /usr/share/glvnd/egl_vendor.d/10_nvidia.json
# Expose NVIDIA libraries and paths
ENV PATH=/usr/local/nvidia/bin${PATH:+:${PATH}} \
LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}/usr/local/nvidia/lib:/usr/local/nvidia/lib64 \
XDG_SESSION_TYPE=x11 \
# Enable AppImage execution in containers
APPIMAGE_EXTRACT_AND_RUN=1
ENV \
# Make all NVIDIA GPUs visible by default
NVIDIA_VISIBLE_DEVICES=all \
# All NVIDIA driver capabilities should preferably be used, check `NVIDIA_DRIVER_CAPABILITIES` inside the container if things do not work
NVIDIA_DRIVER_CAPABILITIES=all \
# Disable VSYNC for NVIDIA GPUs
__GL_SYNC_TO_VBLANK=0
#Build and install gpu-screen-recorder
RUN apt-get update -y \
&& apt-get install -y \
curl \
unzip \
git \
build-essential \
ninja-build \
gcc \
meson \
cmake \
ccache \
bison \
software-properties-common \
ca-certificates \
equivs \
ca-certificates\
libcap2-bin \
libllvm15 \
libavcodec-dev \
libavformat-dev \
libavutil-dev \
libavfilter-dev \
libavdevice-dev \
libswresample-dev \
libswscale-dev \
libx11-dev \
libxcomposite-dev \
libkpipewire-dev \
libxrandr-dev \
libxfixes-dev \
libpulse-dev \
libswresample-dev \
libva-dev \
libcap-dev \
libdrm-dev \
libgl-dev \
libegl-dev \
libwayland-dev \
libnvidia-egl-wayland-dev \
libwayland-egl-backend-dev \
wayland-protocols \
&& rm -rf /var/lib/apt/lists/* \
#Install Nvrtc
&& NVRTC_VERSION="11.0.221" \
&& cd /tmp && curl -fsSL -o nvidia_cuda_nvrtc_linux_x86_64.whl "https://developer.download.nvidia.com/compute/redist/nvidia-cuda-nvrtc/nvidia_cuda_nvrtc-${NVRTC_VERSION}-cp36-cp36m-linux_x86_64.whl" \
&& unzip -joq -d ./nvrtc nvidia_cuda_nvrtc_linux_x86_64.whl && cd nvrtc && chmod 755 libnvrtc* \
&& find . -maxdepth 1 -type f -name "*libnvrtc.so.*" -exec sh -c 'ln -snf $(basename {}) libnvrtc.so' \; \
&& mkdir -p /usr/local/nvidia/lib && mv -f libnvrtc* /usr/local/nvidia/lib \
&& git clone https://repo.dec05eba.com/gpu-screen-recorder && cd gpu-screen-recorder \
&& chmod +x ./build.sh ./install.sh \
&& ./install.sh
#Try building shadow-cast
RUN git clone https://github.com/gmbeard/shadow-cast && cd shadow-cast \
&& mkdir ./build && cd ./build \
&& cmake -DCMAKE_CXX_FLAGS="-Wno-error=unused-result" -DCMAKE_C_FLAGS="-Wno-error=unused-result" .. \
&& cmake --build . -- -j$(nproc) \
&& chmod +x ./install-helper.sh \
&& ./install-helper.sh
RUN apt-get update -y; \
apt-get upgrade -y; \
add-apt-repository ppa:savoury1/ffmpeg4 \
add-apt-repository ppa:savoury1/ffmpeg6 \
apt-get update -y; \
apt-get upgrade -y && apt-get dist-upgrade -y; \
apt-get install ffmpeg -y; \
#
# Log the ffmpeg version
ffmpeg -version
# Install Xorg and NVIDIA driver installer dependencies
RUN apt-get update \
&& apt-get install --no-install-recommends -y \
kmod \
libc6-dev \
libc6:i386 \
libpci3 \
libelf-dev \
pkg-config \
xorg \
&& rm -rf /var/lib/apt/lists/*