Merge pull request #2960 from jterry75/shim_windows_lookpath
Add support for containerd shim activation's within the same folder not in PATH
This commit is contained in:
commit
f35c3527b2
@ -31,8 +31,6 @@ import (
|
|||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
const shimBinaryFormat = "containerd-shim-%s-%s"
|
|
||||||
|
|
||||||
var runtimePaths sync.Map
|
var runtimePaths sync.Map
|
||||||
|
|
||||||
// Command returns the shim command with the provided args and configuration
|
// Command returns the shim command with the provided args and configuration
|
||||||
@ -65,10 +63,22 @@ func Command(ctx context.Context, runtime, containerdAddress, path string, cmdAr
|
|||||||
if cmdPath, lerr = exec.LookPath(name); lerr != nil {
|
if cmdPath, lerr = exec.LookPath(name); lerr != nil {
|
||||||
if eerr, ok := lerr.(*exec.Error); ok {
|
if eerr, ok := lerr.(*exec.Error); ok {
|
||||||
if eerr.Err == exec.ErrNotFound {
|
if eerr.Err == exec.ErrNotFound {
|
||||||
|
// LookPath only finds current directory matches based on
|
||||||
|
// the callers current directory but the caller is not
|
||||||
|
// likely in the same directory as the containerd
|
||||||
|
// executables. Instead match the calling binaries path
|
||||||
|
// (containerd) and see if they are side by side. If so
|
||||||
|
// execute the shim found there.
|
||||||
|
testPath := filepath.Join(filepath.Dir(self), name)
|
||||||
|
if _, serr := os.Stat(testPath); serr == nil {
|
||||||
|
path = testPath
|
||||||
|
}
|
||||||
|
if path == "" {
|
||||||
return nil, errors.Wrapf(os.ErrNotExist, "runtime %q binary not installed %q", runtime, name)
|
return nil, errors.Wrapf(os.ErrNotExist, "runtime %q binary not installed %q", runtime, name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
cmdPath, err = filepath.Abs(cmdPath)
|
cmdPath, err = filepath.Abs(cmdPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -31,6 +31,8 @@ import (
|
|||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const shimBinaryFormat = "containerd-shim-%s-%s"
|
||||||
|
|
||||||
func getSysProcAttr() *syscall.SysProcAttr {
|
func getSysProcAttr() *syscall.SysProcAttr {
|
||||||
return &syscall.SysProcAttr{
|
return &syscall.SysProcAttr{
|
||||||
Setpgid: true,
|
Setpgid: true,
|
||||||
|
@ -29,6 +29,8 @@ import (
|
|||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const shimBinaryFormat = "containerd-shim-%s-%s.exe"
|
||||||
|
|
||||||
func getSysProcAttr() *syscall.SysProcAttr {
|
func getSysProcAttr() *syscall.SysProcAttr {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ golang.org/x/sync 450f422ab23cf9881c94e2db30cac0eb1b7cf80c
|
|||||||
github.com/BurntSushi/toml a368813c5e648fee92e5f6c30e3944ff9d5e8895
|
github.com/BurntSushi/toml a368813c5e648fee92e5f6c30e3944ff9d5e8895
|
||||||
github.com/grpc-ecosystem/go-grpc-prometheus 6b7015e65d366bf3f19b2b2a000a831940f0f7e0
|
github.com/grpc-ecosystem/go-grpc-prometheus 6b7015e65d366bf3f19b2b2a000a831940f0f7e0
|
||||||
github.com/Microsoft/go-winio v0.4.11
|
github.com/Microsoft/go-winio v0.4.11
|
||||||
github.com/Microsoft/hcsshim v0.8.4
|
github.com/Microsoft/hcsshim v0.8.5
|
||||||
google.golang.org/genproto d80a6e20e776b0b17a324d0ba1ab50a39c8e8944
|
google.golang.org/genproto d80a6e20e776b0b17a324d0ba1ab50a39c8e8944
|
||||||
golang.org/x/text 19e51611da83d6be54ddafce4a4af510cb3e9ea4
|
golang.org/x/text 19e51611da83d6be54ddafce4a4af510cb3e9ea4
|
||||||
github.com/containerd/ttrpc f02858b1457c5ca3aaec3a0803eb0d59f96e41d6
|
github.com/containerd/ttrpc f02858b1457c5ca3aaec3a0803eb0d59f96e41d6
|
||||||
|
13
vendor/github.com/Microsoft/hcsshim/pkg/go-runhcs/runhcs.go
generated
vendored
13
vendor/github.com/Microsoft/hcsshim/pkg/go-runhcs/runhcs.go
generated
vendored
@ -35,9 +35,22 @@ func getCommandPath() string {
|
|||||||
if pathi == nil {
|
if pathi == nil {
|
||||||
path, err := exec.LookPath(command)
|
path, err := exec.LookPath(command)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
// LookPath only finds current directory matches based on the
|
||||||
|
// callers current directory but the caller is not likely in the
|
||||||
|
// same directory as the containerd executables. Instead match the
|
||||||
|
// calling binaries path (a containerd shim usually) and see if they
|
||||||
|
// are side by side. If so execute the runhcs.exe found there.
|
||||||
|
if self, serr := os.Executable(); serr == nil {
|
||||||
|
testPath := filepath.Join(filepath.Dir(self), command)
|
||||||
|
if _, serr := os.Stat(testPath); serr == nil {
|
||||||
|
path = testPath
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if path == "" {
|
||||||
// Failed to look up command just use it directly and let the
|
// Failed to look up command just use it directly and let the
|
||||||
// Windows loader find it.
|
// Windows loader find it.
|
||||||
path = command
|
path = command
|
||||||
|
}
|
||||||
runhcsPath.Store(path)
|
runhcsPath.Store(path)
|
||||||
return path
|
return path
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user