From 659c77d58eba59ee4512b08e1c925f839fdc6de5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Tue, 19 May 2020 20:34:01 +0200 Subject: [PATCH 1/9] [Makefile] Add Dockerfiles as dependencies for build context --- docker/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/Makefile b/docker/Makefile index 58ce95e6..5bc366aa 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -45,13 +45,13 @@ alpine: ## Build alpine images alpine: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine.tar.gz alpine: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine-build.tar.gz -$(BUILD_CONTEXT)/ubuntu32: $(BUILD_CONTEXT)/ubuntu32/crystal.deb +$(BUILD_CONTEXT)/ubuntu32: ubuntu.Dockerfile $(BUILD_CONTEXT)/ubuntu32/crystal.deb cp ubuntu.Dockerfile $@/Dockerfile -$(BUILD_CONTEXT)/ubuntu64: $(BUILD_CONTEXT)/ubuntu64/crystal.deb +$(BUILD_CONTEXT)/ubuntu64: ubuntu.Dockerfile $(BUILD_CONTEXT)/ubuntu64/crystal.deb cp ubuntu.Dockerfile $@/Dockerfile -$(BUILD_CONTEXT)/alpine: $(BUILD_CONTEXT)/alpine/crystal.tar.gz +$(BUILD_CONTEXT)/alpine: alpine.Dockerfile $(BUILD_CONTEXT)/alpine/crystal.tar.gz cp alpine.Dockerfile $@/Dockerfile %/crystal.deb: From 5bd4a57fccd0f35dbd70102943f4d11c59185876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Tue, 19 May 2020 20:54:46 +0200 Subject: [PATCH 2/9] Update ubuntu64 Dockerfile base image to Focal (20.04 LTS) Ubuntu has dropped i386 architecture in 19.10, so there won't be a 20.04 LTS release for i386. This commit also adds a separate Dockerfile for i386 to maintain them separately. --- docker/Makefile | 6 +++--- docker/ubuntu32.Dockerfile | 31 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 docker/ubuntu32.Dockerfile diff --git a/docker/Makefile b/docker/Makefile index 5bc366aa..546d1fca 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -15,7 +15,7 @@ DOCKER_REPOSITORY ?= ## Docker hub repository to commit image OUTPUT_DIR := build BUILD_CONTEXT := $(CURDIR)/build-context -BUILD_ARGS_UBUNTU64 := --build-arg crystal_deb=crystal.deb $(BUILD_CONTEXT)/ubuntu64 --build-arg base_docker_image=ubuntu:bionic +BUILD_ARGS_UBUNTU64 := --build-arg crystal_deb=crystal.deb $(BUILD_CONTEXT)/ubuntu64 --build-arg base_docker_image=ubuntu:focal BUILD_ARGS_UBUNTU32 := --build-arg crystal_deb=crystal.deb $(BUILD_CONTEXT)/ubuntu32 --build-arg base_docker_image=i386/ubuntu:bionic BUILD_ARGS_ALPINE := --build-arg crystal_targz=crystal.tar.gz $(BUILD_CONTEXT)/alpine DOCKER_TAG_UBUNTU := $(DOCKER_REPOSITORY):$(DOCKER_TAG) @@ -45,8 +45,8 @@ alpine: ## Build alpine images alpine: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine.tar.gz alpine: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine-build.tar.gz -$(BUILD_CONTEXT)/ubuntu32: ubuntu.Dockerfile $(BUILD_CONTEXT)/ubuntu32/crystal.deb - cp ubuntu.Dockerfile $@/Dockerfile +$(BUILD_CONTEXT)/ubuntu32: ubuntu32.Dockerfile $(BUILD_CONTEXT)/ubuntu32/crystal.deb + cp ubuntu32.Dockerfile $@/Dockerfile $(BUILD_CONTEXT)/ubuntu64: ubuntu.Dockerfile $(BUILD_CONTEXT)/ubuntu64/crystal.deb cp ubuntu.Dockerfile $@/Dockerfile diff --git a/docker/ubuntu32.Dockerfile b/docker/ubuntu32.Dockerfile new file mode 100644 index 00000000..9869d43d --- /dev/null +++ b/docker/ubuntu32.Dockerfile @@ -0,0 +1,31 @@ +ARG base_docker_image +FROM ${base_docker_image} as runtime + +RUN \ + apt-get update && \ + apt-get install -y apt-transport-https && \ + apt-get update && \ + DEBIAN_FRONTEND=noninteractive \ + apt-get install -y tzdata gcc pkg-config libssl-dev libxml2-dev libyaml-dev libgmp-dev git make \ + libpcre3-dev libevent-dev && \ + apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +ARG crystal_deb +COPY ${crystal_deb} /tmp/crystal.deb +# nightly packages do not have valid version numbers +RUN dpkg --force-bad-version -i /tmp/crystal.deb + +CMD ["/bin/sh"] + +FROM runtime as build + +RUN \ + apt-get update && \ + apt-get install -y build-essential llvm-8 lld-8 libedit-dev gdb && \ + apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN ln -sf /usr/bin/ld.lld-8 /usr/bin/ld.lld + +ENV LIBRARY_PATH=/usr/lib/crystal/lib/ + +CMD ["/bin/sh"] From 10510077544260f88dce90f28714dc0ab6e81657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Tue, 19 May 2020 21:01:44 +0200 Subject: [PATCH 3/9] Update ubuntu Dockerfiles to LLVM 10 --- docker/ubuntu.Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/ubuntu.Dockerfile b/docker/ubuntu.Dockerfile index e0da494f..ac9fa238 100644 --- a/docker/ubuntu.Dockerfile +++ b/docker/ubuntu.Dockerfile @@ -21,9 +21,9 @@ FROM runtime as build RUN \ apt-get update && \ - apt-get install -y build-essential llvm-8 lld-8 libedit-dev gdb && \ + apt-get install -y build-essential llvm-10 lld-10 libedit-dev gdb && \ apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* -RUN ln -sf /usr/bin/ld.lld-8 /usr/bin/ld.lld +RUN ln -sf /usr/bin/ld.lld-10 /usr/bin/ld.lld CMD ["/bin/sh"] From edd46dc13aa918fc71ea34cbdf3c52590cf9c635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Fri, 7 Aug 2020 01:41:29 +0200 Subject: [PATCH 4/9] Update Alpine to 3.12 and use llvm10 --- docker/alpine.Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/alpine.Dockerfile b/docker/alpine.Dockerfile index cffb72c7..15ea40fc 100644 --- a/docker/alpine.Dockerfile +++ b/docker/alpine.Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.11 as runtime +FROM alpine:3.12 as runtime RUN \ apk add --update --no-cache --force-overwrite \ @@ -31,6 +31,6 @@ FROM runtime as build RUN \ apk add --update --no-cache --force-overwrite \ - llvm-dev llvm-static g++ + llvm10-dev llvmi10-static g++ CMD ["/bin/sh"] From fdafc4bd27e39bae3f52aa4f0194a59dc524fe82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Thu, 13 Aug 2020 23:20:11 +0200 Subject: [PATCH 5/9] fixup! Update Alpine to 3.12 and use llvm10 --- docker/alpine.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/alpine.Dockerfile b/docker/alpine.Dockerfile index 15ea40fc..64063a5a 100644 --- a/docker/alpine.Dockerfile +++ b/docker/alpine.Dockerfile @@ -31,6 +31,6 @@ FROM runtime as build RUN \ apk add --update --no-cache --force-overwrite \ - llvm10-dev llvmi10-static g++ + llvm10-dev llvm10-static g++ CMD ["/bin/sh"] From f0e5e3e371032cc5c5b536d0088bdf1d77665aec Mon Sep 17 00:00:00 2001 From: "Brian J. Cardiff" Date: Fri, 7 Aug 2020 15:05:29 -0300 Subject: [PATCH 6/9] Add missing libz-dev package in docker images --- docker/ubuntu.Dockerfile | 2 +- docker/ubuntu32.Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/ubuntu.Dockerfile b/docker/ubuntu.Dockerfile index ac9fa238..ad257d60 100644 --- a/docker/ubuntu.Dockerfile +++ b/docker/ubuntu.Dockerfile @@ -7,7 +7,7 @@ RUN \ apt-get update && \ DEBIAN_FRONTEND=noninteractive \ apt-get install -y tzdata gcc pkg-config libssl-dev libxml2-dev libyaml-dev libgmp-dev git make \ - libpcre3-dev libevent-dev && \ + libpcre3-dev libevent-dev libz-dev && \ apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ARG crystal_deb diff --git a/docker/ubuntu32.Dockerfile b/docker/ubuntu32.Dockerfile index 9869d43d..5c0d05f1 100644 --- a/docker/ubuntu32.Dockerfile +++ b/docker/ubuntu32.Dockerfile @@ -7,7 +7,7 @@ RUN \ apt-get update && \ DEBIAN_FRONTEND=noninteractive \ apt-get install -y tzdata gcc pkg-config libssl-dev libxml2-dev libyaml-dev libgmp-dev git make \ - libpcre3-dev libevent-dev && \ + libpcre3-dev libevent-dev libz-dev && \ apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ARG crystal_deb From f11f244c45443d639111c760d8d19aa957e813fe Mon Sep 17 00:00:00 2001 From: "Brian J. Cardiff" Date: Fri, 7 Aug 2020 19:12:12 -0300 Subject: [PATCH 7/9] Update alpine and llvm10 in linux tar.gz packages --- linux/Dockerfile | 4 ++-- linux/Makefile | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/linux/Dockerfile b/linux/Dockerfile index 5df065a5..ef8dd45c 100644 --- a/linux/Dockerfile +++ b/linux/Dockerfile @@ -43,11 +43,11 @@ RUN sed -i 's|--list -- "$@"|--list "$@"|' /usr/bin/ldd # Install dependencies RUN apk add --no-cache \ # Statically-compiled llvm - llvm8-dev llvm8-static \ + llvm10-dev llvm10-static \ # Static zlib, libyaml, libxml2, pcre, and libevent zlib-dev yaml-dev libxml2-dev pcre-dev libevent-static \ # Build tools - git gcc g++ make automake libtool autoconf bash coreutils + git gcc g++ make automake libtool autoconf bash coreutils curl ARG release ENV CFLAGS="-fPIC -pipe ${release:+-O2}" diff --git a/linux/Makefile b/linux/Makefile index 48ff16c2..87400306 100644 --- a/linux/Makefile +++ b/linux/Makefile @@ -48,14 +48,14 @@ BUILD_ARGS_COMMON = $(DOCKER_BUILD_ARGS) \ BUILD_ARGS64 = $(BUILD_ARGS_COMMON) \ --build-arg previous_crystal_release=$(PREVIOUS_CRYSTAL_RELEASE_LINUX64_TARGZ) \ --build-arg debian_image=debian:10 \ - --build-arg alpine_image=alpine:3.10 \ + --build-arg alpine_image=alpine:3.12 \ --build-arg musl_target=x86_64-linux-musl \ --build-arg gnu_target=x86_64-unknown-linux-gnu BUILD_ARGS32 = $(BUILD_ARGS_COMMON) \ --build-arg previous_crystal_release=$(PREVIOUS_CRYSTAL_RELEASE_LINUX32_TARGZ) \ --build-arg debian_image=i386/debian:10 \ - --build-arg alpine_image=i386/alpine:3.10 \ + --build-arg alpine_image=i386/alpine:3.12 \ --build-arg musl_target=i686-linux-musl \ --build-arg gnu_target=i686-unknown-linux-gnu From e33fb4144ced13c6f4621570ef1f1440b3f89f2c Mon Sep 17 00:00:00 2001 From: "Brian J. Cardiff" Date: Sat, 8 Aug 2020 00:01:06 -0300 Subject: [PATCH 8/9] Update to use zlib-static and yaml-static --- linux/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/Dockerfile b/linux/Dockerfile index ef8dd45c..826c8b13 100644 --- a/linux/Dockerfile +++ b/linux/Dockerfile @@ -45,7 +45,7 @@ RUN apk add --no-cache \ # Statically-compiled llvm llvm10-dev llvm10-static \ # Static zlib, libyaml, libxml2, pcre, and libevent - zlib-dev yaml-dev libxml2-dev pcre-dev libevent-static \ + zlib-static yaml-static libxml2-dev pcre-dev libevent-static \ # Build tools git gcc g++ make automake libtool autoconf bash coreutils curl From b9c12c0aead4f6231c120059f74ec2e0512f654b Mon Sep 17 00:00:00 2001 From: "Brian J. Cardiff" Date: Sat, 8 Aug 2020 14:20:14 -0300 Subject: [PATCH 9/9] Avoid using shards to build shards, use curl --- linux/Dockerfile | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/linux/Dockerfile b/linux/Dockerfile index 826c8b13..437a833e 100644 --- a/linux/Dockerfile +++ b/linux/Dockerfile @@ -94,11 +94,10 @@ ARG musl_target RUN git clone https://github.com/crystal-lang/shards \ && cd shards \ && git checkout ${shards_version} \ - && make lib \ + && make SHARDS=false CRYSTAL=/crystal/bin/crystal \ + FLAGS="--stats --target ${musl_target} --static ${release:+--release}" \ \ - && /crystal/bin/crystal build --stats --target ${musl_target} \ - ./src/shards.cr -o shards --static ${release:+--release} \ - && ([ "$(ldd shards | wc -l)" -eq "1" ] || { echo 'shards is not statically linked'; ldd shards; exit 1; }) + && ([ "$(ldd bin/shards | wc -l)" -eq "1" ] || { echo 'shards is not statically linked'; ldd bin/shards; exit 1; }) COPY files/crystal-wrapper /output/bin/crystal COPY --from=debian /bdwgc/.libs/libgc.a /libgc-debian.a @@ -120,7 +119,7 @@ RUN \ && cp /crystal/.build/crystal /output/lib/crystal/bin/crystal \ \ # Copy shards to /lib/crystal/bin/ - && cp /shards/shards /output/lib/crystal/bin/shards \ + && cp /shards/bin/shards /output/lib/crystal/bin/shards \ && ln -s ../lib/crystal/bin/shards /output/bin/shards \ \ # Copy stdlib to /share/crystal/src/