/usr/lib e /usr/local/lib

Fermé
mathieu - 20 mai 2005 à 20:07
 mathieu - 21 mai 2005 à 10:09
bonjour,

jaimerais savoir quelle est la différence entre les bibliothèques stockées de /usr/lib et /usr/local/lib...
y a t il des cas qui nécessitent de déplacer les bibliotheques du répertoire /usr/lib à /usr/local/lib ou inversement?

merci!!!

mathieu
A voir également:

6 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
20 mai 2005 à 20:25
Salut,

D'habitude /usr/local est un répertoire qu'on l'utilise pour installer des logiciels depuis les sources.

Si tu regardes, après l'installation de ta distribution le répertoire /usr/local/lib est vide.

"y a t il des cas qui nécessitent de déplacer les bibliotheques du répertoire /usr/lib à /usr/local/lib ou inversement? "

La réponse est non.

Cependant peut-être tu auras besoin d'ajouter dans le fichier /etc/ld.so.conf (ce fichier contient une liste des répertoires dans lesquels ld.so - éditeur de liens dynamiques cherche les bibliothèques partagées) la ligne /usr/local/lib

donc tu ajoute /usr/local/lib dans /etc/ld.so.conf
et après en tant que root tu éxécutes la commande
ldconfig
1
kmf31 Messages postés 1564 Date d'inscription mercredi 30 mars 2005 Statut Contributeur Dernière intervention 22 juin 2007 501
20 mai 2005 à 21:05
y a t il des cas qui nécessitent de déplacer les bibliotheques du répertoire /usr/lib à /usr/local/lib ou inversement?

Non, si ton systeme est correctement configure les programes trouveront leurs bibliotheques dans l'un ou l'autre automatiquement. Pour le /usr/lib c'est sur et pour le /usr/local/lib/ c'est fortement probable.

Au cas ou les bibliotheques dans /usr/local/lib/ ne marchent pas, c.-a-d. les programes ne les trouvent pas, on peut y remedier de deux facons:


1) En root: Ajouter dans le fichier "/etc/ld.so.conf" une ligne contenant "/usr/local/lib" et effectuer la commande: "/sbin/ldconfig" pour actualiser la base de donnees des bibliotheques. De cette facon on peut aussi creer d'autre repertoires de bibliotheques si on veut. A chaque fois qu'on y ajoute de bibliotheques a la main il faut refaire le "/sbin/ldconfig".
A savoir: quand on installe avec rpm ou "make install" c'est fait automatiquement, seulement avec une copie vraiement manuelle il faut faire expressement le "/sbin/ldconfig".


2) En utilisateur simple: Ajouter le chemin de la bibliotheque qui manque, par exemple le /usr/local/lib, dans la variable LD_LIBRARY_PATH. Pour ca on met dans le ~/.bashrc et/ou ~/.profile une ligne comme:
export LD_LIBRARY_PATH=/usr/local/lib

si la variable n'est pas encore definie ou
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

si la variable contient deja d'autres chemins bibliotheques (parce que ca a ete mis dans .bashrc/.profile plus haut dans le fichier). Ca fonctionne un peu comme le PATH mais pour les bibliotheques au lieu des applications.


Chez toi regarde avec:
cat /etc/ld.so.conf
echo $LD_LIBRARY_PATH

et si un des deux contient /usr/local/lib c'est bon et tu n'as pas besoin de faire quoi que ce soit.


Le seul (petit) probleme que tu pourrais avoir est si tu as installe les memes bibliotheques avec de versions tres legerement differentes dans les deux, dans /usr/lib/ (par un rpm de la distribution) et aussi dans /usr/local/lib (par un "make install" apres compilation).
Dans ce cas je crois c'est d'abord le LD_LIBRARY_PATH et apres le fichier /etc/ld.so.conf qui comptes, mais je ne suis pas sur. De toute facon un logiciel qui depend disons par exemple de "libtoto.so.3.4" (nom quelconque) dans /usr/lib/ peut prendre au lieu de ca une autre version: "libtoto.so.3.5" dans /usr/local/lib. S'il n'y a pas de bogues le logiciel va normalement bien fonctionner avec l'autre version, c'est sense d'etre compatible (a peu pres). Cependant defois un bogue a ete repare dans le libtoto ou le logiciel a un bogue et ca peut dans certains cas creer de problemes. Dans l'exemple ci-dessus ou on passe de
libtoto.so.3.4 => libtoto.so.3.5
ca doit etre bon. Par contre avec
libtoto.so.3.4 => libtoto.so.3.3
ca peut creer un probleme de ce genre.

