# libguestfs generated file # WARNING: THIS FILE IS GENERATED BY 'src/generator.ml'. # ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST. # # Copyright (C) 2009 Red Hat Inc. # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA =pod =head1 NAME Sys::Guestfs - Perl bindings for libguestfs =head1 SYNOPSIS use Sys::Guestfs; my $h = Sys::Guestfs->new (); $h->add_drive ('guest.img'); $h->launch (); $h->wait_ready (); $h->mount ('/dev/sda1', '/'); $h->touch ('/hello'); $h->sync (); =head1 DESCRIPTION The C module provides a Perl XS binding to the libguestfs API for examining and modifying virtual machine disk images. Amongst the things this is good for: making batch configuration changes to guests, getting disk used/free statistics (see also: virt-df), migrating between virtualization systems (see also: virt-p2v), performing partial backups, performing partial guest clones, cloning guests and changing registry/UUID/hostname info, and much else besides. Libguestfs uses Linux kernel and qemu code, and can access any type of guest filesystem that Linux and qemu can, including but not limited to: ext2/3/4, btrfs, FAT and NTFS, LVM, many different disk partition schemes, qcow, qcow2, vmdk. Libguestfs provides ways to enumerate guest storage (eg. partitions, LVs, what filesystem is in each LV, etc.). It can also run commands in the context of the guest. Also you can access filesystems over FTP. =head1 ERRORS All errors turn into calls to C (see L). =head1 METHODS =over 4 =cut package Sys::Guestfs; use strict; use warnings; require XSLoader; XSLoader::load ('Sys::Guestfs'); =item $h = Sys::Guestfs->new (); Create a new guestfs handle. =cut sub new { my $proto = shift; my $class = ref ($proto) || $proto; my $self = Sys::Guestfs::_create (); bless $self, $class; return $self; } =item $h->add_cdrom (filename); This function adds a virtual CD-ROM disk image to the guest. This is equivalent to the qemu parameter C<-cdrom filename>. =item $h->add_drive (filename); This function adds a virtual machine disk image C to the guest. The first time you call this function, the disk appears as IDE disk 0 (C) in the guest, the second time as C, and so on. You don't necessarily need to be root when using libguestfs. However you obviously do need sufficient permissions to access the filename for whatever operations you want to perform (ie. read access if you just want to read the image or write access if you want to modify the image). This is equivalent to the qemu parameter C<-drive file=filename>. =item $content = $h->cat (path); Return the contents of the file named C. Note that this function cannot correctly handle binary files (specifically, files containing C<\0> character which is treated as end of string). For those you need to use the C<$h-Eread_file> function which has a more complex interface. Because of the message protocol, there is a transfer limit of somewhere between 2MB and 4MB. To transfer large files you should use FTP. =item $h->config (qemuparam, qemuvalue); This can be used to add arbitrary qemu command line parameters of the form C<-param value>. Actually it's not quite arbitrary - we prevent you from setting some parameters which would interfere with parameters that we use. The first character of C string must be a C<-> (dash). C can be NULL. =item $autosync = $h->get_autosync (); Get the autosync flag. =item $path = $h->get_path (); Return the current search path. This is always non-NULL. If it wasn't set already, then this will return the default path. =item $verbose = $h->get_verbose (); This returns the verbose messages flag. =item $h->kill_subprocess (); This kills the qemu subprocess. You should never need to call this. =item $h->launch (); Internally libguestfs is implemented by running a virtual machine using L. You should call this after configuring the handle (eg. adding drives) but before performing any actions. =item @devices = $h->list_devices (); List all the block devices. The full block device names are returned, eg. C =item @partitions = $h->list_partitions (); List all the partitions detected on all block devices. The full partition device names are returned, eg. C This does not return logical volumes. For that you will need to call C<$h-Elvs>. =item $listing = $h->ll (directory); List the files in C (relative to the root directory, there is no cwd) in the format of 'ls -la'. This command is mostly useful for interactive sessions. It is I intended that you try to parse the output string. =item @listing = $h->ls (directory); List the files in C (relative to the root directory, there is no cwd). The '.' and '..' entries are not returned, but hidden files are shown. This command is mostly useful for interactive sessions. Programs should probably use C<$h-Ereaddir> instead. =item @logvols = $h->lvs (); List all the logical volumes detected. This is the equivalent of the L command. This returns a list of the logical volume device names (eg. C). See also C<$h-Elvs_full>. =item @logvols = $h->lvs_full (); List all the logical volumes detected. This is the equivalent of the L command. The "full" version includes all fields. =item $h->mount (device, mountpoint); Mount a guest disk at a position in the filesystem. Block devices are named C, C and so on, as they were added to the guest. If those block devices contain partitions, they will have the usual names (eg. C). Also LVM C-style names can be used. The rules are the same as for L: A filesystem must first be mounted on C before others can be mounted. Other filesystems can only be mounted on directories which already exist. The mounted filesystem is writable, if we have sufficient permissions on the underlying device. The filesystem options C and C are set with this call, in order to improve reliability. =item @physvols = $h->pvs (); List all the physical volumes detected. This is the equivalent of the L command. This returns a list of just the device names that contain PVs (eg. C). See also C<$h-Epvs_full>. =item @physvols = $h->pvs_full (); List all the physical volumes detected. This is the equivalent of the L command. The "full" version includes all fields. =item $h->set_autosync (autosync); If C is true, this enables autosync. Libguestfs will make a best effort attempt to run C<$h-Esync> when the handle is closed (also if the program exits without closing handles). =item $h->set_path (path); Set the path that libguestfs searches for kernel and initrd.img. The default is C<$libdir/guestfs> unless overridden by setting C environment variable. The string C is stashed in the libguestfs handle, so the caller must make sure it remains valid for the lifetime of the handle. Setting C to C restores the default path. =item $h->set_verbose (verbose); If C is true, this turns on verbose messages (to C). Verbose messages are disabled unless the environment variable C is defined and set to C<1>. =item $h->sync (); This syncs the disk, so that any writes are flushed through to the underlying disk image. You should always call this if you have modified a disk image, before closing the handle. =item $h->touch (path); Touch acts like the L command. It can be used to update the timestamps on a file, or, if the file does not exist, to create a new zero-length file. =item @volgroups = $h->vgs (); List all the volumes groups detected. This is the equivalent of the L command. This returns a list of just the volume group names that were detected (eg. C). See also C<$h-Evgs_full>. =item @volgroups = $h->vgs_full (); List all the volumes groups detected. This is the equivalent of the L command. The "full" version includes all fields. =item $h->wait_ready (); Internally libguestfs is implemented by running a virtual machine using L. You should call this after C<$h-Elaunch> to wait for the launch to complete. =cut 1; =back =head1 COPYRIGHT Copyright (C) 2009 Red Hat Inc. =head1 LICENSE Please see the file COPYING.LIB for the full license. =head1 SEE ALSO L, L. =cut