Доморощенные отказываются связывать OpenSSL
Я на: OSX 10.11.6, доморощенная версия 0.9.9 m OpenSSL 0.9.8 zg 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/
11 ответов:
как следует из обновления к другому ответу, обходной путь установки старого 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) несколько немедленный план по смягчению, а также Б) долгосрочное решение (probaby связывание OpenSSL с dotnet).
еще одна вещь, чтобы отметить:
/usr/local/opt/openssl/libгде варево связано по умолчанию: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 системы.Безопасность.Криптография.Родной.dylib libray, вам нужно будет перезапустить интерактивный сеанс (т. е. закройте консоль и запустите другую).
Это то, что сработало для меня:
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 раньше пытаюсь это сделать.
ни одно из этих решений не работало для меня на 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's openssl для вашего нового и обновленного openssl:
ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/opensslзакройте терминал, откройте новый сеанс и убедитесь, что OS X использует ваш новый openssl:
openssl version -a
просто выполнить
brew info opensslи прочитайте информацию, где он говорит:Если вам нужно иметь это программное обеспечение сначала в вашем пути запуска:
echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
просто чтобы оставить заметку об этом, я перенес свой mac, и он отключил все мои доморощенные установки, включая этот. Это сломалось
gem install, именно так я впервые начал пытаться исправить это.я попробовал миллион решений (я на OSX Sierra-10.12.5), и решение оказалось комично простым:
brew reinstall ruby brew reinstall openssl
попробовав все, что я мог найти, и ничего не сработало, я просто попробовал это:
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
у меня похожий случай. Мне нужно установить 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 и требует OpenSSL lib.
Примечание:
/usr/local/opt/openssl/libпути получаются с помощьюbrew info openssl
это сработало для меня:
brew install openssl cd /usr/local/include ln -s ../opt/openssl/include/openssl .
решение выше от 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
Примечание: это больше не работает из-за https://github.com/Homebrew/brew/pull/612
У меня была такая же проблема сегодня. Я удалил (unbrewed??) openssl 1.0.2 и установлен 1.0.1 также с доморощенным. Dotnet new / restore / run тогда работал нормально.
установить openssl 101:
brew install homebrew / versions / openssl101
Связывание:
brew link --force homebrew / versions / openssl101
для меня это сработало...
я редактировал ./bash_profile и добавил следующую команду
экспортировать переменную path="/usr/местные/опт/поддержка/ОГРН:$путь"
Comments