Skip to Content

Garder un système Debian/Ubuntu propre avec deborphan, debfoster ou Aptitude

On s’aperçoit toujours que le nombre de paquets sur un système Debian s’accroît avec le temps et qu’il en devient assez vite lent lors des mises à jour (surtout dans le cas de SID ou de Testing).

Introduction

On s’aperçoit toujours que le nombre de paquets sur un système Debian s’accroît avec le temps et qu’il en devient assez vite lent lors des mises à jour (surtout dans le cas de SID ou de Testing).

Voici un scénario classique : on veut essayer un logiciel ’toto’. ’Apt-get install toto’ nous installe ledit logiciel, mais très souvent le logiciel aura des dépendances et des paquets supplémentaires seront installes : on se retrouve avec ’toto’, ’toto-common’, ’toto-data’, ’toto-bin’, ’libtoto1’, ’libtruc2’ etc. Puis le logiciel ne nous plaît pas, ’apt-get remove toto’. Et c’est là que le système va commencer à se polluer avec des paquets inutiles, premièrement ’toto’ aura laissé ses fichiers de configuration parce qu’assez peu de gens prennent l’habitude de purger les paquets dont ils n’ont pas personnalisé la configuration, et deuxièmement toutes les dépendances de ’toto’ vont rester installées sur le système.

Au bout d’un certain temps on peut facilement se retrouver avec un système de 150 000 fichiers, 2000 paquets alors qu’en fin de compte on a pas beaucoup de logiciels installés.

Même si vous avez beaucoup d’espace disque, les bases de données de apt sont de simples fichiers plats et les recherches dans ces fichiers peuvent devenir vraiment très longues.

Heureusement qu’il existe des outils Debian comme Deborphan et Debfoster spécialement conçus pour entretenir votre système et ne garder que les paquets réellement utiles.

Deborphan

Deborphan (disponible dans le paquet du même nom) permet de trouver toutes les dépendances inutiles, restées après la suppression des paquets.

Invoqué sans options supplémentaires

# deborphan
va chercher des librairies dont ne dépend aucun logiciel (le cas de notre ’libtoto’).

Il dispose de beaucoup d’options —guess-common, —guess-dev, —guess-perl, —guess-python pour chercher respectivement les paquets dev, common, librairies perl, python etc. Avec option —guess-all deborphan va chercher tous les paquets orphelins qu’il pourra.

Il est possible que vous ayez installé certaines librairies pour faire fonctionner des logiciels non empaquetés qui se trouvent dans /opt ou /usr/local, dans ce cas il faut signaler ces paquets a deborphan, autrement vous risquez de les supprimer, ce qui empêchera de fonctionner vos logiciels compilés.

/var/lib/deborphan/keep contient la liste des paquets à ignorer lors de recherches avec deborphan. La commande

# deborphan -A package
permet d’ajouter package a cette liste.

Vous pouvez aussi préciser les paquets à conserver avec l’option —exclude= en ligne de commande.

Une autre option intéressante est -n, elle permet de prendre en compte les dépendances de type ’suggère’ et ne pas lister un paquet dont rien ne dépend, mais qu’un autre paquet suggère.

Une fois que vous êtes satisfait de la liste affichée par deborphan, vous pouvez supprimer ces paquets

# apt-get --purge remove `deborphan -n --guess-all`

Ensuite, si vous relancez deborphan vous verrez que d’autres paquets sont devenus orphelins : c’est normal, certaines librairies dépendent les unes des autres sans pour autant être nécessaires. Vous pouvez donc supprimer les paquets orphelins jusqu’à ce qu’il n’en reste plus.

Debfoster

Il est disponible dans le paquet debfoster. Ce logiciel est plus interactif que deborphan, il fonctionne un peu différemment. Pour le lancer tapez simplement

# debfoster
il va alors rechercher tous les paquets qui n’existent que pour satisfaire des dépendances et vous demander s’il faut garder ou non le paquet qui en depend. Par exemple :

[...]
mplayer is keeping the following 14 packages installed:
 libdirectfb-0.9-25 libdvdnav4 libfaac0 libggi2 libgii1 libgii1-target-x
 libmpcdec3 libopenal0a libsdl1.2debian libsdl1.2debian-alsa libsvga1
 libtwolame0 libxvidcore4 mplayer-skin-blue
Keep mplayer? [Ynpsiuqx?], [H]elp:

