pam-limits-service and pam-mount-service-type are working when
used only one of them. When both are present in list of (services,
conflict hapens when guix system reconfigure is invoked. Digging
the problem led to use of etc-service-type.
pam-limits-service defines /etc/security/limits.conf in
gnu/services/base.scm:
(define pam-limits-service-type
(let ((security-limits
;; Create /etc/security containing the provided
"limits.conf" file.
(lambda (limits-file)
`(("security"
,(computed-file
"security"
#~(begin
(mkdir #$output)
(stat #$limits-file)
(symlink #$limits-file
(string-append #$output "/limits.conf"))))))))
(pam-extension
(lambda (pam)
Basically, it says to etc-service-type i need "security" under
"/etc" and uses mkdir to create it.
pam-mount-service-type asks "security/pam_mount.conf.xml" from
etc-service-type.
(define (pam-mount-etc-service config)
`(("security/pam_mount.conf.xml"
,(make-pam-mount-configuration-file config))))
When both pam-mount-service-type and pam-limits-service are
defined in (services ...), if pam-mount-service-type is before
pam-limits, guix system reconfigure fails with "Permission
denied", if pam-limits is before then it is "File exists".
I would suggest to fix gnu/services/base.scm so that
pam-limits-services-type ask for "security/limits.conf" just like
pam-mount-services-type does in order to avoid conflict.
Currently, both pam-limits-service and pam-mount-service-type are
not usable at the same time.