M doc/guix.texi => doc/guix.texi +1 -1
@@ 48340,7 48340,7 @@ there is no offset applied.
The partition file system as a string, defaulting to @code{"ext4"}.
The supported values are @code{"vfat"}, @code{"fat16"}, @code{"fat32"},
-and @code{"ext4"}.
+@code{"btrfs"}, and @code{"ext4"}.
@code{"vfat"}, @code{"fat16"}, and @code{"fat32"} partitions without the
@code{'esp} flag are by default LBA compatible.
M gnu/build/image.scm => gnu/build/image.scm +19 -0
@@ 73,6 73,23 @@ turn doesn't take any constant overhead into account, force a 1-MiB minimum."
(max (ash 1 20)
(* 1.25 (file-size root))))
+(define* (make-btrfs-image partition target root)
+ "Handle the creation of BTRFS partition images. See
+'make-partition-image'."
+ (let ((size (partition-size partition))
+ (fs-options (partition-file-system-options partition))
+ (label (partition-label partition))
+ (uuid (partition-uuid partition)))
+ (apply invoke
+ `("fakeroot" "mkfs.btrfs" "-r" ,root
+ "-L" ,label
+ ,@(if uuid
+ `("-U" ,(uuid->string uuid))
+ '())
+ "--shrink"
+ ,@fs-options
+ ,target))))
+
(define* (make-ext-image partition target root
#:key
(owner-uid 0)
@@ 141,6 158,8 @@ ROOT directory to populate the image."
(let* ((partition (sexp->partition partition-sexp))
(type (partition-file-system partition)))
(cond
+ ((string=? "btrfs" type)
+ (make-btrfs-image partition target root))
((string-prefix? "ext" type)
(make-ext-image partition target root))
((or (string=? type "vfat") (string=? type "fat16"))
M gnu/system/image.scm => gnu/system/image.scm +6 -2
@@ 402,7 402,8 @@ used in the image."
(file-system (partition-file-system partition)))
(cond
((member 'esp flags) "0xEF")
- ((string-prefix? "ext" file-system) "0x83")
+ ((or (string=? file-system "btrfs")
+ (string-prefix? "ext" file-system)) "0x83")
((or (string=? file-system "vfat")
(string=? file-system "fat16")) "0x0E")
((string=? file-system "fat32") "0x0C")
@@ 421,7 422,8 @@ used in the image."
(file-system (partition-file-system partition)))
(cond
((member 'esp flags) "U")
- ((string-prefix? "ext" file-system) "L")
+ ((or (string=? file-system "btrfs")
+ (string-prefix? "ext" file-system)) "L")
((or (string=? file-system "vfat")
(string=? file-system "fat16")
(string=? file-system "fat32")) "F")
@@ 453,6 455,8 @@ used in the image."
(let ((initializer (or #$(partition-initializer partition)
initialize-root-partition))
(inputs '#+(cond
+ ((string=? type "btrfs")
+ (list btrfs-progs fakeroot))
((string-prefix? "ext" type)
(list e2fsprogs fakeroot))
((or (string=? type "vfat")