Dracut macht kein initrd-Image mit Kernel 4.4.0-3

Mit Kernel 4.4.0-2 gings noch, mkinitrd hat folgende Ausgabe:

Executing: /usr/bin/dracut --logfile /var/log/YaST2/mkinitrd.log --force /boot/initrd-4.4.0-3-default 4.4.0-3-default
dracut: *** Including module: bash ***
dracut: *** Including module: systemd ***
dracut: *** Including module: warpclock ***
dracut: *** Including module: systemd-initrd ***
dracut: *** Including module: i18n ***
dracut: *** Including module: network ***
dracut: *** Including module: drm ***
dracut: *** Including module: plymouth ***
dracut: *** Including module: btrfs ***
dracut: *** Including module: kernel-modules ***
dracut: *** Including module: kernel-network-modules ***
dracut: installkernel failed in module kernel-network-modules
Generating /boot/initrd-4.4.0-2-default /boot/initrd-4.4.0-3-default targets failed

Woran könnte das liegen?

Johannes

Ähnlich auch bei mir:

felinity:/home/leonie # mkinitrd
Creating initrd: /boot/initrd-4.3.3-7.geae9134-default
dracut: Executing: /usr/bin/dracut --logfile /var/log/YaST2/mkinitrd.log --force /boot/initrd-4.3.3-7.geae9134-default 4.3.3-7.geae9134-default
modinfo: ERROR: Module snd_compress not found.
modinfo: ERROR: Module snd_soc_rl6231 not found.
modinfo: ERROR: Module irqbypass not found.
modinfo: ERROR: Module snd_soc_core not found.
modinfo: ERROR: Module videobuf2_v4l2 not found.
modinfo: ERROR: Module snd_soc_rt5640 not found.
modinfo: ERROR: Module snd_soc_sst_acpi not found.
dracut: *** Including module: bash ***
dracut: *** Including module: systemd ***
dracut: *** Including module: warpclock ***
dracut: *** Including module: systemd-initrd ***
dracut: *** Including module: i18n ***
dracut: *** Including module: network ***
dracut: *** Including module: drm ***
dracut: *** Including module: plymouth ***
dracut: *** Including module: crypt ***
dracut: *** Including module: dm ***
dracut: Skipping udev rule: 64-device-mapper.rules
dracut: Skipping udev rule: 60-persistent-storage-dm.rules
dracut: Skipping udev rule: 55-dm.rules
dracut: *** Including module: kernel-modules ***
dracut: *** Including module: kernel-network-modules ***
dracut: installkernel failed in module kernel-network-modules
Creating initrd: /boot/initrd-4.4.0-8.g9f68b90-default
dracut: Executing: /usr/bin/dracut --logfile /var/log/YaST2/mkinitrd.log --force /boot/initrd-4.4.0-8.g9f68b90-default 4.4.0-8.g9f68b90-default
dracut: *** Including module: bash ***
dracut: *** Including module: systemd ***
dracut: *** Including module: warpclock ***
dracut: *** Including module: systemd-initrd ***
dracut: *** Including module: i18n ***
dracut: *** Including module: network ***
dracut: *** Including module: drm ***
dracut: *** Including module: plymouth ***
dracut: *** Including module: crypt ***
dracut: *** Including module: dm ***
dracut: Skipping udev rule: 64-device-mapper.rules
dracut: Skipping udev rule: 60-persistent-storage-dm.rules
dracut: Skipping udev rule: 55-dm.rules
dracut: *** Including module: kernel-modules ***
dracut: *** Including module: kernel-network-modules ***
dracut: installkernel failed in module kernel-network-modules
Creating initrd: /boot/initrd-4.4.1-4.g4dac1be-default
dracut: Executing: /usr/bin/dracut --logfile /var/log/YaST2/mkinitrd.log --force /boot/initrd-4.4.1-4.g4dac1be-default 4.4.1-4.g4dac1be-default
dracut: *** Including module: bash ***
dracut: *** Including module: systemd ***
dracut: *** Including module: warpclock ***
dracut: *** Including module: systemd-initrd ***
dracut: *** Including module: i18n ***
dracut: *** Including module: network ***
dracut: *** Including module: drm ***
dracut: *** Including module: plymouth ***
dracut: *** Including module: crypt ***
dracut: *** Including module: dm ***
dracut: Skipping udev rule: 64-device-mapper.rules
dracut: Skipping udev rule: 60-persistent-storage-dm.rules
dracut: Skipping udev rule: 55-dm.rules
dracut: *** Including module: kernel-modules ***
dracut: *** Including module: kernel-network-modules ***
dracut: installkernel failed in module kernel-network-modules
Generating  /boot/initrd-4.3.3-7.geae9134-default /boot/initrd-4.4.0-8.g9f68b90-default /boot/initrd-4.4.1-4.g4dac1be-default targets failed
felinity:/home/leonie # ls -rtlah /boot/       
total 226M
drwxr-xr-x  3 root root 4.0K Jan  1  1970 efi
drwx------  2 root root  16K Nov 17  2013 lost+found
-rw-r--r--  1 root root  512 Nov 17  2013 backup_mbr
-rw-r--r--  1 root root 7.8M Jul  1  2015 initrd-3.19.0-15-generic
-rw-r--r--  1 root root 9.8M Jul  1  2015 initrd-initrd-3.16.7-7-desktop
-rw-r--r--  1 root root  15M Dec 17 17:41 initrd-4.3.0-2-default.old-dkms
-rw-r--r--  1 root root  15M Dec 17 17:42 initrd-4.3.2-1.g2aebb11-default.old-dkms
-rw-r--r--  1 root root  15M Dec 20 13:18 initrd-4.3.3-1.g7b4772e-default.old-dkms
-rw-r--r--  1 root root 167K Jan  6 08:08 config-4.3.3-7.geae9134-default
-rw-r--r--  1 root root 3.2M Jan  6 09:13 System.map-4.3.3-7.geae9134-default
-rw-r--r--  1 root root  484 Jan  6 09:19 sysctl.conf-4.3.3-7.geae9134-default
-rw-r--r--  1 root root 333K Jan  6 09:19 symvers-4.3.3-7.geae9134-default.gz
-rw-r--r--  1 root root 942K Jan  6 09:19 symtypes-4.3.3-7.geae9134-default.gz
-rw-r--r--  1 root root 6.9M Jan  6 09:20 vmlinux-4.3.3-7.geae9134-default.gz
-rw-r--r--  1 root root 5.9M Jan  6 09:56 vmlinuz-4.3.3-7.geae9134-default
-rw-r--r--  1 root root   65 Jan  6 09:56 .vmlinuz-4.3.3-7.geae9134-default.hmac
drwxr-xr-x 23 root root 4.0K Jan 13 01:19 ..
-rw-r--r--  1 root root 482K Jan 14 23:03 message
-rw-r--r--  1 root root  15M Jan 14 23:09 initrd-4.3.3-2.gdb72752-default.old-dkms
-rw-r--r--  1 root root  15M Jan 14 23:09 initrd-4.3.3-5.g008195a-default.old-dkms
lrwxrwxrwx  1 root root    1 Jan 18 05:04 boot -> .
-rw-r--r--  1 root root  15M Jan 19 22:09 initrd-4.3.3-7.geae9134-default.old-dkms
drwxr-xr-x  2 root root 4.0K Jan 22 14:55 grub
-rw-r--r--  1 root root 1.7K Jan 28 18:48 boot.readme
-rw-r--r--  1 root root 172K Jan 29 08:07 config-4.4.0-8.g9f68b90-default
-rw-r--r--  1 root root 3.2M Jan 29 09:36 System.map-4.4.0-8.g9f68b90-default
-rw-r--r--  1 root root  484 Jan 29 09:45 sysctl.conf-4.4.0-8.g9f68b90-default
-rw-r--r--  1 root root 339K Jan 29 09:45 symvers-4.4.0-8.g9f68b90-default.gz
-rw-r--r--  1 root root 966K Jan 29 09:46 symtypes-4.4.0-8.g9f68b90-default.gz
-rw-r--r--  1 root root 7.0M Jan 29 09:46 vmlinux-4.4.0-8.g9f68b90-default.gz
-rw-r--r--  1 root root 5.9M Jan 29 10:24 vmlinuz-4.4.0-8.g9f68b90-default
-rw-r--r--  1 root root   65 Jan 29 10:24 .vmlinuz-4.4.0-8.g9f68b90-default.hmac
-rw-r--r--  1 root root  15M Feb  3 01:46 initrd-4.4.0-7.geee4ec2-default.old-dkms
-rw-r--r--  1 root root  15M Feb  3 01:47 initrd-4.4.0-2.g368c53d-default.old-dkms
-rw-r--r--  1 root root  15M Feb  3 01:52 initrd-4.3.3-7.geae9134-default
-rw-r--r--  1 root root  15M Feb  3 11:43 initrd-4.4.0-8.g9f68b90-default
-rw-r--r--  1 root root 7.0M Feb 11 09:48 vmlinux-4.4.1-4.g4dac1be-default.gz
-rw-r--r--  1 root root 172K Feb 11 10:03 config-4.4.1-4.g4dac1be-default
-rw-r--r--  1 root root 3.2M Feb 11 11:11 System.map-4.4.1-4.g4dac1be-default
-rw-r--r--  1 root root  484 Feb 11 11:18 sysctl.conf-4.4.1-4.g4dac1be-default
-rw-r--r--  1 root root 339K Feb 11 11:18 symvers-4.4.1-4.g4dac1be-default.gz
-rw-r--r--  1 root root 966K Feb 11 11:19 symtypes-4.4.1-4.g4dac1be-default.gz
-rw-r--r--  1 root root   65 Feb 11 11:27 .vmlinuz-4.4.1-4.g4dac1be-default.hmac
-rw-r--r--  1 root root 5.9M Feb 11 11:27 vmlinuz-4.4.1-4.g4dac1be-default
-rw-r--r--  1 root root  15M Feb 14 18:51 initrd-4.4.0-8.g9f68b90-default.old-dkms
-rw-r--r--  1 root root    0 Feb 14 18:53 do_purge_kernels
lrwxrwxrwx  1 root root   32 Feb 14 18:53 vmlinuz -> vmlinuz-4.4.1-4.g4dac1be-default
lrwxrwxrwx  1 root root   31 Feb 14 18:53 initrd -> initrd-4.4.1-4.g4dac1be-default
drwxr-xr-x  6 root root  12K Feb 14 18:53 .
drwxr-xr-x  8 root root 4.0K Feb 15 00:09 grub2

