diff options
| -rw-r--r-- | weed/command/weedfuse/README.md | 84 | ||||
| -rw-r--r-- | weed/command/weedfuse/weedfuse.go | 37 |
2 files changed, 115 insertions, 6 deletions
diff --git a/weed/command/weedfuse/README.md b/weed/command/weedfuse/README.md new file mode 100644 index 000000000..1a1496bbb --- /dev/null +++ b/weed/command/weedfuse/README.md @@ -0,0 +1,84 @@ +Mount the SeaweedFS via FUSE + +# Mount by fstab + + +``` +$ # on linux +$ sudo apt-get install fuse +$ sudo echo 'user_allow_other' >> /etc/fuse.conf +$ sudo mv weedfuse /sbin/mount.weedfuse + +$ # on Mac +$ sudo mv weedfuse /sbin/mount_weedfuse + +``` + +On both OS X and Linux, you can add one of the entries to your /etc/fstab file like the following: + +``` +# mount the whole SeaweedFS +localhost:8888/ /home/some/mount/folder weedfuse + +# mount the SeaweedFS sub folder +localhost:8888/sub/dir /home/some/mount/folder weedfuse + +# mount the SeaweedFS sub folder with some options +localhost:8888/sub/dir /home/some/mount/folder weedfuse user + +``` + +To verify it can work, try this command +``` +$ sudo mount -av + +... + +/home/some/mount/folder : successfully mounted + +``` + +If you see `successfully mounted`, try to access the mounted folder and verify everything works. + + +To debug, run these: +``` + +$ weedfuse -foreground localhost:8888/ /home/some/mount/folder + +``` + + +To unmount the folder: +``` + +$ sudo umount /home/some/mount/folder + +``` + +<!-- not working yet! + +# Mount by autofs + +AutoFS can mount a folder if accessed. + +``` +# install autofs +$ sudo apt-get install autofs +``` + +Here is an example on how to mount a folder for all users under `/home` directory. +Assuming there exists corresponding folders under `/home` on both local and SeaweedFS. + +Edit `/etc/auto.master` and `/etc/auto.weedfuse` file with these content +``` +$ cat /etc/auto.master +/home /etc/auto.weedfuse + +$ cat /etc/auto.weedfuse +# map /home/<user> to localhost:8888/home/<user> +* -fstype=weedfuse,rw,allow_other,foreground :localhost\:8888/home/& + +``` + +--> diff --git a/weed/command/weedfuse/weedfuse.go b/weed/command/weedfuse/weedfuse.go index 9e9c0505c..5897ea066 100644 --- a/weed/command/weedfuse/weedfuse.go +++ b/weed/command/weedfuse/weedfuse.go @@ -13,20 +13,45 @@ import ( ) var ( - options = flag.String("o", "", "comma separated options rw,uid=xxx,gid=xxx") - isForeground = flag.Bool("foreground", false, "starts as a daemon") + fuseCommand = flag.NewFlagSet("weedfuse", flag.ContinueOnError) + options = fuseCommand.String("o", "", "comma separated options rw,uid=xxx,gid=xxx") + isForeground = fuseCommand.Bool("foreground", false, "starts as a daemon") ) func main() { - flag.Parse() + err := fuseCommand.Parse(os.Args[1:]) + if err != nil { + glog.Fatal(err) + } + fmt.Printf("options: %v\n", *options) + + // seems this value is always empty, need to parse it differently + optionsString := *options + prev := "" + for i, arg := range os.Args { + fmt.Printf("args[%d]: %v\n", i, arg) + if prev == "-o" { + optionsString = arg + } + prev = arg + } - device := flag.Arg(0) - mountPoint := flag.Arg(1) + device := fuseCommand.Arg(0) + mountPoint := fuseCommand.Arg(1) fmt.Printf("source: %v\n", device) fmt.Printf("target: %v\n", mountPoint) + nouser := true + for _, option := range strings.Split(optionsString, ",") { + fmt.Printf("option: %v\n", option) + switch option { + case "user": + nouser = false + } + } + maybeSetupPath() if !*isForeground { @@ -39,7 +64,7 @@ func main() { command.RunMount( filer, "/"+filerPath, mountPoint, "", "000", "", - 4, true, 0, 1000000) + 4, !nouser, 0, 1000000) } |
