DEV Community

Adriano Avelino
Adriano Avelino

Posted on

📦 ASDF: Gerenciando versões de linguagens e ferramentas num lugar só

Imagine que você está em um restaurante fast-food e você tem a liberdade de escolher os acompanhamentos do seu lanche. Você pode optar por um pão integral, carne de frango grelhada, queijo cheddar e tomate. Mas e se, na próxima vez, você quiser um hambúrguer com bacon e cebola caramelizada?

O asdf funciona como esse fast-food. No lugar de lanches, temos linguagens de programação e ferramentas como Python, Ruby, Node.js, etc. Em vez de ingredientes, temos versões específicas dessas linguagens.

Como funciona:

  • Você, o cliente: É o desenvolvedor que precisa de uma determinada versão de uma linguagem para um projeto específico.
  • O menu: É o repositório de plugins do asdf, onde você encontra todas as linguagens e ferramentas disponíveis.
  • O funcionário: É o próprio asdf, que vai buscar a versão exata da linguagem que você escolheu e configurá-la para você. Exemplo:

Imagine que você está trabalhando em dois projetos: um que usa Python 3.6 e outro que usa Python 3.9. Com o asdf, você pode instalar ambas as versões e configurar cada projeto para usar a versão correta, sem conflitos.

Em resumo:

O asdf é como um restaurante fast-food onde você monta o seu próprio lanche, mas em vez de comida, você está "montando" o seu ambiente de desenvolvimento. É uma ferramenta poderosa e flexível que pode te ajudar a gerenciar múltiplas versões de linguagens de programação de forma eficiente e organizada.

Neste post, vamos explorar como instalar e usar o asdf para gerenciar suas dependências de forma eficaz. Mas antes, vamos entender:

O que é o asdf?

O asdf é um gerenciador de versões universal que permite que você utilize múltiplas versões de linguagens de programação e ferramentas, tudo em um só lugar. Com ele, você pode alternar entre diferentes versões de uma mesma linguagem como se estivesse trocando de roupa, facilitando seu fluxo de trabalho e evitando conflitos.

Ao contrário de outros gerenciadores, como o rbenv para Ruby ou o nvm para Node.js, o asdf se destaca pela sua versatilidade. Ele suporta uma variedade de linguagens através de plugins. Você pode ter várias versões do Node.js, Python ou Java instaladas e alternar entre elas sem esforço.

Se ainda não ficou muito claro, Fábio Akita fala e dá algumas dicas de uso do asdf no seu vídeo The DEFINITIVE UBUNTU Guide for Beginning Devs, no minuto 40:42.

Neste post, vamos explorar como instalar e usar o asdf para gerenciar suas dependências de forma prática. Mas antes, vamos entender dois conceitos-chave: plugins e versões.

Plugins e versões

De acordo com a documentação oficial, plugins são as extensões que permitem ao asdf gerenciar diferentes ferramentas, como Node.js, Ruby e Elixir. Já as versões são as diferentes iterações das dependências que você pode utilizar. Por exemplo, você pode optar pela versão v20.18.0 do Node.js para um projeto específico, enquanto usa uma versão diferente para outro.

Pronto para mergulhar no mundo do asdf? Então vamos à prática!

Principais Comandos do asdf

Esses são os comandos essenciais para instalar, listar e gerenciar versões no asdf.

  • asdf list: Lista todos os plugins e as versões já instaladas no seu ambiente. Ideal para verificar rapidamente o que está disponível.

  • asdf plugin add <NOME-DO-PLUGIN>: Adiciona um plugin ao asdf para que ele gerencie uma nova linguagem ou ferramenta. Por exemplo, para adicionar o plugin do Python, digite:

asdf plugin add python
Enter fullscreen mode Exit fullscreen mode
  • asdf list all <NOME-DO-PLUGIN>: Lista todas as versões disponíveis para um plugin específico, permitindo que você escolha a que deseja instalar. Exemplo para ver as versões do Python:
asdf list all python
Enter fullscreen mode Exit fullscreen mode
  • asdf install <NOME-DO-PLUGIN> <VERSAO>: Instala uma versão específica de uma linguagem ou ferramenta. Para instalar a versão 3.13.0 do Python, por exemplo, use:
asdf install python 3.13.0
Enter fullscreen mode Exit fullscreen mode
  • asdf global <NOME-DO-PLUGIN> <VERSAO>: Define uma versão específica de uma linguagem ou ferramenta como padrão para todo o sistema. Para definir a versão 3.13.0 do Python como global, digite:
