[Libguestfs] [PATCH 8/8] v2v: linux: correctly reconfigure the initrd on Debian

Tomáš Golembiovský tgolembi at redhat.com
Tue Aug 9 11:55:53 UTC 2016


On Mon,  8 Aug 2016 18:38:55 +0200
Pino Toscano <ptoscano at redhat.com> wrote:

> Use the canonical way to regenerate the initrd images for all the
> installed kernels, i.e. reconfigure the initramfs-tools which will
> trigger the kernel postinst scripts.
> ---
>  v2v/convert_linux.ml | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/v2v/convert_linux.ml b/v2v/convert_linux.ml
> index cfe46b8..a556ce6 100644
> --- a/v2v/convert_linux.ml
> +++ b/v2v/convert_linux.ml
> @@ -866,7 +866,9 @@ let rec convert ~keep_serial_console (g : G.guestfs) inspect source rcaps =
>          ignore (g#command (Array.of_list args))
>        in
>  
> -      if g#is_file ~followsymlinks:true "/sbin/dracut" then
> +      if family = `Debian_family then
> +        ignore (g#command ([| "dpkg-reconfigure"; "--frontend=noninteractive"; "initramfs-tools" |]))
> +      else if g#is_file ~followsymlinks:true "/sbin/dracut" then
>          run_dracut_command "/sbin/dracut"
>        else if g#is_file ~followsymlinks:true "/usr/bin/dracut" then
>          run_dracut_command "/usr/bin/dracut"

It might be better to call update-initramfs directly. I don't know, is
using dpkg-reconfigure maybe safer across distributions? The slight
advantage of calling update-initramfs is that we can turn on verbose
mode, just like for dracut:

      let run_update_initramfs_command () =
        let args =
          "update-initramfs"  ::
            (if verbose () then [ "-v" ] else [])
          @ [ "-c"; "-k"; mkinitrd_kv ]
        in
        ignore (g#command (Array.of_list args))
      in

The other advantage is that we can provide the kernel version we want.
The default is to update the initramfs for the latest kernel, which in
theory might not be the one we want if it were missing virtio drivers
(not sure if this can happen). According to ordering we do any kernel
without virtio drivers is worse than any kernel with virtio drivers.

What we can also do is specify list of modules we require. Similar to
what we do for dracut/mkinitrd. Debian uses a file for that:

        (* The modules to add to initrd are defined in a file. *)
        ignore (g#sh "sh -c 'echo \\# Added by virt-v2v >> /etc/initramfs-tools/modules'");
        let cmd = (sprintf "sh -c 'echo %s >> /etc/initramfs-tools/modules'"
          (String.concat " " modules)) in
        ignore (g#sh cmd);



The commits I didn't reply to LGTM. 

-- 
Tomáš Golembiovský <tgolembi at redhat.com>




More information about the Libguestfs mailing list