-
-
Save hooopo/2abea24e226df9df00ca620e41db8994 to your computer and use it in GitHub Desktop.
Alpine Linux, jemalloc, Ruby 2.4.1 segmentation fault
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM alpine:3.4 | |
# skip installing gem documentation | |
RUN mkdir -p /usr/local/etc \ | |
&& { \ | |
echo 'install: --no-document'; \ | |
echo 'update: --no-document'; \ | |
} >> /usr/local/etc/gemrc | |
ENV RUBY_MAJOR 2.5 | |
ENV RUBY_VERSION 2.5.1 | |
ENV RUBY_DOWNLOAD_SHA256 886ac5eed41e3b5fc699be837b0087a6a5a3d10f464087560d2d21b3e71b754d | |
ENV RUBYGEMS_VERSION 2.7.7 | |
ENV BUNDLER_VERSION 1.16.2 | |
# 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 apk update apk add jemalloc jemalloc-dev | |
RUN set -ex \ | |
\ | |
&& apk add --no-cache --virtual .ruby-builddeps \ | |
autoconf \ | |
bison \ | |
bzip2 \ | |
bzip2-dev \ | |
ca-certificates \ | |
coreutils \ | |
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 \ | |
yaml-dev \ | |
zlib-dev \ | |
xz \ | |
jemalloc-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 -c - \ | |
\ | |
&& 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 \ | |
\ | |
# 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 \ | |
# the configure script does not detect isnan/isinf as macros | |
&& ac_cv_func_isnan=yes ac_cv_func_isinf=yes \ | |
./configure --disable-install-doc --enable-shared --with-jemalloc \ | |
&& make -j"$(getconf _NPROCESSORS_ONLN)" \ | |
&& make install \ | |
\ | |
&& runDeps="$( \ | |
scanelf --needed --nobanner --recursive /usr/local \ | |
| awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \ | |
| sort -u \ | |
| xargs -r apk info --installed \ | |
| sort -u \ | |
)" \ | |
&& apk add --virtual .ruby-rundeps $runDeps \ | |
bzip2 \ | |
ca-certificates \ | |
libffi-dev \ | |
openssl-dev \ | |
yaml-dev \ | |
procps \ | |
zlib-dev \ | |
&& apk del .ruby-builddeps \ | |
&& cd / \ | |
&& rm -r /usr/src/ruby \ | |
\ | |
&& gem update --system "$RUBYGEMS_VERSION" | |
RUN gem install bundler --version "$BUNDLER_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_BIN="$GEM_HOME/bin" \ | |
BUNDLE_SILENCE_ROOT_WARNING=1 \ | |
BUNDLE_APP_CONFIG="$GEM_HOME" | |
ENV PATH $BUNDLE_BIN:$PATH | |
RUN mkdir -p "$GEM_HOME" "$BUNDLE_BIN" \ | |
&& chmod 777 "$GEM_HOME" "$BUNDLE_BIN" | |
CMD [ "irb" ] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment