[Script] Aptitude : gestion des dépendances et orphelins

Chose promise chose due, voici mon script de gestion de dépendances pour aptitude. :wink:

L’état Manuel / Automatique des paquets installés est la clef de la gestion automatique de dépendances d’[b]apt/b car c’est ce qui permet de savoir quels paquets ne sont plus utiles et peuvent donc être désinstallés sans problème lorsque plus aucun paquet ne dépend d’eux.
Quand on installe/désinstalle souvent des paquets, il arrive régulièrement que cet état ne soit plus tout à fait correct (trop de paquets marqués en Manuel), voire que des paquets deviennent orphelins.
Il est donc important que l’état Manuel / Automatique des paquets soit le plus précis possible. Ce script se charge de ce problème, et tant qu’à faire automatise dans la foulée la détection des paquets orphelins.

[size=150]IMPORTANT : LISEZ ATTENTIVEMENT CE QUI SUIT[/size]

Bien que j’utilise ce script sans aucun souci depuis longtemps et que j’aie une totale confiance en lui, il n’est pas totalement exclu que vous rencontriez des problèmes. Cela dit étant donné que le paramétrage est très limité, ça réduit d’autant les risques.

Ce script est conçu de telle manière (utilisation de l’option –schedule-only) que même en cas de bug dans mon code, aucun paquet ne puisse être supprimé automatiquement, si vous ne faites pas n’importe quoi par la suite.

Si après invocation de ce script, aptitude venait à vous proposer de supprimer des paquets par le jeu des dépendances considérées (à tort) inutiles (ce qui ne devrait jamais arriver, je n’ai pas vu ça une seule fois en plus de deux ans), pas de panique. La commande suivante s’assurera que vous conserviez tous vos paquets en l’état (par contre il est possible que des paquets restent marqués en Manuel alors qu’ils devraient être en Automatique, mais rien de bien grave au final) :

Notez que cette commande sert à annuler toutes les actions en attente, ce qui fait qu’elle est aussi utile si la première partie du script détecte de telles actions en attente (voir plus loin).
Maintenant que les avertissements d’usage sont faits, on peut passer au reste…

[size=150]Obtenir le script[/size]

Téléchargement : github.com/syam44/fix-aptitude- … encies.deb
Dépôt Git : github.com/syam44/fix-aptitude-dependencies

Installation / mise à jour :

[code]# aptitude install debianutils libappconfig-perl libreadonly-perl libreadonly-xs-perl deborphan ncurses-bin

wget https://github.com/syam44/fix-aptitude-dependencies/raw/master/fix-aptitude-dependencies.deb

dpkg -i fix-aptitude-dependencies.deb

rm fix-aptitude-dependencies.deb[/code]

[size=150]À qui s’adresse ce script ?[/size]

[ul][li] Vous utilisez aptitude comme gestionnaire de paquets principal.
Ça marche également si vous utilisez apt-get mais attendez-vous à ce que la première partie du script vous trouve régulièrement des actions en attente si vous continuez ensuite à utiliser apt-get en parallèle d’aptitude (de ce script, donc). Ce n’est pas grave, faut juste être prévenu. :slightly_smiling:[/li]
[li] Vous n’aimez pas conserver des paquets inutiles lorsque vous désinstallez un paquet.[/li][/ul]

[size=150]Pré-requis[/size]

[ul][li] aptitude version 0.6.3 (squeeze) et plus.[/li]
[li] Il est conseillé mais non nécessaire d’avoir deborphan installé.[/li][/ul]

[size=150]Fonctionnalités[/size]

[ul][li] Corrige automatiquement l’état Manuel / Automatique des paquets installés.
Ce script parcourt les dépendances (PreDepends, Depends et Recommends) de tous les paquets installés, et marque en Automatique tout ce qu’il peut…
Vous pouvez également (et devrez probablement) définir une liste de paquets à maintenir en Manuel quoi qu’il arrive.[/li]
[li] Détection des dépendances circulaires.
Le problème qui survient quand on marque un maximum de paquets en Automatique, c’est les chaînes de dépendances circulaires entre paquets. Plus précisément, les groupes de paquets inter-dépendants qui ne sont une dépendance (directe ou indirecte) d’aucun paquet marqué en Manuel.
Face à ce cas de figure, ce script ne sait pas quel(s) paquet(s) il convient de marquer en Manuel, et se rabat sur la solution de facilité : marquer tous les paquets concernés en Manuels. Mais il vous prévient tout de même, en identifiant les différentes chaînes de dépendances circulaires problématiques. Il vous suffit alors de choisir le bon paquet et de l’ajouter à la configuration du script pour éviter les problèmes la prochaine fois.[/li]
[li] Détection des paquets orphelins.
Une fois tout ce travail effectué, deborphan est appelé automatiquement (s’il est présent) afin de vous avertir des éventuels paquets orphelins. Le comportement exact de deborphan est facilement personnalisable.[/li]
[li] Routine de nettoyage personnalisée.
Vous pouvez facilement rajouter des commandes personnalisées qui s’exécuteront à la fin du script. Personnellement j’utilise ça pour nettoyer le cache d’aptitude et deux-trois autres choses qui me sont utiles.[/li][/ul]

