Hello community,

here is the log from the commit of package yast2-installation for 
openSUSE:Factory checked in at 2020-03-22 14:16:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-installation (Old)
 and      /work/SRC/openSUSE:Factory/.yast2-installation.new.3160 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "yast2-installation"

Sun Mar 22 14:16:26 2020 rev:442 rq:786912 version:4.2.40

Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-installation/yast2-installation.changes    
2020-03-14 09:54:50.307088029 +0100
+++ 
/work/SRC/openSUSE:Factory/.yast2-installation.new.3160/yast2-installation.changes
  2020-03-22 14:16:29.510030699 +0100
@@ -1,0 +2,21 @@
+Fri Mar 20 14:04:48 UTC 2020 - Imobach Gonzalez Sosa <igonzalezs...@suse.com>
+
+- In the proposal runner, restore the scroll only when it was
+  previously saved (bsc#1167248).
+- 4.2.40
+
+-------------------------------------------------------------------
+Wed Mar 18 16:52:30 UTC 2020 - Ladislav Slezák <lsle...@suse.cz>
+
+- Verify the package versions before applying the self-update
+  fixes (related to bsc#1163084)
+- 4.2.39
+
+-------------------------------------------------------------------
+Tue Mar 17 12:59:50 UTC 2020 - Josef Reidinger <jreidin...@suse.com>
+
+- Drop few not needed recommends to have identical package on
+  opensuse and SLE (jsc#SLE-11936, jsc#SLE-11851)
+- 4.2.38
+
+-------------------------------------------------------------------

Old:
----
  yast2-installation-4.2.37.tar.bz2

New:
----
  yast2-installation-4.2.40.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ yast2-installation.spec ++++++
--- /var/tmp/diff_new_pack.0EMJ3W/_old  2020-03-22 14:16:31.774032152 +0100
+++ /var/tmp/diff_new_pack.0EMJ3W/_new  2020-03-22 14:16:31.794032165 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-installation
-Version:        4.2.37
+Version:        4.2.40
 Release:        0
 Summary:        YaST2 - Installation Parts
 License:        GPL-2.0-only
@@ -59,8 +59,6 @@
 # Augeas lenses
 Requires:       augeas-lenses
 # Only in inst-sys
-# Requires:     yast2-add-on
-# Requires:     yast2-update
 Requires:       yast2-storage-ng >= 4.0.175
 # Language::GetLanguageItems and other API
 # Language::Set (handles downloading the translation extensions)
@@ -115,15 +113,8 @@
 
 Obsoletes:      yast2-installation-devel-doc
 
-# install the registration module only in SLE (bsc#1043122)
-%if !0%{?is_opensuse}
-Recommends:     yast2-registration
-%endif
 Recommends:     yast2-online-update
 Recommends:     yast2-firewall
-Recommends:     release-notes
-Recommends:     curl
-Recommends:     yast2-update
 Recommends:     yast2-add-on
 
 BuildArch:      noarch

++++++ yast2-installation-4.2.37.tar.bz2 -> yast2-installation-4.2.40.tar.bz2 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-installation-4.2.37/bin/yupdate 
new/yast2-installation-4.2.40/bin/yupdate
--- old/yast2-installation-4.2.37/bin/yupdate   2020-03-13 11:43:00.000000000 
+0100
+++ new/yast2-installation-4.2.40/bin/yupdate   2020-03-20 15:15:46.000000000 
+0100
@@ -140,7 +140,9 @@
 
     # write the file back
     def write
-      File.write(path, values.join("\n"))
+      # ensure there is a trailing newline so the new values
+      # can be properly added to the file
+      File.write(path, values.join("\n") + "\n")
     end
 
   private
@@ -289,7 +291,7 @@
         relative_path = Pathname.new(f).relative_path_from(upperdir_path)
         original_path = File.join(origdir, relative_path)
         # unescape the path
-        pth = unescape_path(upperdir_path)
+        pth = OverlayFS.unescape_path(upperdir_path)
         block.call(File.join(pth, relative_path), f, original_path)
       end
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-installation-4.2.37/doc/SELF_UPDATE.md 
new/yast2-installation-4.2.40/doc/SELF_UPDATE.md
--- old/yast2-installation-4.2.37/doc/SELF_UPDATE.md    2020-03-13 
11:43:00.000000000 +0100
+++ new/yast2-installation-4.2.40/doc/SELF_UPDATE.md    2020-03-20 
15:15:46.000000000 +0100
@@ -216,6 +216,22 @@
 - /SUSE/Updates/SLE-SERVER-INSTALLER/12-SP2/s390x/update
 - /SUSE/Updates/SLE-SERVER-INSTALLER/12-SP2/x86_64/update
 
+## Update Repository Validation
+
+Using an incompatible self-update repository might result in a crash or
+unexpected behavior. Since SLE15-SP2/Leap15.2 the installer compares the
+versions of some specific packages in the self-update repository and in the 
inst-sys.
+If any unexpected version is found then an error is displayed and the 
self-update
+step is completely skipped.
+
+Is is possible to skip this validation is special cases and force applying the
+updates despite the version mismatch by setting environment variable
+`Y2_FORCE_SELF_UPDATE=1`. *This should be done only in special cases (testing)
+when you know what you are doing!*
+
+See the 
[Installation::SelfupdateVerifier](../src/lib/installation/selfupdate_verifier.rb)
+class for more details.
+
 ## Security
 
 ### Package Integrity
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-installation-4.2.37/doc/yupdate.md 
new/yast2-installation-4.2.40/doc/yupdate.md
--- old/yast2-installation-4.2.37/doc/yupdate.md        2020-03-13 
11:43:00.000000000 +0100
+++ new/yast2-installation-4.2.40/doc/yupdate.md        2020-03-20 
15:15:46.000000000 +0100
@@ -51,7 +51,7 @@
 ## Installation
 
 The `yupdate` script should run in the inst-sys. Since SLE15-SP2/openSUSE
-Leap 15.2, openSUSE Tumbleweed 2020xxxx, it ~~is~~ will be preinstalled.
+Leap 15.2, openSUSE Tumbleweed 20200314, it is preinstalled.
 
 For older releases, run:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-4.2.37/package/yast2-installation.changes 
new/yast2-installation-4.2.40/package/yast2-installation.changes
--- old/yast2-installation-4.2.37/package/yast2-installation.changes    
2020-03-13 11:43:00.000000000 +0100
+++ new/yast2-installation-4.2.40/package/yast2-installation.changes    
2020-03-20 15:15:46.000000000 +0100
@@ -1,4 +1,25 @@
 -------------------------------------------------------------------
+Fri Mar 20 14:04:48 UTC 2020 - Imobach Gonzalez Sosa <igonzalezs...@suse.com>
+
+- In the proposal runner, restore the scroll only when it was
+  previously saved (bsc#1167248).
+- 4.2.40
+
+-------------------------------------------------------------------
+Wed Mar 18 16:52:30 UTC 2020 - Ladislav Slezák <lsle...@suse.cz>
+
+- Verify the package versions before applying the self-update
+  fixes (related to bsc#1163084)
+- 4.2.39
+
+-------------------------------------------------------------------
+Tue Mar 17 12:59:50 UTC 2020 - Josef Reidinger <jreidin...@suse.com>
+
+- Drop few not needed recommends to have identical package on
+  opensuse and SLE (jsc#SLE-11936, jsc#SLE-11851)
+- 4.2.38
+
+-------------------------------------------------------------------
 Fri Mar 13 09:26:49 UTC 2020 - Josef Reidinger <jreidin...@suse.com>
 
 - Add Abort confirmation for inst_welcome client used in firstboot
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-4.2.37/package/yast2-installation.spec 
new/yast2-installation-4.2.40/package/yast2-installation.spec
--- old/yast2-installation-4.2.37/package/yast2-installation.spec       
2020-03-13 11:43:00.000000000 +0100
+++ new/yast2-installation-4.2.40/package/yast2-installation.spec       
2020-03-20 15:15:46.000000000 +0100
@@ -16,7 +16,7 @@
 #
 
 Name:           yast2-installation
-Version:        4.2.37
+Version:        4.2.40
 Release:        0
 Group:          System/YaST
 License:        GPL-2.0-only
@@ -58,8 +58,6 @@
 # Augeas lenses
 Requires:       augeas-lenses
 # Only in inst-sys
-# Requires:     yast2-add-on
-# Requires:     yast2-update
 Requires:       yast2-storage-ng >= 4.0.175
 # Language::GetLanguageItems and other API
 # Language::Set (handles downloading the translation extensions)
@@ -115,15 +113,8 @@
 
 Obsoletes:      yast2-installation-devel-doc
 
-# install the registration module only in SLE (bsc#1043122)
-%if !0%{?is_opensuse}
-Recommends:     yast2-registration
-%endif
 Recommends:     yast2-online-update
 Recommends:     yast2-firewall
-Recommends:     release-notes
-Recommends:     curl
-Recommends:     yast2-update
 Recommends:     yast2-add-on
 
 BuildArch:      noarch
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-4.2.37/src/lib/installation/clients/inst_update_installer.rb
 
new/yast2-installation-4.2.40/src/lib/installation/clients/inst_update_installer.rb
--- 
old/yast2-installation-4.2.37/src/lib/installation/clients/inst_update_installer.rb
 2020-03-13 11:43:00.000000000 +0100
+++ 
new/yast2-installation-4.2.40/src/lib/installation/clients/inst_update_installer.rb
 2020-03-20 15:15:46.000000000 +0100
@@ -13,8 +13,10 @@
 #
 # 
------------------------------------------------------------------------------
 
-require "installation/updates_manager"
+require "installation/instsys_packages"
 require "installation/update_repositories_finder"
+require "installation/updates_manager"
+require "installation/selfupdate_verifier"
 require "y2packager/self_update_addon_repo"
 require "uri"
 require "yaml"
@@ -39,6 +41,7 @@
     Yast.import "ProductFeatures"
     Yast.import "Label"
     Yast.import "Linuxrc"
+    Yast.import "OSRelease"
     Yast.import "Popup"
     Yast.import "Report"
     Yast.import "NetworkService"
@@ -48,9 +51,11 @@
     Yast.import "AutoinstConfig"
     Yast.import "AutoinstGeneral"
 
-    def main
+    def initialize
       textdomain "installation"
+    end
 
+    def main
       return :back if GetInstArgs.going_back
 
       require_registration_libraries
@@ -113,6 +118,7 @@
       updated = update_repositories.map { |u| add_repository(u) }.any?
 
       if updated
+        return false unless valid_repositories?
         # copy the addon packages before applying the updates to inst-sys,
         # #apply_all removes the repositories!
         Yast::Progress.NextStage
@@ -188,18 +194,6 @@
       @update_repositories = []
     end
 
-    # Return the custom self-update URL
-    #
-    # A custom URL can be specified via Linuxrc or in an AutoYaST profile.
-    # Only 1 custom self-update URL can be specified.
-    #
-    # @return [URI] self-update URL
-    # @see #self_update_url_from_linuxrc
-    # @see #self_update_url_from_profile
-    def custom_self_update_url
-      @custom_self_update_url ||= self_update_url_from_linuxrc || 
self_update_url_from_profile
-    end
-
     # Check if installer was updated
     #
     # It checks if a file UPDATED_FLAG_FILENAME exists in Directory.vardir
@@ -433,11 +427,47 @@
   private
 
     #
-    # TODO: Most of the code responsable of process the profile has been
+    # TODO: Most of the code responsible of process the profile has been
     # obtained from which inst_autoinit client in yast2-autoinstallation.
     # We should try to move it to a independent class or to Yast::Profile.
     #
 
+    # Do the self-update repositories contain matching package versions?
+    # Patching the SP2 installer with old packages (SP1) or newer packages
+    # (SP3) can cause crashes or unexpected behavior.
+    def valid_repositories?
+      instsys_packages = 
::Installation::InstsysPackages.read("/.packages.root")
+      verifier = 
::Installation::SelfupdateVerifier.new(updates_manager.repositories, 
instsys_packages)
+
+      # no downgraded packages => OK
+      return true if verifier.downgraded_packages.empty?
+
+      if ENV["Y2_FORCE_SELF_UPDATE"] == "1"
+        log.warn("Self update forced by user despite of a package version 
mismatch!")
+        return true
+      else
+        repos = update_repositories.map(&:uri).join("\n")
+        # TRANSLATORS: error message, %{repos} is replaced by an URL list
+        msg = _("The installer found unexpected package versions in the 
installer\n" \
+          "self update repository. Make sure that the self update\n" \
+          "URL points to a correct repository.\n\n" \
+          "Configured update repositories:\n%{repos}") % { repos: repos }
+
+        if OSRelease.os_release_exists?
+          # TRANSLATORS: part of an popup message, %s is replaced by the name
+          # of the installer system, e.g. "SUSE Linux Enterprise 15 SP2"
+          msg += "\n\n" + _("Installation system: %s") % 
OSRelease.ReleaseInformation
+        end
+
+        # TRANSLATORS: part of an popup message
+        msg += "\n\n" + _("The installer self update will be skipped.")
+
+        Report.Error(msg)
+
+        return false
+      end
+    end
+
     # @return [Boolean] true if the scheme is not forbidden
     def profile_valid_scheme?
       !PROFILE_FORBIDDEN_SCHEMES.include? AutoinstConfig.scheme
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-4.2.37/src/lib/installation/instsys_packages.rb 
new/yast2-installation-4.2.40/src/lib/installation/instsys_packages.rb
--- old/yast2-installation-4.2.37/src/lib/installation/instsys_packages.rb      
1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-installation-4.2.40/src/lib/installation/instsys_packages.rb      
2020-03-20 15:15:46.000000000 +0100
@@ -0,0 +1,37 @@
+# 
------------------------------------------------------------------------------
+# Copyright (c) 2020 SUSE LLC, All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of version 2 of the GNU General Public License as published by the
+# Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 
details.
+# 
------------------------------------------------------------------------------
+
+require "yast"
+require "y2packager/package"
+
+module Installation
+  # Find the packages installed in the inst-sys. Because the inst-sys
+  # does not contain the RPM DB we need to load the installed packages
+  # from the /.packages.root file.
+  class InstsysPackages
+    def self.read(file = "/.packages.root")
+      packages = []
+
+      File.foreach(file) do |line|
+        # each line looks like this (the dependency at the end is optional):
+        #   yast2-core [4.1.0-5.18.x86_64] < yast2
+        name, version = /^(\S+) \[(\S+)\]/.match(line)[1, 2]
+        next unless name && version
+
+        # nil repository ID
+        packages << Y2Packager::Package.new(name, nil, version)
+      end
+
+      packages
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-4.2.37/src/lib/installation/proposal_runner.rb 
new/yast2-installation-4.2.40/src/lib/installation/proposal_runner.rb
--- old/yast2-installation-4.2.37/src/lib/installation/proposal_runner.rb       
2020-03-13 11:43:00.000000000 +0100
+++ new/yast2-installation-4.2.40/src/lib/installation/proposal_runner.rb       
2020-03-20 15:15:46.000000000 +0100
@@ -268,7 +268,10 @@
       @proposal_vscroll = Yast::UI.QueryWidget(Id(:proposal), :VScrollValue)
     end
 
+    # Restores the vertical scroll if previously saved
     def restore_vertical_scroll
+      return unless @proposal_vscroll
+
       Yast::UI.ChangeWidget(Id(:proposal), :VScrollValue, @proposal_vscroll)
     end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-4.2.37/src/lib/installation/selfupdate_verifier.rb 
new/yast2-installation-4.2.40/src/lib/installation/selfupdate_verifier.rb
--- old/yast2-installation-4.2.37/src/lib/installation/selfupdate_verifier.rb   
1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-installation-4.2.40/src/lib/installation/selfupdate_verifier.rb   
2020-03-20 15:15:46.000000000 +0100
@@ -0,0 +1,112 @@
+# 
------------------------------------------------------------------------------
+# Copyright (c) 2020 SUSE LLC, All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of version 2 of the GNU General Public License as published by the
+# Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 
details.
+# 
------------------------------------------------------------------------------
+
+require "yast"
+require "installation/instsys_packages"
+require "y2packager/repository"
+
+module Installation
+  # This class does some self-update repository sanity checks to avoid
+  # applying a wrong self update repository (specified by user).
+  class SelfupdateVerifier
+    include Yast::Logger
+
+    # We only check the version of these packages, the reason for a fixed
+    # list is that these packages are maintained by us and their version
+    # is under our control.
+    #
+    # We do not care about the other packages, in theory there might be
+    # valid reasons for downgrading them. With these YaST packages we can
+    # go back to the previous state but still increase the version number.
+    #
+    # We can also check the "too new" packages because the YaST package 
versions
+    # are bound to specific SP release (e.g. 4.1.x in SP1, 4.2.x in SP2).
+    # So the major and minor version parts must not be changed during self 
update.
+    VERIFIED_PACKAGES = [
+      "autoyast2-installation",
+      "yast2",
+      "yast2-installation",
+      "yast2-packager",
+      "yast2-pkg-bindings",
+      "yast2-registration",
+      "yast2-storage-ng",
+      "yast2-update"
+    ].freeze
+
+    # Constructor
+    # @param repositories [Array<UpdateRepository>] the self-update 
repositories
+    # @param instsys_packages [Array<Y2Packager::Package>] the installed 
packages
+    #   in the current inst-sys
+    def initialize(repositories, instsys_packages)
+      @instsys_packages = instsys_packages.select do |p|
+        VERIFIED_PACKAGES.include?(p.name)
+      end
+
+      # the selfupdate repo might provide the same package in several versions,
+      # find the latest one
+
+      # group the same packages together
+      packages = {}
+
+      repositories.each do |repo|
+        repo.packages.each do |p|
+          next unless VERIFIED_PACKAGES.include?(p.name)
+
+          if packages[p.name]
+            packages[p.name] << p
+          else
+            packages[p.name] = [p]
+          end
+        end
+      end
+
+      # for each package find the highest version
+      @selfupdate_packages = packages.values.map do |pkgs|
+        pkgs.max { |a, b| Yast::Pkg.CompareVersions(a.version, b.version) }
+      end
+    end
+
+    # check for downgraded packages, e.g. using the SP1 updates in the SP2 
installer
+    #
+    # @return [Array<Y2Packager::Resolvable>] List of downgraded packages
+    def downgraded_packages
+      packages = filter_self_updates do |inst_sys_pkg, update_pkg|
+        # -1 = "update_pkg" is older than "inst_sys_pkg" (0 = the same, 1 = 
newer)
+        Yast::Pkg.CompareVersions(update_pkg.version, inst_sys_pkg.version) == 
-1
+      end
+
+      log.warn("Found downgraded self-update packages: #{packages} ") unless 
packages.empty?
+      packages
+    end
+
+  private
+
+    # filter the self update packages using a block
+    def filter_self_updates(&block)
+      selfupdate_packages.select do |s|
+        pkg = instsys_package(s.name)
+        # if not in inst-sys
+        next false unless pkg
+
+        block.call(pkg, s)
+      end
+    end
+
+    # find the installed package in the inst-sys
+    # @param name [String] name of the package
+    def instsys_package(name)
+      instsys_packages.find { |p| p.name == name }
+    end
+
+    attr_reader :instsys_packages, :selfupdate_packages
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-4.2.37/test/fixtures/inst-sys/packages.root 
new/yast2-installation-4.2.40/test/fixtures/inst-sys/packages.root
--- old/yast2-installation-4.2.37/test/fixtures/inst-sys/packages.root  
1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-installation-4.2.40/test/fixtures/inst-sys/packages.root  
2020-03-20 15:15:46.000000000 +0100
@@ -0,0 +1,527 @@
+Mesa-libEGL1 [19.3.4-44.4.x86_64]
+Mesa-libGL1 [19.3.4-44.4.x86_64]
+Mesa-libglapi0 [19.3.4-44.4.x86_64] < Mesa-libGL1
+SUSEConnect [0.3.25-1.3.x86_64] < yast2-registration < skelcd-control-leanos
+aaa_base [84.87+git20180409.04c9dae-3.33.1.x86_64]
+augeas [1.10.1-1.11.x86_64] < ruby2.5-rubygem-ruby-augeas < 
ruby2.5-rubygem-cfa < yast2
+augeas-lenses [1.10.1-1.11.x86_64] < yast2-installation
+autoyast2 [4.2.28-1.3.noarch] < skelcd-control-leanos
+autoyast2-installation [4.2.28-1.3.noarch] < yast2-add-on < 
skelcd-control-leanos
+bash [4.4-9.10.1.x86_64]
+blog [2.18-4.11.x86_64] < sysvinit-tools
+boost-license1_66_0 [1.66.0-3.10.noarch] < libboost_thread1_66_0 < snapper
+btrfsprogs [4.19.1-6.8.x86_64]
+btrfsprogs-udev-rules [4.19.1-6.8.noarch] < btrfsprogs
+bzip2 [1.0.6-5.9.1.x86_64]
+checkmedia [5.3-1.46.x86_64]
+chrony [3.2-9.9.1.x86_64]
+coreutils [8.29-2.12.x86_64]
+cpio [2.12-3.3.1.x86_64]
+cracklib [2.9.6-2.21.x86_64]
+cracklib-dict-full [2.8.12-1.22.x86_64] < libpwquality1 < cryptsetup
+cryptsetup [2.0.5-2.1.x86_64]
+dbus-1 [1.12.2-8.3.1.x86_64] < systemd
+dejavu-fonts [2.37-1.21.noarch]
+device-mapper [1.02.163-3.23.x86_64]
+diffutils [3.6-2.11.x86_64]
+dmidecode [3.2-9.3.2.x86_64] < SUSEConnect < yast2-registration < 
skelcd-control-leanos
+dmz-icon-theme-cursors [11.3.0-1.22.noarch]
+dosfstools [4.1-1.39.x86_64]
+e2fsprogs [1.43.8-4.17.1.x86_64]
+efibootmgr [14-2.8.x86_64]
+efont-unicode-bitmap-fonts [0.4.2-1.21.noarch]
+elilo [3.16-4.30.x86_64]
+fbiterm [0.5.20040304-3.38.x86_64]
+fcoe-utils [1.0.32-1.41.x86_64] < yast2-fcoe-client < skelcd-control-leanos
+fdupes [1.61-1.452.x86_64] < ruby-common < ruby2.5 < ruby
+file [5.32-7.5.1.x86_64]
+file-magic [5.32-7.5.1.noarch] < libmagic1 < rpm
+fillup [1.42-2.18.x86_64]
+findutils [4.6.0-2.21.x86_64]
+firewall-macros [0.5.5-4.24.9.noarch] < xorg-x11-Xvnc
+fontconfig [2.12.6-2.19.x86_64] < xterm-bin
+fonts-config [20160921-2.16.noarch]
+gawk [4.2.1-1.41.x86_64]
+glib2-tools [2.62.5-1.2.x86_64] < libgio-2_0-0 < polkit
+glibc [2.26-13.36.1.x86_64] < perl-XML-Bare
+glibc-locale-base [2.26-13.36.1.x86_64]
+google-noto-fonts-doc [20170919-2.13.noarch] < noto-naskharabic-fonts
+google-roboto-fonts [20161103.2.135-1.22.noarch]
+gpart [0.3-1.30.x86_64]
+gpg2 [2.2.5-4.14.4.x86_64]
+gpm [1.20.7-5.14.x86_64]
+graphviz [2.40.1-6.3.2.x86_64]
+graphviz-gnome [2.40.1-6.3.2.x86_64]
+graphviz-plugins-core [2.40.1-6.3.2.x86_64]
+grep [3.1-2.20.x86_64]
+grub2 [2.04-3.3.x86_64]
+gzip [1.10-1.46.x86_64]
+hdparm [9.52-1.22.x86_64]
+hex [1.4-2.18.x86_64]
+hicolor-icon-theme [0.17-1.21.noarch] < dmz-icon-theme-cursors
+hostname [3.16-2.22.x86_64] < yast2
+hwinfo [21.66-6.17.x86_64]
+hyper-v [7-12.2.x86_64]
+icewm-lite [1.4.2-7.6.1.x86_64]
+indic-fonts [20160512-1.93.noarch]
+initviocons [0.5-1.27.x86_64]
+insserv-compat [0.1-4.3.1.noarch]
+iproute2 [5.3-2.10.x86_64] < yast2-installation
+iptables [1.8.3-1.20.x86_64]
+iputils [s20161105-6.10.x86_64]
+iscsiuio [0.7.8.2-13.32.1.x86_64] < yast2-iscsi-client < skelcd-control-leanos
+jfsutils [1.1.15-1.27.x86_64]
+joe [4.4-1.32.x86_64]
+kbd [2.0.4-14.20.x86_64]
+kbd-legacy [2.0.4-14.20.noarch] < kbd
+kdump [0.9.0-8.15.x86_64] < yast2-kdump < skelcd-control-leanos
+kexec-tools [2.0.20-1.10.x86_64] < kdump < yast2-kdump < skelcd-control-leanos
+keyutils [1.5.10-3.42.x86_64] < nfs-client
+khmeros-fonts [5.0-1.22.noarch]
+klogd [1.4.1-2.23.x86_64]
+kpartx [0.8.2+18.9ff73e7-1.49.x86_64] < multipath-tools
+krb5 [1.16.3-3.6.1.x86_64]
+less [530-1.6.x86_64]
+libICE6 [1.0.9-1.25.x86_64] < icewm-lite
+libQt5Core5 [5.12.7-1.19.x86_64] < libyui-qt-graph11
+libQt5DBus5 [5.12.7-1.19.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libQt5Gui5 [5.12.7-1.19.x86_64] < libyui-qt-graph11
+libQt5Network5 [5.12.7-1.19.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libQt5Svg5 [5.12.7-1.19.x86_64] < libyui-qt-pkg11
+libQt5Widgets5 [5.12.7-1.19.x86_64] < libyui-qt-graph11
+libQt5X11Extras5 [5.12.7-1.19.x86_64] < libyui-qt11 < libyui-qt-graph11
+libSM6 [1.2.2-1.23.x86_64] < icewm-lite
+libX11-6 [1.6.5-3.3.1.x86_64] < icewm-lite
+libX11-data [1.6.5-3.3.1.noarch] < libX11-6 < icewm-lite
+libX11-xcb1 [1.6.5-3.3.1.x86_64] < Mesa-libGL1
+libXau6 [1.0.8-1.26.x86_64] < xorg-x11-Xvnc
+libXaw7 [1.0.13-3.3.8.x86_64] < xterm-bin
+libXcomposite1 [0.4.4-1.23.x86_64] < xdpyinfo
+libXcursor1 [1.1.15-1.18.x86_64] < xsetroot < xdm
+libXdamage1 [1.1.4-1.23.x86_64] < xorg-x11-Xvnc
+libXdmcp6 [1.1.2-1.23.x86_64] < xorg-x11-Xvnc
+libXext6 [1.3.3-1.30.x86_64] < icewm-lite
+libXfixes3 [5.0.3-1.24.x86_64] < xorg-x11-Xvnc
+libXfont1 [1.5.4-1.17.x86_64] < fbiterm
+libXfont2-2 [2.0.3-1.17.x86_64] < xorg-x11-Xvnc
+libXfontcache1 [1.0.5-1.22.x86_64] < xset
+libXft2 [2.3.2-1.33.x86_64] < icewm-lite
+libXi6 [1.7.9-3.2.1.x86_64] < xf86-input-wacom
+libXinerama1 [1.1.3-1.22.x86_64] < icewm-lite
+libXmu6 [1.1.2-1.30.x86_64] < xterm-bin
+libXmuu1 [1.1.2-1.30.x86_64] < xset
+libXpm4 [3.5.12-1.33.x86_64] < xterm-bin
+libXrandr2 [1.5.1-2.17.x86_64] < icewm-lite
+libXrender1 [0.9.10-1.30.x86_64] < xdpyinfo
+libXt6 [1.1.5-2.24.x86_64] < xterm-bin
+libXtst6 [1.2.3-1.24.x86_64] < xorg-x11-Xvnc
+libXvnc1 [1.9.0-19.3.1.x86_64] < xorg-x11-Xvnc
+libXxf86dga1 [1.1.4-1.24.x86_64] < xdpyinfo
+libXxf86misc1 [1.0.3-1.23.x86_64] < xset
+libXxf86vm1 [1.1.4-1.23.x86_64] < Mesa-libGL1
+libacl1 [2.2.52-4.3.1.x86_64] < sed
+libaio1 [0.3.109-1.25.x86_64] < multipath-tools
+libapparmor1 [2.13.3-1.13.x86_64] < systemd
+libargon2-1 [0.0+git20171227.670229c-2.14.x86_64] < libcryptsetup12 < 
cryptsetup
+libassuan0 [2.5.1-2.14.x86_64] < gpg2
+libattr1 [2.4.47-2.19.x86_64] < shadow
+libaudit1 [2.8.1-3.30.x86_64] < nscd
+libaugeas0 [1.10.1-1.11.x86_64] < augeas-lenses < yast2-installation
+libblkid1 [2.33.1-4.5.1.x86_64] < cryptsetup
+libboost_system1_66_0 [1.66.0-3.10.x86_64] < snapper
+libboost_thread1_66_0 [1.66.0-3.10.x86_64] < snapper
+libbtrfs0 [4.19.1-6.8.x86_64] < libsnapper5 < snapper
+libbz2-1 [1.0.6-5.9.1.x86_64] < bzip2
+libcairo2 [1.16.0-1.29.x86_64] < pango-tools
+libcap-ng0 [0.7.9-4.37.x86_64] < util-linux
+libcap2 [2.25-2.41.x86_64] < chrony
+libcares2 [1.15.0+20200117-3.5.1.x86_64] < wget
+libcom_err2 [1.43.8-4.17.1.x86_64] < openssh
+libconfig11 [1.7-2.12.x86_64] < open-lldp < fcoe-utils < yast2-fcoe-client < 
skelcd-control-leanos
+libcrack2 [2.9.6-2.21.x86_64] < pam
+libcryptsetup12 [2.0.5-2.1.x86_64] < cryptsetup
+libcryptsetup12-hmac [2.0.5-2.1.x86_64]
+libcurl4 [7.66.0-2.31.x86_64] < libzypp < libyui-ncurses-pkg11
+libdatrie1 [0.2.9-1.25.x86_64] < libthai0 < libpango-1_0-0 < pango-tools
+libdb-4_8 [4.8.30-7.3.1.x86_64] < pam
+libdbus-1-3 [1.12.2-8.3.1.x86_64] < snapper
+libdevmapper-event1_03 [1.02.163-3.23.x86_64] < device-mapper
+libdevmapper1_03 [1.02.163-3.23.x86_64] < multipath-tools
+libdmx1 [1.1.3-1.23.x86_64] < xdpyinfo
+libdouble-conversion3 [3.1.5-1.3.x86_64] < libQt5Core5 < libyui-qt-graph11
+libdrm2 [2.4.100-1.23.x86_64] < Mesa-libGL1
+libdrm_amdgpu1 [2.4.100-1.23.x86_64] < xf86-video-amdgpu
+libdw1 [0.168-4.5.3.x86_64] < ltrace
+libebl-plugins [0.168-4.5.3.x86_64] < libelf1 < ltrace
+libedit0 [3.1.snap20150325-2.12.x86_64] < chrony
+libefivar1 [35-4.17.x86_64] < efibootmgr
+libelf1 [0.168-4.5.3.x86_64] < ltrace
+libepoxy0 [1.4.3-2.25.x86_64] < xorg-x11-server
+libesmtp [1.0.6-1.27.x86_64] < kdump < yast2-kdump < skelcd-control-leanos
+libevdev2 [1.4.5-1.27.x86_64] < libinput10 < xf86-input-libinput
+libevent-2_1-8 [2.1.8-2.23.x86_64] < nfs-client
+libexpat1 [2.2.5-3.6.1.x86_64] < Mesa-libGL1
+libext2fs2 [1.43.8-4.17.1.x86_64] < btrfsprogs
+libfdisk1 [2.33.1-4.5.1.x86_64] < util-linux
+libffi7 [3.2.1.git259-3.16.x86_64] < libgobject-2_0-0 < icewm-lite
+libfontenc1 [1.1.3-1.22.x86_64] < mkfontscale
+libfreebl3 [3.47.1-3.22.1.x86_64] < chrony
+libfreetype6 [2.9-2.13.x86_64] < mkfontscale
+libfribidi0 [1.0.5-1.14.x86_64] < libpango-1_0-0 < pango-tools
+libgbm1 [19.3.4-44.4.x86_64]
+libgcc_s1 [9.2.1+r275327-1.3.7.x86_64] < icewm-lite
+libgcrypt20 [1.8.2-8.15.1.x86_64] < rpm
+libgdbm4 [1.12-1.418.x86_64] < perl
+libgdk_pixbuf-2_0-0 [2.36.11-3.19.x86_64] < icewm-lite
+libgio-2_0-0 [2.62.5-1.2.x86_64] < polkit
+libglib-2_0-0 [2.62.5-1.2.x86_64] < pango-tools
+libglvnd [1.2.0-1.21.x86_64] < xorg-x11-Xvnc
+libgmodule-2_0-0 [2.62.5-1.2.x86_64] < libgdk_pixbuf-2_0-0 < icewm-lite
+libgmp10 [6.1.2-2.41.x86_64] < coreutils
+libgnutls30 [3.6.7-6.11.1.x86_64] < xorg-x11-Xvnc
+libgobject-2_0-0 [2.62.5-1.2.x86_64] < icewm-lite
+libgpg-error0 [1.29-1.8.x86_64] < gpg2
+libgpgme11 [1.13.1-2.31.x86_64] < wget
+libgpm2 [1.20.7-5.14.x86_64] < gpm
+libgraphite2-3 [1.3.11-2.12.x86_64] < libharfbuzz0 < libQt5Gui5 < 
libyui-qt-graph11
+libgraphviz6 [2.40.1-6.3.2.x86_64] < libyui-qt-graph11
+libgudev-1_0-0 [232-1.33.x86_64] < libwacom2 < libinput10 < xf86-input-libinput
+libharfbuzz0 [2.6.4-1.28.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libhogweed4 [3.4.1-4.9.1.x86_64] < libgnutls30 < xorg-x11-Xvnc
+libicu-suse65_1 [65.1-1.17.x86_64] < libQt5Core5 < libyui-qt-graph11
+libicu65_1-ledata [65.1-1.17.noarch] < libicu-suse65_1 < libQt5Core5 < 
libyui-qt-graph11
+libidn11 [1.34-3.2.2.x86_64] < iputils
+libidn2-0 [2.2.0-3.3.1.x86_64] < wget
+libinput10 [1.10.5-1.21.x86_64] < xf86-input-libinput
+libip4tc2 [1.8.3-1.20.x86_64] < iptables
+libip6tc2 [1.8.3-1.20.x86_64] < iptables
+libiterm1 [0.5.20040304-3.38.x86_64] < fbiterm
+libjbig2 [2.1-1.31.x86_64] < libtiff5 < libgdk_pixbuf-2_0-0 < icewm-lite
+libjemalloc2 [5.0.1-1.25.x86_64] < yast2-core < yast2
+libjpeg8 [8.1.2-5.12.1.x86_64] < xorg-x11-Xvnc
+libjson-c3 [0.13-1.19.x86_64] < libcryptsetup12 < cryptsetup
+libkeyutils1 [1.5.10-3.42.x86_64] < nfs-client
+libkmod2 [25-6.7.1.x86_64] < open-iscsi
+libksba8 [1.3.5-2.14.x86_64] < gpg2
+libldap-2_4-2 [2.4.46-9.25.1.x86_64] < gpg2
+libldap-data [2.4.46-9.25.1.noarch] < libldap-2_4-2 < gpg2
+libldapcpp1 [0.3.1-1.33.x86_64] < yast2-ldap < yast2-users < 
skelcd-control-leanos
+liblldp_clif1 [1.0.1+56.cb81e95-1.27.x86_64] < open-lldp < fcoe-utils < 
yast2-fcoe-client < skelcd-control-leanos
+libltdl7 [2.4.6-1.406.x86_64] < libgraphviz6 < libyui-qt-graph11
+liblua5_3-5 [5.3.4-3.3.2.x86_64] < rpm
+liblvm2cmd2_03 [2.03.05-3.26.x86_64] < lvm2
+liblz4-1 [1.8.0-3.5.1.x86_64] < systemd
+liblzma5 [5.2.3-4.3.1.x86_64] < rpm
+liblzo2-2 [2.10-2.22.x86_64] < btrfsprogs
+libmagic1 [5.32-7.5.1.x86_64] < rpm
+libmediacheck5 [5.3-1.46.x86_64] < checkmedia
+libmetalink3 [0.1.3-1.24.x86_64] < wget
+libmnl0 [1.0.4-1.25.x86_64] < iptables
+libmodman1 [2.0.1-1.27.x86_64] < libproxy1 < wget
+libmount1 [2.33.1-4.5.1.x86_64] < snapper
+libmozjs-60 [60.9.0-4.18.x86_64] < polkit
+libmtdev1 [1.1.5-1.26.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libncurses6 [6.1-5.6.2.x86_64] < libyui-ncurses-pkg11
+libnetfilter_conntrack3 [1.0.7-1.22.x86_64] < xtables-plugins < iptables
+libnettle6 [3.4.1-4.9.1.x86_64] < xorg-x11-Xvnc
+libnfnetlink0 [1.0.1-2.11.x86_64] < xtables-plugins < iptables
+libnftnl11 [1.1.4-1.23.x86_64] < iptables
+libnghttp2-14 [1.39.2-8.31.x86_64] < libcurl4 < libzypp < libyui-ncurses-pkg11
+libnl-config [3.3.0-1.29.noarch] < libnl3-200 < open-lldp < fcoe-utils < 
yast2-fcoe-client < skelcd-control-leanos
+libnl3-200 [3.3.0-1.29.x86_64] < open-lldp < fcoe-utils < yast2-fcoe-client < 
skelcd-control-leanos
+libnpth0 [1.5-2.11.x86_64] < gpg2
+libnsl2 [1.2.0-2.44.x86_64] < pam
+libntfs-3g87 [2016.2.22-3.3.2.x86_64] < ntfsprogs
+libopeniscsiusr0_2_0 [2.0.876-13.32.1.x86_64] < open-iscsi
+libopenssl1_1 [1.1.1d-6.3.x86_64] < openssh
+libp11-kit0 [0.23.2-4.8.3.x86_64] < p11-kit
+libpango-1_0-0 [1.43.0-1.33.x86_64] < pango-tools
+libparted0 [3.2-11.3.1.x86_64] < parted
+libpci3 [3.5.6-1.18.x86_64] < pciutils
+libpciaccess0 [0.14-1.16.x86_64] < xorg-x11-server
+libpcre1 [8.41-4.20.x86_64] < wget
+libpcre2-16-0 [10.31-1.14.x86_64] < libQt5Core5 < libyui-qt-graph11
+libpixman-1-0 [0.34.0-1.27.x86_64] < xorg-x11-Xvnc
+libpng16-16 [1.6.34-3.9.1.x86_64] < libgdk_pixbuf-2_0-0 < icewm-lite
+libpolkit0 [0.116-1.26.x86_64] < polkit
+libpopt0 [1.16-3.22.x86_64] < cryptsetup
+libprocps7 [3.3.15-7.10.2.x86_64] < procps
+libproxy1 [0.4.15-2.15.x86_64] < wget
+libpsl5 [0.20.1-1.20.x86_64] < wget
+libpwquality1 [1.4.0-1.18.x86_64] < cryptsetup
+libpython3_6m1_0 [3.6.10-3.47.2.x86_64] < python3-base < python3-websockify
+libqrencode4 [4.0.0-1.17.x86_64] < systemd
+libreadline7 [7.0-9.10.1.x86_64] < multipath-tools
+libreiserfscore0 [3.6.27-2.24.x86_64] < btrfsprogs
+libruby2_5-2_5 [2.5.5-4.3.1.x86_64] < ruby2.5-rubygem-byebug < 
skelcd-control-leanos
+libsasl2-3 [2.1.26-5.3.1.x86_64] < libldap-2_4-2 < gpg2
+libseccomp2 [2.4.1-3.3.1.x86_64] < systemd
+libselinux1 [2.8-6.35.x86_64] < psmisc
+libsemanage1 [2.8-4.35.x86_64] < shadow
+libsepol1 [2.8-4.37.x86_64] < libsemanage1 < shadow
+libsgutils2-1_43-2 [1.44~763+19.1ed0757-9.3.1.x86_64] < sg3_utils
+libsigc-2_0-0 [2.10.2-1.2.x86_64] < libzypp < libyui-ncurses-pkg11
+libsmartcols1 [2.33.1-4.5.1.x86_64] < util-linux
+libsnapper5 [0.8.9-1.20.x86_64] < snapper
+libsnappy1 [1.1.3-1.24.x86_64] < makedumpfile < kdump < yast2-kdump < 
skelcd-control-leanos
+libsolv-tools [0.7.11-1.13.x86_64]
+libsqlite3-0 [3.28.0-3.9.2.x86_64] < gpg2
+libssh4 [0.8.7-10.9.1.x86_64] < libcurl4 < libzypp < libyui-ncurses-pkg11
+libstdc++6 [9.2.1+r275327-1.3.7.x86_64] < icewm-lite
+libstorage-ng-lang [4.2.65-1.2.noarch]
+libstorage-ng-ruby [4.2.65-1.2.x86_64] < yast2-storage-ng
+libstorage-ng1 [4.2.65-1.2.x86_64] < libstorage-ng-ruby < yast2-storage-ng
+libsystemd0 [234-31.10.x86_64] < rpcbind
+libtasn1 [4.13-4.5.1.x86_64] < libtasn1-6 < p11-kit
+libtasn1-6 [4.13-4.5.1.x86_64] < p11-kit
+libthai-data [0.1.27-1.16.x86_64] < libthai0 < libpango-1_0-0 < pango-tools
+libthai0 [0.1.27-1.16.x86_64] < libpango-1_0-0 < pango-tools
+libtiff5 [4.0.9-5.27.5.x86_64] < libgdk_pixbuf-2_0-0 < icewm-lite
+libtirpc-netconfig [1.0.2-3.8.1.x86_64] < libtirpc3 < rpcbind
+libtirpc3 [1.0.2-3.8.1.x86_64] < rpcbind
+libts0 [1.13-1.18.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libudev1 [234-31.10.x86_64]
+libunistring2 [0.9.9-1.15.x86_64] < libgnutls30 < xorg-x11-Xvnc
+liburcu6 [0.10.0-2.20.x86_64] < multipath-tools
+libusb-1_0-0 [1.0.21-1.29.x86_64] < usbutils
+libutempter0 [1.1.6-3.42.x86_64] < xterm-bin
+libuuid1 [2.33.1-4.5.1.x86_64] < cryptsetup
+libverto1 [0.2.6-3.20.x86_64] < krb5
+libwacom-data [1.1-2.33.x86_64] < libwacom2 < libinput10 < xf86-input-libinput
+libwacom2 [1.1-2.33.x86_64] < libinput10 < xf86-input-libinput
+libwayland-client0 [1.18.0-1.2.x86_64] < Mesa-libEGL1
+libwayland-server0 [1.18.0-1.2.x86_64] < Mesa-libEGL1
+libwrap0 [7.6-1.433.x86_64] < rpcbind
+libx86emu3 [3.1-1.7.x86_64] < hwinfo
+libxcb-dri2-0 [1.13-3.3.1.x86_64] < Mesa-libGL1
+libxcb-dri3-0 [1.13-3.3.1.x86_64] < Mesa-libGL1
+libxcb-glx0 [1.13-3.3.1.x86_64] < Mesa-libGL1
+libxcb-icccm4 [0.4.1-1.24.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libxcb-image0 [0.4.0-1.23.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libxcb-keysyms1 [0.4.0-1.23.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libxcb-present0 [1.13-3.3.1.x86_64] < Mesa-libGL1
+libxcb-randr0 [1.13-3.3.1.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libxcb-render-util0 [0.3.9-1.23.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libxcb-render0 [1.13-3.3.1.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libxcb-shape0 [1.13-3.3.1.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libxcb-shm0 [1.13-3.3.1.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libxcb-sync1 [1.13-3.3.1.x86_64] < Mesa-libGL1
+libxcb-util1 [0.4.0-1.23.x86_64] < libxcb-image0 < libQt5Gui5 < 
libyui-qt-graph11
+libxcb-xfixes0 [1.13-3.3.1.x86_64] < Mesa-libEGL1
+libxcb-xinerama0 [1.13-3.3.1.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libxcb-xinput0 [1.13-3.3.1.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libxcb-xkb1 [1.13-3.3.1.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libxcb1 [1.13-3.3.1.x86_64] < Mesa-libGL1
+libxkbcommon-x11-0 [0.8.2-3.3.1.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libxkbcommon0 [0.8.2-3.3.1.x86_64] < libQt5Gui5 < libyui-qt-graph11
+libxkbfile1 [1.0.9-1.26.x86_64] < setxkbmap
+libxml2-2 [2.9.7-3.12.1.x86_64] < libsolv-tools
+libxshmfence1 [1.2-1.23.x86_64] < Mesa-libGL1
+libxslt-tools [1.1.32-3.3.1.x86_64] < autoyast2 < skelcd-control-leanos
+libxslt1 [1.1.32-3.3.1.x86_64] < libxslt-tools < autoyast2 < 
skelcd-control-leanos
+libxtables12 [1.8.3-1.20.x86_64] < iptables
+libyajl2 [2.1.0-2.12.x86_64] < xen-libs < kexec-tools < kdump < yast2-kdump < 
skelcd-control-leanos
+libyaml-0-2 [0.1.7-1.17.x86_64] < ruby2.5-stdlib < ruby2.5 < ruby
+libyui-ncurses-pkg11 [2.50.6-1.11.x86_64]
+libyui-ncurses11 [2.54.5-1.13.x86_64] < libyui-ncurses-pkg11
+libyui-qt-graph11 [2.46.0-1.37.x86_64]
+libyui-qt-pkg11 [2.47.3-1.13.x86_64]
+libyui-qt11 [2.52.2-1.11.x86_64] < libyui-qt-graph11
+libyui11 [3.9.3-1.5.x86_64] < libyui-ncurses-pkg11
+libz1 [1.2.11-3.9.1.x86_64] < openssh
+libzstd1 [1.4.4-1.11.x86_64] < rpm
+libzypp [17.23.0-1.4.x86_64] < libyui-ncurses-pkg11
+lklug-fonts [0.6-1.24.noarch]
+lsscsi [0.28-1.24.x86_64] < libstorage-ng1 < libstorage-ng-ruby < 
yast2-storage-ng
+ltrace [0.7.91-4.3.x86_64]
+lvm2 [2.03.05-3.26.x86_64]
+makedumpfile [1.6.7-1.6.x86_64] < kdump < yast2-kdump < skelcd-control-leanos
+mkfontdir [1.0.7-1.20.x86_64]
+mkfontscale [1.1.2-1.23.x86_64]
+multipath-tools [0.8.2+18.9ff73e7-1.49.x86_64]
+ncurses-utils [6.1-5.6.2.x86_64]
+net-tools [2.0+git20170221.479bb4a-3.11.x86_64] < SUSEConnect < 
yast2-registration < skelcd-control-leanos
+nfs-client [2.1.1-10.4.1.x86_64]
+noto-naskharabic-fonts [20170919-2.13.noarch]
+noto-sans-fonts [20170919-2.13.noarch]
+novnc [1.0.0-1.17.noarch]
+nscd [2.26-13.36.1.x86_64]
+ntfsprogs [2016.2.22-3.3.2.x86_64]
+open-iscsi [2.0.876-13.32.1.x86_64]
+open-lldp [1.0.1+56.cb81e95-1.27.x86_64] < fcoe-utils < yast2-fcoe-client < 
skelcd-control-leanos
+openslp [2.0.0-6.9.1.x86_64]
+openslp-server [2.0.0-6.9.1.x86_64]
+openssh [8.1p1-2.2.x86_64]
+openssh-fips [8.1p1-2.2.x86_64]
+openssl-1_1 [1.1.1d-6.3.x86_64] < xorg-x11-Xvnc
+p11-kit [0.23.2-4.8.3.x86_64]
+p11-kit-tools [0.23.2-4.8.3.x86_64]
+pam [1.3.0-6.9.2.x86_64]
+pam-modules [12.1-3.17.x86_64]
+pango-tools [1.43.0-1.33.x86_64]
+parted [3.2-11.3.1.x86_64]
+pciutils [3.5.6-1.18.x86_64]
+pciutils-ids [20190830-3.3.2.noarch]
+perl [5.26.1-7.9.1.x86_64]
+perl-Digest-SHA1 [2.13-1.27.x86_64] < yast2-users < skelcd-control-leanos
+perl-Parse-RecDescent [1.967015-1.22.x86_64] < perl-X500-DN < yast2-users < 
skelcd-control-leanos
+perl-X500-DN [0.29-1.22.x86_64] < yast2-users < skelcd-control-leanos
+perl-XML-Bare [0.53-1.28.x86_64]
+perl-XML-NamespaceSupport [1.12-1.24.noarch]
+perl-XML-Parser [2.44-1.443.x86_64] < perl-XML-SAX-Expat < perl-XML-Simple < 
yast2
+perl-XML-SAX [0.99-1.22.x86_64] < perl-XML-Simple < yast2
+perl-XML-SAX-Base [1.09-1.25.noarch] < perl-XML-SAX < perl-XML-Simple < yast2
+perl-XML-SAX-Expat [0.51-1.22.noarch] < perl-XML-Simple < yast2
+perl-XML-Simple [2.24-1.22.noarch] < yast2
+perl-base [5.26.1-7.9.1.x86_64]
+perl-gettext [1.07-1.442.x86_64]
+pigz [2.3.3-1.28.x86_64] < yast2-update < skelcd-control-leanos
+polkit [0.116-1.26.x86_64]
+procinfo [18-1.30.x86_64]
+procps [3.3.15-7.10.2.x86_64]
+psmisc [23.0-6.7.1.x86_64]
+python-rpm-macros [20200117.8e39013-3.8.1.noarch] < python3-base < 
python3-websockify
+python-websockify-common [0.8.0-7.14.noarch] < python3-websockify
+python3-base [3.6.10-3.47.2.x86_64] < python3-websockify
+python3-websockify [0.8.0-7.14.noarch]
+raleway-fonts [3.0-1.22.noarch]
+reiserfs [3.6.27-2.24.x86_64]
+rgb [1.0.6-1.22.x86_64]
+rpcbind [0.2.3-5.9.2.x86_64]
+rpm [4.14.1-17.10.x86_64]
+ruby [2.5-1.21.x86_64]
+ruby-common [2.1-3.15.noarch] < ruby2.5 < ruby
+ruby-solv [0.7.11-1.13.x86_64] < yast2-packager < skelcd-control-leanos
+ruby2.5 [2.5.5-4.3.1.x86_64] < ruby
+ruby2.5-rubygem-abstract_method [1.2.1-1.28.x86_64] < yast2
+ruby2.5-rubygem-byebug [9.1.0-1.28.x86_64] < skelcd-control-leanos
+ruby2.5-rubygem-cfa [1.0.2-1.13.x86_64] < yast2
+ruby2.5-rubygem-cfa_grub2 [2.0.0-1.35.x86_64] < yast2-bootloader < yast2-tune 
< skelcd-control-leanos
+ruby2.5-rubygem-cheetah [0.5.2-1.13.x86_64] < yast2
+ruby2.5-rubygem-fast_gettext [1.6.0-1.18.x86_64] < yast2-ruby-bindings < 
yast2-storage-ng
+ruby2.5-rubygem-gem2rpm [0.10.1-3.45.x86_64] < ruby-common < ruby2.5 < ruby
+ruby2.5-rubygem-ruby-augeas [0.5.0-1.31.x86_64] < ruby2.5-rubygem-cfa < yast2
+ruby2.5-rubygem-ruby-dbus [0.14.0-1.27.x86_64] < yast2-storage-ng
+ruby2.5-rubygem-simpleidn [0.0.9-1.17.x86_64] < yast2
+ruby2.5-stdlib [2.5.5-4.3.1.x86_64] < ruby2.5 < ruby
+sap-installation-wizard [4.1.16-3.6.1.x86_64]
+screen [4.6.2-3.14.x86_64]
+sed [4.4-2.11.x86_64]
+setxkbmap [1.3.1-1.24.x86_64]
+sg3_utils [1.44~763+19.1ed0757-9.3.1.x86_64]
+shadow [4.6-3.5.6.x86_64]
+skelcd-control-leanos [15.2.10-1.2.x86_64]
+skelcd-fallbackrepo-SLED [1.1-2.97.x86_64]
+skelcd-fallbackrepo-SLES [1.1-2.115.x86_64]
+skelcd-fallbackrepo-SLES_SAP [1.1-2.88.x86_64]
+skelcd-fallbackrepo-SLE_HPC [1.1-2.100.x86_64]
+skelcd-fallbackrepo-SLE_RT [1.1-2.100.x86_64]
+smartmontools [7.0-1.33.x86_64]
+snapper [0.8.9-1.20.x86_64]
+strace [5.3-1.26.x86_64]
+suse-module-tools [15.2.10-1.9.x86_64]
+sysconfig [0.85.3-3.3.1.x86_64] < yast2
+sysconfig-netconfig [0.85.3-3.3.1.x86_64] < wicked < wicked-service < 
sysconfig < yast2
+syslinux [4.04-8.14.x86_64]
+system-group-hardware [20170617-4.155.noarch] < util-linux
+system-user-nobody [20170617-4.155.noarch] < rpcbind
+system-user-root [20190513-3.3.1.noarch] < pam
+systemd [234-31.10.x86_64]
+systemd-presets-branding-SLE [15.1-18.10.noarch]
+systemd-presets-common-SUSE [15-6.10.noarch] < systemd-presets-branding-SLE
+systemd-sysvinit [234-31.10.x86_64]
+sysuser-shadow [2.0-2.151.noarch] < system-user-nobody < rpcbind
+sysvinit-tools [2.88+-1.26.x86_64]
+tar [1.30-3.3.2.x86_64] < yast2-installation
+terminfo-base [6.1-5.6.2.x86_64] < screen
+thai-fonts [0.6.1-2.39.noarch]
+thin-provisioning-tools [0.7.5-1.24.x86_64] < device-mapper
+timezone [2019c-3.23.1.x86_64]
+udftools [1.3-1.21.x86_64]
+unified-installer-release [15.2-1.28.noarch]
+usbutils [008-1.30.x86_64]
+util-linux [2.33.1-4.5.1.x86_64]
+util-linux-systemd [2.33.1-4.5.1.x86_64] < wicked < wicked-service < sysconfig 
< yast2
+vim [8.0.1568-5.3.1.x86_64]
+vim-data-common [8.0.1568-5.3.1.noarch] < vim
+wget [1.19.5-3.6.2.x86_64]
+wicked [0.6.62-1.2.x86_64] < wicked-service < sysconfig < yast2
+wicked-service [0.6.62-1.2.x86_64] < sysconfig < yast2
+xauth [1.0.10-1.24.x86_64]
+xbitmaps [1.1.1-1.20.noarch] < libXmu6 < xterm-bin
+xconsole [1.0.7-1.24.x86_64] < xdm
+xdm [1.1.11-13.6.1.x86_64]
+xdpyinfo [1.3.2-1.24.x86_64]
+xen-libs [4.13.0_08-1.2.x86_64] < kexec-tools < kdump < yast2-kdump < 
skelcd-control-leanos
+xf86-input-libinput [0.28.1-4.32.x86_64]
+xf86-input-wacom [0.34.2-3.3.4.x86_64]
+xf86-video-amdgpu [18.1.0-4.31.x86_64]
+xf86-video-fbdev [0.5.0-4.31.x86_64]
+xf86-video-intel [2.99.917+git8674.25c9a2fcc-5.19.x86_64]
+xf86-video-qxl [0.1.5-3.38.x86_64]
+xf86-video-vesa [2.4.0-3.31.x86_64]
+xfsdump [3.1.6-1.30.x86_64]
+xfsprogs [4.15.0-4.24.3.x86_64]
+xhost [1.0.7-1.29.x86_64]
+xinit [1.4.0-6.17.x86_64] < xorg-x11-Xvnc
+xkbcomp [1.4.1-1.9.x86_64]
+xkeyboard-config [2.23.1-3.6.1.noarch]
+xli [1.17+git20170726.0bb4fb4-1.26.x86_64] < xdm
+xmessage [1.0.4-1.25.x86_64] < xdm
+xmodmap [1.0.9-1.24.x86_64]
+xorg-x11-Xvnc [1.9.0-19.3.1.x86_64]
+xorg-x11-fonts [7.6-3.9.noarch]
+xorg-x11-fonts-core [7.6-3.9.noarch]
+xorg-x11-server [1.20.3-18.27.x86_64]
+xrandr [1.5.0-2.19.x86_64]
+xrefresh [1.0.5-1.23.x86_64]
+xset [1.2.3-2.17.x86_64]
+xsetroot [1.1.1-1.24.x86_64] < xdm
+xtables-plugins [1.8.3-1.20.x86_64] < iptables
+xterm-bin [330-2.22.x86_64]
+xz [5.2.3-4.3.1.x86_64]
+yast2 [4.2.67-1.7.x86_64]
+yast2-add-on [4.2.15-1.30.noarch] < skelcd-control-leanos
+yast2-bootloader [4.2.16-1.3.x86_64] < yast2-tune < skelcd-control-leanos
+yast2-buildtools [4.2.5-1.29.noarch]
+yast2-configuration-management [4.2.3-1.55.noarch] < skelcd-control-leanos
+yast2-core [4.1.0-5.18.x86_64] < yast2
+yast2-country [4.2.18-1.7.x86_64] < yast2-installation
+yast2-country-data [4.2.18-1.7.x86_64] < yast2-installation
+yast2-devtools [4.2.5-1.29.noarch]
+yast2-fcoe-client [4.2.2-1.7.noarch] < skelcd-control-leanos
+yast2-firewall [4.2.3-1.3.noarch] < skelcd-control-leanos
+yast2-hardware-detection [4.1.1-1.47.x86_64] < yast2
+yast2-installation [4.2.35-1.8.noarch]
+yast2-iscsi-client [4.2.4-1.31.noarch] < skelcd-control-leanos
+yast2-kdump [4.2.9-1.14.x86_64] < skelcd-control-leanos
+yast2-ldap [4.1.0-1.28.x86_64] < yast2-users < skelcd-control-leanos
+yast2-logs [4.2.67-1.7.x86_64] < yast2
+yast2-multipath [4.2.1-1.31.noarch] < skelcd-control-leanos
+yast2-network [4.2.57-1.3.noarch] < skelcd-control-leanos
+yast2-nfs-client [4.2.7-1.23.noarch] < skelcd-control-leanos
+yast2-nfs-common [4.2.4-1.25.noarch] < yast2-nfs-client < skelcd-control-leanos
+yast2-ntp-client [4.2.8-1.8.noarch] < skelcd-control-leanos
+yast2-packager [4.2.52-1.3.x86_64] < skelcd-control-leanos
+yast2-pam [4.2.4-1.34.noarch] < yast2-users < skelcd-control-leanos
+yast2-perl-bindings [4.1.0-1.18.x86_64] < yast2
+yast2-pkg-bindings [4.2.7-1.4.x86_64] < yast2-installation
+yast2-proxy [4.2.2-1.100.noarch] < skelcd-control-leanos
+yast2-rdp [4.2.1-1.109.noarch] < skelcd-control-leanos
+yast2-registration [4.2.35-1.6.noarch] < skelcd-control-leanos
+yast2-ruby-bindings [4.2.8-1.14.x86_64] < yast2-storage-ng
+yast2-schema [4.2.8-1.32.x86_64] < autoyast2 < skelcd-control-leanos
+yast2-security [4.2.11-1.7.noarch] < yast2-users < skelcd-control-leanos
+yast2-services-manager [4.2.5-1.93.noarch] < skelcd-control-leanos
+yast2-slp [4.1.1-1.100.x86_64] < skelcd-control-leanos
+yast2-storage-ng [4.2.90-1.7.x86_64]
+yast2-theme [4.2.8-1.22.noarch] < skelcd-control-leanos
+yast2-trans-stats [2.19.0-1.28.noarch] < skelcd-control-leanos
+yast2-transfer [4.1.0-1.28.x86_64] < yast2-packager < skelcd-control-leanos
+yast2-tune [4.2.2-1.52.x86_64] < skelcd-control-leanos
+yast2-update [4.2.17-1.5.x86_64] < skelcd-control-leanos
+yast2-users [4.2.9-1.19.x86_64] < skelcd-control-leanos
+yast2-vm [4.2.3-1.123.x86_64] < skelcd-control-leanos
+yast2-x11 [4.1.0-5.18.x86_64] < skelcd-control-leanos
+yast2-xml [4.1.1-1.17.x86_64] < yast2
+yast2-ycp-ui-bindings [4.2.9-1.13.x86_64] < yast2-storage-ng
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-4.2.37/test/inst_update_installer_test.rb 
new/yast2-installation-4.2.40/test/inst_update_installer_test.rb
--- old/yast2-installation-4.2.37/test/inst_update_installer_test.rb    
2020-03-13 11:43:00.000000000 +0100
+++ new/yast2-installation-4.2.40/test/inst_update_installer_test.rb    
2020-03-20 15:15:46.000000000 +0100
@@ -26,7 +26,7 @@
   let(:all_signed?) { true }
   let(:network_running) { true }
   let(:has_repos) { true }
-  let(:repo) { double("repo", repo_id: 42) }
+  let(:repo) { double("repo", repo_id: 42, packages: []) }
   let(:repos) { [repo] }
   let(:restarting) { false }
   let(:profile) { {} }
@@ -52,6 +52,7 @@
     allow(subject).to receive(:finish_packager)
     allow(subject).to receive(:fetch_profile).and_return(ay_profile)
     allow(subject).to receive(:process_profile)
+    allow(subject).to receive(:valid_repositories?).and_return(true)
     allow(finder).to receive(:add_installation_repo)
 
     # stub the Profile module to avoid dependency on autoyast2-installation
@@ -326,5 +327,23 @@
         expect(subject.update_installer).to eq(false)
       end
     end
+
+    context "when the repository contains old packages" do
+      it "does not update the installer" do
+        allow(manager).to receive(:add_repository).and_return(true)
+        # expect(subject).to receive(:valid_repositories?).and_return(false)
+        expect(manager).to_not receive(:apply_all)
+        allow(Yast::Report).to receive(:Error)
+        # remove the global mock
+        allow(subject).to receive(:valid_repositories?).and_call_original
+
+        downgraded_pkg = double
+        allow(Installation::InstsysPackages).to receive(:read).and_return([])
+        allow_any_instance_of(Installation::SelfupdateVerifier).to 
receive(:downgraded_packages)
+          .and_return([downgraded_pkg])
+
+        subject.update_installer
+      end
+    end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-4.2.37/test/instsys_packages_test.rb 
new/yast2-installation-4.2.40/test/instsys_packages_test.rb
--- old/yast2-installation-4.2.37/test/instsys_packages_test.rb 1970-01-01 
01:00:00.000000000 +0100
+++ new/yast2-installation-4.2.40/test/instsys_packages_test.rb 2020-03-20 
15:15:46.000000000 +0100
@@ -0,0 +1,37 @@
+#!/usr/bin/env rspec
+# 
------------------------------------------------------------------------------
+# Copyright (c) 2020 SUSE LLC, All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of version 2 of the GNU General Public License as published by the
+# Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 
details.
+# 
------------------------------------------------------------------------------
+
+require_relative "test_helper"
+
+require "installation/instsys_packages"
+
+describe Installation::InstsysPackages do
+
+  let(:test_file) { File.join(FIXTURES_DIR, "inst-sys", "packages.root") }
+
+  describe ".read" do
+    it "reads the packages from a file" do
+      pkgs = Installation::InstsysPackages.read(test_file)
+
+      expect(pkgs).to_not be_empty
+      expect(pkgs.first).to be_a(Y2Packager::Package)
+    end
+
+    it "reads the package versions" do
+      pkgs = Installation::InstsysPackages.read(test_file)
+      yast2 = pkgs.find { |p| p.name == "yast2" }
+
+      expect(yast2.version).to eq("4.2.67-1.7.x86_64")
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-4.2.37/test/selfupdate_verifier_test.rb 
new/yast2-installation-4.2.40/test/selfupdate_verifier_test.rb
--- old/yast2-installation-4.2.37/test/selfupdate_verifier_test.rb      
1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-installation-4.2.40/test/selfupdate_verifier_test.rb      
2020-03-20 15:15:46.000000000 +0100
@@ -0,0 +1,56 @@
+#!/usr/bin/env rspec
+# 
------------------------------------------------------------------------------
+# Copyright (c) 2020 SUSE LLC, All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of version 2 of the GNU General Public License as published by the
+# Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 
details.
+# 
------------------------------------------------------------------------------
+
+require_relative "test_helper"
+
+require "uri"
+require "installation/selfupdate_verifier"
+require "installation/update_repository"
+require "installation/instsys_packages"
+require "y2packager/resolvable"
+
+def create_package_resolvable(name, version)
+  Y2Packager::Resolvable.new("kind" => :package, "name" => name, "source" => 
nil,
+    "version" => version, "arch" => "x86_64", "deps" => [])
+end
+
+describe Installation::SelfupdateVerifier do
+  let(:test_file) { File.join(FIXTURES_DIR, "inst-sys", "packages.root") }
+  let(:repo) do
+    Installation::UpdateRepository.new(URI("http://example.com";))
+  end
+
+  # this one is downgraded
+  let(:downgraded_pkg) { create_package_resolvable("yast2", "4.1.7-1.2") }
+  # downgraded non-YaST package
+  let(:downgraded_nony2_pkg) { create_package_resolvable("rpm", "3.1.2-1.2") }
+  # this one is upgraded a bit
+  let(:upgraded_pkg) { create_package_resolvable("yast2-installation", 
"4.2.37-1.1") }
+
+  let(:instsys_packages) { Installation::InstsysPackages.read(test_file) }
+
+  subject { Installation::SelfupdateVerifier.new([repo], instsys_packages) }
+
+  before do
+    expect(repo).to receive(:packages).and_return(
+      [downgraded_pkg, upgraded_pkg, downgraded_nony2_pkg]
+    )
+  end
+
+  describe "#downgraded_packages" do
+    it "returns the downgraded packages" do
+      expect(subject.downgraded_packages).to eq([downgraded_pkg])
+    end
+  end
+
+end


Reply via email to