[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#34638] [PATCH 2/4] linux-container: Add 'start-child-in-container'.
From: |
Ludovic Courtès |
Subject: |
[bug#34638] [PATCH 2/4] linux-container: Add 'start-child-in-container'. |
Date: |
Thu, 14 Mar 2019 19:17:43 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) |
Hello!
Christopher Baines <address@hidden> skribis:
> This new procedure is similar to open-pipe* in (ice-9 popen), but using
> run-container from (gnu build linux-container).
>
> * gnu/build/linux-container.scm (start-child-in-container): New procedure.
[...]
+(define* (start-child-in-container command
> + #:key read? write?
> + (root 'temporary)
> + (mounts '())
> + (namespaces %namespaces)
> + (host-uids 1)
> + (extra-environment-variables '()))
We could even call that ‘open-pipe/container’, for clarity.
> + (define (with-root-directory f)
> + (if (eq? root 'temporary)
> + (call-with-temporary-directory f)
> + (f root)))
> +
> + ;; (ice-9 popen) internals
> + (define make-rw-port (@@ (ice-9 popen) make-rw-port))
> + (define pipe-guardian (@@ (ice-9 popen) pipe-guardian))
> + (define make-pipe-info (@@ (ice-9 popen) make-pipe-info))
So this is the funky part. ;-)
What if we did something like:
(call-with-container mounts
(lambda ()
;; Somehow act as a proxy between the output process
;; and the one spawned by ‘open-pipe*’.
(open-pipe* …)))
? Would that work?
That’s create an extra process, but if it works, it’s probably safer and
a lesser maintenance burden.
Now, I think that Guile should expose some of the popen internals
somehow so we can do things like you did, but that’s another story.
Ludo’.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [bug#34638] [PATCH 2/4] linux-container: Add 'start-child-in-container'.,
Ludovic Courtès <=