no sliver-openvswitch in f29 for now
[build.git] / lbuild-initvm.sh
index 5a4cc19..9cc3fb5 100755 (executable)
@@ -24,7 +24,7 @@ export PATH=$PATH:/bin:/sbin
 # it works, but this really is poor practice
 # we should have an lxc_root function instead
 function lxcroot () {
 # it works, but this really is poor practice
 # we should have an lxc_root function instead
 function lxcroot () {
-    lxc=$1; shift
+    local lxc=$1; shift
     echo /vservers/$lxc
 }
 
     echo /vservers/$lxc
 }
 
@@ -50,13 +50,13 @@ DEBIAN_PREINSTALLED="openssh-server openssh-client"
 
 ########## networking utilities
 function gethostbyname () {
 
 ########## networking utilities
 function gethostbyname () {
-    hostname=$1
+    local hostname=$1
     python -c "import socket; print socket.gethostbyname('"$hostname"')" 2> /dev/null
 }
 
 # e.g. 21 -> 255.255.248.0
 function masklen_to_netmask () {
     python -c "import socket; print socket.gethostbyname('"$hostname"')" 2> /dev/null
 }
 
 # e.g. 21 -> 255.255.248.0
 function masklen_to_netmask () {
-    masklen=$1; shift
+    local masklen=$1; shift
     python <<EOF
 import sys
 masklen=$masklen
     python <<EOF
 import sys
 masklen=$masklen
@@ -79,38 +79,47 @@ EOF
 ##############################
 # return dnf or debootstrap
 function package_method () {
 ##############################
 # return dnf or debootstrap
 function package_method () {
-    fcdistro=$1; shift
+    local fcdistro=$1; shift
     case $fcdistro in
     case $fcdistro in
-       f[0-9]*|centos[0-9]*|sl[0-9]*)
-           echo dnf ;;
-       wheezy|jessie|precise|trusty|utopic|vivid|wily|xenial)
-           echo debootstrap ;;
-       *)
-           echo Unknown distro $fcdistro ;;
+        f[0-9]*|centos[0-9]*|sl[0-9]*)
+            echo dnf ;;
+        wheezy|jessie|precise|trusty|utopic|vivid|wily|xenial)
+            echo debootstrap ;;
+        *)
+            echo Unknown distro $fcdistro ;;
     esac
 }
 
 # return arch from debian distro and personality
 function canonical_arch () {
     esac
 }
 
 # return arch from debian distro and personality
 function canonical_arch () {
-    personality=$1; shift
-    fcdistro=$1; shift
+    local personality=$1; shift
+    local fcdistro=$1; shift
     case $(package_method $fcdistro) in
     case $(package_method $fcdistro) in
-       dnf)
-           case $personality in *32) echo i386 ;; *64) echo x86_64 ;; *) echo Unknown-arch-1 ;; esac ;;
-       debootstrap)
-           case $personality in *32) echo i386 ;; *64) echo amd64 ;; *) echo Unknown-arch-2 ;; esac ;;
-       *)
-           echo Unknown-arch-3 ;;
+        dnf)
+            case $personality in
+                *32) echo i386 ;;
+                *64) echo x86_64 ;;
+                *) echo Unknown-arch-1 ;;
+            esac ;;
+        debootstrap)
+            case $personality in
+                *32) echo i386 ;;
+                *64) echo amd64 ;;
+                *) echo Unknown-arch-2 ;;
+            esac ;;
+        *)
+            echo Unknown-arch-3 ;;
     esac
 }
 
 # the new test framework creates /timestamp in /vservers/<name> *before* populating it
 function almost_empty () {
     esac
 }
 
 # the new test framework creates /timestamp in /vservers/<name> *before* populating it
 function almost_empty () {
-    dir="$1"; shift ;
+    local dir="$1"; shift ;
     # non existing is fine
     [ ! -d $dir ] && return 0;
     # need to have at most one file
     # non existing is fine
     [ ! -d $dir ] && return 0;
     # need to have at most one file
-    count=$(cd $dir; ls | wc -l); [ $count -le 1 ];
+    local count=$(cd $dir; ls | wc -l)
+    [ $count -le 1 ]
 }
 
 ##############################
 }
 
 ##############################
