Commit Graph

1059 Commits

Author SHA1 Message Date
Richard W.M. Jones
b527ff0dfc build: Require qemu >= 1.3.0 and yajl.
Require qemu >= 1.3.0, the first version that supported
`qemu-img --output=json'.

This means we require yajl (for parsing the JSON output of qemu-img),
and that in turn has consequences elsewhere.
2016-01-11 13:42:49 +00:00
Richard W.M. Jones
1007b2555c daemon: Fix ext2 labels error message (RHBZ#1294956). 2016-01-04 15:33:45 +00:00
Richard W.M. Jones
307c83177c Update copyright dates for 2016.
Run the following command over the source:

  perl -pi.bak -e 's/(20[01][0-9])-2015/$1-2016/g' `git ls-files`
2016-01-02 21:19:51 +00:00
Richard W.M. Jones
7ecad8d4f7 daemon: Improve debug information from command*.
Do some fake quoting so people don't get worried that we aren't
quoting the commands we run.  See:
https://www.redhat.com/archives/libguestfs/2015-December/msg00080.html
2015-12-17 11:27:04 +00:00
Richard W.M. Jones
6d90cf5eb2 daemon: Make command*f flags parameter unsigned.
It's a bitmask, so unsigned is the right choice.  eg. We can more
easily print it using %x.

This patch changes the size of the fd mask and the values of the
COMMAND_FLAG_* constants, but since these are internal definitions
that doesn't matter.
2015-12-17 11:15:14 +00:00
Pino Toscano
9c3b4f6ad8 daemon: improve internal commandrvf
- add a flag to request chroot for the process, which is done only as
  very last (before chdir) operation before exec'ing the process in the
  child: this avoids using CHROOT_IN & CHROOT_OUT around command*
  invocations, and reduces the code spent in chroot mode
- add failure checks for dup2, open, and chdir done in child, not
  proceeding to executing the process if they fail
- open /dev/null without O_CLOEXEC, so it stays available for the
  exec'ed process, and thus we don't need to provide an own fd for stdin

Followup of commit fd2f175ee7, thanks also
to the notes and hints provided by Mateusz Guzik.
2015-12-15 15:00:11 +01:00
Richard W.M. Jones
2ee2003d56 daemon: Allow --channel fd:N
In this case, the daemon has been passed an open file descriptor which
it uses directly for the channel.
2015-11-24 19:13:39 +00:00
Pino Toscano
fd2f175ee7 daemon: always provide stdin when running chroot commands (RHBZ#1280029)
When running commands in the mounted guest (using the "command" API, and
APIs based on it), provide the /dev/null from the appliance as open fd
for stdin.  Commands usually assume stdin is open if they didn't close
it explicitly, so this should avoid crashes or misbehavings due to that.
2015-11-20 14:55:46 +01:00
Richard W.M. Jones
fccd4ee5e8 daemon: lvm: Only return public LVs from guestfs_lvs API (RHBZ#1278878).
When a disk image uses LVM thinp (thin provisioning), the guestfs_lvs
API would return the thinp pools.  This confused other APIs because
thinp pools don't have corresponding /dev/VG/LV device nodes.

Filter the LVs that are returned using "lv_role=public".

Thanks: Fabian Deutsch
2015-11-13 11:53:12 +00:00
Richard W.M. Jones
52e517c570 Avoid "function 'asprintf_nowarn' can never be inlined because it uses variable argument lists".
Move this to a separate translation unit and don't inline it.
2015-11-13 11:53:12 +00:00
Richard W.M. Jones
120b658ccc Avoid various "declaration of <var> shadows a previous local"
I enabled the -Wshadow warning temporarily in order to do these fixes,
but had to disable it again afterwards.  The reason is that this warns
about shadowing globals, which is sort of a good thing, but because we
have a global called "verbose" just about everywhere, and at the same
time we baked a function argument called "verbose" into several
unchangable APIs, well, we're stuck without being able to use this
warning.
2015-11-13 11:53:12 +00:00
Richard W.M. Jones
4dc53f0fba Avoid gcc warnings about infinite loop.
This seemingly redundant change avoids a gcc warning/error:

  error: cannot optimize possibly infinite loops

See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34114#c3 and
following for an explanation.

Of course gcc is completely wrong and stupid here, because there's no
possibility on current or future hardware that an array of size
SSIZE_MAX could be allocated since it would by definition occupy at
least all addressible memory (if it was an array of bytes, which this
isn't), leaving no room for the code that is being compiled.
2015-11-13 11:53:12 +00:00
Pino Toscano
38598e2ba5 actions: refactor available & feature_available
Refactor the internal_feature_available to return the result for just
one group, so it is easier to know on the library side what was the
actual error, and which group refers to; drop internal_available, as no
more needed after this.

On the library side, implement in available and feature_available the
real logic to iterate through the requested group, and error out or
return whether the groups are available. This also introduces caching
for the features, so each needs to be queried just once in each
appliance run.

The result of this is that there should be much less communication with
the daemon to know about available features; the downside is that
queries for more than one group at once, not already cached, will be
cause more queries to the daemon.
2015-11-05 16:48:58 +01:00
Pino Toscano
2e79edb4a3 actions: turn available & feature_available as non-daemon
Rename the current available and feature_available into internal daemon
functions, and provide non-daemon functions wrapping them at library
side.  This will make it possible to e.g. add caching for them.

Should be only refactoring, no actual behaviour change.
2015-11-05 16:48:58 +01:00
Richard W.M. Jones
a2edda266e build: Make 'make clean' remove more files.
Remove man pages and other pages which 'make clean' did not remove
before.

To evaluate which pages could be removed, I did a full build and
check, and then ran 'make clean' followed by 'git clean -xdf'.  By
examining the output of the git clean command I could see which files
were being missed.

Files that are _not_ removed by make clean or make distclean:

 - generator-built files

 - Makefile, Makefile.in, .deps, .depend

 - any ./configure output files (maybe they should be?)
2015-11-03 13:53:37 +00:00
Richard W.M. Jones
47b095b928 website: Put website into a separate directory.
Move the random set of HTML files we build from html/ into
the website/ directory.

Also in the website/ directory, put the index.html file from
http://libguestfs.org, which was previously not under version control.
It is generated from index.html.in so we can automatically add the
current version and release date.

Also in the website/ directory, put various CSS file, images, etc.
which are required by the website and were also previously not under
version control.

Change the 'make website' rule to 'make maintainer-upload-website'.
As the name suggests, it is only useful for the maintainer, and will
fail with an error for anyone else.
2015-10-31 17:09:29 +00:00
Richard W.M. Jones
d07515b947 docs: Move 'extending libguestfs' documentation to guestfs-hacking(1).
Start to split the huge, monolithic guestfs(3) manual page.
2015-10-30 09:45:02 +00:00
Maxim Perevedentsev
f5caa421d1 Added xfs support to vfs_minimum_size. 2015-10-27 17:25:49 +00:00
Maxim Perevedentsev
858a9de297 Added btrfs support to vfs_minimum_size. 2015-10-27 14:58:42 +00:00
Maxim Perevedentsev
474f6525c8 Bugfix in number parsing in vfs_min_size. 2015-10-23 10:05:09 +01:00
Maxim Perevedentsev
8296933ade Include resize2fs_P into vfs_minimum_size. 2015-10-20 18:26:22 +01:00
Maxim Perevedentsev
b8d4ca686b New API: vfs_minimum_size
This call provides the way to get minimum size of filesystem.
This is needed for shrinking. The return units are bytes.
2015-10-20 18:26:22 +01:00
Maxim Perevedentsev
a5e7823c92 New API: resize2fs_P
Added support for getting ext2/3/4 filesystem minimum size.
This is needed primarily for shrinking images.
2015-10-14 17:11:54 +01:00
Pino Toscano
29e6368f4c daemon: use str_udevadm in udev_settle
There is GUESTFSD_EXT_CMD defining a string for udevadm (so it is marked
as "used tool" in the appliance), but it is not actually used when
starting udevadm.

There should be no behaviour change.
2015-10-05 15:43:35 +02:00
Richard W.M. Jones
8554dbbc03 Remove multiple hacks that only apply to RHEL 5.
We don't support RHEL 5 upstream (see the 'oldlinux' branch for a
version that works with RHEL 5).  Therefore remove a bunch of hacks
that were only needed on RHEL 5.
2015-10-05 14:32:28 +01:00
Richard W.M. Jones
677c721e85 Fix whitespace.
Because of previous automated commits, such as changing 'guestfs___'
-> 'guestfs_int_', several function calls no longer lined up with
their parameters, and some lines were too long.

The bulk of this commit was done using emacs batch mode and the
technique described here:

  http://www.cslab.pepperdine.edu/warford/BatchIndentationEmacs.html

The changes suggested by emacs were then reviewed by hand.
2015-10-05 14:28:33 +01:00
Richard W.M. Jones
84598ef6f5 daemon: Compile stubs.c first.
This shaves about 20% off the compile time for the daemon subdirectory.

See also:
https://rwmj.wordpress.com/2015/09/30/make-and-queuing-theory/#content
2015-09-30 13:33:39 +01:00
Pino Toscano
59a9101e44 daemon: initrd: print return value from failing process
If either zcat or cpio fails when spawned in initrd-list, pclose will
return the actual return value of it, but reply_with_perror still uses
errno regardless; thus, the reported error is:

  libguestfs: error: initrd_list: pclose: Success

which is not much helpful.

Instead, when pclose returns > 0, extract the actual return value of the
subprocess, and print that. Thus now we get for example:

  libguestfs: error: initrd_list: pclose: command failed with return code 1
2015-09-15 10:19:58 +02:00
Pino Toscano
c60cd11e73 actions: tar_in: add xattrs, selinux, and acls optargs
Add additional arguments for tar, so extended attributes and/or SELinux
contexts and/or POSIX ACLs can be restored from input tars.
2015-07-21 18:12:52 +02:00
Pino Toscano
afb5db7837 actions: tar_out: add xattrs, selinux, and acl optargs
Add additional arguments for tar, so extended attributes and/or SELinux
contexts and/or POSIX ACLs can be saved in output tars.
2015-07-21 18:12:52 +02:00
Chen Hanxiao
d29337605a daemon: add a space after func/macro to fit code-style
more daemon codes covered

Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-07-17 13:27:13 +01:00
Chen Hanxiao
c3edd076b9 daemon: add a space after func name to fit code-style
Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-07-13 12:31:52 +01:00
Chen Hanxiao
46be6934fc labels: return ENOTSUP if could not set label for specific fs
Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-07-08 13:02:42 +02:00
Chen Hanxiao
d9b53a2752 labels: use existing do_xfs_admin for xfslabel
Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-07-08 12:26:59 +02:00
Chen Hanxiao
5c6be8846f labels: move ntfslabel to ntfs.c
Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-07-08 12:26:52 +02:00
Chen Hanxiao
d5a60f2148 labels: move e2label to ext2.c and call it directly
ext2 should not call function in labels

Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-07-08 12:26:47 +02:00
Chen Hanxiao
16232ffd58 labels: move btrfslabel to btrfs.c
Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-07-08 09:56:56 +02:00
Chen Hanxiao
105fa8bf31 uuids: return ENOTSUP if could not set UUID for specific fs
Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-07-07 09:20:38 +02:00
Chen Hanxiao
a477e282db New API: set_uuid_random
Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-07-03 11:31:41 +02:00
Richard W.M. Jones
ccdbbc7fe4 Fix various -Wformat problems.
Updating gnulib has caused -Wformat-signedness to be enabled.  This
has revealed many problems in C format strings.  The fixes here fall
into the following main categories:

 - Using %d with an unsigned parameter.

 - %x and %o expect an unsigned argument.

 - uid_t and gid_t are unsigned on Linux.  The safe way to print these
   is to cast them to uintmax_t and then print them using the %ju
   modifier (see http://stackoverflow.com/a/1401581).

 - Using %d to print an enum.  Since enums may be either char or int,
   I fixed this by casting the enum to int.

 - strtol_error & lzma_ret are both unsigned types.
2015-07-02 16:08:44 +01:00
Chen Hanxiao
4e8ef1ae37 uuid: use newly introduced swap_set_uuid
Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-07-02 11:08:52 +02:00
Chen Hanxiao
80cf46e110 uuid: add support to change uuid of btrfs partition
btrfs-progs v4.1 add support to change uuid of btrfs fs.

Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-07-02 11:08:42 +02:00
Chen Hanxiao
d0c067df87 daemon: add get_random_uuid
Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-06-30 15:54:57 +02:00
Chen Hanxiao
5166388914 uuid: use newly introduced xfs_set_uuid of xfs
Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-06-30 14:48:12 +02:00
Chen Hanxiao
ad21fb8acf uuid: use existing function of ext2
Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
2015-06-30 14:48:06 +02:00
Richard W.M. Jones
336b8f6b16 tests: Add a test of btrfs-subvolume-list using the captive daemon. 2015-06-29 23:08:47 +01:00
Richard W.M. Jones
f2438b75a2 tests: daemon: Cleanly shut down the daemon on exit.
This refines the previous commit by shutting down the daemon cleanly
at the end of the test (assuming the test was successful).  It
repurposes the 'internal_exit' API for this, which was previously used
by the now defunct --enable-valgrind-daemon functionality.
2015-06-29 23:08:46 +01:00
Richard W.M. Jones
8cb1a35d75 daemon: Move all the kernel command line parsing to the init script.
Instead of parsing /proc/cmdline from the daemon, move all of that
parsing into the init script, and pass the argument via the daemon
command line.

For example, previously the daemon and init script both looked for
guestfs_network=1 in /proc/cmdline.  Now the init script still looks
for it, and if found it runs `guestfsd --network'.
2015-06-29 23:08:43 +01:00
Richard W.M. Jones
64ff631127 daemon: Add -l / --listen flag.
This option, used for testing, causes the daemon to create the Unix
domain socket (from guestfs_channel), listen on it, and accept a
single connection.
2015-06-29 23:06:21 +01:00
Richard W.M. Jones
9e0e2247ff daemon: Add undocumented --test / -t option to enable test mode.
This is a catch-all mode for turning off daemon features which
interfere with our testing of the daemon.
2015-06-29 23:06:21 +01:00