Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 104 additions & 0 deletions .ckmb/build.sh
Original file line number Diff line number Diff line change
@@ -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
14 changes: 14 additions & 0 deletions .ckmb/run.sh
Original file line number Diff line number Diff line change
@@ -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 $@
2 changes: 1 addition & 1 deletion find-driver-version/go.mod
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions nvidia-driver.ko
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
dummy