On Mon, Oct 25, 2021 at 4:45 PM Nir Soffer <nsoffer(a)redhat.com>
wrote:
>
> I'm playing with libnbd go module, planning to use it in a new command[1]
>
> The biggest obstacle for me is that the module is not published in a way that
> Go developers expect.
>
> The module is listed in:
>
https://pkg.go.dev/github.com/libguestfs/libnbd/golang
>
> But the module actually lives in:
>
https://github.com/libguestfs/libnbd/tree/master/golang/src/libguestfs.or...
>
> So the pkg.go.dev page is broken, .e.g no there is no documation or license, and
> the suggested import is wrong.
>
> The module name is "libguestfs.org/libnbd". But if you try to use it,
> for example
> in the (improved) example from libnbd-golang.pod:
>
> $ cat test.go
> package main
>
> import "fmt"
> import "libguestfs.org/libnbd"
>
> func main() {
> h, err := libnbd.Create()
> if err != nil {
> panic(err)
> }
> defer h.Close()
> uri := "nbd://localhost"
> err = h.ConnectUri(uri)
> if err != nil {
> panic(err)
> }
> size, err := h.GetSize()
> if err != nil {
> panic(err)
> }
> fmt.Printf("size of %s = %d\n", uri, size)
> }
>
> $ go mod init example/test
> go: creating new go.mod: module example/test
> go: to add module requirements and sums:
> go mod tidy
>
> $ go mod tidy
> go: finding module for package
libguestfs.org/libnbd
> example/test imports
>
libguestfs.org/libnbd: cannot find module providing package
>
libguestfs.org/libnbd: unrecognized import path
> "libguestfs.org/libnbd": reading
>
https://libguestfs.org/libnbd?go-get=1: 404 Not Found
>
> If we use
libguestfs.org,
https://libguestfs.org/libnbd?go-get=1
> should return the expected
> metadata instead of 404.
>
> But even if "libguestfs.org/libnbd" would work, we cannot use the
> module from the source
> since the source is missing the generated files (wrappers.go, binding.go, ...).
>
> It looks like the only ways to use the module are:
>
> - Vendor the go code from the tarball.
>
> I did not try this since I don't want to copy libnbd into source into
> my project.
>
> - Clone and build libnbd locally, and replace
libguestfs.org with the
> path to your local source
>
> $ go mod edit -replace
>
libguestfs.org/libnbd=../../src/libnbd/golang/src/libguestfs.org/libnbd
> $ go mod tidy
> go: found
libguestfs.org/libnbd in
libguestfs.org/libnbd
> v0.0.0-00010101000000-000000000000
>
> $ cat go.mod
> module example/test
>
> go 1.16
>
> replace
libguestfs.org/libnbd =>
> ../../src/libnbd/golang/src/libguestfs.org/libnbd
>
> require
libguestfs.org/libnbd v0.0.0-00010101000000-000000000000
>
>
> But the version is wrong - it should be v1.10.0.
> I think the issue is missing tag:
>
https://golang.org/ref/mod#vcs-version
>
> If a module is defined in a subdirectory within the repository,
> that is, the module subdirectory
> portion of the module path is not empty, then each tag name must
> be prefixed with the module
> subdirectory, followed by a slash. For example, the module
>
golang.org/x/tools/gopls is defined
> in the gopls subdirectory of the repository with root path
>
golang.org/x/tools. The version v0.4.0
> of that module must have the tag named gopls/v0.4.0 in that repository.
>
> So the linbd project needs a tag like:
>
golang/src/libguestfs.org/libnbd/v1.10.0
>
> Removing the "src/libguestfs.org" directories will clean things up:
> golang/libnbd/v1.10.0
>
> I hope we can solve this issue. Making the go binding easy to use for
> developers is
> important for making libnbd more popular in the Go community.
Another issue, what is the license of the libnbd Go module?
The project license is LGPL 2.1, but how can tools find the
license when we point them to a subdirectory?, and the license
is not using a standard file name?
Some modules have a GPL header, and some LGPL:
$ git grep -n 'GNU General Public' golang | wc -l
66
$ git grep -n 'GNU Lesser General Public' golang | wc -l
6
I guess using LGPL is the right license?
The license is supposed to be LGPLv2+ (see COPYING.LIB in the main
source directory).
However two of the files do have an incorrect GPL license statement in
them, which I'll fix shortly.
Note that the tests have the correct (GPL) license - these should not
be linked into the end user's programs so GPL is fine for those.
Rich.
I think the directory with the module should have a LICENSE file to
make this clear, and libnbd-golang.pod should have a LICENSE section.
Nir
virt-top is 'top' for virtual machines. Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.