|
7 | 7 | "errors" |
8 | 8 | "fmt" |
9 | 9 | "os" |
| 10 | + "runtime" |
10 | 11 |
|
| 12 | + "github.com/lima-vm/lima/pkg/ioutilx" |
11 | 13 | "github.com/lima-vm/lima/pkg/limayaml" |
12 | 14 | "github.com/lima-vm/sshocker/pkg/reversesshfs" |
13 | 15 | "github.com/sirupsen/logrus" |
@@ -47,33 +49,42 @@ func (a *HostAgent) setupMount(m limayaml.Mount) (*mount, error) { |
47 | 49 | } |
48 | 50 | logrus.Infof("Mounting %q on %q", m.Location, *m.MountPoint) |
49 | 51 |
|
| 52 | + resolvedLocation := m.Location |
| 53 | + if runtime.GOOS == "windows" { |
| 54 | + var err error |
| 55 | + resolvedLocation, err = ioutilx.WindowsSubsystemPath(m.Location) |
| 56 | + if err != nil { |
| 57 | + return nil, err |
| 58 | + } |
| 59 | + } |
| 60 | + |
50 | 61 | rsf := &reversesshfs.ReverseSSHFS{ |
51 | 62 | Driver: *m.SSHFS.SFTPDriver, |
52 | 63 | SSHConfig: a.sshConfig, |
53 | | - LocalPath: m.Location, |
| 64 | + LocalPath: resolvedLocation, |
54 | 65 | Host: "127.0.0.1", |
55 | 66 | Port: a.sshLocalPort, |
56 | 67 | RemotePath: *m.MountPoint, |
57 | 68 | Readonly: !(*m.Writable), |
58 | 69 | SSHFSAdditionalArgs: []string{"-o", sshfsOptions}, |
59 | 70 | } |
60 | 71 | if err := rsf.Prepare(); err != nil { |
61 | | - return nil, fmt.Errorf("failed to prepare reverse sshfs for %q on %q: %w", m.Location, *m.MountPoint, err) |
| 72 | + return nil, fmt.Errorf("failed to prepare reverse sshfs for %q on %q: %w", resolvedLocation, *m.MountPoint, err) |
62 | 73 | } |
63 | 74 | if err := rsf.Start(); err != nil { |
64 | | - logrus.WithError(err).Warnf("failed to mount reverse sshfs for %q on %q, retrying with `-o nonempty`", m.Location, *m.MountPoint) |
| 75 | + logrus.WithError(err).Warnf("failed to mount reverse sshfs for %q on %q, retrying with `-o nonempty`", resolvedLocation, *m.MountPoint) |
65 | 76 | // NOTE: nonempty is not supported for libfuse3: https://github.com/canonical/multipass/issues/1381 |
66 | 77 | rsf.SSHFSAdditionalArgs = []string{"-o", "nonempty"} |
67 | 78 | if err := rsf.Start(); err != nil { |
68 | | - return nil, fmt.Errorf("failed to mount reverse sshfs for %q on %q: %w", m.Location, *m.MountPoint, err) |
| 79 | + return nil, fmt.Errorf("failed to mount reverse sshfs for %q on %q: %w", resolvedLocation, *m.MountPoint, err) |
69 | 80 | } |
70 | 81 | } |
71 | 82 |
|
72 | 83 | res := &mount{ |
73 | 84 | close: func() error { |
74 | | - logrus.Infof("Unmounting %q", m.Location) |
| 85 | + logrus.Infof("Unmounting %q", resolvedLocation) |
75 | 86 | if err := rsf.Close(); err != nil { |
76 | | - return fmt.Errorf("failed to unmount reverse sshfs for %q on %q: %w", m.Location, *m.MountPoint, err) |
| 87 | + return fmt.Errorf("failed to unmount reverse sshfs for %q on %q: %w", resolvedLocation, *m.MountPoint, err) |
77 | 88 | } |
78 | 89 | return nil |
79 | 90 | }, |
|
0 commit comments