12 février 2014

Application ne s’exécutant pas

Pour diagnostiquer une application qui échoue au démarrage, examinez les éléments suivants :
  • la description du paquet DEB ou RPM qui est à l’origine de l’installation du programme. Dans le cas où le programme a été compilé par vos soins, consultez dans ce cas les paramètres de compilation ;
  • les fichiers de configuration ;
  • les journaux d’événements ;
  • les filtrages réseau ;
  • les dépendances nécessaires ;
  • l’emplacement des bibliothèques ;
  • l’exécution de l’application en mode débogage (debug).

1. Description d’un paquet installé

La commande varie d’une distribution à l’autre :
Debian et Ubuntu
Commencez par afficher la description du paquet concerné avec la commande apt-cache show.
Syntaxe
apt-cache show <nom_du_paquet>
Pas d’options pour cette commande.
Exemple avec Debian
Afficher la description du programme Apache 2 :
# apt-cache show apache2 
Package: apache2 
Version: 2.2.22-13 
Installed-Size: 29 
Maintainer: Debian Apache Maintainers <debian- 
apache@lists.debian.org> 
Architecture: amd64 
Depends: apache2-mpm-worker (= 2.2.22-13) | apache2-mpm-prefork (=  
2.2.22-13) | apache2-mpm-event (= 2.2.22-13) | apache2-mpm-itk (=  
2.2.22-13), apache2.2-common (= 2.2.22-13) 
Description-fr: Métapaquet pour le serveur HTTP Apache 
L’objectif de l’Apache Software Foundation est de construire un  
serveur HTTP sécurisé, performant et extensible en tant que logiciel  
open source respectant les standards. Le résultat a longtemps  
été le serveur web numéro un sur Internet. 
 
Il gère HTTPS, les serveurs virtuels, CGI, SSI, IPv6, l’intégration 
facile de scripts et de bases de données, le filtrage des 
requêtes/réponse, de nombreuses méthodes d’authentification  
flexibles et bien plus encore. 
Homepage: http://httpd.apache.org/ 
Description-md5: d24f049cd70ccfc178dd8974e4b1ed01 
Tag: implemented-in::c, interface::daemon, network::server,  
network::service, protocol::http, protocol::ipv6, role::metapackage,  
 
role::program, suite::apache, web::server, works-with-format::html,  
works-with::text 
Section: httpd 
Priority: optional 
Filename: pool/main/a/apache2/apache2_2.2.22-13_amd64.deb 
Size: 1432 
MD5sum: 04241cf30710ab7640e4c1b164044f16 
SHA1: 5a5ed142817a0925b8ed087b585efbd0fb5a982e 
SHA256: ee95e97f002e9d988a05f8f2fc10bdb395629962126b841bab0849c3c598f958
Même si les dépendances peuvent être affichées avec apt-cache show, la commande apt-cache depends réalise également cette opération.
Syntaxe
apt-cache depends <nom_du_paquet>
Pas d’options pour cette commande.
Exemple avec Debian
Afficher les dépendances du programme Apache 2 :
# apt-cache depends apache2 
apache2 
 |Dépend: apache2-mpm-worke 
 |Dépend: apache2-mpm-prefork 
 |Dépend: apache2-mpm-event 
  Dépend: apache2-mpm-itk 
  Dépend: apache2.2-common
CentOS
Avec yum info, vous obtenez les informations du paquet concerné.
Syntaxe
yum info <nom>
Pas d’options pour cette commande.
Exemple
# yum info httpd  
Loaded plugins: fastestmirror  
Loading mirror speeds from cached hostfile  
 * base: mirror.ate.info  
 * extras: mirror.ate.info  
 * updates: mirror.ate.info  
