Because there was no dose3 upstream release since January 2013, botch needs some features of dose3 which are only available via git. Dose3 itself can only release a new version once a new upstream version of libcudf is released. So dose3 depends on the git version of libcudf as well.
To check out the dose submodule you need git. To check out the libcudf submodule you need ca-certificates.
$ apt-get install git ca-certificates
$ git clone https://gitlab.mister-muffin.de/debian-bootstrap/botch.git
$ cd botch
$ git submodule update --init
$ (cd dose; git submodule update --init;)
You now can install all dependencies to build libcudf, dose3 and botch:
$ apt-get install build-essential ocaml-nox camlp4 libzip-ocaml-dev libbz2-ocaml-dev ocaml-findlib libextlib-ocaml-dev libre-ocaml-dev libocamlgraph-ocaml-dev
$ make doselib
$ apt-get install libatdgen-ocaml-dev libxmlm-ocaml-dev
$ make
$ apt-get install zutils dctrl-tools wget python python-apt python-networkx
$ ./native.sh
Botch is a set of tools which are concatenated in a meaningful manner by ./native.sh
. The result of above invocation will be:
buildgraph.xml
and srcgraph.xml
which are the buildgraph and sourcegraph in graphml format for the current dependency situationcyclic_src*_*.xml
representing the strongly connected components before any dependencies were droppedstats.json
containing the results of running several heuristics on the cyclic graph that help to make the graph acyclicstats.html
which contains the information of stats.json
in human readable formatremove.list
which contains a close to minimal selection (a feedback arc set) of build dependencies which have to be dropped in addition to the known droppable ones (given by files in the ./droppable
directory) to make the graph acyclicfeedback_vertex_set.list
which contains a close to minimal selection (a feedback vertex set) of source packages which were selected to be profile built according to the information in ./droppable
and remove.list
to make the graph acyclicorder1.lst
and order2.lst
which contain the resulting build order to bootstrap the whole distributionThe ./native.sh
script makes the assumption that a minimal build system including Essential:yes
packages, build-essential
and debhelper
exists. Look at the --help
output for more options. Investigate the script to see how it combines the multiple tools together.
You can also use graphviz to look at the graphs:
$ apt-get install graphviz python-pygraphviz
$ ./tools/graphml2dot < cyclic_src:foo_0.xml > cyclic_src:foo_0.dot
$ dot -Tpng cyclic_src:foo_0.dot > cyclic_src:foo_0.png
The number in the graph filename indicates the amount of vertices. Do not use dot
to look at large graphs as computation can take hours. Furthermore, even after computation finished, the result will not be very useful due to the sheer amount of vertices and edges. If you nevertheless want to look at it, use sfdp
instead.
Instead of looking at a huge graph you might want to look at the neighborhood of a specific node in the graph:
$ ./tools/extract_neighborhood.py --depth=2 src:foo < cyclic_src:foo_0.xml > foo.xml
$ ./tools/graphml2dot < foo.xml > foo.dot
If that is still too much, try a transitive reduction of the graph (not unique if the graph has cycles):
$ tred < foo.dot > foo_tred.dot
But instead of investigating the graph manually you should really look at and follow the calculated heuristics:
$ iceweasel stats.html