Skip to content
Merged
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
32 changes: 32 additions & 0 deletions .common-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,11 @@ trigger-pipeline:
matrix:
- DRIVER_VERSION: [580.173.02, 595.71.05]

.driver-versions-ubuntu26.04:
parallel:
matrix:
- DRIVER_VERSION: [595.71.05]

.driver-versions-rhel10:
parallel:
matrix:
Expand Down Expand Up @@ -127,6 +132,10 @@ trigger-pipeline:
variables:
DIST: ubuntu24.04

.dist-ubuntu26.04:
variables:
DIST: ubuntu26.04

.dist-rhel8:
variables:
DIST: rhel8
Expand Down Expand Up @@ -223,6 +232,13 @@ trigger-pipeline:
rules:
- if: $CI_PIPELINE_SOURCE != "schedule" && $CI_COMMIT_TAG == null

.release-ubuntu26.04:
extends:
- .release-generic
- .driver-versions-ubuntu26.04
rules:
- if: $CI_PIPELINE_SOURCE != "schedule" && $CI_COMMIT_TAG == null

.release-rhel9:
# Perform for each DRIVER_VERSION
extends:
Expand Down Expand Up @@ -301,6 +317,15 @@ trigger-pipeline:
OUT_REGISTRY: "${NGC_REGISTRY}"
OUT_IMAGE_NAME: "${NGC_STAGING_REGISTRY}/driver"

.release:staging-ubuntu26.04:
extends:
- .release-ubuntu26.04
variables:
OUT_REGISTRY_USER: "${NGC_REGISTRY_USER}"
OUT_REGISTRY_TOKEN: "${NGC_REGISTRY_TOKEN}"
OUT_REGISTRY: "${NGC_REGISTRY}"
OUT_IMAGE_NAME: "${NGC_STAGING_REGISTRY}/driver"

.release:staging-rhel9:
extends:
- .release-rhel9
Expand Down Expand Up @@ -391,6 +416,13 @@ release:staging-ubuntu24.04:
needs:
- image-ubuntu24.04

release:staging-ubuntu26.04:
extends:
- .release:staging-ubuntu26.04
- .dist-ubuntu26.04
needs:
- image-ubuntu26.04

