sed -i -e "/#baseurl=.*$/i\\
$yumexclude_line" $repo
}
+
+########################################
+# workaround for broken lxc-enter-namespace
+# 1st version was relying on virsh net-dhcp-leases
+# however this was too fragile, would not work for fedora14 containers
+function guest_ipv4() {
+ lxc=$1; shift
+
+ 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;}'
+}
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() {
- 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
-}
-
function wait_for_ssh () {
set -x
set -e
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))
rpm -q libvirt > /dev/null
}
-### lxc-enter-namespace being broken, let us try to work around this issue
-# lbuild-initvm.sh stores the guest ipv4 address in /vservers/<container>/ipv4
-function guest_ipv4 () {
- buildname=$1; shift
- cat /vservers/$buildname/ipv4
-}
-
# convenient for simple commands
function run_in_build_guest () {
buildname=$1; shift