Skip to content

Commit 89e1a72

Browse files
committed
address comments
1 parent 1188074 commit 89e1a72

File tree

6 files changed

+55
-30
lines changed

6 files changed

+55
-30
lines changed

toolkit/tools/pkg/imagecustomizerlib/cosicommon.go

+8-5
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,14 @@ func convertToCosi(ic *ImageCustomizerParameters) error {
3636
}
3737
defer imageLoopback.Close()
3838

39-
partitionMetadataOutput, err := extractPartitions(imageLoopback.DevicePath(), outputDir, ic.outputImageBase, "raw-zst", ic.imageUuid)
39+
partitionMetadataOutput, err := extractPartitions(imageLoopback.DevicePath(), outputDir, ic.outputImageBase,
40+
"raw-zst", ic.imageUuid)
4041
if err != nil {
4142
return err
4243
}
4344

44-
err = buildCosiFile(outputDir, ic.outputImageFile, partitionMetadataOutput, ic.verityMetadata, ic.imageUuidStr)
45+
err = buildCosiFile(outputDir, ic.outputImageFile, partitionMetadataOutput, ic.verityMetadata, ic.partUuidToMountPath,
46+
ic.imageUuidStr)
4547
if err != nil {
4648
return fmt.Errorf("failed to build COSI file:\n%w", err)
4749
}
@@ -56,8 +58,9 @@ func convertToCosi(ic *ImageCustomizerParameters) error {
5658
return nil
5759
}
5860

