X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=vbuild-init-lxc.sh;h=004b7fa6d94728b4414ba0ffe7194c436592a941;hb=5f2b591bc1015685ebccd820f415e2476cf579c3;hp=82db67efdab3c89f52eaf93a0923fd49925fa4d9;hpb=56ffebc99fd741a88fd58ac91a5e9a7b88abc322;p=build.git diff --git a/vbuild-init-lxc.sh b/vbuild-init-lxc.sh index 82db67ef..004b7fa6 100755 --- a/vbuild-init-lxc.sh +++ b/vbuild-init-lxc.sh @@ -5,6 +5,7 @@ COMMAND=$(basename $0) DIRNAME=$(dirname $0) +BUILD_DIR=$(pwd) # pkgs parsing utilities PATH=$(dirname $0):$PATH export PATH @@ -18,7 +19,8 @@ DEFAULT_IFNAME=eth0 COMMAND_VBUILD="vbuild-init-lxc.sh" COMMAND_MYPLC="vtest-init-lxc.sh" -lxc_version="0.8.0-rc2" +lxc_version="0.8.0" +lxc_git_repo="git://lxc.git.sourceforge.net/gitroot/lxc/lxc" function bridge_init () { @@ -81,7 +83,8 @@ broadcast=$(/sbin/ip addr show $INTERFACE_LAN | grep -v inet6 | grep inet | head sleep 2 echo "Setting bridge address=$address broadcast=$broadcast" # static - /sbin/ifconfig $INTERFACE_BRIDGE $address broadcast $broadcast up + #/sbin/ifconfig $INTERFACE_BRIDGE $address broadcast $broadcast up + dhclient $INTERFACE_BRIDGE sleep 1 #Reconfigure the routing table @@ -153,7 +156,7 @@ function prepare_host() { echo "Found version" '['$lxc_installed_version']' echo "Installing lxc ..." cd /root - [ -d lxc ] || git clone git://lxc.git.sourceforge.net/gitroot/lxc/lxc + [ -d lxc ] || git clone "$lxc_git_repo" cd lxc git pull git checkout $lxc_version @@ -161,6 +164,9 @@ function prepare_host() { ./configure --prefix=/usr --exec-prefix=/usr make make install + mkdir -p /usr/var/lib/ + [ -d /usr/var/lib/lxc ] || ln -s /var/lib/lxc /usr/var/lib/lxc + cd $BUILD_DIR fi # #create a placeholder (just a hack to make lxc works) @@ -172,7 +178,7 @@ function prepare_host() { isInstalled=$(netstat -rn | grep '^0.0.0.0' | awk '{print $8;}') if [ "$isInstalled" != "br0" ] ; then bridge_init - sleep5 + sleep 5 fi return 0 @@ -376,6 +382,7 @@ lxc.network.link = $lxc_network_link lxc.network.name = $IFNAME lxc.network.mtu = 1500 lxc.network.ipv4 = $IP/$CIDR +lxc.network.veth.pair = $veth_pair #cgroups #lxc.cgroup.devices.deny = a # /dev/null and zero @@ -550,9 +557,25 @@ function setup_lxc() { mkdir $rootfs_path/root/.ssh cat /root/.ssh/id_rsa.pub >> $rootfs_path/root/.ssh/authorized_keys + # start container lxc-start -d -n $lxc - sleep 20 + echo $IP is up, waiting for ssh... + + # wait max 5 min for sshd to start + ssh_up="" + stop_time=$(($(date +%s) + 300)) + current_time=$(date +%s) + + while [ "$current_time" -lt "$stop_time" ] ; do + echo "ssh attempt ..." + ssh -o "StrictHostKeyChecking no" $IP 'uname -i' && { ssh_up=true; echo "SSHD in container $lxc is UP"; break ; } || : + sleep 10 + current_time=$(($current_time + 10)) + done + + [ -z $ssh_up ] && echo "SSHD in container $lxc is not running" + # rpm --rebuilddb chroot $rootfs_path rpm --rebuilddb @@ -824,7 +847,10 @@ function main () { echo "Unknown personality: $personality" fi - + # need lxc installed before we can run lxc-ls + # need bridge installed + prepare_host + if [ -n "$VBUILD_MODE" ] ; then # Bridge IP affectation @@ -838,6 +864,7 @@ function main () { lxc_network_type=veth lxc_network_link=virbr0 + veth_pair="veth$z" echo "the IP address of container $lxc is $IP " else [[ -z "$REPO_URL" ]] && usage @@ -847,6 +874,7 @@ function main () { [[ -z "$HOSTNAME" ]] && usage lxc_network_type=veth lxc_network_link=br0 + veth_pair="i$(echo $HOSTNAME | cut -d. -f1)" fi CIDR=$(cidr_notation $NETMASK) @@ -857,22 +885,16 @@ function main () { exit 1 fi - # need lxc installed before we can run lxc-ls - prepare_host - - if [ ! -z "$(lxc-ls | grep $lxc)" ];then - echo "container $lxc exists" - exit 1 - fi - - path=/var/lib/lxc rootfs_path=$path/$lxc/rootfs config_path=$path/$lxc cache_base=/var/cache/lxc/fedora/$arch cache=$cache_base/$release root_password=root - + + # check whether the rootfs directory is created to know if the container exists + # bacause /var/lib/lxc/$lxc is already created while putting $lxc.timestamp + [ -d $rootfs_path ] && { echo "container $lxc already exists - exiting" ; exit 1 ; } setup_lxc $lxc $fcdistro $pldistro $personality