Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
lima-vm
GitHub Repository: lima-vm/lima
Path: blob/master/pkg/driver/vz/rosetta_directory_share_arm64.go
2648 views
1
//go:build darwin && arm64 && !no_vz
2
3
// SPDX-FileCopyrightText: Copyright The Lima Authors
4
// SPDX-License-Identifier: Apache-2.0
5
6
package vz
7
8
import (
9
"fmt"
10
11
"github.com/Code-Hex/vz/v3"
12
"github.com/coreos/go-semver/semver"
13
"github.com/sirupsen/logrus"
14
15
"github.com/lima-vm/lima/v2/pkg/osutil"
16
)
17
18
func createRosettaDirectoryShareConfiguration() (*vz.VirtioFileSystemDeviceConfiguration, error) {
19
config, err := vz.NewVirtioFileSystemDeviceConfiguration("vz-rosetta")
20
if err != nil {
21
return nil, fmt.Errorf("failed to create a new virtio file system configuration: %w", err)
22
}
23
availability := vz.LinuxRosettaDirectoryShareAvailability()
24
switch availability {
25
case vz.LinuxRosettaAvailabilityNotSupported:
26
return nil, errRosettaUnsupported
27
case vz.LinuxRosettaAvailabilityNotInstalled:
28
logrus.Info("Installing rosetta...")
29
logrus.Info("Hint: try `softwareupdate --install-rosetta` if Lima gets stuck here")
30
if err := vz.LinuxRosettaDirectoryShareInstallRosetta(); err != nil {
31
return nil, fmt.Errorf("failed to install rosetta: %w", err)
32
}
33
logrus.Info("Rosetta installation complete.")
34
case vz.LinuxRosettaAvailabilityInstalled:
35
// nothing to do
36
}
37
38
rosettaShare, err := vz.NewLinuxRosettaDirectoryShare()
39
if err != nil {
40
return nil, fmt.Errorf("failed to create a new rosetta directory share: %w", err)
41
}
42
macOSProductVersion, err := osutil.ProductVersion()
43
if err != nil {
44
return nil, fmt.Errorf("failed to get macOS product version: %w", err)
45
}
46
if !macOSProductVersion.LessThan(*semver.New("14.0.0")) {
47
cachingOption, err := vz.NewLinuxRosettaUnixSocketCachingOptions("/run/rosettad/rosetta.sock")
48
if err != nil {
49
return nil, fmt.Errorf("failed to create a new rosetta directory share caching option: %w", err)
50
}
51
rosettaShare.SetOptions(cachingOption)
52
}
53
config.SetDirectoryShare(rosettaShare)
54
55
return config, nil
56
}
57
58