Skip to content

Commit

Permalink
core: add possibility to not track certain unit types
Browse files Browse the repository at this point in the history
  • Loading branch information
msekletar authored and yuwata committed Nov 24, 2022
1 parent 80d95fc commit 88e4bfa
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
9 changes: 9 additions & 0 deletions docs/ENVIRONMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,15 @@ All tools:
it is either set to `system` or `user` depending on whether the NSS/PAM
module is called by systemd in `--system` or `--user` mode.

* `$SYSTEMD_SUPPORT_DEVICE`, `$SYSTEMD_SUPPORT_MOUNT`, `$SYSTEMD_SUPPORT_SWAP` -
can be set to `0` to mark respective unit type as unsupported. Generally,
having less units saves system resources so these options might be useful
for cases where we don't need to track given unit type, e.g. `--user` manager
often doesn't need to deal with device or swap units because they are
handled by the `--system` manager (PID 1). Note that setting certain unit
type as unsupported may not prevent loading some units of that type if they
are referenced by other units of another supported type.

`systemd-remount-fs`:

* `$SYSTEMD_REMOUNT_ROOT_RW=1` — if set and no entry for the root directory
Expand Down
18 changes: 18 additions & 0 deletions src/core/unit.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "dbus-unit.h"
#include "dbus.h"
#include "dropin.h"
#include "env-util.h"
#include "escape.h"
#include "execute.h"
#include "fd-util.h"
Expand Down Expand Up @@ -4781,11 +4782,28 @@ int unit_setup_dynamic_creds(Unit *u) {
}

bool unit_type_supported(UnitType t) {
static int8_t cache[_UNIT_TYPE_MAX] = {}; /* -1: disabled, 1: enabled: 0: don't know */
int r;

if (_unlikely_(t < 0))
return false;
if (_unlikely_(t >= _UNIT_TYPE_MAX))
return false;

if (cache[t] == 0) {
char *e;

e = strjoina("SYSTEMD_SUPPORT_", unit_type_to_string(t));

r = getenv_bool(ascii_strupper(e));
if (r < 0 && r != -ENXIO)
log_debug_errno(r, "Failed to parse $%s, ignoring: %m", e);

cache[t] = r == 0 ? -1 : 1;
}
if (cache[t] < 0)
return false;

if (!unit_vtable[t]->supported)
return true;

Expand Down

0 comments on commit 88e4bfa

Please sign in to comment.