Вопрос или проблема
Как обновить Ruby до новой версии в RHEL.
Когда я пытаюсь – sudo yum install ruby
он говорит
Пакет ruby-2.0.0.648-33.el7_4.x86_64 уже установлен и является последним
версией Нечего делать
Когда я пытаюсь – sudo yum install @ruby2.5
он говорит,
Загруженные плагины: fastestmirror, langpacks Репозиторий ‘UIM_install’ не имеет
имени в конфигурации, используйте id Репозиторий ‘debug’ не имеет
имени в конфигурации, используйте id Репозиторий nodesource упоминается более
один раз в конфигурации Репозиторий nodesource-source упоминается
более одного раза в конфигурации Репозиторий ‘opencl’ не имеет
имени в конфигурации, используйте id Загружаю скорости зеркал из кэша
hostfile Группа ruby2.5 не существует. Ошибка: Нечего делать
Мне нужна последняя версия Ruby в системе. Какое решение?
Редактировать:
Я попробовал sudo yum update ruby
и получил следующий ответ.
Загружаю скорости зеркал из кэша hostfile
Нет пакетов, отмеченных для обновления
Вы можете получить новые версии Ruby через Red Hat Software Collections.
Как только вы установите репозиторий rhscl, вы можете установить пакеты SCL Ruby. Эти пакеты находятся рядом с версией Ruby, установленной из базовых репозиториев, поэтому вы не будете использовать /usr/bin/ruby. SCL “rh-ruby25” включает Ruby 2.5, но также есть Ruby 2.6 (rh-ruby26), если вам нужна более новая версия.
Преимущество использования SCL в том, что он поддерживается Red Hat, устанавливается через yum, как и всё остальное, и вы получаете обновления безопасности. Недостаток в том, что он соседствует с базовым Ruby, поэтому вам нужно быть осторожным, чтобы загрузить SCL перед его использованием. Инструкции находятся по представленному ссылке.
В общем, я никогда не пытаюсь использовать версии Ruby (или Rails), упакованные в любой дистрибутив Linux, они почти всегда слишком старые для того, что мне нужно – вместо этого я загружаю любую версию, которая мне нужна, используя RVM. Если вы сделаете это, вам нужно установить более новую версию Ruby в другой каталог, чем Ruby, предоставленный дистрибутивом, а затем вы можете положить этот каталог в ваш $PATH
впереди бинарников, предоставленных дистрибутивом, если хотите.
Инструкции RVM для ленивых (или людей, которые предпочли бы, чтобы этот бред действительно работал с самого начала):
$ sudo dnf remove ruby
Убедитесь, что он не удаляет ничего, что вам действительно нужно. К счастью, ничего из того, на что я полагался, не зависело от Ruby.
Установите RVM (менеджер версий Ruby). Они заставляют вас делать бессмысленный танец с ключами, хотя это не имеет никакого эффекта на безопасность.
gpg2 --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
\curl -sSL https://get.rvm.io | bash -s stable
Запустите новую оболочку.
Проверьте https://www.ruby-lang.org/en/downloads/, чтобы увидеть последнюю версию Ruby.
К сожалению, не похоже, чтобы существовал флаг --latest
. Увы.
rvm install 3.3.0
Вас попросят ввести пароль sudo, чтобы установить некоторые зависимости (ура!)
Затем он соберет Ruby из исходников. Да, у Ruby такая же безумная установка UX, как и у Python. Я не помню, чтобы Go или Rust собирали себя из исходников, когда я их устанавливал. Увы.
Вы получите ошибку:
Ошибка при выполнении 'run_gem_wrappers regenerate',
пожалуйста, прочитайте /home/you/.rvm/log/1706528997_ruby-3.3.0/gemset.wrappers.global.log
Найдите в гугле. Попробуйте первое предложение (установить libtool
). Он уже был установлен. Попробуйте второе предложение:
sudo dnf install libyaml-devel
Попробуйте снова
$ rvm install 3.3.0
Уже установлен ruby-3.3.0.
Чтобы переустановить используйте:
rvm reinstall ruby-3.3.0
Ложь. Попробуйте версию reinstall
.
Успех, наконец! Кто бы мог подумать, что обновление программного обеспечения может быть таким простым?
Редактировать: Сказал слишком рано:
$ rvm use 3.3.0
RVM не является функцией, выбор Ruby с помощью 'rvm use ...' не сработает.
Вам нужно изменить настройки вашего терминального эмулятора, чтобы разрешить входную оболочку.
Иногда необходимо использовать `/bin/bash --login` в качестве команды.
Пожалуйста, посетите https://rvm.io/integration/gnome-terminal/ для примера.
Не делайте то, что он говорит; просто переместите последнюю строку .bash_profile
, которую он добавил, в .bashrc
вместо этого.
Простая 12-шаговая процедура!
Чтобы сэкономить вам время на поиск еще одной команды:
rvm --default use 3.3.0
Redhat и CentOS не предоставляют последнюю версию различных программ. Это происходит из-за того, что это LTS (долгосрочная поддержка) операционная система. Выпускаются только обновления безопасности и мелкие обновления. Для установки более высокой версии программного обеспечения лучше компилировать самостоятельно и НЕ ЗАМЕНЯТЬ СУЩЕСТВУЮЩУЮ ВЕРСИЮ. Это связано с тем, что (возможно) операционная система опирается на скрипты/инструменты, написанные с использованием старой конкретной версии. Замена на другую может привести к сбоям чего-то.
Ответ или решение
Как обновить Ruby в RHEL (Red Hat Enterprise Linux)
Обновление Ruby в RHEL может быть непростой задачей из-за особенностей управления пакетами в этой системе. Он включает использование yum
или dnf
, которые по умолчанию устанавливают только стабильные версии программного обеспечения, доступны из официальных репозиториев. Если вы столкнулись с проблемой, что версия Ruby на вашем сервере устарела, следуйте приведенным ниже методам.
1. Понимание проблемы
При попытке установить более новую версию Ruby с помощью команд, таких как:
sudo yum install ruby
или
sudo yum install @ruby2.5
вы можете получить сообщение о том, что версия Ruby уже актуальна или группа пакетов не существует. Это означает, что необходимые репозитории для установки новой версии могут отсутствовать, или текущая версия Ruby встроена в систему и поддерживается только для обновлений безопасности.
2. Установка Ruby из Software Collections (SCL)
Red Hat обеспечивает наличие более новых версий программного обеспечения, включая Ruby, через Red Hat Software Collections (SCL). Это рекомендованный способ установки новых версий Ruby на RHEL, так как SCL гарантирует поддержку и обновления безопасности.
Шаги для установки Ruby через SCL:
-
Включите репозиторий SCL:
Вам нужно будет установить пакетrhc
, который предоставляет доступ к SCL. Для этого используйте следующую команду:sudo yum install centos-release-scl
-
Установите нужную версию Ruby:
После включения репозитория, вы сможете установить более новые версии Ruby:sudo yum install rh-ruby25
или для Ruby 2.6:
sudo yum install rh-ruby26
-
Запустите Ruby:
Чтобы использовать установленную версию, вам нужно будет переключиться на SCL:scl enable rh-ruby25 bash
Это откроет новую оболочку с активированной версией Ruby.
3. Использование RVM (Ruby Version Manager)
Если SCL не подходит, вы можете использовать Ruby Version Manager (RVM). Это инструмент, который позволяет устанавливать и управлять несколькими версиями Ruby в одном окружении.
Шаги для установки RVM:
-
Удалите устаревшую версию Ruby:
sudo dnf remove ruby
Убедитесь, что это не повлияет на другие приложения.
-
Установите RVM:
Сначала установите ключи:gpg2 --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
Затем выполните установку RVM:
\curl -sSL https://get.rvm.io | bash -s stable
-
Перезапустите оболочку:
Это позволит RVM полностью загрузиться. -
Установите последнюю версию Ruby:
Проверьте последнюю доступную версию на официальном сайте Ruby и выполните установку:rvm install 3.3.0
-
Используйте новую версию Ruby:
rvm use 3.3.0 --default
Это установит Ruby 3.3.0 как версию по умолчанию.
4. Итог
Обновление Ruby в RHEL не так сложно, как кажется. Вы можете использовать Red Hat Software Collections для установки актуальных версий (например, Ruby 2.5 или 2.6), что позволяет избежать конфликтов с установленной системой. Либо используйте RVM, чтобы управлять несколькими версиями Ruby. Оба метода безопасны и просты в реализации.
Для дополнительной помощи и ресурсов обратитесь к официальной документации по RHEL и Ruby или к сообществу пользователей Ruby.