diff options
Diffstat (limited to 'perl-install/do_pkgs.pm')
| -rw-r--r-- | perl-install/do_pkgs.pm | 135 |
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; } |
