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:   11-Nov-2010 22:17:29
  Branch: rpm-5_3                          Handle: 2010111121172800

  Added files:              (Branch: rpm-5_3)
    rpm/scripts             dbconvert.sh
  Modified files:           (Branch: rpm-5_3)
    rpm                     CHANGES

  Log:
    add a first prototype scripts/dbconvert.sh for handling rpmdb
    conversion during upgrades.

  Summary:
    Revision    Changes     Path
    1.3296.2.121+2  -0      rpm/CHANGES
    1.1.2.2     +139 -0     rpm/scripts/dbconvert.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.3296.2.120 -r1.3296.2.121 CHANGES
  --- rpm/CHANGES       11 Nov 2010 19:30:59 -0000      1.3296.2.120
  +++ rpm/CHANGES       11 Nov 2010 21:17:28 -0000      1.3296.2.121
  @@ -1,4 +1,6 @@
   5.3.5 -> 5.3.6:
  +    - proyvind: add a first prototype scripts/dbconvert.sh for handling rpmdb
  +        conversion during upgrades.
       - jbj: cooker: fix: legacy RPM_CHAR_TYPE needs to be retrofitted on 
--erase.
       - jbj: openssl: older openssl-0.9.7a uses OPENSSL_NO_EC disabler.
       - jbj: openssl: older openssl-0.9.7a lacks 2 keygen methods.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/scripts/dbconvert.sh
  ============================================================================
  $ cvs diff -u -r0 -r1.1.2.2 dbconvert.sh
  --- /dev/null 2010-11-11 22:16:04.000000000 +0100
  +++ dbconvert.sh      2010-11-11 22:17:29.258053152 +0100
  @@ -0,0 +1,139 @@
  +TIMESTAMP="$(LC_TIME=C date -u +%F_%R)"
  +BACKUP="/var/tmp/rpmdb-$TIMESTAMP"
  +OLDDB="/var/tmp/olddb"
  +DBPATH="${DBPATH:-/var/lib/rpm}"
  +
  +DB_DUMP="$(which db51_dump 2> /dev/null)"
  +if [ -z "$DB_DUMP" -a ! -x "$DB_DUMP" ]; then
  +    DB_DUMP="$(which db_dump 2> /dev/null)"
  +fi
  +if [ -x "$DB_DUMP" ]; then
  +    echo "Found $DB_DUMP"
  +else
  +    echo "Unable to locate db_dump"
  +    exit 1
  +fi
  +
  +DB_DUMP_VERSION="$($DB_DUMP -V |sed 's/^Berkeley DB 
\([0-9]\+\.[0-9]\+\).*/\1/')"
  +if [ "$DB_DUMP_VERSION" == 5.1 ]; then
  +    echo "$DB_DUMP version $DB_DUMP_VERSION ok"
  +else
  +    echo "Incompatible db_dump version ($DB_DUMP_VERSION) found, 5.1.* 
required"
  +    exit 1
  +fi
  +
  +DB_LOAD="$(which db51_load 2> /dev/null)"
  +if [ -z "$DB_LOAD" -a ! -x "$DB_LOAD" ]; then
  +    DB_LOAD="$(which db_load 2> /dev/null)"
  +fi
  +if [ -x "$DB_LOAD" ]; then
  +    echo "Found $DB_LOAD"
  +else
  +    echo "Unable to locate db_load"
  +    exit 1
  +fi
  +
  +DB_LOAD_VERSION="$($DB_LOAD -V |sed 's/^Berkeley DB 
\([0-9]\+\.[0-9]\+\).*/\1/')"
  +if [ "$DB_LOAD_VERSION" == 5.1 ]; then
  +    echo "$DB_LOAD version $DB_LOAD_VERSION ok"
  +else
  +    echo "Incompatible db_load version ($DB_LOAD_VERSION) found, 5.1.* 
