web-dev-qa-db-fra.com

Où le centre logiciel stocke-t-il son histoire?

Le centre logiciel Ubuntu est capable d'afficher un historique détaillé des packages installés/mis à jour/supprimés en fonction de la date.

  1. D'où obtient-il ces informations? (/var/log/dpkg.log n'est maintenu que pendant 12 mois; Je ne connais aucune commande apt- * ou dpkg pour obtenir la date à laquelle un paquet a été installé pour la première fois.)
  2. Comment puis-je copier ces données sous la forme d'un tableau/texte à traiter par un autre programme?
2
staticd

Je pensais que les détails étaient assez inutiles, à moins que vous ne vouliez savoir exactement quels changements ont été apportés au système à un jour et à une heure spécifiques, j'ai senti que les étapes que j'avais suivies pour découvrir ces informations méritaient d'être documentées:

J'ai exécuté strace -e trace=open -f -o usc software-center Pour obtenir une liste de tous les fichiers ouverts par le centre logiciel. Ensuite, je l'ai filtré comme ça.

cat usc| grep -oP '(?<=open\(").*(?=",)' |egrep -v '\.(so\.([0-9]|cache)|so|pyc|mo|py|png|svg)$'|egrep -v '/usr/lib/(python2.7|x86|girepo)'| egrep -v '/usr/share/(icons|themes)' |egrep -v '/etc/fonts'|egrep -v '(screenshots|reviews)\.ubuntu\.com' |egrep -v fontconfig |sort -u

pour éliminer tous les fichiers ne contiennent pas de fichiers de données.

Parmi ceux-ci, j'ai trouvé le fichier d'aspect intéressant: ~/.cache/software-center/apthistory.p Il ressemblait à un fichier python pickle lorsque je l'ai ouvert. En essayant de charger le fichier, j'ai eu l'erreur que softwarecenter.db.history_impl.apthistory N'a pas été importé. J'ai exécuté la commande suivante pour rechercher les fichiers python qui ont été ouverts et avaient "softwarecenter" sur leur chemin

$cat usc| grep -oP '(?<=open\(").*(?=",)' |grep softwarecenter

et a obtenu un tas de noms de fichiers, y compris /usr/share/software-center/softwarecenter/db/history_impl/apthistory.so J'ai écrit le script suivant pour lire et traiter le fichier:

#!/usr/bin/python
import sys
import os
import pickle

sys.path.append('/usr/share/software-center')
import softwarecenter.db.history_impl.apthistory

with open(os.path.expanduser('~/.cache/software-center/apthistory.p')) as IFile:
    hist=pickle.load(IFile)

print type(hist[0])
print "earliest apt transaction started on:",hist[-1].start_date
print "installed:"
for PackageStr in hist[-1].install:
    print PackageStr
print "upgraded:"
for PackageStr in hist[-1].upgrade:
    print PackageStr

J'ai trouvé les attributs nécessaires en recherchant la classe dont hist [0] était une instance de: help(softwarecenter.db.history_impl.apthistory.AptTransaction). Cela m'a conduit à la classe parent help( softwarecenter.db.history.Transaction) d'où j'ai compris comment l'utiliser.

Btw même Sudo apt-get install Ed trucs apparaît ici.

1
staticd

Tout l'historique des packages installés/mis à jour/supprimés se trouve dans /var/log/apt: nouvelle histoire dans history.log fichier, ancienne histoire dans les archives, dans history.log.x.gz des dossiers. Voir l'image ci-dessous pour obtenir ces données sous la forme d'un tableau dans Ubuntu Software Center:

USC - history

2
Radu Rădeanu