COINST reads the metadata of a GNU/Linux distribution (both RPM and DEB formats are supported), and computes the co-installability kernel, which is orders of magnitudes smaller than the original component graph, and yet contains all the information necessary to identify components which are not co-installable. The table below, extracted from the article, enumerate the number of packages, dependencies and conflicts in the input and the output of the tool.
You can see in the following list the output graph produced for
mainstream GNU/Linux distributions; by clicking on the slider bar on
the left of each graph (or by using the mouse wheel), you can zoom in
and out at leisure.
Each node in the graph represent a set of packages which behave the
same as far as co-installability. For instance, a node
maven-scm-test (x 59) stands for 59 packages,
Dependencies between packages are indicated by blue arrows. A
disjunctive dependency is represented by using an intermediate circular
node with label
A red edge indicates a conflict between two packages. Clique of
conflicts (that is, set of packages mutually in conflict) are
displayed by connecting the conflicting packages to a circular node
libplasmaclock4are both in conflict with the important package
kde-minimal. Other packages such as
libeina-svn-05are similarly problematic. Near the bottom of the graph, one can see that package
openoffice.org-thesaurus-frhas incorrect dependencies: it depends on either of two unrelated packages. Package
openoffice.org-voikkoalso appears unusable, as it conflicts with
liboss-salsa-asound2, which is in direct conflict with 1350 other packages. Our tool makes it possible to ignore (manually) some of these packages in order to make the graph more readable.
inetutils-ping. By just removing these few packages, one gets a much clearer graph, which can be inspected visually for problems.
octave-pkg-dev. However, any two of them can be installed together.
The source code for this tool is available on Github. In order to compile it, you need the ocaml compiler and the Findlib library. If you want to build our graph viewers, you will need the Lablgtk2 and the Cairo bindings for the GTK viewer, and Js_of_ocaml for the web-based viewer.
You can perform the following steps to compute and vizualize a coinstallability kernel.
Open a terminal window.
Run the following command to compute a coinstallability kernel.
zcat ~/snapshots/maverick-beta/* | coinst -all -o g.dot
coinst tool takes package information from
It writes on standard output:
The coinstallability kernel is written as a
-all option tells
coinst to include
all packages in the output (packages with simple conflict
configurations are omitted by default).
Lay out the graph, using the Graphviz
dot g.dot -o graph.dot
Display the graph. We use a custom graph viewer, which can deal with large graphs.
You need to use the
-rpm option to parse
zcat ~/snapshots/Mandriva_2010.1/* | coinst -rpm -all -o g.dot
-ignore option can be used to ignore a package.
zcat ~/snapshots/testing-2010-08-22/* | coinst -ignore liboss-salsa-asound2 -o g.dot
To focus on a particular package, use the
zcat ~/snapshots/testing-2010-08-22/* | coinst -root libhdf5-openmpi-1.8.4 -o g.dot
Finally, the following command generates a
file suitable to use with the Web version of our viewer.
coinst_converter graph.dot > scene.json