Como lidar corretamente com binários construídos localmente?

1

Eu costumo criar binários a partir de fontes. Minha configuração usual é a seguinte

$HOME/build -> this gets the sources
$HOME/programs -> this is where the build happen, so where the binaries are

Depois disso, coloco o seguinte no meu bashrc

export MYNEWBINDIR = $HOME/programs/...
export PATH=$MYNEWBINDIR:$PATH

A minha pergunta é: é o caminho recomendado? Por exemplo, eu poderia apenas criar um local $HOME/bin , linkar simbolicamente todos os binários e apenas adicioná-lo ao caminho ...

    
por statquant 15.01.2017 / 21:46

1 resposta

7

É mais ou menos deixado para o indivíduo fazer o que quiser, mas eu recomendo que você deixe diretórios já utilizados pelo sistema básico ou por qualquer gerenciador de pacotes sozinho, sempre. Você realmente não quer confundir um gerenciador de pacotes sobrescrevendo arquivos que ele já instalou! Então, definitivamente deixe /bin sozinho.

Na maioria dos sistemas, /usr/local deve ser uma área segura para você instalar coisas, embora isso também seja usado pelos gerenciadores de pacotes em alguns sistemas (FreeBSD e OpenBSD, por exemplo, já que eles consideram software instalado a partir de portas / pacotes como software local.

Veja também as entradas " Padrão da hierarquia do sistema de arquivos " e " Sistema de arquivos Unix " na Wikipedia.

Alguns Unices também têm um hier(7) manual ao qual você pode se referir. (O link vai para a versão do OpenBSD, mas também está disponível pelo menos no Ubuntu entre os Linuxes. No caso do OpenBSD, ele documenta os diretórios que o software do sistema conhece, por isso não menciona /opt , por exemplo). p>

Onde você cria coisas não importa, pois é um diretório que você provavelmente removerá quando terminar de qualquer maneira. É uma boa idéia fazê-lo longe dos diretórios de instalação reais. Eu trabalhei em sistemas que tinham árvores de código-fonte em /bin e /usr/local , o que é extremamente desordenado.

Também recomendo que você faça um make install real para o software, em vez de executar os executáveis de dentro do diretório de compilação, a menos que você esteja aprimorando a compilação. Coletar os executáveis em um único local torna seu PATH mais limpo e mais fácil de configurar, a menos que você realmente deseje um elemento PATH distinto para cada parte do software, obviamente.

Opinião pessoal abaixo:

Para softwares que eu construo somente para mim, costumo usar uma hierarquia privada em $HOME/local para instalações.

Ao compilar programas que usam o GNU autotools e, portanto, tem um script configure , isso é realmente fácil. Você acabou de dizer

$ ./configure --prefix="$HOME/local"

no estágio de configuração, antes de make e make install .

Ao compilar programas que usam o CMake, pode-se conseguir o mesmo por

$ cmake -DCMAKE_INSTALL_PREFIX="$HOME/local" .

antes das etapas make e make install . O mesmo efeito (por outros meios) pode ser obtido ao instalar módulos Perl, etc.

Então, obviamente, você terá que adicionar $HOME/local/bin ao seu caminho ...

Pessoalmente, eu uso GNU Stow também, o que significa que eu realmente não especifico $HOME/local como a instalação prefixo mas $HOME/local/stow/thing-2.1 quando configuro o pacote de software thing-2.1 .

Após a instalação:

$ cd "$HOME/local/stow"
$ stow thing-2.1

O conteúdo do diretório $HOME/local/stow/thing-2.1/bin será exibido (usando links simbólicos) em $HOME/local/bin (e, da mesma forma, para qualquer lib ou outro diretório instalado em thing-2.1 ).

O Stow facilita muito o desinstalar software. Não há necessidade de procurar cada pequeno arquivo que foi instalado por um make install apenas para desinstalar e remover um software, em vez disso apenas

$ cd "$HOME/local/stow"
$ stow -D thing-2.1
$ rm -rf thing-2.1
    
por 15.01.2017 / 22:15