summaryrefslogtreecommitdiff
path: root/units
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2020-09-21 18:25:46 +0200
committerLennart Poettering <lennart@poettering.net>2020-09-30 14:37:52 +0200
commitd1f6e01e4743ae94740314eeb46a162112ef4599 (patch)
treedcf2a1d9ea84f17554b398f04b522179c624932e /units
parent626fb9f30195f2b6b25bb1e778096c6e2348ad83 (diff)
downloadsystemd-d1f6e01e4743ae94740314eeb46a162112ef4599.tar.gz
homed: explicitly deactivate all home directories on shutdown
Let's explicitly deactivate all home dirs on shutdown, in order to properly synchronizing unmounting and avoiding blocking devices. Previously, we'd rely on automatic deactivation when home directories become unused. However, that scheme is asynchronous, and ongoing deactviations might conflicts with attempts to unmount /home. Let's fix that by providing an explicit service systemd-homed-activate.service whose only job is to have a ExecStop= line that explicitly deactivates all home directories on shutdown. This service can the be ordered after home.mount and similar, ensuring that we'll first deactivate all homes before deactivating /home itself during shutdown. This is kept separate from systemd-homed.service so that it is possible to restart systemd-homed.service without deactivating all home directories. Fixes: #16842
Diffstat (limited to 'units')
-rw-r--r--units/meson.build1
-rw-r--r--units/systemd-homed-activate.service23
-rw-r--r--units/systemd-homed.service.in2
3 files changed, 25 insertions, 1 deletions
diff --git a/units/meson.build b/units/meson.build
index 275daad3f4..08c39c99b3 100644
--- a/units/meson.build
+++ b/units/meson.build
@@ -102,6 +102,7 @@ units = [
['systemd-firstboot.service', 'ENABLE_FIRSTBOOT',
'sysinit.target.wants/'],
['systemd-halt.service', ''],
+ ['systemd-homed-activate.service', 'ENABLE_HOMED'],
['systemd-initctl.socket', 'HAVE_SYSV_COMPAT',
'sockets.target.wants/'],
['systemd-journal-catalog-update.service', '',
diff --git a/units/systemd-homed-activate.service b/units/systemd-homed-activate.service
new file mode 100644
index 0000000000..3a5057d3aa
--- /dev/null
+++ b/units/systemd-homed-activate.service
@@ -0,0 +1,23 @@
+# SPDX-License-Identifier: LGPL-2.1+
+#
+# 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.
+
+[Unit]
+Description=Home Area Activation
+Documentation=man:systemd-homed.service(8)
+After=home.mount systemd-homed.service
+Before=systemd-user-sessions.service
+
+[Service]
+ExecStop=homectl deactivate-all
+RemainAfterExit=true
+Type=oneshot
+
+[Install]
+WantedBy=systemd-homed.service
+Also=systemd-homed.service
diff --git a/units/systemd-homed.service.in b/units/systemd-homed.service.in
index a14bb5b409..4b6a91c984 100644
--- a/units/systemd-homed.service.in
+++ b/units/systemd-homed.service.in
@@ -39,4 +39,4 @@ SystemCallFilter=@system-service @mount
[Install]
WantedBy=multi-user.target
Alias=dbus-org.freedesktop.home1.service
-Also=systemd-userdbd.service
+Also=systemd-homed-activate.service systemd-userdbd.service