script to show packages updated or installed

I frequently would install some new packages and forget the name of the programs later on, so I threw together a perl script to parse the zypper history log to show packages installed either grouped by date or sorted alphabetically…

There might be a better way to get to this info, but I didnt know of any, and the script was quick to throw together…

The script is called in two ways:
grouped by date (default) - “lastpkg.pl”

-or-
sorted by package name - “lastpkg.pl rpm”

#!/usr/bin/perl
############################################################################
#
# show a summary of the packages installed by date or package name
#
#
# <username>
#
############################################################################
## +++++++++++++++++++++++++++ Maintenance Log +++++++++++++++++++++++++++++
# <username> <date> Script created.

$|=1;    # set output buffering to off
$=0;    # set array base to 0
$,=" ";  # set output field separator
$\="
";  # set output record separator

#datesort or pkgsort
my $disptype = $ARGV[0] || "datesort";

my $dbfile = qq{/var/log/zypp/history};

#slurp in the source file
open(dbfile, "<$dbfile") || die "Can‘t open proc file - $dbfile";
@rawlines=<dbfile>;
close(dbfile);

my @cleanlist = grep(/^\d{4}-\d{2}-\d{2}/,@rawlines);
chomp @cleanlist;

my %datestruct;
my %packagestruct;
for ($t=0; $t<scalar(@cleanlist); $t++) {
   my ($date,$status,$pkg,$version,$dummy) = (split('\|',$cleanlist$t]))[0..4];
   next if ($dummy eq "");
   $packagestruct{$pkg} .= sprintf("
  %-10s%-26s (%s)",$status,$version, $date);
   $date =~ s/\d{2}:\d{2}:\d{2}$//;
   $datestruct{$date} .= sprintf("
  %-10s%-50s (%s)",$status,$pkg, $version);
}

if ($disptype =~ /pkg|package|rpm/i) {
   #sort the package structure alphabetically
   my @keys = sort { lc($a) cmp lc($b) } keys %packagestruct;
   for ($t=0; $t<scalar(@keys); $t++) {
	   my $keyname = @keys$t];
	   printf("%s %s
",$keyname,$packagestruct{$keyname});
   };
}else{
   my @keys = sort { lc($a) cmp lc($b) } keys %datestruct;
   for ($t=0; $t<scalar(@keys); $t++) {
	   my $keyname = @keys$t];
	   print qq{$keyname
  $datestruct{$keyname} };
	}
}

**sample output:**
**(grouped by date)**

2009-11-18                                                                                               
  install   openssl                                            (0.9.8k-3.5.3)               
  install   libmysqlclient_r16                                 (5.1.36-61.3)                
  install   libmysqlclient16                                   (5.1.36-61.3)                
  install   openssl-certs                                      (0.9.8h-28.2.1)              
  install   mysql-client                                       (5.1.36-61.3)
  install   MyODBC-unixODBC                                    (3.51.27r695-12.1)
  install   mysql                                              (5.1.36-61.3)

2009-11-19
  install   java-1_6_0-sun                                     (1.6.0.u17-1.1.1)
  install   java-1_6_0-sun-alsa                                (1.6.0.u17-1.1.1)
  install   java-1_6_0-sun-plugin                              (1.6.0.u17-1.1.1)
  install   java-1_6_0-sun-jdbc                                (1.6.0.u17-1.1.1)
  install   mozilla-xulrunner192                               (1.9.2b3-2.1)
  install   MozillaFirefox                                     (3.6b3-2.1)
  install   mozilla-xulrunner192-gnomevfs                      (1.9.2b3-2.1)
  remove    java-1_6_0-openjdk-plugin                          (1.6.0.0_b16-5.9.4)
  remove    java-1_6_0-openjdk                                 (1.6.0.0_b16-5.9.4)


**(Sorted by application name)**

a2ps
  install   4.13-1329.3                (2009-11-02 20:30:03)
aaa_base
  install   11.2-43.45.1               (2009-11-02 20:29:13)
aalib
  install   1.4.0-478.3                (2009-11-13 01:05:53)
acl
  install   2.2.48-2.2                 (2009-11-02 20:27:39)
acpica
  install   20090320-3.3               (2009-11-02 20:27:05)
acpid
  install   1.0.10-4.2                 (2009-11-02 20:28:40)

Neat!
I’ve been missing this kind of a command line tool for package install history.
Thanks :slight_smile: