1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- // +build darwin
- // Package kernel provides helper function to get, parse and compare kernel
- // versions for different platforms.
- package kernel
- import (
- "fmt"
- "os/exec"
- "strings"
- "github.com/mattn/go-shellwords"
- )
- // GetKernelVersion gets the current kernel version.
- func GetKernelVersion() (*VersionInfo, error) {
- release, err := getRelease()
- if err != nil {
- return nil, err
- }
- return ParseRelease(release)
- }
- // getRelease uses `system_profiler SPSoftwareDataType` to get OSX kernel version
- func getRelease() (string, error) {
- cmd := exec.Command("system_profiler", "SPSoftwareDataType")
- osName, err := cmd.Output()
- if err != nil {
- return "", err
- }
- var release string
- data := strings.Split(string(osName), "\n")
- for _, line := range data {
- if strings.Contains(line, "Kernel Version") {
- // It has the format like ' Kernel Version: Darwin 14.5.0'
- content := strings.SplitN(line, ":", 2)
- if len(content) != 2 {
- return "", fmt.Errorf("Kernel Version is invalid")
- }
- prettyNames, err := shellwords.Parse(content[1])
- if err != nil {
- return "", fmt.Errorf("Kernel Version is invalid: %s", err.Error())
- }
- if len(prettyNames) != 2 {
- return "", fmt.Errorf("Kernel Version needs to be 'Darwin x.x.x' ")
- }
- release = prettyNames[1]
- }
- }
- return release, nil
- }
|