Use alternativas ou adicione ao PATH?

3

Estou um pouco confuso sobre a maneira correta de disponibilizar um script globalmente a partir do terminal, como um comando. Existem duas maneiras de usar o utilitário alternatives , basicamente fazendo um link simbólico para / usr / bin e adicionando a PATH . Entendo que adicionar a PATH significa adicionar o diretório completo e ele pode funcionar por usuário. Mas o que não gosto é a confusão do processo. Parece (pelo menos do meu POV) que cada distro tem suas próprias peculiaridades, e até versões diferentes delas me dão problemas ao adicionar algo ao PATH , e depois há respostas na web discutindo como fazer isso, ou ainda mais importante, como NÃO fazer isso.

Ao instalar o Java, eu geralmente encontrava instruções sobre como usar o alternatives para tornar o java e o javac disponíveis globalmente, assim:

alternatives --install /usr/bin/java java /opt/jdk1.7.0_79/bin/java 2

Agora, o que há de errado em usar alternatives com mais frequência, e eu a acho principalmente nesses tutoriais de configuração Java? Eu o uso para configurar o Ativador de Tipos como disponível globalmente. Eu também acho mais fácil para ferramentas de automação, como Ansible. Há algo errado do ponto de vista do administrador?

    
por Aleksandar Stojadinovic 20.04.2015 / 11:22

2 respostas

4

Primeiro, as alternativas são do debian e não funcionarão no redhat, no freebsd ou em muitos outros sistemas. Segundo, a recomendação padrão é usar / usr / bin para pacotes de fornecedores, / optar por pacotes de terceiros, / usr / local / bin para executáveis locais e definir o caminho para os executáveis do usuário.

As

alternativas se destinam onde você pode ter vários pacotes com a mesma funcionalidade, por exemplo, há pelo menos três pacotes mailx, dois pacotes awk e vários pacotes java disponíveis no debian.

Agora, para a carne da questão: por que os tutoriais usam alternativas como você mostra? Como as alternativas são usadas de perto com o empacotamento debian, isso permite que um pacote de terceiros funcione como um pacote de fornecedores. Você deve usar alternativas em vez de instalar? Absolutamente não, as alternativas não definem permissões.

Uma das ideias principais no unix é que tudo é um arquivo. (Isso não é mais verdade, se é que foi como objetivo de design que moldou muitas coisas.) Agora, há três coisas que você pode fazer com um arquivo associado a permissões. Eles são lidos, escrevem e executam. Ao ler ou escrever, existem duas maneiras de especificar um arquivo a ser aberto. Eles são caminho absoluto (o caminho relativo ao diretório raiz) ou caminho relativo (o caminho relativo ao diretório atual). A execução é um pouco mais complicada, pois existem três maneiras de especificar o arquivo a ser executado. Eles são caminho absoluto, nome de arquivo simples e caminho relativo. O caminho absoluto é o mesmo que acima. o caminho relativo é semelhante ao anterior, mas é usado somente se explicitamente especificado (o nome inclui uma barra) ou o caminho inclui um caminho relativo. O caminho é especificado por processo na variável de ambiente PATH (que é herdada do processo pai durante uma bifurcação). O caminho é uma lista de diretórios para procurar um executável quando o executável é especificado sem uma barra no nome. Para simplificar a administração (e acelerar a localização de executáveis), os executáveis são coletados em um pequeno número de diretórios. A maioria dos executáveis está em / bin, / usr / bin ou / usr / local / bin com executáveis de finalidade especial colocados em / sbin, / usr / sbin, / usr / local / sbin e / usr / games. Alguns usuários terão binários adicionais colocados em outros locais para uso pessoal. Eu gosto de colocar o meu em ~ / .bin mas ~ / bin também é comum e outros diretórios são usados às vezes como se ajusta ao usuário.

Ao colocar os executáveis a serem compartilhados, cada usuário pode informar a outros usuários onde o binário está ou colocá-lo em um local comum. Ao colocar executáveis em um local comum, você pode copiar o arquivo e definir suas permissões manualmente ou usar a instalação, que cuidará dos detalhes de maneira mais simples. Às vezes você instala pacotes complicados de terceiros e não os quer bagunçando as partes principais do sistema de arquivos com todos os arquivos relacionados (bibliotecas, etc) e os coloca em / opt / package ou / opt / vendor / package. Você pode adicionar o diretório relevante ao caminho ou colocar um script de wrapper ou link simbólico em um diretório padrão. As alternativas colocam um link simbólico e uma entrada de banco de dados para que, quando você tiver mais de um programa disponível que tenha a mesma funcionalidade básica e o mesmo nome executável, o nome correto seja usado.

    
por 20.04.2015 / 11:58
3

[What is] the proper way to make a script globally available from the terminal, like a command

Uma maneira seria adicionar o comando a /usr/local/bin e garantir que esse diretório único esteja no PATH . Se você tiver um aplicativo completo com vários comandos, não seria insensato adicionar links simbólicos em /usr/local/bin apontando para os comandos mantidos no diretório do aplicativo.

Aqui está uma extração de um dos meus próprios diretórios /usr/local/bin , que na verdade contém mais de 30 entradas. Você pode ver que as ferramentas do VMware são mantidas em um diretório separado, mas são linkadas por link simbólico em /usr/local/bin . Outras ferramentas são mantidas no próprio diretório.

$ ls -l /usr/local/bin
total 804
-rwxr-xr-x 1 root staff   6717 Feb  4  2014 ad-search
-rwxr-xr-x 1 root staff   4811 Feb  2  2011 cpd
-rwxr-xr-x 1 root staff    798 Aug 13  2013 echoel
-rwxr-xr-x 1 root staff    294 Jun 18  2007 ifvi
...
lrwxrwxrwx 1 root staff     45 Feb  6  2014 vmware-gksu -> /usr/local/lib/vmware-tools/bin64/vmware-gksu
lrwxrwxrwx 1 root staff     43 Feb  6  2014 vmware-hgfsclient -> /usr/local/lib/vmware-tools/bin64/appLoader
lrwxrwxrwx 1 root staff     43 Feb  6  2014 vmware-toolbox-cmd -> /usr/local/lib/vmware-tools/bin64/appLoader
-rwxr-xr-x 1 root staff 256307 Feb  6  2014 vmware-uninstall-tools.pl
    
por 20.04.2015 / 12:25