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.
This commit is contained in:
Ludovic Courtès 2014-06-01 21:20:54 +02:00
parent 10d86d54f0
commit 009d831167
1 changed files with 14 additions and 1 deletions

View File

@ -178,7 +178,20 @@ if DEVICE does not contain an ext2 file system."
return #t if that partition's volume name is LABEL." return #t if that partition's volume name is LABEL."
(lambda (part) (lambda (part)
(let* ((device (string-append "/dev/" 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 (and sblock
(let ((volume (ext2-superblock-volume-name sblock))) (let ((volume (ext2-superblock-volume-name sblock)))
(and volume (and volume