Установка Gem вызывает ошибку “OpenSSL”

Вопрос или проблема

По крайней мере в течение недели я пытался установить Bettercap на свой Raspberry PI с помощью gem, но всякий раз, когда я вводил:

sudo gem install bettercap

я получал сообщение об ошибке, которое гласило:

 ERROR:  While executing gem ... (Gem::Exception)
    Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources

Каждое предложенное исправление не приносит результатов:

Опция 1: “http option”

Согласно ответу Filippo De Bortoli в этой теме по тому же вопросу, отключение протокола https решит эту проблему. Однако после выполнения этих команд:

gem source -r https://rubygems.org/ 
gem source -a http://rubygems.org/

Я все равно получаю эту ошибку:

ERROR:  While executing gem ... (Gem::Exception)
        Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources

Опция 2: реконструкция

Как предложил Filippo De Bortoli в той же теме, он переустановил ruby после установки OpenSSL, однако в моем raspbian OpenSSL уже установлен, и выполнение sudo apt-get install openssl только подтверждает, что у меня последняя версия. Я также трижды переустанавливал ruby с тех пор, как начал получать эту ошибку.

Опция 3: локальная установка

После того, как я узнал, что можно установить gems локально, я установил исходный код и запустил.

sudo gem install --local bettercap-1.6.2b.gem

и получил следующий вывод:

ERROR:  Could not find a valid gem 'em-proxy' (>= 0.1.8, ~> 0.1) in any repository

Я предполагаю, что поскольку производится поиск только на локальном диске, он не может найти необходимые зависимости, поэтому я решил установить “em-proxy” локально, только чтобы обнаружить, что ему также нужны зависимости, которые также требовали зависимости. Замечательно. Поэтому я решил оставить это ради своего здравомыслия, и это было в целом непрактично.


Подводя итог, как мне избавиться от этой ошибки или, по крайней мере, обойти её?

На случай, если вам интересно, вот вывод команды gem -v:

2.4.5

и вывод команды ruby -v:

ruby 2.2.2p95 (2015-04-13 revision 50295) [armv6l-linux-eabihf]

Я также столкнулся с этой проблемой при компиляции ruby 2.3.6 из исходного кода на Debian/Ubuntu. Я решил ее, установив pkg-config дополнительно к libssl-dev, например, полные инструкции:


$ sudo apt install \
make \
gcc \
pkg-config \
libssl1.0-dev \
libreadline-dev \
libgdbm-dev \
zlib1g-dev \
libyaml-dev \
libffi-dev \
libgmp-dev \
openssl
$ ./configure --disable-install-rdoc
$ make -j2
$ sudo make install

Обратите внимание, что пакет libssl-dev несовместим с ruby2.3 (см.: https://github.com/rvm/rvm/issues/3862#issuecomment-277512130), поэтому на Debian/Stretch или Ubuntu/Xenial вам нужно установить libssl1.0-dev вместо него.

Ответ или решение

Для решения проблемы с установкой Bettercap на Raspberry Pi через gem, связанной с ошибкой OpenSSL, сначала необходимо понять причины, которые могут вызывать эту ошибку. Одна из ключевых причин — это отсутствие должной интеграции OpenSSL с Ruby на вашей системе. Давайте рассмотрим возможные причины и решения, используя подход TEA (Теория, Пример, Применение).

Теория

Ошибка, с которой вы столкнулись, обычно указывает на то, что ваша версия Ruby не была собрана с поддержкой OpenSSL, что приводит к неспособности использовать защищённые HTTPS-источники. Это может быть связано с тем, что во время компиляции Ruby не был доступен необходимый заголовочный файл OpenSSL, или использовалась неподходящая версия библиотеки.

Для успешной установки Bettercap через RubyGems необходимо обеспечить, чтобы Ruby имел доступ к полной и совместимой версии OpenSSL. Также необходимо убедиться, что у вас установлены все зависимости, необходимые для сборки Ruby с поддержкой OpenSSL.

Пример

Рассмотрим типичный процесс установки и настройки Ruby с поддержкой OpenSSL на Raspberry Pi:

  1. Проверка и установка зависимостей:
    Убедитесь, что у вас установлены все необходимые пакеты. Например, можете использовать следующий набор команд:

    sudo apt-get update
    sudo apt-get install -y build-essential libssl1.0-dev zlib1g-dev \
    libreadline-dev libyaml-dev libffi-dev libgdbm-dev pkg-config

    Обратите внимание, что мы используем libssl1.0-dev, так как более новые версии могут быть несовместимы с более старыми версиями Ruby.

  2. Сборка Ruby:
    Загрузите исходный код Ruby и соберите его заново, как показано ниже:

    wget https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.2.tar.gz
    tar -xzvf ruby-2.2.2.tar.gz
    cd ruby-2.2.2
    ./configure --prefix=/usr/local --disable-install-rdoc
    make
    sudo make install

    В данном случае --disable-install-rdoc используется для ускорения процесса сборки за счёт пропуска установки документации.

  3. Проверка поддержки OpenSSL:
    После установки новой версии Ruby проверьте, интегрирована ли поддержка OpenSSL:

    ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'

    Если все настроено правильно, вы должны увидеть версию OpenSSL без ошибок.

Применение

Применив данные шаги, вы обеспечите корректную настройку среды для работы Ruby с OpenSSL на вашем устройстве Raspberry Pi. После выполнения указанных выше команд снова попробуйте установить Bettercap:

gem install bettercap

Дополнительные рекомендации

  1. Избегайте использования устаревших версий Ruby. Поскольку версия 2.2.2 сильно устарела, рассмотрите возможность модернизации до более стабильной и поддерживаемой версии, если ваш проект это позволяет.

  2. Документация и поддержка сообщества: Пользуйтесь форумами и ресурсами, такими как Stack Overflow и GitHub, для получения помощи и поиска рекомендаций от других пользователей с аналогичными проблемами.

  3. Автоматизация процесса: Используйте менеджеры версий Ruby, такие как RVM или rbenv, которые помогают более гибко управлять разными версиями Ruby и их зависимостями, облегчают управление окружением и упрощают процесс установки нужной версии с поддержкой всех необходимых библиотек.

Следуя этим шагам, вы сможете устранить ошибку, связанную с OpenSSL, и успешно установить Bettercap на ваш Raspberry Pi. Успехов в решении задачи!

Оцените материал
Добавить комментарий

Капча загружается...