作者:jostillmann
项目:bolt-moun
func mount(dbpath, mountpoint string) error {
db, err := bolt.Open(dbpath, 0600, nil)
if err != nil {
return err
}
c, err := fuse.Mount(mountpoint)
if err != nil {
return err
}
defer c.Close()
filesys := &FS{
db: db,
}
if err := fs.Serve(c, filesys); 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
}
作者:pj
项目:ghf
func main() {
flag.Parse()
if *token == "" {
log.Println("must provide -token")
os.Exit(1)
}
client = github.NewClient(oauth2.NewClient(oauth2.NoContext, oauth2.StaticTokenSource(
&oauth2.Token{AccessToken: *token},
)))
if *mountpoint == "" {
log.Println("must provide -mountpoint")
os.Exit(1)
}
c, err := fuse.Mount(*mountpoint)
if err != nil {
log.Printf("mount: %v", err)
os.Exit(1)
}
defer c.Close()
log.Println("serving...")
if err := fs.Serve(c, FS{}); err != nil {
log.Printf("serve: %v", err)
os.Exit(1)
}
<-c.Ready
if err := c.MountError; err != nil {
log.Printf("mount error: %v", err)
os.Exit(1)
}
}
作者:rsrsp
项目:fus
func TestRootErr(t *testing.T) {
fuse.Debugf = log.Printf
dir, err := ioutil.TempDir("", "fusetest")
if err != nil {
t.Fatal(err)
}
os.MkdirAll(dir, 0777)
c, err := fuse.Mount(dir)
if err != nil {
t.Fatal(err)
}
defer umount(dir)
ch := make(chan error, 1)
go func() {
ch <- Serve(c, badRootFS{})
}()
select {
case err := <-ch:
if err.Error() != "cannot obtain root node: structure needs cleaning" {
t.Errorf("Unexpected error: %v", err)
}
case <-time.After(1 * time.Second):
t.Fatal("Serve did not return an error as expected, aborting")
}
}
作者:netrob
项目:seaweedf
func runMount(cmd *Command, args []string) bool {
fmt.Printf("This is SeaweedFS version %s %s %s\n", util.VERSION, runtime.GOOS, runtime.GOARCH)
if *mountOptions.dir == "" {
fmt.Printf("Please specify the mount directory via \"-dir\"")
return false
}
c, err := fuse.Mount(*mountOptions.dir)
if err != nil {
glog.Fatal(err)
return false
}
OnInterrupt(func() {
fuse.Unmount(*mountOptions.dir)
c.Close()
})
err = fs.Serve(c, WFS{})
if err != nil {
fuse.Unmount(*mountOptions.dir)
}
// check if the mount process has an error to report
<-c.Ready
if err := c.MountError; err != nil {
glog.Fatal(err)
}
return true
}
作者:rfjako
项目:cluef
func (fs *ClueFS) MountAndServe(mountpoint string, readonly bool) error {
// Mount the file system
fs.mountDir = mountpoint
if IsDebugActive() {
fuse.Debug = FuseDebug
}
mountOpts := []fuse.MountOption{
fuse.FSName(programName),
fuse.Subtype(programName),
fuse.VolumeName(programName),
fuse.LocalVolume(),
}
if readonly {
mountOpts = append(mountOpts, fuse.ReadOnly())
}
conn, err := fuse.Mount(mountpoint, mountOpts...)
if err != nil {
return err
}
defer conn.Close()
// Start serving requests
if err = fusefs.Serve(conn, fs); err != nil {
return err
}
// Check for errors when mounting the file system
<-conn.Ready
if err = conn.MountError; err != nil {
return err
}
return nil
}
作者:Reisende
项目:acdfus
func Run(c *cli.Context) {
println("Amazon Cloud Drive mount at", c.String("mountpoint"))
mountpoint := c.String("mountpoint")
if mountpoint == "" {
log.Fatal("no mountpoint! try running \"acdfuse help\"")
}
fuseCtx, err := fuse.Mount(
c.String("mountpoint"),
fuse.FSName("helloworld"),
fuse.Subtype("hellofs"),
fuse.LocalVolume(),
fuse.VolumeName("Hello world!"),
)
if err != nil {
log.Fatal(err)
}
defer fuseCtx.Close()
err = fs.Serve(fuseCtx, acdfs.FS{})
if err != nil {
log.Fatal(err)
}
// check if the mount process has an error to report
<-fuseCtx.Ready
if err := fuseCtx.MountError; err != nil {
log.Fatal(err)
}
}
作者:dmcgowa
项目:fus
func main() {
flag.Usage = usage
flag.Parse()
if flag.NArg() != 1 {
usage()
os.Exit(2)
}
mountpoint := flag.Arg(0)
c, err := fuse.Mount(
mountpoint,
fuse.FSName("helloworld"),
fuse.Subtype("hellofs"),
fuse.LocalVolume(),
fuse.VolumeName("Hello world!"),
)
if err != nil {
log.Fatal(err)
}
defer c.Close()
err = fs.Serve(c, FS{})
if err != nil {
log.Fatal(err)
}
// check if the mount process has an error to report
<-c.Ready
if err := c.MountError; err != nil {
log.Fatal(err)
}
}
作者:ryanstou
项目:mirrorf
func main() {
MIRROR_FOLDER := "/Users/ryanstout/Sites/infinitydrive/go/drive"
flag.Usage = Usage
flag.Parse()
if flag.NArg() != 1 {
Usage()
os.Exit(2)
}
mountpoint := flag.Arg(0)
c, err := fuse.Mount(mountpoint)
if err != nil {
log.Fatal(err)
}
defer c.Close()
err = fs.Serve(c, FS{MIRROR_FOLDER})
if err != nil {
log.Fatal(err)
}
// check if the mount process has an error to report
<-c.Ready
if err := c.MountError; err != nil {
log.Fatal(err)
}
}
作者:goze
项目:kbfs-bet
func fuseMountDir(dir string) (*fuse.Conn, error) {
options, err := getPlatformSpecificMountOptions(dir)
if err != nil {
return nil, err
}
return fuse.Mount(dir, options...)
}
作者:henrylee2c
项目:pachyder
func (m *mounter) Mount(apiClient pfs.ApiClient, repositoryName string, mountPoint string, shard uint64, modulus uint64) (retErr error) {
if err := os.MkdirAll(mountPoint, 0777); err != nil {
return err
}
conn, err := fuse.Mount(
mountPoint,
fuse.FSName(namePrefix+repositoryName),
fuse.VolumeName(namePrefix+repositoryName),
fuse.Subtype(subtype),
fuse.WritebackCache(),
fuse.MaxReadahead(1<<32-1),
)
if err != nil {
return err
}
defer func() {
if err := conn.Close(); err != nil && retErr == nil {
retErr = err
}
}()
close(m.ready)
if err := fs.Serve(conn, &filesystem{apiClient, repositoryName, shard, modulus}); err != nil {
return err
}
// check if the mount process has an error to report
<-conn.Ready
return conn.MountError
}
作者:mehulsbhat
项目:pachyder
func (m *mounter) Mount(
address string,
mountPoint string,
shard uint64,
modulus uint64,
) (retErr error) {
// TODO: should we make the caller do this?
if err := os.MkdirAll(mountPoint, 0777); err != nil {
return err
}
name := namePrefix + address
conn, err := fuse.Mount(
mountPoint,
fuse.FSName(name),
fuse.VolumeName(name),
fuse.Subtype(subtype),
fuse.AllowOther(),
fuse.WritebackCache(),
fuse.MaxReadahead(1<<32-1),
)
if err != nil {
return err
}
defer func() {
if err := conn.Close(); err != nil && retErr == nil {
retErr = err
}
}()
if err := fs.Serve(conn, newFilesystem(m.apiClient, shard, modulus)); err != nil {
return err
}
<-conn.Ready
return conn.MountError
}
作者:Bren201
项目:go-ipf
// Mount mounts an IpfsNode instance at a particular path. It
// serves until the process receives exit signals (to Unmount).
func Mount(ipfs *core.IpfsNode, fpath string) error {
sigc := make(chan os.Signal, 1)
signal.Notify(sigc, syscall.SIGHUP, syscall.SIGINT,
syscall.SIGTERM, syscall.SIGQUIT)
go func() {
<-sigc
Unmount(fpath)
}()
c, err := fuse.Mount(fpath)
if err != nil {
return err
}
defer c.Close()
err = fs.Serve(c, FileSystem{Ipfs: ipfs})
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
}
作者:orive
项目:ghf
func main() {
log.SetFlags(0)
// Parse arguments and require that we have the path.
token := flag.String("token", "", "personal access token")
flag.Parse()
if flag.NArg() != 1 {
log.Fatal("path required")
}
log.Printf("mounting to: %s", flag.Arg(0))
// Create FUSE connection.
conn, err := fuse.Mount(flag.Arg(0))
if err != nil {
log.Fatal(err)
}
// Create OAuth transport.
var c *http.Client
if *token != "" {
c = (&oauth.Transport{Token: &oauth.Token{AccessToken: *token}}).Client()
}
// Create filesystem.
filesys := &FS{Client: github.NewClient(c)}
if err := fs.Serve(conn, filesys); err != nil {
log.Fatal(err)
}
// Wait until the mount is unmounted or there is an error.
<-conn.Ready
if err := conn.MountError; err != nil {
log.Fatal(err)
}
}
作者:pombredann
项目:openstorag
func (v *volumeDriver) Mount(volumeID api.VolumeID, mountpath string) error {
volume, err := v.GetVol(volumeID)
if err != nil {
return err
}
mountOptions, err := v.provider.GetMountOptions(volume.Spec)
if err != nil {
return err
}
conn, err := fuse.Mount(mountpath, mountOptions...)
if err != nil {
return err
}
filesystem, err := v.provider.GetFS(volume.Spec)
if err != nil {
return err
}
go func() {
// TODO: track error once we understand driver model better
_ = fs.Serve(conn, filesystem)
_ = conn.Close()
}()
<-conn.Ready
return conn.MountError
}
作者:port
项目:simple-network-fus
func Mount(host, mountpoint string) error {
conn, err := net.Dial("tcp", host)
if err != nil {
return err
}
defer conn.Close()
log.Println("Connected")
c, err := fuse.Mount(
mountpoint,
fuse.FSName("simple-network-fuse"),
fuse.Subtype("rofl"),
)
if err != nil {
return err
}
defer c.Close()
fsConn := connection{
enc: gob.NewEncoder(conn),
dec: gob.NewDecoder(conn),
}
err = fs.Serve(c, &FS{fsConn})
if err != nil {
return err
}
<-c.Ready
if err := c.MountError; err != nil {
return err
}
return nil
}
作者:ehazlet
项目:docker-volume-libsecre
func (f *FS) Mount(volumeName string) error {
log.Debugf("setting up fuse: volume=%s", volumeName)
c, err := fuse.Mount(
f.mountpoint,
fuse.FSName("libsecret"),
fuse.Subtype("libsecretfs"),
fuse.LocalVolume(),
fuse.VolumeName(volumeName),
)
if err != nil {
return err
}
srv := fs.New(c, nil)
f.server = srv
f.volumeName = volumeName
f.conn = c
go func() {
err = f.server.Serve(f)
if err != nil {
f.errChan <- err
}
}()
// check if the mount process has an error to report
log.Debug("waiting for mount")
<-c.Ready
if err := c.MountError; err != nil {
return err
}
return nil
}
作者:nc
项目:rclon
// mount the file system
//
// The mount point will be ready when this returns.
//
// returns an error, and an error channel for the serve process to
// report an error when fusermount is called.
func mount(f fs.Fs, mountpoint string) (<-chan error, error) {
fs.Debug(f, "Mounting on %q", mountpoint)
c, err := fuse.Mount(mountpoint, mountOptions(f.Name()+":"+f.Root())...)
if err != nil {
return nil, err
}
filesys := &FS{
f: f,
}
// Serve the mount point in the background returning error to errChan
errChan := make(chan error, 1)
go func() {
err := fusefs.Serve(c, filesys)
closeErr := c.Close()
if err == nil {
err = closeErr
}
errChan <- err
}()
// check if the mount process has an error to report
<-c.Ready
if err := c.MountError; err != nil {
return nil, err
}
return errChan, nil
}
作者:suffus
项目:go-suffus
func NewSfs(conf *SfsConfig) (*Sfs, error) {
sfsLogLevel = conf.LogLevel
mnt := conf.Mountpoint
mount_opts := getFuseMountOptions(conf)
if !conf.Config.IsEmpty() {
configFileOpts := readJsonFile(conf.Config)
Echoerr("%v", configFileOpts)
}
c, err := fuse.Mount(string(mnt), mount_opts...)
if err != nil {
return nil, err
}
mfs := &Sfs{
Mountpoint: mnt,
RootNode: NewIdNode(conf.Paths[0]),
Connection: c,
}
/** Start a goroutine which looks for INT/TERM and
* calls unmount on the filesystem. Otherwise ctrl-C
* leaves us with ghost mounts which outlive the process.
*/
trap := func(sig os.Signal) {
Echoerr("Caught %s - forcing unmount(2) of %s\n", sig, mfs.Mountpoint)
mfs.Unmount()
}
TrapExit(trap)
return mfs, nil
}
作者:rjkroeg
项目:fus
func main() {
flag.Usage = Usage
flag.Parse()
if flag.NArg() != 1 {
Usage()
os.Exit(2)
}
mountpoint := flag.Arg(0)
c, err := fuse.Mount(mountpoint)
if err != nil {
log.Fatal(err)
}
defer c.Close()
err = fs.Serve(c, FS{})
if err != nil {
log.Fatal(err)
}
// check if the mount process has an error to report
<-c.Ready
if err := c.MountError; err != nil {
log.Fatal(err)
}
}
作者:cjluca
项目:unitef
func main() {
ufs := unitefs.NewFS()
for i := 1; i < len(os.Args)-1; i++ {
println(os.Args[i])
ufs.RegisterSubtree(os.Args[i])
}
c, err := fuse.Mount(
os.Args[len(os.Args)-1],
fuse.FSName("unitefs"),
fuse.Subtype("unitefs"),
fuse.LocalVolume(),
fuse.VolumeName("unitefs"),
)
if err != nil {
log.Fatal(err)
}
defer c.Close()
fmt.Println("FS mounted")
err = fs.Serve(c, ufs)
if err != nil {
log.Fatal(err)
}
// check if the mount process has an error to report
<-c.Ready
if err := c.MountError; err != nil {
log.Fatal(err)
}
}