Commit Graph

1358 Commits

Author SHA1 Message Date
Richard Jones
fdbc5aa711 sync: Windows implementation of sync() call.
Replace calls to sync() with calls to sync_disks() which supports
Win32 via FlushFileBuffers.
2009-11-25 16:28:26 +00:00
Richard Jones
c2aad5cd92 daemon: Alternate implementation of posix_fallocate.
If the posix_fallocate function is not available [ie. Windows]
use an alternate implementation that just loops and writes.
2009-11-25 16:28:25 +00:00
Richard Jones
a951965403 dd: Missing include of <string.h>
Breaks compilation on Windows.
2009-11-25 16:28:25 +00:00
Richard Jones
34d5df70d8 daemon/Windows: Define _WIN32_WINNT when compiling on Windows. 2009-11-25 16:28:25 +00:00
Richard Jones
62d6ae454f build: update gnulib submodule to latest 2009-11-25 16:24:49 +00:00
Richard Jones
65ab9e660b build: update gnulib submodule to latest 2009-11-25 15:29:39 +00:00
Richard Jones
4404688aa3 supermin: Die with an error if no kernels found (RHBZ#539746).
Updated with a suggestion from Jim Meyering to use the '-d'
option to ls to avoid a future case of directories matching.
2009-11-25 10:22:30 +00:00
Richard Jones
299d5b9dd2 New tool: virt-list-filesystems
Use this program as a convenient way to list the filesystems
available in a disk image or libvirt guest.

Example:

  $ virt-list-filesystems /dev/vg_trick/Debian5x64
  /dev/debian5x64/home
  /dev/debian5x64/root
  /dev/debian5x64/tmp
  /dev/debian5x64/usr
  /dev/debian5x64/var
  /dev/sda1

This is designed to make it easier for novices to use guestfish
and guestmount.  In particular with guestmount this acts as a way
to get a list of filesystems to use with the '-m' option.  ie:

  $ virt-list-filesystems unknowndisk.img
  /dev/sda1
  /dev/sda2
  $ guestmount -a unknowndisk.img -m /dev/sda1 /mnt
2009-11-24 16:01:11 +00:00
Richard Jones
9b6185b9bf availability: Document how to check for single API calls
This documents how to use autotools and dlopen(3) to test for
the availability of single API calls at compile time and run time
respectively.
2009-11-24 16:01:11 +00:00
Richard Jones
979eda8a5d availability: Add a test for this call.
Because all the tested groups are optional, there's not really
a group we can reliably test, therefore test against the
empty list (which should not fail).
2009-11-24 16:01:11 +00:00
Richard Jones
3817708a5b availability: Clarify and fix documentation. 2009-11-24 16:01:11 +00:00
Richard Jones
b017cd67bb generator: Passing "" to StringList tests should turn into empty list.
This is a bug in the generator which wasn't being tickled.  If
you had a test which expected a StringList or DeviceList parameter,
and you passed "" to that test, then you'd (probably) expect to be
testing an empty list, but in fact you got a single element list
containing an empty string.  This fixes it so you get an empty list.
2009-11-24 16:01:11 +00:00
Richard Jones
6b2c7a23b6 daemon: Fix return value from aug_defnode.
Bug fix - the return value from this function was wrong
in the no-Augeas case.
2009-11-24 16:01:11 +00:00
Richard Jones
22e531bc45 Implement 'dd' command. 2009-11-23 00:10:37 +00:00
Richard Jones
acdcbac91e Use STRPREFIX instead of STREQLEN. 2009-11-22 19:14:48 +00:00
Richard Jones
e496f30dc5 generator: second parameter to upload is Dev_or_Path, not String. 2009-11-22 19:14:19 +00:00
Matthew Booth
a7a88083f0 build: Add missing dependencies in perl directory
make all in the perl directory was missing a check that the library had been
built.

make check in the perl directory was missing a check that the appliance and test
images had been built.
2009-11-21 21:14:03 +00:00
Matthew Booth
1b60344e67 build: Ensure building appliance depends on guestfsd
Previously, only the update.sh rule checked the daemon had been built. update.sh
is called directly from within make.sh, so in that path the dependency was never
checked. This adds the daemon dependency explicitly to the rebuild-from-scratch
path.
2009-11-21 21:13:36 +00:00
Matthew Booth
1befbee8b8 build: Don't re-check generator.ml for each generator_built in daemon directory 2009-11-21 21:13:12 +00:00
Matthew Booth
8b135cb552 build: Rebuild the daemon as necessary from other directories
This change ensure that making the appliance will always rebuild the daemon if
required.
2009-11-21 21:12:45 +00:00
Richard Jones
d49890d5bc Update TODO file. 2009-11-21 21:11:44 +00:00
Richard Jones
6ce1228672 perl: Add Sys::Guestfs::Lib::feature_available
This is a nicer Perl wrapper around $g->available call.

Update the other code in Sys::Guestfs::Lib to use it before using
LVM, Augeas.
2009-11-20 18:25:18 +00:00
Richard Jones
64de216ac7 availability: Skip tests when functions are not available. 2009-11-20 18:03:36 +00:00
Richard Jones
2d9953097b availability: Add optional groups and implement guestfs_available call.
The current groups are defined very conservatively using the
following criteria:
 (a) Would be impossible to implement on Windows because of
     sheer architectural differences (eg: mknod).
 (b) Already optional (augeas, inotify).
 (c) Not currently optional but not implemented on older RHEL and
     Debian releases (ntfs-3g.probe, scrub, zerofree).

The optional groups I've defined according to these criteria are:

 . augeas
 . inotify
 . linuxfsuuid
 . linuxmodules
 . linuxxattrs
 . lvm2
 . mknod
 . ntfs3g
 . scrub
 . selinux
 . zerofree

(Note that these choices don't prevent us from adding more
optional groups in future.  On the other hand to avoid breaking
ABIs we would not wish to change the above groups).

The rest of this large commit is really just implementation:

Each optional function is classified using Optional "group"
flag in the generator.

The daemon has to implement a function

  int optgroup_<name>_available (void);

for each optional group.  Some of these functions are fixed at
compile time, and some do simple run-time tests.

The do_available implementation in the daemon looks up the correct
function in a table and runs it.

We document the optional groups in the guestfs(3) man page.

Also: I added a NOT_AVAILABLE macro in order to unify all the
existing places where we had a message equivalent to
"function __func__ is not available".
2009-11-20 18:03:36 +00:00
Richard Jones
8fd7f255d6 availability: Add guestfs_available.
Start a new API allowing groups of functions to be tested for
availability.

There are two reasons for this:

(1) If libguestfs is built with missing dependencies (eg. no Augeas lib)
then the corresponding functions are disabled in the appliance.  Up till
now there has been no way to test for this except to speculatively
issue commands and check for errors.

(2) When we port the daemon to Win32 it is likely that major pieces of
functionality won't be available (eg. LVM support).  This API gives
a way to test for that.

There is no change for existing clients: you still have to check for
errors from individual API calls.

For new clients, you will be able to test for availability of particular
APIs.

Usage scenario (A): An LVM editing tool which requires
both the LVM API and inotify in order to function at all:

  char *apis[] = { "inotify", "lvm2", NULL };
  r = guestfs_available (g, apis);
  if (r == -1) {
    /* print an error and exit */
  }

Usage scenario (B): A general purpose tool which optionally provides
configuration file editing, but this can be disabled, the result
merely being reduced functionality:

  char *apis[] = { "augeas", NULL };
  r = guestfs_available (g, apis);
  enable_config_edit_menus = r == 0;
2009-11-20 18:02:10 +00:00
Richard Jones
5c9004347f daemon/Win32: Use gnulib modules for first porting to Win32. 2009-11-20 18:01:51 +00:00
Matthew Booth
03cd3050b3 build: Add missing dependency libguestfs.la->guestfs_protocol.h 2009-11-20 17:04:04 +00:00
Jim Meyering
e1b48287eb build: correct sed transformation to work also on .git-module-status
My patch was wrong.
I kept the sed transformation the same in the two places,
but it wasn't strict enough to also work on the file contents.
Sorry about that.  This fixes it.

>From 93927cc7b9f63c414e5bfeb7eba393fde3295601 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering@redhat.com>
Date: Fri, 20 Nov 2009 16:23:17 +0100
Subject: [PATCH libguestfs] build: correct sed transformation to work also on .git-module-status

* autogen.sh: Use a more strict sed transformation so it works also
on the contents of .git-module-status, which has no prefix.
* cfg.mk (_submodule_hash): Use a stricter sed regexp.
2009-11-20 15:40:19 +00:00
Jim Meyering
1b4bab6db2 build: make autogen.sh update .git-module-status, as it should
I ran autogen.sh, but then make was always failing like this:

    $ make
    cfg.mk:141: *** gnulib update required; run ./autogen.sh first.  Stop.

Here's the fix:

>From f743f32079fea2e8a17c7f5b59305e584c75dba0 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering@redhat.com>
Date: Fri, 20 Nov 2009 14:29:55 +0100
Subject: [PATCH libguestfs] build: make autogen.sh update .git-module-status, as it should

* autogen.sh: Without this, "make" would always say "gnulib update
required; run ./autogen.sh first", even after you'd run autogen.sh
successfully.
2009-11-20 14:11:08 +00:00
Jim Meyering
a84dee0f8d maint: use EXIT_* symbol (not constant, 2) to indicate key/path not found
* hivex/hivexget.c (EXIT_NOT_FOUND): Define.
(main): Use exit (EXIT_NOT_FOUND), not "exit (2)".
2009-11-20 12:14:32 +00:00
Jim Meyering
4d45c45f09 maint: use EXIT_SUCCESS and EXIT_FAILURE, not 0 and 1 in "usage", too
Convert by running these commands:
perl -pi -e 's/\b(usage ?)\(1\)/$1(EXIT_FAILURE)/' \
  fish/fish.c fuse/guestmount.c
perl -pi -e 's/\b(usage ?)\(0\)/$1(EXIT_SUCCESS)/' \
  fish/fish.c fuse/guestmount.c
* fish/fish.c (main): Replace 0/1 with EXIT_SUCCESS/EXIT_FAILURE.
* fuse/guestmount.c (main): Likewise.
2009-11-20 12:14:32 +00:00
Jim Meyering
c372c7c23a maint: use EXIT_SUCCESS and EXIT_FAILURE, not 0 and 1 to exit
Convert all uses automatically, via these two commands:
git grep -l '\<exit *(1)' \
  | grep -vEf .x-sc_prohibit_magic_number_exit \
  | xargs --no-run-if-empty \
    perl -pi -e 's/\b(exit ?)\(1\)/$1(EXIT_FAILURE)/'
git grep -l '\<exit *(0)' \
  | grep -vEf .x-sc_prohibit_magic_number_exit \
  | xargs --no-run-if-empty \
  perl -pi -e 's/\b(exit ?)\(0\)/$1(EXIT_SUCCESS)/'
* .x-sc_prohibit_magic_number_exit: New file.

Edit (RWMJ): Don't change Java code.
2009-11-20 12:14:14 +00:00
Jim Meyering
e94f89f40d maint: remove unnecessary include of openat.h
* daemon/realpath.c: Don't include "openat.h".  not used.
2009-11-20 10:55:02 +00:00
Richard Jones
4e9fefd4e8 build: update gnulib submodule to latest 2009-11-20 10:48:02 +00:00
Richard Jones
0d5b38f1d9 daemon/gnulib: Include glob module. 2009-11-20 10:43:45 +00:00
Richard Jones
295a920f52 daemon/Win32: Don't include missing headers.
This is a partial fix for code in guestfsd.c where many of these
header files are missing on Win32.
2009-11-20 10:41:07 +00:00
Richard Jones
edb9b3abc0 daemon/Win32: make some functions and fields optional.
inotify: Make this optional on platforms that don't have this interface.

mknod, mkfifo etc.: Make these optional on non-Unix platforms.

readdir: If d_type field is missing on the platform, set the corresponding
field to 'u'.

stat: st_blocks and st_blksize are missing on non-Unix platforms, so
set these fields to -1 in the corresponding structures.
2009-11-20 10:38:07 +00:00
Richard Jones
7d8a3404b2 daemon/Win32: NAME_MAX does not exist on Windows, use FILENAME_MAX instead. 2009-11-20 10:36:59 +00:00
Richard Jones
688bdc1a06 daemon: Missing #includes revealed by cross-compiling. 2009-11-20 10:36:21 +00:00
Richard Jones
4d35cc2ff0 daemon/Win32: Ignore mingw32-config.cache.
The Fedora Windows cross-compiler 'mingw32-configure' script always
uses a configure cache.  Ignore that file.
2009-11-20 10:33:27 +00:00
Richard Jones
a216a8adaa generator: open Unix module by default.
Add:

  open Unix

at the top of the generator, which means that we don't need to
prefix any 'Unix.foo' symbols (we can just use 'foo' instead).

Unfortunately the Unix module shadows one symbol in Pervasives
(the Pervasives module is opened by default in OCaml code).  That
symbol is 'stdout'.  So we replace this with 'Pervasives.stdout'
in two places.  Still a net reduction in code size.
2009-11-19 17:01:53 +00:00
Richard Jones
986541c26d syntax-check: Fix tab-vs-space issue in the generator. 2009-11-19 16:59:56 +00:00
Richard Jones
b7423df56e Update PO files. 2009-11-19 16:50:19 +00:00
Richard Jones
3d05963f9e Update TODO file. 2009-11-19 16:50:04 +00:00
Matthew Booth
8b3e75a3c7 build: Fix parallel build of haskell bindings
ghc isn't clever enough not to stomp on itself when building dependencies. This
change makes the 1 dependency explicit.

It also adds a dependency on src/libguestfs.la.
2009-11-19 16:40:22 +00:00
Matthew Booth
c477e2fb78 build: Fix inter-directory dependencies
This change adds an explicit dependency on generator.ml for every file it
generates, except java files. Java is left for another time because it's
considerably trickier.

It also adds a build rule for src/libguestfs.la so it can be rebuilt as required
from other directories.

It does this by creating a top level make file, subdir-rules.mk, which can be
included from sub-directories. sub-directories need to define 'generator_built'
to include local files which are built by generator.ml, and they will be updated
automatically.

This fixes parallel make, and will automatically re-create generated files when
make is run from any directory.

It also fixes the problem which efad4f53 was targetting. Specifically,
src/guestfs_protocol.(c|h) had an erroneous dependency on stamp-generator, and
therefore generator.ml, despite not being directly created by it. This caused
them to be recreated every time generator.ml ran rather than only when
src/guestfs_protocol.x was updated, which cascaded into a daemon and therefore
appliance update.

This patch also changes the contents of the distribution tarball by including
files created by rpcgen.
2009-11-19 16:40:22 +00:00
Richard Jones
16c1b31646 generator: Acquire lock to prevent two parallel runs of the generator.
This commit acquires a lock on a file to prevent two parallel runs of
the generator from stomping on each other.  The second run will wait
for the first to complete before starting.

The lock is acquired on the "HACKING" file because it's convenient --
we are already checking this file exists to make sure that we don't
start off in the wrong directory.

Tested by adding some artificial sleeps in the code to observe
locking behaviour between two parallel runs.
2009-11-19 14:03:59 +00:00
Jim Meyering
60d020d363 syntax-check: expand TABs in generator.ml
Jim Meyering wrote:
>>From 6f128e90afb055f9899011c4a592eb289e678936 Mon Sep 17 00:00:00 2001
> From: Jim Meyering <meyering@redhat.com>
> Date: Thu, 19 Nov 2009 11:39:10 +0100
> Subject: [PATCH libguestfs] syntax-check: expand TABs in generator.ml
>
> * src/generator.ml: Expand leading TABs to spaces.

That was incomplete.
Please use the following instead.
With it, now, "make syntax-check" now passes once again.

>From 716a30d0b692972aac8fbea1fb7ad3318ab3a0d8 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering@redhat.com>
Date: Thu, 19 Nov 2009 11:39:10 +0100
Subject: [PATCH libguestfs] syntax-check: expand leading TABs

* src/generator.ml: Expand leading TABs to spaces.
* fuse/test-fuse.sh: Likewise.
2009-11-19 10:44:56 +00:00
Jim Meyering
f4619c24e2 syntax-check: exempt *.pod from no-trailing-blank prohibition
* .x-sc_trailing_blank: Exempt *.pod.
2009-11-19 10:44:53 +00:00
Richard Jones
44097b509c BUILT_SOURCES now depends on running the generator.
This completely reverts commit efad4f5392.
2009-11-18 17:41:41 +00:00