Skip to content

Instantly share code, notes, and snippets.

@llbbl
Last active November 3, 2023 06:05
Show Gist options
  • Save llbbl/c54f44d028d014514d5d837f64e60bac to your computer and use it in GitHub Desktop.
Save llbbl/c54f44d028d014514d5d837f64e60bac to your computer and use it in GitHub Desktop.
fix missing openssl files in catalina
#!/bin/bash
echo 'update brew'
brew update
echo 'upgrade brew'
brew upgrade
echo 'brew install openssl'
brew install openssl@1.1
echo 'backup existing lib files, if they exist'
if [ -f /usr/local/lib/libssl.dylib ]; then
mv /usr/local/lib/libssl.dylib /usr/local/lib/libssl_bak.dylib
fi
if [ -f /usr/local/lib/libcrypto.dylib ]; then
mv /usr/local/lib/libcrypto.dylib /usr/local/lib/libcrypto_bak.dylib
fi
# Leaving some commands to check directory contents
# ls -al /usr/local/Cellar/openssl@1.1/1.1.1d/lib
# ls -al /usr/local/lib/libssl* && ls -al /usr/local/lib/libcrypto*
echo 'add symlink to missing openssl libs'
if [ -f /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libssl.1.1.dylib ]; then
sudo ln -s /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libssl.1.1.dylib /usr/local/lib/libssl.dylib
fi
if [ -f /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libcrypto.1.1.dylib ]; then
sudo ln -s /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libcrypto.1.1.dylib /usr/local/lib/libcrypto.dylib
fi
@llbbl
Copy link
Author

llbbl commented Dec 18, 2019

@andresvia so looks like deleting and/or upgrading asn1crypto to > 1.20 would also fix it? seems like a better approach to patching in some symlinks.

@andresvia
Copy link

andresvia commented Dec 18, 2019

Yes @llbbl.

There are a lot of solutions out there, I'm going to post what worked for me.

At some point the pip3 command installed asn1crypto as dependency for another pip3 package, as mentioned by maintainer fxcoudert before the asn1crypto package is broken for Catalina before version 1.0.0 but pip3 uses cryptography functions, so pip3 also crashes, so it must be blasted manually.

I tried this first:

pip3 uninstall asn1crypto

It failed for me then I blasted the package manually (Python version may be different 3.7 in my case)

mv ~/Library/Python/3.7/lib/python/site-packages/asn1crypto ~/Library/Python/3.7/lib/python/site-packages/nope-asn1crypto-nope

Then I just pip3 installed it again.

pip3 install --upgrade asn1crypto

I had no no more crashes after this.

@cpavlatos
Copy link

Worked like a charm.

Although, I did Change the script to reflect a different version of OpenSSL(openssl@1.1):

Change Dir:
cd /usr/local/Cellar/openssl@1.1/1.1.1d/lib

Copy:
sudo cp libssl.1.1.dylib libssl.1.1.dylib /usr/local/lib/
sudo cp libcrypto.1.1.dylib libcrypto.1.1.dylib /usr/local/lib/

Symlinks:
sudo ln -s libssl.1.1.dylib libssl.dylib
sudo ln -s libcrypto.1.1.dylib libcrypto.dylib

@llbbl
Copy link
Author

llbbl commented Mar 7, 2020

Script update looks good @cpavlatos

Maybe we should install specific versions of openssl to future proof the script?

Ex:

brew install openssl@1.1

@cpavlatos
Copy link

cpavlatos commented Mar 7, 2020 via email

@MFRWDesign
Copy link

I'm running Mojave (10.14.6) here but figured I'd add my own 2-cents here:

All I had to do was:
cd /usr/local/Cellar/openssl/1.0.2q/lib
sudo cp libssl.1.0.0.dylib libcrypto.1.0.0.dylib /usr/local/lib/

Just those two commands, and it worked. (My error was slightly different though):

/Users/MYNAME/.rbenv/versions/2.5.1/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require': dlopen(/Users/MYNAME/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/openssl-2.1.2/lib/openssl.bundle, 9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (LoadError)
  Referenced from: /Users/MYNAME/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/openssl-2.1.2/lib/openssl.bundle
  Reason: image not found - /Users/MYNAME/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/openssl-2.1.2/lib/openssl.bundle

@llbbl
Copy link
Author

llbbl commented Mar 11, 2020

I updated the script based on @cpavlatos changes. See the version #1 of the script for the Openssl version 1.0.0 (1.0.2t). Please post if anyone has any issues.

@MFRWDesign I decided to go with the version 1.1.x changes because newer is better? Glad to hear you got it working fine with just copying the two *.dylib files.

