libguestfs.git
14 years agobuild: guestfs-structs.h was missing from libguestfs_la_SOURCES.
Richard Jones [Thu, 2 Sep 2010 21:27:35 +0000 (22:27 +0100)]
build: guestfs-structs.h was missing from libguestfs_la_SOURCES.

14 years agoAdd full docs pot file.
Richard Jones [Thu, 2 Sep 2010 21:25:47 +0000 (22:25 +0100)]
Add full docs pot file.

14 years agoAllow manual pages and POD files to be translated.
Richard Jones [Thu, 2 Sep 2010 13:54:44 +0000 (14:54 +0100)]
Allow manual pages and POD files to be translated.

This uses the optional po4a package to split these files into
PO files for translation, and reassemble afterwards.

Note this creates an extra pot file (po-docs/libguestfs-docs.pot).
We don't (yet) combine this with the main po/libguestfs.pot file.
The 'libguestfs-docs.pot' file included in this commit is not the
real thing, just a short cut down snippet for testing.  The real
thing is created if you update one of the dependent files and
rebuild.

Note also the dummy ja.po, for testing the principles.

14 years agoAdd Dutch translation (RHBZ#629593).
Geert Warrink [Thu, 2 Sep 2010 13:56:36 +0000 (14:56 +0100)]
Add Dutch translation (RHBZ#629593).

14 years agoruby: Add Guestfs::Guestfs.new() method.
Richard Jones [Thu, 2 Sep 2010 11:01:06 +0000 (12:01 +0100)]
ruby: Add Guestfs::Guestfs.new() method.

This is a more standard way to create objects in Ruby.  The old
way was to call the module function Guestfs::create() which still
works.

14 years agoperl: Document handle is a hashref.
Richard Jones [Thu, 2 Sep 2010 10:11:55 +0000 (11:11 +0100)]
perl: Document handle is a hashref.

For details see commit eb566f7dc7974b42ac65729a2e5e5bcee329a0a9.

14 years agoperl: Add documentation about testing availability of methods and features.
Richard Jones [Thu, 2 Sep 2010 09:58:28 +0000 (10:58 +0100)]
perl: Add documentation about testing availability of methods and features.

14 years agobuild: Link static -ltinfo into guestfish.static binary.
Richard Jones [Wed, 1 Sep 2010 17:44:33 +0000 (18:44 +0100)]
build: Link static -ltinfo into guestfish.static binary.

14 years agoVersion 1.5.7. 1.5.7
Richard Jones [Wed, 1 Sep 2010 16:12:37 +0000 (17:12 +0100)]
Version 1.5.7.

14 years agofish: Add missing header file to sources.
Richard Jones [Wed, 1 Sep 2010 17:10:41 +0000 (18:10 +0100)]
fish: Add missing header file to sources.

14 years agoocaml: Add test for progress notification callbacks.
Richard Jones [Wed, 1 Sep 2010 16:12:15 +0000 (17:12 +0100)]
ocaml: Add test for progress notification callbacks.

14 years agodebug: Add 'debug progress' command.
Richard Jones [Wed, 1 Sep 2010 16:03:19 +0000 (17:03 +0100)]
debug: Add 'debug progress' command.

This debugging command generates progress notification messages,
used for testing purposes.

14 years agodebug: Arrange prototypes in alphabetical order.
Richard Jones [Wed, 1 Sep 2010 14:38:15 +0000 (15:38 +0100)]
debug: Arrange prototypes in alphabetical order.

14 years agodaemon: Enable debug command by default.
Richard Jones [Wed, 1 Sep 2010 14:37:24 +0000 (15:37 +0100)]
daemon: Enable debug command by default.

The debug command is useful for internal testing, and so should
be enabled by default in all builds.

Note that it is still *not* part of the stable ABI.

14 years agoConsistent use of 'void *opaque' to refer to opaque pointer in C API.
Richard Jones [Wed, 1 Sep 2010 12:19:05 +0000 (13:19 +0100)]
Consistent use of 'void *opaque' to refer to opaque pointer in C API.

We inconsistently used 'void *data' or 'void *opaque' all over to
refer to the same thing.  Use 'void *opaque' in all places in the
published API and documentation.

14 years agoresize: Add progress bar to virt-resize.
Richard Jones [Tue, 31 Aug 2010 19:39:40 +0000 (20:39 +0100)]
resize: Add progress bar to virt-resize.

With this commit you will see a plain progress bar during the
lengthy copy operations, similar to below:

Summary of changes:
/dev/sda1: partition will be left alone
/dev/sda2: partition will be resized from 7.5G to 9.5G
/dev/sda2: content will be expanded using the 'pvresize' method
Copying /dev/sda1 ...
[############################################################################]
Copying /dev/sda2 ...
[########################################------------------------------------]

14 years agoperl: bindings to progress callback.
Richard Jones [Tue, 31 Aug 2010 19:14:17 +0000 (20:14 +0100)]
perl: bindings to progress callback.

14 years agoocaml: bindings to progress callback.
Richard Jones [Tue, 31 Aug 2010 16:04:52 +0000 (17:04 +0100)]
ocaml: bindings to progress callback.

14 years agoImplement private data area.
Richard Jones [Tue, 31 Aug 2010 17:48:32 +0000 (18:48 +0100)]
Implement private data area.

The private data area is a hash table which is associated with
libguestfs handles, that C callers may use to store arbitrary
data for the lifetime of the handle.

Later the OCaml bindings will use this in order to implement
callbacks.

14 years agofish: Implement progress bars in guestfish.
Richard Jones [Sat, 28 Aug 2010 11:49:55 +0000 (12:49 +0100)]
fish: Implement progress bars in guestfish.

The progress bar is updated 3 times per second, and is not displayed
at all for operations which take less than two seconds.

You can disable progress bars by using the flag --no-progress-bars,
and you can enable progress bars in non-interactive sessions with
the flag --progress-bars.

A good way to test this is to use the following command:

guestfish --progress-bars \
          -N disk:10G \
          zero-device /dev/sda

(adjust "10G" to get different lengths of time).

14 years agofish: Detect UTF-8 output and open termcap/terminfo database.
Richard Jones [Sat, 28 Aug 2010 11:48:49 +0000 (12:48 +0100)]
fish: Detect UTF-8 output and open termcap/terminfo database.

Provide a generic mechanism within guestfish to detect if
output if UTF-8 and to open the termcap (or terminfo) database
for the current terminal type.

14 years agoAdd progress messages to download command.
Richard Jones [Wed, 1 Sep 2010 10:54:15 +0000 (11:54 +0100)]
Add progress messages to download command.

14 years agoAdd progress messages to zero-device command.
Richard Jones [Sat, 28 Aug 2010 13:29:21 +0000 (14:29 +0100)]
Add progress messages to zero-device command.

14 years agoAdd progress messages to zero command.
Richard Jones [Sat, 28 Aug 2010 13:29:07 +0000 (14:29 +0100)]
Add progress messages to zero command.

14 years agoAdd progress messages to fill-pattern command.
Richard Jones [Sat, 28 Aug 2010 13:28:42 +0000 (14:28 +0100)]
Add progress messages to fill-pattern command.

14 years agoAdd progress messages to fill command.
Richard Jones [Sat, 28 Aug 2010 13:28:26 +0000 (14:28 +0100)]
Add progress messages to fill command.

14 years agoAdd progress messages to copy-size command.
Richard Jones [Sat, 28 Aug 2010 10:11:32 +0000 (11:11 +0100)]
Add progress messages to copy-size command.

14 years agoImplement progress messages in the daemon and library.
Richard Jones [Sat, 28 Aug 2010 09:33:24 +0000 (10:33 +0100)]
Implement progress messages in the daemon and library.

This implements progress notification messages in the daemon, and
adds a callback in the library to handle them.

No calls are changed so far, so in fact no progress messages can
be generated by this commit.

For more details, see:
https://www.redhat.com/archives/libguestfs/2010-July/msg00003.html
https://www.redhat.com/archives/libguestfs/2010-July/msg00024.html

14 years agoocaml: Remove old entry from .gitignore file.
Richard Jones [Tue, 31 Aug 2010 18:25:45 +0000 (19:25 +0100)]
ocaml: Remove old entry from .gitignore file.

14 years agoVersion 1.5.6. 1.5.6
Richard Jones [Fri, 27 Aug 2010 21:01:23 +0000 (22:01 +0100)]
Version 1.5.6.

14 years agoRequires febootstrap >= 2.9.
Richard Jones [Fri, 27 Aug 2010 20:47:49 +0000 (21:47 +0100)]
Requires febootstrap >= 2.9.

14 years agodaemon: Set O_CLOEXEC flag on the virtio-serial file descriptor.
Richard Jones [Fri, 27 Aug 2010 14:27:22 +0000 (15:27 +0100)]
daemon: Set O_CLOEXEC flag on the virtio-serial file descriptor.

14 years agobuild: Don't add version extra string to the version number.
Richard Jones [Fri, 27 Aug 2010 12:38:49 +0000 (13:38 +0100)]
build: Don't add version extra string to the version number.

If this string was non-empty, then it broke a lot of things because
autoconf and other parts of the build system were expecting this
string to contain a simple MAJOR.MINOR.RELEASE version number.

This requires changes to guestfish and guestmount so they use the
guestfs_version API to fetch the version from the library.  (The
Perl tools were already doing it this way).  In a way this is more
accurate, because it's no longer hard-coded in the binary, but
fetched from the dynamically linked libguestfs.so.

14 years agoUpdate BUGS, PO files. 1.5.5
Richard Jones [Thu, 26 Aug 2010 15:42:53 +0000 (16:42 +0100)]
Update BUGS, PO files.

14 years agoUpdate Spanish translations (RHBZ#627556).
Daniel Cabrera [Thu, 26 Aug 2010 15:40:44 +0000 (16:40 +0100)]
Update Spanish translations (RHBZ#627556).

14 years agoUpdated Spanish translations (RHBZ#626843).
Daniel Cabrera [Thu, 26 Aug 2010 15:39:39 +0000 (16:39 +0100)]
Updated Spanish translations (RHBZ#626843).

14 years agoUpdate Polish translation (RHBZ#502533).
Piotr Drąg [Thu, 26 Aug 2010 15:38:11 +0000 (16:38 +0100)]
Update Polish translation (RHBZ#502533).

14 years agoPrepare for version 1.5.5.
Richard Jones [Thu, 26 Aug 2010 15:31:40 +0000 (16:31 +0100)]
Prepare for version 1.5.5.

14 years agorescue: Fix typo in comment.
Richard Jones [Thu, 26 Aug 2010 14:55:34 +0000 (15:55 +0100)]
rescue: Fix typo in comment.

14 years agoIgnore launch() error in virt-rescue. (RHBZ#618556)
Matthew Booth [Thu, 26 Aug 2010 14:08:20 +0000 (15:08 +0100)]
Ignore launch() error in virt-rescue. (RHBZ#618556)

launch() expects guestfsd to start, which it never does in virt-rescue, so it
always returns an error about the appliance shutting down unexpectedly.

14 years agoShut down the appliance cleanly
Matthew Booth [Thu, 26 Aug 2010 13:34:44 +0000 (14:34 +0100)]
Shut down the appliance cleanly

When guestfsd exits, or the user exits the virt-rescue shell, the init script
exits which causes the kernel to panic. This isn't really a functional issue, as
all useful work is done by this point. However, it does cause virt-rescue to
display an unsightly error message.

This patch causes the appliance to power off cleanly before the init script
exits. Note it actually does a reboot rather than a poweroff. This is because
ACPI is disabled in the appliance, meaning poweroff doesn't work, but qemu is
configured not to restart on reboot.

14 years agoCall sync after guestfsd exits
Matthew Booth [Thu, 26 Aug 2010 11:11:59 +0000 (12:11 +0100)]
Call sync after guestfsd exits

Core files are not reliably written to disk if guestfsd dumps core. This patch
makes libguestfs do the same appliance cleanup for guestfsd and virt-rescue,
which seems to fix the matter.

It also removes a redundant sleep and additional sync when exiting virt-rescue.

14 years agoAdd a core_pattern debug command
Matthew Booth [Thu, 26 Aug 2010 12:36:10 +0000 (13:36 +0100)]
Add a core_pattern debug command

This adds a new debug command, core_pattern, which writes a new pattern for
coredump files to the appliance kernel, and sets the daemon's hard and soft core
limits to infinity.

14 years agoInclude statically linked binaries in the binary distribution.
Richard Jones [Wed, 25 Aug 2010 10:53:00 +0000 (11:53 +0100)]
Include statically linked binaries in the binary distribution.

14 years agoRename global 'xdr_str'.
Richard Jones [Wed, 25 Aug 2010 10:41:17 +0000 (11:41 +0100)]
Rename global 'xdr_str'.

Two bits of XDR both contained a definition called 'str' which
means that 'xdr_str' was being exported globally twice.  Because
of the linker script this didn't affect us.  But it's best to
rename this global so that conflicts cannot arise.

14 years agoAdd -nodefconfig command line option to qemu.
Daniel Berrange [Tue, 24 Aug 2010 13:27:15 +0000 (14:27 +0100)]
Add -nodefconfig command line option to qemu.

Without this option, qemu will read some defaults from /etc/qemu/
configuration files.

14 years agoVersion 1.5.4. 1.5.4
Richard Jones [Tue, 24 Aug 2010 11:37:39 +0000 (12:37 +0100)]
Version 1.5.4.

14 years agoNew APIs: set-network and get-network to enable network support.
Richard Jones [Tue, 24 Aug 2010 10:53:40 +0000 (11:53 +0100)]
New APIs: set-network and get-network to enable network support.

guestfs_set_network (g, true) enables network support in the appliance.

14 years agobuild: Add 'bindist' rule for building binary distribution.
Richard Jones [Tue, 24 Aug 2010 10:19:55 +0000 (11:19 +0100)]
build: Add 'bindist' rule for building binary distribution.

14 years agoDon't print debug messages when not in verbose mode.
Richard Jones [Mon, 23 Aug 2010 21:58:51 +0000 (22:58 +0100)]
Don't print debug messages when not in verbose mode.

Don't print them because no one's listening ...

14 years agoChange protocol to send Linux errno from daemon to library.
Richard Jones [Mon, 23 Aug 2010 21:19:24 +0000 (22:19 +0100)]
Change protocol to send Linux errno from daemon to library.

This changes the protocol so that the Linux errno (if available)
is sent back to the library.  Note that the errno is not yet
made available to callers, since it is not clear how best to
present this Linux-specific number.

14 years agoRaise error message max size to 64K.
Richard Jones [Mon, 23 Aug 2010 21:14:27 +0000 (22:14 +0100)]
Raise error message max size to 64K.

This commit removes one of the protocol limits, by raising the
maximum error message size from 256 bytes to 64K.

Although we could consider raising this further, since the
error messages are currently stored in fixed sized buffers on
the stack, that would require more invasive code changes.

14 years agoUse virtio-serial, remove other vmchannel methods.
Richard Jones [Mon, 23 Aug 2010 20:53:32 +0000 (21:53 +0100)]
Use virtio-serial, remove other vmchannel methods.

This adds support for virtio-serial, and removes all other
vmchannel methods.

Virtio-serial is faster than other methods, and is now widely
available.

I tested this by using the guestfs_upload API on an 83 MB file:
  before: 6.12 seconds (14.1 MB/sec)
   after: 4.20 seconds (20.6 MB/sec)
(note this is with the current 8K chunk size)

14 years agoChange to using ext2-based, cached supermin appliance.
Richard Jones [Mon, 23 Aug 2010 10:12:29 +0000 (11:12 +0100)]
Change to using ext2-based, cached supermin appliance.

This changes the method used to build the supermin appliance
to use the new ext2-based appliance supported by latest febootstrap.
The appliance can also be cached, so we avoid rebuilding it
each time it is used.

Mailing list discussion goes into the rationale and details:
https://www.redhat.com/archives/libguestfs/2010-August/msg00028.html

Requires febootstrap >= 2.8.

14 years agoMake print_timestamped_message into a cross-module function.
Richard Jones [Mon, 23 Aug 2010 11:54:27 +0000 (12:54 +0100)]
Make print_timestamped_message into a cross-module function.

This is just code movement.

14 years agoFactor out code for locating the temporary directory.
Richard Jones [Mon, 23 Aug 2010 11:53:11 +0000 (12:53 +0100)]
Factor out code for locating the temporary directory.

This is just code movement.

14 years agoWhitespace change: Add blank line between structures and functions.
Richard Jones [Sat, 21 Aug 2010 11:45:51 +0000 (12:45 +0100)]
Whitespace change: Add blank line between structures and functions.

14 years agoappliance: Remove some obsolete testing rules from Makefile.am
Richard Jones [Sat, 21 Aug 2010 09:39:39 +0000 (10:39 +0100)]
appliance: Remove some obsolete testing rules from Makefile.am

This haven't been used -- and haven't worked -- for a long time.

14 years agoVersion 1.5.3 1.5.3
Richard Jones [Tue, 17 Aug 2010 13:30:58 +0000 (14:30 +0100)]
Version 1.5.3

14 years agoRemove old ocaml-inspector code.
Richard Jones [Mon, 2 Aug 2010 22:29:43 +0000 (23:29 +0100)]
Remove old ocaml-inspector code.

Not used by anyone, didn't work well, and replaced now by the
C inspection APIs.

14 years agofish: Reimplement -i option using new C-based inspection.
Richard Jones [Mon, 2 Aug 2010 16:43:23 +0000 (17:43 +0100)]
fish: Reimplement -i option using new C-based inspection.

Don't shell out to virt-inspector.  Instead, use the new C-based
inspection APIs.

This is much faster.

The new syntax is slightly different:

  guestfish -a disk.img -i
  guestfish -d guest -i

However, the old syntax still works.

14 years agofish: Add -c/--connect and -d/--domain options.
Richard Jones [Mon, 2 Aug 2010 15:33:25 +0000 (16:33 +0100)]
fish: Add -c/--connect and -d/--domain options.

The -d option lets you specify libvirt domains.  The disks from
these domains are found and added, as if you'd named them with -a.

The -c option lets you specify a libvirt URI, which is needed
when we consult libvirt to implement the above.

14 years agoNew APIs for guest inspection.
Richard Jones [Wed, 28 Jul 2010 14:40:42 +0000 (15:40 +0100)]
New APIs for guest inspection.

This commit converts (some of) the Perl inspection code to C and
makes it available through core APIs.  The new APIs are:

inspect-os        - Does the inspection, returns list of OSes
inspect-get-*     - Get results of the inspection

where '*' is one of:

  type            - 'windows' or 'linux'
  distro          - Linux distro
  arch            - architecture
  product-name    - long product name string
  major-version
  minor-version   - major.minor version of OS
  mountpoints     - get a list of the mountpoints
  filesystems     - get all filesystems associated with the OS

This works for all existing supported Linux and Windows OSes.

14 years agoNew APIs: findfs-label and findfs-uuid
Richard Jones [Wed, 28 Jul 2010 22:11:38 +0000 (23:11 +0100)]
New APIs: findfs-label and findfs-uuid

These two calls wrap up the /sbin/findfs command, allowing you
to find a filesystem by only knowing its label or UUID.

This is especially useful when resolving LABEL=... or UUID=...
entries in /etc/fstab.

Sample guestfish session:

><fs> vfs-uuid /dev/vda1
277dd61c-bf34-4253-a8dc-df500a05e7df
><fs> findfs-uuid 277dd61c-bf34-4253-a8dc-df500a05e7df
/dev/vda1
><fs> vfs-label /dev/vda1
/boot
><fs> findfs-label /boot
/dev/vda1
><fs> vfs-uuid /dev/VolGroup00/LogVol00
40ce7c36-82ce-4a12-a99d-48f5e054162c
><fs> findfs-uuid 40ce7c36-82ce-4a12-a99d-48f5e054162c
/dev/mapper/VolGroup00-LogVol00
><fs> findfs-uuid 12345678
libguestfs: error: findfs_uuid: findfs: unable to resolve 'UUID=12345678'

14 years agoNew API: file-architecture
Richard Jones [Wed, 28 Jul 2010 14:38:57 +0000 (15:38 +0100)]
New API: file-architecture

This change simply converts the existing Perl-only function
file_architecture into a core API call.  The core API call is
written in C and available in all languages and from guestfish.

14 years agogenerator: No need to redefine safe_* macros.
Richard Jones [Tue, 17 Aug 2010 10:26:54 +0000 (11:26 +0100)]
generator: No need to redefine safe_* macros.

These are already defined in "guestfs-internal.h" which is
included in the .c file.

14 years agoAdd safe_strndup call.
Richard Jones [Tue, 17 Aug 2010 10:26:26 +0000 (11:26 +0100)]
Add safe_strndup call.

14 years agoSend trace output to stderr.
Matthew Booth [Tue, 17 Aug 2010 11:19:05 +0000 (12:19 +0100)]
Send trace output to stderr.

Trace output sent to stdout can be lost in the event of a crash due to
buffering.  This patch sends it to stderr instead.

14 years agoPython: Use new PyCapsule API where supported.
Richard Jones [Tue, 17 Aug 2010 09:31:39 +0000 (10:31 +0100)]
Python: Use new PyCapsule API where supported.

See:
http://lists.fedoraproject.org/pipermail/devel/2010-August/141064.html

14 years agogenerator: Fix typo in error message for RConstOptString.
Richard Jones [Sat, 31 Jul 2010 13:35:07 +0000 (14:35 +0100)]
generator: Fix typo in error message for RConstOptString.

14 years agoNew API: is-lv: check if a block device is a logical volume (RHBZ#619793)
Richard Jones [Fri, 30 Jul 2010 15:32:35 +0000 (16:32 +0100)]
New API: is-lv: check if a block device is a logical volume (RHBZ#619793)

This adds a new API, guestfs_is_lv (g, device), which returns true iff
the named device is an LVM2 logical volume.

A sample guestfish session:

><fs> lvs
/dev/vg_f13x64/lv_root
/dev/vg_f13x64/lv_swap
><fs> list-devices
/dev/vda
><fs> list-partitions
/dev/vda1
/dev/vda2
><fs> is-lv /dev/vg_f13x64/lv_root
true
><fs> is-lv /dev/vg_f13x64/lv_swap
true
><fs> is-lv /dev/vda
false
><fs> is-lv /dev/vda1
false
><fs> is-lv /dev/vda2
false

14 years agoRename internal functions.
Richard Jones [Wed, 28 Jul 2010 11:38:36 +0000 (12:38 +0100)]
Rename internal functions.

This is an update to commit 41f25ab3df5f306ac717fa7a6efd58328d30c1ae.

Internal functions should be named guestfs___* (3 underscores) to
avoid clashing with the implementation of actions (2 underscores).

14 years agoRearrange library code into separate files.
Richard Jones [Tue, 27 Jul 2010 12:01:39 +0000 (13:01 +0100)]
Rearrange library code into separate files.

We split the library code into these separate files:

 - guestfs.c: creating handles, closing handles, handle-related variables
 - actions.c: generated library-side stubs for each action
 - bindtests.c: generated code to test bindings
 - launch.c: launching the appliance
 - proto.c: the library side of the daemon communications protocol

This is just code movement.

14 years agoRename guestfs-{actions,bindtests}.c to {actions,bindtests}.c
Richard Jones [Tue, 27 Jul 2010 11:29:59 +0000 (12:29 +0100)]
Rename guestfs-{actions,bindtests}.c to {actions,bindtests}.c

Rename these two generated files, in preparation for splitting
up the main src/guestfs.c file.

14 years agoTODO: Implement inspector code in C.
Richard Jones [Tue, 27 Jul 2010 10:11:42 +0000 (11:11 +0100)]
TODO: Implement inspector code in C.

14 years agoTODO: Implement recursive upload/download in guestfish.
Richard Jones [Tue, 27 Jul 2010 10:11:09 +0000 (11:11 +0100)]
TODO: Implement recursive upload/download in guestfish.

14 years agoTODO: Add link to discussion of progress bars.
Richard Jones [Tue, 27 Jul 2010 10:10:32 +0000 (11:10 +0100)]
TODO: Add link to discussion of progress bars.

14 years agoVersion 1.5.2. 1.5.2
Richard Jones [Thu, 22 Jul 2010 15:53:54 +0000 (16:53 +0100)]
Version 1.5.2.

14 years agoregressions: Don't print misleading 'Expect error ...' lines.
Richard Jones [Thu, 22 Jul 2010 15:49:06 +0000 (16:49 +0100)]
regressions: Don't print misleading 'Expect error ...' lines.

Some tests in the regressions directory deliberately print
error messages.  As long as they still PASS, this is OK.

However these tests also printed some misleading messages
about what error to expect.  Since error messages were slightly
different across distros, these messages were not accurate.

Therefore remove these messages, and replace with a general
message before all tests telling users not to worry about
errors from the tests as long as the tests don't fail.

14 years agoNew APIs: Support for creating LUKS and managing keys.
Richard Jones [Thu, 22 Jul 2010 10:00:59 +0000 (11:00 +0100)]
New APIs: Support for creating LUKS and managing keys.

This commit adds four APIs for creating new LUKS devices
and key management.  These are:

  luks_format         Format a LUKS device with the default cipher.
  luks_format_cipher  Format with a chosen cipher.
  luks_add_key        Add another key to an existing device.
  luks_kill_slot      Delete a key from an existing device.

This enables all the significant functionality of the
cryptsetup luks* commands.

Note that you can obtain the UUID of a LUKS device already
by using vfs-uuid.

This also includes a regression test covering all the LUKS
functions.

14 years agoMove variable initialization close to variable use.
Richard Jones [Thu, 22 Jul 2010 15:51:05 +0000 (16:51 +0100)]
Move variable initialization close to variable use.

14 years agoRevert "add_drive_ro adds readonly=on option if available." (RHBZ#617200).
Richard Jones [Thu, 22 Jul 2010 13:39:36 +0000 (14:39 +0100)]
Revert "add_drive_ro adds readonly=on option if available." (RHBZ#617200).

Adding the readonly=on option is not so clever.  This causes
qemu to present the disk as read-only to the guest.  (The
expected behaviour of snapshots=on,readonly=on was that it
would open the disk O_RDONLY but present a writable disk to
the guest).

Since the guest sees a read-only disk, we are unable to do any
recovery if a filesystem on the disk is inconsistent.  This basically
prevents most accesses to live disk images.

What we really want is a qemu option which presents a writable
disk to the guest, but only opens the disk on the host side with
O_RDONLY, to alleviate the udev bug RHBZ#571714.

This reverts commit 676462684e05dd8341dd695762dd99a87d8ec022.

14 years agogenerator: Make documentation inside guestfish match man page.
Richard Jones [Thu, 22 Jul 2010 09:59:43 +0000 (10:59 +0100)]
generator: Make documentation inside guestfish match man page.

14 years agoVersion 1.5.1. 1.5.1
Richard Jones [Wed, 21 Jul 2010 20:40:21 +0000 (21:40 +0100)]
Version 1.5.1.

14 years agoNew APIs: Support for opening LUKS-encrypted disks.
Richard Jones [Wed, 21 Jul 2010 18:50:06 +0000 (19:50 +0100)]
New APIs: Support for opening LUKS-encrypted disks.

This adds support for opening LUKS-encrypted disks, via
three new APIs:

  luks_open:    Create a mapping for an encrypted disk.
  luks_open_ro: Same, but read-only mapping.
  luks_close:   Close a mapping.

A typical guestfish session using this functionality looks
like this:

  $ guestfish --ro -a encrypted.img
  ><fs> run
  ><fs> list-devices
  /dev/vda
  ><fs> list-partitions
  /dev/vda1
  /dev/vda2
  ><fs> vfs-type /dev/vda2
  crypto_LUKS
  ><fs> luks-open /dev/vda2 luksdev
  Enter key or passphrase ("key"):
  ><fs> vgscan
  ><fs> vg-activate-all true
  ><fs> pvs
  /dev/dm-0
  ><fs> vgs
  vg_f13x64encrypted
  ><fs> lvs
  /dev/vg_f13x64encrypted/lv_root
  /dev/vg_f13x64encrypted/lv_swap
  ><fs> mount /dev/vg_f13x64encrypted/lv_root /
  ><fs> ll /
  total 132
  dr-xr-xr-x.  24 root root  4096 Jul 21 12:01 .
  dr-xr-xr-x   20 root root     0 Jul 21 20:06 ..
  drwx------.   3 root root  4096 Jul 21 11:59 .dbus
  drwx------.   2 root root  4096 Jul 21 12:00 .pulse
  -rw-------.   1 root root   256 Jul 21 12:00 .pulse-cookie
  dr-xr-xr-x.   2 root root  4096 May 13 03:03 bin

NOT included in this patch:

 - An easier way to use this from guestfish.
 - Ability to create LUKS devices.
 - Ability to change LUKS keys on existing devices.
 - Direct access to the /dev/mapper device (eg. if it contains
   anything apart from VGs).

14 years agogenerator: Add 'Key' parameter type.
Richard Jones [Wed, 21 Jul 2010 11:52:51 +0000 (12:52 +0100)]
generator: Add 'Key' parameter type.

Add a 'Key' parameter type, used for passing sensitive key material
into libguestfs.

Eventually the plan is to mlock() key material into memory.  However
this is very difficult to achieve because the encoded XDR strings
end up in many places.  Therefore users should note that key material
passed to libguestfs might end up in swap.

The only difference between 'Key' and 'String' currently is that
guestfish requests the key from /dev/tty with echoing turned off.

14 years agogenerator: Remove unnecessary parameter.
Richard Jones [Wed, 21 Jul 2010 11:52:10 +0000 (12:52 +0100)]
generator: Remove unnecessary parameter.

The 'name' parameter is not used on the right hand side of the
match, so it can be removed.

14 years agodf: Minimize the number of times we launch the libguestfs appliance.
Richard Jones [Fri, 16 Jul 2010 17:11:56 +0000 (18:11 +0100)]
df: Minimize the number of times we launch the libguestfs appliance.

This commit greatly improves the performance of the 'virt-df'
command by batching as many disks as possible onto a single appliance.
In many situations this means the appliance is launched only once,
versus one launch per domain as before.

However doing it this way is a lot more complex:

(1) Because of limits in Linux and virtio-blk, we can only attach
26 disks maximum at a time to the appliance.

(2) We have to use LVM filters (lvm-set-filter) to confine LVM to
the disks of a single guest.

14 years agoNew APIs: lvm-set-filter and lvm-clear-filter.
Richard Jones [Fri, 16 Jul 2010 12:01:21 +0000 (13:01 +0100)]
New APIs: lvm-set-filter and lvm-clear-filter.

These APIs allow you to change the device filter, the list of
block devices that LVM "sees".  Either you can set it to a fixed
list of devices / partitions, or you can clear it so that LVM sees
everything.

14 years agoUse an unsigned type (size_t) for all loop iterators.
Richard Jones [Fri, 16 Jul 2010 11:58:54 +0000 (12:58 +0100)]
Use an unsigned type (size_t) for all loop iterators.

This resolves a warning from gcc 4.5:
  assuming signed overflow does not occur when simplifying
    conditional to constant

This page explains the issues in some detail:
  http://www.airs.com/blog/archives/120

14 years agogenerator: Don't hard-code name in DeviceList check.
Richard Jones [Fri, 16 Jul 2010 11:57:24 +0000 (12:57 +0100)]
generator: Don't hard-code name in DeviceList check.

Only one function currently uses DeviceList.  The generated code
unfortunately hard-coded the argument name from that function.

14 years agobuild: Don't warn about 'long long'.
Richard Jones [Fri, 16 Jul 2010 11:55:17 +0000 (12:55 +0100)]
build: Don't warn about 'long long'.

Various language bindings simply need this, so we have to allow
it even though it's a GCC extension.

14 years agodoc: Add guestfish 'lvcreate 1M' gotcha.
Richard Jones [Fri, 16 Jul 2010 14:17:01 +0000 (15:17 +0100)]
doc: Add guestfish 'lvcreate 1M' gotcha.

14 years agotar: Remove redundant use statement.
Richard Jones [Sun, 11 Jul 2010 22:11:45 +0000 (23:11 +0100)]
tar: Remove redundant use statement.

14 years agoedit: Clean up temporary files.
Richard Jones [Sun, 11 Jul 2010 22:11:08 +0000 (23:11 +0100)]
edit: Clean up temporary files.

Note to self: The 'tempfile' function does *not* default to
removing files with the program exits!

14 years agoedit: Add -b (backup) option and make uploading more robust.
Richard Jones [Sun, 11 Jul 2010 22:09:07 +0000 (23:09 +0100)]
edit: Add -b (backup) option and make uploading more robust.

14 years agoedit: Add -e 'expr' option to non-interactively apply expression to the file.
Richard Jones [Sun, 11 Jul 2010 15:46:15 +0000 (16:46 +0100)]
edit: Add -e 'expr' option to non-interactively apply expression to the file.

(Suggested by Justin Clift).

14 years agoPrepare for new development branch, starting at 1.5.0.
Richard Jones [Thu, 8 Jul 2010 10:54:50 +0000 (11:54 +0100)]
Prepare for new development branch, starting at 1.5.0.

Add BUGS and RELEASE-NOTES to EXTRA_DIST.

Also update the RELEASE-NOTES file.

14 years agoMake tmp directory world readable (RHBZ#610880).
Richard Jones [Fri, 2 Jul 2010 16:52:51 +0000 (17:52 +0100)]
Make tmp directory world readable (RHBZ#610880).

If you have a restrictive umask (0077 for example) then
files in the tmp directory would be created with 0600
permissions.  Example:

drwx------.  2 rjones rjones     4096 Jul  2 17:52 .
drwxrwxrwt. 57 root   root     102400 Jul  2 17:52 ..
-rw-------.  1 rjones rjones 86328832 Jul  2 17:52 initrd
lrwxrwxrwx.  1 rjones rjones       46 Jul  2 17:52 kernel -> /boot/vmlinuz-2.6.33-0.40.rc7.git0.fc13.x86_64

This in itself is not a problem.  However in virt-v2v we also
change UID:GID and the result is that qemu is unable to read
the initrd file:

qemu: could not load initial ram disk '/tmp/libguestfs2ssynP/initrd'

With this patch we make the tmp directory and the files
world readable.  After the patch:

$ ls -la /tmp/libguestfsJFVzPg/
total 116192
drwxr-xr-x.  2 rjones rjones      4096 Jul  2 18:03 .
drwxrwxrwt. 56 root   root      102400 Jul  2 18:03 ..
-rw-r--r--.  1 rjones rjones 118869504 Jul  2 18:03 initrd
lrwxrwxrwx.  1 rjones rjones        46 Jul  2 18:03 kernel -> /boot/vmlinuz-2.6.33-0.40.rc7.git0.fc13.x86_64

14 years agofish: Don't fail if -m and --listen flags are both given (RHBZ#612178).
Richard Jones [Wed, 7 Jul 2010 14:01:38 +0000 (15:01 +0100)]
fish: Don't fail if -m and --listen flags are both given (RHBZ#612178).

Testing this against a Fedora disk image:

$ ./fish/guestfish --ro -a F13.img -m /dev/sda1 --listen
export GUESTFISH_PID=6033
$ ./fish/guestfish --remote=6033 -- ping-daemon
$ ./fish/guestfish --remote=6033 -- ping-daemon
$ ./fish/guestfish --remote=6033 -- exit

Without this fix the first remote command would fail because
qemu would have already been killed.