diff --git a/Dockerfile b/Dockerfile index 79f7acc..dd80749 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,45 +7,45 @@ RUN \ sed -i 's/# deb-src/deb-src/g' /etc/apt/sources.list && \ apt-get update && \ apt-get install -y \ - build-essential \ - devscripts \ - dpkg-dev \ - git \ - libpulse-dev \ - pulseaudio && \ - apt build-dep -y \ - pulseaudio \ - xrdp + build-essential \ + devscripts \ + dpkg-dev \ + git \ + libpulse-dev \ + pulseaudio && \ + apt build-dep -y \ + pulseaudio \ + xrdp RUN \ - echo "**** build pulseaudio modules ****" && \ - mkdir -p /buildout/var/lib/xrdp-pulseaudio-installer && \ - tmp=$(mktemp -d); cd "$tmp" && \ - pulseaudio_version=$(dpkg-query -W -f='${source:Version}' pulseaudio|awk -F: '{print $2}') && \ - pulseaudio_upstream_version=$(dpkg-query -W -f='${source:Upstream-Version}' pulseaudio) && \ - set -- $(apt-cache policy pulseaudio | fgrep -A1 '***' | tail -1) && \ - mirror=$2 && \ - suite=${3#*/} && \ - dget -u "$mirror/pool/$suite/p/pulseaudio/pulseaudio_$pulseaudio_version.dsc" && \ - cd "pulseaudio-$pulseaudio_upstream_version" && \ - ./configure && \ - cd - && \ - git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git && \ - cd pulseaudio-module-xrdp && \ - git checkout ${XRDP_PULSE_VERSION} && \ - ./bootstrap && \ - ./configure PULSE_DIR="$tmp/pulseaudio-$pulseaudio_upstream_version" && \ - make && \ - install -t "/buildout/var/lib/xrdp-pulseaudio-installer" -D -m 644 src/.libs/*.so + echo "**** build pulseaudio modules ****" && \ + mkdir -p /buildout/var/lib/xrdp-pulseaudio-installer && \ + tmp=$(mktemp -d); cd "$tmp" && \ + pulseaudio_version=$(dpkg-query -W -f='${source:Version}' pulseaudio|awk -F: '{print $2}') && \ + pulseaudio_upstream_version=$(dpkg-query -W -f='${source:Upstream-Version}' pulseaudio) && \ + set -- $(apt-cache policy pulseaudio | fgrep -A1 '***' | tail -1) && \ + mirror=$2 && \ + suite=${3#*/} && \ + dget -u "$mirror/pool/$suite/p/pulseaudio/pulseaudio_$pulseaudio_version.dsc" && \ + cd "pulseaudio-$pulseaudio_upstream_version" && \ + ./configure && \ + cd - && \ + git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git && \ + cd pulseaudio-module-xrdp && \ + git checkout ${XRDP_PULSE_VERSION} && \ + ./bootstrap && \ + ./configure PULSE_DIR="$tmp/pulseaudio-$pulseaudio_upstream_version" && \ + make && \ + install -t "/buildout/var/lib/xrdp-pulseaudio-installer" -D -m 644 src/.libs/*.so RUN \ - echo "**** build xrdp with fuse disabled ****" && \ - cd /tmp && \ - apt-get source xrdp && \ - cd xrdp-* && \ - sed -i 's/--enable-fuse/--disable-fuse/g' debian/rules && \ - debuild -b -uc -us && \ - cp -ax ../xrdp_*.deb /buildout/xrdp.deb + echo "**** build xrdp with fuse disabled ****" && \ + cd /tmp && \ + apt-get source xrdp && \ + cd xrdp-* && \ + sed -i 's/--enable-fuse/--disable-fuse/g' debian/rules && \ + debuild -b -uc -us && \ + cp -ax ../xrdp_*.deb /buildout/xrdp.deb # docker compose FROM ghcr.io/linuxserver/docker-compose:amd64-latest as compose @@ -63,51 +63,57 @@ LABEL maintainer="thelamer" COPY --from=buildstage /buildout/ / COPY --from=compose /usr/local/bin/docker-compose /usr/local/bin/docker-compose +#Add needed nvidia environment variables for https://github.com/NVIDIA/nvidia-docker +ENV NVIDIA_DRIVER_CAPABILITIES="compute,video,utility" + RUN \ - echo "**** install deps ****" && \ - ldconfig && \ - apt-get update && \ - DEBIAN_FRONTEND=noninteractive \ - apt-get install -y --no-install-recommends \ - apt-transport-https \ - ca-certificates \ - curl \ - dbus-x11 \ - gawk \ - gnupg2 \ - libfuse2 \ - libx11-dev \ - libxfixes3 \ - libxml2 \ - libxrandr2 \ - openssh-client \ - pulseaudio \ - software-properties-common \ - sudo \ - x11-apps \ - x11-xserver-utils \ - xfonts-base \ - xorgxrdp \ - xrdp \ - xserver-xorg-core \ - xutils \ - zlib1g && \ - dpkg -i /xrdp.deb && \ - rm /xrdp.deb && \ - echo "**** install docker ****" && \ - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \ - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" && \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - docker-ce-cli && \ - echo "**** cleanup and user perms ****" && \ - echo "abc:abc" | chpasswd && \ - usermod -aG sudo abc && \ - apt-get autoclean && \ - rm -rf \ - /var/lib/apt/lists/* \ - /var/tmp/* \ - /tmp/* + echo "**** install deps ****" && \ + ldconfig && \ + apt-get update && \ + DEBIAN_FRONTEND=noninteractive \ + apt-get install -y --no-install-recommends \ + apt-transport-https \ + ca-certificates \ + curl \ + dbus-x11 \ + gawk \ + gnupg2 \ + libfuse2 \ + libx11-dev \ + libxfixes3 \ + libxml2 \ + libxrandr2 \ + openssh-client \ + pulseaudio \ + software-properties-common \ + sudo \ + x11-apps \ + x11-xserver-utils \ + xfonts-base \ + xorgxrdp \ + xrdp \ + xserver-xorg-core \ + xserver-xorg-video-intel \ + xserver-xorg-video-amdgpu \ + xserver-xorg-video-ati \ + xutils \ + zlib1g && \ + dpkg -i /xrdp.deb && \ + rm /xrdp.deb && \ + echo "**** install docker ****" && \ + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \ + add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + docker-ce-cli && \ + echo "**** cleanup and user perms ****" && \ + echo "abc:abc" | chpasswd && \ + usermod -aG sudo abc && \ + apt-get autoclean && \ + rm -rf \ + /var/lib/apt/lists/* \ + /var/tmp/* \ + /tmp/* # add local files COPY /root / diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index e0a2618..e5e83e5 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -3,49 +3,49 @@ FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-focal as buildstage ARG XRDP_PULSE_VERSION=v0.4 RUN \ - echo "**** install build deps ****" && \ - sed -i 's/# deb-src/deb-src/g' /etc/apt/sources.list && \ - apt-get update && \ - apt-get install -y \ - build-essential \ - devscripts \ - dpkg-dev \ - git \ - libpulse-dev \ - pulseaudio && \ - apt build-dep -y \ - pulseaudio \ - xrdp + echo "**** install build deps ****" && \ + sed -i 's/# deb-src/deb-src/g' /etc/apt/sources.list && \ + apt-get update && \ + apt-get install -y \ + build-essential \ + devscripts \ + dpkg-dev \ + git \ + libpulse-dev \ + pulseaudio && \ + apt build-dep -y \ + pulseaudio \ + xrdp RUN \ - echo "**** build pulseaudio modules ****" && \ - mkdir -p /buildout/var/lib/xrdp-pulseaudio-installer && \ - tmp=$(mktemp -d); cd "$tmp" && \ - pulseaudio_version=$(dpkg-query -W -f='${source:Version}' pulseaudio|awk -F: '{print $2}') && \ - pulseaudio_upstream_version=$(dpkg-query -W -f='${source:Upstream-Version}' pulseaudio) && \ - set -- $(apt-cache policy pulseaudio | fgrep -A1 '***' | tail -1) && \ - mirror=$2 && \ - suite=${3#*/} && \ - dget -u "$mirror/pool/$suite/p/pulseaudio/pulseaudio_$pulseaudio_version.dsc" && \ - cd "pulseaudio-$pulseaudio_upstream_version" && \ - ./configure && \ - cd - && \ - git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git && \ - cd pulseaudio-module-xrdp && \ - git checkout ${XRDP_PULSE_VERSION} && \ - ./bootstrap && \ - ./configure PULSE_DIR="$tmp/pulseaudio-$pulseaudio_upstream_version" && \ - make && \ - install -t "/buildout/var/lib/xrdp-pulseaudio-installer" -D -m 644 src/.libs/*.so + echo "**** build pulseaudio modules ****" && \ + mkdir -p /buildout/var/lib/xrdp-pulseaudio-installer && \ + tmp=$(mktemp -d); cd "$tmp" && \ + pulseaudio_version=$(dpkg-query -W -f='${source:Version}' pulseaudio|awk -F: '{print $2}') && \ + pulseaudio_upstream_version=$(dpkg-query -W -f='${source:Upstream-Version}' pulseaudio) && \ + set -- $(apt-cache policy pulseaudio | fgrep -A1 '***' | tail -1) && \ + mirror=$2 && \ + suite=${3#*/} && \ + dget -u "$mirror/pool/$suite/p/pulseaudio/pulseaudio_$pulseaudio_version.dsc" && \ + cd "pulseaudio-$pulseaudio_upstream_version" && \ + ./configure && \ + cd - && \ + git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git && \ + cd pulseaudio-module-xrdp && \ + git checkout ${XRDP_PULSE_VERSION} && \ + ./bootstrap && \ + ./configure PULSE_DIR="$tmp/pulseaudio-$pulseaudio_upstream_version" && \ + make && \ + install -t "/buildout/var/lib/xrdp-pulseaudio-installer" -D -m 644 src/.libs/*.so RUN \ - echo "**** build xrdp with fuse disabled ****" && \ - cd /tmp && \ - apt-get source xrdp && \ - cd xrdp-* && \ - sed -i 's/--enable-fuse/--disable-fuse/g' debian/rules && \ - debuild -b -uc -us && \ - cp -ax ../xrdp_*.deb /buildout/xrdp.deb + echo "**** build xrdp with fuse disabled ****" && \ + cd /tmp && \ + apt-get source xrdp && \ + cd xrdp-* && \ + sed -i 's/--enable-fuse/--disable-fuse/g' debian/rules && \ + debuild -b -uc -us && \ + cp -ax ../xrdp_*.deb /buildout/xrdp.deb # docker compose FROM ghcr.io/linuxserver/docker-compose:arm64v8-latest as compose @@ -64,50 +64,50 @@ COPY --from=buildstage /buildout/ / COPY --from=compose /usr/local/bin/docker-compose /usr/local/bin/docker-compose RUN \ - echo "**** install deps ****" && \ - ldconfig && \ - apt-get update && \ - DEBIAN_FRONTEND=noninteractive \ - apt-get install -y --no-install-recommends \ - apt-transport-https \ - ca-certificates \ - curl \ - dbus-x11 \ - gawk \ - gnupg2 \ - libfuse2 \ - libx11-dev \ - libxfixes3 \ - libxml2 \ - libxrandr2 \ - openssh-client \ - pulseaudio \ - software-properties-common \ - sudo \ - x11-apps \ - x11-xserver-utils \ - xfonts-base \ - xorgxrdp \ - xrdp \ - xserver-xorg-core \ - xutils \ - zlib1g && \ - dpkg -i /xrdp.deb && \ - rm /xrdp.deb && \ - echo "**** install docker ****" && \ - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \ - add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu bionic stable" && \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - docker-ce-cli && \ - echo "**** cleanup and user perms ****" && \ - echo "abc:abc" | chpasswd && \ - usermod -aG sudo abc && \ - apt-get autoclean && \ - rm -rf \ - /var/lib/apt/lists/* \ - /var/tmp/* \ - /tmp/* + echo "**** install deps ****" && \ + ldconfig && \ + apt-get update && \ + DEBIAN_FRONTEND=noninteractive \ + apt-get install -y --no-install-recommends \ + apt-transport-https \ + ca-certificates \ + curl \ + dbus-x11 \ + gawk \ + gnupg2 \ + libfuse2 \ + libx11-dev \ + libxfixes3 \ + libxml2 \ + libxrandr2 \ + openssh-client \ + pulseaudio \ + software-properties-common \ + sudo \ + x11-apps \ + x11-xserver-utils \ + xfonts-base \ + xorgxrdp \ + xrdp \ + xserver-xorg-core \ + xutils \ + zlib1g && \ + dpkg -i /xrdp.deb && \ + rm /xrdp.deb && \ + echo "**** install docker ****" && \ + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \ + add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu bionic stable" && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + docker-ce-cli && \ + echo "**** cleanup and user perms ****" && \ + echo "abc:abc" | chpasswd && \ + usermod -aG sudo abc && \ + apt-get autoclean && \ + rm -rf \ + /var/lib/apt/lists/* \ + /var/tmp/* \ + /tmp/* # add local files COPY /root / diff --git a/Dockerfile.armhf b/Dockerfile.armhf index 76d1868..cfec415 100644 --- a/Dockerfile.armhf +++ b/Dockerfile.armhf @@ -3,49 +3,49 @@ FROM ghcr.io/linuxserver/baseimage-ubuntu:arm32v7-focal as buildstage ARG XRDP_PULSE_VERSION=v0.4 RUN \ - echo "**** install build deps ****" && \ - sed -i 's/# deb-src/deb-src/g' /etc/apt/sources.list && \ - apt-get update && \ - apt-get install -y \ - build-essential \ - devscripts \ - dpkg-dev \ - git \ - libpulse-dev \ - pulseaudio && \ - apt build-dep -y \ - pulseaudio \ - xrdp + echo "**** install build deps ****" && \ + sed -i 's/# deb-src/deb-src/g' /etc/apt/sources.list && \ + apt-get update && \ + apt-get install -y \ + build-essential \ + devscripts \ + dpkg-dev \ + git \ + libpulse-dev \ + pulseaudio && \ + apt build-dep -y \ + pulseaudio \ + xrdp RUN \ - echo "**** build pulseaudio modules ****" && \ - mkdir -p /buildout/var/lib/xrdp-pulseaudio-installer && \ - tmp=$(mktemp -d); cd "$tmp" && \ - pulseaudio_version=$(dpkg-query -W -f='${source:Version}' pulseaudio|awk -F: '{print $2}') && \ - pulseaudio_upstream_version=$(dpkg-query -W -f='${source:Upstream-Version}' pulseaudio) && \ - set -- $(apt-cache policy pulseaudio | fgrep -A1 '***' | tail -1) && \ - mirror=$2 && \ - suite=${3#*/} && \ - dget -u "$mirror/pool/$suite/p/pulseaudio/pulseaudio_$pulseaudio_version.dsc" && \ - cd "pulseaudio-$pulseaudio_upstream_version" && \ - ./configure && \ - cd - && \ - git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git && \ - cd pulseaudio-module-xrdp && \ - git checkout ${XRDP_PULSE_VERSION} && \ - ./bootstrap && \ - ./configure PULSE_DIR="$tmp/pulseaudio-$pulseaudio_upstream_version" && \ - make && \ - install -t "/buildout/var/lib/xrdp-pulseaudio-installer" -D -m 644 src/.libs/*.so + echo "**** build pulseaudio modules ****" && \ + mkdir -p /buildout/var/lib/xrdp-pulseaudio-installer && \ + tmp=$(mktemp -d); cd "$tmp" && \ + pulseaudio_version=$(dpkg-query -W -f='${source:Version}' pulseaudio|awk -F: '{print $2}') && \ + pulseaudio_upstream_version=$(dpkg-query -W -f='${source:Upstream-Version}' pulseaudio) && \ + set -- $(apt-cache policy pulseaudio | fgrep -A1 '***' | tail -1) && \ + mirror=$2 && \ + suite=${3#*/} && \ + dget -u "$mirror/pool/$suite/p/pulseaudio/pulseaudio_$pulseaudio_version.dsc" && \ + cd "pulseaudio-$pulseaudio_upstream_version" && \ + ./configure && \ + cd - && \ + git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git && \ + cd pulseaudio-module-xrdp && \ + git checkout ${XRDP_PULSE_VERSION} && \ + ./bootstrap && \ + ./configure PULSE_DIR="$tmp/pulseaudio-$pulseaudio_upstream_version" && \ + make && \ + install -t "/buildout/var/lib/xrdp-pulseaudio-installer" -D -m 644 src/.libs/*.so RUN \ - echo "**** build xrdp with fuse disabled ****" && \ - cd /tmp && \ - apt-get source xrdp && \ - cd xrdp-* && \ - sed -i 's/--enable-fuse/--disable-fuse/g' debian/rules && \ - debuild -b -uc -us && \ - cp -ax ../xrdp_*.deb /buildout/xrdp.deb + echo "**** build xrdp with fuse disabled ****" && \ + cd /tmp && \ + apt-get source xrdp && \ + cd xrdp-* && \ + sed -i 's/--enable-fuse/--disable-fuse/g' debian/rules && \ + debuild -b -uc -us && \ + cp -ax ../xrdp_*.deb /buildout/xrdp.deb # docker compose FROM ghcr.io/linuxserver/docker-compose:arm32v7-latest as compose @@ -64,50 +64,50 @@ COPY --from=buildstage /buildout/ / COPY --from=compose /usr/local/bin/docker-compose /usr/local/bin/docker-compose RUN \ - echo "**** install deps ****" && \ - ldconfig && \ - apt-get update && \ - DEBIAN_FRONTEND=noninteractive \ - apt-get install -y --no-install-recommends \ - apt-transport-https \ - ca-certificates \ - curl \ - dbus-x11 \ - gawk \ - gnupg2 \ - libfuse2 \ - libx11-dev \ - libxfixes3 \ - libxml2 \ - libxrandr2 \ - openssh-client \ - pulseaudio \ - software-properties-common \ - sudo \ - x11-apps \ - x11-xserver-utils \ - xfonts-base \ - xorgxrdp \ - xrdp \ - xserver-xorg-core \ - xutils \ - zlib1g && \ - dpkg -i /xrdp.deb && \ - rm /xrdp.deb && \ - echo "**** install docker ****" && \ - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \ - add-apt-repository "deb [arch=armhf] https://download.docker.com/linux/ubuntu bionic stable" && \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - docker-ce-cli && \ - echo "**** cleanup and user perms ****" && \ - echo "abc:abc" | chpasswd && \ - usermod -aG sudo abc && \ - apt-get autoclean && \ - rm -rf \ - /var/lib/apt/lists/* \ - /var/tmp/* \ - /tmp/* + echo "**** install deps ****" && \ + ldconfig && \ + apt-get update && \ + DEBIAN_FRONTEND=noninteractive \ + apt-get install -y --no-install-recommends \ + apt-transport-https \ + ca-certificates \ + curl \ + dbus-x11 \ + gawk \ + gnupg2 \ + libfuse2 \ + libx11-dev \ + libxfixes3 \ + libxml2 \ + libxrandr2 \ + openssh-client \ + pulseaudio \ + software-properties-common \ + sudo \ + x11-apps \ + x11-xserver-utils \ + xfonts-base \ + xorgxrdp \ + xrdp \ + xserver-xorg-core \ + xutils \ + zlib1g && \ + dpkg -i /xrdp.deb && \ + rm /xrdp.deb && \ + echo "**** install docker ****" && \ + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \ + add-apt-repository "deb [arch=armhf] https://download.docker.com/linux/ubuntu bionic stable" && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + docker-ce-cli && \ + echo "**** cleanup and user perms ****" && \ + echo "abc:abc" | chpasswd && \ + usermod -aG sudo abc && \ + apt-get autoclean && \ + rm -rf \ + /var/lib/apt/lists/* \ + /var/tmp/* \ + /tmp/* # add local files COPY /root / diff --git a/root/etc/cont-init.d/50-gid-video b/root/etc/cont-init.d/50-gid-video new file mode 100644 index 0000000..aaf9dfd --- /dev/null +++ b/root/etc/cont-init.d/50-gid-video @@ -0,0 +1,35 @@ +#!/usr/bin/with-contenv bash + +FILES=$(find /dev/dri /dev/dvb -type c -print 2>/dev/null) + +for i in $FILES +do + VIDEO_GID=$(stat -c '%g' "${i}") + VIDEO_UID=$(stat -c '%u' "${i}") + # check if user matches device + if id -u abc | grep -qw "${VIDEO_UID}"; then + echo "**** permissions for ${i} are good ****" + else + # check if group matches and that device has group rw + if id -G abc | grep -qw "${VIDEO_GID}" && [ $(stat -c '%A' "${i}" | cut -b 5,6) = "rw" ]; then + echo "**** permissions for ${i} are good ****" + # check if device needs to be added to video group + elif ! id -G abc | grep -qw "${VIDEO_GID}"; then + # check if video group needs to be created + VIDEO_NAME=$(getent group "${VIDEO_GID}" | awk -F: '{print $1}') + if [ -z "${VIDEO_NAME}" ]; then + VIDEO_NAME="video$(head /dev/urandom | tr -dc 'a-z0-9' | head -c4)" + groupadd "${VIDEO_NAME}" + groupmod -g "${VIDEO_GID}" "${VIDEO_NAME}" + echo "**** creating video group ${VIDEO_NAME} with id ${VIDEO_GID} ****" + fi + echo "**** adding ${i} to video group ${VIDEO_NAME} with id ${VIDEO_GID} ****" + usermod -a -G "${VIDEO_NAME}" abc + fi + # check if device has group rw + if [ $(stat -c '%A' "${i}" | cut -b 5,6) != "rw" ]; then + echo -e "**** The device ${i} does not have group read/write permissions, attempting to fix inside the container.If it doesn't work, you can run the following on your docker host: ****\nsudo chmod g+rw ${i}\n" + chmod g+rw "${i}" + fi + fi +done