summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Jones <rjones@trick.home.annexia.org>2009-07-22 13:35:48 +0100
committerRichard Jones <rjones@trick.home.annexia.org>2009-07-22 13:35:48 +0100
commit34d2df41626f1ee4172a6d40b06d72d6ed9d6348 (patch)
treecbf8af63f6f90a4b22b5fb82d8d6a2fe819407a7
parentafe8096e9aa2a18541e92262d9473de4a65fa29e (diff)
downloadlibguestfs-34d2df41626f1ee4172a6d40b06d72d6ed9d6348.tar.gz
libguestfs-34d2df41626f1ee4172a6d40b06d72d6ed9d6348.tar.xz
libguestfs-34d2df41626f1ee4172a6d40b06d72d6ed9d6348.zip
Add 'set-kernel'/'get-kernel'/LIBGUESTFS_KERNEL to override appliance kernel.
This allows you to override the appliance kernel with an easy command or environment variable.
-rw-r--r--guestfish.pod4
-rw-r--r--guestfs.pod4
-rwxr-xr-xsrc/generator.ml25
-rw-r--r--src/guestfs.c25
4 files changed, 57 insertions, 1 deletions
diff --git a/guestfish.pod b/guestfish.pod
index f2255f16..6f35ac46 100644
--- a/guestfish.pod
+++ b/guestfish.pod
@@ -553,6 +553,10 @@ Pass additional options to the guest kernel.
Set C<LIBGUESTFS_DEBUG=1> to enable verbose messages. This has the
same effect as using the B<-v> option.
+=item LIBGUESTFS_KERNEL
+
+Override the ordinary selection of appliance kernel.
+
=item LIBGUESTFS_MEMSIZE
Set the memory allocated to the qemu process, in megabytes. For
diff --git a/guestfs.pod b/guestfs.pod
index 4235454e..9e0d4d31 100644
--- a/guestfs.pod
+++ b/guestfs.pod
@@ -917,6 +917,10 @@ Pass additional options to the guest kernel.
Set C<LIBGUESTFS_DEBUG=1> to enable verbose messages. This
has the same effect as calling C<guestfs_set_verbose (handle, 1)>.
+=item LIBGUESTFS_KERNEL
+
+Override the ordinary selection of appliance kernel.
+
=item LIBGUESTFS_MEMSIZE
Set the memory allocated to the qemu process, in megabytes. For
diff --git a/src/generator.ml b/src/generator.ml
index 8751bb5a..398fd04b 100755
--- a/src/generator.ml
+++ b/src/generator.ml
@@ -530,6 +530,31 @@ guest kernel command line.
If C<NULL> then no options are added.");
+ ("set_kernel", (RErr, [String "kernel"]), -1, [FishAlias "kernel"],
+ [],
+ "override the normal appliance kernel",
+ "\
+This function lets you override the ordinary selection
+of kernel used in the appliance.
+
+The default is C<NULL> unless overridden by setting
+C<LIBGUESTFS_KERNEL> environment variable.
+
+Setting C<kernel> to C<NULL> means the ordinary appliance
+kernel is selected by the usual means.");
+
+ ("get_kernel", (RConstString "kernel", []), -1, [],
+ (* This cannot be tested with the current framework. The
+ * function can return NULL in normal operations, which the
+ * test framework interprets as an error.
+ *)
+ [],
+ "get the override appliance kernel",
+ "\
+Return the override appliance kernel (see C<guestfs_set_kernel>).
+
+If C<NULL> then the ordinary appliance kernel is used.");
+
("set_autosync", (RErr, [Bool "autosync"]), -1, [FishAlias "autosync"],
[],
"set autosync mode",
diff --git a/src/guestfs.c b/src/guestfs.c
index db6db910..5750a4f4 100644
--- a/src/guestfs.c
+++ b/src/guestfs.c
@@ -174,6 +174,7 @@ struct guestfs_h
char *path; /* Path to kernel, initrd. */
char *qemu; /* Qemu binary. */
char *append; /* Append to kernel command line. */
+ char *kernel; /* Override appliance kernel. */
int memsize; /* Size of RAM (megabytes). */
@@ -249,6 +250,12 @@ guestfs_create (void)
if (!g->append) goto error;
}
+ str = getenv ("LIBGUESTFS_KERNEL");
+ if (str) {
+ g->kernel = strdup (str);
+ if (!g->kernel) goto error;
+ }
+
/* Choose a suitable memory size. Previously we tried to choose
* a minimal memory size, but this isn't really necessary since
* recent QEMU and KVM don't do anything nasty like locking
@@ -674,6 +681,22 @@ guestfs_get_append (guestfs_h *g)
}
int
+guestfs_set_kernel (guestfs_h *g, const char *kernel)
+{
+ free (g->kernel);
+ g->kernel = NULL;
+
+ g->kernel = kernel ? safe_strdup (g, kernel) : NULL;
+ return 0;
+}
+
+const char *
+guestfs_get_kernel (guestfs_h *g)
+{
+ return g->kernel;
+}
+
+int
guestfs_set_memsize (guestfs_h *g, int memsize)
{
g->memsize = memsize;
@@ -1058,7 +1081,7 @@ guestfs_launch (guestfs_h *g)
add_cmdline (g, memsize_str);
add_cmdline (g, "-no-reboot"); /* Force exit instead of reboot on panic */
add_cmdline (g, "-kernel");
- add_cmdline (g, (char *) kernel);
+ add_cmdline (g, g->kernel ? : (char *) kernel);
add_cmdline (g, "-initrd");
add_cmdline (g, (char *) initrd);
add_cmdline (g, "-append");