file-systems: Add '%network-configuration-files' and '%network-file-mappings'.

* gnu/system/file-systems.scm (%network-configuration-files)
(%network-file-mappings): New variables.
* guix/scripts/environment.scm (%network-configuration-files): Remove.
(launch-environment/container): Refer to '%network-file-mappings'
instead of calling 'filter-map'.
This commit is contained in:
Ludovic Courtès 2017-02-06 15:42:00 +01:00
parent a24fda8114
commit 7597478e2e
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 24 additions and 23 deletions

View file

@ -18,6 +18,7 @@
(define-module (gnu system file-systems) (define-module (gnu system file-systems)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (srfi srfi-1)
#:use-module (guix records) #:use-module (guix records)
#:use-module ((gnu build file-systems) #:use-module ((gnu build file-systems)
#:select (string->uuid uuid->string)) #:select (string->uuid uuid->string))
@ -64,7 +65,9 @@ (define-module (gnu system file-systems)
file-system-mapping->bind-mount file-system-mapping->bind-mount
%store-mapping)) %store-mapping
%network-configuration-files
%network-file-mappings))
;;; Commentary: ;;; Commentary:
;;; ;;;
@ -389,4 +392,23 @@ (define %store-mapping
(target (%store-prefix)) (target (%store-prefix))
(writable? #f))) (writable? #f)))
(define %network-configuration-files
;; List of essential network configuration files.
'("/etc/resolv.conf"
"/etc/nsswitch.conf"
"/etc/services"
"/etc/hosts"))
(define %network-file-mappings
;; List of file mappings for essential network files.
(filter-map (lambda (file)
(file-system-mapping
(source file)
(target file)
;; XXX: On some GNU/Linux systems, /etc/resolv.conf is a
;; symlink to a file in a tmpfs which, for an unknown reason,
;; cannot be bind mounted read-only within the container.
(writable? (string=? file "/etc/resolv.conf"))))
%network-configuration-files))
;;; file-systems.scm ends here ;;; file-systems.scm ends here

View file

@ -60,12 +60,6 @@ (define %precious-variables
(define %default-shell (define %default-shell
(or (getenv "SHELL") "/bin/sh")) (or (getenv "SHELL") "/bin/sh"))
(define %network-configuration-files
'("/etc/resolv.conf"
"/etc/nsswitch.conf"
"/etc/services"
"/etc/hosts"))
(define (purify-environment) (define (purify-environment)
"Unset almost all environment variables. A small number of variables such "Unset almost all environment variables. A small number of variables such
as 'HOME' and 'USER' are left untouched." as 'HOME' and 'USER' are left untouched."
@ -408,22 +402,7 @@ (define* (launch-environment/container #:key command bash user-mappings
;; When in Rome, do as Nix build.cc does: Automagically ;; When in Rome, do as Nix build.cc does: Automagically
;; map common network configuration files. ;; map common network configuration files.
(if network? (if network?
(filter-map (lambda (file) %network-file-mappings
(and (file-exists? file)
(file-system-mapping
(source file)
(target file)
;; XXX: On some GNU/Linux
;; systems, /etc/resolv.conf is a
;; symlink to a file in a tmpfs
;; which, for an unknown reason,
;; cannot be bind mounted
;; read-only within the
;; container.
(writable?
(string=? file
"/etc/resolv.conf")))))
%network-configuration-files)
'()) '())
;; Mappings for the union closure of all inputs. ;; Mappings for the union closure of all inputs.
(map (lambda (dir) (map (lambda (dir)