Merge "Move Glance data and Nova state dirs out of source dir"
diff --git a/AUTHORS b/AUTHORS
index 22d5f32..cd0acac 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -30,6 +30,7 @@
 Justin Shepherd <galstrom21@gmail.com>
 Ken Pepple <ken.pepple@rabbityard.com>
 Kiall Mac Innes <kiall@managedit.ie>
+Matt Joyce <matt.joyce@cloudscaling.com>
 Osamu Habuka <xiu.yushen@gmail.com>
 Russell Bryant <rbryant@redhat.com>
 Scott Moser <smoser@ubuntu.com>
diff --git a/exercises/client-args.sh b/exercises/client-args.sh
index 9cbb6a6..b3e2ad8 100755
--- a/exercises/client-args.sh
+++ b/exercises/client-args.sh
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 
-**client-args.sh**
+# **client-args.sh**
 
 # Test OpenStack client authentication aguemnts handling
 
@@ -140,8 +140,10 @@
 report "Glance" $STATUS_GLANCE
 report "Swift" $STATUS_SWIFT
 
-echo "*********************************************************************"
-echo "SUCCESS: End DevStack Exercise: $0"
-echo "*********************************************************************"
+if (( $RETURN == 0 )); then
+    echo "*********************************************************************"
+    echo "SUCCESS: End DevStack Exercise: $0"
+    echo "*********************************************************************"
+fi
 
 exit $RETURN
diff --git a/exercises/client-env.sh b/exercises/client-env.sh
index 94f4a82..68c0e5a 100755
--- a/exercises/client-env.sh
+++ b/exercises/client-env.sh
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 
-**client-env.sh**
+# **client-env.sh**
 
 # Test OpenStack client enviroment variable handling
 
@@ -149,8 +149,10 @@
 report "Glance" $STATUS_GLANCE
 report "Swift" $STATUS_SWIFT
 
-echo "*********************************************************************"
-echo "SUCCESS: End DevStack Exercise: $0"
-echo "*********************************************************************"
+if (( $RETURN == 0 )); then
+    echo "*********************************************************************"
+    echo "SUCCESS: End DevStack Exercise: $0"
+    echo "*********************************************************************"
+fi
 
 exit $RETURN
diff --git a/exercises/euca.sh b/exercises/euca.sh
index fb052dd..79405c2 100755
--- a/exercises/euca.sh
+++ b/exercises/euca.sh
@@ -72,6 +72,48 @@
     exit 1
 fi
 
+# Volumes
+# -------
+if [[ "$ENABLED_SERVICES" =~ "n-vol" || "$ENABLED_SERVICES" =~ "c-vol" ]]; then
+   VOLUME=`euca-create-volume -s 1 -z $VOLUME_ZONE | cut -f2`
+   die_if_not_set VOLUME "Failure to create volume"
+
+   # Test that volume has been created
+   VOLUME=`euca-describe-volumes | cut -f2`
+
+   # Test volume has become available
+   if ! timeout $ASSOCIATE_TIMEOUT sh -c "while ! euca-describe-volumes $VOLUME | grep -q available; do sleep 1; done"; then
+       echo "volume didnt become available within $RUNNING_TIMEOUT seconds"
+       exit 1
+   fi
+
+   # Attach volume to an instance
+   euca-attach-volume -i $INSTANCE -d $ATTACH_DEVICE $VOLUME || \
+       die "Failure attaching volume $VOLUME to $INSTANCE"
+   if ! timeout $ACTIVE_TIMEOUT sh -c "while ! euca-describe-volumes $VOLUME | grep -q in-use; do sleep 1; done"; then
+       echo "Could not attach $VOLUME to $INSTANCE"
+       exit 1
+   fi
+
+   # Detach volume from an instance
+   euca-detach-volume $VOLUME || \
+       die "Failure detaching volume $VOLUME to $INSTANCE"
+    if ! timeout $ACTIVE_TIMEOUT sh -c "while ! euca-describe-volumes $VOLUME | grep -q available; do sleep 1; done"; then
+        echo "Could not detach $VOLUME to $INSTANCE"
+        exit 1
+    fi
+
+    # Remove volume
+    euca-delete-volume $VOLUME || \
+        die "Failure to delete volume"
+    if ! timeout $ACTIVE_TIMEOUT sh -c "while euca-describe-volumes | grep $VOLUME; do sleep 1; done"; then
+       echo "Could not delete $VOLUME"
+       exit 1
+    fi
+else
+    echo "Volume Tests Skipped"
+fi
+
 # Allocate floating address
 FLOATING_IP=`euca-allocate-address | cut -f2`
 die_if_not_set FLOATING_IP "Failure allocating floating IP"
