[systemd-devel] Netconsole NG

poma pomidorabelisima at gmail.com
Tue Apr 8 14:40:44 PDT 2014


On 08.04.2014 18:21, "Jóhann B. Guðmundsson" wrote:
> 
> 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

What do you mean? African or European swallow?


poma




More information about the systemd-devel mailing list