system: Don't compare <pam-service> objects with 'equal?'.

Fixes <http://bugs.gnu.org/20037>.
Reported by 宋文武 <iyzsong@gmail.com> and Tomáš Čech.

* gnu/system.scm (operating-system-etc-directory): Remove call to
  'delete-duplicates'.
* gnu/system/linux.scm (pam-services->directory)[builder]: Add call to
  'delete-duplicates'.
This commit is contained in:
Ludovic Courtès 2015-03-10 18:07:48 +01:00
parent b9156ccc08
commit 11dddd8a3e
2 changed files with 10 additions and 5 deletions

View File

@ -511,9 +511,8 @@ export ASPELL_CONF=\"dict-dir $HOME/.guix-profile/lib/aspell\"
((services (operating-system-services os))
(pam-services ->
;; Services known to PAM.
(delete-duplicates
(append (operating-system-pam-services os)
(append-map service-pam-services services))))
(append (operating-system-pam-services os)
(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)

View File

@ -100,13 +100,19 @@ dumped in /etc/pam.d/NAME, where NAME is the name of SERVICE."
services))))
(define builder
#~(begin
(use-modules (ice-9 match))
(use-modules (ice-9 match)
(srfi srfi-1))
(mkdir #$output)
(for-each (match-lambda
((name file)
(symlink file (string-append #$output "/" name))))
'#$(zip names files))))
;; Since <pam-service> objects cannot be compared with
;; 'equal?' since they contain gexps, which contain
;; closures, use 'delete-duplicates' on the build-side
;; instead. See <http://bugs.gnu.org/20037>.
(delete-duplicates '#$(zip names files)))))
(gexp->derivation "pam.d" builder)))