From 20c5b96dda3cc810538351e7394f63b5058bb127 Mon Sep 17 00:00:00 2001 From: thelamer Date: Tue, 17 Sep 2024 18:11:03 -0400 Subject: [PATCH] update image for 1.16 release and fix Nvidia support --- Dockerfile | 10 +- Dockerfile.aarch64 | 8 +- Dockerfile.clean | 126 ++++++++++++++++++ README.md | 1 + readme-vars.yml | 1 + root/etc/docker/daemon.json | 8 ++ .../s6-overlay/s6-rc.d/init-config-kasm/run | 8 ++ root/gpuinfo.sh | 28 +++- 8 files changed, 184 insertions(+), 6 deletions(-) create mode 100644 Dockerfile.clean create mode 100644 root/etc/docker/daemon.json diff --git a/Dockerfile b/Dockerfile index 819c9bf..0ecf956 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,16 +34,17 @@ RUN \ containerd.io \ docker-ce \ docker-ce-cli \ - drm-info \ e2fsprogs \ fuse-overlayfs \ g++ \ gcc \ + iproute2 \ iptables \ jq \ lsof \ make \ nodejs \ + nvidia-container-toolkit \ nvidia-docker2 \ openssl \ pigz \ @@ -85,14 +86,14 @@ RUN \ echo "**** add installer ****" && \ curl -o \ /tmp/kasm.tar.gz -L \ - "https://github.com/kasmtech/kasm-install-wizard/releases/download/${KASM_VERSION}/kasm_release.tar.gz" && \ + "https://kasmweb-build-artifacts.s3.amazonaws.com/kasm_backend/b05ebcfbd973739debca5bc2d91b6ac1e01fcdc7/kasm_workspaces_1.16.0_1.16.0.b05ebc.tar.gz" && \ tar xf \ /tmp/kasm.tar.gz -C \ / && \ ALVERSION=$(cat /kasm_release/conf/database/seed_data/default_properties.yaml |awk '/alembic_version/ {print $2}') && \ curl -o \ /tmp/images.tar.gz -L \ - "https://kasm-ci.s3.amazonaws.com/1.15.0-images-combined.tar.gz" && \ + "https://kasm-ci.s3.amazonaws.com/1.16.0-images-combined.tar.gz" && \ tar xf \ /tmp/images.tar.gz -C \ / && \ @@ -101,6 +102,9 @@ RUN \ /kasm_release/conf/database/seed_data/default_images_a* && \ sed -i 's/-N -e -H/-N -B -e -H/g' /kasm_release/upgrade.sh && \ echo "exit 0" > /kasm_release/install_dependencies.sh && \ + /kasm_release/bin/utils/yq_$(uname -m) -i \ + '.services.proxy.volumes += "/kasm_release/www/img/thumbnails:/srv/www/img/thumbnails"' \ + /kasm_release/docker/docker-compose-all.yaml && \ echo "**** copy assets ****" && \ cp \ /kasm_release/www/img/thumbnails/*.png /kasm_release/www/img/thumbnails/*.svg \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 2204b4a..36dd94f 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -34,16 +34,17 @@ RUN \ containerd.io \ docker-ce \ docker-ce-cli \ - drm-info \ e2fsprogs \ fuse-overlayfs \ g++ \ gcc \ + iproute2 \ iptables \ jq \ lsof \ make \ nodejs \ + nvidia-container-toolkit \ nvidia-docker2 \ openssl \ pigz \ @@ -92,7 +93,7 @@ RUN \ ALVERSION=$(cat /kasm_release/conf/database/seed_data/default_properties.yaml |awk '/alembic_version/ {print $2}') && \ curl -o \ /tmp/images.tar.gz -L \ - "https://kasm-ci.s3.amazonaws.com/1.15.0-images-combined.tar.gz" && \ + "https://kasm-ci.s3.amazonaws.com/1.16.0-images-combined.tar.gz" && \ tar xf \ /tmp/images.tar.gz -C \ / && \ @@ -101,6 +102,9 @@ RUN \ /kasm_release/conf/database/seed_data/default_images_a* && \ sed -i 's/-N -e -H/-N -B -e -H/g' /kasm_release/upgrade.sh && \ echo "exit 0" > /kasm_release/install_dependencies.sh && \ + /kasm_release/bin/utils/yq_$(uname -m) -i \ + '.services.proxy.volumes += "/kasm_release/www/img/thumbnails:/srv/www/img/thumbnails"' \ + /kasm_release/docker/docker-compose-all.yaml && \ echo "**** copy assets ****" && \ cp \ /kasm_release/www/img/thumbnails/*.png /kasm_release/www/img/thumbnails/*.svg \ diff --git a/Dockerfile.clean b/Dockerfile.clean new file mode 100644 index 0000000..c6f05fa --- /dev/null +++ b/Dockerfile.clean @@ -0,0 +1,126 @@ +# syntax=docker/dockerfile:1 + +FROM ghcr.io/linuxserver/baseimage-ubuntu:jammy + +# set version label +ARG BUILD_DATE +ARG KASM_VERSION +ARG VERSION +LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" +LABEL maintainer="thelamer" + +# Env +ENV DOCKER_TLS_CERTDIR="" +ENV TINI_SUBREAPER=true + +#Add needed nvidia environment variables for https://github.com/NVIDIA/nvidia-docker +ENV NVIDIA_DRIVER_CAPABILITIES="compute,graphics,video,utility" \ + VERSION="develop" + +# Container setup +RUN \ + echo "**** install packages ****" && \ + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \ + echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu jammy stable" > \ + /etc/apt/sources.list.d/docker.list && \ + curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \ + gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && \ + curl -s -L https://nvidia.github.io/libnvidia-container/ubuntu22.04/libnvidia-container.list | \ + sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ + tee /etc/apt/sources.list.d/nvidia-container-toolkit.list && \ + curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \ + apt-get install -y --no-install-recommends \ + btrfs-progs \ + containerd.io \ + docker-ce \ + docker-ce-cli \ + e2fsprogs \ + fuse-overlayfs \ + g++ \ + gcc \ + iproute2 \ + iptables \ + jq \ + lsof \ + make \ + nodejs \ + nvidia-container-toolkit \ + nvidia-docker2 \ + openssl \ + pigz \ + python3 \ + sudo \ + uidmap \ + xfsprogs && \ + echo "**** compose install ****" && \ + mkdir -p /usr/local/lib/docker/cli-plugins && \ + curl -L \ + https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m) -o \ + /usr/local/lib/docker/cli-plugins/docker-compose && \ + chmod +x /usr/local/lib/docker/cli-plugins/docker-compose && \ + echo "**** dind setup ****" && \ + useradd -U dockremap && \ + usermod -G dockremap dockremap && \ + echo 'dockremap:165536:65536' >> /etc/subuid && \ + echo 'dockremap:165536:65536' >> /etc/subgid && \ + curl -o \ + /usr/local/bin/dind -L \ + https://raw.githubusercontent.com/moby/moby/master/hack/dind && \ + chmod +x /usr/local/bin/dind && \ + echo 'hosts: files dns' > /etc/nsswitch.conf && \ + echo "**** setup wizard ****" && \ + mkdir -p /wizard && \ + if [ -z ${KASM_VERSION+x} ]; then \ + KASM_VERSION=$(curl -sX GET 'https://api.github.com/repos/kasmtech/kasm-install-wizard/releases/latest' \ + | jq -r '.name'); \ + fi && \ + echo "${KASM_VERSION}" > /version.txt && \ + curl -o \ + /tmp/wizard.tar.gz -L \ + "https://github.com/kasmtech/kasm-install-wizard/archive/refs/tags/${KASM_VERSION}.tar.gz" && \ + tar xf \ + /tmp/wizard.tar.gz -C \ + /wizard --strip-components=1 && \ + cd /wizard && \ + npm install && \ + echo "**** add installer ****" && \ + curl -o \ + /tmp/kasm.tar.gz -L \ + "https://github.com/kasmtech/kasm-install-wizard/releases/download/${KASM_VERSION}/kasm_release.tar.gz" && \ + tar xf \ + /tmp/kasm.tar.gz -C \ + / && \ + ALVERSION=$(cat /kasm_release/conf/database/seed_data/default_properties.yaml |awk '/alembic_version/ {print $2}') && \ + curl -o \ + /tmp/images.tar.gz -L \ + "https://kasm-ci.s3.amazonaws.com/1.16.0-images-combined.tar.gz" && \ + tar xf \ + /tmp/images.tar.gz -C \ + / && \ + sed -i \ + '/alembic_version/s/.*/alembic_version: '${ALVERSION}'/' \ + /kasm_release/conf/database/seed_data/default_images_a* && \ + sed -i 's/-N -e -H/-N -B -e -H/g' /kasm_release/upgrade.sh && \ + echo "exit 0" > /kasm_release/install_dependencies.sh && \ + echo "**** copy assets ****" && \ + cp \ + /kasm_release/www/img/thumbnails/*.png /kasm_release/www/img/thumbnails/*.svg \ + /wizard/public/img/thumbnails/ && \ + cp \ + /kasm_release/conf/database/seed_data/default_images_a* \ + /wizard/ && \ + echo "**** cleanup ****" && \ + apt-get remove -y g++ gcc make && \ + apt-get -y autoremove && \ + apt-get clean && \ + rm -rf \ + /tmp/* \ + /var/lib/apt/lists/* \ + /var/tmp/* + +# add init files +COPY root/ / + +# Ports and volumes +EXPOSE 3000 443 +VOLUME /opt/ diff --git a/README.md b/README.md index d94cd0c..61a5159 100644 --- a/README.md +++ b/README.md @@ -313,6 +313,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 ## Versions +* **17.09.24:** - Update base image for 1.16.0 release and fix Nvidia support. * **16.02.24:** - Update base image for 1.15.0 release. * **22.08.23:** - Update base image for 1.14.0 release. * **07.04.23:** - Add mod layer for ingesting LSIO images for 1.13.0 release. diff --git a/readme-vars.yml b/readme-vars.yml index d995bf6..449c43b 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -112,6 +112,7 @@ app_setup_block: | # changelog changelogs: + - { date: "17.09.24:", desc: "Update base image for 1.16.0 release and fix Nvidia support." } - { date: "16.02.24:", desc: "Update base image for 1.15.0 release." } - { date: "22.08.23:", desc: "Update base image for 1.14.0 release." } - { date: "07.04.23:", desc: "Add mod layer for ingesting LSIO images for 1.13.0 release." } diff --git a/root/etc/docker/daemon.json b/root/etc/docker/daemon.json new file mode 100644 index 0000000..c561d62 --- /dev/null +++ b/root/etc/docker/daemon.json @@ -0,0 +1,8 @@ +{ + "runtimes": { + "nvidia": { + "args": [], + "path": "nvidia-container-runtime" + } + } +} diff --git a/root/etc/s6-overlay/s6-rc.d/init-config-kasm/run b/root/etc/s6-overlay/s6-rc.d/init-config-kasm/run index 8874fb8..f696272 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-config-kasm/run +++ b/root/etc/s6-overlay/s6-rc.d/init-config-kasm/run @@ -18,3 +18,11 @@ if [ ! -f "/opt/kasm/certs/kasm_wizard.crt" ]; then -out /opt/kasm/certs/kasm_wizard.crt \ -subj "/C=US/ST=VA/L=None/O=None/OU=DoFu/CN=$(hostname)/emailAddress=none@none.none" fi + +# Create plugin directory +if [ ! -L "/var/lib/docker-plugins" ]; then + mkdir -p /opt/docker-plugins + ln -s /opt/docker-plugins /var/lib/docker-plugins + mkdir -p /var/lib/docker-plugins/rclone/config + mkdir -p /var/lib/docker-plugins/rclone/cache +fi diff --git a/root/gpuinfo.sh b/root/gpuinfo.sh index 984df4e..234731e 100755 --- a/root/gpuinfo.sh +++ b/root/gpuinfo.sh @@ -1,2 +1,28 @@ #! /bin/bash -drm_info -j 2>/dev/null| jq -c 'with_entries(.value |= .driver.desc)' + +# Get list of drm devices +IFS=$'\n' +CARDS=$(ls -la /sys/class/drm/renderD*/device/driver 2>/dev/null | awk '{print $11}' | awk -F/ '{print $NF}') +if [ -z "$CARDS" ]; then + echo '{}' + exit 0 +fi +for CARD in ${CARDS}; do + LAST_CARD=${CARD} +done + +# Add them to the json string +JSON='{' +COUNTER=0 +for CARD in $CARDS; do + JSON="${JSON}\"/dev/dri/card$COUNTER\":\"${CARD^^}\"" + if [ ${CARD} == ${LAST_CARD} ]; then + JSON="${JSON}}" + else + JSON="${JSON}," + fi + COUNTER=$(( COUNTER + 1 )) +done + +# Print json string +echo $JSON