Qual é a melhor prática ao substituir um binário do sistema?

6

Estou trabalhando no Mac OS X, que é fornecido com vários binários, localizados principalmente em /usr/bin/ e /usr/sbin/ . Como ele não tem um gerenciador de pacotes nativo como algumas distros do Linux, eu me acostumei a gerenciar meus próprios binários, construindo e instalando em /usr/local/<package_name>/ .

Dessa forma, eu posso remover totalmente um pacote do meu sistema com o custo de atualizar manualmente as variáveis PATH e MANPATH no arquivo .bashrc .

Aqui está um exemplo simples:

O Mac OS X vem com o ant 1.7.0, localizado em /usr/bin . Eu preciso usar a versão mais recente, então eu faço o download do Apache e depois descompacte (compilação) para /usr/local/apache-ant-1.8.2 . Então eu atualizo meu arquivo .bashrc com:

# Mac OS X original PATH
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin"
# Apache Ant 1.8.2
PATH="$PATH:/usr/local/apache-ant-1.8.2/bin"
export PATH

Não se esqueça de exportar /usr/bin/ e /usr/sbin/ antes de ant/bin/ , porque geralmente há outros binários além do ant que eu não quero substituir.

O problema é que quando eu digito which ant , recebo /usr/bin/ . Por isso, renomeio o /usr/bin/ant para /usr/bin/ant-old para trabalhar com a versão mais recente.

Enquanto isso funciona, eu quero saber se existem abordagens melhores para substituir um binário do sistema (principalmente para evitar a última renomeação).

    
por nunaxe 18.04.2011 / 20:10

2 respostas

5

A substituição de um binário do sistema deve ser um último recurso.

Meu conselho é:

  • Coloque /usr/local/bin à frente de /usr/bin e outros diretórios do sistema no PATH .
  • Torne /usr/local/bin/ant um link simbólico para /usr/local/apache-ant-1.8.2/bin/ant .
  • Não inclua /usr/local/apache-ant-1.8.2/bin no PATH .

Desta forma:

  • Suas personalizações (em /usr/local/bin ) substituem os padrões do sistema.
  • O link simbólico /usr/local/bin/ant lembra onde você obteve essa versão de ant .
  • Se você quiser testar algo com a configuração padrão, basta remover /usr/local/bin do seu PATH pela duração do teste.
por 18.04.2011 / 20:35
4

O método usual de substituir os binários do sistema é instalar os novos binários em /usr/local/bin (ou sbin ) e, em seguida, certificar-se de que /usr/local/bin vem antes de /usr/bin em seu caminho.

Normalmente, você faz isso configurando pacotes com --prefix=/usr/local , o que faz com que eles instalem seus binários em /usr/local/bin , em vez de criar um diretório em /usr/local para cada pacote.

Você está dizendo que existem binários em /usr/local/apache-ant-1.8.2/bin que você não deseja usar? Nesse caso, eu recomendo instalá-lo em /usr/local/apache-ant-1.8.2 (como você está fazendo agora), mas, em seguida, fazer um link simbólico em /usr/local/bin to ../apache-ant-1.8.2/bin/ant (em vez de colocar /usr/local/apache-ant-1.8.2/bin em seu caminho).

    
por 18.04.2011 / 20:32