152 votes

Homebrew refuse de lier OpenSSL

Je suis sur : OSX 10.11.6, Homebrew version 0.9.9m OpenSSL 0.9.8zg 14 juillet 2015

J'essaye de jouer avec dotnetcore et en suivant leur instructions ,

J'ai mis à jour/installé la dernière version d'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

Mais lorsque j'essaie de lier openssl, je continue à rencontrer cette erreur de liaison :

> 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

L'option permettant d'inclure les drapeaux de compilation n'a pas de sens pour moi, puisque je ne compile pas ces bibliothèques dont je suis dépendant.

EDIT dotnetcore a mis à jour ses instructions :

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 votes

Pour .NET Core, vous avez besoin d'une version d'OpenSSL prise en charge, c'est-à-dire une version 1.0.1 ou 1.0.2. Puisque vous signalez une version 0.9.8, vous devez peut-être brew upgrade openssl d'abord ?

2 votes

Je l'ai déjà fait. J'aurais dû préciser, mais je n'ai pas ajouté ces étapes à la question. Mais j'ai déjà fait le brew update et brew install openssl . Il s'agit d'essayer d'installer la version supportée.

2 votes

On dirait que Homebrew l'a explicitement bloqué : github.com/Homebrew/brew/commit/ .

63voto

Ben Collins Points 11318

Comme le suggère la mise à jour de l'autre réponse, la solution de contournement consistant à installer l'ancien brassage openssl101 ne fonctionnera plus. Pour une solution de contournement immédiate, voir ce commentaire sur dotnet/cli#3964 .

La partie la plus pertinente de la question copiée ici :

J'ai examiné l'autre option qui a été suggérée pour définir le chemin d'accès à la bibliothèque. Je pense que ce qui suit est une meilleure solution qui n'affectera que cette bibliothèque spécifique.

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

et/ou si vous avez installé NETCore 1.0.1, exécutez la même commande pour 1.0.1 également :

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

En effet, plutôt que d'indiquer au système d'exploitation de toujours utiliser la version homebrew de SSL et de provoquer potentiellement une panne, nous indiquons à dotnet comment trouver la bibliothèque correcte.

De plus, il semble que Microsoft soit conscient du problème et qu'il ait à la fois a) un plan d'atténuation immédiat et b) une solution à long terme (probablement l'intégration d'OpenSSL dans dotnet).

Une autre chose à noter : /usr/local/opt/openssl/lib est l'endroit où l'infusion est liée par défaut :

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

Si, pour une raison quelconque, vous installez le brew et le liez à un endroit différent, alors ce chemin est celui que vous devez utiliser comme rpath.

