eudev-project / eudev

Repository for eudev development
GNU General Public License v2.0
522 stars 147 forks source link

udevadm settle hangs #65

Closed ghost closed 11 years ago

ghost commented 11 years ago

I'm trying to use eudev in Parted Magic instead of pulling udev out of systemd. Everything is going well except for this. It doesn't matter what computer I try it on, it always hangs for the 120 seconds. Just for fun, I commented out the udevadm settle line and it boots normally. It didn't hang using udev from systemd-190. It's hard to say if it's just something I'm missing or a bug of some sort. If there are any log files or something you need me to do, just ask.

I pulled eudev from git on 2013-07-04

blueness commented 11 years ago

Hi Patrick. This is probably issue #57. We test eudev in gentoo and so build it with certain configuration options. But fluxer found that different configurations lead to path problems and the long boot. My guess is that is your problem too. We've made it worse because the default configuration itself causes the issue. Of course we should fix this.

Can you let me know what environment you're building in and I'll try to reproduce, to make sure its the same issue. I did this for puppylinux and we got it going. In the mean time, I'm going to change up configure.ac to default to options that work. Then trace out options that don't work and either add those paths to the code or have the configure script spit out errors.

Thanks for the report!

ghost commented 11 years ago

Parted Magic is sort of Slackware based. I compile stuff on Slackware, but I do my own init system. It's binary compatible and that's about it. I compile every package myself to fit with our system. I have a test ISO with eudev here:

http://beefdrapes.partedmagic.com

I don't think I'm doing anything too off the wall. I like to stick with package defaults. I can bend my system to work with eudev, not the other way around. Other than the long "hang", it's works perfect. I'm sure it's something silly.

If you happen to download the test version, keep in mind the "udevadm settle" line is commented out in the init scripts so it will probably boot just fine for you. By the time the desktop starts and you manually type in "udevadm settle" it doesn't "hang". It's one of those things that makes you want to bang your head on the keyboard.

My source for eudev is here: http://beefdrapes.partedmagic.com/source/eudev

blueness commented 11 years ago

I'm having problems debugging this because I can't really edit rcS and reboot. I need to run udevadm monitor so I can see what its getting stuck on. Is there any way of installing pmagic to disk? My attempts at just copying failed.

ghost commented 11 years ago

There is no install to disk option. It's only meant to run from live media. What is it that you need? I can make a special iso image with whatever you want at boot time. Will something like this work?

udevadm monitor & udevadm settle --timeout=120

blueness commented 11 years ago

Okay, I've been debugging this by manually installing pmagic to a hard drive (in virtualbox) and I think I see what's going on. This will probably take a couple of rounds because you do the same thing in the initramfs as in the squashfs --- let's tackle PMAGIC_2013_07_07.SQFS first. We might as well get it right because it won't matter in the future if you use eudev or pull udev out of systemd yourself, you'll have the same problem in both cases.

Because I'm working in a hybrid environment I want to make sure my fixes translate to the live medium. Can you master an image where you drop me into bash shell just before and after running udev. Change /etc/init.d/rcS so that it has the following:

echo -n "${BLUE}Completing device setup... ${NORMAL}" echo "" > /proc/sys/kernel/hotplug echo 120 > /sys/class/firmware/timeout /bin/bash udevadm hwdb --update udevd --daemon udevadm trigger --type=subsystems --action=add udevadm trigger --type=devices --action=add udevadm settle --timeout=120 DONE /bin/bash

Note not only did I add the bash shells before and after, but I also moved the udevadmin hwdb --update before running udevd --daemon (it needs to find /etc/udev/hwdb.bin when it starts) and use the --daemon flag, not -d. I also uncommented the settle line, but that doesn't matter since when i'm in the first shell i can edit things as I wish.

BTW1: if you want to know how I installed to hard disk, I can give you that (off the bug though) BTW2: my students use pmagic all the time, I don't. they swear by it so kudos.

ghost commented 11 years ago

Sorry for the delay. My server is in Toronto Canada and they had a huge storm that flooded the city. My website is still down.

Thanks for the tip on the hwdb --update and the --daemon flag. I have these updated now. After about 20 hours worth of poking around I have the problem solved and it's not obvious. Gentoo should make a note of this on their udev doc so other people don't have the same issue. It's actually a kernel option that was doing it.

Device Drivers > Generic Driver Options [ ] Fallback user-helper invocation for firmware loading

This makes recent versions of eudev and systemd hang on "udevadm settle". I used this option on older versions of udev like 183. After disabling this, /sys/class/firmware/timeout is gone. In my scripts I would set the timeout like this "echo 120 > /sys/class/firmware/timeout". I rebuilt the kernel and edited out that line and it works perfect. No more hangs.

blueness commented 11 years ago

Arg! Thanks for your hard work and yes this is important! I'll see about documenting it.

Aside: I live in Buffalo. I have never seen a wetter summer. The exact opposite of last summer where we had near desert conditions!