.. | ||
bootstrap | ||
build-install-node-from-source.sh | ||
build-openvswitch.sh | ||
clear-dns.sh | ||
explode_envra | ||
img-uploader.py | ||
install-neutron-ns-packages.sh | ||
multipip | ||
py2rpm | ||
README.rst | ||
specprint | ||
verify_yaml | ||
yyoom |
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.
explode_envra
specprint uses the rpm API to provide a interface to printing the details of an rpm filename in a easy to parse format (aka the envra format). It writes results of its work to standard output in JSON (which is much easier to use from other programs):
$ ./tools/explode_envra 'gtk3-3.10.9-1.fc20.x86_64.rpm' 'libxslt-1.1.28-5.fc20.x86_64.src.rpm'
{"release": "1.fc20", "epoch": "", "version": "3.10.9", "arch": "x86_64", "name": "gtk3"}
{"release": "5.fc20.x86_64", "epoch": "", "version": "1.1.28", "arch": "src", "name": "libxslt"}
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.
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.
clear-dns.sh
Removes leftover nova dnsmasq processes frequently left behind.
img-uploader
Helper tool to upload images to glance using your anvil settings.