On Mon, Oct 25, 2021 at 10:01 AM Richard W.M. Jones <rjones(a)redhat.com>
wrote:
> 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,
...).
I believe that Matthew hit this problem too ...
(I forgot to reply to all...)
I ended up creating a new repository with the generated files:
https://github.com/mrnold/go-libnbd
In my case it sort of made sense because I also needed to change it to
use LDFLAGS instead of pkg-config, since Bazel ignores pkg-config.
But I would be happy to get rid of this if there's a better way.
On Mon, Oct 25, 2021 at 10:01 AM Richard W.M. Jones <rjones(a)redhat.com>
wrote:
> [Adding Matthew]
>
> On Mon, Oct 25, 2021 at 04:45:03PM +0300, Nir Soffer 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
>
> That website is entirely static so if it involves fetching stuff from
> there it's probably not going to work.
>
> > 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,
...).
>
I believe that Matthew hit this problem too ...
>
> > 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
>
> I'm not sure I understand what this all means. Is that the literal
> name of the git tag (ie.
> git tag
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.
> >
> > [1]
https://gerrit.ovirt.org/c/ovirt-imageio/+/117277
>
> Rich.
>
> --
> Richard Jones, Virtualization Group, Red Hat
>
http://people.redhat.com/~rjones
> Read my programming and virtualization blog:
http://rwmj.wordpress.com
> libguestfs lets you edit virtual machines. Supports shell scripting,
> bindings from many languages.
http://libguestfs.org
>
>