2016-07-30 1 views
90

Я на: OSX 10.11.6, Homebrew версия 0.9.9m OpenSSL 0.9.8zg 14 июля 2015Homebrew отказ связать OpenSSL

Я пытаюсь играть с dotnetcore и следуя их instructions,

Я модернизировал/установил последнюю версию 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/ 
+3

Для .NET Ядра вам нужна поддерживаемая версия OpenSSL, которая будет быть версией 1.0.1 или 1.0.2. Поскольку вы сообщаете о версии 0.9.8, возможно, вам нужно сначала завести обновление openssl'? – bartonjs

+2

Я уже это сделал. Я должен был уточнить, но я не добавил этих шагов к вопросу. Но я уже делал 'brew update' и' brew install openssl'. Это попытка установить поддерживаемую версию. – daviddeath

+2

Похоже, что Homebrew явно заблокировал его: https://github.com/Homebrew/brew/commit/b999edb3448793529aea8b29c01b3851bbc3b3eb. – bartonjs

ответ

54

Как обновиться до другого ответа предполагает, обходной путь от установки старый варка opensl101 больше не будет работать. Для правильного решения проблемы см. this comment on dotnet/cli#3964.

Наиболее значимая часть проблемы скопирована здесь:

I looked into the other option that was suggested for setting the rpath on the library. I think the following is a better solution that will only effect this specific library.

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

and/or if you have NETCore 1.0.1 installed perform the same command for 1.0.1 as well:

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

In effect, rather than telling the operating system to always use the homebrew version of SSL and potentially causing something to break, we're telling dotnet how to find the correct library.

Также важно, это выглядит как Microsoft знает об этой проблеме и и имеет как) несколько ближайших планы по смягчению, а также б) долгосрочное решение (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 

Если по каким-либо причинам вы устанавливаете опару и связать его в другом месте, то, что путь, который вы должны использовать как rpath.

Как только вы обновите путь к файлу System.Security.Cryptography.Native.dylib libray, вам необходимо перезапустить интерактивный сеанс (т. Е. Закрыть консоль и запустить другую).

+0

Это правильный ответ. – daviddeath

+0

Где я должен добавить эту строку? Я пытаюсь заставить это работать в CI. Я получаю '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.Security.Cryptography.Native.dylib (Нет такого файла или каталога)'. – mrahhal

+0

@mrahhal - это путь установки инструмента «dotnet». Возможно, вы либо не установили его, либо установили, либо в другое место. Если он установлен и с вашей стороны, вы можете использовать 'какая dotnet', чтобы найти его. –

1

Примечание: это больше не работает из-за https://github.com/Homebrew/brew/pull/612

У меня была такая же проблема сегодня. Я удалил (unbrewed ??) openssl 1.0.2 и установил 1.0.1 также с доморощенным. Dotnet new/restore/run затем работал нормально.

Установите OpenSSL 101:
варева установить доморощенную/версию/openssl101
Linking:
заварить ссылка --force доморощенных/версий/openssl101

+2

Это сделало это! Кажется, что 1.0.2 не хочет связываться. Следующий вопрос: почему .netcore предлагает то, что не рекомендуется в сообществе. – daviddeath

+0

1.0.2 работал для меня на другом mac несколько дней назад, так что, возможно, есть недавнее варенье или смена opensl. Во всяком случае, для ядра с точечной сетью мы хороши :) – user3488820

+1

Ссылка github, размещенная на @bartonjs, показывает, что пиво было обновлено всего несколько дней назад. Глядя на фиксацию, это изменение: 'if HOMEBREW_PREFIX.to_s =="/usr/local "&& keg.name ==" openssl ", поэтому я предполагаю, что версия 1.0.1 использует другой HOMEBREW_PREFIX. – daviddeath

35

Ни один из этих решений не работал для меня на 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 

Extract и компакт-диск в:

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 

Теперь символическая OpenSSL OS X для вашего нового и обновленного OpenSSL:

ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/openssl 

