Hello community, here is the log from the commit of package yast2-kdump for openSUSE:Factory checked in at 2017-04-12 17:08:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/yast2-kdump (Old) and /work/SRC/openSUSE:Factory/.yast2-kdump.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-kdump" Wed Apr 12 17:08:38 2017 rev:80 rq:483756 version:3.2.3 Changes: -------- --- /work/SRC/openSUSE:Factory/yast2-kdump/yast2-kdump.changes 2017-02-18 03:15:11.917405020 +0100 +++ /work/SRC/openSUSE:Factory/.yast2-kdump.new/yast2-kdump.changes 2017-04-12 17:08:39.799412935 +0200 @@ -1,0 +2,6 @@ +Wed Mar 29 14:25:05 UTC 2017 - [email protected] + +- fix dumping kernel with Xen hypervisor (bsc#1014136) +- 3.2.3 + +------------------------------------------------------------------- Old: ---- yast2-kdump-3.2.2.tar.bz2 New: ---- yast2-kdump-3.2.3.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ yast2-kdump.spec ++++++ --- /var/tmp/diff_new_pack.gX903x/_old 2017-04-12 17:08:40.575303102 +0200 +++ /var/tmp/diff_new_pack.gX903x/_new 2017-04-12 17:08:40.575303102 +0200 @@ -17,7 +17,7 @@ Name: yast2-kdump -Version: 3.2.2 +Version: 3.2.3 Release: 0 Summary: Configuration of kdump License: GPL-2.0 ++++++ yast2-kdump-3.2.2.tar.bz2 -> yast2-kdump-3.2.3.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-kdump-3.2.2/package/yast2-kdump.changes new/yast2-kdump-3.2.3/package/yast2-kdump.changes --- old/yast2-kdump-3.2.2/package/yast2-kdump.changes 2017-02-15 15:43:21.851607361 +0100 +++ new/yast2-kdump-3.2.3/package/yast2-kdump.changes 2017-03-30 10:40:36.685023378 +0200 @@ -1,4 +1,10 @@ ------------------------------------------------------------------- +Wed Mar 29 14:25:05 UTC 2017 - [email protected] + +- fix dumping kernel with Xen hypervisor (bsc#1014136) +- 3.2.3 + +------------------------------------------------------------------- Tue Feb 14 12:08:46 UTC 2017 - [email protected] - Explicitly create the kdump initrd (bsc#1022496). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-kdump-3.2.2/package/yast2-kdump.spec new/yast2-kdump-3.2.3/package/yast2-kdump.spec --- old/yast2-kdump-3.2.2/package/yast2-kdump.spec 2017-02-15 15:43:21.851607361 +0100 +++ new/yast2-kdump-3.2.3/package/yast2-kdump.spec 2017-03-30 10:40:36.685023378 +0200 @@ -17,7 +17,7 @@ Name: yast2-kdump -Version: 3.2.2 +Version: 3.2.3 Release: 0 Summary: Configuration of kdump License: GPL-2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-kdump-3.2.2/src/autoyast-rnc/kdump.rnc new/yast2-kdump-3.2.3/src/autoyast-rnc/kdump.rnc --- old/yast2-kdump-3.2.2/src/autoyast-rnc/kdump.rnc 2017-02-15 15:43:21.855607361 +0100 +++ new/yast2-kdump-3.2.3/src/autoyast-rnc/kdump.rnc 2017-03-30 10:40:36.685023378 +0200 @@ -6,15 +6,22 @@ kdump = element kdump { (kdump_crash_kernel_value | kdump_crash_kernel_list)? & + # parameter specify crashkernel value for xen hypervisor + (kdump_crash_xen_kernel_value | kdump_crash_xen_kernel_list)? & kdump_add_crash_kernel? & kdump_general? } kdump_crash_kernel_value = element crash_kernel { text } +kdump_crash_xen_kernel_value = element crash_xen_kernel { text } kdump_crash_kernel_list = element crash_kernel { LIST, kdump_crash_kernel_entry+ } +kdump_crash_xen_kernel_list = element crash_xen_kernel { + LIST, + kdump_crash_kernel_entry+ +} kdump_crash_kernel_entry = element listentry { text } kdump_add_crash_kernel = element add_crash_kernel { BOOLEAN } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-kdump-3.2.2/src/modules/Kdump.rb new/yast2-kdump-3.2.3/src/modules/Kdump.rb --- old/yast2-kdump-3.2.2/src/modules/Kdump.rb 2017-02-15 15:43:21.899607361 +0100 +++ new/yast2-kdump-3.2.3/src/modules/Kdump.rb 2017-03-30 10:40:36.717023378 +0200 @@ -107,6 +107,10 @@ # array values of kernel parameter @crashkernel_param_values = [] + # array values of kernel parameter for Xen hypervisor + # see @crashkernel_param_values for details + @crashkernel_xen_param_values = [] + # Boolean option indicates add kernel param # "crashkernel" # @@ -271,6 +275,7 @@ def ReadKdumpKernelParam result = Bootloader.kernel_param(:common, "crashkernel") result = Bootloader.kernel_param(:xen_guest, "crashkernel") if result == :missing + xen_result = Bootloader.kernel_param(:xen_host, "crashkernel") # result could be [String,Array,:missing,:present] # String - the value of the only occurrence # Array - the values of the multiple occurrences @@ -296,6 +301,14 @@ @allocated_memory = get_allocated_memory(@crashkernel_param_values) end + if xen_result == :missing || xen_result == :present + @crashkernel_xen_param_values = xen_result + else + # Let's make sure it's an array + # filtering nils and empty entries bnc#991140 + @crashkernel_xen_param_values = Array(xen_result).compact.reject(&:empty?) + end + true end @@ -464,14 +477,18 @@ if Mode.autoinst || Mode.autoupgrade # Use the value(s) read by import crash_values = @crashkernel_param_values + crash_xen_values = @crashkernel_xen_param_values # Always write the value skip_crash_values = false else # Calculate the param values based on @allocated_memory crash_values = crash_kernel_values + crash_xen_values = crash_xen_kernel_values remove_offsets!(crash_values) if Mode.update + remove_offsets!(crash_xen_values) if Mode.update # Skip writing of param if it's already set to the desired values skip_crash_values = @crashkernel_param && @crashkernel_param_values == crash_values + skip_crash_values &&= @crashkernel_xen_param_values && @crashkernel_xen_param_values == crash_xen_values end if skip_crash_values @@ -480,6 +497,7 @@ Service.Restart(KDUMP_SERVICE_NAME) if Service.active?(KDUMP_SERVICE_NAME) else Bootloader.modify_kernel_params(:common, :xen_guest, :recovery, "crashkernel" => crash_values) + Bootloader.modify_kernel_params(:xen_host, "crashkernel" => crash_xen_values) # do mass write in installation to speed up, so skip this one if !Stage.initial old_progress = Progress.set(false) @@ -487,9 +505,13 @@ Progress.set(old_progress) end Builtins.y2milestone( - "[kdump] (WriteKdumpBootParameter) adding chrashkernel options with values: %1", + "[kdump] (WriteKdumpBootParameter) adding crashkernel options with values: %1", crash_values ) + Builtins.y2milestone( + "[kdump] (WriteKdumpBootParameter) adding xen crashkernel options with values: %1", + crash_xen_values + ) reboot_needed = true Service.Enable(KDUMP_SERVICE_NAME) end @@ -497,7 +519,7 @@ # If we don't need the param but it is there if @crashkernel_param #delete crashkernel parameter from bootloader - Bootloader.modify_kernel_params(:common, :xen_guest, :recovery, "crashkernel" => :missing) + Bootloader.modify_kernel_params(:common, :xen_guest, :recovery, :xen_host, "crashkernel" => :missing) if !Stage.initial old_progress = Progress.set(false) Bootloader.Write @@ -931,8 +953,11 @@ def Export crash_kernel = crash_kernel_values crash_kernel = crash_kernel[0] if crash_kernel.size == 1 + crash_xen_kernel = crash_xen_kernel_values + crash_xen_kernel = crash_xen_kernel[0] if crash_xen_kernel.size == 1 out = { "crash_kernel" => crash_kernel, + "crash_xen_kernel" => crash_xen_kernel, "add_crash_kernel" => @add_crashkernel_param, "general" => filterExport(@KDUMP_SETTINGS) } @@ -966,6 +991,14 @@ # Make sure it's an array @crashkernel_param_values = Array(crash_kernel_values) end + + if Builtins.haskey(settings, "crash_xen_kernel") + # Make sure it's an array + @crashkernel_xen_param_values = Array(settings.fetch("crash_xen_kernel", "")) + else + @crashkernel_xen_param_values = Array(crash_xen_kernel_values) + end + if settings.has_key?("add_crash_kernel") @add_crashkernel_param = settings["add_crash_kernel"] else @@ -1133,6 +1166,31 @@ result end + + def crash_xen_kernel_values + # If the current values include "nasty" things and the user has not + # overriden the value of @crashkernel_list_ranges to autorize the + # modification. + # The old value (ensuring the Array format) will be returned. + if @crashkernel_list_ranges + return Array(@crashkernel_xen_param_values.dup) + end + + result = [] + high = @allocated_memory[:high] + low = @allocated_memory[:low] + sum = 0 + sum += low.to_i if low + sum += high.to_i if high + + if sum != 0 + result << "#{sum}M\\<4G" + end + + log.info "built xen crashkernel values are #{result}" + + result + end # Removes offsets from all the crashkernel values # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-kdump-3.2.2/test/kdump_test.rb new/yast2-kdump-3.2.3/test/kdump_test.rb --- old/yast2-kdump-3.2.2/test/kdump_test.rb 2017-02-15 15:43:21.939607361 +0100 +++ new/yast2-kdump-3.2.3/test/kdump_test.rb 2017-03-30 10:40:36.721023378 +0200 @@ -421,6 +421,7 @@ context "during autoinstallation" do let(:bootlader_kernel_params) { ["73M,high"] } + let(:bootlader_xen_kernel_params) { ["73M\\<4G"] } before do allow(Yast::Mode).to receive(:autoinst).and_return true @@ -430,12 +431,15 @@ end context "if kdump is requested and a value for crashkernel is supplied" do - let(:profile) { { "add_crash_kernel" => true, "crash_kernel" => "the_value" } } + let(:profile) { { "add_crash_kernel" => true, "crash_kernel" => "the_value", "crash_xen_kernel" => "xen_value" } } it "writes the crashkernel value to the bootloader and enables the service" do expect(Yast::Bootloader) .to receive(:modify_kernel_params) .with(:common, :xen_guest, :recovery, "crashkernel" => ["the_value"]) + expect(Yast::Bootloader) + .to receive(:modify_kernel_params) + .with(:xen_host, "crashkernel" => ["xen_value"]) expect(Yast::Bootloader).to receive(:Write) expect(Yast::Service).to receive(:Enable).with("kdump") @@ -444,12 +448,15 @@ end context "if kdump is requested but empty value for crashkernel is supplied" do - let(:profile) { { "add_crash_kernel" => true, "crash_kernel" => [] } } + let(:profile) { { "add_crash_kernel" => true, "crash_kernel" => [], "crash_xen_kernel" => [] } } it "writes an empty crashkernel in the bootloader and enables the service" do expect(Yast::Bootloader) .to receive(:modify_kernel_params) .with(:common, :xen_guest, :recovery, "crashkernel" => []) + expect(Yast::Bootloader) + .to receive(:modify_kernel_params) + .with(:xen_host, "crashkernel" => []) expect(Yast::Bootloader).to receive(:Write) expect(Yast::Service).to receive(:Enable).with("kdump") @@ -464,6 +471,9 @@ expect(Yast::Bootloader) .to receive(:modify_kernel_params) .with(:common, :xen_guest, :recovery, "crashkernel" => bootlader_kernel_params) + expect(Yast::Bootloader) + .to receive(:modify_kernel_params) + .with(:xen_host, "crashkernel" => bootlader_xen_kernel_params) expect(Yast::Bootloader).to receive(:Write) expect(Yast::Service).to receive(:Enable).with("kdump") @@ -486,12 +496,15 @@ end context "if kdump crashkernel contains an offset" do - let(:profile) { { "add_crash_kernel" => true, "crash_kernel" => "72M@128" } } + let(:profile) { { "add_crash_kernel" => true, "crash_kernel" => "72M@128", "crash_xen_kernel" => "72M@128"} } it "writes the crashkernel value without removing the offset" do expect(Yast::Bootloader) .to receive(:modify_kernel_params) .with(:common, :xen_guest, :recovery, "crashkernel" => ["72M@128"]) + expect(Yast::Bootloader) + .to receive(:modify_kernel_params) + .with(:xen_host, "crashkernel" => ["72M@128"]) expect(Yast::Bootloader).to receive(:Write) expect(Yast::Service).to receive(:Enable).with("kdump") @@ -502,6 +515,7 @@ context "during autoupgrade" do let(:bootlader_kernel_params) { ["75M,high"] } + let(:bootlader_xen_kernel_params) { ["75M\\<4G"] } before do allow(Yast::Mode).to receive(:autoupgrade).and_return true @@ -511,12 +525,15 @@ end context "if kdump is requested and a value for crashkernel is supplied" do - let(:profile) { { "add_crash_kernel" => true, "crash_kernel" => "the_value" } } + let(:profile) { { "add_crash_kernel" => true, "crash_kernel" => "the_value", "crash_xen_kernel" => "xen_value" } } it "writes the crashkernel value to the bootloader and enables the service" do expect(Yast::Bootloader) .to receive(:modify_kernel_params) .with(:common, :xen_guest, :recovery, "crashkernel" => ["the_value"]) + expect(Yast::Bootloader) + .to receive(:modify_kernel_params) + .with(:xen_host, "crashkernel" => ["xen_value"]) expect(Yast::Bootloader).to receive(:Write) expect(Yast::Service).to receive(:Enable).with("kdump") @@ -525,12 +542,15 @@ end context "if kdump is requested but an empty value for crashkernel is supplied" do - let(:profile) { { "add_crash_kernel" => true, "crash_kernel" => [] } } + let(:profile) { { "add_crash_kernel" => true, "crash_kernel" => [], "crash_xen_kernel" => [] } } it "writes an empty crashkernel in the bootloader and enables the service" do expect(Yast::Bootloader) .to receive(:modify_kernel_params) .with(:common, :xen_guest, :recovery, "crashkernel" => []) + expect(Yast::Bootloader) + .to receive(:modify_kernel_params) + .with(:xen_host, "crashkernel" => []) expect(Yast::Bootloader).to receive(:Write) expect(Yast::Service).to receive(:Enable).with("kdump") @@ -545,6 +565,9 @@ expect(Yast::Bootloader) .to receive(:modify_kernel_params) .with(:common, :xen_guest, :recovery, "crashkernel" => bootlader_kernel_params) + expect(Yast::Bootloader) + .to receive(:modify_kernel_params) + .with(:xen_host, "crashkernel" => bootlader_xen_kernel_params) expect(Yast::Bootloader).to receive(:Write) expect(Yast::Service).to receive(:Enable).with("kdump") @@ -567,12 +590,15 @@ end context "if kdump crashkernel contains an offset" do - let(:profile) { { "add_crash_kernel" => true, "crash_kernel" => "72M@128" } } + let(:profile) { { "add_crash_kernel" => true, "crash_kernel" => "72M@128", "crash_xen_kernel" => "72M@128" } } it "writes the crashkernel value without removing the offset" do expect(Yast::Bootloader) .to receive(:modify_kernel_params) .with(:common, :xen_guest, :recovery, "crashkernel" => ["72M@128"]) + expect(Yast::Bootloader) + .to receive(:modify_kernel_params) + .with(:xen_host, "crashkernel" => ["72M@128"]) expect(Yast::Bootloader).to receive(:Write) expect(Yast::Service).to receive(:Enable).with("kdump") @@ -586,16 +612,21 @@ allow(Yast::Mode).to receive(:normal).and_return true allow(Yast::Popup).to receive(:Message) allow(Yast::Bootloader).to receive(:kernel_param).and_return kernel_param + allow(Yast::Bootloader).to receive(:kernel_param).with(:xen_host, "crashkernel").and_return xen_kernel_param Yast::Kdump.ReadKdumpKernelParam end context "crashkernel is already configured in the bootloader" do let(:kernel_param) { "64M" } + let(:xen_kernel_param) { "64M\\<4G" } it "updates crashkernel and enables service if crashkernel is changed" do expect(Yast::Bootloader) .to receive(:modify_kernel_params) .with(:common, :xen_guest, :recovery, "crashkernel" => ["128M"]) + expect(Yast::Bootloader) + .to receive(:modify_kernel_params) + .with(:xen_host, "crashkernel" => ["128M\\<4G"]) expect(Yast::Bootloader).to receive(:Write) expect(Yast::Service).to receive(:Enable).with("kdump") @@ -617,7 +648,7 @@ expect(Yast::Bootloader) .to receive(:modify_kernel_params) - .with(:common, :xen_guest, :recovery, "crashkernel" => :missing) + .with(:common, :xen_guest, :recovery, :xen_host, "crashkernel" => :missing) expect(Yast::Bootloader).to receive(:Write) expect(Yast::Service).to receive(:Disable).with("kdump") @@ -628,11 +659,15 @@ context "crashkernel is currently not configured in the bootloader" do let(:kernel_param) { :missing } + let(:xen_kernel_param) { :missing } it "writes chrashkernel and enables the service if kdump was enabled" do expect(Yast::Bootloader) .to receive(:modify_kernel_params) .with(:common, :xen_guest, :recovery, "crashkernel" => ["64M"]) + expect(Yast::Bootloader) + .to receive(:modify_kernel_params) + .with(:xen_host, "crashkernel" => ["64M\\<4G"]) expect(Yast::Bootloader).to receive(:Write) expect(Yast::Service).to receive(:Enable).with("kdump") @@ -661,17 +696,22 @@ context "if the value includes an offset" do let(:kernel_param) { "64M@512" } + let(:xen_kernel_param) { "64M@512" } it "removes the range" do expect(Yast::Bootloader) .to receive(:modify_kernel_params) .with(:common, :xen_guest, :recovery, {"crashkernel" => ["64M"]}) + expect(Yast::Bootloader) + .to receive(:modify_kernel_params) + .with(:xen_host, "crashkernel" => ["64M\\<4G"]) Yast::Kdump.WriteKdumpBootParameter end end context "if the value includes several ranges and an offset" do let(:kernel_param) { "-512M:64M,512M-:128M@1024" } + let(:xen_kernel_param) { "-512M:64M,512M-:128M@1024" } it "does not try to write a new value" do expect(Yast::Bootloader).to_not receive(:modify_kernel_params) @@ -699,6 +739,9 @@ expect(Yast::Bootloader) .to receive(:modify_kernel_params) .with(:common, :xen_guest, :recovery, {"crashkernel" => ["64M"]}) + expect(Yast::Bootloader) + .to receive(:modify_kernel_params) + .with(:xen_host, "crashkernel" => ["64M\\<4G"]) Yast::Kdump.WriteKdumpBootParameter end end @@ -710,6 +753,9 @@ expect(Yast::Bootloader) .to receive(:modify_kernel_params) .with(:common, :xen_guest, :recovery, {"crashkernel" => ["-512M:64M,512M-:128M"]}) + expect(Yast::Bootloader) + .to receive(:modify_kernel_params) + .with(:xen_host, {"crashkernel" => ["-512M:64M,512M-:128M"]}) Yast::Kdump.WriteKdumpBootParameter end end
