7706ae408506a8f00b900ad3e0d8441eb3869318
[libguestfs.git] / perl / lib / Sys / Guestfs.pm
1 # libguestfs generated file
2 # WARNING: THIS FILE IS GENERATED BY 'src/generator.ml'.
3 # ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
4 #
5 # Copyright (C) 2009 Red Hat Inc.
6 #
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation; either
10 # version 2 of the License, or (at your option) any later version.
11 #
12 # This library is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 # Lesser General Public License for more details.
16 #
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this library; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
21 =pod
22
23 =head1 NAME
24
25 Sys::Guestfs - Perl bindings for libguestfs
26
27 =head1 SYNOPSIS
28
29  use Sys::Guestfs;
30  
31  my $h = Sys::Guestfs->new ();
32  $h->add_drive ('guest.img');
33  $h->launch ();
34  $h->wait_ready ();
35  $h->mount ('/dev/sda1', '/');
36  $h->touch ('/hello');
37  $h->sync ();
38
39 =head1 DESCRIPTION
40
41 The C<Sys::Guestfs> module provides a Perl XS binding to the
42 libguestfs API for examining and modifying virtual machine
43 disk images.
44
45 Amongst the things this is good for: making batch configuration
46 changes to guests, getting disk used/free statistics (see also:
47 virt-df), migrating between virtualization systems (see also:
48 virt-p2v), performing partial backups, performing partial guest
49 clones, cloning guests and changing registry/UUID/hostname info, and
50 much else besides.
51
52 Libguestfs uses Linux kernel and qemu code, and can access any type of
53 guest filesystem that Linux and qemu can, including but not limited
54 to: ext2/3/4, btrfs, FAT and NTFS, LVM, many different disk partition
55 schemes, qcow, qcow2, vmdk.
56
57 Libguestfs provides ways to enumerate guest storage (eg. partitions,
58 LVs, what filesystem is in each LV, etc.).  It can also run commands
59 in the context of the guest.  Also you can access filesystems over FTP.
60
61 =head1 ERRORS
62
63 All errors turn into calls to C<croak> (see L<Carp(3)>).
64
65 =head1 METHODS
66
67 =over 4
68
69 =cut
70
71 package Sys::Guestfs;
72
73 use strict;
74 use warnings;
75
76 require XSLoader;
77 XSLoader::load ('Sys::Guestfs');
78
79 =item $h = Sys::Guestfs->new ();
80
81 Create a new guestfs handle.
82
83 =cut
84
85 sub new {
86   my $proto = shift;
87   my $class = ref ($proto) || $proto;
88
89   my $self = Sys::Guestfs::_create ();
90   bless $self, $class;
91   return $self;
92 }
93
94 =item $h->add_cdrom (filename);
95
96 This function adds a virtual CD-ROM disk image to the guest.
97
98 This is equivalent to the qemu parameter C<-cdrom filename>.
99
100 =item $h->add_drive (filename);
101
102 This function adds a virtual machine disk image C<filename> to the
103 guest.  The first time you call this function, the disk appears as IDE
104 disk 0 (C</dev/sda>) in the guest, the second time as C</dev/sdb>, and
105 so on.
106
107 You don't necessarily need to be root when using libguestfs.  However
108 you obviously do need sufficient permissions to access the filename
109 for whatever operations you want to perform (ie. read access if you
110 just want to read the image or write access if you want to modify the
111 image).
112
113 This is equivalent to the qemu parameter C<-drive file=filename>.
114
115 =item $content = $h->cat (path);
116
117 Return the contents of the file named C<path>.
118
119 Note that this function cannot correctly handle binary files
120 (specifically, files containing C<\0> character which is treated
121 as end of string).  For those you need to use the C<$h-E<gt>read_file>
122 function which has a more complex interface.
123
124 Because of the message protocol, there is a transfer limit 
125 of somewhere between 2MB and 4MB.  To transfer large files you should use
126 FTP.
127
128 =item $h->config (qemuparam, qemuvalue);
129
130 This can be used to add arbitrary qemu command line parameters
131 of the form C<-param value>.  Actually it's not quite arbitrary - we
132 prevent you from setting some parameters which would interfere with
133 parameters that we use.
134
135 The first character of C<param> string must be a C<-> (dash).
136
137 C<value> can be NULL.
138
139 =item $autosync = $h->get_autosync ();
140
141 Get the autosync flag.
142
143 =item $path = $h->get_path ();
144
145 Return the current search path.
146
147 This is always non-NULL.  If it wasn't set already, then this will
148 return the default path.
149
150 =item $verbose = $h->get_verbose ();
151
152 This returns the verbose messages flag.
153
154 =item $h->kill_subprocess ();
155
156 This kills the qemu subprocess.  You should never need to call this.
157
158 =item $h->launch ();
159
160 Internally libguestfs is implemented by running a virtual machine
161 using L<qemu(1)>.
162
163 You should call this after configuring the handle
164 (eg. adding drives) but before performing any actions.
165
166 =item @devices = $h->list_devices ();
167
168 List all the block devices.
169
170 The full block device names are returned, eg. C</dev/sda>
171
172 =item @partitions = $h->list_partitions ();
173
174 List all the partitions detected on all block devices.
175
176 The full partition device names are returned, eg. C</dev/sda1>
177
178 This does not return logical volumes.  For that you will need to
179 call C<$h-E<gt>lvs>.
180
181 =item $listing = $h->ll (directory);
182
183 List the files in C<directory> (relative to the root directory,
184 there is no cwd) in the format of 'ls -la'.
185
186 This command is mostly useful for interactive sessions.  It
187 is I<not> intended that you try to parse the output string.
188
189 =item @listing = $h->ls (directory);
190
191 List the files in C<directory> (relative to the root directory,
192 there is no cwd).  The '.' and '..' entries are not returned, but
193 hidden files are shown.
194
195 This command is mostly useful for interactive sessions.  Programs
196 should probably use C<$h-E<gt>readdir> instead.
197
198 =item @logvols = $h->lvs ();
199
200 List all the logical volumes detected.  This is the equivalent
201 of the L<lvs(8)> command.
202
203 This returns a list of the logical volume device names
204 (eg. C</dev/VolGroup00/LogVol00>).
205
206 See also C<$h-E<gt>lvs_full>.
207
208 =item @logvols = $h->lvs_full ();
209
210 List all the logical volumes detected.  This is the equivalent
211 of the L<lvs(8)> command.  The "full" version includes all fields.
212
213 =item $h->mount (device, mountpoint);
214
215 Mount a guest disk at a position in the filesystem.  Block devices
216 are named C</dev/sda>, C</dev/sdb> and so on, as they were added to
217 the guest.  If those block devices contain partitions, they will have
218 the usual names (eg. C</dev/sda1>).  Also LVM C</dev/VG/LV>-style
219 names can be used.
220
221 The rules are the same as for L<mount(2)>:  A filesystem must
222 first be mounted on C</> before others can be mounted.  Other
223 filesystems can only be mounted on directories which already
224 exist.
225
226 The mounted filesystem is writable, if we have sufficient permissions
227 on the underlying device.
228
229 The filesystem options C<sync> and C<noatime> are set with this
230 call, in order to improve reliability.
231
232 =item @physvols = $h->pvs ();
233
234 List all the physical volumes detected.  This is the equivalent
235 of the L<pvs(8)> command.
236
237 This returns a list of just the device names that contain
238 PVs (eg. C</dev/sda2>).
239
240 See also C<$h-E<gt>pvs_full>.
241
242 =item @physvols = $h->pvs_full ();
243
244 List all the physical volumes detected.  This is the equivalent
245 of the L<pvs(8)> command.  The "full" version includes all fields.
246
247 =item @lines = $h->read_lines (path);
248
249 Return the contents of the file named C<path>.
250
251 The file contents are returned as a list of lines.  Trailing
252 C<LF> and C<CRLF> character sequences are I<not> returned.
253
254 Note that this function cannot correctly handle binary files
255 (specifically, files containing C<\0> character which is treated
256 as end of line).  For those you need to use the C<$h-E<gt>read_file>
257 function which has a more complex interface.
258
259 =item $h->set_autosync (autosync);
260
261 If C<autosync> is true, this enables autosync.  Libguestfs will make a
262 best effort attempt to run C<$h-E<gt>sync> when the handle is closed
263 (also if the program exits without closing handles).
264
265 =item $h->set_path (path);
266
267 Set the path that libguestfs searches for kernel and initrd.img.
268
269 The default is C<$libdir/guestfs> unless overridden by setting
270 C<LIBGUESTFS_PATH> environment variable.
271
272 The string C<path> is stashed in the libguestfs handle, so the caller
273 must make sure it remains valid for the lifetime of the handle.
274
275 Setting C<path> to C<NULL> restores the default path.
276
277 =item $h->set_verbose (verbose);
278
279 If C<verbose> is true, this turns on verbose messages (to C<stderr>).
280
281 Verbose messages are disabled unless the environment variable
282 C<LIBGUESTFS_DEBUG> is defined and set to C<1>.
283
284 =item $h->sync ();
285
286 This syncs the disk, so that any writes are flushed through to the
287 underlying disk image.
288
289 You should always call this if you have modified a disk image, before
290 closing the handle.
291
292 =item $h->touch (path);
293
294 Touch acts like the L<touch(1)> command.  It can be used to
295 update the timestamps on a file, or, if the file does not exist,
296 to create a new zero-length file.
297
298 =item @volgroups = $h->vgs ();
299
300 List all the volumes groups detected.  This is the equivalent
301 of the L<vgs(8)> command.
302
303 This returns a list of just the volume group names that were
304 detected (eg. C<VolGroup00>).
305
306 See also C<$h-E<gt>vgs_full>.
307
308 =item @volgroups = $h->vgs_full ();
309
310 List all the volumes groups detected.  This is the equivalent
311 of the L<vgs(8)> command.  The "full" version includes all fields.
312
313 =item $h->wait_ready ();
314
315 Internally libguestfs is implemented by running a virtual machine
316 using L<qemu(1)>.
317
318 You should call this after C<$h-E<gt>launch> to wait for the launch
319 to complete.
320
321 =cut
322
323 1;
324
325 =back
326
327 =head1 COPYRIGHT
328
329 Copyright (C) 2009 Red Hat Inc.
330
331 =head1 LICENSE
332
333 Please see the file COPYING.LIB for the full license.
334
335 =head1 SEE ALSO
336
337 L<guestfs(3)>, L<guestfish(1)>.
338
339 =cut