+
+fix_rpm() {
+ echo "* Checking for stuck rpm processes"
+
+ yum_count=`pgrep -f "yum clean all" | wc -l`
+
+ if [[ $yum_count -ge 2 ]]; then
+ echo "* $yum_count yum processes found"
+
+ # kill rpm processes, attempt up to 10 times and then give up
+ try_count=0
+ rpm_count=`pgrep "rpm|yum" | wc -l`
+ while [[ $rpm_count -gt 0 ]]; do
+ echo "* killing rpm/yum processes"
+ killall -9 rpm rpmd rpmq rpmk yum
+ sleep 1
+ rpm_count=`pgrep "rpm|yum" | wc -l`
+ try_count=`expr $try_count + 1`
+ if [[ $try_count -ge 10 ]]; then
+ echo "* failed to kill rpm processes"
+ return
+ fi
+ done
+
+ # remove lock files
+ echo "* deleting rpm lock files"
+ rm -f /var/lib/rpm/__*
+
+ # rebuild rpm database
+ echo "* rebuilding rpm database"
+ rpm --rebuilddb
+
+ echo "* rpm repair sequence complete"
+
+ fi
+}
+