.detect-daemon-osarch 2.0 KB

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