[systemd-devel] Netconsole NG
"Jóhann B. Guðmundsson"
johannbg at gmail.com
Tue Apr 8 09:21:54 PDT 2014
On 04/08/2014 12:10 PM, poma wrote:
> [Service]
> EnvironmentFile=/etc/sysconfig/netconsole-zbyszek
> RemainAfterExit=yes
> ExecStart=/sbin/modprobe netconsole netconsole=@/${SRC_DEV},@${DST_IP}/
> ExecStop=/sbin/modprobe -r netconsole
On popular demand of me providing more detailed criticism than just
"this is rubbish" as well as I got somewhat myself to blame for poorly
written unit files given that the best practical of unit writing resides
in my head by the experience of migrating so many legacy sysv initscript
to native systemd units and driven half way to insanity while doing so.
So let me clarify why I think this is rubbish.
For the first you are using the wrong Type for that unit file as in the
build in default which is Type=simple for the purpose of this unit along
with RemainAfterExit=yes in it when you should be using Type=oneshot unit
Secondly let me start with "EnvironmentFile=" in 99.9% times this is
entirely unnecessary since what is contains within those environment
files are configuration changes to daemon startup for daemons that are
so poorly written they dont support reading configuration files on startup.
Now on the 21 century within the systemd universe, administrators are (
supposted to be ) using drop in configuration snippets that contain that
administrator overwrite to overcome that daemons lack of reading
configuration file in the relvant unit's .d configuration directory that
resides under /etc/systemd/systemd/ or better yet developers that
maintain and own that component should be rewriting it's daemon to
support parsing configuration file(s) at startup.
If you happen to be using the 00.1% components that actually has valid
usecase for using "EnvironmentFile=" definition in type service units
these days, then those environment files should reside in a components
.d directory under /etc to make them cross distributional not under
/etc/sysconfig or under /etc/default and hopefully one day I will have
manage to remove all traces and usages of environmental files in
/etc/sysconfig in Fedora ( but achieving that is more like David vs
Goliath or Jóhann vs Red Hat.) as well as others doing the same in their
distribution of choice
Thirdly under no circumstances and I mean NEVER should you be loading
and unloading modules from within a systemd unit YES NEVER!!!
If you need for one reason or another to load module you do so by
placing .conf configuration snippet in /etc/modules-load.d which tell
the system which kernel modules to load but fact is if you actually need
to load some module manually like this something is wrong since modules
should be automatic loaded by PCI IDs, USB IDs, DMI IDs or similar
triggers encoded in the kernel modules themselves these days.
And you place .conf configuration snippet in /etc/modprobe.d which
contains which parameters the kernel module uses when loading.
Which leads to that service section being rubbish as well as the
existence of that entire unit being o_O since the correct way ( always )
when dealing with module and their option is what I described here above
which leads to for netconsole being....
/etc/modules-load.d/netconsole.conf
# Load netconsole.ko at boot
netconsole
And
/etc/modprobe.d/netconsole.conf
# load netconsole options
options netconsole netconsole=@192.168.1.2/enp1s2, at 192.168.1.1/
And since you are using netconsole you probably want to increase the
logvel as well
/etc/sysctl.d/10-netconsole.conf
#raising loglevel from 7 to 8
kernel.printk = 8 4 1 7
JBG
More information about the systemd-devel
mailing list