Can't install Erlang 22.0 with asdf

I’m trying to install Erlang 22.0 with asdf, but it fails. I’m using Ubuntu 22.04 and followed the before install steps here

asdf install erlang 22.0
asdf_22.0 is not a kerl-managed Erlang/OTP installation
The asdf_22.0 build has been deleted
Extracting source code
Building Erlang/OTP 22.0 (asdf_22.0), please wait...
Build failed.
gmake[4]: *** [x86_64-unknown-linux-gnu/Makefile:669: /home/sauronnikko/.asdf/plugins/erlang/kerl-home/builds/asdf_22.0/otp_src_22.0/lib/erl_interface/bin/x86_64-unknown-linux-gnu/erl_call] Error 1
gmake[4]: *** Waiting for unfinished jobs....
gmake[4]: Leaving directory '/home/sauronnikko/.asdf/plugins/erlang/kerl-home/builds/asdf_22.0/otp_src_22.0/lib/erl_interface/src'
gmake[3]: *** [Makefile:31: opt] Error 2
gmake[3]: Leaving directory '/home/sauronnikko/.asdf/plugins/erlang/kerl-home/builds/asdf_22.0/otp_src_22.0/lib/erl_interface/src'
gmake[2]: *** [/home/sauronnikko/.asdf/plugins/erlang/kerl-home/builds/asdf_22.0/otp_src_22.0/make/otp_subdir.mk:29: opt] Error 2
gmake[2]: Leaving directory '/home/sauronnikko/.asdf/plugins/erlang/kerl-home/builds/asdf_22.0/otp_src_22.0/lib/erl_interface'
gmake[1]: *** [/home/sauronnikko/.asdf/plugins/erlang/kerl-home/builds/asdf_22.0/otp_src_22.0/make/otp_subdir.mk:29: opt] Error 2
gmake[1]: Leaving directory '/home/sauronnikko/.asdf/plugins/erlang/kerl-home/builds/asdf_22.0/otp_src_22.0/lib'
gmake: *** [Makefile:490: libs] Error 2

Please see /home/sauronnikko/.asdf/plugins/erlang/kerl-home/builds/asdf_22.0/otp_build_22.0.log for full details.

Here are the contents of the log file: https://gist.github.com/sauronnikko/5b85263ec5294b403e27e41012f9a23f

Can you help me fix this? Thanks :slight_smile:

The “multiple definitions” error in your log file matches the one in this issue exactly:

The linked kerl issue suggests that switching to GCC 9 or Clang may help.

Analyse

ok, let’s take a look …

Tested Erlang environments

First of all Erlang is tested on 10.04 - 20-04. It should be fine with 22.04 as well, but it’s worth to mention and keep in mind that according to documentation it wasn’t officially tested against this version of Ubuntu

Why Bob?

You may wonder why I mention Bob? That’s because I’m using it’s builds in all of my development environments. Obviously installing prebuilt package speeds up setup environment process, so for me it’s the fastest and safest way.

Bob’s prebuilt packages

Since Erlang does not provides any prebuilt packages for other os than Windows, we can take a look at Bob’s page. It lists a prebuilt packages for Erlang for Ubuntu versions 14.04 - 20.04 and even not all Erlang versions are “supported” (by Bob’s page) for all Ubuntu versions. I guess it’s just nobody asked for triggering old OTP builds who for most people are unnecessary …

Bob’s prebuilt packages on Hex

However this is not all. We still have a complete lists of Bob’s builds hosted on hex and there we can find a builds for Ubuntu 22.04, but only for OTP-24.2 and above.

Results

Official support

Since I do not know any other source of Erlang builds I guess that our communities does not provide Erlang 22.0 builds for Ubuntu 22.04. The reason for it may be compilation problems like yours or as said just no trigger happen for previous Erlang versions … In any case “officially” there are no tested support and prebuilt builds even provided by community.

My recommendation

Having above in mind in first place I would verify your environment following Erlang documentation and Bob’s build process. Meanwhile I would also ask @ericmj (the first and top of Bob’s contributor) if he knows about any problems or if he can trigger a build for said version. I guess that Bob have enough well-tested environment, so that we can confirm if any issue like this happens only in specific cases (like not met all requirements) or it’s a common problem.

Possible workaround

We have an Erlang plugin for prebuilt packages, but unfortunately it needs to follow Hex’s build list. However there is a workaround. You can install plugin for Erlang prebuilt packages for previous Ubuntu versions (like 20.04) - I have just tested it and iex works as expected, but keep in mind that’s not a “safe way” and it never would be recommended.

asdf plugin-add erlang-ubuntu-20 https://github.com/michallepicki/asdf-erlang-prebuilt-ubuntu-20.04.git
asdf install erlang-ubuntu-20 22.0

Helpful resouces

  1. Erlang/OTP test architectures
  2. Bob’s List page and Github page
  3. Fully Hex’s list of OTP builds for Ubuntu 22.04
  4. Building and Installing Erlang/OTP
  5. Bob’s build scripts
  6. The initial Bob’s commit and Top `Bob’s contributors page
  7. List of Michał Łępicki’s asdf repositories for various Ubuntu versions
3 Likes

Ubuntu 22.04 comes with OpenSSL 3.0 only, and earlier versions are not available in apt repositories. Erlang prior to 24.2 does not even build with OpenSSL 3.0. You can either look into installing OpenSSL 1.x from source, and passing its path to asdf / kerl / erlang configuration… Or upgrading to Erlang 24.2 or newer

1 Like

iex doesn’t show problems at first with that prebuilt version.

But when trying to install hex, I got the openssl 1.1 dependency error under Ubuntu 22.04.

You need to downgrade openssl packages to the 20.04 versions, or compile them manually as mentioned.

If you wanna to risk your distro here’s quickest way to do it :expressionless::

wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb

wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl-dev_1.1.1f-1ubuntu2.16_amd64.deb

wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/openssl_1.1.1f-1ubuntu2.16_amd64.deb

sudo dpkg -i *.deb

Ubuntu 22.04 itself seems to run fine with this, but upgrade your app’s support for newer Erlang/elixir versions just in case, and avoid openssl headaches overall.