From bb49e1659e0b57fe4eec7d89a44c5a4049ae4c37 Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Tue, 27 Nov 2018 15:45:28 +0900 Subject: [PATCH] Add support for aarch64 --- .circleci/config.yml | 50 +++++++++++++++++++++++--- Bitcoin/0.17.0/linuxarm64v8.Dockerfile | 43 ++++++++++++++++++++++ 2 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 Bitcoin/0.17.0/linuxarm64v8.Dockerfile diff --git a/.circleci/config.yml b/.circleci/config.yml index df399cf..737c331 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -40,6 +40,39 @@ jobs: sudo docker build --pull -t $DOCKERHUB_DESTINATION -f "$DOCKERHUB_DOCKEFILE" "$NODE_NAME/$NODE_VERSION" sudo docker push $DOCKERHUB_DESTINATION + publish_linuxarm64v8: + machine: + docker_layer_caching: true + steps: + - checkout + - run: + command: | + # If CIRCLE_TAG is "BitcoinCore/0.17.0" + # Then: + # $SEPARATOR=12 + # $NODE_NAME=BitcoinCore + # $NODE_VERSION=0.17.0 + # $LATEST_TAG=0.17.0 + SEPARATOR=$(expr index "$CIRCLE_TAG" "/") + NODE_NAME=${CIRCLE_TAG:0:$SEPARATOR-1} + LATEST_TAG="${CIRCLE_TAG:$SEPARATOR}" + NODE_VERSION="$LATEST_TAG" + DOCKERHUB_REPO="btcpayserver/$NODE_NAME" + DOCKERHUB_REPO="${DOCKERHUB_REPO,,}" + DOCKERHUB_DESTINATION="$DOCKERHUB_REPO:$LATEST_TAG-arm64v8" + DOCKERHUB_DOCKEFILE="$NODE_NAME/$NODE_VERSION/linuxarm64v8.Dockerfile" + # + # Make sure the builder is copy the arm emulator + sudo docker run --rm --privileged multiarch/qemu-user-static:register --reset + sudo apt update + sudo apt install -y qemu qemu-user-static qemu-user binfmt-support + sudo cp /usr/bin/qemu-arm-static "$(dirname "$DOCKERHUB_DOCKEFILE")/qemu-arm-static" + sed -i -e 's/#EnableQEMU //g' "$DOCKERHUB_DOCKEFILE" + # + echo "Pushing $DOCKERHUB_DOCKEFILE to dockerhub repository $DOCKERHUB_DESTINATION" + sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS + sudo docker build --pull -t $DOCKERHUB_DESTINATION -f "$DOCKERHUB_DOCKEFILE" "$NODE_NAME/$NODE_VERSION" + sudo docker push $DOCKERHUB_DESTINATION publish_linuxarm32v7: machine: docker_layer_caching: true @@ -73,7 +106,6 @@ jobs: sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS sudo docker build --pull -t $DOCKERHUB_DESTINATION -f "$DOCKERHUB_DOCKEFILE" "$NODE_NAME/$NODE_VERSION" sudo docker push $DOCKERHUB_DESTINATION - publish_multiarch: machine: enabled: true @@ -122,10 +154,18 @@ workflows: tags: # Example: BitcoinCore/0.17.0 only: /^[^/]+[/][0-9]+(\.[0-9]+)*/ - - publish_multiarch: - requires: - - publish_linuxamd64 - - publish_linuxarm32v7 + - publish_linuxarm64v8: + filters: + branches: + ignore: /.*/ + tags: + # Example: BitcoinCore/0.17.0 + only: /^[^/]+[/][0-9]+(\.[0-9]+)*/ + - publish_multiarch: + requires: + - publish_linuxamd64 + - publish_linuxarm32v7 + - publish_linuxarm64v8 filters: branches: ignore: /.*/ diff --git a/Bitcoin/0.17.0/linuxarm64v8.Dockerfile b/Bitcoin/0.17.0/linuxarm64v8.Dockerfile new file mode 100644 index 0000000..861d08f --- /dev/null +++ b/Bitcoin/0.17.0/linuxarm64v8.Dockerfile @@ -0,0 +1,43 @@ +# Use manifest image which support all architecture +FROM debian:stretch-slim as builder + +RUN set -ex \ + && apt-get update \ + && apt-get install -qq --no-install-recommends ca-certificates dirmngr gosu wget + +ENV BITCOIN_VERSION 0.17.0 +ENV BITCOIN_URL https://bitcoincore.org/bin/bitcoin-core-0.17.0/bitcoin-0.17.0-aarch64-linux-gnu.tar.gz +ENV BITCOIN_SHA256 1e430d8569c5431f6837a8a75e8634f12e1583b9062a5539b57147cda61035ed + +# install bitcoin binaries +RUN set -ex \ + && cd /tmp \ + && wget -qO bitcoin.tar.gz "$BITCOIN_URL" \ + && echo "$BITCOIN_SHA256 bitcoin.tar.gz" | sha256sum -c - \ + && mkdir bin \ + && tar -xzvf bitcoin.tar.gz -C /tmp/bin --strip-components=2 "bitcoin-$BITCOIN_VERSION/bin/bitcoin-cli" "bitcoin-$BITCOIN_VERSION/bin/bitcoind" + +# Making sure the builder build an arm image despite being x64 +FROM arm64v8/debian:stretch-slim + +COPY --from=builder "/tmp/bin" /usr/local/bin +#EnableQEMU COPY qemu-aarch64-static /usr/bin + +RUN apt-get update && apt-get install -qq --no-install-recommends gosu && rm -rf /var/lib/apt/lists/* + +RUN groupadd -r bitcoin && useradd -r -m -g bitcoin bitcoin + +# create data directory +ENV BITCOIN_DATA /data +RUN mkdir "$BITCOIN_DATA" \ + && chown -R bitcoin:bitcoin "$BITCOIN_DATA" \ + && ln -sfn "$BITCOIN_DATA" /home/bitcoin/.bitcoin \ + && chown -h bitcoin:bitcoin /home/bitcoin/.bitcoin + +VOLUME /data + +COPY docker-entrypoint.sh /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] + +EXPOSE 8332 8333 18332 18333 18443 18444 +CMD ["bitcoind"] \ No newline at end of file