Warum installiert sich Software in / usr / lib?

11

Ich benutze seit Jahren Linux-Server und bin immer wieder durch den Dateisystem-Hierarchie-Standard verwirrt. Normalerweise kann ich mit der Verwirrung leben. Aber jetzt, da ich meine eigene Software für Linux entwickle, muss ich verstehen, wo sie von Paketmanagern installiert werden soll.

Ich war ziemlich überzeugt, dass / opt der perfekte Ort für meine Bewerbung war. Aber nachdem ich mein Debian-Dateisystem untersucht habe, bin ich mir nicht mehr sicher: Viele Softwareprogramme sind tatsächlich in / usr / lib installiert! Um nur einige zu nennen: MySQL, MySQLWorkbench, Nautilus, Rythmbox ...

Laut FHS soll / usr / lib "Bibliotheken für Programmierung und Pakete" enthalten und "Objektdateien, Bibliotheken und interne Binärdateien enthalten, die nicht direkt von Benutzern oder Shell-Skripten ausgeführt werden sollen" ( siehe hier ).

Viele in / usr / lib meines Debian-Servers befindliche Software sind keine Bibliotheken oder internen Binärdateien, sondern vollwertige, vom Benutzer ausführbare Software!

Ich bin immer noch auf dem richtigen Weg, meine Anwendung in / opt zu installieren. Aber ich würde wirklich gerne verstehen, ob dies richtig ist und vor allem warum .

Vielen Dank im Voraus für Ihre freundlichen Ratschläge,

Eric.

Eric MORAND
quelle
2
Stichprobenprüfung, soweit ich das beurteilen kann, installiert MySQLWorkbench nur Bibliotheken unter / usr / lib. Was lässt Sie denken, dass es in / usr / lib "vollwertige ausführbare Software für Benutzer" gibt?
Mark Wagner
Die tatsächliche Verknüpfung im Menü Anwendung zeigt auf eine Binärdatei in / usr / lib, wenn ich mich richtig erinnere.
Eric MORAND
Sie scheinen verwirrt darüber zu sein, wo die von Ihnen aufgeführte Software installiert ist. Hier finden Sie Links zu Auflistungen der Dateien für MySQL und Nautilus. Beachten Sie, dass die Dateien unter / etc, / usr / bin, / usr / lib usw. aufgeteilt sind, so wie es FHS vorschreibt. packages.debian.org/wheezy/i386/mysql-server-5.5/filelist packages.debian.org/wheezy/i386/nautilus/filelist
sciurus

Antworten:

6

Der eigentliche Schlüssel zum Verständnis des Dateisystem-Heirarchy-Standards besteht darin, zu wissen, dass er unter Berücksichtigung von Netzwerk-Dateisystemen entwickelt wurde.

Für jeden Computer mit demselben Betriebssystem, derselben Version und derselben Architektur können Sie / usr über NFS freigeben und bereitstellen.
/ usr wird (neu) gemountet, nachdem der Netzwerkstapel initialisiert wurde.

/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
quelle
Würde es Ihnen etwas ausmachen, einen Link für die lokalen / Remote- und R - R / W-Standards bereitzustellen?
Kapitän Giraffe
Bedeutet dies, dass man für jeden Linux-Server oder jede Linux-Workstation in einem Netzwerk ein einzelnes / usr- "Repository" haben kann?
Eric MORAND
1
Es braucht etwas Arbeit, aber ja, das kannst du. Damals, als Festplatten teuer waren, war dies die Norm für jeden großen Rollout.
Dan Garthwaite
@ eric-morand Aus der FHS: "/ usr ist der zweite Hauptabschnitt des Dateisystems. / usr sind gemeinsam nutzbare, schreibgeschützte Daten. Das bedeutet, dass / usr zwischen verschiedenen FHS-kompatiblen Hosts gemeinsam genutzt werden darf und nicht beschrieben werden darf Alle Informationen, die hostspezifisch sind oder mit der Zeit variieren, werden an anderer Stelle gespeichert. " pathname.com/fhs/pub/fhs-2.3.html#THEUSRHIERARCHY
Dan Garthwaite
Hoppla. Der obige Kommentar war für @CaptainGiraffe
Dan Garthwaite
12

Der Unterschied besteht darin, dass /usrPakete gespeichert werden sollen, die als Teil des Systems installiert sind . Pakete, die Sie von den Debian / Ubuntu-Repositories, PPAs usw. erhalten, finden Sie hier. While /optist für entbündelte Anwendungen von Drittanbietern gedacht , die nicht über den Paketverteilungsprozess der Distribution verteilt werden.

