diff --git a/core/commands/mount_darwin.go b/core/commands/mount_darwin.go index 1b50f3173..f98c56de0 100644 --- a/core/commands/mount_darwin.go +++ b/core/commands/mount_darwin.go @@ -5,6 +5,8 @@ import ( "runtime" "strings" "syscall" + + fuseversion "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-fuse-version" ) func init() { @@ -18,11 +20,17 @@ func darwinFuseCheckVersion() error { return nil } - ov, err := syscall.Sysctl("osxfuse.version.number") + ov, err := tryGFV() if err != nil { - return err + log.Debug(err) + ov, err = trySysctl() + if err != nil { + log.Debug(err) + return fmt.Errorf("cannot determine osxfuse version. is it installed?") + } } + log.Debug("mount: osxfuse version:", ov) if strings.HasPrefix(ov, "2.7.") || strings.HasPrefix(ov, "2.8.") { return nil } @@ -31,3 +39,29 @@ func darwinFuseCheckVersion() error { "Older versions of osxfuse have kernel panic bugs; please upgrade!", "https://github.com/jbenet/go-ipfs/issues/177") } + +func tryGFV() (string, error) { + sys, err := fuseversion.LocalFuseSystems() + if err != nil { + log.Debug("mount: fuseversion:", "failed") + return "", err + } + + for _, s := range *sys { + v := s.AgentVersion + log.Debug("mount: fuseversion:", v) + return v, nil + } + + return "", fmt.Errorf("fuseversion: no system found") +} + +func trySysctl() (string, error) { + v, err := syscall.Sysctl("osxfuse.version.number") + if err != nil { + log.Debug("mount: sysctl osxfuse.version.number:", "failed") + return "", err + } + log.Debug("mount: sysctl osxfuse.version.number:", v) + return v, nil +}