github.com/LazyboyChen7/engine@v17.12.1-ce-rc2+incompatible/integration-cli/requirements_unix_test.go (about) 1 // +build !windows 2 3 package main 4 5 import ( 6 "bytes" 7 "io/ioutil" 8 "os/exec" 9 "strings" 10 11 "github.com/docker/docker/pkg/parsers/kernel" 12 "github.com/docker/docker/pkg/sysinfo" 13 ) 14 15 var ( 16 // SysInfo stores information about which features a kernel supports. 17 SysInfo *sysinfo.SysInfo 18 ) 19 20 func cpuCfsPeriod() bool { 21 return testEnv.DaemonInfo.CPUCfsPeriod 22 } 23 24 func cpuCfsQuota() bool { 25 return testEnv.DaemonInfo.CPUCfsQuota 26 } 27 28 func cpuShare() bool { 29 return testEnv.DaemonInfo.CPUShares 30 } 31 32 func oomControl() bool { 33 return testEnv.DaemonInfo.OomKillDisable 34 } 35 36 func pidsLimit() bool { 37 return SysInfo.PidsLimit 38 } 39 40 func kernelMemorySupport() bool { 41 return testEnv.DaemonInfo.KernelMemory 42 } 43 44 func memoryLimitSupport() bool { 45 return testEnv.DaemonInfo.MemoryLimit 46 } 47 48 func memoryReservationSupport() bool { 49 return SysInfo.MemoryReservation 50 } 51 52 func swapMemorySupport() bool { 53 return testEnv.DaemonInfo.SwapLimit 54 } 55 56 func memorySwappinessSupport() bool { 57 return SameHostDaemon() && SysInfo.MemorySwappiness 58 } 59 60 func blkioWeight() bool { 61 return SameHostDaemon() && SysInfo.BlkioWeight 62 } 63 64 func cgroupCpuset() bool { 65 return testEnv.DaemonInfo.CPUSet 66 } 67 68 func seccompEnabled() bool { 69 return supportsSeccomp && SysInfo.Seccomp 70 } 71 72 func bridgeNfIptables() bool { 73 return !SysInfo.BridgeNFCallIPTablesDisabled 74 } 75 76 func bridgeNfIP6tables() bool { 77 return !SysInfo.BridgeNFCallIP6TablesDisabled 78 } 79 80 func unprivilegedUsernsClone() bool { 81 content, err := ioutil.ReadFile("/proc/sys/kernel/unprivileged_userns_clone") 82 return err != nil || !strings.Contains(string(content), "0") 83 } 84 85 func ambientCapabilities() bool { 86 content, err := ioutil.ReadFile("/proc/self/status") 87 return err != nil || strings.Contains(string(content), "CapAmb:") 88 } 89 90 func overlayFSSupported() bool { 91 cmd := exec.Command(dockerBinary, "run", "--rm", "busybox", "/bin/sh", "-c", "cat /proc/filesystems") 92 out, err := cmd.CombinedOutput() 93 if err != nil { 94 return false 95 } 96 return bytes.Contains(out, []byte("overlay\n")) 97 } 98 99 func overlay2Supported() bool { 100 if !overlayFSSupported() { 101 return false 102 } 103 104 daemonV, err := kernel.ParseRelease(testEnv.DaemonInfo.KernelVersion) 105 if err != nil { 106 return false 107 } 108 requiredV := kernel.VersionInfo{Kernel: 4} 109 return kernel.CompareKernelVersion(*daemonV, requiredV) > -1 110 111 } 112 113 func init() { 114 if SameHostDaemon() { 115 SysInfo = sysinfo.New(true) 116 } 117 }