nixpkgs/pkgs/applications/virtualization/nova/default.nix
2014-08-27 13:26:00 +02:00

95 lines
2.7 KiB
Nix

{ stdenv, fetchurl, pythonPackages, intltool, libvirt, libxml2Python, curl, novaclient }:
with stdenv.lib;
let version = "2011.2"; in
stdenv.mkDerivation rec {
name = "nova-${version}";
src = fetchurl {
url = "http://launchpad.net/nova/cactus/${version}/+download/nova-${version}.tar.gz";
sha256 = "1s2w0rm332y9x34ngjz8sys9sbldg857rx9d6r3nb1ik979fx8p7";
};
patches =
[ ./convert.patch ];
pythonPath = with pythonPackages;
[ setuptools eventlet greenlet gflags netaddr sqlalchemy carrot routes
paste_deploy m2crypto ipy twisted sqlalchemy_migrate
distutils_extra simplejson readline glance cheetah lockfile httplib2
# !!! should libvirt be a build-time dependency? Note that
# libxml2Python is a dependency of libvirt.py.
libvirt libxml2Python
novaclient
];
buildInputs =
[ pythonPackages.python
pythonPackages.wrapPython
pythonPackages.mox
intltool
] ++ pythonPath;
PYTHON_EGG_CACHE = "`pwd`/.egg-cache";
preConfigure =
''
# Set the built-in state location to something sensible.
sed -i nova/flags.py \
-e "/DEFINE.*'state_path'/ s|../|/var/lib/nova|"
substituteInPlace nova/virt/images.py --replace /usr/bin/curl ${curl}/bin/curl
substituteInPlace nova/api/ec2/cloud.py \
--replace 'sh genrootca.sh' $out/libexec/nova/genrootca.sh
'';
buildPhase = "python setup.py build";
installPhase =
''
p=$(toPythonPath $out)
export PYTHONPATH=$p:$PYTHONPATH
mkdir -p $p
python setup.py install --prefix=$out
# Nova doesn't like to be called ".nova-foo-wrapped" because it
# computes some stuff from its own argv[0]. So put the wrapped
# programs in $out/libexec under their original names.
mkdir -p $out/libexec/nova
wrapProgram() {
local prog="$1"
local hidden=$out/libexec/nova/$(basename "$prog")
mv $prog $hidden
makeWrapper $hidden $prog "$@"
}
wrapPythonPrograms
cp -prvd etc $out/etc
# Nova makes some weird assumptions about where to find its own
# programs relative to the Python directory.
ln -sfn $out/bin $out/lib/${pythonPackages.python.libPrefix}/site-packages/bin
# Install the certificate generation script.
cp nova/CA/genrootca.sh $out/libexec/nova/
cp nova/CA/openssl.cnf.tmpl $out/libexec/nova/
# Allow nova-manage etc. to find the proper configuration file.
ln -s /etc/nova/nova.conf $out/libexec/nova/nova.conf
'';
doCheck = false; # !!! fix
checkPhase = "python setup.py test";
meta = {
homepage = http://nova.openstack.org/;
description = "OpenStack Compute (a.k.a. Nova), a cloud computing fabric controller";
broken = true;
};
}