Empacotamento: / usr / lib vs. / usr / lib / * - linux-gnu

5

Eu estava criando uma nova versão do Spice em um contêiner LXC, principalmente para experimentação. No entanto, uma coisa estranha que encontrei foi que make install installed libspice-server.so.1.9.0 into /usr/lib . O resultado foi um desagradável segfault ao usar o driver QXL devido ao fato de que libspice-server.so.1.8.0 dos repositórios estava localizado em /usr/lib/x86_64-linux-gnu , que tem uma precedência maior em ldconfig . Então, ele estava vinculando dinamicamente a versão antiga da biblioteca com o código mais recente - não é bom.

De qualquer forma, isso me fez pensar: Diferente de ldconfig ordering (o que eu acho que não tem nada a ver com isso) existe uma diferença funcional ou filosófica entre colocar uma biblioteca em /usr/lib versus colocar uma biblioteca em /usr/lib/{x86_64,i386}-linux-gnu ?

Eu entendo a necessidade de separar os diretórios /usr/lib/i386-linux-gnu e /usr/lib/x86_64-linux-gnu , pois o Debian não está utilizando a hierarquia /usr/lib /usr/lib32 usada por algumas outras distros. Mas, bibliotecas que estão diretamente em /usr/lib têm algum significado especial, ou simplesmente por compatibilidade com versões anteriores, talvez?

    
por Chuck R 02.12.2014 / 11:31

2 respostas

3

No Debian e no Ubuntu, e na verdade o FHS, /usr/lib e variantes são "de propriedade" do fornecedor. Nesse caso, isso significa sua distribuição. Você não deve colocar arquivos lá por conta própria. É claro que você pode fazer o que quiser, mas as ferramentas (como o dpkg) irão sobrescrever os arquivos que você colocar lá sem avisar, porque o sistema por design considera esses espaços somente para pacotes de distribuição. Seu sistema é seu para quebrar como quiser, mas você também consegue manter as peças: -)

O espaço reservado para o proprietário / administrador do sistema para colocar bibliotecas extras do sistema é /usr/local/lib . Isso está no FHS, portanto, deve estar disponível e configurado em todas as distribuições que respeitam os padrões. O software upstream deve ter make install place libraries por padrão.

  

... existe uma diferença funcional ou filosófica entre colocar uma biblioteca em / usr / lib versus colocar uma biblioteca em / usr / lib / {x86_64, i386} -linux-gnu?

Pacotes de distribuição que usam /usr/lib não podem ter arquiteturas diferentes instaladas de uma vez (como i386 vs. amd64), o que, como outros apontaram, é útil para desktops que executam software de 32 e 64 bits e para desenvolvedores executando código construído para outras arquiteturas por emulação. Esta é a única razão para os subdiretórios multiarch.

O mesmo se aplica às bibliotecas que você instala. Se você fizer isso em /usr/lib ou /usr/local/lib , não poderá ter várias arquiteturas suportadas simultaneamente. Você sempre pode adicionar caminhos multiarch como /usr/local/lib/{x86_64,i386}-linux-gnu to /etc/ld.so.conf.d/ para ativar isso, é claro.

    
por Robie Basak 20.01.2017 / 17:31
2

Você está certo, em um sistema tradicional todas as bibliotecas foram instaladas em /usr/lib . Como você já mencionou, o fato de os usuários gostarem de executar binários de 32 bits em plataformas de 64 bits é uma das razões para separar bibliotecas por sua arquitetura. Esta abordagem é conhecida como Multiarch (pelo menos no mundo Debian).

Além disso, os desenvolvedores gostam de instalar bibliotecas de outras arquiteturas (como o ARM) para compilar suas aplicações.

A FHS recomenda colocar as bibliotecas de 32/64 bits nas pastas /usr/lib{32,64} . Essa abordagem é meio inflexível, pois não há suporte para outras arquiteturas (por exemplo, ARM). Existem até várias IMIs de 64 bits que não são compatíveis entre si e acabam na mesma pasta.

Mais informações:

por ted 09.12.2014 / 19:53

Tags