Homebrew отказывается связывать OpenSSL
Я нахожусь: OSX 10.11.6, версия Homebrew 0.9.9m OpenSSL 0.9.8zg 14 июля 2015
Я пытаюсь играть с dotnetcore и следуя инструкциям ,
Я обновил/установил последнюю версию openssl:
> brew install openssl
==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2h_1.el_capitan.bottle.tar.gz
Already downloaded: /Users/administrator/Library/Caches/Homebrew/openssl-1.0.2h_1.el_capitan.bottle.tar.gz
==> Pouring openssl-1.0.2h_1.el_capitan.bottle.tar.gz
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
/usr/local/etc/openssl/certs
and run
/usr/local/opt/openssl/bin/c_rehash
This formula is keg-only, which means it was not symlinked into /usr/local.
Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries
Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:
LDFLAGS: -L/usr/local/opt/openssl/lib
CPPFLAGS: -I/usr/local/opt/openssl/include
Но когда я пытаюсь связать openssl, я продолжаю сталкиваться с этой ошибкой связывания:
> brew link --force openssl
Warning: Refusing to link: openssl
Linking keg-only OpenSSL means you may end up linking against the insecure,
deprecated system version while using the headers from the Homebrew version.
Instead, pass the full include/library paths to your compiler e.g.:
-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib
Возможность включения флагов компилятора для меня не имеет смысла, поскольку я не компилирую эти библиотеки, от которых я зависим.
EDIT dotnetcore обновил свои инструкции:
brew update
brew install openssl
ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/
Ответы
Ответ 1
Как показывает обновление к другому ответу, обходной путь установки старого openssl101 brew больше не будет работать. Для правильного решения проблемы см. этот комментарий к dotnet/cli # 3964.
Самая важная часть проблемы, скопированная здесь:
Я просмотрел другой вариант, который был предложен для установки rpath в библиотеке. Я думаю, что следующее - лучшее решение, которое будет влиять только на эту конкретную библиотеку.
sudo install_name_tool -add_rpath /usr/local/opt/openssl/lib /usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.Security.Cryptography.Native.dylib
и/или если у вас установлен NETCore 1.0.1, выполните ту же команду для 1.0.1:
sudo install_name_tool -add_rpath /usr/local/opt/openssl/lib /usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.1/System.Security.Cryptography.Native.dylib
В действительности, вместо того, чтобы сообщать операционной системе, что она всегда использует версию SSL для доморощенного и потенциально может привести к поломке, мы сообщим dotnet, как найти нужную библиотеку.
Также важно, что Microsoft знает об этой проблеме и имеет и a) несколько немедленный план смягчения, а также b) долгосрочное решение (probaby, объединяющее OpenSSL с dotnet).
Еще одно замечание: /usr/local/opt/openssl/lib
- это где brew связан по умолчанию:
13:22 $ ls -l /usr/local/opt/openssl
lrwxr-xr-x 1 ben admin 26 May 15 14:22 /usr/local/opt/openssl -> ../Cellar/openssl/1.0.2h_1
Если по какой-либо причине вы устанавливаете brew и свяжете его в другом месте, то этот путь будет использоваться в качестве пути rpath.
Как только вы обновите rpath в System.Security.Cryptography.Native.dylib libray, вам необходимо перезапустить интерактивный сеанс (т.е. закрыть консоль и запустить другую).
Ответ 2
Это то, что сработало для меня:
brew update
brew install openssl
ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/
ln -s /usr/local/Cellar/openssl/1.0.2j/bin/openssl /usr/local/bin/openssl
Благодаря @dorlandode в этой теме https://github.com/Homebrew/brew/pull/597
NB: Я использовал это только как временное исправление, пока не смогу потратить время на правильную установку Openssl снова с нуля. Насколько я помню, я потратил большую часть дневной отладки и проблем, прежде чем я понял, что лучший способ - это вручную установить сертификаты, которые мне нужны по одному. Пожалуйста, прочитайте ссылку в комментарии @bouke, прежде чем пытаться это сделать.
Ответ 3
Ни один из этих решений не работал у меня на OS X El Capitan 10.11.6. Вероятно, потому что OS X имеет родную версию openssl, которая, по ее мнению, превосходит и, как таковая, не любит подделывать.
Итак, я взял дорогу и начал новый...
Вручную установить и символическую ссылку
cd /usr/local/src
-
Если вы получаете "Нет такого файла или каталога", сделайте это:
cd /usr/local && mkdir src && cd src
Загрузить openssl:
curl --remote-name https://www.openssl.org/source/openssl-1.0.2h.tar.gz
Извлечение и cd в:
tar -xzvf openssl-1.0.2h.tar.gz
cd openssl-1.0.2h
Скомпилировать и установить:
./configure darwin64-x86_64-cc --prefix=/usr/local/openssl-1.0.2h shared
make depend
make
make install
Теперь symlink OS X откроет новый и обновленный openssl:
ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/openssl
Закройте терминал, откройте новый сеанс и убедитесь, что OS X использует ваш новый openssl:
openssl version -a
Ответ 4
Просто выполните brew info openssl
и прочитайте информацию, где он говорит:
Если вам нужно сначала запустить это программное обеспечение в своем запуске PATH: echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
Ответ 5
Если миграция вашего Mac ломает доморощенный:
Я перенес свой Mac, и он отключил все мои домашние установки - в том числе OpenSSL. Это сломало gem install
, таким образом я сначала заметил проблему и начал пытаться исправить это.
После миллиона решений (при переходе на OSX Sierra - 10.12.5) решение оказалось комично простым:
brew reinstall ruby
brew reinstall openssl
Ответ 6
Попробовав все, что я смог найти, и ничего не получилось, я просто попробовал это:
touch ~/.bash_profile; open ~/.bash_profile
Внутри файла добавлена эта строка.
export PATH="$PATH:/usr/local/Cellar/openssl/1.0.2j/bin/openssl"
теперь он работает:)
Jorns-iMac:~ jorn$ openssl version -a
OpenSSL 1.0.2j 26 Sep 2016
built on: reproducible build, date unspecified
//blah blah
OPENSSLDIR: "/usr/local/etc/openssl"
Jorns-iMac:~ jorn$ which openssl
/usr/local/opt/openssl/bin/openssl
Ответ 7
У меня подобный случай. Мне нужно установить openssl через brew, а затем использовать pip для установки mitmproxy. Я получаю ту же жалобу от brew link --force
. Следующее - это решение, которое я достиг: (без силовой связи brew)
LDFLAGS=-L/usr/local/opt/openssl/lib
CPPFLAGS=-I/usr/local/opt/openssl/include
PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig
pip install mitmproxy
Это не касается вопроса прямо. Я оставляю однострочный файл на случай, если кто-либо использует pip и требует opensl lib.
Примечание: пути /usr/local/opt/openssl/lib
получены с помощью brew info openssl
Ответ 8
Это сработало для меня:
brew install openssl
cd /usr/local/include
ln -s ../opt/openssl/include/openssl .
Ответ 9
Решение выше от edwardthesecond работало для меня тоже на Sierra
brew install openssl
cd /usr/local/include
ln -s ../opt/openssl/include/openssl
./configure && make
Другие шаги, которые я делал раньше:
-
установка openssl через brew
brew install openssl
-
добавление openssl к пути, предложенному homebrew
brew info openssl
echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
Ответ 10
Примечание: это больше не работает из-за https://github.com/Homebrew/brew/pull/612
У меня была такая же проблема сегодня. Я удалил (unbrewed??) openssl 1.0.2 и установил 1.0.1 также с доморощенным. Dotnet new/restore/run затем работал нормально.
Установить openssl 101:
brew установить homebrew/versions/openssl101
Linking:
brew ссылка --force homebrew/versions/openssl101
Ответ 11
для меня это то, что сработало...
Я отредактировал. /bash_profile и добавил команду ниже
экспорт PATH = "/usr/local/opt/openssl/bin: $ PATH"