Ce blog a déménagé et parle maintenant uniquement anglais.

This blog has moved and now only speaks English.

blog.floriancargoet.com

See you there!

/home/florian

le blog de florian cargoet : du linux, du web et du logiciel libre



Gestion des méta-paquets avec aptitude

20 February, 2009 (23:53) | Linux | Florian Cargoet

Je vais exposer le principe des méta-paquets en prenant des noms génériques (a, b, c et d) et je terminerai par un exemple concret en expliquant comment ne pas désinstaller tout KDE en voulant seulement supprimer une petite application.

Le concept

Il est possible d’installer des meta-paquets qui sont en fait des paquets virtuels dont la seule utilité est de dépendre d’autres paquets. Ainsi, installer le meta-paquet a vous installera b, c et d parce que le paquet a indique b, c et d comme dépendances. C’est à la fois extrêmement utile et extrêmement embêtant quand on n’a pas tout compris.

Les ennuis

Par exemple, si je veux désinstaller c, aptitude va aussi désintaller a puisqu’il en dépend. Mais comme b et d n’ont pas été installés spécifiquement par l’utilisateur, ils seront tout simplement supprimés puisque plus aucun paquet ne dépend d’eux ! C’est comme ça qu’on se retrouve par exemple à désinstaller tout KDE juste en voulant enlever un jeu inutile…

La solution

Puisqu’aptitude a décidé de retirer b et d parce que personne ne dépendait d’eux, il faut signaler à aptitude qu’ils sont encore utiles. Pour faire ça, il faut “marquer” les paquets comme étant installés manuellement par l’utilisateur.

aptitude unmarkauto b d

Et voilà, je peux supprimer en toute sécurité mon paquet c, qui entrainera la suppression du meta-paquet a (ce qui est normal). Comme b et d sont installés par l’utilisateur, aptitude ne va jamais les supprimer sans que vous le lui demandiez.

Cas réel

Choix des méta-paquets à l'installation

Choix des méta-paquets à l'installation

Pour bien comprendre tout ça, je vais prendre l’exemple d’une installation toute fraiche de KDE sous Debian Lenny.

KDE est installé en cochant simplement “Environnement graphique de bureau” à l’installation. Debian installe donc le méta-paquet kde, qui dépend de pas mal de paquets qui eux-mêmes dépendent d’autres paquets qui eux-mêmes…

Le paquet kde est donc marqué “installé par l’utilisateur” et toutes les dépendances sont marquées “installées automatiquement”. Si bien que si je veux supprimer amor (un espèce de smiley qui se promène sur le bureau), aptitude remonte toutes les dépendances et veut non seulement me supprimer tous les autres kdetoys mais également toutes les applications KDE ! Et oui, seul kde est installé par l’utilisateur !

Nous allons donc regarder les dépendances de kde et en profiter pour voir tout ce qui nous intéresse et tout ce qu’on veut désinstaller. L’interface curses d’aptitude permet d’aller un peu plus vite que de tout faire en ligne de commande (on voit rapidement les dépendances de chaque paquet, les paquets qui en dépendent, et on peut d’une seule touche les marquer “Auto” ou “Manuel”). Mais comme toujours, c’est une question de préférences.

Pour être le plus général possible, je vais partir du cas où on ne sait pas de quoi dépend quoi. En l’occurence, je veux désinstaller amor et je ne sais pas encore que kdetoys et kde en dépendent…

Regardons quel paquet réclame amor (on peut aussi le voir en naviguant dans aptitude):

[florian@florian-laptop ~]\$ aptitude why amor
i   kde     Dépend kdetoys (>= 4:3.5.5)
i A kdetoys Dépend amor (>= 4:3.5.9-2)

On voit que le paquet amor dépend de kdetoys qui a lui même été installé par kde. On notera au passage que kdetoys est installé automatiquement (le “A” au début de la ligne).

On sait que si on désinstalle amor, kdetoys sera supprimé ainsi que toutes ses dépendances marquées “Auto” :

[florian@florian-laptop ~]\$ aptitude show kdetoys
...
Dépend: amor (>= 4:3.5.9-2), eyesapplet (>= 4:3.5.9-2), fifteenapplet (>= 4:3.5.9-2), kmoon (>= 4:3.5.9-2), kodo (>= 4:3.5.9-2), kteatime (>=
4:3.5.9-2), ktux (>= 4:3.5.9-2), kweather (>= 4:3.5.9-2), kworldclock (>= 4:3.5.9-2)
...

