Class: Installation::SelfupdateVerifier
- Inherits:
-
Object
- Object
- Installation::SelfupdateVerifier
- Includes:
- Yast::Logger
- Defined in:
- src/lib/installation/selfupdate_verifier.rb
Overview
This class does some self-update repository sanity checks to avoid applying a wrong self update repository (specified by user).
Constant Summary collapse
- VERIFIED_PACKAGES =
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.
[ "autoyast2-installation", "yast2", "yast2-installation", "yast2-packager", "yast2-pkg-bindings", "yast2-registration", "yast2-storage-ng", "yast2-update" ].freeze
Instance Method Summary collapse
-
#downgraded_packages ⇒ Array<Y2Packager::Resolvable>
check for downgraded packages, e.g.
-
#initialize(repositories, instsys_packages) ⇒ SelfupdateVerifier
constructor
Constructor.
Constructor Details
#initialize(repositories, instsys_packages) ⇒ SelfupdateVerifier
Constructor
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'src/lib/installation/selfupdate_verifier.rb', line 49 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 |
Instance Method Details
#downgraded_packages ⇒ Array<Y2Packager::Resolvable>
check for downgraded packages, e.g. using the SP1 updates in the SP2 installer
81 82 83 84 85 86 87 88 89 |
# File 'src/lib/installation/selfupdate_verifier.rb', line 81 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 |