sysinit.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package sysinit
  2. import (
  3. "flag"
  4. "fmt"
  5. "log"
  6. "os"
  7. "runtime"
  8. "github.com/docker/docker/daemon/execdriver"
  9. _ "github.com/docker/docker/daemon/execdriver/lxc"
  10. _ "github.com/docker/docker/daemon/execdriver/native"
  11. )
  12. func executeProgram(args *execdriver.InitArgs) error {
  13. dockerInitFct, err := execdriver.GetInitFunc(args.Driver)
  14. if err != nil {
  15. panic(err)
  16. }
  17. return dockerInitFct(args)
  18. }
  19. // Sys Init code
  20. // This code is run INSIDE the container and is responsible for setting
  21. // up the environment before running the actual process
  22. func SysInit() {
  23. // The very first thing that we should do is lock the thread so that other
  24. // system level options will work and not have issues, i.e. setns
  25. runtime.LockOSThread()
  26. if len(os.Args) <= 1 {
  27. fmt.Println("You should not invoke dockerinit manually")
  28. os.Exit(1)
  29. }
  30. var (
  31. // Get cmdline arguments
  32. user = flag.String("u", "", "username or uid")
  33. gateway = flag.String("g", "", "gateway address")
  34. ip = flag.String("i", "", "ip address")
  35. workDir = flag.String("w", "", "workdir")
  36. privileged = flag.Bool("privileged", false, "privileged mode")
  37. mtu = flag.Int("mtu", 1500, "interface mtu")
  38. driver = flag.String("driver", "", "exec driver")
  39. pipe = flag.Int("pipe", 0, "sync pipe fd")
  40. console = flag.String("console", "", "console (pty slave) path")
  41. root = flag.String("root", ".", "root path for configuration files")
  42. capAdd = flag.String("cap-add", "", "capabilities to add")
  43. capDrop = flag.String("cap-drop", "", "capabilities to drop")
  44. )
  45. flag.Parse()
  46. args := &execdriver.InitArgs{
  47. User: *user,
  48. Gateway: *gateway,
  49. Ip: *ip,
  50. WorkDir: *workDir,
  51. Privileged: *privileged,
  52. Args: flag.Args(),
  53. Mtu: *mtu,
  54. Driver: *driver,
  55. Console: *console,
  56. Pipe: *pipe,
  57. Root: *root,
  58. CapAdd: *capAdd,
  59. CapDrop: *capDrop,
  60. }
  61. if err := executeProgram(args); err != nil {
  62. log.Fatal(err)
  63. }
  64. }