27.01.2009 05:28
zb — борьба со старыми пакетами в apt
Дошли руки и совесть сделать чудовище для получения списка пакетов которые хорошо бы обновить :)Cуть в следующем примерно: мне неинтересно обновлять скажем iceweasel версии 3.0.5-1 до 3.0.5-3, но зато интересно обновить до версии 3.0.6, для получения списка установленных вручную пакетов я и написал сегодня сие убожество:
на выходе что-то типа:
apt 0.7.19. 0.7.20.
apt-utils 0.7.19. 0.7.20.
iceweasel-gnome-support 3.0.4 3.0.5
iptables 1.4.1. 1.4.2
libgcc1 1:4.3.2 1:4.3.3
libgtk-vnc-1.0-0 0.3.7 0.3.8
libgtksourceview2.0-0 2.4.0 2.4.1
libgtksourceview2.0-common 2.4.0 2.4.1
libnss3-tools 3.12.0 3.12.1
libstdc++6 4.3.2 4.3.3
logrotate 3.7.1 3.7.7
tshark 1.0.4 1.0.5
whois 4.7.28. 4.7.30.
wireshark 1.0.4 1.0.5
Если кто-то знает способ получения такого списка каким нибудь нормальным путём - скажите. Я почему-то не нашёл.
#!/usr/bin/perl
use strict;
my $num = ( @ARGV<0> or 1 );
my $spatt = ( @ARGV<1> or '!~M ~U' );
print "will remove last $num dot and search by '$spatt'\n";
open( apti, "aptitude -w 3000 -F '%p %50v %50V' search '$spatt'|" );
while (<apti>) {
s/^(<^\s>+)\s+(<^\s>+)\s+(<^\s>+)\s+$//;
my $p = $1;
my $old_real = $2;
my $new_real = $3;
my $o = $2;
my $n = $3;
$o =~ s/<\-\~>.+$//;
$n =~ s/<\-\~>.+$//;
my @old = split( /\./, $o );
my @new = split( /\./, $n );
my $ol = scalar(@old);
$o = $n = "";
for ( my $a = 0 ; $a <= $ol - $num ; $a++ ) {
$o .= "$old<$a>.";
$n .= "$new<$a>.";
}
( $o eq $n ) || print "$p $old_real -> $new_real \n";
}