Add cross-building for docker

This commit is contained in:
asonix 2019-10-13 17:48:42 -05:00
parent 58cfdec360
commit 11b19e6bbb
2 changed files with 53 additions and 8 deletions

View File

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

37
build-images.sh Executable file
View File

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