| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit removes the external main loop, which never worked
and caused a number of bugs. Requests are now done synchronously,
and if the user wants to have requests issued in the background
or to have a responsive GUI, then they'll just have to use threads.
The big change is to push all reads and writes through two
functions called send_to_daemon (for writes) and recv_from_daemon
(for reads) which operate synchronously. These functions
read/write whole messages, and also handle checking for EOF
(ie. daemon died) and asynchronous log message events from
qemu (eg. from debug / dmesg printed by the guest). A more
complete description of how these work can be found in the code.
This code passes a complete run of the tests.
Bugs believed to be fixed by this commit:
https://bugzilla.redhat.com/show_bug.cgi?id=501888
internal error: reply callback called twice
https://bugzilla.redhat.com/show_bug.cgi?id=504418
In virt-inspector: "download: guestfs_download reply failed, see earlier error messages"
I have tried to avoid reintroducing this:
https://bugzilla.redhat.com/show_bug.cgi?id=508713
libguestfs: error: write: Broken pipe (guestfish only)
One other benefit of this is that 'set_busy/end_busy' calls
no longer appear in traces.
|
|
|
|
|
| |
Enable this by calling guestfs_trace (handle, 1) or by
setting the LIBGUESTFS_TRACE=1 environment variable.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously non-daemon actions were called directly by
user code, eg:
/* Non-generated */
int
guestfs_set_verbose (guestfs_h *g, int v)
{
g->verbose = !!v;
return 0;
}
This changes these actions so they go indirectly via
some generated code, eg:
/* Generated */
int guestfs_set_verbose (guestfs_h *g,
int verbose)
{
return guestfs__set_verbose (g, verbose);
}
/* Non-generated */
int
guestfs__set_verbose (guestfs_h *g, int v)
{
g->verbose = !!v;
return 0;
}
The aim is to have a place in the generated code where
we can add debug or tracing information for these non-
daemon calls.
|
|
|
|
|
| |
* src/guestfs.c (guestfs__receive_file_sync): Don't set "r",
only to ignore it.
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now that we're using gnulib in earnest, any manual definition
would provoke a redefinition warning.
* fish/fish.c (_GNU_SOURCE): Don't define.
* fish/destpaths.c (_GNU_SOURCE): Likewise.
* src/guestfs.c (_GNU_SOURCE): Likewise.
* bootstrap (modules): Add asprintf, strchrnul, strerror, strndup
and vasprintf.
* fish/fish.c (main): Set argv[0] to sanitized program_name, so
functions like getopt_long that use argv[0] use the clean name.
|
| |
|
| |
|
|
|
|
|
| |
GCC 4.4.1 warns about some unused macros. Comment these out
while they are not used.
|
|
|
|
|
|
|
| |
Even though these functions are marked as "not implemented yet",
and they will surely return a value once implemented, ...
* src/guestfs.c (select_add_timeout): Declare with noreturn attribute.
(select_remove_timeout): Likewise.
|
|
|
|
| |
* src/guestfs.c (guestfs_end_busy): Add a "default:" label.
|
|
|
|
|
| |
* src/guestfs.c [struct guestfs_h] (msg_in_size, msg_in_allocated):
(msg_out_size, msg_out_allocated): Change type from int to unsigned int.
|
|
|
|
| |
* src/guestfs.c (receive_file_data_sync, xread, xwrite): Use char*.
|
|
|
|
| |
* src/guestfs.c (guestfs_launch): Handle dup failure.
|
|
|
|
|
|
|
|
|
| |
* bootstrap (modules): Add ignore-value.
* src/guestfs.c: Include "ignore-value.h".
(stdout_event): Ignore failure to write to stderr.
Also, prefer STDERR_FILENO over the literal "2".
* src/Makefile.am (libguestfs_la_CPPFLAGS): Include gnulib's .h files.
(libprotocol_la_CFLAGS): Remove -Wall -Wno-unused.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If you use the guestfs_add_drive function, then currently it
generates a qemu command line element like:
-drive ...,cache=off,...
This causes qemu to try to open the device with O_DIRECT.
Unfortunately some filesystems don't support this flag, notably tmpfs,
which means you can't use libguestfs in conjunction with tmpfs. On
some systems /tmp is a tmpfs filesystem.
This patch fixes this so that if the filesystem doesn't support
O_DIRECT, then we omit the cache=off parameter. This seems reasonable
from a reliability point of view, because if you're using tmpfs then
you probably didn't expect reliability in the case where your system
suddenly powers off.
|
|
|
|
| |
Adds new API calls to set and get this flags.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Change the way the qemu command is displayed to look like
this:
/usr/bin/qemu-kvm \
-drive file=/tmp/test.img,cache=off,if=virtio \
-m 500 \
-no-reboot \
-kernel /tmp/libguestfsHBJHRh/kernel \
-initrd /tmp/libguestfsHBJHRh/initrd \
[...]
This allows the command line to be copied and pasted directly
into the shell, and also makes it simpler to read.
|
|
|
|
|
|
|
|
| |
Add ./configure --with-net-if=(virtio|ne2k_pci) option.
This lets you workaround the following virtio_net bug:
https://bugzilla.redhat.com/show_bug.cgi?id=516022
|
|
|
|
|
| |
This allows people to use the ne2k-pci network driver, for those
situations where the virtio_net driver is broken (cough 516022 cough).
|
|
|
|
|
|
| |
Use:
-net user,vlan=0,net=10.0.2.0/8
just to make the (already implicit) 10.0.2.x network explicit.
|
|
|
|
|
|
|
|
|
|
|
| |
Do it by running this command:
[exempted files are matched via .x-sc_TAB_in_indentation]
git ls-files \
| pcregrep -vf .x-sc_TAB_in_indentation \
| xargs pcregrep -l '^ *\t' \
| xargs perl -MText::Tabs -ni -le \
'$m=/^( *\t[ \t]*)(.*)/; print $m ? expand($1) . $2 : $_'
|
|
|
|
|
| |
* src/guestfs.c (guestfs_perrorf): Rename former err to errnum,
to avoid compilation error.
|
|
|
|
| |
* src/guestfs.c (guestfs_perrorf): Handle failed vasprintf.
|
|
|
|
|
|
|
|
|
|
|
| |
SELinux exists in a very disturbed state if it is enabled at
boot time, but no policy is loaded. In particular, it messes
up the security.selinux extended attributes on files in a
not-very-useful way.
We can't enable SELinux because we don't know what policy
can or should be loaded. Therefore it's best to disable it
completely.
|
| |
|
|
|
|
|
|
| |
appliance kernel."
This reverts commit 34d2df41626f1ee4172a6d40b06d72d6ed9d6348.
|
|
|
|
|
| |
This allows you to override the appliance kernel with an easy
command or environment variable.
|
|
|
|
|
|
| |
This commit just moves code around. The new support is not enabled
because it doesn't work. See qemu-devel, subject
"guestfwd option doesn't allow supplementary ,server,nowait"
|
|
|
|
|
|
|
| |
Always pass:
noapic (APIC causes problems for lots of people)
udevtimeout=300 (for very slow qemu using softemu)
acpi=off (ACPI is troublesome and unnecessary, so turn it off)
|
| |
|
|
|
|
|
|
| |
This patch also changes the way that the version is specified
in configure.ac. It is now made out of four parts (major, minor,
release and extra) and constructed for AC_INIT.
|
|
|
|
|
|
|
|
|
| |
This caused a segfault if you tried to repeatedly open and close
a guestfs handle in the same program. The reason is that the
old handler remained registered (not always - it was racey).
This adds proper cleanup to the guestfs_close path, also for file
descriptors.
|
|
|
|
|
|
|
|
|
|
|
| |
This modifies the way that struct and struct lists are generated
(for return values) so that there is no need to add an explicit
new type when adding a new structure.
All tests pass, and the C API should be compatible.
I have also inspected the changes that are made to the generated
code by hand.
|
| |
|
|
|
|
|
| |
This is used to get the PID of the qemu subprocess, mainly for
debugging and testing purposes.
|
|
|
|
|
|
|
|
|
|
| |
* src/generator.ml (safe_malloc): Define to guestfs_safe_malloc.
(safe_calloc): Define to guestfs_safe_calloc.
[most generated code]: Fail immediately upon failure of otherwise-
unchecked malloc and calloc calls.
* src/guestfs.c: Include <stddef.h>.
(xalloc_oversized): Define.
* src/guestfs.h (guestfs_safe_calloc): Declare.
|
|
|
|
|
|
|
|
| |
With this flag the packager can decide to default to a particular
qemu drive model. The current default is 'ide', however note that
we intend to change this in future to 'virtio' once some upstream
regressions are fixed. Packagers can force a particular drive
model if they wish.
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds a readdir call (mostly intended for programs). The
return value is a list of guestfs_dirent structures.
This adds the new types 'struct guestfs_dirent' and
'struct guestfs_dirent_list', along with all the code to
return these in the different language bindings.
Also includes additional tests for OCaml and Perl bindings
to test this.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
virtio_blk is the fast, virt-native block device driver
supported by qemu and KVM. Note that virtio_blk device
names are called /dev/vd*.
Existing scripts should continue working because device name
translation will silently change device names of the form
/dev/sd* to /dev/vd* as required.
See also:
http://libguestfs.org/guestfs.3.html#block_device_naming
|
|
|
|
| |
* src/guestfs.c (guestfs_error): Handle failing vasprintf.
|
|
|
|
|
|
| |
Allow the qemu memory size to be specified either by API
calls or by setting the LIBGUESTFS_MEMSIZE environment
variable.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
improvements in the tests.
|
|
|
|
|
| |
- malloc and realloc(0) are valid requests. Some implementations
may return NULL for these, which would not indicate an error.
|