);
(* Split the list of files into ones for hostfiles and ones for base image. *)
- let p_hmac = Str.regexp "/\\.*\\.hmac$" in
+ let p_hmac = Str.regexp "^\\..*\\.hmac$" in
let hostfiles = ref []
and baseimgfiles = ref [] in
List.iter (
fun (path, {ft_dir = dir; ft_ghost = ghost; ft_config = config} ,_ as f) ->
+ let file = Filename.basename path in
+
(* Ignore boot files, kernel, kernel modules. Supermin appliances
* are booted from external kernel and initrd, and
* febootstrap-supermin-helper copies the host kernel modules.
hostfiles := f :: !hostfiles
(* Ignore FIPS files (.*.hmac) (RHBZ#654638). *)
- else if Str.string_match p_hmac path 0 then ()
+ else if Str.string_match p_hmac file 0 then ()
(* Ghost files are created empty in the base image. *)
else if ghost then
(match !warn_unreadable with
| [] -> ()
| paths ->
- eprintf "febootstrap: warning: some host files are unreadable by non-root\nGet your distro to fix these files:\n";
+ eprintf "febootstrap: warning: some host files are unreadable by non-root\n";
+ eprintf "febootstrap: warning: get your distro to fix these files:\n";
List.iter
- (fun path -> eprintf "\t%s\n" path)
+ (fun path -> eprintf "\t%s\n%!" path)
(List.sort compare paths)
);
);
(* Near-atomically copy files to the final output directory. *)
+ debug "writing %s ..." (outputdir // "base.img");
let cmd =
sprintf "mv %s %s"
(Filename.quote (tmpdir // "base.img"))
(Filename.quote (outputdir // "base.img")) in
run_command cmd;
+ debug "writing %s ..." (outputdir // "hostfiles");
let cmd =
sprintf "mv %s %s"
(Filename.quote (tmpdir // "hostfiles"))