fixtures.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "os"
  6. "os/exec"
  7. "path/filepath"
  8. "sync"
  9. )
  10. var ensureHTTPServerOnce sync.Once
  11. func ensureHTTPServerImage() error {
  12. var doIt bool
  13. ensureHTTPServerOnce.Do(func() {
  14. doIt = true
  15. })
  16. if !doIt {
  17. return nil
  18. }
  19. protectedImages["httpserver:latest"] = struct{}{}
  20. tmp, err := ioutil.TempDir("", "docker-http-server-test")
  21. if err != nil {
  22. return fmt.Errorf("could not build http server: %v", err)
  23. }
  24. defer os.RemoveAll(tmp)
  25. goos := daemonPlatform
  26. if goos == "" {
  27. goos = "linux"
  28. }
  29. goarch := os.Getenv("DOCKER_ENGINE_GOARCH")
  30. if goarch == "" {
  31. goarch = "amd64"
  32. }
  33. goCmd, lookErr := exec.LookPath("go")
  34. if lookErr != nil {
  35. return fmt.Errorf("could not build http server: %v", lookErr)
  36. }
  37. cmd := exec.Command(goCmd, "build", "-o", filepath.Join(tmp, "httpserver"), "github.com/docker/docker/contrib/httpserver")
  38. cmd.Env = append(os.Environ(), []string{
  39. "CGO_ENABLED=0",
  40. "GOOS=" + goos,
  41. "GOARCH=" + goarch,
  42. }...)
  43. var out []byte
  44. if out, err = cmd.CombinedOutput(); err != nil {
  45. return fmt.Errorf("could not build http server: %s", string(out))
  46. }
  47. cpCmd, lookErr := exec.LookPath("cp")
  48. if lookErr != nil {
  49. return fmt.Errorf("could not build http server: %v", lookErr)
  50. }
  51. if out, err = exec.Command(cpCmd, "../contrib/httpserver/Dockerfile", filepath.Join(tmp, "Dockerfile")).CombinedOutput(); err != nil {
  52. return fmt.Errorf("could not build http server: %v", string(out))
  53. }
  54. if out, err = exec.Command(dockerBinary, "build", "-q", "-t", "httpserver", tmp).CombinedOutput(); err != nil {
  55. return fmt.Errorf("could not build http server: %v", string(out))
  56. }
  57. return nil
  58. }