X-Git-Url: http://git.ipfire.org/?p=ipfire-2.x.git;a=blobdiff_plain;f=src%2Fpakfire%2Fpakfire;h=91d5fe7d5e2daa517a9433e7a0d43d1150c64419;hp=8a00c7c5ede614486078829b07fb22ea88df808d;hb=06209efc9d051484027a6fd17f31a7a7408737eb;hpb=1bd42c892ccaa879d6a06e762a10c6934f177f7f diff --git a/src/pakfire/pakfire b/src/pakfire/pakfire index 8a00c7c5ed..91d5fe7d5e 100644 --- a/src/pakfire/pakfire +++ b/src/pakfire/pakfire @@ -1,10 +1,11 @@ -#!/usr/bin/perl -w +#!/usr/bin/perl require "/opt/pakfire/lib/functions.pl"; my $interactive = 1; - &Pakfire::message("### Welcome to IPFire Pakfire $Conf::version!"); + &Pakfire::logger("### IPFire Pakfire $Conf::version started!"); + &Pakfire::checkcryptodb; ### Check if we are running as root # @@ -15,46 +16,118 @@ exit 1; } + ### Check if there are running some other pakfire processes + # + #my $return = `pidof pakfire`; + #chomp($return); + #if ($return) { + # &Pakfire::message("There are running some other pakfire processes..."); + # exit 1; + #} + + ### Check if we are started by another name + # + if ( $0 =~ /pakfire-update$/ ) { + &Pakfire::message("Running an update started by fcron."); + $ARGV[0] = "update"; + $interactive = 0; + } elsif ( $0 =~ /pakfire-upgrade$/ ) { + &Pakfire::message("Running an upgrade started by fcron."); + $ARGV[0] = "upgrade"; + $interactive = 0; + } + unless (@ARGV) { - &Pakfire::message("Usage: pakfire "); - &Pakfire::message(" "); - &Pakfire::message(" "); - exit 1; + &Pakfire::usage; + } + + foreach (@ARGV) { + if ("$_" =~ "^-") { + $interactive = 0 if ("$_" eq "--non-interactive"); + $interactive = 0 if ("$_" eq "-y"); + } } if ("$ARGV[0]" eq "install") { shift; - my @deps = (); - my @paks = @ARGV; - foreach (@ARGV) { - @deps = &Pakfire::resolvedeps("$_"); - } - my @all = (); - foreach (@paks) { - push(@all,$_); + ### Make sure that the list is not outdated. + &Pakfire::dbgetlist("noforce"); + + open(FILE, "<$Conf::dbdir/lists/packages_list.db"); + my @db = ; + close(FILE); + + my $dep; + my @deps; + my $pak; + my @paks; + my @temp; + my @templine; + my $found = 0; + my $return; + my @all; + foreach $pak (@ARGV) { + unless ("$pak" =~ "^-") { + $return = &Pakfire::isinstalled($pak); + if ($return eq 0) { + &Pakfire::message("Package $pak is already installed."); + next; + } + $found = 0; + foreach (@db) { + @templine = split(/;/,$_); + if ("$templine[0]" eq "$pak" ) { + push(@paks,$pak); + push(@all,$pak); + @temp = &Pakfire::resolvedeps("$pak"); + foreach $dep (@temp) { + push(@deps,$dep) if $dep; + push(@all,$dep) if $dep; + } + $found = 1; + break; + } + } + &Pakfire::message(""); + &Pakfire::message("The pak \"$pak\" is not known. Please try running \"pakfire update\".") if ($found == 0); + } } - foreach (@deps) { - push(@all,$_); + + unless (@paks) { + &Pakfire::message("No packages to install. Exiting..."); + exit 1; } - &Pakfire::message("\n\n### Packages to install:"); - foreach (@paks) { - my $size = &Pakfire::getsize("$_"); + &Pakfire::message(""); + &Pakfire::message(""); + &Pakfire::message("### Packages to install:"); + foreach $pak (sort @paks) { + my $size = &Pakfire::getsize("$pak"); $size = &Pakfire::beautifysize($size); - &Pakfire::message("# $_ \t\t - $size"); + &Pakfire::message("# $pak \t\t - $size"); } - &Pakfire::message("\n### Packages to install for dependencies:"); - foreach (@deps) { - my $size = &Pakfire::getsize("$_"); + if (@deps) { + my %sort = map{ $_, 1 } @deps; + @deps = sort keys %sort; + &Pakfire::message(""); + &Pakfire::message("### Packages to install for dependencies:"); + } + foreach $dep (sort @deps) { + my $size = &Pakfire::getsize("$dep"); $size = &Pakfire::beautifysize($size); - &Pakfire::message("# $_ \t\t - $size"); + &Pakfire::message("# $dep \t\t - $size"); + } + + my $totalsize; + foreach $pak (@all) { + $totalsize = ($totalsize + &Pakfire::getsize("$pak")); } - - my $totalsize = &Pakfire::addsizes(@all); $totalsize = &Pakfire::beautifysize($totalsize); - &Pakfire::message("\n### Download size: \t ~ $totalsize"); + &Pakfire::message(""); + &Pakfire::message("### Total size: \t ~ $totalsize"); + &Pakfire::message(""); if ($interactive) { &Pakfire::message("Is this okay? [y/N]"); @@ -67,16 +140,76 @@ } } - &Pakfire::message("### Installing all packages:"); + my %sort = map{ $_, 1 } @all; + @all = sort keys %sort; - foreach (@all) { - &Pakfire::setuppak("$_"); + ### Download first + foreach $pak (sort @all) { + &Pakfire::message("# --> Downloading: $pak"); + &Pakfire::getpak("$pak", ""); } + foreach $pak (sort @all) { + &Pakfire::setuppak("$pak") if ($pak ne ""); + } } elsif ("$ARGV[0]" eq "remove") { } elsif ("$ARGV[0]" eq "update") { + my $force = "noforce"; + &Pakfire::makeuuid(); + &Pakfire::senduuid(); + &Pakfire::getmirrors(); + $force = "force" if ("$ARGV[1]" eq "--force"); + &Pakfire::dbgetlist("$force"); + + } elsif ("$ARGV[0]" eq "upgrade") { + my @upgradepaks = &Pakfire::dblist("upgrade", "noweb"); + my @temp; + + foreach (@upgradepaks) { + @temp = &Pakfire::resolvedeps("$_"); + foreach (@temp) { push(@upgradepaks,$_) if $_; } + } + + if (@upgradepaks) { + &Pakfire::message(""); + &Pakfire::message("We are going to install all packages listed above."); + if ($interactive) { + &Pakfire::message("Is this okay? [y/N]"); + my $ret = ; + chomp($ret); + &Pakfire::logger("Answer: $ret"); + if ( $ret ne "y" ) { + &Pakfire::message("Installation aborted."); + exit 1; + } + } + } + + ### Download first + foreach (sort @upgradepaks) { + &Pakfire::message("# --> Downloading: $_"); + &Pakfire::getpak("$_", ""); + } + + foreach (sort @upgradepaks) { + &Pakfire::upgradepak("$_"); + } + + } elsif ("$ARGV[0]" eq "list") { + &Pakfire::dblist("all", "noweb"); + + } elsif ("$ARGV[0]" eq "resolvedeps") { + foreach (@ARGV) { + next if ("$_" eq "resolvedeps"); + &Pakfire::resolvedeps("$_"); + } + + } else { + &Pakfire::usage; } + +exit 0;