[size=150]Paramétrage[/size]

Le paramétrage du script se passe dans le fichier /etc/apt/fix-aptitude-dependencies.conf :
[ul][li] Variable manual-packages : contient le nom de tous les paquets qui doivent être forcés en mode Manuel. Typiquement il s’agit de paquets contenant des dépendances circulaires, ou bien de paquets que vous tenez absolument à conserver même si tous les paquets qui en sont dépendants venaient à être supprimés.
Les paquets sont séparés les uns des autres par des espaces, tabulations et/ou retours chariots.[/li]
[li] Fonction user-cleanup : vous permet de rajouter des commandes à effectuer à la fin du script si tout s’est bien déroulé. Mettez juste true dans cette fonction si vous ne voulez pas lancer de commandes personnalisées.[/li]
[li] Fonction custom-deborphan : permet de personnaliser le comportement de deborphan. Je vous laisse aller fouiller dans le man si vous voulez l’adapter à vos besoins…[/li][/ul]
Note : voir également mon message ci-après pour un exemple de configuration.

[size=150]Exemple d’utilisation et explication détaillée du fonctionnement[/size]

Note : voir également mon message ci-après pour plus d’explications concernant les actions en attente.

À la première utilisation de ce script, il est plus que probable qu’il va trouver quelques soucis de dépendances, voire même des actions en attente ou des paquets cassés.

[code]# aptitude --schedule-only remove amarok

fix-aptitude-dependencies

Recherche des actions prévues et des dépendances cassées…

État Depuis Vers Paquet

id 2.4.3-1+b2 2.4.3-1+b2 amarok
id 2.4.3-1 2.4.3-1 amarok-common
id 2.4.3-1+b2 2.4.3-1+b2 amarok-utils
id 4:4.6.5-3 4:4.6.5-3 kdemultimedia-kio-plugins
id 0.4.0~git2 0.4.0~git2 liblastfm0
id 1.4.3-7 1.4.3-7 libloudmouth1-0
id 0.7.1-5 0.7.1-5 libqjson0
id 0.1.0+git2 0.1.0+git2 libqtscript4-core
id 0.1.0+git2 0.1.0+git2 libqtscript4-gui
id 0.1.0+git2 0.1.0+git2 libqtscript4-network
id 0.1.0+git2 0.1.0+git2 libqtscript4-sql
id 0.1.0+git2 0.1.0+git2 libqtscript4-uitools
id 0.1.0+git2 0.1.0+git2 libqtscript4-xml
id 1.0.1-3 1.0.1-3 libtag-extras1

ATTENTION : fix-aptitude-dependencies ne peut pas continuer. Veuillez appliquer ou annuler les actions prévues, et résoudre les dépendances cassées avant de relancer fix-aptitude-dependencies.[/code]
Pour des raisons de sécurité, le script refusera de faire quoi que ce soit s’il détecte qu’il y a des actions en attente sur certains paquets, ou que des paquets sont cassés. Il vous donne même la liste des paquets concernés…

On corrige donc cela (ici je dis à aptitude de garder amarok, mais il faut user de jugement : parfois vous voudrez conserver vos paquets en l’état, et d’autres fois appliquer ce qu’aptitude propose) et on relance le script…
Pour rappel, la commande indiquée au début de ce tuto dans la section IMPORTANT permet d’annuler toutes les actions en attente : aptitude keep ‘!~v’

[code]# aptitude keep ‘!~v’

fix-aptitude-dependencies

Recherche des actions prévues et des dépendances cassées…
Marquage des paquets en « Automatique » en fonction des dépendances des paquets…
Recherche des dépendances circulaires…

ATTENTION : des paquets marqués en « Automatique » contiennent des dépendances circulaires.

État Version Paquet

i 0.138-9 acpi-support-base
i 1:2.0.12-1 acpid
i 1.0.23+dfs alsa-base
i 1.0.24.2-3 alsa-utils
i 2.4.3-1+b2 amarok
i 2.4.3-1 amarok-common
i 1.3.13-5+b audacity
i 1.3.13-5 audacity-data
i 1.3.1+git4 konversation
i 1.3.1+git4 konversation-data
i 4:4.6.5-2 kopete
i 4:4.6.5-2 libkopete4

Les différentes chaînes de dépendances circulaires sont :
* acpi-support-base acpid
* alsa-base alsa-utils
* amarok amarok-common
* audacity audacity-data
* konversation konversation-data
* kopete libkopete4
La procédure correcte est de rajouter à la liste « paquets manuels » de fix-aptitude-dependencies.conf au moins un paquet de chaque chaîne de dépendances circulaires afin de casser les cycles de dépendances, puis de relancer fix-aptitude-dependencies pour appliquer la nouvelle configuration. En attendant, ces paquets ont tous été marqués en « Manuel », ce qui n’est probablement pas le résultat souhaité mais permet d’éviter leur suppression accidentelle.

