[libvirt] Building on Solaris 11 Express

Ruben Kerkhof ruben at rubenkerkhof.com
Sat Jun 4 15:20:33 UTC 2011


On Sat, Jun 4, 2011 at 16:37, Matthias Bolte
<matthias.bolte at googlemail.com> wrote:
> 2011/6/4 Ruben Kerkhof <ruben at rubenkerkhof.com>:
>> On Sat, Jun 4, 2011 at 10:40, Matthias Bolte
>> <matthias.bolte at googlemail.com> wrote:
>>> Okay VirtualBox 4.0.8 work with libvirt on Windows too. So this seems
>>> to be a Solaris specific problem. Does an earlier version of
>>> VirtualBox work, for example 4.0.0 or 3.2.10, or did it never work?
>>
>> I just tried 4.0.0, same behaviour.
>> 3.2.12 does:
>>
>> ruben at openindiana:~$ virsh list
>> VBoxSVC: error: 0 bytes read from child process
>> error: Failed to reconnect to the hypervisor
>> error: no valid connection
>> error: internal error nsIEventQueue object is null
>>
>> This is with no running vms, only one which is stopped.
>> I could have a look with gdb, if you can tell me which function I have
>> to set a breakpoint on.
>>
>> Thanks!
>>
>> Ruben
>>
>
> Try running with full debug and logging
>
> LIBVIRT_DEBUG=1 LIBVIRT_LOG_OUTPUTS=1:stderr virsh list
>
> and post the output here. I want to verify that the rest is okay and
> the problem is there where I expect it.

Ok, here it is:

ruben at openindiana:~$ LIBVIRT_DEBUG=1 LIBVIRT_LOG_OUTPUTS=1:stderr virsh list
16:57:26.268: 1: info : libvirt version: 0.9.2
16:57:26.268: 1: debug : virInitialize:395 : register drivers
16:57:26.270: 1: debug : virRegisterDriver:750 : driver=fef04f20 name=Test
16:57:26.271: 1: debug : virRegisterDriver:774 : registering Test as driver 0
16:57:26.271: 1: debug : virRegisterNetworkDriver:567 : registering
Test as network driver 0
16:57:26.272: 1: debug : virRegisterInterfaceDriver:600 : registering
Test as interface driver 0
16:57:26.272: 1: debug : virRegisterStorageDriver:633 : registering
Test as storage driver 0
16:57:26.272: 1: debug : virRegisterDeviceMonitor:666 : registering
Test as device driver 0
16:57:26.273: 1: debug : virRegisterSecretDriver:699 : registering
Test as secret driver 0
16:57:26.273: 1: debug : virRegisterNWFilterDriver:732 : registering
Test as network filter driver 0
16:57:26.274: 1: debug : virRegisterDriver:750 : driver=fef051c0 name=Xen
16:57:26.274: 1: debug : virRegisterDriver:774 : registering Xen as driver 1
16:57:26.275: 1: debug : virRegisterDriver:750 : driver=fef00ee0 name=VMWARE
16:57:26.275: 1: debug : virRegisterDriver:774 : registering VMWARE as driver 2
16:57:26.328: 1: debug : tryLoadOne:163 : Found VBoxXPCOMC.so in
'/opt/VirtualBox/i386'
16:57:26.329: 1: debug : vboxRegister:94 : VBoxCGlueInit found API
version: 3.2.12 (3002012)
16:57:26.329: 1: debug : vboxRegister:116 : VirtualBox API version: 3.2
16:57:26.330: 1: debug : virRegisterDriver:750 : driver=fef05ba0 name=VBOX
16:57:26.331: 1: debug : virRegisterDriver:774 : registering VBOX as driver 3
16:57:26.332: 1: debug : virRegisterNetworkDriver:567 : registering
VBOX as network driver 1
16:57:26.332: 1: debug : virRegisterStorageDriver:633 : registering
VBOX as storage driver 1
16:57:26.333: 1: debug : virRegisterDriver:750 : driver=fef01820 name=ESX
16:57:26.334: 1: debug : virRegisterDriver:774 : registering ESX as driver 4
16:57:26.334: 1: debug : virRegisterInterfaceDriver:600 : registering
ESX as interface driver 1
16:57:26.335: 1: debug : virRegisterNetworkDriver:567 : registering
ESX as network driver 2
16:57:26.336: 1: debug : virRegisterStorageDriver:633 : registering
ESX as storage driver 2
16:57:26.336: 1: debug : virRegisterDeviceMonitor:666 : registering
ESX as device driver 1
16:57:26.336: 1: debug : virRegisterSecretDriver:699 : registering ESX
as secret driver 1
16:57:26.337: 1: debug : virRegisterNWFilterDriver:732 : registering
ESX as network filter driver 1
16:57:26.337: 1: debug : virRegisterDriver:750 : driver=fef00ca0 name=remote
16:57:26.338: 1: debug : virRegisterDriver:774 : registering remote as driver 5
16:57:26.338: 1: debug : virRegisterNetworkDriver:567 : registering
remote as network driver 3
16:57:26.339: 1: debug : virRegisterInterfaceDriver:600 : registering
remote as interface driver 2
16:57:26.339: 1: debug : virRegisterStorageDriver:633 : registering
remote as storage driver 3
16:57:26.340: 1: debug : virRegisterDeviceMonitor:666 : registering
remote as device driver 2
16:57:26.340: 1: debug : virRegisterSecretDriver:699 : registering
remote as secret driver 2
16:57:26.341: 1: debug : virRegisterNWFilterDriver:732 : registering
remote as network filter driver 2
16:57:26.343: 1: debug : virEventRegisterDefaultImpl:148 : registering
default event implementation
16:57:26.344: 1: debug : virEventPollAddHandle:111 : Add handle fd=3
events=1 cb=fec5a5c0 opaque=0
16:57:26.344: 1: debug : virEventPollAddHandle:115 : Used 0 handle
slots, adding at least 10 more
16:57:26.345: 1: debug : virEventPollInterruptLocked:686 : Skip interrupt, 0 0
16:57:26.345: 1: debug : virEventRegisterImpl:121 : addHandle=fec5ace0
updateHandle=fec5ac00 removeHandle=fec5aae0 addTimeout=fec5a904
updateTimeout=fec5a7b0 removeTimeout=fec5a6c8
16:57:26.346: 1: debug : virConnectOpenAuth:1327 : name=(null),
auth=fef00784, flags=0
16:57:26.349: 1: debug : do_open:1064 : no name, allowing driver auto-select
16:57:26.349: 1: debug : do_open:1101 : trying driver 0 (Test) ...
16:57:26.352: 1: debug : do_open:1107 : driver 0 Test returned DECLINED
16:57:26.352: 1: debug : do_open:1101 : trying driver 1 (Xen) ...
16:57:26.352: 1: debug : do_open:1107 : driver 1 Xen returned DECLINED
16:57:26.352: 1: debug : do_open:1101 : trying driver 2 (VMWARE) ...
16:57:26.356: 1: debug : do_open:1107 : driver 2 VMWARE returned DECLINED
16:57:26.356: 1: debug : do_open:1101 : trying driver 3 (VBOX) ...
VBoxSVC: error: 0 bytes read from child process
16:57:57.714: 1: error : vboxInitialize:894 : internal error
nsIEventQueue object is null
16:57:58.045: 1: debug : do_open:1107 : driver 3 VBOX returned ERROR
16:57:58.047: 1: debug : virUnrefConnect:145 : unref connection 80a5a18 1
16:57:58.047: 1: debug : virReleaseConnect:94 : release connection 80a5a18
error: Failed to reconnect to the hypervisor
error: no valid connection
error: internal error nsIEventQueue object is null

