41 votes

Trouver tous les packages installés par l'utilisateur

Existe-t-il un moyen d'obtenir une liste de tous les paquets installés par l'utilisateur sur un système Ubuntu, c'est-à-dire les paquets qui ont été installés en plus des paquets installés par défaut ?

(L'idée est d'obtenir une liste complète qui peut être utilisée pour installer les mêmes paquets sur une nouvelle installation propre d'Ubuntu)

1voto

Will Hughes Points 5058

Merci geekosaur, beau code. Je l'ai utilisé mais il m'a fallu un certain temps pour comprendre comment le faire fonctionner. Voici comment je l'ai fait sous Ubuntu 11.10—cela fonctionne dans le terminal bash :

comm -13 \
  <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
  <(comm -23 \
    <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
    <(apt-mark showauto | sort) \
  ) > user-installed-packages

Ensuite, pour ajouter une tabulation—\t—et install sur chaque ligne :

sed 's/$/\tinstall/' user-installed-packages >uip

Ensuite, sur la nouvelle machine :

sudo dpkg --set-selections < uip

Et pour installer les packages :

sudo apt-get dselect-upgrade

1voto

Joshua Caputo Points 1

En supposant que vous avez un historique cohérent et utilisez aptitude:

history | grep -e "^..... aptitude install"

ne répertorierait que les paquets que vous avez installés avec aptitude install ... duh

0voto

LordMarkus Points 301

Une autre façon de le faire est de déterminer ce qui a été installé en fonction de vos "tâches" qui déterminent les packages de base à installer selon vos besoins initiaux.

tasksel --list-tasks

Au minimum, vous auriez server. Cependant, vous pouvez choisir d'en avoir plus. Pour chacune de ces tâches que vous avez installées, vous pouvez obtenir une liste des packages installés avec la commande suivante (décomposée pour plus de clarté pour celles que j'ai choisies dans mon installation) :

(tasksel --task-packages server ; \
 tasksel --task-packages openssh-server ; \
 tasksel --task-packages lamp-server) | sort | uniq

Une approche générique de ce qui précède serait :

(for a in $( tasksel --list-tasks | grep "^i" | awk '{ print $2 }' ) ; \
 do tasksel --task-packages $a; done) | sort | uniq

Utilisez maintenant apt-cache depends --installed -i --recurse | grep -v "^ " pour obtenir une liste des dépendances utilisées par tous les packages définis dans la tâche. Ceci peut être fait en une ligne comme suit :

apt-cache depends --installed -i --recurse \
     $(for a in $( tasksel --list-tasks | \
                   grep "^i" | \
                   awk '{ print $2 }' ) ; \
       do tasksel --task-packages $a; done) | grep -v "^ " | sort | uniq

La commande suivante répertorie tous les packages installés sur votre système (à l'exclusion des dépendances).

dpkg --get-selections | grep "[[:space:]]install" | awk '{print $1}'

Utilisez maintenant la commande comm pour trouver ceux qui sont uniquement dans la deuxième liste (c'est-à-dire ignorer ceux qui sont dans les deux fichiers et seulement dans le premier fichier)

comm -13 <(apt-cache depends --installed -i --recurse \
              $(for a in $( tasksel --list-tasks | \
                            grep "^i" | \
                            awk '{ print $2 }' ) ; \
                do tasksel --task-packages $a; done) | grep -v "^ " | sort ) \
         <( dpkg --get-selections | grep "[[:space:]]install" | \
            awk '{print $1}' | sort)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X