gnu: build: file-systems: Return uuid records.

* gnu/bootloader.scm (menu-entry->sexp, sexp->menu-entry): Swap order in
match subprocedures.
* gnu/build/file-systems.scm (ext2-superblock-uuid,
linux-swap-superblock-uuid, bcachefs-superblock-external-uuid,
btrfs-superblock-uuid, exfat-superblock-uuid, fat32-superblock-uuid,
fat16-superblock-uuid, iso9660-superblock-uuid, jfs-superblock-uuid,
f2fs-superblock-uuid, luks-header-uuid, ntfs-superblock-uuid,
xfs-superblock-uuid): Wrap bytevector in uuid record.
* gnu/build/image.scm (make-iso9660-image): Take uuid as string.
* gnu/installer/parted.scm (user-partition->file-system): Do not provide
uuid-type.
* gnu/system/image.scm (system-iso9660-image): Convert uuid to string.
* gnu/system/uuid.scm (dce-uuid->string, iso9660-uuid->string): Do not
export.

Change-Id: I35435de0d808e66e17fd9b54247a7a11a93ecd62
This commit is contained in:
Herman Rimm 2024-10-01 13:35:08 +02:00 committed by Ryan Schanzenbacher
parent ecbf0794d7
commit 92ecc0adfa
Signed by: ryan77627
GPG key ID: 81B0E222A3E2308E
7 changed files with 45 additions and 49 deletions

View file

