Note: This is a public test instance of Red Hat Bugzilla. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback at bugzilla.redhat.com.
Bug 1286866 - Installer image boot broken with dracut 044: squashfs not set up
Summary: Installer image boot broken with dracut 044: squashfs not set up
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: dracut
Version: rawhide
Hardware: x86_64
OS: Linux
unspecified
urgent
Target Milestone: ---
Assignee: dracut-maint-list
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard: AcceptedBlocker
Depends On:
Blocks: F24AlphaBlocker
TreeView+ depends on / blocked
 
Reported: 2015-11-30 23:10 UTC by Adam Williamson
Modified: 2015-12-01 07:58 UTC (History)
5 users (show)

Fixed In Version: dracut-044-6.git20151201.fc24
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2015-12-01 07:58:43 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description Adam Williamson 2015-11-30 23:10:26 UTC
Even with https://bugzilla.redhat.com/show_bug.cgi?id=1285903 fixed, Rawhide nightly boot.iso's fail to boot, and this is still dracut's fault. I think I know what got broken.

If you boot a 2015-11-30 Rawhide nightly boot.iso , it fails to boot because /dev/root doesn't exist. In fact, /dev/root is a symlink to /dev/mapper/live-rw, which doesn't exist. On a working image (2015-11-12 is what I'm comparing with), /dev/mapper/live-rw is a symlink to /dev/dm-0 , which exists.

There is also an interesting error: "umount: /run/initramfs/squashfs: mountpoint not found"

What I think is going on is actually pretty simple: the changes in dracut 044 have made it so dmsquash-live-root.sh no longer sets up the squashfs for anaconda images properly. Specifically, this commit:

https://git.kernel.org/cgit/boot/dracut/dracut.git/commit?id=8b5ee88ff667693b2d8da85a8552ad8f5ab95127

more specifically, the very first change in that commit. It makes it so this block:

    SQUASHED_LOOPDEV=$( losetup -f )
    losetup -r $SQUASHED_LOOPDEV $SQUASHED
    mkdir -m 0755 -p /run/initramfs/squashfs
    mount -n -t squashfs -o ro $SQUASHED_LOOPDEV /run/initramfs/squashfs

only happens "if [ -e /run/initramfs/live/${live_dir}/${squash_image} ]". Previously, it happened "if [ -e "$SQUASHED" ]". Frederick Grose was, I think, assuming that $SQUASHED only gets set in that block anyway, but that is incorrect. It can also be set earlier in dmsquash-live-root.sh:

if [ -f $livedev ]; then
    # no mount needed - we've already got the LiveOS image in initramfs
    # check filesystem type and handle accordingly
    fstype=$(det_img_fs $livedev)
    case $fstype in
        squashfs) SQUASHED=$livedev;;

and that, I believe, is the case we hit with an anaconda boot. So in this case, the block of code that's intended to mount /run/initramfs/squashfs - from where an FSIMG will be found, and set up as /dev/mapper/live-rw - never gets run, so we never get an FSIMG and we never get a /dev/mapper/live-rw.

Comment 1 Adam Williamson 2015-11-30 23:12:42 UTC
This again is an automatic blocker, "Complete failure of any release-blocking TC/RC image to boot at all under any circumstance - "DOA" image (conditional failure is not an automatic blocker)".

Comment 2 Adam Williamson 2015-11-30 23:41:35 UTC
I can't be entirely sure, but I *think* the logic change was purely an erroneous 'optimization' - it's not significant to the live overlay case - so the fix would simply be to revert that change:

From 6a4d4912e1a853f0ed8e574fccfac1e076b79093 Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam>
Date: Mon, 30 Nov 2015 15:31:33 -0800
Subject: [PATCH] fix squashfs setup for anaconda installer images (RHBZ
 #1286866)

---
 modules.d/90dmsquash-live/dmsquash-live-root.sh | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh
index fa44a03..68d076c 100755
--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh
+++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh
@@ -203,6 +203,9 @@ fi
 # we might have an embedded fs image on squashfs (compressed live)
 if [ -e /run/initramfs/live/${live_dir}/${squash_image} ]; then
     SQUASHED="/run/initramfs/live/${live_dir}/${squash_image}"
+fi
+
+if [ -e "$SQUASHED" ] ; then
     if [ -n "$live_ram" ]; then
         echo "Copying live image to RAM..."
         echo "(this may take a few minutes)"
-- 
2.6.3

Comment 3 Harald Hoyer 2015-12-01 07:58:43 UTC
Many thanks for your detailed analysis!

dracut-044-6.git20151201.fc24


Note You need to log in before you can comment on or make changes to this bug.