github.com/jwhonce/docker@v0.6.7-0.20190327063223-da823cf3a5a3/rootless/specconv/specconv_linux.go (about) 1 package specconv 2 3 import ( 4 "io/ioutil" 5 "strconv" 6 7 "github.com/opencontainers/runtime-spec/specs-go" 8 ) 9 10 // ToRootless converts spec to be compatible with "rootless" runc. 11 // * Remove cgroups (will be supported in separate PR when delegation permission is configured) 12 // * Fix up OOMScoreAdj 13 func ToRootless(spec *specs.Spec) error { 14 return toRootless(spec, getCurrentOOMScoreAdj()) 15 } 16 17 func getCurrentOOMScoreAdj() int { 18 b, err := ioutil.ReadFile("/proc/self/oom_score_adj") 19 if err != nil { 20 return 0 21 } 22 i, err := strconv.Atoi(string(b)) 23 if err != nil { 24 return 0 25 } 26 return i 27 } 28 29 func toRootless(spec *specs.Spec, currentOOMScoreAdj int) error { 30 // Remove cgroup settings. 31 spec.Linux.Resources = nil 32 spec.Linux.CgroupsPath = "" 33 34 if spec.Process.OOMScoreAdj != nil && *spec.Process.OOMScoreAdj < currentOOMScoreAdj { 35 *spec.Process.OOMScoreAdj = currentOOMScoreAdj 36 } 37 return nil 38 }