|
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