Nova quickstart: move vish's novascript into contrib, and convert reademe.md to a quickstart.rst
This commit is contained in:
161
contrib/nova.sh
Executable file
161
contrib/nova.sh
Executable file
@@ -0,0 +1,161 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
DIR=`pwd`
|
||||||
|
CMD=$1
|
||||||
|
SOURCE_BRANCH=lp:nova
|
||||||
|
if [ -n "$2" ]; then
|
||||||
|
SOURCE_BRANCH=$2
|
||||||
|
fi
|
||||||
|
DIRNAME=nova
|
||||||
|
NOVA_DIR=$DIR/$DIRNAME
|
||||||
|
if [ -n "$3" ]; then
|
||||||
|
NOVA_DIR=$DIR/$3
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -n "$HOST_IP" ]; then
|
||||||
|
# NOTE(vish): This will just get the first ip in the list, so if you
|
||||||
|
# have more than one eth device set up, this will fail, and
|
||||||
|
# you should explicitly set HOST_IP in your environment
|
||||||
|
HOST_IP=`ifconfig | grep -m 1 'inet addr:'| cut -d: -f2 | awk '{print $1}'`
|
||||||
|
fi
|
||||||
|
TEST=0
|
||||||
|
USE_MYSQL=0
|
||||||
|
MYSQL_PASS=nova
|
||||||
|
USE_LDAP=0
|
||||||
|
LIBVIRT_TYPE=qemu
|
||||||
|
|
||||||
|
if [ "$USE_MYSQL" == 1 ]; then
|
||||||
|
SQL_CONN=mysql://root:$MYSQL_PASS@localhost/nova
|
||||||
|
else
|
||||||
|
SQL_CONN=sqlite:///$NOVA_DIR/nova.sqlite
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$USE_LDAP" == 1 ]; then
|
||||||
|
AUTH=ldapdriver.LdapDriver
|
||||||
|
else
|
||||||
|
AUTH=dbdriver.DbDriver
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p /etc/nova
|
||||||
|
cat >/etc/nova/nova-manage.conf << NOVA_CONF_EOF
|
||||||
|
--verbose
|
||||||
|
--nodaemon
|
||||||
|
--dhcpbridge_flagfile=/etc/nova/nova-manage.conf
|
||||||
|
--FAKE_subdomain=ec2
|
||||||
|
--cc_host=$HOST_IP
|
||||||
|
--routing_source_ip=$HOST_IP
|
||||||
|
--sql_connection=$SQL_CONN
|
||||||
|
--auth_driver=nova.auth.$AUTH
|
||||||
|
--libvirt_type=$LIBVIRT_TYPE
|
||||||
|
NOVA_CONF_EOF
|
||||||
|
|
||||||
|
if [ "$CMD" == "branch" ]; then
|
||||||
|
sudo apt-get install -y bzr
|
||||||
|
rm -rf $NOVA_DIR
|
||||||
|
bzr branch $SOURCE_BRANCH $NOVA_DIR
|
||||||
|
cd $NOVA_DIR
|
||||||
|
mkdir -p $NOVA_DIR/instances
|
||||||
|
mkdir -p $NOVA_DIR/networks
|
||||||
|
fi
|
||||||
|
|
||||||
|
# You should only have to run this once
|
||||||
|
if [ "$CMD" == "install" ]; then
|
||||||
|
sudo apt-get install -y python-software-properties
|
||||||
|
sudo add-apt-repository ppa:nova-core/ppa
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y dnsmasq open-iscsi kpartx kvm gawk iptables ebtables
|
||||||
|
sudo apt-get install -y user-mode-linux kvm libvirt-bin
|
||||||
|
sudo apt-get install -y screen iscsitarget euca2ools vlan curl rabbitmq-server
|
||||||
|
sudo modprobe kvm
|
||||||
|
sudo /etc/init.d/libvirt-bin restart
|
||||||
|
sudo apt-get install -y python-twisted python-sqlalchemy python-mox python-greenlet python-carrot
|
||||||
|
sudo apt-get install -y python-daemon python-eventlet python-gflags python-tornado python-ipy
|
||||||
|
sudo apt-get install -y python-libvirt python-libxml2 python-routes
|
||||||
|
if [ "$USE_MYSQL" == 1 ]; then
|
||||||
|
cat <<MYSQL_PRESEED | debconf-set-selections
|
||||||
|
mysql-server-5.1 mysql-server/root_password password $MYSQL_PASS
|
||||||
|
mysql-server-5.1 mysql-server/root_password_again password $MYSQL_PASS
|
||||||
|
mysql-server-5.1 mysql-server/start_on_boot boolean true
|
||||||
|
MYSQL_PRESEED
|
||||||
|
apt-get install -y mysql-server python-mysqldb
|
||||||
|
fi
|
||||||
|
wget http://c2477062.cdn.cloudfiles.rackspacecloud.com/images.tgz
|
||||||
|
tar -C $DIR -zxf images.tgz
|
||||||
|
fi
|
||||||
|
|
||||||
|
NL=`echo -ne '\015'`
|
||||||
|
|
||||||
|
function screen_it {
|
||||||
|
screen -S nova -X screen -t $1
|
||||||
|
screen -S nova -p $1 -X stuff "$2$NL"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$CMD" == "run" ]; then
|
||||||
|
killall dnsmasq
|
||||||
|
screen -d -m -S nova -t nova
|
||||||
|
sleep 1
|
||||||
|
if [ "$USE_MYSQL" == 1 ]; then
|
||||||
|
mysql -p$MYSQL_PASS -e 'DROP DATABASE nova;'
|
||||||
|
mysql -p$MYSQL_PASS -e 'CREATE DATABASE nova;'
|
||||||
|
else
|
||||||
|
rm $NOVA_DIR/nova.sqlite
|
||||||
|
fi
|
||||||
|
if [ "$USE_LDAP" == 1 ]; then
|
||||||
|
sudo $NOVA_DIR/nova/auth/slap.sh
|
||||||
|
fi
|
||||||
|
rm -rf $NOVA_DIR/instances
|
||||||
|
mkdir -p $NOVA_DIR/instances
|
||||||
|
rm -rf $NOVA_DIR/networks
|
||||||
|
mkdir -p $NOVA_DIR/networks
|
||||||
|
$NOVA_DIR/tools/clean-vlans
|
||||||
|
if [ ! -d "$NOVA_DIR/images" ]; then
|
||||||
|
ln -s $DIR/images $NOVA_DIR/images
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$TEST" == 1 ]; then
|
||||||
|
cd $NOVA_DIR
|
||||||
|
python $NOVA_DIR/run_tests.py
|
||||||
|
cd $DIR
|
||||||
|
fi
|
||||||
|
|
||||||
|
# create an admin user called 'admin'
|
||||||
|
$NOVA_DIR/bin/nova-manage user admin admin admin admin
|
||||||
|
# create a project called 'admin' with project manager of 'admin'
|
||||||
|
$NOVA_DIR/bin/nova-manage project create admin admin
|
||||||
|
# export environment variables for project 'admin' and user 'admin'
|
||||||
|
$NOVA_DIR/bin/nova-manage project environment admin admin $NOVA_DIR/novarc
|
||||||
|
# create 3 small networks
|
||||||
|
$NOVA_DIR/bin/nova-manage network create 10.0.0.0/8 3 16
|
||||||
|
|
||||||
|
# nova api crashes if we start it with a regular screen command,
|
||||||
|
# so send the start command by forcing text into the window.
|
||||||
|
screen_it api "$NOVA_DIR/bin/nova-api --flagfile=/etc/nova/nova-manage.conf"
|
||||||
|
screen_it objectstore "$NOVA_DIR/bin/nova-objectstore --flagfile=/etc/nova/nova-manage.conf"
|
||||||
|
screen_it compute "$NOVA_DIR/bin/nova-compute --flagfile=/etc/nova/nova-manage.conf"
|
||||||
|
screen_it network "$NOVA_DIR/bin/nova-network --flagfile=/etc/nova/nova-manage.conf"
|
||||||
|
screen_it scheduler "$NOVA_DIR/bin/nova-scheduler --flagfile=/etc/nova/nova-manage.conf"
|
||||||
|
screen_it volume "$NOVA_DIR/bin/nova-volume --flagfile=/etc/nova/nova-manage.conf"
|
||||||
|
screen_it test ". $NOVA_DIR/novarc"
|
||||||
|
screen -x
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$CMD" == "run" ] || [ "$CMD" == "terminate" ]; then
|
||||||
|
# shutdown instances
|
||||||
|
. $NOVA_DIR/novarc; euca-describe-instances | grep i- | cut -f2 | xargs euca-terminate-instances
|
||||||
|
sleep 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$CMD" == "run" ] || [ "$CMD" == "clean" ]; then
|
||||||
|
screen -S nova -X quit
|
||||||
|
rm *.pid*
|
||||||
|
$NOVA_DIR/tools/setup_iptables.sh clear
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$CMD" == "scrub" ]; then
|
||||||
|
$NOVA_DIR/tools/clean-vlans
|
||||||
|
if [ "$LIBVIRT_TYPE" == "uml" ]; then
|
||||||
|
virsh -c uml:///system list | grep i- | awk '{print \$1}' | xargs -n1 virsh -c uml:///system destroy
|
||||||
|
else
|
||||||
|
virsh list | grep i- | awk '{print \$1}' | xargs -n1 virsh destroy
|
||||||
|
fi
|
||||||
|
vblade-persist ls | grep vol- | awk '{print \$1\" \"\$2}' | xargs -n2 vblade-persist destroy
|
||||||
|
fi
|
@@ -16,6 +16,81 @@
|
|||||||
under the License.
|
under the License.
|
||||||
|
|
||||||
Nova Quickstart
|
Nova Quickstart
|
||||||
=========================
|
===============
|
||||||
|
|
||||||
http://github.com/vishvananda/novascript
|
The `contrib/novascript.sh` file in the source distribution is a script that
|
||||||
|
will quickly set up nova to run on a single machine. It is tested against
|
||||||
|
Ubuntu only, but other distributions are forthcoming.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
Unless you want to spend a lot of time fiddling with permissions and sudoers,
|
||||||
|
you should probably run nova as root.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo -i
|
||||||
|
|
||||||
|
If you are concerned about security, nova runs just fine inside a virtual
|
||||||
|
machine.
|
||||||
|
|
||||||
|
Use the script to install and run the current trunk. You can also specify a
|
||||||
|
specific branch by putting `lp:~someone/nova/some-branch` after the branch
|
||||||
|
command
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
./nova.sh branch
|
||||||
|
./nova.sh install
|
||||||
|
./nova.sh run
|
||||||
|
|
||||||
|
The run command will drop you into a screen session with all of the workers
|
||||||
|
running in different windows You can use eucatools to run commands against the
|
||||||
|
cloud.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
euca-add-keypair test > test.pem
|
||||||
|
euca-run-instances -k test -t m1.tiny ami-tiny
|
||||||
|
euca-describe-instances
|
||||||
|
|
||||||
|
To see output from the various workers, switch screen windows
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
<ctrl-a> "
|
||||||
|
|
||||||
|
will give you a list of running windows.
|
||||||
|
|
||||||
|
When the instance is running, you should be able to ssh to it.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
chmod 600 test.pem
|
||||||
|
ssh -i test.pem root@10.0.0.3
|
||||||
|
|
||||||
|
When you exit screen
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
<ctrl-a> <ctrl-d>
|
||||||
|
|
||||||
|
nova will terminate. It may take a while for nova to finish cleaning up. If
|
||||||
|
you exit the process before it is done because there were some problems in your
|
||||||
|
build, you may have to clean up the nova processes manually. If you had any
|
||||||
|
instances running, you can attempt to kill them through the api:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
./nova.sh terminate
|
||||||
|
|
||||||
|
Then you can destroy the screen:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
./nova.sh clean
|
||||||
|
|
||||||
|
If things get particularly messed up, you might need to do some more intense
|
||||||
|
cleanup. Be careful, the following command will manually destroy all runnning
|
||||||
|
virsh instances and attempt to delete all vlans and bridges.
|
||||||
|
Reference in New Issue
Block a user