deborphan : 1 bibliothèques orphelines (0 ignorées). Si vous êtes certain(e) que ces paquets ne vous sont pas utiles, vous pouvez les supprimer manuellement.
Pour que ces paquets n’apparaissent plus comme orphelins, utilisez « deborphan -A » (cf. man deborphan).

État Version Paquet

i 280.13.rea libgl1-nvidia-glx-ia32

Nettoyage du cache d’aptitude…
Désactivation des services KDE indésirables…
Suppression des dictionnaires MySpell indésirables…[/code]
Ouhla ça grogne… Voyons ça de plus près…

[quote]Marquage des paquets en « Automatique » en fonction des dépendances des paquets…
Recherche des dépendances circulaires…

ATTENTION : des paquets marqués en « Automatique » contiennent des dépendances circulaires.[/quote]
Le script a détecté ces dépendances circulaires dont je parlais plus haut.
Il commence par donner la liste de tous les paquets concernés, avec leur état et leur version actuelle, puis affiche les différentes chaînes de dépendances :

[quote]Les différentes chaînes de dépendances circulaires sont :
* acpi-support-base acpid
* alsa-base alsa-utils
* amarok amarok-common
* audacity audacity-data
* konversation konversation-data
* kopete libkopete4[/quote]
Chaque ligne correspond à un groupe de paquets inter-dépendants, il va donc falloir choisir lesquels on veut marquer en Manuel (sachant qu’un seul, le principal, est en général suffisant pour solutionner une chaîne complète).

Dans mon cas, les paquets Manuels seront acpi-support-base, alsa-utils, amarok, audacity, konversation et kopete. Je rajoute donc ces paquets dans la variable manual-packages du fichier de configuration /etc/apt/fix-aptitude-dependencies.conf.

[quote]deborphan : 1 bibliothèques orphelines (0 ignorées). Si vous êtes certain(e) que ces paquets ne vous sont pas utiles, vous pouvez les supprimer manuellement.
Pour que ces paquets n’apparaissent plus comme orphelins, utilisez « deborphan -A » (cf. man deborphan).[/quote]
Là c’est deborphan qui me prévient qu’une bibliothèque semble orpheline. Bien évidemment ce n’est pas le cas ici (cette lib me sert pour avoir la 3D sous Wine), je la rajoute donc à la liste des paquets ignorés par deborphan :

Si cette bibliothèque avait réellement été orpheline, j’aurais pu la supprimer manuellement à coup d’« aptitude purge ». Encore une fois il faut user de jugement, deborphan renvoie généralement assez peu de faux positifs mais ça arrive tout de même (la preuve dans l’exemple ci-dessus).

Je relance ensuite le script pour vérifier que la configuration est bonne :

[code]# fix-aptitude-dependencies
Recherche des actions prévues et des dépendances cassées…
Marquage des paquets en « Automatique » en fonction des dépendances des paquets…
Recherche des dépendances circulaires…
deborphan : aucune bibliothèque orpheline (1 ignorées).

Nettoyage du cache d’aptitude…
Désactivation des services KDE indésirables…
Suppression des dictionnaires MySpell indésirables…[/code]
C’est tout bon ! :smiley:

[size=150]Bonus : trouver tous les paquets marqués en Manuel[/size]

Une fois stabilisé l’état Automatique / Manuel de vos paquets, utilisez la commande suivante pour afficher la liste de tous les paquets qui sont encore marqués en Manuel :

Ça pourra vous aider à identifier les paquets dont vous ne voulez plus, pratique pour faire du ménage en complément des informations fournies par deborphan:wink:

[size=150]Bonus : trouver et supprimer tous les paquets désinstallés non purgés[/size]

Lors d’un apt-get remove ou aptitude remove les fichiers de configuration des paquets supprimés restent sur le disque (contrairement aux commandes équivalentes utilisant l’option purge).
Pour trouver tous ces paquets “à moitié” désinstallés :

Si vous voulez purger définitivement tous les paquets concernés :

Et pour les curieux, ma configuration actuelle :

[code]manual-packages = <<EOF
aptitude
plasma-desktop
alsa-utils
acpi-support-base
amarok
audacity
konversation
kopete
python3.1
EOF

user-cleanup = <<EOF
echo
echo "Nettoyage du cache d’aptitude…"
aptitude clean 2>/dev/null

/opt/share/apt/apt-postinvoke-clean

EOF

custom-deborphan = <<EOF
deborphan --ignore-suggests --guess-interpreters --no-show-section 2>/dev/null
EOF[/code]

Pour les quelques personnes ayant déjà (!!) téléchargé le script : j’ai fait quelques modifs cosmétiques (notamment dans les commentaires, pour clarifier / corriger certains points).
Rien de fonctionnel n’est impacté, comme je l’ai déjà dit j’utilise et fais évoluer ce script depuis un moment, et la seule chose que j’aie faite avant de le mettre sur le forum c’est rendre le code un peu moins moche et de rajouter des commentaires.

