Hi Rich,
I did with your suggestions, please help reviewing.
I got a compiling error,
-
File "sysprep_operation.mli", line 23, characters 17-19:
Error: Unbound type parameter 'a
make: *** [sysprep_operation.cmi] Error 2
make: Leaving directory `/work/git/libguestfs/sysprep'
-
Thanks,
Wanlong Gao
Signed-off-by: Wanlong Gao <gaowanlong(a)cn.fujitsu.com>
---
sysprep/main.ml | 12 +++++++++---
sysprep/sysprep_operation.ml | 5 +++--
sysprep/sysprep_operation.mli | 6 ++++--
sysprep/sysprep_operation_cron_spool.ml | 10 ++++++++--
sysprep/sysprep_operation_dhcp_client_state.ml | 9 +++++++--
sysprep/sysprep_operation_dhcp_server_state.ml | 8 ++++++--
sysprep/sysprep_operation_hostname.ml | 4 +++-
sysprep/sysprep_operation_logfiles.ml | 11 +++++++++--
sysprep/sysprep_operation_mail_spool.ml | 9 +++++++--
sysprep/sysprep_operation_net_hwaddr.ml | 3 ++-
sysprep/sysprep_operation_random_seed.ml | 3 ++-
sysprep/sysprep_operation_rhn_systemid.ml | 8 ++++++--
sysprep/sysprep_operation_script.ml | 2 +-
sysprep/sysprep_operation_smolt_uuid.ml | 8 ++++++--
sysprep/sysprep_operation_ssh_hostkeys.ml | 8 ++++++--
sysprep/sysprep_operation_udev_persistent_net.ml | 7 +++++--
sysprep/sysprep_operation_utmp.ml | 7 +++++--
sysprep/sysprep_operation_yum_uuid.ml | 8 ++++++--
18 files changed, 95 insertions(+), 33 deletions(-)
diff --git a/sysprep/main.ml b/sysprep/main.ml
index d06b0d2..fbe5e13 100644
--- a/sysprep/main.ml
+++ b/sysprep/main.ml
@@ -29,7 +29,7 @@ let () = Sysprep_operation.bake ()
(* Command line argument parsing. *)
let prog = Filename.basename Sys.executable_name
-let debug_gc, operations, g, selinux_relabel =
+let debug_gc, operations, g, selinux_relabel, show_log =
let debug_gc = ref false in
let domain = ref None in
let dryrun = ref false in
@@ -40,6 +40,7 @@ let debug_gc, operations, g, selinux_relabel =
let selinux_relabel = ref `Auto in
let trace = ref false in
let verbose = ref false in
+ let show_log = ref false in
let display_version () =
let g = new G.guestfs () in
@@ -112,6 +113,7 @@ let debug_gc, operations, g, selinux_relabel =
"-V", Arg.Unit display_version, " Display version and
exit";
"--version", Arg.Unit display_version, " -\"-";
"-x", Arg.Set trace, " Enable tracing of libguestfs
calls";
+ "--log", Arg.Set show_log, " Enable operation
logging";
] @ Sysprep_operation.extra_args () in
let anon_fun _ = raise (Arg.Bad "extra parameter on the command line") in
let usage_msg =
@@ -162,6 +164,7 @@ read the man page virt-sysprep(1).
let selinux_relabel = !selinux_relabel in
let trace = !trace in
let verbose = !verbose in
+ let show_log = !show_log in
(* Connect to libguestfs. *)
let g = new G.guestfs () in
@@ -170,7 +173,7 @@ read the man page virt-sysprep(1).
add g dryrun;
g#launch ();
- debug_gc, operations, g, selinux_relabel
+ debug_gc, operations, g, selinux_relabel, show_log
let () =
(* Inspection. *)
@@ -194,7 +197,10 @@ let () =
) mps;
(* Perform the operations. *)
- let flags = Sysprep_operation.perform_operations ?operations g root in
+ let flags = Sysprep_operation.perform_operations ?operations g ~debug root in
+
+ let debug fs =
+ ksprintf (fun str -> if show_log then prerr_endline str) fs in
(* Parse flags. *)
let relabel = ref false in
diff --git a/sysprep/sysprep_operation.ml b/sysprep/sysprep_operation.ml
index 3fd8afc..ea2a7cc 100644
--- a/sysprep/sysprep_operation.ml
+++ b/sysprep/sysprep_operation.ml
@@ -20,11 +20,12 @@ open Printf
type flag = [ `Created_files ]
+type debug_fn = ('a, unit, string, unit) format4 -> 'a
type operation = {
name : string;
pod_description : string;
extra_args : ((Arg.key * Arg.spec * Arg.doc) * string) list;
- perform : Guestfs.guestfs -> string -> flag list;
+ perform : Guestfs.guestfs -> debug:debug_fn -> string -> flag list;
}
let ops = ref []
@@ -169,7 +170,7 @@ let list_operations () =
*)
List.iter (fun op -> print_endline op.name ) !ops
-let perform_operations ?operations g root =
+let perform_operations ?operations g ~debug root =
assert !baked;
let ops =
diff --git a/sysprep/sysprep_operation.mli b/sysprep/sysprep_operation.mli
index 5fe035f..64976a9 100644
--- a/sysprep/sysprep_operation.mli
+++ b/sysprep/sysprep_operation.mli
@@ -20,6 +20,8 @@
type flag = [ `Created_files ]
+type debug_fn = ('a, unit, string, unit) format4 -> 'a
+
type operation = {
name : string;
(** Operation name, also used to enable the operation on the command
@@ -39,7 +41,7 @@ type operation = {
You can decide the types of the arguments, whether they are
mandatory etc. *)
- perform : Guestfs.guestfs -> string -> flag list;
+ perform : Guestfs.guestfs -> debug:debug_fn -> string -> flag list;
(** The function which is called to perform this operation, when
enabled.
@@ -95,5 +97,5 @@ val add_to_set : string -> set -> set
Note that this will raise [Not_found] if [name] is not
a valid operation name. *)
-val perform_operations : ?operations:set -> Guestfs.guestfs -> string -> flag
list
+val perform_operations : ?operations:set -> Guestfs.guestfs -> debug:debug_fn ->
string -> flag list
(** Perform all operations, or the subset listed in the [operations] set. *)
diff --git a/sysprep/sysprep_operation_cron_spool.ml
b/sysprep/sysprep_operation_cron_spool.ml
index e67688b..3cead5d 100644
--- a/sysprep/sysprep_operation_cron_spool.ml
+++ b/sysprep/sysprep_operation_cron_spool.ml
@@ -17,11 +17,17 @@
*)
open Sysprep_operation
+open Utils
module G = Guestfs
-let cron_spool_perform g root =
- Array.iter g#rm_rf (g#glob_expand "/var/spool/cron/*");
+let cron_spool_perform g ~debug root =
+ let files = g#glob_expand "/var/spool/cron/*" in
+ Array.iter (
+ fun glob ->
+ g#rm glob
+ debug "Deleted %s" glob
+ ) files;
[]
let cron_spool_op = {
diff --git a/sysprep/sysprep_operation_dhcp_client_state.ml
b/sysprep/sysprep_operation_dhcp_client_state.ml
index e3e87cb..9cfa3f0 100644
--- a/sysprep/sysprep_operation_dhcp_client_state.ml
+++ b/sysprep/sysprep_operation_dhcp_client_state.ml
@@ -20,11 +20,16 @@ open Sysprep_operation
module G = Guestfs
-let dhcp_client_state_perform g root =
+let dhcp_client_state_perform g ~debug root =
let typ = g#inspect_get_type root in
if typ = "linux" then (
List.iter (
- fun glob -> Array.iter g#rm_rf (g#glob_expand glob)
+ fun glob ->
+ Array.iter (
+ fun glob2 ->
+ g#rm_rf glob2
+ debug "Deleted %s" glob2
+ ) (g#glob_expand glob)
) [ "/var/lib/dhclient/*"; "/var/lib/dhcp/*" (* RHEL 3 *) ]
);
[]
diff --git a/sysprep/sysprep_operation_dhcp_server_state.ml
b/sysprep/sysprep_operation_dhcp_server_state.ml
index c5251ce..00c3c9a 100644
--- a/sysprep/sysprep_operation_dhcp_server_state.ml
+++ b/sysprep/sysprep_operation_dhcp_server_state.ml
@@ -20,8 +20,12 @@ open Sysprep_operation
module G = Guestfs
-let dhcp_server_state_perform g root =
- Array.iter g#rm_rf (g#glob_expand "/var/lib/dhcpd/*");
+let dhcp_server_state_perform g ~debug root =
+ Array.iter (
+ fun glob ->
+ g#rm_rf glob
+ debug "Deleted %s" glob
+ ) (g#glob_expand "/var/lib/dhcpd/*");
[]
let dhcp_server_state_op = {
diff --git a/sysprep/sysprep_operation_hostname.ml
b/sysprep/sysprep_operation_hostname.ml
index 51f9386..6332969 100644
--- a/sysprep/sysprep_operation_hostname.ml
+++ b/sysprep/sysprep_operation_hostname.ml
@@ -25,7 +25,7 @@ module G = Guestfs
let hostname = ref "localhost.localdomain"
-let hostname_perform g root =
+let hostname_perform g ~debug root =
let typ = g#inspect_get_type root in
let distro = g#inspect_get_distro root in
match typ, distro with
@@ -42,10 +42,12 @@ let hostname_perform g root =
String.concat "\n" lines ^
sprintf "\nHOSTNAME=%s\n" !hostname in
g#write filename file;
+ debug "Modified HOSTNAME to %s" !hostname
[ `Created_files ]
| "linux", ("debian"|"ubuntu") ->
g#write "/etc/hostname" !hostname;
+ debug "Modified HOSTNAME to %s" !hostname
[ `Created_files ]
| _ -> []
diff --git a/sysprep/sysprep_operation_logfiles.ml
b/sysprep/sysprep_operation_logfiles.ml
index b4c6ea9..f8401d8 100644
--- a/sysprep/sysprep_operation_logfiles.ml
+++ b/sysprep/sysprep_operation_logfiles.ml
@@ -50,10 +50,17 @@ let globs = List.sort compare [
]
let globs_as_pod = String.concat "\n" (List.map ((^) " ") globs)
-let logfiles_perform g root =
+let logfiles_perform g ~debug root =
let typ = g#inspect_get_type root in
if typ = "linux" then (
- List.iter (fun glob -> Array.iter g#rm_rf (g#glob_expand glob)) globs
+ List.iter (
+ fun glob ->
+ Array.iter (
+ fun glob2 ->
+ g#rm_rf glob2
+ debug "Deleted %s\n" glob2
+ ) (g#glob_expand glob);
+ ) globs;
);
[]
diff --git a/sysprep/sysprep_operation_mail_spool.ml
b/sysprep/sysprep_operation_mail_spool.ml
index 74f2d94..d7714d0 100644
--- a/sysprep/sysprep_operation_mail_spool.ml
+++ b/sysprep/sysprep_operation_mail_spool.ml
@@ -20,9 +20,14 @@ open Sysprep_operation
module G = Guestfs
-let mail_spool_perform g root =
+let mail_spool_perform g ~debug root =
List.iter (
- fun glob -> Array.iter g#rm_rf (g#glob_expand glob)
+ fun glob ->
+ Array.iter (
+ fun glob2 ->
+ g#rm_rf glob2
+ debug "Deleted %s" glob2
+ ) (g#glob_expand glob)
) [
"/var/spool/mail/*";
"/var/mail/*";
diff --git a/sysprep/sysprep_operation_net_hwaddr.ml
b/sysprep/sysprep_operation_net_hwaddr.ml
index 02e3b5e..0c43223 100644
--- a/sysprep/sysprep_operation_net_hwaddr.ml
+++ b/sysprep/sysprep_operation_net_hwaddr.ml
@@ -21,7 +21,7 @@ open Sysprep_operation
module G = Guestfs
-let net_hwaddr_perform g root =
+let net_hwaddr_perform g ~debug root =
let typ = g#inspect_get_type root in
let distro = g#inspect_get_distro root in
match typ, distro with
@@ -36,6 +36,7 @@ let net_hwaddr_perform g root =
) lines in
let file = String.concat "\n" lines ^ "\n" in
g#write filename file
+ debug "Replaced HWADDR in %s\n" filename
) filenames;
if filenames <> [||] then [ `Created_files ] else []
diff --git a/sysprep/sysprep_operation_random_seed.ml
b/sysprep/sysprep_operation_random_seed.ml
index 989ffe8..961d49c 100644
--- a/sysprep/sysprep_operation_random_seed.ml
+++ b/sysprep/sysprep_operation_random_seed.ml
@@ -20,7 +20,7 @@ open Sysprep_operation
module G = Guestfs
-let random_seed_perform g root =
+let random_seed_perform g ~debug root =
let typ = g#inspect_get_type root in
if typ = "linux" then (
let files = [
@@ -37,6 +37,7 @@ let random_seed_perform g root =
close_in chan;
g#write file buf
+ debug "Modified %s\n" file
)
) files;
[ `Created_files ]
diff --git a/sysprep/sysprep_operation_rhn_systemid.ml
b/sysprep/sysprep_operation_rhn_systemid.ml
index 35849e4..d046d36 100644
--- a/sysprep/sysprep_operation_rhn_systemid.ml
+++ b/sysprep/sysprep_operation_rhn_systemid.ml
@@ -20,13 +20,17 @@ open Sysprep_operation
module G = Guestfs
-let rhn_systemid_perform g root =
+let rhn_systemid_perform g ~debug root =
let typ = g#inspect_get_type root in
let distro = g#inspect_get_distro root in
match typ, distro with
| "linux", "rhel" ->
- (try g#rm "/etc/sysconfig/rhn/systemid" with G.Error _ -> ());
+ (try
+ let file = "/etc/sysconfig/rhn/systemid" in
+ g#rm file
+ debug "Deleted %s\n" file
+ with G.Error _ -> ());
[]
| _ -> []
diff --git a/sysprep/sysprep_operation_script.ml b/sysprep/sysprep_operation_script.ml
index 977d41f..286ebf2 100644
--- a/sysprep/sysprep_operation_script.ml
+++ b/sysprep/sysprep_operation_script.ml
@@ -35,7 +35,7 @@ let set_scriptdir dir =
let scripts = ref []
let add_script script = scripts := script :: !scripts
-let rec script_perform (g : Guestfs.guestfs) root =
+let rec script_perform (g : Guestfs.guestfs) ~debug root =
let scripts = List.rev !scripts in
if scripts <> [] then (
(* Create a temporary directory? *)
diff --git a/sysprep/sysprep_operation_smolt_uuid.ml
b/sysprep/sysprep_operation_smolt_uuid.ml
index a85aa9b..100a56e 100644
--- a/sysprep/sysprep_operation_smolt_uuid.ml
+++ b/sysprep/sysprep_operation_smolt_uuid.ml
@@ -20,14 +20,18 @@ open Sysprep_operation
module G = Guestfs
-let smolt_uuid_perform g root =
+let smolt_uuid_perform g ~debug root =
let typ = g#inspect_get_type root in
if typ = "linux" then (
let files = [ "/etc/sysconfig/hw-uuid";
"/etc/smolt/uuid";
"/etc/smolt/hw-uuid" ] in
List.iter (
- fun file -> try g#rm file with G.Error _ -> ()
+ fun file ->
+ try
+ g#rm file
+ debug "Deleted %s\n" file
+ with G.Error _ -> ()
) files;
[]
diff --git a/sysprep/sysprep_operation_ssh_hostkeys.ml
b/sysprep/sysprep_operation_ssh_hostkeys.ml
index 8da405b..abdcb8f 100644
--- a/sysprep/sysprep_operation_ssh_hostkeys.ml
+++ b/sysprep/sysprep_operation_ssh_hostkeys.ml
@@ -20,11 +20,15 @@ open Sysprep_operation
module G = Guestfs
-let ssh_hostkeys_perform g root =
+let ssh_hostkeys_perform g ~debug root =
let typ = g#inspect_get_type root in
if typ <> "windows" then (
let files = g#glob_expand "/etc/ssh/*_host_*" in
- Array.iter g#rm files;
+ Array.iter (
+ fun file ->
+ g#rm file
+ debug "Deleted %s\n" file
+ ) files;
[]
)
else []
diff --git a/sysprep/sysprep_operation_udev_persistent_net.ml
b/sysprep/sysprep_operation_udev_persistent_net.ml
index e54e140..9afe179 100644
--- a/sysprep/sysprep_operation_udev_persistent_net.ml
+++ b/sysprep/sysprep_operation_udev_persistent_net.ml
@@ -20,10 +20,13 @@ open Sysprep_operation
module G = Guestfs
-let udev_persistent_net_perform g root =
+let udev_persistent_net_perform g ~debug root =
let typ = g#inspect_get_type root in
if typ = "linux" then (
- (try g#rm "/etc/udev/rules.d/70-persistent-net.rules"
+ (try
+ let file = "/etc/udev/rules.d/70-persistent-net.rules" in
+ g#rm file
+ debug "Deleted %s\n" file
with G.Error _ -> ());
[]
)
diff --git a/sysprep/sysprep_operation_utmp.ml b/sysprep/sysprep_operation_utmp.ml
index 69867e1..036cb8b 100644
--- a/sysprep/sysprep_operation_utmp.ml
+++ b/sysprep/sysprep_operation_utmp.ml
@@ -20,10 +20,13 @@ open Sysprep_operation
module G = Guestfs
-let utmp_perform g root =
+let utmp_perform g ~debug root =
let typ = g#inspect_get_type root in
if typ <> "windows" then (
- try g#rm "/var/run/utmp"
+ try
+ let file = "/var/run/utmp" in
+ g#rm file
+ debug "Deleted %s\n" file
with G.Error _ -> ()
);
[]
diff --git a/sysprep/sysprep_operation_yum_uuid.ml
b/sysprep/sysprep_operation_yum_uuid.ml
index 396cac5..4b354bf 100644
--- a/sysprep/sysprep_operation_yum_uuid.ml
+++ b/sysprep/sysprep_operation_yum_uuid.ml
@@ -20,10 +20,14 @@ open Sysprep_operation
module G = Guestfs
-let yum_uuid_perform g root =
+let yum_uuid_perform g ~debug root =
let packager = g#inspect_get_package_management root in
if packager = "yum" then (
- (try g#rm "/var/lib/yum/uuid" with G.Error _ -> ());
+ (try
+ let file = "/var/lib/yum/uuid" in
+ g#rm file
+ debug "Deleted %s\n" file
+ with G.Error _ -> ());
[]
)
else []
--
1.7.10.rc3