Просмотр исходного кода

Merge pull request #42472 from thaJeztah/improve_rootless_option

daemon: improve handling of ROOTLESSKIT_PARENT_EUID
Tianon Gravi 4 лет назад
Родитель
Сommit
a060328874
2 измененных файлов с 9 добавлено и 7 удалено
  1. 4 6
      daemon/daemon_unix.go
  2. 5 1
      daemon/oci_linux.go

+ 4 - 6
daemon/daemon_unix.go

@@ -1719,15 +1719,13 @@ func (daemon *Daemon) setupSeccompProfile() error {
 
 
 // RawSysInfo returns *sysinfo.SysInfo .
 // RawSysInfo returns *sysinfo.SysInfo .
 func (daemon *Daemon) RawSysInfo(quiet bool) *sysinfo.SysInfo {
 func (daemon *Daemon) RawSysInfo(quiet bool) *sysinfo.SysInfo {
-	var opts []sysinfo.Opt
+	var siOpts []sysinfo.Opt
 	if daemon.getCgroupDriver() == cgroupSystemdDriver {
 	if daemon.getCgroupDriver() == cgroupSystemdDriver {
-		rootlesskitParentEUID := os.Getenv("ROOTLESSKIT_PARENT_EUID")
-		if rootlesskitParentEUID != "" {
-			groupPath := fmt.Sprintf("/user.slice/user-%s.slice", rootlesskitParentEUID)
-			opts = append(opts, sysinfo.WithCgroup2GroupPath(groupPath))
+		if euid := os.Getenv("ROOTLESSKIT_PARENT_EUID"); euid != "" {
+			siOpts = append(siOpts, sysinfo.WithCgroup2GroupPath("/user.slice/user-"+euid+".slice"))
 		}
 		}
 	}
 	}
-	return sysinfo.New(quiet, opts...)
+	return sysinfo.New(quiet, siOpts...)
 }
 }
 
 
 func recursiveUnmount(target string) error {
 func recursiveUnmount(target string) error {

+ 5 - 1
daemon/oci_linux.go

@@ -97,7 +97,11 @@ func WithRootless(daemon *Daemon) coci.SpecOpts {
 			if rootlesskitParentEUID == "" {
 			if rootlesskitParentEUID == "" {
 				return errors.New("$ROOTLESSKIT_PARENT_EUID is not set (requires RootlessKit v0.8.0)")
 				return errors.New("$ROOTLESSKIT_PARENT_EUID is not set (requires RootlessKit v0.8.0)")
 			}
 			}
-			controllersPath := fmt.Sprintf("/sys/fs/cgroup/user.slice/user-%s.slice/cgroup.controllers", rootlesskitParentEUID)
+			euid, err := strconv.Atoi(rootlesskitParentEUID)
+			if err != nil {
+				return errors.Wrap(err, "invalid $ROOTLESSKIT_PARENT_EUID: must be a numeric value")
+			}
+			controllersPath := fmt.Sprintf("/sys/fs/cgroup/user.slice/user-%d.slice/cgroup.controllers", euid)
 			controllersFile, err := ioutil.ReadFile(controllersPath)
 			controllersFile, err := ioutil.ReadFile(controllersPath)
 			if err != nil {
 			if err != nil {
 				return err
 				return err