Resolve ldconfig path in update-ldcache hook

Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
Evan Lezar 2023-11-21 10:41:31 +01:00
parent 232df647c1
commit d792e64f38

View File

@ -22,6 +22,7 @@ import (
"path/filepath" "path/filepath"
"syscall" "syscall"
"github.com/NVIDIA/nvidia-container-toolkit/internal/config"
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger" "github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
"github.com/NVIDIA/nvidia-container-toolkit/internal/oci" "github.com/NVIDIA/nvidia-container-toolkit/internal/oci"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
@ -31,7 +32,7 @@ type command struct {
logger logger.Interface logger logger.Interface
} }
type config struct { type options struct {
folders cli.StringSlice folders cli.StringSlice
containerSpec string containerSpec string
} }
@ -46,7 +47,7 @@ func NewCommand(logger logger.Interface) *cli.Command {
// build the update-ldcache command // build the update-ldcache command
func (m command) build() *cli.Command { func (m command) build() *cli.Command {
cfg := config{} cfg := options{}
// Create the 'update-ldcache' command // Create the 'update-ldcache' command
c := cli.Command{ c := cli.Command{
@ -73,7 +74,7 @@ func (m command) build() *cli.Command {
return &c return &c
} }
func (m command) run(c *cli.Context, cfg *config) error { func (m command) run(c *cli.Context, cfg *options) error {
s, err := oci.LoadContainerState(cfg.containerSpec) s, err := oci.LoadContainerState(cfg.containerSpec)
if err != nil { if err != nil {
return fmt.Errorf("failed to load container state: %v", err) return fmt.Errorf("failed to load container state: %v", err)
@ -84,7 +85,8 @@ func (m command) run(c *cli.Context, cfg *config) error {
return fmt.Errorf("failed to determined container root: %v", err) return fmt.Errorf("failed to determined container root: %v", err)
} }
args := []string{"/sbin/ldconfig"} ldconfigPath := m.resolveLDConfigPath("/sbin/ldconfig")
args := []string{filepath.Base(ldconfigPath)}
if containerRoot != "" { if containerRoot != "" {
args = append(args, "-r", containerRoot) args = append(args, "-r", containerRoot)
} }
@ -118,6 +120,13 @@ func (r root) hasPath(path string) bool {
return true return true
} }
// resolveLDConfigPath determines the LDConfig path to use for the system.
// On systems such as Ubuntu where `/sbin/ldconfig` is a wrapper around
// /sbin/ldconfig.real, the latter is returned.
func (m command) resolveLDConfigPath(path string) string {
return config.NormalizeLDConfigPath("@" + path)
}
// createConfig creates (or updates) /etc/ld.so.conf.d/nvcr-<RANDOM_STRING>.conf in the container // createConfig creates (or updates) /etc/ld.so.conf.d/nvcr-<RANDOM_STRING>.conf in the container
// to include the required paths. // to include the required paths.
func (m command) createConfig(root string, folders []string) error { func (m command) createConfig(root string, folders []string) error {