Installed Packages  
Name        : httpd  
Arch        : x86_64  
Version     : 2.2.15  
Release     : 29.el6.centos  
Size        : 2.9 M  
Repo        : installed  
From repo   : updates  
Summary     : Apache HTTP Server  
URL         : http://httpd.apache.org/  
License     : ASL 2.0  
Description : The Apache HTTP Server is a powerful, efficient, and  
extensible  : web server. 
Vous pouvez également utiliser la commande RPM pour connaître les fichiers de configuration ou lire des informations d’un paquet.
Syntaxe
rpm <options> <nom>
Options nécessaires :
Option
Description
courte
longue
-q
(aucun)
Option de requête.
-c
--configfiles
Liste les fichiers de configuration.
-i
(aucun)
Affiche les informations du paquet.
Exemples
Lister les fichiers de configuration de Apache 2 :
# rpm -qc httpd  
/etc/httpd/conf.d/welcome.conf  
/etc/httpd/conf/httpd.conf  
/etc/httpd/conf/magic  
/etc/logrotate.d/httpd  
/etc/sysconfig/htcacheclean  
/etc/sysconfig/httpd  
/var/www/error/HTTP_BAD_GATEWAY.html.var  
/var/www/error/HTTP_BAD_REQUEST.html.var  
/var/www/error/HTTP_FORBIDDEN.html.var  
/var/www/error/HTTP_GONE.html.var  
/var/www/error/HTTP_INTERNAL_SERVER_ERROR.html.var  
/var/www/error/HTTP_LENGTH_REQUIRED.html.var  
/var/www/error/HTTP_METHOD_NOT_ALLOWED.html.var  
/var/www/error/HTTP_NOT_FOUND.html.var  
/var/www/error/HTTP_NOT_IMPLEMENTED.html.var  
/var/www/error/HTTP_PRECONDITION_FAILED.html.var  
/var/www/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var  
/var/www/error/HTTP_REQUEST_TIME_OUT.html.var  
/var/www/error/HTTP_REQUEST_URI_TOO_LARGE.html.var  
/var/www/error/HTTP_SERVICE_UNAVAILABLE.html.var  
/var/www/error/HTTP_UNAUTHORIZED.html.var  
/var/www/error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var  
/var/www/error/HTTP_VARIANT_ALSO_VARIES.html.var  
/var/www/error/contact.html.var  
/var/www/error/include/bottom.html  
/var/www/error/include/spacer.html  
/var/www/error/include/top.html 
Obtenir des informations sur le paquet Apache 2 :
# rpm -qi httpd  
Name        : httpd                        Relocations: (not  
relocatable)  
Version     : 2.2.15                            Vendor: CentOS  
Release     : 29.el6.centos                 Build Date: mar. 13 août 2013 19:30:33 CEST  
Install Date: mer. 04 sept. 2013 19:41:04 CEST      Build Host:  
c6b8.bsys.dev.centos.org  
Group       : System Environment/Daemons    Source RPM: httpd- 
2.2.15-29.el6.centos.src.rpm  
Size        : 3076447                          License: ASL 2.0  
Signature   : RSA/SHA1, mar. 13 août 2013 19:32:39 CEST, Key ID  
0946fca2c105b9de  
Packager    : CentOS BuildSystem <http://bugs.centos.org>  
URL         : http://httpd.apache.org/  
Summary     : Apache HTTP Server  
Description :  
The Apache HTTP Server is a powerful, efficient, and extensible  
web server. 

2. Fichiers de configuration

Certains programmes proposent un utilitaire pour vérifier la syntaxe de leurs fichiers de configuration.
Exemple avec Debian
Pour tester la configuration du programme Apache 2, l’utilitaire est apachectl
Voici un résultat sans erreurs :
# apachectl -t 
Syntax OK
Avec une erreur de syntaxe :
# apachectl -t 
Syntax error on line 187 of /etc/apache2/apache2.conf: 
Invalid command ’AccessFileNam’, perhaps misspelled or defined by  
a module not included in the server configuration 
Action ’-t’ failed. 
The Apache error log may have more information.
La ligne 187 du fichier /etc/apache2/apache2.conf a une commande incorrecte. En effet, l’orthographe de la commande AccessFileName est erronée. Il manque un « e ».
Voici avez une autre solution pour tester :
# apache2ctl configtest 
Syntax error on line 187 of /etc/apache2/apache2.conf: 
Invalid command ’AccessFileNam’, perhaps misspelled or defined by  
a module not included in the server configuration 
Action ’configtest’ failed. 
The Apache error log may have more information.