diff --git a/files/apts/horizon b/files/apts/horizon
index 53bddf0..2161ccd 100644
--- a/files/apts/horizon
+++ b/files/apts/horizon
@@ -21,3 +21,4 @@
 python-cherrypy3 # why?
 python-migrate
 nodejs
+python-netaddr
diff --git a/files/horizon_settings.py b/files/horizon_settings.py
index 487c06e..d18fd1a 100644
--- a/files/horizon_settings.py
+++ b/files/horizon_settings.py
@@ -41,7 +41,6 @@
 HORIZON_CONFIG = {
     'dashboards': ('nova', 'syspanel', 'settings',),
     'default_dashboard': 'nova',
-    'user_home': 'openstack_dashboard.views.user_home',
 }
 
 # TODO(tres): Remove these once Keystone has an API to identify auth backend.
diff --git a/files/keystone_data.sh b/files/keystone_data.sh
index 3791917..e0d5c63 100755
--- a/files/keystone_data.sh
+++ b/files/keystone_data.sh
@@ -171,10 +171,10 @@
             --description="Heat Service")
         keystone endpoint-create \
             --region RegionOne \
-            --service_id $HEAT_SERVICE \
-            --publicurl "http://$SERVICE_HOST:$HEAT_API_PORT/v1" \
-            --adminurl "http://$SERVICE_HOST:$HEAT_API_PORT/v1" \
-            --internalurl "http://$SERVICE_HOST:$HEAT_API_PORT/v1"
+            --service_id $HEAT_CFN_SERVICE \
+            --publicurl "http://$SERVICE_HOST:$HEAT_API_CFN_PORT/v1" \
+            --adminurl "http://$SERVICE_HOST:$HEAT_API_CFN_PORT/v1" \
+            --internalurl "http://$SERVICE_HOST:$HEAT_API_CFN_PORT/v1"
     fi
 fi
 
diff --git a/files/rpms/horizon b/files/rpms/horizon
index 5e36820..12f75ba 100644
--- a/files/rpms/horizon
+++ b/files/rpms/horizon
@@ -15,6 +15,7 @@
 python-kombu
 python-migrate
 python-mox
+python-netaddr
 python-nose
 python-paste
 python-paste-deploy
diff --git a/files/rpms/nova b/files/rpms/nova
index bb92026..88ad8c3 100644
--- a/files/rpms/nova
+++ b/files/rpms/nova
@@ -35,7 +35,7 @@
 python-suds
 python-tempita
 rabbitmq-server # NOPRIME
-qpid-cpp-server # NOPRIME
+qpid-cpp-server-daemon # NOPRIME
 sqlite
 sudo
 vconfig
diff --git a/files/rpms/quantum b/files/rpms/quantum
index 6ca9c35..05398fc 100644
--- a/files/rpms/quantum
+++ b/files/rpms/quantum
@@ -17,7 +17,7 @@
 python-sqlalchemy
 python-suds
 rabbitmq-server # NOPRIME
-qpid-cpp-server # NOPRIME
+qpid-cpp-server-daemon # NOPRIME
 sqlite
 sudo
 vconfig
diff --git a/lib/heat b/lib/heat
index 6f442f8..0b234c4 100644
--- a/lib/heat
+++ b/lib/heat
@@ -1,7 +1,7 @@
 # lib/heat
 # Install and start Heat service
 # To enable, add the following to localrc
-# ENABLED_SERVICES+=,heat,h-api,h-eng,h-meta
+# ENABLED_SERVICES+=,heat,h-api-cfn,h-api-cw,h-eng,h-meta
 
 # Dependencies:
 # - functions
@@ -43,43 +43,47 @@
     fi
     sudo chown `whoami` $HEAT_CONF_DIR
 
-    HEAT_API_HOST=${HEAT_API_HOST:-$SERVICE_HOST}
-    HEAT_API_PORT=${HEAT_API_PORT:-8000}
+    HEAT_API_CFN_HOST=${HEAT_API_CFN_HOST:-$SERVICE_HOST}
+    HEAT_API_CFN_PORT=${HEAT_API_CFN_PORT:-8000}
     HEAT_ENGINE_HOST=${HEAT_ENGINE_HOST:-$SERVICE_HOST}
     HEAT_ENGINE_PORT=${HEAT_ENGINE_PORT:-8001}
     HEAT_METADATA_HOST=${HEAT_METADATA_HOST:-$SERVICE_HOST}
     HEAT_METADATA_PORT=${HEAT_METADATA_PORT:-8002}
