Późno wiosenne porządki :D

Robert Grabowski Robert.Grabowski w 7bulls.com
Sob, 12 Cze 2004, 11:11:19 CEST


Cezary Krzyżanowski wrote:
> Witam
> 
> Właśnie próbowałem sobie doinstalować whoisa i spotkał mnie bardzo 
> niemiły komunikat...brak miejsca na dysku!!! No cóż.. tak to jest na 10 
> GB....
> 
[...]
> 
> W ogóle, jak sprawnie kontrolwać, co w kompie jest, a co nie..co 
> potrzeba, a co nie...jak Wy Panowie admini sobie z czymś takim radzicie ???
> 
> Zdroofka
> Cz w rny
> P.S.
> tak wiem - "nie instalujemy pierdołów" :P
> 

Witam!

   Kiedyś napisałem w perlu prosty skrypt do rysowania grafów (plik ps) 
zależności zainstalowanych pakietów. Jako parametry należy podać 
nazwy/nazwę zainstalowanych paczek. Jeżeli ich nie podamy, to dostaniemy 
drzewko zależności wszystkich zainstalowanych pakietów. Programik jest 
dość prymitywny i nie mam 100% pewności, czy dobrze działa.

   Uwaga!!! Na systemie z zainstaloną dużą ilością pakietów program 
wywołany bez parametrów może zabrać więcej niż 256 MB pamięci. Powstały 
w ten sposób plik ps może nie dać się otworzyć.

   W sumie bazując na tym skrypcie można dośc prosto napisać skrypt 
wyświetlający nazwy pakietów, od których nie zależą inne pakiety.

pozdrawiam

-- 
Robert Grabowski   7bulls.com sp. z o.o.

email: Robert.Grabowski w 7bulls.com
-------------- 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