Ports, dépanner

Un article de Diablotins.org.


Image:brush.png

Sommaire

Problème sur les ports

Et oui, parfois il arrive qu'un port ne fonctionne plus ! Les raisons peuvent ĂŞtre multiples ; ce qui suit n'est qu'un guide de premier secours et il faut une bonne dose de feeling. Mais pas de panique on y arrive dans 99% des cas !

En gros il y a deux sortes de problèmes : - les problèmes de compilation et de liens (bibliothèques) - les problèmes Ă  l'exĂ©cution

Avant toutes choses

À vérifier chez vous

Vérifiez que votre arbre des ports est à jour, et reconstruisez le fichier d'index des ports.

En fonction de vos options, l'index peut ne plus correspondre à l'index standard (celui que l'on récupère par cd /usr/ports && make fetchindex). Ceci parce que les options peuvent changer les dépendances.

Si vous utilisez portupgrade, soyez sĂ»r d'avoir fait un portsdb -Uu et de ne pas avoir de problème de dĂ©pendances : pkgdb -F

Et bien sĂ»r vous avez lu /usr/ports/UPDATING, non ?

À vérifier chez les autres

Faites une recherche sur les listes du projet FreeBSD (ports@) et dans les ' problem report ' du projet. Le problème est peut être déjà connu.

Regardez les journaux des machines de build du projet, ce sont des machines qui compilent en permanence les ports. Les journaux se trouvent sur http://pointyhat.freebsd.org/errorlogs/

Aide toi, le ciel t'aidera !

Si les recherches n'ont rien donné, y'a plus qu'à mettre la main à la pâte. Même si vous ne trouvez pas - ça arrive -, cela vous permettra de demander un coup de main plus précisément.

Problèmes de compilation

LĂ  encore on a plusieurs cas.

Problème de dépendance

Le port utilise un autre port mais a oublié de l'indiquer dans le Makefile du port, c'est un bug qu'il faut signaler.

Cela peut se voir Ă  plusieurs niveaux : le ./configure du port plante et dit qu'il manque quelque chose ou la compilation Ă©choue parce qu'il manque un fichier "include".

Si vous arrivez Ă  dĂ©terminer le fichier manquant, l'astuce suivante permet souvent de trouver le port qui installe ce fichier :

find /usr/ports -name 'pkg-plist' -exec fgrep -H fichier_a_trouver {} \;

Cette commande examine tous les fichiers pkg-plist de l'arbre des ports à la recherche de 'fichier_a_trouver'. Cette méthode n'est pas fiable à 100% parce que la liste peut être générée dynamiquement, mais ça donne en général de bons résultats.

Par exemple vous avez un port qui ne compile pas parce qu'il ne trouve pas le fichier d'include 'iconv.h'

find /usr/ports/ -name 'pkg-plist' -exec fgrep -H iconv.h {} \;
/usr/ports/converters/iconv/pkg-plist:include/biconv.h
/usr/ports/converters/libiconv/pkg-plist:include/iconv.h
[...]

Ă€ vue de nez, le port converters/libiconv est un bon candidat.

Problème de liens (link)

Le programme compile mais ne trouve pas les bibliothèques nécessaires. Là encore, l'astuce de la recherche dans le pkg-plist rend service.

Autres problèmes de compilation

AĂŻe ! N'utilisez pas d'optimisations de compilation de la mort qui tuent, restez sur un CFLAGS en -O ou -O2, pas plus. Si le port a plusieurs options, essayez avec les options par dĂ©faut.

Au pire essayez de reconstruire le port et toutes ces dépendances, avec un portupgrade -Rf le_port

Si vous avez des notions de programmation, regardez les sources !

Il faut aussi savoir que des problèmes de compilations aléatoires (ça plante mais pas toujours au même endroit) sont souvent symptomatiques de problèmes matériels. Vérifiez alors la mémoire avant tout (ça m'est arrivé...).

Problème à l'exécution

Problème de bibliothèque

Le programme ne trouve pas une bibliothèque, il ne se lance pas. Vous avez une erreur au lancement du programme (si c'est un programme graphique, lancez le dans un terminal genre xterm), l'astuce de la recherche dans la pkg-plist est utile ici aussi et il suffit d'installer le port manquant.

La commande ldd et le port sysutils/libchk sont très utilent pour vérifier les liens et diagnostiquer les problèmes.

Autre cas plus rare, le programme Ă©met une erreur comme quoi il ne trouve pas un symbĂ´le dans une bibliothèque : cela signifie qu'il n'est pas liĂ© Ă  la bonne bibliothèque ou qu'il y a un bug dans la bibliothèque... Utilisez libchk, si la bibliothèque est la bonne il n'y a plus qu'Ă  appeler du secours.

Autres problèmes à l'exécution

Ça peut venir d'à peut prêt tout et n'importe quoi...

Si vous avez mis à jour le système de base vers une nouvelle version, il est recommandé de recompiler les ports. Principalement les commandes de bas niveaux prochent du système, par exemple cdrecord.

Mais le programme peut avoir des bugs qui ne sont pas spécifiques à FreeBSD, là encore si vous avez des notions de programmation, essayez de déboguer le programme.

Parfois un portupgrade -Rf peut remettre les choses d'aplomb...

Ă€ l'aide

N'hĂ©sitez pas Ă  demander de l'aide. Il y a de bonnes ressources sur FreeBSD. Et mĂŞme un « chez moi ça marche © Â» peut faire avancer le bidule !

Mailing liste sur les ports : http://lists.freebsd.org/mailman/listinfo/freebsd-ports

Usenet : fr.comp.os.bsd

Soyez précis, plus vous donnerez d'informations et plus le problème sera facilement résolu.

Pour finir, les problèmes délicats sont -heureusement- plutôt râres.

Exemples

Le monde est une bombe

Vous mettez régulièrement le monde de votre FreeBSD à jour.
Or en ce samedi pluvieux d'une froide journée de novembre, le make installworld fut fatal à votre KDE.
La couche principale de KDE étant kdelibs:

portupgrade -f kdelibs

Et là, tout se passe bien, jusqu'aux liens avec les bibliothèques utilisées par kdelibs.
Patatra, kdelibs ne compile plus.
Premier réflexe, publier un appel au vaste monde:

 «scours KDE marche pĂ» Â»

sur les sites idoines [1] [2].
Seulement, KDE est plus qu'utile à ma station: il est nécéssaire.
Regardant de plus près, le lien incriminé est celui de arts. Sans perdre une seconde, je le recompile, lui et tout ce qui en dépend.

portupgrade -fr arts

Après quelques heures de compilation, tout est rentré dans l'ordre. J'ai enfin pu lire mes messages dont celui-ci:

The ctype fix for UTF-8 locale unfortunately introduced some new symbols to libc. 
Therefore, binaries built on system with that fix can not be used on older system. 
For that sake, the fix is back-out for 6-STABLE. 
If you see undefined symbols '__mb_sb_limit', 
please rebuild the affected binary. 
Everything will be fine then. Binaries built between 20071025 and 20071030 will be affected by this.

Owned.

Projets :
Boîte à outils