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.
Antworten:
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.
quelle
Der Unterschied besteht darin, dass
/usr
Pakete 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/opt
ist 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).quelle
/usr/local
war für diese Frage nicht geeignet . Es ist jedoch für Software von Drittanbietern gedacht, die der lokale Administrator kompiliert und installiert.Sie installieren Ihre Bibliotheken in
<prefix>/lib
, Ihre Binärdateien in<prefix>/bin
, Ihre Header-Dateien in<prefix>/include
, Manpages inprefix/[share/]man
, pkgconfig-Dateien in<prefix>/lib/pkgconfig
oder<prefix/share/pkgconfig
Ihre cmake .m4-Dateien in<prefix>/share/aclocal
Lassen Sie dann den Paketmanager über das Präfix entscheiden. Wenn Sie RPMs / Debs selbst verteilen,
/usr
ist 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.
quelle
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.}
quelle
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.
quelle