Parcourir la source

hack: do not set buildmode pie for statically linked binary

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
(cherry picked from commit 347a5f68da9d262762e3cf1b8191067ff786a017)
CrazyMax il y a 2 ans
Parent
commit
7d8c689923
4 fichiers modifiés avec 16 ajouts et 13 suppressions
  1. 2 2
      Dockerfile
  2. 12 10
      hack/make/.binary
  3. 1 0
      hack/make/binary-daemon
  4. 1 1
      hack/make/binary-proxy

+ 2 - 2
Dockerfile

@@ -584,8 +584,8 @@ RUN --mount=type=bind,target=. \
   target=$([ "$DOCKER_STATIC" = "1" ] && echo "binary" || echo "dynbinary")
   xx-go --wrap
   ./hack/make.sh $target
-  xx-verify /tmp/bundles/${target}-daemon/dockerd$([ "$(xx-info os)" = "windows" ] && echo ".exe")
-  xx-verify /tmp/bundles/${target}-daemon/docker-proxy$([ "$(xx-info os)" = "windows" ] && echo ".exe")
+  xx-verify $([ "$DOCKER_STATIC" = "1" ] && echo "--static") /tmp/bundles/${target}-daemon/dockerd$([ "$(xx-info os)" = "windows" ] && echo ".exe")
+  xx-verify $([ "$DOCKER_STATIC" = "1" ] && echo "--static") /tmp/bundles/${target}-daemon/docker-proxy$([ "$(xx-info os)" = "windows" ] && echo ".exe")
   mkdir /build
   mv /tmp/bundles/${target}-daemon/* /build/
 EOT

+ 12 - 10
hack/make/.binary

@@ -73,15 +73,17 @@ source "${MAKEDIR}/.go-autogen"
 
 	# -buildmode=pie is not supported on Windows and Linux on mips, riscv64 and ppc64be.
 	# https://github.com/golang/go/blob/77aa209b386a184e7f4b44938f2a05a1b5c5a3cf/src/cmd/internal/sys/supported.go#L89-L99
-	case "$(go env GOOS)/$(go env GOARCH)" in
-		windows/* | linux/mips* | linux/riscv* | linux/ppc64) ;;
-		# TODO remove windows in Go 1.15+: https://github.com/golang/go/commit/95f382139043059a2a0780ba577b53893408f7e4
-		# TODO remove riscv64 in Go 1.16+: https://github.com/golang/go/commit/8eb846fd37eb7bded8a1cf6932be2c59069863e5
-
-		*)
-			BUILDFLAGS+=("-buildmode=pie")
-			;;
-	esac
+	if ! [ "$DOCKER_STATIC" = "1" ]; then
+		case "$(go env GOOS)/$(go env GOARCH)" in
+			windows/* | linux/mips* | linux/riscv* | linux/ppc64) ;;
+			# TODO remove windows in Go 1.15+: https://github.com/golang/go/commit/95f382139043059a2a0780ba577b53893408f7e4
+			# TODO remove riscv64 in Go 1.16+: https://github.com/golang/go/commit/8eb846fd37eb7bded8a1cf6932be2c59069863e5
+	
+			*)
+				BUILDFLAGS+=("-buildmode=pie")
+				;;
+		esac
+	fi
 
 	# only necessary for non-sandboxed invocation where TARGETPLATFORM is empty
 	PLATFORM_NAME=$TARGETPLATFORM
@@ -94,7 +96,7 @@ source "${MAKEDIR}/.go-autogen"
 		fi
 	fi
 
-	echo "Building $DEST/$BINARY_FULLNAME ($PLATFORM_NAME)..."
+	echo "Building $([ "$DOCKER_STATIC" = "1" ] && echo "static" || echo "dynamic") $DEST/$BINARY_FULLNAME ($PLATFORM_NAME)..."
 	go build \
 		-o "$DEST/$BINARY_FULLNAME" \
 		"${BUILDFLAGS[@]}" \

+ 1 - 0
hack/make/binary-daemon

@@ -4,6 +4,7 @@ set -e
 [ -z "$KEEPDEST" ] && rm -rf "$DEST"
 
 (
+	DOCKER_STATIC=1
 	GO_PACKAGE='github.com/docker/docker/cmd/dockerd'
 	BINARY_NAME='dockerd'
 	source "${MAKEDIR}/.binary"

+ 1 - 1
hack/make/binary-proxy

@@ -5,8 +5,8 @@ set -e
 (
 	export CGO_ENABLED=0
 
+	DOCKER_STATIC=1
 	GO_PACKAGE='github.com/docker/docker/cmd/docker-proxy'
 	BINARY_NAME='docker-proxy'
-
 	source "${MAKEDIR}/.binary"
 )