I don't believe what I just saw ...

Adam Williamson adamwill at fedoraproject.org
Fri Dec 5 23:38:10 UTC 2014


On Fri, 2014-12-05 at 15:21 -0800, Adam Williamson wrote:
> On Fri, 2014-12-05 at 18:12 -0500, Tom Horsley wrote:
> > On Fri, 05 Dec 2014 15:08:48 -0800
> > Adam Williamson wrote:
> > 
> > > It's intentional. See the bug.
> > 
> > Yea, I saw the bug and that's what confused me :-).
> > 
> > The initramfs file already exists. What reason is there for
> > a mass rebuild? I didn't see anything in the bug that explained
> > that.
> 
> I told you I don't feel like digging through the code to figure it out
> right now, it's release week, and I've had enough staring at anaconda
> source for this month. But, I mean, it's right there, the devs even gave
> you the starting point right in the bug report. The code's open. The
> function's called recreateInitrds . So go grep through the anaconda code
> for 'recreateInitrds' and you'll find the thing that's calling it, look
> at that thing and it'll probably tell you why. This is the 'open' bit of
> 'open source'. :)

so, fiiiine, you nagged me into doing it now, happy? :)

[adamw at adam anaconda (master %)]$ grep -R recreateInit *
anaconda.spec.in:- rpmostreepayload: Don't recreateInitrds for this payload (walters)
old_tests/pyanaconda_test/backend_test.py:            ('recreateInitrd', (A, ROOT_PATH), {}))
pyanaconda/install.py:        payload.recreateInitrds(force=True)
pyanaconda/packaging/rpmostreepayload.py:    def recreateInitrds(self, force=False):
pyanaconda/packaging/__init__.py:    def recreateInitrds(self, force=False):
[adamw at adam anaconda (master %)]$ git blame pyanaconda/install.py | grep recreateIn
57c19f44 (Brian C. Lane      2013-09-06 09:09:15 -0700 106)         payload.recreateInitrds(force=True)
[adamw at adam anaconda (master %)]$ git log | grep -10 57c19f44
...
commit 57c19f440148a0f31288bdabd923c4f663ad11fc
Author: Brian C. Lane <bcl at redhat.com>
Date:   Fri Sep 6 09:09:15 2013 -0700

    Always regenerate initramfs (#994180)
    
    dracut depends on some of the configuration settings we write out in
    doConfiguration so we need to always regenerate the initramfs for the
    system after we write these.
commit 8efa6965fec7cf9edace6cb7a417069f02221677

So we're doing it because the initramfs won't necessarily be correct,
because anaconda writes out some configuration settings after it got
generated. You can go look at
https://bugzilla.redhat.com/show_bug.cgi?id=994180 and see the bug this
was added to fix. OK, extra credit, let's see what it did before that:

[adamw at adam anaconda (master %)]$ git checkout 8efa6965fec7cf9edace6cb7a417069f02221677
[adamw at adam anaconda ((8efa696...) %)]$ grep -R recreateI *
old_tests/pyanaconda_test/backend_test.py:            ('recreateInitrd', (A, ROOT_PATH), {}))
pyanaconda/packaging/livepayload.py:        self._recreateInitrds()
pyanaconda/packaging/__init__.py:            self._recreateInitrds()
pyanaconda/packaging/__init__.py:    def _recreateInitrds(self, force=False):
[adamw at adam anaconda ((8efa696...) %)]$ less pyanaconda/packaging/__init__.py
...
        new_firmware = False

        # Multiple driver disks may be loaded, so we need to glob for all
        # the firmware files in the common DD firmware directory
        for f in glob.glob(DD_FIRMWARE+"/*"):
            try:
                shutil.copyfile(f, "%s/lib/firmware/" % ROOT_PATH)
            except IOError as e:
                log.error("Could not copy firmware file %s: %s", f, e.strerror)
            else:
                new_firmware = True

...

        if new_firmware:
            self._recreateInitrds()

so for non-live installs it was rebuilding initrds when you'd pulled in
extra firmware as part of the install process (so the firmware got into
the initrd - as the firmwares got installed after the first version of
the initrd was built). For live installs it was always doing it:

[adamw at adam anaconda ((8efa696...) %)]$ grep -6 _recreateInit pyanaconda/packaging/livepayload.py 
    def postInstall(self):
        """ Perform post-installation tasks. """
        progressQ.send_message(_("Performing post-installation setup tasks"))
        blivet.util.umount(INSTALL_TREE)

        super(LiveImagePayload, self).postInstall()
        self._recreateInitrds()

If you do the same git blame dance and look back at commit
0c4ed2c2c4e03f0b753d13bddb90994498481ed7 it looks like before that there
was no initramfs recreation and live and it was added to fix
https://bugzilla.redhat.com/show_bug.cgi?id=853988 , and you can dive
down a rabbit hole and figure out what changed in live image
generation / installation / whatever so this had to be done for f18 but
it somehow worked before that, but this is the time sink I was trying to
avoid in the first place. =) Remember that live images don't 'install
packages', they just dump the live filesystem into place on the disk,
and anaconda has to clean around the edges of that, that'll certainly be
*part* of why anaconda has to re-generate the initramfs, but not the
whole story most likely.

still, this is how you answer questions like this, the code is there,
git is there, the commit logs are there, use the tools...whenever I
answer a question like this I'm doing all that stuff above to figure it
out, and when anaconda folks do they're probably doing the same thing
half the time because there's just so much of this crap it must be
impossible to remember it all...
-- 
Adam Williamson
Fedora QA Community Monkey
IRC: adamw | Twitter: AdamW_Fedora | XMPP: adamw AT happyassassin . net
http://www.happyassassin.net



More information about the test mailing list