Maledictus
FreeBSD ftw
Siehe Topic.
Benötigt wird graphics/graphviz für `dot`.
Bisher nur unter FreeBSD benutzt.
pkg_dot.sh:
Als erstes sollte man ein
./pkg_dot.sh full >COMPLETE.dot
machen. Dies erzeugt den kompletten Graphen für alle installierten Ports. Der ist meist so groß, dass man nichts erkennen kann.
Zum anschauen der einzelnen Ports kann man dann z.B. folgenden kleinen Wrapper nehmen
pd.sh:
Das geht dann z.B. so:
./pd.sh xmms
und schon sollte inkview die Abhängigkeiten von xmms anzeigen.
(Inkview gehört zu graphics/inkscape)
Feedback welcome
Benötigt wird graphics/graphviz für `dot`.
Bisher nur unter FreeBSD benutzt.
pkg_dot.sh:
Code:
#!/bin/sh
# Find all packages required by the given package (recursive)
upward() {
LIST=$(grep '^"'$1 COMPLETE.dot | cut -d '"' -f 4)
# This is as fast but not as easy to understand
# LIST=$(sed -nE 's/"'$1'.*" -> "(.*)";$/\1/p' COMPLETE.dot)
for dep in $LIST; do
echo '"'$1'" -> "'$dep'";' >> $2
upward $dep $2
done
}
# Find all packages depending on the given package (recursive)
downward() {
if [ -r /var/db/pkg/$1*/+REQUIRED_BY ]; then
for line in $(cat /var/db/pkg/$1*/+REQUIRED_BY); do
echo '"'$line'" -> "'$1'";' >> $2
downward $line $2
done
else
# Leaf packages will be blue
echo '"'$1'" [color = blue, fontcolor = blue];' >> $2
fi
}
# Generate the full dependancy graph (needed by upward())
full() {
for dir in /var/db/pkg/*; do
for file in $dir/*; do
if [ "$(basename $file)" = "+REQUIRED_BY" ]; then
for line in $(cat $file); do
echo '"'$line'" -> "'$(basename $(dirname $file))'";' >> $1
done
fi
done
done
}
TMPFILE=$(mktemp -q /tmp/$(basename $0).XXXXXX)
if [ $? -ne 0 ]; then
echo "$0: Can't create temp file, exiting..."
exit 1
fi
case "$1" in
full)
full $TMPFILE
;;
up)
upward $2 $TMPFILE
;;
down)
downward $2 $TMPFILE
;;
both)
upward $2 $TMPFILE
downward $2 $TMPFILE
;;
*)
echo ""
echo "Usage: `basename $0` { full | up | down | both } [portname]"
echo ""
exit 64
;;
esac
echo "digraph {"
# Our point of view is red (except in "full" mode)
if [ "$1" != full ]; then
echo '"'$2'" [color = red, fontcolor = red];'
fi
sort $TMPFILE | uniq
echo "}"
rm $TMPFILE
Als erstes sollte man ein
./pkg_dot.sh full >COMPLETE.dot
machen. Dies erzeugt den kompletten Graphen für alle installierten Ports. Der ist meist so groß, dass man nichts erkennen kann.
Zum anschauen der einzelnen Ports kann man dann z.B. folgenden kleinen Wrapper nehmen
pd.sh:
Code:
#!/bin/sh
./pkg_dot.sh both $1 > $1.dot
dot -Tsvg $1.dot -o $1.svg
inkview $1.svg
rm $1.dot $1.svg
Das geht dann z.B. so:
./pd.sh xmms
und schon sollte inkview die Abhängigkeiten von xmms anzeigen.
(Inkview gehört zu graphics/inkscape)
Feedback welcome