#!/bin/bash
#
# bog@company.ru 20000710
# adapted (RPM4) 20011206
# adapted (yum)  20080606
#
# какие пакеты установлены, могли быть установлены, из дистрибутива, из update, посторонние

root=$1
rpmdb_installed=${root}/var/lib/rpm
if [ -f ${rpmdb_installed}/packages.rpm ]
then
  installed_db='_dbapi 1'
else
  installed_db='_dbapi 3'
fi

if [ -d /usr/lib/rpmdb/i386-redhat-linux/redhat ]
then
  rpmdb_distr=${root}/usr/lib/rpmdb/i386-redhat-linux/redhat
  if [ -f ${rpmdb_distr}/packages.rpm ]
  then
    distr_db='_dbapi 1'
  else
    distr_db='_dbapi 3'
  fi
else 
  if [ -d /usr/lib/rpmdb/i386-redhat-linux/CentOS ]
  then
    rpmdb_distr=${root}/usr/lib/rpmdb/i386-redhat-linux/CentOS
    distr_db='_dbapi 3'
  fi
fi

if [ -z "$rpmdb_distr" ]
then
  yum -d 0 list installed | awk '{print $1, $2}' | sort > rpm.installed.list
else
  rpm --define "$installed_db" -qa --dbpath ${rpmdb_installed} --qf '%{NAME} %{VERSION} %{RELEASE}\n' | sort > rpm.installed.list
  rpm --define "$distr_db" -qa --dbpath ${rpmdb_distr} --qf '%{NAME} %{VERSION} %{RELEASE}\n' | sort > rpm.distr.list
  comm -1 -3 rpm.distr.list rpm.installed.list > rpm.nonorig.list
  comm -2 -3 rpm.installed.list rpm.nonorig.list > rpm.orig.list

  rm -f rpm.updated.list rpm.added.list
  cat rpm.nonorig.list | while read pkgname pkgversion pkgrelease; do
    if rpm --define "$distr_db" -q --dbpath ${rpmdb_distr} $pkgname > /dev/null 2>/dev/null
    then
      echo $pkgname $pkgversion $pkgrelease >> rpm.updated.list
    else
      echo $pkgname $pkgversion $pkgrelease >> rpm.added.list
    fi
  done
fi

