[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] tools: adjust --datadir option passed to qemu-upstream's configure script



>>> On 11.06.12 at 12:54, Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
wrote:
> On Fri, 8 Jun 2012, Jan Beulich wrote:
>> >>> On 08.06.12 at 13:42, Stefano Stabellini 
>> >>> <stefano.stabellini@xxxxxxxxxxxxx>
>> wrote:
>> > On Fri, 8 Jun 2012, Jan Beulich wrote:
>> >> >>> On 08.06.12 at 13:11, Stefano Stabellini 
>> >> >>> <stefano.stabellini@xxxxxxxxxxxxx>
>> >> wrote:
>> >> > On Mon, 4 Jun 2012, Jan Beulich wrote:
>> >> >> Passing $(SHAREDIR)/qemu-xen isn't compatible with the way
>> >> >> os-posix.c:os_find_datadir() works. While one would generally expect
>> >> >> that function to honour the --datadir configure option, fixing this is
>> >> >> quite a bit more involved than simply adjusting the configure options
>> >> >> to match the function's behavior (in that, for an installed binary, it
>> >> >> looks in $bindir/../share/qemu). Afaict, so far this can have worked
>> >> >> only by virtue of what CONFIG_QEMU_DATADIR points to being populated
>> >> >> due to (presumably) some other qemu instance being installed on
>> >> >> people's systems (but being absent when running qemu-system-i386 from
>> >> >> the dist/ portion of the build tree).
>> >> >> 
>> >> >> Signed-off-by: Jan Beulich <JBeulich@xxxxxxxx>
>> >> >> 
>> >> >> --- a/tools/Makefile
>> >> >> +++ b/tools/Makefile
>> >> >> @@ -155,7 +155,7 @@ subdir-all-qemu-xen-dir subdir-install-q
>> >> >>                --extra-ldflags="-L$(XEN_ROOT)/tools/libxc \
>> >> >>                -L$(XEN_ROOT)/tools/xenstore" \
>> >> >>                --bindir=$(LIBEXEC) \
>> >> >> -              --datadir=$(SHAREDIR)/qemu-xen \
>> >> >> +              --datadir=$(dir $(LIBEXEC))share/qemu \
>> >> >>                --disable-kvm \
>> >> >>                --python=$(PYTHON) \
>> >> >>                $(IOEMU_CONFIGURE_CROSS); \
>> >> >> 
>> >> >> 
>> >> >> 
>> >> >> 
>> >> > 
>> >> > This is a QEMU bug, so I would rather fix it there.
>> >> 
>> >> That's not as simple as you appear to think, as it would be necessary
>> >> to meaningfully express an arbitrary datadir relative to bindir.
>> >> 
>> >> > In fact the fix could be as simple as the appended patch.
>> >> > Does it work for you?
>> >> > 
>> >> > diff --git a/os-posix.c b/os-posix.c
>> >> > index dc4a6bb..d0c873d 100644
>> >> > --- a/os-posix.c
>> >> > +++ b/os-posix.c
>> >> > @@ -136,6 +136,9 @@ char *os_find_datadir(const char *argv0)
>> >> >              g_free(res);
>> >> >              res = NULL;
>> >> >          }
>> >> > +    } else {
>> >> > +        g_free(res);
>> >> > +        res = NULL;
>> >> 
>> >> How can this work? Afaict it would even break currently working
>> >> cases, as it now makes the function return NULL not only when
>> >> both access() checks failed, but also when the first one succeeded.
>> > 
>> > Yes, you are right, I misread the error condition of "access".
>> > 
>> > Like you wrote, os_find_datadir checks for the existence of
>> > $bindir/../share/qemu that normally means /usr/lib/xen/share/qemu, then
>> > it checks for /usr/lib/xen/pc-bios and if they both don't exist return
>> > NULL and data_dir is set to CONFIG_QEMU_DATADIR (that is what we want).
>> 
>> That is what you want in the installed case.
>> 
>> > While it is certainly not how I would have written this code, it should
>> > work correctly. How is that you system has /usr/lib/xen/pc-bios or
>> > /usr/lib/xen/share/qemu?
>> 
>> As I had written in the description, I'm after the non-installed
>> case instead (i.e. running from the build tree's dist/), and that
>> case can only be covered by either fixing os_find_datadir() or
>> forcing the value of --datadir to match the function's
>> expectations.
>> 
>> Additionally, for the installed case it doesn't matter where the
>> bits are put, as it'll always be the configured value that gets
>> used.
> 
> However your patch changes the location of data_dir for the
> installed case too, from /usr/share/qemu-xen to /usr/lib/xen/share/qemu.

Sure. But it doesn't matter where exactly the bits get put (and I
actually view the pace they're currently at as less consistent then
where they would end up with the patch, but admittedly that's
likely a matter of taste).

> If you are after the non-installed case, you must be already setting
> device_model_override in your VM config file to point to the right
> binary. You might as well pass:

No, I did not have to set anything like that - xl/libxl appear to
be figuring out quite fine where the binary is. Having to add such
or this ...

> device_model_args = ['-L', '/path/to/share/file' ]

... would additionally require the VM config files to be updated
each time I update to the tip of -unstable, as I'm having a date
tag somewhere in the path.

> that should solve your problem.

It certainly would, but at a price I consider too high.

Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.