@@ -118,10 +127,10 @@ function fedora_install() {
     set -x
     set -e
 
     set -x
     set -e
 
-    lxc=$1; shift
-    lxc_root=$(lxcroot $lxc)
+    local lxc=$1; shift
+    local lxc_root=$(lxcroot $lxc)
 
 
-    cache=/var/cache/lxc/fedora/$arch/${fedora_release}
+    local cache=/var/cache/lxc/fedora/$arch/${fedora_release}
     mkdir -p $cache
 
     (
     mkdir -p $cache
 
     (
@@ -132,7 +141,7 @@ function fedora_install() {
             fedora_download $cache || { echo "Failed to download 'fedora base'"; return 1; }
         else
             echo "Updating cache $cache/rootfs ..."
             fedora_download $cache || { echo "Failed to download 'fedora base'"; return 1; }
         else
             echo "Updating cache $cache/rootfs ..."
-           if ! dnf --installroot $cache/rootfs --releasever ${fedora_release} -y --nogpgcheck update ; then
+            if ! dnf --installroot $cache/rootfs --releasever ${fedora_release} -y --nogpgcheck update ; then
                 echo "Failed to update 'fedora base', continuing with last known good cache"
             else
                 echo "Update finished"
                 echo "Failed to update 'fedora base', continuing with last known good cache"
             else
                 echo "Update finished"
@@ -140,7 +149,7 @@ function fedora_install() {
         fi
 
         echo "Filling $lxc_root from $cache/rootfs ... "
         fi
 
         echo "Filling $lxc_root from $cache/rootfs ... "
-       rsync -a $cache/rootfs/ $lxc_root/
+        rsync -a $cache/rootfs/ $lxc_root/
 
         return 0
 
 
         return 0
 
@@ -152,7 +161,7 @@ function fedora_install() {
 function fedora_download() {
     set -x
 
 function fedora_download() {
     set -x
 
-    cache=$1; shift
+    local cache=$1; shift
 
     # check the mini fedora was not already downloaded
     INSTALL_ROOT=$cache/partial
 
     # check the mini fedora was not already downloaded
     INSTALL_ROOT=$cache/partial
@@ -181,20 +190,22 @@ function fedora_download() {
     # since fedora18 the rpms are scattered by first name
     # first try the second version of fedora-release first
     RELEASE_URLS=""
     # since fedora18 the rpms are scattered by first name
     # first try the second version of fedora-release first
     RELEASE_URLS=""
+    local subindex
     for subindex in 3 2 1; do
         RELEASE_URLS="$RELEASE_URLS $MIRROR_URL/Packages/f/fedora-release-${fedora_release}-1.noarch.rpm"
     done
 
     RELEASE_TARGET=$INSTALL_ROOT/fedora-release-${fedora_release}.noarch.rpm
     for subindex in 3 2 1; do
         RELEASE_URLS="$RELEASE_URLS $MIRROR_URL/Packages/f/fedora-release-${fedora_release}-1.noarch.rpm"
     done
 
     RELEASE_TARGET=$INSTALL_ROOT/fedora-release-${fedora_release}.noarch.rpm
-    found=""
+    local found=""
+    local attempt
     for attempt in $RELEASE_URLS; do
     for attempt in $RELEASE_URLS; do
-       if curl --silent --fail $attempt -o $RELEASE_TARGET; then
-           echo "Successfully Retrieved $attempt"
-           found=true
-           break
-       else
-           echo "Failed (not to worry about) with attempt $attempt"
-       fi
+        if curl --silent --fail $attempt -o $RELEASE_TARGET; then
+            echo "Successfully Retrieved $attempt"
+            found=true
+            break
+        else
+            echo "Failed (not to worry about) with attempt $attempt"
+        fi
     done
     [ -n "$found" ] || { echo "Could not retrieve fedora-release rpm - exiting" ; exit 1; }
 
     done
     [ -n "$found" ] || { echo "Could not retrieve fedora-release rpm - exiting" ; exit 1; }
 
@@ -228,36 +239,23 @@ function fedora_configure() {
     set -x
     set -e
 
     set -x
     set -e
 
-    lxc=$1; shift
-    lxc_root=$(lxcroot $lxc)
+    local lxc=$1; shift
+    local fcdistro=$1; shift
+    local lxc_root=$(lxcroot $lxc)
 
     # disable selinux in fedora
     mkdir -p $lxc_root/selinux
     echo 0 > $lxc_root/selinux/enforce
 
 
     # disable selinux in fedora
     mkdir -p $lxc_root/selinux
     echo 0 > $lxc_root/selinux/enforce
 
-    # set the hostname
-    case "$fcdistro" in
-       f18|f2?)
-            cat <<EOF > ${lxc_root}/etc/sysconfig/network
+    # enable networking and set hostname
+    cat <<EOF > ${lxc_root}/etc/sysconfig/network
 NETWORKING=yes
 EOF
 NETWORKING=yes
 EOF
-           cat <<EOF > ${lxc_root}/etc/hostname
+    cat <<EOF > ${lxc_root}/etc/hostname
 $GUEST_HOSTNAME
 EOF
 $GUEST_HOSTNAME
 EOF
-           echo ;;
-       *)
-            cat <<EOF > ${lxc_root}/etc/sysconfig/network
-NETWORKING=yes
-HOSTNAME=$GUEST_HOSTNAME
-EOF
-            # set minimal hosts
-           cat <<EOF > $lxc_root/etc/hosts
-127.0.0.1 localhost $GUEST_HOSTNAME
-EOF
-           echo ;;
-    esac
 
 
-    dev_path="${lxc_root}/dev"
+    local dev_path="${lxc_root}/dev"
     rm -rf $dev_path
     mkdir -p $dev_path
     mknod -m 666 ${dev_path}/null c 1 3
     rm -rf $dev_path
     mkdir -p $dev_path
     mknod -m 666 ${dev_path}/null c 1 3
@@ -277,41 +275,33 @@ EOF
     mknod -m 600 ${dev_path}/initctl p
     mknod -m 666 ${dev_path}/ptmx c 5 2
 
     mknod -m 600 ${dev_path}/initctl p
     mknod -m 666 ${dev_path}/ptmx c 5 2
 
-    if [ "$(echo $fcdistro | cut -d"f" -f2)" -le "14" ]; then
-       fedora_configure_init $lxc
-    else
-       fedora_configure_systemd $lxc
-    fi
+    fedora_configure_systemd $lxc
 
 
-    guest_ifcfg=${lxc_root}/etc/sysconfig/network-scripts/ifcfg-$VIF_GUEST
-    ( [ -n "$NAT_MODE" ] && write_guest_ifcfg_natip || write_guest_ifcfg_publicip ) > $guest_ifcfg
+    local guest_ifcfg=${lxc_root}/etc/sysconfig/network-scripts/ifcfg-$VIF_GUEST
+    mkdir -p $(dirname ${guest_ifcfg})
+    # starting with f29, we go for NetworkManager as older network-scripts
+    # is about to be deprecated
+    local nm_controlled=false
+    [[ $fcdistro == f29 ]] && nm_controlled=true
+    [[ $fcdistro == f3[0-9] ]] && nm_controlled=true
+
+    if [ -n "$NAT_MODE" ]; then
+        write_guest_ifcfg_natip $nm_controlled
+    else
+        write_guest_ifcfg_publicip $nm_controlled
+    fi > $guest_ifcfg
 
     [ -z "$IMAGE" ] && fedora_configure_yum $lxc $fcdistro $pldistro
 
     return 0
 }
 
 
     [ -z "$IMAGE" ] && fedora_configure_yum $lxc $fcdistro $pldistro
 
     return 0
 }
 
-function fedora_configure_init() {
-    set -e
-    set -x
-    lxc=$1; shift
-    lxc_root=$(lxcroot $lxc)
-
-    sed -i 's|.sbin.start_udev||' ${lxc_root}/etc/rc.sysinit
-    sed -i 's|.sbin.start_udev||' ${lxc_root}/etc/rc.d/rc.sysinit
-    # don't mount devpts, for pete's sake
-    sed -i 's/^.*dev.pts.*$/#\0/' ${lxc_root}/etc/rc.sysinit
-    sed -i 's/^.*dev.pts.*$/#\0/' ${lxc_root}/etc/rc.d/rc.sysinit
-    chroot ${lxc_root} $personality chkconfig udev-post off
-    chroot ${lxc_root} $personality chkconfig network on
-}
-
 # this code of course is for guests that do run on systemd
 function fedora_configure_systemd() {
     set -e
     set -x
 # this code of course is for guests that do run on systemd
 function fedora_configure_systemd() {
     set -e
     set -x
-    lxc=$1; shift
-    lxc_root=$(lxcroot $lxc)
+    local lxc=$1; shift
+    local lxc_root=$(lxcroot $lxc)
 
     # so ignore if we can't find /etc/systemd at all
     [ -d ${lxc_root}/etc/systemd ] || return 0
 
     # so ignore if we can't find /etc/systemd at all
     [ -d ${lxc_root}/etc/systemd ] || return 0
@@ -334,11 +324,11 @@ function fedora_configure_yum () {
     set -e
     trap failure ERR INT
 
     set -e
     trap failure ERR INT
 
-    lxc=$1; shift
-    fcdistro=$1; shift
-    pldistro=$1; shift
+    local lxc=$1; shift
+    local fcdistro=$1; shift
+    local pldistro=$1; shift
 
 
-    lxc_root=$(lxcroot $lxc)
+    local lxc_root=$(lxcroot $lxc)
     # rpm --rebuilddb
     chroot ${lxc_root} $personality rpm --rebuilddb
 
     # rpm --rebuilddb
     chroot ${lxc_root} $personality rpm --rebuilddb
 
@@ -370,23 +360,23 @@ EOF
     # for using this script as a general-purpose lxc creation wrapper
     # just mention 'none' as the repo url
     if [ -n "$REPO_URL" ] ; then
     # for using this script as a general-purpose lxc creation wrapper
     # just mention 'none' as the repo url
     if [ -n "$REPO_URL" ] ; then
-       if [ ! -d $lxc_root/etc/yum.repos.d ] ; then
-           echo "WARNING : cannot create myplc repo"
-       else
+        if [ ! -d $lxc_root/etc/yum.repos.d ] ; then
+            echo "WARNING : cannot create myplc repo"
+        else
             # exclude kernel from fedora repos
             # exclude kernel from fedora repos
-           yumexclude=$(pl_plcyumexclude $fcdistro $pldistro $DIRNAME)
-           for repo in $lxc_root/etc/yum.repos.d/* ; do
-               [ -f $repo ] && yumconf_exclude $repo "exclude=$yumexclude"
-           done
-           # the build repo is not signed at this stage
-           cat > $lxc_root/etc/yum.repos.d/myplc.repo <<EOF
+            yumexclude=$(pl_plcyumexclude $fcdistro $pldistro $DIRNAME)
+            for repo in $lxc_root/etc/yum.repos.d/* ; do
+                [ -f $repo ] && yumconf_exclude $repo "exclude=$yumexclude"
+            done
+            # the build repo is not signed at this stage
+            cat > $lxc_root/etc/yum.repos.d/myplc.repo <<EOF
 [myplc]
 name= MyPLC
 baseurl=$REPO_URL
 enabled=1
 gpgcheck=0
 EOF
 [myplc]
 name= MyPLC
 baseurl=$REPO_URL
 enabled=1
 gpgcheck=0
 EOF
-       fi
+        fi
     fi
 }
 
     fi
 }
 
@@ -395,25 +385,24 @@ EOF
 # http://mirrors.ubuntu.com/mirrors.txt
 # need to specify the right mirror for debian variants like ubuntu and the like
 function debian_mirror () {
 # http://mirrors.ubuntu.com/mirrors.txt
 # need to specify the right mirror for debian variants like ubuntu and the like
 function debian_mirror () {
-    fcdistro=$1; shift
+    local fcdistro=$1; shift
     case $fcdistro in
     case $fcdistro in
-       wheezy|jessie)
-           echo http://ftp2.fr.debian.org/debian/ ;;
-       precise|trusty|utopic|vivid|wily|xenial)
-#          echo http://mir1.ovh.net/ubuntu/ubuntu/ ;;
-           echo http://www-ftp.lip6.fr/pub/linux/distributions/Ubuntu/archive/ ;;
-       *) echo unknown distro $fcdistro; exit 1;;
+        wheezy|jessie)
+            echo http://ftp2.fr.debian.org/debian/ ;;
+        precise|trusty|utopic|vivid|wily|xenial)
+            echo http://www-ftp.lip6.fr/pub/linux/distributions/Ubuntu/archive/ ;;
+        *) echo unknown distro $fcdistro; exit 1;;
     esac
 }
 
 function debian_install () {
     set -e
     set -x
     esac
 }
 
 function debian_install () {
     set -e
     set -x
-    lxc=$1; shift
-    lxc_root=$(lxcroot $lxc)
+    local lxc=$1; shift
+    local lxc_root=$(lxcroot $lxc)
     mkdir -p $lxc_root
     mkdir -p $lxc_root
-    arch=$(canonical_arch $personality $fcdistro)
-    mirror=$(debian_mirror $fcdistro)
+    local arch=$(canonical_arch $personality $fcdistro)
+    local mirror=$(debian_mirror $fcdistro)
     debootstrap --no-check-gpg --arch $arch $fcdistro $lxc_root $mirror
     # just like with fedora we ensure a few packages get installed as well
     # not started yet
     debootstrap --no-check-gpg --arch $arch $fcdistro $lxc_root $mirror
     # just like with fedora we ensure a few packages get installed as well
     # not started yet
@@ -429,7 +418,7 @@ EOF
 }
 
 function debian_configure () {
 }
 
 function debian_configure () {
-    guest_interfaces=${lxc_root}/etc/network/interfaces
+    local guest_interfaces=${lxc_root}/etc/network/interfaces
     ( [ -n "$NAT_MODE" ] && write_guest_interfaces_natip || write_guest_interfaces_publicip ) > $guest_interfaces
 }
 
     ( [ -n "$NAT_MODE" ] && write_guest_interfaces_natip || write_guest_interfaces_publicip ) > $guest_interfaces
 }
 
@@ -456,38 +445,38 @@ function setup_lxc() {
     set -e
     #trap failure ERR INT
 
     set -e
     #trap failure ERR INT
 
-    lxc=$1; shift
-    fcdistro=$1; shift
-    pldistro=$1; shift
-    personality=$1; shift
+    local lxc=$1; shift
+    local fcdistro=$1; shift
+    local pldistro=$1; shift
+    local personality=$1; shift
 
 
-    lxc_root=$(lxcroot $lxc)
+    local lxc_root=$(lxcroot $lxc)
 
     # create lxc container
 
     pkg_method=$(package_method $fcdistro)
     case $pkg_method in
 
     # create lxc container
 
     pkg_method=$(package_method $fcdistro)
     case $pkg_method in
-       dnf)
+        dnf)
             if [ -z "$IMAGE" ]; then
                 fedora_install $lxc ||  { echo "failed to install fedora root image"; exit 1 ; }
             if [ -z "$IMAGE" ]; then
                 fedora_install $lxc ||  { echo "failed to install fedora root image"; exit 1 ; }
-               # this appears to be safer; observed in Jan. 2016 on a f23 host and a f14 cached image
-               # we were getting this message when attempting the first chroot dnf install
-               # rpmdb: Program version 4.8 doesn't match environment version 5.3
-               chroot $(lxcroot $lxc) $personality rm -rf /var/lib/rpm/__db.00{0,1,2,3,4,5,6,7,8,9}
-               chroot $(lxcroot $lxc) $personality rpm --rebuilddb
+                # this appears to be safer; observed in Jan. 2016 on a f23 host and a f14 cached image
+                # we were getting this message when attempting the first chroot dnf install
+                # rpmdb: Program version 4.8 doesn't match environment version 5.3
+                chroot $(lxcroot $lxc) $personality rm -rf /var/lib/rpm/__db.00{0,1,2,3,4,5,6,7,8,9}
+                chroot $(lxcroot $lxc) $personality rpm --rebuilddb
             fi
             fi
-           fedora_configure $lxc || { echo "failed to configure fedora for a container"; exit 1 ; }
-           ;;
-       debootstrap)
+            fedora_configure $lxc $fcdistro || { echo "failed to configure fedora for a container"; exit 1 ; }
+            ;;
+        debootstrap)
             if [ -z "$IMAGE" ]; then
             if [ -z "$IMAGE" ]; then
-               debian_install $lxc || { echo "failed to install debian/ubuntu root image"; exit 1 ; }
+                debian_install $lxc || { echo "failed to install debian/ubuntu root image"; exit 1 ; }
             fi
             fi
-           debian_configure || { echo "failed to configure debian/ubuntu for a container"; exit 1 ; }
-           ;;
-       *)
-           echo "$COMMAND:: unknown package_method - exiting"
-           exit 1
-           ;;
+            debian_configure || { echo "failed to configure debian/ubuntu for a container"; exit 1 ; }
+            ;;
+        *)
+            echo "$COMMAND:: unknown package_method - exiting"
+            exit 1
+            ;;
     esac
 
     # Enable cgroup -- xxx -- is this really useful ?
     esac
 
     # Enable cgroup -- xxx -- is this really useful ?
@@ -507,7 +496,7 @@ function setup_lxc() {
     chmod 600 $lxc_root/root/.ssh/authorized_keys
 
     # don't keep the input xml, this can be retrieved at all times with virsh dumpxml
     chmod 600 $lxc_root/root/.ssh/authorized_keys
 
     # don't keep the input xml, this can be retrieved at all times with virsh dumpxml
-    config_xml=/tmp/$lxc.xml
+    local config_xml=/tmp/$lxc.xml
     ( [ -n "$NAT_MODE" ] && write_lxc_xml_natip $lxc || write_lxc_xml_publicip $lxc ) > $config_xml
 
     # define lxc container for libvirt
     ( [ -n "$NAT_MODE" ] && write_lxc_xml_natip $lxc || write_lxc_xml_publicip $lxc ) > $config_xml
 
     # define lxc container for libvirt
@@ -526,8 +515,8 @@ function setup_lxc() {
 #
 
 function write_lxc_xml_publicip () {
 #
 
 function write_lxc_xml_publicip () {
-    lxc=$1; shift
-    lxc_root=$(lxcroot $lxc)
+    local lxc=$1; shift
+    local lxc_root=$(lxcroot $lxc)
     cat <<EOF
 <domain type='lxc'>
   <name>$lxc</name>
     cat <<EOF
 <domain type='lxc'>
   <name>$lxc</name>
@@ -562,8 +551,8 @@ EOF
 
 # grant build guests the ability to do mknods
 function write_lxc_xml_natip () {
 
 # grant build guests the ability to do mknods
 function write_lxc_xml_natip () {
-    lxc=$1; shift
-    lxc_root=$(lxcroot $lxc)
+    local lxc=$1; shift
+    local lxc_root=$(lxcroot $lxc)
     cat <<EOF
 <domain type='lxc'>
   <name>$lxc</name>
     cat <<EOF
 <domain type='lxc'>
   <name>$lxc</name>
@@ -600,18 +589,20 @@ EOF
 
 # this one is dhcp-based
 function write_guest_ifcfg_natip () {
 
 # this one is dhcp-based
 function write_guest_ifcfg_natip () {
+    local nm_controlled=$1; shift
     cat <<EOF
 DEVICE=$VIF_GUEST
 BOOTPROTO=dhcp
 ONBOOT=yes
     cat <<EOF
 DEVICE=$VIF_GUEST
 BOOTPROTO=dhcp
 ONBOOT=yes
-NM_CONTROLLED=no
 TYPE=Ethernet
 MTU=1500
 EOF
 TYPE=Ethernet
 MTU=1500
 EOF
+    [ "$nm_controlled" == true ] || echo NM_CONTROLLED=no
 }
 
 # use fixed GUEST_IP as specified by GUEST_HOSTNAME
 function write_guest_ifcfg_publicip () {
 }
 
 # use fixed GUEST_IP as specified by GUEST_HOSTNAME
 function write_guest_ifcfg_publicip () {
+    local nm_controlled=$1; shift
     cat <<EOF
 DEVICE=$VIF_GUEST
 BOOTPROTO=static
     cat <<EOF
 DEVICE=$VIF_GUEST
 BOOTPROTO=static
@@ -620,10 +611,10 @@ HOSTNAME=$GUEST_HOSTNAME
 IPADDR=$GUEST_IP
 NETMASK=$NETMASK
 GATEWAY=$GATEWAY
 IPADDR=$GUEST_IP
 NETMASK=$NETMASK
 GATEWAY=$GATEWAY
-NM_CONTROLLED=no
 TYPE=Ethernet
 MTU=1500
 EOF
 TYPE=Ethernet
 MTU=1500
 EOF
+    [ "$nm_controlled" == true ] || echo NM_CONTROLLED=no
 }
 
 function devel_or_test_tools () {
 }
 
 function devel_or_test_tools () {
@@ -632,80 +623,80 @@ function devel_or_test_tools () {
     set -e
     trap failure ERR INT
 
     set -e
     trap failure ERR INT
 
-    lxc=$1; shift
-    fcdistro=$1; shift
-    pldistro=$1; shift
-    personality=$1; shift
+    local lxc=$1; shift
+    local fcdistro=$1; shift
+    local pldistro=$1; shift
+    local personality=$1; shift
 
 
-    lxc_root=$(lxcroot $lxc)
+    local lxc_root=$(lxcroot $lxc)
 
 
-    pkg_method=$(package_method $fcdistro)
+    local pkg_method=$(package_method $fcdistro)
 
 
-    pkgsfile=$(pl_locateDistroFile $DIRNAME $pldistro $PREINSTALLED)
+    local pkgsfile=$(pl_locateDistroFile $DIRNAME $pldistro $PREINSTALLED)
 
     ### install individual packages, then groups
     # get target arch - use uname -i here (we want either x86_64 or i386)
 
 
     ### install individual packages, then groups
     # get target arch - use uname -i here (we want either x86_64 or i386)
 
-    lxc_arch=$(chroot ${lxc_root} $personality uname -i)
+    local lxc_arch=$(chroot ${lxc_root} $personality uname -i)
     # on debian systems we get arch through the 'arch' command
     [ "$lxc_arch" = "unknown" ] && lxc_arch=$(chroot ${lxc_root} $personality arch)
 
     # on debian systems we get arch through the 'arch' command
     [ "$lxc_arch" = "unknown" ] && lxc_arch=$(chroot ${lxc_root} $personality arch)
 
-    packages=$(pl_getPackages -a $lxc_arch $fcdistro $pldistro $pkgsfile)
-    groups=$(pl_getGroups -a $lxc_arch $fcdistro $pldistro $pkgsfile)
+    local packages=$(pl_getPackages -a $lxc_arch $fcdistro $pldistro $pkgsfile)
+    local groups=$(pl_getGroups -a $lxc_arch $fcdistro $pldistro $pkgsfile)
 
     case "$pkg_method" in
 
     case "$pkg_method" in
-       dnf)
-           # --allowerasing required starting with fedora24
-           #
-           has_dnf=""
-           chroot ${lxc_root} $personality dnf --version && has_dnf=true
-           if [ -n "$has_dnf" ]; then
-               echo "container has dnf - invoking with --allowerasing"
-               pkg_installer="dnf -y install --allowerasing"
-               grp_installer="dnf -y groupinstall --allowerasing"
-           else
-               echo "container has only dnf"
-               pkg_installer="dnf -y install"
-               grp_installer="dnf -y groupinstall"
-           fi
-           [ -n "$packages" ] && chroot ${lxc_root} $personality $pkg_installer $packages
-           for group_plus in $groups; do
-               group=$(echo $group_plus | sed -e "s,+++, ,g")
-               chroot ${lxc_root} $personality $grp_installer "$group"
-           done
-           # store current rpm list in /init-lxc.rpms in case we need to check the contents
-           chroot ${lxc_root} $personality rpm -aq > $lxc_root/init-lxc.rpms
-           ;;
-       debootstrap)
-           # for ubuntu
-           if grep -iq ubuntu /vservers/$lxc/etc/lsb-release 2> /dev/null; then
-               # on ubuntu, at this point we end up with a single feed in /etc/apt/sources.list
-               # we need at least to add the 'universe' feed for python-rpm
-               ( cd /vservers/$lxc/etc/apt ; head -1 sources.list | sed -e s,main,universe, > sources.list.d/universe.list )
-               # also adding a link to updates sounds about right
-               ( cd /vservers/$lxc/etc/apt ; head -1 sources.list | sed -e 's, main,-updates main,' > sources.list.d/updates.list )
-               # tell apt about the changes
-               chroot /vservers/$lxc apt-get update
-           fi
-           for package in $packages ; do
-               # container not started yet
-               #virsh -c lxc:/// lxc-enter-namespace $lxc /usr/bin/$personality /bin/bash -c "apt-get install -y $package" || :
-               chroot ${lxc_root} $personality apt-get install -y $package || :
-           done
-           ### xxx todo install groups with apt..
-           ;;
-       *)
-           echo "unknown pkg_method $pkg_method"
-           ;;
+        dnf)
+            # --allowerasing required starting with fedora24
+            #
+            local has_dnf=""
+            chroot ${lxc_root} $personality dnf --version && has_dnf=true
+            if [ -n "$has_dnf" ]; then
+                echo "container has dnf - invoking with --allowerasing"
+                local pkg_installer="dnf -y install --allowerasing"
+                local grp_installer="dnf -y groupinstall --allowerasing"
+            else
+                echo "container has only dnf"
+                local pkg_installer="dnf -y install"
+                local grp_installer="dnf -y groupinstall"
+            fi
+            [ -n "$packages" ] && chroot ${lxc_root} $personality $pkg_installer $packages
+            for group_plus in $groups; do
+                local group=$(echo $group_plus | sed -e "s,+++, ,g")
+                chroot ${lxc_root} $personality $grp_installer "$group"
+            done
+            # store current rpm list in /init-lxc.rpms in case we need to check the contents
+            chroot ${lxc_root} $personality rpm -aq > $lxc_root/init-lxc.rpms
+            ;;
+        debootstrap)
+            # for ubuntu
+            if grep -iq ubuntu /vservers/$lxc/etc/lsb-release 2> /dev/null; then
+                # on ubuntu, at this point we end up with a single feed in /etc/apt/sources.list
+                # we need at least to add the 'universe' feed for python-rpm
+                ( cd /vservers/$lxc/etc/apt ; head -1 sources.list | sed -e s,main,universe, > sources.list.d/universe.list )
+                # also adding a link to updates sounds about right
+                ( cd /vservers/$lxc/etc/apt ; head -1 sources.list | sed -e 's, main,-updates main,' > sources.list.d/updates.list )
+                # tell apt about the changes
+                chroot /vservers/$lxc apt-get update
+            fi
+            for package in $packages ; do
+                # container not started yet
+                #virsh -c lxc:/// lxc-enter-namespace $lxc /usr/bin/$personality /bin/bash -c "apt-get install -y $package" || :
+                chroot ${lxc_root} $personality apt-get install -y $package || :
+            done
+            ### xxx todo install groups with apt..
+            ;;
+        *)
+            echo "unknown pkg_method $pkg_method"
+            ;;
     esac
 
     return 0
 }
 
 function post_install () {
     esac
 
     return 0
 }
 
 function post_install () {
-    lxc=$1; shift
-    personality=$1; shift
-    lxc_root=$(lxcroot $lxc)
+    local lxc=$1; shift
+    local personality=$1; shift
+    local lxc_root=$(lxcroot $lxc)
     # setup localtime from the host
     cp /etc/localtime $lxc_root/etc/localtime
     sshd_disable_password_auth $lxc
     # setup localtime from the host
     cp /etc/localtime $lxc_root/etc/localtime
     sshd_disable_password_auth $lxc
@@ -713,22 +704,22 @@ function post_install () {
     [ -n "$NAT_MODE" ] && post_install_natip $lxc $personality || post_install_myplc $lxc $personality
     # start the VM unless specified otherwise
     if [ -n "$START_VM" ] ; then
     [ -n "$NAT_MODE" ] && post_install_natip $lxc $personality || post_install_myplc $lxc $personality
     # start the VM unless specified otherwise
     if [ -n "$START_VM" ] ; then
-       echo Starting guest $lxc
-       virsh -c lxc:/// start $lxc
-       if [ -n "$NAT_MODE" ] ; then
-           wait_for_ssh $lxc
-       else
-           wait_for_ssh $lxc $GUEST_IP
-       fi
+        echo Starting guest $lxc
+        virsh -c lxc:/// start $lxc
+        if [ -n "$NAT_MODE" ] ; then
+            wait_for_ssh $lxc
+        else
+            wait_for_ssh $lxc $GUEST_IP
+        fi
     fi
 }
 
 # just in case, let's stay on the safe side
 function sshd_disable_password_auth () {
     fi
 }
 
 # just in case, let's stay on the safe side
 function sshd_disable_password_auth () {
-    lxc=$1; shift
-    lxc_root=$(lxcroot $lxc)
+    local lxc=$1; shift
+    local lxc_root=$(lxcroot $lxc)
     sed --in-place=.password -e 's,^#\?PasswordAuthentication.*,PasswordAuthentication no,' \
     sed --in-place=.password -e 's,^#\?PasswordAuthentication.*,PasswordAuthentication no,' \
-       $lxc_root/etc/ssh/sshd_config
+        $lxc_root/etc/ssh/sshd_config
 }
 
 function post_install_natip () {
 }
 
 function post_install_natip () {
@@ -737,9 +728,9 @@ function post_install_natip () {
     set -e
     trap failure ERR INT
 
     set -e
     trap failure ERR INT
 
-    lxc=$1; shift
-    personality=$1; shift
-    lxc_root=$(lxcroot $lxc)
+    local lxc=$1; shift
+    local personality=$1; shift
+    local lxc_root=$(lxcroot $lxc)
 
 ### From myplc-devel-native.spec
 # be careful to backslash $ in this, otherwise it's the root context that's going to do the evaluation
 
 ### From myplc-devel-native.spec
 # be careful to backslash $ in this, otherwise it's the root context that's going to do the evaluation
@@ -759,9 +750,9 @@ function post_install_myplc  () {
     set -e
     trap failure ERR INT
 
     set -e
     trap failure ERR INT
 
-    lxc=$1; shift
-    personality=$1; shift
-    lxc_root=$(lxcroot $lxc)
+    local lxc=$1; shift
+    local personality=$1; shift
+    local lxc_root=$(lxcroot $lxc)
 
 # be careful to backslash $ in this, otherwise it's the root context that's going to do the evaluation
     cat << EOF | chroot ${lxc_root} $personality bash -x
 
 # be careful to backslash $ in this, otherwise it's the root context that's going to do the evaluation
     cat << EOF | chroot ${lxc_root} $personality bash -x
@@ -786,9 +777,9 @@ EOF
 # however this was too fragile, would not work for fedora14 containers
 # WARNING: this code is duplicated in lbuild-nightly.sh
 function guest_ipv4() {
 # however this was too fragile, would not work for fedora14 containers
 # WARNING: this code is duplicated in lbuild-nightly.sh
 function guest_ipv4() {
-    lxc=$1; shift
+    local lxc=$1; shift
 
 
-    mac=$(virsh -c lxc:/// domiflist $lxc | egrep 'network|bridge' | awk '{print $5;}')
+    local mac=$(virsh -c lxc:/// domiflist $lxc | egrep 'network|bridge' | awk '{print $5;}')
     # sanity check
     [ -z "$mac" ] && return 0
     arp -en | grep "$mac" | awk '{print $1;}'
     # sanity check
     [ -z "$mac" ] && return 0
     arp -en | grep "$mac" | awk '{print $1;}'
@@ -798,25 +789,25 @@ function wait_for_ssh () {
     set -x
     set -e
 
     set -x
     set -e
 
-    lxc=$1; shift
+    local lxc=$1; shift
 
     # if run in public_ip mode, we know the IP of the guest and it is specified here
     [ -n "$1" ] && { guest_ip=$1; shift; }
 
     #wait max 2 min for sshd to start
 
     # if run in public_ip mode, we know the IP of the guest and it is specified here
     [ -n "$1" ] && { guest_ip=$1; shift; }
 
     #wait max 2 min for sshd to start
-    success=""
-    current_time=$(date +%s)
-    stop_time=$(($current_time + 120))
+    local success=""
+    local current_time=$(date +%s)
+    local stop_time=$(($current_time + 120))
 
 
-    counter=1
+    local counter=1
     while [ "$current_time" -lt "$stop_time" ] ; do
          echo "$counter-th attempt to reach sshd in container $lxc ..."
     while [ "$current_time" -lt "$stop_time" ] ; do
          echo "$counter-th attempt to reach sshd in container $lxc ..."
-        [ -z "$guest_ip" ] && guest_ip=$(guest_ipv4 $lxc)
-        [ -n "$guest_ip" ] && ssh -o "StrictHostKeyChecking no" $guest_ip 'uname -i' && {
-                success=true; echo "SSHD in container $lxc is UP on IP $guest_ip"; break ; } || :
+         [ -z "$guest_ip" ] && guest_ip=$(guest_ipv4 $lxc)
+         [ -n "$guest_ip" ] && ssh -o "StrictHostKeyChecking no" $guest_ip 'uname -i' && {
+                 success=true; echo "SSHD in container $lxc is UP on IP $guest_ip"; break ; } || :
          counter=$(($counter+1))
          sleep 10
          counter=$(($counter+1))
          sleep 10
-        current_time=$(date +%s)
+         current_time=$(date +%s)
     done
 
     # Thierry: this is fatal, let's just exit with a failure here
     done
 
     # Thierry: this is fatal, let's just exit with a failure here
@@ -867,33 +858,33 @@ function main () {
 
     START_VM=true
     while getopts "n:f:d:p:r:P:i:m:sv" opt ; do
 
     START_VM=true
     while getopts "n:f:d:p:r:P:i:m:sv" opt ; do
-       case $opt in
-           n) GUEST_HOSTNAME=$OPTARG;;
-           f) fcdistro=$OPTARG;;
-           d) pldistro=$OPTARG;;
-           p) personality=$OPTARG;;
-           r) REPO_URL=$OPTARG;;
-           P) PREINSTALLED=$OPTARG;;
+        case $opt in
+            n) GUEST_HOSTNAME=$OPTARG;;
+            f) fcdistro=$OPTARG;;
+            d) pldistro=$OPTARG;;
+            p) personality=$OPTARG;;
+            r) REPO_URL=$OPTARG;;
+            P) PREINSTALLED=$OPTARG;;
             i) IMAGE=$OPTARG;;
             m) MEMORY=$OPTARG;;
             i) IMAGE=$OPTARG;;
             m) MEMORY=$OPTARG;;
-           s) START_VM= ;;
-           v) VERBOSE=true; set -x;;
-           *) usage ;;
-       esac
+            s) START_VM= ;;
+            v) VERBOSE=true; set -x;;
+            *) usage ;;
+        esac
     done
 
     shift $(($OPTIND - 1))
 
     # parse fixed arguments
     [[ -z "$@" ]] && usage
     done
 
     shift $(($OPTIND - 1))
 
     # parse fixed arguments
     [[ -z "$@" ]] && usage
-    lxc=$1 ; shift
-    lxc_root=$(lxcroot $lxc)
+    local lxc=$1 ; shift
+    local lxc_root=$(lxcroot $lxc)
 
     # rainchecks
     almost_empty $lxc_root || \
 
     # rainchecks
     almost_empty $lxc_root || \
-       { echo "container $lxc already exists in $lxc_root - exiting" ; exit 1 ; }
+        { echo "container $lxc already exists in $lxc_root - exiting" ; exit 1 ; }
     virsh -c lxc:/// domuuid $lxc >& /dev/null && \
     virsh -c lxc:/// domuuid $lxc >& /dev/null && \
-       { echo "container $lxc already exists in libvirt - exiting" ; exit 1 ; }
+        { echo "container $lxc already exists in libvirt - exiting" ; exit 1 ; }
     mkdir -p $lxc_root
 
     # if IMAGE, copy the provided rootfs to lxc_root
     mkdir -p $lxc_root
 
     # if IMAGE, copy the provided rootfs to lxc_root
@@ -920,25 +911,25 @@ function main () {
 
     # the set of preinstalled packages - depends on mode
     if [ -z "$PREINSTALLED" ] ; then
 
     # the set of preinstalled packages - depends on mode
     if [ -z "$PREINSTALLED" ] ; then
-       if [ -n "$NAT_MODE" ] ; then
-           PREINSTALLED=devel.pkgs
-       else
-           PREINSTALLED=runtime.pkgs
-       fi
+        if [ -n "$NAT_MODE" ] ; then
+            PREINSTALLED=devel.pkgs
+        else
+            PREINSTALLED=runtime.pkgs
+        fi
     fi
 
     if [ -n "$NAT_MODE" ] ; then
     fi
 
     if [ -n "$NAT_MODE" ] ; then
-       # we can now set GUEST_HOSTNAME safely
+        # we can now set GUEST_HOSTNAME safely
         [ -z "$GUEST_HOSTNAME" ] && GUEST_HOSTNAME=$(echo $lxc | sed -e 's,\.,-,g')
     else
         [ -z "$GUEST_HOSTNAME" ] && GUEST_HOSTNAME=$(echo $lxc | sed -e 's,\.,-,g')
     else
-       # as this command can be used in other contexts, not specifying
-       # a repo is considered a warning
-       # use -r none to get rid of this warning
-       if [ "$REPO_URL" == "none" ] ; then
-           REPO_URL=""
-       elif [ -z "$REPO_URL" ] ; then
-           echo "WARNING -- setting up a yum repo is recommended"
-       fi
+        # as this command can be used in other contexts, not specifying
+        # a repo is considered a warning
+        # use -r none to get rid of this warning
+        if [ "$REPO_URL" == "none" ] ; then
+            REPO_URL=""
+        elif [ -z "$REPO_URL" ] ; then
+            echo "WARNING -- setting up a yum repo is recommended"
+        fi
     fi
 
     ##########
     fi
 
     ##########
@@ -958,12 +949,12 @@ function main () {
     # (build mode relies entirely on dhcp on the private subnet)
     if [ -z "$NAT_MODE" ] ; then
 
     # (build mode relies entirely on dhcp on the private subnet)
     if [ -z "$NAT_MODE" ] ; then
 
-       #create_bridge_if_needed $PUBLIC_BRIDGE
-       lbuild-bridge.sh $PUBLIC_BRIDGE
+        #create_bridge_if_needed $PUBLIC_BRIDGE
+        lbuild-bridge.sh $PUBLIC_BRIDGE
 
 
-       GUEST_IP=$(gethostbyname $GUEST_HOSTNAME)
-       # use same NETMASK as bridge interface br0
-       masklen=$(ip addr show $PUBLIC_BRIDGE | grep -v inet6 | grep inet | awk '{print $2;}' | cut -d/ -f2)
+        GUEST_IP=$(gethostbyname $GUEST_HOSTNAME)
+        # use same NETMASK as bridge interface br0
+        masklen=$(ip addr show $PUBLIC_BRIDGE | grep -v inet6 | grep inet | awk '{print $2;}' | cut -d/ -f2)
         NETMASK=$(masklen_to_netmask $masklen)
         GATEWAY=$(ip route show | grep default | awk '{print $3}' | head -1)
         VIF_HOST="vif$(echo $GUEST_HOSTNAME | cut -d. -f1)"
         NETMASK=$(masklen_to_netmask $masklen)
         GATEWAY=$(ip route show | grep default | awk '{print $3}' | head -1)
         VIF_HOST="vif$(echo $GUEST_HOSTNAME | cut -d. -f1)"