[pkg-dhcp-devel] Bug#761850: dhclient problem caused by disconnected stderr socket
mike at wyzardry.net
Sat Oct 4 17:58:40 UTC 2014
I've encountered this too, and it looks like it's not a problem with
dhclient itself. It may not be NetworkManager either. I suspect
systemd, but I'm not sure.
Investigating with strace, I found that dhclient is terminating due to a
SIGPIPE when trying to write its first line of output ("Internet Systems
Consortium DHCP Client") to stderr. Its /proc/self/fd shows that stderr
is a socket: the "2" link points to "socket:". I thought the
socket might be connected to NetworkManager, so I checked and found that
actually NetworkManager's stderr is the same socket; both processes are
sending their output to the same place.
However, it's not clear what the socket actually connects to. Figuring
the number 15055 was an inode number of a Unix domain socket file, I ran
"find / -inum 15055" as root, but didn't find anything. I also did "ls
-l /proc/*/fd/* | grep 15055", and the only hits were the stdout and
stderr of the NetworkManager process.
After restarting NetworkManager, its stderr was a *different* socket
(different number), and dhclient inherited that new socket and was able
to run successfully. But I did another search and couldn't find any
socket files with the new inode number, nor any hits in /proc/*/fd
besides the new NetworkManager and dhclient processes, so it's still
unclear what's on the other end of the socket even when it's working.
I suspect systemd is involved since NetworkManager had the bad socket as
its stderr, and stderr is typically provided by the parent process, and
NetworkManager is started by systemd. But without knowing what the
socket connects to, it's hard to be sure.
More information about the pkg-dhcp-devel