← Back to team overview

yellow team mailing list archive

Handoff

 

For the last little bit of my day I worked on fixing the numerous
graphviz-related failures.  Reproducible thusly:

    bin/test -c -t lib/lp/blueprints/doc/specgraph.txt

I managed to figure out that the problem is caused by dot (a graphviz
command) not being able to load the main graphviz plugins:
libgvplugin_dot_layout.so.5 and libgvplugin_core.so.5.

It determines the plugin path in a very odd way (odd to me at least):
the dot executable inspects /proc/self/maps to determine where the
already-loaded dynamic libraries have been loaded from and uses that to
figure out the plugin location.  On a normal lucid machine they are
located in /usr/lib/graphviz/, which make sense.  However, paths in
/proc/self/maps in an LXC container have the erroneous prefix of
"/rootfs".  That makes dot try to load the libs from
/rootfs/proc/self/maps, which doesn't exist.

I was able to get it working with this hack:

    mkdir -p /rootfs/usr/
    ln -s /usr/lib /rootfs/usr/lib

If anyone wants to pick this task up, the way to reproduce the problem
is to log into the lptests container (I'm not sure if it's important
that it is ephemeral or not) and run "dot -Tcmapx < /dev/null".  A
reproduction will produce this message:

    Format: "cmapx" not recognized. Use one of: dia hpgl mif mp pcl pic vtx

A correctly operating dot will instead just return immediately without
producing any output.

You can see all of the above play out by running dot under strace:

    strace dot -Tcmapx < /dev/null 2> /tmp/1

Have a good weekend!
-- 
Benji York