[quote=“syam”]Pour les quelques personnes ayant déjà (!!) téléchargé le script : j’ai fait quelques modifs cosmétiques (notamment dans les commentaires, pour clarifier / corriger certains points).
Rien de fonctionnel n’est impacté, comme je l’ai déjà dit j’utilise et fais évoluer ce script depuis un moment, et la seule chose que j’aie faite avant de le mettre sur le forum c’est rendre le code un peu moins moche et de rajouter des commentaires.[/quote]

Merci bien je vais tacher de le tester un de ces quatre je te ferais un retour de la chose :033

À titre d’information…

Bon bah je viens de rencontrer le cas de figure !
[ul][li] wicd-daemon recommande le paquet virtuel wicd-client[/li]
[li] wicd-kde dépend de wicd-daemon et fournit le paquet virtuel wicd-client[/li][/ul]

Résultat, aptitude considère ça comme une dépendance circulaire (à juste titre) et mon script affiche une belle “ERREUR : il y a un bug dans l’identification des dépendances circulaires.” :smiley:
Heureusement ça ne porte pas à conséquence, tous les paquets concernés ont été correctement marqués en Manuel comme prévu donc aucun risque de perdre quoi que ce soit, je n’ai même pas eu à corriger l’état des paquets à la main (il m’a suffi de rajouter wicd-kde dans ma liste de paquets au début du script et de relancer ce dernier, comme pour des dépendances circulaires “normales”).

Maintenant que j’ai trouvé un cas, je vais pouvoir implémenter la gestion des paquets virtuels… Bien entendu je vous ferai savoir quand ça sera fonctionnel. :wink:

En tous cas ça prouve bien que la paranoïa paye au final :

# NORMALEMENT ça ne devrait pas être utile, mais je préfère gaspiller un peu de CPU à vérifier l'état des paquets une dernière fois # plutôt que de risquer des suppressions accidentelles
:smiley:

Corrigé. Les dépendances qui impliquent des paquets virtuels sont maintenant correctement traitées. Malheureusement ça m’a obligé à dépendre de /bin/bash au lieu de /bin/sh, mais bon…
Plus une ou deux corrections bénignes ayant trait à l’affichage.

J’ai basculé le script sur Github, ça sera beaucoup plus pratique que de le mettre à jour ici.

J’ai également séparé le script lui-même de sa configuration (/etc/apt/fix-aptitude-dependencies.conf) et créé un petit script d’installation (configure install/remove/purge).

Mise à jour pour aptitude 0.6.5 qui vient d’arriver dans testing.
Télécharger la nouvelle version puis ./configure install, il n’effacera pas votre fichier de config actuel.

[quote=“syam”]Mise à jour pour aptitude 0.6.5 qui vient d’arriver dans testing.
Télécharger la nouvelle version puis ./configure install, il n’effacera pas votre fichier de config actuel.[/quote]

Merci bien je le test ce week-end, je ferai un retour en cas de souci rencontrer :wink:

LE cas certainement le plus évident serait (si tu as ça) de supprimer un paquet inutile qui fait partie des dépendances d’un méta-paquet voire d’une série de méta-paquets.
On sait tous à quel point c’est pénible de supprimer un paquet de ce genre :

  • soit il vire la moitié du système à cause des dépendances automatiques
  • soit on fait le bourrin, on marque tout en manuel et on perd toutes les infos de dépendances automatiques
  • soit on passe un temps incalculable à marquer soi-même en manuel les paquets qui vont bien

Avec ce script, plus besoin de s’emmerder : on peut tout marquer en manuel comme un bourrin (aptitude unmarkauto ~i), on supprime le paquet concerné (et seul le strict minimum partira avec, sans toucher aux autres programmes qu’on veut conserver), et enfin on utilise le script pour remettre en place les infos de dépendances automatiques / identifier les orphelins.

Sinon pour la maintenance au jour le jour c’est bien aussi, ça permet de remettre les choses en place par exemple quand on joue un peu trop à changer la version de certains paquets (testing <-> unstable pour voir où l’herbe est plus verte). :mrgreen:

Pour la différence avant/après :

aptitude search '~i!~M' -F '%p' | sort > paquets-manuels-avant.txt fix-aptitude-dependencies aptitude search '~i!~M' -F '%p' | sort > paquets-manuels-apres.txt diff -u paquets-manuels-avant.txt paquets-manuels-apres.txt
:wink:

je voudrai juste dire qu’il y a un paquet :debfoster qui permet de tester des logiciel asser facilment donc assez proche de celui-ci :j’explique en bref :wink:

on considere que le systeme est ok:
on lance en root debfoster et on accepte tout a Y

ensuite on veux tester des logiciel. ,donc aptitude install compiz et compagnie:

ensuite on refait :
debfoster

# debfoster

