Skip to content

Commit ba62a87

Browse files
Shiva Kumarshivakunv
authored andcommitted
Precompiled: Ubuntu26.04 driver container support
Signed-off-by: Shiva Kumar (SW-CLOUD) <shivaku@nvidia.com>
1 parent e2eef7b commit ba62a87

11 files changed

Lines changed: 892 additions & 8 deletions

File tree

.common-ci.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,14 @@ trigger-pipeline:
110110
KERNEL_FLAVOR: [aws, azure, azure-fde, generic, nvidia, oracle]
111111
LTS_KERNEL: ["6.8"]
112112

113+
# Define the matrix of precompiled jobs that can be run in parallel for ubuntu26.04
114+
.driver-versions-precompiled-ubuntu26.04:
115+
parallel:
116+
matrix:
117+
- DRIVER_BRANCH: [595]
118+
KERNEL_FLAVOR: [aws, azure, azure-fde, generic, nvidia, oracle]
119+
LTS_KERNEL: ["7.0"]
120+
113121
.dist-ubuntu22.04:
114122
variables:
115123
DIST: ubuntu22.04
@@ -467,3 +475,14 @@ release:staging-precompiled-ubuntu24.04:
467475
- .release:staging-precompiled
468476
needs:
469477
- image-precompiled-ubuntu24.04
478+
479+
# Precompiled Ubuntu26.04 release
480+
release:staging-precompiled-ubuntu26.04:
481+
variables:
482+
DIST: signed_ubuntu26.04
483+
BASE_TARGET: resolute
484+
extends:
485+
- .driver-versions-precompiled-ubuntu26.04
486+
- .release:staging-precompiled
487+
needs:
488+
- image-precompiled-ubuntu26.04
Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,31 @@
11
{
2-
"driver_branch": ["535", "580"],
2+
"driver_branch": ["535", "580", "595"],
33
"kernel_flavors": ["aws", "azure", "azure-fde", "generic", "nvidia", "oracle"],
4-
"dist": ["ubuntu22.04", "ubuntu24.04"],
5-
"lts_kernel": ["5.15", "6.8"],
4+
"dist": ["ubuntu22.04", "ubuntu24.04", "ubuntu26.04"],
5+
"lts_kernel": ["5.15", "6.8", "7.0"],
66
"exclude_build_matrix_pairs": [
7-
{ "dist": "ubuntu24.04", "driver_branch": "535" }
7+
{ "dist": "ubuntu22.04", "driver_branch": "595" },
8+
{ "dist": "ubuntu24.04", "driver_branch": "535" },
9+
{ "dist": "ubuntu26.04", "driver_branch": "535" },
10+
{ "dist": "ubuntu26.04", "driver_branch": "580" }
811
],
912
"exclude_precompiled_build_matrix": [
13+
{ "dist": "ubuntu22.04", "driver_branch": "595" },
1014
{ "dist": "ubuntu24.04", "driver_branch": "535" },
15+
{ "dist": "ubuntu26.04", "driver_branch": "535" },
16+
{ "dist": "ubuntu26.04", "driver_branch": "580" },
1117
{ "lts_kernel": "5.15", "dist": "ubuntu24.04" },
18+
{ "lts_kernel": "7.0", "dist": "ubuntu24.04" },
19+
{ "lts_kernel": "5.15", "dist": "ubuntu26.04" },
20+
{ "lts_kernel": "6.8", "dist": "ubuntu26.04" },
21+
{ "lts_kernel": "7.0", "dist": "ubuntu22.04" },
1222
{ "flavor": "azure-fde", "dist": "ubuntu22.04" }
1323
],
1424
"exclude_precompiled_e2e_matrix": [
15-
{ "lts_kernel": "5.15", "dist": "ubuntu24.04" }
25+
{ "lts_kernel": "5.15", "dist": "ubuntu24.04" },
26+
{ "lts_kernel": "7.0", "dist": "ubuntu24.04" },
27+
{ "lts_kernel": "5.15", "dist": "ubuntu26.04" },
28+
{ "lts_kernel": "6.8", "dist": "ubuntu26.04" },
29+
{ "lts_kernel": "7.0", "dist": "ubuntu22.04" }
1630
]
1731
}