asdf global python 3.13.0
Enter fullscreen mode Exit fullscreen mode
  • asdf local <NOME-DO-PLUGIN> <VERSAO>: Define uma versão específica de uma linguagem ou ferramenta apenas para o diretório atual do projeto. Navegue até a pasta do projeto e execute o comando. Por exemplo:
asdf local python 3.13.0
Enter fullscreen mode Exit fullscreen mode

Observação: Este comando cria um arquivo chamado .tool-versions na pasta do projeto, permitindo configurar uma versão específica para cada repositório, independentemente da versão global.

Agora que já conhecemos os comandos básicos, vamos turbinar o nosso ambiente com alguns plugins e versões. Vêm comigo!

Instalação do asdf

Observação: se você é daquelas pessoas que gosta de fazer testes na ferramenta antes de configurar no seu ambiente, você pode ir para o item (Opcional) Laboratório e práticar em um container docker para avaliar o asdf.

Clone o respositorio para a sua pasta home:

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
Enter fullscreen mode Exit fullscreen mode

Execute os comandos abaixo para configurar o seu ~/.bashrc:

echo '. "$HOME/.asdf/completions/asdf.bash"' >> ~/.bashrc
echo '. "$HOME/.asdf/asdf.sh"' >> ~/.bashrc
Enter fullscreen mode Exit fullscreen mode

Aplique as configurações no terminal ativo:

source ~/.bashrc
Enter fullscreen mode Exit fullscreen mode

Para outros tipos de shell como o zsh ou fish shell, acesse a documentação oficial do asdf.

Guia Prático para Instalação de Plugins e Versões com o asdf

Vamos instalar plugins e definir versões de linguagens e ferramentas populares com o asdf! A cada passo, você verá como configurar o ambiente para Node.js, Java, Maven e Python.

🚀 Começando com Node.js

Para configurar o Node.js no seu ambiente, siga estes passos:

1- Instalar dependências: Vamos garantir que o sistema tenha todas as dependências que você precisa.

sudo apt-get install dirmngr gpg curl gawk
Enter fullscreen mode Exit fullscreen mode

2- Adicionar o plugin do Node.js: Com o plugin, o asdf será capaz de gerenciar versões do Node.

asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
Enter fullscreen mode Exit fullscreen mode

3- Verificar o plugin instalado:

asdf list
Enter fullscreen mode Exit fullscreen mode

Você deve ver algo assim:

nodejs
  No versions installed
Enter fullscreen mode Exit fullscreen mode

4- Instalar uma versão do Node.js:

O primeiro passo antes de instalar uma versão, é escolher uma versão disponível e para isso liste as versões disponíveis:

asdf list all nodejs
Enter fullscreen mode Exit fullscreen mode

Você deve ver uma lista semelhante ao exemplo abaixo:

...
22.11.0
23.0.0
23.1.0
Enter fullscreen mode Exit fullscreen mode

Escolha uma das versões disponíveis e execute o comando abaixo para instalar, por exemplo, a versão 23.0.0:

asdf install nodejs 23.0.0
Enter fullscreen mode Exit fullscreen mode

5- Definir a versão do Node.js:

  • Globalmente (para todo o sistema):
asdf global nodejs 23.0.0
Enter fullscreen mode Exit fullscreen mode

Não se esqueça, o próximo passo é opcional, mas para executar, instale a versão latest com o comando asdf install nodejs latest.

  • Localmente (apenas no diretório atual):
asdf local nodejs latest # ou qualquer outra versão disponível
Enter fullscreen mode Exit fullscreen mode

6- Verifique a versão do nodejs:

node --version
Enter fullscreen mode Exit fullscreen mode

☕ Configurando o Java

1- Adicionar o plugin do Java: Isso permite instalar e gerenciar versões do Java no asdf.

asdf plugin add java https://github.com/halcyon/asdf-java.git
Enter fullscreen mode Exit fullscreen mode

2- Verificar as versões disponíveis do Java:

asdf list all java
Enter fullscreen mode Exit fullscreen mode

3- Configurar a variável JAVA_HOME: Para garantir que o sistema identifique o Java.

echo . ~/.asdf/plugins/java/set-java-home.bash >> ~/.bashrc
Enter fullscreen mode Exit fullscreen mode

4- Instalar uma versão específica do Java:

asdf install java adoptopenjdk-8.0.432+6
Enter fullscreen mode Exit fullscreen mode

