[Pkg-libvirt-commits] [libguestfs] 35/61: customize: Add various options from virt-builder.

Hilko Bengen bengen at moszumanska.debian.org
Sat Mar 29 14:36:27 UTC 2014


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to branch experimental
in repository libguestfs.

commit 1a4709147a4e6cbebd394ce1a157a14e4c55db6b
Author: Richard W.M. Jones <rjones at redhat.com>
Date:   Tue Mar 25 22:09:34 2014 +0000

    customize: Add various options from virt-builder.
    
    This adds the following options to virt-customize:
    
      --attach
      --attach-format
      -m / --memsize
      --network / --no-network
      --smp
    
    This fixes commit 2b208d84db080659badbb70044497aae040592e7.
---
 customize/main.ml            | 54 ++++++++++++++++++++++++----
 customize/virt-customize.pod | 83 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 131 insertions(+), 6 deletions(-)

diff --git a/customize/main.ml b/customize/main.ml
index 74ecb8e..17ed11e 100644
--- a/customize/main.ml
+++ b/customize/main.ml
@@ -19,6 +19,8 @@
 open Common_gettext.Gettext
 open Common_utils
 
+open Customize_cmdline
+
 open Printf
 
 module G = Guestfs
@@ -28,13 +30,25 @@ let () = Random.self_init ()
 let prog = Filename.basename Sys.executable_name
 
 let main () =
+  let attach = ref [] in
+  let attach_format = ref None in
+  let set_attach_format = function
+    | "auto" -> attach_format := None
+    | s -> attach_format := Some s
+  in
+  let attach_disk s = attach := (!attach_format, s) :: !attach in
   let debug_gc = ref false in
   let domain = ref None in
   let dryrun = ref false in
   let files = ref [] in
   let format = ref "auto" in
-  let quiet = ref false in
   let libvirturi = ref "" in
+  let memsize = ref None in
+  let set_memsize arg = memsize := Some arg in
+  let network = ref true in
+  let quiet = ref false in
+  let smp = ref None in
+  let set_smp arg = smp := Some arg in
   let trace = ref false in
   let verbose = ref false in
 
