Понадобилось установить Ruby на сервер с CentOS 7 для выполнения некоторых скриптов. Из стандартных репозиториев устанавливалась очень старая версия, которая мне не подходила. Пришлось собирать последнюю из исходников. Как обычно, не обошлось без подводных камней, о которых расскажу.
Самый простой способ установки Ruby на CentOS 7 это установке через yum:
# yum -y install ruby
# ruby -v ruby 2.0.0p598 (2014-11-13) [x86_64-linux]
На момент написания статьи у меня поставилась версия 2.0.0. Мне она не подходила, так как при установке гема whois я получал сообщение, что версия слишком старая:
ERROR: Error installing whois: activesupport requires Ruby version >= 2.2.2.
Пришлось удалить установленную версию и искать способ поставить более свежую. Способов на самом деле несколько:
- Установить из исходников.
- Воспользоваться сторонним репозиторием.
- Установить с помощью менеджера управлением пакетами ruby — RVM или rbenv.
Мне первый способ показался самым простым, решил воспользоваться им. Если вы уже установили старую версию через yum, то перед дальнейшими действиями удалите ее:
# yum remove ruby
Устанавливаем необходимые зависимости для сборки и установки ruby:
# yum install -y zlib zlib-devel openssl-devel # yum groupinstall -y "Development Tools"
Скачиваем последнюю стабильную версию ruby:
# cd /usr/src # wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.gz --no-check-certificate
Распаковываем ее и собираем:
# tar -xzvf ruby-* # cd ruby-* # ./configure # make # make install
Проверяем установленную версию:
# ruby -v ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
Обновляем Rubygems и уже установленные гемы:
# gem update --system # gem update
Теперь можно приступить к установке интересующего меня гема whois и whois-parser:
# gem install whois # gem install whois-parser
Без проблем установилась нужная версия. Расскажу об ошибках с которыми столкнулся для тех, кто придет сюда из поиска по этим ошибкам. Сначала я получил вот такую ошибку после установки ruby, когда пытался обновить rubygems:
ERROR: Loading command: install (LoadError) cannot load such file -- zlib ERROR: While executing gem ... (NoMethodError) undefined method `invoke_with_build_args' for nil:NilClass
При этом, пакет zlib у меня уже стоял. Оказалось, этого не достаточно, нужно было еще установить zlib-devel. Установка этого пакета и пересборка из исходников помогла.
Потом столкнулся с другой ошибкой:
ERROR: While executing gem ... (Gem::Exception) Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
Здесь сразу стало понятно, что не хватает openssl-devel. Установил этот пакет, снова пересобрал из исходников ruby и установил. После этого ошибок больше не было.
На этом все, последняя версия Ruby 2.3.1 установлена на CentOS 7. Расскажу, зачем я его установил на сервер — для настройки мониторинга времени делегирования домена в zabbix.