[lxc-devel] [PATCH] oracle template: improve compatibility with old ol4, 5

Dwight Engen dwight.engen at oracle.com
Mon Feb 4 23:51:47 UTC 2013


Reported-by: Alvaro Miranda <mirandaa at redrock.net.nz>
Signed-off-by: Dwight Engen <dwight.engen at oracle.com>
---
 templates/lxc-oracle.in | 63 +++++++++++++++++++++++++++++++++++++------------
 1 file changed, 48 insertions(+), 15 deletions(-)

diff --git a/templates/lxc-oracle.in b/templates/lxc-oracle.in
index 95c6275..e6bf489 100644
--- a/templates/lxc-oracle.in
+++ b/templates/lxc-oracle.in
@@ -61,6 +61,7 @@ container_rootfs_configure()
     if [ -e $container_rootfs/etc/selinux/config ]; then
         sed -i 's|SELINUX=enforcing|SELINUX=disabled|' $container_rootfs/etc/selinux/config
     else
+	mkdir -p $container_rootfs/etc/selinux
         echo "SELINUX=disabled" >$container_rootfs/etc/selinux/config
     fi
     sed -i 's|session[ ]*required[ ]*pam_selinux.so[ ]*close|#session required pam_selinux.so close|' $container_rootfs/etc/pam.d/login
@@ -97,8 +98,10 @@ EOF
     echo "127.0.0.1 localhost $name" > $container_rootfs/etc/hosts
 
     # disable ipv6
-    echo "blacklist ipv6" >>$container_rootfs/etc/modprobe.d/blacklist.conf
-    echo "blacklist net-pf-10" >>$container_rootfs/etc/modprobe.d/blacklist.conf
+    if [ -f $container_rootfs/etc/modprobe.d/blacklist.conf ]; then
+        echo "blacklist ipv6" >>$container_rootfs/etc/modprobe.d/blacklist.conf
+        echo "blacklist net-pf-10" >>$container_rootfs/etc/modprobe.d/blacklist.conf
+    fi
     rm -f $container_rootfs/etc/sysconfig/network-scripts/init.ipv6-global
 
     # this file has to exist for libvirt/Virtual machine monitor to boot the container
@@ -132,8 +135,8 @@ EOF
         # dont attempt to set kernel parameters
         sed -i 's|action $"Configuring kernel parameters|# LXC action $"Configuring kernel parameters|' $container_rootfs/etc/rc.sysinit
         sed -i 's|action $"Configuring kernel parameters|# LXC action $"Configuring kernel parameters|' $container_rootfs/etc/rc.d/rc.sysinit
-        sed -i 's|action $"Setting network parameters|# LXC action $"Setting network parameters|' $container_rootfs/etc/init.d/network
-        sed -i 's|action $"Setting network parameters|# LXC action $"Setting network parameters|' $container_rootfs/etc/init.d/NetworkManager
+        sed -i 's|action $"Setting network parameters|# LXC action $"Setting network parameters|' $container_rootfs/etc/init.d/network 2>/dev/null
+        sed -i 's|action $"Setting network parameters|# LXC action $"Setting network parameters|' $container_rootfs/etc/init.d/NetworkManager 2>/dev/null
     fi
 
     # disable udev in the container
@@ -162,8 +165,8 @@ EOF
     else
         sed -i 's|\[ -x /sbin/hwclock|\[ 0 -eq 1|' $container_rootfs/etc/rc.d/init.d/halt
     fi
-    sed -i 's|/sbin/hwclock|# LXC no hwclock /sbin/hwclock|' $container_rootfs/etc/rc.sysinit
-    sed -i 's|/sbin/hwclock|# LXC no hwclock /sbin/hwclock|' $container_rootfs/etc/rc.d/rc.sysinit
+    sed -i 's|/sbin/hwclock|/sbin/nohwclock|' $container_rootfs/etc/rc.sysinit
+    sed -i 's|/sbin/hwclock|/sbin/nohwclock|' $container_rootfs/etc/rc.d/rc.sysinit
 
     # dont start lvm
     sed -i 's|action $"Setting up Logical Volume Management:"|#action $"Setting up Logical Volume Management:"|' $container_rootfs/etc/rc.sysinit
