Date: Tue, 10 Mar 2020 10:21:21 -0600 From: Alan Somers <asomers@freebsd.org> To: Willem Jan Withagen <wjw@digiware.nl> Cc: "freebsd-virtualization@freebsd.org" <virtualization@freebsd.org>, FreeBSD Hackers <freebsd-hackers@freebsd.org> Subject: Re: [RFC] Adding a Rados block driver to bhyve Message-ID: <CAOtMX2gKkh=Fik9wjHoAx9Gt9zwePMjmRaGP63eE2quNTmyDGw@mail.gmail.com> In-Reply-To: <936ed7c2-99d2-5df8-de3f-f64f28d2ba6f@digiware.nl> References: <9c7a8dea-ac8a-4d17-ed33-b6c4e882add8@digiware.nl> <CAOtMX2iyhS230oCysYx3YC72B8TwFrrkcXtCoMCYK85KbFORaQ@mail.gmail.com> <c2090191-920b-3d2f-f797-75a448b18ad6@digiware.nl> <CAOtMX2iwJ1_VVDXOnSP6nui-JcYMwndXMex8fxtyi6qEikUX8A@mail.gmail.com> <936ed7c2-99d2-5df8-de3f-f64f28d2ba6f@digiware.nl>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Mar 10, 2020 at 9:41 AM Willem Jan Withagen <wjw@digiware.nl> wrote: > On 10-3-2020 16:15, Alan Somers wrote: > > On Tue, Mar 10, 2020 at 3:59 AM Willem Jan Withagen <wjw@digiware.nl> > wrote: > >> On 9-3-2020 14:46, Alan Somers wrote: >> >> On Mon, Mar 9, 2020 at 4:32 AM Willem Jan Withagen <wjw@digiware.nl> >> wrote: >> >>> Hi all, >>> >>> And sorry for crosspoing three groups, but the answer can/could be a mix >>> of things to do in these three areas. >>> >>> I have a prototype of bhyve running on Rados/Ceph working: >>> https://github.com/freebsd/freebsd/pull/426 >>> >>> .......... >> >> 4) Create a bhyve-blockrbd port. >>> This is much like 3) but instead of building a bhyve-rbd executable, >>> it delivers a libblockrbd.so that is dynamically loadable by the >>> standaard bhyve that comes with base. >>> >> ............ >> >> > Great work! I also agree that option 4 sounds like the best. There's >> precedent for ports that >> > require the FreeBSD Sources. For example, see devel/py-libzfs or >> emulators/virtualbox-ose. >> > You just need to define the SRC_BASE variable. >> Hi Alan, >> >> Thanx for the hint, and it made me check what is actually available >> within the poudriere jail >> And that does have full source, so the Makefile code is mainly for those >> that build in a different way. >> >> I've got a proto version working when compiling stuff with `make >> buildworld`, but run in the >> problem that libblock_rbd.so is stripped in such a way that the symbol I >> need is removed. >> Using the unstripped version does work. >> >> Is there an incantation for the SRC Makefiles that builds a dynamical >> loadable lib?? >> And I'm still looking for a PORTS example of building a dynamical >> loadable lib. >> Or is there no generic code for that in the PORTS Mk files? >> >> --WjW >> >> BTW: Still haven't worked in your AIO code :( >> > > There are plenty of dynamic libraries built with the SRC makefiles. For > example, > https://svnweb.freebsd.org/base/head/lib/libbsdstat/Makefile?view=markup > . > > > That looks dangerously close to what I have for libblock_rbd. > === > > cat Makefile-librbd > # > # $FreeBSD$ > # > > PACKAGE=lib${LIB} > > .include <src.opts.mk> > > LIB= block_rbd > SHLIB_MAJOR= 1 > > SRCS= block_rbd.c > > CFLAGS+=-I${SRCTOP}/sys > CFLAGS+=-g -O0 -fPIC -rdynamic > LDFLAGS+=-Wl,-export-dynamic,-Bdynamic > CFLAGS+=-DWITHOUT_CAPSICUM > > LOCALBASE?= /usr/local > CFLAGS+= -I${LOCALBASE}/include > LDFLAGS+= -L${LOCALBASE}/lib -lrados -lrbd > > WARNS?= 2 > > === > > This is the code that mk.lib.bsd runs: > objcopy --only-keep-debug libblock_rbd.so.1.full libblock_rbd.so.1.debug > objcopy --strip-debug --add-gnu-debuglink=libblock_rbd.so.1.debug > libblock_rbd.so.1.full libblock_rbd.so.1 > > So still I get a stripped lib in /usr/lib. And then the one and only > symbol I need to load > is not found. Copying libblock_rbd.so.1.full actually works for me. > > So either I'm doing it the wrong way, like special options on the symbols > oid. > Or mk.lib.bsd cannot deliver dlopen/dlsym-able files? > > And there are plenty of ports that build shared libraries too, just look > at /usr/local/lib/*.so. However, the ports framework doesn't have much > special code just to support building libraries. Instead the hard work is > always done by the ports themselves. Some use autotools, some cmake, etc > etc. The simplest port I can find that uses both SRC_BASE and INSTALL_LIB > is this one: https://svnweb.freebsd.org/ports/head/devel/linux_libusb/ . > > > Oke thanx, I'll have a look at it, and given that I can see most of the > compile build stuff > in the SRC_BASE version I'll get it to work. > > --WjW > Try setting "STRIP= " in your makefile. That should prevent the stripping. However, I think there's something wrong with your library, too. The library should be usable even if it's stripped.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAOtMX2gKkh=Fik9wjHoAx9Gt9zwePMjmRaGP63eE2quNTmyDGw>