Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/12/2009, à 16:29

Sorbus

Comment lister facilement les paquets ajoutés ?

Bonjour,

Recherche fichier "liste des paquets installés par défaut" sur les différentes versions d'Ubuntu !

Je n'ai pas l'astuce... mais on doit pouvoir la trouver... et ça pourrait servir à pas mal de monde wink

Je viens de découvrir un tuto intéressant dans la documentation Ubuntu francophone.

Il se nomme "Sauvegarde et restauration de la liste des paquets installés pour restauration, duplication ou migration"

J'avais autrefois cherché quelque chose comme cela, sans avoir encore trouvé un truc simple. Dans mon script de sauvegarde, j'ai une ligne pour conserver l'historique des paquets installés, désinstallés ou mis à jour... C'est ceci (la ligne importante étant la dernière) :

# pour donner un nom "raccourci" (incluant le chemin) au fichier donnant l'historique des installations,
# mises à jour et désinstallations de paquets, fichier nommé "historique_inst_maj_desinst.log" :
  histor=/home/votre_identité/Documents/Sauvegardes/historique_inst_maj_desinst.log
  
# pour mettre à jour le fichier actualisé de l'historique des installations, mises à jour et désinstallations de paquets :
zgrep -h " installed \| upgrade \| remove " /var/log/dpkg.log* | sort | uniq > $histor

Mais c'est en pratique bien peu utilisable... S'il faut consulter tout l'historique pour dénicher les paquets ajoutés et non désinstallés, il y en a pour un moment.

Le tuto "Sauvegarde et restauration de la liste des paquets installés" ouvre une autre piste plus intéressante, avec la commande :

dpkg --get-selections > liste-des-paquets

Mais il manque à mon avis une méthode simple dans cette partie pour expliquer comment obtenir un fichier ne contenant que les paquets ajoutés à ceux de l'installation standard d'Ubuntu.

Exemple :

