SOURCES: util-vserver-dbrebuild-internalize4.patch (NEW) - patch to rebuild...

glen glen at pld-linux.org
Fri Nov 21 13:13:11 CET 2008


Author: glen                         Date: Fri Nov 21 12:13:11 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- patch to rebuild rpmdb when internalize/externalize is made to overcame db version mismatch problems with guest and host

---- Files affected:
SOURCES:
   util-vserver-dbrebuild-internalize4.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/util-vserver-dbrebuild-internalize4.patch
diff -u /dev/null SOURCES/util-vserver-dbrebuild-internalize4.patch:1.1
--- /dev/null	Fri Nov 21 13:13:12 2008
+++ SOURCES/util-vserver-dbrebuild-internalize4.patch	Fri Nov 21 13:13:06 2008
@@ -0,0 +1,109 @@
+--- util-vserver-0.30.215/scripts/pkgmgmt	2008-11-17 20:58:47.120292384 +0200
++++ util-vserver-0.30.215/scripts/pkgmgmt	2008-11-17 22:47:02.486514626 +0200
+@@ -185,6 +185,43 @@
+     test -n "$is_ok"
+ }
+ 
++## Usage: verifyDBTools <vdir> <type> <host_tool> <guest_tool>
++function verifyDBTools
++{
++    local vdir="$1"
++    local type="$2"
++    local host_tool="$3"
++    local guest_tool="$4"
++    local res=0
++
++    local i host_path guest_path
++    for i in /bin /usr/bin /usr/lib/rpm /usr/local/bin; do
++	test ! -x "$i"/$host_tool || { host_path="$i"/$host_tool; break; }
++    done
++    for i in /bin /usr/bin /usr/lib/rpm /usr/local/bin; do
++	test ! -x "$vdir$i"/$guest_tool || { guest_path="$i"/$guest_tool; break; }
++    done
++
++    test -n "$host_path" || {
++	warning "
++* The host does not seem to have the '$host_tool' program which is required
++  for $type package management. It is suggested to install it before
++  continuing."
++	res=1
++    }
++    test -n "$guest_path" || {
++	warning "
++* The vserver does not seem to have the '$guest_tool' program which is required
++  for $type package management. It is suggested to install it before
++  continuing."
++	res=1
++    }
++
++    eval $host_tool=$host_path
++    eval $guest_tool=$guest_path
++    return $res
++}
++
+ # Usage: verifyInternalPackages <vserver> <style>
+ function verifyInternalPackages()
+ {
+@@ -392,7 +429,12 @@
+ 	verifyInternalPackages "$vserver" RH || test -n "$IS_FORCE" ||
+ 	    panic "
+ Can not continue; use '--force' to override this check"
++
++	verifyDBTools "$vdir" 'internal' db_dump db_load || test -n "$IS_FORCE" ||
++	    panic "
++Can not continue; use '--force' to override this check"
+     
++
+ 	pushd "$vdir" >/dev/null
+ 
+ 	test ! -L var/lib/rpm || {
+@@ -416,6 +458,10 @@
+ 	findDir RPMETCDIR   "$cfgdir"/rpmetc   "$cfgdir"/base/rpm/etc    /etc/rpm /
+ 	findDir RPMSTATEDIR "$cfgdir"/rpmstate "$cfgdir"/base/rpm/state
+     else
++	verifyDBTools "$vdir" 'external' db_load db_dump || test -n "$IS_FORCE" ||
++	    panic "
++Can not continue; use '--force' to override this check"
++
+ 	mkdir -m755 -p "$cfgdir"
+ 	local need_base=
+ 
+@@ -460,8 +506,38 @@
+ 	pushd "$vdir" >/dev/null
+ 	    ## remove %_dbpath settings
+ 	    _substFile /etc/rpm/macros '/^%_dbpath[ \t].*/D'
++
++	    # dump and reload rpmdb to overcome db version mismatch problems
++	    if [ "$db_load" -a "$db_dump" ]; then
++		# dump with host db_dump
++		$db_dump var/lib/rpm/Packages > var/lib/rpm/.Packages.dump
++
++		# load with guest db_load.
++		$_RM -f var/lib/rpm/__db.*
++		mv var/lib/rpm/{Packages,.Packages.ORIG}
++		chroot . $db_load var/lib/rpm/Packages < var/lib/rpm/.Packages.dump
++		chroot . bin/rpm --rebuilddb 2>/dev/null
++		rm -f var/lib/rpm/.Packages.*
++	    fi
++
+ 	popd >/dev/null
+     else
++
++	pushd "$vdir" >/dev/null
++	    if [ "$db_load" -a "$db_dump" ]; then
++		# dump and reload rpmdb to overcome db version mismatch problems
++
++		# dump with guest db_dump
++		$_RM -f var/lib/rpm/__db.*
++		chroot . $db_dump var/lib/rpm/Packages > var/lib/rpm/.Packages.dump
++
++		# load with host db_load
++		mv var/lib/rpm/{Packages,.Packages.ORIG}
++		$db_load var/lib/rpm/Packages < var/lib/rpm/.Packages.dump
++		rm -f var/lib/rpm/.Packages.*
++	    fi
++	popd >/dev/null
++
+ 	if test -n "$have_poldek"; then
+ 	    _copySecureRev "$vdir" /etc/poldek "$POLDEKETCDIR"
+ 	    _unhashAuto "$POLDEKETCDIR"/poldek.conf '/'
================================================================


More information about the pld-cvs-commit mailing list