.github/workflows/precompiled.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ jobs:
101101
BASE_TARGET="jammy"
102102
elif [[ "${{ matrix.dist }}" == "ubuntu24.04" ]]; then
103103
BASE_TARGET="noble"
104+
elif [[ "${{ matrix.dist }}" == "ubuntu26.04" ]]; then
105+
BASE_TARGET="resolute"
104106
fi
105107
make DRIVER_BRANCH=${{ matrix.driver_branch }} KERNEL_FLAVOR=${{ matrix.flavor }} LTS_KERNEL=${LTS_KERNEL} build-base-${BASE_TARGET}
106108
@@ -131,6 +133,8 @@ jobs:
131133
BASE_TARGET="jammy"
132134
elif [[ "${{ matrix.dist }}" == "ubuntu24.04" ]]; then
133135
BASE_TARGET="noble"
136+
elif [[ "${{ matrix.dist }}" == "ubuntu26.04" ]]; then
137+
BASE_TARGET="resolute"
134138
fi
135139
tar -cvf kernel-version-${{ matrix.driver_branch }}-${KERNEL_VERSION}-${DIST}.tar kernel_version.txt
136140
docker save "${PRIVATE_REGISTRY}/nvidia/driver:base-${BASE_TARGET}-${LTS_KERNEL}-${{ matrix.flavor }}-${{ matrix.driver_branch }}" \
@@ -350,6 +354,9 @@ jobs:
350354
if [[ "$DIST" == "ubuntu24.04" ]]; then
351355
yq eval '.spec.instance.os = "ubuntu-24.04"' -i tests/holodeck_ubuntu.yaml
352356
fi
357+
if [[ "$DIST" == "ubuntu26.04" ]]; then
358+
yq eval '.spec.instance.os = "ubuntu-26.04"' -i tests/holodeck_ubuntu.yaml
359+
fi
353360
354361
- name: Set up Holodeck
355362
uses: NVIDIA/holodeck@v0.3.4
@@ -465,6 +472,8 @@ jobs:
465472
BASE_TARGET="jammy"
466473
elif [[ "${DIST}" == "ubuntu24.04" ]]; then
467474
BASE_TARGET="noble"
475+
elif [[ "${DIST}" == "ubuntu26.04" ]]; then
476+
BASE_TARGET="resolute"
468477
fi
469478
image_path="./base-images-${{ matrix.driver_branch }}-${{ matrix.kernel_version }}.tar"
470479
echo "uploading $image_path"

.gitlab-ci.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,3 +137,12 @@ image-precompiled-ubuntu24.04:
137137
extends:
138138
- .driver-versions-precompiled-ubuntu24.04
139139
- .image-build-precompiled
140+
141+
image-precompiled-ubuntu26.04:
142+
variables:
143+
DIST: signed_ubuntu26.04
144+
BASE_TARGET: resolute
145+
CVE_UPDATES: "curl libc6"
146+
extends:
147+
- .driver-versions-precompiled-ubuntu26.04
148+
- .image-build-precompiled

.nvidia-ci.yml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,20 @@ image-precompiled-ubuntu24.04:
112112
- .driver-versions-precompiled-ubuntu24.04
113113
- .image-pull-generic
114114

115+
image-precompiled-ubuntu26.04:
116+
variables:
117+
DIST: signed_ubuntu26.04
118+
BASE_TARGET: resolute
119+
PRECOMPILED: "true"
120+
CVE_UPDATES: "curl libc6"
121+
rules:
122+
- if: $CI_PIPELINE_SOURCE == "schedule"
123+
when: delayed
124+
start_in: 30 minutes
125+
extends:
126+
- .driver-versions-precompiled-ubuntu26.04
127+
- .image-pull-generic
128+
115129
.image-pull-ubuntu22.04:
116130
# Perform for each DRIVER_VERSION
117131
extends:
@@ -282,6 +296,18 @@ image-rocky10:
282296
- !reference [.scan-rules-common, rules]
283297
- !reference [.precompiled-rules, rules]
284298

299+
.scan-precompiled-ubuntu26.04:
300+
variables:
301+
DIST: signed_ubuntu26.04
302+
BASE_TARGET: resolute
303+
PRECOMPILED: "true"
304+
extends:
305+
- .driver-versions-precompiled-ubuntu26.04
306+
- .scan-generic
307+
rules:
308+
- !reference [.scan-rules-common, rules]
309+
- !reference [.precompiled-rules, rules]
310+
285311
.scan-precompiled-ubuntu22.04:
286312
variables:
287313
DIST: signed_ubuntu22.04
@@ -335,6 +361,15 @@ scan-precompiled-ubuntu24.04-amd64:
335361
needs:
336362
- image-precompiled-ubuntu24.04
337363

