Created
May 27, 2020 15:08
-
-
Save ebenoist/83a5344d547f940b4be156b614859574 to your computer and use it in GitHub Desktop.
Ubuntu + Ruby <3
This file contains hidden or 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 ubuntu:18.04 | |
# 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.6 | |
ENV RUBY_VERSION 2.6.6 | |
ENV RUBY_DOWNLOAD_SHA256 5db187882b7ac34016cd48d7032e197f07e4968f406b0690e20193b9b424841f | |
# 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 \ | |
build-essential \ | |
bison \ | |
autoconf \ | |
wget \ | |
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)"; \ | |
./configure \ | |
--build="$gnuArch" \ | |
--disable-install-doc \ | |
--enable-shared \ | |
; \ | |
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 | |
# 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