debian-forge-composer/internal/disk/customizations.go
Christian Kellner 1dbd2bc364 disk: use new alignment helper to align partitions
Align partitions during their re-layout. Specifically, we align the
first partition which removes the need for the hard coded magic
number of 2048, which represents the proper alignment for a grain
size of 1MB given a sector size of 512 (our setup).

NB: Since all our partitions should sizes that are themselves
aligned, i.e. evenly dividable by the default grain (1MB) this
will not actually change any manifest.
2022-02-22 19:23:41 +00:00

56 lines
1.6 KiB
Go

package disk
import (
"math/rand"
"github.com/osbuild/osbuild-composer/internal/blueprint"
)
const (
BIOSBootPartitionGUID = "21686148-6449-6E6F-744E-656564454649"
BIOSBootPartitionUUID = "FAC7F1FB-3E8D-4137-A512-961DE09A5549"
FilesystemDataGUID = "0FC63DAF-8483-4772-8E79-3D69D8477DE4"
FilesystemDataUUID = "CB07C243-BC44-4717-853E-28852021225B"
EFISystemPartitionGUID = "C12A7328-F81F-11D2-BA4B-00A0C93EC93B"
EFISystemPartitionUUID = "68B2905B-DF3E-4FB3-80FA-49D1E773AA33"
EFIFilesystemUUID = "7B77-95E7"
RootPartitionUUID = "6264D520-3FB9-423F-8AB8-7A0A8E3D3562"
)
func CreatePartitionTable(
mountpoints []blueprint.FilesystemCustomization,
imageSize uint64,
basePartitionTable *PartitionTable,
rng *rand.Rand,
) (PartitionTable, error) {
// we are modifying the contents of the base partition table,
// including the file systems, which are shared among shallow
// copies of the partition table, so make a copy first
table := basePartitionTable.Clone()
for _, m := range mountpoints {
sectors := table.BytesToSectors(m.MinSize)
// if we already have a partition ensure that the
// size is at least the requested size, otherwise
// create a new filesystem with that size
part := table.FindPartitionForMountpoint(m.Mountpoint)
if part != nil {
part.EnsureSize(sectors)
} else {
table.CreateFilesystem(m.Mountpoint, sectors)
}
}
// Calculate partition table offsets and sizes
table.updatePartitionStartPointOffsets(imageSize)
// Generate new UUIDs for filesystems and partitions
table.GenerateUUIDs(rng)
return *table, nil
}