From 11b19e6bbbacf791981d5c3e1cf05cd38c852648 Mon Sep 17 00:00:00 2001 From: asonix Date: Sun, 13 Oct 2019 17:48:42 -0500 Subject: [PATCH 1/2] Add cross-building for docker --- Dockerfile | 24 ++++++++++++++++-------- build-images.sh | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 8 deletions(-) create mode 100755 build-images.sh diff --git a/Dockerfile b/Dockerfile index e963674a5..c237b42f4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,14 +5,15 @@ SHELL ["bash", "-c"] # Install Node ENV NODE_VER="12.11.1" +ENV ARCH="x64" RUN echo "Etc/UTC" > /etc/localtime && \ apt update && \ apt -y install wget python && \ cd ~ && \ - wget https://nodejs.org/download/release/v$NODE_VER/node-v$NODE_VER-linux-x64.tar.gz && \ - tar xf node-v$NODE_VER-linux-x64.tar.gz && \ - rm node-v$NODE_VER-linux-x64.tar.gz && \ - mv node-v$NODE_VER-linux-x64 /opt/node + wget https://nodejs.org/download/release/v$NODE_VER/node-v$NODE_VER-linux-$ARCH.tar.gz && \ + tar xf node-v$NODE_VER-linux-$ARCH.tar.gz && \ + rm node-v$NODE_VER-linux-$ARCH.tar.gz && \ + mv node-v$NODE_VER-linux-$ARCH /opt/node # Install jemalloc ENV JE_VER="5.2.1" @@ -95,10 +96,17 @@ RUN apt -y --no-install-recommends install \ # Add tini ENV TINI_VERSION="0.18.0" -ENV TINI_SUM="12d20136605531b09a2c2dac02ccee85e1b874eb322ef6baf7561cd93f93c855" -ADD https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini /tini -RUN echo "$TINI_SUM tini" | sha256sum -c - -RUN chmod +x /tini +ENV TINI_ARCH="amd64" +ADD https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini-${TINI_ARCH} /tini +ADD https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini-${TINI_ARCH}.asc /tini.asc + +RUN apt update && \ + apt -y --no-install-recommends install gpg gpg-agent dirmngr && \ + gpg --batch \ + --keyserver hkp://p80.pool.sks-keyservers.net:80 \ + --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 && \ + gpg --batch --verify /tini.asc /tini && \ + chmod +x /tini # Copy over mastodon source, and dependencies from building, and set permissions COPY --chown=mastodon:mastodon . /opt/mastodon diff --git a/build-images.sh b/build-images.sh new file mode 100755 index 000000000..85d1fbddb --- /dev/null +++ b/build-images.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +set -xe + +TAG=$1 + +require_input() { + input=$1 + name=$2 + + if [ "$input" == "" ]; then + echo "Input, $name, required but not present" + exit 1; + fi +} + +require_input "$TAG" "container tag" + +# architectures=('amd64' 'arm32v7' 'arm64v8') +architectures=('arm64v8') + +for architecture in "${architectures[@]}"; do + sed "s/FROM ubuntu/FROM $architecture\/ubuntu/g" Dockerfile > "Dockerfile-$architecture" + if [ "$architecture" == arm32v7 ]; then + sed -i'' 's/x64/armv7l/g' "Dockerfile-$architecture" # for node + sed -i'' 's/amd64/armhf/g' "Dockerfile-$architecture" # for tini + fi + + if [ "$architecture" == arm64v8 ]; then + sed -i'' 's/x64/arm64/g' "Dockerfile-$architecture" # for node + sed -i'' 's/amd64/arm64/g' "Dockerfile-$architecture" # for tini + fi + + buildah build-using-dockerfile -f "Dockerfile-$architecture" -t "$TAG-$architecture" . + + rm "Dockerfile-$architecture" +done From b4eb525f96b191c577dcfc8fe7c91ff5998248bd Mon Sep 17 00:00:00 2001 From: asonix Date: Mon, 14 Oct 2019 22:19:35 -0500 Subject: [PATCH 2/2] Make tini work --- Dockerfile | 14 ++++++++------ build-images.sh | 3 +-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index c237b42f4..41b390dca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -90,9 +90,7 @@ RUN apt -y --no-install-recommends install \ file ca-certificates tzdata libreadline7 && \ apt -y install gcc && \ ln -s /opt/mastodon /mastodon && \ - gem install bundler && \ - rm -rf /var/cache && \ - rm -rf /var/lib/apt/lists/* + gem install bundler # Add tini ENV TINI_VERSION="0.18.0" @@ -102,11 +100,15 @@ ADD https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini-${TI RUN apt update && \ apt -y --no-install-recommends install gpg gpg-agent dirmngr && \ - gpg --batch \ + rm -rf /var/cache && \ + rm -rf /var/lib/apt/lists/* + +RUN gpg --batch \ --keyserver hkp://p80.pool.sks-keyservers.net:80 \ --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 && \ - gpg --batch --verify /tini.asc /tini && \ - chmod +x /tini + gpg --batch --verify /tini.asc /tini + +RUN chmod +rx /tini # Copy over mastodon source, and dependencies from building, and set permissions COPY --chown=mastodon:mastodon . /opt/mastodon diff --git a/build-images.sh b/build-images.sh index 85d1fbddb..2e08cf7b7 100755 --- a/build-images.sh +++ b/build-images.sh @@ -16,8 +16,7 @@ require_input() { require_input "$TAG" "container tag" -# architectures=('amd64' 'arm32v7' 'arm64v8') -architectures=('arm64v8') +architectures=('arm64v8' 'arm32v7' 'amd64') for architecture in "${architectures[@]}"; do sed "s/FROM ubuntu/FROM $architecture\/ubuntu/g" Dockerfile > "Dockerfile-$architecture"