Skip to content

Commit 88d0c1b

Browse files
authored
Merge pull request #2694 from flatcar/setup-nvidia-fixes
nvidia.service arm64 support & fixes
2 parents 3b08a39 + e313934 commit 88d0c1b

File tree

11 files changed

+85
-9
lines changed

11 files changed

+85
-9
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- The kernel module build directory now contains native binaries in arm64 images instead of the previous amd64 binaries ([scripts#2694](https://github.com/flatcar/scripts/pull/2694))
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Nvidia driver installer service now supports the 570 driver branch by forcing the use of the proprietary kernel module. The 570 branch defaults to the kernel-open driver which requires loading firmware, which is not yet supported on Flatcar. ([scripts#2694](https://github.com/flatcar/scripts/pull/2694))
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Added support for ARM64 architecture in the NVIDIA driver installer service ([scripts#2694](https://github.com/flatcar/scripts/pull/2694))
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
- AMD64: nvidia-drivers ([535.230.02](https://docs.nvidia.com/datacenter/tesla/tesla-release-notes-535-230-02/index.html))
2+
- ARM64: nvidia-drivers ([570.86.15](https://docs.nvidia.com/datacenter/tesla/tesla-release-notes-570-86-15/index.html))

sdk_container/src/third_party/coreos-overlay/eclass/coreos-kernel.eclass

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ DEPEND="=sys-kernel/coreos-sources-${COREOS_SOURCE_VERSION}"
4242
RESTRICT="binchecks strip"
4343

4444
# The build tools are OK and shouldn't trip up multilib-strict.
45-
QA_MULTILIB_PATHS="usr/lib/modules/.*/build/scripts/.*"
45+
QA_MULTILIB_PATHS="usr/lib/modules/.*/build/scripts/kconfig/.*"
4646

4747
# Use source installed by coreos-sources
4848
# KERNEL_DIR must find the kernel source tree under /usr/src/linux-*-coreos,

sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-modules/coreos-modules-6.6.82.ebuild

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@ src_install() {
5454
# Clean up the build tree
5555
shred_keys
5656
kmake clean
57+
58+
# TODO: ensure that fixdep and kbuild tools shipped inside the image
59+
# are native (we previously shipped amd64 binaries on arm64).
60+
# Upstream has a new script from v6.12 that we might be able to use:
61+
# scripts/package/install-extmod-build
62+
kmake HOSTLD=$(tc-getLD) HOSTCC=$(tc-getCC) cmd_and_fixdep='$(cmd)' modules_prepare
63+
kmake clean
64+
5765
find "build/" -type d -empty -delete || die
5866
rm "build/.config.old" || die
5967

sdk_container/src/third_party/coreos-overlay/x11-drivers/nvidia-drivers/files/bin/install-nvidia

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,45 @@
44
NVIDIA_DRIVER_BASENAME="$1"
55
KERNEL_NAME="$(ls /lib/modules)"
66

7+
option_supported() {
8+
local opt="$1"
9+
./nvidia-installer -A -h | grep -qe "--$opt"
10+
}
11+
712
cd "/nvidia/${NVIDIA_DRIVER_BASENAME}"
13+
14+
EXTRA_OPTS=()
15+
if option_supported no-rebuild-initramfs ; then
16+
EXTRA_OPTS+=( --no-rebuild-initramfs )
17+
fi
18+
if option_supported skip-module-load ; then
19+
EXTRA_OPTS+=( --skip-module-load )
20+
fi
21+
22+
# TODO: open requires firmware loading.
23+
# Can we load the module from the nspawn container?
24+
if option_supported kernel-module-type ; then
25+
EXTRA_OPTS+=( --kernel-module-type=proprietary )
26+
elif option_supported kernel-module-build-directory ; then
27+
EXTRA_OPTS+=( --kernel-module-build-directory=kernel )
28+
fi
29+
830
./nvidia-installer -s -n \
931
--no-check-for-alternate-installs \
1032
--no-kernel-module-source \
1133
--kernel-name="${KERNEL_NAME}" \
34+
"${EXTRA_OPTS[@]}" \
35+
--no-x-check \
1236
--no-opengl-files \
1337
--no-distro-scripts \
1438
--no-systemd \
1539
--skip-depmod \
1640
--kernel-install-path="${PWD}/install-mod" \
1741
--log-file-name="${PWD}/nvidia-installer.log" || true
1842

43+
echo "Last 50 lines of nvidia-installer.log:"
44+
tail -n50 nvidia-installer.log || true
45+
1946
mkdir -p /lib/modules/${KERNEL_NAME}/video
2047
mkdir -p "${PWD}"/install-mod
2148
cp "${PWD}"/kernel/*.ko "${PWD}"/install-mod

sdk_container/src/third_party/coreos-overlay/x11-drivers/nvidia-drivers/files/bin/setup-nvidia

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ set -euo pipefail
77
[ -f /etc/flatcar/nvidia-metadata ] && . /etc/flatcar/nvidia-metadata
88

99
NVIDIA_DOWNLOAD_BASEURL="https://us.download.nvidia.com/${NVIDIA_PRODUCT_TYPE}/"
10-
NVIDIA_DRIVER_BASENAME="NVIDIA-Linux-x86_64-${NVIDIA_DRIVER_VERSION}"
10+
NVIDIA_DRIVER_BASENAME="NVIDIA-Linux-$(uname -m)-${NVIDIA_DRIVER_VERSION}"
1111
NVIDIA_WORKDIR='nvidia-workdir'
1212

1313
FLATCAR_DEVELOPER_CONTAINER="flatcar_developer_container-${FLATCAR_RELEASE_VERSION}.bin"
@@ -38,8 +38,8 @@ function download_flatcar_developer_container() {
3838
fi
3939

4040
curl -L --fail "${FLATCAR_DEVELOPER_CONTAINER_URL}" -o "${FLATCAR_ROOT_WORKDIR}/${FLATCAR_DEVELOPER_CONTAINER}.bz2"
41-
lbzip2 -d "${FLATCAR_ROOT_WORKDIR}/${FLATCAR_DEVELOPER_CONTAINER}.bz2"
42-
41+
cp --sparse=always <(lbzcat "${FLATCAR_ROOT_WORKDIR}/${FLATCAR_DEVELOPER_CONTAINER}.bz2") "${FLATCAR_ROOT_WORKDIR}/${FLATCAR_DEVELOPER_CONTAINER}"
42+
rm "${FLATCAR_ROOT_WORKDIR}/${FLATCAR_DEVELOPER_CONTAINER}.bz2"
4343
fi
4444

4545
return 0
@@ -67,7 +67,7 @@ function extract_nvidia_installer() {
6767
function run_nspawn_container() {
6868
echo Spawn system-nspawn container to install the NVIDIA drivers
6969

70-
sudo systemd-nspawn --read-only --volatile=overlay --image="${FLATCAR_ROOT_WORKDIR}/${FLATCAR_DEVELOPER_CONTAINER}" --bind="${FLATCAR_ROOT_WORKDIR}/${NVIDIA_WORKDIR}":/nvidia --bind=/usr/lib/nvidia/bin:/app/bin/ /app/bin/install-nvidia "$NVIDIA_DRIVER_BASENAME"
70+
sudo systemd-nspawn --keep-unit --register=no --read-only --volatile=overlay --image="${FLATCAR_ROOT_WORKDIR}/${FLATCAR_DEVELOPER_CONTAINER}" --overlay=/usr/lib/modules::/usr/lib/modules --bind="${FLATCAR_ROOT_WORKDIR}/${NVIDIA_WORKDIR}":/nvidia --bind=/usr/lib/nvidia/bin:/app/bin/ /app/bin/install-nvidia "$NVIDIA_DRIVER_BASENAME"
7171
}
7272

7373
function copy_nvidia_build_artifacts() {
@@ -88,7 +88,11 @@ SYSEXT_LEVEL=1.0
8888
EOF
8989

9090
pushd /opt/nvidia
91-
ln -sfn "${NVIDIA_FLATCAR_VERSION_PAIR}" current
91+
if [[ -d "${NVIDIA_CURRENT_INSTALLATION}" ]]
92+
then
93+
rm -rf "${NVIDIA_CURRENT_INSTALLATION}"
94+
fi
95+
ln -sfn -T "${NVIDIA_FLATCAR_VERSION_PAIR}" "${NVIDIA_CURRENT_INSTALLATION}"
9296
popd
9397
}
9498

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
NVIDIA_DRIVER_VERSION=535.216.01
1+
NVIDIA_DRIVER_VERSION=@PV@
22
NVIDIA_PRODUCT_TYPE=tesla

sdk_container/src/third_party/coreos-overlay/x11-drivers/nvidia-drivers/nvidia-drivers-535.216.01.ebuild renamed to sdk_container/src/third_party/coreos-overlay/x11-drivers/nvidia-drivers/nvidia-drivers-535.230.02.ebuild

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ SRC_URI=""
1111

1212
LICENSE="Apache-2.0"
1313
SLOT="0"
14-
KEYWORDS="amd64 arm64"
14+
KEYWORDS="amd64"
1515
IUSE=""
1616

1717
# no source directory
@@ -23,6 +23,8 @@ src_install() {
2323
exeinto "/usr/lib/nvidia/bin"
2424
doexe "${FILESDIR}/bin/install-nvidia"
2525
doexe "${FILESDIR}/bin/setup-nvidia"
26+
cp "${FILESDIR}/nvidia-metadata" nvidia-metadata || die "cp failed"
27+
sed -i -e "s/@PV@/${PV}/" nvidia-metadata
2628
insinto "/usr/share/flatcar"
27-
doins "${FILESDIR}/nvidia-metadata"
29+
doins nvidia-metadata
2830
}

0 commit comments

Comments
 (0)