OVH Cloud OVH Cloud

apt a la mémoire longue

9 réponses
Avatar
Julien Valroff
Bonsoir tout le monde,

Je viens de me rendre compte que apt avait souvenir de paquets que j'ai
installés il y a pas mal de temps, et _purgés_ depuis. Il s'agit
principalement d'images de noyaux que j'ai compilées, et cela
nécessitant quelques tests avant un résultat convenable, j'en ai pas
mal !

Les infos concernant ces paquets ne sont pas disponibles.
En fait, seuls les fichiers /var/lib/dpkg/available
et /var/lib/dpkg/status semblent s'en souvenir (rgrep à l'appui), mais
je n'arrive pas à comprendre pourquoi ces paquets, qui ne sont dans
aucune archive, restent dans ces fichiers !

Quelqu'un pourrait-il m'expliquer ce fait, et m'indiquer comment faire
"perdre la mémoire" à apt (sans avoir à aller supprimer les entrées dans
les 2 fichiers cités plus hauts) ?

Merci par avance
Julien



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

9 réponses

Avatar
Raphaël 'SurcouF' Bordet
Le mercredi 27 avril 2005 à 19:34 +0200, Julien Valroff a écrit :
Bonsoir tout le monde,

Je viens de me rendre compte que apt avait souvenir de paquets que j'ai
installés il y a pas mal de temps, et _purgés_ depuis. Il s'agit
principalement d'images de noyaux que j'ai compilées, et cela
nécessitant quelques tests avant un résultat convenable, j'en ai pas
mal !

Les infos concernant ces paquets ne sont pas disponibles.
En fait, seuls les fichiers /var/lib/dpkg/available
et /var/lib/dpkg/status semblent s'en souvenir (rgrep à l'appui), mais
je n'arrive pas à comprendre pourquoi ces paquets, qui ne sont dans
aucune archive, restent dans ces fichiers !



Que donne la commande suivante:

# dpkg -l <un des paquets> ?

--
Raphaël 'SurcouF' Bordet
http://debianfr.net/ | surcouf at debianfr dot net
Avatar
Julien Valroff
Le mercredi 27 avril 2005 à 23:49 +0200, Raphaël 'SurcouF' Bordet a
écrit :
Le mercredi 27 avril 2005 à 19:34 +0200, Julien Valroff a écrit :
> Bonsoir tout le monde,
>
> Je viens de me rendre compte que apt avait souvenir de paquets que j'ai
> installés il y a pas mal de temps, et _purgés_ depuis. Il s'agit
> principalement d'images de noyaux que j'ai compilées, et cela
> nécessitant quelques tests avant un résultat convenable, j'en ai pas
> mal !
>
> Les infos concernant ces paquets ne sont pas disponibles.
> En fait, seuls les fichiers /var/lib/dpkg/available
> et /var/lib/dpkg/status semblent s'en souvenir (rgrep à l'appui), mais
> je n'arrive pas à comprendre pourquoi ces paquets, qui ne sont dans
> aucune archive, restent dans ces fichiers !

Que donne la commande suivante:

# dpkg -l <un des paquets> ?


<...>
pn kernel-image-2.6.11-ck2-athena <néant>
(aucune description n'est disponible)

Je précise que j'ai ce problème sur 2 machines sur lesquelles je n'ai
(presque) qu'utilisé aptitude.

Je ne vois vraiment pas ce qui cloche...

@+ et merci pour ta réponse
Julien



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Francois
Le Thu, Apr 28, 2005 à 06:58:46AM +0200, Julien Valroff a écrit
Le mercredi 27 avril 2005 à 23:49 +0200, Raphaël 'SurcouF' Bordet a
écrit :
> Le mercredi 27 avril 2005 à 19:34 +0200, Julien Valroff a écrit :
> > Bonsoir tout le monde,
> >
> > Je viens de me rendre compte que apt avait souvenir de paquets que j'ai
> > installés il y a pas mal de temps, et _purgés_ depuis. Il s'agit
> > principalement d'images de noyaux que j'ai compilées, et cela
> > nécessitant quelques tests avant un résultat convenable, j'en ai pas
> > mal !
> >
> > Les infos concernant ces paquets ne sont pas disponibles.
> > En fait, seuls les fichiers /var/lib/dpkg/available
> > et /var/lib/dpkg/status semblent s'en souvenir (rgrep à l'appui), mais
> > je n'arrive pas à comprendre pourquoi ces paquets, qui ne sont dans
> > aucune archive, restent dans ces fichiers !



C'est la situation normale pour des paquets installés par dpkg -i <fichier
paquet> ou par apt à partir d'une source qui n'existe plus. Ce cas se produit
classiquement pour les kernel faits avec make-kpkg puis installés par dpkg -i.


