从man.chinaunix.net上《DEBIAN学习笔记》关于apt-rdepends工具与springgraph组合生成软件包依赖关系图入手,了解到dotty图形格式,继而知道graphviz软件包,其中包含dot/circo/fdp等filter。而springgraph似乎用一个很慢的递归算法,得到的图形反而不好看,还不如dot的结果舒服。
首先,apt-cache的dotty选项足以取代apt-rdepends的作用,而且效果更好——图形符号更丰富一点。
知道dotty工具可以编辑dotty格式的图形文件。可惜,我的系统上,说找不到字体:
wxq@wxq-desktop:~/download/dependencies$ dotty
Warning: Unable to load any usable ISO8859 font
Error: Aborting: no font found
于是,通过graphviz站的FAQ,知道对fontconfig架构的依赖。于是看了关于font-config的许多man,还扩充了原来的testLocaleUTF8.cpp:
void showByFontConfig(const FcChar8 *src, int len)
{
int nchar, wchar;
int ret = FcUtf8Len(src, len, &nchar, &wchar);
fprintf(stdout, "\nA %sformed UTF-8 string, "
"%d characters total, maximum char width %d",
ret?"well":"ill",nchar, wchar);
}
对fontconfig的架构有所了解,却没有解决dotty为什么找不到字体的问题。昨天解决了ghostscript系统的字体问题,有了一点信心,今天又被打击……
好在通过 durak.org的指点:
apt-cache dotty libtiff4-dev | fd
p -Tpng > libtiff4-dev-fdp.png
这已经很满意了。要不是掌握这些支撑工具,对这个unix平台真的还没有入门呢!
顺便写了一点perl代码:
#!/usr/bin/perl
$pkgname = @ARGV[0];
printf( "pkgname=${pkgname}\n" );
$ret = `apt-cache dotty ${pkgname} | dot -Tps > ${pkgname}-dep.ps`;
可惜,graphviz系统经常死机:比如处理libgd2-dev包的时候就总是死机:
apt-cache dotty libgd2-dev | dot -Tpng > libgd2-dev-dot.png
其中中间的dot文件可以正常生成:
digraph packages {
concentrate=true;
size="30,40";
"libgd2-dev" -> "libgd2-xpm-dev";
"libgd2-dev" -> "libgd2-noxpm-dev";
"libgd2-dev" -> "libgd-dev"[color=springgreen];
"libgd2-dev" -> "libgd1g-dev"[color=springgreen];
"libgd2-dev" -> "libgd1-altdev"[color=springgreen];
"libgd-dev" -> "libgd-noxpm-dev";
"libgd-dev" -> "libgd-xpm-dev";
"libgd2-noxpm-dev" -> "libgd2-noxpm";
"libgd2-noxpm-dev" -> "libc6-dev";
"libgd2-noxpm-dev" -> "libfreetype6-dev";
"libgd2-noxpm-dev" -> "libjpeg62-dev";
"libgd2-noxpm-dev" -> "libpng12-0-dev";
"libgd2-noxpm-dev" -> "libx11-dev";
"libgd2-noxpm-dev" -> "xlibs-dev";
"libgd2-noxpm-dev" -> "libxpm-dev";
"libgd2-noxpm-dev" -> "xlibs-dev";
"libgd2-noxpm-dev" -> "zlib1g-dev";
"libgd2-noxpm-dev" -> "libgd-noxpm-dev"[color=springgreen];
"libgd2-noxpm-dev" -> "libgd-xpm-dev"[color=springgreen];
……
"mawk" [shape=box];
"lsb-cxx" [shape=box];
"libldap2" [shape=box];
"gtk2-engines-lighthouseblue" [shape=diamond];
"libpam0" [shape=hexagon];
"libgtk1.3-common" [shape=hexagon];
"gs-pdfencrypt" [shape=triangle];
"libdigest-md5-perl" [shape=triangle];
"xditview" [shape=box];
"libxkbfile-dev" [color=orange,shape=box];
"xutils-dev" [shape=box];
"apsfilter" [color=orange,shape=box];
"libungif4g" [shape=box];
}
首先,apt-cache的dotty选项足以取代apt-rdepends的作用,而且效果更好——图形符号更丰富一点。
知道dotty工具可以编辑dotty格式的图形文件。可惜,我的系统上,说找不到字体:
wxq@wxq-desktop:~/download/dependencies$ dotty
Warning: Unable to load any usable ISO8859 font
Error: Aborting: no font found
于是,通过graphviz站的FAQ,知道对fontconfig架构的依赖。于是看了关于font-config的许多man,还扩充了原来的testLocaleUTF8.cpp:
void showByFontConfig(const FcChar8 *src, int len)
{
int nchar, wchar;
int ret = FcUtf8Len(src, len, &nchar, &wchar);
fprintf(stdout, "\nA %sformed UTF-8 string, "
"%d characters total, maximum char width %d",
ret?"well":"ill",nchar, wchar);
}
对fontconfig的架构有所了解,却没有解决dotty为什么找不到字体的问题。昨天解决了ghostscript系统的字体问题,有了一点信心,今天又被打击……
好在通过 durak.org的指点:
Q. How can I generate graph layouts in PDF?
First, create Postscript output, then use an external converter from Postscript to PDF. For example,
dot -Tps | epsf2pdf -o file.pdf
Note that URL tags are respected, to allow clickable PDF objects.
If your intention is to use the figure as PDF in some document preparation system, such as pdflatex, it is very important to use -Tps2 rather than -Tps. In general, if you really want PDF output, that is, you would like to have a -Tpdf flag, use -Tps2 before converting to PDF.
apt-cache dotty libtiff4-dev | fd
p -Tpng > libtiff4-dev-fdp.png
![使用graphiviz软件包 - improgrammer - wanxiangqian的个人主页 使用graphiviz软件包 - improgrammer - wanxiangqian的个人主页](http://img.blog.163.com/photo/be8WZ7QukDe7IWhcvCd4oA==/622904123460807574.jpg)
这已经很满意了。要不是掌握这些支撑工具,对这个unix平台真的还没有入门呢!
顺便写了一点perl代码:
#!/usr/bin/perl
$pkgname = @ARGV[0];
printf( "pkgname=${pkgname}\n" );
$ret = `apt-cache dotty ${pkgname} | dot -Tps > ${pkgname}-dep.ps`;
可惜,graphviz系统经常死机:比如处理libgd2-dev包的时候就总是死机:
apt-cache dotty libgd2-dev | dot -Tpng > libgd2-dev-dot.png
其中中间的dot文件可以正常生成:
digraph packages {
concentrate=true;
size="30,40";
"libgd2-dev" -> "libgd2-xpm-dev";
"libgd2-dev" -> "libgd2-noxpm-dev";
"libgd2-dev" -> "libgd-dev"[color=springgreen];
"libgd2-dev" -> "libgd1g-dev"[color=springgreen];
"libgd2-dev" -> "libgd1-altdev"[color=springgreen];
"libgd-dev" -> "libgd-noxpm-dev";
"libgd-dev" -> "libgd-xpm-dev";
"libgd2-noxpm-dev" -> "libgd2-noxpm";
"libgd2-noxpm-dev" -> "libc6-dev";
"libgd2-noxpm-dev" -> "libfreetype6-dev";
"libgd2-noxpm-dev" -> "libjpeg62-dev";
"libgd2-noxpm-dev" -> "libpng12-0-dev";
"libgd2-noxpm-dev" -> "libx11-dev";
"libgd2-noxpm-dev" -> "xlibs-dev";
"libgd2-noxpm-dev" -> "libxpm-dev";
"libgd2-noxpm-dev" -> "xlibs-dev";
"libgd2-noxpm-dev" -> "zlib1g-dev";
"libgd2-noxpm-dev" -> "libgd-noxpm-dev"[color=springgreen];
"libgd2-noxpm-dev" -> "libgd-xpm-dev"[color=springgreen];
……
"mawk" [shape=box];
"lsb-cxx" [shape=box];
"libldap2" [shape=box];
"gtk2-engines-lighthouseblue" [shape=diamond];
"libpam0" [shape=hexagon];
"libgtk1.3-common" [shape=hexagon];
"gs-pdfencrypt" [shape=triangle];
"libdigest-md5-perl" [shape=triangle];
"xditview" [shape=box];
"libxkbfile-dev" [color=orange,shape=box];
"xutils-dev" [shape=box];
"apsfilter" [color=orange,shape=box];
"libungif4g" [shape=box];
}