3 // Package kernel provides helper function to get, parse and compare kernel
4 // versions for different platforms.
12 "github.com/mattn/go-shellwords"
15 // GetKernelVersion gets the current kernel version.
16 func GetKernelVersion() (*VersionInfo, error) {
17 release, err := getRelease()
22 return ParseRelease(release)
25 // getRelease uses `system_profiler SPSoftwareDataType` to get OSX kernel version
26 func getRelease() (string, error) {
27 cmd := exec.Command("system_profiler", "SPSoftwareDataType")
28 osName, err := cmd.Output()
34 data := strings.Split(string(osName), "\n")
35 for _, line := range data {
36 if strings.Contains(line, "Kernel Version") {
37 // It has the format like ' Kernel Version: Darwin 14.5.0'
38 content := strings.SplitN(line, ":", 2)
39 if len(content) != 2 {
40 return "", fmt.Errorf("Kernel Version is invalid")
43 prettyNames, err := shellwords.Parse(content[1])
45 return "", fmt.Errorf("Kernel Version is invalid: %s", err.Error())
48 if len(prettyNames) != 2 {
49 return "", fmt.Errorf("Kernel Version needs to be 'Darwin x.x.x' ")
51 release = prettyNames[1]