[systemd-devel] Raid device issue

Zbigniew Jędrzejewski-Szmek zbyszek at in.waw.pl
Thu Dec 8 15:28:18 PST 2011


On 12/08/2011 10:00 PM, Ken Bass wrote:
> On 12/8/2011 3:45 PM, Zbigniew Jędrzejewski-Szmek wrote:
>> maybe I'm misunderstanding you, but I think that you are looking at
>> the meaning of cryptsetup.target in a wrong way: cryptsetup.target
>> comes after all encrypted devices configured in /etc/crypttab are
>> ready. So it makes sense to do something with After=cryptsetup.target
>> (== after all encrypted devices have been opened), but not with
>> Before=cryptsetup.target.
>>
>> I guess that you might have to declare the ordering dependence between
>> mnt-subkey.mount with Before=cryptsetup at encrypt_storage.service directly.
>
> Hi Zbyszek,
>
> I understand what you are saying and perhaps I am looking at it from a
> different angle. But the problem with your suggestion is that it is a
> non-generic way to handle it. The 'cryptsetup at encrypt_storage.service '
> is completely dependent on whatever is listed in the /etc/crypttab and
> that could be changed by the user at any time. If that /etc/crypttab
> entry was renamed or commented out, the dependency would mysteriously
> break. Maybe there needs to be a cryptsetup-begin.target and
> cryptsetup-done.target instead? I don't think its is far stretch to want
> to ensure some happens before ANY encrypted devices has been opened.
Hi Ken,

I think that there's a better solution: to make the 
cryptsetup at ....service wait for the appearance of the key file.
The generator could be changed for cases only when the keyfile is 
specified.
Something like this:

== cryptsetup at ...crypt.service ==
[Unit]
ConditionPathExists=/somewhere/keyfile

An additional path unit would need to be created:
== cryptsetup at ...crypt.path ==
[Path]
PathExists=/somewhere/keyfile

I've done some testing with a normal service and a file in /tmp, and it 
seems to behave properly -- since the service has RemainAfterExit=true, 
it can safely be started multiple times.

One problem (potentially fatal :( ) with this setup is that the 
cryptsetup at ...service doesn't wait for they keyfile, but instead first 
fails, and then is started when the path unit condition triggers after 
the file is created. This means that you would properly get the 
decrypted device created after the key file and the encrypted block 
device are available, but it would not be subject to normal timeout.

OK, I now see that this is very hacky, but maybe it will give you some 
useful idea.

Best,
Zbyszek


More information about the systemd-devel mailing list