Une fois que vous avez mis à jour le rpath de la librairie System.Security.Cryptography.Native.dylib, vous devrez redémarrer votre session interactive (c'est-à-dire fermer votre console et en démarrer une autre).

0 votes

Où dois-je ajouter cette ligne ? J'essaie de faire en sorte que cela fonctionne dans CI. J'obtiens un /usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/S‌​ystem.Security.Crypt‌​ography.Native.dylib (No such file or directory) .

0 votes

@mrahhal c'est le chemin d'installation de l'application dotnet l'outillage. Il est possible que vous ne l'ayez pas installé ou que vous l'ayez installé à un autre endroit. S'il est installé et sur votre site, vous pouvez utiliser les éléments suivants which dotnet pour le trouver.

0 votes

Oh, je viens de réaliser que j'ajoute cette ligne avant l'installation. dotnet . Je réessayerai et reviendrai.

61voto

rorykoehler Points 858

C'est ce qui a marché pour moi :

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

Merci à @dorlandode sur ce fil de discussion https://github.com/Homebrew/brew/pull/597

NB : Je n'ai utilisé cette solution que de manière temporaire, jusqu'à ce que je puisse passer du temps à réinstaller correctement Openssl depuis le début. Si je me souviens bien, j'ai passé la majeure partie d'une journée à déboguer et à avoir des problèmes avant de réaliser que la meilleure solution était d'installer manuellement les certificats dont j'avais besoin un par un. Veuillez lire le lien dans le commentaire de @bouke avant d'essayer.

9 votes

Est le chemin complet du dernier lien /usr/local/bin/openssl ?

0 votes

Pourquoi cette réponse n'est pas acceptée, tu m'as sauvé la vie, mec. ::thumb up: :

2 votes

Il y a une bonne raison pour laquelle Brew refuse de le faire. Voir aussi ceci : github.com/Homebrew/brew/pull/597 .

49voto

mcgwier Points 555

Aucune de ces solutions n'a fonctionné pour moi sur OS X El Capitan 10.11.6. Probablement parce que OS X a une version native d'openssl qu'il croit supérieure, et en tant que telle, n'aime pas les manipulations.

Alors, j'ai pris la grande route et j'ai recommencé à zéro...


Installation manuelle et lien symbolique

cd /usr/local/src  
  • Si vous obtenez "No such file or directory", faites-le :

    cd /usr/local && mkdir src && cd src

Télécharger openssl :

curl --remote-name https://www.openssl.org/source/openssl-1.0.2h.tar.gz

Extrait et cd in :

tar -xzvf openssl-1.0.2h.tar.gz
cd openssl-1.0.2h

Compiler et installer :

./configure darwin64-x86_64-cc --prefix=/usr/local/openssl-1.0.2h shared
make depend
make
make install

Maintenant, faites un lien symbolique entre openssl d'OS X et votre nouvel openssl mis à jour :

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

Fermez le terminal, ouvrez une nouvelle session, et vérifiez que OS X utilise votre nouvel openssl :

openssl version -a

0 votes

Si vous essayez d'installer .NET core sur OS X, vous devez l'envelopper dans Docker.

6 votes

Après avoir fait tout ça : OpenSSL 0.9.8zh 14 Jan 2016 construit le : 15 mai 2016 plateforme : darwin64-x86_64-llvm

5 votes

Créer un lien symbolique de la manière suivante a fonctionné pour moi : ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/openssl . Après avoir redémarré votre session de terminal, tapez which openssl pour vous assurer que vous utilisez la version 1.0.2 mise à jour ( /usr/local/bin/openssl ) au lieu de celui intégré ( /usr/bin/openssl ).

47voto

Exécutez simplement brew info openssl et lisez l'information où il est dit :

Si vous devez avoir ce logiciel en premier dans votre PATH, exécutez-le : echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

3 votes

brew info openssl a donné les mêmes informations utiles pour moi. En exécutant la commande suggérée ci-dessus, puis en exécutant source ~/.bash_profile ou l'ouverture d'un nouveau terminal a résolu le problème pour moi.

2 votes

ENFIN. Cela a également fonctionné pour moi. Les autres réponses ci-dessus n'ont pas fonctionné !

2 votes

Ou echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc

17voto

tobybot Points 1

Si la migration de votre Mac casse le homebrew :

J'ai migré mon Mac, et il s'est déconnecté. tous mes installations homebrew - y compris OpenSSL. Cela a cassé gem install C'est ainsi que j'ai remarqué le problème pour la première fois et que j'ai commencé à essayer de le réparer.

Après un million de solutions (lors de la migration vers OSX Sierra - 10.12.5), la solution a fini par être d'une simplicité comique :

brew reinstall ruby
brew reinstall openssl

0 votes

Et un an plus tard, cela m'est arrivé lors de la migration de mon Mac, et votre solution a également fonctionné pour moi. Merci beaucoup ; j'en étais au point d'envisager d'effacer mon nouveau Mac, de faire une nouvelle installation et de tout régler à nouveau manuellement.

0 votes

David, content d'avoir pu t'empêcher de passer par-dessus bord ! J'ai failli faire la même chose.

1 votes

Vous devrez peut-être aussi supprimer ce dossier avant de faire ce qui précède. rm -rf /usr/local/opt/openssl

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X