현재 Ruby 홈 페이지에서 제공하고 있는 Ruby의 최신 Stable Version은 Ruby 1.8.6-p110 (실제 가장 최근의 patch 버전은 p111)이다. 이 놈은 Leopard에 기본 설치되어 있는 놈 보다도 더 많은 패치가 이루어져서 설치를 위해 터미널에서 일반적인 configure 명령을 입력하면 다음과 같은 오류가 뜨고 만다.
$ ./configure --prefix=/usr/local --enable-pthread --with-readline-dir=/usr/local --enable-shared --enable-install-doc
checking build system type... i686-apple-darwin9.0.0
.
.
.
ar rcu libruby-static.a array.o bignum.o class.o compar.o dir.o dln.o enum.o error.o eval.o file.o gc.o hash.o inits.o io.o marshal.o math.o numeric.o object.o pack.o parse.o process.o prec.o random.o range.o re.o regex.o ruby.o signal.o sprintf.o st.o string.o struct.o time.o util.o variable.o version.o dmyext.o
gcc -g -O2 -fno-common -pipe -fno-common -DRUBY_EXPORT -I. -I. -c main.c
gcc -g -O2 -fno-common -pipe -fno-common -DRUBY_EXPORT -I. -I. -c dmydln.c
gcc -g -O2 -fno-common -pipe -fno-common -DRUBY_EXPORT -L. main.o dmydln.o libruby-static.a -lpthread -ldl -lobjc -o miniruby
./mkconfig.rb:191: [BUG] Segmentation fault
ruby 1.8.6 (2007-09-23) [i686-darwin9.0.0]
make: *** [.rbconfig.time] Abort trap
결국, 문제의 원인을 알아보기 위해 Google에게 물어 본 결과 다음과 같은 해결책을 담아놓은 글타래를 찾아냈다.
ruby-1.8.6-p111 build on osx 10.5.0 fails; ok on 10.4.10. bug or config? – Ruby Forum
해결 방법은 먼저, 터미널에서 내려받은 최신 Ruby 소스 디렉토리로 이동후, 위 글타래에서 제공하고 있는 ignore-gsetcontext.diff이름의 패치 파일을 내려받아 다음과 같이 적용해준다.
$ patch < ignore-gsetcontext.diff
그리고 나서 다시 컴파일 해주면 정상적으로 설치되면서 다음과 같은 최신 버전을 확인할 수 있다.
$ ruby --version
ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-darwin9.0.0]
Leopard에서 최신 Ruby 버전을 설치할 때 문제를 일으켰던 원인은, 위 글타래의 말을 빌리자면, setcontext/getcontext 함수가 Leopard에 와서는 일반 UNIX 형식을 따르기 위해 수정되면서 생긴 문제라고 한다. 문제 해결을 위한 패치가 벌써 몇 주전에 ruby-core 팀에게 전달되었으나 아직 안 고쳐진 모양이다.
관련된 주제의 글