From f5eacdf2a5c63aa28d376291e2f2059169b141ee Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Fri, 3 Feb 2023 10:33:03 -0800 Subject: [PATCH 1/2] qemu on windows --- pkg/drivers/qemu/qemu.go | 57 +++++++++++++++-------- pkg/minikube/registry/drvs/qemu2/qemu2.go | 3 ++ 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/pkg/drivers/qemu/qemu.go b/pkg/drivers/qemu/qemu.go index 21d0bcfb1a0c..f2e8321b6f0c 100644 --- a/pkg/drivers/qemu/qemu.go +++ b/pkg/drivers/qemu/qemu.go @@ -21,6 +21,7 @@ import ( "bytes" "encoding/json" "fmt" + "io" "math/rand" "net" "os" @@ -169,21 +170,23 @@ func checkPid(pid int) error { } func (d *Driver) GetState() (state.State, error) { - if _, err := os.Stat(d.pidfilePath()); err != nil { - return state.Stopped, nil - } - p, err := os.ReadFile(d.pidfilePath()) - if err != nil { - return state.Error, err - } - pid, err := strconv.Atoi(strings.TrimSpace(string(p))) - if err != nil { - return state.Error, err - } - if err := checkPid(pid); err != nil { - // No pid, remove pidfile - os.Remove(d.pidfilePath()) - return state.Stopped, nil + if runtime.GOOS != "windows" { + if _, err := os.Stat(d.pidfilePath()); err != nil { + return state.Stopped, nil + } + p, err := os.ReadFile(d.pidfilePath()) + if err != nil { + return state.Error, err + } + pid, err := strconv.Atoi(strings.TrimSpace(string(p))) + if err != nil { + return state.Error, err + } + if err := checkPid(pid); err != nil { + // No pid, remove pidfile + os.Remove(d.pidfilePath()) + return state.Stopped, nil + } } ret, err := d.RunQMPCommand("query-status") if err != nil { @@ -392,6 +395,10 @@ func (d *Driver) Start() error { // On Linux, enable the Kernel Virtual Machine accelerator. startCmd = append(startCmd, "-accel", "kvm") + //} else if runtime.GOOS == "windows" { + // // On Windows, enable the WHPX (Hyper-V) accelerator. + // startCmd = append(startCmd, + // "-accel", "whpx") } startCmd = append(startCmd, @@ -424,8 +431,10 @@ func (d *Driver) Start() error { return fmt.Errorf("unknown network: %s", d.Network) } - startCmd = append(startCmd, - "-daemonize") + if runtime.GOOS != "windows" { + startCmd = append(startCmd, + "-daemonize") + } if d.CloudConfigRoot != "" { startCmd = append(startCmd, @@ -452,7 +461,11 @@ func (d *Driver) Start() error { startCmd = append([]string{d.SocketVMNetPath, d.Program}, startCmd...) } - if stdout, stderr, err := cmdOutErr(startProgram, startCmd...); err != nil { + startFunc := cmdOutErr + if runtime.GOOS == "windows" { + startFunc = cmdStart + } + if stdout, stderr, err := startFunc(startProgram, startCmd...); err != nil { fmt.Printf("OUTPUT: %s\n", stdout) fmt.Printf("ERROR: %s\n", stderr) return err @@ -521,6 +534,12 @@ func cmdOutErr(cmdStr string, args ...string) (string, string, error) { return stdoutStr, stderrStr, err } +func cmdStart(cmdStr string, args ...string) (string, string, error) { + cmd := exec.Command(cmdStr, args...) + log.Debugf("executing: %s %s", cmdStr, strings.Join(args, " ")) + return "", "", cmd.Start() +} + func (d *Driver) Stop() error { if _, err := d.RunQMPCommand("system_powerdown"); err != nil { return err @@ -793,7 +812,7 @@ func WaitForTCPWithDelay(addr string, duration time.Duration) error { continue } defer conn.Close() - if _, err := conn.Read(make([]byte, 1)); err != nil { + if _, err := conn.Read(make([]byte, 1)); err != nil && err != io.EOF { time.Sleep(duration) continue } diff --git a/pkg/minikube/registry/drvs/qemu2/qemu2.go b/pkg/minikube/registry/drvs/qemu2/qemu2.go index f2e0e0c106f7..e4997a99aad4 100644 --- a/pkg/minikube/registry/drvs/qemu2/qemu2.go +++ b/pkg/minikube/registry/drvs/qemu2/qemu2.go @@ -70,6 +70,9 @@ func qemuFirmwarePath(customPath string) (string, error) { if customPath != "" { return customPath, nil } + if runtime.GOOS == "windows" { + return "C:\\Program Files\\qemu\\share\\edk2-x86_64-code.fd", nil + } arch := runtime.GOARCH // For macOS, find the correct brew installation path for qemu firmware if runtime.GOOS == "darwin" { From 62b5c51a9674a14eb342b0b1f8fcf40b8eccb6d7 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Fri, 3 Feb 2023 15:04:39 -0800 Subject: [PATCH 2/2] fix linting --- pkg/drivers/qemu/qemu.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pkg/drivers/qemu/qemu.go b/pkg/drivers/qemu/qemu.go index f2e8321b6f0c..29a65d7a167c 100644 --- a/pkg/drivers/qemu/qemu.go +++ b/pkg/drivers/qemu/qemu.go @@ -395,10 +395,6 @@ func (d *Driver) Start() error { // On Linux, enable the Kernel Virtual Machine accelerator. startCmd = append(startCmd, "-accel", "kvm") - //} else if runtime.GOOS == "windows" { - // // On Windows, enable the WHPX (Hyper-V) accelerator. - // startCmd = append(startCmd, - // "-accel", "whpx") } startCmd = append(startCmd,