Kirjoittaja Aihe: deb pakettien asennuspäivämäärä  (Luettu 1263 kertaa)

ajv

  • Käyttäjä
  • Viestejä: 3
    • Profiili
deb pakettien asennuspäivämäärä
« : 04.08.06 - klo:13.23 »
Moro,

onko helppoa keinoa listata asennettuja deb paketteja asennuspäivämäärän mukaisesti järjestettynä? dpkg kirjoittaa logia /var/log/dpkg.log* tiedostoihin, joten niitä parsimalla onnistuu, mutta onko nopeampaa tietä, vrt

rpm -qa --queryformat '%{INSTALLTIME}\t%{NAME}\n' | sort -n

edit: tai mitä paketteja on asennettu tietyllä päivämäärävälillä, viimeiset paketit tuosta logista saa greppaamalla " install " tai " upgrade " sanoja.
« Viimeksi muokattu: 04.08.06 - klo:14.10 kirjoittanut ajv »

raimo

  • Käyttäjä
  • Viestejä: 3524
    • Profiili
Re: deb pakettien asennuspäivämäärä
« Vastaus #1 : 04.08.06 - klo:20.06 »
Tuommosen näpersin joutessani: http://dash.atspace.org/kvaak/dpkg-log.txt
(Palvelimen asetukset on piipilleen säädetty tuolla serverillä, joten vaihda selaimen charsetiksi UTF-8 jos kopioit sen tuolta ja ääkköset vikuroi, tai ota wgetillä niin ne tulee oikein.)

Komentoriville sitten dpkg-log -d 20060804 ja tämän päivän päivitykset listautuu,
dpkg-log -d 20060704 -d 20060804 listaa kuukauden ajalta

Onhan se ihan näppärä minusta ainakin, kun näkee mitkä paketit on esim eilen päivittyneet.
Ja etenkin vikatilanteessa voi olla hyödyksi jopa.  :)
So long and thanks for all the fish!

ajv

  • Käyttäjä
  • Viestejä: 3
    • Profiili
Re: deb pakettien asennuspäivämäärä
« Vastaus #2 : 04.08.06 - klo:20.34 »
Kiitos vaivannäöstä. Itsekin kerkesin pienen pyyttonin pyöräyttää, tämä ei tosin komentoriviltä lue optioita, ne pitää säätää skriptiin. Tuo perli on kyllä just sen näköstä aku ankan kiroilua kuin muistinkin ;D, nimimerkillä olen koittanut vähentää.

Koodia: [Valitse]
#!/usr/bin/python

import datetime

logfile = "/var/log/dpkg.log"

def year(DateStr):
    return int(DateStr.split("-")[0])
def month(DateStr):
    return int(DateStr.split("-")[1])
def day(DateStr):
    return int(DateStr.split("-")[2])
def hour(TimeStr):
    return int(TimeStr.split(":")[0])
def minute(TimeStr):
    return int(TimeStr.split(":")[1])
def second(TimeStr):
    return int(TimeStr.split(":")[2])

def sortByDate(db):
    decorated = [ (db[pkg]["INSTALLDATE"], pkg) for pkg in db.keys()]
    decorated.sort()
    return [ pkg for (date, pkg) in decorated ]

def PkgsInTimeInterval(db, StartDate, EndDate = "TODAY"):
    import time
    if EndDate == "TODAY":
        t = time.localtime()
        EndDate = datetime.date(t.tm_year, t.tm_mon, t.tm_mday)

    pkgs = []
    qualify = pkgs.append
    for pkg in db.keys():
        if db[pkg]["INSTALLDATE"] >= StartDate and db[pkg]["INSTALLDATE"] <= EndDate:
            qualify(pkg)
    return pkgs

d = open(logfile, "r").read()
db = dict()

for line in d.split("\n"):
    if line.find("install ") != -1 or line.find("upgrade ") != -1:
        (DateStr, TimeStr, Stat, Package, notneeded, Version) = line.split()
        db[Package + "-" + Version] = dict()
        db[Package + "-" + Version]["INSTALLDATE"] = datetime.date(year(DateStr), month(DateStr), day(DateStr))
        db[Package + "-" + Version]["INSTALLTIME"] = datetime.time(hour(TimeStr), minute(TimeStr), second(TimeStr))

for pkg in PkgsInTimeInterval(db, datetime.date(2006, 8, 4)):
        print db[pkg]["INSTALLDATE"], pkg

raimo

  • Käyttäjä
  • Viestejä: 3524
    • Profiili
Re: deb pakettien asennuspäivämäärä
« Vastaus #3 : 04.08.06 - klo:20.44 »
Kiitos vaivannäöstä. Itsekin kerkesin pienen pyyttonin pyöräyttää, tämä ei tosin komentoriviltä lue optioita, ne pitää säätää skriptiin. Tuo perli on kyllä just sen näköstä aku ankan kiroilua kuin muistinkin ;D, nimimerkillä olen koittanut vähentää.
;D joo, no kieltämättä Pythoni on ehkä kauniimpaa, pitäisi jaksaa opetella sekin kieli.
Toisaalta Perlilläkin tulee erinomaisen hyvin toimeen.

Today -parametri pitää lisätä, kiitos vinkistä. ;)

ee: nysse osaa today:nkin.
« Viimeksi muokattu: 04.08.06 - klo:21.10 kirjoittanut raimo »
So long and thanks for all the fish!