--
Francois Mescam



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Julien Valroff
Le jeudi 28 avril 2005 à 13:42 +0200, a écrit :
Le Thu, Apr 28, 2005 à 06:58:46AM +0200, Julien Valroff a écrit
> Le mercredi 27 avril 2005 à 23:49 +0200, Raphaël 'SurcouF' Bordet a
> écrit :
> > Le mercredi 27 avril 2005 à 19:34 +0200, Julien Valroff a écrit :
> > > Bonsoir tout le monde,
> > >
> > > Je viens de me rendre compte que apt avait souvenir de paquets que j'ai
> > > installés il y a pas mal de temps, et _purgés_ depuis. Il s'agit
> > > principalement d'images de noyaux que j'ai compilées, et cela
> > > nécessitant quelques tests avant un résultat convenable, j'en ai pas
> > > mal !
> > >
> > > Les infos concernant ces paquets ne sont pas disponibles.
> > > En fait, seuls les fichiers /var/lib/dpkg/available
> > > et /var/lib/dpkg/status semblent s'en souvenir (rgrep à l'appui), mais
> > > je n'arrive pas à comprendre pourquoi ces paquets, qui ne sont dans
> > > aucune archive, restent dans ces fichiers !

C'est la situation normale pour des paquets installés par dpkg -i <fichier
paquet> ou par apt à partir d'une source qui n'existe plus. Ce cas se produit
classiquement pour les kernel faits avec make-kpkg puis installés par dpkg -i.



J'avance doucement dans mes recherches. En installant le paquet
dpkg-dctrl, j'ai réussi à compter le nombre de paquet ayant comme statut
'purge ok not-installed' :
/usr/bin/grep-status "purge ok not-installed" -c /var/lib/dpkg/status
Soit 178 paquets !

Mon fichier /var/lib/dpkg/status pèse 174 ko après quelques mois
d'utilisation.
Cela doit sans aucun doute ralentir la lecture de la "base de données"
lors des mises à jour, non ?

Par contre, je ne vois toujours pas comment faire pour supprimer ces
paquets...
Pour les paquets available, il y a bien dpkg --forget-old-unavailable et
dpkg --clear-available, mais pour status, je ne vois qu'un script.
Personne n'aurait pensé à faire cela avant moi ?!? Ou alors est-ce
vraiment inutile ?

@+
Julien



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Daniel Déchelotte
Julien Valroff a écrit :

| [... pense a supprimer ce qui n'est pas necessaire a la comprehension
| de ta reponse]
|
| J'ai réussi à compter le nombre de paquet ayant comme statut
| 'purge ok not-installed' :
| /usr/bin/grep-status "purge ok not-installed" -c /var/lib/dpkg/status
| Soit 178 paquets !
|
| [...]
| Pour les paquets available, il y a bien dpkg --forget-old-unavailable et
| dpkg --clear-available, mais pour status, je ne vois qu'un script.
| Personne n'aurait pensé à faire cela avant moi ?!?

Je ne suis pas sur de comprendre ta distinction entre "available" et
"status", mais la commande "--forget-old-unavail" devrait effectivement
supprimer de la base les paquets qui ne sont plus installes ("status") et
plus disponibles ("available"), typiquement d'anciens paquets du noyau. La
commande semble ne pas fonctionner comme on pourrait s'y attendre :
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug 8532

:-/

--
Daniel Déchelotte
http://yo.dan.free.fr/


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Julien Valroff
Le vendredi 29 avril 2005 à 12:21 +0200, Daniel Déchelotte a écrit :
Julien Valroff a écrit :

| [... pense a supprimer ce qui n'est pas necessaire a la comprehension
| de ta reponse]
|
| J'ai réussi à compter le nombre de paquet ayant comme statut
| 'purge ok not-installed' :
| /usr/bin/grep-status "purge ok not-installed" -c /var/lib/dpkg/status
| Soit 178 paquets !
|
| [...]
| Pour les paquets available, il y a bien dpkg --forget-old-unavailable et
| dpkg --clear-available, mais pour status, je ne vois qu'un script.
| Personne n'aurait pensé à faire cela avant moi ?!?

Je ne suis pas sur de comprendre ta distinction entre "available" et
"status", mais la commande "--forget-old-unavail" devrait effectivement
supprimer de la base les paquets qui ne sont plus installes ("status") et
plus disponibles ("available"), typiquement d'anciens paquets du noyau. La
commande semble ne pas fonctionner comme on pourrait s'y attendre :
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug 8532

:-/



