Skip to content

Commit bb2cd65

Browse files
committed
[ubuntu-precompiled] enable offline installation of driver packages
Signed-off-by: Tariq Ibrahim <[email protected]>
1 parent b383427 commit bb2cd65

File tree

5 files changed

+124
-39
lines changed

5 files changed

+124
-39
lines changed

ubuntu22.04/precompiled/Dockerfile

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -48,28 +48,21 @@ RUN if [ -n "${CVE_UPDATES}" ]; then \
4848
rm -rf /var/lib/apt/lists/*; \
4949
fi
5050

51-
# update pkg cache and install pkgs for userspace driver libs
52-
RUN apt-get update && apt-get install -y --download-only --no-install-recommends nvidia-driver-${DRIVER_BRANCH}-server \
53-
nvidia-fabricmanager-${DRIVER_BRANCH}=${DRIVER_VERSION}-1 \
54-
libnvidia-nscq-${DRIVER_BRANCH}=${DRIVER_VERSION}-1 && \
55-
rm -rf /var/lib/apt/lists/*;
56-
5751
RUN if [ "$DRIVER_BRANCH" -ge "550" ]; then \
5852
apt-get update && \
5953
apt-get install -y --no-install-recommends nvidia-imex-${DRIVER_BRANCH}=${DRIVER_VERSION}-1 && \
6054
rm -rf /var/lib/apt/lists/*; fi
6155

62-
# update pkg cache and download pkgs for driver module installation during runtime.
63-
# this is done to avoid shipping .ko files.
64-
# avoid cleaning the cache after this to retain these packages during runtime.
65-
RUN apt-get update && apt-get install --download-only --no-install-recommends -y linux-objects-nvidia-${DRIVER_BRANCH}-server-${KERNEL_VERSION} \
66-
linux-signatures-nvidia-${KERNEL_VERSION} \
67-
linux-modules-nvidia-${DRIVER_BRANCH}-server-${KERNEL_VERSION} \
68-
# add support for nvidia open source driver packages during runtime
69-
linux-modules-nvidia-${DRIVER_BRANCH}-server-open-${KERNEL_VERSION}
70-
7156
COPY nvidia-driver /usr/local/bin
7257

58+
ADD local-repo.sh /tmp
59+
60+
RUN mkdir -p /usr/local/repos && \
61+
/tmp/local-repo.sh download_driver_package_deps && \
62+
/tmp/local-repo.sh build_local_apt_repo && \
63+
# Remove cuda repository to avoid GPG errors
64+
rm -f /etc/apt/sources.list.d/cuda*
65+
7366
WORKDIR /drivers
7467

7568
# Remove cuda repository to avoid GPG errors
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#!/usr/bin/env bash
2+
3+
set -eu
4+
5+
LOCAL_REPO_DIR=/usr/local/repos
6+
7+
download_apt_with_dep () {
8+
local package="$1"
9+
apt-get download $package
10+
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances $package | grep "^\w" | sort -u)
11+
}
12+
13+
download_driver_package_deps () {
14+
apt-get update
15+
pushd ${LOCAL_REPO_DIR}
16+
17+
download_apt_with_dep linux-objects-nvidia-${DRIVER_BRANCH}-server-${KERNEL_VERSION}
18+
download_apt_with_dep linux-signatures-nvidia-${KERNEL_VERSION}
19+
download_apt_with_dep linux-modules-nvidia-${DRIVER_BRANCH}-server-${KERNEL_VERSION}
20+
download_apt_with_dep linux-modules-nvidia-${DRIVER_BRANCH}-server-open-${KERNEL_VERSION}
21+
download_apt_with_dep nvidia-utils-${DRIVER_BRANCH}-server
22+
download_apt_with_dep nvidia-headless-no-dkms-${DRIVER_BRANCH}-server
23+
download_apt_with_dep libnvidia-decode-${DRIVER_BRANCH}-server
24+
download_apt_with_dep libnvidia-extra-${DRIVER_BRANCH}-server
25+
download_apt_with_dep libnvidia-encode-${DRIVER_BRANCH}-server
26+
download_apt_with_dep libnvidia-fbc1-${DRIVER_BRANCH}-server
27+
28+
apt-get download nvidia-fabricmanager-${DRIVER_BRANCH}=${DRIVER_VERSION}-1
29+
apt-get download libnvidia-nscq-${DRIVER_BRANCH}=${DRIVER_VERSION}-1
30+
31+
ls -al .
32+
popd
33+
}
34+
35+
build_local_apt_repo () {
36+
pushd ${LOCAL_REPO_DIR}
37+
dpkg-scanpackages . /dev/null | gzip -9c | tee Packages.gz > /dev/null
38+
echo "deb [trusted=yes] file:${LOCAL_REPO_DIR} ./" > /etc/apt/sources.list
39+
popd
40+
apt-get update
41+
}
42+
43+
if [ "$1" = "download_driver_package_deps" ]; then
44+
download_driver_package_deps
45+
elif [ "$1" = "build_local_apt_repo" ]; then
46+
build_local_apt_repo
47+
else
48+
echo "Unknown function: $1"
49+
exit 1
50+
fi

ubuntu22.04/precompiled/nvidia-driver

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -234,15 +234,14 @@ _unload_driver() {
234234

235235
# Link and install the kernel modules from a precompiled packages
236236
_install_driver() {
237-
# Install necessary userspace, fabric manager and libnvidia-nscq packages
238-
apt-get install -y --no-install-recommends nvidia-driver-${DRIVER_BRANCH}-server
239-
240-
# Uninstall unnecessary packages installed as a part of the nvidia-driver-${DRIVER_BRANCH}-server package
241-
apt-get purge -y \
242-
libnvidia-egl-wayland1 \
243-
nvidia-dkms-${DRIVER_BRANCH}-server \
244-
nvidia-kernel-source-${DRIVER_BRANCH}-server \
245-
xserver-xorg-video-nvidia-${DRIVER_BRANCH}-server
237+
# Install necessary driver userspace packages
238+
apt-get install -y --no-install-recommends \
239+
nvidia-utils-${DRIVER_BRANCH}-server \
240+
nvidia-headless-no-dkms-${DRIVER_BRANCH}-server \
241+
libnvidia-decode-${DRIVER_BRANCH}-server \
242+
libnvidia-extra-${DRIVER_BRANCH}-server \
243+
libnvidia-encode-${DRIVER_BRANCH}-server \
244+
libnvidia-fbc1-${DRIVER_BRANCH}-server
246245

247246
# Now install the precompiled kernel module packages signed by Canonical
248247
if [ "$OPEN_KERNEL_MODULES_ENABLED" = true ]; then

ubuntu24.04/precompiled/Dockerfile

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,28 +43,21 @@ RUN if [ -n "${CVE_UPDATES}" ]; then \
4343
rm -rf /var/lib/apt/lists/*; \
4444
fi
4545

46-
# update pkg cache and install pkgs for userspace driver libs
47-
RUN apt-get update && apt-get install -y --download-only --no-install-recommends nvidia-driver-${DRIVER_BRANCH}-server \
48-
nvidia-fabricmanager-${DRIVER_BRANCH}=${DRIVER_VERSION}-1 \
49-
libnvidia-nscq-${DRIVER_BRANCH}=${DRIVER_VERSION}-1 && \
50-
rm -rf /var/lib/apt/lists/*;
51-
5246
RUN if [ "$DRIVER_BRANCH" -ge "550" ]; then \
5347
apt-get update && \
5448
apt-get install -y --no-install-recommends nvidia-imex-${DRIVER_BRANCH}=${DRIVER_VERSION}-1 && \
5549
rm -rf /var/lib/apt/lists/*; fi
5650

57-
# update pkg cache and download pkgs for driver module installation during runtime.
58-
# this is done to avoid shipping .ko files.
59-
# avoid cleaning the cache after this to retain these packages during runtime.
60-
RUN apt-get update && apt-get install --download-only --no-install-recommends -y linux-objects-nvidia-${DRIVER_BRANCH}-server-${KERNEL_VERSION} \
61-
linux-signatures-nvidia-${KERNEL_VERSION} \
62-
linux-modules-nvidia-${DRIVER_BRANCH}-server-${KERNEL_VERSION} \
63-
# add support for nvidia open source driver packages during runtime
64-
linux-modules-nvidia-${DRIVER_BRANCH}-server-open-${KERNEL_VERSION}
65-
6651
COPY nvidia-driver /usr/local/bin
6752

53+
ADD local-repo.sh /tmp
54+
55+
RUN mkdir -p /usr/local/repos && \
56+
/tmp/local-repo.sh download_driver_package_deps && \
57+
/tmp/local-repo.sh build_local_apt_repo && \
58+
# Remove cuda repository to avoid GPG errors
59+
rm -f /etc/apt/sources.list.d/cuda* \
60+
6861
WORKDIR /drivers
6962

7063
# Remove cuda repository to avoid GPG errors
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#!/usr/bin/env bash
2+
3+
set -eu
4+
5+
LOCAL_REPO_DIR=/usr/local/repos
6+
7+
download_apt_with_dep () {
8+
local package="$1"
9+
apt-get download $package
10+
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances $package | grep "^\w" | sort -u)
11+
}
12+
13+
download_driver_package_deps () {
14+
apt-get update
15+
pushd ${LOCAL_REPO_DIR}
16+
17+
download_apt_with_dep linux-objects-nvidia-${DRIVER_BRANCH}-server-${KERNEL_VERSION}
18+
download_apt_with_dep linux-signatures-nvidia-${KERNEL_VERSION}
19+
download_apt_with_dep linux-modules-nvidia-${DRIVER_BRANCH}-server-${KERNEL_VERSION}
20+
download_apt_with_dep linux-modules-nvidia-${DRIVER_BRANCH}-server-open-${KERNEL_VERSION}
21+
download_apt_with_dep nvidia-utils-${DRIVER_BRANCH}-server
22+
download_apt_with_dep nvidia-headless-no-dkms-${DRIVER_BRANCH}-server
23+
download_apt_with_dep libnvidia-decode-${DRIVER_BRANCH}-server
24+
download_apt_with_dep libnvidia-extra-${DRIVER_BRANCH}-server
25+
download_apt_with_dep libnvidia-encode-${DRIVER_BRANCH}-server
26+
download_apt_with_dep libnvidia-fbc1-${DRIVER_BRANCH}-server
27+
28+
apt-get download nvidia-fabricmanager-${DRIVER_BRANCH}=${DRIVER_VERSION}-1
29+
apt-get download libnvidia-nscq-${DRIVER_BRANCH}=${DRIVER_VERSION}-1
30+
31+
ls -al .
32+
popd
33+
}
34+
35+
build_local_apt_repo () {
36+
pushd ${LOCAL_REPO_DIR}
37+
dpkg-scanpackages . /dev/null | gzip -9c | tee Packages.gz > /dev/null
38+
echo "deb [trusted=yes] file:${LOCAL_REPO_DIR} ./" > /etc/apt/sources.list
39+
popd
40+
apt-get update
41+
}
42+
43+
if [ "$1" = "download_driver_package_deps" ]; then
44+
download_driver_package_deps
45+
elif [ "$1" = "build_local_apt_repo" ]; then
46+
build_local_apt_repo
47+
else
48+
echo "Unknown function: $1"
49+
exit 1
50+
fi

0 commit comments

Comments
 (0)