|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH OSSTEST] Arrange for core dumps to be placed in /var/core and collect them
On Mon, 2015-03-09 at 17:54 -0400, Don Slutz wrote:
>
> On 03/09/15 11:40, Ian Campbell wrote:
> > 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).
>
> I am not sure about debian, but for fedora the places are:
Thanks, these look broadly similar to Debian.
> /etc/security/limits.conf:
> * soft core unlimited
FYI "*" explicitly excludes root, at least on Debian, so a separate line
would be needed for root logins.
> /etc/profile:
> ulimit -S -c unlimited > /dev/null 2>&1
>
> /etc/sysctl.conf
> fs.suid_dumpable = 1
Not 100% sure if we would need this in the context of osstest.
> /etc/sysconfig/init:
> DAEMON_COREFILE_LIMIT='unlimited'
>
> Note: The last depends on:
> /etc/init.d/functions:
> ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0} >/dev/null 2>&1
I think this one is a Red Hat ism.
> Hope this helps.
It did, thanks.
> -Don Slutz
>
> >
> > I did debate making the presence of cores in /var/core fail the test
> > (somehow), but I decided that would be annoying for standalone mode or
> > shared host scenarios where the core files might be stale or related
> > to another job.
> >
> > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> > ---
> > Osstest/TestSupport.pm | 22 ++++++++++++++++++++++
> > ts-host-install | 9 +++++++++
> > ts-logs-capture | 2 ++
> > ts-xen-install | 19 ++-----------------
> > 4 files changed, 35 insertions(+), 17 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..b60abae 100755
> > --- a/ts-host-install
> > +++ b/ts-host-install
> > @@ -139,6 +139,15 @@ 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-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 5282f0a..da64a90 100755
> > --- a/ts-xen-install
> > +++ b/ts-xen-install
> > @@ -114,26 +114,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');
> >
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |