util_linux.go 736 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // +build linux
  2. package util
  3. import (
  4. "os"
  5. "syscall"
  6. "github.com/docker/docker/pkg/mount"
  7. )
  8. func mountProc() error {
  9. if _, err := os.Stat("/proc/self/mountinfo"); os.IsNotExist(err) {
  10. if _, err := os.Stat("/proc"); os.IsNotExist(err) {
  11. if err = os.Mkdir("/proc", 0755); err != nil {
  12. return err
  13. }
  14. }
  15. if err := syscall.Mount("none", "/proc", "proc", 0, ""); err != nil {
  16. return err
  17. }
  18. }
  19. return nil
  20. }
  21. func Mount(device, directory, fsType, options string) error {
  22. if err := mountProc(); err != nil {
  23. return nil
  24. }
  25. if _, err := os.Stat(directory); os.IsNotExist(err) {
  26. err = os.MkdirAll(directory, 0755)
  27. if err != nil {
  28. return err
  29. }
  30. }
  31. return mount.Mount(device, directory, fsType, options)
  32. }