update
This commit is contained in:
parent
7b1863109c
commit
ef751771d2
107 changed files with 9435 additions and 850 deletions
pkg/go-nfs/example/osnfs
38
pkg/go-nfs/example/osnfs/changeos.go
Normal file
38
pkg/go-nfs/example/osnfs/changeos.go
Normal file
|
@ -0,0 +1,38 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/go-git/go-billy/v5"
|
||||
)
|
||||
|
||||
// NewChangeOSFS wraps billy osfs to add the change interface
|
||||
func NewChangeOSFS(fs billy.Filesystem) billy.Filesystem {
|
||||
return COS{fs}
|
||||
}
|
||||
|
||||
// COS or OSFS + Change wraps a billy.FS to not fail the `Change` interface.
|
||||
type COS struct {
|
||||
billy.Filesystem
|
||||
}
|
||||
|
||||
// Chmod changes mode
|
||||
func (fs COS) Chmod(name string, mode os.FileMode) error {
|
||||
return os.Chmod(fs.Join(fs.Root(), name), mode)
|
||||
}
|
||||
|
||||
// Lchown changes ownership
|
||||
func (fs COS) Lchown(name string, uid, gid int) error {
|
||||
return os.Lchown(fs.Join(fs.Root(), name), uid, gid)
|
||||
}
|
||||
|
||||
// Chown changes ownership
|
||||
func (fs COS) Chown(name string, uid, gid int) error {
|
||||
return os.Chown(fs.Join(fs.Root(), name), uid, gid)
|
||||
}
|
||||
|
||||
// Chtimes changes access time
|
||||
func (fs COS) Chtimes(name string, atime time.Time, mtime time.Time) error {
|
||||
return os.Chtimes(fs.Join(fs.Root(), name), atime, mtime)
|
||||
}
|
28
pkg/go-nfs/example/osnfs/changeos_unix.go
Normal file
28
pkg/go-nfs/example/osnfs/changeos_unix.go
Normal file
|
@ -0,0 +1,28 @@
|
|||
//go:build darwin || dragonfly || freebsd || linux || nacl || netbsd || openbsd || solaris
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
func (fs COS) Mknod(path string, mode uint32, major uint32, minor uint32) error {
|
||||
dev := unix.Mkdev(major, minor)
|
||||
return unix.Mknod(fs.Join(fs.Root(), path), mode, int(dev))
|
||||
}
|
||||
|
||||
func (fs COS) Mkfifo(path string, mode uint32) error {
|
||||
return unix.Mkfifo(fs.Join(fs.Root(), path), mode)
|
||||
}
|
||||
|
||||
func (fs COS) Link(path string, link string) error {
|
||||
return unix.Link(fs.Join(fs.Root(), path), link)
|
||||
}
|
||||
|
||||
func (fs COS) Socket(path string) error {
|
||||
fd, err := unix.Socket(unix.AF_UNIX, unix.SOCK_STREAM, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return unix.Bind(fd, &unix.SockaddrUnix{Name: fs.Join(fs.Root(), path)})
|
||||
}
|
36
pkg/go-nfs/example/osnfs/main.go
Normal file
36
pkg/go-nfs/example/osnfs/main.go
Normal file
|
@ -0,0 +1,36 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"os"
|
||||
|
||||
nfs "git.kmsign.ru/royalcat/tstor/pkg/go-nfs"
|
||||
"git.kmsign.ru/royalcat/tstor/pkg/go-nfs/helpers"
|
||||
nfshelper "git.kmsign.ru/royalcat/tstor/pkg/go-nfs/helpers"
|
||||
osfs "github.com/go-git/go-billy/v5/osfs"
|
||||
)
|
||||
|
||||
func main() {
|
||||
port := ""
|
||||
if len(os.Args) < 2 {
|
||||
fmt.Printf("Usage: osnfs </path/to/folder> [port]\n")
|
||||
return
|
||||
} else if len(os.Args) == 3 {
|
||||
port = os.Args[2]
|
||||
}
|
||||
|
||||
listener, err := net.Listen("tcp", ":"+port)
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to listen: %v\n", err)
|
||||
return
|
||||
}
|
||||
fmt.Printf("osnfs server running at %s\n", listener.Addr())
|
||||
|
||||
bfs := osfs.New(os.Args[1])
|
||||
bfsPlusChange := helpers.WrapBillyFS(NewChangeOSFS(bfs))
|
||||
|
||||
handler := nfshelper.NewNullAuthHandler(bfsPlusChange)
|
||||
cacheHelper := nfshelper.NewCachingHandler(handler, 1024)
|
||||
fmt.Printf("%v", nfs.Serve(listener, cacheHelper))
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue