diff --git a/.travis.yml b/.travis.yml index a5ac920f5..30d9b7fc2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,25 +4,26 @@ services: docker env: - VERSION=2.7 VARIANT=buster - VERSION=2.7 VARIANT=buster/slim + - VERSION=2.7 VARIANT=alpine3.11 - VERSION=2.7 VARIANT=alpine3.10 - VERSION=2.6 VARIANT=buster - VERSION=2.6 VARIANT=buster/slim - VERSION=2.6 VARIANT=stretch - VERSION=2.6 VARIANT=stretch/slim + - VERSION=2.6 VARIANT=alpine3.11 - VERSION=2.6 VARIANT=alpine3.10 - - VERSION=2.6 VARIANT=alpine3.9 - VERSION=2.5 VARIANT=buster - VERSION=2.5 VARIANT=buster/slim - VERSION=2.5 VARIANT=stretch - VERSION=2.5 VARIANT=stretch/slim + - VERSION=2.5 VARIANT=alpine3.11 - VERSION=2.5 VARIANT=alpine3.10 - - VERSION=2.5 VARIANT=alpine3.9 - VERSION=2.4 VARIANT=buster - VERSION=2.4 VARIANT=buster/slim - VERSION=2.4 VARIANT=stretch - VERSION=2.4 VARIANT=stretch/slim + - VERSION=2.4 VARIANT=alpine3.11 - VERSION=2.4 VARIANT=alpine3.10 - - VERSION=2.4 VARIANT=alpine3.9 install: - git clone --depth 1 https://github.com/docker-library/official-images.git ~/official-images diff --git a/2.4/alpine3.9/Dockerfile b/2.4/alpine3.11/Dockerfile similarity index 99% rename from 2.4/alpine3.9/Dockerfile rename to 2.4/alpine3.11/Dockerfile index 14dd31fd6..ec121f509 100644 --- a/2.4/alpine3.9/Dockerfile +++ b/2.4/alpine3.11/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.9 +FROM alpine:3.11 RUN apk add --no-cache \ gmp-dev diff --git a/2.5/alpine3.9/Dockerfile b/2.5/alpine3.11/Dockerfile similarity index 99% rename from 2.5/alpine3.9/Dockerfile rename to 2.5/alpine3.11/Dockerfile index 8f47b1d86..e7fd3bcf4 100644 --- a/2.5/alpine3.9/Dockerfile +++ b/2.5/alpine3.11/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.9 +FROM alpine:3.11 RUN apk add --no-cache \ gmp-dev diff --git a/2.6/alpine3.9/Dockerfile b/2.6/alpine3.11/Dockerfile similarity index 99% rename from 2.6/alpine3.9/Dockerfile rename to 2.6/alpine3.11/Dockerfile index b7585d129..84c35b148 100644 --- a/2.6/alpine3.9/Dockerfile +++ b/2.6/alpine3.11/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.9 +FROM alpine:3.11 RUN apk add --no-cache \ gmp-dev diff --git a/2.7/alpine3.11/Dockerfile b/2.7/alpine3.11/Dockerfile new file mode 100644 index 000000000..c5f06f649 --- /dev/null +++ b/2.7/alpine3.11/Dockerfile @@ -0,0 +1,132 @@ +FROM alpine:3.11 + +RUN apk add --no-cache \ + gmp-dev + +# skip installing gem documentation +RUN set -eux; \ + mkdir -p /usr/local/etc; \ + { \ + echo 'install: --no-document'; \ + echo 'update: --no-document'; \ + } >> /usr/local/etc/gemrc + +ENV RUBY_MAJOR 2.7 +ENV RUBY_VERSION 2.7.0 +ENV RUBY_DOWNLOAD_SHA256 27d350a52a02b53034ca0794efe518667d558f152656c2baaf08f3d0c8b02343 + +# some of ruby's build scripts are written in ruby +# we purge system ruby later to make sure our final image uses what we just built +# readline-dev vs libedit-dev: https://bugs.ruby-lang.org/issues/11869 and https://github.com/docker-library/ruby/issues/75 +RUN set -eux; \ + \ + apk add --no-cache --virtual .ruby-builddeps \ + autoconf \ + bison \ + bzip2 \ + bzip2-dev \ + ca-certificates \ + coreutils \ + dpkg-dev dpkg \ + gcc \ + gdbm-dev \ + glib-dev \ + libc-dev \ + libffi-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + make \ + ncurses-dev \ + openssl \ + openssl-dev \ + procps \ + readline-dev \ + ruby \ + tar \ + xz \ + yaml-dev \ + zlib-dev \ + ; \ + \ + wget -O ruby.tar.xz "https://cache.ruby-lang.org/pub/ruby/${RUBY_MAJOR%-rc}/ruby-$RUBY_VERSION.tar.xz"; \ + echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.xz" | sha256sum --check --strict; \ + \ + 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; \ + \ +# https://github.com/docker-library/ruby/issues/196 +# https://bugs.ruby-lang.org/issues/14387#note-13 (patch source) +# https://bugs.ruby-lang.org/issues/14387#note-16 ("Therefore ncopa's patch looks good for me in general." -- only breaks glibc which doesn't matter here) + wget -O 'thread-stack-fix.patch' 'https://bugs.ruby-lang.org/attachments/download/7081/0001-thread_pthread.c-make-get_main_stack-portable-on-lin.patch'; \ + echo '3ab628a51d92fdf0d2b5835e93564857aea73e0c1de00313864a94a6255cb645 *thread-stack-fix.patch' | sha256sum --check --strict; \ + patch -p1 -i thread-stack-fix.patch; \ + rm thread-stack-fix.patch; \ + \ +# hack in "ENABLE_PATH_CHECK" disabling to suppress: +# warning: Insecure world writable dir + { \ + echo '#define ENABLE_PATH_CHECK 0'; \ + echo; \ + cat file.c; \ + } > file.c.new; \ + mv file.c.new file.c; \ + \ + autoconf; \ + gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ +# the configure script does not detect isnan/isinf as macros + export ac_cv_func_isnan=yes ac_cv_func_isinf=yes; \ + ./configure \ + --build="$gnuArch" \ + --disable-install-doc \ + --enable-shared \ + ; \ + make -j "$(nproc)"; \ + make install; \ + \ + runDeps="$( \ + scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ + | tr ',' '\n' \ + | sort -u \ + | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ + )"; \ + apk add --no-network --virtual .ruby-rundeps \ + $runDeps \ + bzip2 \ + ca-certificates \ + libffi-dev \ + procps \ + yaml-dev \ + zlib-dev \ + ; \ + apk del --no-network .ruby-builddeps; \ + \ + cd /; \ + rm -r /usr/src/ruby; \ +# verify we have no "ruby" packages installed + ! apk --no-network list --installed \ + | grep -v '^[.]ruby-rundeps' \ + | grep -i ruby \ + ; \ + [ "$(command -v ruby)" = '/usr/local/bin/ruby' ]; \ +# rough smoke test + ruby --version; \ + gem --version; \ + bundle --version + +# install things globally, for great justice +# and don't create ".bundle" in all our apps +ENV GEM_HOME /usr/local/bundle +ENV BUNDLE_PATH="$GEM_HOME" \ + BUNDLE_SILENCE_ROOT_WARNING=1 \ + BUNDLE_APP_CONFIG="$GEM_HOME" +# path recommendation: https://github.com/bundler/bundler/pull/6469#issuecomment-383235438 +ENV PATH $GEM_HOME/bin:$BUNDLE_PATH/gems/bin:$PATH +# adjust permissions of a few directories for running "gem install" as an arbitrary user +RUN mkdir -p "$GEM_HOME" && chmod 777 "$GEM_HOME" +# (BUNDLE_PATH = GEM_HOME, no need to mkdir/chown both) + +CMD [ "irb" ] diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh index d4c817faa..b6bdf9868 100755 --- a/generate-stackbrew-library.sh +++ b/generate-stackbrew-library.sh @@ -10,7 +10,7 @@ defaultDebianSuite='buster' declare -A debianSuites=( #[2.7]='buster' ) -defaultAlpineVersion='3.10' +defaultAlpineVersion='3.11' declare -A alpineVersion=( #[2.3]='3.8' ) @@ -80,7 +80,7 @@ join() { for version in "${versions[@]}"; do for v in \ {buster,stretch}{,/slim} \ - alpine{3.10,3.9} \ + alpine{3.11,3.10} \ ; do dir="$version/$v" variant="$(basename "$v")" diff --git a/update.sh b/update.sh index ae810072f..5be166cbd 100755 --- a/update.sh +++ b/update.sh @@ -71,7 +71,7 @@ for version in "${versions[@]}"; do echo "$version: $fullVersion; $shaVal" for v in \ - alpine{3.9,3.10} \ + alpine{3.10,3.11} \ {stretch,buster}{/slim,} \ ; do dir="$version/$v"