mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-29 17:36:38 +08:00
Merge pull request #533 from jbenet/fix-osx-mount
osxfuse: fix version check
This commit is contained in:
4
Godeps/Godeps.json
generated
4
Godeps/Godeps.json
generated
@ -108,6 +108,10 @@
|
|||||||
"ImportPath": "github.com/jbenet/go-datastore",
|
"ImportPath": "github.com/jbenet/go-datastore",
|
||||||
"Rev": "6a1c83bda2a71a9bdc936749fdb507df958ed949"
|
"Rev": "6a1c83bda2a71a9bdc936749fdb507df958ed949"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "github.com/jbenet/go-fuse-version",
|
||||||
|
"Rev": "ff72c39433f95ada15f116fa493a51eeec2bd52e"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/jbenet/go-is-domain",
|
"ImportPath": "github.com/jbenet/go-is-domain",
|
||||||
"Rev": "93b717f2ae17838a265e30277275ee99ee7198d6"
|
"Rev": "93b717f2ae17838a265e30277275ee99ee7198d6"
|
||||||
|
45
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/README.md
generated
vendored
Normal file
45
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/README.md
generated
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# go-fuse-version
|
||||||
|
|
||||||
|
Simple package to get the user's FUSE libraries information.
|
||||||
|
|
||||||
|
- Godoc: https://godoc.org/github.com/jbenet/go-fuse-version
|
||||||
|
|
||||||
|
**Warning** Currently only supports OSXFUSE. if you want more, add them, it's really trivial now.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
```Go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
fuseversion "github.com/jbenet/go-fuse-version"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
sys, err := fuseversion.LocalFuseSystems()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "%s\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("FuseVersion, AgentVersion, Agent\n")
|
||||||
|
for _, s := range *sys {
|
||||||
|
fmt.Printf("%s, %s, %s\n", s.FuseVersion, s.AgentVersion, s.AgentName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## fuseprint
|
||||||
|
|
||||||
|
If you dont use Go, you can also install the example as the silly util fuseprint:
|
||||||
|
|
||||||
|
```
|
||||||
|
> go get github.com/jbenet/go-fuse-version/fuseprint
|
||||||
|
> go install github.com/jbenet/go-fuse-version/fuseprint
|
||||||
|
> fuseprint
|
||||||
|
FuseVersion, AgentVersion, Agent
|
||||||
|
27, 2.7.2, OSXFUSE
|
||||||
|
```
|
1
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/.gitignore
generated
vendored
Normal file
1
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/.gitignore
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
fuseprint
|
1
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/README.md
generated
vendored
Symbolic link
1
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/README.md
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../README.md
|
21
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/index.go
generated
vendored
Normal file
21
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/fuseprint/index.go
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
fuseversion "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-fuse-version"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
sys, err := fuseversion.LocalFuseSystems()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "%s\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("FuseVersion, AgentVersion, Agent\n")
|
||||||
|
for _, s := range *sys {
|
||||||
|
fmt.Printf("%s, %s, %s\n", s.FuseVersion, s.AgentVersion, s.AgentName)
|
||||||
|
}
|
||||||
|
}
|
37
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version.go
generated
vendored
Normal file
37
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version.go
generated
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// package fuseversion simply exposes the version of FUSE installed
|
||||||
|
// in the user's machine. For reasoning, see:
|
||||||
|
// - https://github.com/jbenet/go-ipfs/issues/177
|
||||||
|
// - https://github.com/jbenet/go-ipfs/issues/202
|
||||||
|
// - https://github.com/osxfuse/osxfuse/issues/175#issuecomment-61888505
|
||||||
|
package fuseversion
|
||||||
|
|
||||||
|
type Systems map[string]FuseSystem
|
||||||
|
|
||||||
|
type FuseSystem struct {
|
||||||
|
// FuseVersion is the version of the FUSE protocol
|
||||||
|
FuseVersion string
|
||||||
|
|
||||||
|
// AgentName identifies the system implementing FUSE, or Agent
|
||||||
|
AgentName string
|
||||||
|
|
||||||
|
// AgentVersion is the version of the Agent program
|
||||||
|
// (it fights for the user! Sometimes it fights the user...)
|
||||||
|
AgentVersion string
|
||||||
|
}
|
||||||
|
|
||||||
|
// LocalFuseSystems returns a map of FuseSystems, keyed by name.
|
||||||
|
// For example:
|
||||||
|
//
|
||||||
|
// systems := fuseversion.LocalFuseSystems()
|
||||||
|
// for n, sys := range systems {
|
||||||
|
// fmt.Printf("%s, %s, %s", n, sys.FuseVersion, sys.AgentVersion)
|
||||||
|
// }
|
||||||
|
// // Outputs:
|
||||||
|
// // OSXFUSE, , 2.7.2
|
||||||
|
//
|
||||||
|
func LocalFuseSystems() (*Systems, error) {
|
||||||
|
return getLocalFuseSystems() // implemented by each platform
|
||||||
|
}
|
||||||
|
|
||||||
|
var notImplYet = `Error: not implemented for %s yet. :(
|
||||||
|
Please do it: https://github.com/jbenet/go-fuse-version`
|
11
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_bsd.go
generated
vendored
Normal file
11
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_bsd.go
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// +build dragonfly freebsd netbsd openbsd
|
||||||
|
|
||||||
|
package fuseversion
|
||||||
|
|
||||||
|
import (
|
||||||
|
"runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
func getLocalFuseSystems() (*Systems, error) {
|
||||||
|
return nil, fmt.Sprintf(notImplYet, runtime.GOARCH())
|
||||||
|
}
|
24
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_darwin.go
generated
vendored
Normal file
24
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_darwin.go
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package fuseversion
|
||||||
|
|
||||||
|
// #cgo CFLAGS: -I /usr/local/include/osxfuse/ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=25
|
||||||
|
// #cgo LDFLAGS: /usr/local/lib/libosxfuse.dylib
|
||||||
|
//
|
||||||
|
// #include <fuse/fuse.h>
|
||||||
|
// #include <fuse/fuse_common.h>
|
||||||
|
// #include <fuse/fuse_darwin.h>
|
||||||
|
import "C"
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func getLocalFuseSystems() (*Systems, error) {
|
||||||
|
sys := Systems{}
|
||||||
|
sys["OSXFUSE"] = getOSXFUSE()
|
||||||
|
return &sys, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getOSXFUSE() FuseSystem {
|
||||||
|
return FuseSystem{
|
||||||
|
FuseVersion: fmt.Sprintf("%d", int(C.fuse_version())),
|
||||||
|
AgentName: "OSXFUSE",
|
||||||
|
AgentVersion: C.GoString(C.osxfuse_version()),
|
||||||
|
}
|
||||||
|
}
|
9
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_linux.go
generated
vendored
Normal file
9
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_linux.go
generated
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package fuseversion
|
||||||
|
|
||||||
|
import (
|
||||||
|
"runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
func getLocalFuseSystems() (*Systems, error) {
|
||||||
|
return nil, fmt.Sprintf(notImplYet, runtime.GOARCH())
|
||||||
|
}
|
9
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_windows.go
generated
vendored
Normal file
9
Godeps/_workspace/src/github.com/jbenet/go-fuse-version/version_windows.go
generated
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package fuseversion
|
||||||
|
|
||||||
|
import (
|
||||||
|
"runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
func getLocalFuseSystems() (*Systems, error) {
|
||||||
|
return nil, fmt.Sprintf(notImplYet, runtime.GOARCH())
|
||||||
|
}
|
@ -5,6 +5,8 @@ import (
|
|||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
|
fuseversion "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-fuse-version"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -18,11 +20,17 @@ func darwinFuseCheckVersion() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
ov, err := syscall.Sysctl("osxfuse.version.number")
|
ov, err := tryGFV()
|
||||||
if err != nil {
|
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.") {
|
if strings.HasPrefix(ov, "2.7.") || strings.HasPrefix(ov, "2.8.") {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -31,3 +39,29 @@ func darwinFuseCheckVersion() error {
|
|||||||
"Older versions of osxfuse have kernel panic bugs; please upgrade!",
|
"Older versions of osxfuse have kernel panic bugs; please upgrade!",
|
||||||
"https://github.com/jbenet/go-ipfs/issues/177")
|
"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
|
||||||
|
}
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
T = $(sort $(wildcard t[0-9][0-9][0-9][0-9]-*.sh))
|
T = $(sort $(wildcard t[0-9][0-9][0-9][0-9]-*.sh))
|
||||||
BINS = bin/random bin/ipfs
|
BINS = bin/random bin/ipfs
|
||||||
SHARNESS = lib/sharness/sharness.sh
|
SHARNESS = lib/sharness/sharness.sh
|
||||||
|
IPFS_ROOT = ../..
|
||||||
|
|
||||||
all: clean deps $(T) aggregate
|
all: clean deps $(T) aggregate
|
||||||
|
|
||||||
@ -30,7 +31,7 @@ $(SHARNESS):
|
|||||||
@echo "*** installing $@ ***"
|
@echo "*** installing $@ ***"
|
||||||
lib/install-sharness.sh
|
lib/install-sharness.sh
|
||||||
|
|
||||||
bin/%:
|
bin/%: $(IPFS_ROOT)/**/*.go
|
||||||
@echo "*** installing $@ ***"
|
@echo "*** installing $@ ***"
|
||||||
cd .. && make $@
|
cd .. && make $@
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user