From e608f153c0d242aa405d063e4307a4ad30745d33 Mon Sep 17 00:00:00 2001 From: Christopher Obbard Date: Tue, 19 Mar 2024 17:43:42 +0000 Subject: [PATCH] actions: image-partition: enable creation of FAT{12|16|32} partitions mkfs.fat accepts an -F parameter, which controls the FAT type. Currently debos only allows creation of FAT32 partitions with the `vfat` partition type or automatic FAT type by using `fat` or `msdos`. Add explicit `fat16`, `fat16` and `fat32` partition types which control which FAT partition type will be created. Modify `fat` and `msdos` partition types to let mkfs.fat automatically determine which FAT type the partition should be. Allow `fat16` partitions to be marked as such in the partition table by modifying the call to `parted mkpart`. Also rework other areas of the image-partition code relating to fat partition creation. Signed-off-by: Christopher Obbard --- actions/image_partition_action.go | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/actions/image_partition_action.go b/actions/image_partition_action.go index 61ac62bb..fe35f13b 100644 --- a/actions/image_partition_action.go +++ b/actions/image_partition_action.go @@ -342,8 +342,20 @@ func (i ImagePartitionAction) formatPartition(p *Partition, context debos.DebosC cmdline := []string{} switch p.FS { - case "vfat": - cmdline = append(cmdline, "mkfs.vfat", "-F32", "-n", p.Name) + case "fat", "fat12", "fat16", "fat32", "msdos", "vfat": + cmdline = append(cmdline, "mkfs.vfat", "-n", p.Name) + + switch p.FS { + case "fat12": + cmdline = append(cmdline, "-F12") + case "fat16": + cmdline = append(cmdline, "-F16") + case "fat32": + cmdline = append(cmdline, "-F32") + default: + break + } + if len(p.FSUUID) > 0 { cmdline = append(cmdline, "-i", p.FSUUID) } @@ -498,7 +510,11 @@ func (i ImagePartitionAction) Run(context *debos.DebosContext) error { command := []string{"parted", "-a", "none", "-s", "--", context.Image, "mkpart", name} switch p.FS { - case "vfat": + case "fat16": + command = append(command, "fat16") + case "fat", "fat12", "fat32", "msdos", "vfat": + /* TODO: Not sure if this is correct. Perhaps + fat12 should be treated the same as fat16 ? */ command = append(command, "fat32") case "hfsplus": command = append(command, "hfs+") @@ -753,7 +769,7 @@ func (i *ImagePartitionAction) Verify(context *debos.DebosContext) error { if err != nil { return fmt.Errorf("Incorrect UUID %s", p.FSUUID) } - case "vfat", "fat32": + case "fat", "fat12", "fat16", "fat32", "msdos", "vfat": _, err := hex.DecodeString(p.FSUUID) if err != nil || len(p.FSUUID) != 8 { return fmt.Errorf("Incorrect UUID %s, should be 32-bit hexadecimal number", p.FSUUID) @@ -799,10 +815,7 @@ func (i *ImagePartitionAction) Verify(context *debos.DebosContext) error { return fmt.Errorf("Partition %s missing end", p.Name) } - switch p.FS { - case "fat32": - p.FS = "vfat" - case "": + if p.FS == "" { return fmt.Errorf("Partition %s missing fs type", p.Name) } }