[libvirt] Segfault in libvirtd when run as a service

Daniel P. Berrange berrange at redhat.com
Thu Jun 10 18:07:21 UTC 2010


On Thu, Jun 10, 2010 at 08:57:15PM +0300, Emre Erenoglu wrote:
> On Thu, Jun 10, 2010 at 5:02 PM, Matthias Bolte <
> matthias.bolte at googlemail.com> wrote:
> 
> > 2010/6/10 Emre Erenoglu <erenoglu at gmail.com>:
> > The initscript explicitly starts the one in /usr/sbin. If you just
> > start libvirtd manually without an absolute path then you'll start the
> > one in /usr/local/sbin. This might explain why you cannot reproduce
> > the segfault manually, but it doesn't explain why the segfault
> > happens.
> >
> 
> There's no other installation of libvirt in the system. I can also reproduce
> the same thing in all Pardus machines, so I believe it's something in
> libvirt not doing well with something else in our service init mechanisms.

I guess I'd put money on some environment variable causing trouble.
It could be a *missing* environment variable that we expect to always
be set, or something like that

> > >> Could you provide a GDB backtrace of the segfault? The syslog entry only
> > >> says that it crashed in libc, that's not enough information to
> > >> debug the segfault.
> > >
> > > Unfortunately, I can't find a related core file in the system. In fact,
> > core
> > > file is not generated. I'll also try to fix this out and come back to the
> > > list.
> > >
> >
> > Getting a backtrace would be simpler if you could reproduce the
> > problem manually. In that case you could just start libvirtd in GDB.
> > But getting a backtrace from a coredump will work too.
> >
> I can't reproduce the segfault when I run it manually. It only happens when
> it's run from this python script. I will try to initialize gdb inside the
> script and connect remotely to the gdb session, but it's getting a bit over
> my debugging capabilities :)  For example, I don't know how to assign the
> symbols and source code etc from the package build directory to gdb.

Try creating a wrapper script, eg

   mv /usr/sbin/libvirtd /usr/sbin/libvirtd.real
   cat > /usr/sbin/libvirtd <<EOF
   #!/bin/sh
   cd /tmp
   ulimited -c unlimited
   exec /usr/sbin/libvirtd.real
   EOF
   chmod +x /usr/sbin/libvirtd

That will hopefully give you a core dump in /tmp you can get get a
stack trace from

Daniel
-- 
|: Red Hat, Engineering, London    -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org        -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list