aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/command/weedfuse/README.md84
-rw-r--r--weed/command/weedfuse/weedfuse.go37
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)
}