mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-22 07:03:38 +00:00
java: Add guestfs-java(3) man page.
This commit is contained in:
87
java/examples/CreateDisk.java
Normal file
87
java/examples/CreateDisk.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
99
java/examples/InspectVM.java
Normal file
99
java/examples/InspectVM.java
Normal 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
2
java/examples/LICENSE
Normal 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
50
java/examples/Makefile.am
Normal 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
|
||||
80
java/examples/guestfs-java.pod
Normal file
80
java/examples/guestfs-java.pod
Normal 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
|
||||
Reference in New Issue
Block a user