diff --git a/pkg/drivers/kic/kic.go b/pkg/drivers/kic/kic.go index 156079675d..79f8da9245 100644 --- a/pkg/drivers/kic/kic.go +++ b/pkg/drivers/kic/kic.go @@ -292,7 +292,7 @@ func (d *Driver) Kill() error { klog.Warningf("couldn't shutdown the container, will continue with kill anyways: %v", err) } - cr := command.NewExecRunner() // using exec runner for interacting with dameon. + cr := command.NewExecRunner(false) // using exec runner for interacting with dameon. if _, err := cr.RunCmd(oci.PrefixCmd(exec.Command(d.NodeConfig.OCIBinary, "kill", d.MachineName))); err != nil { return errors.Wrapf(err, "killing %q", d.MachineName) } diff --git a/pkg/drivers/none/none.go b/pkg/drivers/none/none.go index 6ad1dcca48..3fc4ab1508 100644 --- a/pkg/drivers/none/none.go +++ b/pkg/drivers/none/none.go @@ -61,7 +61,7 @@ type Config struct { // NewDriver returns a fully configured None driver func NewDriver(c Config) *Driver { - runner := command.NewExecRunner() + runner := command.NewExecRunner(true) runtime, err := cruntime.New(cruntime.Config{Type: c.ContainerRuntime, Runner: runner}) // Libraries shouldn't panic, but there is no way for drivers to return error :( if err != nil { diff --git a/pkg/minikube/command/exec_runner.go b/pkg/minikube/command/exec_runner.go index 6e5caf5708..862f183ede 100644 --- a/pkg/minikube/command/exec_runner.go +++ b/pkg/minikube/command/exec_runner.go @@ -38,18 +38,23 @@ import ( // // It implements the CommandRunner interface. type execRunner struct { + sudo bool } // NewExecRunner returns a kicRunner implementor of runner which runs cmds inside a container -func NewExecRunner() Runner { - return &execRunner{} +func NewExecRunner(sudo bool) Runner { + return &execRunner{sudo: sudo} } // RunCmd implements the Command Runner interface to run a exec.Cmd object -func (*execRunner) RunCmd(cmd *exec.Cmd) (*RunResult, error) { +func (e *execRunner) RunCmd(cmd *exec.Cmd) (*RunResult, error) { rr := &RunResult{Args: cmd.Args} klog.Infof("Run: %v", rr.Command()) + if e.sudo && runtime.GOOS != "linux" { + return nil, fmt.Errorf("sudo not supported on %s", runtime.GOOS) + } + var outb, errb io.Writer if cmd.Stdout == nil { var so bytes.Buffer @@ -107,8 +112,7 @@ func (e *execRunner) Copy(f assets.CopyableFile) error { return errors.Wrapf(err, "error converting permissions %s to integer", f.GetPermissions()) } - switch runtime.GOOS { - case "linux": + if e.sudo { // write to temp location ... tmpfile, err := ioutil.TempFile("", "minikube") if err != nil { @@ -129,25 +133,25 @@ func (e *execRunner) Copy(f assets.CopyableFile) error { // ... then fix file permission that should have been fine because of "cp -a" err = os.Chmod(dst, os.FileMode(perms)) return err - - default: - return writeFile(dst, f, os.FileMode(perms)) } - + return writeFile(dst, f, os.FileMode(perms)) } // Remove removes a file func (e *execRunner) Remove(f assets.CopyableFile) error { dst := filepath.Join(f.GetTargetDir(), f.GetTargetName()) klog.Infof("rm: %s", dst) - if err := os.Remove(dst); err != nil { - if !os.IsPermission(err) { - return err - } - _, err = e.RunCmd(exec.Command("sudo", "rm", "-f", dst)) - if err != nil { - return err + if e.sudo { + if err := os.Remove(dst); err != nil { + if !os.IsPermission(err) { + return err + } + _, err = e.RunCmd(exec.Command("sudo", "rm", "-f", dst)) + if err != nil { + return err + } } + return nil } - return nil + return os.Remove(dst) } diff --git a/pkg/minikube/machine/client.go b/pkg/minikube/machine/client.go index 6712fa17d8..bbc5397e22 100644 --- a/pkg/minikube/machine/client.go +++ b/pkg/minikube/machine/client.go @@ -154,7 +154,7 @@ func CommandRunner(h *host.Host) (command.Runner, error) { return &command.FakeCommandRunner{}, nil } if driver.BareMetal(h.Driver.DriverName()) { - return command.NewExecRunner(), nil + return command.NewExecRunner(true), nil } return command.NewSSHRunner(h.Driver), nil diff --git a/pkg/provision/provision.go b/pkg/provision/provision.go index 713f94ea4a..20fa0ddb65 100644 --- a/pkg/provision/provision.go +++ b/pkg/provision/provision.go @@ -147,7 +147,7 @@ func copyHostCerts(authOptions auth.Options) error { authOptions.ClientKeyPath: path.Join(authOptions.StorePath, "key.pem"), } - execRunner := command.NewExecRunner() + execRunner := command.NewExecRunner(false) for src, dst := range hostCerts { f, err := assets.NewFileAsset(src, path.Dir(dst), filepath.Base(dst), "0777") if err != nil {