diff --git a/man/systemd-debug-generator.xml b/man/systemd-debug-generator.xml
index d5cf4109b0..fa88e8ac01 100644
--- a/man/systemd-debug-generator.xml
+++ b/man/systemd-debug-generator.xml
@@ -33,27 +33,38 @@
that reads the kernel command line and understands three
options:
- If the option is specified
- and followed by a unit name, this unit is masked for the runtime,
- similar to the effect of
+ If the or
+ option is specified and followed by a unit name, this unit is
+ masked for the runtime, similar to the effect of
systemctl1's
mask command. This is useful to boot with
certain units removed from the initial boot transaction for
- debugging system startup. May be specified more than once.
+ debugging system startup. May be specified more than once.
+ is honored only by initial
+ RAM disk (initrd) while is
+ honored only in the main system.
- If the option is specified
+ If the or
+ option is specified
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
- additional units at boot. May be specified more than once.
+ additional units at boot. May be specified more than once.
+ is honored only by initial
+ RAM disk (initrd) while is
+ honored only in the main system.
- If the option is
+ If the or
+ option is
specified, the debug shell service
debug-shell.service is pulled into the boot
transaction. It will spawn a debug shell on tty9 during early
system startup. Note that the shell may also be turned on
persistently by enabling it with
systemctl1's
- enable command.
+ enable command.
+ is honored only by initial
+ RAM disk (initrd) while is
+ honored only in the main system.systemd-debug-generator implements
systemd.generator7.
diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c
index b386c705e1..647c61ce73 100644
--- a/src/basic/proc-cmdline.c
+++ b/src/basic/proc-cmdline.c
@@ -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)
key = q;
- }
+ } else if (in_initrd() && flags & PROC_CMDLINE_RD_STRICT)
+ continue;
value = strchr(key, '=');
if (value)
diff --git a/src/basic/proc-cmdline.h b/src/basic/proc-cmdline.h
index ffc45fddb9..bb8b18d3b1 100644
--- a/src/basic/proc-cmdline.h
+++ b/src/basic/proc-cmdline.h
@@ -8,6 +8,7 @@
enum {
PROC_CMDLINE_STRIP_RD_PREFIX = 1,
PROC_CMDLINE_VALUE_OPTIONAL = 2,
+ PROC_CMDLINE_RD_STRICT = 4
};
typedef int (*proc_cmdline_parse_t)(const char *key, const char *value, void *data);
diff --git a/src/debug-generator/debug-generator.c b/src/debug-generator/debug-generator.c
index dd6ab94fa2..800d31cebe 100644
--- a/src/debug-generator/debug-generator.c
+++ b/src/debug-generator/debug-generator.c
@@ -154,7 +154,7 @@ int main(int argc, char *argv[]) {
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)
log_warning_errno(r, "Failed to parse kernel command line, ignoring: %m");