These encode which units shall be enabled by default when they are installed, and which units shall not be enabled.
Preset files may be written for specific distributions, for specific spins or for specific sites, in order to enforce different policies as needed.
-Preset policies are stored in .preset files in /usr/lib/systemd/system-preset/.
+Preset policies are stored in .preset files in /usr/lib/systemd/system-preset/ (or /usr/lib/systemd/initrd-preset/ for initrds).
If no policy exists the default implied policy of "enable everything" is enforced, i.e. in Debian style.
The policy encoded in preset files is applied to a unit by invoking "systemctl preset ".
<member><filename>/run/systemd/user-preset/*.preset</filename></member>
<member><filename>/usr/local/lib/systemd/user-preset/*.preset</filename></member>
<member><filename>/usr/lib/systemd/user-preset/*.preset</filename></member>
+ <member><filename>/etc/systemd/initrd-preset/*.preset</filename></member>
+ <member><filename>/run/systemd/initrd-preset/*.preset</filename></member>
+ <member><filename>/usr/local/lib/systemd/initrd-preset/*.preset</filename></member>
+ <member><filename>/usr/lib/systemd/initrd-preset/*.preset</filename></member>
</simplelist></para>
</refsynopsisdiv>
systemsleepdir = libexecdir / 'system-sleep'
systemunitdir = prefixdir / 'lib/systemd/system'
systempresetdir = prefixdir / 'lib/systemd/system-preset'
+initrdpresetdir = prefixdir / 'lib/systemd/initrd-preset'
udevlibexecdir = prefixdir / 'lib/udev'
udevrulesdir = udevlibexecdir / 'rules.d'
udevhwdbdir = udevlibexecdir / 'hwdb.d'
--- /dev/null
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+# Settings for systemd units distributed with systemd itself, specific to initrds.
+
+enable systemd-journald-audit.socket
+enable systemd-network-generator.service
+enable systemd-networkd.service
+enable systemd-networkd-wait-online.service
+enable systemd-pstore.service
+enable systemd-resolved.service
+enable systemd-tpm2-clear.service
+
+disable console-getty.service
+disable debug-shell.service
+
+disable exit.target
+disable halt.target
+disable kexec.target
+disable poweroff.target
+enable reboot.target
+disable rescue.target
+
+disable proc-sys-fs-binfmt_misc.mount
+
+disable syslog.socket
+
+disable systemd-boot-check-no-failures.service
+disable systemd-journal-gatewayd.*
+disable systemd-journal-remote.*
+disable systemd-journal-upload.*
+disable systemd-time-wait-sync.service
install_data('90-systemd.preset',
install_dir : systempresetdir)
-install_data('user/90-systemd.preset',
- install_dir : userpresetdir)
+install_data('90-systemd-user.preset',
+ install_dir : userpresetdir,
+ rename : '90-systemd.preset')
+
+install_data('90-systemd-initrd.preset',
+ install_dir : initrdpresetdir,
+ rename : '90-systemd.preset')
systemd_system_preset_dir=${prefix}/lib/systemd/system-preset
systemdsystempresetdir=${systemd_system_preset_dir}
+systemd_initrd_preset_dir=${prefix}/lib/systemd/initrd-preset
+systemdinitrdpresetdir=${systemd_initrd_preset_dir}
+
systemd_user_unit_dir=${prefix}/lib/systemd/user
systemduserunitdir=${systemd_user_unit_dir}
*ret = PREFIX_NOSLASH "/lib/systemd/user-preset";
return 0;
+ case SD_PATH_SYSTEMD_INITRD_PRESET:
+ *ret = PREFIX_NOSLASH "/lib/systemd/initrd-preset";
+ return 0;
+
case SD_PATH_SYSTEMD_SYSTEM_CONF:
*ret = SYSTEM_CONFIG_UNIT_DIR;
return 0;
[SD_PATH_SYSTEMD_USER_UNIT] = "systemd-user-unit",
[SD_PATH_SYSTEMD_USER_PRESET] = "systemd-user-preset",
[SD_PATH_SYSTEMD_USER_CONF] = "systemd-user-conf",
+ [SD_PATH_SYSTEMD_INITRD_PRESET] = "systemd-initrd-preset",
[SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT] = "systemd-search-system-unit",
[SD_PATH_SYSTEMD_SEARCH_USER_UNIT] = "systemd-search-user-unit",
}
static int presets_find_config(RuntimeScope scope, const char *root_dir, char ***files) {
+ static const char* const initrd_dirs[] = { CONF_PATHS("systemd/initrd-preset"), NULL };
static const char* const system_dirs[] = { CONF_PATHS("systemd/system-preset"), NULL };
static const char* const user_dirs[] = { CONF_PATHS("systemd/user-preset"), NULL };
const char* const* dirs;
+ int r;
assert(scope >= 0);
assert(scope < _RUNTIME_SCOPE_MAX);
- if (scope == RUNTIME_SCOPE_SYSTEM)
- dirs = system_dirs;
- else if (IN_SET(scope, RUNTIME_SCOPE_GLOBAL, RUNTIME_SCOPE_USER))
+ if (scope == RUNTIME_SCOPE_SYSTEM) {
+ r = chase_and_access("/etc/initrd-release", root_dir, CHASE_PREFIX_ROOT, F_OK, /* ret_path= */ NULL);
+ if (r < 0 && r != -ENOENT)
+ return r;
+
+ dirs = r >= 0 ? initrd_dirs : system_dirs;
+ } else if (IN_SET(scope, RUNTIME_SCOPE_GLOBAL, RUNTIME_SCOPE_USER))
dirs = user_dirs;
else
assert_not_reached();
} else if (path_equal(n, "systemd/relabel-extra.d")) {
coll = run = true;
ext = ".relabel";
- } else if (PATH_IN_SET(n, "systemd/system-preset", "systemd/user-preset")) {
+ } else if (PATH_IN_SET(n, "systemd/system-preset", "systemd/user-preset", "systemd/initrd-preset")) {
coll = true;
ext = ".preset";
}
SD_PATH_SYSTEMD_USER_UNIT,
SD_PATH_SYSTEMD_USER_PRESET,
SD_PATH_SYSTEMD_USER_CONF,
+ SD_PATH_SYSTEMD_INITRD_PRESET,
SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT,
SD_PATH_SYSTEMD_SEARCH_USER_UNIT,