@@ -60,6 +74,9 @@ let main () =
   let argspec = [
     "-a",        Arg.String add_file,       s_"file" ^ " " ^ s_"Add disk image file";
     "--add",     Arg.String add_file,       s_"file" ^ " " ^ s_"Add disk image file";
+    "--attach",  Arg.String attach_disk,    "iso" ^ " " ^ s_"Attach data disk/ISO during install";
+    "--attach-format",  Arg.String set_attach_format,
+                                            "format" ^ " " ^ s_"Set attach disk format";
     "-c",        Arg.Set_string libvirturi, s_"uri" ^ " " ^ s_"Set libvirt URI";
     "--connect", Arg.Set_string libvirturi, s_"uri" ^ " " ^ s_"Set libvirt URI";
     "--debug-gc", Arg.Set debug_gc,         " " ^ s_"Debug GC and memory allocations (internal)";
@@ -70,8 +87,13 @@ let main () =
     "--dry-run", Arg.Set dryrun,            " " ^ s_"Perform a dry run";
     "--format",  Arg.Set_string format,     s_"format" ^ " " ^ s_"Set format (default: auto)";
     "--long-options", Arg.Unit display_long_options, " " ^ s_"List long options";
+    "-m",        Arg.Int set_memsize,       "mb" ^ " " ^ s_"Set memory size";
+    "--memsize", Arg.Int set_memsize,       "mb" ^ " " ^ s_"Set memory size";
+    "--network", Arg.Set network,           " " ^ s_"Enable appliance network (default)";
+    "--no-network", Arg.Clear network,      " " ^ s_"Disable appliance network";
     "-q",        Arg.Set quiet,             " " ^ s_"Don't print log messages";
     "--quiet",   Arg.Set quiet,             " " ^ s_"Don't print log messages";
+    "--smp",     Arg.Int set_smp,           "vcpus" ^ " " ^ s_"Set number of vCPUs";
     "-v",        Arg.Set verbose,           " " ^ s_"Enable debugging messages";
     "--verbose", Arg.Set verbose,           " " ^ s_"Enable debugging messages";
     "-V",        Arg.Unit display_version,  " " ^ s_"Display version and exit";
@@ -145,9 +167,13 @@ read the man page virt-customize(1).
   in
 
   (* Dereference the rest of the args. *)
+  let attach = List.rev !attach in
   let debug_gc = !debug_gc in
   let dryrun = !dryrun in
+  let memsize = !memsize in
+  let network = !network in
   let quiet = !quiet in
+  let smp = !smp in
   let trace = !trace in
   let verbose = !verbose in
 
@@ -158,11 +184,27 @@ read the man page virt-customize(1).
   msg (f_"Examining the guest ...");
 
   (* Connect to libguestfs. *)
-  let g = new G.guestfs () in
-  if trace then g#set_trace true;
-  if verbose then g#set_verbose true;
-  add g dryrun;
-  g#launch ();
+  let g =
+    let g = new G.guestfs () in
+    if trace then g#set_trace true;
+    if verbose then g#set_verbose true;
+
+    (match memsize with None -> () | Some memsize -> g#set_memsize memsize);
+    (match smp with None -> () | Some smp -> g#set_smp smp);
+    g#set_network network;
+    g#set_selinux ops.flags.selinux_relabel;
+
+    (* Add disks. *)
+    add g dryrun;
+
+    (* Attach ISOs, if we have any. *)
+    List.iter (
+      fun (format, file) ->
+        g#add_drive_opts ?format ~readonly:true file;
+    ) attach;
+
+    g#launch ();
+    g in
 
   (* Inspection. *)
   (match Array.to_list (g#inspect_os ()) with
diff --git a/customize/virt-customize.pod b/customize/virt-customize.pod
index 9c7f0fd..58c13c2 100644
--- a/customize/virt-customize.pod
+++ b/customize/virt-customize.pod
@@ -48,6 +48,27 @@ force a particular format use the I<--format> option.
 Add a remote disk.  The URI format is compatible with guestfish.
 See L<guestfish(1)/ADDING REMOTE STORAGE>.
 
+=item B<--attach> ISOFILE
+
+The given disk is attached to the libguestfs appliance.  This is used
+to provide extra software repositories or other data for
+customization.
+
+You probably want to ensure the volume(s) or filesystems in the
+attached disks are labelled (or use an ISO volume name) so that you
+can mount them by label in your run-scripts:
+
+ mkdir /tmp/mount
+ mount LABEL=EXTRA /tmp/mount
+
+You can have multiple I<--attach> options, and the format can be any
+disk format (not just an ISO).
+
+=item B<--attach-format> FORMAT
+
+Specify the disk format for the next I<--attach> option.  The
+C<FORMAT> is usually C<raw> or C<qcow2>.  Use C<raw> for ISOs.
+
 =item B<-c> URI
 
 =item B<--connect> URI
@@ -96,6 +117,64 @@ If you have untrusted raw-format guest disk images, you should use
 this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).
 
+=item B<-m> MB
+
+=item B<--memsize> MB
+
+Change the amount of memory allocated to I<--run> scripts.  Increase
+this if you find that I<--run> scripts or the I<--install> option are
+running out of memory.
+
+The default can be found with this command:
+
+ guestfish get-memsize
+
+=item B<--network>
+
+=item B<--no-network>
+
+Enable or disable network access from the guest during the installation.
+
+Enabled is the default.  Use I<--no-network> to disable access.
+
+The network only allows outgoing connections and has other minor
+limitations.  See L<virt-rescue(1)/NETWORK>.
+
+If you use I<--no-network> then certain other options such as
+I<--install> will not work.
+
+This does not affect whether the guest can access the network once it
+has been booted, because that is controlled by your hypervisor or
+cloud environment and has nothing to do with virt-customize.
+
+Generally speaking you should I<not> use I<--no-network>.  But here
+are some reasons why you might want to:
+
+=over 4
+
+=item 1.
+
+Because the libguestfs backend that you are using doesn't support the
+network.  (See: L<guestfs(3)/BACKEND>).
+
+=item 2.
+
+Any software you need to install comes from an attached ISO, so you
+don't need the network.
+
+=item 3.
+
+You don't want untrusted guest code trying to access your host network
+when running virt-customize.  This is particularly an issue when you
+don't trust the source of the operating system templates.  (See
+L</SECURITY> below).
+
+=item 4.
+
+You don't have a host network (eg. in secure/restricted environments).
+
+=back
+
 =item B<-q>
 
 =item B<--quiet>
@@ -104,6 +183,10 @@ Don't print log messages.
 
 To enable detailed logging of individual file operations, use I<-x>.
 
+=item B<--smp> N
+
+Enable N E<ge> 2 virtual CPUs for I<--run> scripts to use.
+
 =item B<-v>
 
 =item B<--verbose>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-libvirt/libguestfs.git



More information about the Pkg-libvirt-commits mailing list