らんだむな記憶

blogというものを体験してみようか!的なー

CRuby

ruby - らんだむな記憶 で随分と前に CRuby をビルドしていた。記事には何も残していないが少しソースコードを眺めたこともあったが、あれはいつのことだっただろうか・・・。

https://github.com/ruby/ruby でも拾ってきて久しぶりに眺めてみるのも悪くないかもしれない。

Python の関数コール - らんだむな記憶 の Dockerfile を使い回す。

FROM derwind/python-build

ENV DEBIAN_FRONTEND noninteractive

RUN apt install -y autoconf bison build-essential \
      libssl-dev libyaml-dev libreadline6-dev zlib1g-dev \
      libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev && \
    apt install -y gdb git automake libtool flex && \
    git clone git://github.com/cgdb/cgdb.git && \
    cd cgdb && \
    ./autogen.sh && \
    ./configure --prefix=/usr/local && \
    make && \
    make install && \
    cd .. && \
    rm -rf cgdb

WORKDIR /workdir

VOLUME ["/workdir"]

CMD ["bash"]

で、

git clone https://github.com/ruby/ruby.git

して

$ cd ruby
$ du -h
344M	.

だった。cpython よりも小さいか。ビルド後は 675M になっていた。

git checkout v3_0_1
docker run -it --rm -v $PWD:/workdir derwind/python-build:debug bash

で準備をする。なんで python-build なんかというのはあるが、CPython をデバッグする時用に gdbcgdb を入れているからという言い訳・・・。

この時、タグ付けされたファイルに autogen.sh が含まれていないようなので、自分で master ブランチからコピーして用意する。

#!/bin/sh

PWD=
case "$0" in
*/*) srcdir=`dirname $0`;;
*) srcdir="";;
esac

exec ${AUTORECONF:-autoreconf} --install --symlink "$@" ${srcdir:+"$srcdir"}

あと、ホストに ruby が既に入っている状態でないと configure が通らないので、

apt install ruby

をしておく。(コンテナの中で)
これで漸く準備ができたので、

./autogen.sh
./configure optflags='-O0' --disable-install-doc
make

でビルドは開始する。ここで、optflags='-O0' は最適化を無効化する意図であり、デフォルトでは -O3 である。--disable-install-docconfigure に渡しているのは、これなしでビルドを開始すると、30 分くらい経過したところで

Generating RDoc documentation
Parsing sources...
Killed835/861]  string.c
make: *** [uncommon.mk:567: rdoc] Error 137

のように Out of memory で強制終了させられてしまったからである・・・。f1-micfo インスタンスでは少し厳しかったようだ。

一応

$ ./ruby -e "puts 'hello my ruby'"
`RubyGems' were not loaded.
`did_you_mean' was not loaded.
hello my ruby

で実行できているので実行形式はビルドできているみたいだ。--disable-install-doc を使えばビルドできた。別に今回は不要なので問題ない。

`RubyGems' were not loaded.
`did_you_mean' was not loaded.

の部分については、

make install

すれば出なくなる。数秒間のコストはかかるがウザさが減るので悪くない。