From 009d831167edd37acdfc3f6a5c35618fc82804e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sun, 1 Jun 2014 21:20:54 +0200 Subject: [PATCH] linux-initrd: Gracefully handle missing /dev nodes. * guix/build/linux-initrd.scm (partition-label-predicate): Catch 'system-error' around 'read-ext2-superblock'; return #f upon ENOENT. --- guix/build/linux-initrd.scm | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/guix/build/linux-initrd.scm b/guix/build/linux-initrd.scm index 1c44c5c5c7..9a13e7213c 100644 --- a/guix/build/linux-initrd.scm +++ b/guix/build/linux-initrd.scm @@ -178,7 +178,20 @@ (define (partition-label-predicate label) return #t if that partition's volume name is LABEL." (lambda (part) (let* ((device (string-append "/dev/" part)) - (sblock (read-ext2-superblock device))) + (sblock (catch 'system-error + (lambda () + (read-ext2-superblock device)) + (lambda args + ;; When running on the hand-made /dev, + ;; 'disk-partitions' could return partitions for which + ;; we have no /dev node. Handle that gracefully. + (if (= ENOENT (system-error-errno args)) + (begin + (format (current-error-port) + "warning: device '~a' not found~%" + device) + #f) + (apply throw args)))))) (and sblock (let ((volume (ext2-superblock-volume-name sblock))) (and volume