lbuild-nightly.sh does not include build.common
[build.git] / lbuild-initvm.sh
index 307beb6..8a303f9 100755 (executable)
@@ -518,6 +518,7 @@ function write_lxc_xml_publicip () {
 EOF
 }
 
+# grant build guests the ability to do mknods
 function write_lxc_xml_natip () { 
     lxc=$1; shift
     cat <<EOF
@@ -530,6 +531,9 @@ function write_lxc_xml_natip () {
   </os>
   <features>
     <acpi/>
+    <capabilities policy='default'>
+      <mknod state='on'/>
+    </capabilities>
   </features>
   <vcpu>1</vcpu>
   <clock offset='utc'/>
@@ -706,23 +710,18 @@ PROFILE
 EOF
 }
 
+########################################
 # workaround for broken lxc-enter-namespace
-# relies on virsh net-dhcp-leases
-# when successful we store result in /vservers/<container>/ipv4
-# because the lease expires afer a while 
-function guest_ipv4_cached_or_from_virsh_leases() {
+# 1st version was relying on virsh net-dhcp-leases
+# 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
-    network=default
-    
-    # place to cache result
-    cache=/vservers/$lxc/ipv4
-    ipv4=$(cat $cache 2> /dev/null)
-    [ -z "$ipv4" ] && ipv4=$(virsh net-dhcp-leases $network | sed -e 's,  *, ,g' | grep " $lxc " | grep ipv4 |  cut -d' ' -f6 | cut -d/ -f1)
-    echo $ipv4
-    # cache if needed
-    [ -n "$ipv4" -a ! -f $cache ] && echo $ipv4 > $cache
-    # always return 0
-    return 0
+
+    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;}'
 }
 
 function wait_for_ssh () {
@@ -732,7 +731,7 @@ function wait_for_ssh () {
     lxc=$1; shift
 
     # if run in public_ip mode, we know the IP of the guest and it is specified here
-    guest_ip=$1; shift
+    [ -n "$1" ] && { guest_ip=$1; shift; }
 
     #wait max 2 min for sshd to start 
     success=""
@@ -742,7 +741,7 @@ function wait_for_ssh () {
     counter=1
     while [ "$current_time" -lt "$stop_time" ] ; do
          echo "$counter-th attempt to reach sshd in container $lxc ..."
-        [ -z "$guest_ip" ] && guest_ip=$(guest_ipv4_cached_or_from_virsh_leases $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 ; } || :
          counter=$(($counter+1))