sysinit.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package sysinit
  2. import (
  3. "flag"
  4. "fmt"
  5. "github.com/dotcloud/docker/daemon/execdriver"
  6. _ "github.com/dotcloud/docker/daemon/execdriver/lxc"
  7. _ "github.com/dotcloud/docker/daemon/execdriver/native"
  8. "log"
  9. "os"
  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. )
  39. flag.Parse()
  40. args := &execdriver.InitArgs{
  41. User: *user,
  42. Gateway: *gateway,
  43. Ip: *ip,
  44. WorkDir: *workDir,
  45. Privileged: *privileged,
  46. Args: flag.Args(),
  47. Mtu: *mtu,
  48. Driver: *driver,
  49. Console: *console,
  50. Pipe: *pipe,
  51. Root: *root,
  52. }
  53. if err := executeProgram(args); err != nil {
  54. log.Fatal(err)
  55. }
  56. }