From ed58820d7669971762dd887dc117d922c23f2543 Mon Sep 17 00:00:00 2001 From: Lukas Nykryn Date: Thu, 25 Oct 2018 16:21:26 +0200 Subject: [PATCH 1/2] proc-cmdline: introduce PROC_CMDLINE_RD_STRICT Our current set of flags allows an option to be either use just in initrd or both in initrd and normal system. This new flag is intended to be used in the case where you want apply some settings just in initrd or just in normal system. --- src/basic/proc-cmdline.c | 3 ++- src/basic/proc-cmdline.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) 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); From a7dd6d04b07f58df5c0294743d76df0be0b4b928 Mon Sep 17 00:00:00 2001 From: Lukas Nykryn Date: Thu, 25 Oct 2018 16:34:00 +0200 Subject: [PATCH 2/2] debug-generator: introduce rd.* version of all options --- man/systemd-debug-generator.xml | 27 +++++++++++++++++++-------- src/debug-generator/debug-generator.c | 2 +- 2 files changed, 20 insertions(+), 9 deletions(-) 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/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");