<h3>Introduction</h3>
<p class="spip">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).</p>

<p class="spip">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.</p>

<p class="spip">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.</p>

<p class="spip">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.</p>

<p class="spip">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.</p>

<h3>Deborphan</h3>
<p class="spip">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.</p>

<p class="spip">Invoqué sans options supplémentaires
<br /><code class='spip_code' dir='ltr'># deborphan</code><br />
va chercher des librairies dont ne dépend aucun logiciel (le cas de notre ’libtoto’).</p>

<p class="spip">Il dispose de beaucoup d’options &mdash;guess-common, &mdash;guess-dev, &mdash;guess-perl, &mdash;guess-python pour chercher respectivement les paquets dev, common, librairies perl, python etc. Avec option &mdash;guess-all deborphan va chercher tous les paquets orphelins qu’il pourra.</p>

<p class="spip">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.</p>

<p class="spip">/var/lib/deborphan/keep contient la liste des paquets à ignorer lors de recherches avec deborphan. La commande 
<br /><code class='spip_code' dir='ltr'># deborphan -A package</code><br />
permet d’ajouter package a cette liste.</p>

<p class="spip">Vous pouvez aussi préciser les paquets à conserver avec l’option &mdash;exclude= en ligne de commande.</p>

<p class="spip">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.</p>

<p class="spip">Une fois que vous êtes satisfait de la liste affichée par deborphan, vous pouvez supprimer ces paquets
<br /><code class='spip_code' dir='ltr'># apt-get --purge remove `deborphan -n --guess-all`</code><br /></p>

<p class="spip">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.</p>

<h3>Debfoster</h3>
<p class="spip">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
<br /><code class='spip_code' dir='ltr'># debfoster</code><br />
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 :
<br /></p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code>[...] <br />
mplayer is keeping the following 14 packages installed:<br />
  libdirectfb-0.9-25 libdvdnav4 libfaac0 libggi2 libgii1 libgii1-target-x<br />
  libmpcdec3 libopenal0a libsdl1.2debian libsdl1.2debian-alsa libsvga1<br />
  libtwolame0 libxvidcore4 mplayer-skin-blue<br />
Keep mplayer? [Ynpsiuqx?], [H]elp:</code></div>
<p class="spip">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.</p>

<p class="spip">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.</p>

<p class="spip">Une option très utile est -a
<br /><code class='spip_code' dir='ltr'># debfoster -a</code><br />
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.</p>

<h3>Purger les paquets supprimes </h3>
<p class="spip">Il est facile d’afficher des paquets supprimés mais non purgés dont il reste des résidus de configuration :
<br /><code class='spip_code' dir='ltr'># dpkg --list | grep ^rc | awk '{print $2}'</code><br />
... et pour les purger :
<br /><code class='spip_code' dir='ltr'># COLUMNS=300 dpkg --list | grep ^rc | awk '{print $2}' | xargs dpkg -P</code><br />
(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)</p>

<h3>Aptitude</h3>
<p class="spip">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.</p>

<p class="spip">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.</p>

<p class="spip">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.</p>

<p class="spip">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’ :
<br /><code class='spip_code' dir='ltr'># aptitude unmarkauto --schedule-only '~i'</code><br />
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 :
<br /><code class='spip_code' dir='ltr'># aptitude markauto '~slibs'</code><br />
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.</p>

<p class="spip">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.</p>

<p class="spip">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.</p>

<h3>Conclusion</h3>
<p class="spip">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 ;-)</p>

<p class="spip">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.</p>

<p class="spip">Si jamais vous êtes dans le doute au sujet de l’utilité d’un paquet, n’oubliez pas de consulter
<br /><code class='spip_code' dir='ltr'>$ apt-cache show nom-du-paquet | less</code><br />
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.</p>

<p class="spip">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.</p>