Tecnologia / Artigos / Erlang /
Kerl: o virtualenv do Erlang

Cléber

* Date: 2014-12-09 12:34:56 * Modified: 2018-11-30 22:35:00 ----- 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: ```bash 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: ```bash 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: ```bash 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: ```bash $ 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: ```bash $ 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: ```bash KERL_CONFIGURE_OPTIONS=–enable-hipe kerl build 17.3 17.3_hipe && echo “= OK =” ``` A sintaxe básica é: ```bash 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: ```bash $ 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: ```bash $ kerl active No Erlang/OTP kerl installation is currently active ``` Ou, para informações mais abrangentes: ```bash $ 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: ```bash kerl deploy outro_host /caminho/da/sua/instalacao ``` Variáveis de ambiente ```bash 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].

Curti

49 visitantes curtiram esse Item.

Anterior: Mão na massa Erlang: processos concorrentes | Próximo: Dica rápida: spawn e self