aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-06-05 22:41:55 +0200
committerLudovic Courtès <ludo@gnu.org>2015-06-05 22:41:55 +0200
commit24e02c28fbf2b0efbc2fd6cdcd770037a6cff7e3 (patch)
treeb4541b9b8e4e28b5fbe6f060895e94f7fbb01be2
parent847658395e399d6d4ef21a247dbad02a9c921400 (diff)
downloadguix-24e02c28fbf2b0efbc2fd6cdcd770037a6cff7e3.tar
guix-24e02c28fbf2b0efbc2fd6cdcd770037a6cff7e3.tar.gz
system: 'hosts-file' is now a file-like object.
Partly fixes <http://bugs.gnu.org/20720>. Reported by Alex Kost <alezost@gmail.com>. * gnu/system.scm (default-/etc/hosts): Change 'text-file' to 'plain-file'. (maybe-file->monadic): New procedure. (operating-system-etc-directory): Use it. * doc/guix.texi (operating-system Reference, Networking Services): Adjust accordingly.
-rw-r--r--doc/guix.texi10
-rw-r--r--gnu/system.scm26
2 files changed, 27 insertions, 9 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index ecdfa1b1ce..f8da9c1224 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -4480,9 +4480,9 @@ The host name.
@item @code{hosts-file}
@cindex hosts file
-A zero-argument monadic procedure that returns a text file for use as
+A file-like object (@pxref{G-Expressions, file-like objects}) for use as
@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
-Reference Manual}). The default is to produce a file with entries for
+Reference Manual}). The default is a file with entries for
@code{localhost} and @var{host-name}.
@item @code{mapped-devices} (default: @code{'()})
@@ -5299,9 +5299,9 @@ This variable is typically used in the @code{hosts-file} field of an
(hosts-file
;; Create a /etc/hosts file with aliases for "localhost"
;; and "mymachine", as well as for Facebook servers.
- (text-file "hosts"
- (string-append (local-host-aliases host-name)
- %facebook-host-aliases))))
+ (plain-file "hosts"
+ (string-append (local-host-aliases host-name)
+ %facebook-host-aliases))))
@end example
This mechanism can prevent programs running locally, such as Web
diff --git a/gnu/system.scm b/gnu/system.scm
index ede0a6f004..92ed454b2c 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -110,7 +110,7 @@
(default %base-firmware))
(host-name operating-system-host-name) ; string
- (hosts-file operating-system-hosts-file ; M item | #f
+ (hosts-file operating-system-hosts-file ; file-like | #f
(default #f))
(mapped-devices operating-system-mapped-devices ; list of <mapped-device>
@@ -374,7 +374,7 @@ This is the GNU system. Welcome.\n")
(define (default-/etc/hosts host-name)
"Return the default /etc/hosts file."
- (text-file "hosts" (local-host-aliases host-name)))
+ (plain-file "hosts" (local-host-aliases host-name)))
(define (emacs-site-file)
"Return the Emacs 'site-start.el' file. That file contains the necessary
@@ -585,6 +585,22 @@ use 'plain-file' instead~%")
(x
x)))
+(define (maybe-file->monadic file-name thing)
+ "If THING is a value in %STORE-MONAD, return it as is; otherwise return
+THING in the %STORE-MONAD.
+
+This is for backward-compatibility of fields that used to be monadic values
+and are now file-like objects."
+ (with-monad %store-monad
+ (match thing
+ ((? procedure?)
+ (warning (_ "using a monadic value for '~a' is deprecated; \
+use 'plain-file' instead~%")
+ file-name)
+ thing)
+ (x
+ (return x)))))
+
(define (operating-system-etc-directory os)
"Return that static part of the /etc directory of OS."
(mlet* %store-monad
@@ -595,8 +611,10 @@ use 'plain-file' instead~%")
(append-map service-pam-services services)))
(profile-drv (operating-system-profile os))
(skeletons (operating-system-skeletons os))
- (/etc/hosts (or (operating-system-hosts-file os)
- (default-/etc/hosts (operating-system-host-name os))))
+ (/etc/hosts (maybe-file->monadic
+ "hosts"
+ (or (operating-system-hosts-file os)
+ (default-/etc/hosts (operating-system-host-name os)))))
(shells (user-shells os)))
(etc-directory #:pam-services pam-services
#:skeletons skeletons