diff --git a/Dockerfile.dapper b/Dockerfile.dapper index c5b0f849..c05a720e 100644 --- a/Dockerfile.dapper +++ b/Dockerfile.dapper @@ -8,7 +8,7 @@ RUN apt-get update && \ apt-get install -y gcc ca-certificates git wget curl vim less file kmod iptables xz-utils zip && \ rm -f /bin/sh && ln -s /bin/bash /bin/sh -ENV GOLANG_ARCH_amd64=amd64 GOLANG_ARCH_arm=armv6l GOLANG_ARCH=GOLANG_ARCH_${ARCH} \ +ENV GOLANG_ARCH_amd64=amd64 GOLANG_ARCH_arm=armv6l GOLANG_ARCH_arm64=arm64 GOLANG_ARCH=GOLANG_ARCH_${ARCH} \ GOPATH=/go PATH=/go/bin:/usr/local/go/bin:${PATH} SHELL=/bin/bash RUN wget -O - https://storage.googleapis.com/golang/go1.11.linux-${!GOLANG_ARCH}.tar.gz | tar -xzf - -C /usr/local && \ @@ -16,6 +16,7 @@ RUN wget -O - https://storage.googleapis.com/golang/go1.11.linux-${!GOLANG_ARCH} ENV DOCKER_URL_amd64=https://get.docker.com/builds/Linux/x86_64/docker-1.10.3 \ DOCKER_URL_arm=https://github.com/rancher/docker/releases/download/v1.10.3-ros1/docker-1.10.3_arm \ + DOCKER_URL_arm64=https://github.com/rancher/docker/releases/download/v1.10.3-ros1/docker-1.10.3_arm64 \ DOCKER_URL=DOCKER_URL_${ARCH} RUN wget -O - ${!DOCKER_URL} > /usr/bin/docker && chmod +x /usr/bin/docker diff --git a/cluster/plan.go b/cluster/plan.go index 76f44450..5a136bce 100644 --- a/cluster/plan.go +++ b/cluster/plan.go @@ -702,10 +702,15 @@ func (c *Cluster) BuildSidecarProcess() v3.Process { func (c *Cluster) BuildEtcdProcess(host *hosts.Host, etcdHosts []*hosts.Host, prefixPath string) v3.Process { nodeName := pki.GetEtcdCrtName(host.InternalAddress) initCluster := "" + architecture := "" if len(etcdHosts) == 0 { initCluster = services.GetEtcdInitialCluster(c.EtcdHosts) + if len(c.EtcdHosts) > 0 { + architecture = c.EtcdHosts[0].DockerInfo.Architecture + } } else { initCluster = services.GetEtcdInitialCluster(etcdHosts) + architecture = etcdHosts[0].DockerInfo.Architecture } clusterState := "new" @@ -771,6 +776,10 @@ func (c *Cluster) BuildEtcdProcess(host *hosts.Host, etcdHosts []*hosts.Host, pr Env = append(Env, fmt.Sprintf("ETCDCTL_CERT=%s", pki.GetCertPath(nodeName))) Env = append(Env, fmt.Sprintf("ETCDCTL_KEY=%s", pki.GetKeyPath(nodeName))) + if architecture == "aarch64" || architecture == "arm64" { + Env = append(Env, "ETCD_UNSUPPORTED_ARCH=arm64") + } + Env = append(Env, c.Services.Etcd.ExtraEnv...) return v3.Process{ diff --git a/scripts/build b/scripts/build index c37a18ff..5e8bf0ae 100755 --- a/scripts/build +++ b/scripts/build @@ -5,10 +5,9 @@ source $(dirname $0)/version cd $(dirname $0)/.. -OS_PLATFORM_ARG=(linux darwin windows) -OS_ARCH_ARG[linux]="amd64 arm" -OS_ARCH_ARG[windows]="386 amd64" -OS_ARCH_ARG[darwin]="amd64" +OS_ARCH_ARG_LINUX="amd64 arm arm64" +OS_ARCH_ARG_WINDOWS="386 amd64" +OS_ARCH_ARG_DARWIN="amd64" mkdir -p bin [ "$(uname)" != "Darwin" ] && LINKFLAGS="-extldflags -static -s" @@ -17,16 +16,28 @@ CGO_ENABLED=0 go build -ldflags "-X main.VERSION=$VERSION $LINKFLAGS" -o bin/rke if [ -n "$CROSS" ]; then rm -rf build/bin mkdir -p build/bin - for OS in ${OS_PLATFORM_ARG[@]}; do - for ARCH in ${OS_ARCH_ARG[${OS}]}; do - OUTPUT_BIN="build/bin/rke_$OS-$ARCH" - if test "$OS" = "windows"; then - OUTPUT_BIN="${OUTPUT_BIN}.exe" - fi - echo "Building binary for $OS/$ARCH..." - GOARCH=$ARCH GOOS=$OS CGO_ENABLED=0 go build \ - -ldflags="-w -X main.VERSION=$VERSION" \ - -o ${OUTPUT_BIN} ./ - done + + for ARCH in ${OS_ARCH_ARG_LINUX}; do + OUTPUT_BIN="build/bin/rke_linux-$ARCH" + echo "Building binary for linux/$ARCH..." + GOARCH=$ARCH GOOS=linux CGO_ENABLED=0 go build \ + -ldflags="-w -X main.VERSION=$VERSION" \ + -o ${OUTPUT_BIN} ./ + done + + for ARCH in ${OS_ARCH_ARG_WINDOWS}; do + OUTPUT_BIN="build/bin/rke_windows-$ARCH.exe" + echo "Building binary for windows/$ARCH..." + GOARCH=$ARCH GOOS=windows CGO_ENABLED=0 go build \ + -ldflags="-w -X main.VERSION=$VERSION" \ + -o ${OUTPUT_BIN} ./ + done + + for ARCH in ${OS_ARCH_ARG_DARWIN}; do + OUTPUT_BIN="build/bin/rke_darwin-$ARCH" + echo "Building binary for darwin/$ARCH..." + GOARCH=$ARCH GOOS=darwin CGO_ENABLED=0 go build \ + -ldflags="-w -X main.VERSION=$VERSION" \ + -o ${OUTPUT_BIN} ./ done fi