pkginfo2dot.pl - draw freebsd installed package dependencies
承襲上篇《dsw2dot.pl - extract and draw project dependencies》,又手癢寫了 pkginfo2dot.pl,將 freebsd 裡已安裝的 packages,彼此之間的 dependencies 畫出來。這個 script 的 usage 如下:
Usage: pkginfo2dot.pl [ <option> ... ] <dot-file> <pkg-glob> ... Generate graphviz digraph script <dot-file> according to pkg_info(1) output for package <pkg-glob>s.. If path of digraph script <dot-file> is a single dash, will output to standard output. Options: -h,--help Show this help message. -n,--name <graph-name> Set graph name to <graph-name>. Default to first <pkg-glob>. -v,--verbose Show verbose progress messages. Revision: r374 (2007-05-15)
可以一次吃多個 <pkg-glob>[1]。我們可以這麼下指令,把所有 packages 的相依性全畫出來:
SHELL> find /var/db/pkg -type d -maxdepth 1 -depth 1 \ | xargs -n 1 basename \ | sort \ | xargs pkginfo2dot.pl --name "$HOST-packages" - \ > "~/$HOST-packages.dot" \ ;
然後就發現這樣圖太大了,dot 要花上 6 分鐘才跑的完:
SHELL> dot -Tsvg -Grankdir=RL -o "$HOST-packages.svg" "$HOST-packages.dot" | Time | 6:04.13s (user: 360.412s, kernel: 0.337s, CPU utilisation: 99.0%) | Mem | average: 5+38151=38156 KB (max: 26948k) | I/O | input operations: 0, output operations: 34 | IPC | socket in: 0, socket out: 0, signals: 0 | Swap | 0 swaps (major page faults: 0, minor page faults: 30986) | Wait | 1 waits (involuntary context switches: 90835) SHELL> dot -Tpng -Grankdir=RL -o "$HOST-packages.png" "$HOST-packages.dot" | Time | 6:03.09s (user: 360.087s, kernel: 0.300s, CPU utilisation: 99.2%) | Mem | average: 5+38130=38136 KB (max: 26922k) | I/O | input operations: 0, output operations: 0 | IPC | socket in: 0, socket out: 0, signals: 0 | Swap | 0 swaps (major page faults: 0, minor page faults: 31016) | Wait | 1 waits (involuntary context switches: 90473)
然後產生出來的 svg 檔用 firefox 開,firefox 就會當掉。改產生 gif 檔會抱怨 malloc 失敗,真苦~
SHELL> dot -Tgif -Grankdir=RL -o "$HOST-packages.gif" "$HOST-packages.dot" Error: gdImageCreate returned NULL. Malloc problem?
- 目前還沒有 glob 的功能。 ↩



4 Comments
perl 是什麼東西?
最近在某些Blog看到perl的東西,
想學,但是不太懂要如何去學..
笨捏寶,
Perl 是一種 scripting language,擅長文字處理。
要學 perl,建議可以裝 ActivePerl,這是一套在 windows 上跑的 perl 版本。Perl 的經典好書,有:
若以一個完全不會程式的人來說,
直接學這個,是否會有問題?
笨捏寶:
不會啊,反正也是重頭開始學一個語言嘛。
Jeff Hung
Post a Comment