From Fedora Project Wiki

Revision as of 11:29, 30 July 2009 by Pfrields (talk | contribs) (moved Dracut/Debugging to How to debug Dracut problems: Use plain language for titles, not directory hierarchies)


All bug reports

In all cases, the following should be mentioned and attached to your bug report:

The exact kernel command line used!

An copy of /etc/fstab

cp /etc/fstab ~USER/Desktop/fstab.txt

The output of dmsetup ls --tree.

 dmsetup ls --tree > ~USER/Desktop/dmsetup.txt

If using an raid device the output of cat /proc/mdstat.

 cat /proc/mdstat > ~USER/Desktop/mdstat.txt

A copy of /etc/dracut.conf if you have edited it.

 cp /etc/dracut.conf ~USER/home/Desktop/dracut.conf.txt

The output of on an image with debugging enabled.

dmesg|grep dracut 
You will need to have created an image with debug enabled and added the rdshell to the kernel command line see below for details on how to do that.

Preparing your system for debugging

To be successful in debugging you will need setup and remotely connect to the serial console.

Add the following lines to you /etc/grub.conf

This example uses the first serial port, giving <serial_port> the value 0, which in turn gives kernel parameter console=ttyS0

Beneath timeout=5 put..

serial --unit=0 --speed=9600
terminal --timeout=5 serial console

At the end of the kernel line put..

console=tty0 console=ttyS0,9600

So /etc/grub.conf should look something like this after you've made those changes..

default=0
timeout=5
serial --unit=0 --speed=9600
terminal --timeout=5 serial console
title Fedora (2.6.29.5-191.fc11.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.29.5-191.fc11.x86_64 ro root=/dev/mapper/vg_uc1-lv_root console=tty0 console=ttyS0,9600
        initrd /dracut-2.6.29.5-191.fc11.x86_64.img

Further information on how to configure the kernel for console output can be found here.

You can redirect all non-interactive output to /dev/kmsg and the kernel will put it out on the console when it reaches the kernel buffer by doing
exec >/dev/kmsg 2>&1 </dev/console

Create the image with debug enabled.

dracut -a debug /boot/debug-$(uname -r) $(uname -r) 
You can overwrite an existing image by using the -f option.
dracut -f -a debug <imagename> <kernel version>

Boot with debug enable.

rdinitdebug rdnetdebug

Using the shell to debug

Add "rdshell" to the kernel command line and remove "rhgb" and "quiet" and boot the image. This will drop you to the shell if the initramfs fails.

Sample grub entry with serial enabled and rdshell kernel parameter added
default=0
timeout=5
serial --unit=0 --speed=9600
terminal --timeout=5 serial console
title Fedora (2.6.29.5-191.fc11.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.29.5-191.fc11.x86_64 ro root=/dev/mapper/vg_uc1-lv_root console=tty0 console=ttyS0,9600 rdshell 
        initrd /dracut-2.6.29.5-191.fc11.x86_64.img

Need commands example #FIXME

Dracut debugging kernel command parameters

rdshell
Drop to a shell, if the initramfs fails.
rdinitdebug
set -x for the dracut shell
rdbreak=[pre-udev|pre-mount|mount|pre-pivot|]
drop the shell on defined breakpoint
rdudevinfo
set udev to loglevel info
rdudevdebug
set udev to loglevel debug
rdnetdebug
debug network scripts in dracut. Output is written to /tmp/