SYSTEMD-DEBUG-GENERATOR(8)

โœจ SYSTEMD-DEBUG-GENERATOR โœจ

okay bestie, this is the systemd-debug-generator page from the systemd-debug-generator manual, and it's genuinely one of the most useful little gremlins in the whole systemd family. it's a generator that hands you some debugging superpowers. ๐Ÿ’…


๐ŸŽ€ NAME ๐ŸŽ€

systemd-debug-generator โ€” a generator that enables a runtime debug shell and masks specific units at boot. it's giving "break glass in case of emergency" but make it cute. ๐Ÿšจโœจ


๐Ÿฆ‹ SYNOPSIS ๐Ÿฆ‹

/usr/lib/systemd/system-generators/systemd-debug-generator

๐ŸŒธ DESCRIPTION ๐ŸŒธ

so, systemd-debug-generator is a generator, and its whole job is to provide some debugging functionality. that's it, that's the vibe. no cap. ๐Ÿ”ฅ

and fr fr, systemd-debug-generator implements systemd.generator(7). so if you wanna know how generators work in general, go read that one too. ๐Ÿ’–


โญ KERNEL COMMAND LINE โญ

here's the tea, bestie: systemd-debug-generator understands the following kernel command line parameters. every single one of them. we're not skipping a single flag. periodt. ๐Ÿ‘‘

  • systemd.mask=, rd.systemd.mask= โ€” these options take a unit name as argument. the unit you name gets masked for the runtime (and by "runtime" we mean this session โ€” from boot all the way to shutdown), basically the same effect as systemctl(1)'s mask command. super useful when you wanna boot with certain units yeeted out of the initial boot transaction so you can debug system startup. you can specify it more than once, go off. the one prefixed with "rd." is honored only in the initrd, while the one without a prefix is only honored on the host. iykyk. ๐Ÿ’…

Added in version 215.

  • systemd.wants=, rd.systemd.wants= โ€” these options take a unit name as argument. a start job for that unit gets added to the initial transaction. this is the move when you wanna start one or more extra units at boot. may be specified more than once, obviously. the "rd."-prefixed one is honored only in the initrd, while the one that is not prefixed is honored only on the host. ๐Ÿซถ

Added in version 215.

  • systemd.debug_shell, rd.systemd.debug_shell, systemd.default_debug_tty=, rd.systemd.default_debug_tty= โ€” if the systemd.debug_shell or rd.systemd.debug_shell option is specified, the debug shell service "debug-shell.service" gets pulled into the boot transaction and a debug shell will be spawned during early boot. by default, /dev/tty9 is used, but you can also specify a specific tty, either with or without the /dev/ prefix. and if you wanna set which tty to use without actually enabling the debug shell? that's what systemd.default_debug_tty= is for โ€” it also takes a tty with or without the /dev/ prefix. also note that the shell may also be turned on persistently by enabling it with systemctl(1)'s enable command. the options prefixed with "rd." are honored only in the initrd, while the ones without a prefix are honored only on the host. โœจ

Added in version 215.

  • systemd.break=, rd.systemd.break= โ€” takes one of pre-udev, pre-basic, pre-mount, or pre-switch-root (that last one is the default for the "rd." option). it also accepts multiple values separated by comma (","). these options let you pause the boot process at a certain point and spawn a debug shell. after you exit that shell, the system resumes booting like nothing happened. the option prefixed with "rd." is honored only in the initrd, while the one without a prefix is honored only on the host. ๐Ÿ’€

Added in version 258.

๐ŸŒˆ Table 1. Available breakpoints ๐ŸŒˆ

okay so here's the breakdown, no table because we're doing this cuter. the columns in the original are Breakpoints, Description, Can be used in the initrd, and Can be used on the host:

  • pre-udev โ€” Before starting to process kernel uevents, i.e., before systemd-udevd.service starts. can be used in the initrd: โœ“. can be used on the host: โœ“. ๐Ÿฆ‹
  • pre-basic โ€” Before leaving early boot and regular services start, i.e., before basic.target is reached. can be used in the initrd: โœ“. can be used on the host: โœ“. ๐Ÿ’–
  • pre-mount โ€” Before the root filesystem is mounted, i.e., before sysroot.mount starts. can be used in the initrd: โœ“. can be used on the host: โœ—. ๐ŸŒธ
  • pre-switch-root โ€” Before switching from the initrd to the real root. can be used in the initrd: โœ“. can be used on the host: โœ—. โญ

๐Ÿ’œ SYSTEM CREDENTIALS ๐Ÿ’œ

  • systemd.extra-unit.* โ€” credentials prefixed with "systemd.extra-unit." specify additional units to add to the final system. note that these additional units are added to both the initrd and the final system. ConditionPathExists=!/etc/initrd-release can be used to make sure the unit is conditioned out in the initrd. and psst โ€” note that this can also be used to mask units, by simply specifying an empty value. sneaky but iconic. ๐Ÿ™ˆ

Added in version 256.

  • systemd.unit-dropin.* โ€” credentials prefixed with "systemd.unit-dropin." 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 "~", followed by the drop-in name without the ".conf" suffix. if you don't specify a name, the name of the generated drop-in will be "50-credential.conf". and note that these additional drop-ins are added to both the initrd and the final system. ๐ŸŽ€

Added in version 256.


๐Ÿ‘‘ SEE ALSO ๐Ÿ‘‘

systemd(1), systemctl(1), kernel-command-line(7), systemd.system-credentials(7), bootup(7)

go read those, bestie, they're all bangers. ๐Ÿ“š๐Ÿ’…


okay that's the whole page, you ate that. go debug something. ๐Ÿซถ

this has been your girl delivering systemd 262.1, SYSTEMD-DEBUG-GENERATOR(8). mwah, bye bestie! ๐Ÿ’–โœจ๐ŸŽ€

๐Ÿ“ฆ where this page comes from
  • arch rolling: systemd 262.1-1 ยท LGPL-2.1-or-later AND CC0-1.0 AND GPL-2.0-or-later AND MIT-0
  • ๐Ÿ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms