linux-container: Remove dependency on (guix utils).

Fixes a bug whereby derivations importing (gnu build linux-container),
such as the 'bitlbee' and 'tor' services, would depend on the
user's (guix config) file, which was pulled as a dependency of (guix
utils).  As a result, those derivations would vary from user to user.

* gnu/build/linux-container.scm (call-with-temporary-directory): New
procedure.
This commit is contained in:
Ludovic Courtès 2019-06-23 19:43:39 +02:00
parent 92359aed40
commit 40c369b234
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 15 additions and 1 deletions

View File

@ -22,7 +22,6 @@
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (ice-9 rdelim) #:use-module (ice-9 rdelim)
#:use-module (srfi srfi-98) #:use-module (srfi srfi-98)
#:use-module (guix utils)
#:use-module (guix build utils) #:use-module (guix build utils)
#:use-module (guix build syscalls) #:use-module (guix build syscalls)
#:use-module (gnu system file-systems) ;<file-system> #:use-module (gnu system file-systems) ;<file-system>
@ -279,6 +278,21 @@ that host UIDs (respectively GIDs) map to in the namespace."
(_ ;unexpected termination (_ ;unexpected termination
#f))))))))) #f)))))))))
;; FIXME: This is copied from (guix utils), which we cannot use because it
;; would pull (guix config) and all.
(define (call-with-temporary-directory proc)
"Call PROC with a name of a temporary directory; close the directory and
delete it when leaving the dynamic extent of this call."
(let* ((directory (or (getenv "TMPDIR") "/tmp"))
(template (string-append directory "/guix-directory.XXXXXX"))
(tmp-dir (mkdtemp! template)))
(dynamic-wind
(const #t)
(lambda ()
(proc tmp-dir))
(lambda ()
(false-if-exception (delete-file-recursively tmp-dir))))))
(define* (call-with-container mounts thunk #:key (namespaces %namespaces) (define* (call-with-container mounts thunk #:key (namespaces %namespaces)
(host-uids 1) (guest-uid 0) (guest-gid 0)) (host-uids 1) (guest-uid 0) (guest-gid 0))
"Run THUNK in a new container process and return its exit status. "Run THUNK in a new container process and return its exit status.