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