required"
  +    exit 1
  +fi
  +
  +echo "Converting system database."
  +rm -rf $OLDDB
  +mkdir -p {$OLDDB,$DBPATH}/{log,tmp}
  +if [ "$DBPATH" != "/var/lib/rpm" ]; then
  +    if [ -f /var/lib/rpm/DB_CONFIG ]; then
  +     cp /var/lib/rpm/DB_CONFIG $DBPATH/DB_CONFIG
  +    else
  +     tee $DBPATH/DB_CONFIG << EOH
  +# ================ Environment
  +#add_data_dir                .
  +set_data_dir         .
  +set_create_dir               .
  +set_lg_dir           ./log
  +set_tmp_dir          ./tmp
  +
  +# -- thread_count must be >= 8
  +set_thread_count     64
  +
  +#set_verbose         DB_VERB_DEADLOCK
  +#set_verbose         DB_VERB_FILEOPS
  +#set_verbose         DB_VERB_FILEOPS_ALL
  +#set_verbose         DB_VERB_RECOVERY
  +#set_verbose         DB_VERB_REGISTER
  +#set_verbose         DB_VERB_REPLICATION
  +#set_verbose         DB_VERB_REP_ELECT
  +#set_verbose         DB_VERB_REP_LEASE
  +#set_verbose         DB_VERB_REP_MISC
  +#set_verbose         DB_VERB_REP_MSGS
  +#set_verbose         DB_VERB_REP_SYNC
  +#set_verbose         DB_VERB_REP_TEST
  +#set_verbose         DB_VERB_REPMGR_CONNFAIL
  +#set_verbose         DB_VERB_REPMGR_MISC
  +#set_verbose         DB_VERB_WAITSFOR
  +
  +# ================ Logging
  +
  +# ================ Memory Pool
  +#XXX initializing dbenv with set_cachesize has unimplemented prerequsites
  +#set_cachesize               0 1048576 0 
  +set_mp_mmapsize              16777216
  +
  +# ================ Locking
  +set_lk_max_locks     16384
  +set_lk_max_lockers   16384
  +set_lk_max_objects   16384
  +mutex_set_max                163840
  +
  +# ================ Replication
  +EOH
  +    fi
  +fi
  +
  +echo "--> copy the system rpmdb"
  +cp $DBPATH/Packages $OLDDB
  +echo "--> move old rpmdb files to $BACKUP"
  +mkdir -p $BACKUP
  +for db in \
  +    Arch Filepaths Name Os Providename Release Seqno Sourcepkgid \
  +    Basenames Dirnames Group Nvra Packagecolor Provideversion Requirename 
Sha1header \
  +    Triggername Conflictname Filedigests Installtid Obsoletename Packages 
Pubkeys \
  +    Requireversion Sigmd5 Version; do
  +     test -f $DBPATH/$db && mv $DBPATH/$db $BACKUP/$db
  +    done
  +
  +echo "--> rebuild to renumber the header instances"
  +rpm \
  +    --dbpath $OLDDB \
  +    --rebuilddb -vv
  +echo "--> convert header instances to network order"
  +/usr/bin/db51_dump $OLDDB/Packages \
  +    | sed \
  +    -e 's/^type=hash$/type=btree/' \
  +    -e '/^h_nelem=/d' \
  +    -e 's/^ \(..\)\(..\)\(..\)\(..\)$/ \4\3\2\1/' \
  +    | /usr/bin/db51_load $DBPATH/Packages
  +echo "--> regenerate the indices"
  +rpm \
  +    --dbpath $DBPATH \
  +    --rebuilddb -vv
  +echo "--> test the conversion"
  +[ -n "$(rpm -qa)" ] && \
  +    rpm -q rpm &> /dev/null
  +if [ $? -eq 0 ]; then
  +    echo "Conversion succesful"
  +    /usr/bin/db51_checkpoint -1 -h $DBPATH
  +    /usr/bin/db51_recover -h $DBPATH
  +    /usr/bin/db51_verify $DBPATH/Packages
  +else
  +    echo "Conversion failed"
  +    echo "--> Renaming unsuccesful $DBPATH/Packages to 
$DBPATH/Packages.failed"
  +    mv -f $DBPATH/Packages $DBPATH/Packages.failed
  +    echo "--> Restoring backup of old rpmdb files from $BACKUP"
  +    mv -vf $BACKUP/* $DBPATH/
  +    rmdir $BACKUP
  +fi
  +rm -rf $OLDDB
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to