+    HEAT_API_CW_HOST=${HEAT_API_CW_HOST:-$SERVICE_HOST}
+    HEAT_API_CW_PORT=${HEAT_API_CW_PORT:-8003}
 
-    HEAT_API_CONF=$HEAT_CONF_DIR/heat-api.conf
-    cp $HEAT_DIR/etc/heat-api.conf $HEAT_API_CONF
-    iniset $HEAT_API_CONF DEFAULT debug True
-    inicomment $HEAT_API_CONF DEFAULT log_file
-    iniset $HEAT_API_CONF DEFAULT use_syslog $SYSLOG
-    iniset $HEAT_API_CONF DEFAULT bind_host $HEAT_API_HOST
-    iniset $HEAT_API_CONF DEFAULT bind_port $HEAT_API_PORT
+    # cloudformation api
+    HEAT_API_CFN_CONF=$HEAT_CONF_DIR/heat-api-cfn.conf
+    cp $HEAT_DIR/etc/heat/heat-api-cfn.conf $HEAT_API_CFN_CONF
+    iniset $HEAT_API_CFN_CONF DEFAULT debug True
+    inicomment $HEAT_API_CFN_CONF DEFAULT log_file
+    iniset $HEAT_API_CFN_CONF DEFAULT use_syslog $SYSLOG
+    iniset $HEAT_API_CFN_CONF DEFAULT bind_host $HEAT_API_CFN_HOST
+    iniset $HEAT_API_CFN_CONF DEFAULT bind_port $HEAT_API_CFN_PORT
 
     if is_service_enabled rabbit; then
-        iniset $HEAT_API_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu
-        iniset $HEAT_API_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
-        iniset $HEAT_API_CONF DEFAULT rabbit_host $RABBIT_HOST
+        iniset $HEAT_API_CFN_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu
+        iniset $HEAT_API_CFN_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
+        iniset $HEAT_API_CFN_CONF DEFAULT rabbit_host $RABBIT_HOST
     elif is_service_enabled qpid; then
-        iniset $HEAT_API_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid
+        iniset $HEAT_API_CFN_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid
     fi
 
-    HEAT_API_PASTE_INI=$HEAT_CONF_DIR/heat-api-paste.ini
-    cp $HEAT_DIR/etc/heat-api-paste.ini $HEAT_API_PASTE_INI
-    iniset $HEAT_API_PASTE_INI filter:authtoken auth_host $KEYSTONE_AUTH_HOST
-    iniset $HEAT_API_PASTE_INI filter:authtoken auth_port $KEYSTONE_AUTH_PORT
-    iniset $HEAT_API_PASTE_INI filter:authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
-    iniset $HEAT_API_PASTE_INI filter:authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
-    iniset $HEAT_API_PASTE_INI filter:authtoken admin_tenant_name $SERVICE_TENANT_NAME
-    iniset $HEAT_API_PASTE_INI filter:authtoken admin_user heat
-    iniset $HEAT_API_PASTE_INI filter:authtoken admin_password $SERVICE_PASSWORD
-    iniset $HEAT_API_PASTE_INI filter:ec2authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
-    iniset $HEAT_API_PASTE_INI filter:ec2authtoken keystone_ec2_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0/ec2tokens
+    HEAT_API_CFN_PASTE_INI=$HEAT_CONF_DIR/heat-api-cfn-paste.ini
+    cp $HEAT_DIR/etc/heat/heat-api-cfn-paste.ini $HEAT_API_CFN_PASTE_INI
+    iniset $HEAT_API_CFN_PASTE_INI filter:authtoken auth_host $KEYSTONE_AUTH_HOST
+    iniset $HEAT_API_CFN_PASTE_INI filter:authtoken auth_port $KEYSTONE_AUTH_PORT
+    iniset $HEAT_API_CFN_PASTE_INI filter:authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
+    iniset $HEAT_API_CFN_PASTE_INI filter:authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
+    iniset $HEAT_API_CFN_PASTE_INI filter:authtoken admin_tenant_name $SERVICE_TENANT_NAME
+    iniset $HEAT_API_CFN_PASTE_INI filter:authtoken admin_user heat
+    iniset $HEAT_API_CFN_PASTE_INI filter:authtoken admin_password $SERVICE_PASSWORD
+    iniset $HEAT_API_CFN_PASTE_INI filter:ec2authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
+    iniset $HEAT_API_CFN_PASTE_INI filter:ec2authtoken keystone_ec2_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0/ec2tokens
 
