I run on MacOS, but I often want to test Linux behaviors when working on the CRuby implementation.
Here’s the Dockerfile
I use:
FROM ubuntu:24.04
# Preventing dialog prompts when installing packages
ENV DEBIAN_FRONTEND=noninteractive
# Update and install basic build dependencies and Rust
RUN apt-get update && apt-get install -y \
git \
curl \
build-essential \
autoconf \
libreadline-dev \
libssl-dev \
libyaml-dev \
libncurses5-dev \
zlib1g-dev \
libffi-dev \
bison \
libgdbm-dev \
libgdbm-compat-dev \
libreadline6-dev \
libssl-dev \
libgmp-dev \
liburing-dev \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# Install Rust via rustup
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
RUN apt-get update && apt-get install -y ruby
RUN apt-get update && apt-get install -y gdb
# Add Rust to the PATH so the cargo and rustc commands are available
ENV PATH="/root/.cargo/bin:${PATH}"
# Create a directory for the Ruby source code
WORKDIR /usr/src/ruby
# Copy Ruby source code from your local directory
COPY . .
# This will be the default command when you run the container.
CMD [ "/bin/bash" ]
To run the Dockerfile
, you can use the following two commands:
docker build -t ruby-source-build-env .
docker run -it --mount type=bind,src=.,target=/usr/src/ruby ruby-source-build-env
Based on our Dockerfile
, docker run
will open up a bash
shell for you. From there, I run the following commands to build CRuby:
./autogen.sh
mkdir build && cd build
mkdir ./.rubies
../configure --prefix="/usr/src/ruby/build/.rubies/ruby-master" --disable-install-doc --config-cache --enable-debug-env optflags="-O0 -fno-omit-frame-pointer"
make install
We now have CRuby operating under Ubuntu Linux! From here, the simplest way to run some code is to place a test.rb
file in the root of the project and run it using make runruby
.