From c23d7367a7e55548dd01b916368a052b072ee0bb Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Wed, 15 Jan 2014 14:36:13 -0800 Subject: [PATCH] Rename Capabilities in sysinfo and move it to its own subpackage Docker-DCO-1.1-Signed-off-by: Guillaume J. Charmes (github: creack) Docker-DCO-1.1-Signed-off-by: Guillaume J. Charmes (github: crosbymichael) --- sysinfo/sysinfo.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 sysinfo/sysinfo.go diff --git a/sysinfo/sysinfo.go b/sysinfo/sysinfo.go new file mode 100644 index 0000000..884fcbd --- /dev/null +++ b/sysinfo/sysinfo.go @@ -0,0 +1,55 @@ +package sysinfo + +import ( + "github.com/dotcloud/docker/cgroups" + "github.com/dotcloud/docker/utils" + "io/ioutil" + "log" + "os" + "path" +) + +type SysInfo struct { + MemoryLimit bool + SwapLimit bool + IPv4ForwardingDisabled bool + AppArmor bool +} + +func New(quiet bool) *SysInfo { + sysInfo := &SysInfo{} + if cgroupMemoryMountpoint, err := cgroups.FindCgroupMountpoint("memory"); err != nil { + if !quiet { + log.Printf("WARNING: %s\n", err) + } + } else { + _, err1 := ioutil.ReadFile(path.Join(cgroupMemoryMountpoint, "memory.limit_in_bytes")) + _, err2 := ioutil.ReadFile(path.Join(cgroupMemoryMountpoint, "memory.soft_limit_in_bytes")) + sysInfo.MemoryLimit = err1 == nil && err2 == nil + if !sysInfo.MemoryLimit && !quiet { + log.Printf("WARNING: Your kernel does not support cgroup memory limit.") + } + + _, err = ioutil.ReadFile(path.Join(cgroupMemoryMountpoint, "memory.memsw.limit_in_bytes")) + sysInfo.SwapLimit = err == nil + if !sysInfo.SwapLimit && !quiet { + log.Printf("WARNING: Your kernel does not support cgroup swap limit.") + } + } + + content, err3 := ioutil.ReadFile("/proc/sys/net/ipv4/ip_forward") + sysInfo.IPv4ForwardingDisabled = err3 != nil || len(content) == 0 || content[0] != '1' + if sysInfo.IPv4ForwardingDisabled && !quiet { + log.Printf("WARNING: IPv4 forwarding is disabled.") + } + + // Check if AppArmor seems to be enabled on this system. + if _, err := os.Stat("/sys/kernel/security/apparmor"); os.IsNotExist(err) { + utils.Debugf("/sys/kernel/security/apparmor not found; assuming AppArmor is not enabled.") + sysInfo.AppArmor = false + } else { + utils.Debugf("/sys/kernel/security/apparmor found; assuming AppArmor is enabled.") + sysInfo.AppArmor = true + } + return sysInfo +}