3. Consulter les journaux

Généralement, lorsqu’un programme échoue parce qu’il ne peut pas accéder à un fichier ou à une ressource, il écrit une entrée dans un journal système ou dans son propre journal.
Sur un écran dépourvu d’interface graphique localement ou à distance, vous pouvez utiliser un multiplexeur de terminaux en mode texte tel que GNU screen ou une version améliorée byobu. Ces applications ne sont pas installées nativement.
Ainsi dans une fenêtre, vous testez l’application et dans une deuxième fenêtre vous affichez un journal d’événements en temps réel avec la commande tail.
Installation sur Debian et Ubuntu
Ces distributions ont dans leurs dépôts respectifs les paquets du programme screen et byobu. Quitte à choisir, il vaut mieux prendre byobu qui est beaucoup plus convivial :
# apt-get install byobu 
Lecture des listes de paquets... Fait 
Construction de l’arbre des dépendances        
Lecture des informations d’état... Fait 
Les paquets supplémentaires suivants seront installés :  
  python-newt screen tmux 
Paquets suggérés : 
  apport run-one ttf-ubuntu-font-family update-notifier-common vim 
Les NOUVEAUX paquets suivants seront installés : 
  byobu python-newt screen tmux 
0 mis à jour, 4 nouvellement installés, 0 à enlever et 5 non mis à  
jour. 
Il est nécessaire de prendre 1 184 ko dans les archives. 
Après cette opération, 2 399 ko d’espace disque supplémentaires  
seront utilisés. 
Souhaitez-vous continuer [O/n] ?
Répondez O pour continuer.
ATTENTION : les paquets suivants n’ont pas été authentifiés. 
  tmux python-newt screen byobu 
