Merge pull request #10522 from lnykryn/initrd_debug
Let's make systemd-debug-generator usable also in initrd
This commit is contained in:
commit
f4478c98fa
|
@ -33,27 +33,38 @@
|
||||||
that reads the kernel command line and understands three
|
that reads the kernel command line and understands three
|
||||||
options:</para>
|
options:</para>
|
||||||
|
|
||||||
<para>If the <option>systemd.mask=</option> option is specified
|
<para>If the <option>systemd.mask=</option> or <option>rd.systemd.mask=</option>
|
||||||
and followed by a unit name, this unit is masked for the runtime,
|
option is specified and followed by a unit name, this unit is
|
||||||
similar to the effect of
|
masked for the runtime, similar to the effect of
|
||||||
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
|
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
|
||||||
<command>mask</command> command. This is useful to boot with
|
<command>mask</command> command. This is useful to boot with
|
||||||
certain units removed from the initial boot transaction for
|
certain units removed from the initial boot transaction for
|
||||||
debugging system startup. May be specified more than once.</para>
|
debugging system startup. May be specified more than once.
|
||||||
|
<option>rd.systemd.mask=</option> is honored only by initial
|
||||||
|
RAM disk (initrd) while <option>systemd.mask=</option> is
|
||||||
|
honored only in the main system.</para>
|
||||||
|
|
||||||
<para>If the <option>systemd.wants=</option> option is specified
|
<para>If the <option>systemd.wants=</option> or
|
||||||
|
<option>rd.systemd.wants=</option> option is specified
|
||||||
and followed by a unit name, a start job for this unit is added to
|
and followed by a unit name, a start job for this unit is added to
|
||||||
the initial transaction. This is useful to start one or more
|
the initial transaction. This is useful to start one or more
|
||||||
additional units at boot. May be specified more than once.</para>
|
additional units at boot. May be specified more than once.
|
||||||
|
<option>rd.systemd.wants=</option> is honored only by initial
|
||||||
|
RAM disk (initrd) while <option>systemd.wants=</option> is
|
||||||
|
honored only in the main system.</para>
|
||||||
|
|
||||||
<para>If the <option>systemd.debug_shell</option> option is
|
<para>If the <option>systemd.debug_shell</option> or
|
||||||
|
<option>rd.systemd.debug_shell</option> option is
|
||||||
specified, the debug shell service
|
specified, the debug shell service
|
||||||
<literal>debug-shell.service</literal> is pulled into the boot
|
<literal>debug-shell.service</literal> is pulled into the boot
|
||||||
transaction. It will spawn a debug shell on tty9 during early
|
transaction. It will spawn a debug shell on tty9 during early
|
||||||
system startup. Note that the shell may also be turned on
|
system startup. Note that the shell may also be turned on
|
||||||
persistently by enabling it with
|
persistently by enabling it with
|
||||||
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
|
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
|
||||||
<command>enable</command> command.</para>
|
<command>enable</command> command.
|
||||||
|
<option>rd.systemd.debug_shell=</option> is honored only by initial
|
||||||
|
RAM disk (initrd) while <option>systemd.debug_shell</option> is
|
||||||
|
honored only in the main system.</para>
|
||||||
|
|
||||||
<para><filename>systemd-debug-generator</filename> implements
|
<para><filename>systemd-debug-generator</filename> implements
|
||||||
<citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
|
<citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
|
||||||
|
|
|
@ -66,7 +66,8 @@ int proc_cmdline_parse_given(const char *line, proc_cmdline_parse_t parse_item,
|
||||||
|
|
||||||
if (flags & PROC_CMDLINE_STRIP_RD_PREFIX)
|
if (flags & PROC_CMDLINE_STRIP_RD_PREFIX)
|
||||||
key = q;
|
key = q;
|
||||||
}
|
} else if (in_initrd() && flags & PROC_CMDLINE_RD_STRICT)
|
||||||
|
continue;
|
||||||
|
|
||||||
value = strchr(key, '=');
|
value = strchr(key, '=');
|
||||||
if (value)
|
if (value)
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
enum {
|
enum {
|
||||||
PROC_CMDLINE_STRIP_RD_PREFIX = 1,
|
PROC_CMDLINE_STRIP_RD_PREFIX = 1,
|
||||||
PROC_CMDLINE_VALUE_OPTIONAL = 2,
|
PROC_CMDLINE_VALUE_OPTIONAL = 2,
|
||||||
|
PROC_CMDLINE_RD_STRICT = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef int (*proc_cmdline_parse_t)(const char *key, const char *value, void *data);
|
typedef int (*proc_cmdline_parse_t)(const char *key, const char *value, void *data);
|
||||||
|
|
|
@ -154,7 +154,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
umask(0022);
|
umask(0022);
|
||||||
|
|
||||||
r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, 0);
|
r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, PROC_CMDLINE_RD_STRICT | PROC_CMDLINE_STRIP_RD_PREFIX);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_warning_errno(r, "Failed to parse kernel command line, ignoring: %m");
|
log_warning_errno(r, "Failed to parse kernel command line, ignoring: %m");
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue