<?xml version="1.0"?>
<!--*-nxml-*-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % entities SYSTEM "custom-entities.ent" >
%entities;
]>
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
<refentry id="systemd-debug-generator" xmlns:xi="http://www.w3.org/2001/XInclude">

  <refentryinfo>
    <title>systemd-debug-generator</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>systemd-debug-generator</refentrytitle>
    <manvolnum>8</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>systemd-debug-generator</refname>
    <refpurpose>Generator for enabling a runtime debug shell and
    masking specific units at boot</refpurpose>
  </refnamediv>

  <refsynopsisdiv>
    <para><filename>/usr/lib/systemd/system-generators/systemd-debug-generator</filename></para>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><filename>systemd-debug-generator</filename> is a generator
    that reads the kernel command line and understands three
    options:</para>

    <para>If the <option>systemd.mask=</option> or <option>rd.systemd.mask=</option>
    option is specified and followed by a unit name, this unit is
    masked for the runtime (i.e. for this session — from boot to shutdown), similarly to the effect of
    <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
    <command>mask</command> 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.
    <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> or
    <option>rd.systemd.wants=</option> 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.
    <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> or <option>rd.systemd.debug_shell</option> option is
    specified, the debug shell service <literal>debug-shell.service</literal> is pulled into the boot
    transaction and a debug shell will be spawned during early boot. By default,
    <filename>&DEBUGTTY;</filename> is used, but a specific tty can also be specified, either with or without
    the <filename>/dev/</filename> prefix. To set the tty to use without enabling the debug shell, the
    <option>systemd.default_debug_tty=</option> option can be used which also takes a tty with or without the
    <filename>/dev/</filename> prefix. Note that the shell may also be turned on persistently by enabling it
    with <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
    <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
    <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
  </refsect1>

  <refsect1>
    <title>System Credentials</title>

    <variablelist class='system-credentials'>
      <varlistentry>
        <term><varname>systemd.extra-unit.*</varname></term>

        <listitem><para>Credentials prefixed with <literal>systemd.extra-unit.</literal> specify additional
        units to add to the final system. Note that these additional units are added to both the initrd and
        the final system. <varname>ConditionPathExists=!/etc/initrd-release</varname> can be used to make
        sure the unit is conditioned out in the initrd. Note that this can also be used to mask units, by
        simply specifying an empty value.</para>

        <xi:include href="version-info.xml" xpointer="v256"/></listitem>
      </varlistentry>

      <varlistentry>
        <term><varname>systemd.unit-dropin.*</varname></term>

        <listitem><para>Credentials prefixed with <literal>systemd.unit-dropin.</literal> add drop-ins for
        the corresponding units in the final system. Each credential must be suffixed with the full unit name
        including the unit extension. Its contents must be a valid unit drop-in file. Optionally, the unit
        name may be followed with <literal>~</literal>, followed by the drop-in name without the
        <literal>.conf</literal> suffix. If not specified, the name of the generated drop-in will be
        <literal>50-credential.conf</literal>. Note that these additional drop-ins are added to both the
        initrd and the final system.</para>

        <xi:include href="version-info.xml" xpointer="v256"/></listitem>
      </varlistentry>
    </variablelist>
  </refsect1>

  <refsect1>
    <title>See Also</title>
    <para><simplelist type="inline">
      <member><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></member>
      <member><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></member>
      <member><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry></member>
    </simplelist></para>
  </refsect1>

</refentry>
