image: Add partition file-system options support.

* gnu/image.scm (<partition>)[file-system-options]: New field,
(partition-file-system-options): new exported procedure.
* gnu/system/image.scm (partition->gexp): Adapt accordingly.
* gnu/build/image.scm (sexp->partition): Also adapt accordingly,
(make-ext-image): and pass file-system options to mke2fs.
This commit is contained in:
Mathieu Othacehe 2020-05-26 16:25:25 +02:00
parent 6ac7526e48
commit bd3716f6fe
No known key found for this signature in database
GPG key ID: 8354763531769CA6
3 changed files with 28 additions and 20 deletions

View file

@ -47,9 +47,10 @@ (define (sexp->partition sexp)
"Take SEXP, a tuple as returned by 'partition->gexp', and turn it into a
<partition> record."
(match sexp
((size file-system label uuid)
((size file-system file-system-options label uuid)
(partition (size size)
(file-system file-system)
(file-system-options file-system-options)
(label label)
(uuid uuid)))))
@ -71,19 +72,22 @@ (define* (make-ext-image partition target root
'make-partition-image'."
(let ((size (partition-size partition))
(fs (partition-file-system partition))
(fs-options (partition-file-system-options partition))
(label (partition-label partition))
(uuid (partition-uuid partition))
(options "lazy_itable_init=1,lazy_journal_init=1"))
(invoke "mke2fs" "-t" fs "-d" root
"-L" label "-U" (uuid->string uuid)
"-E" (format #f "root_owner=~a:~a,~a"
owner-uid owner-gid options)
target
(format #f "~ak"
(size-in-kib
(if (eq? size 'guess)
(estimate-partition-size root)
size))))))
(journal-options "lazy_itable_init=1,lazy_journal_init=1"))
(apply invoke
`("mke2fs" "-t" ,fs "-d" ,root
"-L" ,label "-U" ,(uuid->string uuid)
"-E" ,(format #f "root_owner=~a:~a,~a"
owner-uid owner-gid journal-options)
,@fs-options
,target
,(format #f "~ak"
(size-in-kib
(if (eq? size 'guess)
(estimate-partition-size root)
size)))))))
(define* (make-vfat-image partition target root)
"Handle the creation of VFAT partition images. See 'make-partition-image'."

View file

@ -24,6 +24,7 @@ (define-module (gnu image)
partition-size
partition-offset
partition-file-system
partition-file-system-options
partition-label
partition-uuid
partition-flags
@ -46,14 +47,16 @@ (define-module (gnu image)
(define-record-type* <partition> partition make-partition
partition?
(device partition-device (default #f))
(size partition-size)
(offset partition-offset (default 0))
(file-system partition-file-system (default "ext4"))
(label partition-label (default #f))
(uuid partition-uuid (default #f))
(flags partition-flags (default '()))
(initializer partition-initializer (default #f)))
(device partition-device (default #f))
(size partition-size)
(offset partition-offset (default 0))
(file-system partition-file-system (default "ext4"))
(file-system-options partition-file-system-options
(default '()))
(label partition-label (default #f))
(uuid partition-uuid (default #f))
(flags partition-flags (default '()))
(initializer partition-initializer (default #f)))
;;;

View file

@ -117,6 +117,7 @@ (define (partition->gexp partition)
'make-partition-image'."
#~'(#$@(list (partition-size partition))
#$(partition-file-system partition)
#$(partition-file-system-options partition)
#$(partition-label partition)
#$(and=> (partition-uuid partition)
uuid-bytevector)))