All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH OSSTEST v2] Arrange for core dumps to be placed in /var/core and collect them
@ 2015-03-24 14:23 Ian Campbell
  2015-04-21 15:20 ` Ian Jackson
  0 siblings, 1 reply; 2+ messages in thread
From: Ian Campbell @ 2015-03-24 14:23 UTC (permalink / raw)
  To: ian.jackson; +Cc: Ian Campbell, xen-devel

Refactor the $kvp_replace helper in ts-xen-install into a generic
helper (which requires using ::EO and ::EI for namespacing) for use
with target_editfile and use it to edit /etc/sysctl.conf to set
kernel.core_pattern on boot.

Tested in standalone mode by installing and running a C program
containing "*(int *)0 = 1;" which, after running "ulimit -c unlimited"
produces the expected core file. ts-logs-capture when run in
standalone mode then picks them up.

I've not yet figured out how to make the desired rlimit take affect
for all processes (including e.g. daemons spawned on boot). Likely
this will involve some combination of pam_limits.so PAM module and
adding explicit ulimit calls to the initscripts which we care about
(primarily xencommons and libvirt initscripts).

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
v2: Add /var/core to ts-leak-check
---
 Osstest/TestSupport.pm | 22 ++++++++++++++++++++++
 ts-host-install        |  8 ++++++++
 ts-leak-check          |  2 +-
 ts-logs-capture        |  2 ++
 ts-xen-install         | 19 ++-----------------
 5 files changed, 35 insertions(+), 18 deletions(-)

diff --git a/Osstest/TestSupport.pm b/Osstest/TestSupport.pm
index 8754e22..ece2282 100644
--- a/Osstest/TestSupport.pm
+++ b/Osstest/TestSupport.pm
@@ -57,6 +57,7 @@ BEGIN {
                       target_put_guest_image target_editfile
                       target_editfile_cancel
                       target_editfile_root target_file_exists
+                      target_editfile_kvp_replace
                       target_run_apt
                       target_install_packages target_install_packages_norec
                       target_jobdir target_extract_jobdistpath_subdir
@@ -542,6 +543,27 @@ sub teditfileex {
 	if $install;
 }
 
+# Replace a Key=Value style line in a config file.
+#
+# To be used as 3rd argument to target_editfile(_root) as:
+#    target_editfile_root($ho, "/path/to/a/file",
+#			 sub { target_editfile_kvp_replace($key, $value) });
+sub target_editfile_kvp_replace ($$)
+{
+    my ($key,$value) = @_;
+    my $prnow;
+    $prnow= sub {
+	print ::EO "$key=$value\n" or die $!;
+	$prnow= sub { };
+    };
+    while (<::EI>) {
+	print ::EO or die $! unless m/^$key\b/;
+	$prnow->() if m/^#$key/;
+    }
+    print ::EO "\n" or die $!;
+    $prnow->();
+};
+
 sub target_editfile_root ($$$;$$) { teditfileex('root',@_); }
 sub target_editfile      ($$$;$$) { teditfileex('osstest',@_); }
     # my $code= pop @_;
diff --git a/ts-host-install b/ts-host-install
index 9656079..2e3e84b 100755
--- a/ts-host-install
+++ b/ts-host-install
@@ -139,6 +139,14 @@ END
 	});
     }
 
+    target_cmd_root($ho, 'mkdir -p /var/core');
+    target_editfile_root($ho, '/etc/sysctl.conf',
+	sub { target_editfile_kvp_replace(
+		  "kernel.core_pattern",
+		  # %p==pid,%e==executable name,%t==timestamp
+		  "/var/core/%t.%p.%e.core") });
+    target_cmd_root($ho, "sysctl --load /etc/sysctl.conf");
+
     target_cmd_root($ho, "update-rc.d osstest-confirm-booted start 99 2 .");
 
     logm('OK: install completed');
diff --git a/ts-leak-check b/ts-leak-check
index ec40435..fdade36 100755
--- a/ts-leak-check
+++ b/ts-leak-check
@@ -157,7 +157,7 @@ sub inventory () {
     inventory_domains();
     inventory_processes();
     inventory_xenstore();
-    inventory_files('/tmp /var/run /var/tmp /var/lib/xen');
+    inventory_files('/tmp /var/run /var/tmp /var/lib/xen /var/core');
 }
 
 if (!eval {
diff --git a/ts-logs-capture b/ts-logs-capture
index 453b03d..45b0a38 100755
--- a/ts-logs-capture
+++ b/ts-logs-capture
@@ -136,6 +136,8 @@ sub fetch_logs_host_guests () {
 
                   /home/osstest/osstest-confirm-booted.log
 
+                  /var/core/*.core
+
                   )];
     if (!try_fetch_logs($ho, $logs)) {
         logm("log fetching failed, trying hard host reboot...");
diff --git a/ts-xen-install b/ts-xen-install
index b3f4387..2db0b29 100755
--- a/ts-xen-install
+++ b/ts-xen-install
@@ -116,26 +116,11 @@ sub adjustconfig () {
     }
     die unless defined $trace_config_file;
 
-    my $kvp_replace = sub($$) {
-	my ($key,$value) = @_;
-        my $prnow;
-        $prnow= sub {
-            print EO "$key=$value\n" or die $!;
-            $prnow= sub { };
-        };
-        while (<EI>) {
-            print EO or die $! unless m/^$key\b/;
-            $prnow->() if m/^#$key/;
-        }
-        print EO "\n" or die $!;
-        $prnow->();
-    };
-
     target_editfile_root($ho, $trace_config_file,
-			 sub { $kvp_replace->("XENCONSOLED_TRACE", "guest") });
+	sub { target_editfile_kvp_replace("XENCONSOLED_TRACE", "guest") });
 
     target_editfile_root($ho, '/etc/libvirt/libvirtd.conf',
-			 sub { $kvp_replace->("log_level", "1") })
+		sub { target_editfile_kvp_replace("log_level", "1") })
 	if toolstack($ho)->{Name} eq "libvirt";
 
     target_cmd_root($ho, 'mkdir -p /var/log/xen/console');
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH OSSTEST v2] Arrange for core dumps to be placed in /var/core and collect them
  2015-03-24 14:23 [PATCH OSSTEST v2] Arrange for core dumps to be placed in /var/core and collect them Ian Campbell
@ 2015-04-21 15:20 ` Ian Jackson
  0 siblings, 0 replies; 2+ messages in thread
