The case of the disappearing network interfaces
I rebooted my Eee PC this morning after several weeks of uptime. It came back with networking not working. Since it took me ages to work out what had gone wrong, and Google was no help, I think I should write it up for everyone’s benefit.
I run Ubuntu Hardy Heron (8.04) on my Eee PC 701, with the array.org kernel, and I use Wicd to manage my network connections. This last detail is significant.
The symptoms observed, after much prodding and poking, were as follows:
ifconfig
reported only the loopback interface,lo
. My wired (eth0
) and wireless (ath0
andwifi0
) interfaces were gone.ifconfig -a
, however, listed all the expected interfaces.- I was able to get wired ethernet working by typing
sudo ifconfig eth0 up
followed bysudo dhclient eth0
at a command prompt.
The actual problem was that Wicd wasn’t starting correctly, but it took me a long time to work that out.
On a typical desktop machine, the network management daemon
(e.g. Network Manager or Wicd) takes over configuration of the
network interfaces. By running the daemon directly (sudo
/usr/sbin/wicd
) instead of via the init.d
script, I was able to see what was really happening.
The Eee PC has a solid state disk; to minimise wear, I use a
small RAM disk for logging. I’ve got 2 GB of RAM, so space isn’t a
problem. However, on reboots, the RAM disk is emptied. It turns out
that I hadn’t rebooted the machine since upgrading to the latest
version of Wicd. (The previous one put its log files in a different
location.) Upon installation, the /var/log/wicd
directory had been created, and the daemon ran happily. After a
reboot, though, this directory was no longer there. The daemon
expected to be able to open a log file in that directory, and just
gave up and died when it couldn’t.
My quick solution was to modify the /usr/sbin/wicd
script that starts the daemon. It’s just a small shell script
wrapping the Python script. I added a second line before the actual
wicd-daemon.py
line:
#!/bin/bash mkdir -p /var/log/wicd /usr/lib/wicd/wicd-daemon.py $@
Problem solved.
I’m going to look into submitting a proper patch to Wicd.
Update: It appears that this problem has been fixed in the Wicd trunk.