From d25cb1006751eb424ef7ad77938633a74eccf16b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Trzci=C5=84ski?= Date: Fri, 22 Jan 2021 12:02:46 +0100 Subject: [PATCH] Apply thread allocations patch to Ruby 2.7 This makes us to compile Ruby 2.7 manually and apply relevant patch. --- .gitlab-ci.yml | 1 + Dockerfile.custom | 6 +++++ scripts/custom-docker-build | 45 +++++++++++++++++++------------- scripts/install-ruby | 52 +++++++++++++++++++++++++++++++------ 4 files changed, 78 insertions(+), 26 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d7b3eba..abcaf25 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,6 +5,7 @@ default: before_script: - docker login -u "gitlab-ci-token" -p "$CI_JOB_TOKEN" "$CI_REGISTRY" - source scripts/build-helpers.sh + - apk add -U bash tags: - gitlab-org-docker diff --git a/Dockerfile.custom b/Dockerfile.custom index c44c031..2b6c8bf 100644 --- a/Dockerfile.custom +++ b/Dockerfile.custom @@ -13,6 +13,12 @@ RUN /scripts/install-essentials ENV PATH $PATH:/usr/local/go/bin +# Ruby +ARG RUBY_VERSION +ARG RUBY_DOWNLOAD_SHA256 + +RUN if [ -n "$RUBY_VERSION" ]; then /scripts/install-ruby $RUBY_VERSION $RUBY_DOWNLOAD_SHA256 && ruby --version; fi + # Git ARG GIT_VERSION ARG GIT_DOWNLOAD_URL diff --git a/scripts/custom-docker-build b/scripts/custom-docker-build index 6ff73bd..02ca47f 100755 --- a/scripts/custom-docker-build +++ b/scripts/custom-docker-build @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -e IFS=$'\n\t' @@ -228,29 +228,38 @@ function print_pgbouncer_args() { printf -- "--build-arg PGBOUNCER_DOWNLOAD_SHA256=%s " "$PGBOUNCER_DOWNLOAD_SHA256" } -function parse_arguments() { - read base - read base_version +function print_ruby_args() { + case "$1" in + 2.6.*) + CUSTOM_IMAGE_NAME=debian + CUSTOM_IMAGE_VERSION=stretch + RUBY_VERSION="2.6.6" + RUBY_DOWNLOAD_SHA256="5db187882b7ac34016cd48d7032e197f07e4968f406b0690e20193b9b424841f" + ;; - # Lock Ruby to Debian version to pin OpenSSL version - case "$base" in - ruby) - case "$base_version" in - 2.6.*) - base_version="$base_version-stretch" - ;; - *) - base_version="$base_version-buster" - ;; - esac + 2.7.*) + CUSTOM_IMAGE_NAME=debian + CUSTOM_IMAGE_VERSION=buster + RUBY_VERSION="2.7.2" + RUBY_DOWNLOAD_SHA256="1b95ab193cc8f5b5e59d2686cb3d5dcf1ddf2a86cb6950e0b4bdaae5040ec0d6" + ;; + + *) echo "Unknown ruby version $1"; exit 1; esac - printf -- "-f Dockerfile.custom " "$base" - printf -- "--build-arg CUSTOM_IMAGE_NAME=%s " "$base" - printf -- "--build-arg CUSTOM_IMAGE_VERSION=%s " "$base_version" + printf -- "--build-arg CUSTOM_IMAGE_NAME=%s " "$CUSTOM_IMAGE_NAME" + printf -- "--build-arg CUSTOM_IMAGE_VERSION=%s " "$CUSTOM_IMAGE_VERSION" + printf -- "--build-arg RUBY_VERSION=%s " "$RUBY_VERSION" + printf -- "--build-arg RUBY_DOWNLOAD_SHA256=%s " "$RUBY_DOWNLOAD_SHA256" +} + +function parse_arguments() { + printf -- "-f Dockerfile.custom " + while read image; do read version case "$image" in + ruby) print_ruby_args $version ;; golang) print_golang_args $version ;; chrome) print_chrome_args $version ;; docker) print_docker_args $version ;; diff --git a/scripts/install-ruby b/scripts/install-ruby index 7aa1212..5a8a3d6 100755 --- a/scripts/install-ruby +++ b/scripts/install-ruby @@ -1,14 +1,50 @@ #!/bin/bash -set -xeuo pipefail -IFS=$'\n\t' -cd /tmp -wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.2.tar.gz -tar -xvzf ruby-2.2.2.tar.gz +set -xeou pipefail -cd ruby-2.2.2 +# Based on https://github.com/docker-library/ruby/blob/master/2.7/buster/Dockerfile + +RUBY_VERSION=${1} +RUBY_MAJOR=${1%.*} # strip last component +RUBY_DOWNLOAD_SHA256=${2} + +RUBY_DOWNLOAD_URL="https://cache.ruby-lang.org/pub/ruby/${RUBY_MAJOR%-rc}/ruby-$RUBY_VERSION.tar.xz" + +# Download Ruby +curl -fsSL "$RUBY_DOWNLOAD_URL" -o ruby.tar.xz +echo "${RUBY_DOWNLOAD_SHA256} ruby.tar.xz" | sha256sum -c - + +# Skip installing Gem docs +mkdir -p /usr/local/etc +echo 'install: --no-document' >> /usr/local/etc/gemrc +echo 'update: --no-document' >> /usr/local/etc/gemrc + +# Install needed packages +apt-get update +apt-get install -y --no-install-recommends bison dpkg-dev libgdbm-dev ruby + +# Unpack Ruby +mkdir -p /usr/src/ruby +tar -xJf ruby.tar.xz -C /usr/src/ruby --strip-components=1 +rm ruby.tar.xz +cd /usr/src/ruby + +# Apply patches +find /patches/ruby/$RUBY_VERSION -name '*.patch' -print0 | xargs -0 -n1 patch -p1 -i ./configure --enable-shared --disable-install-doc --disable-install-rdoc --disable-install-capi -make install -j 3 +make install -j $(nproc) +# Cleanup cd / -rm -rf /tmp/* +rm -rf /usr/src/ruby +apt-get purge -y --auto-remove ruby + +# Verify +# verify we have no "ruby" packages installed +! dpkg -l | grep -i ruby +[ "$(command -v ruby)" = '/usr/local/bin/ruby' ] + +# rough smoke test +ruby --version +gem --version +bundle --version