From: Ian Jackson @ 2015-04-21 15:20 UTC (permalink / raw)
  To: Ian Campbell; +Cc: xen-devel

Ian Campbell writes ("[PATCH OSSTEST v2] Arrange for core dumps to be placed in /var/core and collect them"):
> Refactor the $kvp_replace helper in ts-xen-install into a generic
> helper (which requires using ::EO and ::EI for namespacing) for use
> with target_editfile and use it to edit /etc/sysctl.conf to set
> kernel.core_pattern on boot.
> 
> Tested in standalone mode by installing and running a C program
> containing "*(int *)0 = 1;" which, after running "ulimit -c unlimited"
> produces the expected core file. ts-logs-capture when run in
> standalone mode then picks them up.
> 
> I've not yet figured out how to make the desired rlimit take affect
> for all processes (including e.g. daemons spawned on boot). Likely
> this will involve some combination of pam_limits.so PAM module and
> adding explicit ulimit calls to the initscripts which we care about
> (primarily xencommons and libvirt initscripts).
> 
> Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
> ---
> v2: Add /var/core to ts-leak-check

I'm going to push this and the two related patches, and the
$r{enable_xsm} one, RSN.

Ian.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-04-21 15:20 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-24 14:23 [PATCH OSSTEST v2] Arrange for core dumps to be placed in /var/core and collect them Ian Campbell
2015-04-21 15:20 ` Ian Jackson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.