Skip to content

Commit 2a1f2b2

Browse files
committed
[Ubuntu24.04] Install the driver in a single step
Signed-off-by: Tariq Ibrahim <[email protected]>
1 parent eea136d commit 2a1f2b2

File tree

2 files changed

+28
-145
lines changed

2 files changed

+28
-145
lines changed

ubuntu24.04/Dockerfile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,7 @@ ADD install.sh /tmp
6767
RUN apt-key del 7fa2af80 && OS_ARCH=${TARGETARCH/amd64/x86_64} && OS_ARCH=${OS_ARCH/arm64/sbsa} && \
6868
apt-key adv --fetch-keys "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/${OS_ARCH}/3bf863cc.pub"
6969

70-
RUN /tmp/install.sh reposetup && /tmp/install.sh depinstall && \
71-
curl -fsSL -o /usr/local/bin/donkey https://github.com/3XX0/donkey/releases/download/v1.1.0/donkey && \
72-
chmod +x /usr/local/bin/donkey
70+
RUN /tmp/install.sh depinstall
7371

7472
COPY nvidia-driver /usr/local/bin
7573

ubuntu24.04/nvidia-driver

Lines changed: 27 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -120,71 +120,22 @@ _kernel_requires_package() {
120120
return 0
121121
}
122122

