(rootPath, serviceType string)
| 32 | } |
| 33 | |
| 34 | func runcInit(rootPath, serviceType string) int { |
| 35 | // do nothing if the path does not exist |
| 36 | if _, err := os.Stat(rootPath); err != nil && os.IsNotExist(err) { |
| 37 | return 0 |
| 38 | } |
| 39 | |
| 40 | // get files; note ReadDir already sorts them |
| 41 | files, err := os.ReadDir(rootPath) |
| 42 | if err != nil { |
| 43 | log.Fatalf("Cannot read files in %s: %v", rootPath, err) |
| 44 | } |
| 45 | |
| 46 | tmpdir, err := os.MkdirTemp("", filepath.Base(rootPath)) |
| 47 | if err != nil { |
| 48 | log.Fatalf("Cannot create temporary directory: %v", err) |
| 49 | } |
| 50 | |
| 51 | // need to set ourselves as a child subreaper or we cannot wait for runc as reparents to init |
| 52 | if err := setSubreaper(1); err != nil { |
| 53 | log.Fatalf("Cannot set as subreaper: %v", err) |
| 54 | } |
| 55 | |
| 56 | status := 0 |
| 57 | |
| 58 | logDir := path.Join(logDirBase, serviceType) |
| 59 | varLogLink := path.Join(varLogDir, serviceType) |
| 60 | |
| 61 | if err := os.MkdirAll(logDir, 0755); err != nil { |
| 62 | log.Fatalf("Cannot create log directory %s: %v", logDir, err) |
| 63 | } |
| 64 | |
| 65 | logger := GetLog(logDir) |
| 66 | v2, err := isCgroupV2() |
| 67 | if err != nil { |
| 68 | log.Fatalf("Cannot determine cgroup version: %v", err) |
| 69 | } |
| 70 | msg := "cgroup v1" |
| 71 | if v2 { |
| 72 | msg = "cgroup v2" |
| 73 | } |
| 74 | log.Printf("Using %s", msg) |
| 75 | |
| 76 | // did we choose to run in debug mode? If so, runc will be in debug, and all messages will go to stdout/stderr in addition to the log |
| 77 | var runcDebugMode, runcConsoleMode bool |
| 78 | dt, err := os.ReadFile("/proc/cmdline") |
| 79 | if err != nil { |
| 80 | log.Fatalf("error reading /proc/cmdline: %v", err) |
| 81 | } |
| 82 | |
| 83 | debugLogger := log.New() |
| 84 | debugLogger.Level = log.InfoLevel |
| 85 | |
| 86 | for _, s := range strings.Fields(string(dt)) { |
| 87 | if s == "linuxkit.runc_debug=1" { |
| 88 | runcDebugMode = true |
| 89 | debugLogger.Level = log.DebugLevel |
| 90 | } |
| 91 | if s == "linuxkit.runc_console=1" { |
no test coverage detected