Starting off with a fresh version of CentOS 7 minimal and trying to install Erlang and Elixir can be very frustrating.
The CentOS 7 Minimal install definitely holds up to its name (it really is bare bones), and the Erlang and Elixir packages are out-of-date on the repositories.
Don't worry though! In this article I'm going to take you through what turns out to be really simple steps to get the latest versions of Erlang and Elixir up and running on this minimal install.
First Things First
If you haven't already gotten a CentOS 7 Virtual Machine (VM) up and running take a look at my latest article for guidance.
Link to the article: Install a CentOS 7 Minimal Virtual Machine with VirtualBox
For those of you that do have your CentOS 7 VM up and running, lets get going!
Use a terminal, not the VirtualBox window
The very first thing I do is minimize my VM and ssh in from my local terminal (in this case iTerm 2). Because our VM is a minimal version of CentOS we won't have a graphical windows manager to make everything look pretty and scale on our nice HD displays. Everything will be done from the command-line anyways so I'd rather use a terminal that I can stretch or copy/paste from anytime I'd like. It's easier to do this from a terminal rather than the small command-line window VirtualBox is providing.
If you're having problems ssh'ing into your VM go back and take a look at the last few sections of the previous article mentioned above.
Down to business
There are two steps that could be considered the most important things to do before anything else. Mapping to the Extra Packages for Enterprise Linux (EPEL) repository and updating the tools already installed in our VM.
I choose to map the EPEL first. This can be done with the simple command:
sudo yum install epel-release
sudo allows us to gain root privileges temporarily with our account as long as the account is in the sudoers list.
Now we need to make sure the packages installed with our minimal os are update-to-date. The following command will update every package on the system and attempt to remove obsolete packages.
sudo yum -y update && sudo yum -y upgrade
The next command will install the development tools we'll need to install Erlang.
sudo yum install gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git
wxBase contains libraries needed by Erlang
sudo yum install wxBase.x86_64
wget is a tool that can retrieve files using http, https, and ftp.
sudo yum -y install wget
Now we can get on with installing Erlang and Elixir. First we need tell yum where it can find the latest stable release of Erlang, which at the time of writing this article is version 18.0. erlang-solutions.com hosts the package that I am going to use for this article.
The next two commands retrieve a package that adds a new repository to our repository list, and installs it.
wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
sudo rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
Now that our system knows where to get the latest stable release of Erlang we can actually install it. The esl-erlang package is the complete Erlang/OTP installation package. This is what we'll need to install Elixir.
sudo yum install esl-erlang
Now that we've successfully installed Erlang it's time to install Elixir!
We'll have to install Elixir manually as the version in the repo is far behind, but first we'll need to create the directory where we'll place Elixir.
sudo mkdir /opt/elixir
Now clone the Elixir repo from github.
sudo git clone https://github.com/elixir-lang/elixir.git /opt/elixir
Change your working directory to the location we just cloned Elixir into.
cd /opt/elixir
Now we can compile the elixir source. This step may take a couple of minutes.
sudo make clean test
Eventually we'll see all of the Elixir tests pass and we can finish up the process by creating a few symbolic links so that our newly compiled binaries can be used by all.
sudo ln -s /opt/elixir/bin/iex /usr/local/bin/iex
sudo ln -s /opt/elixir/bin/mix /usr/local/bin/mix
sudo ln -s /opt/elixir/bin/elixir /usr/local/bin/elixir
sudo ln -s /opt/elixir/bin/elixirc /usr/local/bin/elixirc
Wrapping it up
That's it! We now have an up-to-date Erlang and Elixir dev machine. Now may be a good time to go ahead and take a snapshot of the VM so that you can start another VM with the setup already done.