Вопрос или проблема
По крайней мере в течение недели я пытался установить 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:
-
Проверка и установка зависимостей:
Убедитесь, что у вас установлены все необходимые пакеты. Например, можете использовать следующий набор команд: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. -
Сборка 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
используется для ускорения процесса сборки за счёт пропуска установки документации. -
Проверка поддержки OpenSSL:
После установки новой версии Ruby проверьте, интегрирована ли поддержка OpenSSL:ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'
Если все настроено правильно, вы должны увидеть версию OpenSSL без ошибок.
Применение
Применив данные шаги, вы обеспечите корректную настройку среды для работы Ruby с OpenSSL на вашем устройстве Raspberry Pi. После выполнения указанных выше команд снова попробуйте установить Bettercap:
gem install bettercap
Дополнительные рекомендации
-
Избегайте использования устаревших версий Ruby. Поскольку версия 2.2.2 сильно устарела, рассмотрите возможность модернизации до более стабильной и поддерживаемой версии, если ваш проект это позволяет.
-
Документация и поддержка сообщества: Пользуйтесь форумами и ресурсами, такими как Stack Overflow и GitHub, для получения помощи и поиска рекомендаций от других пользователей с аналогичными проблемами.
-
Автоматизация процесса: Используйте менеджеры версий Ruby, такие как RVM или rbenv, которые помогают более гибко управлять разными версиями Ruby и их зависимостями, облегчают управление окружением и упрощают процесс установки нужной версии с поддержкой всех необходимых библиотек.
Следуя этим шагам, вы сможете устранить ошибку, связанную с OpenSSL, и успешно установить Bettercap на ваш Raspberry Pi. Успехов в решении задачи!