Salut, et merci pour ta réponse !
Pour clarifier les choses, je parle des fichiers /var/lib/dpkg/status
et /var/lib/dpkg/available
Le problème est réglé pour ce dernier (j'ai été radical avec un dpkg
--clear-available qui efface purement et simplement le contenu du
fichier, qui s'est rempli après quelques dselect update)

Par contre, pour l'autre fichier (/var/lib/dpkg/status), je ne vois rien
d'autre qu'un script qui chercherait les paquets ayant pour statut
"purged ok not-installed" et supprimerait le paragraphe s'y rapportant.
Mais je m'étonne qu'il n'existe pas un outil plus complet que grep-dctrl
pour faire ce genre de manip (puisqu'il permet de les compter, pourquoi
ne pourrait-il pas les supprimer ?).

Je vais relire le man de sed et proposer un script si ça peut intéresser
quelqu'un, mais j'aurais aimé avoir la confirmation que c'est vraiment
utile de nettoyer ce fichier ?

@++
Julien



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
Julien Valroff a écrit, vendredi 29 avril 2005, à 17:09 :
[...]
Je vais relire le man de sed et proposer un script si ça peut intéresser
quelqu'un, mais j'aurais aimé avoir la confirmation que c'est vraiment
utile de nettoyer ce fichier ?



Le manuel de sed est trop bref, il vaut mieux lire info sed.

$ sed -e '
/^Package:/{
N
/nStatus: purge ok not-installed$/{
N
/nPriority:/{
N
/nSection:/{
N
/n$/{
w /tmp/supprimes
d
}}}}}' < /var/lib/dpkg/status > status_bref

... avec les réserves d'usage.
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Julien Valroff
Le vendredi 29 avril 2005 à 18:54 +0200, Jacques L'helgoualc'h a écrit :

Le manuel de sed est trop bref, il vaut mieux lire info sed.

$ sed -e '
/^Package:/{
N
/nStatus: purge ok not-installed$/{
N
/nPriority:/{
N
/nSection:/{
N
/n$/{
w /tmp/supprimes
d
}}}}}' < /var/lib/dpkg/status > status_bref



J'avais trouvé dans le même genre ;-)
Mon script supprime les _paragraphes_ contenant la ligne "Status: purge
ok not-installed", un paragraphe étant déterminé par 2 lignes vides :

#!/bin/bash
cd /var/lib/dpkg/
cp status status.backup
sed -e '/./{H;$!d;}' -e 'x;/Status: purge ok not-installed/d;'
status > status.new
sed -e '/./,$!d' status.new > status
rm -f status.new

echo "Script exited with code $?."

Après exécution, le poids de mon fichier status a été réduit de 20ko
(soit environ 3% de son poids), donc le gain n'est pas vraiment celui
que j'aurais pu espérer...

Merci à tous pour votre aide !
@+
Julien




--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
Julien Valroff a écrit, vendredi 29 avril 2005, à 19:29 :
Le vendredi 29 avril 2005 à 18:54 +0200, Jacques L'helgoualc'h a écrit :
> [script sed]

J'avais trouvé dans le même genre ;-)
Mon script supprime les _paragraphes_ contenant la ligne "Status: purge
ok not-installed", un paragraphe étant déterminé par 2 lignes vides :



Pas exactement, le premier Package: apparaît ligne n°1 chez moi. Je
suppose qu'un paragraphe commence par une telle ligne, et finit par une
ligne vide (j'ai bien une dernière ligne vide) ; seuls les paragraphes
de quatre lignes conformes au modèle sont effacés.

#!/bin/bash
cd /var/lib/dpkg/
cp status status.backup
sed -e '/./{H;$!d;}' -e 'x;/Status: purge ok not-installed/d;'
status > status.new



- tu effaces aussi un paragraphe qui contiendrait cette chaîne dans la
description (peu plausible :) ;

- une dernière ligne non vide serait perdue.

sed -e ':a;N;/n$/!{$!b a};/nStatus: purge ok not-installedn/d'
status > status.new

sed -e '/./,$!d' status.new > status



Des lignes vides au début ne sont pas gênantes ici --- mais on peut
regrouper cette commande en tête du sed précédent.

rm -f status.new

echo "Script exited with code $?."

Après exécution, le poids de mon fichier status a été réduit de 20ko
(soit environ 3% de son poids), donc le gain n'est pas vraiment celui
que j'aurais pu espérer...



Chez moi© c'est rentable ;)

$ grep -c '^Package:' status_bref /tmp/supprimes /var/lib/dpkg/status
status_bref:1036
/tmp/supprimes:8245
/var/lib/dpkg/status:9281

Merci à tous pour votre aide !



Merci à toi aussi,
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact