Normalmente, um executável pode estar localizado em múltiplos diretórios, como em /opt ou no diretório home do usuário.
Para permitir a execução do comando de qualquer local no sistema, é necessário adicionar o caminho do executável à variável de ambiente PATH. Isso pode ser feito diretamente criando um arquivo .sh em /etc/profile.d/, onde o caminho do executável é adicionado, como:
JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export JAVA_HOME
Outra abordagem é criar um link simbólico do executável em diretórios que o sistema busca por padrão. Por exemplo, os caminhos típicos no PATH do Linux incluem:
- /bin - Comandos necessários durante a inicialização do sistema, como cat, ls
- /sbin - Comandos necessários na inicialização que exigem permissões root
- /usr/bin - Comandos disponíveis para todo o sistema
- /usr/sbin - Comandos disponíveis para todo o sistema, mas que exigem permissões de administrador
Ao instalar um programa como Java, se desejar executá-lo de qualquer diretório sem depender da variável JAVA_HOME, pode-se criar um link simbólico em /usr/bin:
/usr/bin/java -> /usr/java/jdk1.8.0_221-amd64/jre/bin/java
Esta abordagem oferece a vantagem de outros programas que precisam usar Java não precisam ser modificados, pois o sistema encontra o executável em /usr/bin.
O Mecanismo Alternatives para Múltiplas Versões
A abordagem anterior aborda apenas a instalação global de um executável. No entanto, e se um programa tiver várias versões instaladas? Como o sistema deve determinar qual versão usar?
Por exemplo, se tanto Java 8 quanto Java 10 estiverem instalados, é aqui que o mecanismo alternatives entra em ação.
O sistema alternatives permite automaticamente selecionar a versão mais recente como padrão ou usar uma versão especificada pelo administrador como padrão.
Os principais componentes do sistema alternatives são:
- Nome Genérico - O nome do programa sem considerar a versão, como /usr/bin/java para Java
- Diretório Alternatives - O local onde os links simbólicos para as versões dos programas são armazenados
- Grupo de Links - Um conjunto de links relacionados a um programa, incluindo o executável principal e suas dependências
- Link Principal - O link para o executável principal dentro de um grupo de links
- Links Secundários - Links para arquivos dependentes relacionados ao programa principal
O comando gerenciador do sistema alternatives é o update-alternatives.
Dois Modos de Seleção de Versão
Quando múltiplas versões de um alternative estão instaladas, o sistema operacional pode selecionar a versão padrão de duas maneiras:
- Modo Automático - Baseado em pesos, onde a versão com maior peso é selecionada automaticamente. Novas instalações geralmente recebem pesos mais altos e tornam-se a versão padrão.
- Modo Manual - O administrador esepcifica explicitamente qual versão usar como padrão através do comando
sudo update-alternatives --config comando. Mesmo que versões mais recentes sejam instaladas posteriormente, a versão manualmente especificada permanece como padrão.
Uma vez que uma versão é especificada manualmente, o alternative entra em modo manual. Para retornar ao modo automático, usa-se o comando apropriado.
Instalação Manual de um Alternative
Instalando um Alternative Simples
Para instalar um alternative, são necessárias as seguintes informações:
- O nome genérico a ser criado (geralmente em /usr/bin)
- O nome do grupo de links (geralmente idêntico ao nome genérico)
- O caminho para o executável da versão específica
- O peso atribuído à versão atual
Suponha que temos duas versões de um programa chamado "foo":
- /usr/local/bin/foo-2
- /usr/local/bin/foo-3
O comando para instalar estas versões seria:
sudo update-alternatives --install /usr/bin/foo foo /usr/local/bin/foo-2 50
sudo update-alternatives --install /usr/bin/foo foo /usr/local/bin/foo-3 100
Instalação com Links Secundários
A instalação com links secundários é semelhante, mas inclui especificação de arquivos dependentes do programa principal. Por exemplo:
sudo update-alternatives --install /usr/bin/foo foo /usr/local/bin/foo-3 100 \
--slave /etc/foo.conf foo.conf /etc/foo-3.conf
Este comando instala o alternative "foo" com o caminho principal e também cria um link secundário para o arquivo de configuração.
Resumo
Normalmente, os descritos acima não precisam ser executados manualmente. Ao instalar um pacote Linux, essas etapas são geralmente concluídas automaticamente. Os alternatives instalados geralmente operam em modo automático, selecionando automaticamente a versão apropriada.
Comandos Úteis do Alternatives
Visualizando o Estado de um Alternative
sudo update-alternatives --display nomecomando
Selecionando Manualmente uma Versão
Lista múltiplas versões e permite ao usuário selecionar interativamente:
sudo update-alternatives --config nomecomando
Define diretamente o programa padrão para um caminho específico:
sudo update-alternatives --set nomecomando caminho
Retornando ao Modo Automático
sudo update-alternatives --auto nomecomando
Removendo uma Versão Específica
sudo update-alternatives --remove nomecomando caminho
Exemplo:
sudo update-alternatives --remove foo /usr/local/bin/foo-2
Removendo Todos os Alternatives de um Comando
sudo update-alternatives --remove-all nomecomando