50 votes

Comment trouver les paquets installés manuellement ?

J'ai installé une Ubuntu 10.10 sur mon ordinateur et j'ai installé quelques logiciels via apt-get. La semaine dernière, j'ai réussi à tout casser et à repartir de zéro, et je dois réinstaller mes logiciels. Y a-t-il un moyen de créer une liste avec tous les paquets que j'ai installés manuellement ?

Ainsi, j'obtiendrais une liste du type texlive, ... et non texlive, texlive-dep1, textlive-dep2, ... et tous les paquets standard ont été supprimés ?

Si je pouvais savoir quels sont les programmes que j'ai supprimés de l'installation normale, ce serait génial aussi !


Mise à jour 2015-05-23 : J'utilise maintenant Ansible comme gestion de configuration sur mes systèmes. J'y spécifie les paquets à installer. Cela sert l'objectif, installer tous les programmes sur un système frais, encore mieux. Donc cette question pourrait être l'entrée dans une gestion de configuration légère.

4voto

Pour ceux qui préfèrent utiliser les outils apt-*, il existe un utilitaire apt-mark qui permet à la fois d'interroger et de modifier l'état manuel/auto.

apt-mark showmanual

Vous pouvez également spécifier un modèle pour les paquets qui vous intéressent :

apt-mark showmanual qemu\*

2voto

Martin Ueding Points 7828

J'ai enfin compris :

outfile="$(mktemp)"
pattern='(\[INSTALLIEREN\]|\[INSTALL\])'

if [[ -f "/var/log/aptitude.1.gz" ]]
then
        gunzip -c /var/log/aptitude.*.gz | grep -E "$pattern" | awk '{ print $2; }' > "$outfile"
fi

if [[ -f "/var/log/aptitude" ]]
then
        grep -E "$pattern" "/var/log/aptitude" | awk '{ print $2; }' >> "$outfile"
fi

sort "$outfile"
rm "$outfile"

2voto

marty331 Points 121

Je peux tout obtenir en ouvrant les fichiers journaux dans /var/log/apt/.

Je vais ensuite filtrer manuellement les paquets apt-get install. Il y a peut-être un moyen de le faire par programme, mais je ne le connais pas.

1voto

Matt Points 111
cd /var/log/apt
cat  history.log | grep Commandline

vous voyez ainsi la liste des commandes effectuées dans le passé.

Supprimez le code grep si vous avez besoin de plus d'informations :

less history.log

si le journal est compressé (c'est-à-dire qu'il se termine par gz)

gunzip <filename>

pour le refermer une fois terminé, vous pouvez le faire :

gzip <filename>

1voto

Steve Buzonas Points 155

Je n'ai pas vu de solution ici qui fonctionne pour moi, j'ai installé pas mal de paquets deb avec dpkg et quelques uns des éléments que je recherchais particulièrement manquaient.

Un one liner plutôt long, mais commode à copier et à coller, serait le suivant :

export DPKG_INITIAL=$(mktemp) DPKG_INSTALLED=$(mktemp) DPKG_CUSTOM=$(mktemp) DPKG_DEPS=$(mktemp) zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print $2 }' > $DPKG_INITIAL ; awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u > $DPKG_INSTALLED ; comm -23 installed initial > $DPKG_CUSTOM ; function rdep() { apt-cache rdepends $1 | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; } ; echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > $DPKG_DEPS ; comm -23 custom deps > my-packages ; rm $DPKG_INITIAL $DPKG_INSTALLED $DPKG_CUSTOM $DPKG_DEPS

La commande ci-dessus enregistre une liste de paquets dans un fichier de votre répertoire de travail actuel nommé my-packages .

Explication

J'ai d'abord dressé une liste des paquets qui composaient la base des paquets sélectionnés lors de l'installation.

zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print $2 }' > initial

Suit une longue liste d'éléments installés en général.

awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u > installed

J'ai ensuite comparé les deux fichiers initial et installed pour ne répertorier que les éléments propres à l'installation.

comm -23 installed initial > custom

A partir de là, je voulais filtrer les dépendances, c'est là que cette méthode peut manquer certains paquets désirés, elle n'est pas consciente des dépendances qui sont aussi explicitement installées.

J'ai écrit une fonction bash rapide pour raccourcir les étapes de traitement de ces éléments.

function rdep() { apt-cache rdepends $1 | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; }

Ensuite, j'ai passé chaque ligne de mon fichier custom dans cette fonction avec xargs .

echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > deps

Une fois que j'ai eu la longue liste de toutes les dépendances possibles (je ne suis pas sûr de l'expression "toutes les déclarations possibles"), j'ai de nouveau obtenu les lignes qui étaient propres à un seul fichier.

comm -23 custom deps > manual

Et ma liste de paquets terminée se trouve maintenant dans un fichier nommé manual à ma disposition pour examen.

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