#!/usr/bin/perl # # rpmkill # quick and dirty hack to make removing a ton of RPM packages # easier (and more like apt-get) # # Brad Fitzpatrick # my @packages = @ARGV; if (! @packages or $packages[0] eq "-h") # should use getopts, yeah. see above. { die "Usage:\n rpmkill \n"; } my %kill; my @finddeps; foreach my $package (@packages) { my $version = `rpm -q $package 2>/dev/null`; chomp $version; unless ($version) { die "$package is not installed.\n"; } $kill{$package} = 1; push @finddeps, $package; } print "\n"; while (@finddeps) { my $package = shift @finddeps; my @prov = `rpm -q --provides $package 2>/dev/null`; chomp @prov; my $provided = join(" ", @prov); if ($provided) { print "$package provides: $provided\n"; } print "Finding dependencies for $package...\n"; my @deps = `rpm -q --whatrequires $package $provided 2>/dev/null`; chomp @deps; foreach my $dep (@deps) { my $deppack = just_package($dep); print " Dependency: $deppack ($dep)\n"; unless ($kill{$deppack}) { $kill{$deppack} = 1; push @finddeps, $deppack; } } } print "\n\nrpm -e ", join(" ", sort keys %kill), "\n\n"; sub just_package { my $full = shift; if ($full =~ /^(.+?)-[^\-]+?-[^\-]+$/) { return $1; } }