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
- Instalar várias versões de Erlang na mesma máquina é fácil. :)
- Onde conseguir mais informações: [https://github.com/yrashk/kerl].
Este artigo foi escrito originalmente em 09/12/2014.