build: shepherd: Check for container support.

Fixes: <https://issues.guix.gnu.org/43533>.

* gnu/build/shepherd.scm (fork+exec-command/container): Check if containers
are supported before joining PID namespaces.
This commit is contained in:
Mathieu Othacehe 2020-09-21 10:11:17 +02:00
parent c515bbae0c
commit 6453915cf7
No known key found for this signature in database
GPG key ID: 8354763531769CA6

View file

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Mathieu Othacehe <othacehe@gnu.org>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -196,11 +197,16 @@ (define* (fork+exec-command/container command
#:allow-other-keys #:allow-other-keys
#:rest args) #:rest args)
"This is a variant of 'fork+exec-command' procedure, that joins the "This is a variant of 'fork+exec-command' procedure, that joins the
namespaces of process PID beforehand." namespaces of process PID beforehand. If there is no support for containers,
(container-excursion* pid on Hurd systems for instance, fallback to direct forking."
(lambda () (let ((container-support?
(file-exists? "/proc/self/ns"))
(fork-proc (lambda ()
(apply fork+exec-command command (apply fork+exec-command command
(strip-keyword-arguments '(#:pid) args))))) (strip-keyword-arguments '(#:pid) args)))))
(if container-support?
(container-excursion* pid fork-proc)
(fork-proc))))
;; Local Variables: ;; Local Variables:
;; eval: (put 'container-excursion* 'scheme-indent-function 1) ;; eval: (put 'container-excursion* 'scheme-indent-function 1)