Merge pull request #2944 from keszybz/man-coredump-sysctl

Man coredump sysctl
This commit is contained in:
Lennart Poettering 2016-04-06 10:49:52 +02:00
commit d4337c15d5
13 changed files with 142 additions and 40 deletions

View file

@ -1850,11 +1850,21 @@ MANPAGES += \
man/coredumpctl.1 \
man/systemd-coredump.8
MANPAGES_ALIAS += \
man/coredump.conf.d.5
man/coredump.conf.d.5 \
man/systemd-coredump.socket.8 \
man/systemd-coredump@.service.8
man/coredump.conf.d.5: man/coredump.conf.5
man/systemd-coredump.socket.8: man/systemd-coredump.8
man/systemd-coredump@.service.8: man/systemd-coredump.8
man/coredump.conf.d.html: man/coredump.conf.html
$(html-alias)
man/systemd-coredump.socket.html: man/systemd-coredump.html
$(html-alias)
man/systemd-coredump@.service.html: man/systemd-coredump.html
$(html-alias)
endif
if ENABLE_EFI

View file

@ -60,7 +60,14 @@
<para>These files configure the behavior of
<citerefentry><refentrytitle>systemd-coredump</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
a handler for core dumps invoked by the kernel.</para>
a handler for core dumps invoked by the kernel. Whether <command>systemd-coredump</command> is used
is determined by the kernel's
<varname>kernel.core_pattern</varname> <citerefentry project='man-pages'><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>
setting. See
<citerefentry><refentrytitle>systemd-coredump</refentrytitle><manvolnum>8</manvolnum></citerefentry>
and
<citerefentry project='man-pages'><refentrytitle>core</refentrytitle><manvolnum>5</manvolnum></citerefentry>
pages for the details.</para>
</refsect1>
<xi:include href="standard-conf.xml" xpointer="main-conf" />

View file

