this bit me a couple weeks ago, but i managed to figure it out...
the problem is, that when udev tries to run from initrd, PaX kills it because of MPROTECT, no devices get created, and it can't find the real root device to boot.
i solved this problem by disabling MPROTECT on the udev binary on the initrd with paxctl. how you achieve this varies depending on how you actually create your initrd -- i happen to use gentoo's 'genkernel', so basically it went something like this:
- Code: Select all
# genkernel --menuconfig --udev all
a udev binary for initrd gets built, the kernel and modules are built, and an initrd (which won't work) is created... next, fix the udev binary for initrd...
- Code: Select all
# cd /usr/share/genkernel/pkg/x86
# tar jxvf udev-0??-x86.tar.bz2
# paxctl -m ./sbin/udev
# tar jcvf udev-0??-x86.tar.bz2 etc sbin
# rm -rf ./{etc,sbin}
now you've got a udev binary for initrd that won't die. now, make a working initrd that uses it...
- Code: Select all
# genkernel --udev initrd
now you can install your new grsec kernel and initrd and have udev work!
(tested with vanilla linux-2.6.11.7 + grsec-2.1.5, will be trying vanilla 2.6.11.9 tonight)