NetworkManager is the newest addition to my Helpful Daemon hit list. I have two wired Ethernet interfaces on this box. One is configured and active, eth1, and one is not, which is eth0. The correct behavior is for any unconfigured NIC to be ignored by the system. But no. NetworkManager, which is installed by default on Gutsy, thinks it knows better than me how to manage my interfaces. This is what the Release Notes say:
In Ubuntu 7.10, network-manager only manages interfaces that are marked for roaming. Thus, all interfaces that were previously managed by network-manager will be set to roaming mode during upgrade. Technically, this takes any interface stanzas using the dhcp method with no options and that are marked auto, and removes them from /etc/network/interfaces. If you rely on your interfaces being started by ifupdown when the system starts up, you need to re-enable them in /etc/network/interfaces manually, or disable roaming in System -> Administration -> Network.
I read that a dozen times and I’m still not sure what it means, except it’s clear that NetworkManager is interfering unhelpfully. I never marked any interfaces for roaming, and when I create an entry in /etc/network/interfaces it is for a purpose, not because I’m bored and don’t care what happens. The result of this brilliant bit of engineering is NetworkManager started eth0 and plucked an address for it from my DHCP server, with the result that both interfaces were on the same subnet, 192.168.1.0/24. Which means no networking, because you can’t have two interfaces on one box on the same subnet. Nothing works.
[Update: An excellent reader pointed out that you can have two interfaces on one PC on the same subnet. So something else was responsible for the loss of connectivity. There are some twists and turns to this that we shall explore in the future.]
So after finding the relevant nugget in the Release Notes, I gave eth0 a minimal configuration just to shut up NetworkManager. But NetworkManager still had to sticks its oar in–it didn’t configure eth0, but it still brought it up in a weird half-baked way:
$ ifconfig eth0 Link encap:Ethernet HWaddr 00:01:11:00:11:CF BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Interrupt:16 Base address:0xd400 eth1 Link encap:Ethernet HWaddr 00:22:62:22:7E:22 inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20b:6aff:feef:7e8d/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:12709 errors:0 dropped:0 overruns:0 frame:0 TX packets:11869 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:13013566 (12.4 MB) TX bytes:1768011 (1.6 MB) Interrupt:19 Base address:0xbc00
ifconfig with no options only displays up interfaces. eth0 is not marked as up, so what the heck is it doing there? So then I tried System Settings -> Network Settings, and unchecked “activate when the computer starts.” That made no difference. So I removed NetworkManager, and that cured everything. Untangling NetworkManager, HAL, Avahi, udev, ifupdown, and the interfaces file to try to figure out who’s doing what is a beastly job–please, for the love of $deity, quit trying to be so darned helpful.
The printer article has one error that I recently discovered the hard way, though I suspect that something changed during a routine update, because it worked fine before–get rid of all the policy junk in cupsd.conf. I had network printing working fine, then suddenly it stopped working. Deleting all the policy crud cured it. That’s the directives between the
I wonder if the various ‘buntu teams ever talk to each other. The ‘buntus have been weird about network printing from the beginning. It’s disabled by default, and the graphical configurators don’t work right. And yet Avahi-daemon, the Zeroconf network discovery daemon, runs by default even though there is nothing for it to auto-discover, so it’s virtually useless. (Hey, how about discovering network printers? Except CUPS already broadcasts printers, when it’s not handcuffed.) Not only that, but I find it interfering with all manner of functions. For one example, if there are no network interfaces configured, it will create a link-local address. This is a cute surprise when you don’t want Ethernet enabled at all. You can disable Avahi, or even remove it if you wish; don’t be scared when it wants to uninstall kde-desktop too. This is a meta-package, so it’s safe to remove it.
Bluetooth is on by default, even though a minority of users need it. Way more users want to share printing than want to auto-discover nothing or use Bluetooth devices. Ubuntu boasts about being very secure, yet having unneeded services running violates the most fundamental security principle, which is “deny all, allow as needed”. Managing services is easy, because both Ubuntu and Kubuntu have nice pointy-clicky graphical services configurators. In fact the first thing all Linux users should do after installation is turn off all unneeded services, and with the overly-helpful ‘buntu families, you better check after every update too.
This article was first published on LinuxPlanet.