java: Add guestfs-java(3) man page.

This commit is contained in:
Richard W.M. Jones
2011-07-19 17:54:35 +01:00
parent a548c96683
commit d025e91f67
15 changed files with 332 additions and 2 deletions

View File

@@ -0,0 +1,87 @@
// Example showing how to create a disk image.
import java.io.*;
import java.util.Map;
import java.util.HashMap;
import com.redhat.et.libguestfs.*;
public class CreateDisk
{
static String output = "disk.img";
public static void main (String[] argv)
{
try {
GuestFS g = new GuestFS ();
// Create a raw-format sparse disk image, 512 MB in size.
RandomAccessFile f = new RandomAccessFile (output, "rw");
f.setLength (512 * 1024 * 1024);
f.close ();
// Set the trace flag so that we can see each libguestfs call.
g.set_trace (true);
// Set the autosync flag so that the disk will be synchronized
// automatically when the libguestfs handle is closed.
g.set_autosync (true);
// Attach the disk image to libguestfs.
Map<String, Object> optargs = new HashMap<String, Object>() {
{
put ("format", "raw");
put ("readonly", Boolean.FALSE);
}
};
g.add_drive_opts (output, optargs);
// 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.
String[] devices = g.list_devices ();
if (devices.length != 1)
throw new 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.
String[] partitions = g.list_partitions ();
if (partitions.length != 1)
throw new 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");
String message = "Hello, world\n";
g.write ("/hello", message.getBytes());
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 close the handle
// and the disk contents will be synchronized. You can also do
// this manually by calling g#umount_all and g#sync.
//
// Note also that handles are automatically closed if they are
// reaped by the garbage collector. You only need to call close
// if you want to close the handle right away.
g.close ();
}
catch (Exception exn) {
System.err.println (exn);
System.exit (1);
}
}
}

View File

@@ -0,0 +1,99 @@
// Example showing how to inspect a virtual machine disk.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.redhat.et.libguestfs.*;
public class InspectVM
{
static final Comparator<String> COMPARE_KEYS_LEN =
new Comparator<String>() {
public int compare (String k1, String k2) {
return k1.length() - k2.length();
}
};
public static void main (String[] argv)
{
try {
if (argv.length != 1)
throw new Error ("usage: InspectVM disk.img");
String disk = argv[0];
GuestFS g = new GuestFS ();
// Attach the disk image read-only to libguestfs.
Map<String, Object> optargs = new HashMap<String, Object>() {
{
//put ("format", "raw");
put ("readonly", Boolean.TRUE);
}
};
g.add_drive_opts (disk, optargs);
// Run the libguestfs back-end.
g.launch ();
// Ask libguestfs to inspect for operating systems.
String roots[] = g.inspect_os ();
if (roots.length == 0)
throw new Error ("inspect_vm: no operating systems found");
for (String root : roots) {
System.out.println ("Root device: " + root);
// Print basic information about the operating system.
System.out.println (" Product name: " +
g.inspect_get_product_name (root));
System.out.println (" Version: " +
g.inspect_get_major_version (root) +
"." +
g.inspect_get_minor_version (root));
System.out.println (" Type: " +
g.inspect_get_type (root));
System.out.println (" Distro: " +
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.
Map<String,String> mps = g.inspect_get_mountpoints (root);
List<String> mps_keys = new ArrayList (mps.keySet ());
Collections.sort (mps_keys, COMPARE_KEYS_LEN);
for (String mp : mps_keys) {
String dev = mps.get (mp);
try {
g.mount_ro (dev, mp);
}
catch (Exception exn) {
System.err.println (exn + " (ignored)");
}
}
// If /etc/issue.net file exists, print up to 3 lines.
String filename = "/etc/issue.net";
if (g.is_file (filename)) {
System.out.println ("--- " + filename + " ---");
String[] lines = g.head_n (3, filename);
for (String line : lines)
System.out.println (line);
}
// Unmount everything.
g.umount_all ();
}
}
catch (Exception exn) {
System.err.println (exn);
System.exit (1);
}
}
}

2
java/examples/LICENSE Normal file
View File

@@ -0,0 +1,2 @@
All the examples in the 'java/examples' subdirectory may be freely
copied, modified and distributed without any restrictions.

50
java/examples/Makefile.am Normal file
View File

@@ -0,0 +1,50 @@
# libguestfs Java examples
# Copyright (C) 2011 Red Hat Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
EXTRA_DIST = \
LICENSE \
CreateDisk.java \
InspectVM.java \
guestfs-java.pod
CLEANFILES = \
*.class \
stamp-guestfs-java.pod
man_MANS = guestfs-java.3
noinst_DATA = $(top_builddir)/html/guestfs-java.3.html
guestfs-java.3 $(top_builddir)/html/guestfs-java.3.html: stamp-guestfs-java.pod
stamp-guestfs-java.pod: guestfs-java.pod CreateDisk.java InspectVM.java
$(top_srcdir)/podwrapper.sh \
--section 3 \
--man guestfs-java.3 \
--html $(top_builddir)/html/guestfs-java.3.html \
--verbatim CreateDisk.java:@EXAMPLE1@ \
--verbatim InspectVM.java:@EXAMPLE2@ \
$<
touch $@
if HAVE_JAVA
noinst_SCRIPTS = CreateDisk.class InspectVM.class
%.class: %.java
$(JAVAC) $(JAVAC_FLAGS) -classpath ../libguestfs-$(VERSION).jar $<
endif

View File

@@ -0,0 +1,80 @@
=encoding utf8
=head1 NAME
guestfs-java - How to use libguestfs from Java
=head1 SYNOPSIS
import com.redhat.et.libguestfs.*;
GuestFS g = new GuestFS ();
g.add_drive_opts ("disk.img", null);
g.launch ();
=head1 DESCRIPTION
This manual page documents how to call libguestfs from the Java
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 L<guestfs(3)>.
=head2 CLOSING THE HANDLE
The handle is closed when it is reaped by the garbage collector.
Because libguestfs handles include a lot of state, it is also
possible to close (and hence free) them explicitly by calling
the C<close> method.
=head2 EXCEPTIONS
Errors from libguestfs functions are mapped into the
C<LibGuestFSException> exception. This has a single parameter which
is the error message (a C<String>).
Calling any method on a closed handle raises the same exception.
=head1 EXAMPLE 1: CREATE A DISK IMAGE
@EXAMPLE1@
=head1 EXAMPLE 2: INSPECT A VIRTUAL MACHINE DISK IMAGE
@EXAMPLE2@
=head1 SEE ALSO
L<guestfs(3)>,
L<guestfs-examples(3)>,
L<guestfs-ocaml(3)>,
L<guestfs-perl(3)>,
L<guestfs-python(3)>,
L<guestfs-recipes(1)>,
L<guestfs-ruby(3)>,
L<http://libguestfs.org/>,
L<http://caml.inria.fr/>.
=head1 AUTHORS
Richard W.M. Jones (C<rjones at redhat dot com>)
=head1 COPYRIGHT
Copyright (C) 2011 Red Hat Inc. L<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