~ruther/guix-local

7597478e2e731c09890b25ff0b817d2d7c45d01f — Ludovic Courtès 9 years ago a24fda8
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'.
2 files changed, 24 insertions(+), 23 deletions(-)

M gnu/system/file-systems.scm
M guix/scripts/environment.scm
M gnu/system/file-systems.scm => gnu/system/file-systems.scm +23 -1
@@ 18,6 18,7 @@

(define-module (gnu system file-systems)
  #:use-module (ice-9 match)
  #:use-module (srfi srfi-1)
  #:use-module (guix records)
  #:use-module ((gnu build file-systems)
                #:select (string->uuid uuid->string))


@@ 64,7 65,9 @@

            file-system-mapping->bind-mount

            %store-mapping))
            %store-mapping
            %network-configuration-files
            %network-file-mappings))

;;; Commentary:
;;;


@@ 389,4 392,23 @@ a bind mount."
   (target (%store-prefix))
   (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

M guix/scripts/environment.scm => guix/scripts/environment.scm +1 -22
@@ 60,12 60,6 @@ directories in PROFILE, the store path of a profile."
(define %default-shell
  (or (getenv "SHELL") "/bin/sh"))

(define %network-configuration-files
  '("/etc/resolv.conf"
    "/etc/nsswitch.conf"
    "/etc/services"
    "/etc/hosts"))

(define (purify-environment)
  "Unset almost all environment variables.  A small number of variables such
as 'HOME' and 'USER' are left untouched."


@@ 408,22 402,7 @@ host file systems to mount inside the container."
                     ;; When in Rome, do as Nix build.cc does: Automagically
                     ;; map common network configuration files.
                     (if network?
                         (filter-map (lambda (file)
                                       (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)
                         %network-file-mappings
                         '())
                     ;; Mappings for the union closure of all inputs.
                     (map (lambda (dir)