save containers
authorsgf <sgf.dma@gmail.com>
Thu, 12 Oct 2023 17:32:01 +0000 (20:32 +0300)
committersgf <sgf.dma@gmail.com>
Tue, 5 Dec 2023 20:57:53 +0000 (23:57 +0300)
containers_from_scratch/main.go

index d715f90..31efd2f 100644 (file)
@@ -5,6 +5,7 @@ import (
     "fmt"
     "os"
     "os/exec"
+    "syscall"
 )
 
 func main() {
@@ -16,6 +17,7 @@ func main() {
     }
 }
 
+// FIXME: Can i pre-create namespace and preserve it using mount bind?
 func run() {
     fmt.Printf("Running %v\n", os.Args[2:])
 
@@ -24,9 +26,15 @@ func run() {
     cmd.Stdin = os.Stdin
     cmd.Stdout = os.Stdout
     cmd.Stderr = os.Stderr
+    cmd.SysProcAttr = &syscall.SysProcAttr {
+        Cloneflags: syscall.CLONE_NEWUTS|syscall.CLONE_NEWUSER|syscall.CLONE_NEWNS,
+        UidMappings: []syscall.SysProcIDMap{{0, 1000, 1}},
+        GidMappings: []syscall.SysProcIDMap{{0, 1000, 1}},
+    }
 
-    fmt.Printf("SHLVL=%v\n", os.Getenv("SHLVL"))
-    err := cmd.Run()
+    err := cmd.Start()
     fmt.Println(err)
+    fmt.Printf("Created pid %v\n", cmd.Process.Pid)
+    cmd.Wait()
 }