Por que o software se instala em / usr / lib?

11

Eu uso servidores Linux há anos e continuo sendo confundido pelo padrão de hierarquia de sistemas de arquivos. Normalmente, eu posso viver com a confusão. Mas agora que estou desenvolvendo meu próprio software para Linux, preciso entender onde ele deve ser instalado pelos gerenciadores de pacotes.

Eu estava bastante convencido de que / opt era o local perfeito para minha aplicação. Mas depois de investigar meu sistema de arquivos Debian, não tenho mais certeza: muitos softwares estão realmente instalados em / usr / lib! Para citar alguns: MySQL, MySQLWorkbench, Nautilus, Rythmbox ...

De acordo com o FHS, o / usr / lib deve conter "Bibliotecas para programação e pacotes" e "inclui arquivos de objetos, bibliotecas e binários internos que não devem ser executados diretamente por usuários ou scripts de shell" ( Veja aqui ).

Muitos softwares localizados em / usr / lib do meu servidor debian não são bibliotecas ou binários internos, mas softwares executáveis ​​por usuário!

Ainda estou no caminho certo para ter meu aplicativo instalado em / opt. Mas eu realmente gostaria de entender se isso está correto e, acima de tudo, por quê .

Agradecemos antecipadamente por seus conselhos,

Eric.

Eric MORAND
fonte
2
A verificação pontual, pelo que posso dizer, o MySQLWorkbench instala apenas bibliotecas em / usr / lib. O que faz você pensar que há "software executável de usuário completo" em / usr / lib?
Mark Wagner
O atalho real localizado no menu Aplicativo aponta para um binário localizado em / usr / lib, se bem me lembro.
Eric MORAND 28/08
Você parece confuso sobre onde o software listado está instalado. Aqui estão os links para as listagens, se os arquivos para MySQL e Nautilus. Observe que os arquivos estão divididos entre / etc, / usr / bin, / usr / lib etc., exatamente como o FHS diz que deveria. packages.debian.org/wheezy/i386/mysql-server-5.5/filelist packages.debian.org/wheezy/i386/nautilus/filelist
sciurus

Respostas:

6

A chave real para entender o Padrão de Hierarquia do Sistema de Arquivos é saber que ele foi projetado com sistemas de arquivos de rede em mente.

Para todas as máquinas do mesmo sistema operacional, versão e arquitetura, você pode compartilhar / usr via NFS e montá-lo.
/ usr é (re) montado depois que a pilha de rede é inicializada.

/var <-- local, r/w optimized
/usr <-- can be mounted over network, possibly even read-only!
/opt <-- local, read mostly
/etc <-- local, read mostly
/srv <-- local, r/w optimized

/home <-- either/or
Dan Garthwaite
fonte
Você se importaria de fornecer um link para os padrões local / remoto e r - r / w?
Capitão Giraffe
Isso significa que é possível ter um único repositório / usr para cada servidor ou estação de trabalho Linux em uma rede?
Eric MORAND 28/08
1
Demora um pouco de trabalho, mas sim, você pode. Voltar quando os discos rígidos eram caros, essa era a norma para qualquer grande lançamento.
Dan Garthwaite
@ eric-morand Do FHS: "/ usr é a segunda seção principal do sistema de arquivos. / usr é compartilhável, dados somente leitura. Isso significa que / usr deve ser compartilhável entre vários hosts compatíveis com o FHS e não deve ser gravado em Todas as informações específicas do host ou que variam com o tempo são armazenadas em outro local. " pathname.com/fhs/pub/fhs-2.3.html#THEUSRHIERARCHY
Dan Garthwaite
Ops. O comentário acima foi para @CaptainGiraffe
Dan Garthwaite
12

A diferença é que ele /usrdeve conter os pacotes instalados como parte do sistema . Pacotes que você obtém dos repositórios Debian / Ubuntu, PPAs, etc., acesse aqui. While /opté destinado a aplicativos de terceiros desagrupados que não são distribuídos pelo processo de distribuição de pacotes da distribuição.

