diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e814081..1b7728c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * Update `update-ldcache` hook to only update ldcache if it exists. * Update `update-ldcache` hook to create `/etc/ld.so.conf.d` folder if it doesn't exist. +* Fix failure when libcuda cannot be located during XOrg library discovery. ## v1.13.0 diff --git a/internal/discover/graphics.go b/internal/discover/graphics.go index 7d533c0e..dedbfbe7 100644 --- a/internal/discover/graphics.go +++ b/internal/discover/graphics.go @@ -46,10 +46,7 @@ func NewGraphicsDiscoverer(logger *logrus.Logger, devices image.VisibleDevices, drmByPathSymlinks := newCreateDRMByPathSymlinks(logger, drmDeviceNodes, cfg) - xorg, err := newXorgDiscoverer(logger, driverRoot, cfg.NvidiaCTKPath) - if err != nil { - return nil, fmt.Errorf("failed to create Xorg discoverer: %v", err) - } + xorg := optionalXorgDiscoverer(logger, driverRoot, cfg.NvidiaCTKPath) discover := Merge( Merge(drmDeviceNodes, drmByPathSymlinks), @@ -259,6 +256,17 @@ type xorgHooks struct { var _ Discover = (*xorgHooks)(nil) +// optionalXorgDiscoverer creates a discoverer for Xorg libraries. +// If the creation of the discoverer fails, a None discoverer is returned. +func optionalXorgDiscoverer(logger *logrus.Logger, driverRoot string, nvidiaCTKPath string) Discover { + xorg, err := newXorgDiscoverer(logger, driverRoot, nvidiaCTKPath) + if err != nil { + logger.Warnf("Failed to create Xorg discoverer: %v; skipping xorg libraries", err) + return None{} + } + return xorg +} + func newXorgDiscoverer(logger *logrus.Logger, driverRoot string, nvidiaCTKPath string) (Discover, error) { libCudaPaths, err := cuda.New( cuda.WithLogger(logger),