diff --git a/.ckmb/build.sh b/.ckmb/build.sh new file mode 100755 index 000000000..1a55f12fa --- /dev/null +++ b/.ckmb/build.sh @@ -0,0 +1,104 @@ +#!/usr/bin/env bash + +set -exo pipefail + +### Build find-driver-version script ### +export GOTOOLCHAIN=auto +cd find-driver-version/ +go mod download +go build -o find-driver-version . +cp find-driver-version /usr/local/bin/find-driver-version +cd - + + +### Install dependencies ### +export DEBIAN_FRONTEND=noninteractive +echo "debconf debconf/frontend select Noninteractive" | debconf-set-selections +TARGETARCH="$(dpkg --print-architecture)" + +# Configure CUDA repository +if [ "$TARGETARCH" = "amd64" ]; then + NVARCH=x86_64 +else + NVARCH=sbsa +fi +curl -fsSLO "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/${NVARCH}/cuda-keyring_1.1-1_all.deb" +dpkg -i cuda-keyring_1.1-1_all.deb +apt-key del 7fa2af80 +apt-key adv --fetch-keys "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/${NVARCH}/3bf863cc.pub" + +apt-get update && apt-get install -y --no-install-recommends \ + apt-rdepends \ + apt-utils \ + build-essential \ + ca-certificates \ + curl \ + dpkg-dev \ + file \ + libelf-dev \ + libglvnd-dev \ + pkg-config + + +### Create config ### +# At this point 2 variables are available: +# - $CKMB_KERNEL_FULL_VERSION (e.g. `6.8.0-1032-aws`) +# - $CKMB_VERSION (e.g. `580`) +mkdir -p /ckmb + +KERNEL_VERSION=$CKMB_KERNEL_FULL_VERSION +DRIVER_BRANCH=$CKMB_VERSION +echo "KERNEL_VERSION=$KERNEL_VERSION" > /ckmb/versions.env +echo "DRIVER_BRANCH=$DRIVER_BRANCH" >> /ckmb/versions.env + +echo "TARGETARCH=$TARGETARCH" >> /ckmb/versions.env + +FULL_DRIVER_VERSION=$(find-driver-version -d "$DRIVER_BRANCH" -k "$KERNEL_VERSION" | cut -d'>' -f2 | xargs) +echo "FULL_DRIVER_VERSION=$FULL_DRIVER_VERSION" >> /ckmb/versions.env + +DRIVER_VERSION="${FULL_DRIVER_VERSION%%-*}" +echo "DRIVER_VERSION=$DRIVER_VERSION" >> /ckmb/versions.env + +MODULES_VERSION=$(apt-cache madison "linux-modules-nvidia-$DRIVER_BRANCH-server-open-$KERNEL_VERSION" | awk 'NR==1 {print $3}') +echo "MODULES_VERSION=$MODULES_VERSION" >> /ckmb/versions.env + + +### Download driver and related packages ### +# Download apt packages +BASE_PACKAGES="nvidia-utils-${DRIVER_BRANCH}-server=${FULL_DRIVER_VERSION} \ + nvidia-headless-no-dkms-${DRIVER_BRANCH}-server=${FULL_DRIVER_VERSION} \ + libnvidia-decode-${DRIVER_BRANCH}-server=${FULL_DRIVER_VERSION} \ + libnvidia-extra-${DRIVER_BRANCH}-server=${FULL_DRIVER_VERSION} \ + libnvidia-encode-${DRIVER_BRANCH}-server=${FULL_DRIVER_VERSION} \ + libnvidia-fbc1-${DRIVER_BRANCH}-server=${FULL_DRIVER_VERSION} \ + linux-modules-nvidia-${DRIVER_BRANCH}-server-${KERNEL_VERSION}=${MODULES_VERSION} \ + linux-modules-nvidia-${DRIVER_BRANCH}-server-open-${KERNEL_VERSION}=${MODULES_VERSION} \ + linux-objects-nvidia-${DRIVER_BRANCH}-server-${KERNEL_VERSION}=${MODULES_VERSION} \ + linux-signatures-nvidia-${KERNEL_VERSION}=${MODULES_VERSION} \ + linux-modules-extra-${KERNEL_VERSION} \ + infiniband-diags \ + nvlsm \ + nvidia-fabricmanager-${DRIVER_BRANCH}=${FULL_DRIVER_VERSION} \ + libnvidia-nscq-${DRIVER_BRANCH}=${FULL_DRIVER_VERSION} \ + nvidia-imex-${DRIVER_BRANCH}=${FULL_DRIVER_VERSION} \ + nvidia-kernel-common-${DRIVER_BRANCH}-server=${FULL_DRIVER_VERSION} \ + nvidia-kernel-source-${DRIVER_BRANCH}-server=${FULL_DRIVER_VERSION} \ + libnvidia-compute-${DRIVER_BRANCH}-server=${FULL_DRIVER_VERSION} \ + nvidia-compute-utils-${DRIVER_BRANCH}-server=${FULL_DRIVER_VERSION} \ + libnvidia-cfg1-${DRIVER_BRANCH}-server=${FULL_DRIVER_VERSION}" +if [ "$TARGETARCH" = "amd64" ]; then + BASE_PACKAGES="$BASE_PACKAGES libnvsdm=${DRIVER_VERSION}-1" +fi +BASE_PACKAGES_NAMES=$(echo "$BASE_PACKAGES" | sed -E 's/=([^ ]+)//g') +DEP_PACKAGES=$(apt-rdepends $BASE_PACKAGES_NAMES | grep -v "^ " | grep -v "^debconf-2.0$" | grep -v "^linux-image-unsigned-") +mkdir -p /ckmb/apt-cache/partial +apt-get install -y --download-only --no-install-recommends --reinstall -o Dir::Cache::archives="/ckmb/apt-cache" $BASE_PACKAGES $DEP_PACKAGES + +# Create local apt repository +cd /ckmb/apt-cache +dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz +cd - + + +### Copy nvidia-driver executable ### +cp ubuntu22.04/precompiled/nvidia-driver /ckmb/nvidia-driver diff --git a/.ckmb/run.sh b/.ckmb/run.sh new file mode 100755 index 000000000..6552792a2 --- /dev/null +++ b/.ckmb/run.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +set -exo pipefail + +# Prepare apt cache +echo "deb [trusted=yes] file:/ckmb/apt-cache ./" > /etc/apt/sources.list +rm -rf /etc/apt/sources.list.d/* +sed -i 's/^\(.*DPkg::Post-Invoke.*\)$/\/\/ \1/' /etc/apt/apt.conf.d/* +apt-get install -y --no-install-recommends --no-download pciutils + +source /ckmb/versions.env +export MODULES_VERSION DRIVER_BRANCH FULL_DRIVER_VERSION DRIVER_VERSION TARGETARCH + +/ckmb/nvidia-driver $@ diff --git a/find-driver-version/go.mod b/find-driver-version/go.mod index 493052029..26c3570b2 100644 --- a/find-driver-version/go.mod +++ b/find-driver-version/go.mod @@ -1,5 +1,5 @@ module github.com/DataDog/gpu-driver-container/find-driver-version -go 1.24.4 +go 1.23 require rsc.io/getopt v0.0.0-20170811000552-20be20937449 diff --git a/nvidia-driver.ko b/nvidia-driver.ko new file mode 100644 index 000000000..421376db9 --- /dev/null +++ b/nvidia-driver.ko @@ -0,0 +1 @@ +dummy