While reviewing the OpenStack keystone codebase on an existing VM used with devstack I came across a dependency problem with Python pbr. Python Build Reasonableness (pbr) is actually a result of work on OpenStack. Additional info can be found at Openstack pbr.
On one server machine I had this package installed. At this time I do not know what process actually installed the pbr package.
$ sudo dpkg -l | grep pbr ii python-pbr 0.7.0-0ubuntu2 all inject useful and sensible default behaviors into setuptools - Python 2.x
This is incompatible with current code from several OpenStack projects, keystone and python-openstackclient being two I am working with when reviewing the projects requirements in requirements.txt.
$ grep pbr requirements.txt pbr>=0.6,!=0.7,<1.0
As seen here, 0.7 is specifically excluded. When updating this machine with the required versions to run the checked out code I ran into the following problem.
$ sudo -H pip install -r requirements.txt ... Found existing installation: pbr 0.7.0 Uninstalling pbr-0.7.0: ... OSError: [Errno 13] Permission denied: '/usr/lib/python2.7/dist-packages/pbr/version.py'
This lead me to determine I need to run multiple separate VMs. Dedicated VMs for devstack installations when I'm testing things, and a dedicated VM for source development. I later determined the best action was to do development on my host machine installing these developer dependencies and always running any deployed versions in VMs.
Minimum requirements
Using a stock Ubuntu 14.04 LTS server installation I took the time to iteratively check the needed dependencies
# Git needed to retrieve OpenStack code sudo apt-get install -y git-core # Python is installed by default on an Ubuntu Server # install easy_install sudo apt-get install python-setuptools # install pip - Package Management System Uses Python Package Index (PyPI) sudo easy_install pip # Install tox - Python automated and standardized testing sudo -H pip install tox # Python Developer Libraries sudo apt-get install -y python-dev # Openstack developer dependencies sudo apt-get install -y libffi-dev libssl-dev libldap2-dev libffi-dev libsasl2-dev libxslt1-dev libxml2-dev
With the necessary dependencies met, the following builds a working keystone developer virtual environment.
git clone git://git.openstack.org/openstack/keystone cd keystone tox -e py27 --notest
Required Dependencies
Certain projects do a good job of defining the required OS dependencies such as keystone.
To validate these requirements the following is an iterative process of determining the compilation error message and needed package dependency.
- For missing
#include <ffi.h>
install libffi-dev - For missing
#include <openssl/aes.h>
install libssl-dev - For missing
#include "lber.h"
install libldap2-dev - For missing
#include <ffi.h>
install libffi-dev - For missing
#include <sasl.h>
install libsasl2-dev - For missing
#include "libxml/xmlversion.h"
install libxslt1-dev which requires libxml2-dev
For setting up a development environment libsqlite3-dev was not initially needed. This does not mean it's needed later for testing purposes.
[…] this fail, you may want to ensure all OpenStack developer dependencies are inplace on your […]