+    # engine
     HEAT_ENGINE_CONF=$HEAT_CONF_DIR/heat-engine.conf
-    cp $HEAT_DIR/etc/heat-engine.conf $HEAT_ENGINE_CONF
+    cp $HEAT_DIR/etc/heat/heat-engine.conf $HEAT_ENGINE_CONF
     iniset $HEAT_ENGINE_CONF DEFAULT debug True
     inicomment $HEAT_ENGINE_CONF DEFAULT log_file
     iniset $HEAT_ENGINE_CONF DEFAULT use_syslog $SYSLOG
@@ -96,18 +100,9 @@
         iniset $HEAT_ENGINE_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid
     fi
 
-    HEAT_ENGINE_PASTE_INI=$HEAT_CONF_DIR/heat-engine-paste.ini
-    cp $HEAT_DIR/etc/heat-engine-paste.ini $HEAT_ENGINE_PASTE_INI
-    iniset $HEAT_ENGINE_PASTE_INI filter:authtoken auth_host $KEYSTONE_AUTH_HOST
-    iniset $HEAT_ENGINE_PASTE_INI filter:authtoken auth_port $KEYSTONE_AUTH_PORT
-    iniset $HEAT_ENGINE_PASTE_INI filter:authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
-    iniset $HEAT_ENGINE_PASTE_INI filter:authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
-    iniset $HEAT_ENGINE_PASTE_INI filter:authtoken admin_tenant_name $SERVICE_TENANT_NAME
-    iniset $HEAT_ENGINE_PASTE_INI filter:authtoken admin_user heat
-    iniset $HEAT_ENGINE_PASTE_INI filter:authtoken admin_password $SERVICE_PASSWORD
-
+    # metadata api
     HEAT_METADATA_CONF=$HEAT_CONF_DIR/heat-metadata.conf
-    cp $HEAT_DIR/etc/heat-metadata.conf $HEAT_METADATA_CONF
+    cp $HEAT_DIR/etc/heat/heat-metadata.conf $HEAT_METADATA_CONF
     iniset $HEAT_METADATA_CONF DEFAULT debug True
     inicomment $HEAT_METADATA_CONF DEFAULT log_file
     iniset $HEAT_METADATA_CONF DEFAULT use_syslog $SYSLOG
@@ -123,8 +118,36 @@
     fi
 
     HEAT_METADATA_PASTE_INI=$HEAT_CONF_DIR/heat-metadata-paste.ini
-    cp $HEAT_DIR/etc/heat-metadata-paste.ini $HEAT_METADATA_PASTE_INI
+    cp $HEAT_DIR/etc/heat/heat-metadata-paste.ini $HEAT_METADATA_PASTE_INI
 
+    # cloudwatch api
+    HEAT_API_CW_CONF=$HEAT_CONF_DIR/heat-api-cloudwatch.conf
+    cp $HEAT_DIR/etc/heat/heat-api-cloudwatch.conf $HEAT_API_CW_CONF
+    iniset $HEAT_API_CW_CONF DEFAULT debug True
+    inicomment $HEAT_API_CW_CONF DEFAULT log_file
+    iniset $HEAT_API_CW_CONF DEFAULT use_syslog $SYSLOG
+    iniset $HEAT_API_CW_CONF DEFAULT bind_host $HEAT_API_CW_HOST
+    iniset $HEAT_API_CW_CONF DEFAULT bind_port $HEAT_API_CW_PORT
+
+    if is_service_enabled rabbit; then
+        iniset $HEAT_API_CW_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu
+        iniset $HEAT_API_CW_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
+        iniset $HEAT_API_CW_CONF DEFAULT rabbit_host $RABBIT_HOST
+    elif is_service_enabled qpid; then
+        iniset $HEAT_API_CW_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid
+    fi
+
+    HEAT_API_CW_PASTE_INI=$HEAT_CONF_DIR/heat-api-cloudwatch-paste.ini
+    cp $HEAT_DIR/etc/heat/heat-api-cloudwatch-paste.ini $HEAT_API_CW_PASTE_INI
+    iniset $HEAT_API_CW_PASTE_INI filter:authtoken auth_host $KEYSTONE_AUTH_HOST
+    iniset $HEAT_API_CW_PASTE_INI filter:authtoken auth_port $KEYSTONE_AUTH_PORT
+    iniset $HEAT_API_CW_PASTE_INI filter:authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
+    iniset $HEAT_API_CW_PASTE_INI filter:authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
+    iniset $HEAT_API_CW_PASTE_INI filter:authtoken admin_tenant_name $SERVICE_TENANT_NAME
+    iniset $HEAT_API_CW_PASTE_INI filter:authtoken admin_user heat
+    iniset $HEAT_API_CW_PASTE_INI filter:authtoken admin_password $SERVICE_PASSWORD
+    iniset $HEAT_API_CW_PASTE_INI filter:ec2authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
+    iniset $HEAT_API_CW_PASTE_INI filter:ec2authtoken keystone_ec2_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0/ec2tokens
 }
 
 # init_heat() - Initialize database
