github.com/sams1990/dockerrepo@v17.12.1-ce-rc2+incompatible/hack/make/.detect-daemon-osarch (about)

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