Programik :)
Robert Grabowski
Robert.Grabowski w 7bulls.com
Czw, 30 Sty 2003, 11:52:53 CET
Witam!
Podsyłam programik, który generuje postscripty zawierające grafy
zależności zainstalowanych w systemie RPM'ów ...
Wywołanie:
./rpmgraph.pl nazwa_pakietu ...
Powstanie plik rpmgraph.ps przedstawiający graf zawierający wskazane
pakiety oraz wszystkie, które ich wymagają.
Można też skrypt wywołać bez parametrów ... wtedy dostaniemy graf
zawierający wszystkie RPM'y zainstalowane w systemie. Nie polecam tego,
bo przy zainstalowanych ok. 800 pakietach powstaje tak duży ps, że nie
można niczym obejrzeć.
Przykłady:
./rpmgraph.pl perl
./rpmgraph.pl apache php
Wymagane do działania programu RPM'y:
* perl
* perl-RPM
* perl-GraphViz
pozdrawiam
--
Robert Grabowski 7bulls.com sp. z o.o.
-------------- następna część ---------
#!/usr/bin/perl
#
# Author: Robert Grabowski <Robert.Grabowski w 7bulls.com>
# Version: 1.0
#
use RPM::Database;
use strict;
use warnings;
my $rpm = RPM::Database->new();
my $graph = GraphViz::RPM->new();
foreach my $name (@ARGV ? @ARGV : keys %{ $rpm }) {
$graph->add_rpm($name);
}
$graph->as_ps('rpmgraph.ps');
package GraphViz::RPM;
use GraphViz;
use RPM::Database;
use base ('GraphViz');
sub new {
my $class = shift;
my $this = GraphViz->new(@_);
$this->{'rpm'} = RPM::Database->new();
$this->{'nodes'} = {};
$this->{'edges'} = {};
return bless($this, ref($class) || $class);
}
sub add_rpm {
my $this = shift;
my $name = shift;
if (not exists $this->{'nodes'}->{$name}) {
$this->{'nodes'}->{$name} = 1;
$this->add_node($name, @_);
foreach my $prov (@{ $this->{'rpm'}->{$name}->{'PROVIDES'} }) {
foreach my $to (map { $_->{'NAME'} } $this->{'rpm'}->find_what_requires($prov) ) {
if ($name ne $to and not exists $this->{'edges'}->{$name}->{$to}) {
$this->{'edges'}->{$name}->{$to} = 1;
$this->add_rpm($to);
$this->add_edge($name => $to);
}
}
}
}
}
Więcej informacji o liście pld-users-pl