Skip to content

Commit 508d1d3

Browse files
authored
Merge pull request #4809 from sharanrajt/fix/4804-macos-asif-image-failure
feat: validate macOS 26+ requirement for macOS guest VMs
2 parents 2d36cc7 + 4cc9ff8 commit 508d1d3

1 file changed

Lines changed: 27 additions & 4 deletions

File tree

pkg/driver/vz/vz_driver_darwin.go

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/lima-vm/lima/v2/pkg/driverutil"
3030
"github.com/lima-vm/lima/v2/pkg/guestpatch/macos"
3131
"github.com/lima-vm/lima/v2/pkg/hostagent/events"
32+
"github.com/lima-vm/lima/v2/pkg/imgutil/nativeimgutil"
3233
"github.com/lima-vm/lima/v2/pkg/imgutil/nativeimgutil/asifutil"
3334
"github.com/lima-vm/lima/v2/pkg/limatype"
3435
"github.com/lima-vm/lima/v2/pkg/limatype/filenames"
@@ -193,7 +194,17 @@ func (l *LimaVzDriver) FillConfig(ctx context.Context, cfg *limatype.LimaYAML, _
193194
vzOpts.Rosetta.BinFmt = ptr.Of(false)
194195
}
195196
if vzOpts.DiskImageFormat == nil {
196-
vzOpts.DiskImageFormat = ptr.Of(raw.Type)
197+
// Default to ASIF for macOS guests on macOS 26+, raw otherwise.
198+
if cfg.OS != nil && *cfg.OS == limatype.DARWIN {
199+
macOSProductVersion, err := osutil.ProductVersion()
200+
if err == nil && !macOSProductVersion.LessThan(*semver.New("26.0.0")) {
201+
vzOpts.DiskImageFormat = ptr.Of(asif.Type)
202+
} else {
203+
vzOpts.DiskImageFormat = ptr.Of(raw.Type)
204+
}
205+
} else {
206+
vzOpts.DiskImageFormat = ptr.Of(raw.Type)
207+
}
197208
}
198209

199210
var opts any
@@ -375,7 +386,7 @@ func (l *LimaVzDriver) CreateDisk(ctx context.Context) error {
375386
//
376387
// The function creates the following files:
377388
// - `image.ipsw`: hardlink to `image` (".ipsw" suffix is required by VZMacOSInstaller)
378-
// - `disk`: ASIF disk
389+
// - `disk`: raw or ASIF disk (ASIF requires macOS 26+)
379390
//
380391
// After successful installation, `image.ipsw` and `image` are removed.
381392
func (l *LimaVzDriver) createDiskMacOSGuest(ctx context.Context) error {
@@ -385,8 +396,20 @@ func (l *LimaVzDriver) createDiskMacOSGuest(ctx context.Context) error {
385396
if err != nil {
386397
return fmt.Errorf("invalid disk size %q: %w", *l.Instance.Config.Disk, err)
387398
}
388-
if err := asifutil.NewASIF(disk, diskSize); err != nil {
389-
return err
399+
400+
switch l.diskImageFormat {
401+
case asif.Type:
402+
if err := asifutil.NewASIF(disk, diskSize); err != nil {
403+
return err
404+
}
405+
case raw.Type:
406+
logrus.Debugf("Using %s disk image for macOS guest", l.diskImageFormat)
407+
diskUtil := &nativeimgutil.NativeImageUtil{}
408+
if err := diskUtil.CreateDisk(ctx, disk, diskSize); err != nil {
409+
return fmt.Errorf("failed to create %s disk %q: %w", l.diskImageFormat, disk, err)
410+
}
411+
default:
412+
return fmt.Errorf("unsupported disk format for macOS guest: %s", l.diskImageFormat)
390413
}
391414

392415
if err = ensureIPSW(l.Instance.Dir); err != nil {

0 commit comments

Comments
 (0)