RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Per Øyvind Karlsen Root: /v/rpm/cvs Email: pkarl...@rpm5.org Module: rpm Date: 16-Nov-2010 22:34:28 Branch: HEAD Handle: 2010111621342700 Modified files: rpm/scripts dbconvert.sh Log: fix script to work from %posttrans (although awkwardly, room for improval!) Summary: Revision Changes Path 1.6 +33 -9 rpm/scripts/dbconvert.sh ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/scripts/dbconvert.sh ============================================================================ $ cvs diff -u -r1.5 -r1.6 dbconvert.sh --- rpm/scripts/dbconvert.sh 16 Nov 2010 13:31:19 -0000 1.5 +++ rpm/scripts/dbconvert.sh 16 Nov 2010 21:34:27 -0000 1.6 @@ -1,6 +1,7 @@ TIMESTAMP="$(LC_TIME=C date -u +%F_%R)" BACKUP="${BACKUP:-/var/tmp/rpmdb-$TIMESTAMP}" OLDDB="${OLDDB:-/var/tmp/olddb}" +NEWDB="${NEWDB:-/var/tmp/newdb}" DBHOME="${DBHOME:-/var/lib/rpm}" DBFORCE=${DBFORCE:-0} @@ -19,7 +20,7 @@ if [ "$($DB_STAT -f -d "$DBHOME/Packages" |grep -e 'Btree magic number' -e 'Big-endian' -c)" == 2 ] && \ rpm --dbpath "$DBHOME" -qa &> /dev/null && rpm --dbpath "$DBHOME" -q rpm &> /dev/null; then if [ "$DBFORCE" == 0 ]; then - echo "rpmdb already converted, set variable DBFORCE=1 to force" + #echo "rpmdb already converted, set variable DBFORCE=1 to force" exit 0 fi fi @@ -62,14 +63,33 @@ exit 1 fi +DB_UPGRADE="$(which db51_upgrade 2> /dev/null)" +if [ -z "$DB_UPGRADE" -a ! -x "$DB_UPGRADE" ]; then + DB_UPGRADE="$(which db_upgrade 2> /dev/null)" +fi +if [ -x "$DB_UPGRADE" ]; then + echo "Found $DB_UPGRADE" +else + echo "Unable to locate db_load" + exit 1 +fi + +DB_UPGRADE_VERSION="$($DB_UPGRADE -V |sed 's/^Berkeley DB \([0-9]\+\.[0-9]\+\).*/\1/')" +if [ "$DB_LOAD_VERSION" == 5.1 ]; then + echo "$DB_UPGRADE version $DB_UPGRADE_VERSION ok" +else + echo "Incompatible db_load version ($DB_UPGRADE_VERSION) found, 5.1.* required" + exit 1 +fi + echo "Converting system database." -rm -rf "$OLDDB" -mkdir -p {"$OLDDB","$DBHOME"}/{log,tmp} +rm -rf "$OLDDB" "$NEWDB" +mkdir -p {"$OLDDB","$NEWDB"}/{log,tmp} if [ "$DBHOME" != "/var/lib/rpm" ]; then if [ -f /var/lib/rpm/DB_CONFIG ]; then - cp /var/lib/rpm/DB_CONFIG "$DBHOME/DB_CONFIG" + cp /var/lib/rpm/DB_CONFIG "$NEWDB/DB_CONFIG" else - tee "$DBHOME/DB_CONFIG" << EOH + tee "$NEWDB/DB_CONFIG" << EOH # ================ Environment #add_data_dir . set_data_dir . @@ -130,17 +150,21 @@ rpm \ --dbpath "$OLDDB" \ --rebuilddb -vv +echo "--> upgrading bdb version" +$DB_UPGRADE -v -h "$OLDDB" Packages +echo "--> resetting the database's file log sequence numbers" +$DB_LOAD -r lsn -h "$OLDDB" Packages echo "--> convert header instances to network order" $DB_DUMP -h "$OLDDB" Packages \ | sed \ -e 's/^type=hash$/type=btree/' \ -e '/^h_nelem=/d' \ -e 's/^ \(..\)\(..\)\(..\)\(..\)$/ \4\3\2\1/' \ - | $DB_LOAD -c db_lorder=4321 -h "$DBHOME" Packages - $DB_LOAD -r lsn -h "$DBHOME" Packages + | $DB_LOAD -c db_lorder=4321 -h "$NEWDB" Packages +mv "$NEWDB/Packages" "$DBHOME/Packages" echo "--> regenerate the indices" rpm \ - --dbpath $DBHOME \ + --dbpath "$DBHOME" \ --rebuilddb -vv echo "--> test the conversion" [ -n "$(rpm -qa)" ] && \ @@ -158,4 +182,4 @@ mv -vf "$BACKUP"/* "$DBHOME"/ rmdir "$BACKUP" fi -rm -rf "$OLDDB" +rm -rf "$OLDDB" "$NEWDB" @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org