Ruby 1.9.2 и Ubuntu 11.10
Сегодня товарищ на работе обновил Ubuntu до версии 11.10 (Oneiric Ocelot). Ну и начали ловить первые баги. В этом посте я расскажу, как поставить Ruby 1.9.2.Итак ставили Ruby как обычно, по этому мануалу. Однако потом наткнулись на несколько глюков. Во первых после установки ruby-1.9.2 и выполнении
1 2 |
# rvm use 1.9.2 # rvm --default 1.9.2 |
версия показывалась не та, что ставилась:
1 2 |
# ruby -v ruby 1.8.7 |
«SSLv2_method» undeclared here
Оказалось, что в системе установлены пакеты со старым руби. Мы снесли их вот так:
1 |
sudo apt-get remove ruby1.8 |
После этого начали ставить новый руби (1.9.2) через rvm, и тут на нас вылезла куча ошибок:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ 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), который мы хотели установить – не ставился. А писал нам вот такие ошибки:
1 |
no such file to load mkmf (LoadError) |
Выяснилось, что этот модуль (mkmf) содержится в dev-пакете руби. Однако нашей ошибкой было то, что мы ставили пакет ruby1.8-dev, он и перекрывал текущий интерпретатор. Решение всё-же нашлось. Надо было поставить другой пакет, который при первичном поиске не выдавался:
1 |
sudo apt-get install ruby1.9.1-dev |
В нём есть нужный модуль, и он всё-таки из ветки 1.9.x.
После этого гем поставился нормально и мы получили на машине свежий руби и starling.