■debtreeとdotコマンド 依存関係を見るのも面白いけど、dotコマンドはちょっと使えそう。 参考:debtree でDebianのパッケージの依存関係を出力 http://d.hatena.ne.jp/iww/20120503/debtree $ sudo apt-get install -y debtree $ debtree bash | dot -T png -o bash.png
■テキストに落とす $ debtree bash > bash.txt $ cat bash.txt digraph "bash" { rankdir=LR; node [shape=box]; "bash" -> "base-files" [color=blue,label="(>= 2.1.12)"]; "base-files" -> "awk" [color=purple,style=bold]; "awk" -> "Pr_awk" [label="-3-",dir=back,arrowtail=inv,color=green]; "Pr_awk" [label="...",style=rounded]; "awk" [shape=octagon]; "bash" -> "debianutils" [color=blue,label="(>= 2.15)"]; "debianutils" -> "sensible-utils" [color=blue]; "bash" -> "dash" [color=purple,style=bold,label="(>= 0.5.5.1-2.2)"]; "dash" -> "debianutils" [color=blue,label="(>= 2.15)"]; "dash" -> "dpkg" [color=blue,label="(>= 1.15.0)"]; "bash" -> "libncurses5" [color=purple,style=bold,label="(>= 5.7+20100313)"]; "libncurses5" -> "libgpm2"; "bash" -> "bash-completion" [label="(>= 20060301-0)"]; "bash-completion" -> "bash" [color=blue,label="(>= 3.2)"]; "bash" [style="setlinewidth(2)"] "dpkg" [shape=diamond]; } // Excluded dependencies: // libc6 ■上記を元に以下を作成 ※もうdebtreeは関係なかったりもするけど。。。 参考にしたということで。。。 $ cat sample.txt digraph "real squeeze" { rankdir=TD; node [shape=box]; "real squeeze" -> "eth0" [color=blue,label="real 1xx.xxx.xxx/24"]; "eth0" -> "promiscuous mode" [color=purple,style=bold]; "promiscuous mode" -> "vmnet1" [color=blue,label="host only 1xx.xxx.xxx/24"]; "vmnet1" -> "vmlenny-i386-1" [color=blue,label="IP:1xx.xxx.xx1/32"]; "vmnet1" -> "vmlenny-i386-2" [color=blue,label="IP:1xx.xxx.xx1/32"]; "promiscuous mode" -> "vmnet8" [color=purple,style=bold,label="NAT 1xx.xxx.xxx/24"]; "vmnet8" -> "vmsqueeze1-amd64-1" [color=blue,label="IP:1xx.xxx.xx1/32"]; "vmnet8" -> "vmsqueeze2-amd64-2" [color=blue,label="IP:1xx.xxx.xx2/32"]; "vmnet8" -> "vmsqueeze3-kfreebsd-amd64" [color=blue,label="IP:1xx.xxx.xx3/32"]; "vmnet8" -> "vmsqueeze4-kfreebsd-i386" [color=blue,label="IP:1xx.xxx.xx4/32"]; } ■グラフ化 $ cat sample.txt | dot -T png -o vmsqueeze.png
■仮想マシンを追加、変更、削除をしたら少しの変更で、再度コマンドを実行するだけ。 簡単ですね。 詳しくはマニュアルを。 $ man dot $ dot -V dot - graphviz version 2.26.3 (20100126.1600) ■色々余計な修正をしているうちに、サブグラフの前に力尽きたw。。。 外部と内部の通信の違いをもう少しちゃんと視覚化しようとした。 また時間があったら、この説明もグラフに組み込もうと思う。。。 $ cat sample.txt digraph "VMNIC" { graph [ranksep=0.5]; rankdir=LR; node [shape=box,sizefixed=true,width=3.2,height=0.8]; "Router" -> "Bridge Share" \ [arrowsize=3,dir=both,color=purple,label="",label="Other LAN Network"]; "Router" -> "vmnet8 FW" [arrowsize=3,dir=back,color=blue,labeldistance=3]; "Bridge Share" -> "eth0" [arrowsize=2,dir=both,color=purple,label="Host Share"]; "vmnet1 FW" -> "eth0" [arrowsize=2,dir=both,color=orange,label="FW1"]; "vmnet8 FW" -> "eth0" [arrowsize=2,dir=both,color=blue,label="FW8"]; "eth0" -> "bridge" \ [arrowsize=2,dir=both,color=purple,style=bold,label="Bridge :1xx.xxx."]; "eth0" -> "vmnet1" \ [arrowsize=2,dir=both,color=orange,style=bold,label="Host Only 1xx.xxx."]; "eth0" -> "vmnet8" [arrowsize=2,dir=both,color=blue,style=bold,label="NAT 1xx.xxx."]; "vmnet1" -> "vmlenny-i386-1" [dir=both,color=orange,label="xx1"]; "vmnet1" -> "vmlenny-i386-2" [dir=both,color=orange,label="xx2"]; "vmnet8" -> "vmsqueeze1-amd64-1" [dir=both,color=blue,label="xx1"]; "vmnet8" -> "vmsqueeze2-amd64-2" [dir=both,color=blue,label="xx2"]; "vmnet8" -> "vmsqueeze3-kfreebsd-amd64" [dir=both,color=blue,label="xx3"]; "vmnet8" -> "vmsqueeze4-kfreebsd-i386" [dir=both,color=blue,label="xx4"]; "bridge" -> "vmsqueeze-router-test" [dir=both,color=purple,label="xx1"]; }; $ cat sample.txt | dot -T png -o sample.png