Je suis sous Jaunty. Je veux passer à Karmic non par une mise à niveau, mais en faisant une installation neuve. J'obtiens par la commande "dpkg --get-selections" la liste des paquets installés sur mon système. J'obtiens un fichier texte de 2265 lignes (de son côté, Synaptic indique 2264 paquets installés, je ne sais d'où viens la différence, mais elle est infime).

Il me faudrait un autre fichier texte contenant la liste des paquets d'une installation Jaunty standard (et non pas Karmic : j'ai besoin de la liste des paquets que j'ai ajoutés à Jaunty). Comment trouver cette liste sous la même forme que la liste obtenue par "dpkg --get-selections" ?

On pourrait alors utiliser la commande "diff" permettant d'obtenir un fichier "liste-des-paquets-complement-perso" ne contenant que la différence entre :
- le fichier listant les paquets Jaunty par défaut
- le fichier listant les paquets installés sur le système aujourd'hui.

diff   liste-des-paquets    liste-des-paquets-jaunty-par-defaut  >   liste-des-paquets-complement-perso

Ce dernier fichier liste-des-paquets-complement-perso aura besoin d'un petit toilettage : suppression des lignes non précédées de "<", puis suppression des "< " :

grep "^[<]" liste-des-paquets-complement-perso > liste-des-paquets-complement-perso-pluspropre
sed 's/^< //' liste-des-paquets-complement-perso-pluspropre > liste-des-paquets-complement-perso-tres-propre

Le fichier obtenu permettrait une réinstallation facile, sous Karmic, des paquets ajoutés, pour retrouver son système complet, comme indiqué dans le tuto :

sudo apt-get update
sudo dpkg --set-selections < liste-des-paquets-complement-perso-tres-propre
sudo apt-get -u dselect-upgrade

Si quelqu'un a l'astuce pour trouver la liste des paquets d'une installation standard de chaque version d'Ubuntu (de Jaunty, mais aussi de Hardy, Edgy, Karmic... pour que ça serve à tous !). Il ne manque que ça pour que l'astuce soit au point smile

Edit 1 : pour Jaunty, la réponse semble être ici, grâce à fove2 qui - si j'ai bien compris - a lancé un "dpkg --get-selections" sur une install fraiche de Jaunty, et a copié la liste dans un message du forum. Mais lorsqu'on n'a pas fait cela sur une install fraiche, la question demeure (notamment pour Hardy, Edgy, Karmic).

Edit 2 : j'ai eu une réponse de Jonathan sur la liste de discussion du Wiki de la documentation Ubuntu. Il propose des commandes utilisant "aptitude" je cite :

> Pour disposer de la liste complète des paquets actuellement installés...

aptitude search '~i' -F %p

> Pour obtenir simplement la liste des seuls paquets installés par l'utilisateur en plus des paquets d'une installation Ubuntu par défaut. (Elle contiendrait les logiciels préférés de l'utilisateur et les bibliothèques qui sont nécessaires à leur fonctionnement. La liste serait plus courte et plus facile à analyser si besoin.)

aptitude search '~i !~M' -F %p

Le problème avec cette commande c'est qu'elle ne marchera probablement pas si on n'a pas utilisé aptitude de bout en bout pour installer les paquets... à tester !

Je n'ai jamais rien installé avec aptitude, car j'utilise exclusivement apt-get ou synaptic.
Cependant, la seconde commande proposée par Jonathan me donne une liste de 1085 paquets.

P.S. : les paquets installés par défaut ne sont pas les mêmes s'il s'agit d'Ubuntu ou d'Ubuntu-serveur, ou de Kubuntu ou de Xubuntu, etc. D'où l'intérêt d'une commande, si elle existe, permettant d'identifier les paquets installés à l'origine sur le poste de travail de l'utilisateur, avant tout ajout. Ou donnant la liste des paquets ajoutés, ce qui a l'air d'être le cas avec cette commande "aptitude". Existe-t-il une commande dpkg ou apt-get donnant directement les mêmes infos ?

Dernière modification par Sorbus (Le 25/12/2009, à 12:54)

Hors ligne

#2 Le 25/12/2009, à 19:02

Aldian

Re : Comment lister facilement les paquets ajoutés ?

Sorbus a écrit :

On pourrait alors utiliser la commande "diff" permettant d'obtenir un fichier "liste-des-paquets-complement-perso" ne contenant que la différence entre :
- le fichier listant les paquets Jaunty par défaut
- le fichier listant les paquets installés sur le système aujourd'hui.

diff   liste-des-paquets    liste-des-paquets-jaunty-par-defaut  >   liste-des-paquets-complement-perso

En fait à mon avis prendre le fichier listant les paquets Jaunty par défaut sur une install fraiche n'est pas bon, parce que ça ne tiens pas compte des MAJ. La piste sur laquelle je rechercherai, c'est de démarrer sur le live cd de jaunty, et d'obtenir cette liste. Ensuite, il faudrait faire une simulation de MAJ du système, et enlever de la liste les paquets désinstallés et ajouter les paquets ajoutés, et c'est seulement alors qu'on aurait une liste réelle des paquets par défaut à la date actuelle. Voila pour la théorie. Pour la pratique, je creuserai à l'occasion, mais je suis sûr que c'est réalisable.

Après il y aura toujours le problème de la sauvegarde des dépots tiers et de leurs clés de sécurité, ainsi que celui des paquets dont on a bloqué la version pour X raisons.

Hors ligne

#3 Le 26/12/2009, à 04:27

draco31.fr

Re : Comment lister facilement les paquets ajoutés ?

Bonjour,

Je me suis poser la même question, sans vraiment me plonger dans les outils et le code à dispo, mais je pensais partir d'un autre point de vue.
Pour moi, les paquets à réinstaller sont ceux qui ne satisfont à aucune dépendance.
Tout les paquets qui répondent à des dépendances seront normalement installé automatiquement si on trouve le paquet qui a demandé la dépendance.
Aussi, si on retire de la liste ci-dessus tout les paquets qui sont dépendant de ubuntu-desktop, il ne doit plus rester grand chose.
A cela, il faudrait vérifier les dépendances ascendantes (ou descendante) de chaque paquet pour minimiser la liste.

L'avantage étant que la réinstallation d'un logiciel dont les dépendances ont changés avec les versions permet d'éviter l'installation de librairies non nécessaire au système.

Reste maintenant à trouver les moyen de faire ces recherches, sachant que "apt-cache depends" et "apt-cache rdepends" ont des sorties une peu "bizarre" selon les paquets.
En revanche, la commande suivante semble intéressante :

dpkg-query -f '${Depends}\n' -W ubuntu-desktop | sed -r 's/, /\n/g'

EDIT :
J'ai fait quelques essais, et j'ai pu remarquer un "problème" avec dpkg --get-selection.
Il semble que --get-selection affiche tout les paquets qui ont été installé sur le système même si ils ont été désinstallé depuis.
Dans mon cas, les anciens pilotes nvidia-185 apparaissent dans la liste, alors que je suis passé aux 195.
Mais on peut trouver la liste des paquets différemment, par exemple avec dpkg -l *, et en triant par statut "ii", (les paquets désinstallé sont en statut "r*" (rc) )
Pour voir la différence, il suffit de comparer les sorties :

diff <(dpkg -l * | egrep '^ii' | cut -d ' ' -f 3 | sort | uniq) <(dpkg --get-selections | cut -f 1 | sort | uniq)

Dernière modification par draco31.fr (Le 26/12/2009, à 09:48)

Hors ligne

#4 Le 26/12/2009, à 10:27

Sorbus

Re : Comment lister facilement les paquets ajoutés ?

Je note ceci au passage :
Un petit tuto en rapport avec notre question

Mais de fait, si "dpkg --get-selections" indique aussi les paquets autrefois installés, mais qui ne le sont plus, il faut chercher ailleurs pour faire quelque chose de propre. Je vais tester dns la journée. Merci pour vos réponses.

Dernière modification par Sorbus (Le 26/12/2009, à 10:32)

Hors ligne

#5 Le 26/12/2009, à 11:38

Sorbus

Re : Comment lister facilement les paquets ajoutés ?

@draco31.fr
Pourquoi "dpkg -l *" ?
Du fait de l'astérisque, le résultat est curieux.
J'ai fait simplement "dpkg -l"

Je viens de faire un petit test sur une installation Ubuntu Hardy que je n'ai pas trop trafiquée, et sur laquelle, en dehors de l'installation d'origine, je n'ai utilisé que apt-get, synaptic ou le gestionnaire de mise à jour (pas aptitude).

dpkg --get-selections

donne une liste de 1134 paquets

dpkg -l | egrep '^ii' | cut -d ' ' -f 3 | sort | uniq

donne une liste de 1085 paquets

un diff entre les deux donne une liste de 49 paquets tous présents dans la liste obtenue par "dpkg --get-selections" et absents de la liste obtenue par "dpkg -l | egrep '^ii'"

Petite sondage dans Synaptic pour un peu plus d'une dizaine de ces paquets (je n'ai pas vérifié les 49...) : aucun n'est actuellement installé.

Ta remarque est confirmée draco31.fr... et donc, tous ceux qui se basent sur "dpkg --get-selections" pour installer un nouveau poste de travail qu'ils veulent conforme à leur poste d'origine installent plein de paquets inutiles sur le second poste.

Tout autre chose... Je ne sais si la commande "aptitude" proposée par Jonathan peut servir à ceux qui n'utilisent pas aptitude pour les installations (j'en doute). Mais pour effectuer d'éventuelles comparaisons, il faut supprimer tous les espaces mis sur chaque ligne du fichier obtenu pas cette commande. Donc :

