Error with libopenssl when installing mediasoup in macOS

I keep getting this error when trying to install mediasoup. I’m using macOS btw.

Thanks,
Philip

➜  webrtc-server git:(master) ✗ yarn add mediasoup                                      
yarn add v1.16.0
warning package.json: No license field
[1/4] 🔍  Resolving packages...
warning workspace-aggregator-d84aaee2-618b-4690-852e-347d6a89077a > webrtc-server > socketio-jwt > xtend > object-keys@0.4.0: 
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
[4/4] 🔨  Building fresh packages...
[2/2] ⠂ mediasoup
error /Users/username/Workspace/work/webrtc/node_modules/mediasoup: Command failed.
Exit code: 2
Command: make -C worker
Arguments: 
Directory: /Users/username/Workspace/work/webrtc/node_modules/mediasoup
Output:
python ./scripts/configure.py -R mediasoup-worker
['-R', 'mediasoup-worker', '/Users/username/Workspace/work/webrtc/node_modules/mediasoup/worker/mediasoup-worker.gyp', '-I', '/Users/username/Workspace/work/webrtc/node_modules/mediasoup/worker/common.gypi', '--depth=.', '-f', 'make', '-Goutput_dir=/Users/username/Workspace/work/webrtc/node_modules/mediasoup/worker/out', '--generator-output', '/Users/username/Workspace/work/webrtc/node_modules/mediasoup/worker/out', '-Dgcc_version=42', '-Dclang=1', '-Dhost_arch=x64', '-Dtarget_arch=x64', '-Dopenssl_fips=', '-Dmediasoup_asan=false', '-Dnode_byteorder=little']
/Applications/Xcode.app/Contents/Developer/usr/bin/make BUILDTYPE=Release -C out
  CC(target) /Users/username/Workspace/work/webrtc/node_modules/mediasoup/worker/out/Release/obj.target/libsrtp/deps/libsrtp/srtp/srtp/ekt.o
  CC(target) /Users/username/Workspace/work/webrtc/node_modules/mediasoup/worker/out/Release/obj.target/libsrtp/deps/libsrtp/srtp/srtp/srtp.o
  ...
  CC(target) /Users/username/Workspace/work/webrtc/node_modules/mediasoup/worker/out/Release/obj.target/openssl/deps/openssl/openssl/engines/e_capi.o
  CC(target) /Users/username/Workspace/work/webrtc/node_modules/mediasoup/worker/out/Release/obj.target/openssl/deps/openssl/openssl/engines/e_padlock.o
  LIBTOOL-STATIC /Users/username/Workspace/work/webrtc/node_modules/mediasoup/worker/out/Release/libopenssl.a
Traceback (most recent call last):
  File "./gyp-mac-tool", line 720, in <module>
    sys.exit(main(sys.argv[1:]))
  File "./gyp-mac-tool", line 30, in main
    exit_code = executor.Dispatch(args)
  File "./gyp-mac-tool", line 45, in Dispatch
    return getattr(self, method)(*args[1:])
  File "./gyp-mac-tool", line 274, in ExecFilterLibtool
    if not libtool_re.match(line) and not libtool_re5.match(line):
TypeError: cannot use a string pattern on a bytes-like object
make[1]: *** [/Users/username/Workspace/work/webrtc/node_modules/mediasoup/worker/out/Release/libopenssl.a] Error 1
make: *** [default] Error 2

Please, specify at least which version of mediasoup you are installing. And also type python --version output, OSX version, etc.

macOS: 10.14.5
mediasoup: 3.0.12
node: 10.15.0
python: 3.6.6 (I also have python2 with version 2.7.15)
yarn: 1.16.0

It works for me with:

  • macOS: 10.14.4
  • mediasoup: 3.0.12
  • node: 10.15.0
  • python: 3.7.2
  • yarn: 1.16.0

Please, try two different approaches:

1. Install mediasoup with Python 2