Der Link “initrd → initrd-4.4.1-4.g4dac1be-default” ist invalide, da “initrd-4.4.1-4.g4dac1be-default” nach mkinitrd nicht existiert.

Auch erst seit ein paar Tagen, allerdings bei mir mit anderer Kernel version.
Im ls -lrah output kann man sehen, dass alle initrds das letzte mal am 3. Feb gebaut wurden.

felinity:/home/leonie # zypper se -si kernel-default
Loading repository data...
Reading installed packages...

S | Name                 | Type    | Version            | Arch   | Repository       
--+----------------------+---------+--------------------+--------+------------------
i | kernel-default       | package | 4.4.0-8.1.g9f68b90 | x86_64 | (System Packages)
i | kernel-default       | package | 4.3.3-7.1.geae9134 | x86_64 | (System Packages)
i | kernel-default       | package | 4.4.1-4.1.g4dac1be | x86_64 | kernel           
i | kernel-default-devel | package | 4.4.1-3.1.g2b16688 | x86_64 | (System Packages)
i | kernel-default-devel | package | 4.4.0-8.1.g9f68b90 | x86_64 | (System Packages)
i | kernel-default-devel | package | 4.3.3-7.1.geae9134 | x86_64 | (System Packages)
i | kernel-default-devel | package | 4.4.1-4.1.g4dac1be | x86_64 | kernel   

