cosmetic
[build.git] / lbuild-initvm.sh
index bb2e540..0b088f6 100755 (executable)
@@ -13,27 +13,17 @@ BUILD_DIR=$(pwd)
 # pkgs parsing utilities
 export PATH=$(dirname $0):$PATH
 
+# old guests have e.g. mount in /bin but this is no longer part of 
+# the standard PATH in recent hosts after usrmove, so let's keep it simple
+export PATH=$PATH:/bin:/sbin
+
 . build.common
 
 DEFAULT_FCDISTRO=f20
 DEFAULT_PLDISTRO=lxc
 DEFAULT_PERSONALITY=linux64
 
-COMMAND_LBUILD="lbuild-initvm.sh"
-COMMAND_LTEST="ltest-initvm.sh"
-
 ##########
-# when creating build boxes we use private NAT'ed addresses for the VMs
-# as per virbr0 that is taken care of by libvirt at startup
-PRIVATE_BRIDGE="virbr0"
-PRIVATE_PREFIX="192.168.122."
-PRIVATE_GATEWAY="192.168.122.1"
-# beware that changing this would break the logic of random_private_byte...
-PRIVATE_MASKLEN=24
-
-# we just try randomly in that range until a free IP address shows up
-PRIVATE_ATTEMPTS=20
-
 # constant
 PUBLIC_BRIDGE=br0
 
@@ -746,7 +736,7 @@ function post_install () {
        post_install_build $lxc $personality
        lxc_start $lxc
        # manually run dhclient in guest - somehow this network won't start on its own
-       virsh -c lxc:/// lxc-enter-namespace $lxc $(bin_in_container $lxc dhclient) $VIF_GUEST
+       virsh -c lxc:/// lxc-enter-namespace $lxc /bin/bash -c "dhclient $VIF_GUEST"
     else
        post_install_myplc $lxc $personality
        lxc_start $lxc
@@ -896,18 +886,21 @@ function failure () {
 
 function usage () {
     set +x 
-    echo "Usage: $COMMAND_LBUILD [options] lxc-name"
-    echo "Usage: $COMMAND_LTEST [options] lxc-name"
+    echo "Usage: $COMMAND [options] lxc-name             (aka build mode)"
+    echo "Usage: $COMMAND -n hostname [options] lxc-name (aka test mode)"
     echo "Description:"
-    echo "   This command creates a fresh lxc instance, for building, or running a test myplc"
+    echo "    This command creates a fresh lxc instance, for building, or running a test myplc"
+    echo "In its first form, spawned VM gets a private IP bridged with virbr0 over dhcp/nat"
+    echo "With the second form, spawned VM gets a public IP bridged on public bridge br0"
+    echo ""
     echo "Supported options"
+    echo " -n hostname - the hostname to use in container"
     echo " -f fcdistro - for creating the root filesystem - defaults to $DEFAULT_FCDISTRO"
-    echo " -d pldistro - defaults to $DEFAULT_PLDISTRO"
+    echo " -d pldistro - defaults to $DEFAULT_PLDISTRO - current support for fedoras debians ubuntus"
     echo " -p personality - defaults to $DEFAULT_PERSONALITY"
-    echo " -n hostname - the hostname to use in container - required with $COMMAND_LTEST"
-    echo " -r repo-url - used to populate yum.repos.d - required with $COMMAND_LTEST"
-    echo " -P pkgs_file - defines the set of extra pacakges"
-    echo "    by default we use vtest.pkgs or devel.pkgs according to $COMMAND"
+    echo " -r repo-url - used to populate yum.repos.d - required in test mode"
+    echo " -P pkgs_file - defines a set of extra packages to install in guest"
+    echo "    by default we use devel.pkgs (build mode) or runtime.pkgs (test mode)"
     echo " -v be verbose"
     exit 1
 }
@@ -923,29 +916,12 @@ function main () {
           exit 1
     fi
 
-    case "$COMMAND" in
-       $COMMAND_LBUILD)
-           BUILD_MODE=true ;;
-       $COMMAND_LTEST)
-           TEST_MODE=true;;
-       *)
-           usage ;;
-    esac
-
-    echo 'build mode=' $BUILD_MODE 'test mode=' $TEST_MODE
-
-    # the set of preinstalled packages - depends on vbuild or vtest
-    if [ -n "$BUILD_MODE" ] ; then
-       PREINSTALLED=devel.pkgs
-    else
-       PREINSTALLED=vtest.pkgs
-    fi
-    while getopts "f:d:p:n:r:P:v" opt ; do
+    while getopts "n:f:d:p:r:P:v" opt ; do
        case $opt in
+           n) GUEST_HOSTNAME=$OPTARG;;
            f) fcdistro=$OPTARG;;
            d) pldistro=$OPTARG;;
            p) personality=$OPTARG;;
-           n) GUEST_HOSTNAME=$OPTARG;;
            r) REPO_URL=$OPTARG;;
            P) PREINSTALLED=$OPTARG;;
            v) VERBOSE=true; set -x;;
@@ -960,8 +936,8 @@ function main () {
     lxc=$1 ; shift
     lxc_root=/vservers/$lxc
     # rainchecks
-    [ -d $lxc_root ] && \
-       { echo "container $lxc already exists in filesystem - exiting" ; exit 1 ; }
+    almost_empty $lxc_root || \
+       { echo "container $lxc already exists in $lxc_root - exiting" ; exit 1 ; }
     virsh -c lxc:/// domuuid $lxc >& /dev/null && \
        { echo "container $lxc already exists in libvirt - exiting" ; exit 1 ; }
     mkdir -p $lxc_root
@@ -969,14 +945,29 @@ function main () {
     # check we've exhausted the arguments
     [[ -n "$@" ]] && usage
 
+    # BUILD_MODE is true unless we specified a hostname
+    [ -n "$GUEST_HOSTNAME" ] || BUILD_MODE=true
+
+    # set default values
     [ -z "$fcdistro" ] && fcdistro=$DEFAULT_FCDISTRO
     [ -z "$pldistro" ] && pldistro=$DEFAULT_PLDISTRO
     [ -z "$personality" ] && personality=$DEFAULT_PERSONALITY
     
+    # the set of preinstalled packages - depends on mode
+    if [ -z "$PREINSTALLED"] ; then
+       if [ -n "$BUILD_MODE" ] ; then
+           PREINSTALLED=devel.pkgs
+       else
+           PREINSTALLED=runtime.pkgs
+       fi
+    fi
+
     if [ -n "$BUILD_MODE" ] ; then
+       # we can now set GUEST_HOSTNAME safely
         [ -z "$GUEST_HOSTNAME" ] && GUEST_HOSTNAME=$lxc
     else
-       [[ -z "$GUEST_HOSTNAME" ]] && usage
+       # 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=""
@@ -1002,8 +993,6 @@ function main () {
     # (build mode relies entirely on dhcp on the private subnet)
     if [ -z "$BUILD_MODE" ] ; then
 
-        [[ -z "GUEST_HOSTNAME" ]] && usage
-       
        create_bridge_if_needed
 
        GUEST_IP=$(gethostbyname $GUEST_HOSTNAME)