aptitude search '~i !~M' -F %p | sed 's/ * //' > liste-obtenue-via-aptitude

Cette commande ne liste que 768 paquets sur ce même poste de travail Xubuntu Hardy.
Je n'ai pas effectué la comparaison faute de temps (il faudrait d'abord retrier la liste obtenue, l'ordre n'étant pas le même qu'avec dpkg)

Dernière modification par Sorbus (Le 26/12/2009, à 11:47)

Hors ligne

#6 Le 26/12/2009, à 15:48

Sorbus

Re : Comment lister facilement les paquets ajoutés ?

1/ Essai sur portable sous Jaunty.

Nombre de paquets installés d'après Synaptic : 2264
Nombre de paquets listés par "dpkg -l | egrep '^ii' | cut -d ' ' -f 3 | sort | uniq" : 2264
Nombre de paquets listés par "dpkg --get-selections" ; 2265

Sur ce poste, la différence porte sur un seul paquet. Il s'agit de :
< virtualbox-ose-modules-2.6.22-14-generic        purge

Tiens... C'est curieux. Pourquoi "dpkg --get-selections" liste-t-il un paquet "purge".

D'après "man dpkg" :

--get-selections [motif-nom-paquet...]
              Obtient la liste des sélections des paquets, et l’envoie sur  la
              sortie  standard.  Sans un motif, les paquets dont le statut est
              « purge » ne seront pas affichés.

