anvil/tools/README.rst
Alessio Ababilov f016749dd0 Use traditional Unix style for multipip
multipip output can be parsed by pip tool. All errors
go to stderr. Anvil reports where incompatible requirements
were found.

Change-Id: Iba110e10ed3e2580d60ef475ac877190d1d03fcc
Fixes: bug #1188080
2013-06-06 11:10:11 -07:00

142 lines
3.2 KiB
ReStructuredText

**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
...
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.
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 yaml 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.