Faut-il installer ces paquets sans vérification (o/N) ? o 
Réception de : 1 http://debian.proxad.net/debian/ wheezy/main tmux  
amd64 1.6-2 [249 kB 
Réception de : 2 http://debian.proxad.net/debian/ wheezy/main  
python-newt amd64 0.52.14-11.1 [129 kB] 
Réception de : 3 http://debian.proxad.net/debian/ wheezy/main  
screen amd64 4.1.0~20120320gitdb59704-7 [670 kB] 
Réception de : 4 http://debian.proxad.net/debian/ wheezy/main  
byobu all 5.16-1.1 [136 kB] 
1 184 ko réceptionnés en 20s (57,8 ko/s) 
Préconfiguration des paquets... 
Sélection du paquet tmux précédemment désélectionné. 
(Lecture de la base de données... 176706 fichiers et répertoires  
déjà installés.) 
Dépaquetage de tmux (à partir de .../archives/tmux_1.6- 
2_amd64.deb) ... 
Sélection du paquet python-newt précédemment désélectionné. 
Dépaquetage de python-newt (à partir de .../python-newt_0.52.14- 
11.1_amd64.deb) ... 
Sélection du paquet screen précédemment désélectionné. 
Dépaquetage de screen (à partir de ... 
/screen_4.1.0~20120320gitdb59704-7_amd64.deb) ... 
Sélection du paquet byobu précédemment désélectionné. 
Dépaquetage de byobu (à partir de .../byobu_5.16-1.1_all.deb) ... 
Traitement des actions différées (« triggers ») pour « man-db »... 
Traitement des actions différées (« triggers ») pour « install- 
info »... 
Traitement des actions différées (« triggers ») pour « desktop- 
file-utils »... 
Traitement des actions différées (« triggers ») pour « gnome- 
menus »... 
Traitement des actions différées (« triggers ») pour « hicolor- 
icon-theme »... 
Paramétrage de tmux (1.6-2) ... 
Paramétrage de python-newt (0.52.14-11.1) ... 
Paramétrage de screen (4.1.0~20120320gitdb59704-7) ... 
Paramétrage de byobu (5.16-1.1) ...
Installation sur CentOS
Byobu n’est pas dans les dépôts de CentOS 6. En revanche, screen est présent :
# yum -y install screen  
Loaded plugins: fastestmirror  
Loading mirror speeds from cached hostfile  
 * base: mirror.ate.info  
 * extras: mirror.ate.info  
 * updates: mirror.ate.info  
Setting up Install Process  
Resolving Dependencies  
--> Running transaction check  
---> Package screen.x86_64 0:4.0.3-16.el6 will be installed  
--> Finished Dependency Resolution  
 
Dependencies Resolved  
 
==================================================================  
 Package       Arch      Version         Repository           Size  
==================================================================  
Installing:  
 screen        x86_64    4.0.3-16.el6    base                494 k  
 
Transaction Summary  
==================================================================  
Install       1 Package(s)  
 
Total download size: 494 k  
Installed size: 795 k  
Downloading Packages:  
screen-4.0.3-16.el6.x86_64.rpm                  | 494 kB     00:44 
Running rpm_check_debug  
Running Transaction Test  
Transaction Test Succeeded  
Running Transaction  
  Installing : screen-4.0.3-16.el6.x86_64                      1/1  
  Verifying  : screen-4.0.3-16.el6.x86_64                      1/1 
 
Installed:  
  screen.x86_64 0:4.0.3-16.el6 
 
Complete! 
Vous pouvez lancer le programme screen :
images/10EI06.png
Utilisez les touches ci-dessous pour gérer les fenêtres :
Touche
Description
[Ctrl]+a puis [Ctrl]+C
Crée une fenêtre supplémentaire.
[Ctrl]+a puis "
Affiche la liste des fenêtres.
[Ctrl]+a puis n° de fenêtre.
Bascule vers la fenêtre mentionnée.
[Ctrl]+D
Ferme la fenêtre courante.
Si vous voulez utiliser byobu, il faut ajouter le paquet gettext :
# yum -y install gettext  
Loaded plugins: fastestmirror  
Loading mirror speeds from cached hostfile  
 * base: mirror.ate.info  
 * extras: mirror.ate.info  
 * updates: mirror.ate.info  
Setting up Install Process  
Resolving Dependencies  
--> Running transaction check  
---> Package gettext.x86_64 0:0.17-16.el6 will be installed  
--> Processing Dependency: libgomp.so.1(GOMP_1.0)(64bit) for  
package: gettext-0.17-16.el6.x86_64  
--> Processing Dependency: cvs for package: gettext-0.17-16.el6.x86_64  
--> Processing Dependency: libgomp.so.1()(64bit) for package:  
gettext-0.17-16.el6.x86_64  
--> Running transaction check  
---> Package cvs.x86_64 0:1.11.23-15.el6 will be installed  
---> Package libgomp.x86_64 0:4.4.7-3.el6 will be installed  
--> Finished Dependency Resolution  
 
Dependencies Resolved  
 
==================================================================  
 Package       Arch      Version               Repository    Size 
==================================================================  
Installing:  
 gettext       x86_64    0.17-16.el6           base          1.8 M  
Installing for dependencies:  
 cvs           x86_64    1.11.23-15.el6        base          711 k  
 libgomp       x86_64    4.4.7-3.el6           base          118 k  
 
Transaction Summary  
==================================================================  
Install       3 Package(s)  
 
Total download size: 2.7 M  
Installed size: 7.7 M  
Downloading Packages:  
(1/3): cvs-1.11.23-15.el6.x86_64.rpm            | 711 kB     00:02 
(2/3): gettext-0.17-16.el6.x86_64.rpm           | 1.8 MB     00:07  
(3/3): libgomp-4.4.7-3.el6.x86_64.rpm           | 118 kB     00:00  
------------------------------------------------------------------  
Total                                  203 kB/s | 2.7 MB     00:13  
Running rpm_check_debug  
Running Transaction Test  
Transaction Test Succeeded  
Running Transaction  
  Installing : libgomp-4.4.7-3.el6.x86_64                      1/3 
  Installing : cvs-1.11.23-15.el6.x86_64                       2/3 
  Installing : gettext-0.17-16.el6.x86_64                      3/3  
  Verifying  : gettext-0.17-16.el6.x86_64                      1/3  
  Verifying  : cvs-1.11.23-15.el6.x86_64                       2/3  
  Verifying  : libgomp-4.4.7-3.el6.x86_64                      3/3  
 
Installed:  
  gettext.x86_64 0:0.17-16.el6 
 
Dependency Installed:  
  cvs.x86_64 0:1.11.23-15.el6         libgomp.x86_64 0:4.4.7-3.el6  
 
Complete! 
Vous devez rechercher le paquet byobu sur le site http://rpm.pbone.net ou le télécharger avec wget :
# wget ftp://ftp.muug.mb.ca/mirror/fedora/epel/6/x86_64/byobu-5 
.21-4.el6.noarch.rpm 
--2013-09-05  19:37:48--    ftp://ftp.muug.mb.ca/mirror/fedora/ 
epel/6/x86_64/byobu-5.21-4.el6.noarch.rpm 
           =>  «byobu-5.21-4.el6.noarch.rpm» 
Résolution de ftp.muug.mb.ca... 130.179.31.46,  130.179.31.46 
connexion vers ftp.muug.mb.ca|130.179.31.46|:21...connecté. 
Ouverture de session en anonymous...Session établie! 
==>  SYST  ... complété.    ==>  PWD ... complété. 
==>  TYPE  I  ... complété. ==>  CWD (1) /mirror/fedora/epel/6/ 
x86_64  ... complété. 
==>  SIZE  byobu-5.21-4.el6.noarch.rpm ... 121424 
==>  PASV  ... complété     ==>  RETR byobu-5.21-4.el6.noarch.rpm  
... complété 
Longueur : 121424 (119k)  (non certifiée) 
 
100%[=================================>] 121 424  10,2k/s  ds  19s 
 
2013-09-05  19:38:11 (6,25 kB/s)  -  «byobu-5.21-4.el6.noarch.rpm»  
sauvegardé [121424]
Installez le paquet byobu-5.21-4.el6.noarch.rpm :
# rpm -ivh byobu-5.21-4.el6.noarch.rpm  
attention: byobu-5.21-4.el6.noarch.rpm: Entête V3 RSA/SHA256  
Signature, key ID 0608b895: NOKEY  
Préparation...  ########################################### [100%]  
   1:byobu      ########################################### [100%] 
Utilisation de byobu
L’utilisation de byobu permet de créer deux fenêtres lors d’un diagnostic. La première sert à recueillir les nouvelles entrées dans un journal et la seconde sert à lancer ou manipuler l’application.
Exemple avec Debian
Dans un terminal, en tant que root tapez : byobu. Vous obtenez cet écran :
images/10EI01.png
Sur la barre d’état en bas de l’écran, vous voyez que vous êtes sur la première fenêtre identifiée 0:.
Utilisez les touches ci-dessous pour gérer les fenêtres :
Touche
Description
[F2]
Crée une fenêtre supplémentaire.
[F3]
Permet de se déplacer vers la fenêtre de gauche.
[F4]
Permet de se déplacer vers la fenêtre de droite.
[F8]
Donne un nom à la fenêtre.
[F9]
Affiche le menu de configuration.
Pour ajouter une nouvelle fenêtre, appuyez sur la touche [F2] :
images/10EI02.png
Dans la fenêtre 0: tapez tail -f /var/log/apache2/error.log :
images/10EI03.png
Cette commande va afficher au fur et à mesure les entrées dans le journal error.log.
Ensuite, vous retournez dans la fenêtre 1: en appuyant sur [F4] pour démarrer le service Apache2 :
images/10EI04.png
En appuyant sur [F3], consultez dans la fenêtre 0 : l’entrée dans le journal :
images/10EI05.png

4. Filtrages réseau

Il est important de vérifier si vous n’avez pas des règles de sécurité qui pourraient bloquer ou restreindre le fonctionnement du programme.
La commande netstat permet de visualiser les connexions réseau, notamment les ports TCP ou UDP qui sont en écoute et leurs statuts.
Syntaxe
netstat <options>
Options nécessaires :
Option
Description
courte
longue
-t
--tcp
Affiche le protocole TCP.
-u
--udp
Affiche le protocole UDP.
-l
--listening
Affiche les sockets du serveur à l’écoute.
-p
--programs
Affiche le nom et le PID des processus propriétaires.
-n
--numeric
Affiche les adresses en format numérique.
Exemple
Afficher le port d’écoute du programme Apache 2 :
# netstat -tulpn |grep apache2 
tcp    0    0 10.0.2.15:80    0.0.0.0:*    LISTEN    5661/apache2
L’écoute se fait sur l’adresse IPv4 10.0.2.15 port TCP 80.
Regardez la configuration du pare-feu iptables.
Syntaxe
iptables <options>
Options nécessaires :
Option
Description
courte
longue
-v
--verbose
Mode verbeux (verbose).
-L
--list
Liste les règles définies.
Exemple
# iptables -vL 
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) 
 pkts bytes target   prot opt in   out   source        destination 
 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) 
 pkts bytes target   prot opt in   out   source        destination 
 
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) 
 pkts bytes target   prot opt in   out   source        destination
