From 4dfcd2169efbffd004c7f43118c6e65be5ee36c3 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sat, 11 May 2019 01:17:55 -0700 Subject: [PATCH] weedfuse: adapt to fstab command line pattern --- weed/command/weedfuse/README.md | 84 +++++++++++++++++++++++++++++++ weed/command/weedfuse/weedfuse.go | 37 +++++++++++--- 2 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 weed/command/weedfuse/README.md 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 + +``` + + 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) }