Kann hier bitte jemand mithelfen, der gut Bash spricht? 
Hier ein bisschen mehr Ergebnisse:
Mein erstes fehlschlagendes ‘dracut’ war am 10.2.2016. Am selben Tag installierte zypper eine neue Dracut version:
2016-02-10 17:53:50|install|dracut|044-2.1|x86_64||repo-oss|c867c1232223e01b80f08b35cf9746debb5690eb|
(/var/log/zypp/history)
Bei ‘mkinitrd’ wird der dracut-Befehl angezeigt, den man mit ‘–debug’ auch selbst ausführen kann:
/usr/bin/dracut -v --debug --logfile /var/log/YaST2/mkinitrd.log --force 4.3.3-7.geae9134-default
Dies endet bei mir mit:
/usr/lib/dracut/modules.d/90kernel-network-modules/module-setup.sh@86(installkernel): running_in_qemu
/usr/lib/dracut/modules.d/90kernel-network-modules/module-setup.sh@14(running_in_qemu): type -P systemd-detect-virt
//usr/lib/dracut/modules.d/90kernel-network-modules/module-setup.sh@15(running_in_qemu): systemd-detect-virt --vm
/usr/lib/dracut/modules.d/90kernel-network-modules/module-setup.sh@15(running_in_qemu): vm=
/usr/lib/dracut/modules.d/90kernel-network-modules/module-setup.sh@16(running_in_qemu): (( 1 != 0 ))
/usr/lib/dracut/modules.d/90kernel-network-modules/module-setup.sh@16(running_in_qemu): return 255
/usr/lib/dracut/dracut-init.sh@678(module_installkernel): _ret=255
/usr/lib/dracut/dracut-init.sh@679(module_installkernel): unset check depends cmdline install installkernel
/usr/lib/dracut/dracut-init.sh@680(module_installkernel): return 255
/usr/bin/dracut@1439(main): dfatal 'installkernel failed in module kernel-network-modules'
/usr/lib/dracut/dracut-logger.sh@438(dfatal): set +x
dracut: installkernel failed in module kernel-network-modules
/usr/bin/dracut@1440(main): exit 1
/usr/bin/dracut@2(main): ret=1
/usr/bin/dracut@3(main): -n '' ]]
/usr/bin/dracut@3(main): -n /var/tmp/dracut.yBmtky ]]
/usr/bin/dracut@3(main): rm -rf -- /var/tmp/dracut.yBmtky
/usr/bin/dracut@4(main): exit 1
Die funktion, die 255 zurück gibt, in /usr/lib/dracut/modules.d/90kernel-network-modules/module-setup.sh, ist:
running_in_qemu() {
if type -P systemd-detect-virt >/dev/null 2>&1; then
vm=$(systemd-detect-virt --vm >/dev/null 2>&1)
(($? != 0)) && return 255
$vm = "qemu" ]] && return 0
$vm = "kvm" ]] && return 0
$vm = "bochs" ]] && return 0
fi
for i in /sys/class/dmi/id/*_vendor; do
-f $i ]] || continue
read vendor < $i
"$vendor" == "QEMU" ]] && return 0
"$vendor" == "Bochs" ]] && return 0
done
return 255
}
Das log bemerkt, dass ‘systemd-detect-virt --vm’ den Wert 1 zurück gibt, da mein Kernel nicht in einer VM läuft (siehe ‘man systemd-detect-virt’)
$? ist also ==1, und “(($? != 0)) && return 255” gibt 255 zurück.
Zurück in der “installkernel()” funktion, die letzte Zeile, wo ‘running_in_qemu()’ aufgerufen wird:
running_in_qemu && hostonly='' instmods virtio_net e1000 8139cp pcnet32 e100 ne2k_pci
So ein Ausdruck würde meiner Erfahrung nach (eher mit JavaScript usw.) benutzt werden als (pseudocode)
if(running_in_qemu() && hostonly=='') {
instmods([virtio_net, e1000, 8139cp, pcnet32, e100, ne2k_pci])
}
Aber leider spreche ich nicht gut genug Bash… (Wie es laut Log aussieht, gibt Bash auch ohne ‘return’ etwas zurück.)
Wenn ich das Log richtig verstehe, dann würde jedoch das “running_in_qemu && hostonly=’’” direkt die 255 zurückgeben, da in Bash 0=TRUE und alles andere =FALSE ist.
Funktioniert das so in Bash? Es steht ja kein explizites “return” da…
Das Log scheint aber zu sagen, dass der 255 code auch ohne explizites ‘return’ statement von ‘installkernel()’ zurückgegeben wird, weshalb dracut die Funktion als gescheitert ansieht:
/usr/lib/dracut/modules.d/90kernel-network-modules/module-setup.sh@16(running_in_qemu): return 255
/usr/lib/dracut/dracut-init.sh@678(module_installkernel): _ret=255
/usr/lib/dracut/dracut-init.sh@679(module_installkernel): unset check depends cmdline install installkernel
/usr/lib/dracut/dracut-init.sh@680(module_installkernel): return 255
/usr/bin/dracut@1439(main): dfatal 'installkernel failed in module kernel-network-modules'
Als weiteren Hinweis darauf, dass das dracut update auf Version 044-2.1 den Fehler eingeführt hat, werte ich,** dass ‘running_in_qemu()’ upstream gar nicht existiert!**
Siehe: https://www.kernel.org/pub/linux/utils/boot/dracut/
bzw direkt
https://www.kernel.org/pub/linux/utils/boot/dracut/dracut-044.tar.gz → modules.d/90kernel-network-modules/module-setup.sh
Hier ist ‘running_in_qemu()’ nicht definiert, und ‘installkernel()’ endet mit:
hostonly="" instmods iscsi_ibft crc32c iscsi_boot_sysfs
==> Kann es sein, sich hier bei OpenSuse jemand verprogrammiert hat, als er oder sie dem upstream-Code running_in_qemu() hinzugefügt hat?