Regardez également les règles TCP Wrappers dans les fichiers /etc/hosts.allow et /etc/hosts.deny avec la commande cat :
# cat /etc/hosts.allow  /etc/hosts.deny 
# /etc/hosts.allow: list of hosts that are allowed to access the  
system. 
#                   See the manual pages hosts_access(5) and  
hosts_options(5). 
# 
# Example:    ALL: LOCAL @some_netgroup 
#             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu 
# 
# If you’re going to protect the portmapper use the name "portmap" for the 
# daemon name. Remember that you can only use the keyword "ALL" and IP 
# addresses (NOT host or domain names) for the portmapper, as well as for 
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8) 
# for further information. 
# 
 
# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
#                  See the manual pages hosts_access(5) and hosts_options(5). 
# 
# Example:    ALL: some.host.name, .some.domain 
#             ALL EXCEPT in.fingerd: other.host.name, .other.domain 
# 
# If you’re going to protect the portmapper use the name "portmap" for the 
# daemon name. Remember that you can only use the keyword "ALL" and IP 
# addresses (NOT host or domain names) for the portmapper, as well as for 
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8) 
# for further information. 
# 
# The PARANOID wildcard matches any host whose name does not match its 
# address. 
# 
# You may wish to enable this to ensure any programs that don’t 
# validate looked up hostnames still leave understandable logs. In past 
# versions of Debian this has been the default. 
# ALL: PARANOID

