|
|
@ -43,88 +43,90 @@ func runFuse(cmd *Command, args []string) bool { |
|
|
|
continue |
|
|
|
} |
|
|
|
|
|
|
|
key, value := parts[0], parts[1] |
|
|
|
|
|
|
|
// switch key keeping "weed mount" parameters
|
|
|
|
switch parts[0] { |
|
|
|
switch key { |
|
|
|
case "filer": |
|
|
|
mountOptions.filer = &parts[1] |
|
|
|
mountOptions.filer = &value |
|
|
|
case "filer.path": |
|
|
|
mountOptions.filerMountRootPath = &parts[1] |
|
|
|
mountOptions.filerMountRootPath = &value |
|
|
|
case "dirAutoCreate": |
|
|
|
if value, err := strconv.ParseBool(parts[1]); err != nil { |
|
|
|
mountOptions.dirAutoCreate = &value |
|
|
|
if parsed, err := strconv.ParseBool(value); err != nil { |
|
|
|
mountOptions.dirAutoCreate = &parsed |
|
|
|
} else { |
|
|
|
panic(fmt.Errorf("dirAutoCreate: %s", err)) |
|
|
|
} |
|
|
|
case "collection": |
|
|
|
mountOptions.collection = &parts[1] |
|
|
|
mountOptions.collection = &value |
|
|
|
case "replication": |
|
|
|
mountOptions.replication = &parts[1] |
|
|
|
mountOptions.replication = &value |
|
|
|
case "disk": |
|
|
|
mountOptions.diskType = &parts[1] |
|
|
|
mountOptions.diskType = &value |
|
|
|
case "ttl": |
|
|
|
if value, err := strconv.ParseInt(parts[1], 0, 32); err != nil { |
|
|
|
intValue := int(value) |
|
|
|
if parsed, err := strconv.ParseInt(value, 0, 32); err != nil { |
|
|
|
intValue := int(parsed) |
|
|
|
mountOptions.ttlSec = &intValue |
|
|
|
} else { |
|
|
|
panic(fmt.Errorf("ttl: %s", err)) |
|
|
|
} |
|
|
|
case "chunkSizeLimitMB": |
|
|
|
if value, err := strconv.ParseInt(parts[1], 0, 32); err != nil { |
|
|
|
intValue := int(value) |
|
|
|
if parsed, err := strconv.ParseInt(value, 0, 32); err != nil { |
|
|
|
intValue := int(parsed) |
|
|
|
mountOptions.chunkSizeLimitMB = &intValue |
|
|
|
} else { |
|
|
|
panic(fmt.Errorf("chunkSizeLimitMB: %s", err)) |
|
|
|
} |
|
|
|
case "concurrentWriters": |
|
|
|
if value, err := strconv.ParseInt(parts[1], 0, 32); err != nil { |
|
|
|
intValue := int(value) |
|
|
|
if parsed, err := strconv.ParseInt(value, 0, 32); err != nil { |
|
|
|
intValue := int(parsed) |
|
|
|
mountOptions.concurrentWriters = &intValue |
|
|
|
} else { |
|
|
|
panic(fmt.Errorf("concurrentWriters: %s", err)) |
|
|
|
} |
|
|
|
case "cacheDir": |
|
|
|
mountOptions.cacheDir = &parts[1] |
|
|
|
mountOptions.cacheDir = &value |
|
|
|
case "cacheCapacityMB": |
|
|
|
if value, err := strconv.ParseInt(parts[1], 0, 64); err != nil { |
|
|
|
mountOptions.cacheSizeMB = &value |
|
|
|
if parsed, err := strconv.ParseInt(value, 0, 64); err != nil { |
|
|
|
mountOptions.cacheSizeMB = &parsed |
|
|
|
} else { |
|
|
|
panic(fmt.Errorf("cacheCapacityMB: %s", err)) |
|
|
|
} |
|
|
|
case "dataCenter": |
|
|
|
mountOptions.dataCenter = &parts[1] |
|
|
|
mountOptions.dataCenter = &value |
|
|
|
case "allowOthers": |
|
|
|
if value, err := strconv.ParseBool(parts[1]); err != nil { |
|
|
|
mountOptions.allowOthers = &value |
|
|
|
if parsed, err := strconv.ParseBool(value); err != nil { |
|
|
|
mountOptions.allowOthers = &parsed |
|
|
|
} else { |
|
|
|
panic(fmt.Errorf("allowOthers: %s", err)) |
|
|
|
} |
|
|
|
case "umask": |
|
|
|
mountOptions.umaskString = &parts[1] |
|
|
|
mountOptions.umaskString = &value |
|
|
|
case "nonempty": |
|
|
|
if value, err := strconv.ParseBool(parts[1]); err != nil { |
|
|
|
mountOptions.nonempty = &value |
|
|
|
if parsed, err := strconv.ParseBool(value); err != nil { |
|
|
|
mountOptions.nonempty = &parsed |
|
|
|
} else { |
|
|
|
panic(fmt.Errorf("nonempty: %s", err)) |
|
|
|
} |
|
|
|
case "volumeServerAccess": |
|
|
|
mountOptions.volumeServerAccess = &parts[1] |
|
|
|
mountOptions.volumeServerAccess = &value |
|
|
|
case "map.uid": |
|
|
|
mountOptions.uidMap = &parts[1] |
|
|
|
mountOptions.uidMap = &value |
|
|
|
case "map.gid": |
|
|
|
mountOptions.gidMap = &parts[1] |
|
|
|
mountOptions.gidMap = &value |
|
|
|
case "readOnly": |
|
|
|
if value, err := strconv.ParseBool(parts[1]); err != nil { |
|
|
|
mountOptions.readOnly = &value |
|
|
|
if parsed, err := strconv.ParseBool(value); err != nil { |
|
|
|
mountOptions.readOnly = &parsed |
|
|
|
} else { |
|
|
|
panic(fmt.Errorf("readOnly: %s", err)) |
|
|
|
} |
|
|
|
case "cpuprofile": |
|
|
|
mountCpuProfile = &parts[1] |
|
|
|
mountCpuProfile = &value |
|
|
|
case "memprofile": |
|
|
|
mountMemProfile = &parts[1] |
|
|
|
mountMemProfile = &value |
|
|
|
case "readRetryTime": |
|
|
|
if value, err := time.ParseDuration(parts[1]); err != nil { |
|
|
|
mountReadRetryTime = &value |
|
|
|
if parsed, err := time.ParseDuration(value); err != nil { |
|
|
|
mountReadRetryTime = &parsed |
|
|
|
} else { |
|
|
|
panic(fmt.Errorf("readRetryTime: %s", err)) |
|
|
|
} |
|
|
@ -134,29 +136,29 @@ func runFuse(cmd *Command, args []string) bool { |
|
|
|
// I don't know why PATH environment variable is lost
|
|
|
|
if err := os.Setenv("PATH", "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"); err != nil { |
|
|
|
panic(fmt.Errorf("setenv: %s", err)) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// just call "weed mount" command
|
|
|
|
return runMount(cmdMount, []string{}) |
|
|
|
} |
|
|
|
|
|
|
|
var cmdFuse = &Command{ |
|
|
|
UsageLine: "fuse /mnt/mount/point -o \"filer=localhost:8888,filer.remote=/\"", |
|
|
|
UsageLine: "fuse /mnt/mount/point -o \"filer=localhost:8888,filer.path=/\"", |
|
|
|
Short: "Allow use weed with linux's mount command", |
|
|
|
Long: `Allow use weed with linux's mount command |
|
|
|
|
|
|
|
You can use -t weed on mount command: |
|
|
|
mv weed /sbin/mount.weed |
|
|
|
mount -t weed fuse /mnt -o "filer=localhost:8888,filer.remote=/" |
|
|
|
mount -t weed fuse /mnt -o "filer=localhost:8888,filer.path=/" |
|
|
|
|
|
|
|
Or you can use -t fuse on mount command: |
|
|
|
mv weed /sbin/weed |
|
|
|
mount -t fuse.weed fuse /mnt -o "filer=localhost:8888,filer.remote=/" |
|
|
|
mount -t fuse "weed#fuse" /mnt -o "filer=localhost:8888,filer.remote=/" |
|
|
|
mount -t fuse.weed fuse /mnt -o "filer=localhost:8888,filer.path=/" |
|
|
|
mount -t fuse "weed#fuse" /mnt -o "filer=localhost:8888,filer.path=/" |
|
|
|
|
|
|
|
To use without mess with your /sbin: |
|
|
|
mount -t fuse./home/user/bin/weed fuse /mnt -o "filer=localhost:8888,filer.remote=/" |
|
|
|
mount -t fuse "/home/user/bin/weed#fuse" /mnt -o "filer=localhost:8888,filer.remote=/" |
|
|
|
mount -t fuse./home/user/bin/weed fuse /mnt -o "filer=localhost:8888,filer.path=/" |
|
|
|
mount -t fuse "/home/user/bin/weed#fuse" /mnt -o "filer=localhost:8888,filer.path=/" |
|
|
|
|
|
|
|
To check valid options look "weed mount --help" |
|
|
|
`, |
|
|
|