mirror of
https://github.com/systemd/systemd
synced 2024-10-14 12:04:49 +00:00
Add systemd.default_debug_tty=
Let's allow configuring the debug tty independently of enabling/disabling the debug shell. This allows mkosi to configure the correct tty while leaving enabling/disabling the debug tty to the user.
This commit is contained in:
parent
c078f4af6b
commit
7bf52f5d1c
|
@ -86,6 +86,7 @@
|
||||||
<term><varname>systemd.mask=</varname></term>
|
<term><varname>systemd.mask=</varname></term>
|
||||||
<term><varname>systemd.wants=</varname></term>
|
<term><varname>systemd.wants=</varname></term>
|
||||||
<term><varname>systemd.debug_shell</varname></term>
|
<term><varname>systemd.debug_shell</varname></term>
|
||||||
|
<term><varname>systemd.default_debug_tty=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Additional parameters understood by
|
<para>Additional parameters understood by
|
||||||
<citerefentry><refentrytitle>systemd-debug-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
|
<citerefentry><refentrytitle>systemd-debug-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
|
||||||
|
|
|
@ -55,19 +55,16 @@
|
||||||
RAM disk (initrd) while <option>systemd.wants=</option> is
|
RAM disk (initrd) while <option>systemd.wants=</option> is
|
||||||
honored only in the main system.</para>
|
honored only in the main system.</para>
|
||||||
|
|
||||||
<para>If the <option>systemd.debug_shell</option> or
|
<para>If the <option>systemd.debug_shell</option> or <option>rd.systemd.debug_shell</option> option is
|
||||||
<option>rd.systemd.debug_shell</option> option is
|
specified, the debug shell service <literal>debug-shell.service</literal> is pulled into the boot
|
||||||
specified, the debug shell service
|
transaction and a debug shell will be spawned during early boot. By default,
|
||||||
<literal>debug-shell.service</literal> is pulled into the boot
|
<filename>&DEBUGTTY;</filename> is used, but a specific tty can also be specified, either with or without
|
||||||
transaction and a debug shell will be spawned during early boot.
|
the <filename>/dev/</filename> prefix. To set the tty to use without enabling the debug shell, the
|
||||||
By default, <filename>&DEBUGTTY;</filename> is used, but a specific tty can also be set,
|
<option>systemd.default_debug_tty=</option> option can be used which also takes a tty with or without the
|
||||||
either with or without the <filename>/dev/</filename> prefix.
|
<filename>/dev/</filename> prefix. Note that the shell may also be turned on persistently by enabling it
|
||||||
Note that the shell may also be turned on persistently by enabling it with
|
with <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
|
||||||
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
|
<command>enable</command> command. <option>rd.systemd.debug_shell=</option> is honored only by initial
|
||||||
<command>enable</command> command.
|
RAM disk (initrd) while <option>systemd.debug_shell</option> is honored only in the main system.</para>
|
||||||
<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>
|
||||||
|
|
|
@ -20,12 +20,15 @@ static const char *arg_dest = NULL;
|
||||||
static char *arg_default_unit = NULL;
|
static char *arg_default_unit = NULL;
|
||||||
static char **arg_mask = NULL;
|
static char **arg_mask = NULL;
|
||||||
static char **arg_wants = NULL;
|
static char **arg_wants = NULL;
|
||||||
static char *arg_debug_shell = NULL;
|
static bool arg_debug_shell = false;
|
||||||
|
static char *arg_debug_tty = NULL;
|
||||||
|
static char *arg_default_debug_tty = NULL;
|
||||||
|
|
||||||
STATIC_DESTRUCTOR_REGISTER(arg_default_unit, freep);
|
STATIC_DESTRUCTOR_REGISTER(arg_default_unit, freep);
|
||||||
STATIC_DESTRUCTOR_REGISTER(arg_mask, strv_freep);
|
STATIC_DESTRUCTOR_REGISTER(arg_mask, strv_freep);
|
||||||
STATIC_DESTRUCTOR_REGISTER(arg_wants, strv_freep);
|
STATIC_DESTRUCTOR_REGISTER(arg_wants, strv_freep);
|
||||||
STATIC_DESTRUCTOR_REGISTER(arg_debug_shell, freep);
|
STATIC_DESTRUCTOR_REGISTER(arg_debug_tty, freep);
|
||||||
|
STATIC_DESTRUCTOR_REGISTER(arg_default_debug_tty, freep);
|
||||||
|
|
||||||
static int parse_proc_cmdline_item(const char *key, const char *value, void *data) {
|
static int parse_proc_cmdline_item(const char *key, const char *value, void *data) {
|
||||||
int r;
|
int r;
|
||||||
|
@ -61,15 +64,18 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
|
||||||
} else if (proc_cmdline_key_streq(key, "systemd.debug_shell")) {
|
} else if (proc_cmdline_key_streq(key, "systemd.debug_shell")) {
|
||||||
const char *t = NULL;
|
|
||||||
|
|
||||||
r = value ? parse_boolean(value) : 1;
|
r = value ? parse_boolean(value) : 1;
|
||||||
if (r < 0)
|
arg_debug_shell = r != 0;
|
||||||
t = skip_dev_prefix(value);
|
if (r >= 0)
|
||||||
else if (r > 0)
|
return 0;
|
||||||
t = skip_dev_prefix(DEBUGTTY);
|
|
||||||
|
|
||||||
return free_and_strdup_warn(&arg_debug_shell, t);
|
return free_and_strdup_warn(&arg_debug_tty, skip_dev_prefix(value));
|
||||||
|
|
||||||
|
} else if (proc_cmdline_key_streq(key, "systemd.default_debug_tty")) {
|
||||||
|
if (proc_cmdline_value_missing(key, value))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return free_and_strdup_warn(&arg_default_debug_tty, skip_dev_prefix(value));
|
||||||
|
|
||||||
} else if (streq(key, "systemd.unit")) {
|
} else if (streq(key, "systemd.unit")) {
|
||||||
|
|
||||||
|
@ -136,9 +142,10 @@ static int generate_wants_symlinks(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void install_debug_shell_dropin(const char *dir) {
|
static void install_debug_shell_dropin(const char *dir) {
|
||||||
|
const char *tty = arg_debug_tty ?: arg_default_debug_tty;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (streq(arg_debug_shell, skip_dev_prefix(DEBUGTTY)))
|
if (!tty || path_equal(tty, skip_dev_prefix(DEBUGTTY)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
r = write_drop_in_format(dir, "debug-shell.service", 50, "tty",
|
r = write_drop_in_format(dir, "debug-shell.service", 50, "tty",
|
||||||
|
@ -147,7 +154,7 @@ static void install_debug_shell_dropin(const char *dir) {
|
||||||
"ConditionPathExists=\n"
|
"ConditionPathExists=\n"
|
||||||
"[Service]\n"
|
"[Service]\n"
|
||||||
"TTYPath=/dev/%s",
|
"TTYPath=/dev/%s",
|
||||||
arg_debug_shell, arg_debug_shell);
|
tty, tty);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_warning_errno(r, "Failed to write drop-in for debug-shell.service, ignoring: %m");
|
log_warning_errno(r, "Failed to write drop-in for debug-shell.service, ignoring: %m");
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,6 +62,13 @@ SYSTEMD_PROC_CMDLINE="$CMDLINE" run_and_list "$GENERATOR_BIN" "$OUT_DIR"
|
||||||
link_endswith "$OUT_DIR/early/default.target.wants/debug-shell.service" /lib/systemd/system/debug-shell.service
|
link_endswith "$OUT_DIR/early/default.target.wants/debug-shell.service" /lib/systemd/system/debug-shell.service
|
||||||
grep -F "/dev/tty666" "$OUT_DIR/early/debug-shell.service.d/50-tty.conf"
|
grep -F "/dev/tty666" "$OUT_DIR/early/debug-shell.service.d/50-tty.conf"
|
||||||
|
|
||||||
|
# Same thing, but with custom tty using systemd.default_debug_tty
|
||||||
|
: "debug-shell: regular + systemd.default_debug_tty=/dev/tty666 systemd.debug_shell=yes"
|
||||||
|
CMDLINE="$CMDLINE systemd.default_debug_tty=/dev/tty666 systemd.debug_shell=yes"
|
||||||
|
SYSTEMD_PROC_CMDLINE="$CMDLINE" run_and_list "$GENERATOR_BIN" "$OUT_DIR"
|
||||||
|
link_endswith "$OUT_DIR/early/default.target.wants/debug-shell.service" /lib/systemd/system/debug-shell.service
|
||||||
|
grep -F "/dev/tty666" "$OUT_DIR/early/debug-shell.service.d/50-tty.conf"
|
||||||
|
|
||||||
# Now override the default target via systemd.unit=
|
# Now override the default target via systemd.unit=
|
||||||
: "debug-shell: regular + systemd.unit="
|
: "debug-shell: regular + systemd.unit="
|
||||||
CMDLINE="$CMDLINE systemd.unit=my-fancy.target"
|
CMDLINE="$CMDLINE systemd.unit=my-fancy.target"
|
||||||
|
|
Loading…
Reference in a new issue