@@ -388,7 +391,7 @@ container_rootfs_clone()
 container_rootfs_create()
 {
     cmds="rpm wget yum"
-    if [ $container_release_major = "5" ]; then
+    if [ $container_release_major -lt "6" ]; then
         if [ $host_distribution = "Ubuntu" ]; then
             db_dump_cmd="db5.1_dump"
             db_load_cmd="db4.3_load"
@@ -423,7 +426,9 @@ container_rootfs_create()
         else
             yum_url=http://public-yum.oracle.com
         fi
-        if   [ $container_release_major = "5" ]; then
+        if   [ $container_release_major = "4" ]; then
+            repofile=public-yum-el4.repo
+        elif [ $container_release_major = "5" ]; then
             repofile=public-yum-el5.repo
         elif [ $container_release_major = "6" ]; then
             repofile=public-yum-ol6.repo
@@ -447,15 +452,25 @@ container_rootfs_create()
 
         # disable all repos, then enable the repo for the version we are installing.
         if [ $container_release_minor = "latest" ]; then
-            if [ $container_release_major = "5" ]; then
-        repo="el"$container_release_major"_"$container_release_minor
+            if [ $container_release_major = "4" -o $container_release_major = "5" ]; then
+                repo="el"$container_release_major"_"$container_release_minor
             else
                 repo="ol"$container_release_major"_"$container_release_minor
             fi
         elif [ $container_release_minor = "0" ]; then
             repo="ol"$container_release_major"_ga_base"
-        else
+        elif [ $container_release_major = "6" ]; then
             repo="ol"$container_release_major"_u"$container_release_minor"_base"
+        elif [ $container_release_major = "5" ]; then
+            if [ $container_release_minor -lt "6" ]; then
+                repo="el"$container_release_major"_u"$container_release_minor"_base"
+            else
+                repo="ol"$container_release_major"_u"$container_release_minor"_base"
+            fi
+        elif [ $container_release_major = "4" -a $container_release_minor -gt "5" ]; then
+            repo="el"$container_release_major"_u"$container_release_minor"_base"
+        else
+            die "Unsupported release $container_release_major.$container_release_minor"
         fi
         sed -i "s|enabled=1|enabled=0|" $container_rootfs/etc/yum.repos.d/$repofile
         sed -i "/\[$repo\]/,/\[/ s/enabled=0/enabled=1/" $container_rootfs/etc/yum.repos.d/$repofile
@@ -477,8 +492,15 @@ container_rootfs_create()
         # runs right. similarly, libutempter depends on libselinux.so.1 when
         # it runs /usr/sbin/groupadd, so reinstall it too
         if [ $container_release_major = "5" ]; then
-            rpm --root $container_rootfs --nodeps -e rsyslog pam libutempter
-            $yum_cmd install rsyslog pam libutempter
+            redo_pkgs="pam"
+            if [ $container_release_minor -gt "1" ]; then
+                redo_pkgs="$redo_pkgs rsyslog"
+            fi
+            if [ $container_release_minor -gt "5" ]; then
+                redo_pkgs="$redo_pkgs libutempter"
+            fi
+            rpm --root $container_rootfs --nodeps -e $redo_pkgs
+            $yum_cmd install $redo_pkgs
             if [ $? -ne 0 ]; then
                 die "Unable to reinstall packages"
             fi
@@ -494,7 +516,7 @@ container_rootfs_create()
         # 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 [ $container_release_major = "5" -a $db_version != "8" ]; then
+        if [ $container_release_major -lt "6" -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
@@ -508,6 +530,13 @@ container_rootfs_create()
         echo "Rebuilding rpm database"
         rm -f $container_rootfs/var/lib/rpm/__db*
         chroot $container_rootfs rpm --rebuilddb >/dev/null 2>&1
+
+        # doing the yum install with release 4 packages causes proc in the
+        # container to be mounted, which makes lxc-destroy fail.
+        if [ $container_release_major = "4" ]; then
+            umount $container_rootfs/proc
+        fi
+
     ) 200>@LOCALSTATEDIR@/lock/subsys/lxc-oracle-$name
 }
 
@@ -517,10 +546,14 @@ container_release_get()
         container_release_version=`cat $1/etc/oracle-release |awk '/^Oracle/ {print $5}'`
         container_release_major=`echo $container_release_version |awk -F '.' '{print $1}'`
         container_release_minor=`echo $container_release_version |awk -F '.' '{print $2}'`
-    elif grep -q Nahant $1/etc/redhat-release; then
+    elif grep -q "Enterprise Linux AS" $1/etc/redhat-release; then
         container_release_major=`cat $1/etc/redhat-release |awk '{print $7}'`
         container_release_minor=`cat $1/etc/redhat-release |awk '{print $10}' |tr -d ")"`
         container_release_version="$container_release_major.$container_release_minor"
+    elif grep -q "Enterprise Linux Server" $1/etc/redhat-release; then
+        container_release_version=`cat $1/etc/redhat-release |awk '{print $7}'`
+        container_release_major=`echo $container_release_version |awk -F '.' '{print $1}'`
+        container_release_minor=`echo $container_release_version |awk -F '.' '{print $2}'`
     else
         echo "Unable to determine container release version"
         exit 1
-- 
1.7.12.3





More information about the lxc-devel mailing list