Commit Graph

734 Commits

Author SHA1 Message Date
Richard W.M. Jones
ebf8a3654a bindtests: Fill in all fields in dummy lvm_pv struct.
Used for testing RStruct/RStructList return values, but only
in GObject and Java bindings.
2014-03-07 15:53:59 +00:00
Richard W.M. Jones
dff35285e4 java: Use correct Set*Field JNI accessors to set fields of the appropriate type.
Using the wrong accessors (somehow - I have no idea how) caused other
fields in the struct to contain incorrect values.
2014-03-07 15:53:59 +00:00
Richard W.M. Jones
7a0e71f733 java: Factor out common field code in RStructList.
No functional change.
2014-03-07 15:53:59 +00:00
Richard W.M. Jones
8c219636a2 java: Split long lines in generated output, and add other whitespace.
No functional change.
2014-03-07 15:53:59 +00:00
Richard W.M. Jones
d00840d727 java: Fix bogus construction of all RStructList returned values (RHBZ#1073906).
Thanks Maarten on IRC for spotting the problem.
2014-03-07 15:53:59 +00:00
Richard W.M. Jones
6cc521dc45 generator: Sort most output.
Look for use of external_functions and fish_functions and replace with
use of external_functions_sorted and fish_functions_sorted where
possible.  This ensures that the output of the generator is sorted as
far as possible.

I also checked for uses of internal_functions and documented_functions
but those are not used.  The *_sorted versions are always used
instead.
2014-02-15 20:27:12 +00:00
Richard W.M. Jones
72713825c4 gobject: Remove some more warnings from session.c code. 2014-02-13 17:48:23 +00:00
Richard W.M. Jones
e74c957a2b gobject: Clean up some warnings about unused variables. 2014-02-13 17:48:23 +00:00
Richard W.M. Jones
99ce50e0a0 gobject: Use spaces between function name and call parameters.
This is just a whitespace change.

This was done by running the following command and then fixing a
couple of places where it got it wrong:

perl -pi.bak -e 'unless (m/#define/) { s/([a-zA-Z0-9])\(/$1 (/g }' \
  generator/gobject.ml
2014-02-13 17:48:23 +00:00
Pino Toscano
a948389ce9 actions/part_set_gpt_type: set type of "guid" parameter as "GUID" (RHBZ#1008417).
Switch the type of the "guid" parameter from "String" to "GUID"; this
adds the validation of the GUID as such, rejecting straight away invalid
GUIDs which otherwise could be handled badly by low-level tools (such as
sgdisk).

Add a couple of easy tests (taken from RHBZ#1008417) to
part_set_gpt_type about this.
2014-02-10 11:00:09 +01:00
Pino Toscano
775cad63a3 generator: generate code for parameter validation
Implemented only in the C output, since every binding uses it anyway,
and just for the "GUID" type (since its format is well-known).
2014-02-06 20:02:51 +01:00
Pino Toscano
b10dd601fb generator: add a GUID parameter type
At the moment it is basically the change as String, and it is mapped as
if it was such.
2014-02-06 17:43:04 +01:00
Pino Toscano
820b870167 New API: part-get-name (RHBZ#593511).
Counterpart of part-set-name, it uses sgdisk (hence needs the "gdisk"
feature) to query for the label/name of a partition in a GPT layout.
2014-02-04 15:54:44 +01:00
Richard W.M. Jones
588af1953e New API: disk-create for creating blank disks.
This is a wrapper around either 'qemu-img create' or calls to open,
truncate and posix_fallocate which litter and complicate existing
code.
2014-01-28 21:02:11 +00:00
Richard W.M. Jones
53a3ff9c00 lib: Handle Ceph/rbd paths properly (RHBZ#1026688).
The path at the protocol level is:

  pool/disk

(with no leading '/' character).  This is now what you have to pass to
guestfs_add_drive_opts.

Also Ceph can be called with no explicit servers (it uses the contents
of /etc/ceph/ceph.conf instead).  So allow zero servers to be used.
2014-01-23 14:46:03 +00:00
Colin Walters
49c3d819c1 generator/set-uuid: Fix two typos in documentation 2014-01-22 15:47:34 +00:00
Richard W.M. Jones
1e4663858b New API: set-backend-settings, get-backend-settings.
Allow settings (an arbitrary list of strings) to be passed to the
current backend.  This will allow us to tweak how the backend works,
eg. by forcing TCG.
2014-01-18 16:32:03 +00:00
Pino Toscano
efb5f18415 New API: copy-attributes.
This allows one to copy attributes (like permissions, xattrs,
ownership) from a file to another.
2014-01-13 14:57:44 +01:00
Richard W.M. Jones
6c971faecf Update copyright dates for 2014. 2014-01-02 16:53:34 +00:00
Richard W.M. Jones
ee4ce2a029 ruby: Fix .new method (RHBZ#1046509).
The .new method was unintentionally broken in
commit 9466060201.

This fixes the .new method and allows it to be called with multiple
parameters, so you can use:

  Guestfs::Guestfs.new
  Guestfs::Guestfs.new()
  Guestfs::Guestfs.new(:close_on_exit => false)
  etc.

For backwards compatibility, Guestfs::create may still be used.

This commit also adds regression tests:

 - Use .new method in regular tests.  (Because this was not done
   before, we didn't catch the breakage.)

 - Test that ::create still works.

 - Test that args can be passed to .new method.
2013-12-27 13:22:20 +00:00
Richard W.M. Jones
78b9229bc8 lib: Export guestfs_compare_* functions for comparing structs and lists of structs. 2013-12-18 15:15:52 +00:00
Richard W.M. Jones
3d398687be lib: Export guestfs_copy_* functions for copying structs and lists of structs.
These complement the guestfs_free_* functions.
2013-12-18 15:15:52 +00:00
Richard W.M. Jones
0f3489ba6b lib: Rename cleanup-structs.c -> structs-cleanup.c and free-structs.c -> structs-free.c.
Just renaming generated files, no other effects.
2013-12-18 15:15:52 +00:00
Richard W.M. Jones
882b91cb48 generator: Fix bug in documentation of guestfs_free_* functions.
These appeared in the documentation as:

 void guestfs_free_int_bool (struct guestfs_free_int_bool *);
                                            ^^^^

which is obviously wrong.
2013-12-18 15:15:52 +00:00
Pino Toscano
2392fae680 drives: add CD-ROM disk images as read-only drives (RHBZ#563450).
The current add_cdrom way basically appends a new raw "-cdrom /path"
parameter to the qemu invocation (even when using libvirt as backend),
hence such images are seen as "CD-ROM drives" inside the appliance.
However, there is no need for such particular behaviour, as they need to
be handled as normal (read-only) drives.

Adding CD-ROM disk images as drives also changes the device names used
for them inside the appliance from /dev/srN to the usual e.g. /dev/sdX.

These changes fix different issues:
- it is possible to start guestfish without adding disks with -a, then
  just add-cdrom and run
- list-devices does not cause guestfsd to crash when sorting the list
  of devices (exposed by the test case in RHBZ#563450)
- the result of list-devices now reflects the order images were added
  (RHBZ#563450)

add_cdrom is still deprecated, but now in favour of add_drive_ro
(instead of add_drive), with its documentation reflecting that.

Add two small regression tests for the fixes described above.
2013-12-16 14:54:27 +01:00
Pino Toscano
c60dc40fe4 fish: improve the command error messages
- when a command needs no parameters, tell that explicitly instead of
  "command should have 0 parameters"
- use gettext's plural form when printing the number of required
  arguments
- improve the error message for a variable number of parameters limited
  only in the maximum number of them, using also a plural form
2013-12-05 15:44:00 +00:00
Richard W.M. Jones
5ee193433a lua: Don't redefine lua_objlen if already defined.
lua 5.2.2 seems to define this symbol already.
2013-11-22 17:15:20 +00:00
Richard W.M. Jones
c032130226 perl: Give error instead of crashing if optarg is not an array reference.
$g->add_drive ("", server => 1);

would segfault.  Now it gives a nice error instead:

  array reference expected for 'server' argument at [line]
2013-11-14 15:45:23 +00:00
Matthew Booth
12e0e3fb09 docs: guestfs_case_sensitive_path returns error on non-existent path 2013-10-29 14:29:34 +00:00
Richard W.M. Jones
92e1864913 events: Add a warning event and direct all warning messages through it.
This also causes warnings to be printed even in non-verbose mode,
which is useful.
2013-10-11 15:34:23 +01:00
Richard W.M. Jones
46304e9389 daemon: Fix macro definition.
Defined a bogus macro along an unused code path.
2013-10-11 11:13:18 +01:00
Richard W.M. Jones
494c18802b daemon: When valgrinding the daemon, take steps to cleanly exit daemon.
This adds a new internal API: internal_exit

Only when valgrinding the daemon, have the library call internal_exit
along the close path, and close the sockets first.  This ensures we
will see normal valgrind messages (we were only seeing valgrind aborts
before).

Note this is not used in production builds.
2013-10-11 09:13:11 +01:00
Richard W.M. Jones
b2baaa0029 generator: Change handling of C 'function(void)' to be simpler.
This also fixes an obscure case in daemon/optgroups.h.

The only difference in the generated output is:

--- daemon/optgroups.h.orig	     2013-10-09 20:42:02.479681861 +0100
+++ daemon/optgroups.h		     2013-10-09 20:42:10.563681858 +0100
@@ -149,7 +149,7 @@
   int optgroup_inotify_available (void) { return 0; }

 #define OPTGROUP_JOURNAL_NOT_AVAILABLE \
-  int __attribute__((noreturn)) do_internal_journal_get () { abort (); } \
+  int __attribute__((noreturn)) do_internal_journal_get (void) { abort (); } \
   int __attribute__((noreturn)) do_journal_close (void) { abort (); } \
   int64_t __attribute__((noreturn)) do_journal_get_data_threshold (void) { abort (); } \
   int __attribute__((noreturn)) do_journal_next (void) { abort (); } \
2013-10-09 20:43:25 +01:00
Richard W.M. Jones
ae897e055a builder: Upload /etc/resolv.conf from the host when the network is enabled.
When the user has enabled the network (not the default) we upload
/etc/resolv.conf from the host to the appliance /etc/resolv.conf
so that programs in the appliance can contact nameservers.

Commit 9521422ce6 previously changed the
behaviour to copy /etc/resolv.conf into the sysroot when running
commands.
2013-10-08 12:33:16 +01:00
Richard W.M. Jones
4fc44a0157 blockdev: Deprecate blockdev_setbsz and make it do nothing (RHBZ#624334).
This call never did anything.  Don't use it.  Also I have submitted a
patch upstream to remove the corresponding option from blockdev.

See RHBZ#1002825 for an explanation of why this call was always
useless.

Thanks: Masayoshi Mizuma
2013-10-08 10:04:27 +01:00
Richard W.M. Jones
749e947bb0 add_drive: Introduce 'cachemode' parameter to control drive caching.
This commit adds an optional 'cachemode' parameter to the 'add_drive'
API to control caching.  This corresponds approximately to the
'-drive ...,cache=' parameter in qemu, but the choices are much more
restrictive, just 'writeback' or 'unsafe', for reasons outlined below.

The caching modes supported by recent QEMU are:

  writeback:
   - Reports data writes completed when data is present in the host
     page cache.
     Only safe provided guest correctly issues flush operations.

  writethrough:
   - Reports data writes completed only when each write has been
     flushed to disk.  Performance is reported as not good.

  none:
   - Uses O_DIRECT (avoids all interaction with host cache), but does
     not ensure every write is flushed to disk.
     Only safe provided guest correctly issues flush operations.

  directsync:
   - Uses O_DIRECT (avoids all interaction with host cache), and
     ensures every write has been flushed to disk.

  unsafe:
   - No special handling.

Since the libguestfs appliance kernel always issues flush operations
(eg. for filesystem journalling and for sync) the following modes can
be ignored: 'directsync', 'writethrough'.

That leaves 'writeback', 'none' and 'unsafe'.  However 'none' is both
a constant source of pain (RHBZ#994517), is inefficient because it
doesn't use the host cache, and does not give us any safety guarantees
over and above 'writeback'.  Therefore we should ignore 'none'.

This leaves 'writeback' (safe) and 'unsafe' (fast, useful for scratch
disks), which is what we implement in this patch.

Note that the previous behaviour was to use 'none' if possible, else
to use 'writeback'.  The new behaviour is to use 'writeback' only
which is (in safety terms) equivalent to 'none', and also faster and
less painful (RHBZ#994517).

This patch also allows you to specify a cache mode for network drives
which also previously defaulted to 'writeback'.

There is a considerable performance benefit to using unsafe (for
scratch disks only, of course).  The C API tests only use scratch
disks (since they are just tests, the final state of the disk doesn't
matter), and this decreases total run time from 202 seconds to 163
seconds, about 25% faster.
2013-09-01 13:46:24 +01:00
Richard W.M. Jones
1c8986e45c mke2fs: Document that too small blockscount will result in ext2 filesystem (RHBZ#1002032). 2013-08-29 13:59:14 +01:00
Richard W.M. Jones
c04fbbda3e rsync: Document use of glob + rsync-out in guestfish (RHBZ#1001876). 2013-08-29 13:49:26 +01:00
Richard W.M. Jones
78dbd08dd2 Rename 'qemu' as 'hv', 'LIBGUESTFS_QEMU' as 'LIBGUESTFS_HV'. 2013-08-14 17:25:34 +01:00
Richard W.M. Jones
29d8658311 daemon: Ensure CLEANUP_FREE* variables are initialized with NULL.
Otherwise an early exit from the function will cause an uninitialized
pointer to be freed.

This fixes commit 1d7c3a2782.
2013-08-11 23:38:34 +01:00
Richard W.M. Jones
1d7c3a2782 daemon: Device name translation now allocates a new string.
Previously device name translation worked on the string in-place.

This worked fine because the device strings always come from XDR where
they are dynamically allocated.  However it wouldn't work if the
translated name had to be longer than the original, specifically for
/dev/sd -> /dev/ubd (for User Mode Linux).

Therefore this commit changes the generator so that
device_name_translation and parse_btrfsvol (which depends on it)
allocate the new device name instead of overwriting it.
2013-08-11 17:39:57 +01:00
Richard W.M. Jones
89cf1c1163 daemon: Move all RESOLVE macros to daemon/stubs.c.
These macros are pretty horrible to use, with unexpected side-effects.
Move them exclusively into the generated code and rewrite the one
place in the general C code which used them.

There's no functional change in this code.
2013-08-11 17:39:57 +01:00
Richard W.M. Jones
c4a3e8112a New APIs: aug-setm and aug-label.
Bindings for the aug_setm and aug_label APIs in Augeas.
2013-08-06 11:47:21 +01:00
Richard W.M. Jones
c663ab3bb9 daemon: cap-get-file: Return empty string if no capability on file (RHBZ#989356).
Return an empty string (instead of an error) if no capabilities are
set on a file, and document that in the API.
2013-07-29 14:37:50 +01:00
Richard W.M. Jones
ebf477107d tests: Add tests for the new journal APIs (RHBZ#988100).
This relies on the test data from
commit b502197ec4.
2013-07-28 19:16:04 +01:00
Richard W.M. Jones
5cb7f294f6 New APIs: Add systemd journal support (RHBZ#988100).
This adds simple support for reading the journal files from guests
that use the systemd journal.

The new APIs are:

  journal-open
  journal-close
  journal-next
  journal-skip
  journal-get
  journal-get-data-threshold
  journal-set-data-threshold
  internal-journal-get

More complex journal support (eg. for seeking within the journal,
support for cursors) could be added later.
2013-07-28 19:16:03 +01:00
Richard W.M. Jones
e31c32ce1b generator: Fix the case where a daemon function has one FileIn/FileOut parameter and no other parameters.
The FileIn/FileOut parameters are not passed through to the daemon.
Previously we generated incorrect RPC code (an empty 'struct
guestfs_<fn>_args') because we didn't account for these FileIn/FileOut
parameters correctly.
2013-07-27 16:45:37 +01:00
Richard W.M. Jones
559bd48960 generator: Fix whitespace. 2013-07-27 15:58:32 +01:00
Richard W.M. Jones
7c8c6e0760 fish: Allow -N filename=type to use 'filename' instead of 'test1.img' (etc.)
So:

  guestfish -N fs

is equivalent to:

  guestfish -N test1.img=fs
2013-07-22 15:45:06 +01:00
Richard W.M. Jones
8580ef7d0f New API: Implement set-uuid for ext2/3/4 and XFS (RHBZ#986877).
Also includes tests.
2013-07-22 13:52:23 +01:00