sysinit.go 1.8 KB

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