Path: blob/master/pkg/driver/vz/rosetta_directory_share_arm64.go
2648 views
//go:build darwin && arm64 && !no_vz12// SPDX-FileCopyrightText: Copyright The Lima Authors3// SPDX-License-Identifier: Apache-2.045package vz67import (8"fmt"910"github.com/Code-Hex/vz/v3"11"github.com/coreos/go-semver/semver"12"github.com/sirupsen/logrus"1314"github.com/lima-vm/lima/v2/pkg/osutil"15)1617func createRosettaDirectoryShareConfiguration() (*vz.VirtioFileSystemDeviceConfiguration, error) {18config, err := vz.NewVirtioFileSystemDeviceConfiguration("vz-rosetta")19if err != nil {20return nil, fmt.Errorf("failed to create a new virtio file system configuration: %w", err)21}22availability := vz.LinuxRosettaDirectoryShareAvailability()23switch availability {24case vz.LinuxRosettaAvailabilityNotSupported:25return nil, errRosettaUnsupported26case vz.LinuxRosettaAvailabilityNotInstalled:27logrus.Info("Installing rosetta...")28logrus.Info("Hint: try `softwareupdate --install-rosetta` if Lima gets stuck here")29if err := vz.LinuxRosettaDirectoryShareInstallRosetta(); err != nil {30return nil, fmt.Errorf("failed to install rosetta: %w", err)31}32logrus.Info("Rosetta installation complete.")33case vz.LinuxRosettaAvailabilityInstalled:34// nothing to do35}3637rosettaShare, err := vz.NewLinuxRosettaDirectoryShare()38if err != nil {39return nil, fmt.Errorf("failed to create a new rosetta directory share: %w", err)40}41macOSProductVersion, err := osutil.ProductVersion()42if err != nil {43return nil, fmt.Errorf("failed to get macOS product version: %w", err)44}45if !macOSProductVersion.LessThan(*semver.New("14.0.0")) {46cachingOption, err := vz.NewLinuxRosettaUnixSocketCachingOptions("/run/rosettad/rosetta.sock")47if err != nil {48return nil, fmt.Errorf("failed to create a new rosetta directory share caching option: %w", err)49}50rosettaShare.SetOptions(cachingOption)51}52config.SetDirectoryShare(rosettaShare)5354return config, nil55}565758