google-earth-stable is keeping the following 6 packages installed:
  alien ed librpmbuild1 lsb-core pax rpm
Keep google-earth-stable? [Ynpsiuqx?], [H]elp: S

jpilot is keeping the following 2 packages installed:
  jpilot-plugins libpisock9
Keep jpilot? [Ynpsiuqx?], [H]elp: S
Keep compiz-fusion-plugins-extra? [Ynpsiuqx?], [H]elp: S
Keep compiz-fusion-plugins-main? [Ynpsiuqx?], [H]elp: S
Keep rcconf? [Ynpsiuqx?], [H]elp: S

S= ne fait rien et le laisse donc installer. il vous reposera la question si vous relancer debfoster
Y= ne vous posera plus la question et le paquet est conserver
N=le paquet est désinstaller.

voila :slightly_smiling:
simple mai pratique , genre je teste compiz pour frimer devant les amis, dès qu’il son parti hop hop debfoster ni vu ni connu :laughing:

En complément à debfoster, la commande yes est bien pratique :

Ben y sont chouettes tes liens, Syam :
github.com/syam44/fix-aptitude- … all/master

Bon, j’'vais chercher et je trouverai bien :wink:

EDIT :
Bon, c’est rentré dans la boîte, y’a pu K.

Salut,
Ça serait cool de mettre ça sur le wiki aussi… :wink:

Placé le fichier dans un dossier ad-hoc, cd ce dossier, ==> root, ./configure install:
./configure : Aucun fichier ou dossier de ce type

???

Est-ce que je dois d’abord “dézipper” ?

EDIT :
Je viens de lire qq part que bash ne reconnaissait pas “configure” ???

Oups oui faut décompresser avant (d’où l’intérêt de prendre le .tar.gz qui garde les permissions +x une fois décompressé).

[code]# wget -O - https://github.com/syam44/fix-aptitude-dependencies/tarball/master | tar xvz

cd syam44-fix-aptitude-dependencies*

./configure install[/code]

J’ai mis à jour le message d’origine. :wink:

[quote=“ricardo”]Ben y sont chouettes tes liens, Syam :
github.com/syam44/fix-aptitude- … all/master[/quote]
Quant tu cliques sur le lien d’origine (celui de mon premier message) ça marche, pas quand tu fais du copier/coller (à cause du ). Faut se plaindre auprès de phpBB qui raccourcit l’affichage du lien… :wink:

[quote=“syam”]Oups oui faut décompresser avant (d’où l’intérêt de prendre le .tar.gz qui garde les permissions +x une fois décompressé).

[code]# wget -O - https://github.com/syam44/fix-aptitude-dependencies/tarball/master | tar xvz

cd syam44-fix-aptitude-dependencies*

./configure install[/code]

J’ai mis à jour le message d’origine. :wink:

[quote=“ricardo”]Ben y sont chouettes tes liens, Syam :
github.com/syam44/fix-aptitude- … all/master[/quote]
Quant tu cliques sur le lien d’origine (celui de mon premier message) ça marche, pas quand tu fais du copier/coller (à cause du ). Faut se plaindre auprès de phpBB qui raccourcit l’affichage du lien… :wink:[/quote]

Y’a qq chose que je ne pige pas :

1ère ligne, parfait
2ème lignes, je suppose que ça crée un dossier et que ça y va ???
Ensuite, OK
Problème, à aucun moment je ne vois de dossier créé ??? :017
Sinon, j’ai exécuté les 3 lignes sans réfléchir plus loin et je n’ai pas eu d’erreur.
MAIS où se trouve ce dossier j’ai fouillé partout dans ~/ = invisible ???

À ce soir :006

EDIT :
Trouvé … dans /root :blush:

Bonjour,

Intrigué par ce script, j’ai voulu le tester même si mes connaissances dans ce domaine sont limitées… mais bon, j’ai essayé…
voilà ce que me retourne le script, et je reste un peu dubitatif :open_mouth:

[code]root@debian:~/syam44-fix-aptitude-dependencies-aa361bb# fix-aptitude-dependencies
Recherche des actions prévues et des dépendances cassées…

État Depuis Vers Paquet

