01 April 2014

Using devstack to install openstack all-in-one on ubuntu should be simple and quick. But there are quite a few pitfalls while using this tool.


I’m installaing openstack stable/havana branch on ubuntu server 12.04. Ceilometer is also installed.

Installation Troubleshooting

During stack.sh installation:

  • Rabbitmq requires hostname, /etc/hosts and /etc/hostname in consist. Otherwise stack.sh complains on “rabbitmqctl status” command.

  • Devstack/clean.sh can be use to clean all and re-install. But it won’t remove git repos under /opt/stack/*.

  • Devstack has havana branch. You must use it if you install openstack in havana branch.

  • Ceilometer-dbsync raises “__init__() got an unexpected keyword argument ‘match’” while stack.sh installing. This is because alembic has incorrect version (use pip list to see). alembic should >=0.4.1 and <= 0.6.3, even though ceilometer’s requirements.txt only specifies >=0.4.1.

  • Ceilometer should use mongodb rather than mysql. Otherwise horizon /admin/metering raises HTTPInternalServerError. Devstack defaults to use mysql, so you have to add CEILOMETER_BACKEND=mongodb in local.conf.

  • Devstack may install mongodb with lower version than required (>=2.2). Recommend you install 2.2.3.

After stack.sh completes:

  • /etc/nova/nova.conf logging_XXX_suffix/prefix, log_XXX_format_string options contain “%(color)s”. It writes control characters into nova log, making reading hard.
logging_exception_prefix = %(asctime)s.%(msecs)03d TRACE %(name)s %(instance)s  
logging_debug_format_suffix = (pid=%(process)d) %(funcName)s %(pathname)s:%(lineno)d  
logging_default_format_string = %(asctime)s.%(msecs)03d %(levelname)s %(name)s %(instance)s%(message)s      
logging_context_format_string = %(asctime)s.%(msecs)03d %(levelname)s %(name)s %(request_id)s %(user_name)s %(project_name)s %(instance)s%(message)s  
  • Horizon logging, horizon/openstack_dashboard/local/local_settigns.py, set log level to INFO. Change it to DEBUG.

  • Change timezone, so that log has correct timestamp.

sudo dpkg-reconfigure tzdata
  • Since our developing has added new mysql tables to nova, we need db sync.
source ~/workspace/devstack/accrc/admin/admin
nova-manage db sync
sudo ~/stopnova.sh
sleep 2
sudo ~/startnova.sh
  • Install brctl command if missing. It is needed for set up vm networking. See

  • Devstack rejoin-stack.sh will enter “screen” shell. To exit, use ctrl-a-d. See

  • VM Fusion’s VM, after restart, may change IP address. This corrupts Openstack installed on it. To set static IP for VM Fusion’s VM, see


This is the local.conf I have been using for devstack:

disable_service cinder c-sch c-api c-vol tempest
# Enable swift
enable_service s-proxy s-object s-container s-account
# Enable the ceilometer metering services
enable_service ceilometer-acompute ceilometer-acentral ceilometer-anotification ceilometer-collector
# Enable the ceilometer alarming services
enable_service ceilometer-alarm-evaluator,ceilometer-alarm-notifier
# Enable the ceilometer api services
enable_service ceilometer-api
# Don't use mysql or impl_sqlalchemy.py raises NotImplemetedError

Scripts to Start/Stop Nova

On default, openstack services (by devstack) log to screen. Devstack write screen log down to /opt/stack/logs/screen/*. But, by using these scripts, nova log is written to /var/log/nova/* (you have to assign the right permission).

  • Start nova - startnova.sh
service rabbitmq-server start
sleep 5
glance-registry >> /var/log/nova/glance-registry.log 2>&1 &
glance-api >> /var/log/nova/glance-api.log 2>&1 &
keystone-all >> /var/log/keystone/keystone-all.log 2>&1 &
nova-api >> /var/log/nova/nova-api.log 2>&1 &
nova-scheduler >> /var/log/nova/nova-scheduler.log 2>&1 &
nova-wsproxy >> /var/log/nova/nova-wsproxy.log 2>&1 &
nova-network >> /var/log/nova/nova-network.log 2>&1 &
nova-volume >> /var/log/nova/nova-volume.log 2>&1 &
nova-compute >> /var/log/nova/nova-compute.log 2>&1 &
nova-conductor >> /var/log/nova/nova-conductor.log 2>&1 &
sleep 2
swift-init --run-dir=/opt/stack/data/swift/run all start
  • Stop nova - stopnova.sh

swift-init --run-dir=/opt/stack/data/swift/run all stop
sleep 2
kill -9 `ps aux | grep swift | awk '{print $2}'`

kill -9 `ps aux | grep nova-api | awk '{print $2}'`
kill -9 `ps aux | grep nova-scheduler | awk '{print $2}'`
kill -9 `ps aux | grep nova-wsproxy.py | awk '{print $2}'`
kill -9 `ps aux | grep 'nova-' | awk '{print $2}'`
kill -9 `ps aux | grep glance | awk '{print $2}'`
kill -9 `ps aux | grep keystone | awk '{print $2}'`

service rabbitmq-server stop

Others Issues

  • Horizon, which is django, runs on Apache. After editing code, if without restarting Apache, the code won’t be reloaded.

  • Horizon log is at /opt/stack/logs/screen/screen-horizon*.log and /var/log/apache/horizon*.log

  • Openstack services log in specific format. Log type is written as “2014-05-16 10:10:30.259 ERROR …”. So to grep for errors, you only need to “grep ERROR

2014-05-16 10:10:30.259 ERROR nova.openstack.common.rpc.amqp req-2ccfcdc7-540c-4550-8e67-e4f175ceb865 admin demo Exception during message handling
2014-05-16 10:10:30.259 TRACE nova.openstack.common.rpc.amqp Traceback (most recent call last):
2014-05-16 10:10:30.259 TRACE nova.openstack.common.rpc.amqp   File "/opt/stack/nova/nova/openstack/common/rpc/amqp.py", line 461, in _process_data
2014-05-16 10:10:30.259 TRACE nova.openstack.common.rpc.amqp     **args)
  • If host doesn’t have enough memory (free -m), launch instance can raise ERROR. See

  • When VM launch failed in Horizon, few error info is given. However, using nova cli to launch VM usually show more hints.

nova boot --flavor 1 --image <image_id> --key-name default_key my_instance
  • Even though my startnova.sh and devstack/rejoin-stack.sh both can launch openstack services. If you run both of them, some services such as nova-scheduler will be started twice, causing trouble.

  • When using startnova.sh, if you first ./startnova.sh, then rm -rf /var/log/nova/*. Then nova won’t output any logs. So don’t remove log files, while nova running.

  • A convenient code snap to restart service for debugging.

sudo ~/stopnova.sh
rm -rf /var/log/nova/*
sleep 3
sudo ~/startnova.sh
sleep 5
grep -r ERROR /var/log/nova/*
  • Swift on defaut log to /dev/log, i.e. /var/log/syslog

  • Remember to open tcp and udp in security group.

  • All right, so after all the correct steps, log is the best place to find ERROR.

Create an Issue or comment below