diff options
author | Richard Jones <rjones@trick.home.annexia.org> | 2009-07-22 13:35:48 +0100 |
---|---|---|
committer | Richard Jones <rjones@trick.home.annexia.org> | 2009-07-22 13:35:48 +0100 |
commit | 34d2df41626f1ee4172a6d40b06d72d6ed9d6348 (patch) | |
tree | cbf8af63f6f90a4b22b5fb82d8d6a2fe819407a7 | |
parent | afe8096e9aa2a18541e92262d9473de4a65fa29e (diff) | |
download | libguestfs-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.pod | 4 | ||||
-rw-r--r-- | guestfs.pod | 4 | ||||
-rwxr-xr-x | src/generator.ml | 25 | ||||
-rw-r--r-- | src/guestfs.c | 25 |
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"); |