Comment obtenir l'historique d'apt-get install sur Ubuntu?

85

Je suis sur le point de déplacer un serveur d'une boîte Ubuntu à une autre. Je ne clone pas l'ancienne boîte dans la nouvelle; Je crée un nouveau système et je déplacerai les données si nécessaire. Je veux installer tous les logiciels que j'ai sur l'ancienne boîte de la nouvelle.

Existe-t-il un moyen simple de trouver l'historique de toutes les commandes "sudo apt-get install" que j'ai données au fil du temps? C'est-à-dire que dpkg -l me montre tous les paquetages installés, mais pas le paquetage de niveau supérieur les ayant installés. S'il existe un moyen pour dpkg de me donner le paquet d'installation, je peux y trouver les uniques; sinon, je veux que quelque chose d'autre dise "vous avez installé ces 24 paquets".

Paul Hoffman
la source
Pouvez-vous accepter une réponse ci-dessous? Être reconnaissant aux personnes qui ont répondu.
m-ric
Ces solutions ne vérifieront que ce qui est arrivé APRÈS la dernière rotation du journal. Ils ne vérifient pas toute l'histoire.
Kraang Prime
Cette réponse, askubuntu.com/a/250530/197730 , donne à cette question un moyen simple et rapide de répertorier tous les packages installés .
TooTone

Réponses:

69

L' apthistoire est /var/log/apt/history.logcomme dit dans un commentaire ci-dessus. Cela dit, cela ne listera pas les packages qui ont été installés manuellement, en utilisant des dpkginterfaces graphiques telles que gdebi. Pour voir tous les paquets qui sont passés dpkg, vous pouvez regarder /var/log/dpkg.log.

Inkaphink
la source
8

http://www.debianadmin.com/clone-your-ubuntu-installation.html

et /var/adm/apt/history.log

M_1
la source
5
La procédure du premier lien ne fait pas la distinction entre les packages installés automatiquement et les packages installés manuellement. /var/log/apt/history.log(vous vous êtes trompé d’emplacement) aura disparu après quelques mois.
Gilles
Gilles a raison sur les deux points. Je n'ai que quelques mois de ces journaux, et je ne vois même pas comment le taux de suppression des journaux est défini (c'est fait avec 'newsyslog' sur FreeBSD). Donc, je n'ai toujours pas de solution, mais j'ai quelques indications. Je peux au moins grep le résultat de la commande dans l'article de clonage, rechercher des noms "de haut niveau", les installer sur le nouveau, faire la même chose sur la nouvelle boîte, comparer les deux résultats et répéter jusqu'à satisfaction. Je voudrais encore entendre plus d'idées.
Paul Hoffman
7

Vous pouvez lister les paquets dont l'installation a été explicitement demandée avec apt-mark.

apt-mark showmanual

Si vous utilisez une ancienne version de Debian, voici une méthode manuelle.

La commande suivante donne la liste des packages dont l'installation a été demandée, que ce soit manuellement ou automatiquement. Sauf si vous êtes en train d'installer ou de désinstaller des packages, voici la liste des packages installés.

dpkg --get-selections | sed -n 's/\t\+install$//p'

La commande suivante donne un sur-ensemble de packages installés automatiquement:

</var/lib/apt/extended_states awk -v RS= '/\nAuto-Installed: *1/{print$2}'

En regroupant tous ces éléments, la commande suivante répertorie les packages installés manuellement:

comm -23 <(dpkg --get-selections | sed -n 's/\t\+install$//p') \
         <(</var/lib/apt/extended_states \
           awk -v RS= '/\nAuto-Installed: *1/{print$2}' |sort)
Gilles
la source
1
--- résultat très différent decomm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Cbhihe
Sur Debian, il y en a une apt-mark showmanualqui est équivalente à votre dernière commande.
maxschlepzig
3
grep -i "Commandline" /var/log/apt/history.log

Affiche tous les paquets que vous avez installés en utilisant: sudo apt-get install xxxxx

Prent Rodgers
la source
Cela ne diffère pas suffisamment de la réponse de @ ℝaphink et devrait faire l'objet d'un commentaire.
Karl Richter
2

Au lieu de la combinaison tac / head, il est préférable d’utiliser tail (pour les 25 dernières lignes):

tail -n 25 /var/log/apt/history.log
Entier
la source
Cela ne diffère pas suffisamment de la réponse de @ ℝaphink et devrait faire l'objet d'un commentaire.
Karl Richter
De plus, ce n'est pas pareil. tail listera les dernières lignes du fichier, dans l'ordre dans lequel elles sont dans le fichier. tac inversera l'ordre pour que la dernière ligne soit maintenant la première, de l'avant-dernière seconde, etc. Encore une fois, vous semblez également risquer de vous tromper lorsque vous dites que quelque chose est "meilleur" sans expliquer pourquoi. Je veux dire "meilleur" selon qui? Pour quelle exigence? Semble un peu trop confiant.
Todd Walton
0

Les autres réponses ont aidé mais m'ont donné trop de résultats. Pour réduire la sortie, j'ai commencé avec apt-mark showmanualcomme dans cette réponse , puis j'ai filtré les paquets installés à l'origine (voir cette réponse pour savoir comment obtenir une liste des paquets installés à l'origine; j'utilise Ubuntu 18.04.2 d'où le lien ci-dessous) .

BASE_PACKAGES_MANIFEST=http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.manifest
REMOVE_VERSIONS_REGEX='[0-9][.-][0-9][.-][0-9]|[0-9][.-][0-9]|[0-9]'
paste  <( apt-mark showmanual ) <( apt-mark showmanual | sed -r "s/$REMOVE_VERSIONS_REGEX//g" ) |
    grep -vf <( curl $BASE_PACKAGES_MANIFEST | cut -f1 | sed -r "s/$REMOVE_VERSIONS_REGEX|:amd//g" ) |
    cut -f1 |
    sort |
    uniq

Le script élimine les packages contenus dans le manifeste d'origine en effectuant une comparaison indépendante de la version, de sorte que les packages mis à niveau n'apparaissent pas dans la liste. Je me suis retrouvé avec une liste d'environ 60 paquets.

L'autre façon que j'aime, c'est cette réponse qui recherche dans tous les journaux apt .

Ton trop
la source
-1

Pour obtenir la liste des derniers packages installés par ordre décroissant, j'aime utiliser (par exemple, 25 lignes):

tac /var/log/apt/history.log |head --lines=25
Hartmut P.
la source
1
Plus efficace (et allitératif) serait: tail -25 /var/log/apt/history.log | tac
agc le
Cela ne diffère pas suffisamment de la réponse de @ ℝaphink et devrait faire l'objet d'un commentaire.
Karl Richter