[Libguestfs] [PATCH 2/2] customize: Improve the error messages when package manager is unknown or unsupported.

Richard W.M. Jones rjones at redhat.com
Wed May 4 13:12:30 UTC 2016


For Windows, we now print:

$ virt-customize -a ./test-data/phony-guests/windows.img --install MSSQL
[   0.0] Examining the guest ...
[  14.2] Setting a random seed
virt-customize: warning: random seed could not be set for this type of
guest
[  14.2] Installing packages: MSSQL
virt-customize: error: '--install' failed because inspection could not
determine the package manager for this guest OS.

If this guest OS is a common one with ordinary package management then this
may have been caused by a failure of libguestfs inspection.

For OSes such as Windows that lack package management, this is not
possible.  Try using one of the '--firstboot*' flags instead (described in
the manual).
---
 customize/customize_run.ml | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/customize/customize_run.ml b/customize/customize_run.ml
index 83e70a6..c0e1e44 100644
--- a/customize/customize_run.ml
+++ b/customize/customize_run.ml
@@ -94,7 +94,7 @@ exec >>%s 2>&1
   in
 
   (* http://distrowatch.com/dwres.php?resource=package-management *)
-  let guest_install_command packages =
+  let rec guest_install_command packages =
     let quoted_args = String.concat " " (List.map quote packages) in
     match g#inspect_get_package_management root with
     | "apk" ->
@@ -116,10 +116,11 @@ exec >>%s 2>&1
     | "urpmi" ->  sprintf "urpmi %s" quoted_args
     | "yum" ->    sprintf "yum -y install %s" quoted_args
     | "zypper" -> sprintf "zypper -n in -l %s" quoted_args
+
     | "unknown" ->
-      error (f_"--install is not supported for this guest operating system")
+      error_unknown_package_manager (s_"--install")
     | pm ->
-      error (f_"sorry, don't know how to use --install with the '%s' package manager") pm
+      error_unimplemented_package_manager (s_"--install") pm
 
   and guest_update_command () =
     match g#inspect_get_package_management root with
@@ -142,10 +143,18 @@ exec >>%s 2>&1
     | "urpmi" ->  "urpmi --auto-select"
     | "yum" ->    "yum -y update"
     | "zypper" -> "zypper -n update -l"
+
     | "unknown" ->
-      error (f_"--update is not supported for this guest operating system")
+      error_unknown_package_manager (s_"--update")
     | pm ->
-      error (f_"sorry, don't know how to use --update with the '%s' package manager") pm
+      error_unimplemented_package_manager (s_"--update") pm
+
+  (* Windows has package_management == "unknown". *)
+  and error_unknown_package_manager flag =
+    error (f_"'%s' failed because inspection could not determine the package manager for this guest OS.\n\nIf this guest OS is a common one with ordinary package management then this may have been caused by a failure of libguestfs inspection.\n\nFor OSes such as Windows that lack package management, this is not possible.  Try using one of the '--firstboot*' flags instead (described in the manual).") flag
+
+  and error_unimplemented_package_manager flag pm =
+      error (f_"sorry, '%s' with the '%s' package manager has not been implemented.\n\nIf this guest OS has ordinary package management then you will need to add support to virt-customize.\n\nFor OSes lack package management, this is not possible.\n\nYou can work around this by using one of the '--run*' or '--firstboot*' options instead (described in the manual).") flag pm
   in
 
   (* Set the random seed. *)
-- 
2.7.4




More information about the Libguestfs mailing list