?

J'ai donc fait ceci pour me débarasser de l'inutile :

sudo dpkg --purge -a
(Lecture de la base de données... 297823 fichiers et répertoires déjà installés.)
Suppression de virtualbox-ose-modules-2.6.22-14-generic ...
Purge des fichiers de configuration de virtualbox-ose-modules-2.6.22-14-generic ...

Et sur ce poste, je n'ai maintenant plus de différence entre la listes des paquets obtenue par "dpkg --get-selections" et ""dpkg -l | egrep '^ii'"...

Il me semble cependant que sur l'autre poste testé ce matin (sous Xubuntu Hardy), la différence ne provenait pas de paquets ayant le statut "purge"... Je vérifierai ce soir ou demain.

2/ Essai sur fixe sous Jaunty.

Nombre de paquets installés d'après Synaptic : 1580
Nombre de paquets listés par "dpkg -l | egrep '^ii' | cut -d ' ' -f 3 | sort | uniq" : 1580
Nombre de paquets listés par "dpkg --get-selections" ; 1613

Dans ce cas, la différence porte sur 33 fichiers qui ont le statut "deinstall" dans le fichier obtenu par "dpkg --get-selections"

Ceci dit... je me pose maintenant 2 questions... qui peuvent se résumer en une "est-ce que dans ce post, nous ne sommes pas en train d'aller chercher midi à 14 h ?". En effet :

1 - puisque les statuts install, deinstall ou purge sont mentionnés dans le fichier obtenu par "dpkg --get-selections", il est bien possible que les commandes utilisées pour installer sur un autre poste de travail à partir de ce fichier tiennent compte de la mention du statut des différents paquets, et n'installent que ceux dont la ligne porte la mention "install"... (c'est cependant à vérifier)

2 - il n'est peut-être pas nécessaire d'obtenir la liste des seuls paquets installés depuis l'installation d'origine. Si on lui fournit la liste des paquets obtenue par  "dpkg --get-selections", apt-get doit bien être capable de n'installer que ceux qui ne le sont pas déjà sur le poste de travail où est utilisée la commande...

La solution à ce fil de discussion et donc peut-être tout simplement celle du lien déjà indiqué

1. D’abord, on génére la liste des paquets installés sur le poste original :

$~ dpkg --get-selections > /tmp/liste_paquets.txt

2. Ensuite on copie la liste de paquets sur la machine cible
3. Et on finit par installer tous les paquets de la liste avec une simple ligne :

$~ dpkg --set-selections < /tmp/liste_paquets.txt
$~ dselect

Dernière modification par Sorbus (Le 26/12/2009, à 21:59)

Hors ligne

#7 Le 09/01/2010, à 23:00

draco31.fr

Re : Comment lister facilement les paquets ajoutés ?

Salut,

Désolé de pas avoir répondu plus tôt, mais j'avais oublié de m'abonner au sujet !

Pour ce qui est d'apt-get, il ne réinstallera pas un paquet déjà installé ... sauf si on le force avec --reinstall.
En revanche, un paquet installé a 2 statuts :
1. installé manuellement
2. installé pour satisfaire un dépendance (automatique)

Dans le second cas, si le paquet qui demandait cette dépendance a été désinstallé, alors le paquet courant peut aussi être désinstallé.
Dans le cas où tu lance un apt-get install sur un paquet installé automatiquement (cas 2) alors le paquet passe en statut "installé manuellement".