Assuming you have python2 command:

$ PYTHON=python2 yarn add mediasoup

2. Upgrade Python 3 to 3.7.2

Or newer. AFAIS I’ve got it via Homebrew. And try again.

And since this looks a bug, please let’s continue in GitHub (I’ve reopened the corresponding issue):

I’ve tried the following and unfortunately all of them failed:

  • PYTHON=python2 yarn add mediasoup (2.7.15)
  • yarn add mediasoup (upgraded to 3.7.3)
  • PYTHON=/usr/local/Cellar/python@2/2.7.16/bin/python yarn add mediasoup (tried using homebrew’s python)

I also tried disabling nvm and manually installing node 10.16.0 and it’s still failing for me.

I’m not sure if it matters but I also use pyenv.

Definitely no idea. Can you experiment without yarn? I mean, clone the mediasoup repo, enter into the worker directory and run:

  • make
  • PYTHON=xxxxxx make
  • etc

Also, are you sure that when you have tested yarn add mediasoup (upgraded to 3.7.3) you have used python 3.7.3?

Okay I’ve tried what you’ve suggested and added some print statements in mac-tool.py

Does this help?

for line in err.splitlines():
    print("Line:", line, "\n")
    if not libtool_re.match(line) and not libtool_re5.match(line):
        print(line, file=sys.stderr)

Line:
b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/username/Workspace/libraries/mediasoup-3/worker/out/Release/obj.target/openssl/deps/openssl/openssl/ssl/ssl_utst.o has no symbols’

Final Error:
Traceback (most recent call last):
File “./gyp-mac-tool”, line 729, in
sys.exit(main(sys.argv[1:]))
File “./gyp-mac-tool”, line 30, in main
exit_code = executor.Dispatch(args)
File “./gyp-mac-tool”, line 45, in Dispatch
return getattr(self, method)(*args[1:])
File “./gyp-mac-tool”, line 283, in ExecFilterLibtool
raise e
File “./gyp-mac-tool”, line 279, in ExecFilterLibtool
if not libtool_re.match(line) and not libtool_re5.match(line):
TypeError: cannot use a string pattern on a bytes-like object
make[1]: *** [/Users/username/Workspace/libraries/mediasoup-3/worker/out/Release/libopenssl.a] Error 1
make: *** [default] Error 2

Printing err.splitlines() will output the following:

[b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/ssl/ssl_utst.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/ssl/t1_trce.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/async/arch/async_null.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/async/arch/async_win.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/cms/cms_cd.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/dso/dso_dl.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/dso/dso_openssl.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/dso/dso_vms.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/dso/dso_win32.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/ebcdic.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/ec/ecp_nistp224.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/ec/ecp_nistp256.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/ec/ecp_nistp521.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/ec/ecp_nistputil.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/evp/e_rc5.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/evp/m_md2.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/rand/rand_egd.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/rand/rand_vms.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/rand/rand_win.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/threads_none.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/crypto/threads_win.o has no symbols’,

b’/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: /Users/…/worker/out/Release/obj.target/openssl/deps/openssl/openssl/engines/e_padlock.o has no symbols’]

Modifying mac_tool.py works!

for line in err.splitlines():
      decoded_line = line.decode("utf-8") 
      if not libtool_re.match(decoded_line) and not libtool_re5.match(decoded_line):
        print(decoded_line, file=sys.stderr)

Can you please provide the diff in the corresponding Chromium issue? I’ll come back to this issue next week.

Okay I’ve just replied here
https://bugs.chromium.org/p/gyp/issues/detail?id=36

Thanks by the way!

I’ve added that path in mediasoup v3 branch and also made a change to prefer python2 if available:

Can you please try with v3 branch to see if it works? Note that it would now choose python2 by default, so in order to test python 3 just do PYTHON=python3 make as you know :slight_smile:

Let’s make this question as resolved and let’s continue in the gyp issue in chromium.

1 Like