# openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem
# docker build -t obstest .
# sudo docker run --init --runtime=nvidia --device=/dev/tty11:/dev/tty2 -v /home/ubuntu/obs-config:/root/.config/obs-studio --name=obstest --rm -it -p 5901:5901 -p 4444:4444 obstest

FROM nvidia/opengl:1.1-glvnd-devel

ARG TURBOVNC_VERSION=2.1.2
ARG VIRTUALGL_VERSION=2.5.2
ARG LIBJPEG_VERSION=1.5.2
ARG WEBSOCKIFY_VERSION=0.8.0
ARG NOVNC_VERSION=1.0.0-beta

ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES},display,video
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates \
    build-essential \
    gdb \
    git \
    checkinstall \
    unzip \
    curl \
    vim \
    gcc \
    sudo \
    libc6-dev \
    libglu1 \
    libglu1:i386 \
    cmake \
    python \
    python-numpy \
    awscli \
    pciutils \
    pkg-config \
    module-init-tools \
    mesa-utils

RUN cd /tmp && \
    curl -fsSL -O https://s3.amazonaws.com/ec2-linux-nvidia-drivers/grid-9.1/NVIDIA-Linux-x86_64-430.46-grid.run && \
    /bin/sh NVIDIA-Linux-x86_64-430.46-grid.run --no-questions --accept-license --no-precompiled-interface --no-kernel-module --ui=none

RUN apt-get update && apt-get install -y --no-install-recommends \
    xauth \
    xorg \
    openbox

RUN cd /tmp && \
    curl -fsSL -O https://downloads.sourceforge.net/project/turbovnc/${TURBOVNC_VERSION}/turbovnc_${TURBOVNC_VERSION}_amd64.deb \
      -O https://downloads.sourceforge.net/project/libjpeg-turbo/${LIBJPEG_VERSION}/libjpeg-turbo-official_${LIBJPEG_VERSION}_amd64.deb \
      -O https://downloads.sourceforge.net/project/virtualgl/${VIRTUALGL_VERSION}/virtualgl_${VIRTUALGL_VERSION}_amd64.deb \
      -O https://downloads.sourceforge.net/project/virtualgl/${VIRTUALGL_VERSION}/virtualgl32_${VIRTUALGL_VERSION}_amd64.deb && \
    dpkg -i *.deb && \
    rm -f /tmp/*.deb && \
    sed -i 's/$host:/unix:/g' /opt/TurboVNC/bin/vncserver

ENV PATH ${PATH}:/opt/VirtualGL/bin:/opt/TurboVNC/bin

RUN curl -fsSL https://github.com/novnc/noVNC/archive/v${NOVNC_VERSION}.tar.gz | tar -xzf - -C /opt && \
    curl -fsSL https://github.com/novnc/websockify/archive/v${WEBSOCKIFY_VERSION}.tar.gz | tar -xzf - -C /opt && \
    mv /opt/noVNC-${NOVNC_VERSION} /opt/noVNC && \
    mv /opt/websockify-${WEBSOCKIFY_VERSION} /opt/websockify && \
    ln -s /opt/noVNC/vnc_lite.html /opt/noVNC/index.html && \
    cd /opt/websockify && make

RUN echo 'no-httpd\n\
no-x11-tcp-connections\n\
no-pam-sessions\n\
permitted-security-types = otp\
' > /etc/turbovncserver-security.conf

RUN /opt/VirtualGL/bin/vglserver_config -config -s -f -t

RUN sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list && \
    apt-get update

RUN cd /tmp && \
    apt-get build-dep -y ffmpeg && \
    git clone https://github.com/FFmpeg/nv-codec-headers && \
    cd nv-codec-headers && \
    make && \
    make install

RUN cd /tmp && \
    git clone --branch n3.4 https://github.com/FFmpeg/FFmpeg.git && \
    cd FFmpeg && \
    ./configure --enable-nonfree --enable-gpl --enable-shared --enable-nvenc && \
    make -j$(nproc) && \
    make install

RUN apt-get install -y --no-install-recommends \
    vlc \
    libgconf-2-4 \
    libnss3 \
    libxss1 \
    libatk-bridge2.0-0 \
    libx11-dev \
    libgl1-mesa-dev \
    libvlc-dev \
    libpulse-dev \
    libxcomposite-dev \
    libxinerama-dev \
    libv4l-dev \
    libudev-dev \
    libfreetype6-dev \
    libfontconfig1-dev \
    qtbase5-dev \
    libqt5x11extras5-dev \
    libx264-dev \
    libxcb-xinerama0-dev \
    libxcb-shm0-dev \
    libjack-jackd2-dev \
    libcurl4-openssl-dev \
    libluajit-5.1-dev \
    swig \
    python3-dev \
    pulseaudio \
    libqt5svg5-dev \
    libboost-all-dev

# http://opensource.spotify.com/cefbuilds/index.html

RUN cd /tmp && \
    curl -fsSL http://opensource.spotify.com/cefbuilds/cef_binary_75.1.14%2Bgc81164e%2Bchromium-75.0.3770.100_linux64_minimal.tar.bz2 -o "cef.tar.bz2" && \
    mkdir cef && \
    tar -xjf cef.tar.bz2 --one-top-level=cef --strip-components=1 && \
    cd cef && mkdir build && cd build && \
    cmake -DCMAKE_CXX_FLAGS="-Wno-attributes" .. && \
    make -j$(nproc)

ARG FROM_OBS=unknown
RUN cd /tmp && \
    git clone https://github.com/IainCole/obs-studio.git --single-branch --branch ic_24_linux_support && \
    cd obs-studio && \
    git submodule init && \
    git submodule update --remote && \
    mkdir build && cd build && \
    cmake -DUNIX_STRUCTURE=1 -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_BROWSER=ON -DCEF_ROOT_DIR="/tmp/cef" .. && \
    make -j$(nproc) && \
    make install

RUN cd /tmp && \
    git clone --recursive https://github.com/Palakis/obs-websocket.git && \
    cd obs-websocket && \
    mkdir build && cd build && \
    cmake -DLIBOBS_INCLUDE_DIR="/tmp/obs-studio/libobs" -DCMAKE_INSTALL_PREFIX=/usr .. && \
    make -j$(nproc) && \
    make install

RUN echo '/usr/lib/obs-plugins' >> /etc/ld.so.conf.d/glvnd.conf && \
    ldconfig

ENV LD_LIBRARY_PATH /usr/lib/obs-plugins${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

RUN cd /tmp && \
  apt-get install -y \
  iptables \
  net-tools

RUN cd /tmp && \
    apt-get install -y dbus-x11

RUN rm -rf /tmp/* && \
    rm -rf /var/lib/apt/lists/*

RUN groupadd -r obs && useradd -m -r -g obs obs && usermod -a -G vglusers obs

COPY self.pem /

EXPOSE 5901
EXPOSE 4444

ENV DISPLAY :1

COPY start.sh start.sh

ENTRYPOINT ["/bin/sh", "./start.sh"]
