1.102.4 Gérer les bibliothèques partagées

Poids : 3

Thème : Installation de Linux et gestion des paquetages

Description

Le candidat devrait être capable de déterminer de quelles bibliothèques partagées dépend un programme et de les installer si nécessaires.

Savoir clé

Identifier les bibliothèques partagées
Connaître les endroits typiques où sont stoquées les bibliothèques partagées
Charger des bibliothèques partagées

Mots clés

Documentation

Cet objectif requiert la compréhension du fonctionnement des bibliothèques partagées et leur utilisation sous Linux.

La gestion des bibliothèques de fonctions est habituellement réalisée par les développeurs. Néanmoins les bibliothèques partagés peuvent poser certains problèmes pour l'installation de logiciels et concernant la sécurité. Il est donc essentiel pour un administrateur d'en maitriser le fonctionnement de base .

Les bibliothèques partagées peuvent poser problème dans le fonctionnement des programmes. La détermination des bibliothèques manquante et leur mise à disposition est le but final de l'objectif. La compréhension des mécanismes de bibliothèques partagés permettent aussi de déterminer certains problèmes de sécurité.

Les bibliothèques

Que sont les bibliothèques logicielles? Une bibliothèque est un ensemble de fonctions rassemblées dans un "paquetage". Ces fonctions sont utilisées par les programmes, les bibliothèques sont liés aux programmes qui les utilisent. Il existe deux type de liens entre un programme et les bibliothèques: statique et dynamique.

Prenons une exemple d'utilisation de bibliothèque. Avec le langage C, la fonction permettant l'affichage d'un message sur la console est printf. Le programmeur ne doit pas écrire lui même la fonction printf, celle-ci sera lié lors de la compilation et chargé lors de l'exécution.

La fonction printf de C fait partie de la bibliothèque Glibc. Si la bibliothèque est partagée, la dépendance d'un programme envers elle peut être déterminée avec ldd comme cela est vu plus loin.

Liaison statique

Une bibliothèque lié statiquement est incluse dans le programme lors de la compilation. Sous Linux, les fichiers des bibliothèques destinées à être liées statiquement portent l'extension ".a".

Les inclusions statiques ne posent pas de problème de dépendances car elles sont comprise dans l'exécutable.

Liaison dynamique

Une bibliothèque lié dynamiquement est liée au programme au moment de son lancement. Un chargeur charge en mémoire les bibliothèques et les appels de fonctions sont liés au code de la bibliothèque.

Sous Linux, les fichiers des bibliothèques dynamiques portent l'extension ".so".

Le lancement d'un programme ne peut évidemment se faire que si toutes les bibliothèques liés sont présente, si une seule est manquante, le lancement échoue. C'est ce genre de problème qu'il faut pouvoir déterminer et résoudre pour cet objectif.

Les bibliothèques dynamiques sont aussi appelées bibliothèques partagées car ces bibliothèques peuvent être chargées par plusieurs programmes et sont partagées en mémoire.

Les outils

La première commande utile pour les problèmes de bibliothèques est ldd. Cette commande permet de lister l'ensemble des bibliothèques liés à un programme. Si une bibliothèque est manquante, ldd affichera ce problème.

La page de documentation dédié à ldd donne toutes les informations sur la commande et son utilisation.

Ajouter un chemin de recherche

Lorsque les bibliothèques manquante ont été déterminée, et installées, il faut les faire connaître au chargeur dynamique. Les emplacements où les bibliothèque sont recherchées peuvent être configurés de deux façon: le fichier ld.so.conf ou la variable d'environnement LD_LIBRARY_PATH.

LD_LIBRARY_PATH

La variable d'environnement LD_LIBRARY_PATH permet d'ajouter des chemins de recherche pour le chargeur dynamique. Lors du chargement d'un programme, le chargeur de bibliothèque parcourra tout les chemins de la variable pour trouver les bibliothèques partagées.

Reportez vous à la documentation de LD_LIBRARY_PATH pour avoir toutes les informations.

ld.so.conf

Un moyen d'ajouter un chemin de recherche de façon permanente est d'utiliser le fichier ld.so.conf. Chaque ligne du fichier contient un chemin de recherche pour des bibliothèques partagées.

Ce fichier n'est pas utilisé tel quel par le chargeur dynamique. À la place, celui-ci utilise un cache binaire contenant les informations sur les bibliothèques, ce qui accélère le chargement. Pour régerer le cache à partir du fichier ld.so.conf, il est nécessaire de lancer la commande ldconfig en tant que root.

Reportez vous aux documentations de ld.so.conf et ldconfigpour avoir toutes les informations.

Retour aux objectifs