On Thu, Apr 07, 2022 at 11:03:36AM +0200, Laszlo Ersek wrote:
On 04/06/22 23:15, George Prekas wrote:
> Even when supplied with $SUPERMIN_MODULES, supermin tries to access
> /lib/modules. This directory does not exist by default in all the
> environments.
> ---
> src/format_ext2.ml | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/src/format_ext2.ml b/src/format_ext2.ml
> index e311ea6..2888ed8 100644
> --- a/src/format_ext2.ml
> +++ b/src/format_ext2.ml
> @@ -95,8 +95,18 @@ let build_ext2 debug basedir files modpath kernel_version
appliance size
> printf "supermin: ext2: copying kernel modules\n%!";
>
> (* Import the kernel modules. *)
> - ext2fs_copy_file_from_host fs "/lib" "/lib";
> - ext2fs_copy_file_from_host fs "/lib/modules" "/lib/modules";
> + (try
> + ext2fs_copy_file_from_host fs "/lib" "/lib";
> + with Unix_error _ ->
> + ext2fs_copy_file_from_host fs "/" "/lib";
> + );
> +
> + (try
> + ext2fs_copy_file_from_host fs "/lib/modules"
"/lib/modules";
> + with Unix_error _ ->
> + ext2fs_copy_file_from_host fs "/" "/lib/modules";
> + );
> +
> ext2fs_copy_dir_recursively_from_host fs
> modpath ("/lib/modules/" ^ kernel_version);
>
>
Two things I'm uncertain about:
- Those semicolons *inside* the parens. I don't think we need them. (In
fact I'm surprised the code compiles at all -- it surely does; I've
checked.)
Right, the semicolon at the end of a list of statements is optional.
I tend to avoid them but it's just a matter of style and what George
wrote is equally correct.
- Formatting / indentation. Minimally, the "with" should be
aligned with
the "try".
So my suggestion would be:
(try ext2fs_copy_file_from_host fs "/lib" "/lib"
with Unix_error _ -> ext2fs_copy_file_from_host fs "/"
"/lib");
(try ext2fs_copy_file_from_host fs "/lib/modules" "/lib/modules"
with Unix_error _ -> ext2fs_copy_file_from_host fs "/"
"/lib/modules");
But arguably this is uncomfortable to read and we have a bit of code
duplication here. How about this (only build-tested):
> diff --git a/src/format_ext2.ml b/src/format_ext2.ml
> index e311ea633deb..83eac3ddad57 100644
> --- a/src/format_ext2.ml
> +++ b/src/format_ext2.ml
> @@ -95,8 +95,13 @@ let build_ext2 debug basedir files modpath kernel_version
appliance size
> printf "supermin: ext2: copying kernel modules\n%!";
>
> (* Import the kernel modules. *)
> - ext2fs_copy_file_from_host fs "/lib" "/lib";
> - ext2fs_copy_file_from_host fs "/lib/modules" "/lib/modules";
> + let copy_file_or_root_from_host f =
> + try
> + ext2fs_copy_file_from_host fs f f
> + with Unix_error _ ->
> + ext2fs_copy_file_from_host fs "/" f in
> + copy_file_or_root_from_host "/lib";
> + copy_file_or_root_from_host "/lib/modules";
> ext2fs_copy_dir_recursively_from_host fs
> modpath ("/lib/modules/" ^ kernel_version);
I certainly defer to Rich on all this of course.
Let me look at the original patch ...
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW