Re: check_finished() syntax weirdness

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

 



On 05/20/2014 10:46 AM, Hannes Reinecke wrote:
On 05/13/2014 04:32 PM, Harald Hoyer wrote:
On 13.05.2014 16:21, Hannes Reinecke wrote:
On 05/13/2014 02:10 PM, Harald Hoyer wrote:
On 13.05.2014 12:42, Hannes Reinecke wrote:
On 05/13/2014 12:39 PM, Harald Hoyer wrote:

for systemd:
     modules.d/98systemd/rootfs-generator.sh:
[ "${root%%:*}" = "block" ] && generator_wait_for_dev
"${root#block:}"

for non-systemd:
    modules.d/95rootfs-block/parse-block.sh:
[ "${root%%:*}" = "block" ] && wait_for_dev "${root#block:}"


What is your kernel command line?

BOOT_IMAGE=/boot/vmlinuz-3.12.18-4-default \
root=UUID=7b90aa11-62ba-4260-81c6-bcf43914e97e \
console=tty0 console=ttyS1,57600 sysrq_always_enabled \
panic=100 ignore_loglevel unknown_nmi_panic \
resume=/dev/disk/by-uuid/7be10c24-f0fe-4ecd-b04f-c307b0370c48 \
splash=silent quiet showopts crashkernel=166M-:83M \
rd.break=pre-mount

(The pre-mount thingie is inserted by me so that I have a
chance to debug & fix
things)

Cheers,

Hannes

do a rd.break=initqueue and look in the
/lib/dracut/hooks/initqueue/finished
directory.

If you use systemd in the initramfs, you should have:

/usr/lib/systemd/system-generators/dracut-rootfs-generator

in the initramfs, which transforms root=UUID=... into the
finished hook.

You should be able to test it in the dracut shell with:

# bash -x
/usr/lib/systemd/system-generators/dracut-rootfs-generator

Which seems to be the problem; the generator is present, but
apparently not
called.
Once I execute the above line the 'finished' entry for the root
fs is there.
 From which I surmise that the generator hasn't been called.

Hmm.


Does it have the executable bits set?

Argl. Totally stupid.

Look at modules.d/99base/module_setup.sh:

     ## save host_devs which we need bring up
     if [[ $hostonly_cmdline == "yes" ]]; then
         if [[ -f "$initdir/lib/dracut/need-initqueue" ]] || !
dracut_module_included "systemd"; then
             (
                 if dracut_module_included "systemd"; then
                     DRACUT_SYSTEMD=1
                 fi
                 PREFIX="$initdir"

                 . "$moddir/dracut-lib.sh"

                 for _dev in ${host_devs[@]}; do
                     [[ "$_dev" == "$root_dev" ]] && continue
                     _pdev=$(get_persistent_dev $_dev)

                     case "$_pdev" in
                         /dev/?*) wait_for_dev $_pdev;;
                         *) ;;
                     esac
                 done
             )
         fi
     fi

So if /etc/fstab contains just the root device (or if the swap
device resides on a different device which is initialized earlier)
the initqueue will _never_ run, and the worker scripts will never
be executed.
Once I remove the '[[ "$_dev" == "$root_dev" ]] && continue'
line the system boots.

Which is actually wrong.

However, the _real_ issue is even more stupid.
At one point systemd switched over to /usr/lib instead of /lib,
and all scripts got moved to the new location.

Well, nearly all:

diff --git a/modules.d/98systemd/module-setup.sh b/modules.d/98systemd/module-setup.sh
index e14ce39..4516b9a 100755
--- a/modules.d/98systemd/module-setup.sh
+++ b/modules.d/98systemd/module-setup.sh
@@ -192,7 +192,7 @@ install() {
     inst_script "$moddir/dracut-mount.sh" /bin/dracut-mount
     inst_script "$moddir/dracut-pre-pivot.sh" /bin/dracut-pre-pivot

- inst_script "$moddir/rootfs-generator.sh" /lib/systemd/system-generators/dracut-rootfs-generator + inst_script "$moddir/rootfs-generator.sh" $systemdutildir/system-generators/dracut-rootfs-generator

     inst_binary true
     ln_r $(type -P true) "/usr/bin/loginctl"

and surprisingly the system boots.
I'll be sending a proper patch.

Cheers,

Hannes
--
Dr. Hannes Reinecke		      zSeries & Storage
hare@xxxxxxx			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe initramfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux