Kerl: o virtualenv do Erlang

A ideia do kerl é facilitar o building e a instalação de instâncias de Erlang/OTP ([https://github.com/yrashk/kerl]). Ele permite que você instale, por exemplo, várias versões da VM e até facilita que você tenha várias instâncias da mesma versão, mas compiladas com opções diferentes (habilitar o HiPE apenas em uma, por exemplo).

E o melhor é que trata-se apenas de um pequeno script shell. Vamos começar a usá-lo?

Baixar

Mais fácil impossível:

wget https://raw.githubusercontent.com/spawngrid/kerl/master/kerl

Instalar

Eu tenho meu próprio ~/bin já configurado (se você usa Windows, desculpaê, não vou te ajudar). Eu sempre recomendo que você tenha o seu:

mkdir ~/bin
echo 'export PATH=$HOME/bin:$PATH' ᐳᐳ ~/.bashrc

Eu configuro, na verdade, um “.shellrc”, que serve como “inicializador genérico” tanto para o bash, que eu não uso diretamente, quanto o zsh, meu shell favorito.

Agora, jogue o script “kerl”, recém-baixado, no seu ~/bin:

mv kerl ~/bin

E garanta que seu PATH está correto:

source ~/.bashrc

(Ou, no meu caso, que uso zsh e já tenho o PATH configurado:)

rehash

Usando

Para listar as releases disponíveis:

$ kerl list releases
Getting the available releases from erlang.org...
R10B-0 R10B-10 R10B-1a R10B-2 R10B-3 R10B-4 R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0 R11B-1 R11B-2 R11B-3 R11B-4 R11B-5 R12B-0 R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A R13B01 R13B02-1 R13B02 R13B03 R13B04 R13B R14A R14B01 R14B02 R14B03 R14B04 R14B_erts-5.8.1.1 R14B R15B01 R15B02 R15B02_with_MSVCR100_installer_fix R15B03-1 R15B03 R15B R16A_RELEASE_CANDIDATE R16B01 R16B02 R16B03-1 R16B03 R16B 17.0-rc1 17.0-rc2 17.0 17.1 17.3
Run "/home/cleber/bin/kerl update releases" to update this list from erlang.org

Eu resolvi atualizar a lista, só por precaução:

$ kerl update releases
Getting the available releases from erlang.org...
The available releases are:
R10B-0 R10B-10 R10B-1a R10B-2 R10B-3 R10B-4 R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0 R11B-1 R11B-2 R11B-3 R11B-4 R11B-5 R12B-0 R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A R13B01 R13B02-1 R13B02 R13B03 R13B04 R13B R14A R14B01 R14B02 R14B03 R14B04 R14B_erts-5.8.1.1 R14B R15B01 R15B02 R15B02_with_MSVCR100_installer_fix R15B03-1 R15B03 R15B R16A_RELEASE_CANDIDATE R16B01 R16B02 R16B03-1 R16B03 R16B 17.0-rc1 17.0-rc2 17.0 17.1 17.3

(Já estava atualizada antes.)

A versão do meu sistema era a R16B03. Então eu vou construir, aqui, a 17.3 com suporte a HiPE:

KERL_CONFIGURE_OPTIONS=–enable-hipe kerl build 17.3 17.3_hipe && echo “= OK =”

A sintaxe básica é:

kerl build VERSAO NOME_DO_SEU_BUILD

Ele então vai baixar os fontes:

Downloading otp_src_17.3.tar.gz to /home/cleber/.kerl/archives
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  2 63.9M    2 1371k    0     0  91142      0  0:12:15  0:00:15  0:12:00 95407

E então compilar. E compilar demora…

Verifying archive checksum...
Checksum verified (1d0bb2d54dfe1bb6844756b99902ba20)
Extracting source code
Building Erlang/OTP 17.3 (17.3_hipe), please wait...
Erlang/OTP 17.3 (17.3_hipe) has been successfully built
= OK =

Mas ele só fez o build! Precisamos instalar essa versão que compilamos:

$ kerl install 17.3_hipe ~/erlang/17.3_hipe
Installing Erlang/OTP 17.3 (17.3_hipe) in /home/cleber/erlang/17.3_hipe...
You can activate this installation running the following command:
. /home/cleber/erlang/17.3_hipe/activate
Later on, you can leave the installation typing:
kerl_deactivate

Essa do activate/deactivate é o que me lembra mais o virtualenv.

Para checar qual versão está ativa no momento, use:

$ kerl active
No Erlang/OTP kerl installation is currently active

Ou, para informações mais abrangentes:

$ kerl status
Available builds:
17.3,17.3_hipe
----------
Available installations:
17.3_hipe /home/cleber/erlang/17.3_hipe
----------
No Erlang/OTP kerl installation is currently active

Deploy

É legal que o kerl permite deploy de uma instalação em um host remoto via ssh. Isso poupa o tempo que você gastaria para compilar tudo várias vezes em várias máquinas.

Como fazer:

kerl deploy outro_host /caminho/da/sua/instalacao

Variáveis de ambiente

KERL_DOWNLOAD_DIR: onde baixar os arquivos. Default: $HOME/.kerl/archives
KERL_BUILD_DIR: onde fazer os builds. Default: $HOME/.kerl/builds
KERL_CONFIGURE_OPTIONS: opções a serem enviadas para o “./configure” do Erlang.
KERL_CONFIGURE_APPLICATIONS: subconjunto de aplicações a serem usadas no build. Exemplo: “kernel stdlib sasl”
KERL_CONFIGURE_DISABLE_APPLICATIONS: subconjunto de aplicações a não serem usadas no build. Exemplo: “odbc”
KERL_DEPLOY_SSH_OPTIONS: opções adicionais para o deploy com ssh. Exemplo: “-qx -o PasswordAuthentication=no”
KERL_DEPLOY_RSYNC_OPTIONS: opções adicionais para deploy com rsync. Exemplo: “–delete”
KERL_ENABLE_PROMPT: prefixo para ser usado no prompt quando uma build específica estiver ativa (bem no jeitão do virtualenv, mesmo)

Resumo


Este artigo foi escrito originalmente em 09/12/2014.