Allow others fuse option. (#19)
Signed-off-by: Antonio Navarro Perez <antnavper@gmail.com>
This commit is contained in:
parent
bd81446da6
commit
2b33ec5f25
5 changed files with 38 additions and 18 deletions
11
README.md
11
README.md
|
@ -84,17 +84,18 @@ Run the program: `./distribyted-[VERSION]-[OS]-[ARCH]`
|
||||||
|
|
||||||
Defaults are good enough for starters, but you can change them. Here is the output of `./distribyted -help`:
|
Defaults are good enough for starters, but you can change them. Here is the output of `./distribyted -help`:
|
||||||
|
|
||||||
```
|
```text
|
||||||
NAME:
|
NAME:
|
||||||
distribyted - Torrent client with on-demand file downloading as a filesystem.
|
distribyted - Torrent client with on-demand file downloading as a filesystem.
|
||||||
|
|
||||||
USAGE:
|
USAGE:
|
||||||
distribyted-v0.3.0-linux-amd64 [global options] [arguments...]
|
distribyted [global options] [arguments...]
|
||||||
|
|
||||||
GLOBAL OPTIONS:
|
GLOBAL OPTIONS:
|
||||||
--config value YAML file containing distribyted configuration. (default: "./distribyted-data/config.yaml") [$DISTRIBYTED_CONFIG]
|
--config value YAML file containing distribyted configuration. (default: "./distribyted-data/config.yaml") [$DISTRIBYTED_CONFIG]
|
||||||
--http-port value http port for web interface (default: 4444) [$DISTRIBYTED_HTTP_PORT]
|
--http-port value HTTP port for web interface (default: 4444) [$DISTRIBYTED_HTTP_PORT]
|
||||||
--help, -h show help (default: false)
|
--fuse-allow-other Allow other users to acces to all fuse mountpoints. You need to add user_allow_other flag to /etc/fuse.conf file. (default: false) [$DISTRIBYTED_FUSE_ALLOW_OTHER]
|
||||||
|
--help, -h show help (default: false)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Prerequisites on windows
|
### Prerequisites on windows
|
||||||
|
|
|
@ -19,8 +19,9 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
configFlag = "config"
|
configFlag = "config"
|
||||||
portFlag = "http-port"
|
fuseAllowOther = "fuse-allow-other"
|
||||||
|
portFlag = "http-port"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -38,12 +39,18 @@ func main() {
|
||||||
Name: portFlag,
|
Name: portFlag,
|
||||||
Value: 4444,
|
Value: 4444,
|
||||||
EnvVars: []string{"DISTRIBYTED_HTTP_PORT"},
|
EnvVars: []string{"DISTRIBYTED_HTTP_PORT"},
|
||||||
Usage: "http port for web interface",
|
Usage: "HTTP port for web interface",
|
||||||
|
},
|
||||||
|
&cli.BoolFlag{
|
||||||
|
Name: fuseAllowOther,
|
||||||
|
Value: false,
|
||||||
|
EnvVars: []string{"DISTRIBYTED_FUSE_ALLOW_OTHER"},
|
||||||
|
Usage: "Allow other users to access all fuse mountpoints. You need to add user_allow_other flag to /etc/fuse.conf file.",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
err := load(c.String(configFlag), c.Int(portFlag))
|
err := load(c.String(configFlag), c.Int(portFlag), c.Bool(fuseAllowOther))
|
||||||
return err
|
return err
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -63,7 +70,7 @@ func newCache(folder string) (*filecache.Cache, error) {
|
||||||
return filecache.NewCache(folder)
|
return filecache.NewCache(folder)
|
||||||
}
|
}
|
||||||
|
|
||||||
func load(configPath string, port int) error {
|
func load(configPath string, port int, fuseAllowOther bool) error {
|
||||||
ch := config.NewHandler(configPath)
|
ch := config.NewHandler(configPath)
|
||||||
|
|
||||||
conf, err := ch.Get()
|
conf, err := ch.Get()
|
||||||
|
@ -84,7 +91,7 @@ func load(configPath string, port int) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
ss := stats.NewTorrent()
|
ss := stats.NewTorrent()
|
||||||
mountService := fuse.NewHandler(c, ss)
|
mountService := fuse.NewHandler(c, ss, fuseAllowOther)
|
||||||
|
|
||||||
sigChan := make(chan os.Signal)
|
sigChan := make(chan os.Signal)
|
||||||
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
|
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
|
||||||
|
|
|
@ -9,8 +9,9 @@ type Root struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type MountPoint struct {
|
type MountPoint struct {
|
||||||
Path string `yaml:"path"`
|
AllowOther bool `yaml:"fuse-allow-other,omitempty"`
|
||||||
Torrents []struct {
|
Path string `yaml:"path"`
|
||||||
|
Torrents []struct {
|
||||||
MagnetURI string `yaml:"magnetUri,omitempty"`
|
MagnetURI string `yaml:"magnetUri,omitempty"`
|
||||||
TorrentPath string `yaml:"torrentPath,omitempty"`
|
TorrentPath string `yaml:"torrentPath,omitempty"`
|
||||||
FolderName string `yaml:"folderName,omitempty"`
|
FolderName string `yaml:"folderName,omitempty"`
|
||||||
|
|
|
@ -18,14 +18,17 @@ type Handler struct {
|
||||||
c *torrent.Client
|
c *torrent.Client
|
||||||
s *stats.Torrent
|
s *stats.Torrent
|
||||||
|
|
||||||
|
fuseAllowOther bool
|
||||||
|
|
||||||
hosts map[string]*fuse.FileSystemHost
|
hosts map[string]*fuse.FileSystemHost
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewHandler(c *torrent.Client, s *stats.Torrent) *Handler {
|
func NewHandler(c *torrent.Client, s *stats.Torrent, fuseAllowOther bool) *Handler {
|
||||||
return &Handler{
|
return &Handler{
|
||||||
c: c,
|
c: c,
|
||||||
s: s,
|
s: s,
|
||||||
hosts: make(map[string]*fuse.FileSystemHost),
|
fuseAllowOther: fuseAllowOther,
|
||||||
|
hosts: make(map[string]*fuse.FileSystemHost),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +79,13 @@ func (s *Handler) Mount(mpc *config.MountPoint, ef config.EventFunc) error {
|
||||||
|
|
||||||
// TODO improve error handling here
|
// TODO improve error handling here
|
||||||
go func() {
|
go func() {
|
||||||
ok := host.Mount(mpc.Path, nil)
|
var config []string
|
||||||
|
|
||||||
|
if mpc.AllowOther || s.fuseAllowOther {
|
||||||
|
config = append(config, "-o", "allow_other")
|
||||||
|
}
|
||||||
|
|
||||||
|
ok := host.Mount(mpc.Path, config)
|
||||||
if !ok {
|
if !ok {
|
||||||
log.WithField("path", mpc.Path).Error("error trying to mount filesystem")
|
log.WithField("path", mpc.Path).Error("error trying to mount filesystem")
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,8 @@ mountPoints:
|
||||||
# Example mountpoint containing some multimedia files
|
# Example mountpoint containing some multimedia files
|
||||||
# For windows users: You can set here also a disk letter like X: or Z:
|
# For windows users: You can set here also a disk letter like X: or Z:
|
||||||
- path: ./distribyted-data/mountpoints/multimedia
|
- path: ./distribyted-data/mountpoints/multimedia
|
||||||
|
# Add this flag if you want to allow other users to access this fuse mountpoint. You need to add user_allow_other flag to /etc/fuse.conf file.
|
||||||
|
# fuse-allow-other: true
|
||||||
torrents:
|
torrents:
|
||||||
# - torrentPath: /path/to/torrent/file.torrent
|
# - torrentPath: /path/to/torrent/file.torrent
|
||||||
- magnetUri: "magnet:?xt=urn:btih:c9e15763f722f23e98a29decdfae341b98d53056&dn=Cosmos+Laundromat&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fcosmos-laundromat.torrent"
|
- magnetUri: "magnet:?xt=urn:btih:c9e15763f722f23e98a29decdfae341b98d53056&dn=Cosmos+Laundromat&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fcosmos-laundromat.torrent"
|
||||||
|
|
Loading…
Reference in a new issue