Onde o software-center armazena seu histórico?

2

O centro de software do Ubuntu é capaz de exibir um histórico detalhado de pacotes instalados / atualizados / removidos de acordo com a data.

  1. De onde vem essa informação? ( /var/log/dpkg.log é mantido apenas por 12 meses; não conheço nenhum comando apt- * ou dpkg para obter a data em que o pacote foi instalado pela primeira vez.)
  2. Como posso copiar esses dados na forma de uma tabela / texto para serem processados por outro programa?
por staticd 24.09.2013 / 13:25

2 respostas

1

Pense que os detalhes são bastante inúteis. A menos que você queira descobrir exatamente quais alterações foram feitas no sistema em um dia e horário específicos, achei que os passos que passei para descobrir essas informações valeram a pena ser documentados:

Corri strace -e trace=open -f -o usc software-center para obter uma lista de todos os arquivos abertos pelo centro de software. Então eu o filtrei assim.

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

para eliminar todos os arquivos que não continham arquivos de dados.

Entre eles, encontrei o arquivo que parece interessante: ~/.cache/software-center/apthistory.p Parecia um arquivo pickle python quando eu o abri. tentando carregar o arquivo recebi o erro de que softwarecenter.db.history_impl.apthistory não foi importado. Eu corri o seguinte comando para procurar por arquivos python que foram abertos e tinham "softwarecenter" em seu caminho

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

e tenho um monte de nomes de arquivos, incluindo /usr/share/software-center/softwarecenter/db/history_impl/apthistory.so Eu escrevi o seguinte script para ler e processar o arquivo:

#!/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

Eu encontrei os atributos necessários procurando a classe de qual hist [0] era uma instância de: help(softwarecenter.db.history_impl.apthistory.AptTransaction) . Isso me levou à classe pai help( softwarecenter.db.history.Transaction) de onde eu descobri como usá-la.

Até mesmo sudo apt-get install ed aparece aqui.

    
por staticd 03.10.2013 / 07:25
2

Todo o histórico de pacotes instalados / atualizados / removidos está em /var/log/apt : novo histórico em history.log arquivo, histórico antigo em arquivos, em history.log.x.gz arquivos. Veja a imagem abaixo para obter esses dados em uma forma de tabela no Ubuntu Software Center:

    
por Radu Rădeanu 24.09.2013 / 13:34