Hiérarchie répertoire (ou installer les logiciels compilés)

Bonsoir à tous,
voilà longtemps que je me pose une question et vu que je vais bientôt recevoir mon nouveau PC je me dis que c’est le moment ou jamais! (la réinstallation est proche :slightly_smiling: )

J’'aimerai savoir dans lequel de ces répertoires vous installez les programmes que vous compiler (du genre git, mysql, nodejs, tomcat7, nginx, …) car malgré pas mal de lecture je n’arrive pas à trouver une réponse claire.

Mes lectures font souvent étant de : “/usr” “/usr/local” ou “/opt”.

Alors qu’elle est la “vraie” convention? et si possible quelqu’un pourrait-il m’expliquer les différences de ces 3 répertoires

D’avance merci.
Julien

Pour ce qui est des scripts persos, si c’est de ça que tu veux parler, la règle, mais ça n’a rien d’absolu, est des les placer dans /usr/local/bin.
AMA, tu peux les mettre où tu veux car ce qui compte avant tout, ce sont les droits que tu leur accordes, ainsi que le propriétaire (root, toi) et le groupe.

En général, je lis les README pour savoir où placer les fichiers.
Je fais confiance à ceux qui en sont à la source. J’installe les dépendances préconisées et place les fichiers comme conseillé.
Sans préconisations particulières, il m’arrive de placer les fichiers en $HOME pour que seul l’utilisateur concerné y ait accès.

Faire attention à $PATH et à l’emplacement des libs : /lib /usr/lib /usr/local/lib …
“dynamic libraries” contre “static files”, un débat sans fin.

$ man hier

opt comme optionnel, des paquets qui devraient se présenter avec leurs propres libs (static files).

/usr This directory is usually mounted from a separate partition. It should hold only sharable, read-only data, so that it can be mounted by various machines running Linux.
Je m’étonne qu’on conseille de placer les fichiers en /usr. Pas l’endroit habituel pour placer ses compilations. Certainement un raccourci de langage pour “userland”.

/usr/lib Object libraries, including dynamic libraries, plus some executables which usually are not invoked directly. More complicated programs may have whole subdirectories there.

/usr/local This is where programs which are local to the site typically go.

       /usr/local/bin
              Binaries for programs local to the site.

       /usr/local/doc
              Local documentation.

       /usr/local/etc
              Configuration files associated with locally installed programs.

       /usr/local/games
              Binaries for locally installed games.

       /usr/local/lib
              Files associated with locally installed programs.

       /usr/local/include
              Header files for the local C compiler.

       /usr/local/info
              Info pages associated with locally installed programs.

       /usr/local/man
              Man pages associated with locally installed programs.

       /usr/local/sbin
              Locally installed programs for system administration.

       /usr/local/share
              Local application data that can be shared among different architectures of the same OS.

Pendant longtemps, j’ai installé les programmes compilés dans /usr/local . Cela porte l’avantage qu’ils sont disponibles pour tous les utilisateurs du système.

Désormais, j’ai créé dans mon répertoire personnel un dossier ~/local . Dans ce dernier, je compile les programme, et j’y place aussi les script persos.
Cela donne :

~/local/bin
~/local/share

Tout fonctionne bien, à condition de rajouter ceci dans ~/.profile :

j’en suis revenu, certains indique qu’il faut mettre les fichiers dans /var.
Pour moi c’était /usr/bin (fichier binaires utilisés par les utilisateurs, par opposition aux fichiers systeme).
j’ai ensuite changé pour un rep dans HOME afin de rationaliser ma politique de sauvegarde (je sauvegarde tout HOME, et comme ça si je fais une connerie sur un fichier bin, je peux récupérer une ancienne version). C’est efficace pour de petites applis , mais pour du plus gros (type mysql …) je laisse dans /usr/bin

C’est bien ce que je disais, on peut faire comme on le désire, seuls les droits ont de l’importance.

Tu peux les placer «où tu veux», tu es libre. Tu es libre d’ignorer les README, libre de te connecter à une session X sous le compte root, libre de lancer # dd if=/dev/urandom of=/dev/sda… Tu es libre de faire comme tu l’entends. Ce n’est pas pour rien que nous sommes sous GNU/linux .
Certains endroits sont toutefois moins gênants, plus indiqués que d’autres.
Essayons d’être cohérents : ce n’est pas pour rien que nous sommes sous debian …

/usr/bin ne me parait pas idéal.
Si tu les places en /usr/bin, tu risques de te mélanger les pinceaux, d’interférer avec les paquets debian. Imagine que tu compiles mysql et que tu places le binaire en /usr/bin/mysql. Imagine encore que tu veuilles installer mysql des dépôts debian en dépit du double emploi.

$ whereis mysql
mysql: /usr/bin/mysql

On supprime l’ancien mysql ? On l’écrase ? On renomme l’ancien mysql en mysql-ancien ? … ou on le déplace en /opt/* ou en /usr/local/bin ?

Bonjour,
Merci pour ces premières réponses. Je vois qu’il n’y a pas forcément une réponse “unique”.

Au final je me dis qu’il y a deux choses importantes :
[ul]

  • ne pas faire un choix qui va à l’encontre de la gestion des droits
  • être cohérent tout au long de la vie du système.
    [/ul]

Du coup, je pense que je vais rester sur mon “/opt” pour tout ce qui est “logiciels externes à la distribution” (non structurant) comme tomcat7, nodejs, …

Julien

http://wiki.debian.org/FilesystemHierarchyStandard