felinity:/home/leonie # zypper lr -d
#  | Alias                                | Name                                 | Enabled | GPG Check | Refresh | Priority | Type   | URI                                                                                                    | Service
---+--------------------------------------+--------------------------------------+---------+-----------+---------+----------+--------+--------------------------------------------------------------------------------------------------------+--------
...]
14 | kernel                               | kernel                               | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/repositories/Kernel:/stable/standard/         

Es ist dieselbe Meldung von dracut:
install failed in kernel-network-modules, dann kann er kein initrd-image machen, und der Link läuft ins Leere.
Entweder ist Dracut defekt, oder im Verzeichnis /lib/modules stimmt irgendetwas nicht.

Johannes

Kann hier bitte jemand mithelfen, der gut Bash spricht? :slight_smile:

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?

Cosmetic note:
My pseudocode is “wrong” because hostonly is rather something like an environment variable or something… meh, I really need to learn bash.


if(running_in_qemu()) {
    hostonly='' instmods([virtio_net, e1000, 8139cp, pcnet32, e100, ne2k_pci])
} 
// This does not return anything in other languages - but apparently in bash it does. Maybe because it's the last command of the containing function?

Bug-Report erstellt: https://bugzilla.opensuse.org/show_bug.cgi?id=966984

Meine Interpretation war wohl richtig - eine Bash Funktion gibt bei fehlendem ‘return’ den Rückgabewert des letzten Befehls zurück. Dieser ist hier die 255 von running_in_qemu():

