grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 1/1] support loading of custom initrd images


From: Christian Hesse
Subject: Re: [PATCH 1/1] support loading of custom initrd images
Date: Fri, 5 Feb 2016 18:44:50 +0100

Andrei Borzenkov <address@hidden> on Fri, 2016/02/05 20:04:
> 05.02.2016 13:43, Christian Hesse пишет:
> > From: Christian Hesse <address@hidden>
> > 
> > Signed-off-by: Christian Hesse <address@hidden>
> > ---
> >  docs/grub.texi          |  6 ++++++
> >  util/grub-mkconfig.in   |  1 +
> >  util/grub.d/10_linux.in | 16 +++++++++-------
> >  3 files changed, 16 insertions(+), 7 deletions(-)
> > 
> > diff --git a/docs/grub.texi b/docs/grub.texi
> > index 0afdd8c..f65647c 100644
> > --- a/docs/grub.texi
> > +++ b/docs/grub.texi
> > @@ -1398,6 +1398,12 @@ for all respectively normal entries.
> >  The values of these options replace the values of
> > @samp{GRUB_CMDLINE_LINUX} and @samp{GRUB_CMDLINE_LINUX_DEFAULT} for Linux
> > and Xen menu entries. 
> > address@hidden GRUB_CUSTOM_INITRD
> > +Give custom initrd images to be loaded in addition to the initrd image
> > +found for the kernel. One use case is to load Intel ucode image.
> > +  
> 
> Is there any other use case? Both dracut and initramfs-tools already add
> early cpio with microcode to generated initrd. This is bootloader
> agnostic and better solution.

Running Arch Linux here, mkinitcpio does not do that.

The ucode has to be in uncompressed initramfs, so dracut and initramfs-tools
use a concatenated image?
I think this was discussed for mkinitcpio, but denied for any reason. Would
have to search for references...
We have a downstream bug about dealing with Intel ucode in bug tracker. [0]

Nevertheless I have another use case:
I do use Yubikeys in challenge/response mode to open my LUKS encrypted
partition. [1] (This is not specific for mkinitcpio but works with dracut as
well.) The challenges are stored in an extra initramfs. This is required if
you want to update the challenge on every use - recompressing the initramfs
on every boot is not a good option.

> > +This expects a space separated list of initrd images in @samp{/boot}.
> > +
> >  @item GRUB_DISABLE_LINUX_UUID
> >  Normally, @command{grub-mkconfig} will generate menu entries that use
> >  universally-unique identifiers (UUIDs) to identify the root filesystem to
> > diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
> > index 3183744..bbe9e62 100644
> > --- a/util/grub-mkconfig.in
> > +++ b/util/grub-mkconfig.in
> > @@ -211,6 +211,7 @@ export GRUB_DEFAULT \
> >    GRUB_CMDLINE_NETBSD \
> >    GRUB_CMDLINE_NETBSD_DEFAULT \
> >    GRUB_CMDLINE_GNUMACH \
> > +  GRUB_CUSTOM_INITRD \
> >    GRUB_TERMINAL_INPUT \
> >    GRUB_TERMINAL_OUTPUT \
> >    GRUB_SERIAL_COMMAND \
> > diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
> > index 5a78513..8e060c5 100644
> > --- a/util/grub.d/10_linux.in
> > +++ b/util/grub.d/10_linux.in
> > @@ -136,10 +136,12 @@ EOF
> >    if test -n "${initrd}" ; then
> >      # TRANSLATORS: ramdisk isn't identifier. Should be translated.
> >      message="$(gettext_printf "Loading initial ramdisk ...")"
> > -    sed "s/^/$submenu_indentation/" << EOF
> > -   echo    '$(echo "$message" | grub_quote)'
> > -   initrd  ${rel_dirname}/${initrd}
> > -EOF
> > +    printf '       %s\n' "echo     '$(echo "$message" |
> > grub_quote)'" | sed "s/^/$submenu_indentation/"
> > +    printf '       %s ' 'initrd' | sed "s/^/$submenu_indentation/"
> > +    for I in "address@hidden"; do
> > +   printf ' %s/%s' "${rel_dirname}" "${I}"
> > +    done
> > +    printf '\n'
> >    fi
> >    sed "s/^/$submenu_indentation/" << EOF
> >  }
> > @@ -188,7 +190,7 @@ while [ "x$list" != "x" ] ; do
> >    alt_version=`echo $version | sed -e "s,\.old$,,g"`
> >    linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
> >  
> > -  initrd=
> > +  initrd=(${GRUB_CUSTOM_INITRD})  
> 
> We explicitly avoid bashisms in all scripts.

This can be handled with a simple space separated string as well.
I will rework this (given you do not deny this at all).

Did not know that arrarys are not POSIX but bashism... Learned something at
least. :D

> >    for i in "initrd.img-${version}" "initrd-${version}.img"
> > "initrd-${version}.gz" \ "initrd-${version}" "initramfs-${version}.img" \
> >        "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
> > @@ -198,7 +200,7 @@ while [ "x$list" != "x" ] ; do
> >        "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
> >        "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do
> >      if test -e "${dirname}/${i}" ; then
> > -      initrd="$i"
> > +      initrd+=("$i")
> >        break
> >      fi
> >    done
> > @@ -217,7 +219,7 @@ while [ "x$list" != "x" ] ; do
> >    fi
> >  
> >    if test -n "${initrd}" ; then
> > -    gettext_printf "Found initrd image: %s\n" "${dirname}/${initrd}" >&2
> > +    gettext_printf "Found initrd image(s) in %s: %s\n" "${dirname}"
> > "${initrd[*]}" >&2 elif test -z "${initramfs}" ; then
> >      # "UUID=" and "ZFS=" magic is parsed by initrd or initramfs.  Since
> > there's # no initrd or builtin initramfs, it can't work here.
> >   


[0] https://bugs.archlinux.org/task/47941
[1] https://github.com/eworm-de/mkinitcpio-ykfde

-- 
main(a){char*c=/*    Schoene Gruesse                         */"B?IJj;MEH"
"CX:;",b;for(a/*    Chris           get my mail address:    */=0;b=c[a++];)
putchar(b-1/(/*               gcc -o sig sig.c && ./sig    */b/42*2-3)*42);}

Attachment: pgpWfAjJnh_W9.pgp
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]