@ -45,11 +45,15 @@
<refnamediv>
<refname>systemd-coredump</refname>
<refname>systemd-coredump.socket</refname>
<refname>systemd-coredump@.service</refname>
<refpurpose>Log and store core dumps</refpurpose>
</refnamediv>
<refsynopsisdiv>
<para><filename>/usr/lib/systemd/systemd-coredump</filename></para>
<para><filename>systemd-coredump@.service</filename></para>
<para><filename>systemd-coredump.socket</filename></para>
</refsynopsisdiv>
<refsect1>
@ -60,12 +64,13 @@
signal and dumps core. For it to be used in this capacity, it must
be specified by the
<varname>kernel.core_pattern</varname> <citerefentry project='man-pages'><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>
setting. Systemd installs
<filename>/usr/lib/sysctl.d/50-coredump.conf</filename> which
configures <varname>kernel.core_pattern</varname> to invoke
<command>systemd-coredump</command>. This file may be masked or
overridden to use a different setting following normal
<citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> rules.</para>
setting. The syntax of this setting is explained in
<citerefentry project='man-pages'><refentrytitle>core</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
Systemd installs <filename>/usr/lib/sysctl.d/50-coredump.conf</filename> which configures
<varname>kernel.core_pattern</varname> to invoke <command>systemd-coredump</command>.
This file may be masked or overridden to use a different setting following normal
<citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
rules.</para>
<para>The behavior of a specific program upon reception of a
signal is governed by a few factors which are described in detail
@ -77,18 +82,35 @@
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
</para>
<para><command>systemd-coredump</command> will log the coredump
including a backtrace if possible, and store the core (contents of
process' memory contents) in an external file on disk in
<filename>/var/lib/systemd/coredump</filename>, or directly in
the journal. This behavior may be modified using
<citerefentry><refentrytitle>coredump.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
<para>The behaviour of <command>systemd-coredump</command> is configured through
<filename>/etc/systemd/coredump.conf</filename> and other configuration files. See
<citerefentry><refentrytitle>coredump.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details. By default, <command>systemd-coredump</command> will log the coredump including a
backtrace if possible, and store the core (contents of process' memory contents) in an external
file on disk in <filename>/var/lib/systemd/coredump</filename>.</para>
<para>Apart from the
<citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
log viewer,
<para>When the kernel invokes <command>systemd-coredump</command> to handle a coredump,
it will connect to the socket created by the <filename>systemd-coredump.socket</filename>
unit, which in turn will spawn a <filename>systemd-coredump@.service</filename> instance
to process the coredump. Hence <filename>systemd-coredump.socket</filename>
and <filename>systemd-coredump@.service</filename> are helper units which do the actual
processing of coredumps and are subject to normal service management.</para>
<para>The log entry and a backtrace are stored in the journal, and can be viewed with
<citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
<citerefentry><refentrytitle>coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
may be used to list and extract coredumps.</para>
may be used to list and extract coredumps or load them in
<citerefentry project='man-pages'><refentrytitle>gdb</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
</para>
<para>The coredump helper is invoked anew each time. Therefore, any configuration
changes will take effect on the invocation of <command>systemd-coredump</command>.
If the sysctl configuration is modified, it must be updated in the kernel before
it takes effect, see
<citerefentry><refentrytitle>systemd-sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>
and
<citerefentry project='man-pages'><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
</para>
</refsect1>
<refsect1>

View file

@ -62,24 +62,29 @@
<para><filename>systemd-sysctl.service</filename> is an early boot
service that configures
<citerefentry project='man-pages'><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>
kernel parameters.</para>
kernel parameters by invoking <command>/usr/lib/systemd/systemd-sysctl</command>.</para>
<para>If invoked with no arguments, it applies all directives from
all configuration files in
<citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
are searched for a matching file. If one or more filenames are passed on
the command line, only the directives in these files are applied.
</para>
<para>When invoked with no arguments, <command>/usr/lib/systemd/systemd-sysctl</command> applies
all directives from configuration files listed in
<citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
If one or more filenames are passed on the command line, only the directives in these files are
applied.</para>
<para>In addition, <option>--prefix=</option> option may be used to limit which sysctl
settings are applied.</para>
<para>See
<citerefentry project='man-pages'><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for information about the configuration of this service.</para>
for information about the configuration of sysctl settings. After sysctl configuration is
changed on disk, it must be written to the files in <filename>/proc/sys</filename> before it
takes effect. It is possible to update specific settings, or simply to reload all configuration,
see Examples below.</para>
</refsect1>
<refsect1><title>Options</title>
<variablelist>
<varlistentry id='path'>
<term><option>--path=</option></term>
<varlistentry id='prefix'>
<term><option>--prefix=</option></term>
<listitem>
<para>Only apply rules with the specified prefix.</para>
</listitem>
@ -91,6 +96,50 @@
</variablelist>
</refsect1>
<refsect1>
<title>Examples</title>
<example>
<title>Reset all sysctl settings</title>
<programlisting>systemctl restart systemd-sysctl</programlisting>
</example>
<example>
<title>View coredump handler configuration</title>
<programlisting># sysctl kernel.core_pattern
kernel.core_pattern = |/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t %P %I
</programlisting>
</example>
<example>
<title>Update coredump handler configuration</title>
<programlisting># /usr/lib/systemd/systemd-sysctl --prefix kernel.core_pattern</programlisting>
<para>This searches all the directories listed in
<citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for configuration files and writes <filename>/proc/sys/kernel/core_pattern</filename>.</para>
</example>
<example>
<title>Update coredump handler configuration according to a specific file</title>
<programlisting># /usr/lib/systemd/systemd-sysctl 50-coredump.conf</programlisting>
<para>This applies all the settings found in <filename>50-coredump.conf</filename>.
Either <filename>/etc/sysctl.d/50-coredump.conf</filename>, or
<filename>/run/sysctl.d/50-coredump.conf</filename>, or
<filename>/usr/lib/sysctl.d/50-coredump.conf</filename> will be used, in the order
of preference.</para>
</example>
<para>See
<citerefentry project='man-pages'><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>
for various ways to directly apply sysctl settings.</para>
</refsect1>
<refsect1>
<title>See Also</title>
<para>

View file

@ -224,7 +224,7 @@
</varlistentry>
<varlistentry>
<term><option>KillSignal=</option></term>
<term><varname>KillSignal=</varname></term>
<listitem><para>Specify the process signal to send to the
container's PID 1 when nspawn itself receives SIGTERM, in

View file

@ -71,7 +71,7 @@ static ssize_t try_copy_file_range(int fd_in, loff_t *off_in,
int copy_bytes(int fdf, int fdt, uint64_t max_bytes, bool try_reflink) {
bool try_cfr = true, try_sendfile = true, try_splice = true;
int r;
size_t m = SSIZE_MAX; /* that the maximum that sendfile and c_f_r accept */
size_t m = SSIZE_MAX; /* that is the maximum that sendfile and c_f_r accept */
assert(fdf >= 0);
assert(fdt >= 0);
@ -94,8 +94,8 @@ int copy_bytes(int fdf, int fdt, uint64_t max_bytes, bool try_reflink) {
if (max_bytes <= 0)
return 1; /* return > 0 if we hit the max_bytes limit */
if ((uint64_t) m > max_bytes)
m = (size_t) max_bytes;
if (m > max_bytes)
m = max_bytes;
}
/* First try copy_file_range(), unless we already tried */

View file

@ -90,6 +90,18 @@ static inline int safe_atoli(const char *s, long int *ret_u) {
}
#endif
#if SIZE_MAX == UINT_MAX
static inline int safe_atozu(const char *s, size_t *ret_u) {
assert_cc(sizeof(size_t) == sizeof(unsigned));
return safe_atou(s, ret_u);
}
#else
static inline int safe_atozu(const char *s, size_t *ret_u) {
assert_cc(sizeof(size_t) == sizeof(long unsigned));
return safe_atolu(s, ret_u);
}
#endif
int safe_atod(const char *s, double *ret_d);
int parse_fractional_part_u(const char **s, size_t digits, unsigned *res);

View file

@ -18,6 +18,8 @@
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
# The contents of this are an example to be copied into systemd.spec.
#
# Minimum rpm version supported: 4.13.0
%transfiletriggerin -P 900900 -p <lua> -- @systemunitdir@ /etc/systemd/system
-- This script will run after any package is initially installed or

View file

@ -664,7 +664,7 @@ static int save_core(sd_journal *j, int fd, char **path, bool *unlink_temp) {
#endif
} else {
if (r == -ENOENT)
log_error("Cannot retrieve coredump from journal nor disk.");
log_error("Cannot retrieve coredump from journal or disk.");
else
log_error_errno(r, "Failed to retrieve COREDUMP field: %m");
goto error;

View file

@ -112,7 +112,7 @@ int compress_blob_lz4(const void *src, uint64_t src_size,
if (src_size < 9)
return -ENOBUFS;
r = LZ4_compress_limitedOutput(src, dst + 8, src_size, (int) dst_alloc_size - 8);
r = LZ4_compress_limitedOutput(src, (char*)dst + 8, src_size, (int) dst_alloc_size - 8);
if (r <= 0)
return -ENOBUFS;
@ -176,7 +176,7 @@ int decompress_blob_xz(const void *src, uint64_t src_size,
return -ENOMEM;
s.avail_out = space - used;
s.next_out = *dst + used;
s.next_out = *(uint8_t**)dst + used;
}
*dst_size = space - s.avail_out;
@ -215,7 +215,7 @@ int decompress_blob_lz4(const void *src, uint64_t src_size,
} else
out = *dst;
r = LZ4_decompress_safe(src + 8, out, src_size - 8, size);
r = LZ4_decompress_safe((char*)src + 8, out, src_size - 8, size);
if (r < 0 || r != size)
return -EBADMSG;
@ -291,7 +291,7 @@ int decompress_startswith_xz(const void *src, uint64_t src_size,
if (!(greedy_realloc(buffer, buffer_size, *buffer_size * 2, 1)))
return -ENOMEM;
s.next_out = *buffer + *buffer_size - s.avail_out;
s.next_out = *(uint8_t**)buffer + *buffer_size - s.avail_out;
}
#else
@ -324,7 +324,7 @@ int decompress_startswith_lz4(const void *src, uint64_t src_size,
if (!(greedy_realloc(buffer, buffer_size, ALIGN_8(prefix_len + 1), 1)))
return -ENOMEM;
r = LZ4_decompress_safe_partial(src + 8, *buffer, src_size - 8,
r = LZ4_decompress_safe_partial((char*)src + 8, *buffer, src_size - 8,
prefix_len + 1, *buffer_size);
if (r >= 0)
size = (unsigned) r;

View file

@ -164,7 +164,7 @@ int main(int argc, char *argv[]) {
arg_duration = x * USEC_PER_SEC;
}
if (argc == 3)
(void) safe_atolu(argv[2], &arg_start);
(void) safe_atozu(argv[2], &arg_start);
else
arg_start = getpid();

View file

@ -1,2 +1,3 @@
/networkd-network-gperf.c
/networkd-netdev-gperf.c
/networkd-gperf.c

View file

@ -100,7 +100,6 @@ enum {
SD_LLDP_SYSTEM_CAPABILITIES_SVLAN| \
SD_LLDP_SYSTEM_CAPABILITIES_TPMR))
#define SD_LLDP_OUI_802_1 (uint8_t[]) { 0x00, 0x80, 0xc2 }
#define SD_LLDP_OUI_802_3 (uint8_t[]) { 0x00, 0x12, 0x0f }