diff --git a/pkg/drivers/vfkit/driver_darwin.go b/pkg/drivers/vfkit/driver_darwin.go index f123d6b077..d57a21982c 100644 --- a/pkg/drivers/vfkit/driver_darwin.go +++ b/pkg/drivers/vfkit/driver_darwin.go @@ -23,14 +23,12 @@ import ( "os/exec" "strconv" "strings" - "sync" "syscall" "time" - "github.com/Masterminds/semver/v3" "github.com/crc-org/crc/v2/pkg/crc/constants" - "github.com/crc-org/crc/v2/pkg/crc/logging" crcos "github.com/crc-org/crc/v2/pkg/os" + "github.com/crc-org/crc/v2/pkg/os/darwin" "github.com/crc-org/machine/libmachine/drivers" "github.com/crc-org/machine/libmachine/state" "github.com/crc-org/vfkit/pkg/config" @@ -488,36 +486,10 @@ func (d *Driver) sendSignal(s syscall.Signal) error { return proc.SendSignal(s) } -var ( - once sync.Once - macCurrentVersion string - errGettingVersion error -) - func (d *Driver) supportsVirtiofs() bool { - supportsVirtioFS, err := macosAtLeast("12.0.0") + supportsVirtioFS, err := darwin.AtLeast("12.0.0") if err != nil { log.Debugf("Not able to compare version: %v", err) } return supportsVirtioFS } - -func macosAtLeast(targetVersion string) (bool, error) { - once.Do(func() { - macCurrentVersion, errGettingVersion = syscall.Sysctl("kern.osproductversion") - logging.Debugf("kern.osproductversion is: %s", macCurrentVersion) - }) - if errGettingVersion != nil { - return false, errGettingVersion - } - - cVersion, err := semver.NewVersion(macCurrentVersion) - if err != nil { - return false, errors.Wrap(err, fmt.Sprintf("cannot parse %s", macCurrentVersion)) - } - targetVersionStr, err := semver.NewVersion(targetVersion) - if err != nil { - return false, errors.Wrap(err, fmt.Sprintf("cannot parse %s", targetVersion)) - } - return cVersion.Equal(targetVersionStr) || cVersion.GreaterThan(targetVersionStr), nil -} diff --git a/pkg/os/darwin/release_info.go b/pkg/os/darwin/release_info.go new file mode 100644 index 0000000000..4f71657caa --- /dev/null +++ b/pkg/os/darwin/release_info.go @@ -0,0 +1,39 @@ +//go:build darwin + +package darwin + +import ( + "fmt" + "sync" + "syscall" + + "github.com/Masterminds/semver/v3" + "github.com/crc-org/crc/v2/pkg/crc/logging" + "github.com/pkg/errors" +) + +var ( + once sync.Once + macCurrentVersion string + errGettingVersion error +) + +func AtLeast(targetVersion string) (bool, error) { + once.Do(func() { + macCurrentVersion, errGettingVersion = syscall.Sysctl("kern.osproductversion") + logging.Debugf("kern.osproductversion is: %s", macCurrentVersion) + }) + if errGettingVersion != nil { + return false, errGettingVersion + } + + cVersion, err := semver.NewVersion(macCurrentVersion) + if err != nil { + return false, errors.Wrap(err, fmt.Sprintf("cannot parse %s", macCurrentVersion)) + } + targetVersionStr, err := semver.NewVersion(targetVersion) + if err != nil { + return false, errors.Wrap(err, fmt.Sprintf("cannot parse %s", targetVersion)) + } + return cVersion.Equal(targetVersionStr) || cVersion.GreaterThan(targetVersionStr), nil +}