#1321 Issue closed: Recreate initrd/initramfs by default in any case

Labels: enhancement, fixed / solved / done, minor bug

jsmeix opened issue at 2017-04-20 13:55:

Currently "rear recover" recreates initrd/initramfs
only if some drivers changed, see the code in the
rebuild_initramfs scripts.

I think recreating initrd only if some drivers changed it insufficient.
It basically calls for errors later when booting the recreated system.

I think by default initrd should always be recreated to be on the safe side.
ReaR can never verify all possible reasons why initrd must be recreated.
Only in special known cases recreating initrd could be skipped
automatically by ReaR.

On the other hand when recreating initrd fails during "rear recover"
this should not be a hard error abort because often the recreated
system boots with the initrd that was restored form the backup, cf.
the LogPrint "WARNING ..." messages in the rebuild_initramfs scripts.

Probably best is to add a new boolean config variable

REBUILD_INITRAMFS=""

which defaults to "yes" if not specified by the user
so that by default it works fail safe but still the user has the
final power to decide whether or not ReaR recreates the initrd.

For background information see
https://github.com/rear/rear/pull/1311#issuecomment-295657734

schlomo commented at 2017-04-20 14:00:

I can't remember now why we didn't recreate the initrd by default back when I wrote this part. Maybe this is related to some historic SLES8/9 stuff which I forgot already.

Therefore I am all in favor. However, I would approach it from the other side: Always recreate the initrd and have a variable (e.g. NO_REBUILD_INITRAMFS) which can be set to force ReaR to trust the existing initrd.

That would underline the fact that we believe that it should always be generated.

jsmeix commented at 2017-04-20 14:16:

I do not like logically inverse working boolean variables
that lead to code like

NO_REBUILD_INITRAMFS="no"
if ! is_false "$NO_REBUILD_INITRAMFS" ; then

Huh?!
What exactly is that code meant to do?

I already got crazy when working on code that deals with
that NOBOOTLOADER thingy. At least for me I get too
easily the logic of inverse working boolean variables inverse.

In other words:
Usually I fail to implement code for inverse working boolean variables
correctly and then I fail to fix my bugs correctly ad infinitum...

schlomo commented at 2017-04-20 14:49:

I meant more like

is_true $NO_REBUILD_INITRAMFS && return

which to me is positive logic even though the variable denotes disabling something.

Otherwise, if it helps you, maybe just call it KEEP_INITRAMFS instead. Although I would not prefer that as it sounds too positive for something that we consider a bad idea.

jsmeix commented at 2017-04-21 11:38:

Of course for our initial intended use case

is_true $NO_REBUILD_INITRAMFS && return

the logic is clear and simple.

I meant when more sophisticated cases may appear later
(because of whatever reasons that I cannot foersee now)
then inverse working boolean variables easily cause bugs.

I think in practice it should not really matter if we use
REBUILD_INITRAMFS or NO_REBUILD_INITRAMFS
because for normal use cases the user should not
bother with that setting and for experts who like to
not rebuild their initrd/initramfs both names are o.k.

jsmeix commented at 2017-05-17 14:22:

With https://github.com/rear/rear/pull/1367 merged
this issue should be fixed.


[Export of Github issue for rear/rear.]