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 and wifi0) 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 by sudo 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.