mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	make pkg/parsers support darwin and solaris
Signed-off-by: allencloud <allen.sun@daocloud.io>
This commit is contained in:
		
							parent
							
								
									287b0a6348
								
							
						
					
					
						commit
						a7f551359a
					
				
					 5 changed files with 103 additions and 30 deletions
				
			
		| 
						 | 
				
			
			@ -5,7 +5,6 @@
 | 
			
		|||
package kernel
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -46,31 +45,6 @@ func CompareKernelVersion(a, b VersionInfo) int {
 | 
			
		|||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetKernelVersion gets the current kernel version.
 | 
			
		||||
func GetKernelVersion() (*VersionInfo, error) {
 | 
			
		||||
	var (
 | 
			
		||||
		err error
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	uts, err := uname()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	release := make([]byte, len(uts.Release))
 | 
			
		||||
 | 
			
		||||
	i := 0
 | 
			
		||||
	for _, c := range uts.Release {
 | 
			
		||||
		release[i] = byte(c)
 | 
			
		||||
		i++
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Remove the \x00 from the release for Atoi to parse correctly
 | 
			
		||||
	release = release[:bytes.IndexByte(release, 0)]
 | 
			
		||||
 | 
			
		||||
	return ParseRelease(string(release))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseRelease parses a string and creates a VersionInfo based on it.
 | 
			
		||||
func ParseRelease(release string) (*VersionInfo, error) {
 | 
			
		||||
	var (
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										56
									
								
								pkg/parsers/kernel/kernel_darwin.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								pkg/parsers/kernel/kernel_darwin.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
// +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
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										34
									
								
								pkg/parsers/kernel/kernel_unix.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								pkg/parsers/kernel/kernel_unix.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
// +build linux freebsd solaris
 | 
			
		||||
 | 
			
		||||
// Package kernel provides helper function to get, parse and compare kernel
 | 
			
		||||
// versions for different platforms.
 | 
			
		||||
package kernel
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// GetKernelVersion gets the current kernel version.
 | 
			
		||||
func GetKernelVersion() (*VersionInfo, error) {
 | 
			
		||||
	var (
 | 
			
		||||
		err error
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	uts, err := uname()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	release := make([]byte, len(uts.Release))
 | 
			
		||||
 | 
			
		||||
	i := 0
 | 
			
		||||
	for _, c := range uts.Release {
 | 
			
		||||
		release[i] = byte(c)
 | 
			
		||||
		i++
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Remove the \x00 from the release for Atoi to parse correctly
 | 
			
		||||
	release = release[:bytes.IndexByte(release, 0)]
 | 
			
		||||
 | 
			
		||||
	return ParseRelease(string(release))
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,5 @@
 | 
			
		|||
// +build windows
 | 
			
		||||
 | 
			
		||||
package kernel
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,18 +1,25 @@
 | 
			
		|||
// +build freebsd darwin
 | 
			
		||||
 | 
			
		||||
package operatingsystem
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// GetOperatingSystem gets the name of the current operating system.
 | 
			
		||||
func GetOperatingSystem() (string, error) {
 | 
			
		||||
	// TODO: Implement OS detection
 | 
			
		||||
	return "", errors.New("Cannot detect OS version")
 | 
			
		||||
	cmd := exec.Command("uname", "-s")
 | 
			
		||||
	osName, err := cmd.Output()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	return string(osName), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsContainerized returns true if we are running inside a container.
 | 
			
		||||
// No-op on FreeBSD, always returns false.
 | 
			
		||||
// No-op on FreeBSD and Darwin, always returns false.
 | 
			
		||||
func IsContainerized() (bool, error) {
 | 
			
		||||
	// TODO: Implement jail detection
 | 
			
		||||
	// TODO: Implement jail detection for freeBSD
 | 
			
		||||
	return false, errors.New("Cannot detect if we are in container")
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue