summaryrefslogtreecommitdiffstats
path: root/perl-install/do_pkgs.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/do_pkgs.pm')
-rw-r--r--perl-install/do_pkgs.pm135
1 files changed, 67 insertions, 68 deletions
diff --git a/perl-install/do_pkgs.pm b/perl-install/do_pkgs.pm
index eff29a3dc..bc4cadc44 100644
--- a/perl-install/do_pkgs.pm
+++ b/perl-install/do_pkgs.pm
@@ -9,21 +9,31 @@ sub do_pkgs {
package do_pkgs_common;
use common;
-sub new {
- my ($type, $in) = @_;
- bless { in => $in }, $type;
-}
-
sub ensure_is_installed {
my ($do, $pkg, $o_file, $b_auto) = @_;
if (! $o_file || ! -e "$::prefix$o_file") {
- $do->{in}->ask_okcancel('', N("The package %s needs to be installed. Do you want to install it?", $pkg), 1)
+ $do->in->ask_okcancel('', N("The package %s needs to be installed. Do you want to install it?", $pkg), 1)
or return if !$b_auto;
$do->install($pkg) or return;
}
if ($o_file && ! -e "$::prefix$o_file") {
- $do->{in}->ask_warn('', N("Mandatory package %s is missing", $pkg));
+ $do->in->ask_warn('', N("Mandatory package %s is missing", $pkg));
+ return;
+ }
+ 1;
+}
+
+sub ensure_binary_is_installed {
+ my ($do, $pkg, $binary, $b_auto) = @_;
+
+ if (!whereis_binary($binary, $::prefix)) {
+ $do->in->ask_okcancel('', N("The package %s needs to be installed. Do you want to install it?", $pkg), 1)
+ or return if !$b_auto;
+ $do->install($pkg) or return;
+ }
+ if (!whereis_binary($binary, $::prefix)) {
+ $do->in->ask_warn('', N("Mandatory package %s is missing", $pkg));
return;
}
1;
@@ -32,7 +42,7 @@ sub ensure_is_installed {
sub ensure_is_installed_if_available {
my ($do, $pkg, $file) = @_;
if (! -e "$::prefix$file" && !$::testing) {
- $do->{in}->do_pkgs->what_provides($pkg) and $do->{in}->do_pkgs->install($pkg);
+ $do->what_provides($pkg) and $do->install($pkg);
}
}
@@ -41,6 +51,20 @@ sub is_installed {
$do->are_installed($name);
}
+sub check_kernel_module_packages {
+ my ($do, $base_name, $o_ext_name) = @_;
+
+ require bootloader;
+ my @l = map { $base_name . '-' . bootloader::vmlinuz2version($_) } bootloader::installed_vmlinuz();
+ my @ext = if_($o_ext_name, $o_ext_name);
+ my @rpms = $do->are_available(@ext, @l);
+
+ log::l("found kernel module packages $_") foreach @rpms;
+
+ #- we want at least a kernel package and the ext package if specified
+ @rpms > @ext && \@rpms;
+}
+
################################################################################
package do_pkgs_during_install;
use run_program;
@@ -54,6 +78,11 @@ sub new {
bless { in => $in, o => $::o }, $type;
}
+sub in {
+ my ($do) = @_;
+ $do->{in};
+}
+
sub install {
my ($do, @l) = @_;
log::l("do_pkgs_during_install::install");
@@ -65,30 +94,16 @@ sub install {
}
}
-sub check_kernel_module_packages {
- my ($do, $base_name, $o_ext_name) = @_;
-
- if (!$o_ext_name || pkgs::packageByName($do->{o}{packages}, $o_ext_name)) {
- my @rpms = map {
- my $name = $base_name . $_->{ext} . '-' . $_->{version};
- if ($_->{pkg}->flag_available && pkgs::packageByName($do->{o}{packages}, $name)) {
- log::l("found kernel module packages $name");
- $name;
- } else {
- ();
- }
- } pkgs::packages2kernels($do->{o}{packages});
-
- @rpms and return [ @rpms, if_($o_ext_name, $o_ext_name) ];
- }
- return undef;
-}
-
sub what_provides {
my ($do, $name) = @_;
map { $_->name } pkgs::packagesProviding($do->{o}{packages}, $name);
}
+sub are_available {
+ my ($do, @pkgs) = @_;
+ grep { pkgs::packageByName($do->{o}{packages}, $_) } @pkgs;
+}
+
sub are_installed {
my ($do, @l) = @_;
grep {
@@ -130,6 +145,20 @@ use log;
our @ISA = qw(do_pkgs_common);
+sub new {
+ my ($type, $o_in) = @_;
+ bless { in => $o_in }, $type;
+}
+
+sub in {
+ my ($do) = @_;
+ $do->{in} ||= do {
+ require interactive;
+ interactive->vnew;
+ };
+ $do->{in};
+}
+
sub install {
my ($do, @l) = @_;
@@ -140,21 +169,17 @@ sub install {
return 1;
}
- my $_wait = $do->{in}->wait_message('', N("Installing packages..."));
- $do->{in}->suspend;
+ my $_wait = $do->in->wait_message('', N("Installing packages..."));
+ $do->in->suspend;
log::explanations("installed packages @l");
my $ret = system('urpmi', '--allow-medium-change', '--auto', '--best-output', '--no-verify-rpm', @l) == 0;
- $do->{in}->resume;
+ $do->in->resume;
$ret;
}
-sub check_kernel_module_packages {
- my ($_do, $base_name, $o_ext_name) = @_;
- my ($result, %list, %select);
- my @rpm_qa if 0;
-
- #- initialize only once from rpm -qa output...
- @rpm_qa or @rpm_qa = `rpm -qa`;
+sub are_available {
+ my ($_do, @pkgs) = @_;
+ my %pkgs = map { $_ => 1 } @pkgs;
eval {
local *_;
@@ -164,35 +189,9 @@ sub check_kernel_module_packages {
foreach (grep { !$_->{ignore} } @{$urpm->{media} || []}) {
$urpm->parse_synthesis("$urpm->{statedir}/synthesis.$_->{hdlist}");
}
- foreach (@{$urpm->{depslist} || []}) {
- $_->name eq $o_ext_name and $list{$_->name} = 1;
- $_->name =~ /$base_name/ and $list{$_->name} = 1;
- }
- foreach (@rpm_qa) {
- my ($name) = /(.*?)-[^-]*-[^-]*$/ or next;
- $name eq $o_ext_name and $list{$name} = 0;
- $name =~ /$base_name/ and $list{$name} = 0;
- }
+ map { $_->name } grep { $pkgs{$_->name} } @{$urpm->{depslist} || []};
};
- if (!$o_ext_name || exists $list{$o_ext_name}) {
- eval {
- my ($version_release, $ext);
- if (c::kernel_version() =~ /([^-]*)-([^-]*mdk)(\S*)/) {
- $version_release = "$1.$2";
- $ext = $3 ? "-$3" : "";
- exists $list{"$base_name$ext-$version_release"} or die "no $base_name for current kernel";
- $list{"$base_name$ext-$version_release"} and $select{"$base_name$ext-$version_release"} = 1;
- } else {
- #- kernel version is not recognized, what to do ?
- }
- foreach (@rpm_qa) {
- ($ext, $version_release) = /kernel[^\-]*(-smp|-enterprise|-secure)?(?:-([^\-]+))$/;
- $list{"$base_name$ext-$version_release"} and $select{"$base_name$ext-$version_release"} = 1;
- }
- $result = [ keys(%select), if_($o_ext_name, $o_ext_name) ];
- }
- }
- return $result;
+
}
sub what_provides {
@@ -214,11 +213,11 @@ sub are_installed {
sub remove {
my ($do, @l) = @_;
- my $_wait = $do->{in}->wait_message('', N("Removing packages..."));
- $do->{in}->suspend;
+ my $_wait = $do->in->wait_message('', N("Removing packages..."));
+ $do->in->suspend;
log::explanations("removed packages @l");
my $ret = system('rpm', '-e', @l) == 0;
- $do->{in}->resume;
+ $do->in->resume;
$ret;
}