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` or `fat32`
partition types or automatic FAT type by using `msdos`.

Add explicit `fat16`, `fat16` and `fat32` partition types to allow users
to choose which FAT partition type to create.

Modify `vfat` and `msdos` to create FAT32 partition types and modify `fat`
to allow 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`.

Signed-off-by: Christopher Obbard <[email protected]>
  • Loading branch information
obbardc committed Apr 7, 2024
1 parent 3a3ad05 commit 2c3a629
Showing 1 changed file with 22 additions and 8 deletions.
30 changes: 22 additions & 8 deletions actions/image_partition_action.go
Original file line number Diff line number Diff line change
Expand Up @@ -342,8 +342,21 @@ 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", "msdos", "vfat":
cmdline = append(cmdline, "-F32")
default:
/* let mkfs.vfat autodetermine FAT type */
break
}

if len(p.FSUUID) > 0 {
cmdline = append(cmdline, "-i", p.FSUUID)
}
Expand Down Expand Up @@ -498,7 +511,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 +770,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 +816,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 2c3a629

Please sign in to comment.