From: Christopher Baines <mail@cbaines.net>
To: 34638@debbugs.gnu.org
Subject: [bug#34638] [PATCH 4/4] inferior: Add 'open-inferior/container'.
Date: Sun, 24 Feb 2019 16:18:55 +0000 [thread overview]
Message-ID: <20190224161855.2632-4-mail@cbaines.net> (raw)
In-Reply-To: <20190224161855.2632-1-mail@cbaines.net>
---
guix/inferior.scm | 65 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 65 insertions(+)
diff --git a/guix/inferior.scm b/guix/inferior.scm
index cf72454426..a5f773c147 100644
--- a/guix/inferior.scm
+++ b/guix/inferior.scm
@@ -40,6 +40,9 @@
#:use-module (guix store)
#:use-module (guix derivations)
#:use-module (guix base32)
+ #:use-module (gnu system file-systems)
+ #:use-module (gnu build linux-container)
+ #:use-module (guix build syscalls)
#:use-module (gcrypt hash)
#:autoload (guix cache) (maybe-remove-expired-cache-entries)
#:autoload (guix ui) (show-what-to-build*)
@@ -54,6 +57,7 @@
#:use-module ((rnrs bytevectors) #:select (string->utf8))
#:export (inferior?
open-inferior
+ open-inferior/container
port->inferior
close-inferior
inferior-eval
@@ -137,6 +141,67 @@ it's an old Guix."
((@ (guix scripts repl) machine-repl))))))
pipe)))
+(define* (open-inferior/container store guix-store-item
+ #:key
+ (command "bin/guix")
+ (share-host-network? #f)
+ (extra-shared-directories '())
+ (extra-environment-variables '()))
+ (define requisite-store-items
+ (requisites store (list guix-store-item)))
+
+ (define shared-directory
+ (mkdtemp! (string-append (or (getenv "TMPDIR") "/tmp")
+ "/guix-inferior.XXXXXX")))
+
+ (define mappings
+ (append
+ (map (lambda (dir)
+ (file-system-mapping
+ (source dir)
+ (target dir)
+ (writable? #f)))
+ `(;; Share a directory, used in inferior-eval-with-store
+ ,shared-directory
+ ,@requisite-store-items
+ ,@extra-shared-directories))
+ (if share-host-network?
+ %network-file-mappings
+ '())))
+
+ (define mounts
+ (append %container-file-systems
+ (map file-system-mapping->bind-mount
+ mappings)))
+
+ (define (inferior-pipe/container store
+ guix-store-item
+ shared-directory
+ command)
+ (start-child-in-container
+ (list (string-append guix-store-item "/bin/guix")
+ ;; TODO I'm not sure why "repl" is duplicated in the following
+ ;; command
+ "repl" "repl" "-t" "machine")
+ #:read? #t
+ #:write? #t
+ #:mounts mounts
+ #:namespaces (if share-host-network?
+ (delq 'net %namespaces)
+ %namespaces)
+ #:extra-environment-variables
+ `(;; Set HOME, so that the (guix profiles) module can be loaded, without it
+ ;; trying to read from /etc/passwd
+ "HOME=/tmp"
+ ,@extra-environment-variables)))
+
+ (port->inferior (inferior-pipe/container store
+ guix-store-item
+ shared-directory
+ command)
+ shared-directory
+ close-pipe))
+
(define* (port->inferior pipe shared-directory #:optional (close close-port))
"Given PIPE, an input/output port, return an inferior that talks over PIPE.
PIPE is closed with CLOSE when 'close-inferior' is called on the returned
--
2.20.1
next prev parent reply other threads:[~2019-02-24 16:20 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-24 16:12 [bug#34638] [PATCH 0/4] Isolated inferiors Christopher Baines
2019-02-24 16:18 ` [bug#34638] [PATCH 1/4] utils: Add #:base-directory to call-with-temporary-directory Christopher Baines
2019-02-24 16:18 ` [bug#34638] [PATCH 2/4] linux-container: Add 'start-child-in-container' Christopher Baines
2019-03-14 18:17 ` Ludovic Courtès
2019-04-19 14:16 ` Christopher Baines
2019-02-24 16:18 ` [bug#34638] [PATCH 3/4] inferior: Add a shared-directory field to <inferior> Christopher Baines
2019-02-24 16:18 ` Christopher Baines [this message]
2019-03-14 19:35 ` [bug#34638] [PATCH 0/4] Isolated inferiors Ludovic Courtès
2019-04-19 14:04 ` [bug#34638] [PATCH v2 1/4] utils: Add #:base-directory to call-with-temporary-directory Christopher Baines
2019-04-19 14:04 ` [bug#34638] [PATCH v2 2/4] linux-container: Add 'start-child-in-container' Christopher Baines
2020-03-26 9:28 ` Ludovic Courtès
2020-03-28 11:26 ` Christopher Baines
2020-03-28 12:20 ` Ludovic Courtès
2019-04-19 14:04 ` [bug#34638] [PATCH v2 3/4] inferior: Add a shared-directory field to <inferior> Christopher Baines
2020-03-26 9:30 ` Ludovic Courtès
2019-04-19 14:04 ` [bug#34638] [PATCH v2 4/4] inferior: Add 'open-inferior/container' Christopher Baines
2020-03-26 9:32 ` Ludovic Courtès
2020-03-26 9:22 ` [bug#34638] [PATCH v2 1/4] utils: Add #:base-directory to call-with-temporary-directory Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190224161855.2632-4-mail@cbaines.net \
--to=mail@cbaines.net \
--cc=34638@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).