X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=src%2Fpakfire%2Flib%2Ffunctions.pl;h=5aaa5f41fa872220cda201f41ab80bdff5895560;hp=7af22c0a514f3ae2a5fad5c4d4cb3f95309d36e3;hb=91bc781441cafde27a9b9794eb3ecf6f0776e92f;hpb=c6cada8c3f0284ee5d1b0b00631c92dbd782e717 diff --git a/src/pakfire/lib/functions.pl b/src/pakfire/lib/functions.pl index 7af22c0a51..5aaa5f41fa 100644 --- a/src/pakfire/lib/functions.pl +++ b/src/pakfire/lib/functions.pl @@ -93,8 +93,8 @@ sub message { sub logger { my $log = shift; if ($log) { - system("echo \"`date`: $log\" >> /var/log/pakfire.log"); - #system("logger -t pakfire \"$log\""); + #system("echo \"`date`: $log\" >> /var/log/pakfire.log"); + system("logger -t pakfire \"$log\""); } } @@ -116,9 +116,9 @@ sub usage { sub pinghost { my $host = shift; - $p = Net::Ping->new(); + $p = Net::Ping->new("icmp"); if ($p->ping($host)) { - logger("PING INFO: $host is alive"); + logger("PING INFO: $host is alive"); return 1; } else { logger("PING INFO: $host is unreachable"); @@ -211,6 +211,9 @@ sub fetchfile { move("$Conf::tmpdir/$bfile","$Conf::cachedir/$bfile"); } else { message("DOWNLOAD ERROR: The downloaded file ($file) wasn't verified by IPFire.org. Sorry - Exiting..."); + my $ntp = `ntpdate -q -t 10 pool.ntp.org 2>/dev/null | tail -1`; + if ( $ntp !~ /time\ server(.*)offset(.*)/ ){message("TIME ERROR: Unable to get the nettime, this may lead to the verification error.");} + else { $ntp =~ /time\ server(.*)offset(.*)/; message("TIME INFO: Time Server$1has$2 offset to localtime.");} exit 1; } logger("DOWNLOAD FINISHED: $file"); @@ -308,6 +311,7 @@ sub selectmirror { # This will never give up. my $found = 0; my $servers = 0; + my $pingdelay = 1; while ($found == 0) { $server = int(rand($scount) + 1); $servers = 0; @@ -320,10 +324,22 @@ sub selectmirror { $proto = $templine[0]; $host = $templine[1]; $path = $templine[2]; - if (pinghost("$host")) { + if ($pakfiresettings{'HEALTHCHECK'} eq "off") { + logger("PING INFO: Healthcheck is disabled"); $found = 1; return ($proto, $host, $path); } + elsif (pinghost("$host")) { + $found = 1; + return ($proto, $host, $path); + } + if ($found == 0) { + sleep($pingdelay); + $pingdelay=$pingdelay*2; + if ($pingdelay>1200) { + $pingdelay=1200; + } + } } } } @@ -353,6 +369,51 @@ sub dbgetlist { fetchfile("lists/packages_list.db", ""); move("$Conf::cachedir/packages_list.db", "$Conf::dbdir/lists/packages_list.db"); } + + # Update the meta database if new packages was in the package list + my @meta; + my $file; + my $line; + my $prog; + my ($name, $version, $release); + my @templine; + + open(FILE, "<$Conf::dbdir/lists/packages_list.db"); + my @db = ; + close(FILE); + + opendir(DIR,"$Conf::dbdir/meta"); + my @files = readdir(DIR); + closedir(DIR); + foreach $file (@files) { + next if ( $file eq "." ); + next if ( $file eq ".." ); + next if ( $file =~ /^old/ ); + open(FILE, "<$Conf::dbdir/meta/$file"); + @meta = ; + close(FILE); + foreach $line (@meta) { + @templine = split(/\: /,$line); + if ("$templine[0]" eq "Name") { + $name = $templine[1]; + chomp($name); + } elsif ("$templine[0]" eq "ProgVersion") { + $version = $templine[1]; + chomp($version); + } elsif ("$templine[0]" eq "Release") { + $release = $templine[1]; + chomp($release); + } + } + foreach $prog (@db) { + @templine = split(/\;/,$prog); + if (("$name" eq "$templine[0]") && ("$release" ne "$templine[2]")) { + move("$Conf::dbdir/meta/meta-$name","$Conf::dbdir/meta/old_meta-$name"); + fetchfile("meta/meta-$name", ""); + move("$Conf::cachedir/meta-$name", "$Conf::dbdir/meta/meta-$name"); + } + } + } } sub dblist { @@ -378,11 +439,14 @@ sub dblist { close(FILE); if ("$filter" eq "upgrade") { - getcoredb("noforce"); + if ("$forweb" ne "forweb" && "$forweb" ne "notice" ) {getcoredb("noforce");} eval(`grep "core_" $Conf::dbdir/lists/core-list.db`); - if ("$core_release" gt "$Conf::core_mine") { + if ("$core_release" > "$Conf::core_mine") { if ("$forweb" eq "forweb") { print "\n"; + } + elsif ("$forweb" eq "notice") { + print "


$Lang::tr{'core notice 1'} $Conf::core_mine $Lang::tr{'core notice 2'} $core_release $Lang::tr{'core notice 3'}"; } else { my $command = "Core-Update $Conf::version\nRelease: $Conf::core_mine -> $core_release\n"; if ("$Pakfire::enable_colors" eq "1") { @@ -393,13 +457,14 @@ sub dblist { } } - opendir(DIR,"$Conf::dbdir/meta"); + opendir(DIR,"$Conf::dbdir/installed"); my @files = readdir(DIR); closedir(DIR); foreach $file (@files) { next if ( $file eq "." ); next if ( $file eq ".." ); - open(FILE, "<$Conf::dbdir/meta/$file"); + next if ( $file =~ /^old/ ); + open(FILE, "<$Conf::dbdir/installed/$file"); @meta = ; close(FILE); foreach $line (@meta) { @@ -417,7 +482,7 @@ sub dblist { } foreach $prog (@db) { @templine = split(/\;/,$prog); - if (("$name" eq "$templine[0]") && ("$release" < "$templine[2]" )) { + if (("$name" eq "$templine[0]") && ("$release" < "$templine[2]" && "$forweb" ne "notice")) { push(@updatepaks,$name); if ("$forweb" eq "forweb") { print "\n"; @@ -544,7 +609,12 @@ sub cleanup { sub getmetafile { my $pak = shift; - unless ( -e "$Conf::dbdir/meta/meta-$pak") { + unless ( -e "$Conf::dbdir/meta/meta-$pak" ) { + fetchfile("meta/meta-$pak", ""); + move("$Conf::cachedir/meta-$pak", "$Conf::dbdir/meta/meta-$pak"); + } + + if ( -z "$Conf::dbdir/meta/meta-$pak" ) { fetchfile("meta/meta-$pak", ""); move("$Conf::cachedir/meta-$pak", "$Conf::dbdir/meta/meta-$pak"); } @@ -662,7 +732,7 @@ sub setuppak { sub upgradecore { getcoredb("noforce"); eval(`grep "core_" $Conf::dbdir/lists/core-list.db`); - if ("$core_release" gt "$Conf::core_mine") { + if ("$core_release" > "$Conf::core_mine") { message("CORE UPGR: Upgrading from release $Conf::core_mine to $core_release"); my @seq = `seq $Conf::core_mine $core_release`;