Add new "cross" bundle to cross-compile the Docker client for other platforms (currently just 32-bit and 64-bit OS X)

This commit is contained in:
Tianon Gravi 2013-12-18 23:06:14 -07:00
parent e829d5b6d2
commit 62a81370ff
5 changed files with 36 additions and 2 deletions

View File

@ -39,7 +39,12 @@ RUN apt-get install -y -q build-essential libsqlite3-dev
RUN curl -s https://go.googlecode.com/files/go1.2.src.tar.gz | tar -v -C /usr/local -xz RUN curl -s https://go.googlecode.com/files/go1.2.src.tar.gz | tar -v -C /usr/local -xz
ENV PATH /usr/local/go/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin ENV PATH /usr/local/go/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
ENV GOPATH /go:/go/src/github.com/dotcloud/docker/vendor ENV GOPATH /go:/go/src/github.com/dotcloud/docker/vendor
RUN cd /usr/local/go/src && ./make.bash RUN cd /usr/local/go/src && ./make.bash --no-clean 2>&1
# Cross compilation
ENV DOCKER_CROSSPLATFORMS darwin/amd64 darwin/386
# TODO add linux/386 and linux/arm
RUN cd /usr/local/go/src && bash -xc 'for platform in $DOCKER_CROSSPLATFORMS; do GOOS=${platform%/*} GOARCH=${platform##*/} ./make.bash --no-clean 2>&1; done'
# Ubuntu stuff # Ubuntu stuff
RUN apt-get install -y -q ruby1.9.3 rubygems libffi-dev RUN apt-get install -y -q ruby1.9.3 rubygems libffi-dev

View File

@ -1,4 +1,4 @@
.PHONY: all binary build default docs shell test .PHONY: all binary build cross default docs shell test
DOCKER_RUN_DOCKER := docker run -rm -i -t -privileged -e TESTFLAGS -v $(CURDIR)/bundles:/go/src/github.com/dotcloud/docker/bundles docker DOCKER_RUN_DOCKER := docker run -rm -i -t -privileged -e TESTFLAGS -v $(CURDIR)/bundles:/go/src/github.com/dotcloud/docker/bundles docker
@ -10,6 +10,9 @@ all: build
binary: build binary: build
$(DOCKER_RUN_DOCKER) hack/make.sh binary $(DOCKER_RUN_DOCKER) hack/make.sh binary
cross: build
$(DOCKER_RUN_DOCKER) hack/make.sh cross
docs: docs:
docker build -t docker-docs docs && docker run -p 8000:8000 docker-docs docker build -t docker-docs docs && docker run -p 8000:8000 docker-docs

View File

@ -40,6 +40,7 @@ DEFAULT_BUNDLES=(
dyntest dyntest
dyntest-integration dyntest-integration
cover cover
cross
tgz tgz
ubuntu ubuntu
) )

13
hack/make/cross Normal file
View File

@ -0,0 +1,13 @@
#!/bin/bash
DEST=$1
for platform in $DOCKER_CROSSPLATFORMS; do
(
export GOOS=${platform%/*}
export GOARCH=${platform##*/}
export VERSION="$GOOS-$GOARCH-$VERSION" # for a nice filename
export LDFLAGS_STATIC="" # we just need a simple client for these platforms (TODO this might change someday)
source "$(dirname "$BASH_SOURCE")/binary"
)
done

View File

@ -47,6 +47,7 @@ cd /go/src/github.com/dotcloud/docker
RELEASE_BUNDLES=( RELEASE_BUNDLES=(
binary binary
cross
tgz tgz
ubuntu ubuntu
) )
@ -233,6 +234,16 @@ EOF
fi fi
} }
# Upload a cross-compiled client binaries to S3
release_cross() {
[ -e bundles/$VERSION/cross ] || {
echo >&2 './hack/make.sh must be run before release_binary'
exit 1
}
# TODO find out from @shykes what URLs he'd like to use here
}
# Upload the index script # Upload the index script
release_index() { release_index() {
sed "s,https://get.docker.io/,$(s3_url)/," hack/install.sh | write_to_s3 s3://$BUCKET/index sed "s,https://get.docker.io/,$(s3_url)/," hack/install.sh | write_to_s3 s3://$BUCKET/index
@ -247,6 +258,7 @@ release_test() {
main() { main() {
setup_s3 setup_s3
release_binary release_binary
release_cross
release_tgz release_tgz
release_ubuntu release_ubuntu
release_index release_index