mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2024-11-22 00:08:11 +00:00
[no-relnote] Use NVCT_CONFIG_FILE_PATH in toolkit install
Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
parent
abf6b8a320
commit
91aadb7616
@ -37,7 +37,6 @@ type executable struct {
|
|||||||
target executableTarget
|
target executableTarget
|
||||||
env map[string]string
|
env map[string]string
|
||||||
preLines []string
|
preLines []string
|
||||||
argLines []string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// install installs an executable component of the NVIDIA container toolkit. The source executable
|
// install installs an executable component of the NVIDIA container toolkit. The source executable
|
||||||
@ -128,10 +127,6 @@ func (e executable) writeWrapperTo(wrapper io.Writer, destFolder string, dotfile
|
|||||||
// Add the call to the target executable
|
// Add the call to the target executable
|
||||||
fmt.Fprintf(wrapper, "%s \\\n", dotfileName)
|
fmt.Fprintf(wrapper, "%s \\\n", dotfileName)
|
||||||
|
|
||||||
// Insert additional lines in the `arg` list
|
|
||||||
for _, line := range e.argLines {
|
|
||||||
fmt.Fprintf(wrapper, "\t%s \\\n", r.apply(line))
|
|
||||||
}
|
|
||||||
// Add the script arguments "$@"
|
// Add the script arguments "$@"
|
||||||
fmt.Fprintln(wrapper, "\t\"$@\"")
|
fmt.Fprintln(wrapper, "\t\"$@\"")
|
||||||
|
|
||||||
|
@ -76,23 +76,6 @@ func TestWrapper(t *testing.T) {
|
|||||||
"",
|
"",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
e: executable{
|
|
||||||
argLines: []string{
|
|
||||||
"argline1",
|
|
||||||
"argline2",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
expectedLines: []string{
|
|
||||||
shebang,
|
|
||||||
"PATH=/dest/folder:$PATH \\",
|
|
||||||
"source.real \\",
|
|
||||||
"\targline1 \\",
|
|
||||||
"\targline2 \\",
|
|
||||||
"\t\"$@\"",
|
|
||||||
"",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tc := range testCases {
|
for i, tc := range testCases {
|
||||||
|
@ -20,6 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/config"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/tools/container/operator"
|
"github.com/NVIDIA/nvidia-container-toolkit/tools/container/operator"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -29,10 +30,10 @@ const (
|
|||||||
|
|
||||||
// installContainerRuntimes sets up the NVIDIA container runtimes, copying the executables
|
// installContainerRuntimes sets up the NVIDIA container runtimes, copying the executables
|
||||||
// and implementing the required wrapper
|
// and implementing the required wrapper
|
||||||
func installContainerRuntimes(toolkitDir string, driverRoot string) error {
|
func installContainerRuntimes(toolkitDir string, configFilePath string) error {
|
||||||
runtimes := operator.GetRuntimes()
|
runtimes := operator.GetRuntimes()
|
||||||
for _, runtime := range runtimes {
|
for _, runtime := range runtimes {
|
||||||
r := newNvidiaContainerRuntimeInstaller(runtime.Path)
|
r := newNvidiaContainerRuntimeInstaller(runtime.Path, configFilePath)
|
||||||
|
|
||||||
_, err := r.install(toolkitDir)
|
_, err := r.install(toolkitDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -46,17 +47,17 @@ func installContainerRuntimes(toolkitDir string, driverRoot string) error {
|
|||||||
// This installer will copy the specified source executable to the toolkit directory.
|
// This installer will copy the specified source executable to the toolkit directory.
|
||||||
// The executable is copied to a file with the same name as the source, but with a ".real" suffix and a wrapper is
|
// The executable is copied to a file with the same name as the source, but with a ".real" suffix and a wrapper is
|
||||||
// created to allow for the configuration of the runtime environment.
|
// created to allow for the configuration of the runtime environment.
|
||||||
func newNvidiaContainerRuntimeInstaller(source string) *executable {
|
func newNvidiaContainerRuntimeInstaller(source string, configFilePath string) *executable {
|
||||||
wrapperName := filepath.Base(source)
|
wrapperName := filepath.Base(source)
|
||||||
dotfileName := wrapperName + ".real"
|
dotfileName := wrapperName + ".real"
|
||||||
target := executableTarget{
|
target := executableTarget{
|
||||||
dotfileName: dotfileName,
|
dotfileName: dotfileName,
|
||||||
wrapperName: wrapperName,
|
wrapperName: wrapperName,
|
||||||
}
|
}
|
||||||
return newRuntimeInstaller(source, target, nil)
|
return newRuntimeInstaller(source, target, configFilePath, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func newRuntimeInstaller(source string, target executableTarget, env map[string]string) *executable {
|
func newRuntimeInstaller(source string, target executableTarget, configFilePath string, env map[string]string) *executable {
|
||||||
preLines := []string{
|
preLines := []string{
|
||||||
"",
|
"",
|
||||||
"cat /proc/modules | grep -e \"^nvidia \" >/dev/null 2>&1",
|
"cat /proc/modules | grep -e \"^nvidia \" >/dev/null 2>&1",
|
||||||
@ -68,7 +69,7 @@ func newRuntimeInstaller(source string, target executableTarget, env map[string]
|
|||||||
}
|
}
|
||||||
|
|
||||||
runtimeEnv := make(map[string]string)
|
runtimeEnv := make(map[string]string)
|
||||||
runtimeEnv["XDG_CONFIG_HOME"] = filepath.Join(destDirPattern, ".config")
|
runtimeEnv[config.FilePathOverrideEnvVar] = configFilePath
|
||||||
for k, v := range env {
|
for k, v := range env {
|
||||||
runtimeEnv[k] = v
|
runtimeEnv[k] = v
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestNvidiaContainerRuntimeInstallerWrapper(t *testing.T) {
|
func TestNvidiaContainerRuntimeInstallerWrapper(t *testing.T) {
|
||||||
r := newNvidiaContainerRuntimeInstaller(nvidiaContainerRuntimeSource)
|
r := newNvidiaContainerRuntimeInstaller(nvidiaContainerRuntimeSource, "/config/file/path/config.toml")
|
||||||
|
|
||||||
const shebang = "#! /bin/sh"
|
const shebang = "#! /bin/sh"
|
||||||
const destFolder = "/dest/folder"
|
const destFolder = "/dest/folder"
|
||||||
@ -45,8 +45,8 @@ func TestNvidiaContainerRuntimeInstallerWrapper(t *testing.T) {
|
|||||||
" exec runc \"$@\"",
|
" exec runc \"$@\"",
|
||||||
"fi",
|
"fi",
|
||||||
"",
|
"",
|
||||||
|
"NVCTK_CONFIG_FILE_PATH=/config/file/path/config.toml \\",
|
||||||
"PATH=/dest/folder:$PATH \\",
|
"PATH=/dest/folder:$PATH \\",
|
||||||
"XDG_CONFIG_HOME=/dest/folder/.config \\",
|
|
||||||
"source.real \\",
|
"source.real \\",
|
||||||
"\t\"$@\"",
|
"\t\"$@\"",
|
||||||
"",
|
"",
|
||||||
|
@ -297,10 +297,9 @@ func Install(cli *cli.Context, opts *Options, toolkitRoot string) error {
|
|||||||
log.Errorf("Ignoring error: %v", fmt.Errorf("error removing toolkit directory: %v", err))
|
log.Errorf("Ignoring error: %v", fmt.Errorf("error removing toolkit directory: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
toolkitConfigDir := filepath.Join(toolkitRoot, ".config", "nvidia-container-runtime")
|
toolkitConfigFilePath := filepath.Join(toolkitRoot, ".config", config.RelativeFilePath)
|
||||||
toolkitConfigPath := filepath.Join(toolkitConfigDir, configFilename)
|
|
||||||
|
|
||||||
err = createDirectories(toolkitRoot, toolkitConfigDir)
|
err = createDirectories(toolkitRoot, filepath.Dir(toolkitConfigFilePath))
|
||||||
if err != nil && !opts.ignoreErrors {
|
if err != nil && !opts.ignoreErrors {
|
||||||
return fmt.Errorf("could not create required directories: %v", err)
|
return fmt.Errorf("could not create required directories: %v", err)
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
@ -314,7 +313,7 @@ func Install(cli *cli.Context, opts *Options, toolkitRoot string) error {
|
|||||||
log.Errorf("Ignoring error: %v", fmt.Errorf("error installing NVIDIA container library: %v", err))
|
log.Errorf("Ignoring error: %v", fmt.Errorf("error installing NVIDIA container library: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
err = installContainerRuntimes(toolkitRoot, opts.DriverRoot)
|
err = installContainerRuntimes(toolkitRoot, toolkitConfigFilePath)
|
||||||
if err != nil && !opts.ignoreErrors {
|
if err != nil && !opts.ignoreErrors {
|
||||||
return fmt.Errorf("error installing NVIDIA container runtime: %v", err)
|
return fmt.Errorf("error installing NVIDIA container runtime: %v", err)
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
@ -328,7 +327,7 @@ func Install(cli *cli.Context, opts *Options, toolkitRoot string) error {
|
|||||||
log.Errorf("Ignoring error: %v", fmt.Errorf("error installing NVIDIA container CLI: %v", err))
|
log.Errorf("Ignoring error: %v", fmt.Errorf("error installing NVIDIA container CLI: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
nvidiaContainerRuntimeHookPath, err := installRuntimeHook(toolkitRoot, toolkitConfigPath)
|
nvidiaContainerRuntimeHookPath, err := installRuntimeHook(toolkitRoot, toolkitConfigFilePath)
|
||||||
if err != nil && !opts.ignoreErrors {
|
if err != nil && !opts.ignoreErrors {
|
||||||
return fmt.Errorf("error installing NVIDIA container runtime hook: %v", err)
|
return fmt.Errorf("error installing NVIDIA container runtime hook: %v", err)
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
@ -349,7 +348,7 @@ func Install(cli *cli.Context, opts *Options, toolkitRoot string) error {
|
|||||||
log.Errorf("Ignoring error: %v", fmt.Errorf("error installing NVIDIA Container CDI Hook CLI: %v", err))
|
log.Errorf("Ignoring error: %v", fmt.Errorf("error installing NVIDIA Container CDI Hook CLI: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
err = installToolkitConfig(cli, toolkitConfigPath, nvidiaContainerCliExecutable, nvidiaCTKPath, nvidiaContainerRuntimeHookPath, opts)
|
err = installToolkitConfig(cli, toolkitConfigFilePath, nvidiaContainerCliExecutable, nvidiaCTKPath, nvidiaContainerRuntimeHookPath, opts)
|
||||||
if err != nil && !opts.ignoreErrors {
|
if err != nil && !opts.ignoreErrors {
|
||||||
return fmt.Errorf("error installing NVIDIA container toolkit config: %v", err)
|
return fmt.Errorf("error installing NVIDIA container toolkit config: %v", err)
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
@ -423,8 +422,8 @@ func installLibrary(libName string, toolkitRoot string) error {
|
|||||||
|
|
||||||
// installToolkitConfig installs the config file for the NVIDIA container toolkit ensuring
|
// installToolkitConfig installs the config file for the NVIDIA container toolkit ensuring
|
||||||
// that the settings are updated to match the desired install and nvidia driver directories.
|
// that the settings are updated to match the desired install and nvidia driver directories.
|
||||||
func installToolkitConfig(c *cli.Context, toolkitConfigPath string, nvidiaContainerCliExecutablePath string, nvidiaCTKPath string, nvidaContainerRuntimeHookPath string, opts *Options) error {
|
func installToolkitConfig(c *cli.Context, toolkitConfigFilePath string, nvidiaContainerCliExecutablePath string, nvidiaCTKPath string, nvidaContainerRuntimeHookPath string, opts *Options) error {
|
||||||
log.Infof("Installing NVIDIA container toolkit config '%v'", toolkitConfigPath)
|
log.Infof("Installing NVIDIA container toolkit config '%v'", toolkitConfigFilePath)
|
||||||
|
|
||||||
cfg, err := config.New(
|
cfg, err := config.New(
|
||||||
config.WithConfigFile(nvidiaContainerToolkitConfigSource),
|
config.WithConfigFile(nvidiaContainerToolkitConfigSource),
|
||||||
@ -433,7 +432,7 @@ func installToolkitConfig(c *cli.Context, toolkitConfigPath string, nvidiaContai
|
|||||||
return fmt.Errorf("could not open source config file: %v", err)
|
return fmt.Errorf("could not open source config file: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
targetConfig, err := os.Create(toolkitConfigPath)
|
targetConfig, err := os.Create(toolkitConfigFilePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not create target config file: %v", err)
|
return fmt.Errorf("could not create target config file: %v", err)
|
||||||
}
|
}
|
||||||
@ -579,17 +578,15 @@ func installContainerCLI(toolkitRoot string) (string, error) {
|
|||||||
func installRuntimeHook(toolkitRoot string, configFilePath string) (string, error) {
|
func installRuntimeHook(toolkitRoot string, configFilePath string) (string, error) {
|
||||||
log.Infof("Installing NVIDIA container runtime hook from '%v'", nvidiaContainerRuntimeHookSource)
|
log.Infof("Installing NVIDIA container runtime hook from '%v'", nvidiaContainerRuntimeHookSource)
|
||||||
|
|
||||||
argLines := []string{
|
|
||||||
fmt.Sprintf("-config \"%s\"", configFilePath),
|
|
||||||
}
|
|
||||||
|
|
||||||
e := executable{
|
e := executable{
|
||||||
source: nvidiaContainerRuntimeHookSource,
|
source: nvidiaContainerRuntimeHookSource,
|
||||||
target: executableTarget{
|
target: executableTarget{
|
||||||
dotfileName: "nvidia-container-runtime-hook.real",
|
dotfileName: "nvidia-container-runtime-hook.real",
|
||||||
wrapperName: "nvidia-container-runtime-hook",
|
wrapperName: "nvidia-container-runtime-hook",
|
||||||
},
|
},
|
||||||
argLines: argLines,
|
env: map[string]string{
|
||||||
|
config.FilePathOverrideEnvVar: configFilePath,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
installedPath, err := e.install(toolkitRoot)
|
installedPath, err := e.install(toolkitRoot)
|
||||||
|
Loading…
Reference in New Issue
Block a user