Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

guestfs-perl(3) [debian man page]

guestfs-perl(3) 					      Virtualization Support						   guestfs-perl(3)

NAME
guestfs-perl - How to use libguestfs from Perl SYNOPSIS
use Sys::Guestfs; my $h = Sys::Guestfs->new (); $h->add_drive_opts ('guest.img', format => 'raw'); $h->launch (); $h->mount_options ('', '/dev/sda1', '/'); $h->touch ('/hello'); $h->sync (); DESCRIPTION
This manual page documents how to call libguestfs from the Perl programming language. This page just documents the differences from the C API and gives some examples. If you are not familiar with using libguestfs, you also need to read guestfs(3). To read the full Perl API, see Sys::Guestfs(3). ERRORS Errors from libguestfs functions turn into calls to "croak" (see Carp(3)). EXAMPLE 1: CREATE A DISK IMAGE #!/usr/bin/perl -w # Example showing how to create a disk image. use strict; use Sys::Guestfs; my $output = "disk.img"; my $g = new Sys::Guestfs (); # Create a raw-format sparse disk image, 512 MB in size. open FILE, ">$output" or die "$output: $!"; truncate FILE, 512 * 1024 * 1024 or die "$output: truncate: $!"; close FILE or die "$output: $!"; # Set the trace flag so that we can see each libguestfs call. $g->set_trace (1); # Set the autosync flag so that the disk will be synchronized # automatically when the libguestfs handle is closed. $g->set_autosync (1); # Attach the disk image to libguestfs. $g->add_drive_opts ($output, format => "raw", readonly => 0); # Run the libguestfs back-end. $g->launch (); # Get the list of devices. Because we only added one drive # above, we expect that this list should contain a single # element. my @devices = $g->list_devices (); if (@devices != 1) { die "error: expected a single device from list-devices"; } # Partition the disk as one single MBR partition. $g->part_disk ($devices[0], "mbr"); # Get the list of partitions. We expect a single element, which # is the partition we have just created. my @partitions = $g->list_partitions (); if (@partitions != 1) { die "error: expected a single partition from list-partitions"; } # Create a filesystem on the partition. $g->mkfs ("ext4", $partitions[0]); # Now mount the filesystem so that we can add files. $g->mount_options ("", $partitions[0], "/"); # Create some files and directories. $g->touch ("/empty"); my $message = "Hello, world "; $g->write ("/hello", $message); $g->mkdir ("/foo"); # This one uploads the local file /etc/resolv.conf into # the disk image. $g->upload ("/etc/resolv.conf", "/foo/resolv.conf"); # Because 'autosync' was set (above) we can just exit here # and the disk contents will be synchronized. You can also do # this manually by calling $g->umount_all and $g->sync. exit 0 EXAMPLE 2: INSPECT A VIRTUAL MACHINE DISK IMAGE #!/usr/bin/perl -w # Example showing how to inspect a virtual machine disk. use strict; use Sys::Guestfs; if (@ARGV < 1) { die "usage: inspect_vm disk.img" } my $disk = $ARGV[0]; my $g = new Sys::Guestfs (); # Attach the disk image read-only to libguestfs. # You could also add an optional format => ... argument here. This is # advisable since automatic format detection is insecure. $g->add_drive_opts ($disk, readonly => 1); # Run the libguestfs back-end. $g->launch (); # Ask libguestfs to inspect for operating systems. my @roots = $g->inspect_os (); if (@roots == 0) { die "inspect_vm: no operating systems found"; } for my $root (@roots) { printf "Root device: %s ", $root; # Print basic information about the operating system. printf " Product name: %s ", $g->inspect_get_product_name ($root); printf " Version: %d.%d ", $g->inspect_get_major_version ($root), $g->inspect_get_minor_version ($root); printf " Type: %s ", $g->inspect_get_type ($root); printf " Distro: %s ", $g->inspect_get_distro ($root); # Mount up the disks, like guestfish -i. # # Sort keys by length, shortest first, so that we end up # mounting the filesystems in the correct order. my %mps = $g->inspect_get_mountpoints ($root); my @mps = sort { length $a <=> length $b } (keys %mps); for my $mp (@mps) { eval { $g->mount_ro ($mps{$mp}, $mp) }; if ($@) { print "$@ (ignored) " } } # If /etc/issue.net file exists, print up to 3 lines. my $filename = "/etc/issue.net"; if ($g->is_file ($filename)) { printf "--- %s --- ", $filename; my @lines = $g->head_n (3, $filename); print "$_ " foreach @lines; } # Unmount everything. $g->umount_all () } SEE ALSO
Sys::Guestfs(3), guestfs(3), guestfs-examples(3), guestfs-erlang(3), guestfs-java(3), guestfs-ocaml(3), guestfs-python(3), guestfs-recipes(1), guestfs-ruby(3), <http://libguestfs.org/>. AUTHORS
Richard W.M. Jones ("rjones at redhat dot com") COPYRIGHT
Copyright (C) 2011 Red Hat Inc. <http://libguestfs.org/> The examples in this manual page may be freely copied, modified and distributed without any restrictions. 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 libguestfs-1.18.1 2013-12-07 guestfs-perl(3)
Man Page