364+
scan-precompiled-ubuntu26.04-amd64:
365+
variables:
366+
PLATFORM: linux/amd64
367+
extends:
368+
- .scan-precompiled-ubuntu26.04
369+
- .platform-amd64
370+
needs:
371+
- image-precompiled-ubuntu26.04
372+
338373
scan-precompiled-ubuntu22.04-amd64:
339374
variables:
340375
PLATFORM: linux/amd64
@@ -477,6 +512,18 @@ release:ngc-precompiled-ubuntu24.04:
477512
rules:
478513
- !reference [.precompiled-rules, rules]
479514

515+
release:ngc-precompiled-ubuntu26.04:
516+
variables:
517+
DIST: signed_ubuntu26.04
518+
BASE_TARGET: resolute
519+
PRECOMPILED: "true"
520+
extends:
521+
- .driver-versions-precompiled-ubuntu26.04
522+
- .release-generic
523+
- .release:ngc-variables
524+
rules:
525+
- !reference [.precompiled-rules, rules]
526+
480527
release:ngc-precompiled-ubuntu22.04:
481528
variables:
482529
DIST: signed_ubuntu22.04

Makefile

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,10 @@ OUT_IMAGE_TAG = $(OUT_IMAGE_VERSION)-$(OUT_DIST)
5454
OUT_IMAGE = $(OUT_IMAGE_NAME):$(OUT_IMAGE_TAG)
5555

5656
##### Public rules #####
57-
DISTRIBUTIONS := ubuntu22.04 ubuntu24.04 signed_ubuntu22.04 signed_ubuntu24.04 rhel8 rhel9 rhel10 rocky8 rocky9 rocky10 precompiled_rhcos
57+
DISTRIBUTIONS := ubuntu22.04 ubuntu24.04 signed_ubuntu22.04 signed_ubuntu24.04 signed_ubuntu26.04 rhel8 rhel9 rhel10 rocky8 rocky9 rocky10 precompiled_rhcos
5858
RHCOS_VERSIONS := rhcos4.14 rhcos4.15 rhcos4.16 rhcos4.17 rhcos4.18 rhel9.6
5959
PUSH_TARGETS := $(patsubst %, push-%, $(DISTRIBUTIONS))
60-
BASE_FROM := noble jammy
60+
BASE_FROM := resolute noble jammy
6161
PUSH_TARGETS := $(patsubst %, push-%, $(DISTRIBUTIONS))
6262
VGPU_GUEST_DRIVER_PUSH_TARGETS := $(patsubst %, push-vgpuguest-%, $(DISTRIBUTIONS) $(RHCOS_VERSIONS))
6363
VGPU_HOST_DRIVER_PUSH_TARGETS := $(patsubst %, push-vgpuhost-%, $(DISTRIBUTIONS) $(RHCOS_VERSIONS))
@@ -98,6 +98,10 @@ pull-signed_ubuntu24.04%: DIST = ubuntu24.04
9898
pull-signed_ubuntu24.04%: DRIVER_TAG = $(DRIVER_BRANCH)
9999
pull-signed_ubuntu24.04%: IMAGE_TAG = $(DRIVER_BRANCH)-$(KERNEL_VERSION)-$(DIST)
100100

101+
pull-signed_ubuntu26.04%: DIST = ubuntu26.04
102+
pull-signed_ubuntu26.04%: DRIVER_TAG = $(DRIVER_BRANCH)
103+
pull-signed_ubuntu26.04%: IMAGE_TAG = $(DRIVER_BRANCH)-$(KERNEL_VERSION)-$(DIST)
104+
101105
PLATFORM ?= linux/amd64
102106
$(DRIVER_PULL_TARGETS): pull-%:
103107
$(DOCKER) pull "--platform=$(PLATFORM)" "$(IMAGE)"
@@ -116,6 +120,10 @@ archive-signed_ubuntu24.04%: DIST = ubuntu24.04
116120
archive-signed_ubuntu24.04%: DRIVER_TAG = $(DRIVER_BRANCH)
117121
archive-signed_ubuntu24.04%: IMAGE_TAG = $(if $(VERSION),$(VERSION)-)$(DRIVER_BRANCH)-$(KERNEL_VERSION)-$(DIST)
118122

123+
archive-signed_ubuntu26.04%: DIST = ubuntu26.04
124+
archive-signed_ubuntu26.04%: DRIVER_TAG = $(DRIVER_BRANCH)
125+
archive-signed_ubuntu26.04%: IMAGE_TAG = $(if $(VERSION),$(VERSION)-)$(DRIVER_BRANCH)-$(KERNEL_VERSION)-$(DIST)
126+
119127
$(DRIVER_ARCHIVE_TARGETS): archive-%:
120128
$(DOCKER) save "$(IMAGE)" -o "archive.tar"
121129

