mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-22 07:03:38 +00:00
406 lines
21 KiB
Plaintext
406 lines
21 KiB
Plaintext
Libguestfs is tools and a library for accessing and modifying guest
|
|
disk images. For more information see the home page:
|
|
|
|
http://libguestfs.org/
|
|
|
|
For discussion, development, patches, etc. please use the mailing
|
|
list:
|
|
|
|
http://www.redhat.com/mailman/listinfo/libguestfs
|
|
|
|
|
|
Requirements
|
|
----------------------------------------------------------------------
|
|
|
|
Running ./configure will check you have all the requirements installed
|
|
on your machine.
|
|
|
|
Fedora/RHEL users:
|
|
|
|
A useful tip is to run:
|
|
|
|
yum-builddep libguestfs
|
|
|
|
which will install all build dependencies automatically. If that is
|
|
successful, you don't need to bother with the rest of this section.
|
|
|
|
Debian/Ubuntu users:
|
|
|
|
Use:
|
|
|
|
apt-get build-dep libguestfs
|
|
|
|
to install all build dependencies. If that doesn't work, take a
|
|
look at the Debian source package:
|
|
http://packages.debian.org/source/libguestfs
|
|
at the list of 'build-depends' and 'build-depends-indep', and
|
|
install everything listed there.
|
|
|
|
If either of those techniques is successful, you don't need to
|
|
bother with the rest of this section.
|
|
|
|
The full requirements are described below.
|
|
|
|
R = Required
|
|
O = Optional
|
|
+==============+=============+===+=========================================+
|
|
| Package name | Min.version | | Notes |
|
|
+==============+=============+===+=========================================+
|
|
| Install as many packages listed in appliance/packagelist.in as possible. |
|
|
| This installs the disk management tools required by the appliance. The |
|
|
| list below is *additional* packages needed on the host. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| qemu | 1.2.0 | R | 1.1 may work, but has broken virtio-scsi|
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| qemu-img | | R | >= 2.2.0 is required for virt-v2v but |
|
|
| | | | optional elsewhere |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| kernel | 2.6.34 | R | Make sure the following are enabled |
|
|
| | | | compiled in or as a module: |
|
|
| | | | - virtio-pci |
|
|
| | | | - virtio-serial |
|
|
| | | | - virtio-block |
|
|
| | | | - virtio-net |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| supermin | 5.1.0 | R | This is required on all distros. |
|
|
| | | | 'supermin' is the new name for |
|
|
| | | | 'febootstrap'. |
|
|
| | | | For alternatives, see: |
|
|
| | | | libguestfs.org/download/binaries/appliance/
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| glibc | | R | We use various glibc-isms. |
|
|
| | | | Also glibc provides XDR, rpcgen. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| GCC or LLVM | | R | We use __attribute__((cleanup)). |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| Perl | | R | Various build and test programs need |
|
|
| | | | Perl. Not needed at runtime except if |
|
|
| | | | you need to run a handful of virt-* |
|
|
| | | | tools that are still written in Perl. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| Pod::Man | | R | Part of Perl core. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| Pod::Simple | | R | Part of Perl core. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| OCaml | |R/O| Required if compiling from git. |
|
|
| | | | Optional if compiling from tarball. |
|
|
| | | | To build generated files and OCaml bindings.
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| autotools | |R/O| Required if compiling from git. |
|
|
| | | | Optional if compiling from tarball. |
|
|
| | | | Autotools-based build system. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| cpio | | R | |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| gperf | | R | |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| flex | | R | flex & bison are required for virt- |
|
|
+--------------+-------------+---| builder. We could make these |
|
|
| bison | | R | optional but automakes makes it hard. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| PCRE | | R | Perl-compatible Regular Expression lib. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| genisoimage | | R | mkisofs may work. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| libxml2 | | R | Popular XML library. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| augeas | 1.0.0 | R | |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| xz | | R | Used to compress disk images. |
|
|
| | | | Used by virt-builder for compression. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| po4a | |R/O| Required if compiling from git. |
|
|
| | | | Optional if compiling from tarball. |
|
|
| | | | For localizing man pages. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| hivex | 1.2.7 |R/O| Require if compiling from git. |
|
|
| | | | Windows Registry hive parser. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| libmagic | | O | The library used by the 'file' command. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| libvirt | | O | >= 0.10.2 is needed if you want to use |
|
|
| | | | libvirt to manage transient VMs. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| xmllint | | O | Part of libxml2. Used for tests only. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| libconfig | | O | Used to parse libguestfs's own config |
|
|
| | | | files eg. /etc/libguestfs-tools.conf. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| libselinux | | O | Used by the libvirt backend to securely |
|
|
| | | | confine the appliance (sVirt). |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| db utils | | O | db_dump, db_load etc. Usually found in |
|
|
| | | | a package called db-utils, db4-utils, |
|
|
| | | | db4.X-utils, Berkeley DB utils, etc. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| systemtap | | O | For userspace probes. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| readline | | O | For nicer command line in guestfish. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| acl | | O | Library (libacl) and programs for |
|
|
| | | | handling POSIX ACLs. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| libcap | | O | Library (libcap) and programs for |
|
|
| | | | handling Linux capabilities. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| libldm | | O | Library (libldm) and 'ldmtool' for |
|
|
| | | | handling Windows Dynamic Disks. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| sd-journal | | O | systemd journal library |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| yajl | 2 | O | JSON parser for parsing output of |
|
|
| | | | ldmtool and qemu-img info commands. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| gdisk | | O | GPT disk support. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| netpbm | | O | Render icons from guests. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| icoutils | | O | Render icons from Windows guests. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| Expect | | O | Perl module used to test virt-rescue. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| FUSE | | O | fusermount, libfuse, and kernel module |
|
|
| | | | are all needed if you want guestmount |
|
|
| | | | and/or 'mount-local' support. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| static glibc | | O | Used for testing only. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| qemu-nbd | | O | Used for testing only. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| uml_mkcow | | O | For the UML backend. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| curl | | O | Used by virt-builder for downloads |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| gpg | | O | Used by virt-builder for digital |
|
|
| | | | signatures |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| liblzma | | O | Can be used by virt-builder for fast |
|
|
| | | | uncompression of templates. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| gtk2 | | O | Used by virt-p2v user interface. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| python-evtx | | O | Used by virt-log to parse Windows |
|
|
| | | | Event Log files. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| findlib | | O | For the OCaml bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| ocaml-gettext| | O | For localizing OCaml virt-* tools. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| Python | 2.2 | O | For the Python bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| Ruby | | O | >= 1.9 is better than 1.8. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| rake | | O | For the Ruby bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| rubygem-minitest | O | For the Ruby bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| Java | 1.6 | O | Java + JNI + jpackage-utils are needed |
|
|
| | | | for the Java bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| GHC | | O | For the Haskell bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| PHP | | O | For the PHP bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| phpize | | O | For the PHP bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| glib2 | | O | For the GObject bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| gobject-introspection | O | For the GObject bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| gjs | | O | For testing the GObject bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| LUA | | O | For the LUA bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| Erlang | | O | For the Erlang bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| erl_interface| | O | For the Erlang bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| golang | 1.1.1 | O | For the Go bindings. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| valgrind | | O | For testing for memory problems. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| Sys::Virt | | O | Perl bindings for libvirt. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| Win::Hivex | | O | Perl bindings for hivex. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| Pod::Usage | | O | Perl module used by tests. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| Test::More | | O | Perl module used by tests. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| XML::XPath | | O | Perl module used by some virt-* tools. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| XML::XPath::XMLParser | O | Perl module used by some virt-* tools. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| perl-libintl | | O | Perl module for localization. |
|
|
+--------------+-------------+---+-----------------------------------------+
|
|
| bash-completion | O | For tab-completion of commands in bash. |
|
|
+==============+=============+===+=========================================+
|
|
R = Required
|
|
O = Optional
|
|
|
|
|
|
Building
|
|
----------------------------------------------------------------------
|
|
|
|
Build the daemon, library and root filesystem:
|
|
|
|
building from tarball building from git
|
|
--------------------- -----------------
|
|
./configure ./autogen.sh
|
|
make make
|
|
|
|
Run the tests:
|
|
|
|
make check
|
|
|
|
Also:
|
|
|
|
make check-valgrind
|
|
|
|
runs a subset of the test suite under valgrind (requires valgrind to
|
|
be installed obviously).
|
|
|
|
make check-all
|
|
|
|
runs check-valgrind + even more tests, but these require that you have
|
|
some libvirt guests installed, that these guests' disks are accessible
|
|
by the current user, and these tests may fail for other reasons which
|
|
are not necessarily because of real problems.
|
|
|
|
make help
|
|
|
|
lists all 'make' targets.
|
|
|
|
You may install the library by running the following command as root.
|
|
However *most users should probably not do this*. Instead, './run'
|
|
the programs from the build directory as described below.
|
|
|
|
make install
|
|
|
|
Distro packagers should use this instead:
|
|
|
|
make INSTALLDIRS=vendor [DESTDIR=...] install
|
|
|
|
You can run guestfish, guestmount and the virt tools without needing
|
|
to install, using the "./run" script in the top directory. This
|
|
script sets up some environment variables. For example:
|
|
|
|
./run guestfish [usual guestfish args ...]
|
|
|
|
./run virt-inspector [usual virt-inspector args ...]
|
|
|
|
If you are already in the fish/ subdirectory, then the following
|
|
command will also work:
|
|
|
|
../run guestfish [...]
|
|
|
|
The ./run script adds every libguestfs binary to the $PATH, so the
|
|
above example runs guestfish from the build directory (not the
|
|
globally installed guestfish if there is one).
|
|
|
|
You can also run the C programs under valgrind like this:
|
|
|
|
./run valgrind [valgrind opts...] virt-cat [virt-cat opts...]
|
|
|
|
or under gdb:
|
|
|
|
./run gdb --args virt-cat [virt-cat opts...]
|
|
|
|
This also works with sudo (eg. if you need root access for libvirt or
|
|
to access a block device):
|
|
|
|
sudo ./run virt-cat -d LinuxGuest /etc/passwd
|
|
|
|
|
|
qemu
|
|
----------------------------------------------------------------------
|
|
|
|
By far the most common problem is with broken or incompatible
|
|
qemu releases.
|
|
|
|
Different versions of qemu have problems booting the appliance for
|
|
different reasons. This varies between versions of qemu, and Linux
|
|
distributions which add their own patches.
|
|
|
|
If you find a problem, you could try using your own qemu built from
|
|
source (qemu is very easy to build from source), with a 'qemu
|
|
wrapper'. Qemu wrappers are described in the guestfs(3) manpage.
|
|
|
|
|
|
Note on using KVM
|
|
----------------------------------------------------------------------
|
|
|
|
By default the configure script will look for qemu-kvm (KVM support).
|
|
You will need a reasonably recent processor for this to work. KVM is
|
|
much faster than using plain Qemu.
|
|
|
|
You may also need to enable KVM support for non-root users, by following
|
|
these instructions:
|
|
|
|
http://www.linux-kvm.org/page/FAQ#How_can_I_use_kvm_with_a_non-privileged_user.3F
|
|
|
|
On some systems, this will work too:
|
|
|
|
chmod 0666 /dev/kvm
|
|
|
|
On some systems, the chmod will not survive a reboot, and you will
|
|
need to make edits to the udev configuration.
|
|
|
|
|
|
Mirroring tip
|
|
----------------------------------------------------------------------
|
|
|
|
On my machines I can usually rebuild the appliance in around 3
|
|
minutes. If it takes much longer for you, use a local distro mirror
|
|
or squid.
|
|
|
|
To use squid to cache yum downloads, read this first:
|
|
https://lists.dulug.duke.edu/pipermail/yum/2006-August/009041.html
|
|
(In brief, because yum chooses random mirrors each time, squid doesn't
|
|
work very well with default yum configuration. To get around this,
|
|
choose a Fedora mirror which is close to you, set this with
|
|
'./configure --with-mirror=[...]', and then proxy the whole lot
|
|
through squid by setting http_proxy environment variable).
|
|
|
|
You will also need to substantially increase the squid configuration
|
|
limits:
|
|
http://fedoraproject.org/wiki/Using_Mock_to_test_package_builds#Using_Squid_to_Speed_Up_Mock_package_downloads
|
|
|
|
|
|
Porting to other Linux distros / non-Linux
|
|
----------------------------------------------------------------------
|
|
|
|
libguestfs itself should be fairly portable to other Linux
|
|
distributions. Non-Linux ports are trickier, but we will accept
|
|
patches if they aren't too invasive.
|
|
|
|
The main porting issues are with the dependencies needed to build the
|
|
appliance. You will need to port febootstrap first
|
|
(http://people.redhat.com/~rjones/febootstrap/).
|
|
|
|
|
|
Note on using clang (from LLVM) instead of GCC
|
|
----------------------------------------------------------------------
|
|
|
|
export CC=clang
|
|
./configure --disable-probes
|
|
make
|
|
|
|
SystemTap/DTrace-style userspace probe points don't work under the
|
|
clang compiler, which is why you may need to disable them.
|
|
|
|
Don't enable GCC warnings (ie. *don't* use
|
|
'./configure --enable-gcc-warnings').
|
|
|
|
|
|
Copyright and license information
|
|
----------------------------------------------------------------------
|
|
|
|
Copyright (C) 2009-2014 Red Hat Inc.
|
|
|
|
The library is distributed under the LGPLv2+. The programs are
|
|
distributed under the GPLv2+. Please see the files COPYING and
|
|
COPYING.LIB for full license information.
|
|
|
|
The examples are under a very liberal license.
|