# syntax=docker/dockerfile:1 FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-noble # set version label ARG BUILD_DATE ARG KASM_VERSION ARG VERSION LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL maintainer="thespad" # Env ENV DOCKER_TLS_CERTDIR="" ENV TINI_SUBREAPER=true ENV DEBIAN_FRONTEND=noninteractive #Add needed nvidia environment variables for https://github.com/NVIDIA/nvidia-docker ENV NVIDIA_DRIVER_CAPABILITIES="compute,graphics,video,utility" RUN \ echo "**** install packages ****" && \ install -m 0755 -d /etc/apt/keyrings && \ # Docker curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc && \ printf "Types: deb\nURIs: https://download.docker.com/linux/ubuntu\nSuites: $(. /etc/os-release && echo ${UBUNTU_CODENAME:-$VERSION_CODENAME})\nComponents: stable\nArchitectures: $(dpkg --print-architecture)\nSigned-By: /etc/apt/keyrings/docker.asc" > /etc/apt/sources.list.d/docker.sources && \ printf "Package: docker-ce docker-ce-cli docker-ce-rootless-extras\nPin: version 5:29.*\nPin-Priority: 1001" > /etc/apt/preferences.d/docker && \ # Nvidia CTK curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /etc/apt/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/etc/apt/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ tee /etc/apt/sources.list.d/nvidia-container-toolkit.list && \ # NodeJS curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ printf "Types: deb\nURIs: https://deb.nodesource.com/node_24.x\nSuites: nodistro\nComponents: main\nArchitectures: $(dpkg --print-architecture)\nSigned-By: /etc/apt/keyrings/nodesource.gpg" > /etc/apt/sources.list.d/nodesource.sources && \ printf "Package: nodejs\nPin: origin deb.nodesource.com\nPin-Priority: 600" > /etc/apt/preferences.d/nodejs && \ chmod a+r /etc/apt/keyrings/*.gpg && \ chmod a+r /etc/apt/keyrings/*.asc && \ apt-get update && \ apt-get install -y --no-install-recommends \ btrfs-progs \ build-essential \ containerd.io \ docker-ce \ docker-ce-cli \ docker-compose-plugin \ e2fsprogs \ fuse-overlayfs \ iproute2 \ iptables \ lsof \ nodejs \ nvidia-container-toolkit \ openssl \ pigz \ python3 \ sudo \ uidmap \ xfsprogs && \ 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 && \ 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 && \ echo "**** add wizard ****" && \ 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://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}.tar.gz" && \ tar xf \ /tmp/kasm.tar.gz -C \ / && \ # Don't check for open ports during upgrades sed -i 's/-N -e -H/-N -B -e -H/g' /kasm_release/upgrade.sh && \ echo "exit 0" > /kasm_release/install_dependencies.sh && \ # Fix dependencies so containers start in the right order /kasm_release/bin/utils/yq_$(uname -m) -i \ '.services.proxy.depends_on = {"kasm_manager":{"condition": "service_healthy"},"kasm_api":{"condition": "service_healthy"},"kasm_agent":{"condition": "service_started"},"kasm_guac":{"condition": "service_started"}}' \ /kasm_release/docker/docker-compose-all.yaml && \ /kasm_release/bin/utils/yq_$(uname -m) -i \ '.services.kasm_manager.depends_on = {"db":{"condition": "service_healthy"}}' \ /kasm_release/docker/docker-compose-all.yaml && \ /kasm_release/bin/utils/yq_$(uname -m) -i \ '.services.kasm_api.depends_on = {"db":{"condition": "service_healthy"}}' \ /kasm_release/docker/docker-compose-all.yaml && \ /kasm_release/bin/utils/yq_$(uname -m) -i \ '.services.kasm_api.healthcheck += {"start_period": "60s","start_interval": "30s"}' \ /kasm_release/docker/docker-compose-all.yaml && \ /kasm_release/bin/utils/yq_$(uname -m) -i \ '.services.kasm_rdp_https_gateway.depends_on = {"proxy":{"condition": "service_started"}}' \ /kasm_release/docker/docker-compose-all.yaml && \ # Add Kasm and db users useradd -u 70 kasm_db && \ useradd kasm && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ 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/