La reponse par defaut Y, va garder mplayer, n va supprimer (et purger) mplayer et p (prune) va supprimer mplayer et toutes ses dépendances.
Une fois que vous aurez répondu a toutes les questions (la première fois comptez bien 10-15 minutes) debfoster va créer un fichier (/var/lib/debfoster/keepers) de paquets a garder (il ne vous posera plus de questions a leur sujet au prochain lancement) et lancer apt pour supprimer les paquets que vous avez marqué inutiles.

C’est une autre approche du nettoyage de son système qui peut être très efficace, mais qui demande plus de temps que deborphan.

Une option très utile est -a

# debfoster -a
va marquer tous les paquets actuellement installes comme ’à garder’, cette commande peut par exemple être exécutée après une installation de base de votre système pour vous éviter des questions inutiles par la suite.

Purger les paquets supprimes

Il est facile d’afficher des paquets supprimés mais non purgés dont il reste des résidus de configuration :

# dpkg --list | grep ^rc | awk '{print $2}'
... et pour les purger :

# COLUMNS=300 dpkg --list | grep ^rc | awk '{print $2}' | xargs dpkg -P
(COLUMNS=300 permet ’d’élargir’ le pipe ce qui évite que les noms de paquets trop longs soient tronqués, astuce du livre ’Administration Debian’ de Martin Krafft)

Aptitude

Aptitude propose une autre manière de garder un système propre : il tient, en parallèle, une autre base de données, dans laquelle il fait la différence entre les paquets installés explicitement et les paquets installés pour satisfaire des dépendances. A chaque lancement Aptitude va donc vous proposer de supprimer tous les paquets marqués ’auto’ et dont aucun logiciel installé manuellement ne dépend.

De plus c’est un logiciel avec une vraie interface ncurses, des menus où vous pouvez planifier toutes les opérations d’installation/suppression et les executer qu’une fois définies.

C’est une méthode très efficace, mais avec un petit inconvénient : toutes les opérations d’installation/suppression devront se faire avec ’aptitude install ...’, ’aptitude remove/purge ...’ ou alors avec l’interface graphique de ’aptitude’, si jamais vous installez un logiciel avec apt, dselect ou dpkg, aptitude le considérera comme ’auto’ et s’empressera de le supprimer. Cela implique son utilisation exclusive, dès l’installation du système de base.

Si votre système comporte déjà des paquets ne faisant pas partie du système de base et que vous voulez commencer à utiliser aptitude, c’est possible. Deux solutions s’offrent à vous : marquer tous les paquets déjà installés comme ’installés manuellement’ :

# aptitude unmarkauto --schedule-only '~i'
L’inconvénient est que si vous supprimez un paquet installé avant le passage à aptitude, aptitude ne sera pas en mesure de supprimer ses dépendances, car celles-ci seront marquées comme installées manuellement. On peut en partie remédier à cette situation avec :

# aptitude markauto '~slibs'
qui va marquer ’auto’ toutes les libraires. Mais la meilleure solution pour passer à aptitude reste quand même le passage au crible de tous vos paquets installés. Pour cela ouvrez l’interface d’aptitude, vous verrez tous les paquets ’auto’ qu’aptitude veut supprimer, surlignés en violet, vous pourrez alors retrouver les programmes finaux dont ils comblent les dépendances et marquer ceux-ci comme installés manuellement, jusqu’à ce qu’aptitude consente à garder les paquets dont vous avez besoin ainsi que leurs dépendances.

La meilleure stratégie avec aptitude est de garder seulement un minimum (20-30) de paquets comme installés à la main, les logiciels finaux que vous utiliser réellement (traitement de texte, navigateur, messagerie, environnements de développement, compilateurs...). Tout le reste étant marqué auto, dès que vous supprimerez une application inutile toutes ses dépendances seront supprimées par aptitude.

Aptitude est un très bon outil, mais il faut toujours garder à l’esprit cette double base de données, si vous installez un logiciel avec apt ou dpkg il faudra vite le marquer ’manual’ dans aptitude. Il est donc une alternative à l’utilisation de deborphan/debfoster, c’est un choix en fonction de la flexibilité et du contrôle des paquets qu’on souhaite.

Conclusion

Maintenant vous avez tous les outils pour garder un système Debian ou Ubuntu propre et fonctionnel pendant longtemps ! Pas besoin de ’formater’ votre ordinateur des qu’il devient un peu lent, sous Linux ;-)

