Eliminate transient container deps from wslkerninst

Resolves Win Installer CI issues where dep processing variance can
pull in gpgme, which doesn't compile on Windows without a
specialized msys2 setup.

Signed-off-by: Jason T. Greene <jason.greene@redhat.com>
This commit is contained in:
Jason T. Greene
2023-04-23 11:51:48 -05:00
parent c08859bd74
commit fb3b92b969
4 changed files with 61 additions and 47 deletions

View File

@ -11,7 +11,7 @@ import (
"time"
"unsafe"
"github.com/containers/podman/v4/pkg/machine/wsl"
"github.com/containers/podman/v4/pkg/machine/wsl/wutil"
"github.com/sirupsen/logrus"
"golang.org/x/sys/windows/svc/eventlog"
)
@ -49,7 +49,7 @@ func installWslKernel() error {
)
backoff := 500 * time.Millisecond
for i := 1; i < 6; i++ {
err = wsl.SilentExec("wsl", "--update")
err = wutil.SilentExec("wsl", "--update")
if err == nil {
break
}
@ -87,7 +87,7 @@ func warn(title string, caption string) int {
func main() {
args := os.Args
setupLogging(path.Base(args[0]))
if wsl.IsWSLInstalled() {
if wutil.IsWSLInstalled() {
// nothing to do
logrus.Info("WSL Kernel already installed")
return

View File

@ -20,6 +20,7 @@ import (
"github.com/containers/common/pkg/config"
"github.com/containers/podman/v4/pkg/machine"
"github.com/containers/podman/v4/pkg/machine/wsl/wutil"
"github.com/containers/podman/v4/utils"
"github.com/containers/storage/pkg/homedir"
"github.com/containers/storage/pkg/ioutils"
@ -695,7 +696,7 @@ func installScripts(dist string) error {
}
func checkAndInstallWSL(opts machine.InitOptions) (bool, error) {
if IsWSLInstalled() {
if wutil.IsWSLInstalled() {
return true, nil
}
@ -1143,35 +1144,8 @@ func getWinProxyStateDir(v *MachineVM) (string, error) {
return stateDir, nil
}
func IsWSLInstalled() bool {
cmd := SilentExecCmd("wsl", "--status")
out, err := cmd.StdoutPipe()
cmd.Stderr = nil
if err != nil {
return false
}
if err = cmd.Start(); err != nil {
return false
}
scanner := bufio.NewScanner(transform.NewReader(out, unicode.UTF16(unicode.LittleEndian, unicode.UseBOM).NewDecoder()))
result := true
for scanner.Scan() {
line := scanner.Text()
// Windows 11 does not set an error exit code when a kernel is not avail
if strings.Contains(line, "kernel file is not found") {
result = false
break
}
}
if err := cmd.Wait(); !result || err != nil {
return false
}
return true
}
func IsWSLFeatureEnabled() bool {
return SilentExec("wsl", "--set-default-version", "2") == nil
return wutil.SilentExec("wsl", "--set-default-version", "2") == nil
}
func isWSLRunning(dist string) (bool, error) {

View File

@ -8,7 +8,6 @@ import (
"errors"
"fmt"
"os"
"os/exec"
"path/filepath"
"strings"
"syscall"
@ -345,17 +344,3 @@ func sendQuit(tid uint32) {
postMessage := user32.NewProc("PostThreadMessageW")
postMessage.Call(uintptr(tid), WM_QUIT, 0, 0)
}
func SilentExec(command string, args ...string) error {
cmd := exec.Command(command, args...)
cmd.SysProcAttr = &syscall.SysProcAttr{CreationFlags: 0x08000000}
cmd.Stdout = nil
cmd.Stderr = nil
return cmd.Run()
}
func SilentExecCmd(command string, args ...string) *exec.Cmd {
cmd := exec.Command(command, args...)
cmd.SysProcAttr = &syscall.SysProcAttr{CreationFlags: 0x08000000}
return cmd
}

View File

@ -0,0 +1,55 @@
//go:build windows
// +build windows
package wutil
import (
"bufio"
"os/exec"
"strings"
"syscall"
"golang.org/x/text/encoding/unicode"
"golang.org/x/text/transform"
)
func SilentExec(command string, args ...string) error {
cmd := exec.Command(command, args...)
cmd.SysProcAttr = &syscall.SysProcAttr{CreationFlags: 0x08000000}
cmd.Stdout = nil
cmd.Stderr = nil
return cmd.Run()
}
func SilentExecCmd(command string, args ...string) *exec.Cmd {
cmd := exec.Command(command, args...)
cmd.SysProcAttr = &syscall.SysProcAttr{CreationFlags: 0x08000000}
return cmd
}
func IsWSLInstalled() bool {
cmd := SilentExecCmd("wsl", "--status")
out, err := cmd.StdoutPipe()
cmd.Stderr = nil
if err != nil {
return false
}
if err = cmd.Start(); err != nil {
return false
}
scanner := bufio.NewScanner(transform.NewReader(out, unicode.UTF16(unicode.LittleEndian, unicode.UseBOM).NewDecoder()))
result := true
for scanner.Scan() {
line := scanner.Text()
// Windows 11 does not set an error exit code when a kernel is not avail
if strings.Contains(line, "kernel file is not found") {
result = false
break
}
}
if err := cmd.Wait(); !result || err != nil {
return false
}
return true
}