@ -185,7 +185,7 @@ (define (menu-entry->sexp entry)
(define (device->sexp device) (define (device->sexp device)
(match device (match device
((? uuid? uuid) ((? uuid? uuid)
`(uuid ,(uuid-type uuid) ,(uuid->string uuid))) `(uuid ,(uuid->string uuid) ,(uuid-type uuid)))
((? file-system-label? label) ((? file-system-label? label)
`(label ,(file-system-label->string label))) `(label ,(file-system-label->string label)))
(_ device))) (_ device)))
@ -229,7 +229,7 @@ (define (sexp->menu-entry sexp)
(define subvol #f) (define subvol #f)
(define (sexp->device device-sexp) (define (sexp->device device-sexp)
(match device-sexp (match device-sexp
(('uuid type uuid-string) (('uuid uuid-string type)
(uuid uuid-string type)) (uuid uuid-string type))
(('label label) (('label label)
(file-system-label label)) (file-system-label label))

View file

@ -230,8 +230,8 @@ (define EXT3_FEATURE_INCOMPAT_RECOVER #x0004) ;journal needs recovery
(else (error "invalid ext2 superblock state" state))))) (else (error "invalid ext2 superblock state" state)))))
(define (ext2-superblock-uuid sblock) (define (ext2-superblock-uuid sblock)
"Return the UUID of ext2 superblock SBLOCK as a 16-byte bytevector." "Return the <uuid> for ext2 superblock SBLOCK."
(sub-bytevector sblock 104 16)) (bytevector->uuid (sub-bytevector sblock 104 16) 'ext2))
(define (ext2-superblock-volume-name sblock) (define (ext2-superblock-volume-name sblock)
"Return the volume name of ext2 superblock SBLOCK as a string of at most 16 "Return the volume name of ext2 superblock SBLOCK as a string of at most 16
@ -293,8 +293,8 @@ (define (read-linux-swap-superblock device)
;; See 'union swap_header' in 'include/linux/swap.h'. ;; See 'union swap_header' in 'include/linux/swap.h'.
(define (linux-swap-superblock-uuid sblock) (define (linux-swap-superblock-uuid sblock)
"Return the UUID of Linux-swap superblock SBLOCK as a 16-byte bytevector." "Return the <uuid> for Linux-swap superblock SBLOCK."
(sub-bytevector sblock (+ 1024 4 4 4) 16)) (bytevector->uuid (sub-bytevector sblock (+ 1024 4 4 4) 16)))
(define (linux-swap-superblock-volume-name sblock) (define (linux-swap-superblock-volume-name sblock)
"Return the label of Linux-swap superblock SBLOCK as a string." "Return the label of Linux-swap superblock SBLOCK as a string."
@ -363,9 +363,8 @@ (define (read-bcachefs-superblock device)
(read-superblock device 4096 104 bcachefs-superblock?)) (read-superblock device 4096 104 bcachefs-superblock?))
(define (bcachefs-superblock-external-uuid sblock) (define (bcachefs-superblock-external-uuid sblock)
"Return the external UUID of bcachefs superblock SBLOCK as a 16-byte "Return the external UUID of bcachefs superblock SBLOCK as an <uuid>."
bytevector." (bytevector->uuid (sub-bytevector sblock 56 16) 'bcachefs))
(sub-bytevector sblock 56 16))
(define (bcachefs-superblock-volume-name sblock) (define (bcachefs-superblock-volume-name sblock)
"Return the volume name of bcachefs superblock SBLOCK as a string of at most "Return the volume name of bcachefs superblock SBLOCK as a string of at most
@ -416,8 +415,8 @@ (define (read-btrfs-superblock device)
(read-superblock device 65536 4096 btrfs-superblock?)) (read-superblock device 65536 4096 btrfs-superblock?))
(define (btrfs-superblock-uuid sblock) (define (btrfs-superblock-uuid sblock)
"Return the UUID of a btrfs superblock SBLOCK as a 16-byte bytevector." "Return the <uuid> for a btrfs superblock SBLOCK."
(sub-bytevector sblock 32 16)) (bytevector->uuid (sub-bytevector sblock 32 16) 'btrfs))
(define (btrfs-superblock-volume-name sblock) (define (btrfs-superblock-volume-name sblock)
"Return the volume name of btrfs superblock SBLOCK as a string of at most 256 "Return the volume name of btrfs superblock SBLOCK as a string of at most 256
@ -535,10 +534,11 @@ (define (exfat-superblock-volume-name sblock)
#f)))) #f))))
(define (exfat-superblock-uuid sblock) (define (exfat-superblock-uuid sblock)
"Return the Volume Serial Number of exFAT superblock SBLOCK as a bytevector. "Return the Volume Serial Number of exFAT superblock SBLOCK as a
This 4-byte identifier is guaranteed to exist, unlike the optional 16-byte <uuid> record. This 4-byte identifier is guaranteed to exist, unlike
Volume GUID from section 7.5 of the exFAT specification." the optional 16-byte Volume GUID from section 7.5 of the exFAT
(sub-bytevector sblock 100 4)) specification."
(bytevector->uuid (sub-bytevector sblock 100 4) 'exfat))
(define (check-exfat-file-system device force? repair) (define (check-exfat-file-system device force? repair)
"Return the health of an unmounted exFAT file system on DEVICE. If FORCE? "Return the health of an unmounted exFAT file system on DEVICE. If FORCE?
@ -576,8 +576,8 @@ (define (read-fat32-superblock device)
(read-superblock device 0 90 fat32-superblock?)) (read-superblock device 0 90 fat32-superblock?))
(define (fat32-superblock-uuid sblock) (define (fat32-superblock-uuid sblock)
"Return the Volume ID of a fat superblock SBLOCK as a 4-byte bytevector." "Return the Volume ID of a fat superblock SBLOCK as a <uuid> record."
(sub-bytevector sblock 67 4)) (bytevector->uuid (sub-bytevector sblock 67 4) 'fat32))
(define (fat32-superblock-volume-name sblock) (define (fat32-superblock-volume-name sblock)
"Return the volume name of fat superblock SBLOCK as a string of at most 11 "Return the volume name of fat superblock SBLOCK as a string of at most 11
@ -616,8 +616,8 @@ (define (read-fat16-superblock device)
(read-superblock device 0 62 fat16-superblock?)) (read-superblock device 0 62 fat16-superblock?))
(define (fat16-superblock-uuid sblock) (define (fat16-superblock-uuid sblock)
"Return the Volume ID of a fat superblock SBLOCK as a 4-byte bytevector." "Return the Volume ID of a fat superblock SBLOCK as a <uuid> record."
(sub-bytevector sblock 39 4)) (bytevector->uuid (sub-bytevector sblock 39 4) 'fat16))
(define (fat16-superblock-volume-name sblock) (define (fat16-superblock-volume-name sblock)
"Return the volume name of fat superblock SBLOCK as a string of at most 11 "Return the volume name of fat superblock SBLOCK as a string of at most 11
@ -667,7 +667,7 @@ (define (read-iso9660-superblock device)
(define (iso9660-superblock-uuid sblock) (define (iso9660-superblock-uuid sblock)
"Return the modification time of an iso9660 primary volume descriptor "Return the modification time of an iso9660 primary volume descriptor
SBLOCK as a bytevector. If that's not set, returns the creation time." SBLOCK as a <uuid>. If that's not set, returns the creation time."
;; Drops GMT offset for compatibility with Grub, blkid and /dev/disk/by-uuid. ;; Drops GMT offset for compatibility with Grub, blkid and /dev/disk/by-uuid.
;; Compare Grub: "2014-12-02-19-30-23-00". ;; Compare Grub: "2014-12-02-19-30-23-00".
;; Compare blkid result: "2014-12-02-19-30-23-00". ;; Compare blkid result: "2014-12-02-19-30-23-00".
@ -678,7 +678,7 @@ (define (iso9660-superblock-uuid sblock)
(time (if (bytevector=? unset-time modification-time) (time (if (bytevector=? unset-time modification-time)
creation-time creation-time
modification-time))) modification-time)))
(sub-bytevector time 0 16))) ; strips GMT offset. (bytevector->uuid (sub-bytevector time 0 16)) 'iso9660)) ; strips GMT offset.
(define (iso9660-superblock-volume-name sblock) (define (iso9660-superblock-volume-name sblock)
"Return the volume name of iso9660 superblock SBLOCK as a string. The volume "Return the volume name of iso9660 superblock SBLOCK as a string. The volume
@ -709,8 +709,8 @@ (define (read-jfs-superblock device)
(read-superblock device 32768 184 jfs-superblock?)) (read-superblock device 32768 184 jfs-superblock?))
(define (jfs-superblock-uuid sblock) (define (jfs-superblock-uuid sblock)
"Return the UUID of JFS superblock SBLOCK as a 16-byte bytevector." "Return the <uuid> for JFS superblock SBLOCK."
(sub-bytevector sblock 136 16)) (bytevector->uuid (sub-bytevector sblock 136 16) 'jfs))
(define (jfs-superblock-volume-name sblock) (define (jfs-superblock-volume-name sblock)
"Return the volume name of JFS superblock SBLOCK as a string of at most 16 "Return the volume name of JFS superblock SBLOCK as a string of at most 16
@ -775,12 +775,13 @@ (define (read-f2fs-superblock device)
f2fs-superblock?)) f2fs-superblock?))
(define (f2fs-superblock-uuid sblock) (define (f2fs-superblock-uuid sblock)
"Return the UUID of F2FS superblock SBLOCK as a 16-byte bytevector." "Return the <uuid> for F2FS superblock SBLOCK."
(sub-bytevector sblock (bytevector->uuid (sub-bytevector sblock
(- (+ #x460 12) (- (+ #x460 12)
;; subtract superblock offset ;; subtract superblock offset
#x400) #x400)
16)) 16)
'f2fs))
(define (f2fs-superblock-volume-name sblock) (define (f2fs-superblock-volume-name sblock)
"Return the volume name of F2FS superblock SBLOCK as a string of at most 512 "Return the volume name of F2FS superblock SBLOCK as a string of at most 512
@ -847,11 +848,10 @@ (define (read-luks-header file)
(read-superblock file 0 592 luks-superblock?)) (read-superblock file 0 592 luks-superblock?))
(define (luks-header-uuid header) (define (luks-header-uuid header)
"Return the LUKS UUID from HEADER, as a 16-byte bytevector." "Return the LUKS UUID from HEADER, as a <uuid> record."
;; 40 bytes are reserved for the UUID, but in practice, it contains the 36 ;; 40 bytes are reserved for the UUID, but in practice, it contains
;; bytes of its ASCII representation. ;; the 36 bytes of its ASCII representation.
(let ((uuid (sub-bytevector header 168 36))) (bytevector->uuid (utf8->string (sub-bytevector header 168 36)) 'luks))
(string->uuid (utf8->string uuid))))
;;; ;;;
@ -875,8 +875,8 @@ (define (read-ntfs-superblock device)
(read-superblock device 0 511 ntfs-superblock?)) (read-superblock device 0 511 ntfs-superblock?))
(define (ntfs-superblock-uuid sblock) (define (ntfs-superblock-uuid sblock)
"Return the UUID of NTFS superblock SBLOCK as a 8-byte bytevector." "Return the <uuid> for the NTFS superblock SBLOCK."
(sub-bytevector sblock 72 8)) (bytevector->uuid (sub-bytevector sblock 72 8) 'ntfs))
;; TODO: Add ntfs-superblock-volume-name. The partition label is not stored ;; TODO: Add ntfs-superblock-volume-name. The partition label is not stored
;; in the BOOT SECTOR like the UUID, but in the MASTER FILE TABLE, which seems ;; in the BOOT SECTOR like the UUID, but in the MASTER FILE TABLE, which seems
@ -917,8 +917,8 @@ (define (read-xfs-superblock device)
(read-superblock device 0 120 xfs-superblock?)) (read-superblock device 0 120 xfs-superblock?))
(define (xfs-superblock-uuid sblock) (define (xfs-superblock-uuid sblock)
"Return the UUID of XFS superblock SBLOCK as a 16-byte bytevector." "Return the <uuid> for XFS superblock SBLOCK."
(sub-bytevector sblock 32 16)) (bytevector->uuid (sub-bytevector sblock 32 16) 'xfs))
(define (xfs-superblock-volume-name sblock) (define (xfs-superblock-volume-name sblock)
"Return the volume name of XFS superblock SBLOCK as a string of at most 12 "Return the volume name of XFS superblock SBLOCK as a string of at most 12
@ -1178,8 +1178,7 @@ (define (resolve find-partition spec fmt)
identity)) identity))
((? uuid?) ((? uuid?)
(resolve find-partition-by-uuid (resolve find-partition-by-uuid
(uuid-bytevector spec) spec uuid->string))))
uuid->string))))
(define (check-file-system device type force? repair) (define (check-file-system device type force? repair)
"Check an unmounted TYPE file system on DEVICE. Do nothing but warn if it is "Check an unmounted TYPE file system on DEVICE. Do nothing but warn if it is

View file

@ -281,7 +281,7 @@ (define grub-mkrescue-sed.sh
;; On 32-bit systems the 2nd argument must be ;; On 32-bit systems the 2nd argument must be
;; lower than 2^32. ;; lower than 2^32.
(string-hash (iso9660-uuid->string volume-uuid) (string-hash volume-uuid
(- (expt 2 32) 1)) (- (expt 2 32) 1))
#x77777777) #x77777777)
@ -329,6 +329,5 @@ (define grub-mkrescue-sed.sh
`("-volume_date" "uuid" `("-volume_date" "uuid"
,(string-filter (lambda (value) ,(string-filter (lambda (value)
(not (char=? #\- value))) (not (char=? #\- value)))
(iso9660-uuid->string volume-uuid))
volume-uuid)))
'())))) '()))))

View file

@ -1418,7 +1418,7 @@ (define (user-partition->file-system user-partition)
(upper-file-name (user-partition-upper-file-name user-partition)) (upper-file-name (user-partition-upper-file-name user-partition))
;; Only compute uuid if partition is not encrypted. ;; Only compute uuid if partition is not encrypted.
(uuid (or crypt-label (uuid (or crypt-label
(uuid->string (read-partition-uuid file-name) fs-type)))) (uuid->string (read-partition-uuid file-name)))))
`(file-system `(file-system
(mount-point ,mount-point) (mount-point ,mount-point)
(device ,@(if crypt-label (device ,@(if crypt-label

View file

@ -2626,7 +2626,7 @@ (define device-lookup
(cond ((swap-space? swap) (cond ((swap-space? swap)
(let ((target (swap-space-target swap))) (let ((target (swap-space-target swap)))
(cond ((uuid? target) (cond ((uuid? target)
#~(find-partition-by-uuid #$(uuid-bytevector target))) #~(find-partition-by-uuid #$target))
((file-system-label? target) ((file-system-label? target)
#~(find-partition-by-label #~(find-partition-by-label
#$(file-system-label->string target))) #$(file-system-label->string target)))
@ -2634,7 +2634,7 @@ (define device-lookup
target)))) target))))
; TODO Remove after deprecation ; TODO Remove after deprecation
((uuid? swap) ((uuid? swap)
#~(find-partition-by-uuid #$(uuid-bytevector swap))) #~(find-partition-by-uuid #$swap))
((file-system-label? swap) ((file-system-label? swap)
#~(find-partition-by-label #~(find-partition-by-label
#$(file-system-label->string swap))) #$(file-system-label->string swap)))

View file

@ -620,7 +620,7 @@ (define root-label
(define root-uuid (define root-uuid
(match (image-partitions image) (match (image-partitions image)
((partition) ((partition)
(uuid-bytevector (partition-uuid partition))))) (and=> (partition-uuid partition) uuid->string))))
(let* ((os (image-operating-system image)) (let* ((os (image-operating-system image))
(compression? (image-compression? image)) (compression? (image-compression? image))

View file

@ -35,7 +35,6 @@ (define-module (gnu system uuid)
bytevector->uuid bytevector->uuid
uuid->string uuid->string
dce-uuid->string
string->uuid string->uuid
string->dce-uuid string->dce-uuid
string->iso9660-uuid string->iso9660-uuid
@ -48,7 +47,6 @@ (define-module (gnu system uuid)
string->jfs-uuid string->jfs-uuid
string->ntfs-uuid string->ntfs-uuid
string->xfs-uuid string->xfs-uuid
iso9660-uuid->string
;; XXX: For lack of a better place. ;; XXX: For lack of a better place.
sub-bytevector sub-bytevector