46 lines
732 B
Go
46 lines
732 B
Go
package zfs
|
|
|
|
import (
|
|
"os"
|
|
|
|
"bazil.org/fuse"
|
|
"bazil.org/fuse/fs"
|
|
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
func Mount(mountpoint string) error {
|
|
options := []fuse.MountOption{
|
|
fuse.AllowOther(),
|
|
fuse.AllowNonEmptyMount(),
|
|
fuse.MaxReadahead(uint32(128 << 10)),
|
|
fuse.DefaultPermissions(),
|
|
fuse.FSName("zurgfs"),
|
|
}
|
|
c, err := fuse.Mount(mountpoint, options...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer c.Close()
|
|
|
|
srv := fs.New(c, nil)
|
|
|
|
filesys := &FS{
|
|
uid: uint32(unix.Geteuid()),
|
|
gid: uint32(unix.Getegid()),
|
|
umask: os.FileMode(0),
|
|
}
|
|
|
|
// Serve our tree via FUSE.
|
|
if err := srv.Serve(filesys); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func Unmount(mountpoint string) error {
|
|
fuse.Unmount(mountpoint)
|
|
return nil
|
|
}
|