github.com/containers/podman/v4@v4.9.4/pkg/machine/applehv/claim.go (about) 1 //go:build darwin 2 // +build darwin 3 4 package applehv 5 6 import ( 7 "fmt" 8 "io" 9 "io/fs" 10 "net" 11 "os" 12 "os/user" 13 "path/filepath" 14 "time" 15 ) 16 17 // TODO the following functions were taken from pkg/qemu/claim_darwin.go and 18 // should be refactored. I'm thinking even something in pkg/machine/ 19 20 func dockerClaimSupported() bool { 21 return true 22 } 23 24 func dockerClaimHelperInstalled() bool { 25 u, err := user.Current() 26 if err != nil { 27 return false 28 } 29 30 labelName := fmt.Sprintf("com.github.containers.podman.helper-%s", u.Username) 31 fileName := filepath.Join("/Library", "LaunchDaemons", labelName+".plist") 32 info, err := os.Stat(fileName) 33 return err == nil && info.Mode().IsRegular() 34 } 35 36 func claimDockerSock() bool { 37 u, err := user.Current() 38 if err != nil { 39 return false 40 } 41 42 helperSock := fmt.Sprintf("/var/run/podman-helper-%s.socket", u.Username) 43 con, err := net.DialTimeout("unix", helperSock, time.Second*5) 44 if err != nil { 45 return false 46 } 47 _ = con.SetWriteDeadline(time.Now().Add(time.Second * 5)) 48 _, err = fmt.Fprintln(con, "GO") 49 if err != nil { 50 return false 51 } 52 _ = con.SetReadDeadline(time.Now().Add(time.Second * 5)) 53 read, err := io.ReadAll(con) 54 55 return err == nil && string(read) == "OK" 56 } 57 58 func findClaimHelper() string { 59 exe, err := os.Executable() 60 if err != nil { 61 return "" 62 } 63 64 exe, err = filepath.EvalSymlinks(exe) 65 if err != nil { 66 return "" 67 } 68 69 return filepath.Join(filepath.Dir(exe), "podman-mac-helper") 70 } 71 72 func checkSockInUse(sock string) bool { 73 if info, err := os.Stat(sock); err == nil && info.Mode()&fs.ModeSocket == fs.ModeSocket { 74 _, err = net.DialTimeout("unix", dockerSock, dockerConnectTimeout) 75 return err == nil 76 } 77 78 return false 79 } 80 81 func alreadyLinked(target string, link string) bool { 82 read, err := os.Readlink(link) 83 return err == nil && read == target 84 }