59-
func buildCosiFile(sourceDir string, outputFile string, partitions []outputPartitionMetadata, verityMetadata []verityDeviceMetadata, imageUuidStr string) error {
60-
61+
func buildCosiFile(sourceDir string, outputFile string, partitions []outputPartitionMetadata,
62+
verityMetadata []verityDeviceMetadata, partUuidToMountPath map[string]string, imageUuidStr string,
63+
) error {
6164
// Pre-compute a map for quick lookup of partition metadata by UUID
6265
partUuidToMetadata := make(map[string]outputPartitionMetadata)
6366
for _, partition := range partitions {
@@ -84,7 +87,7 @@ func buildCosiFile(sourceDir string, outputFile string, partitions []outputParti
8487
UncompressedSize: partition.UncompressedSize,
8588
},
8689
PartType: partition.PartitionTypeUuid,
87-
MountPoint: partition.Mountpoint,
90+
MountPoint: partUuidToMountPath[partition.PartUuid],
8891
FsType: partition.FileSystemType,
8992
FsUuid: partition.Uuid,
9093
}

toolkit/tools/pkg/imagecustomizerlib/customizepartitionsfilecopy.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
func customizePartitionsUsingFileCopy(buildDir string, baseConfigPath string, config *imagecustomizerapi.Config,
1717
buildImageFile string, newBuildImageFile string,
1818
) (map[string]string, error) {
19-
existingImageConnection, err := connectToExistingImage(buildImageFile, buildDir, "imageroot", false)
19+
existingImageConnection, _, err := connectToExistingImage(buildImageFile, buildDir, "imageroot", false)
2020
if err != nil {
2121
return nil, err
2222
}

toolkit/tools/pkg/imagecustomizerlib/imagecustomizer.go

+12-7
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ type ImageCustomizerParameters struct {
8484
imageUuidStr string
8585

8686
verityMetadata []verityDeviceMetadata
87+
88+
partUuidToMountPath map[string]string
8789
}
8890

8991
type verityDeviceMetadata struct {
@@ -388,12 +390,15 @@ func customizeOSContents(ic *ImageCustomizerParameters) error {
388390
ic.rawImageFile = newRawImageFile
389391

390392
// Customize the raw image file.
391-
err = customizeImageHelper(ic.buildDirAbs, ic.configPath, ic.config, ic.rawImageFile, ic.rpmsSources,
393+
partUuidToMountPath, err := customizeImageHelper(ic.buildDirAbs, ic.configPath, ic.config, ic.rawImageFile, ic.rpmsSources,
392394
ic.useBaseImageRpmRepos, partitionsCustomized, ic.imageUuidStr)
393395
if err != nil {
394396
return err
395397
}
396398

399+
// Set partition to mountpath mapping for COSI.
400+
ic.partUuidToMountPath = partUuidToMountPath
401+
397402
// Shrink the filesystems.
398403
if ic.enableShrinkFilesystems {
399404
err = shrinkFilesystemsHelper(ic.rawImageFile, ic.config.Storage.Verity, partIdToPartUuid)
@@ -713,12 +718,12 @@ func validatePackageLists(baseConfigPath string, config *imagecustomizerapi.OS,
713718
func customizeImageHelper(buildDir string, baseConfigPath string, config *imagecustomizerapi.Config,
714719
rawImageFile string, rpmsSources []string, useBaseImageRpmRepos bool, partitionsCustomized bool,
715720
imageUuidStr string,
716-
) error {
721+
) (map[string]string, error) {
717722
logger.Log.Debugf("Customizing OS")
718723

719-
imageConnection, err := connectToExistingImage(rawImageFile, buildDir, "imageroot", true)
724+
imageConnection, partUuidToMountPath, err := connectToExistingImage(rawImageFile, buildDir, "imageroot", true)
720725
if err != nil {
721-
return err
726+
return nil, err
722727
}
723728
defer imageConnection.Close()
724729

@@ -738,15 +743,15 @@ func customizeImageHelper(buildDir string, baseConfigPath string, config *imagec
738743
warnOnLowFreeSpace(buildDir, imageConnection)
739744

740745
if err != nil {
741-
return err
746+
return nil, err
742747
}
743748

744749
err = imageConnection.CleanClose()
745750
if err != nil {
746-
return err
751+
return nil, err
747752
}
748753

749-
return nil
754+
return partUuidToMountPath, nil
750755
}
751756

752757
func extractPartitionsHelper(rawImageFile string, outputDir string, outputBasename string, outputSplitPartitionsFormat string, imageUuid [UuidSize]byte) error {

toolkit/tools/pkg/imagecustomizerlib/imageutils.go

+32-10
Original file line numberDiff line numberDiff line change
@@ -21,41 +21,49 @@ import (
2121
type installOSFunc func(imageChroot *safechroot.Chroot) error
2222

2323
func connectToExistingImage(imageFilePath string, buildDir string, chrootDirName string, includeDefaultMounts bool,
24-
) (*ImageConnection, error) {
24+
) (*ImageConnection, map[string]string, error) {
2525
imageConnection := NewImageConnection()
2626

27-
err := connectToExistingImageHelper(imageConnection, imageFilePath, buildDir, chrootDirName, includeDefaultMounts)
27+
partUuidToMountPath, err := connectToExistingImageHelper(imageConnection, imageFilePath, buildDir, chrootDirName, includeDefaultMounts)
2828
if err != nil {
2929
imageConnection.Close()
30-
return nil, err
30+
return nil, nil, err
3131
}
32-
return imageConnection, nil
32+
return imageConnection, partUuidToMountPath, nil
3333
}
3434

3535
func connectToExistingImageHelper(imageConnection *ImageConnection, imageFilePath string,
3636
buildDir string, chrootDirName string, includeDefaultMounts bool,
37-
) error {
37+
) (map[string]string, error) {
3838
// Connect to image file using loopback device.
3939
err := imageConnection.ConnectLoopback(imageFilePath)
4040
if err != nil {
41-
return err
41+
return nil, err
42+
}
43+
44+
partitions, err := diskutils.GetDiskPartitions(imageConnection.Loopback().DevicePath())
45+
if err != nil {
46+
return nil, err
4247
}
4348

4449
// Look for all the partitions on the image.
45-
mountPoints, err := findPartitions(buildDir, imageConnection.Loopback().DevicePath())
50+
mountPoints, err := findPartitions(buildDir, partitions)
4651
if err != nil {
47-
return fmt.Errorf("failed to find disk partitions:\n%w", err)
52+
return nil, fmt.Errorf("failed to find disk partitions:\n%w", err)
4853
}
4954

55+
// Create mapping from partition UUID to mount path
56+
partUuidToMountPath := createPartUuidToMountPathMap(partitions, mountPoints)
57+
5058
// Create chroot environment.
5159
imageChrootDir := filepath.Join(buildDir, chrootDirName)
5260

5361
err = imageConnection.ConnectChroot(imageChrootDir, false, []string(nil), mountPoints, includeDefaultMounts)
5462
if err != nil {
55-
return err
63+
return nil, err
5664
}
5765

58-
return nil
66+
return partUuidToMountPath, nil
5967
}
6068

6169
func createNewImage(targetOs targetos.TargetOs, filename string, diskConfig imagecustomizerapi.Disk,
@@ -265,3 +273,17 @@ func createPartIdToPartUuidMap(partIDToDevPathMap map[string]string, diskPartiti
265273

266274
return partIdToPartUuid, nil
267275
}
276+
277+
func createPartUuidToMountPathMap(partitions []diskutils.PartitionInfo, mountPoints []*safechroot.MountPoint,
278+
) map[string]string {
279+
partUuidToMountPath := make(map[string]string)
280+
for _, mountPoint := range mountPoints {
281+
for _, partition := range partitions {
282+
if partition.Path == mountPoint.GetSource() {
283+
partUuidToMountPath[partition.PartUuid] = mountPoint.GetTarget()
284+
break
285+
}
286+
}
287+
}
288+
return partUuidToMountPath
289+
}

toolkit/tools/pkg/imagecustomizerlib/liveosisobuilder.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1071,7 +1071,7 @@ func (b *LiveOSIsoBuilder) prepareArtifactsFromFullImage(inputSavedConfigsFilePa
10711071
logger.Log.Infof("Preparing iso artifacts")
10721072

10731073
logger.Log.Debugf("Connecting to raw image (%s)", rawImageFile)
1074-
rawImageConnection, err := connectToExistingImage(rawImageFile, b.workingDirs.isoBuildDir, "readonly-rootfs-mount", false /*includeDefaultMounts*/)
1074+
rawImageConnection, _, err := connectToExistingImage(rawImageFile, b.workingDirs.isoBuildDir, "readonly-rootfs-mount", false /*includeDefaultMounts*/)
10751075
if err != nil {
10761076
return err
10771077
}

toolkit/tools/pkg/imagecustomizerlib/partitionutils.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,9 @@ var (
3030
partitionNumberRegex = regexp.MustCompile(`^/dev/loop\d+p(\d+)$`)
3131
)
3232

33-
func findPartitions(buildDir string, diskDevice string) ([]*safechroot.MountPoint, error) {
33+
func findPartitions(buildDir string, diskPartitions []diskutils.PartitionInfo) ([]*safechroot.MountPoint, error) {
3434
var err error
3535

36-
diskPartitions, err := diskutils.GetDiskPartitions(diskDevice)
37-
if err != nil {
38-
return nil, err
39-
}
40-
4136
rootfsPartition, err := findRootfsPartition(diskPartitions, buildDir)
4237
if err != nil {
4338
return nil, fmt.Errorf("failed to find rootfs partition:\n%w", err)

0 commit comments

Comments
 (0)