update-alternatives - mantém links simbólicos que
determinam os comandos predefinidos
update-alternatives [option...] command
update-alternatives cria, remove, mantêm e mostra
informação acerca dos links simbólicos que abrangem o
sistema de alternativos.
É possível para vários programas realizarem o
mesmo ou funções semelhantes para serem instalados num
único sistema ao mesmo tempo. Por exemplo, muitos sistemas têm
vários editores de texto instalados ao mesmo tempo. Isto dá
escolha aos utilizadores do sistema, permitindo que cada um use um editor
diferente, se o desejar, mas torna difícil para um programa fazer uma
boa escolha no editor a invocar se o utilizador não especificou a sua
preferência particular.
O sistema de alternativas destina-se a resolver este problema. Um
nome genérico no sistema de ficheiros é partilhado por todos
os ficheiros que fornecem funcionalidades intercambiáveis. O sistema
de alternativas e o administrador do sistema juntamente determinam qual
ficheiro real é referenciado por este nome genérico. Por
exemplo, se os editores de texto ed(1) e nvi(1) estiverem
ambos instalados no sistema, o sistema de alternativas irá fazer com
que o nome genérico /usr/bin/editor se refira a
/usr/bin/nvi por predefinição. O administrador do
sistema pode sobrepor isto e fazê-lo referir-se a /usr/bin/ed
em vez do primeiro, e o sistema de alternativas não irá
alterar esta definição até que lhe seja requerido
explicitamente fazê-lo.
O nome genérico não é um link
simbólico directo para a alternativa selecionada. Em vez disso,
é um link simbólico para um nome no directório
alternatives, o qual por sua vez é um link simbólico
para o ficheiro real referenciado. Isto é feito deste modo para que
as alterações do administrador do sistema fiquem confinadas
dentro do directório /etc: a FHS (q.v.) explica o
porquê isto ser uma Coisa Boa.
Quando cada pacote que fornece um ficheiro com uma determinada
funcionalidade é instalado, modificado ou removido, o
update-alternatives é chamado para actualizar a
informação sobre esse ficheiro no sistema de alternativas. O
update-alternatives é geralmente chamado a partir dos
seguintes scripts de maintainer de pacote Debian, postinst
(configurar) para instalar a alternativa e a partir de prerm e
postrm (remover) para remover a alternativa. Nota: Na maioria
dos casos (se não todos) nenhuma outra acção de script
de maintainer deverá chamar update-alternatives, em particular
nenhum de upgrade nem disappear, pois outra
acção do tipo pode perder o estado manual da alternativa, ou
fazer a alternativa inverter temporariamente, ou comutar completamente
quando várias têm a mesma prioridade.
Isto é muitas vezes útil para se sincronizar
várias alternativas, para que sejam mudadas como um grupo; por
exemplo, quando estão instaladas várias versões do
editor vi(1), o manual referenciado por
/usr/share/man/man1/vi.1 deve corresponder ao executável
referenciado por /usr/bin/vi. update-alternatives lida com
isto por meio de links master e slave; quando o mestre
é mudado, quaisquer slaves associados são também
mudados. Um link mestre e os seus slaves associados fazem um group de
link.
Cada grupo de links é, a qualquer altura, em um ou dois
modos: automático ou manual. Quando um grupo está em modo
automático, o sistema de alternativas irá decidir
automaticamente, quando os pacotes são instalados ou removidos, em
como actualizar os links. Em modo manual, o sistema de alternativas
irá reter a escolha do administrador e evitar alterar os links
(excepto quando algum quebrar).
Grupos de links ficam em modo automático quando são
introduzidos pela primeira vez no sistema. Se o administrador do sistema
fizer alterações nas definições
automáticas do sistema, isso será notificado na próxima
vez que o update-alternatives correr no grupo de links alterado, e o
grupo será automaticamente comutado para modo manual.
Cada alternativa tem uma priority associada. Quando um
grupo de links está em modo automático, as alternativas
apontadas pelos membros do grupo serão aquelas que têm
aprioridade mais alta.
Quando se usa a opção --config, o
update-alternatives irá listar todas as opções
para o grupo de links do qual o nome dado é o nome alternativo
mestre. A escolha actual é marcada com um ‘*’.
Você será depois questionado sobre a sua escolha em
relação a este grupo de links. Dependendo da escolha feita, o
grupo de link pode não mais ficar em modo auto. Você
precisa usar a opção --auto de modo a regressar ao modo
automático (ou pode voltar a correr --config e escolher a
entrada marcada como automática).
Se desejar configurar não interactivamente, em vez disto
pode usar a opção --set (veja em baixo).
Pacotes diferentes que forneçam o mesmo ficheiro precisam
de fazê-lo cooperativamente. Por outras palavras, o uso de
update-alternatives é obrigatório para todos os
pacotes envolvidos em tal caso. Não é possível sobrepor
qualquer ficheiro de um pacote em que não se empregue o mecanismo
update-alternatives.
Como as atividades de update-alternatives estão
bastante envolvidas, alguns termos específicos irão ajudar a
explicar a sua operação.
- nome genérico (ou link
alternativo)
- Um nome, como /usr/bin/editor, o qual refere, via sistema de
alternativos, a um de um número de ficheiros de
função semelhante.
- nome alternativo
- O nome do links simbólico no directório de
alternativos.
- alternativo (ou
caminho alternativo)
- O nome de um ficheiro especifico no sistema de ficheiros, que pode ser
tornado acessível via um nome genérico usando o sistema de
alternativos.
- directório de
alternativos
- Um directório, por predefinição
/etc/alternatives, que contém os links
simbólicos.
- directório
administrativo
- Um directório, por predefinição
/var/lib/dpkg/alternatives, que contém
informações de estado do update-alternatives.
- grupo de links
- Um conjunto de links simbólicos relacionados, destinados a serem
actualizados como um grupo.
- link mestre
- O link alternativo num grupo de links que determina como os outros links
no grupo são configurados.
- link escravo
- Um link alternativo num grupo de links que é controlado pela
definição do link mestre.
- modo
automático
- Quando um grupo de links está em modo automático, o sistema
de alternativas assegura que os links do grupo apontam para a alternativa
apropriada de prioridade mais alta para o grupo.
- modo manual
- Quando um grupo de links está em modo manual, o sistema de
alternativas não irá fazer nenhumas alterações
às definições do administrador do sistema.
- --install link
name path priority [--slave link name path]...
- Adiciona um grupo de alternativas ao sistema. link é o nome
genérico para o link mestre, name é o nome do seu
link simbólico no directório de alternativas, e path
é a alternativa a ser introduzida para o link mestre. Os argumentos
após --slave são o ome genérico, nome do link
simbólico no directório de alternativas e o caminho
alternativo para um link slave. Podem ser especificadas zero ou mais
opções --slave, cada uma seguida de três
argumentos. Note que a alternativa mestre tem de existir ou a chamada
irá falhar. No entanto se uma alternativa slave não existir,
o link de alternativa slave correspondente simplesmente não
irá ser instalado (mesmo assim é mostrado um aviso). Se
estiver instalado um ficheiro real no lugar onde um link simbólico
deve ser instalado, este é mantido a menos que seja usado
--force.
Se o nome alternativo especificado já existir nos
registos do sistema de alternativas, a informação
fornecida será adicionada como um novo conjunto de alternativas
para o grupo. Caso contrário, será adicionado um novo
grupo, definido para modo automático, com esta
informação. Se o grupo estiver em modo automático,
e as prioridade das alternativas recentes adicionadas é mais alta
que as outras alternativas instaladas para este grupo, os links
simbólicos serão actualizados para apontarem às
novas alternativas adicionadas.
- --set name
path
- Define o programa path como alternativa para name. Isto
é equivalente a --config mas não é interactivo
e assim apropriado para usar em scripts.
- --remove
name path
- Remove uma alternativa e todos os seus links slave associados. name
é um nome no directório de alternativas, e path
é um nome de ficheiro absoluto para o qual name
poderá estar vinculado. Se name está de facto
vinculado a path, name será actualizado para apontar
para outra alternativa apropriada (e o grupo é colocado de novo em
modo automático), ou removido se não existir mais nenhuma
alternativa. Os links slave associados serão actualizados ou
removidos, correspondentemente. Se o link não está
actualmente a apontar para path, nenhum link é alterado,
apenas é removida a informação sobre a
alternativa.
- --remove-all
name
- Remove todos os alternativos e todos os seus links escravos associados.
name é um nome no directório de alternativos.
- --all
- Chama --config em todas as alternativas. Pode ser útil
combinado com --skip-auto para rever e configurar todas as
alternativas que não estão configuradas em modo
automático. São também mostradas as alternativas
quebradas. Assim um modo simples de corrigir todas as alternativas
quebradas é chamar yes '' | update-alternatives --force
--all.
- --auto
name
- Comuta o grupo de link por detrás da alternativa para name
para modo automático. No processo, o link simbólico mestre e
os seus slaves são actualizados par apontar para a alternativa
instalada de prioridade mais alta.
- --display
name
- Mostra informação sobre o grupo de link. A
informação ,mostrada inclui o modo do grupo (auto ou
manual), os links mestre e slave, a qual alternativa o link mestre
presentemente aponta, que outras alternativas estão
disponíveis (a as suas alternativas slave correspondentes), e a
alternativa de prioridade mais alta presentemente instalada.
- --get-selections
- Lista todos os nomes de alternativa mestre (aqueles que controlam um grupo
link) e os seus estados (desde versão 1.15.0). Cada linha
contém até 3 campos (separados por um ou mais
espaços). O primeiro campo é o nome da alternativa, o
segundo é o estado (se auto ou manual), e o
último contem a escolha actual na alternativa (cuidado: é um
nome de ficheiro, e pode conter espaços).
- --set-selections
- Lê a configuração de alternativas na entrada standard
no formato gerado por --get-selections e reconfigura-as
adequadamente (desde versão 1.15.0).
- --query
name
- Mostra informação acerca do grupo link como o
--display faz mas num modo analisável por máquina
(desde versão 1.15.0, Veja secção "FORMATO DE
CONSULTA" abaixo.
- --list
name
- Mostra todas as metas do grupo de links.
- --config
name
- Mostra as alternativas disponíveis para um grupo de links e permite
ao utilizador seleccionar interactivamente qual delas usar. O grupo de
links é actualizado.
- --help
- Mostra a mensagem de utilização e termina.
- --version
- Mostra a versão e termina.
- --altdir
directory
- Especifica o directório alternativo, quando é suposto este
ser diferente do predefinido. A predefinição é
«/etc/alternatives».
- --admindir
directory
- Especifica o directório administrativo, quando este deve ser
diferente do predefinido. A predefinição é
«/var/lib/dpkg/alternatives» se DPKG_ADMINDIR
não estiver definido.
- --instdir
directory
- Especifica o directório de instalação onde os links
alternativos serão criados (desde versão 1.20.1). A
predefinição é «/» se
DPKG_ROOT não estiver definido.
- --root
directory
- Especifica o directório raiz (desde 1.20.1). Isto também
define alternativas, directórios de instalação e
administração para corresponder. A
predefinição é «/» se
DPKG_ROOT não estiver definido.
- --log
file
- Especifica o ficheiro de relatório (desde a versão 1.15.0),
quando este é suposto ser diferente do predefinido
(/var/log/alternatives.log).
- --force
- Permite substituir ou largar qualquer ficheiro real que está
instalado quando um link alternativo tem de ser instalado ou
removido.
- --skip-auto
- Salta o aviso de configuração para alternativas que as quais
já estão correctamente configuradas em modo
automático. Esta opção é apenas relevante com
--config ou --all.
- --quiet
- Não gera nenhuns comentários, a menos que ocorram
erros.
- --verbose
- Gera mais comentários acerca do que está a ser feito.
- --debug
- Gera ainda mais comentários, úteis para
depuração, acerca do que está a ser feito (desde
versão 1.19.3).
- 0
- A acção requisitada foi executada com sucesso.
- 2
- Foram encontrados problemas ao analisar a linha de comandos ou ao executar
a acção.
- DPKG_ROOT
- Se definido e as opções --instdir ou --root
não foram especificadas, será usado como o directório
raiz do sistema de ficheiros.
- DPKG_ADMINDIR
- Se definido e se a opção --admindir não foi
especificada, será usado como o directório administrativo
base.
- /etc/alternatives/
- O directório de alternativas predefinido. Pode ser sobreposto pela
opção --altdir.
- /var/lib/dpkg/alternatives/
- O directório de administração predefinido. Pode ser
sobreposto pela opção --admindir.
O formato --query está a usar um formato liso tipo
RFC822. É composto de n estrofes + 1 onde n é o
número e alternativas disponíveis no grupo de link
questionado. A primeira estrofe contem os seguintes campos:
- Name:
name
- O nome alternativo no directório alternativo.
- Link:
link
- O nome genérico da alternativa.
- Slaves:
list-of-slaves
- Quando este campo está presente, as próximas linhas
contêm todas os links escravos associados ao link mestre da
alternativa. Há um escravo por linha. Cada linha contem um
espaço, o nome genérico da alternativa escravo, outro
espaço, e o caminho para o link escravo.
- Status:
status
- O estado da alternativa (auto ou manual).
- Best:
best-choice
- O caminho da melhor alternativa para este grupo de links. Não
presente se não existirem alternativas disponíveis.
- Value:
currently-selected-alternative
- O caminho da alternativa seleciona actualmente. Também pode tirar o
valor mágico none. É usado quando o link não
existe.
As outras estrofes descrevem as alternativas disponíveis no
grupo de links questionado.
- Alternative:
path-of-this-alternative
- Caminho para a alternativa desta estrofe.
- Priority:
priority-value
- Valor da prioridade desta alternativa.
- Slaves:
list-of-slaves
- Quando este campo está presente, as próximas linhas
contêm todas as alternativas escravas associadas ao link mestre da
alternativa. Há um escrava por linha. Cada linha contem um
espaço, o nome genérico da alternativa escravo, outro
espaço, e o caminho para a alternativa escravo.
$ update-alternatives --query editor
Name: editor
Link: /usr/bin/editor
Slaves:
editor.1.gz /usr/share/man/man1/editor.1.gz
editor.fr.1.gz /usr/share/man/fr/man1/editor.1.gz
editor.it.1.gz /usr/share/man/it/man1/editor.1.gz
editor.pl.1.gz /usr/share/man/pl/man1/editor.1.gz
editor.ru.1.gz /usr/share/man/ru/man1/editor.1.gz
Status: auto
Best: /usr/bin/vim.basic
Value: /usr/bin/vim.basic
Alternative: /bin/ed
Priority: -100
Slaves:
editor.1.gz /usr/share/man/man1/ed.1.gz
Alternative: /usr/bin/vim.basic
Priority: 50
Slaves:
editor.1.gz /usr/share/man/man1/vim.1.gz
editor.fr.1.gz /usr/share/man/fr/man1/vim.1.gz
editor.it.1.gz /usr/share/man/it/man1/vim.1.gz
editor.pl.1.gz /usr/share/man/pl/man1/vim.1.gz
editor.ru.1.gz /usr/share/man/ru/man1/vim.1.gz
Com --verbose o update-alternatives fala
incessantemente acerca das suas atividades no seu canal de saída
standard. Se ocorrerem problemas, o update-alternatives envia
mensagens de erro no seu canal de erros standard e retorna um estado de
saída de 2. Estes diagnósticos deverão ser
suficientemente explicativos, se você acha que não o
são, por favor reporte isso como um bug.
Existem vários pacotes que fornecem um editor de texto
compatível com o vi, por exemplo e nvi e o vim.
Qual deles é o usado é controlado pelo grupo de links
vi, que inclui links para o próprio programa e o manual
associado.
Para mostrar os pacotes disponíveis que fornecem o
vi e a configuração actual para ele, use a
acção --display.
update-alternatives --display vi
Para escolher uma implementação particular do
vi, use este comando como root e depois selecione um número da
lista.
update-alternatives --config vi
Para voltar atrás e ter a implementação
vi escolhida automaticamente, faça isto como root:
update-alternatives --auto vi
ln(1), FHS (o Standard de Hierarquia de Sistema de
Ficheiros).
Américo Monteiro
Se encontrar algum erro na tradução deste documento,
por favor comunique para Américo Monteiro
<a_monteiro@gmx.com>.