{ update-alternatives } Crie suas Variáveis de Ambiente como um Verdadeiro Maestro

DevOps

{ update-alternatives } Crie suas Variáveis de Ambiente como um Verdadeiro Maestro

Gabriel Nascimento
Escrito por Gabriel Nascimento em 7 de setembro de 2021

Se você já configurou um ambiente de desenvolvimento, provavelmente já precisou criar uma variável executável, como por exemplo:

$ python --version

Python 3.7.2

$ java -version

Java version "1.8.0_271"
Java (TM) SE Runtime Environment (version 1.8.0_271-b08)
Java HotSpot (TM) 64-Bit Server VM (version 25.271-b08, mixed mode)

Talvez até mesmo teve que gerenciar várias versões do mesmo comando… Muito comum quando você trabalha com mais de uma aplicação:

$ java -version

Java version "1.8.0_271"

$ export PATH=$PATH:/opt/jdk15/bin

$ java -version

Java version "15.0.2" 2021-01-19

Nesse caso, uma atividade tão simples como abrir o arquivo de configuração, e alterar a variável $PATH, se transforma em um inferno diário!

Porém você pode contornar essa situação ao usar o comando update-alternatives para: 

  • Definir uma nova variável de ambiente;
  • E até alternar entre suas várias versões. 

Tudo com muita facilidade e com um simples comando…

Então continue lendo esse artigo para aprender a utilizar o update-alternatives de um jeito prático e intuitivo.

update-alternatives –install : Criando suas variáveis executáveis

Ilustração de maestro

Em primeiro lugar, você precisa ter em mente que…

O update-alternatives na verdade cria, remove e gerencia links simbólicos no sistema.

Portanto é uma ferramenta muito útil em várias situações, mas nesse artigo vamos lidar apenas com a criação de variáveis executáveis.

Então, imagine que você possui os arquivos binários do Java 8 baixados no caminho /opt/jdk8/bin.  E deseja configurar o comando java para executar esses arquivos.

Para isso, você pode usar o update-alternatives --install da seguinte maneira:

$ sudo update-alternatives --install [symlink] [name] [path] [priority]

Sendo que você deve substituir os parâmetros abaixo pelos valores necessários:

  • [symlink] É onde será criado o link simbólico;
  • [name] Nome da alternativa (escolha algo fácil de lembrar e intuitivo);
  • [path] Para onde o link simbólico irá apontar;
  • [priority] Nível de prioridade que a alternativa vai possuir (importante quando você tiver 2 ou mais variáveis);

Dessa forma, para instalar o java, teríamos algo parecido com:

$ sudo update-alternatives --install /usr/bin/java java /opt/jdk8/bin/java 20

Como configurar 2 variáveis ou mais

Do mesmo jeito que no tópico anterior, você instala outra alternativa de variável através da opção --install

Então, caso você queira configurar o comando java para executar o Java 15, teria que fazer algo parecido com:

$ sudo update-alternatives --install /usr/bin/java java /opt/jdk15/bin/java 40

Nesse exemplo, o link simbólico /usr/bin/java aponta para os binários do Java 15 em /opt/jdk15/bin/java.

Note que o nome da alternativa é o mesmo tanto para o Java 8 quanto para o Java 15. Assim apenas uma das versões pode funcionar de cada vez. 

Porém a prioridade é diferente entre as 2 alternativas (sendo 20 e 40, respectivamente). Dessa forma, o sistema sabe qual versão você tem preferência por padrão.

update-alternatives –query : Liste as alternativas criadas

Você deve ter percebido que é fácil se perder depois de criar várias variáveis.

Nesse momento, você pode executar o comando update-alternatives --query para listar todas as alternativas criadas:

$ sudo update-alternatives --query java
resultado update-alternatives --query

Veja que o nome “java” possui 2 comandos alternativos:

  • /opt/jdk8/bin/java com prioridade 20;
  • E /opt/jdk15/bin/java com prioridade 40;

O que é o modo automático e como funciona as prioridades?

O comando update-alternatives possui 2 modos: automático e manual.

No modo automático, é selecionada a alternativa/comando/executável com a maior prioridade.

No modo manual, você seleciona a alternativa/comando/executável manualmente. Ignorando as prioridades definidas.

E como você pode ver abaixo, o update-alternatives inicia sempre no modo (status) automático:

update-alternatives auto mode

Note também que o Java 15 é escolhido como valor padrão por ter uma prioridade maior que o Java 8.

Você pode confirmar isso executando um java -version no terminal:

$ java -version

Java version "15.0.2" 2021-01-19
Java (TM) SE Runtime Environment (build 15.0.2+7-27)
Java HotSpot (TM) 64-Bit Server VM (build 15.0.2+7-27, mixed mode, sharing)

Mas como trocar para o modo manual?

Alterando o update-alternatives para modo manual

Claro, em algum momento você vai precisar usar um comando/executável com prioridade menor.

Para isso, conte com a opção --config

Por exemplo, para selecionar a alternativa do Java 8 manualmente, execute no terminal:

$ sudo update-alternatives --config java

Assim o update-alternatives listará todas as alternativas instaladas para o nome “java”:

resultado update-alternatives --config

Em seguida, você deve escolher uma versão através de sua numeração. Sendo o número zero como modo automático e o restante manual.

Portanto, para selecionar o Java 8, pressione 1 e depois Enter.

Veja que o modo (status) agora é manual e o valor da alternativa é /opt/jdk8/bin/java, mesmo ele tendo uma prioridade menor:

update-alternatives manual mode

E se você quiser voltar para o modo automático? Basta usar a opção --auto

$ sudo update-alternatives --auto java

Como remover uma alternativa

Por último, caso você instale uma alternativa de maneira incorreta, pode remove-la com o seguinte passo a passo…

Primeiro, liste todas as alternativas disponíveis com o nome “java”:

$ sudo update-alternatives --query java

Depois copie o caminho da alternativa que deseja remover, como por exemplo /opt/jdk8/bin/java. E execute o seguinte comando:

$ sudo update-alternatives --remove java /opt/jdk8/bin/java

Agora, se você listar novamente, verá que a configuração do Java 8 foi removida:

Por fim, você também pode remover todas as alternativas de uma vez com a opção --remove-all:

$ sudo update-alternatives --remove-all java

Parabéns por ter chegado até aqui!

Na minha opinião, o update-alternatives não é um dos comandos mais fáceis do linux…

Porém ajuda muito na criação de ambientes, tanto de desenvolvimento quanto de servidores.

Então busque usa-lo quando tiver oportunidade, vale muito a pena.

E se você gostou desse artigo, ou ficou com alguma dúvida, não deixe de comentar abaixo:

Hey,

o que você achou deste conteúdo? Conte nos comentários.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

3 Replies to “{ update-alternatives } Crie suas Variáveis de Ambiente como um Verdadeiro Maestro”

Luiz Faria

Ótimo artigo! Muito bem explicado.

Gabriel Nascimento

Valeu! 😉

Gabriel Nascimento