@@ -145,7 +168,8 @@
 # start_heat() - Start running processes, including screen
 function start_heat() {
     screen_it h-eng "cd $HEAT_DIR; bin/heat-engine --config-file=$HEAT_CONF_DIR/heat-engine.conf"
-    screen_it h-api "cd $HEAT_DIR; bin/heat-api --config-dir=$HEAT_CONF_DIR/heat-api.conf"
+    screen_it h-api-cfn "cd $HEAT_DIR; bin/heat-api-cfn --config-dir=$HEAT_CONF_DIR/heat-api-cfn.conf"
+    screen_it h-api-cw "cd $HEAT_DIR; bin/heat-api-cloudwatch --config-dir=$HEAT_CONF_DIR/heat-api-cloudwatch.conf"
     screen_it h-meta "cd $HEAT_DIR; bin/heat-metadata --config-dir=$HEAT_CONF_DIR/heat-metadata.conf"
 }
 
diff --git a/lib/keystone b/lib/keystone
index a0cc601..a6ab5a3 100644
--- a/lib/keystone
+++ b/lib/keystone
@@ -36,7 +36,7 @@
 KEYSTONECLIENT_DIR=$DEST/python-keystoneclient
 
 # Select the backend for Keystopne's service catalog
-KEYSTONE_CATALOG_BACKEND=${KEYSTONE_CATALOG_BACKEND:-template}
+KEYSTONE_CATALOG_BACKEND=${KEYSTONE_CATALOG_BACKEND:-sql}
 KEYSTONE_CATALOG=$KEYSTONE_CONF_DIR/default_catalog.templates
 
 # Set Keystone interface configuration
diff --git a/stack.sh b/stack.sh
index fa1bf46..e444e38 100755
--- a/stack.sh
+++ b/stack.sh
@@ -686,7 +686,7 @@
     rm -f "$tfile"
 elif is_service_enabled qpid; then
     if [[ "$os_PACKAGE" = "rpm" ]]; then
-        install_package qpid-cpp-server
+        install_package qpid-cpp-server-daemon
     else
         install_package qpidd
     fi
@@ -1013,7 +1013,7 @@
     ADMIN_PASSWORD=$ADMIN_PASSWORD SERVICE_TENANT_NAME=$SERVICE_TENANT_NAME SERVICE_PASSWORD=$SERVICE_PASSWORD \
     SERVICE_TOKEN=$SERVICE_TOKEN SERVICE_ENDPOINT=$SERVICE_ENDPOINT SERVICE_HOST=$SERVICE_HOST \
     S3_SERVICE_PORT=$S3_SERVICE_PORT KEYSTONE_CATALOG_BACKEND=$KEYSTONE_CATALOG_BACKEND \
-    DEVSTACK_DIR=$TOP_DIR ENABLED_SERVICES=$ENABLED_SERVICES HEAT_API_PORT=$HEAT_API_PORT \
+    DEVSTACK_DIR=$TOP_DIR ENABLED_SERVICES=$ENABLED_SERVICES HEAT_API_CFN_PORT=$HEAT_API_CFN_PORT \
         bash -x $FILES/keystone_data.sh
 
     # Set up auth creds now that keystone is bootstrapped
diff --git a/tools/xen/prepare_guest_template.sh b/tools/xen/prepare_guest_template.sh
index 60782d0..baf9c3a 100755
--- a/tools/xen/prepare_guest_template.sh
+++ b/tools/xen/prepare_guest_template.sh
@@ -49,7 +49,7 @@
 XS_TOOLS_FILE_NAME="xs-tools.deb"
 XS_TOOLS_PATH="/root/$XS_TOOLS_FILE_NAME"
 if [ -e "$ISO_DIR" ]; then
-    TOOLS_ISO=$(ls $ISO_DIR/xs-tools-*.iso)
+    TOOLS_ISO=$(ls -1 $ISO_DIR/xs-tools-*.iso | head -1)
     TMP_DIR=/tmp/temp.$RANDOM
     mkdir -p $TMP_DIR
     mount -o loop $TOOLS_ISO $TMP_DIR