@@ -139,6 +147,11 @@ push-signed_ubuntu24.04%: DRIVER_TAG = $(DRIVER_BRANCH)
139147
push-signed_ubuntu24.04%: IMAGE_TAG = $(if $(VERSION),$(VERSION)-)$(DRIVER_BRANCH)-$(KERNEL_VERSION)-$(DIST)
140148
push-signed_ubuntu24.04%: OUT_IMAGE_TAG = $(if $(VERSION),$(VERSION)-)$(DRIVER_BRANCH)-$(KERNEL_VERSION)-$(DIST)
141149

150+
push-signed_ubuntu26.04%: DIST = ubuntu26.04
151+
push-signed_ubuntu26.04%: DRIVER_TAG = $(DRIVER_BRANCH)
152+
push-signed_ubuntu26.04%: IMAGE_TAG = $(if $(VERSION),$(VERSION)-)$(DRIVER_BRANCH)-$(KERNEL_VERSION)-$(DIST)
153+
push-signed_ubuntu26.04%: OUT_IMAGE_TAG = $(if $(VERSION),$(VERSION)-)$(DRIVER_BRANCH)-$(KERNEL_VERSION)-$(DIST)
154+
142155
# $(DRIVER_BUILD_TARGETS) is in the form of build-$(DIST)-$(DRIVER_VERSION)
143156
# Parse the target to set the required variables.
144157
build-%: DIST = $(word 2,$(subst -, ,$@))
@@ -191,6 +204,14 @@ build-signed_ubuntu24.04%: DRIVER_TAG = $(DRIVER_BRANCH)
191204
build-signed_ubuntu24.04%: IMAGE_TAG = $(if $(VERSION),$(VERSION)-)$(DRIVER_BRANCH)-$(KERNEL_VERSION)-$(DIST)
192205
build-signed_ubuntu24.04%: DOCKER_BUILD_ARGS = --build-arg KERNEL_VERSION="$(KERNEL_VERSION)"
193206

207+
# ubuntu26.04 Precompiled Driver
208+
build-signed_ubuntu26.04%: DIST = ubuntu26.04
209+
build-signed_ubuntu26.04%: SUBDIR = .
210+
build-signed_ubuntu26.04%: DOCKERFILE = $(CURDIR)/ubuntu26.04/precompiled/Dockerfile
211+
build-signed_ubuntu26.04%: DRIVER_TAG = $(DRIVER_BRANCH)
212+
build-signed_ubuntu26.04%: IMAGE_TAG = $(if $(VERSION),$(VERSION)-)$(DRIVER_BRANCH)-$(KERNEL_VERSION)-$(DIST)
213+
build-signed_ubuntu26.04%: DOCKER_BUILD_ARGS = --build-arg KERNEL_VERSION="$(KERNEL_VERSION)"
214+
194215
# base is an image used to poll Canonical for the latest kernel version
195216
# LTS_KERNEL must be defined in the environment when invoking this target.
196217
LTS_KERNEL ?= ""
@@ -298,4 +319,3 @@ $(VGPU_HOST_DRIVER_BUILD_TARGETS):
298319
push-vgpuhost-%: $(if $(VGPU_HOST_DRIVER_VERSION),,$(error "VGPU_HOST_DRIVER_VERSION is not set"))
299320
push-vgpuhost-%: DRIVER_TAG = $(VGPU_HOST_DRIVER_VERSION)
300321
push-vgpuhost-%: DIST = $(word 3,$(subst -, ,$@))
301-