Se você distribuir pacotes .deb ou .rpm, com o objetivo de eventualmente incluir seu software nos repositórios oficiais, você deve instalar o /usr. Caso contrário, instale em /opt. Em qualquer um dos casos, seu aplicativo deve ser compilado para ser executado em qualquer local arbitrário (por exemplo, com a ajuda das ferramentas automáticas do GNU).

Michael Hampton
fonte
Obrigado. No momento, não tenho planos de incluir meu aplicativo no repositório oficial.
Eric MORAND 28/08
E quanto a / usr / local, então? Ou isso é discreto
Aaron Copley
@AaronCopley /usr/localnão estava no escopo desta pergunta. Mas é para softwares de terceiros que o administrador local compila e instala.
Michael Hampton
Por isso perguntei se seria considerado discreto.
Aaron Copley
2

Você instala suas bibliotecas <prefix>/lib, binários <prefix>/bin, arquivos de cabeçalho <prefix>/include, páginas de manual prefix/[share/]man, arquivos pkgconfig <prefix>/lib/pkgconfigou <prefix/share/pkgconfigarquivos cmake .m4 em<prefix>/share/aclocal

Então deixe o gerenciador de pacotes decidir o prefixo. Se você estiver distribuindo rpm's / deb's, /usré uma boa opção para um prefixo.

./configure --prefix=~/.local/ Ainda deve funcionar, portanto, não codifique seu caminho em nenhum lugar, por favor!

Algumas bibliotecas são agrupadas em outra ferramenta que as torna também executáveis ​​e utilizáveis ​​como uma biblioteca, mas elas ainda são bibliotecas, e não no seu $ PATH, portanto, não há problema em colocá-las em / lib, eu acho.

Jens Timmerman
fonte
1

Sugiro evitar a instalação do seu aplicativo em / opt. Razão 1: algumas distribuições não possuem / opt por padrão Razão 2: / usr / lib é um caminho padrão para bibliotecas {Se outros aplicativos precisarem usar sua biblioteca, você deverá adicionar seu caminho manualmente a / etc / ldconfig} / opt é mais conveniente quando você tem aplicativos independentes instalados manualmente e deseja saber onde eles estão localizados

Um dos motivos pelos quais executáveis ​​completos estão localizados em / usr / lib pode ser que eles sejam usados ​​em outros scripts. {Por exemplo, os scripts do bash não podem usar uma API diretamente. por esse motivo, um truque comum é criar um "wrapper" em torno dessa API e enviar parâmetros como argumentos do script}

Nikolaidis Fotis
fonte
2
Discordo. Se ele quiser instalar no / opt, o gerenciador de pacotes criará o diretório, o que não é problema. Além disso, os binários instalados em / usr / lib são uma má idéia.
Walter
Obrigado @Nikolaidis Fotis. Mas, no meu caso, meu aplicativo não contém uma biblioteca pública e não será usado por outros aplicativos.
Eric MORAND 28/08
0

Por favor, instale-o em / opt.

O número excessivo de aplicativos Linux faz o mesmo que os desenvolvedores do Windows criaram nos anos 90.

Vamos instalar nosso material em C: \ windows para que seja simples e fácil de encontrar (e um pouco mais rápido). Depois vieram 15 anos de DLL, já que diferentes pacotes de software precisavam de versões diferentes das mesmas bibliotecas (que no Windows não tinham versões das bibliotecas).

A menos que você esteja escrevendo o software real do sistema, coloque-o em / opt, para que as pessoas possam rastrear melhor quem instalou o quê.

Walter
fonte
4
Este não é o Windows. Temos gerenciadores de pacotes que funcionam e isso realmente não é um problema.
Michael Hampton
Se você está realmente preocupado com tudo na mesma árvore, consulte o gerenciador de pacotes Nix . Melhor dos dois mundos, se você me perguntar.
TheSola10