anvil/tools
Joshua Harlow 646282b533 Attempt to use virtualenv for bootstrapping
To avoid anvils dependencies causing conflicts with the
prepared, packaged, and installed openstack dependencies
use a virtualenv to install said dependencies and then
use the python that exists in that environment to run anvil
instead of the system python.

Change-Id: I6bb7851baa481b768f92bd828a9cec64e60f190d
2014-03-07 09:20:12 -08:00
..
bootstrap Attempt to use virtualenv for bootstrapping 2014-03-07 09:20:12 -08:00
build-install-node-from-source.sh Remove installing nodejs repo from nodejs.tchol.org 2013-03-23 18:52:10 -07:00
build-openvswitch.sh Add build-openvswitch.sh tool 2013-06-17 23:27:54 -07:00
clean-pip Move multipip and associated to tools + docs. 2013-05-31 22:30:15 -07:00
clear-dns.sh Add clear dns util 2012-04-26 15:48:04 -07:00
endpoint-service-replace.py Clean-up pep8 E127 warnings 2014-02-14 17:43:20 +02:00
euca.sh Remove euca2ools from being installed since it pulls in a incompatible version of boto 2012-12-07 17:05:30 -08:00
generate-dummy-nova-conf.py Small spelling fix 2014-03-01 02:35:45 +02:00
git-changelog Fix flake8 compliants in tools python programs. 2013-08-04 22:53:43 -07:00
img-uploader.py Clean-up pep8 E123-E126 warnings 2014-02-24 17:17:37 +04:00
install-neutron-ns-packages.sh Check if network namespaces are supported 2013-11-15 12:35:08 +02:00
multipip Handle strict version conflicts correctly 2013-08-08 12:33:50 +03:00
pre-commit tools/pre-commit: Don't use stashes 2013-06-24 21:09:27 +03:00
py2rpm Make py2rpm respect current virtualenv 2014-03-05 14:17:40 +04:00
README.rst Refactor package management 2013-10-11 18:15:01 +03:00
resize.sh add a utility for resizing filesystem images manually 2012-07-18 00:03:10 +00:00
specprint Ignore more fields for specprint + update docs. 2013-08-03 10:54:37 -07:00
validate-yaml.py Make the yaml check work on older pythons + pylint cleanups 2012-09-14 19:19:01 -07:00
yaml-pretty.py Clean-up pep8 E128 warnings 2014-02-14 17:43:20 +02:00
yyoom yyoom: Minor logging improvements 2014-02-25 13:36:16 +04:00

Anvil utility toolbelt

multipip

pip utility refuses to handle multiple requirements for one package:

$ pip install 'nose>=1.2' 'nose>=2' 'nose<4'
Double requirement given: nose>=2 (already in nose>=1.2, name='nose')

Use multipip to join these requirements:

$ multipip 'nose>=1.2' 'nose>=2' 'nose<4'
nose>=2,<4

multipip can be used to run `pip`:

$ pip install $(multipip -r pip-requires)
...

Files of requirements can be used as well:

$ cat pip-requires
nose<4
$ multipip 'nose>=1.2' 'nose>=2' -r pip-requires
nose>=2,<4

multipip prints error messages for incompatible requirements to stderr and chooses the first one (note: command-line requirements take precedence over files):

$ cat pip-requires
pip==1.3
$ multipip 'pip==1.2' -r pip-requires
pip: incompatible requirements
Choosing:
    command line: pip==1.2
Conflicting:
    -r pip-requires (line 1): pip==1.3
pip==1.2

It is possible to filter some packages from printed output. This can be useful for a huge pip-requires file:

$ cat pip-requires
nose<4
pip==1.2
nose>=1.2
$ multipip -r pip-requires --ignore-packages nose
pip==1.2

Installed packages can be filtered, too (they are taken from pip freeze):

$ cat pip-requires
nose<4
pip==1.2
nose>=1.2
$ pip freeze | grep nose
nose==1.1.2
$ multipip -r pip-requires --ignore-installed
pip==1.2

py2rpm

Distutils provides an interface for building RPMs:

$ python ./setup.py bdist_rpm

This tool has several problems:

  • Red Hat based distros use different package names, e.g., python-setuptools instead of distribute, python-nose instead of nose and so on...
  • Requires and Conflicts sections for generated RPM are incorrect.
  • Sometimes not all required files are packaged.
  • Miscellaneous problems with man files;
  • Package directory in /usr/lib*/python*/site-packages/<pkg> is not owned by any RPM;
  • Some packages (like selenium) are architecture dependent but bdist_rpm generates BuildArch: noarch for them.

py2rpm is aimed to solve all these problems.

py2rpm accepts a list of archive names or package directories and builds RPMs (current directory is used by default):