La situation est tres differente si c'est le premier numero de la version qui change. Par exemple s'il y a dans /usr/local/lib/ un "libtoto.so.4.0" le logiciel compile avec "libtoto.so.3.4" ne prend pas l'autre version (il prendre la version 3.4 initiale dans /usr/lib/). En fait une difference dans le 1er chiffre de la version est comme une difference dans le nom de la bibliotheque, c'est presque 100% independant et ca peut parfaitement coexister, meme dans le meme repertoire. Apres il peut y avoir de logiciels qui prennent une version et d'autres qui prennent l'autre, ca depend comment le logiciel a ete compile.

Ca devrait aussi partiellement repondre a ta question dans l'autre sujet. Par contre la gestion des rpm avec les dependances est tres vite depassee si on melange trop entre les differents rpm (et les tar.gz), c.-a-d. ca affiche de problemes dependances qui ne sont pas vraie etc. Donc il faut forcer l'installation avec les options "--nodeps" et/ou "--force" quand on utilise rpm. Mais c'est tres tres delicat.
0
je souhaite te remercier pour ce message qui se veut complet, clair. je pense que ça va méclaircir...
parc ontre, jai une question:pkoi certains logiciels choisissent dinstaller les biblios ds /usr/local/lib et d'autres ds /usr/lib?
y a t il une différence entre ces deux répertoires?

merci!

mathieu
0
kmf31 Messages postés 1564 Date d'inscription mercredi 30 mars 2005 Statut Contributeur Dernière intervention 22 juin 2007 501
20 mai 2005 à 22:08
Non, sur le fond il n'y a pas de difference, mais il y a une espece de convention de mettre tout qui est original pour la distribution (Mandrake, Fedora, ...) dans /usr/lib (et aussi: /usr/bin/, /usr/share, /usr/man/, ...)

Par contre pour les paquets sources qui ne sont pas specifiques a la distribution ca va par defaut dans /usr/local/... (il y a quelques exceptions)

Bref par defaut:

paquet rpm => arbre /usr/
paquet source avec tar.gz => arbre /usr/local/


Comme ca on peut bien separer.

Si on veut on peut changer ca avec les bonnes options:
1) pour installer un rpm dans /usr/local
rpm -Uvh --relocate /usr=/usr/local (....).rpm

2) pour installer un tar dans /usr
./configure --prefix=/usr
et apres make, make install

Cependant il vaut mieux garder la separation, sinon un paquet source peut boussiler un paquet rpm deja installe.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 507
20 mai 2005 à 22:09
Salut,
La présense de ces 2 répertoires est liée à l'histoire d'UNIX.
Dans /usr on ne devait trouver que les logiciels fournis par le fournisseur de
l'UNIX.
Dans /usr/local les logiciels (et bibliothèques) tierces. La notion de local signifiant
'propre' au système sur lequel ils sont installées.
La différence principale était liée au mode de fonctionnement de l'UNIX lors
du démarage, en effet les logiciels disponibles dans /usr était dès le démarage
du mode single user : les partitions root et /usr l'étaient montées dès le début
de l'initialisation. La partition /usr/local quand à elle n'était montée que lors
du passage en multi user.
Ce fonctionnement est obsolète si la partition root contient /usr et /usr/local.

Si tu regardes le fichier /etc/ld.so.conf tu verras qu'il y d'autres dossiers qui
peuvent contenir des bibliothèques dynamiques.
0
ok je comprends mieux!
0