Wenn Sie .deb- oder .rpm-Pakete vertreiben, um Ihre Software schließlich in die offiziellen Repositorys aufzunehmen, sollten Sie auf installieren /usr. Andernfalls installieren Sie zu /opt. In beiden Fällen sollte Ihre Anwendung so kompiliert werden können, dass sie an einem beliebigen Ort ausgeführt werden kann (z. B. mithilfe der GNU-Autotools).

Michael Hampton
quelle
Vielen Dank. Derzeit habe ich nicht vor, meine App in das offizielle Repository aufzunehmen.
Eric MORAND
Was ist dann mit / usr / local? Oder ist das diskret
Aaron Copley
@ AaronCopley /usr/localwar für diese Frage nicht geeignet . Es ist jedoch für Software von Drittanbietern gedacht, die der lokale Administrator kompiliert und installiert.
Michael Hampton
Deshalb habe ich gefragt, ob es als diskret angesehen werden würde.
Aaron Copley
2

Sie installieren Ihre Bibliotheken in <prefix>/lib, Ihre Binärdateien in <prefix>/bin, Ihre Header-Dateien in <prefix>/include, Manpages in prefix/[share/]man, pkgconfig-Dateien in <prefix>/lib/pkgconfigoder <prefix/share/pkgconfigIhre cmake .m4-Dateien in<prefix>/share/aclocal

Lassen Sie dann den Paketmanager über das Präfix entscheiden. Wenn Sie RPMs / Debs selbst verteilen, /usrist dies eine gute Wahl für ein Präfix.

./configure --prefix=~/.local/ Sollte immer noch funktionieren, also codieren Sie Ihren Pfad bitte nirgendwo fest!

Einige Bibliotheken sind in ein anderes Tool eingebunden, das sie auch ausführbar und als Bibliothek verwendbar macht, aber sie sind immer noch Bibliotheken und nicht in Ihrem $ PATH, also ist es in Ordnung, sie in / lib zu platzieren, denke ich.

Jens Timmerman
quelle
1

Ich würde vorschlagen, die Installation Ihrer App unter / opt zu vermeiden. Grund 1: Einige Distributionen haben standardmäßig nicht / opt. Grund 2: / usr / lib ist ein Standardpfad für Bibliotheken. {Wenn andere Anwendungen Ihre Bibliothek verwenden müssen, müssen Sie Ihren Bibliothekspfad manuell zu / etc / ldconfig} / opt hinzufügen Dies ist bequemer, wenn Sie eigenständige Apps haben, die Sie manuell installieren und wissen möchten, wo sie sich befinden

Einer der Gründe, warum sich vollwertige ausführbare Dateien unter / usr / lib befinden, könnte sein, dass sie aus anderen Skripten verwendet werden. {Bash-Skripte können beispielsweise eine API nicht direkt verwenden. Aus diesem Grund besteht ein häufiger Trick darin, einen "Wrapper" um diese API zu erstellen und Parameter als Argumente des Skripts zu übertragen.}

Nikolaidis Fotis
quelle
2
Ich stimme dir nicht zu. Wenn er in / opt installieren möchte, erstellt der Paketmanager das Verzeichnis, sodass dies kein Problem darstellt. Auch in / usr / lib installierte Binärdateien sind eine schlechte Idee.
Walter
Danke @Nikolaidis Fotis. In meinem Fall enthält meine App jedoch keine öffentliche Bibliothek und wird nicht von anderen Anwendungen verwendet.
Eric MORAND
0

Bitte installieren Sie es in / opt.

Viel zu viele Linux-Anwendungen machen das gleiche wie Windows-Entwickler in den 90ern.

Installieren wir unsere Inhalte in C: \ Windows, damit sie einfach und leicht zu finden sind (und etwas schneller). Dann kamen 15 Jahre DLL-Hölle, als verschiedene Softwarepakete verschiedene Versionen derselben Bibliotheken benötigten (die in Windows keine Versionierung der Bibliotheken hatten).

Wenn Sie keine aktuelle Systemsoftware schreiben, geben Sie diese in / opt ein, damit die Benutzer besser verfolgen können, wer was installiert hat.

Walter
quelle
4
Dies ist nicht Windows. Wir haben Paketmanager, die funktionieren, und das ist wirklich kein großes Problem.
Michael Hampton
Wenn Sie wirklich so besorgt sind, dass sich alles im selben Baum befindet, lesen Sie den Nix- Paketmanager. Das Beste aus beiden Welten, wenn du mich fragst.
TheSola10