Si on veut conserver ces applications, on doit les marquer comme installées manuellement (ça doit commencer à être clair, non ? ;-) ). Trois méthodes :

  • A la main :
    aptitude unmarkauto noms des paquets

    Oui, c’est chiant à taper. Ca permet de ne taper que les paquets que l’on veut.

  • A la script, en utilisant apt-cache depends
    aptitude unmarkauto  $(apt-cache depends kdetoys | grep Dépend | cut -d: -f2)

    C’est mieux à taper si vous avez beaucoup de programmes à marquer mais ca ne vous laisse pas le choix des paquets sauf à le faire en 2 temps.

  • A l’oeil, avec l’interface d’aptitude
    aptitude

    Ensuite, tapez /kdetoys pour faire une recherche, entrée pour le sélectionner. Ensuite, vous pouvez voir les dépendances (déplacez vous avec les flèches). Avec la touche entrée, vous voyez les détails de chaque dépendance (état, version). Placez vous sur cette ligne de détails et pressez “m” pour marquer le paquet comme “Manuel”. Faites de même pour les autres paquets.

Voilà, on a sauvé les autres kdetoys ! Par contre, ce n’est pas fini ! kde dépend de kdetoys et supprimer kdetoys supprimera les autres dépendances de kde qui sont marquées “Auto”. Rebelote.

apt-cache depends kde

Et voilà la liste des victimes. Vous pouvez en profiter pour supprimer d’autres gros morceaux de KDE : tous les jeux (kdegames), les programmes educatifs (kdeedu), les programmes d’accessibilité comme la loupe d’écran ou le clavier virtuel (kdeaccessibility). Bref, je vous laisse faire votre marché ! L’interface d’aptitude est pratique quand on ne veut pas marquer tous les paquets comme installés manuellement.

Voilà, j’ai marqué les paquets qui m’intéressent comme installés manuellement, maintenant si je supprime amor, aptitude doit me supprimer tous les paquets marqués “Automatique”. J’abrège la sortie d’aptitude :

[florian@florian-laptop ~]\$ sudo aptitude remove amor
Les paquets suivants sont CASSÉS :
kdetoys
Les paquets suivants seront ENLEVÉS :
amor
 
Les actions suivantes permettront de résoudre ces dépendances :
Supprimer les paquets suivants :
kde
kdetoys
 
Les paquets suivants seront ENLEVÉS :
amor blinken{u} edict{u} eyesapplet{u} festival{u} festlex-cmu{u} festlex-poslex{u}
festvox-kallpc16k{u} fifteenapplet{u} indi{u} kalzium{u} kalzium-data{u} kanagram{u}
kanjidic{u} kbruch{u} kbstate{u} kde{a} kde-icons-mono{u} kdeaccessibility{u} kdeedu{u}
kdeedu-data{u} kdetoys{a} keduca{u} kgeography{u} kgeography-data{u} khangman{u} kig{u}
kiten{u} klatin{u} klettres{u} klettres-data{u} kmag{u} kmoon{u} kmousetool{u} kmouth{u}
kmplot{u} kodo{u} kpercentage{u} ksayit{u} kstars{u} kstars-data{u} kteatime{u} ktouch{u}
kttsd{u} kturtle{u} ktux{u} kverbos{u} kvoctrain{u} kweather{u} kwordquiz{u} kworldclock{u}
libboost-python1.34.1{u} libestools1.2{u} libkdeedu3{u} libkiten1{u} sgml-base{u}
ttf-dustin{u} ttf-kochi-gothic{u} ttf-sazanami-mincho{u} ttf-sjfonts{u}

J’ai donc pu désinstaller amor sans dégager tout KDE ! On se rend donc compte qu’installer KDE avec un simple aptitude install kde est pratique mais que les inconvénients se manifeste lorsqu’on veut désinstaller un paquet. Mon conseil : si vous installez un méta-paquet, regardez immédiatement les dépendances et marquez tout de suite celle qui vous intéressent comme installées manuellement et faites le ménage des paquets qui ne vous intéressent pas.
Enfin, si ce genre de manipulation vous parait être une aberration, n’utilisez pas les méta-paquets et installez uniquement les paquets que vous voulez. ;)

Article suivant :
»