From 80efdacd08a9925395ba756d8137e65638449a67 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 8 Feb 2018 16:33:28 +0100 Subject: [PATCH] man: make Notes section in systemd.geneator(5) toplevel This is mostly a indentation change and rewrapping. --- man/systemd.generator.xml | 267 +++++++++++++++++++++------------------------- 1 file changed, 120 insertions(+), 147 deletions(-) diff --git a/man/systemd.generator.xml b/man/systemd.generator.xml index a41e43d..60ca0ce 100644 --- a/man/systemd.generator.xml +++ b/man/systemd.generator.xml @@ -170,135 +170,112 @@ the vendor or user/administrator take precedence. + + + + Notes about writing generators + + + + All generators are executed in parallel. That means all executables are + started at the very same time and need to be able to cope with this + parallelism. + + + + + Generators are run very early at boot and cannot rely on any external + services. They may not talk to any other process. That includes simple things + such as logging to + syslog3, + or systemd itself (this means: no + systemctl1)! + Non-essential file systems like /var and + /home are mounted after generators have run. Generators + can however rely on the most basic kernel functionality to be available, + including a mounted /sys, /proc, + /dev, /usr. + + + + + Units written by generators are removed when the configuration is + reloaded. That means the lifetime of the generated units is closely bound to + the reload cycles of systemd itself. + + + + Generators should only be used to generate unit files and symlinks to + them, not any other kind of configuration. Due to the lifecycle logic + mentioned above, generators are not a good fit to generate dynamic + configuration for other services. If you need to generate dynamic + configuration for other services, do so in normal services you order before + the service in question. + - - Notes - - - - - All generators are executed in parallel. That means all - executables are started at the very same time and need to - be able to cope with this parallelism. - - - - - - Generators are run very early at boot and cannot rely on - any external services. They may not talk to any other - process. That includes simple things such as logging to - syslog3, - or systemd itself (this means: no - systemctl1)! - Non-essential file systems like - /var and /home - are mounted after generators have run. Generators - can however rely on the most basic kernel functionality to be - available, including a mounted /sys, - /proc, /dev, - /usr. - - - - - - Units written by generators are removed when the configuration - is reloaded. That means the lifetime of the generated - units is closely bound to the reload cycles of - systemd itself. - - - - - - Generators should only be used to generate unit files and symlinks to them, not any other kind of - configuration. Due to the lifecycle logic mentioned above, generators are not a good fit to generate - dynamic configuration for other services. If you need to generate dynamic configuration for other services, - do so in normal services you order before the service in question. - - - - - - Since - syslog3 - is not available (see above), log messages have to be - written to /dev/kmsg instead. - - - - - - It is a good idea to use the - SourcePath= directive in generated unit - files to specify the source configuration file you are - generating the unit from. This makes things more easily - understood by the user and also has the benefit that - systemd can warn the user about configuration files that - changed on disk but have not been read yet by systemd. - - - - - - Generators may write out dynamic unit files or just hook - unit files into other units with the usual - .wants/ or - .requires/ symlinks. Often, it is - nicer to simply instantiate a template unit file from - /usr with a generator instead of - writing out entirely dynamic unit files. Of course, this - works only if a single parameter is to be used. - - - - - - If you are careful, you can implement generators in shell - scripts. We do recommend C code however, since generators - are executed synchronously and hence delay the - entire boot if they are slow. - - - - - Regarding overriding semantics: there are two rules we - try to follow when thinking about the overriding semantics: - - - - - User configuration should override vendor - configuration. This (mostly) means that stuff from - /etc should override stuff from - /usr. - - - - Native configuration should override non-native - configuration. This (mostly) means that stuff you - generate should never override native unit files for the - same purpose. - - - - Of these two rules the first rule is probably the more - important one and breaks the second one sometimes. Hence, - when deciding whether to use argv[1], argv[2], or argv[3], - your default choice should probably be argv[1]. - - - - - Instead of heading off now and writing all kind of - generators for legacy configuration file formats, please - think twice! It is often a better idea to just deprecate - old stuff instead of keeping it artificially alive. - - - - + + Since + syslog3 + + is not available (see above), log messages have to be written to + /dev/kmsg instead. + + + + It is a good idea to use the SourcePath= directive + in generated unit files to specify the source configuration file you are + generating the unit from. This makes things more easily understood by the + user and also has the benefit that systemd can warn the user about + configuration files that changed on disk but have not been read yet by + systemd. + + + + Generators may write out dynamic unit files or just hook unit files + into other units with the usual .wants/ or + .requires/ symlinks. Often, it is nicer to simply + instantiate a template unit file from /usr with a + generator instead of writing out entirely dynamic unit files. Of course, this + works only if a single parameter is to be used. + + + + If you are careful, you can implement generators in shell scripts. We + do recommend C code however, since generators are executed synchronously and + hence delay the entire boot if they are slow. + + + + Regarding overriding semantics: there are two rules we try to follow + when thinking about the overriding semantics: + + + + User configuration should override vendor configuration. This + (mostly) means that stuff from /etc should override + stuff from /usr. + + + + Native configuration should override non-native configuration. This + (mostly) means that stuff you generate should never override native unit + files for the same purpose. + + + + Of these two rules the first rule is probably the more important one + and breaks the second one sometimes. Hence, when deciding whether to use + argv[1], argv[2], or argv[3], your default choice should probably be + argv[1]. + + + + Instead of heading off now and writing all kind of generators for + legacy configuration file formats, please think twice! It is often a better + idea to just deprecate old stuff instead of keeping it artificially alive. + + + @@ -307,22 +284,18 @@ systemd-fstab-generator systemd-fstab-generator8 - converts /etc/fstab into native mount - units. It uses argv[1] as location to place the generated unit - files in order to allow the user to override - /etc/fstab with her own native unit files, - but also to ensure that /etc/fstab - overrides any vendor default from /usr. - - - After editing /etc/fstab, the user - should invoke systemctl daemon-reload. This - will re-run all generators and cause systemd - to reload units from disk. To actually mount new directories - added to fstab, systemctl start - /path/to/mountpoint or - systemctl start local-fs.target may be used. - + converts /etc/fstab into native mount units. It uses + argv[1] as location to place the generated unit files in order to allow the + user to override /etc/fstab with her own native unit + files, but also to ensure that /etc/fstab overrides any + vendor default from /usr. + + After editing /etc/fstab, the user should invoke + systemctl daemon-reload. This will re-run all generators and + cause systemd to reload units from disk. To actually mount + new directories added to fstab, systemctl start + /path/to/mountpoint or systemctl + start local-fs.target may be used. @@ -331,9 +304,9 @@ systemd-system-update-generator8 temporarily redirects default.target to system-update.target, if a system update is - scheduled. Since this needs to override the default user - configuration for default.target, it uses - argv[2]. For details about this logic, see + scheduled. Since this needs to override the default user configuration for + default.target, it uses argv[2]. For details about this + logic, see systemd.offline-updates7. -- 2.7.4