#!/bin/bash # # usage: check2updates # # Examines each update file to see if it is newer than one in the master set. # If it is, then the older one is removed and the update copied to the master # set. # # If an update package is found that is not in the master set, its name is # placed in the file "new_rpms.list" for you to manually deal with. # # first some Constants MASTER_FILES="masterfiles.list" UPDATE_FILES="updatefiles.list" SELECT_FILES="selections.list" NEW_RPMS="new_rpms.list" # and variables masterfile="" mastername="" masterversion="" masterrelease="" updatefile="" updatename="" updateversion="" updaterelease="" master="" master4="" updates="" # then some functions decide_action () { missing=0 for masterfile in `cat $SELECT_FILES` do if [ "`basename $masterfile`" = "$updatefile" ]; then return 2 fi get_master_info "$masterfile" if [ "$mastername" = "$updatename" ]; then missing=1 # this is the right one if [ `expr $masterversion \< $updateversion` = "1" ]; then return 0 elif [ "$masterversion" = "$updateversion" ]; then if [ `expr $masterrelease \< $updaterelease` = "1" ]; then return 0 fi fi return 2 fi done if [ $missing -eq 0 ]; then # update has no match in master list return 1 fi # no need to update this one return 2 } get_update_info () { # $1 is name of package to query updatename=`rpm -qp --nosignature --queryformat %{NAME} $1` updateversion=`rpm -qp --nosignature --queryformat %{VERSION} $1` updaterelease=`rpm -qp --nosignature --queryformat %{RELEASE} $1 | sed s/mdk//` } get_master_info () { # $1 is name of package to query mastername=`rpm -qp --nosignature --queryformat %{NAME} $1` masterversion=`rpm -qp --nosignature --queryformat %{VERSION} $1` masterrelease=`rpm -qp --nosignature --queryformat %{RELEASE} $1 | sed s/mdk//` } # # # finally the main entry point # if [ $# -ne 3 ]; then echo "usage: " exit 1 fi if [ ! -d "$1" ]; then echo "Need directory name for Master RPMS." exit 1 fi master="$1" if [ ! -d "$2" ]; then echo "Need directory name for Master RPMS4." exit 1 fi master4="$2" if [ ! -d "$3" ]; then echo "Need directory name for Update RPMS." exit 1 fi updates="$3" #clean up old files from previous runs rm -f $NEW_RPMS # create list of Update RPMS ls $updates/* | sed 's|'$updates'/||' > $UPDATE_FILES # and for the master RPMS ls $master/* > $MASTER_FILES ls $master4/* >> $MASTER_FILES # lets do it for updatefile in `cat $UPDATE_FILES` do # get update package info echo "Check status of update package: $updatefile." get_update_info "$updates/$updatefile" grep ".*/$updatename" $MASTER_FILES > $SELECT_FILES if [ $? -eq 0 ]; then decide_action result=$? case $result in 0) # replace, new update echo " Replacing `basename $masterfile` with $updatefile" rm -f $masterfile cp "$updates/$updatefile" "`dirname $masterfile`/" ;; 1) # missing from master list echo " Update does not exist in the Master File Set: $updatefile" echo "$updatefile" >> $NEW_RPMS ;; *) # skip, update already in Master, but make sure it really is.. if [ ! "`basename $masterfile`" = "$updatefile" ]; then echo " ERROR Skipping Master file: $masterfile" fi ;; esac else # the update is a new package, report and add to new list echo " Update does not exist in the Master File Set: $updatefile" echo "$updatefile" >> $NEW_RPMS fi done # clean up junk files rm -f $MASTER_FILES rm -f $UPDATE_FILES rm -f $SELECT_FILES exit 0 #