Comment 7 for bug 1452601

Revision history for this message
David Favor (davidfavor) wrote :

IMHO, systemd seems to be the root of all evil.

touch /etc/dnsmasq.conf has no effect.

net4-dev# systemctl restart lxc-net
net4-dev# systemctl status lxc-net
● lxc-net.service - LXC network bridge setup
   Loaded: loaded (/lib/systemd/system/lxc-net.service; enabled; vendor preset: enabled)
   Active: active (exited) since Fri 2015-08-28 18:20:16 CDT; 9s ago
  Process: 15219 ExecStop=/usr/lib/x86_64-linux-gnu/lxc/lxc-net stop (code=exited, status=0/SUCCESS)
  Process: 15223 ExecStart=/usr/lib/x86_64-linux-gnu/lxc/lxc-net start (code=exited, status=0/SUCCESS)
 Main PID: 15223 (code=exited, status=0/SUCCESS)

Shows lxc-net reported status of success + dnsmasq is never run.

There's just so much wrong here...

The entire /usr/lib/x86_64-linux-gnu/lxc/lxc-net script seems never to require a rethink.

The problem is whoever wrote this imagined the Linux runtime environment works sensibly (no edge conditions).

Many times they don't.

A simple situation is if OOM (Out of Memory Killer) runs + scavenges/kill dnsmasq, then much of the "state" (files/directories) lxc-net depends on is out of sync... meaning there's no test for dnsmasq actually running. There's only a test for the lxcbr0 state files existing. This is an insufficient approach.

I think the solution is to rewrite stop() to handle any edge condition, so lxc-net can recover normal errors without manual intervention.

I'll take a stab at a rewrite + if my code isn't to embarrassing, I'll post it.