From e486585853f779b9f4d287b4254f040324ea81a3 Mon Sep 17 00:00:00 2001 From: Clement Sam Date: Fri, 25 Mar 2022 08:18:58 +0000 Subject: [PATCH] Dockerfiles: switch base image from alpine to Debian We've had a lot of issues with alpine and currently there's a broken network issue on alpine for users running on RPI arm32 architechture which requires a workaround before docker is able to sync time between the host and the container: https://wiki.alpinelinux.org/wiki/Release_Notes_for_Alpine_3.13.0\#time64_requirements. Since we're switching the base image of the storagenode to debian, it's best to switch the base image of all our docker images to debian as well for consistency; less drift across them and keeps the push target consistent. Change-Id: If3adf7a57dc59f19ef2221b892f340d919798fc5 --- Makefile | 28 ++++++++++++++-------------- cmd/multinode/Dockerfile | 7 ++++--- cmd/multinode/entrypoint | 2 +- cmd/satellite/Dockerfile | 7 ++++--- cmd/satellite/entrypoint | 6 +++--- cmd/versioncontrol/Dockerfile | 2 +- cmd/versioncontrol/entrypoint | 2 +- 7 files changed, 28 insertions(+), 26 deletions(-) diff --git a/Makefile b/Makefile index c453b8b26..11baff408 100644 --- a/Makefile +++ b/Makefile @@ -197,8 +197,8 @@ images: multinode-image satellite-image storagenode-image versioncontrol-image # multinode-image: multinode_linux_arm multinode_linux_arm64 multinode_linux_amd64 ## Build multinode Docker image ${DOCKER_BUILD} --pull=true -t storjlabs/multinode:${TAG}${CUSTOMTAG}-amd64 \ -f cmd/multinode/Dockerfile . - ${DOCKER_BUILD} --pull=true -t storjlabs/multinode:${TAG}${CUSTOMTAG}-arm32v6 \ - --build-arg=GOARCH=arm --build-arg=DOCKER_ARCH=arm32v6 \ + ${DOCKER_BUILD} --pull=true -t storjlabs/multinode:${TAG}${CUSTOMTAG}-arm32v5 \ + --build-arg=GOARCH=arm --build-arg=DOCKER_ARCH=arm32v5 \ -f cmd/multinode/Dockerfile . ${DOCKER_BUILD} --pull=true -t storjlabs/multinode:${TAG}${CUSTOMTAG}-arm64v8 \ --build-arg=GOARCH=arm64 --build-arg=DOCKER_ARCH=arm64v8 \ @@ -208,8 +208,8 @@ multinode-image: multinode_linux_arm multinode_linux_arm64 multinode_linux_amd64 satellite-image: satellite_linux_arm satellite_linux_arm64 satellite_linux_amd64 ## Build satellite Docker image ${DOCKER_BUILD} --pull=true -t storjlabs/satellite:${TAG}${CUSTOMTAG}-amd64 \ -f cmd/satellite/Dockerfile . - ${DOCKER_BUILD} --pull=true -t storjlabs/satellite:${TAG}${CUSTOMTAG}-arm32v6 \ - --build-arg=GOARCH=arm --build-arg=DOCKER_ARCH=arm32v6 \ + ${DOCKER_BUILD} --pull=true -t storjlabs/satellite:${TAG}${CUSTOMTAG}-arm32v5 \ + --build-arg=GOARCH=arm --build-arg=DOCKER_ARCH=arm32v5 \ -f cmd/satellite/Dockerfile . ${DOCKER_BUILD} --pull=true -t storjlabs/satellite:${TAG}${CUSTOMTAG}-arm64v8 \ --build-arg=GOARCH=arm64 --build-arg=DOCKER_ARCH=arm64v8 \ @@ -221,7 +221,7 @@ storagenode-image: ## Build storagenode Docker image --build-arg=GOARCH=amd64 \ -f cmd/storagenode/Dockerfile . ${DOCKER_BUILD} --pull=true -t storjlabs/storagenode:${TAG}${CUSTOMTAG}-arm32v5 \ - --build-arg=GOARCH=arm --build-arg=DOCKER_ARCH=arm32v5 --build-arg=DOCKER_PLATFORM=linux/arm/v6 \ + --build-arg=GOARCH=arm --build-arg=DOCKER_ARCH=arm32v5 --build-arg=DOCKER_PLATFORM=linux/arm/v5 \ -f cmd/storagenode/Dockerfile . ${DOCKER_BUILD} --pull=true -t storjlabs/storagenode:${TAG}${CUSTOMTAG}-arm64v8 \ --build-arg=GOARCH=arm64 --build-arg=DOCKER_ARCH=arm64v8 --build-arg=DOCKER_PLATFORM=linux/arm64 \ @@ -249,7 +249,7 @@ push-storagenode-base-image: ## Push the storagenode base image to dockerhub docker manifest push --purge storjlabs/storagenode-base:latest-amd64 # create, annotate and push manifests for latest-arm32v5 docker manifest create storjlabs/storagenode-base:latest-arm32v5 storjlabs/storagenode-base:${GIT_TAG}${CUSTOMTAG}-arm32v5 - docker manifest annotate storjlabs/storagenode-base:latest-arm32v5 storjlabs/storagenode-base:${GIT_TAG}${CUSTOMTAG}-arm32v5 --os linux --arch arm --variant v6 + docker manifest annotate storjlabs/storagenode-base:latest-arm32v5 storjlabs/storagenode-base:${GIT_TAG}${CUSTOMTAG}-arm32v5 --os linux --arch arm --variant v5 docker manifest push --purge storjlabs/storagenode-base:latest-arm32v5 # create, annotate and push manifests for latest-arm64v8 docker manifest create storjlabs/storagenode-base:latest-arm64v8 storjlabs/storagenode-base:${GIT_TAG}${CUSTOMTAG}-arm64v8 @@ -262,7 +262,7 @@ push-storagenode-base-image: ## Push the storagenode base image to dockerhub storjlabs/storagenode-base:${GIT_TAG}${CUSTOMTAG}-arm32v5 \ storjlabs/storagenode-base:${GIT_TAG}${CUSTOMTAG}-arm64v8 \ && docker manifest annotate storjlabs/storagenode-base:$$t storjlabs/storagenode-base:${GIT_TAG}${CUSTOMTAG}-amd64 --os linux --arch amd64 \ - && docker manifest annotate storjlabs/storagenode-base:$$t storjlabs/storagenode-base:${GIT_TAG}${CUSTOMTAG}-arm32v5 --os linux --arch arm --variant v6 \ + && docker manifest annotate storjlabs/storagenode-base:$$t storjlabs/storagenode-base:${GIT_TAG}${CUSTOMTAG}-arm32v5 --os linux --arch arm --variant v5 \ && docker manifest annotate storjlabs/storagenode-base:$$t storjlabs/storagenode-base:${GIT_TAG}${CUSTOMTAG}-arm64v8 --os linux --arch arm64 --variant v8 \ && docker manifest push --purge storjlabs/storagenode-base:$$t \ ; done @@ -271,8 +271,8 @@ push-storagenode-base-image: ## Push the storagenode base image to dockerhub versioncontrol-image: versioncontrol_linux_arm versioncontrol_linux_arm64 versioncontrol_linux_amd64 ## Build versioncontrol Docker image ${DOCKER_BUILD} --pull=true -t storjlabs/versioncontrol:${TAG}${CUSTOMTAG}-amd64 \ -f cmd/versioncontrol/Dockerfile . - ${DOCKER_BUILD} --pull=true -t storjlabs/versioncontrol:${TAG}${CUSTOMTAG}-arm32v6 \ - --build-arg=GOARCH=arm --build-arg=DOCKER_ARCH=arm32v6 \ + ${DOCKER_BUILD} --pull=true -t storjlabs/versioncontrol:${TAG}${CUSTOMTAG}-arm32v5 \ + --build-arg=GOARCH=arm --build-arg=DOCKER_ARCH=arm32v5 \ -f cmd/versioncontrol/Dockerfile . ${DOCKER_BUILD} --pull=true -t storjlabs/versioncontrol:${TAG}${CUSTOMTAG}-arm64v8 \ --build-arg=GOARCH=arm64 --build-arg=DOCKER_ARCH=arm64v8 \ @@ -371,19 +371,19 @@ sign-windows-installer: ##@ Deploy .PHONY: push-images -push-images: push-storagenode-images ## Push Docker images to Docker Hub (jenkins) +push-images: ## Push Docker images to Docker Hub (jenkins) # images have to be pushed before a manifest can be created - for c in multinode satellite uplink versioncontrol ; do \ + for c in multinode satellite uplink storagenode versioncontrol ; do \ docker push storjlabs/$$c:${TAG}${CUSTOMTAG}-amd64 \ - && docker push storjlabs/$$c:${TAG}${CUSTOMTAG}-arm32v6 \ + && docker push storjlabs/$$c:${TAG}${CUSTOMTAG}-arm32v5 \ && docker push storjlabs/$$c:${TAG}${CUSTOMTAG}-arm64v8 \ && for t in ${TAG}${CUSTOMTAG} ${LATEST_TAG}; do \ docker manifest create storjlabs/$$c:$$t \ storjlabs/$$c:${TAG}${CUSTOMTAG}-amd64 \ - storjlabs/$$c:${TAG}${CUSTOMTAG}-arm32v6 \ + storjlabs/$$c:${TAG}${CUSTOMTAG}-arm32v5 \ storjlabs/$$c:${TAG}${CUSTOMTAG}-arm64v8 \ && docker manifest annotate storjlabs/$$c:$$t storjlabs/$$c:${TAG}${CUSTOMTAG}-amd64 --os linux --arch amd64 \ - && docker manifest annotate storjlabs/$$c:$$t storjlabs/$$c:${TAG}${CUSTOMTAG}-arm32v6 --os linux --arch arm --variant v6 \ + && docker manifest annotate storjlabs/$$c:$$t storjlabs/$$c:${TAG}${CUSTOMTAG}-arm32v5 --os linux --arch arm --variant v5 \ && docker manifest annotate storjlabs/$$c:$$t storjlabs/$$c:${TAG}${CUSTOMTAG}-arm64v8 --os linux --arch arm64 --variant v8 \ && docker manifest push --purge storjlabs/$$c:$$t \ ; done \ diff --git a/cmd/multinode/Dockerfile b/cmd/multinode/Dockerfile index 31294b46b..bf4d5e879 100644 --- a/cmd/multinode/Dockerfile +++ b/cmd/multinode/Dockerfile @@ -1,10 +1,11 @@ ARG DOCKER_ARCH # Fetch ca-certificates file for arch independent builds below -FROM alpine as ca-cert -RUN apk -U add ca-certificates +FROM debian:buster-slim as ca-cert +RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates +RUN update-ca-certificates -FROM ${DOCKER_ARCH:-amd64}/alpine +FROM ${DOCKER_ARCH:-amd64}/debian:buster-slim ARG TAG ARG GOARCH ENV GOARCH ${GOARCH} diff --git a/cmd/multinode/entrypoint b/cmd/multinode/entrypoint index 8d1ea245f..d00f96eda 100755 --- a/cmd/multinode/entrypoint +++ b/cmd/multinode/entrypoint @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -euo pipefail if [[ ! -f "/app/config/config.yaml" ]]; then diff --git a/cmd/satellite/Dockerfile b/cmd/satellite/Dockerfile index 5d443e556..350b2fed8 100644 --- a/cmd/satellite/Dockerfile +++ b/cmd/satellite/Dockerfile @@ -8,10 +8,11 @@ RUN npm install RUN npm run build # Fetch ca-certificates file for arch independent builds below -FROM alpine as ca-cert -RUN apk -U add ca-certificates +FROM debian:buster-slim as ca-cert +RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates +RUN update-ca-certificates -FROM ${DOCKER_ARCH:-amd64}/alpine +FROM ${DOCKER_ARCH:-amd64}/debian:buster-slim ARG TAG ARG GOARCH ENV GOARCH ${GOARCH} diff --git a/cmd/satellite/entrypoint b/cmd/satellite/entrypoint index a6164f83f..6d7ebc1d1 100755 --- a/cmd/satellite/entrypoint +++ b/cmd/satellite/entrypoint @@ -1,13 +1,13 @@ -#!/bin/sh +#!/bin/bash set -euo pipefail SETUP_PARAMS="" -if [[ -n "${IDENTITY_ADDR:-}" ]]; then +if [ -n "${IDENTITY_ADDR:-}" ]; then export STORJ_SERVER_ADDRESS="${IDENTITY_ADDR}" fi -if [[ ! -f "${CONF_PATH}/config.yaml" ]]; then +if [ ! -f "${CONF_PATH}/config.yaml" ]; then ./satellite setup $SETUP_PARAMS fi diff --git a/cmd/versioncontrol/Dockerfile b/cmd/versioncontrol/Dockerfile index d6c6bd18f..2dae5f13d 100644 --- a/cmd/versioncontrol/Dockerfile +++ b/cmd/versioncontrol/Dockerfile @@ -1,5 +1,5 @@ ARG DOCKER_ARCH -FROM ${DOCKER_ARCH:-amd64}/alpine +FROM ${DOCKER_ARCH:-amd64}/debian:buster-slim ARG TAG ARG GOARCH ENV GOARCH ${GOARCH} diff --git a/cmd/versioncontrol/entrypoint b/cmd/versioncontrol/entrypoint index 71d46b020..88b756158 100755 --- a/cmd/versioncontrol/entrypoint +++ b/cmd/versioncontrol/entrypoint @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash if [ ! -f $HOME/.local/share/storj/versioncontrol/config.yaml ]; then /app/versioncontrol setup