[erlang-questions] Deploying forked Erlang releases?

Roger Lipscombe <>
Thu Sep 10 11:14:03 CEST 2015


On 9 September 2015 at 15:10, Tristan Sloughter <> wrote:
> relx (which rebar3 uses and can be used standalone) generates a useful start
> script (set {extended_start_script, true} in the config of your project)
> with options for starting, stopping, getting a remote console, upgrading the
> release, and more.

We're already using relx, so I just added the {include_erts, true} option.

Next, to get the correct OTP build onto the build host, I added the
following to the top of our Jenkins script:

OTP_VERSION=$(cat .otp-version)
KERL=./kerl

# Is that installed somewhere?
OTP_INSTALLATION=$($KERL list installations | grep "^$OTP_VERSION " |
cut -d' ' -f2)
if [ ! -s "$OTP_INSTALLATION/activate" ] ; then
    echo "Error: No OTP $OTP_VERSION installation; installing it using kerl..."

    if ! ( $KERL list builds | grep -q "^git,${OTP_VERSION}\$" ) ; then
        echo "Error: No OTP $OTP_VERSION build; building it using kerl..."

        # $OTP_VERSION is the tag in git and is used as the name of the build:
        $KERL build git https://github.com/electricimp/otp.git
$OTP_VERSION $OTP_VERSION
    fi

    $KERL install $OTP_VERSION $HOME/erlang/$OTP_VERSION
    OTP_INSTALLATION=$HOME/erlang/$OTP_VERSION
fi

. $OTP_INSTALLATION/activate

It slows down the build the first time that it's built on a new
Jenkins slave, but you can short-cut that by having chef pre-install
the relevant Erlang/OTP version beforehand if you want.

We also use direnv for individual developer machines; the .envrc looks
like this:

OTP_VERSION=$(cat .otp-version)

if has kerl; then
    OTP_INSTALLATION=$(kerl list installations | grep "^$OTP_VERSION "
| cut -d' ' -f2)
    if [ -s "$OTP_INSTALLATION/activate" ] ; then
        echo "Using Erlang/OTP $OTP_VERSION (in $OTP_INSTALLATION) via kerl."
        . $OTP_INSTALLATION/activate

        export OTP_ROOT=$OTP_INSTALLATION
        export OTP_VERSION
    else
        echo "Erlang/OTP $OTP_VERSION not available via kerl; using default."
    fi
else
    echo "kerl not available; using default Erlang."
fi

...and we expect that developers have the correct Erlang/OTP installed
using kerl, in an appropriate place.


More information about the erlang-questions mailing list