> What the VirtualBox driver does is dlopen the VBoxXPCOMC.so, get the
> entry function VBoxGetXPCOMCFunctions and call it, see tryLoadOne in
> src/vbox/vbox_XPCOMGlue.c. This seems to work otherwise it wouldn't
> have gotten to the nsIEventQueue error. Then in src/vbox/vbox_tmp.c in
> vboxInitialize pfnComInitialize is called to initialize the XPCOM
> interface and get the IVirtualBox and ISession objects. After that it
> tries to obtain the IEventQueue object and fails because it's NULL.
> The error reporting order in this function is suboptimal and I'll fix
> that. Actually it should check the IVirtualBox and ISession object for
> NULL first because the call to pfnComInitialize probably already
> failed. But the signature of pfnComInitialize is bad, it should return
> a value to indicate an error. You also can't tell what the actual
> problem is because pfnComInitialize internally logs the reason but
> logging is typically compiled out.
>
> pfnComInitialize points to VBoxComInitialize in
> src/VBox/Main/cbindings/VBoxXPCOMC.cpp in the VirtualBox source code.
> Last time I debugged such a problem I ended up compiling VBoxXPCOMC.so
> from source and replace the system VBoxXPCOMC.so with my own one that
> just wrote debug messages to a file in /tmp so that I could figure out
> the actual problem. Last time it was a mismatch in the COM object IDs
> for the IVirtualBox and ISession objects. libvirt accidentally used
> the IDs from a beta VirtualBox SDK and the IDs had changed in the
> actual release. This made the CreateInstanceByContractID calls in
> VBoxComInitialize fail, and VBoxComUninitialize is called that
> releases the IEventQueue object and it's NULL when the VirtualBox
> driver checks it later. So the error message about IEventQueue being
> NULL is just a symptom of VBoxComInitialize failing.
>
> If we want to fix this we need to figure out why VBoxComInitialize
> fails. You could try to break on VBoxComInitialize in VBoxXPCOMC.so in
> gdb. You could also try to make gdb step into the call to
> VBoxComInitialize in vboxInitialize via pfnComInitialize. I fail at
> this, maybe it's not even possible.

You're right, I'm not able to step into any VBoxXPCOMC functions:

Breakpoint 1, vboxOpen (conn=0x80a5a18, auth=0xfef00784, flags=0) at
vbox/vbox_tmpl.c:878
878         data->pFuncs->pfnComInitialize(IVIRTUALBOX_IID_STR, &data->vboxObj,
(gdb) s
[New LWP 1]
[New LWP 2]
[New LWP 3]
890         data->pFuncs->pfnGetEventQueue(&data->vboxQueue);

> As said last time I compiled my
> own VBoxXPCOMC.so with debug log output in it to figure out the
> problem.
>
> Matthias

Ok, I'll look into doing the same.

Thanks,

Ruben




More information about the libvir-list mailing list