Ainsi, ton système risque de s'encombrer rapidement si des paquets inutiles persistent.
De plus, il est possible qu'en changeant de version un paquet ne nécessite plus les mêmes dépendances : c'est donc inutile d'installer à l'identique (exit le get-selections basique).

En relisant de vieux magazines linux, je suis tombé sur le Linux+DVD n°50 de Mai/Juin 2009.
Un article y est consacré que les outils apt, et présente une solution pour installé les paquets issus d'une Crunchbang sur un Debian fraichement installée (c'est juste un cas d'étude !).

Voici les commandes / scripts :
(Le code est pas joli, mais il n'est pas de moi ^_^)

# Liste les paquets installés :
dpkg -l | grep '^ii| awk '{print $2}' > liste.txt
# analyse des dépendances, recherche des paquets de haut-niveau
apt-get install -y apt-rdepends

Script à lancer :

#!/bin/bash
echo "" > sup.txt
echo "" > inf.txt
for i in `cat liste.txt` ; do
  apt-rdepends -r --stat-follow=Installed --state-show=Installed $i > apt-temp
  if [ $(wc -l < apt_temp) -eq 1 ]
  then
    echo $i >> sup.txt
  else
     echo $i >> inf.txt
  fi
done;

Le fichier sup.txt contient alors la liste des paquets sans leur dépendance (qui seront installée automatiquement).
Voici les scripts d'installation sur la machine cible :

#!/bin/bash
# Vérification de la présence des paquets dans les dépôts
echo "" > notok.txt
echo "" > ok.txt
for i in `cat sup.txt` ; do
  apt-get -y -s install $i > apt_temp
  if [ $(wc -l < apt_temp) -eq 3 ]
  then
    echo $i >> notok.txt
  else
    echo $i >> ok.txt
  fi
done;

Récupération des paquets installés par les métapaquets non accessibles sur la machine cible (fichier notok.txt).
Script à lancer sur la machine source :

#!/bin/bash
for i in `cat notok.txt` ; do
  apt-rdepends --state-follow=Installed --state-show=Installed $i > $i
done;

Pour chaque fichier créé, ajouter les dépendances au fichier ok.txt (faut pas trop en demander à l'auteur !)
Copier ok.txt vers liste2.txt
Réexamen de la nouvelle liste (oui, oui, c'est le même script que le premier avec des fichiers différents) :

#!/bin/bash
echo "" > notok2.txt
echo "" > ok2.txt
for i in `cat liste2.txt` ; do
  apt-get -y -s install $i > apt_temp
  if [ $(wc -l < apt_temp) -eq 3 ]
  then
    echo $i >> notok2.txt
  else
     echo $i >> ok2.txt
  fi
done;

Epurer la liste obtenue, pour ne garder que les dépendances de haut-niveau :

#!/bin/bash
echo "" > sup2.txt
echo "" > inf2.txt
for i in `cat ok2.txt` ; do
  apt-rdepends -r --stat-follow=Installed --state-show=Installed $i > apt-temp
  if [ $(wc -l < apt_temp) -eq 1 ]
  then
    echo $i >> sup2.txt
  else
     echo $i >> inf2.txt
  fi
done;

Les paquets dans notok.txt et notok2.txt ne sont pas présent dans les dépôts de la machine cible.
On peut installer les paquets présents sur la machine cible avec le script suivant :

#!/bin/bash
for i in `cat sup2.txt` ; do
  apt-get -y install $i
done;

Reste encore à importer les fichiers de configuration pour avoir une machine à l'identique.
Même si les scripts sont perfectibles, l'idée est là, et à l'avantage de ne pas marquer inutilement des paquets comme "installé manuellement".

Je pense que d'une version d'Ubuntu à l'autre, il n'est pas nécessaire de refaire un passe avec les "notok" : ce sera probablement dû à des dépôts manquants.

Hors ligne

#8 Le 25/07/2010, à 23:35

ewfzapp

Re : Comment lister facilement les paquets ajoutés ?

waouw


www.indigenecreations.fr

Hors ligne