diff.go 689 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package chrootarchive
  2. import (
  3. "flag"
  4. "fmt"
  5. "os"
  6. "runtime"
  7. "syscall"
  8. "github.com/docker/docker/pkg/archive"
  9. "github.com/docker/docker/pkg/reexec"
  10. )
  11. func applyLayer() {
  12. runtime.LockOSThread()
  13. flag.Parse()
  14. if err := syscall.Chroot(flag.Arg(0)); err != nil {
  15. fatal(err)
  16. }
  17. if err := syscall.Chdir("/"); err != nil {
  18. fatal(err)
  19. }
  20. if err := archive.ApplyLayer("/", os.Stdin); err != nil {
  21. fatal(err)
  22. }
  23. os.Exit(0)
  24. }
  25. func ApplyLayer(dest string, layer archive.ArchiveReader) error {
  26. cmd := reexec.Command("docker-applyLayer", dest)
  27. cmd.Stdin = layer
  28. out, err := cmd.CombinedOutput()
  29. if err != nil {
  30. return fmt.Errorf("ApplyLayer %s %s", err, out)
  31. }
  32. return nil
  33. }