diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2011-07-19 17:54:35 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2011-07-19 17:54:35 +0100 |
commit | d025e91f6751505c70b7b5f492ee72c67e274ecf (patch) | |
tree | 645e116fc220d4350ef4f3fa43ffa0e43c3ec58b /java | |
parent | a548c9668315844763456c15e89e35e9702b851a (diff) | |
download | libguestfs-d025e91f6751505c70b7b5f492ee72c67e274ecf.tar.gz libguestfs-d025e91f6751505c70b7b5f492ee72c67e274ecf.tar.xz libguestfs-d025e91f6751505c70b7b5f492ee72c67e274ecf.zip |
java: Add guestfs-java(3) man page.
Diffstat (limited to 'java')
-rw-r--r-- | java/examples/CreateDisk.java | 87 | ||||
-rw-r--r-- | java/examples/InspectVM.java | 99 | ||||
-rw-r--r-- | java/examples/LICENSE | 2 | ||||
-rw-r--r-- | java/examples/Makefile.am | 50 | ||||
-rw-r--r-- | java/examples/guestfs-java.pod | 80 |
5 files changed, 318 insertions, 0 deletions
diff --git a/java/examples/CreateDisk.java b/java/examples/CreateDisk.java new file mode 100644 index 00000000..4742b5a1 --- /dev/null +++ b/java/examples/CreateDisk.java @@ -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); + } + } +} diff --git a/java/examples/InspectVM.java b/java/examples/InspectVM.java new file mode 100644 index 00000000..d92aa70f --- /dev/null +++ b/java/examples/InspectVM.java @@ -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); + } + } +} diff --git a/java/examples/LICENSE b/java/examples/LICENSE new file mode 100644 index 00000000..f8106cdc --- /dev/null +++ b/java/examples/LICENSE @@ -0,0 +1,2 @@ +All the examples in the 'java/examples' subdirectory may be freely +copied, modified and distributed without any restrictions. diff --git a/java/examples/Makefile.am b/java/examples/Makefile.am new file mode 100644 index 00000000..503b55d8 --- /dev/null +++ b/java/examples/Makefile.am @@ -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 diff --git a/java/examples/guestfs-java.pod b/java/examples/guestfs-java.pod new file mode 100644 index 00000000..abf62db6 --- /dev/null +++ b/java/examples/guestfs-java.pod @@ -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 |