From 6fb6ac6857df31c55a640eead2a5f79edd7dab14 Mon Sep 17 00:00:00 2001 From: Chris Marusich Date: Mon, 20 Aug 2018 00:16:06 -0700 Subject: [PATCH] gnu: services: Fix pcscd activation bug. Fixes: . * gnu/services/security-token.scm (pcscd-activation): Idempotently create the /var/lib/pcsc symlink so that it does not fail when it already exists. --- gnu/services/security-token.scm | 25 +++++++++++++++++-------- 1 file 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 (($ 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