Quelle: http://www.tldp.org/LDP/abs/html/complexfunct.html

Exit and Return****exit status
**Functions return a value, called an exit status. This is analogous to the exit status returned by a command. The exit status may be explicitly specified by a return statement, otherwise it is the exit status of the last command in the function (0 if successful, and a non-zero error code if not). This exit status may be used in the script by referencing it as $?](http://www.tldp.org/LDP/abs/html/internalvariables.html#XSTATVARREF). This mechanism effectively permits script functions to have a “return value” similar to C ***************functions.


[QUOTE=LabyH5;2754629]Bug-Report erstellt: https://bugzilla.opensuse.org/show_bug.cgi?id=966984

Dort steht auch die Lösung für das Problem, das ausschließlich bei nicht virtualisierten Maschinen auftaucht:

die Datei /usr//lib/dracut/modules.d/90kernel-network-modules/module-setup.sh ist zu ändern. Hat bei mir funktioniert.

Zeile 86ff neuer Code:
if running_in_qemu; then
hostonly=’’ instmods virtio_net e1000 8139cp pcnet32 e100 ne2k_pci
else
return 0
fi

Johannes

Ist gefixt in dracut=044-3.1:

leonie@felinity:/usr/lib/dracut/modules.d/90kernel-network-modules> diff /tmp/dracut-044-2.1/module-setup.sh module-setup.sh
15c15
< vm=$(systemd-detect-virt --vm >/dev/null 2>&1)

> vm=$(systemd-detect-virt --vm 2>&1)
86c86,88
< running_in_qemu && hostonly=’’ instmods virtio_net e1000 8139cp pcnet32 e100 ne2k_pci

> if running_in_qemu; then
> hostonly=’’ instmods virtio_net e1000 8139cp pcnet32 e100 ne2k_pci
> fi

Neue Version ist in den repositories.
LG!

PS: @Johannes, magst du vielleicht den Thread-Titel mit “GELÖST/SOLVED” prefixen, oder so?