The cycle is caused by our ordering is to coarse. We order random-seed-load 
after
all filesystems, but all we really care about is /var/lib being mounted rw.

Waiting for all filesystems means that we would also have to wait for /tmp, 
which
might depend on random-seed-load.

Maybe the best way to solve this would have been to allow .path units to not 
only
wait for a path, but also wait for it to have a specific permission.

However, since we cannot do that at the moment, this should do the trick for 
now:

We would like to wait for var.mount if /var is on a separate partition, and
we'd like to wait for remount-rootfs.service otherwise. I couldn't figure out 
how
to do this conditionally, so we unconditionally wait for both.
---
 Makefile.am                               |    1 +
 TODO                                      |    2 --
 units/systemd-random-seed-load.service.in |    4 ++--
 3 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index d30d626..ec172b8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1594,6 +1594,7 @@ SED_PROCESS = \
                -e 's,@exec_prefix\@,$(exec_prefix),g' \
                -e 's,@libdir\@,$(libdir),g' \
                -e 's,@includedir\@,$(includedir),g' \
+               -e 's,@localstatedir\@,$(localstatedir),g' \
                < $< > $@ || rm $@
 
 units/%: units/%.in Makefile
diff --git a/TODO b/TODO
index 5303497..a17d409 100644
--- a/TODO
+++ b/TODO
@@ -21,8 +21,6 @@ Features:
 
 * when an instanced service exits, remove its parent cgroup too if possible.
 
-* as Tom Gundersen pointed out there's a always a dep loop if people use 
crypto file systems with random keys
-
 * unset container= in PID1?
 
 * automatically escape unit names passed on the service (i.e. think "systemctl 
start serial-getty.service@serial/by-path/jshdfjsdfhkjh" being automatically 
escaped as necessary.
diff --git a/units/systemd-random-seed-load.service.in 
b/units/systemd-random-seed-load.service.in
index a2b6a55..1218040 100644
--- a/units/systemd-random-seed-load.service.in
+++ b/units/systemd-random-seed-load.service.in
@@ -8,10 +8,10 @@
 [Unit]
 Description=Load Random Seed
 DefaultDependencies=no
-Wants=local-fs.target
 Conflicts=shutdown.target
-After=systemd-readahead-collect.service systemd-readahead-replay.service 
local-fs.target
+After=systemd-readahead-collect.service systemd-readahead-replay.service 
rootfs-remount.service @[email protected]
 Before=sysinit.target shutdown.target
+ConditionPathExists=@localstatedir@/lib/random-seed
 
 [Service]
 Type=oneshot
-- 
1.7.7.3

_______________________________________________
systemd-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to