Use the file command to see if the rpm database version needs to
be downgraded. Use the lsb_release command to determine the host
system, which is then used to set the commands needed to do the
conversion, and lets us move the rpm database to the correct location
if the host rpm doesn't put it where the guest expects it to be.

Signed-off-by: Dwight Engen <dwight.en...@oracle.com>
---
 templates/lxc-oracle.in |   43 ++++++++++++++++++++++++++++++++++---------
 1 files changed, 34 insertions(+), 9 deletions(-)

diff --git a/templates/lxc-oracle.in b/templates/lxc-oracle.in
index e13f13b..ba62f8f 100644
--- a/templates/lxc-oracle.in
+++ b/templates/lxc-oracle.in
@@ -304,7 +304,17 @@ container_rootfs_create()
 {
     cmds="rpm wget yum"
     if [ $release_major = "5" ]; then
-       cmds="$cmds db_dump db43_load"
+       if [ $host_distribution = "Ubuntu" ]; then
+           db_dump_cmd="db5.1_dump"
+           db_load_cmd="db4.3_load"
+       fi
+       if [ $host_distribution = "OracleServer" -o \
+            $host_distribution = "Fedora" ]; then
+           db_dump_cmd="db_dump"
+           db_load_cmd="db43_load"
+       fi
+
+       cmds="$cmds $db_dump_cmd $db_load_cmd file"
     fi
     for cmd in $cmds; do
        which $cmd >/dev/null 2>&1
@@ -385,13 +395,21 @@ container_rootfs_create()
            fi
        fi
 
-       # if we're on 6 and installing 5 we need to fix up the rpm database
-       # since 5 uses an older db format
-       if [ $release_major = "5" -a $host_release_major = "6" ]; then
-           echo "Fixing (downgrading) rpm database"
+       # these distributions put the rpm database in a place the guest is
+       # not expecting it, so move it
+       if [ $host_distribution = "Ubuntu" ]; then
+           mv $container_rootfs/root/.rpmdb/* $container_rootfs/var/lib/rpm
+       fi
+
+       # if the native rpm created the db with Hash version 9, we need to
+       # downgrade it to Hash version 8 for use with OL5.x
+       db_version=`file $container_rootfs/var/lib/rpm/Packages | \
+                   grep -o 'version [0-9]*' |awk '{print $2}'`
+       if [ $release_major = "5" -a $db_version != "8" ]; then
+           echo "Fixing (downgrading) rpm database from version $db_version"
            rm -f $container_rootfs/var/lib/rpm/__db*
            for db in $container_rootfs/var/lib/rpm/* ; do
-               db_dump $db |db43_load $db.new
+               $db_dump_cmd $db |$db_load_cmd $db.new
                mv $db.new $db
            done
            chroot $container_rootfs rpm --rebuilddb
@@ -472,9 +490,16 @@ fi
 release_major=`echo $release_version |awk -F '.' '{print $1}'`
 release_minor=`echo $release_version |awk -F '.' '{print $2}'`
 
-host_release_version=`cat /etc/oracle-release |awk '/^Oracle/ {print $5}'`
-host_release_major=`echo $host_release_version |awk -F '.' '{print $1}'`
-host_release_minor=`echo $host_release_version |awk -F '.' '{print $2}'`
+if which lsb_release >/dev/null 2>&1; then
+    host_distribution=`lsb_release --id |awk '{print $3}'`
+    host_release_version=`lsb_release --release |awk '{print $2}'`
+    host_release_major=`echo $host_release_version |awk -F '.' '{print $1}'`
+    host_release_minor=`echo $host_release_version |awk -F '.' '{print $2}'`
+else
+    echo "Unable to determine host distribution, ensure lsb_release is 
installed"
+    exit 1
+fi
+echo "Host is $host_distribution $host_release_version"
 
 trap cleanup SIGHUP SIGINT SIGTERM
 
-- 
1.7.1


------------------------------------------------------------------------------
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to