This directory will contain tools which are not necessary for OpenRC to run, but which some users have found useful. The first of these is deptree2dot, which converts /run/openrc/deptree to a .dot file for use with graphviz. This can assist in finding circular dependencies.
45 lines
1.2 KiB
Perl
45 lines
1.2 KiB
Perl
#!/usr/bin/perl -w
|
|
# -*- cperl -*-
|
|
# Copyright © 2012 Diego Elio Pettenò <flameeyes@flameeyes.eu>
|
|
# Released under the 2-clause BSD license.
|
|
#
|
|
#Example usage:
|
|
#deptree2dot > deptree.dot
|
|
#deptree2dot | dot -Tpng -o deptree.png
|
|
|
|
my $deptree = defined($ARGV[0]) ? $ARGV[0] : "/run/openrc/deptree";
|
|
|
|
open DEPTREE, $deptree or exit 1;
|
|
|
|
print "digraph deptree {\n";
|
|
|
|
my @deptree;
|
|
|
|
while(my $line = readline(DEPTREE)) {
|
|
$line =~ /^depinfo_([0-9]+)_([a-z]+)(?:_[0-9]+)?='(.*)'\n$/;
|
|
my $index = $1;
|
|
my $prop = $2;
|
|
my $value = $3; $value =~ s/[-\.:~]/_/g;
|
|
|
|
if ( $prop eq "service" ) {
|
|
$deptree[$index] = $value;
|
|
printf "%s [shape=box];\n", $value;
|
|
} else {
|
|
my $service = $deptree[$index];
|
|
|
|
if ( $prop eq "ineed" ) {
|
|
printf "%s -> %s;\n", $service, $value;
|
|
} elsif ( $prop eq "iuse" ) {
|
|
printf "%s -> %s [color=blue];\n", $service, $value;
|
|
} elsif ( $prop eq "ibefore" ) {
|
|
printf "%s -> %s [style=dotted];\n", $service, $value;
|
|
} elsif ( $prop eq "iafter" ) {
|
|
printf "%s -> %s [style=dotted color=purple];\n", $value, $service;
|
|
} elsif ( $prop eq "iprovide" ) {
|
|
printf "%s -> %s [color=red];\n", $value, $service;
|
|
}
|
|
}
|
|
}
|
|
|
|
print "}\n";
|