Ruby 1.9.2 и Ubuntu 11.10

// Октябрь 19th, 2011 // Ruby

Сегодня товарищ на работе обновил Ubuntu до версии 11.10 (Oneiric Ocelot). Ну и начали ловить первые баги. В этом посте я расскажу, как поставить Ruby 1.9.2.Итак ставили Ruby как обычно, по этому мануалу. Однако потом наткнулись на несколько глюков. Во первых после установки ruby-1.9.2 и выполнении

# rvm use 1.9.2
# rvm --default 1.9.2

версия показывалась не та, что ставилась:

# ruby -v
 ruby 1.8.7

«SSLv2_method» undeclared here

Оказалось, что в системе установлены пакеты со старым руби. Мы снесли их вот так:

 sudo apt-get remove ruby1.8

После этого начали ставить новый руби (1.9.2) через rvm, и тут на нас вылезла куча ошибок:

$ sudo rvm install 1.9.2
Installing Ruby from source to: /usr/share/ruby-rvm/rubies/ruby-1.9.2-p180, this may take a while depending on your cpu(s)...

ruby-1.9.2-p180 - #fetching
ruby-1.9.2-p180 - #extracted to /usr/share/ruby-rvm/src/ruby-1.9.2-p180 (already extracted)
ruby-1.9.2-p180 - #configuring
arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long  -fPIC  -o ossl_ssl.o -c ossl_ssl.c
ossl_ssl.c:110:1: ошибка: «SSLv2_method» undeclared here (not in a function)
ossl_ssl.c:111:1: ошибка: «SSLv2_server_method» undeclared here (not in a function)
ossl_ssl.c:112:1: ошибка: «SSLv2_client_method» undeclared here (not in a function)
make[1]: *** [ossl_ssl.o] Ошибка 1
make[1]: Выход из каталога `/var/cache/ruby-rvm/src/ruby-1.9.2-p180/ext/openssl'
make: *** [mkmain.sh] Ошибка 1

Нехитрым гуглением я понимаю, что проблема кроется в несовместимости Ruby 1.9.2 и LibSSL 1.0. Версия libssl 0.9.8 работает нормально, однако при попытке удаления 1.0 пакетный менеджер показал около сотни пакетов на удаление. Я всё же не решился удалять пол-системы и начал искать другой выход.

Я нашел небольшой патч. Итак исправляем два файла: extconf.rb и ossl_ssl.c, которые у меня лежали вот здесь: /usr/local/rvm/src/ruby-1.9.2-p180/ext/openssl
После этого пытаемся второй раз поставить ruby и нам это удается. Проблема решена!

no such file to load mkmf (LoadError)

После этого версия стала показываться нормальная, однако наш гем (starling), который мы хотели установить — не ставился. А писал нам вот такие ошибки:

no such file to load mkmf (LoadError)

Выяснилось, что этот модуль (mkmf) содержится в dev-пакете руби. Однако нашей ошибкой было то, что мы ставили пакет ruby1.8-dev, он и перекрывал текущий интерпретатор. Решение всё-же нашлось. Надо было поставить другой пакет, который при первичном поиске не выдавался:

 sudo apt-get install ruby1.9.1-dev

В нём есть нужный модуль, и он всё-таки из ветки 1.9.x.
После этого гем поставился нормально и мы получили на машине свежий руби и starling.

Share

Спасибо!


Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:


Комментировать