diff --git a/.dockerignore b/.dockerignore index fc02154786..7a72219513 100755 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,5 @@ ** -!dist_linux/** +!dist_linux_amd64/** !build/package/docker/.ds.container.d3e2c84f976743bdb92a7044ef12e381 **/.DS_Store **/*.command diff --git a/.gitignore b/.gitignore index d8f25d3120..bfcbb9288e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,10 @@ .DS_Store /docker-slim /docker-slim-sensor -/dist_linux*/ -/dist_mac/ -/dist_mac_m1/ +/dist_*/ /bin/ /_gopath/ -dist_linux*.tar.gz -dist_mac.zip +dist_*.tar.gz +dist_*.zip .idea *.swp diff --git a/Makefile b/Makefile index 983a5ad05e..69118b82ac 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,20 @@ +TARGET_PLATFORM_DEV=$(shell go env GOOS)_$(shell go env GOARCH) + default: build_in_docker ## build docker-slim in docker by default -build_in_docker: ## build docker-slim in docker +build_in_docker: ## build docker-slim for all supported architectures, in docker rm -rfv bin '$(CURDIR)/scripts/docker-builder.run.sh' -build_m1_in_docker: +build_in_docker_dev: ## build docker-slim for the current platform in bin/, in docker rm -rfv bin - '$(CURDIR)/scripts/docker-builder-m1.run.sh' + TARGET_PLATFORMS=$(TARGET_PLATFORM_DEV) '$(CURDIR)/scripts/docker-builder.run.sh' -build: ## build docker-slim +build: ## build docker-slim for all supported architectures '$(CURDIR)/scripts/src.build.sh' -build_m1: ## build docker-slim - '$(CURDIR)/scripts/src.build.m1.sh' - -build_dev: ## build docker-slim for development (quickly), in bin/ - '$(CURDIR)/scripts/src.build.quick.sh' +build_dev: ## build docker-slim for the current platform in bin/ + TARGET_PLATFORMS=$(TARGET_PLATFORM_DEV) '$(CURDIR)/scripts/src.build.sh' fmt: ## format all golang files '$(CURDIR)/scripts/src.fmt.sh' diff --git a/scripts/docker-builder-m1.run.sh b/scripts/docker-builder-m1.run.sh deleted file mode 100755 index 092a39e921..0000000000 --- a/scripts/docker-builder-m1.run.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -set -e - -SOURCE="${BASH_SOURCE[0]}" -while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done -BDIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )" - -pushd $BDIR -docker run -v $(pwd):/go/src/github.com/docker-slim/docker-slim -w /go/src/github.com/docker-slim/docker-slim -it --rm --name="docker-slim-builder" golang:1.16 make build_m1 - -if [ ! -f dist_mac_m1.zip ]; then -if hash zip 2> /dev/null; then - zip -r dist_mac_m1.zip dist_mac_m1 -x "*.DS_Store" -fi -fi diff --git a/scripts/docker-builder.run.sh b/scripts/docker-builder.run.sh index 39e19991bc..1619803095 100755 --- a/scripts/docker-builder.run.sh +++ b/scripts/docker-builder.run.sh @@ -7,10 +7,10 @@ while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done BDIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )" pushd $BDIR -docker run -v $(pwd):/go/src/github.com/docker-slim/docker-slim -w /go/src/github.com/docker-slim/docker-slim -it --rm --name="docker-slim-builder" golang:1.15 make build - -if [ ! -f dist_mac.zip ]; then -if hash zip 2> /dev/null; then - zip -r dist_mac.zip dist_mac -x "*.DS_Store" -fi -fi +docker run \ + -v $(pwd):/project/docker-slim \ + -w /project/docker-slim \ + -e TARGET_PLATFORMS=${TARGET_PLATFORMS} \ + -it --rm --name="docker-slim-builder" golang:1.16 \ + make build +popd diff --git a/scripts/mac/docker-builder-m1.run.command b/scripts/mac/docker-builder-m1.run.command deleted file mode 100755 index 2df52ea722..0000000000 --- a/scripts/mac/docker-builder-m1.run.command +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -here="$(dirname "$BASH_SOURCE")" -cd $here/.. - -./docker-builder-m1.run.sh - diff --git a/scripts/mac/docker-builder.run.command b/scripts/mac/docker-builder.run.command index 58e0edee99..3cf39109ed 100755 --- a/scripts/mac/docker-builder.run.command +++ b/scripts/mac/docker-builder.run.command @@ -3,5 +3,8 @@ here="$(dirname "$BASH_SOURCE")" cd $here/.. -./docker-builder.run.sh +if [ -z "$TARGET_PLATFORMS" ]; then + export TARGET_PLATFORMS=darwin_$(go env GOARCH) +fi +./docker-builder.run.sh diff --git a/scripts/src.build.m1.sh b/scripts/src.build.m1.sh deleted file mode 100755 index 75dcf0ff04..0000000000 --- a/scripts/src.build.m1.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env bash - -set -e - -SOURCE="${BASH_SOURCE[0]}" -while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done -BDIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )" - -export CGO_ENABLED=0 - -pushd $BDIR - -BUILD_TIME="$(date -u '+%Y-%m-%d_%I:%M:%S%p')" -TAG="current" -REVISION="current" -if hash git 2>/dev/null && [ -e $BDIR/.git ]; then - TAG="$(git describe --tags)" - REVISION="$(git rev-parse HEAD)" -fi - -LD_FLAGS="-s -w -X github.com/docker-slim/docker-slim/pkg/version.appVersionTag=${TAG} -X github.com/docker-slim/docker-slim/pkg/version.appVersionRev=${REVISION} -X github.com/docker-slim/docker-slim/pkg/version.appVersionTime=${BUILD_TIME}" - -pushd ${BDIR}/cmd/docker-slim -GOOS=darwin GOARCH=arm64 go build -mod=vendor -trimpath -ldflags="${LD_FLAGS}" -a -tags 'netgo osusergo' -o "${BDIR}/bin/mac_m1/docker-slim" -popd - -pushd ${BDIR}/cmd/docker-slim-sensor -GOOS=linux GOARCH=arm64 go build -mod=vendor -trimpath -ldflags="${LD_FLAGS}" -a -tags 'netgo osusergo' -o "$BDIR/bin/linux_arm64/docker-slim-sensor" -chmod a+x "$BDIR/bin/linux_arm64/docker-slim-sensor" -popd - -rm -rfv ${BDIR}/dist_mac_m1 -mkdir ${BDIR}/dist_mac_m1 -cp ${BDIR}/bin/mac_m1/docker-slim ${BDIR}/dist_mac_m1/docker-slim -cp ${BDIR}/bin/linux_arm64/docker-slim-sensor ${BDIR}/dist_mac_m1/docker-slim-sensor -pushd ${BDIR} - -if hash zip 2> /dev/null; then - zip -r dist_mac_m1.zip dist_mac_m1 -x "*.DS_Store" -fi - -rm -rfv ${BDIR}/bin diff --git a/scripts/src.build.quick.sh b/scripts/src.build.quick.sh deleted file mode 100755 index d0b22715f0..0000000000 --- a/scripts/src.build.quick.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -set -e - -SOURCE="${BASH_SOURCE[0]}" -while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done -BDIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )" - -BUILD_TIME="$(date -u '+%Y-%m-%d_%I:%M:%S%p')" -TAG="current" -REVISION="current" -if hash git 2>/dev/null && [ -e $BDIR/.git ]; then - TAG="$(git describe --tags)" - REVISION="$(git rev-parse HEAD)" -fi - -LD_FLAGS="-s -w -X github.com/docker-slim/docker-slim/pkg/version.appVersionTag=${TAG} -X github.com/docker-slim/docker-slim/pkg/version.appVersionRev=${REVISION} -X github.com/docker-slim/docker-slim/pkg/version.appVersionTime=${BUILD_TIME}" - -BINDIR="${BDIR}/bin" -mkdir -p "$BINDIR" -rm -rf "${BINDIR}/"* - -CGO_ENABLED=0 go build -ldflags="${LD_FLAGS}" -mod=vendor -o "${BINDIR}/docker-slim" "${BDIR}/cmd/docker-slim/main.go" -CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="${LD_FLAGS}" -mod=vendor -o "${BINDIR}/docker-slim-sensor" "${BDIR}/cmd/docker-slim-sensor/main.go" diff --git a/scripts/src.build.sh b/scripts/src.build.sh index 1eb3a65103..ecc7ebf1a4 100755 --- a/scripts/src.build.sh +++ b/scripts/src.build.sh @@ -8,6 +8,9 @@ BDIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )" export CGO_ENABLED=0 +TARGET_PLATFORMS=${TARGET_PLATFORMS:-"linux_amd64 linux_arm64 linux_arm darwin_amd64 darwin_arm64"} +REBUILD=${REBUILD:-} + pushd $BDIR BUILD_TIME="$(date -u '+%Y-%m-%d_%I:%M:%S%p')" @@ -19,54 +22,48 @@ if hash git 2>/dev/null && [ -e $BDIR/.git ]; then fi LD_FLAGS="-s -w -X github.com/docker-slim/docker-slim/pkg/version.appVersionTag=${TAG} -X github.com/docker-slim/docker-slim/pkg/version.appVersionRev=${REVISION} -X github.com/docker-slim/docker-slim/pkg/version.appVersionTime=${BUILD_TIME}" - -pushd ${BDIR}/cmd/docker-slim -GOOS=linux GOARCH=amd64 go build -mod=vendor -trimpath -ldflags="${LD_FLAGS}" -a -tags 'netgo osusergo' -o "${BDIR}/bin/linux/docker-slim" -GOOS=darwin GOARCH=amd64 go build -mod=vendor -trimpath -ldflags="${LD_FLAGS}" -a -tags 'netgo osusergo' -o "${BDIR}/bin/mac/docker-slim" -GOOS=linux GOARCH=arm go build -mod=vendor -trimpath -ldflags="${LD_FLAGS}" -a -tags 'netgo osusergo' -o "$BDIR/bin/linux_arm/docker-slim" -GOOS=linux GOARCH=arm64 go build -mod=vendor -trimpath -ldflags="${LD_FLAGS}" -a -tags 'netgo osusergo' -o "$BDIR/bin/linux_arm64/docker-slim" -popd - -pushd ${BDIR}/cmd/docker-slim-sensor -GOOS=linux GOARCH=amd64 go build -mod=vendor -trimpath -ldflags="${LD_FLAGS}" -a -tags 'netgo osusergo' -o "${BDIR}/bin/linux/docker-slim-sensor" -GOOS=linux GOARCH=arm go build -mod=vendor -trimpath -ldflags="${LD_FLAGS}" -a -tags 'netgo osusergo' -o "$BDIR/bin/linux_arm/docker-slim-sensor" -GOOS=linux GOARCH=arm64 go build -mod=vendor -trimpath -ldflags="${LD_FLAGS}" -a -tags 'netgo osusergo' -o "$BDIR/bin/linux_arm64/docker-slim-sensor" -chmod a+x "${BDIR}/bin/linux/docker-slim-sensor" -chmod a+x "$BDIR/bin/linux_arm/docker-slim-sensor" -chmod a+x "$BDIR/bin/linux_arm64/docker-slim-sensor" -popd - -rm -rfv ${BDIR}/dist_mac -mkdir ${BDIR}/dist_mac -cp ${BDIR}/bin/mac/docker-slim ${BDIR}/dist_mac/docker-slim -cp ${BDIR}/bin/linux/docker-slim-sensor ${BDIR}/dist_mac/docker-slim-sensor -pushd ${BDIR} - -if hash zip 2> /dev/null; then - zip -r dist_mac.zip dist_mac -x "*.DS_Store" +BUILD_FLAGS="-mod=vendor -trimpath" +if [ -n "$REBUILD" ]; then + BUILD_FLAGS="$BUILD_FLAGS -a" fi -popd -rm -rfv ${BDIR}/dist_linux -mkdir ${BDIR}/dist_linux -cp ${BDIR}/bin/linux/docker-slim ${BDIR}/dist_linux/docker-slim -cp ${BDIR}/bin/linux/docker-slim-sensor ${BDIR}/dist_linux/docker-slim-sensor -pushd ${BDIR} -tar -czvf dist_linux.tar.gz dist_linux -popd -rm -rfv $BDIR/dist_linux_arm -mkdir $BDIR/dist_linux_arm -cp $BDIR/bin/linux_arm/docker-slim $BDIR/dist_linux_arm/docker-slim -cp $BDIR/bin/linux_arm/docker-slim-sensor $BDIR/dist_linux_arm/docker-slim-sensor -pushd ${BDIR} -tar -czvf dist_linux_arm.tar.gz dist_linux_arm -popd -rm -rfv $BDIR/dist_linux_arm64 -mkdir $BDIR/dist_linux_arm64 -cp $BDIR/bin/linux_arm64/docker-slim $BDIR/dist_linux_arm64/docker-slim -cp $BDIR/bin/linux_arm64/docker-slim-sensor $BDIR/dist_linux_arm64/docker-slim-sensor -pushd ${BDIR} -tar -czvf dist_linux_arm64.tar.gz dist_linux_arm64 -popd - -rm -rfv ${BDIR}/bin +for platform in $TARGET_PLATFORMS; do + + os="$(echo $platform | awk -F_ '{print $1}')" + arch="$(echo $platform | awk -F_ '{print $2}')" + + echo "building target ${os}/${arch}" + + pushd ${BDIR}/cmd/docker-slim >/dev/null + GOOS=$os GOARCH=$arch go build $BUILD_FLAGS -tags 'netgo osusergo' -ldflags="${LD_FLAGS}" -o "${BDIR}/bin/${platform}/docker-slim" + popd >/dev/null + + if [ ! -f "bin/linux_${arch}/docker-slim-sensor" ]; then + pushd "${BDIR}/cmd/docker-slim-sensor" >/dev/null + GOOS=linux GOARCH=$arch go build $BUILD_FLAGS -tags 'netgo osusergo' -ldflags="${LD_FLAGS}" -o "${BDIR}/bin/linux_${arch}/docker-slim-sensor" + chmod a+x "${BDIR}/bin/linux_${arch}/docker-slim-sensor" + popd >/dev/null + fi + + rm -rf dist_${platform} + mkdir dist_${platform} + cp bin/${platform}/docker-slim dist_${platform}/docker-slim + + if [ "$os" = "darwin" ]; then + # Use the linux arch since linux OS will be emulated but not arcsh. + cp bin/linux_${arch}/docker-slim-sensor dist_${platform}/docker-slim-sensor + if which zip >/dev/null 2>&1; then + zip -r dist_${platform}.zip dist_${platform} -x "*.DS_Store" + else + echo "zip binary not found, skipping zip archiving of dist_${platform}" + fi + else + cp bin/${platform}/docker-slim-sensor dist_${platform}/docker-slim-sensor + tar --exclude="*.DS_Store" -czvf dist_${platform}.tar.gz dist_${platform} + fi + +done + +rm -rf ./bin + +popd >/dev/null diff --git a/scripts/src.cleanup.sh b/scripts/src.cleanup.sh index 12e7d28179..0e900c5b96 100755 --- a/scripts/src.cleanup.sh +++ b/scripts/src.cleanup.sh @@ -7,14 +7,5 @@ while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done BDIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )" rm -rfv $BDIR/_gopath -rm -rfv $BDIR/dist_linux -rm -fv $BDIR/dist_linux.tar.gz -rm -rfv $BDIR/dist_linux_arm -rm -fv $BDIR/dist_linux_arm.tar.gz -rm -rfv $BDIR/dist_linux_arm64 -rm -fv $BDIR/dist_linux_arm64.tar.gz -rm -rfv $BDIR/dist_mac -rm -fv $BDIR/dist_mac.zip -rm -rfv $BDIR/dist_mac_m1 -rm -fv $BDIR/dist_mac_m1.zip +rm -rfv $BDIR/dist_* rm -rfv $BDIR/bin