mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-11 15:06:58 +02:00
Merge pull request #2694 from flatcar/setup-nvidia-fixes
nvidia.service arm64 support & fixes
This commit is contained in:
commit
88d0c1b2dc
@ -0,0 +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))
|
1
changelog/bugfixes/2025-03-07-nvidia-driver-type.md
Normal file
1
changelog/bugfixes/2025-03-07-nvidia-driver-type.md
Normal file
@ -0,0 +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))
|
1
changelog/changes/2025-03-07-nvidia-arm64-support.md
Normal file
1
changelog/changes/2025-03-07-nvidia-arm64-support.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
- Added support for ARM64 architecture in the NVIDIA driver installer service ([scripts#2694](https://github.com/flatcar/scripts/pull/2694))
|
2
changelog/updates/2025-03-07-nvidia.md
Normal file
2
changelog/updates/2025-03-07-nvidia.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
- AMD64: nvidia-drivers ([535.230.02](https://docs.nvidia.com/datacenter/tesla/tesla-release-notes-535-230-02/index.html))
|
||||||
|
- ARM64: nvidia-drivers ([570.86.15](https://docs.nvidia.com/datacenter/tesla/tesla-release-notes-570-86-15/index.html))
|
@ -42,7 +42,7 @@ DEPEND="=sys-kernel/coreos-sources-${COREOS_SOURCE_VERSION}"
|
|||||||
RESTRICT="binchecks strip"
|
RESTRICT="binchecks strip"
|
||||||
|
|
||||||
# The build tools are OK and shouldn't trip up multilib-strict.
|
# The build tools are OK and shouldn't trip up multilib-strict.
|
||||||
QA_MULTILIB_PATHS="usr/lib/modules/.*/build/scripts/.*"
|
QA_MULTILIB_PATHS="usr/lib/modules/.*/build/scripts/kconfig/.*"
|
||||||
|
|
||||||
# Use source installed by coreos-sources
|
# Use source installed by coreos-sources
|
||||||
# KERNEL_DIR must find the kernel source tree under /usr/src/linux-*-coreos,
|
# KERNEL_DIR must find the kernel source tree under /usr/src/linux-*-coreos,
|
||||||
|
@ -54,6 +54,14 @@ src_install() {
|
|||||||
# Clean up the build tree
|
# Clean up the build tree
|
||||||
shred_keys
|
shred_keys
|
||||||
kmake clean
|
kmake clean
|
||||||
|
|
||||||
|
# TODO: ensure that fixdep and kbuild tools shipped inside the image
|
||||||
|
# are native (we previously shipped amd64 binaries on arm64).
|
||||||
|
# Upstream has a new script from v6.12 that we might be able to use:
|
||||||
|
# scripts/package/install-extmod-build
|
||||||
|
kmake HOSTLD=$(tc-getLD) HOSTCC=$(tc-getCC) cmd_and_fixdep='$(cmd)' modules_prepare
|
||||||
|
kmake clean
|
||||||
|
|
||||||
find "build/" -type d -empty -delete || die
|
find "build/" -type d -empty -delete || die
|
||||||
rm "build/.config.old" || die
|
rm "build/.config.old" || die
|
||||||
|
|
||||||
|
@ -4,11 +4,35 @@
|
|||||||
NVIDIA_DRIVER_BASENAME="$1"
|
NVIDIA_DRIVER_BASENAME="$1"
|
||||||
KERNEL_NAME="$(ls /lib/modules)"
|
KERNEL_NAME="$(ls /lib/modules)"
|
||||||
|
|
||||||
|
option_supported() {
|
||||||
|
local opt="$1"
|
||||||
|
./nvidia-installer -A -h | grep -qe "--$opt"
|
||||||
|
}
|
||||||
|
|
||||||
cd "/nvidia/${NVIDIA_DRIVER_BASENAME}"
|
cd "/nvidia/${NVIDIA_DRIVER_BASENAME}"
|
||||||
|
|
||||||
|
EXTRA_OPTS=()
|
||||||
|
if option_supported no-rebuild-initramfs ; then
|
||||||
|
EXTRA_OPTS+=( --no-rebuild-initramfs )
|
||||||
|
fi
|
||||||
|
if option_supported skip-module-load ; then
|
||||||
|
EXTRA_OPTS+=( --skip-module-load )
|
||||||
|
fi
|
||||||
|
|
||||||
|
# TODO: open requires firmware loading.
|
||||||
|
# Can we load the module from the nspawn container?
|
||||||
|
if option_supported kernel-module-type ; then
|
||||||
|
EXTRA_OPTS+=( --kernel-module-type=proprietary )
|
||||||
|
elif option_supported kernel-module-build-directory ; then
|
||||||
|
EXTRA_OPTS+=( --kernel-module-build-directory=kernel )
|
||||||
|
fi
|
||||||
|
|
||||||
./nvidia-installer -s -n \
|
./nvidia-installer -s -n \
|
||||||
--no-check-for-alternate-installs \
|
--no-check-for-alternate-installs \
|
||||||
--no-kernel-module-source \
|
--no-kernel-module-source \
|
||||||
--kernel-name="${KERNEL_NAME}" \
|
--kernel-name="${KERNEL_NAME}" \
|
||||||
|
"${EXTRA_OPTS[@]}" \
|
||||||
|
--no-x-check \
|
||||||
--no-opengl-files \
|
--no-opengl-files \
|
||||||
--no-distro-scripts \
|
--no-distro-scripts \
|
||||||
--no-systemd \
|
--no-systemd \
|
||||||
@ -16,6 +40,9 @@ cd "/nvidia/${NVIDIA_DRIVER_BASENAME}"
|
|||||||
--kernel-install-path="${PWD}/install-mod" \
|
--kernel-install-path="${PWD}/install-mod" \
|
||||||
--log-file-name="${PWD}/nvidia-installer.log" || true
|
--log-file-name="${PWD}/nvidia-installer.log" || true
|
||||||
|
|
||||||
|
echo "Last 50 lines of nvidia-installer.log:"
|
||||||
|
tail -n50 nvidia-installer.log || true
|
||||||
|
|
||||||
mkdir -p /lib/modules/${KERNEL_NAME}/video
|
mkdir -p /lib/modules/${KERNEL_NAME}/video
|
||||||
mkdir -p "${PWD}"/install-mod
|
mkdir -p "${PWD}"/install-mod
|
||||||
cp "${PWD}"/kernel/*.ko "${PWD}"/install-mod
|
cp "${PWD}"/kernel/*.ko "${PWD}"/install-mod
|
||||||
|
@ -7,7 +7,7 @@ set -euo pipefail
|
|||||||
[ -f /etc/flatcar/nvidia-metadata ] && . /etc/flatcar/nvidia-metadata
|
[ -f /etc/flatcar/nvidia-metadata ] && . /etc/flatcar/nvidia-metadata
|
||||||
|
|
||||||
NVIDIA_DOWNLOAD_BASEURL="https://us.download.nvidia.com/${NVIDIA_PRODUCT_TYPE}/"
|
NVIDIA_DOWNLOAD_BASEURL="https://us.download.nvidia.com/${NVIDIA_PRODUCT_TYPE}/"
|
||||||
NVIDIA_DRIVER_BASENAME="NVIDIA-Linux-x86_64-${NVIDIA_DRIVER_VERSION}"
|
NVIDIA_DRIVER_BASENAME="NVIDIA-Linux-$(uname -m)-${NVIDIA_DRIVER_VERSION}"
|
||||||
NVIDIA_WORKDIR='nvidia-workdir'
|
NVIDIA_WORKDIR='nvidia-workdir'
|
||||||
|
|
||||||
FLATCAR_DEVELOPER_CONTAINER="flatcar_developer_container-${FLATCAR_RELEASE_VERSION}.bin"
|
FLATCAR_DEVELOPER_CONTAINER="flatcar_developer_container-${FLATCAR_RELEASE_VERSION}.bin"
|
||||||
@ -38,8 +38,8 @@ function download_flatcar_developer_container() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
curl -L --fail "${FLATCAR_DEVELOPER_CONTAINER_URL}" -o "${FLATCAR_ROOT_WORKDIR}/${FLATCAR_DEVELOPER_CONTAINER}.bz2"
|
curl -L --fail "${FLATCAR_DEVELOPER_CONTAINER_URL}" -o "${FLATCAR_ROOT_WORKDIR}/${FLATCAR_DEVELOPER_CONTAINER}.bz2"
|
||||||
lbzip2 -d "${FLATCAR_ROOT_WORKDIR}/${FLATCAR_DEVELOPER_CONTAINER}.bz2"
|
cp --sparse=always <(lbzcat "${FLATCAR_ROOT_WORKDIR}/${FLATCAR_DEVELOPER_CONTAINER}.bz2") "${FLATCAR_ROOT_WORKDIR}/${FLATCAR_DEVELOPER_CONTAINER}"
|
||||||
|
rm "${FLATCAR_ROOT_WORKDIR}/${FLATCAR_DEVELOPER_CONTAINER}.bz2"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
@ -67,7 +67,7 @@ function extract_nvidia_installer() {
|
|||||||
function run_nspawn_container() {
|
function run_nspawn_container() {
|
||||||
echo Spawn system-nspawn container to install the NVIDIA drivers
|
echo Spawn system-nspawn container to install the NVIDIA drivers
|
||||||
|
|
||||||
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"
|
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"
|
||||||
}
|
}
|
||||||
|
|
||||||
function copy_nvidia_build_artifacts() {
|
function copy_nvidia_build_artifacts() {
|
||||||
@ -88,7 +88,11 @@ SYSEXT_LEVEL=1.0
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
pushd /opt/nvidia
|
pushd /opt/nvidia
|
||||||
ln -sfn "${NVIDIA_FLATCAR_VERSION_PAIR}" current
|
if [[ -d "${NVIDIA_CURRENT_INSTALLATION}" ]]
|
||||||
|
then
|
||||||
|
rm -rf "${NVIDIA_CURRENT_INSTALLATION}"
|
||||||
|
fi
|
||||||
|
ln -sfn -T "${NVIDIA_FLATCAR_VERSION_PAIR}" "${NVIDIA_CURRENT_INSTALLATION}"
|
||||||
popd
|
popd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
NVIDIA_DRIVER_VERSION=535.216.01
|
NVIDIA_DRIVER_VERSION=@PV@
|
||||||
NVIDIA_PRODUCT_TYPE=tesla
|
NVIDIA_PRODUCT_TYPE=tesla
|
||||||
|
@ -11,7 +11,7 @@ SRC_URI=""
|
|||||||
|
|
||||||
LICENSE="Apache-2.0"
|
LICENSE="Apache-2.0"
|
||||||
SLOT="0"
|
SLOT="0"
|
||||||
KEYWORDS="amd64 arm64"
|
KEYWORDS="amd64"
|
||||||
IUSE=""
|
IUSE=""
|
||||||
|
|
||||||
# no source directory
|
# no source directory
|
||||||
@ -23,6 +23,8 @@ src_install() {
|
|||||||
exeinto "/usr/lib/nvidia/bin"
|
exeinto "/usr/lib/nvidia/bin"
|
||||||
doexe "${FILESDIR}/bin/install-nvidia"
|
doexe "${FILESDIR}/bin/install-nvidia"
|
||||||
doexe "${FILESDIR}/bin/setup-nvidia"
|
doexe "${FILESDIR}/bin/setup-nvidia"
|
||||||
|
cp "${FILESDIR}/nvidia-metadata" nvidia-metadata || die "cp failed"
|
||||||
|
sed -i -e "s/@PV@/${PV}/" nvidia-metadata
|
||||||
insinto "/usr/share/flatcar"
|
insinto "/usr/share/flatcar"
|
||||||
doins "${FILESDIR}/nvidia-metadata"
|
doins nvidia-metadata
|
||||||
}
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
# Copyright (c) 2020 Kinvolk GmbH. All rights reserved.
|
||||||
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
|
||||||
|
EAPI=7
|
||||||
|
|
||||||
|
inherit systemd
|
||||||
|
|
||||||
|
DESCRIPTION="NVIDIA drivers"
|
||||||
|
HOMEPAGE=""
|
||||||
|
SRC_URI=""
|
||||||
|
|
||||||
|
LICENSE="Apache-2.0"
|
||||||
|
SLOT="0"
|
||||||
|
KEYWORDS="arm64"
|
||||||
|
IUSE=""
|
||||||
|
|
||||||
|
# no source directory
|
||||||
|
S="${WORKDIR}"
|
||||||
|
|
||||||
|
src_install() {
|
||||||
|
systemd_dounit "${FILESDIR}/units/nvidia.service"
|
||||||
|
systemd_enable_service multi-user.target nvidia.service
|
||||||
|
exeinto "/usr/lib/nvidia/bin"
|
||||||
|
doexe "${FILESDIR}/bin/install-nvidia"
|
||||||
|
doexe "${FILESDIR}/bin/setup-nvidia"
|
||||||
|
cp "${FILESDIR}/nvidia-metadata" nvidia-metadata || die "cp failed"
|
||||||
|
sed -i -e "s/@PV@/${PV}/" nvidia-metadata
|
||||||
|
insinto "/usr/share/flatcar"
|
||||||
|
doins nvidia-metadata
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user