pi 3.2.2-14 apmd
pi 0.43+bzr790-1 aptdaemon
pi 0.43+bzr790-1 aptdaemon-data
pi 0.18.1.1-6 autopoint
pi 1:1.19.3-7 busybox
pi 9.20120419 debhelper
id 0.11.12 0.11.12 defoma
pi 1.55-2 diffstat
pi 0.0.20090925-1 execstack
iB 3:11.2.202.233 3:11.2.202.233 flashplayer-mozilla
pB 1:2.8.3 flashplugin-nonfree
pB 0.7.pristine-2 freedesktop-sound-theme
pi 4.6.3-2 gcj-4.6-base
pi 1.5.4-1 gir1.2-clutter-gst-1.0
pi 3.2.1-1+b1 gir1.2-evince-3.0
pi 1:1.7.10-1 git
pi 1:1.7.10-1 git-man
pi 3.4.0-2 gnome-color-manager
pi 0.28-4 gnome-session-canberra
pi 3.4.1-1 gnome-session-fallback
pi 3.2.0-2~webupd gnome-shell-extensions-common
pB 0.4.1-1 gnome-sushi
pi 3.2.1-3 gnome-utils-common
pi 1:2.4.10-2 gnucash
pi 1:2.4.10-2 gnucash-common
pi 2.4.1-3 gnucash-docs
pi 0.97-66 grub
pi 0.10.36-1 gstreamer0.10-gnomevfs
pi 1.8.8+1-8 guile-1.8
pi 1.8.8+1-8 guile-1.8-libs
pi 3.12.2-1 hplip-cups
pi 1.3.2a-15 html2text
pi 20120102 ia32-libs-gtk
pi 1.26.2-9 libaccess-bridge-java
pi 1.26.2-9 libaccess-bridge-java-jni
pi 3.2.2-14 libapm1
pi 5.0.22-1 libaqbanking-data
pi 5.0.22-1 libaqbanking33
pB 2.8.4.forreal- libarchive1
pi 6:0.8.1-7 libavutil-extra-51
pi 1:0.2.2-1 libbluray-bdj
pi 1.46.1-8 libboost-filesystem1.46.1
pi 1.48.0-3 libboost-filesystem1.48.0
pi 1.48.0-3 libboost-program-options1.48.0
pi 1.46.1-8 libboost-python1.46.1
pi 1.48.0-3 libboost-python1.48.0
pi 1.48.0-3 libboost-regex1.48.0
pi 1.46.1-8 libboost-system1.46.1
pi 1.48.0-3 libboost-system1.48.0
pi 1.46.1-8 libboost-thread1.46.1
pi 1.48.0-3 libboost-thread1.48.0
pi 2.26.3-10 libcdt4
pi 0.58-1 libcrypt-ssleay-perl
pi 2:1.1.3-4squee libcryptsetup1
pi 6.31-1 libdate-manip-perl
pi 4.8.30-11 libdb4.8
pi 0.8.4-6 libdbi1
pi 0.8.13-3 libelfg0
pi 0.17-1 liberror-perl
pi 1.17+git201109 libfinance-quote-perl
pi 2.1.3~rc5-4 libftgl2
pi 4.6.3-2 libgcj12
iBA 3.4.0-2 3.4.0-2 libgdict-common
pi 2.4.25-1~bpo60 libgmime-2.4-2
pB 2.4.25-1~bpo60 libgmime2.4-cil
pi 0.8.17-1.1 libgoffice-0.8-8
pi 0.8.17-1.1 libgoffice-0.8-8-common
pi 2.26.3-10 libgraph4
pi 1.14.21-2.1 libgsf-1-114
pi 1.14.21-2.1 libgsf-1-common
pi 2.26.3-10 libgvc5
pi 4.3.1-1 libgwengui-gtk2-0
pi 4.3.1-1 libgwenhywfar-data
pi 4.3.1-1 libgwenhywfar60
pi 2.11-1 libhtml-tableextract-perl
pi 2009-12 libkpathsea5
pi 1.38-1 libktoblzcheck1c2a
pi 2.06-1 liblzo2-2
pi 1:2.34.1-2 libmetacity-private0a
pi 0.29.6-3 libneon27
pi 1:0.9.4-2 libofx4
pi 1.5.2-10 libosp5
pi 44-1 libpam-systemd
pi 2.26.3-10 libpathplan4
pi 2.0.1+dfsg-12+ libprojectm-qt1
pi 2.0.1+dfsg-12+ libprojectm2
pi 0.2.0-1.1 libquvi0
pi 1:1.4.3-33 libsvga1
pi 6:0.8.1-7 libswscale-extra-2
pi 2.2-11 libtextcat-data
pi 2.2-11 libtextcat0
pi 2.0.1+dfsg-12+ libvisual-projectm
pi 0.2.8.4-10 libwmf0.2-7
pi 2.26.3-10 libxdot4
pi 1.20-1 libyaml-syck-perl
pi 5.11-1 linuxlogo
pi 02.15-2 lshw-gtk
pi 1:2.34.1-2 metacity
pi 1:2.34.1-2 metacity-common
pi 2:1.0~rc4.dfsg mplayer
pi 2:1.0~rc4.dfsg mplayer-gui
pi 1.6-2 mplayer-skin-blue
pi 295.40-1 nvidia-glx-ia32
pi 295.40-1 nvidia-kernel-source
pi 295.33-1 nvidia-xconfig
pi 0.0.20090925-1 prelink
pi 2.0.1+dfsg-12 projectm-data
pi 2.0.1+dfsg-12+ projectm-pulseaudio
pi 0.43+bzr790-1 python-aptdaemon
pi 0.43+bzr790-1 python-aptdaemon-gtk
pi 0.43+bzr790-1 python-aptdaemon.gtk3widgets
pi 0.43+bzr790-1 python-aptdaemon.gtkwidgets
pi 1.0.2+bzr481-1 python-defer
pi 2.32.0+dfsg-1 python-gnomekeyring
pi 0.3.2-9.1 python-gnupginterface
pi 0.82.4debian3 python-software-properties
pi 1:0.28.2-4 python-vte
pi 1.2.8-1 python-xapian
pi 3.2.3~rc1-2 python3
pi 0.8.4 python3-apt
pi 3.2.3~rc1-2 python3-minimal
pi 3.2.3~rc2-1 python3.2
pi 3.2.3~rc2-1 python3.2-minimal
pi 0.60-2 quilt
pi 3b1-3.1 slib
pi 0.82.4debian3 software-properties-common
pi 0.82.4debian3 software-properties-gtk
pB 1.10.0-1 tomboy
pi 2.5.1 wajig
pB 1:0.4.2-4+b3 xserver-xorg-video-fbdev
pi 1:1.42-9 xsnow
pB 10.0.4esr-2 xulrunner-10.0

