Created
May 3, 2017 12:55
-
-
Save rtacconi/d336e8f52ae075a056ce29b69145aabd 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.4 | |
ENV RUBY_VERSION 2.4.1 | |
ENV RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 | |
ENV RUBYGEMS_VERSION 2.6.12 | |
# 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" | |
ENV BUNDLER_VERSION 1.14.6 | |
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