Subject: [bug#54997] [PATCH 00/12] Add "least authority" program wrapper

From: Ludovic Courtès <[email-masked]>
Date: Thu, 28 Apr 2022 21:25:17 +0200

Hi Maxime,

Maxime Devos <[email-masked]> skribis:

> Ludovic Courtès schreef op do 28-04-2022 om 00:01 [+0200]:
>> > Also, having to do fork, waitpid and primitive-fork seems rather
>> > low-level to me, so I prefer moving this code into somewhere like
>> > (gnu build SOMEWHERE) or to keep the old make-forkexec-
>> > constructor/container code.
>> 
>> ‘primitive-fork’ and ‘waitpid’ calls are in (gnu build linux-
>> container)
>> right now so I guess we’re fine?
>
> Their use in (gnu build linux-container) seems fine to me, but their
> use in %ipfs-activation doesn't:
>
>> +    #~(let ((pid (primitive-fork)))
>> +        (if (zero? pid)
>> +            (dynamic-wind
>> +              (const #t)
>> +              (lambda ()
>> +                [...] (execl #$(ipfs-binary config) #$@args)))
>> +              (lambda ()
>> +                (primitive-exit 127)))

Oh I see, and I agree.

Now, to be fair, this patch deletes more lines than it adds:

> * gnu/services/networking.scm (ipfs-binary): Call
> 'least-authority-wrapper'.
> (%ipfs-home-mapping): Remove surrounding gexp.
> (ipfs-shepherd-service)[exec-command]: New procedure.
> [ipfs-config-command, set-config!-gexp, shepherd&co]
> [container-gexp, container-script]: Remove.
> [inner-gexp]: Use 'exec-command'.
> ---
>  gnu/services/networking.scm | 123 +++++++++++++++++-------------------
>  1 file changed, 58 insertions(+), 65 deletions(-)

The previous code abused ‘make-forkexec-constructor/container’ as a way
to spawn processes during activation, which wasn’t great either IMO.

So yes, I agree there’s room for improvement here and that this calls
for some kind of ‘system*’ interface, if the need is common enough.
But! I don’t think this is a blocker for the whole series.

WDYT?  :-)

Thanks,
Ludo’.