func Serve(mountPoint, cgroupDir string) error { c, err := fuse.Mount( mountPoint, fuse.FSName("cgroupfs"), fuse.Subtype("cgroupfs"), fuse.LocalVolume(), fuse.VolumeName("cgroup volume"), fuse.AllowOther(), ) if err != nil { return err } defer c.Close() go handleStopSignals(mountPoint) var srv *fusefs.Server if os.Getenv("FUSE_DEBUG") != "" { srv = fusefs.New(c, &fusefs.Config{ Debug: func(msg interface{}) { fmt.Printf("%s\n", msg) }, }) } else { srv = fusefs.New(c, nil) } err = srv.Serve(fs.FS{cgroupDir}) if err != nil { return err } // check if the mount process has an error to report <-c.Ready if err := c.MountError; err != nil { return err } return nil }
// Mounted mounts the fuse.Server at a temporary directory. // // It also waits until the filesystem is known to be visible (OS X // workaround). // // After successful return, caller must clean up by calling Close. func Mounted(srv *fs.Server) (*Mount, error) { dir, err := ioutil.TempDir("", "fusetest") if err != nil { return nil, err } c, err := fuse.Mount(dir) if err != nil { return nil, err } done := make(chan struct{}) serveErr := make(chan error, 1) mnt := &Mount{ Dir: dir, Conn: c, Error: serveErr, done: done, } go func() { defer close(done) serveErr <- srv.Serve(c) }() select { case <-mnt.Conn.Ready: if mnt.Conn.MountError != nil { return nil, err } return mnt, err case err = <-mnt.Error: // Serve quit early if err != nil { return nil, err } return nil, errors.New("Serve exited early") } }
"github.com/Sirupsen/logrus" "github.com/fatih/color" "github.com/ovh/svfs/config" "github.com/ovh/svfs/svfs" "github.com/spf13/cobra" "github.com/spf13/viper" "github.com/xlucas/swift" ) var ( configError error debug bool gid uint64 uid uint64 fs svfs.SVFS srv *fusefs.Server profAddr string cpuProf string memProf string cfgFile string device string mountpoint string ) func init() { configError = config.LoadConfig() // Logger formatter := new(logrus.TextFormatter) formatter.TimestampFormat = time.RFC3339 formatter.FullTimestamp = true logrus.SetFormatter(formatter)