github.com/OpenFlowLabs/moby@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  }