123-
# Compile the kernel modules, optionally sign them, and generate a precompiled package for use by the nvidia-installer.
124-
_create_driver_package() (
125-
local pkg_name="nvidia-modules-${KERNEL_VERSION%-*}${PACKAGE_TAG:+-${PACKAGE_TAG}}"
126-
local nvidia_sign_args=""
127-
local nvidia_modeset_sign_args=""
128-
local nvidia_uvm_sign_args=""
129-
130-
trap "make -s -j ${MAX_THREADS} SYSSRC=/lib/modules/${KERNEL_VERSION}/build clean > /dev/null" EXIT
131-
132-
echo "Compiling NVIDIA driver kernel modules..."
133-
cd /usr/src/nvidia-${DRIVER_VERSION}/${KERNEL_TYPE}
134-
123+
# This is required as currently GPU driver installer doesn't expect headers in x86_64 folder, but only in either default
124+
# or kernel-version folder.
125+
_link_ofa_kernel() (
135126
if _gpu_direct_rdma_enabled; then
136127
ln -s /run/mellanox/drivers/usr/src/ofa_kernel /usr/src/
137128
# if arch directory exists(MOFED >=5.5) then create a symlink as expected by GPU driver installer
138-
# This is required as currently GPU driver installer doesn't expect headers in x86_64 folder, but only in either default or kernel-version folder.
139129
# ls -ltr /usr/src/ofa_kernel/
140130
# lrwxrwxrwx 1 root root 36 Dec 8 20:10 default -> /etc/alternatives/ofa_kernel_headers
141131
# drwxr-xr-x 4 root root 4096 Dec 8 20:14 x86_64
142132
# lrwxrwxrwx 1 root root 44 Dec 9 19:05 5.4.0-90-generic -> /usr/src/ofa_kernel/x86_64/5.4.0-90-generic/
143-
if [[ -d /run/mellanox/drivers/usr/src/ofa_kernel/$DRIVER_ARCH/`uname -r` ]]; then
144-
if [[ ! -e /usr/src/ofa_kernel/`uname -r` ]]; then
145-
ln -s /run/mellanox/drivers/usr/src/ofa_kernel/$DRIVER_ARCH/`uname -r` /usr/src/ofa_kernel/
133+
if [[ -d /run/mellanox/drivers/usr/src/ofa_kernel/$DRIVER_ARCH/$(uname -r) ]]; then
134+
if [[ ! -e /usr/src/ofa_kernel/$(uname -r) ]]; then
135+
ln -s /run/mellanox/drivers/usr/src/ofa_kernel/$DRIVER_ARCH/$(uname -r) /usr/src/ofa_kernel/
146136
fi
147137
fi
148138
fi
149-
150-
export IGNORE_CC_MISMATCH=1
151-
make -s -j ${MAX_THREADS} SYSSRC=/lib/modules/${KERNEL_VERSION}/build nv-linux.o nv-modeset-linux.o > /dev/null
152-
153-
echo "Relinking NVIDIA driver kernel modules..."
154-
rm -f nvidia.ko nvidia-modeset.ko
155-
ld -d -r -o nvidia.ko ./nv-linux.o ./nvidia/nv-kernel.o_binary
156-
ld -d -r -o nvidia-modeset.ko ./nv-modeset-linux.o ./nvidia-modeset/nv-modeset-kernel.o_binary
157-
158-
if [ -n "${PRIVATE_KEY}" ]; then
159-
echo "Signing NVIDIA driver kernel modules..."
160-
donkey get ${PRIVATE_KEY} sh -c "PATH=${PATH}:/usr/src/linux-headers-${KERNEL_VERSION}/scripts && \
161-
sign-file sha512 \$DONKEY_FILE pubkey.x509 nvidia.ko nvidia.ko.sign && \
162-
sign-file sha512 \$DONKEY_FILE pubkey.x509 nvidia-modeset.ko nvidia-modeset.ko.sign && \
163-
sign-file sha512 \$DONKEY_FILE pubkey.x509 nvidia-uvm.ko"
164-
nvidia_sign_args="--linked-module nvidia.ko --signed-module nvidia.ko.sign"
165-
nvidia_modeset_sign_args="--linked-module nvidia-modeset.ko --signed-module nvidia-modeset.ko.sign"
166-
nvidia_uvm_sign_args="--signed"
167-
fi
168-
169-
echo "Building NVIDIA driver package ${pkg_name}..."
170-
../mkprecompiled --pack ${pkg_name} --description ${KERNEL_VERSION} \
171-
--proc-mount-point /lib/modules/${KERNEL_VERSION}/proc \
172-
--driver-version ${DRIVER_VERSION} \
173-
--kernel-interface nv-linux.o \
174-
--linked-module-name nvidia.ko \
175-
--core-object-name nvidia/nv-kernel.o_binary \
176-
${nvidia_sign_args} \
177-
--target-directory . \
178-
--kernel-interface nv-modeset-linux.o \
179-
--linked-module-name nvidia-modeset.ko \
180-
--core-object-name nvidia-modeset/nv-modeset-kernel.o_binary \
181-
${nvidia_modeset_sign_args} \
182-
--target-directory . \
183-
--kernel-module nvidia-uvm.ko \
184-
${nvidia_uvm_sign_args} \
185-
--target-directory .
186-
mkdir -p precompiled
187-
mv ${pkg_name} precompiled
188139
)
189140

190141
_assert_nvswitch_system() {
@@ -420,18 +371,29 @@ _unload_driver() {
420371
_install_driver() {
421372
local install_args=()
422373

423-
echo "Installing NVIDIA driver kernel modules..."
424-
cd /usr/src/nvidia-${DRIVER_VERSION}
425-
if [ -d /lib/modules/${KERNEL_VERSION}/kernel/drivers/video ]; then
426-
rm -rf /lib/modules/${KERNEL_VERSION}/kernel/drivers/video
427-
else
428-
rm -rf /lib/modules/${KERNEL_VERSION}/video
429-
fi
430-
431374
if [ "${ACCEPT_LICENSE}" = "yes" ]; then
432375
install_args+=("--accept-license")
433376
fi
434-
nvidia-installer --kernel-module-only --no-drm --ui=none --no-nouveau-check -m=${KERNEL_TYPE} ${install_args[@]+"${install_args[@]}"}
377+
378+
# Install the NVIDIA driver in one step
379+
sh NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION.run -x && \
380+
cd NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION && \
381+
./nvidia-installer --silent \
382+
--ui=none \
383+
--no-drm \
384+
--no-nouveau-check \
385+
--no-nvidia-modprobe \
386+
--no-rpms \
387+
--no-backup \
388+
--no-check-for-alternate-installs \
389+
--no-libglx-indirect \
390+
--no-install-libglvnd \
391+
--x-prefix=/tmp/null \
392+
--x-module-path=/tmp/null \
393+
--x-library-path=/tmp/null \
394+
--x-sysconfig-path=/tmp/null \
395+
-m=${KERNEL_TYPE} \
396+
${install_args[@]+"${install_args[@]}"}
435397
}
436398

437399
# Mount the driver rootfs into the run directory with the exception of sysfs.
@@ -524,26 +486,6 @@ init() {
524486
_find_vgpu_driver_version || exit 1
525487
fi
526488

527-
# Install the userspace components and copy the kernel module sources.
528-
sh NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION.run -x && \
529-
cd NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION && \
530-
./nvidia-installer --silent \
531-
--no-kernel-module \
532-
--no-nouveau-check \
533-
--no-nvidia-modprobe \
534-
--no-rpms \
535-
--no-backup \
536-
--no-check-for-alternate-installs \
537-
--no-libglx-indirect \
538-
--no-install-libglvnd \
539-
--x-prefix=/tmp/null \
540-
--x-module-path=/tmp/null \
541-
--x-library-path=/tmp/null \
542-
--x-sysconfig-path=/tmp/null && \
543-
mkdir -p /usr/src/nvidia-${DRIVER_VERSION} && \
544-
mv LICENSE mkprecompiled ${KERNEL_TYPE} /usr/src/nvidia-${DRIVER_VERSION} && \
545-
sed '9,${/^\(kernel\|LICENSE\)/!d}' .manifest > /usr/src/nvidia-${DRIVER_VERSION}/.manifest
546-
547489
echo -e "\n========== NVIDIA Software Installer ==========\n"
548490
echo -e "Starting installation of NVIDIA driver version ${DRIVER_VERSION} for Linux kernel version ${KERNEL_VERSION}\n"
549491

@@ -565,7 +507,7 @@ init() {
565507
_update_package_cache
566508
_resolve_kernel_version || exit 1
567509
_install_prerequisites
568-
_create_driver_package
510+
_link_ofa_kernel
569511
#_remove_prerequisites
570512
#_cleanup_package_cache
571513
fi
@@ -583,63 +525,6 @@ init() {
583525
exit 0
584526
}
585527

586-
update() {
587-
exec 3>&2
588-
if exec 2> /dev/null 4< ${PID_FILE}; then
589-
if ! flock -n 4 && read pid <&4 && kill -0 "${pid}"; then
590-
exec > >(tee -a "/proc/${pid}/fd/1")
591-
exec 2> >(tee -a "/proc/${pid}/fd/2" >&3)
592-
else
593-
exec 2>&3
594-
fi
595-
exec 4>&-
596-
fi
597-
exec 3>&-
598-
599-
# vgpu driver version is choosen dynamically during runtime, so pre-compile modules for
600-
# only non-vgpu driver types
601-
if [ "${DRIVER_TYPE}" != "vgpu" ]; then
602-
# Install the userspace components and copy the kernel module sources.
603-
if [ ! -e /usr/src/nvidia-${DRIVER_VERSION}/mkprecompiled ]; then
604-
sh NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION.run -x && \
605-
cd NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION && \
606-
./nvidia-installer --silent \
607-
--no-kernel-module \
608-
--no-nouveau-check \
609-
--no-nvidia-modprobe \
610-
--no-rpms \
611-
--no-backup \
612-
--no-check-for-alternate-installs \
613-
--no-libglx-indirect \
614-
--no-install-libglvnd \
615-
--x-prefix=/tmp/null \
616-
--x-module-path=/tmp/null \
617-
--x-library-path=/tmp/null \
618-
--x-sysconfig-path=/tmp/null && \
619-
mkdir -p /usr/src/nvidia-${DRIVER_VERSION} && \
620-
mv LICENSE mkprecompiled ${KERNEL_TYPE} /usr/src/nvidia-${DRIVER_VERSION} && \
621-
sed '9,${/^\(kernel\|LICENSE\)/!d}' .manifest > /usr/src/nvidia-${DRIVER_VERSION}/.manifest
622-
fi
623-
fi
624-
625-
echo -e "\n========== NVIDIA Software Updater ==========\n"
626-
echo -e "Starting update of NVIDIA driver version ${DRIVER_VERSION} for Linux kernel version ${KERNEL_VERSION}\n"
627-
628-
trap "echo 'Caught signal'; exit 1" HUP INT QUIT PIPE TERM
629-
630-
_update_package_cache
631-
_resolve_kernel_version || exit 1
632-
_install_prerequisites
633-
if _kernel_requires_package; then
634-
_create_driver_package
635-
fi
636-
_remove_prerequisites
637-
_cleanup_package_cache
638-
639-
echo "Done"
640-
exit 0
641-
}
642-
643528
# Wait for MOFED drivers to be loaded and load nvidia-peermem whenever it gets unloaded during MOFED driver updates
644529
reload_nvidia_peermem() {
645530
if [ "$USE_HOST_MOFED" = "true" ]; then

0 commit comments

Comments
 (0)