base/Dockerfile

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,40 @@
1+
# Ubuntu 26.04
2+
FROM ubuntu:resolute-20260421 AS resolute
3+
4+
SHELL ["/bin/bash", "-c"]
5+
6+
ARG DRIVER_BRANCH
7+
ARG KERNEL_FLAVOR
8+
ARG LTS_KERNEL
9+
ENV DRIVER_BRANCH=${DRIVER_BRANCH}
10+
ENV KERNEL_FLAVOR=${KERNEL_FLAVOR}
11+
ENV LTS_KERNEL=${LTS_KERNEL}
12+
13+
RUN rm -f /etc/apt/sources.list.d/cuda* && \
14+
echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ resolute main restricted universe" > /etc/apt/sources.list && \
15+
echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ resolute-updates main restricted universe" >> /etc/apt/sources.list && \
16+
echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ resolute-security main restricted universe" >> /etc/apt/sources.list && \
17+
echo "deb [arch=amd64] http://us.archive.ubuntu.com/ubuntu resolute-updates main restricted" >> /etc/apt/sources.list && \
18+
echo "deb [arch=amd64] http://us.archive.ubuntu.com/ubuntu resolute-security main restricted" >> /etc/apt/sources.list && \
19+
rm -f /etc/apt/sources.list.d/ubuntu.sources
20+
21+
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
22+
23+
ENV NVIDIA_VISIBLE_DEVICES=void
24+
25+
RUN apt-get update && apt-get install -y --no-install-recommends \
26+
apt-utils git curl && \
27+
rm -rf /var/lib/apt/lists/*
28+
29+
RUN usermod -o -u 0 -g 0 _apt
30+
31+
COPY generate-ci-config /usr/local/bin/generate-ci-config
32+
33+
RUN chmod +x /usr/local/bin/generate-ci-config && \
34+
generate-ci-config
35+
36+
ENTRYPOINT ["/usr/bin/sleep","1000"]
37+
138
# Ubuntu 24.04
239
FROM ubuntu:noble-20260410 AS noble
340

multi-arch.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ $(DRIVER_PUSH_TARGETS): push-%:
2626
# No multi-arch support for the following distributions
2727
build-signed_ubuntu22.04%: DOCKER_BUILD_PLATFORM_OPTIONS = --platform=linux/amd64
2828
build-signed_ubuntu24.04%: DOCKER_BUILD_PLATFORM_OPTIONS = --platform=linux/amd64
29+
build-signed_ubuntu26.04%: DOCKER_BUILD_PLATFORM_OPTIONS = --platform=linux/amd64

ubuntu26.04/precompiled/Dockerfile

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
ARG BASE_IMAGE=ubuntu:resolute-20260421
2+
FROM ${BASE_IMAGE}
3+
4+
ENV DEBIAN_FRONTEND=noninteractive
5+
6+
ARG BASE_URL=https://us.download.nvidia.com/tesla
7+
ARG TARGETARCH
8+
ENV TARGETARCH=$TARGETARCH
9+
ARG DRIVER_BRANCH=595
10+
ENV DRIVER_BRANCH=$DRIVER_BRANCH
11+
ARG DRIVER_VERSION=595.71.05
12+
ENV DRIVER_VERSION=$DRIVER_VERSION
13+
14+
ARG KERNEL_VERSION=7.0.0-12-generic
15+
ENV KERNEL_VERSION=$KERNEL_VERSION
16+
17+
ENV NVIDIA_VISIBLE_DEVICES=void
18+
19+
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
20+
21+
RUN dpkg --add-architecture i386 && \
22+
apt-get update && apt-get install -y --no-install-recommends \
23+
apt-utils \
24+
build-essential \
25+
ca-certificates \
26+
curl \
27+
kmod \
28+
file \
29+
libelf-dev \
30+
libglvnd-dev \
31+
pkg-config && \
32+
rm -rf /var/lib/apt/lists/*
33+
34+
# Fetch GPG keys for CUDA repo
35+
RUN rm -f /etc/apt/sources.list.d/cuda* && \
36+
curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2604/x86_64/cuda-keyring_1.1-1_all.deb -o cuda-keyring_1.1-1_all.deb && \
37+
dpkg -i cuda-keyring_1.1-1_all.deb && \
38+
rm -f cuda-keyring_1.1-1_all.deb
39+
40+
RUN usermod -o -u 0 -g 0 _apt
41+
42+
# Install / upgrade packages here that are required to resolve CVEs
43+
ARG CVE_UPDATES
44+
RUN if [ -n "${CVE_UPDATES}" ]; then \
45+
apt-get update && apt-get --only-upgrade -y install ${CVE_UPDATES} && \
46+
rm -rf /var/lib/apt/lists/*; \
47+
fi
48+
49+
COPY ubuntu26.04/precompiled/nvidia-driver /usr/local/bin
50+
51+
ADD ubuntu26.04/precompiled/local-repo.sh /tmp
52+
53+
RUN mkdir -p /usr/local/repos && \
54+
/tmp/local-repo.sh download_driver_package_deps && \
55+
/tmp/local-repo.sh build_local_apt_repo && \
56+
/tmp/local-repo.sh fetch_nvidia_installer && \
57+
# Remove all other ubuntu apt sources to ensure we only pull from the local apt repo
58+
rm /etc/apt/sources.list.d/*
59+
60+
WORKDIR /drivers
61+
62+
ENTRYPOINT ["nvidia-driver", "init"]

0 commit comments

Comments
 (0)