5. Dépendances du programme

Le programme peut faire appel à des fonctions stockées dans des bibliothèques. La commande ldd (List Dynamic Dependencies) affiche la liste des bibliothèques partagées qui sont nécessaires pour un programme ou une bibliothèque. 
Syntaxe
ldd <fichier>
Option utile :
Option
Description
courte
longue
-v
--verbose
Mode verbeux (verbose).
Exemple avec Debian
Afficher les bibliothèques dépendantes pour le programme Apache 2 :
# ldd $(which apache2) 
   linux-vdso.so.1 =>  (0x00007fffea9ff000) 
   libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3  
(0x00007fb3dd327000) 
   libaprutil-1.so.0 => /usr/lib/libaprutil-1.so.0  
(0x00007fb3dd102000) 
   libapr-1.so.0 => /usr/lib/libapr-1.so.0 (0x00007fb3dcec8000) 
   libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0  
(0x00007fb3dccac000) 
   libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6  
(0x00007fb3dc922000) 
   libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1  
(0x00007fb3dc71c000) 
   librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1  
(0x00007fb3dc514000) 
   libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1  
(0x00007fb3dc2dd000) 
   libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2  
(0x00007fb3dc0d8000) 
   libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1  
(0x00007fb3dbeae000) 
   /lib64/ld-linux-x86-64.so.2 (0x00007fb3dd7f8000)
