mirror of
https://github.com/containers/podman.git
synced 2025-10-17 03:04:21 +08:00
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:
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
}
|
||||
|
55
pkg/machine/wsl/wutil/wutil.go
Normal file
55
pkg/machine/wsl/wutil/wutil.go
Normal 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
|
||||
}
|
Reference in New Issue
Block a user