Add support for aarch64

This commit is contained in:
nicolas.dorier 2018-11-27 15:45:28 +09:00
parent af06a3dc04
commit bb49e1659e
2 changed files with 88 additions and 5 deletions

View File

@ -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: /.*/

View File

@ -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"]