utils_linux.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package libcontainerd
  2. import (
  3. containerd "github.com/docker/containerd/api/grpc/types"
  4. "github.com/opencontainers/specs/specs-go"
  5. )
  6. func getRootIDs(s specs.Spec) (int, int, error) {
  7. var hasUserns bool
  8. for _, ns := range s.Linux.Namespaces {
  9. if ns.Type == specs.UserNamespace {
  10. hasUserns = true
  11. break
  12. }
  13. }
  14. if !hasUserns {
  15. return 0, 0, nil
  16. }
  17. uid := hostIDFromMap(0, s.Linux.UIDMappings)
  18. gid := hostIDFromMap(0, s.Linux.GIDMappings)
  19. return uid, gid, nil
  20. }
  21. func hostIDFromMap(id uint32, mp []specs.IDMapping) int {
  22. for _, m := range mp {
  23. if id >= m.ContainerID && id <= m.ContainerID+m.Size-1 {
  24. return int(m.HostID + id - m.ContainerID)
  25. }
  26. }
  27. return 0
  28. }
  29. func systemPid(ctr *containerd.Container) uint32 {
  30. var pid uint32
  31. for _, p := range ctr.Processes {
  32. if p.Pid == InitFriendlyName {
  33. pid = p.SystemPid
  34. }
  35. }
  36. return pid
  37. }
  38. func convertRlimits(sr []specs.Rlimit) (cr []*containerd.Rlimit) {
  39. for _, r := range sr {
  40. cr = append(cr, &containerd.Rlimit{
  41. Type: r.Type,
  42. Hard: r.Hard,
  43. Soft: r.Soft,
  44. })
  45. }
  46. return
  47. }