diff options
Diffstat (limited to 'scripts/rpmdb_loadcvt')
-rwxr-xr-x | scripts/rpmdb_loadcvt | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/scripts/rpmdb_loadcvt b/scripts/rpmdb_loadcvt new file mode 100755 index 0000000..aa70106 --- /dev/null +++ b/scripts/rpmdb_loadcvt @@ -0,0 +1,69 @@ +#!/bin/bash + +ac=$# +cmd=`basename $0` + +rpmdb=/var/lib/rpm +dbfiles="`/bin/ls -1 $rpmdb/*`" +dbdump=/usr/lib/rpm/rpmdb_dump +dbload=/usr/bin/db_load + +set `$dbdump -V` || { + echo "The file $dbdump, usually in the rpm-devel package, is needed." + echo " Please install the rpm-devel package and retry $cmd." + exit 1 +} +dumpfmt="${5%%:}" + +set `$dbload -V` || { + echo "The file $dbload, usually in the db4-utils package, is needed." + echo " Please install the db4_utils package and retry $cmd." + exit 1 +} +loadfmt="${5%%:}" + +[ "$dumpfmt" = "$loadfmt" ] && { + echo "Both $dbdump and $dbload use db-$loadfmt format." + echo "No conversion is possible." + exit 0 +} + +[ "$ac" != "0" -o "`/usr/bin/id -u`" != "0" ] && { + echo "$cmd: Convert $rpmdb files to db-$loadfmt format." + echo "$cmd: Must be run as root, takes no arguments." + exit 1 +} + +echo "Converting to db-$loadfmt compatible format (1-10 minutes per file) ..." + +dbfile= +trap " + [ -n "$dbfile" ] && { + [ -f $dbfile-O ] && /bin/mv $dbfile-O $dbfile + /bin/rm -f $dbfile-N + } + exit 1 +" 1 2 3 15 + +rm -f $rpmdb/__db* + +for dbfile in $dbfiles +do + echo " `/usr/bin/file $dbfile`" + + $dbdump $dbfile | $dbload $dbfile-N || { + echo "Failed conversion:" + echo " $dbdump $dbfile | $dbload $dbfile-N" + echo "Cleaning up and exiting ..." + /bin/rm -f $dbfile-N + exit 1 + } + + /bin/mv $dbfile $dbfile-O + /bin/mv $dbfile-N $dbfile + /bin/rm -f $dbfile-O +done + +echo "Done!" + +exit 0 |