Include openssl within a build

Is there a way to include openssl within a build, rather than relying on the target system install?

Looks like Erlang libraries such as crypto relies on specific openssl installation version, and when production image is built, and is being distributed, it creates a dependency on specific version of openssl being installed on the target machine.

It needs to be compatible version, not exactly the same.

I recall that there was option to include system libraries in one of the release tools out there, but I cannot find it right now. If you want to distribute release with all libraries then maybe tools like Nix or Guix would be interesting for you, as these allows you to pack your application with all dependencies.

Thanks @hauleth, will look into Nix and Guix.
As you mentioned, I was hoping there was an option to include openssl into the build since some Erlang modules are dependent on it.

You can also statically link openssl when compiling erlang. I experimented with this in the past and it is possible. I deemed it not worth the work involved though.

Some potentially outdated info:

http://erlang.2086793.n4.nabble.com/static-build-of-Erlang-with-openssl-td4681642.html

with the summary of:

% openssl 

./Configure --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared 
make && make install 

% erlang 

./configure --with-ssl=/usr/local/ssl/ --disable-dynamic-ssl-lib 

Thanks @cmkarlsson… That was it. Got it working by adding --disable-dynamic-ssl-lib. That’s all that was missing. For MacOS environment,

asdf uninstall erlang 21.3.8.2
export KERL_CONFIGURE_OPTIONS="–disable-dynamic-ssl-lib --without-javac --with-ssl=/usr/local/Cellar/openssl/1.0.2t"
asdf install erlang 21.3.8.2

And then build.

2 Likes