.detect-daemon-osarch 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/bin/bash
  2. set -e
  3. docker-version-osarch() {
  4. local target="$1" # "Client" or "Server"
  5. local fmtStr="{{.${target}.Os}}/{{.${target}.Arch}}"
  6. if docker version -f "$fmtStr" 2>/dev/null; then
  7. # if "docker version -f" works, let's just use that!
  8. return
  9. fi
  10. docker version | awk '
  11. $1 ~ /^(Client|Server):$/ { section = 0 }
  12. $1 == "'"$target"':" { section = 1; next }
  13. section && $1 == "OS/Arch:" { print $2 }
  14. # old versions of Docker
  15. $1 == "OS/Arch" && $2 == "('"${target,,}"'):" { print $3 }
  16. '
  17. }
  18. # Retrieve OS/ARCH of docker daemon, eg. linux/amd64
  19. export DOCKER_ENGINE_OSARCH="$(docker-version-osarch 'Server')"
  20. export DOCKER_ENGINE_GOOS="${DOCKER_ENGINE_OSARCH%/*}"
  21. export DOCKER_ENGINE_GOARCH="${DOCKER_ENGINE_OSARCH##*/}"
  22. DOCKER_ENGINE_GOARCH=${DOCKER_ENGINE_GOARCH:=amd64}
  23. # and the client, just in case
  24. export DOCKER_CLIENT_OSARCH="$(docker-version-osarch 'Client')"
  25. export DOCKER_CLIENT_GOOS="${DOCKER_CLIENT_OSARCH%/*}"
  26. export DOCKER_CLIENT_GOARCH="${DOCKER_CLIENT_OSARCH##*/}"
  27. DOCKER_CLIENT_GOARCH=${DOCKER_CLIENT_GOARCH:=amd64}
  28. # Retrieve the architecture used in contrib/builder/(deb|rpm)/$PACKAGE_ARCH/
  29. PACKAGE_ARCH='amd64'
  30. case "${DOCKER_ENGINE_GOARCH:-$DOCKER_CLIENT_GOARCH}" in
  31. arm)
  32. PACKAGE_ARCH='armhf'
  33. ;;
  34. arm64)
  35. PACKAGE_ARCH='aarch64'
  36. ;;
  37. amd64|ppc64le|s390x)
  38. PACKAGE_ARCH="${DOCKER_ENGINE_GOARCH:-$DOCKER_CLIENT_GOARCH}"
  39. ;;
  40. *)
  41. echo >&2 "warning: not sure how to convert '$DOCKER_ENGINE_GOARCH' to a 'Docker' arch, assuming '$PACKAGE_ARCH'"
  42. ;;
  43. esac
  44. export PACKAGE_ARCH
  45. DOCKERFILE='Dockerfile'
  46. TEST_IMAGE_NAMESPACE=
  47. case "$PACKAGE_ARCH" in
  48. amd64)
  49. case "${DOCKER_ENGINE_GOOS:-$DOCKER_CLIENT_GOOS}" in
  50. windows)
  51. DOCKERFILE='Dockerfile.windows'
  52. ;;
  53. esac
  54. ;;
  55. *)
  56. DOCKERFILE="Dockerfile.$PACKAGE_ARCH"
  57. TEST_IMAGE_NAMESPACE="$PACKAGE_ARCH"
  58. ;;
  59. esac
  60. export DOCKERFILE TEST_IMAGE_NAMESPACE