Perché il software si installa in / usr / lib?


11

Uso i server Linux da anni e continuo a essere confuso dal Filesystem Hierarchy Standard. Di solito, posso vivere con la confusione. Ma ora che sto sviluppando il mio software per Linux, devo capire dove dovrebbe essere installato dai gestori dei pacchetti.

Ero abbastanza convinto che / opt fosse il luogo perfetto per la mia applicazione. Ma dopo aver studiato il mio filesystem Debian, non ne sono più sicuro: molti software sono effettivamente installati in / usr / lib! Per citarne alcuni: MySQL, MySQLWorkbench, Nautilus, Rythmbox ...

Secondo l'FHS, / usr / lib dovrebbe contenere "Librerie per la programmazione e pacchetti" e "include file oggetto, librerie e binari interni che non sono destinati ad essere eseguiti direttamente dagli utenti o da script di shell" ( Vedi qui ).

Molti software che si trovano in / usr / lib del mio server debian non sono librerie o binari interni ma software eseguibili a tutti gli effetti!

Sono ancora sulla buona strada per avere la mia applicazione installata in / opt. Ma vorrei davvero capire se questo è corretto e, soprattutto, perché .

Grazie in anticipo per i tuoi gentili consigli,

Eric.


2
Controllo a campione, da quello che posso dire MySQLWorkbench installa solo le librerie in / usr / lib. Cosa ti fa pensare che ci sia un "software eseguibile per l'utente" a tutti gli effetti in / usr / lib?
Mark Wagner,

Il collegamento effettivo situato nel menu Applicazione punta a un file binario situato in / usr / lib, se ricordo bene.
Eric MORAND,

Sembri confuso su dove è installato il software che hai elencato. Ecco i collegamenti agli elenchi se i file per MySQL e Nautilus. Nota che i file sono divisi tra / etc, / usr / bin, / usr / lib ecc. Proprio come FHS dice che dovrebbero essere. pacchetti.debian.org/wheezy/i386/mysql-server-5.5/filelist pacchetti.debian.org/wheezy/i386/nautilus/filelist
sciurus

Risposte:


6

La vera chiave per comprendere il file system Heirarchy Standard è sapere che è progettato pensando ai filesystem di rete.

Per ogni macchina dello stesso sistema operativo, versione e architettura, è possibile condividere / usr tramite NFS e montarlo.
/ usr viene (ri) montato dopo l'inizializzazione dello stack di rete.

/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

Ti dispiacerebbe fornire un collegamento per gli standard locale / remoto e r - r / w?
Capitan Giraffe,

Questo significa che si può avere un singolo "repository" / usr per ogni server Linux o workstation in una rete?
Eric MORAND,

1
Ci vuole un po 'di lavoro, ma sì, puoi. Quando i dischi rigidi erano costosi, questa era la norma per qualsiasi distribuzione di grandi dimensioni.
Dan Garthwaite,

@ eric-morand Dall'FHS: "/ usr è la seconda sezione principale del filesystem. / usr è dati condivisibili, di sola lettura. Ciò significa che / usr deve essere condivisibile tra vari host conformi a FHS e non deve essere scritto su Qualsiasi informazione specifica dell'host o che varia nel tempo viene memorizzata altrove. " pathname.com/fhs/pub/fhs-2.3.html#THEUSRHIERARCHY
Dan Garthwaite,

Ops. Il commento sopra è stato per @CaptainGiraffe
Dan Garthwaite il

12

La differenza è che /usrsi intende conservare i pacchetti installati come parte del sistema . I pacchetti che ottieni dai repository Debian / Ubuntu, PPA, ecc., Vai qui. While /optè pensato per le applicazioni di terze parti disaggregate che non sono distribuite attraverso il processo di distribuzione dei pacchetti della distribuzione.

Se distribuisci i pacchetti .deb o .rpm, con l'obiettivo di includere il tuo software nei repository ufficiali, dovresti installarlo /usr. Altrimenti installa su /opt. In entrambi i casi, l'applicazione dovrebbe essere in grado di essere compilata per essere eseguita in qualsiasi posizione arbitraria (ad es. Con l'aiuto degli autotools GNU).


Grazie. Al momento, non ho intenzione di includere la mia app nel repository ufficiale.
Eric MORAND,

Che dire di / usr / local, allora? O è discreto
Aaron Copley,

@AaronCopley /usr/localnon rientrava in questa domanda. Ma è pensato per software di terze parti che l'amministratore locale compila e installa.
Michael Hampton

Ecco perché ho chiesto se sarebbe stato considerato discreto.
Aaron Copley,

2

Installi le tue librerie in <prefix>/lib, i tuoi binari in <prefix>/bin, i tuoi file header in <prefix>/include, le pagine man in prefix/[share/]man, i file pkgconfig in <prefix>/lib/pkgconfigo <prefix/share/pkgconfig, i tuoi file cmake .m4 in<prefix>/share/aclocal

Quindi lasciare che il gestore pacchetti decida il prefisso. Se stai distribuendo tu stesso rpm / deb, /usrè una buona scelta per un prefisso.

./configure --prefix=~/.local/ Dovrebbe funzionare ancora, quindi non andare a codificare il tuo percorso ovunque per favore!

Alcune librerie sono racchiuse in qualche altro strumento che le rende anche eseguibili e utilizzabili come libreria, ma sono comunque librerie e non nel tuo $ PATH, quindi credo sia giusto inserirle in / lib, immagino.


1

Suggerirei di evitare l'installazione dell'app in / opt. Motivo 1: alcune distribuzioni non dispongono di / opt per impostazione predefinita Motivo 2: / usr / lib è un percorso standard per le librerie {Se altre applicazioni devono utilizzare la libreria, è necessario aggiungere manualmente il percorso della libreria a / etc / ldconfig} / opt è più comodo quando si dispone di app autonome che si installano manualmente e si desidera sapere dove si trovano

Uno dei motivi per cui gli eseguibili completi si trovano in / usr / lib potrebbe essere che sono utilizzati da altri script. {Ad esempio gli script bash non possono usare direttamente un'API. per questo motivo un trucco comune è costruire un "wrapper" attorno a questo api e spingere i parametri come argomenti dello script}


2
Non sono d'accordo. Se desidera installare in / opt, il gestore pacchetti creerà la directory, quindi non è un problema. Inoltre, i binari installati in / usr / lib sono una cattiva idea.
Walter,

Grazie @Nikolaidis Fotis. Ma nel mio caso, la mia app non contiene una libreria pubblica e non verrà utilizzata da altre applicazioni.
Eric MORAND,

0

Per favore, installalo in / opt.

Troppe applicazioni Linux fanno lo stesso degli sviluppatori Windows degli anni '90.

Consente di installare le nostre cose in C: \ windows in modo che sia semplice e facile da trovare (e leggermente più veloce). Poi sono arrivati ​​15 anni di inferno DLL poiché diversi pacchetti software necessitavano di versioni diverse delle stesse librerie (che in Windows non avevano il controllo delle versioni delle librerie).

A meno che tu non stia scrivendo un vero software di sistema, mettilo in / opt, in modo che le persone possano rintracciare meglio chi ha installato cosa.


4
Questo non è Windows. Abbiamo gestori di pacchetti che funzionano e questo non è un grosso problema.
Michael Hampton

Se sei davvero così preoccupato per tutto ciò che si trova nello stesso albero, controlla il gestore dei pacchetti Nix . Il meglio di entrambi i mondi, se me lo chiedi.
TheSola10
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.