X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=guestfs.pod;h=d8e4da3b3925d799fa4986a357f9ee7590cfac2b;hp=c7310a649da61a9851f681e3eb8e6b7388861431;hb=5da810b96072c0fd71d78713025a2e104295d0ff;hpb=a7b73d4a1e09f12b2002083618056f0c823c1dcf diff --git a/guestfs.pod b/guestfs.pod index c7310a6..d8e4da3 100644 --- a/guestfs.pod +++ b/guestfs.pod @@ -78,7 +78,7 @@ are blocking calls. You can use the low-level event API to do non-blocking operations instead. All functions that return integers, return C<-1> on error. See -section ERROR HANDLING below for how to handle errors. +section L below for how to handle errors. =head2 guestfs_h * @@ -87,7 +87,7 @@ Create a handle by calling C. Call C to free the handle and release all resources used. For information on using multiple handles and threads, see the section -MULTIPLE HANDLES AND MULTIPLE THREADS below. +L below. =head2 guestfs_create @@ -104,7 +104,7 @@ After configuring the handle, you have to call C and C. You may also want to configure error handling for the handle. See -ERROR HANDLING section below. +L section below. =head2 guestfs_close @@ -203,6 +203,186 @@ directory is I searched unless the path contains an empty element or C<.>. For example C would search the current directory and then C. +=head1 API OVERVIEW + +This section provides additional documentation for groups of API +calls, which may not be obvious from reading about the individual +calls below. + +=head2 LVM2 + +Libguestfs provides access to a large part of the LVM2 API. It won't +make much sense unless you familiarize yourself with the concepts of +physical volumes, volume groups and logical volumes. + +This author strongly recommends reading the LVM HOWTO, online at +L. + +=head2 PARTITIONING + +To create MBR-style (ie. normal PC) partitions use one of the +C variants. These calls use the external +L command. + +The simplest call is: + + char *lines[] = { ",", NULL }; + guestfs_sfdiskM (g, "/dev/sda", lines); + +This will create a single partition on C called +C covering the whole disk. + +In general MBR partitions are both unnecessarily complicated and +depend on archaic details, namely the Cylinder-Head-Sector (CHS) +geometry of the disk. C allows you to specify sizes +in megabytes instead of cylinders, which is a small win. +C will choose the nearest cylinder to approximate the +requested size. There's a lot of crazy stuff to do with IDE and +virtio disks having different, incompatible CHS geometries, that you +probably don't want to know about. My advice: make a single partition +to cover the whole disk, then use LVM on top. + +In future we aim to provide access to libparted. + +=head2 UPLOADING + +For small, single files, use C. In some versions +of libguestfs there was a bug which limited this call to text files +(not containing ASCII NUL characters). + +To upload a single file, use C. This call has no +limits on file content or size (even files larger than 4 GB). + +To upload multiple files, see C and C. + +However the fastest way to upload I +is to turn them into a squashfs or CD ISO (see L and +L), then attach this using C. If +you add the drive in a predictable way (eg. adding it last after all +other drives) then you can get the device name from +C and mount it directly using +C. Note that squashfs images are sometimes +non-portable between kernel versions, and they don't support labels or +UUIDs. If you want to pre-build an image or you need to mount it +using a label or UUID, use an ISO image instead. + +=head2 DOWNLOADING + +Use C to download small, text only files. This call +is limited to files which are less than 2 MB and which cannot contain +any ASCII NUL (C<\0>) characters. However it has a very simple +to use API. + +C can be used to read files which contain +arbitrary 8 bit data, since it returns a (pointer, size) pair. +However it is still limited to "small" files, less than 2 MB. + +C can be used to download any file, with no +limits on content or size (even files larger than 4 GB). + +To download multiple files, see C and +C. + +=head2 RUNNING COMMANDS + +Although libguestfs is a primarily an API for manipulating files +inside guest images, we also provide some limited facilities for +running commands inside guests. + +There are many limitations to this: + +=over 4 + +=item * + +The kernel version that the command runs under will be different +from what it expects. + +=item * + +If the command needs to communicate with daemons, then most likely +they won't be running. + +=item * + +The command will be running in limited memory. + +=item * + +Only supports Linux guests (not Windows, BSD, etc). + +=item * + +Architecture limitations (eg. won't work for a PPC guest on +an X86 host). + +=item * + +For SELinux guests, you may need to enable SELinux and load policy +first. See L in this manpage. + +=back + +The two main API calls to run commands are C and +C (there are also variations). + +The difference is that C runs commands using the shell, so +any shell globs, redirections, etc will work. + +=head2 LISTING FILES + +C is just designed for humans to read (mainly when using +the L-equivalent command C). + +C is a quick way to get a list of files in a directory +from programs. + +C is a programmatic way to get a list of files in a +directory, plus additional information about each one. + +C can be used to recursively list files. + +=head2 SELINUX + +We support SELinux guests. To ensure that labeling happens correctly +in SELinux guests, you need to enable SELinux and load the guest's +policy: + +=over 4 + +=item 1. + +Before launching, do: + + guestfs_set_selinux (g, 1); + +=item 2. + +After mounting the guest's filesystem(s), load the policy. This +is best done by running the L command in the +guest itself: + + guestfs_sh (g, "/usr/sbin/load_policy"); + +(Older versions of C require you to specify the +name of the policy file). + +=item 3. + +Optionally, set the security context for the API. The correct +security context to use can only be known by inspecting the +guest. As an example: + + guestfs_setcon (g, "unconfined_u:unconfined_r:unconfined_t:s0"); + +=back + +This will work for running commands and editing existing files. + +When new files are created, you may need to label them explicitly, +for example by running the external command +C. + =head1 HIGH-LEVEL API ACTIONS =head2 ABI GUARANTEE @@ -801,7 +981,17 @@ Set the default qemu binary that libguestfs uses. If not set, then the qemu which was found at compile time by the configure script is used. -See also L above. +See also L above. + +=item TMPDIR + +Location of temporary directory, defaults to C. + +If libguestfs was compiled to use the supermin appliance then each +handle will require rather a large amount of space in this directory +for short periods of time (~ 80 MB). You can use C<$TMPDIR> to +configure another directory to use in case C is not large +enough. =back @@ -812,6 +1002,13 @@ L, L, L. +Tools with a similar purpose: +L, +L, +L, +L, +L. + =head1 BUGS To get a list of bugs against libguestfs use this link: @@ -838,6 +1035,11 @@ That you are testing a recent version. Describe the bug accurately, and give a way to reproduce it. +=item * + +Run libguestfs-test-tool and paste the B +output into the bug report. + =back =head1 AUTHORS