> Then I have learned (by browsing the logs) that systemd basically
> unsupported on a system using /usr as a separate mount. I am sure
> (pre|post)inst haven't mentioned that.

Systemd does support setups where /usr is a separate partition, but such
setups require an initramfs which mounts both / and /usr together. I'm
not sure if the systemd package could easily detect whether the setup is
OK or not to warn about it at install time. At least any actual fixes
belong in other packages.


> It should not keep breaking the _same_ loop infinite times.

The attached patch to systemd could help. I haven't tried running it at
all, but at least the existing code looks suspicious, so if correct the
patch could fix the same issue.

>From 6d575f18437dd5bfd02c4736dbd3e6a8a1286ab2 Mon Sep 17 00:00:00 2001
From: Uoti Urpala <uau@glyph.nonexistent.invalid>
Date: Mon, 23 Jun 2014 08:14:22 +0300
Subject: [PATCH] core/transaction: fix cycle break attempts outside
 transaction

transaction_verify_order_one() considers jobs/units outside current
transaction when checking whether ordering dependencies cause cycles.
It would also incorrectly try to break cycles at these jobs; this
could not work, as the break action is to remove the job from the
transaction, which is a no-op if the job isn't part of the transaction
to begin with. The unit_matters_to_anchor() test also looks like it
would not work correctly for non-transaction jobs. Add a check to
verify that the unit is part of the transaction before considering a
job a candidate for deletion.
---
 src/core/transaction.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/core/transaction.c b/src/core/transaction.c
index d23a45c..805d40a 100644
--- a/src/core/transaction.c
+++ b/src/core/transaction.c
@@ -381,7 +381,7 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
                                       "Found dependency on %s/%s",
                                       k->unit->id, job_type_to_string(k->type));
 
-                        if (!delete &&
+                        if (!delete && hashmap_get(tr->jobs, k->unit) &&
                             !unit_matters_to_anchor(k->unit, k)) {
                                 /* Ok, we can drop this one, so let's
                                  * do so. */
-- 
1.7.6.561.g3822

Reply via email to