mirror of
https://github.com/nestriness/nestri.git
synced 2025-12-11 00:05:36 +02:00
288 lines
7.4 KiB
Docker
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/* |