$ py2rpm
...
Wrote: /home/guest/rpmbuild/SRPMS/python-multipip-0.1-1.src.rpm
Wrote: /home/guest/rpmbuild/RPMS/noarch/python-multipip-0.1-1.noarch.rpm
...

yyoom

yyoom uses the yum API to provide nice command-line interface to package management. It is able to install and remove packages in the same transaction (see yyoom transaction --help), list available or installed packages and a bit more. It writes results of its work to standard output in JSON (which is much easier to use from other programs).

yyoom is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

pip-download

pip-download is a small helper utility that interacts with pip and the pip API to download packages into a given directory (using a common extraction and download cache subdirectories). It also automatically prunes duplicated downloads if they are of the same project name (which pip appears to do sometimes, such as in the distribute and setuptools fiasco). This helps avoid needless duplication:

$ ./tools/pip-download -d /tmp/e 'setuptools>0.8' 'flake8'
Saved /tmp/e/flake8-2.0.tar.gz
Saved /tmp/e/mccabe-0.2.1.tar.gz
Saved /tmp/e/pep8-1.4.6.tar.gz
Saved /tmp/e/pyflakes-0.7.3.tar.gz
Saved /tmp/e/setuptools-0.9.8.tar.gz

specprint

specprint uses the rpm API to provide a interface to printing the details of an rpm spec file in a easy to parse format. It writes results of its work to standard output in JSON (which is much easier to use from other programs):

$ ./tools/specprint -f python.spec
{
    "headers": {
        "arch": "x86_64",
        "description": "Python is an interpreted, interactive, object-oriented programmin....",
        "evr": "2.7.5-3.el6",
        "group": "Development/Languages",
        "headeri18ntable": [
            "C"
        ],
        "license": "Python",
        "name": "python",
        "nevr": "python-2.7.5-3.el6",
        "nevra": "python-2.7.5-3.el6.x86_64",
        "nvr": "python-2.7.5-3.el6",
        "nvra": "python-2.7.5-3.el6.x86_64",
        "os": "linux",
        "release": "3.el6",
        "requires": [
            "autoconf",
            "bluez-libs-devel",
            "bzip2",
            "bzip2-devel",
            "expat-devel",
            "findutils",
            "gcc-c++",
            "gdbm-devel",
            "glibc-devel",
            "gmp-devel",
            "libdb-devel",
            "libffi-devel",
            "libGL-devel",
            "libX11-devel",
            "ncurses-devel",
            "openssl-devel",
            "pkgconfig",
            "readline-devel",
            "sqlite-devel",
            "systemtap-sdt-devel",
            "tar",
            "tcl-devel",
            "tix-devel",
            "tk-devel",
            "valgrind-devel",
            "zlib-devel"
        ],
        "summary": "An interpreted, interactive, object-oriented programming language",
        "url": "http://www.python.org/",
        "version": "2.7.5"
    },
    "path": "/home/harlowja/anvil/python.spec",
    "sources": [
        "05000-autotool-intermediates.patch",
        "00184-ctypes-should-build-with-libffi-multilib-wrapper.patch",
        "00181-allow-arbitrary-timeout-in-condition-wait.patch",
        "00180-python-add-support-for-ppc64p7.patch",
        ....
        "00055-systemtap.patch",
        "python-2.6.4-distutils-rpath.patch",
        "python-2.6-rpath.patch",
        "python-2.7rc1-socketmodule-constants2.patch",
        "python-2.7rc1-socketmodule-constants.patch",
        "python-2.7rc1-binutils-no-dep.patch",
        "python-2.5.1-sqlite-encoding.patch",
        "python-2.5.1-plural-fix.patch",
        "python-2.5-cflags.patch",
        "00001-pydocnogui.patch",
        "python-2.7.1-config.patch",
        "pynche",
        "macros.python2",
        "pyfuntop.stp",
        "systemtap-example.stp",
        "libpython.stp",
        "pythondeps.sh",
        "http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.xz"
    ]
}

specprint is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

git-changelog

This tool generates a pretty software's changelog from git history.

build-install-node-from-source.sh

Helps build latest node.js from source into rpms.

build-openvswitch.sh

Helps build latest openvswitch from source into rpms.

clean-pip

This utility removes package installed by pip but not by rpm.

clear-dns.sh

Removes leftover nova dnsmasq processes frequently left behind.

img-uploader

Helper tool to upload images to glance using your anvil settings.

validate-yaml

Validates a yaml file is formatted correctly.

yaml-pretty

Pretty prints yaml into a standard format.

resize.sh

Resizes a images filesystem using guestfish.

euca.sh

Creates ec2 keys for usage with nova.