From 8bcc3e22f15e730841bddd4c8aaabbe910c473d3 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones"
Date: Thu, 1 Jan 1970 00:00:00 +0000
Subject: [PATCH] Improve copy function - Allow ssh compression to be
disabled. - Optional label for the Back button. - Check return value from
write syscall. - Print speed of copy in Mbps. - Documentation update.
---
virt-p2v | 48 ++++++++++++++++++++++++++++++++++++++----------
virt-p2v.1 | 17 ++++++++++++++++-
virt-p2v.1.html | 22 ++++++++++++++++++++++
virt-p2v.1.txt | 14 ++++++++++++++
virt-p2v.pod | 16 ++++++++++++++++
5 files changed, 106 insertions(+), 11 deletions(-)
diff --git a/virt-p2v b/virt-p2v
index d54da3a..ad9e159 100755
--- a/virt-p2v
+++ b/virt-p2v
@@ -46,6 +46,7 @@ type state = { greeting : bool;
architecture : architecture option;
memory : int option; vcpus : int option;
mac_address : string option;
+ compression : bool option;
}
and network = Auto
| Shell
@@ -93,6 +94,7 @@ let defaults = {
memory = None;
vcpus = None;
mac_address = None;
+ compression = None;
}
(* END OF CUSTOM virt-p2v SCRIPT SECTION. *)
(*----------------------------------------------------------------------*)
@@ -199,11 +201,15 @@ let msgbox, yesno, inputbox, radiolist, checklist, form =
in
(* Handle the common parameters. Note Continuation Passing Style. *)
- let with_common cont ?(cancel=false) ?(backbutton=true) title =
+ let with_common cont
+ ?(cancel=false)
+ ?(backbutton=true) ?(backbutton_label="Back")
+ title =
let params = ["--title"; title] in
let params = if not cancel then "--nocancel" :: params else params in
let params =
- if backbutton then "--extra-button" :: "--extra-label" :: "Back" :: params
+ if backbutton then
+ "--extra-button" :: "--extra-label" :: backbutton_label :: params
else params in
cont params
in
@@ -1023,6 +1029,19 @@ let rec main ttyname =
| Back -> Prev
in
+ let ask_compression state =
+ match
+ radiolist "Network compression" "Enable network compression" 10 50 2 [
+ "yes", "Yes, compress network traffic", state.compression <> Some false;
+ "no", "No, don't compress", state.compression = Some false
+ ]
+ with
+ | Yes ("no"::_) -> Next { state with compression = Some false }
+ | Yes _ -> Next { state with compression = Some true }
+ | No | Help | Error -> Ask_again
+ | Back -> Prev
+ in
+
let ask_verify state =
match
yesno "Verify and proceed"
@@ -1037,7 +1056,8 @@ Hypervisor: %s
Architecture: %s
Memory: %s
VCPUs: %s
-MAC address: %s"
+MAC address: %s
+Compression: %b"
(Option.default "" state.remote_host)
(Option.default "" state.remote_port)
(Option.default "" state.remote_directory)
@@ -1061,6 +1081,7 @@ MAC address: %s"
| Some vcpus -> string_of_int vcpus | None -> "")
(match state.mac_address with
| Some "" -> "Random" | Some mac -> mac | None -> "")
+ (Option.default true state.compression)
)
21 50
with
@@ -1097,6 +1118,7 @@ MAC address: %s"
ask_memory, defaults.memory <> None, dont_skip;
ask_vcpus, defaults.vcpus <> None, dont_skip;
ask_mac_address, defaults.mac_address <> None, dont_skip;
+ ask_compression, defaults.compression <> None, dont_skip;
ask_verify, not defaults.greeting, dont_skip;
|] in
@@ -1250,7 +1272,8 @@ MAC address: %s"
(* Functions to connect and disconnect from the remote system. *)
let do_connect remote_name _ =
- let cmd = sprintf "ssh -C -l %s -p %s %s \"cat > %s/%s\""
+ let cmd = sprintf "ssh%s -l %s -p %s %s \"cat > %s/%s\""
+ (if state.compression = Some false then "" else " -C")
(quote remote_username) (quote remote_port) (quote remote_host)
(quote remote_directory) (quote remote_name) in
eprintf "connect: %s\n%!" cmd;
@@ -1459,7 +1482,8 @@ MAC address: %s"
let rec copy bytes_sent last_printed_at =
let n = read fd buffer 0 bufsize in
if n > 0 then (
- ignore (write sock buffer 0 n);
+ let n' = write sock buffer 0 n in
+ if n <> n' then assert false; (* never, according to the manual *)
let bytes_sent = Int64.add bytes_sent (Int64.of_int n) in
let last_printed_at =
@@ -1468,19 +1492,20 @@ MAC address: %s"
if now -. last_printed_at > 5. then (
let elapsed = Int64.to_float bytes_sent /. Int64.to_float size in
let secs_elapsed = now -. start in
- printf "%.0f%%" (100. *. elapsed);
+ printf "%.0f%% @ %.1f Mbps"
+ (100. *. elapsed)
+ (Int64.to_float bytes_sent/.secs_elapsed/.1_000_000. *. 8.);
(* After 60 seconds has elapsed, start printing estimates. *)
if secs_elapsed >= 60. then (
let remaining = 1. -. elapsed in
let secs_remaining = (remaining /. elapsed) *. secs_elapsed in
if secs_remaining > 120. then
- printf " (about %.0f minutes remaining) "
- (secs_remaining /. 60.)
+ printf " (about %.0f minutes remaining)" (secs_remaining/.60.)
else
- printf " (about %.0f seconds remaining) "
+ printf " (about %.0f seconds remaining)"
secs_remaining
);
- printf "\r%!";
+ printf " \r%!";
now
)
else last_printed_at in
@@ -1489,11 +1514,14 @@ MAC address: %s"
)
in
copy 0L start;
+ printf "\n\n%!"; (* because of the messages printed above *)
(* Disconnect. *)
do_disconnect conn
) devices_to_send;
+ (*printf "\n\nPress any key ...\n%!"; ignore (read_line ());*)
+
(* Clean up and reboot. *)
ignore (
msgbox "virt-p2v completed"
diff --git a/virt-p2v.1 b/virt-p2v.1
index b03b428..9020837 100644
--- a/virt-p2v.1
+++ b/virt-p2v.1
@@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "VIRT-P2V 1"
-.TH VIRT-P2V 1 "2008-02-05" "virt-p2v-0.9.3" "Virtualization Support"
+.TH VIRT-P2V 1 "2008-02-07" "virt-p2v-0.9.3" "Virtualization Support"
.SH "NAME"
virt\-p2v \- P2V (physical to virtual machine) migration tool
.SH "SUMMARY"
@@ -298,6 +298,16 @@ within the \f(CW\*(C`00:16:3e:..\*(C'\fR space reserved for Xen guests. These \
addresses are not tested for uniqueness so there is a very small
chance that they could coincide, which would leave a guest unable to
access the virtual network.
+.IP "Compression" 4
+.IX Item "Compression"
+Choose whether to enable or disable compression on disk images as they
+are copied across the network.
+.Sp
+If enabled, the \f(CW\*(C`\-C\*(C'\fR option is passed to \fIssh\fR\|(1). On fast networks
+this can sometimes be slower.
+.Sp
+\&\s-1NB:\s0 The disk image is still stored uncompressed on the remote host
+however this option is set.
.IP "Verify and proceed" 4
.IX Item "Verify and proceed"
In this step you are asked to verify the settings above. If any are
@@ -541,6 +551,11 @@ will choose a random \s-1MAC\s0 address within the \f(CW\*(C`00:16:3e:..\*(C'\fR
reserved for Xen guests. These \s-1MAC\s0 addresses are not tested for
uniqueness so there is a very small chance that they could coincide,
which would leave a guest unable to access the virtual network.
+.ie n .IP """compression""" 4
+.el .IP "\f(CWcompression\fR" 4
+.IX Item "compression"
+Set this to \f(CW\*(C`Some false\*(C'\fR to disable compression, or \f(CW\*(C`Some true\*(C'\fR to
+enable compression, or \f(CW\*(C`None\*(C'\fR to ask the user.
.Sh "\s-1ISO\s0 \s-1ATTACHMENTS\s0"
.IX Subsection "ISO ATTACHMENTS"
Rebuilding a custom \s-1ISO\s0 is time\-consuming. You can make a \*(L"quick\*(R"
diff --git a/virt-p2v.1.html b/virt-p2v.1.html
index 89e6f69..a4fa6e5 100644
--- a/virt-p2v.1.html
+++ b/virt-p2v.1.html
@@ -278,6 +278,21 @@ chance that they could coincide, which would leave a guest unable to
access the virtual network.
+Compression
+
+
+Choose whether to enable or disable compression on disk images as they
+are copied across the network.
+
+
+If enabled, the -C
option is passed to ssh(1). On fast networks
+this can sometimes be slower.
+
+
+NB: The disk image is still stored uncompressed on the remote host
+however this option is set.
+
+
Verify and proceed
@@ -565,6 +580,13 @@ uniqueness so there is a very small chance that they could coincide,
which would leave a guest unable to access the virtual network.
+compression
+
+
+Set this to Some false
to disable compression, or Some true
to
+enable compression, or None
to ask the user.
+
+
diff --git a/virt-p2v.1.txt b/virt-p2v.1.txt
index 795e739..81ded16 100644
--- a/virt-p2v.1.txt
+++ b/virt-p2v.1.txt
@@ -165,6 +165,16 @@ STANDARD USAGE
chance that they could coincide, which would leave a guest unable to
access the virtual network.
+ Compression
+ Choose whether to enable or disable compression on disk images as
+ they are copied across the network.
+
+ If enabled, the "-C" option is passed to ssh(1). On fast networks
+ this can sometimes be slower.
+
+ NB: The disk image is still stored uncompressed on the remote host
+ however this option is set.
+
Verify and proceed
In this step you are asked to verify the settings above. If any are
incorrect, use the *Back* button to navigate back to the setting. If
@@ -368,6 +378,10 @@ BUILDING A CUSTOM LIVE CD
uniqueness so there is a very small chance that they could coincide,
which would leave a guest unable to access the virtual network.
+ "compression"
+ Set this to "Some false" to disable compression, or "Some true" to
+ enable compression, or "None" to ask the user.
+
ISO ATTACHMENTS
Rebuilding a custom ISO is time-consuming. You can make a "quick"
developer ISO by updating an existing ISO image with a new custom
diff --git a/virt-p2v.pod b/virt-p2v.pod
index 3018389..6978b2f 100644
--- a/virt-p2v.pod
+++ b/virt-p2v.pod
@@ -187,6 +187,17 @@ addresses are not tested for uniqueness so there is a very small
chance that they could coincide, which would leave a guest unable to
access the virtual network.
+=item Compression
+
+Choose whether to enable or disable compression on disk images as they
+are copied across the network.
+
+If enabled, the C<-C> option is passed to L. On fast networks
+this can sometimes be slower.
+
+NB: The disk image is still stored uncompressed on the remote host
+however this option is set.
+
=item Verify and proceed
In this step you are asked to verify the settings above. If any are
@@ -436,6 +447,11 @@ reserved for Xen guests. These MAC addresses are not tested for
uniqueness so there is a very small chance that they could coincide,
which would leave a guest unable to access the virtual network.
+=item C
+
+Set this to C to disable compression, or C to
+enable compression, or C to ask the user.
+
=back
=head2 ISO ATTACHMENTS
--
1.8.3.1