Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package installation-images for openSUSE:Factory checked in at 2021-05-07 16:45:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/installation-images (Old) and /work/SRC/openSUSE:Factory/.installation-images.new.2988 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "installation-images" Fri May 7 16:45:14 2021 rev:133 rq:890418 version:17.2 Changes: -------- --- /work/SRC/openSUSE:Factory/installation-images/installation-images.changes 2021-04-29 01:37:05.222466745 +0200 +++ /work/SRC/openSUSE:Factory/.installation-images.new.2988/installation-images.changes 2021-05-07 16:45:19.988366025 +0200 @@ -1,0 +2,23 @@ +Tue May 4 14:17:56 UTC 2021 - mvid...@suse.cz + +- merge gh#openSUSE/installation-images#506 +- gdb extension: include debuginfod-find (debuginfod-client.rpm) + (bsc#1182649) +- Document API of ResolveDeps and friends +- Moved resolve_deps_libsolv to its own module +- Add data files for testing ResolveDepsLibsolv. +- resolve_deps_libsolv: add basic tests, don't hardcode solv + filename +- BuildRequire debuginfod-client +- 17.2 + +-------------------------------------------------------------------- +Tue May 4 12:24:55 UTC 2021 - wfe...@opensuse.org + +- merge gh#openSUSE/installation-images#509 +- trigger automatic nvme discovery in udev start script + (bsc#1184908) +- create NVMe config files before udevd is started (bsc#1184908) +- 17.1 + +-------------------------------------------------------------------- Old: ---- installation-images-17.0.tar.xz New: ---- installation-images-17.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ installation-images.spec ++++++ --- /var/tmp/diff_new_pack.w0ugfr/_old 2021-05-07 16:45:20.596364113 +0200 +++ /var/tmp/diff_new_pack.w0ugfr/_new 2021-05-07 16:45:20.600364101 +0200 @@ -339,6 +339,7 @@ BuildRequires: dash BuildRequires: dbus-1-x11 BuildRequires: dd_rescue +BuildRequires: debuginfod-client BuildRequires: dejavu-fonts BuildRequires: dhcp-server BuildRequires: dmraid @@ -672,7 +673,7 @@ Summary: Installation Image Files for %theme License: GPL-2.0-or-later Group: Metapackages -Version: 17.0 +Version: 17.2 Release: 0 Provides: installation-images = %version-%release Conflicts: otherproviders(installation-images) ++++++ installation-images-17.0.tar.xz -> installation-images-17.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/installation-images-17.0/VERSION new/installation-images-17.2/VERSION --- old/installation-images-17.0/VERSION 2021-04-27 13:02:18.000000000 +0200 +++ new/installation-images-17.2/VERSION 2021-05-04 16:17:56.000000000 +0200 @@ -1 +1 @@ -17.0 +17.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/installation-images-17.0/changelog new/installation-images-17.2/changelog --- old/installation-images-17.0/changelog 2021-04-27 13:02:18.000000000 +0200 +++ new/installation-images-17.2/changelog 2021-05-04 16:17:56.000000000 +0200 @@ -1,3 +1,20 @@ +2021-05-04: 17.2 + - merge gh#openSUSE/installation-images#506 + - gdb extension: include debuginfod-find (debuginfod-client.rpm) + (bsc#1182649) + - Document API of ResolveDeps and friends + - Moved resolve_deps_libsolv to its own module + - Add data files for testing ResolveDepsLibsolv. + - resolve_deps_libsolv: add basic tests, don't hardcode solv + filename + - BuildRequire debuginfod-client + +2021-05-04: 17.1 + - merge gh#openSUSE/installation-images#509 + - trigger automatic nvme discovery in udev start script + (bsc#1184908) + - create NVMe config files before udevd is started (bsc#1184908) + 2021-04-27: 17.0 - merge gh#openSUSE/installation-images#498 - rescue: make sure /var/run is a link to /run diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/installation-images-17.0/data/initrd/scripts/early_setup new/installation-images-17.2/data/initrd/scripts/early_setup --- old/installation-images-17.0/data/initrd/scripts/early_setup 2021-04-27 13:02:18.000000000 +0200 +++ new/installation-images-17.2/data/initrd/scripts/early_setup 2021-05-04 16:17:56.000000000 +0200 @@ -54,12 +54,6 @@ /usr/sbin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -u -B -f /var/log/wpa_supplicant.log fi -# create NVMe config files -if [ -x /usr/sbin/nvme ] ; then - { /usr/sbin/nvme-gen-hostnqn || /usr/sbin/nvme gen-hostnqn ; } > /etc/nvme/hostnqn - cut -d : -f 3 /etc/nvme/hostnqn > /etc/nvme/hostid -fi - if [ -x usr/sbin/wickedd ] ; then debug_opts="--debug mini --log-target stderr:time,pid,ident" if [ -n "$linuxrc_debug" ] ; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/installation-images-17.0/data/initrd/scripts/udev_setup new/installation-images-17.2/data/initrd/scripts/udev_setup --- old/installation-images-17.0/data/initrd/scripts/udev_setup 2021-04-27 13:02:18.000000000 +0200 +++ new/installation-images-17.2/data/initrd/scripts/udev_setup 2021-05-04 16:17:56.000000000 +0200 @@ -26,6 +26,12 @@ echo 'ENV{ANACONDA}="yes"' > /run/udev/rules.d/00-inhibit.rules fi +# create NVMe config files before udevd is started (bsc#1184908) +if [ ! -f /etc/nvme/hostnqn -a -x /usr/sbin/nvme ] ; then + { /usr/sbin/nvme-gen-hostnqn || /usr/sbin/nvme gen-hostnqn ; } > /etc/nvme/hostnqn + cut -d : -f 3 /etc/nvme/hostnqn > /etc/nvme/hostid +fi + # start udevd echo -n "Starting udevd " if [ -n "$linuxrc_debug" ] ; then @@ -38,6 +44,9 @@ /usr/bin/udevadm trigger --type=subsystems --action=add /usr/bin/udevadm trigger --type=devices --action=add +# add fc nvme devices (bsc#1184908) +echo add > /sys/class/fc/fc_udev_device/nvme_discovery + # 10 min - just long enough /usr/bin/udevadm settle --timeout=100 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/installation-images-17.0/data/root/gdb.file_list new/installation-images-17.2/data/root/gdb.file_list --- old/installation-images-17.0/data/root/gdb.file_list 2021-04-27 13:02:18.000000000 +0200 +++ new/installation-images-17.2/data/root/gdb.file_list 2021-05-04 16:17:56.000000000 +0200 @@ -3,6 +3,8 @@ gdb: ?valgrind: nodeps +# helps valgrind download debuginfos +?debuginfod-client: yast2-buildtools: ignore AUTODEPS: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/installation-images-17.0/doc/files.md new/installation-images-17.2/doc/files.md --- old/installation-images-17.0/doc/files.md 2021-04-27 13:02:18.000000000 +0200 +++ new/installation-images-17.2/doc/files.md 2021-05-04 16:17:56.000000000 +0200 @@ -423,6 +423,6 @@ AUTODEPS: ``` -If you don't specify any actions in AUTODEPS, templates are appied to +If you don't specify any actions in AUTODEPS, templates are applied to each individual package. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/installation-images-17.0/lib/AddFiles.pm new/installation-images-17.2/lib/AddFiles.pm --- old/installation-images-17.0/lib/AddFiles.pm 2021-04-27 13:02:18.000000000 +0200 +++ new/installation-images-17.2/lib/AddFiles.pm 2021-05-04 16:17:56.000000000 +0200 @@ -861,6 +861,18 @@ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +=head2 find_missing_packs(\@packs) + +A @packs entry is a hash ref $p from which we ask: +- $p->{name} +- $p->{tags}{ignore} +- $p->{tags}{nodeps} + +Return: autodeps hash ref: + string package_name -> string "package_name < required_by < required_by" + +=cut + sub find_missing_packs { my $packs = shift; @@ -891,7 +903,7 @@ close $f; } else { - die "$old->{dir}.romlog: $old package list missing"; + die "$old->{dir}.rpmlog: $old package list missing"; } if(open my $f, "$old->{dir}.solv") { while(<$f>) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/installation-images-17.0/lib/ReadConfig.pm new/installation-images-17.2/lib/ReadConfig.pm --- old/installation-images-17.0/lib/ReadConfig.pm 2021-04-27 13:02:18.000000000 +0200 +++ new/installation-images-17.2/lib/ReadConfig.pm 2021-05-04 16:17:56.000000000 +0200 @@ -179,6 +179,7 @@ use Cwd; use File::Path 'make_path'; use File::Spec 'abs2rel'; +use ResolveDepsLibsolv; eval "use solv"; @@ -186,7 +187,6 @@ sub read_meta; sub read_packages; sub resolve_deps_obs; -sub resolve_deps_libsolv; sub show_package_deps; sub get_version_info; sub version_cmp; @@ -214,6 +214,21 @@ } +=head2 ResolveDeps(\@packages, \@ignore, \%old) + +@packages strings, package names to include, with their dependencies + +@ignore strings, package names to ignore, with their dependencies + +%old + +Return: autodeps hash ref: + string package_name -> string "package_name < required_by < required_by" + +Also print out the return value, and the package count + +=cut + sub ResolveDeps { local $_; @@ -228,7 +243,7 @@ } else { die "oops, no libsolv" unless $ConfigData{libsolv_ok}; - $p1 = resolve_deps_libsolv $packages, $ignore; + $p1 = resolve_deps_libsolv $packages, $ignore, "/tmp/instsys.solv"; } my $p2; @@ -723,123 +738,17 @@ } -sub resolve_deps_libsolv -{ - local $_; - my $packages = shift; - my $ignore = shift; - - my $ignore_file_deps = $ENV{debug} =~ /filedeps/ ? 0 : 1; - - my %p; - - my $pool = solv::Pool->new(); - my $repo = $pool->add_repo("instsys"); - $repo->add_solv("/tmp/instsys.solv") or die "/tmp/instsys.solv: no solv file"; - $pool->addfileprovides(); - $pool->createwhatprovides(); - $pool->set_debuglevel(4) if $ENV{debug} =~ /solv/; - - my $jobs; - for (@$packages) { - push @$jobs, $pool->Job($solv::Job::SOLVER_INSTALL | $solv::Job::SOLVER_SOLVABLE_NAME, $pool->str2id($_)); - } - - my $blackpkg = $repo->add_solvable(); - $blackpkg->{evr} = "1-1"; - $blackpkg->{name} = "blacklist_package"; - $blackpkg->{arch} = "noarch"; - - my %blacklisted; - for (@$ignore) { - my $id = $pool->str2id($_); - next if $pool->Job($solv::Job::SOLVER_SOLVABLE_NAME, $id)->solvables(); - $blackpkg->add_deparray($solv::SOLVABLE_PROVIDES, $id); - $blacklisted{$_} = 1; - } - - $pool->createwhatprovides(); - - if(defined &solv::XSolvable::unset) { - for (@$ignore) { - my $job = $pool->Job($solv::Job::SOLVER_SOLVABLE_NAME, $pool->str2id($_)); - for my $s ($job->solvables()) { - $s->unset($solv::SOLVABLE_REQUIRES); - $s->unset($solv::SOLVABLE_RECOMMENDS); - $s->unset($solv::SOLVABLE_SUPPLEMENTS); - } - } - - if($ignore_file_deps) { - for ($pool->Selection_all()->solvables()) { - my @deps = $_->lookup_idarray($solv::SOLVABLE_REQUIRES, 0); - @deps = grep { $pool->id2str($_) !~ /^\// } @deps; - $_->unset($solv::SOLVABLE_REQUIRES); - for my $id (@deps) { - $_->add_deparray($solv::SOLVABLE_REQUIRES, $id, 0); - } - } - } - - if (%blacklisted) { - for ($pool->Selection_all()->solvables()) { - my @deps = $_->lookup_idarray($solv::SOLVABLE_CONFLICTS, 0); - my @fdeps = grep { !$blacklisted{$pool->id2str($_)} } @deps; - next if @fdeps == @deps; - $_->unset($solv::SOLVABLE_CONFLICTS); - for my $id (@fdeps) { - $_->add_deparray($solv::SOLVABLE_CONFLICTS, $id, 0); - } - } - } - } - else { - warn "$Script: outdated perl-solv: solver will not work properly"; - } - - my $solver = $pool->Solver(); - $solver->set_flag($solv::Solver::SOLVER_FLAG_IGNORE_RECOMMENDED, 1); - - my @problems = $solver->solve($jobs); - - if(@problems) { - my @err; - - for my $problem (@problems) { - for my $pr ($problem->findallproblemrules()) { - push @err, "$Script: " . $pr->info()->problemstr() . "\n"; - } - } - - warn join('', @err); - - return \%p; - } - - my $trans = $solver->transaction(); - - for ($trans->newsolvables()) { - my $dep; - - if(defined &solv::Solver::describe_decision) { - my ($reason, $rule) = $solver->describe_decision($_); - if ($rule && $rule->{type} == $solv::Solver::SOLVER_RULE_RPM) { - $dep = $rule->info()->{solvable}{name}; - } - else { - # print "XXX $_->{name}: type = $rule->{type}\n"; - } - } +=head2 show_package_deps($package_name, \%deps) - $p{$_->{name}} = $dep; - } +$package_name string - delete $p{$_} for (@$packages, @$ignore); - delete $p{$blackpkg->{name}}; +%deps keys: string package name, + values: string which (one) package required the key - return \%p; -} +return string dependency chain, starting with $package_name, for example +"augeas < ruby2.7-rubygem-ruby-augeas < ruby2.7-rubygem-cfa < yast2" +=cut sub show_package_deps { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/installation-images-17.0/lib/ResolveDepsLibsolv.pm new/installation-images-17.2/lib/ResolveDepsLibsolv.pm --- old/installation-images-17.0/lib/ResolveDepsLibsolv.pm 1970-01-01 01:00:00.000000000 +0100 +++ new/installation-images-17.2/lib/ResolveDepsLibsolv.pm 2021-05-04 16:17:56.000000000 +0200 @@ -0,0 +1,138 @@ +package ResolveDepsLibsolv; + +require Exporter; +@ISA = qw ( Exporter ); +@EXPORT = qw ( resolve_deps_libsolv ); + +use strict 'vars'; +use vars qw ( $Script ); + +eval "use solv"; + +=head2 resolve_deps_libsolv(\@packages, \@ignore, $solv_filename) + +Return hash ref: +- keys: string package name, +- values: string which (one) package required the key + +=cut + +sub resolve_deps_libsolv +{ + local $_; + my $packages = shift; + my $ignore = shift; + my $solv_filename = shift; + + my $ignore_file_deps = $ENV{debug} =~ /filedeps/ ? 0 : 1; + + my %p; + + my $pool = solv::Pool->new(); + my $repo = $pool->add_repo("instsys"); + $repo->add_solv($solv_filename) or die "$solv_filename: no solv file"; + $pool->addfileprovides(); + $pool->createwhatprovides(); + $pool->set_debuglevel(4) if $ENV{debug} =~ /solv/; + + my $jobs = []; + for (@$packages) { + push @$jobs, $pool->Job($solv::Job::SOLVER_INSTALL | $solv::Job::SOLVER_SOLVABLE_NAME, $pool->str2id($_)); + } + + my $blackpkg = $repo->add_solvable(); + $blackpkg->{evr} = "1-1"; + $blackpkg->{name} = "blacklist_package"; + $blackpkg->{arch} = "noarch"; + + my %blacklisted; + for (@$ignore) { + my $id = $pool->str2id($_); + next if $pool->Job($solv::Job::SOLVER_SOLVABLE_NAME, $id)->solvables(); + $blackpkg->add_deparray($solv::SOLVABLE_PROVIDES, $id); + $blacklisted{$_} = 1; + } + + $pool->createwhatprovides(); + + if(defined &solv::XSolvable::unset) { + for (@$ignore) { + my $job = $pool->Job($solv::Job::SOLVER_SOLVABLE_NAME, $pool->str2id($_)); + for my $s ($job->solvables()) { + $s->unset($solv::SOLVABLE_REQUIRES); + $s->unset($solv::SOLVABLE_RECOMMENDS); + $s->unset($solv::SOLVABLE_SUPPLEMENTS); + } + } + + if($ignore_file_deps) { + for ($pool->Selection_all()->solvables()) { + my @deps = $_->lookup_idarray($solv::SOLVABLE_REQUIRES, 0); + @deps = grep { $pool->id2str($_) !~ /^\// } @deps; + $_->unset($solv::SOLVABLE_REQUIRES); + for my $id (@deps) { + $_->add_deparray($solv::SOLVABLE_REQUIRES, $id, 0); + } + } + } + + if (%blacklisted) { + for ($pool->Selection_all()->solvables()) { + my @deps = $_->lookup_idarray($solv::SOLVABLE_CONFLICTS, 0); + my @fdeps = grep { !$blacklisted{$pool->id2str($_)} } @deps; + next if @fdeps == @deps; + $_->unset($solv::SOLVABLE_CONFLICTS); + for my $id (@fdeps) { + $_->add_deparray($solv::SOLVABLE_CONFLICTS, $id, 0); + } + } + } + } + else { + warn "$Script: outdated perl-solv: solver will not work properly"; + } + + my $solver = $pool->Solver(); + $solver->set_flag($solv::Solver::SOLVER_FLAG_IGNORE_RECOMMENDED, 1); + + my @problems = $solver->solve($jobs); + + if(@problems) { + my @err; + + for my $problem (@problems) { + for my $pr ($problem->findallproblemrules()) { + push @err, "$Script: " . $pr->info()->problemstr() . "\n"; + } + } + + warn join('', @err); + + return \%p; + } + + my $trans = $solver->transaction(); + + for ($trans->newsolvables()) { + my $dep; + + if(defined &solv::Solver::describe_decision) { + my ($reason, $rule) = $solver->describe_decision($_); + if ($rule && $rule->{type} == $solv::Solver::SOLVER_RULE_RPM) { + $dep = $rule->info()->{solvable}{name}; + } + else { + # print "XXX $_->{name}: type = $rule->{type}\n"; + } + } + + $p{$_->{name}} = $dep; + } + + delete $p{$_} for (@$packages, @$ignore); + delete $p{$blackpkg->{name}}; + + return \%p; +} + +1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/installation-images-17.0/obs/installation-images.spec new/installation-images-17.2/obs/installation-images.spec --- old/installation-images-17.0/obs/installation-images.spec 2021-04-27 13:02:18.000000000 +0200 +++ new/installation-images-17.2/obs/installation-images.spec 2021-05-04 16:17:56.000000000 +0200 @@ -339,6 +339,7 @@ BuildRequires: dash BuildRequires: dbus-1-x11 BuildRequires: dd_rescue +BuildRequires: debuginfod-client BuildRequires: dejavu-fonts BuildRequires: dhcp-server BuildRequires: dmraid diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/installation-images-17.0/test/20_lib_resolve_deps_libsolv.t new/installation-images-17.2/test/20_lib_resolve_deps_libsolv.t --- old/installation-images-17.0/test/20_lib_resolve_deps_libsolv.t 1970-01-01 01:00:00.000000000 +0100 +++ new/installation-images-17.2/test/20_lib_resolve_deps_libsolv.t 2021-05-04 16:17:56.000000000 +0200 @@ -0,0 +1,62 @@ +#! /usr/bin/perl + +use strict; +use File::Temp; +use File::Basename; +use Test::More; + +use ResolveDepsLibsolv; + +$ResolveDepsLibsolv::Script = "test"; + +sub fixture { + my $filename = shift; + my $dirname = dirname(__FILE__); + return "$dirname/data/$filename"; +} + +is_deeply( + resolve_deps_libsolv([], [], fixture "empty.solv"), + {}, + "resolve an empty request" +); + +is_deeply( + resolve_deps_libsolv(["bash"], [], fixture "bash-nodeps.solv"), + {}, + "a missing dependency is not returned" +); + +# package_name => pulled in by package_name +my $bash_deps = { + "filesystem" => "glibc", + "glibc" => "bash", + "libgcc_s1" => "libncurses6", + "libncurses6" => "libreadline8", + "libreadline8" => "bash", + "libstdc++6" => "libncurses6", + "system-user-root" => "filesystem", + "terminfo-base" => "libncurses6", + "update-alternatives" => "bash", +}; + +is_deeply( + resolve_deps_libsolv(["bash"], [], fixture "bash-deps.solv"), + $bash_deps, + "resolve a bash request in a small solv" +); + +my $partial_bash_deps = { + "filesystem" => "glibc", + "glibc" => "bash", + "system-user-root" => "filesystem", + "update-alternatives" => "bash", +}; + +is_deeply( + resolve_deps_libsolv(["bash"], ["libreadline8"], fixture "bash-deps.solv"), + $partial_bash_deps, + "resolve a bash request in a small solv, ignoring readline" +); + +done_testing(); Binary files old/installation-images-17.0/test/data/bash-deps.solv and new/installation-images-17.2/test/data/bash-deps.solv differ Binary files old/installation-images-17.0/test/data/bash-nodeps.solv and new/installation-images-17.2/test/data/bash-nodeps.solv differ Binary files old/installation-images-17.0/test/data/empty.solv and new/installation-images-17.2/test/data/empty.solv differ