[Lxc-users] enable setting fedora container arch in the template creator"

rhanna at informatiq.org rhanna at informatiq.org
Wed Mar 14 19:42:01 UTC 2012


From: InformatiQ <rhanna at informatiq.org>

*Enable [-A|--arch] option which allows for specifying the fedora conatiner architecture (i386|i686|x86_64)
 * can create ix86 under an x86_64 host but not the other way around
 * i386 and i686 are the same


Signed-off-by: InformatiQ <rhanna at informatiq.org>
---
 templates/lxc-fedora.in |   38 +++++++++++++++++++++++++++-----------
 1 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/templates/lxc-fedora.in b/templates/lxc-fedora.in
index 3f50895..4377ef9 100644
--- a/templates/lxc-fedora.in
+++ b/templates/lxc-fedora.in
@@ -26,8 +26,6 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
 #Configurations
-arch=$(arch)
-cache_base=/var/cache/lxc/fedora/$arch
 default_path=/var/lib/lxc
 root_password=rooter
 lxc_network_type=veth
@@ -36,9 +34,6 @@ lxc_network_link=virbr0
 # is this fedora?
 [ -f /etc/fedora-release ] && is_fedora=true
 
-if [ "$arch" = "i686" ]; then
-    arch=i386
-fi
 
 configure_fedora()
 {
@@ -125,7 +120,7 @@ download_fedora()
 
     # download a mini fedora into a cache
     echo "Downloading fedora minimal ..."
-    YUM="yum --installroot $INSTALL_ROOT -y --nogpgcheck"
+    YUM="$SETARCH yum --installroot $INSTALL_ROOT -y --nogpgcheck"
     PKG_LIST="yum initscripts passwd rsyslog vim-minimal dhclient chkconfig rootfiles policycoreutils"
     MIRRORLIST_URL="http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$release&arch=$arch"
 
@@ -153,8 +148,8 @@ download_fedora()
     fi
 
     mkdir -p $INSTALL_ROOT/var/lib/rpm
-    rpm --root $INSTALL_ROOT  --initdb
-    rpm --root $INSTALL_ROOT -ivh $INSTALL_ROOT/fedora-release-$release.noarch.rpm
+    $SETARCH rpm --root $INSTALL_ROOT  --initdb
+    $SETARCH rpm --root $INSTALL_ROOT -ivh $INSTALL_ROOT/fedora-release-$release.noarch.rpm
     $YUM install $PKG_LIST
 
     if [ $? -ne 0 ]; then
@@ -182,7 +177,7 @@ copy_fedora()
 
 update_fedora()
 {
-    YUM="yum --installroot $cache/rootfs -y --nogpgcheck"
+    YUM="$SETARCH yum --installroot $cache/rootfs -y --nogpgcheck"
     $YUM update
 }
 
@@ -310,13 +305,13 @@ Optional args:
   -p,--path         path to where the container rootfs will be created, defaults to /var/lib/lxc. The container config will go under /var/lib/lxc in that case
   -c,--clean        clean the cache
   -R,--release      Fedora release for the new container. if the host is Fedora, then it will defaultto the host's release.
-  -A,--arch         NOT USED YET. Define what arch the container will be [i686,x86_64]
+  -A,--arch         Define what arch the container will be [i686,x86_64]
   -h,--help         print this help
 EOF
     return 0
 }
 
-options=$(getopt -o hp:n:cR: -l help,path:,name:,clean,release: -- "$@")
+options=$(getopt -o hp:n:cR:A: -l help,path:,name:,clean,release:,arch: -- "$@")
 if [ $? -ne 0 ]; then
     usage $(basename $0)
     exit 1
@@ -331,11 +326,32 @@ do
 	-n|--name)      name=$2; shift 2;;
 	-c|--clean)     clean=$2; shift 2;;
         -R|--release)   release=$2; shift 2;;
+        -A|--arch)      user_arch=$2; shift 2;;
 	--)             shift 1; break ;;
         *)              break ;;
     esac
 done
 
+if [ -z $user_arch ]; then 
+    arch=$(arch)
+else
+    case "$user_arch" in
+        i686|i386)    arch="i386";;
+        x86_64)       arch="x86_64"; [ -n "$(arch|grep -E -e 'i.86')" ] && echo "cannot create x86_64 container in a ix86 host" && exit 1;; 
+        *)            echo "arch can be i686,i386 or x86_64 only"; exit 1;;
+    esac
+fi
+
+if [ "$arch" = "i686" ]; then
+    arch=i386
+fi
+if [ "$(arch)" = "$arch" ]; then
+    SETARCH=""
+else
+    SETARCH="setarch $arch"
+fi
+cache_base=/var/cache/lxc/fedora/$arch
+
 if [ ! -z "$clean" -a -z "$path" ]; then
     clean || exit 1
     exit 0
-- 
1.7.7.6





More information about the lxc-users mailing list