Could you verify and make any appropriate modifications to it, and
also integrate the one referred to (if necessar/possible/relevant?) in
the mail with Shlomi?

Then I'll upload a new version to cooker. :)
2010/11/11 Per Ųyvind Karlsen <pkarl...@rpm5.org>:
>  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:14:09
>  Branch: HEAD                             Handle: 2010111121140900
>
>  Added files:
>    rpm/scripts             dbconvert.sh
>  Modified files:
>    rpm                     CHANGES
>
>  Log:
>    add a first prototype scripts/dbconvert.sh for handling rpmdb
>    conversion during upgrades.
>
>  Summary:
>    Revision    Changes     Path
>    1.3494      +2  -0      rpm/CHANGES
>    1.1         +139 -0     rpm/scripts/dbconvert.sh
>  ____________________________________________________________________________
>
>  patch -p0 <<'@@ .'
>  Index: rpm/CHANGES
>  ============================================================================
>  $ cvs diff -u -r1.3493 -r1.3494 CHANGES
>  --- rpm/CHANGES       3 Nov 2010 14:07:35 -0000       1.3493
>  +++ rpm/CHANGES       11 Nov 2010 21:14:09 -0000      1.3494
>  @@ -1,4 +1,6 @@
>   5.3.5 -> 5.4a1:
>  +    - proyvind: add a first prototype scripts/dbconvert.sh for handling 
> rpmdb
>  +     conversion during upgrades.
>       - jbj: rpmdb: double the defaults  for locking tunables.
>       - jbj: rpmdb: fix: don't bother excluding RPM_CHAR_TYPE sanity check.
>       - jbj: rpmdb: fix: don't bother converting to RPM_UINT8_TYPE.
>  @@ .
>  patch -p0 <<'@@ .'
>  Index: rpm/scripts/dbconvert.sh
>  ============================================================================
>  $ cvs diff -u -r0 -r1.1 dbconvert.sh
>  --- /dev/null 2010-11-11 22:11:01.000000000 +0100
>  +++ dbconvert.sh      2010-11-11 22:14:09.227464410 +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-...@rpm5.org
>
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
Developer Communication List                        rpm-devel@rpm5.org

Reply via email to