ATTENTION : fix-aptitude-dependencies ne peut pas continuer. Veuillez appliquer ou annuler les actions prévues, et résoudre les dépendances cassées avant de relancer fix-aptitude-dependencies.[/code]

j’ai donc des problèmes si je comprend bien, mais comment les résoudre afin de pouvoir relancer le script correctement? Quelles actions à appliquer ou à annuler? Ai-je des dépendances cassées (je crois que oui avec l’état B)?

j’ai beaucoup d’état de paquet “pi”, ca veux dire quoi? c’est grave docteur?

p le paquet et tous ses fichiers de configuration ont été supprimés, ou le paquet n’a jamais été installé
i le paquet est installé et toutes ses dépendances sont satisfaites
B le paquet a des dépendances cassées
A le paquet a été automatiquement installé

j’ai également un état ‘id’ et j’ai pas trouvé à quoi correspondait le d.
Y’a t il pas une opposition entre l’état p et i?

je suis peut être à coté de la plaque… si ce script est fait pour les barbus comme vous, dites le moi, et je le désinstalle illico! :smiley:
Sinon, avez-vous un lien vers lequel je pourrais étudier un peu tous les aspects d’apt/aptitude? (mais relativement accessible pour un non-informaticien).

Merci!

Je laisse Syam te répondre mais sache que j’avais à peu près le même premier résultat.
C’est assez vite réparé mais il t’expliquera mieux que moi qui vient juste de l’installer (5 jours).
Aujourd’hui, tout propre, plus d’alerte.
Je ne suis pas un barbu pourtant :wink:

[quote=“Golmut”]j’ai beaucoup d’état de paquet “pi”, ca veux dire quoi? c’est grave docteur?

p le paquet et tous ses fichiers de configuration ont été supprimés, ou le paquet n’a jamais été installé
i le paquet est installé et toutes ses dépendances sont satisfaites
B le paquet a des dépendances cassées
A le paquet a été automatiquement installé

j’ai également un état ‘id’ et j’ai pas trouvé à quoi correspondait le d.
Y’a t il pas une opposition entre l’état p et i?[/quote]
Il faut bien se rappeler qu’aptitude dispose, contrairement à apt-get, d’une liste d’actions en attente (ou actions prévues, c’est la même chose).
Dit autrement, apt-get ne permet que de faire des actions immédiatement, alors qu’aptitude permet également de les planifier.

En soi t’as pas tort dans ton interprétation des états de paquets (p/i/B/A…) mais tu oublies simplement cette fonctionnalité d’aptitude dont je viens de parler.
Sachant qu’aptitude présente l’état des paquets sur 3 “colonnes” (lettres) :

  • 1ère lettre = état courant du paquet, correspond également à ce qu’apt-get et dpkg connaissent
  • 2ème lettre = action prévue sur le paquet, spécifique à aptitude
  • 3ème lettre = état automatique (A) ou manuel

Du coup, tu remarqueras que les paquets marqués pi contiennent dans la deuxième colonne (Depuis) de la liste affichée, ce qui confirme qu’ils ne sont pas installés actuellement mais qu’ils sont simplement marqués pour installation dans les actions en attente.

Pourquoi tu as ça, je sais pas trop, mais j’aurais tendance à soupçonner que tu utilises apt-get d’habitude, sinon tu aurais déjà remarqué des bizarreries dans le comportement d’aptitude. Note bien, je ne pense pas que ça soit le fait d’utiliser apt-get qui provoque ça (il n’y a aucune raison logique), c’est plus probablement dû à l’utilisation d’aptitude à un moment donné et à l’annulation en cours de route des actions que tu avais commencées. (sans garantie de véracité hein, je devine plus qu’autre chose) Le fait que tu es en Sid, avec toutes les mises à jour compliquées que ça implique, ne doit pas améliorer les choses.

Concernant l’état d dans la deuxième lettre de l’état de paquet : paquet en attente de suppression (delete). À cet endroit il est aussi possible d’avoir p (purge) à la place de d.

