[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 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:


/etc/security/limits.conf:
*  soft  core  unlimited

/etc/profile:
ulimit -S -c unlimited > /dev/null 2>&1

/etc/sysctl.conf
fs.suid_dumpable = 1

/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

Hope this helps.
   -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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.