Comment trouver les paquets installés manuellement?

47

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

Pour que cela me donne une liste comme texlive, ... et non texlive, texlive-dep1, textlive-dep2, ... et tous les paquets standard supprimés?

Si je pouvais en quelque sorte déterminer quels programmes de l’installation normale que j’ai supprimés, ce serait génial aussi!

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

    
posée Martin Ueding 25.03.2011 - 17:47
la source

15 réponses

2

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 ; }' > "$outfile"
fi

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

sort "$outfile"
rm "$outfile"
    
réponse donnée Martin Ueding 09.08.2011 - 23:18
la source
25

Avec cette suggestion, je suppose que votre ancienne installation démarrera quand même!

Pour répliquer un ensemble de packages sur une autre machine:

Sur le système A, exécutez:

dpkg --get-selections | grep -v deinstall > my-selections

Déplacez le fichier my-selections vers le système B.

Sur le système B, exécutez:

dpkg --set-selections < my-selections

et ensuite:

sudo apt-get dselect-upgrade

Remarque importante: si vous avez installé des packages à partir de référentiels et / ou de PPA non standard, vous souhaiterez également copier /etc/apt/sources.list et le contenu de /etc/apt/sources.list.d/ du système A vers le système B avant d'exécuter la mise à niveau.

Vous pouvez utiliser dpkg pour voir également ce que vous avez supprimé (NB: cela inclura également les paquets que vous avez manuellement installés et supprimés):

dpkg --get-selections | grep deinstall

Vous pouvez voir vos résultats dans le terminal ou, bien sûr, rediriger vers un fichier.

    
réponse donnée Mark Russell 25.03.2011 - 18:11
la source
19

Ce fil de superuser.com donne cette solution:

aptitude search '?installed ?not(?automatic)'
    
réponse donnée Jason 02.05.2011 - 19:34
la source
10

Si vos journaux apt sont dans / var / log / apt, cela devrait fonctionner:

gunzip -c /var/log/apt/history.log.*.gz | grep "apt-get install"

Ou si vous voulez vous débarrasser d’une partie du courrier indésirable dans la sortie:

gunzip -c /var/log/apt/history.log.*.gz | grep "apt-get install" \
  | cut -f4- -d" " | sort | uniq
    
réponse donnée Mzzzzzz 17.10.2013 - 23:21
la source
6

Vous pouvez utiliser apt-mark , mais je recommande < a href="http://manpages.ubuntu.com/manpages/precise/en/man8/debfoster.8.html"> debfoster :

sudo apt-get install debfoster
sudo debfoster

Ceci inspectera tous les paquets installés et déterminera lesquels gardent les autres installés:

texlive-full is keeping the following 161 packages installed:
  cm-super cm-super-minimal context doc-base dvipng feynmf
  fonts-gfs-artemisia fonts-gfs-baskerville fonts-gfs-bodoni-classic
  ...
Keep texlive-full? [Ynpsiuqx?], [H]elp:

Lorsque vous répondez "y" à chaque question (appuyez simplement sur Entrée pour vous déplacer rapidement), debfoster va collecter la liste des paquets et les écrire ligne par ligne dans un fichier. Par défaut, il s'agit de /var/lib/debfoster/keepers . Cela ressemble à ceci:

gnome-do
texlive-full
...

Je configure debfoster via /etc/debfoster.conf pour mettre cette liste à /etc/debfoster-keepers et suivre le fichier avec etckeeper pour conserver l'historique et sauvegardes. La réponse ici montre comment installer une liste de packages à partir d’un fichier texte délimité par des nouvelles lignes:

sudo apt-mark manual $(cat debfoster-keepers)

Notez une limitation ici, les paquets que vous avez purgés ont un "-" devant eux. Donc, vous voulez supprimer ces lignes avant d'appeler apt-mark.

Même si le site Web de debfoster indique que debfoster est obsolète en faveur d’aptitude, je préfère la configuration simple et rapide de debfoster. Il vous place au milieu de votre base de données de packages et vous permet de nettoyer les paquets, ce qui rend les packages auto et manual plus évidents.

Tapez "h" à l'invite du debfoster pour expliquer vos options. Tapez "?" pour voir la description du paquet. La procédure pratique peut être utile.

    
réponse donnée rduplain 06.12.2012 - 19:55
la source
5
comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Donne tous les packages installés manuellement (pas les packages système, pas les dépendances). Pour les exemples, il affiche build-essential mais pas gcc .

    
réponse donnée ecerulm 22.05.2015 - 17:38
la source
2

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

J'entre ensuite et filtre manuellement les paquets d'installation apt-get. Il y a peut-être un moyen de le faire par programmation, mais je ne suis pas au courant.

    
réponse donnée marty331 25.04.2013 - 18:42
la source
1
cd /var/log/apt
cat  history.log | grep Commandline

De cette façon, vous voyez 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 se termine par gz)

gunzip <filename>

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

gzip <filename>
    
réponse donnée Zen 02.07.2013 - 17:32
la source
1

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

Une seule ligne assez longue, mais facile à copier et à coller serait:

export DPKG_INITIAL=$(mktemp) DPKG_INSTALLED=$(mktemp) DPKG_CUSTOM=$(mktemp) DPKG_DEPS=$(mktemp) zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print  }' > $DPKG_INITIAL ; awk ' !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", ) ; gsub(/:.+/, "", ) ; a[]= } 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  | 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 construit une liste de paquets qui composaient la ligne de base des packages sélectionnés lors de l'installation.

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

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

awk ' !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", ) ; gsub(/:.+/, "", ) ; a[]= } 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 lister que les éléments uniques à installer.

comm -23 installed initial > custom

À partir de là, je voulais filtrer les dépendances, c'est là que cette méthode peut manquer certains paquets souhaités, elle ignore les dépendances qui sont également explicitement installées.

J'ai écrit une fonction de bash pour raccourcir cette étape dans le traitement de ces éléments.

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

Après cela, 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 la longue liste de toutes les dépendances possibles (pas sûre de toutes les instructions possibles), j'ai de nouveau obtenu les lignes uniques à un seul fichier.

comm -23 custom deps > manual

Et ma liste de paquets finis se trouve maintenant dans un fichier nommé manual disponible pour que je puisse l'examiner.

    
réponse donnée Steve Buzonas 14.04.2015 - 14:52
la source
1

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

apt-mark showmanual

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

apt-mark showmanual qemu\*
    
réponse donnée Alexander Koptelov 30.01.2017 - 17:21
la source
0

Quelqu'un lié à lien solution, mais il ne se comporte pas correctement car la sortie d'aptitude a changé. Voici une version mise à jour, basée sur les packages actuellement installés comparés à 12.04 LTS. Vous aurez besoin de aptitude installé, c'est la seule exigence.

aptitude search '~i !~M' -F '%p' | sort -u | tr -d ' ' > currentlyinstalled && wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f 1 | sort -u > defaultinstalled && comm -23 currentlyinstalled defaultinstalled

Pour décomposer la commande ci-dessus en plusieurs parties, ce bit génère un paquet par ligne de tout ce qui est installé sur le système

aptitude search '~i !~M' -F '%p' | sort -u | tr -d ' ' > currentlyinstalled

Et cela télécharge la liste des paquets par défaut et amp; récolte les informations redondantes.

wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f 1 | sort -u > defaultinstalled

et comm comparent les deux fichiers et affichent les packages qui ne figurent pas dans la liste par défaut.

comm -23 currentlyinstalled defaultinstalled
    
réponse donnée johndrinkwater 13.10.2013 - 19:56
la source
0

Utilisez un fichier de manifeste de distribution comme ensemble de base. Triez les résultats manuellement installés dans des groupes de packages par architecture et par section, de sorte qu'il est plus facile de se concentrer sur des groupes de packages (peut-être que certaines sections ne vous intéressent pas).

lien

#!/bin/bash

manifest_url='http://releases.ubuntu.com/releases/trusty/ubuntu-14.04.3-desktop-amd64.manifest'
manifest_file=$(echo $manifest_url | sed -e 's#.*/##g')
if [ ! -e $manifest_file ]; then
    wget -q $manifest_url
fi
cat $manifest_file | cut -f1 | sort -u > default_installed.txt

aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currently_installed.txt

comm -23 currently_installed.txt default_installed.txt > manually_installed.txt

# sort the 'mannually_installed.txt' packages by architecture and section
mkdir -p package_files
while read p; do
    apt-cache show $p > info.txt
    arch=$(grep -m1 'Architecture: ' info.txt | sed -e 's/Architecture: //')
    section=$(grep -m1 'Section: ' info.txt | sed -e 's/Section: //' -e 's/\//_/g')
    file="${arch}_${section}_packages.txt"
    echo $p >> "package_files/$file"
done <manually_installed.txt

rm info.txt
    
réponse donnée Darren Weber 29.09.2015 - 07:38
la source
0
#! /bin/sh
DEFAULT='tempfile'
CURRENT='tempfile'
cat /var/log/installer/initial-status.gz | gzip -d | grep '^Package:' | awk '{ print }' | sort -u > $DEFAULT
aptitude search '~i !~M' -F '%p' | sort -u | tr -d ' ' | awk '{ print }' > $CURRENT
comm -23 $CURRENT $DEFAULT
rm $DEFAULT
rm $CURRENT
    
réponse donnée Hir0 22.02.2014 - 14:39
la source
0

Je n'en ai pas trouvé un qui me convenait, alors j'ai écrit un script. En analysant le contenu de /var/log/apt/history.log* et / var / log / aptitude, puis en triant par datetime, ce qui donne deux listes, l'une est installée manuellement, une autre est installée mais a été supprimée. Script avec vérification 'apt list'. un peu d'écart, car l'utilisation de dpkg installé et modifié source de PPA.

Je mets ici, lien .

si quelqu'un a besoin de le tester, peut-être besoin de modifier du code, car mes fichiers journaux sont mélangés en chinois et en anglais (spécialement le format datetime RFC2822), j'ai besoin de le traiter.

    
réponse donnée utopic eexpress 20.03.2017 - 20:40
la source
0

Je pense que vous voulez utiliser /var/log/apt/history.log et ses amis pour donner les modifications apportées:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt(?:-get)? install (?!.*--reinstall)\K.*'

(modifié depuis source )

Vous donnera tous les paquetages installés sur la ligne de commande en utilisant une variation de apt-get install .

Il récupère les fichiers compressés dans l’ancien history.log s les ajoute avec le history.log actuel et passe par grep, en extrayant les lignes avec apt [-get] install [et / ou réinstalle] et en montrant le reste de la ligne (-o flag) qui correspond au (x) nom (s) du paquet.

Cela nécessite un peu de modding (par exemple avec sed ) si vous voulez juste les noms de paquets sur des lignes séparées; un exercice pour le lecteur!

Il est intéressant de noter que le gestionnaire de paquets synaptiques ( gksu synaptic ou kdesudo synaptic ) dans la section "status" a une liste "installée (manuellement)". Si vous marquez la liste entière pour suppression [ne pas l'appliquer !!], vous devriez pouvoir enregistrer les modifications marquées et obtenir une liste des paquets de cette manière. Attention: ceci a verrouillé synaptic pour moi (calcul des suppressions de dépendance vraisemblablement).

    
réponse donnée pbhj 04.02.2018 - 17:37
la source

Lire d'autres questions sur les étiquettes