@hl4
Copy link

hl4 commented Mar 17, 2020

why not link the library directly?

_ change the version number as is in your system. _
sudo ln -s /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libssl.1.1.dylib /usr/local/lib/libssl.dylib
sudo ln -s /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libcrypto.1.1.dylib /usr/local/lib/libcrypto.dylib

@llbbl
Copy link
Author

llbbl commented Mar 17, 2020

@hl4 Certainly possible... but you can symlink to stuff that doesn't exist? We would need to add an if dir exists block before the symlink? With the old school less optimized approach of cd to dir, then run commands, we have added bonus of it failing at the cd step. also I think keeping it simple is easier for everyone to understand? just a simple bash script that hopefully you have to run once! 🍭

@dddiaz
Copy link

dddiaz commented Mar 26, 2020

Tried the above solution to uninstall asn1crypto and reinstall it, and that fixed the problem for me.

pip3 uninstall asn1crypto
pip3 install --upgrade asn1crypto

@hulleyrob
Copy link

Do you get any errors when you run the bash script above?

@llbbl
Copy link
Author

llbbl commented Apr 27, 2020

@andrewyip1 perhaps Python doesn't know about the /usr/local/lib folder? Only thing I can think of, if everything worked fine?

@llbbl
Copy link
Author

llbbl commented Apr 27, 2020

check what version of openssl in this folder, /usr/local/Cellar/openssl@1.1/
if there are issues with the script the brew install step might have installed a new version other than "1.1.1d"

@llbbl
Copy link
Author

llbbl commented Apr 27, 2020

Script needs to be updated to that version and it should work. Let us know if that fixed it ?

@hulleyrob
Copy link

it is confusing with seeing the 1.1.dylib in there often but if you try this command

"cd /usr/local/Cellar/openssl@1.1/1.1.1g/lib"

and it works then change line 17 to match it.

@hulleyrob
Copy link

Does that folder exist for you when you into it?

@hulleyrob
Copy link

id suggest running each part of the script from the command line 1 by 1 and post any errors you get and which command caused the error.

@fengs
Copy link

fengs commented May 24, 2020

The backup should be moved before the cp as after cp the system's lib files have already been overwritten by brew installed ones.

@llbbl
Copy link
Author

llbbl commented May 24, 2020

@fengs I think has a pretty good suggestion, but now I am going back and looking at old version I don't see the issue. The system shouldn't be using "libssl.1.1.dylib" and "libcrypto.1.1.dylib". We were doing a backup of the system libs if they existed. The cp would only overwrite "libssl.1.1.dylib" and "libcrypto.1.1.dylib" if they existed.

Well might as well as combine the bottom part of the script as the previous person suggestion. Sorry for the added complexity, but I think adding the if statements might prevent some possible errors and will be good to add.

@llbbl
Copy link
Author

llbbl commented May 24, 2020

OK, I think should be fine for a while now taking into account everyone's suggestions. Won't get ANY errors now for sure. I removed the now unnecessary directory changes.

@greenhouse
Copy link

hello, i had an issue with 'abort 6' when importing 'requests' package after updating to catalina. while searching for a solution, i was lead to this page. unfortunately none of the above worked for me, however...

updating to python 3.8 manually from python.org seemed to solve this issue very easily for me. i had to reinstall all my packages (w/ pip3) as i came across errors, but that wasn't so bad.

i don't see any of my projects having an issue with python3.8 so far (been using 3.7 for a while)

hope this helps someone!
thanks for all the additional suggestions and efforts!

@lihuanshuai
Copy link

cd /usr/local/lib
ln -sn ../Cellar/openssl@1.1/1.1.1g/lib/libcrypto.1.1.dylib libcrypto.dylib
ln -sn ../Cellar/openssl@1.1/1.1.1g/lib/libssl.1.1.dylib libssl.dylib

would be enough, no need to copy

@MikaelX
Copy link

MikaelX commented Sep 17, 2020

cd /usr/local/lib
ln -sn ../Cellar/openssl@1.1/1.1.1g/lib/libcrypto.1.1.dylib libcrypto.dylib
ln -sn ../Cellar/openssl@1.1/1.1.1g/lib/libssl.1.1.dylib libssl.dylib

would be enough, no need to copy

This solved my issue perfectly! Thank you

@vutran0111
Copy link

cd /usr/local/lib
ln -sn ../Cellar/openssl@1.1/1.1.1g/lib/libcrypto.1.1.dylib libcrypto.dylib
ln -sn ../Cellar/openssl@1.1/1.1.1g/lib/libssl.1.1.dylib libssl.dylib

would be enough, no need to copy

You save my day, thank you so much!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment