diff options
author | Chris Marusich <cmmarusich@gmail.com> | 2018-08-20 00:16:06 -0700 |
---|---|---|
committer | Chris Marusich <cmmarusich@gmail.com> | 2018-08-20 21:43:56 -0700 |
commit | 6fb6ac6857df31c55a640eead2a5f79edd7dab14 (patch) | |
tree | b9feaacd5aff2a5857a596f4231fe64d0a1a6bbf /gnu | |
parent | 6d863cdedd9dae614479fcea7fe3ad30ac853bb5 (diff) | |
download | guix-6fb6ac6857df31c55a640eead2a5f79edd7dab14.tar.gz |
gnu: services: Fix pcscd activation bug.
Fixes: <https://bugs.gnu.org/32478>. * gnu/services/security-token.scm (pcscd-activation): Idempotently create the /var/lib/pcsc symlink so that it does not fail when it already exists.
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/services/security-token.scm | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/gnu/services/security-token.scm b/gnu/services/security-token.scm index 7e7ea54a50..354549b33c 100644 --- a/gnu/services/security-token.scm +++ b/gnu/services/security-token.scm @@ -20,6 +20,7 @@ #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (gnu packages admin) + #:use-module (gnu packages base) #:use-module (gnu packages security-token) #:use-module (gnu system shadow) #:use-module (guix gexp) @@ -62,14 +63,22 @@ (define pcscd-activation (match-lambda (($ <pcscd-configuration> pcsc-lite usb-drivers) - #~(begin - (use-modules (guix build utils)) - (mkdir-p "/var/lib") - (symlink #$(directory-union - "pcsc" - (map (cut file-append <> "/pcsc") - usb-drivers)) - "/var/lib/pcsc"))))) + (with-imported-modules (source-module-closure + '((guix build utils))) + #~(begin + (use-modules (guix build utils)) + ;; XXX: We can't use (guix utils) because it requires a + ;; dynamically-linked Guile, hence the duplicate switch-symlinks. + (define (switch-symlinks link target) + (let ((pivot (string-append link ".new"))) + (symlink target pivot) + (rename-file pivot link))) + (mkdir-p "/var/lib") + (switch-symlinks "/var/lib/pcsc" + #$(directory-union + "pcsc" + (map (cut file-append <> "/pcsc") + usb-drivers)))))))) (define pcscd-service-type (service-type |