À son tour, une bibliothèque partagée peut avoir une dépendance. Et ainsi de suite... Voici l’exemple de libc.so.6 :
# ldd /lib/x86_64-linux-gnu/libc.so.6 
   /lib64/ld-linux-x86-64.so.2 (0x00007f7bf191e000) 
   linux-vdso.so.1 =>  (0x00007ffff6dff000)
L’option -v affiche de façon plus détaillée les informations :
ldd -v /lib/x86_64-linux-gnu/libc.so.6 
   /lib64/ld-linux-x86-64.so.2 (0x00007f7fb1c94000) 
   linux-vdso.so.1 =>  (0x00007ffff49cc000) 
 
   Version information: 
   /lib/x86_64-linux-gnu/libc.so.6: 
   ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2 
   ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86- 
64.so.2

6. Emplacement des bibliothèques

Lorsqu’une bibliothèque n’est pas à un emplacement standard, elle est signalée manquante par le chargeur. Il faut ajouter son chemin à la variable d’environnement LD_LIBRARY_PATH pour qu’elle soit prise en compte :
$ export LD_LIBRARY_PATH=/home/bob/lib
Cette méthode est généralement utilisée pour la mise au point d’un programme.
Si vous souhaitez ajouter définitivement un emplacement de bibliothèques, il est préférable d’utiliser le fichier /etc/ld.so.conf :
# cat /etc/ld.so.conf 
include /etc/ld.so.conf.d/*.conf
Il contient une directive qui inclut tous les fichiers du dossier /etc/ld.so.conf.d dont l’extension est .conf.
Le dossier /etc/ld.so.conf.d/ contient une liste de fichiers qui varie selon les distributions :
# ls -l /etc/ld.so.conf.d/ 
total 2 
-rw-r--r-- 1 root root 44 déc.  30 15:17 libc.conf 
-rw-r--r-- 1 root root 68 déc.  30 16:34 x86_64-linux-gnu.conf
La commande ldconfig crée les liens et met en cache les bibliothèques partagées les plus récentes qu’il trouve dans les chemins indiqués sur la ligne de commande, dans le fichier /etc/ld.so.conf et dans les dossiers /lib et /usr/lib.
Syntaxe
ldconfig <option>
Options utiles :
Option
Description
courte
longue
-v
--verbose
Mode verbeux (verbose).
-p
--print-cache
Affiche les dossiers et les bibliothèques enregistrés dans le cache.
Exemple avec Debian
Visualisez le contenu de tous les dossiers contenant des bibliothèques partagées :
# ldconfig -v 
ldconfig: Chemin « /lib/x86_64-linux-gnu » donné plus d’une fois 
ldconfig: Chemin « /usr/lib/x86_64-linux-gnu » donné plus d’une fois 
/usr/local/lib: 
/lib/x86_64-linux-gnu: 
   libiw.so.30 -> libiw.so.30 
   libpcprofile.so -> libpcprofile.so 
   libpopt.so.0 -> libpopt.so.0.0.0 
   libsepol.so.1 -> libsepol.so.1 
   libutil.so.1 -> libutil-2.13.so 
   libdevmapper.so.1.02.1 -> libdevmapper.so.1.02.1 
                                  ...
Affichez le contenu du cache :
# lsconfig -p 
# 809 libs trouvé dans le cache « /etc/ld.so.cache » 
   libzvbi.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux- 
gnu/libzvbi.so.0 
   libzvbi-chains.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux- 
gnu/libzvbi-chains.so.0 
   libzephyr.so.4 (libc6,x86-64) => /usr/lib/libzephyr.so.4 
   libzbar.so.0 (libc6,x86-64) => /usr/lib/libzbar.so.0 
   libz.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libz.so.1 
   libyelp.so.0 (libc6,x86-64) => /usr/lib/libyelp.so.0 
   libyajl.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux- 
gnu/libyajl.so.2 
                                  ...
La commande strace est un outil de débogage pour surveiller les appels système (system calls) utilisés par un programme ainsi que tous les signaux qu’il reçoit.
Syntaxe
strace <programme>
Pas d’options pour cette commande.
Installation Debian et Ubuntu
# apt-get install strace  
Lecture des listes de paquets... Fait  
Construction de l’arbre des dépendances 
Lecture des informations d’état... Fait  
Les NOUVEAUX paquets suivants seront installés :  
  strace  
0 mis à jour, 1 nouvellement installés, 0 à enlever et 5 non mis à  
jour.  
Il est nécessaire de prendre 141 ko dans les archives.  
Après cette opération, 414 ko d’espace disque supplémentaires  
seront utilisés.  
ATTENTION : les paquets suivants n’ont pas été authentifiés.  
  strace  
Faut-il installer ces paquets sans vérification (o/N) ? o  
Réception de : 1 http://debian.proxad.net/debian/ wheezy/main  
strace amd64 4.5.20-2.3 [141 kB]  
141 ko réceptionnés en 3s (46,6 ko/s)  
Sélection du paquet strace précédemment désélectionné.  
(Lecture de la base de données... 159847 fichiers et répertoires  
déjà installés.)  
Dépaquetage de strace (à partir de .../strace_4.5.20- 
2.3_amd64.deb) ...  
Traitement des actions différées (« triggers ») pour « man-db »...  
Paramétrage de strace (4.5.20-2.3) ... 
Installation CentOS
# yum -y install strace  
Loaded plugins: fastestmirror  
Loading mirror speeds from cached hostfile  
 * base: mirror.ate.info  
 * extras: mirror.ate.info  
 * updates: mirror.ate.info  
Setting up Install Process  
Resolving Dependencies  
--> Running transaction check  
---> Package strace.x86_64 0:4.5.19-1.17.el6 will be installed  
--> Finished Dependency Resolution  
 
Dependencies Resolved  
 
==================================================================  
 Package      Arch     Version           Repository          Size  
==================================================================  
Installing:  
 strace       x86_64   4.5.19-1.17.el6   base                172 k  
 
Transaction Summary  
==================================================================  
Install       1 Package(s)  
 
Total download size: 172 k  
Installed size: 533 k  
Downloading Packages:  
strace-4.5.19-1.17.el6.x86_64.rpm               | 172 kB     00:00 
Running rpm_check_debug  
Running Transaction Test  
Transaction Test Succeeded  
Running Transaction  
Warning: RPMDB altered outside of yum.  
  Installing : strace-4.5.19-1.17.el6.x86_64                   1/1 
  Verifying  : strace-4.5.19-1.17.el6.x86_64                   1/1 
 
Installed:  
  strace.x86_64 0:4.5.19-1.17.el6 
 
Complete! 
Utilisation de strace
Exemple avec Debian
Liste des appels système utilisés et des signaux reçus pour le programme Apache 2 :
# strace apache2  
execve("/usr/sbin/apache2", ["apache2"], [/* 17 vars */]) = 0  
brk(0)                                  = 0x7f8a965d3000  
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file  
or directory)  
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,  
-1, 0) = 0x7f8a95f68000  
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file  
or directory)  
open("/etc/ld.so.cache", O_RDONLY)      

Aucun commentaire :

Enregistrer un commentaire