summaryrefslogtreecommitdiff
path: root/gnu/build/linux-container.scm
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2015-11-03 08:32:53 -0500
committerDavid Thompson <dthompson2@worcester.edu>2015-11-03 11:41:04 -0500
commitb7d48312bbfc7bdbb3895eb10edc352eeb555b98 (patch)
tree90b3b401a88358aee843fb25d7fff293946d2a02 /gnu/build/linux-container.scm
parent9ff7827a21c13e67fb72196da10ab1ad30d79ddf (diff)
build: container: Add feature test predicates.
* gnu/build/linux-container.scm (user-namespace-supported?, unprivileged-user-namespace-supported?, setgroups-supported?): New procedures. * tests/container.scm: Use predicates. * tests/syscalls.scm: Likewise.
Diffstat (limited to 'gnu/build/linux-container.scm')
-rw-r--r--gnu/build/linux-container.scm22
1 files changed, 21 insertions, 1 deletions
diff --git a/gnu/build/linux-container.scm b/gnu/build/linux-container.scm
index 556422bc38f..eb5dbf94a31 100644
--- a/gnu/build/linux-container.scm
+++ b/gnu/build/linux-container.scm
@@ -19,16 +19,36 @@
19(define-module (gnu build linux-container) 19(define-module (gnu build linux-container)
20 #:use-module (ice-9 format) 20 #:use-module (ice-9 format)
21 #:use-module (ice-9 match) 21 #:use-module (ice-9 match)
22 #:use-module (ice-9 rdelim)
22 #:use-module (srfi srfi-98) 23 #:use-module (srfi srfi-98)
23 #:use-module (guix utils) 24 #:use-module (guix utils)
24 #:use-module (guix build utils) 25 #:use-module (guix build utils)
25 #:use-module (guix build syscalls) 26 #:use-module (guix build syscalls)
26 #:use-module ((gnu build file-systems) #:select (mount-file-system)) 27 #:use-module ((gnu build file-systems) #:select (mount-file-system))
27 #:export (%namespaces 28 #:export (user-namespace-supported?
29 unprivileged-user-namespace-supported?
30 setgroups-supported?
31 %namespaces
28 run-container 32 run-container
29 call-with-container 33 call-with-container
30 container-excursion)) 34 container-excursion))
31 35
36(define (user-namespace-supported?)
37 "Return #t if user namespaces are supported on this system."
38 (file-exists? "/proc/self/ns/user"))
39
40(define (unprivileged-user-namespace-supported?)
41 "Return #t if user namespaces can be created by unprivileged users."
42 (let ((userns-file "/proc/sys/kernel/unprivileged_userns_clone"))
43 (if (file-exists? userns-file)
44 (string=? "1" (call-with-input-file userns-file read-string))
45 #t)))
46
47(define (setgroups-supported?)
48 "Return #t if the setgroups proc file, introduced in Linux-libre 3.19,
49exists."
50 (file-exists? "/proc/self/setgroups"))
51
32(define %namespaces 52(define %namespaces
33 '(mnt pid ipc uts user net)) 53 '(mnt pid ipc uts user net))
34 54