Note : ce système d’actions prévues est directement lié à l’option –schedule-only d’aptitude utilisée plus tard dans le script (mais au point où il s’arrête dans ton cas, il n’en est pas encore là, pour le moment il ne fait que lire l’état actuel de tes paquets sans rien modifier du tout).

Pour remettre tout ça à plat (je donne la solution pour tout le monde, tant qu’à faire) :
En fait il y a beaucoup plus simple que les commandes ci-dessous : aptitude keep '!~v’
Cette commande est moins ciblée mais le résultat est identique aux commandes plus complexes (et en plus elle ne dépend pas de la version d’aptitude).
Les deux commandes ci-dessous sont donc à considérer comme “obsolètes”.
[ul][li] Si votre version d’aptitude est supérieure ou égale à 0.6.6 (actuellement en testing/unstable) : aptitude keep $(aptitude search ‘~b!~i|~ainstall|~areinstall|~aupgrade|~adowngrade|~aremove|~apurge’ -F ‘%p’)[/li]
[li] Si votre version d’aptitude est inférieure ou égale à 0.6.5, il y avait un bug dans les motifs de recherche ~a donc il faut utiliser aptitude keep $(aptitude search ‘~b!~i|!~aupgrade’ -F ‘%p’) (ne cherchez pas à comprendre la logique, il n’y en a pas, c’est juste la manière de contourner le bug pour arriver au même résultat)[/li]
[li] Pour les versions d’aptitude antérieures à squeeze je ne sais pas, je n’ai plus rien pour tester…[/li][/ul]
Ça supprimera toute la liste d’actions prévues dans aptitude sans toucher aux paquets eux-mêmes. Ça devrait aussi régler le cas des paquets cassés (B), car avec aptitude c’est les actions prévues qui font qu’un paquet serait cassé si vous appliquiez les actions prévues en question ; sans actions prévues il n’y a aucune raison qu’un paquet soit cassé (sauf si vous vous êtes amusé à utiliser une option --force… d’apt-get ou de dpkg, mais dans ce cas là vous avez des choses plus urgentes à faire que d’utiliser mon script).


Concernant le comportement du script lui-même, je sens qu’il y a besoin de quelques éclaircissements car ricardo m’a déjà posé ce genre de questions.

Le script est susceptible de vous fournir 3 listes de paquets différentes :
[ul][li] juste après « Recherche des actions prévues et des dépendances cassées… » : cela correspond aux actions prévues dont nous avons parlé. En temps normal il n’y a aucune raison de garder des actions prévues dans aptitude. Évidemment ça peut arriver qu’on ait besoin d’utiliser directement cette fonctionnalité (–schedule-only) mais en principe on applique les actions prévues à la fin (sinon ça sert à rien :stuck_out_tongue:). Cette liste correspond donc à un état anormal (mais pas grave en lui-même) d’aptitude.[/li]
[li] juste après « Recherche des dépendances circulaires… » : c’est tout à fait normal d’avoir des paquets dans cette liste là, ça correspond aux dépendances circulaires que j’ai évoquées dans mon message d’origine. Après une installation de nouveaux paquets ou une mise à jour, des paquets peuvent apparaître dans cette liste auquel cas il suffit de suivre les instructions (rajouter un paquet de chaque chaîne de dépendances dans la variable MANUAL_PACKAGES).[/li]
[li] juste après « deborphan : X bibliothèques orpheline » : c’est aussi normal que des paquets apparaissent ici suite à des suppressions de paquets ou à des mises à jour. Ce n’est que deborphan qui détecte des paquets orphelins, qu’il faudra gérer manuellement (je me refuse à les traiter automatiquement dans le script, ça serait trop facile de prendre les mauvaises décisions). Typiquement, on voudra soit supprimer ces paquets (aptitude remove) s’ils ne servent plus à rien, ou bien dire à deborphan de les ignorer (deborphan -A) s’ils servent toujours car deborphan peut parfois renvoyer des “faux positifs”.[/li][/ul]

J’espère que c’est plus clair… :slightly_smiling:


Y’a toujours la documentation d’aptitude mais c’est pas forcément très accessible vu qu’il s’agit du manuel de référence, pas d’un tuto.
En ligne (version obsolète) : algebraicthunk.net/~dburrows/pro … de/doc/fr/
Sinon, installer le paquet aptitude-doc-fr et aller voir dans /usr/share/doc/aptitude/html/fr/index.html (respectivement, /usr/share/doc/aptitude/html/en/index.html si c’est aptitude-doc-en qui est installé).

Ça fait un moment que je me dis qu’il faudrait que je prenne le temps de faire un tuto complet pour aptitude (et donc aussi pour une grosse partie du système apt, histoire de bien expliquer les concepts) mais tu sais ce que c’est, on a toujours plus urgent à faire… Mais bon y’a bien un moment où je vais me décider, d’autant qu’il y a de la demande apparemment.