diff --git a/cmd/admin-container/main.go b/cmd/admin-container/main.go index 5fa083815f3c15ac95b0a8ef3361d89427461b0f..c260903599893f13d1c8a138267e6ab13b26b375 100644 --- a/cmd/admin-container/main.go +++ b/cmd/admin-container/main.go @@ -23,17 +23,15 @@ import ( ) const ( - bashPath = "/usr/bin/bash" - usrBin = "/usr/bin" - usrSbin = "/usr/sbin" - localBin = "/usr/local/bin" - localSbin = "/usr/local/sbin" - usrLib = "/usr/lib" - usrLib64 = "/usr/lib64" - lib = "/lib" - lib64 = "/lib64" - envPathPrefix = "PATH=$PATH:" - envLdLibrarPathPrefix = "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:" + bashPath = "/usr/bin/bash" + usrBin = "/usr/bin" + usrSbin = "/usr/sbin" + localBin = "/usr/local/bin" + localSbin = "/usr/local/sbin" + usrLib = "/usr/lib" + usrLib64 = "/usr/lib64" + lib = "/lib" + lib64 = "/lib64" ) func main() { @@ -43,12 +41,28 @@ func main() { logrus.Error("please use root to run hostshell") } + ldLibraryPath := os.Getenv("LD_LIBRARY_PATH") + if ldLibraryPath == "" { + err := os.Setenv("LD_LIBRARY_PATH", "/usr/lib:/lib:/lib64:/usr/lib64") + if err != nil { + return + } + } + getPath := os.Getenv("PATH") + if getPath == "" { + err := os.Setenv("PATH", "/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin") + if err != nil { + return + } + } + envPathPrefix := "PATH=$PATH:" + envLdLibrarPathPrefix := "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:" PPID := os.Getppid() rootFsPath := "/proc/" + strconv.Itoa(PPID) + "/root" path := concatenateEnvPath(rootFsPath, envPathPrefix, []string{usrBin, usrSbin, localBin, localSbin}) libPath := concatenateEnvPath(rootFsPath, envLdLibrarPathPrefix, []string{usrLib, usrLib64, lib, lib64}) if err := syscall.Exec("/usr/bin/nsenter", []string{"nsenter", "-t", "1", "-a", - "env", "-i", path, libPath, rootFsPath + bashPath}, os.Environ()); err != nil { + "-i", "env", path, libPath, rootFsPath + bashPath}, os.Environ()); err != nil { logrus.Error("nsenter excute error", err) } }