core: automatically add dependency on systemd-remount-fs.service if StateDirectory= is used

And similar for other settings that require a writable /var/.

Rationale: if these options are used for early-boot services (such as
systemd-pstore.service) we need /var/ writable. And if /var/ is on the
root fs, then systemd-remount-fs.service is the service that ensures
that /var/ is writable.

This allows us to remove explicit deps in services such as
systemd-pstore.service.
This commit is contained in:
Lennart Poettering 2020-04-08 16:08:35 +02:00
parent 167241912f
commit f3b7a79b97

View file

@ -1047,6 +1047,16 @@ int unit_add_exec_dependencies(Unit *u, ExecContext *c) {
if (!MANAGER_IS_SYSTEM(u->manager))
return 0;
/* For the following three directory types we need write access, and /var/ is possibly on the root
* fs. Hence order after systemd-remount-fs.service, to ensure things are writable. */
if (!strv_isempty(c->directories[EXEC_DIRECTORY_STATE].paths) ||
!strv_isempty(c->directories[EXEC_DIRECTORY_CACHE].paths) ||
!strv_isempty(c->directories[EXEC_DIRECTORY_LOGS].paths)) {
r = unit_add_dependency_by_name(u, UNIT_AFTER, SPECIAL_REMOUNT_FS_SERVICE, true, UNIT_DEPENDENCY_FILE);
if (r < 0)
return r;
}
if (c->private_tmp) {
const char *p;