Last active
April 3, 2021 18:15
-
-
Save jeshan/6c70fd0b94b6e521a54b6c71454ebd4c to your computer and use it in GitHub Desktop.
Demonstrates bug https://github.com/oracle/truffleruby/issues/2247 . v1 builds successfully but v2 throws exception in issue
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 buildpack-deps:buster | |
# 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 LANG C.UTF-8 | |
ENV RUBY_MAJOR 2.7 | |
ENV RUBY_VERSION 2.7.2 | |
ENV RUBY_DOWNLOAD_SHA256 1b95ab193cc8f5b5e59d2686cb3d5dcf1ddf2a86cb6950e0b4bdaae5040ec0d6 | |
WORKDIR /app | |
COPY graalvm-ce-java11-linux-amd64-21.0.0.tar.gz graalvm.tar.gz | |
COPY llvm-toolchain-installable-java11-linux-amd64-21.0.0.jar llvm-toolchain.jar | |
RUN tar zxvf graalvm.tar.gz | |
ENV GRAALVM_HOME /app/graalvm-ce-java11-21.0.0 | |
RUN $GRAALVM_HOME/bin/gu install -L llvm-toolchain.jar | |
# 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 | |
RUN set -eux; \ | |
\ | |
savedAptMark="$(apt-mark showmanual)"; \ | |
apt-get update; \ | |
apt-get install -y --no-install-recommends \ | |
bison \ | |
dpkg-dev \ | |
libgdbm-dev \ | |
ruby \ | |
; \ | |
rm -rf /var/lib/apt/lists/*; \ | |
\ | |
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; \ | |
\ | |
# 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)"; \ | |
CC=$GRAALVM_HOME/languages/llvm/native/bin/clang cflags="-flto=full" ./configure \ | |
--build="$gnuArch" \ | |
--disable-install-doc \ | |
--enable-shared \ | |
--with-out-ext=bigdecimal \ | |
; \ | |
make -j "$(nproc)"; \ | |
make install; \ | |
\ | |
apt-mark auto '.*' > /dev/null; \ | |
apt-mark manual $savedAptMark > /dev/null; \ | |
find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' \ | |
| awk '/=>/ { print $(NF-1) }' \ | |
| sort -u \ | |
| xargs -r dpkg-query --search \ | |
| cut -d: -f1 \ | |
| sort -u \ | |
| xargs -r apt-mark manual \ | |
; \ | |
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ | |
\ | |
cd /; \ | |
rm -r /usr/src/ruby; \ | |
# 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 | |
RUN $GRAALVM_HOME/bin/lli `which ruby` --version | |
# don't create ".bundle" in all our apps | |
ENV GEM_HOME /usr/local/bundle | |
ENV BUNDLE_SILENCE_ROOT_WARNING=1 \ | |
BUNDLE_APP_CONFIG="$GEM_HOME" | |
ENV PATH $GEM_HOME/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" | |
CMD [ "irb" ] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment