summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* NEW API:ext:mke2fsWanlong Gao2012-09-241-1/+1
| | | | | | | | | | | New api mke2fs for full configuration of filesystem. Signed-off-by: Wanlong Gao <gaowanlong@cn.fujitsu.com> RWMJ: - Update description. - Run and fix the tests. - Remove bogus filename from po/POTFILES.
* launch: Handle guestfs_config qemu_value == NULL.Richard W.M. Jones2012-09-212-6/+8
| | | | | | | | | | | | | The second parameter to 'config' may be NULL. In commit 52fa23d74f6308daf804c2330b0b27e0b4412594 (refactoring of guestfs_config) the code this got lost, and guestfs_config would segfault if qemu_value was NULL. Also this fixes the libvirt method to handle the same case. I checked libguestfs-1.18 and -1.16 branches, and this problem does NOT affect them.
* Update SuSE Linux detection.Olaf Hering2012-09-215-4/+106
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Update SuSE Linux detection. Up to now everything with a /etc/SuSE-release file was treated as openSuSE. With this change SLES based distributions such as "SUSE Linux Enterprise Server", "SUSE Linux Enterprise Desktop" and "Novell Linux Desktop" will show up as "sles". The 'opensuse' detection was updated to handle older openSuSE releases as well as the well known SuSE Linux releases, starting from 6.0. Everything else with a /etc/SuSE-release file will show up as "suse-based". Here is a collection of release files: ==> Dist/6.0/etc/SuSE-release <== SuSE Linux 6.0 (i386) VERSION = 6.0 ==> Dist/6.1/etc/SuSE-release <== SuSE Linux 6.1 (i386) VERSION = 6.1 ==> Dist/6.2/etc/SuSE-release <== SuSE Linux 6.2 (i386) VERSION = 6.2 ==> Dist/6.3/etc/SuSE-release <== SuSE Linux 6.3 (i386) VERSION = 6.3 ==> Dist/6.4/etc/SuSE-release <== SuSE Linux 6.4 (i386) VERSION = 6.4 ==> Dist/7.0/etc/SuSE-release <== SuSE Linux 7.0 (i386) VERSION = 7.0 ==> Dist/7.1/etc/SuSE-release <== SuSE Linux 7.1 (i386) VERSION = 7.1 ==> Dist/7.2/etc/SuSE-release <== SuSE Linux 7.2 (i386) VERSION = 7.2 ==> Dist/7.3/etc/SuSE-release <== SuSE Linux 7.3 (i386) VERSION = 7.3 ==> Dist/8.0/etc/SuSE-release <== SuSE Linux 8.0 (i386) VERSION = 8.0 ==> Dist/8.1/etc/SuSE-release <== SuSE Linux 8.1 (i386) VERSION = 8.1 ==> Dist/8.2/etc/SuSE-release <== SuSE Linux 8.2 (x86-64) VERSION = 8.2 ==> Dist/9.0/etc/SuSE-release <== SuSE Linux 9.0 (x86-64) VERSION = 9.0 ==> Dist/9.1/etc/SuSE-release <== SuSE Linux 9.1 (x86-64) VERSION = 9.1 ==> Dist/9.2/etc/SuSE-release <== SuSE Linux 9.2 (x86-64) VERSION = 9.2 ==> Dist/9.3/etc/SuSE-release <== SuSE Linux 9.3 (x86-64) VERSION = 9.3 ==> Dist/10.0/etc/SuSE-release <== SUSE LINUX 10.0 (X86-64) OSS VERSION = 10.0 ==> Dist/10.1-remastered/etc/SuSE-release <== SUSE LINUX 10.1 (X86-64) VERSION = 10.1 ==> Dist/10.1/etc/SuSE-release <== SUSE Linux 10.1 (X86-64) Beta8 VERSION = 10.1 ==> Dist/10.2/etc/SuSE-release <== openSUSE 10.2 (X86-64) VERSION = 10.2 ==> Dist/10.3/etc/SuSE-release <== openSUSE 10.3 (X86-64) VERSION = 10.3 ==> Dist/11.0/etc/SuSE-release <== openSUSE 11.0 (X86-64) VERSION = 11.0 ==> Dist/11.1/etc/SuSE-release <== openSUSE 11.1 (x86_64) VERSION = 11.1 ==> Dist/11.2/etc/SuSE-release <== openSUSE 11.2 (x86_64) VERSION = 11.2 ==> Dist/11.3/etc/SuSE-release <== openSUSE 11.3 (x86_64) VERSION = 11.3 ==> Dist/11.4/etc/SuSE-release <== openSUSE 11.4 (x86_64) VERSION = 11.4 CODENAME = Celadon ==> Dist/12.1/etc/SuSE-release <== openSUSE 12.1 (x86_64) VERSION = 12.1 CODENAME = Asparagus ==> Dist/12.2/etc/SuSE-release <== openSUSE 12.2 (x86_64) VERSION = 12.2 CODENAME = Mantis ==> Dist/sles8/etc/SuSE-release <== SuSE SLES-8 (AMD64) VERSION = 8.1 ==> Dist/sles9/etc/SuSE-release <== SUSE LINUX Enterprise Server 9 (x86_64) VERSION = 9 ==> Dist/sles9sp2/etc/SuSE-release <== SUSE LINUX Enterprise Server 9 (x86_64) VERSION = 9 PATCHLEVEL = 2 ==> Dist/sles9sp3/etc/SuSE-release <== SUSE LINUX Enterprise Server 9 (x86_64) VERSION = 9 PATCHLEVEL = 3 ==> Dist/sles9sp4/etc/SuSE-release <== SUSE LINUX Enterprise Server 9 (x86_64) VERSION = 9 PATCHLEVEL = 4 ==> Dist/sled10/etc/SuSE-release <== SUSE Linux Enterprise Desktop 10 (x86_64) VERSION = 10 ==> Dist/sled10sp1/etc/SuSE-release <== SUSE Linux Enterprise Desktop 10 (x86_64) VERSION = 10 PATCHLEVEL = 1 ==> Dist/sled10sp2/etc/SuSE-release <== SUSE Linux Enterprise Desktop 10 (x86_64) VERSION = 10 PATCHLEVEL = 2 ==> Dist/sled10sp3/etc/SuSE-release <== SUSE Linux Enterprise Desktop 10 (x86_64) VERSION = 10 PATCHLEVEL = 3 ==> Dist/sled10sp4/etc/SuSE-release <== SUSE Linux Enterprise Desktop 10 (x86_64) VERSION = 10 PATCHLEVEL = 4 ==> Dist/sled11/etc/SuSE-release <== SUSE Linux Enterprise Desktop 11 (x86_64) VERSION = 11 PATCHLEVEL = 0 ==> Dist/sled11sp1/etc/SuSE-release <== SUSE Linux Enterprise Desktop 11 (x86_64) VERSION = 11 PATCHLEVEL = 1 ==> Dist/sled11sp2/etc/SuSE-release <== SUSE Linux Enterprise Desktop 11 (x86_64) VERSION = 11 PATCHLEVEL = 2 ==> Dist/sles10/etc/SuSE-release <== SUSE Linux Enterprise Server 10 (x86_64) VERSION = 10 ==> Dist/sles10sp1/etc/SuSE-release <== SUSE Linux Enterprise Server 10 (x86_64) VERSION = 10 PATCHLEVEL = 1 ==> Dist/sles10sp2/etc/SuSE-release <== SUSE Linux Enterprise Server 10 (x86_64) VERSION = 10 PATCHLEVEL = 2 ==> Dist/sles10sp3/etc/SuSE-release <== SUSE Linux Enterprise Server 10 (x86_64) VERSION = 10 PATCHLEVEL = 3 ==> Dist/sles10sp4/etc/SuSE-release <== SUSE Linux Enterprise Server 10 (x86_64) VERSION = 10 PATCHLEVEL = 4 ==> Dist/sles11/etc/SuSE-release <== SUSE Linux Enterprise Server 11 (x86_64) VERSION = 11 PATCHLEVEL = 0 ==> Dist/sles11sp1/etc/SuSE-release <== SUSE Linux Enterprise Server 11 (x86_64) VERSION = 11 PATCHLEVEL = 1 ==> Dist/sles11sp2/etc/SuSE-release <== SUSE Linux Enterprise Server 11 (x86_64) VERSION = 11 PATCHLEVEL = 2 Signed-off-by: Olaf Hering <olaf@aepfle.de>
* rename local variable to avoid clash with match macroOlaf Hering2012-09-201-3/+3
| | | | | | match will expand to guestfs___match, rename the local variable to avoid clash. Signed-off-by: Olaf Hering <olaf@aepfle.de>
* docs: Add links to various guestfs-* man pages from guestfs(3).Richard W.M. Jones2012-09-201-0/+5
|
* launch: Make the "launched failed" message more explanatory.Richard W.M. Jones2012-09-204-4/+21
| | | | | | | Since this is the most common error seen by people who have installation problems, buggy qemu, etc, and since no one reads the FAQ, describe in this error message what resources are available to debug launch problems.
* launch: libvirt: Pass TMPDIR to qemu subprocess.Richard W.M. Jones2012-09-171-0/+14
|
* New API: rm-f: remove a file, ignoring errors if it doesn't exist.Richard W.M. Jones2012-09-171-1/+1
|
* inspect: Fix segfault and error caused by earlier code cleanups.Richard W.M. Jones2012-09-172-2/+5
| | | | This fixes commit e128a627fb8f39f4f4c11b782cef895bd79f0282.
* launch: libvirt: Disable sVirt if using a custom qemu (ie. setting <emulator>).Richard W.M. Jones2012-09-171-4/+34
| | | | | | See: https://bugzilla.redhat.com/show_bug.cgi?id=857659 especially Dan's comment 4.
* Fix multiple errors where jump skips variable initialization.Richard W.M. Jones2012-09-178-30/+35
| | | | | | | <file>: error: jump skips variable initialization [-Werror=jump-misses-init] This has only just appeared, possibly related to previous gnulib update. In any case, this is just code motion / cleanup.
* syntax: Remove definitions of O_CLOEXEC, except in examples (thanks Jim ↵Richard W.M. Jones2012-09-172-8/+0
| | | | | | | Meyering). The gnulib <fcntl.h> replacement header will now define this symbol if it's not defined already.
* syntax: Use STREQ/STRNEQ in place of strcmp.Richard W.M. Jones2012-09-151-1/+1
| | | | Found by 'make syntax-check'.
* syntax: Remove include <signal.h> in file that doesn't use it.Richard W.M. Jones2012-09-151-1/+0
| | | | Found by 'make syntax-check'.
* syntax: Remove PATH_MAX-sized buffers allocated on the stack.Richard W.M. Jones2012-09-151-2/+3
| | | | | | | | | | | | | | On Linux PATH_MAX is 4096, but on some platforms it can be much larger or even not defined (ie. unlimited). Therefore using a PATH_MAX-sized stack buffer is not a great idea for portable programs. This change removes use of PATH_MAX-sized stack-allocated buffers. This change only applies to the library and standalone programs. Inside the daemon, memory allocation is much more complicated so I have not changed those (yet). Found by 'make syntax-check'.
* syntax: Remove gnulib "ignore-value.h" in files that don't use it.Richard W.M. Jones2012-09-156-7/+0
| | | | Found by 'make syntax-check'.
* syntax: Remove gnulib c-ctype.h in files that don't use it.Richard W.M. Jones2012-09-154-4/+0
| | | | Found by 'make syntax-check'.
* syntax: Remove include <assert.h> where assert is not used.Richard W.M. Jones2012-09-151-1/+0
| | | | Found by 'make syntax-check'.
* lib: Rearrange headers.Richard W.M. Jones2012-09-152-10/+8
| | | | This is just code motion.
* lib: Remove unused headers <arpa/inet.h> and <netinet/in.h>Richard W.M. Jones2012-09-152-4/+0
| | | | | These were used back in the day when we used TCP for the communications channel with the guest.
* syntax: Remove HAVE_*_H tests which are always true.Richard W.M. Jones2012-09-153-42/+7
| | | | | Gnulib supplies replacements for these headers, so there is no need to test.
* lib: These optargs structures are not modified, hence const.Richard W.M. Jones2012-09-151-3/+3
|
* docs: Fix documentation of syntax-check target, add extra-tests.Richard W.M. Jones2012-09-151-2/+7
|
* launch: libvirt: Enable sVirt.Richard W.M. Jones2012-09-141-21/+0
|
* build: Create new 'tmp' directory for tests.Richard W.M. Jones2012-09-141-0/+12
| | | | | | | | | | | | Having a separate directory means: (1) It's easy to clean up orphaned temporary files, the appliance, etc. (2) You can put an SELinux label on this directory so that qemu can write to it when you're using sVirt and SELinux is enforcing: chcon --reference=/tmp tmp
* launch: libvirt: Mark appliance disk as <shareable/> (thanks Dan Berrange).Richard W.M. Jones2012-09-141-0/+3
| | | | | | | | | | | This is a fix for multiprogramming: If two instances of libguestfs share the same appliance disk, then libvirt would unlabel the disk when one of the instances closes the handle, resulting in the other qemu being unable to continue accessing the appliance. Adding the flag makes libvirt understand that the disk is shared so it doesn't do this, and it apparently handles locking correctly too if we were using sanlock.
* lib: guestfs_disk_format: Set LC_ALL=C instead of LANG=C.Richard W.M. Jones2012-09-121-1/+1
| | | | | | LC_ALL takes precedence over LANG. See: http://pubs.opengroup.org/onlinepubs/7908799/xbd/envvar.html
* shutdown: Add 'check_for_errors' hint along the shutdown path.Richard W.M. Jones2012-09-046-10/+26
| | | | | | | | This hint tells the backend whether anyone cares about errors when the appliance is shut down. Currently this only has any effect on the libvirt backend, where it controls whether or not we use the VIR_DOMAIN_DESTROY_GRACEFUL flag.
* launch: libvirt: Add VIR_DOMAIN_DESTROY_GRACEFUL flag.Richard W.M. Jones2012-09-041-2/+1
| | | | | | We want libvirt to report failures when destroying the guest. See: https://bugzilla.redhat.com/show_bug.cgi?id=853369#c12
* proto: Don't set g->fd[] to /dev/null in direct mode, fixing virt-rescue ↵Richard W.M. Jones2012-09-041-13/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (RHBZ#853159). https://bugzilla.redhat.com/show_bug.cgi?id=853159 git bisect pointed to the following commit: commit ec8e3b6cad170d08ac18b580792dfb137eb171dc Author: Richard W.M. Jones <rjones@redhat.com> Date: Fri Jul 20 14:24:10 2012 +0100 launch: Abstract attach method operations. g->attach_ops points to a structure which contains the operations supported by each attach method backend (ie. appliance, unix, etc.). Since that commit was essentially just code motion, it wasn't clear why virt-rescue should be affected by it. In fact the reason is as follows: (1) In direct mode, we don't need g->fd[] (which would normally be connected to the stdin/stdout of qemu). So we opened them on /dev/null so they had some value. (2) accept_from_daemon / read_log_message_or_eof reads from g->fd[1]. Since this is connected to /dev/null, it always reads EOF. (3) This would cause child_cleanup to be called. This is completely unintentional: we don't want to cleanup the child at this point, even in direct mode. (4) Prior to the commit above, child_cleanup first waited for the process to exit (ie. waitpid). This happened to work, since we are effectively waiting for the user to exit virt-rescue. (5) After the commit above, the order of operations was changed so that we first killed qemu before waiting for it. This broke virt-rescue. The fix is to change direct mode so that it leaves g->fd[]'s as -1. The rest of the protocol code can deal with this situation -- it ignores the log fd instead of trying to read from it.
* launch: libvirt: Direct mode flag is not (yet) supported, so give an error ↵Richard W.M. Jones2012-09-041-0/+6
| | | | | | in this case. We definitely intend to support this in future.
* New APIs: disk-virtual-size and disk-has-backing-file.Richard W.M. Jones2012-09-041-0/+63
|
* lib: Reimplement qemu-img info parser for flexibility.Richard W.M. Jones2012-09-041-24/+52
| | | | | | | This allows other fields from the output of 'qemu-img info' to be parsed out. This updates commit 20902e7ce02fa375d5d336e6b984f615472ad1b1.
* Fix guestfs_disk_image API to work with relative paths.Richard W.M. Jones2012-09-041-1/+12
| | | | | | | | guestfs_disk_image makes a symbolic link to the real filename in order to sanitize the filename. However this fails if the filename is a relative path. Call realpath(3) to make the filename canonical. This fixes commit 20902e7ce02fa375d5d336e6b984f615472ad1b1.
* launch: libvirt: Use guestfs_disk_format API to autodetect input format.Richard W.M. Jones2012-09-031-85/+19
|
* guestfs(3): Document disk image formats and how to detect them.Richard W.M. Jones2012-09-031-0/+87
|
* New API: guestfs_disk_formatRichard W.M. Jones2012-09-032-0/+162
| | | | Detect the disk image format of a file, in a secure way.
* generator: Rename 'generator_*' as '*'.Richard W.M. Jones2012-09-021-10/+9
| | | | | | | | | This is a simple renaming of the files/modules. Note that in OCaml, module names are derived from filenames by capitalizing the first letter. Thus the old module names had the form "Generator_api_versions". The new modules names have the form "Api_versions".
* Copy the kernel so that libvirt can add an SELinux label to it. NB. This ↵Richard W.M. Jones2012-08-311-2/+3
| | | | requires febootstrap >= 3.20 with --copy-kernel flag.
* guestfs-internal.h: Organize functions by file.Richard W.M. Jones2012-08-311-45/+75
| | | | | | | | | | | This is almost just code motion. While doing this I discovered two prototypes for functions which no longer exist: * guestfs___launch_appliance * guestfs___launch_unix so these prototypes have been removed. The rest are rearranged more logically.
* src/dbdump.c: Shouldn't depend on HAVE_HIVEX (thanks Tao Zhou).Richard W.M. Jones2012-08-311-2/+2
|
* launch: appliance: app.virtio_scsi must not be bool.Richard W.M. Jones2012-08-301-1/+1
| | | | | | This is used to store values 0..3, so it mustn't be a bool. Ooops. RHEL 5's gcc revealed this bug.
* launch: libvirt: Remove code for creating sockdir.Richard W.M. Jones2012-08-301-107/+8
| | | | | | Create the sockets in g->tmpdir as usual. It's a bug in libvirt that it doesn't label the sockets correctly no matter where they are located.
* launch: libvirt: Avoid memory leak if sockdir is not created (found by ↵Richard W.M. Jones2012-08-301-0/+2
| | | | valgrind).
* NEW API:xfs:xfs_repairWanlong Gao2012-08-301-1/+1
| | | | | | | | | | Add a new api xfs_repair for repairing an XFS filesystem. Signed-off-by: Wanlong Gao <gaowanlong@cn.fujitsu.com> RWMJ: - Fix non-error return path so it doesn't send two replies. - Document return code.
* Update inspection and example programs to use new hivex* APIs (RHBZ#852394).Richard W.M. Jones2012-08-299-364/+117
| | | | | | | | | | | | | | | | | | | | | | | I tested this by comparing the output of virt-inspector over Windows guests before and after the change, which was identical: $ md5sum `ls -1 /tmp/*.before /tmp/*.after` c292d6629b5a761eccb4a279754399b4 /tmp/Win2003.after c292d6629b5a761eccb4a279754399b4 /tmp/Win2003.before eb1e1ff29208a9ee46e9c100dfec26b2 /tmp/Win2012.after eb1e1ff29208a9ee46e9c100dfec26b2 /tmp/Win2012.before d060a95d7ffe5dce6c4e66feb80c2837 /tmp/Win7x32.after d060a95d7ffe5dce6c4e66feb80c2837 /tmp/Win7x32.before 8914eee70ac4f8a0317659e09e00dcdc /tmp/Win7x32Dynamic.after 8914eee70ac4f8a0317659e09e00dcdc /tmp/Win7x32Dynamic.before a2dcdfc0f9d64054640875aa791889e0 /tmp/Win7x32TwoDisks.after a2dcdfc0f9d64054640875aa791889e0 /tmp/Win7x32TwoDisks.before 5ed49568a5147dce7517c99de41ebf2e /tmp/Win8previewx64.after 5ed49568a5147dce7517c99de41ebf2e /tmp/Win8previewx64.before fdfc7d272b79a665ae3313ae1ae30660 /tmp/WinXP.after fdfc7d272b79a665ae3313ae1ae30660 /tmp/WinXP.before 3c705444be664f1316b21c5d8d3cb0be /tmp/WinXPRecConsole.after 3c705444be664f1316b21c5d8d3cb0be /tmp/WinXPRecConsole.before
* New API: guestfs_hivex_value_utf8Richard W.M. Jones2012-08-291-0/+85
| | | | | A convenience function that reads a value from the registry and returns it as UTF-8.
* New APIs: hivex_*Richard W.M. Jones2012-08-292-7/+10
| | | | | | | | | | | Transscribe many hivex(3) APIs into the libguestfs API. There is one hive handle per libguestfs handle, as with Augeas. Note that hivex uses iconv_open for some APIs (eg. hivex_value_string). But since we delete all the i18n files from the appliance, this doesn't work -- iconv_open returns EINVAL. Therefore hivex APIs which require iconv cannot be bound in the daemon.
* lib: Remove AUGEAS_CFLAGS, AUGEAS_LIBS.Richard W.M. Jones2012-08-291-2/+2
| | | | | | The library doesn't actually use libaugeas, except indirectly via the libguestfs API. The libguestfs API implements this in the daemon, so there's no need for the library to link to augeas at all.
* remove ulockmgr from fuse LDFLAGSOlaf Hering2012-08-291-1/+1
| | | | | | | | | | libguestfs fails to build with --enable-fuse on openSuSE 11.4 and earlier because the included fuse version does not include libulockmgr.so. configure already used pkgconfig to retrieve the correct CFLAGS, so there is no need to hardcode -lulockmgr. With this change the build succeeds again. Signed-off-by: Olaf Hering <olaf@aepfle.de>