J'utilise des serveurs Linux depuis des années maintenant et je continue d'être confus par le Filesystem Hierarchy Standard. Habituellement, je peux vivre avec la confusion. Mais maintenant que je développe mon propre logiciel pour Linux, je dois comprendre où il est censé être installé par les gestionnaires de paquets.
J'étais assez convaincu que / opt était l'endroit parfait pour mon application. Mais après avoir enquêté sur mon système de fichiers Debian, je n'en suis plus sûr: beaucoup de logiciels sont en fait installés dans / usr / lib! Pour n'en nommer que quelques-uns: MySQL, MySQLWorkbench, Nautilus, Rythmbox ...
Selon le FHS, / usr / lib est censé contenir des "bibliothèques de programmation et de packages" et "inclut des fichiers objets, des bibliothèques et des binaires internes qui ne sont pas destinés à être exécutés directement par les utilisateurs ou des scripts shell" ( voir ici ).
Beaucoup de logiciels situés dans / usr / lib de mon serveur Debian ne sont pas des bibliothèques ou des binaires internes mais des logiciels exécutables à part entière!
Je suis toujours sur la bonne voie pour installer mon application dans / opt. Mais je voudrais vraiment comprendre si c'est correct et, surtout, pourquoi .
Merci d'avance pour vos aimables conseils,
Eric.
Réponses:
La vraie clé pour comprendre la norme de hiérarchie du système de fichiers est de savoir qu'elle est conçue en pensant aux systèmes de fichiers réseau.
Pour chaque machine du même système d'exploitation, de la même version et de la même architecture, vous pouvez partager / usr via NFS et le monter.
/ usr est (re) monté après l'initialisation de la pile réseau.
la source
La différence est qu'il
/usr
est destiné à contenir les packages installés dans le cadre du système . Les paquets que vous obtenez des dépôts Debian / Ubuntu, PPA, etc., allez ici. While/opt
est destiné aux applications tierces dégroupées qui ne sont pas distribuées via le processus de distribution des packages de distribution.Si vous distribuez des packages .deb ou .rpm, en vue de l'inclusion éventuelle de votre logiciel dans les référentiels officiels, vous devez installer sur
/usr
. Sinon installez à/opt
. Dans les deux cas, votre application doit pouvoir être compilée pour s'exécuter dans n'importe quel emplacement arbitraire (par exemple à l'aide des outils automatiques GNU).la source
/usr/local
n'était pas dans la portée de cette question. Mais il est destiné aux logiciels tiers que l'administrateur local compile et installe.Vous installez vos bibliothèques dans
<prefix>/lib
, vos fichiers binaires dans<prefix>/bin
, vos fichiers d'en-tête dans<prefix>/include
, les pages de manuel dansprefix/[share/]man
, les fichiers pkgconfig dans<prefix>/lib/pkgconfig
ou<prefix/share/pkgconfig
, vos fichiers cmake .m4 dans<prefix>/share/aclocal
Laissez ensuite le gestionnaire de packages décider du préfixe. Si vous distribuez vous-même les rpm / deb,
/usr
c'est un bon choix pour un préfixe../configure --prefix=~/.local/
Cela devrait toujours fonctionner, alors n'allez pas coder en dur votre chemin n'importe où s'il vous plaît!Certaines bibliothèques sont enveloppées dans un autre outil qui les rend également exécutables et utilisables en tant que bibliothèque, mais ce sont toujours des bibliothèques, et non dans votre $ PATH, donc il est correct de les mettre dans / lib je suppose.
la source
Je suggérerais d'éviter d'installer votre application sous / opt. Raison 1: certaines distributions n'ont pas / opt par défaut Raison 2: / usr / lib est un chemin standard pour les bibliothèques {Si d'autres applications doivent utiliser votre bibliothèque, vous devez ajouter votre chemin de bibliothèque manuellement dans / etc / ldconfig} / opt est plus pratique lorsque vous avez des applications autonomes que vous installez manuellement et que vous voulez savoir où elles se trouvent
L'une des raisons pour lesquelles les exécutables à part entière sont situés sous / usr / lib pourrait être qu'ils sont utilisés à partir d'autres scripts. {Par exemple, les scripts bash ne peuvent pas utiliser directement une API. pour cette raison, une astuce courante consiste à construire un "wrapper" autour de cette API et à pousser les paramètres comme arguments de script}
la source
Veuillez l'installer dans / opt.
Beaucoup trop d'applications Linux font la même marque que les développeurs Windows dans les années 90.
Permet d'installer nos trucs dans C: \ windows afin qu'il soit simple et facile à trouver (et légèrement plus rapide). Puis sont venues 15 ans d'enfer sur les DLL car différents progiciels avaient besoin de différentes versions des mêmes bibliothèques (qui, dans Windows, n'avaient pas de version des bibliothèques).
Sauf si vous écrivez un logiciel système réel, mettez-le dans / opt, afin que les gens puissent mieux suivre qui a installé quoi.
la source