Plugin: not implemented

What is the problem you are having with rclone?

Hello. I try to build a minimal rclone backend plugin. I have read the rclone documentation and used the minimal example but the plugin can not be loaded because it is "not implemented". What does that mean? What needs to be added to the minimal example?

$ cat go.mod
module github.com/foo/foo

go 1.15

require github.com/rclone/rclone v1.53.1
$ cat dummy.go
package main

import (
	"fmt"

	"github.com/rclone/rclone/fs"
	"github.com/rclone/rclone/fs/config/configmap"
)

func init() {
	fs.Register(&fs.RegInfo{
		Name:        "minimal",
		Description: "I am just a dummy",
		NewFs: func(name string, root string, config configmap.Mapper) (i fs.Fs, e error) {
			return nil, fmt.Errorf("TODO")
		},
	})
}

What is your rclone version (output from rclone version)

rclone v1.53.1
- os/arch: linux/amd64
- go version: go1.15

Which OS you are using and how many bits (eg Windows 7, 64 bit)

Arch Linux

The command you were trying to run (eg rclone copy /tmp remote:tmp)

$ go build -buildmode=plugin -o librcloneplugin_backend_dummy.so .
$ rclone --version
Failed to load plugin librcloneplugin_backend_dummy.so: plugin: not implemented
rclone v1.53.1
- os/arch: linux/amd64
- go version: go1.15

A log from the command with the -vv flag

Failed to load plugin librcloneplugin_backend_dummy.so: plugin: not implemented
2020/10/20 21:36:27 DEBUG : rclone: Version "v1.53.1" starting with parameters ["rclone" "-vv" "--version"]
rclone v1.53.1
- os/arch: linux/amd64
- go version: go1.15

I was able to make it work! But only with a self compiled rclone release instead of the precompiled rclone release.

I changed the go version in the plugin go.mod to 1.14 to match the rclone go version. Then I compiled rclone, exported the plugin path environment variable and the error was gone.

$ cd $GOPATH/pkg/mod/github.com/rclone/rclone@v1.53.1
$ go build
$ export RCLONE_PLUGIN_PATH=$GOPATH/src/github.com/foo/foo
$ ./rclone version
rclone v1.53.1-DEV
- os/arch: linux/amd64
- go version: go1.15.3

./rclone config also lists the new dummy backend.

@ncw It looks like the statically linked rclone release produces this error. Any plans to provide dynamically linked builds for this use case? At least this should be noted in the documentation.
More info here: https://github.com/golang/go/issues/19569.

I think to use plugins the rclone will have to be compiled non-statically which is the default compile mode.

I'd quite like to include rclone cmount in a build also which would require the same.

However to build like this I'd need shared-c libraries etc for all the linux patforms rclone supports so maybe what I should do is just do a linux/amd64 dynamic build and mark it seperately. That would probably confuse the users though as there are quite a lot of download options already!

Thoughts?

If the user is not sure which is the correct download and chooses the dynamically linked file instead of the statically linked one, it wouldn't make any difference to him, right?
I would appreciate it if I would be able to download a dynamically linked file especially if there are other use cases besides plugin usage.

I'm not sure. I don't want to break existing users of rclone.

Can you please make a new issue on github about this and I'll look into making a dynamic build (or changing the current linux/amd64 build).

Done: https://github.com/rclone/rclone/issues/4702

1 Like

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.