Skip to content

Commit

Permalink
actions: image-partition: enable creation of FAT{12|16|32} partitions
Browse files Browse the repository at this point in the history
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 <chris.obbard@collabora.com>
  • Loading branch information
obbardc committed Apr 7, 2024
1 parent 3a3ad05 commit e608f15
Showing 1 changed file with 21 additions and 8 deletions.
29 changes: 21 additions & 8 deletions actions/image_partition_action.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down Expand Up @@ -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+")
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
}
}
Expand Down

0 comments on commit e608f15

Please sign in to comment.