Why I'm switching to systemd's networkd stuff for my networking
Today I gave in to temptation and switched
my Fedora 21 office workstation from doing networking through
Fedora's old /etc/rc.d/init.d/network
init script and its
/etc/sysconfig/network-scripts/ifcfg-*
system to using systemd-networkd.
Before I write about what you have to set up to do this, I want to
ramble a bit about why I even thought about it, much less went
ahead.
The proximate cause is that I was hoping to get a faster system
boot. At some point in the past few Fedora versions, bringing up
my machine's networking through the network
init script became
the single slowest part of booting by a large margin, taking on the
order of 20 to 30 seconds (and stalling a number of downstream
startup jobs). I had no idea just what was taking so long, but I
hoped that by switching to something else I could improve the
situation.
The deeper cause is that Fedora's old network
init script system
is a serious mess. All of the work is done by a massive set of
intricate shell scripts that use relatively undocumented environment
variables set in ifcfg-*
files (and the naming of the files
themselves). Given the pile of scripts involved, it's absolutely
no surprise to me that it takes forever to grind through processing
all of my setup. In general the whole thing has all of the baroque
charm of the evolved forms of System V init; the best thing I can
say about it is that it generally works and you can build relatively
sophisticated static setups with it.
(While there is some documentation for what variables can be set
hiding in /usr/share/doc/initscripts/sysconfig.txt
, it's not
complete and for some things you get to decode the shell scripts
yourself.)
What systemd's networkd stuff brings to the table for this is the same thing that systemd brings to the table relative to SysV init scripts: you have a well documented way of specifying what you want, which is then directly handled instead of being run through many, many layers of shell scripts. As an additional benefit it gets handled faster and perhaps better.
(I firmly believe that a mess of fragile shell scripts that source
your ifcfg-*
files and do magic things is not the right architecture.
Robust handling of configuration files requires real parsing and
so on, not shell script hackery. I don't really care who takes care
of this (I would be just as happy with a completely separate system)
and I will say straight up that systemd-networkd
is not my favorite
implementation of this idea and suffers from various flaws. But I
like it more than the other options.)
In theory NetworkManager might fill this ecological niche already. In practice NetworkManager has never felt like something that was oriented towards my environment, instead feeling like it targeted machines and people who were going to do all of this through GUIs, and I've run into some issues with it. In particular I'm pretty sure that I'd struggle quite a bit to find documentation on how to set up a NM configuration (from the command line or in files) that duplicates my current network setup; with systemd, it was all in the manual pages. There is a serious (re)assurance value from seeing what you want to configure be clearly documented.
(My longer range reason for liking systemd's move here is that it may bring more uniformity to how you configure networking setups across various Linux flavours.)
|
|