Закрыть терминал, откройте новый сеанс и убедитесь, что OS X использует Ваш новый OpenSSL:

openssl version -a 
+0

Если вы пытаетесь установить ядро ​​.NET на OS X, вы должны обернуть его в Docker. – mcgwier

+5

После всего этого: OpenSSL 0.9.8zh 14 января 2016 сдадут: Май 15 2016 Платформа: darwin64-x86_64-LLVM – AsimRazaKhan

+5

Создание символическая следующим образом работал для меня: 'пер -s/USR/местные /openssl-1.0.2h/bin/openssl/usr/local/bin/openssl'. После перезапуска сеанса терминала введите 'which openssl', чтобы убедиться, что вы используете обновленную версию 1.0.2 ('/usr/local/bin/openssl') вместо встроенного ('/ usr/bin/openssl'). – Olivier

7

Перепробовав все, что я мог бы найти и ничего не работало, я просто попытался это:

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 
+0

Это действительно простое решение, и я был очень обнадеживающим, что это сработает для меня, но мне не повезло. Даже после обновления моего PATH и перезапуска моего сеанса оболочки 'which openssl' по-прежнему указывает на'/usr/bin/openssl' –

+0

. Чтобы получить эту работу, мне пришлось также редактировать мой .bash_profile. Но единственное, что сработало, это сказать, чтобы он смотрел в/usr/local/bin вместо/usr/bin.Я сделал это, добавив 'export PATH =/usr/local/bin: $ PATH' –

+1

то же самое - он не работает –

37

Это то, что работает для меня:

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, прежде чем пытаться это сделать.

+9

- это полный путь для последней ссылки '/ usr/local/bin/openssl'? –

+0

Почему этот ответ не принят, вы спасли моего человека жизни. :: thumb up :: – wukong

+0

Миллион раз спасибо –

7

У меня такой же случай. Мне нужно установить openssl через варево, а затем использовать pip для установки mitmproxy. Я получаю такую ​​же жалобу от brew link --force. Ниже приводится решение, которое я достиг: (без силового звена на варку)

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

+0

Обнаружили это полезно для установки pysqlcipher – drtf

+0

Полезно для установки 'криптографии'. Мне не хватало переменную 'PKG_CONFIG_PATH' – Sagar

27

Просто запустите brew info openssl и читать информацию, где он говорит:

If you need to have this software first in your PATH run: echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

+3

' brew info openssl' предоставила мне такую ​​же полезную информацию. Выполнение предложенной команды выше, а затем запуск 'source ~/.bash_profile' или открытие нового терминала разрешили его для меня. – PanPipes

+1

НАКОНЕЦ. Это также сработало для меня. Другие ответы выше не сделали! – user124384

+2

не работает –

5

Это работает для меня:

brew install openssl 
cd /usr/local/include 
ln -s ../opt/openssl/include/openssl . 
+0

Это сработало для меня, пытаясь скомпилировать PHP 7.2.1 с phpbrew на Mac OS High Sierra - Спасибо! –

3

Раствор выше от edwardthesecond работал на меня тоже на Сьерра

brew install openssl 
cd /usr/local/include 
ln -s ../opt/openssl/include/openssl 
./configure && make 

Другие шаги, которые я сделал до этого были:

  • установка OpenSSL через варку

    brew install openssl 
    
  • добавления OpenSSL в пути, как предложено доморощенного

    brew info openssl 
    echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile 
    
+0

не работает, начиная с «configure and make» –

5

Просто чтобы оставить заметку об этом, я перенесла свой mac, и он отсоединил все мои установки homebrew, включая этот. Это сломало gem install, вот как я начал с этого исправлять.

Я попробовал миллион решений (я на OSX Sierra - 10.12.5) и решение в конечном итоге быть смешно просто:

brew reinstall ruby 
brew reinstall openssl 
+0

Yup, спасибо, что сделал это для меня тоже. – Matthew

 Смежные вопросы

  • Нет связанных вопросов^_^