On Sat, Apr 30, 2011 at 01:10:57AM -0400, T Johnson wrote:
Thanks for responding. I'm by no means a python expert so I could
very
well be doing something wrong, but I've been playing a bit with what
you've suggested and noted a few interesting things.
1) As soon as I create 'g', something seems to take over stderr and
stdout so I can no longer print debugging output like you suggested.
This is very odd. AFAIK nothing in libguestfs should affect stdout or
stderr.
When you say "create 'g'" do you mean "g = guestfs.GuestFS()"
(ie.
create the handle) or "g.launch ()" (ie. launch the subprocess)? I
guess it is possible that something in g.launch (ie. forking off a
subprocess) might affect stdout/stderr, although we use it in an awful
lot of other programs and no one has noticed anything before.
Here's my test program:
----------------------------------------------------------------------
#!/usr/bin/python
import sys
import guestfs
print >> sys.stderr, "creating the handle"
g = guestfs.GuestFS()
print >> sys.stderr, "add_drive_ro"
g.add_drive_ro ("/dev/null")
print >> sys.stderr, "launch"
g.launch ()
print >> sys.stderr, "set_verbose"
g.set_verbose (1)
print >> sys.stderr, "delete the handle"
#g.close ()
del g
print >> sys.stderr, "finished"
----------------------------------------------------------------------
BTW you can't directly call g.close() from Python because that method
is not exposed (instead, it is called implicitly when you delete g).
So your program ought to be throwing an exception when you try to call
g.close(). I'm not sure why you are not seeing that.
You're not trying to create the underlying libguestfsmod objects
directly? Don't do that.
Here is the output from my test program:
----------------------------------------------------------------------
creating the handle
add_drive_ro
launch
set_verbose
delete the handle
libguestfs: closing guestfs handle 0x25106a0 (state 2)
libguestfs: send_to_daemon: 44 bytes: 00 00 00 28 | 20 00 f5 f5 | 00 00 00 04 | 00 00 01
1a | 00 00 00 00 | ...
libguestfs: recv_from_daemon: 40 bytes: 20 00 f5 f5 | 00 00 00 04 | 00 00 01 1a | 00 00 00
01 | 00 12 34 00 | ...
libguestfs: sending SIGTERM to process 13874
finished
----------------------------------------------------------------------
As you can see it's completely as expected
(python-libguestfs-1.11.3-1.fc16.x86_64).
2) (I assume) because of #1, g.set_verbose(1) results in no output
to
stdout/stderr either, so it hasn't been helpful so far.
3) However, I then decided to try g.set_trace(1) and that does provide
output. In the example I provided before I get this (editing config
settings in /etc/sysconfig/network):
Unfortunately (because of a bug) closing the handle does not result
in any trace output, except ...
libguestfs: trace: add_drive "/mnt/images/test_server.img"
libguestfs: trace: add_drive = 0
libguestfs: trace: launch
libguestfs: trace: launch = 0
libguestfs: trace: mount "/dev/vda1" "/"
libguestfs: trace: mount = 0
libguestfs: trace: write "/etc/sysconfig/network" "..."
libguestfs: trace: write = 0
I can't seem to get any other ouput.. but it is very interesting that
once I kill the process I see the remainder of the calls failing from
trace output:
libguestfs: trace: umount_all
libguestfs: trace: umount_all = -1 (error)
libguestfs: trace: sync
libguestfs: trace: sync = -1 (error)
libguestfs: trace: umount_all
libguestfs: trace: umount_all = -1 (error)
libguestfs: trace: sync
libguestfs: trace: sync = -1 (error)
... when you close a handle which has autosync enabled, which is now
the default, you'll see output like this. It seems like all your
handles are getting closed at once. I have no idea why.
So, I guess that is what's failing.. but I haven't been able
to
determine why yet.
This is something I've been running into on much older versions of
libguestfs all the way up to now which I'm trying your recent
"1.7.17-17.el6" RPMs for rhel6.
Ah, so this could be RHEL 6.0? This could well be a RHEL 6.0 bug.
Definitely try out the RHEL 6.1 packages from:
http://people.redhat.com/~rjones/rhel6.1-libguestfs-preview/
You'll find a lot of things are better. It's much faster for one.
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://et.redhat.com/~rjones/virt-df/