Pour finir, un exemple personnel d’utilisation des ces outils : sur un ordinateur, où j’ai pendant un an negligé la ’propreté’ du système (1200 paquets, 115 000 fichiers), je suis passé à 870 paquets et 82 000 fichiers tout en conservant tous mes programmes et fonctionnalités.

Si jamais vous êtes dans le doute au sujet de l’utilité d’un paquet, n’oubliez pas de consulter

$ apt-cache show nom-du-paquet | less
Rappelez-vous aussi que la suppression d’une librairie ne peut jamais empêcher un autre paquet de fonctionner, si c’est le cas, apt ou dpkg vous le signalera et refusera de supprimer la lib en question.

Pour plus d’informations sur ces outils voyez les manuels de deborphan, debfoster et dpkg (en anglais). Ainsi que le paquet ’aptitude-doc-fr’ qui contient toute la documentation d’Aptitude au format html.

Commentaires

> Garder un système Debian/Ubuntu propre avec deborphan et debfo

A mon avis cela est certainement du à un problème d’habitudes. Il est toujours très dure de changer ses habitues quand on connaît parfaitement un outil.

Mais si tu veux un contre exemple permis les développeurs, j’ai sous les yeux le livre ’Cahier de l’admin Debian’ de ’Raphael Hertzog’ et il conseil très clairement de ne pas utiliser dselect mais aptitude qui le remplace avantageusement.

Sinon maintenant, RAS concernant ton article :-)

> Garder un système Debian/Ubuntu propre avec deborphan et debfo

Voilà j’ai enlevé mon jugement personnel :)

Pouvez-vous me dire si la partie Aptitude est mieux là ? J’ai aussi mis une référence au paquet aptitude-doc-fr à la fin.

> Garder un système Debian/Ubuntu propre avec deborphan et debfo

Hum tu as peut-être raison, je vais changer. Mais je peux te dire qu’il y a encore beaucoup de monde qui ne jure que par dselect (surtout parmi les developpeurs) même s’il est compliqué, en cas de problème de dépendance dselect reste un bon outil.

> Garder un système Debian/Ubuntu propre avec deborphan et debfo

Voilà je me suis beaucoup documenté sur le fonctionnement d’Aptitude (je le trouve moins lourd maintenant ;)). Après de nombreux essais de migration vers Aptitude, j’ai dévéloppé la partie Aptitude en le mettant au même niveau que Debfoster et Deborphan en expliquant les plus et les moins.

Merci de relire la partie Aptitude, il peut y avoir des erreurs.

> Garder un système Debian/Ubuntu propre avec deborphan et debfo

En fait, je crois que le plus simple est de laisser aptitude supprimer les paquets et ensuite il faut les réinstaller en utilisant aptitude. Et petit à petit tout devrait rentrer dans l’ordre.

> Garder un système Debian/Ubuntu propre avec deborphan et debfo

D’accord merci pour les infos a propos d’Aptitude, je vais creuser un peu plus voir comment synchroniser sa base avec celle d’apt.

> Garder un système Debian/Ubuntu propre avec deborphan et debfo

Chapitre Deborphan = RAS

Chapitre Debfoster = RAS = Merci de ne connsaissais pas :-)

Chapitre ’Purger les paquets supprimes’ = Merci cela a supprimmé pas mal de fichiers chez moi :-)

Chapitre ’Aptidute’ : Personnellement, j’utilise aptitude en ligne de commande (comme apt-get) sur tout mes postes sous Sarge, Testing ou SID et ça fonctionne très bien. Et en effet, quand tu purges un paquet, il purge également automatiquement les librairies inutilisées. A mon avis, ton problème viens du fait que tu as installé tout tes paquets avec apt-get. Pour utiliser aptitude, il est conseillé de le faire dés la fin de l’installation du système de base, car aptitude et apt-get n’utilise pas la même base de données. Si tu mélanges les deux pour faire tes installations, cela peu entraîner ce genre de problèmes.

A part ça, merci pour ton article.

> Garder un système Debian/Ubuntu propre avec deborphan et debfo

Merci à toi pour la relecture !

> Garder un système Debian/Ubuntu propre avec deborphan et debfo

Forme
« Une autre option intéressante est -n, elle permet de prendre en compte les dépendances de type ’suggère’ et ne pas lister un paquet qui dont rien ne dépend, mais qu’un autre paquet suggère. »

Fond
Comme la plupart de tes articles, Alexis, la lecture de celui-ci m’a ravi et m’a donné envie de tester.

Merci à toi.