Observação: você pode executar o comando asdf list all java para ver as versões disponíveis.

5- Verificar a versão do Java instalada:

java -version
Enter fullscreen mode Exit fullscreen mode

6- Definir a versão do Java globalmente:

asdf global java adoptopenjdk-8.0.432+6
Enter fullscreen mode Exit fullscreen mode

🔧 Configurando o Maven

1- Adicionar o plugin do Maven:

asdf plugin add maven
Enter fullscreen mode Exit fullscreen mode

2- Instalar a versão mais recente do Maven:

asdf install maven latest
Enter fullscreen mode Exit fullscreen mode

3- Definir a versão global do Maven:

asdf global maven latest
Enter fullscreen mode Exit fullscreen mode

4- Verifique a versão do maven instalada:

mvn --version
Enter fullscreen mode Exit fullscreen mode

🐍 Configurando o Python

1- Instalar dependências para o Python:

sudo apt-get update && sudo apt-get install -y \
       make build-essential libssl-dev zlib1g-dev \
       libbz2-dev libreadline-dev libsqlite3-dev wget curl \
       llvm libncurses5-dev libncursesw5-dev \
       xz-utils tk-dev libffi-dev liblzma-dev \
       git
Enter fullscreen mode Exit fullscreen mode

2- Adicionar o plugin do Python:

asdf plugin add python
Enter fullscreen mode Exit fullscreen mode

3- Instalar a versão mais recente do Python:

asdf install python latest
Enter fullscreen mode Exit fullscreen mode

4- Definir a versão global do Python:

asdf global python latest
Enter fullscreen mode Exit fullscreen mode

5- Verifique a versão do python:

python --version
Enter fullscreen mode Exit fullscreen mode

Esses passos são suficientes para instalar e configurar as linguagens e ferramentas essenciais no asdf. Com essas instruções, seu ambiente estará preparado para alternar entre versões específicas conforme necessário.

(Opcional) Laboratório

Se você está aqui é porque você ficou interessado em testar o asdf antes de configurar em sua máquina. Sendo assim, vamos lá!

Pré-requisitos:

  • Docker
  • Docker Compose

Criando o ambiente

Para facilitar o laboratório com o asdf, preparamos um ambiente configurado e pronto para uso em um container Docker. Você só precisa criar os arquivos indicados abaixo:

Arquivo Dockerfile:

FROM ubuntu:24.04

# Atualiza o sistema e instala as dependências
RUN apt-get update && apt-get install -y \
    make build-essential libssl-dev zlib1g-dev \
    libbz2-dev libreadline-dev libsqlite3-dev wget curl \
    llvm libncurses5-dev libncursesw5-dev \
    xz-utils tk-dev libffi-dev liblzma-dev \
    git nano sudo

# Adiciona um novo usuário
RUN useradd -m -s /bin/bash usuario && \
echo "usuario:123" | chpasswd && \
usermod -aG sudo usuario

# Da permissões sudo sem senha para o novo usuário
RUN echo "usuario ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

# Comando inicial para rodar o container no terminal do novo usuário
USER usuario

# Instala e configura o asdf
RUN git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
RUN echo '. "$HOME/.asdf/completions/asdf.bash"' >> ~/.bashrc && \
    echo '. "$HOME/.asdf/asdf.sh"' >> ~/.bashrc

CMD ["/bin/bash"]
Enter fullscreen mode Exit fullscreen mode

Arquivo docker-compose.yml:

services:
  asdf:
    build:
      context: .  # Indica o diretório onde está o Dockerfile
      dockerfile: Dockerfile
    container_name: asdf
    tty: true  # Mantém o terminal aberto
Enter fullscreen mode Exit fullscreen mode

Construindo e executando o container

Com os arquivos prontos, execute o container com o comando abaixo:

docker compose up -d --build
Enter fullscreen mode Exit fullscreen mode

Onde:

  • -d: Executa o container em segundo plano
  • --build: Recria o container se o Dockerfile mudar

💡 Isso deve demorar um tempinho para instalar todas as dependências... ⏳ Aproveite para esticar as canelas e tomar uma água 💧!

Após a instalação, acesse o container com o seguinte comando:

docker compose exec asdf bash
Enter fullscreen mode Exit fullscreen mode

Agora você está pronto para seguir com o tutorial no tópico Guia Prático para Instalação de Plugins e Versões com o asdf e testar os comandos do asdf!

Links

Top comments (0)