release:staging-rhel8:
extends:
- .release:staging
Expand Down
16 changes: 14 additions & 2 deletions .github/workflows/image.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ jobs:
dist:
- ubuntu22.04
- ubuntu24.04
- ubuntu26.04
- rhel8
- rhel9
- rhel10
Expand All @@ -41,6 +42,9 @@ jobs:
- rocky10
ispr:
- ${{github.event_name == 'pull_request'}}
exclude:
- dist: ubuntu26.04
driver: 580.173.02
fail-fast: false
steps:
- uses: actions/checkout@v7
Expand Down Expand Up @@ -72,7 +76,11 @@ jobs:
- name: Set up QEMU
uses: docker/setup-qemu-action@v4
with:
image: tonistiigi/binfmt:qemu-v6.2.0
# The Ubuntu 26.04 arm64 userland needs a newer emulator than the qemu-v6.2.0
# used for every other distribution: v6.2.0 hangs on it, and on the
# resolute-20260707 userland v8.1.5 fails with ENOSYS and v9.2.2 with EINVAL
# (tar file extraction), so it is pinned to qemu-v10.1.3.
Comment thread
rajathagasthya marked this conversation as resolved.
image: tonistiigi/binfmt:${{ matrix.dist == 'ubuntu26.04' && 'qemu-v10.1.3' || 'qemu-v6.2.0' }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
with:
Expand Down Expand Up @@ -155,7 +163,11 @@ jobs:
- name: Set up QEMU
uses: docker/setup-qemu-action@v4
with:
image: tonistiigi/binfmt:qemu-v6.2.0
# The Ubuntu 26.04 arm64 userland needs a newer emulator than the qemu-v6.2.0
# used for every other distribution: v6.2.0 hangs on it, and on the
# resolute-20260707 userland v8.1.5 fails with ENOSYS and v9.2.2 with EINVAL
# (tar file extraction), so it is pinned to qemu-v10.1.3.
image: tonistiigi/binfmt:${{ matrix.dist == 'ubuntu26.04' && 'qemu-v10.1.3' || 'qemu-v6.2.0' }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
with:
Expand Down
13 changes: 13 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,14 @@ include:
rules:
- if: $CI_PIPELINE_SOURCE != "schedule"

# Define the image build targets
.image-build-ubuntu26.04:
extends:
- .driver-versions-ubuntu26.04
- .image-build-generic
rules:
- if: $CI_PIPELINE_SOURCE != "schedule"

# Define the image build targets
.image-build-rhel9:
# Perform for each DRIVER_VERSION
Expand Down Expand Up @@ -86,6 +94,11 @@ image-ubuntu24.04:
- .image-build-ubuntu24.04
- .dist-ubuntu24.04

image-ubuntu26.04:
extends:
- .image-build-ubuntu26.04
- .dist-ubuntu26.04

image-rhel8:
extends:
- .image-build
Expand Down
47 changes: 47 additions & 0 deletions .nvidia-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,15 @@ variables:
when: never
- !reference [.image-pull-rules, rules]

.image-pull-ubuntu26.04:
extends:
- .driver-versions-ubuntu26.04
- .image-pull-generic
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
- !reference [.image-pull-rules, rules]

.image-pull-rhel10:
# Perform for each DRIVER_VERSION
extends:
Expand Down Expand Up @@ -159,6 +168,11 @@ image-ubuntu24.04:
- .image-pull-ubuntu24.04
- .dist-ubuntu24.04

image-ubuntu26.04:
extends:
- .image-pull-ubuntu26.04
- .dist-ubuntu26.04

image-rhel8:
extends:
- .image-pull
Expand Down Expand Up @@ -271,6 +285,17 @@ image-rocky10:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- !reference [.pipeline-trigger-rules, rules]

.scan-ubuntu26.04:
extends:
- .driver-versions-ubuntu26.04
- .scan-generic
rules:
- !reference [.scan-rules-common, rules]
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- !reference [.pipeline-trigger-rules, rules]

.scan-rhel10:
# Repeat for each DRIVER_VERSION
extends:
Expand Down Expand Up @@ -351,6 +376,22 @@ scan-ubuntu24.04-arm64:
needs:
- image-ubuntu24.04

scan-ubuntu26.04-amd64:
extends:
- .scan-ubuntu26.04
- .dist-ubuntu26.04
- .platform-amd64
needs:
- image-ubuntu26.04

scan-ubuntu26.04-arm64:
extends:
- .scan-ubuntu26.04
- .dist-ubuntu26.04
- .platform-arm64
needs:
- image-ubuntu26.04

scan-precompiled-ubuntu24.04-amd64:
variables:
PLATFORM: linux/amd64
Expand Down Expand Up @@ -508,6 +549,12 @@ release:ngc-ubuntu24.04:
- .dist-ubuntu24.04
- .driver-versions-ubuntu24.04

release:ngc-ubuntu26.04:
extends:
- .release:ngc
- .dist-ubuntu26.04
- .driver-versions-ubuntu26.04

release:ngc-precompiled-ubuntu24.04:
variables:
DIST: signed_ubuntu24.04
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ OUT_IMAGE_TAG = $(OUT_IMAGE_VERSION)-$(OUT_DIST)
OUT_IMAGE = $(OUT_IMAGE_NAME):$(OUT_IMAGE_TAG)

##### Public rules #####
DISTRIBUTIONS := ubuntu22.04 ubuntu24.04 signed_ubuntu22.04 signed_ubuntu24.04 signed_ubuntu26.04 rhel8 rhel9 rhel10 rocky8 rocky9 rocky10 precompiled_rhcos
DISTRIBUTIONS := ubuntu22.04 ubuntu24.04 ubuntu26.04 signed_ubuntu22.04 signed_ubuntu24.04 signed_ubuntu26.04 rhel8 rhel9 rhel10 rocky8 rocky9 rocky10 precompiled_rhcos
RHCOS_VERSIONS := rhcos4.14 rhcos4.15 rhcos4.16 rhcos4.17 rhcos4.18 rhel9.6
PUSH_TARGETS := $(patsubst %, push-%, $(DISTRIBUTIONS))
BASE_FROM := resolute noble jammy
Expand Down
100 changes: 100 additions & 0 deletions ubuntu26.04/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
ARG BASE_IMAGE=ubuntu:resolute-20260707

FROM ${BASE_IMAGE} AS build

ARG TARGETARCH
ARG GOLANG_VERSION

# Arg to indicate if driver type is either of passthrough(baremetal) or vgpu
ARG DRIVER_TYPE=passthrough
ENV DRIVER_TYPE=$DRIVER_TYPE

SHELL ["/bin/bash", "-c"]

RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections

RUN apt-get update && apt-get install -y --no-install-recommends \
apt-utils \
build-essential \
ca-certificates \
curl \
git \
wget && \
rm -rf /var/lib/apt/lists/*

# download appropriate binary based on the target architecture for multi-arch builds
RUN OS_ARCH=${TARGETARCH/x86_64/amd64} && OS_ARCH=${OS_ARCH/aarch64/arm64} && \
wget -nv -O - https://go.dev/dl/go${GOLANG_VERSION}.linux-${OS_ARCH}.tar.gz \
| tar -C /usr/local -xz

ENV PATH=/usr/local/go/bin:$PATH

WORKDIR /work

RUN if [ "$DRIVER_TYPE" = "vgpu" ]; then \
git clone https://github.com/NVIDIA/gpu-driver-container driver && \
cd driver/vgpu/src && \
go build -o vgpu-util && \
mv vgpu-util /work; fi

FROM ${BASE_IMAGE}

SHELL ["/bin/bash", "-c"]

ARG TARGETARCH
ENV TARGETARCH=$TARGETARCH
ARG DRIVER_VERSION
ARG GIT_COMMIT
ENV DRIVER_VERSION=$DRIVER_VERSION
ENV DEBIAN_FRONTEND=noninteractive

# Arg to indicate if driver type is either of passthrough(baremetal) or vgpu
ARG DRIVER_TYPE=passthrough
ENV DRIVER_TYPE=$DRIVER_TYPE
ARG DRIVER_BRANCH=595
ENV DRIVER_BRANCH=$DRIVER_BRANCH
ARG VGPU_LICENSE_SERVER_TYPE=NLS
ENV VGPU_LICENSE_SERVER_TYPE=$VGPU_LICENSE_SERVER_TYPE
# Enable vGPU version compability check by default
ARG DISABLE_VGPU_VERSION_CHECK=true
ENV DISABLE_VGPU_VERSION_CHECK=$DISABLE_VGPU_VERSION_CHECK
ENV NVIDIA_VISIBLE_DEVICES=void

RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections

RUN echo "TARGETARCH=$TARGETARCH"

ADD install.sh /tmp

RUN usermod -o -u 0 -g 0 _apt && \
/tmp/install.sh depinstall

# Install the driver payload for passthrough/baremetal types; the vgpu type installs from a
# .run file at container start
RUN /tmp/install.sh driver_pkgs_install

COPY nvidia-driver /usr/local/bin

COPY --from=build /work/vgpu-util* /usr/local/bin

ADD drivers drivers/

WORKDIR /drivers

# Install / upgrade packages here that are required to resolve CVEs
ARG CVE_UPDATES
RUN if [ -n "${CVE_UPDATES}" ]; then \
apt-get update && apt-get --only-upgrade -y install ${CVE_UPDATES} && \
rm -rf /var/lib/apt/lists/*; \
fi

LABEL io.k8s.display-name="NVIDIA Driver Container"
LABEL name="NVIDIA Driver Container"
LABEL vendor="NVIDIA"
LABEL version="${DRIVER_VERSION}"
LABEL vcs-ref="${GIT_COMMIT}"
LABEL release="N/A"
LABEL summary="Provision the NVIDIA driver through containers"
LABEL description="See summary"

ENTRYPOINT ["nvidia-driver", "init"]
19 changes: 19 additions & 0 deletions ubuntu26.04/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Ubuntu 26.04

Driver container for Ubuntu 26.04.

For the passthrough/baremetal driver type, the NVIDIA driver is installed from the NVIDIA CUDA
APT repository (`ubuntu2604`) instead of the `.run` installer:

- At image build, the version-specific `nvidia-driver-pinning-<version>` package pins the whole
driver tree to `DRIVER_VERSION`, the full driver userspace is preinstalled into the image, and
the kernel module packages are baked into a local `file:` APT repo. The CUDA network repository
is then removed from the APT sources.
- At container start, the kernel headers for the running kernel are installed, then the driver
metapackage (`nvidia-open` for `KERNEL_MODULE_TYPE=open`/`auto`, `cuda-drivers` for
`proprietary`) is installed from the local repo and DKMS builds the kernel modules. Network
access is needed only for the kernel headers.

The vGPU driver type continues to install from a user-supplied `.run` file placed in `drivers/`.

See https://github.com/NVIDIA/nvidia-docker/wiki/Driver-containers-(Beta)
1 change: 1 addition & 0 deletions ubuntu26.04/drivers/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Folder for downloading vGPU drivers and dependent metadata files
Empty file added ubuntu26.04/empty
Empty file.
Loading