[systemd-devel] Failed at step RUNTIME_DIRECTORY spawning /usr/bin/true: File exists

Reindl Harald h.reindl at thelounge.net
Mon Aug 10 06:46:18 PDT 2015



Am 10.08.2015 um 15:28 schrieb Ivan Shapovalov:
> On 2015-08-10 at 15:14 +0200, Reindl Harald wrote:
>>
>> Am 10.08.2015 um 15:05 schrieb Ivan Shapovalov:
>>> On 2015-08-10 at 11:16 +0200, Reindl Harald wrote:
>>> Moreover,
>>>
>>>>
>>>> * "RuntimeDirectory" is a service configuration
>>>> * the daemon is started as unprivileged user
>>>> * "RuntimeDirectory" should be created long before
>>>>      ExecStart / ExecStartPost
>>>
>>> This is wrong. The runtime directory "will be created <...> when
>>> the unit is started, and removed when the unit is stopped".
>>
>> what is wrong?
>
> The runtime directory should be created right before the unit is
> started, not "long before ExecStart / ExecStartPost".

so why trying to create it before "ExecStart" *and* "ExecStartPost"

>> "unit is started" is for me pretty clear the whole systemd-unit
>>
>>> As can be seen from the code, the runtime directory creation is
>>> attempted on execution of each configured process, be it ExecStart=
>>> or
>>> ExecStartPost= (or whatever else)
>>
>> and why in the world is the code written that way?
>
> This is pointless rhetoric.

no it is not pointless rhetoric
it's a serious question

>> there is no logical reason that "RuntimeDirectory" created once would
>> disappear while starting the other processes as well as tempfiles.d
>> which get replaced by "RuntimeDirectory" isn't fired all the time
>
> Why do you think that it would disappear between starting two processes
> belonging to the same unit?

why do the developers think that?

if they don't think so why attempt creation for *each configured 
process* of the same systemd-unit?

> The runtime directory is destroyed when a
> unit enters inactive state. systemd always attempts to create it when
> it forks off a control process, just (I guess) because it's more robust
> to do it that way rather than to implement a separate state machine
> just for that purpose. Now, there was a TOCTOU-style race condition,
> and it got fixed indeed as far as I can see

yes, the race condition seems now to be fixed

but it would have been impossible to happen if *really* "The runtime 
directory should be created right before the unit is started" would be 
the implementation because there would be no second (needless) attemt to 
create it but a single point of early code which creates it with the 
correct permissions and any following ExecStart* could rely that it exists

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20150810/ba171a05/attachment.sig>


More information about the systemd-devel mailing list