On 08.04.2014 23:27, poma wrote: > On 08.04.2014 14:25, Tom Gundersen wrote: >> On Tue, Apr 8, 2014 at 2:10 PM, poma <pomidorabelis...@gmail.com> wrote: >>> On 08.04.2014 04:03, poma wrote: >>>> On 07.04.2014 19:55, Zbigniew Jędrzejewski-Szmek wrote: >>>>> On Mon, Apr 07, 2014 at 05:34:10PM +0200, Lukáš Nykrýn wrote: >>>>>> The reason why this was not rewritten a long time ago is that the >>>>>> initscript tries to figure some of those values by itself (for >>>>>> example the MAC address). But yes, we need to do something with >>>>>> netconsole. It is a blocker for my initscripts evil plan. >>>>> Doesn't netconsole figure out most of those settings by itself, and >>>>> others default to sensible values, so if the network card is up >>>>> and has an address configured, only the device and target ip must be >>>>> given? >>>>> >>>>>> Dne 6.4.2014 17:59, poma napsal(a): >>>>>>> >>>>>>> /etc/sysconfig/netconsole: >>>>>>> # This is the EnvironmentFile for the netconsole service. Starting this >>>>>>> # service enables the capture of dmesg output on a destination machine. >>>>>>> >>>>>>> # Source port >>>>>>> SRC_PORT=12345 >>>>> This should default to empty... Kernel will pick something. >>>>> >>>>>>> >>>>>>> # Source IP address >>>>>>> SRC_IP=192.168.1.2 >>>>> This should default to empty... Kernel will use configured address, >>>>> since we order after network.target anyway. >>>>> >>>>>>> # Source network device >>>>>>> SRC_DEV=enp1s2 >>>>> Maybe this can be made into a instance argument? >>>>> >>>>>>> # Destination port >>>>>>> DST_PORT=12345 >>>>> I think this should default to 514/syslog, and can be left unset. >>>>> >>>>>>> # Destination IP address >>>>>>> DST_IP=192.168.1.1 >>>>>>> >>>>>>> # Destination ethernet address >>>>>>> DST_EHA=00:11:22:33:44:55 >>>>> This should default to unset. The kernel will query it if not set. >>>>> >>>>>>> /usr/lib/systemd/system/netconsole.service: >>>>>>> [Unit] >>>>>>> Description=Adds the netconsole module with the configured parameters >>>>>>> After=network.target >>>>>>> >>>>>>> [Service] >>>>>>> EnvironmentFile=/etc/sysconfig/netconsole >>>>> This is Fedora/RH specific. But I don't know what the proper path should >>>>> be, so maybe this is OK for now. >>>>> >>>>>>> Type=simple >>>>> This is the default... No need to specify. >>>>> >>>>>>> RemainAfterExit=yes >>>>>>> ExecStart=/usr/sbin/modprobe netconsole >>>>> This should be /sbin/modprobe for compatibility with split root. >>>>> >>>>>>> netconsole=${SRC_PORT}@${SRC_IP}/${SRC_DEV},${DST_PORT}@${DST_IP}/${DST_EHA} >>>>>>> ExecStop=/usr/sbin/modprobe -r netconsole >>>>> Ditto. >>>>> >>>>>>> >>>>>>> [Install] >>>>>>> WantedBy=multi-user.target >>>>> That's a really late... But I don't see a better place unfortunately. >>>>> >>>>>>> The original SysV netconsole service with related config - still in use, >>>>>>> https://git.fedorahosted.org/cgit/initscripts.git/plain/rc.d/init.d/netconsole >>>>>>> https://git.fedorahosted.org/cgit/initscripts.git/plain/sysconfig/netconsole >>>>>>> >>>>>>> Feel free to comment. >>>>> Looks like an improvement on status quo. >>>>> >>>>> Zbyszek >>>>> >>>> >>>> Shall we still leave something for users to configure. >>>> Thanks for your review. >>>> >>> >>> $ cat /usr/lib/systemd/system/netconsole-zbyszek.service >>> [Unit] >>> Description=Adds the netconsole module with the configured parameters >>> After=network.target >>> >>> [Service] >>> EnvironmentFile=/etc/sysconfig/netconsole-zbyszek >>> RemainAfterExit=yes >>> ExecStart=/sbin/modprobe netconsole netconsole=@/${SRC_DEV},@${DST_IP}/ >>> ExecStop=/sbin/modprobe -r netconsole >>> >>> [Install] >>> WantedBy=multi-user.target >>> >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>> >>> $ cat /etc/sysconfig/netconsole-zbyszek >>> # This is the EnvironmentFile for the netconsole service. Starting this >>> # service enables the capture of dmesg output on a destination machine. >>> >>> # Source network device >>> SRC_DEV=enp1s2 >>> >>> # Destination IP address >>> DST_IP=192.168.1.1 >>> >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>> >>> $ dmesg | grep netcon >>> [ 24.361611] netpoll: netconsole: local port 6665 >>> [ 24.361764] netpoll: netconsole: local IPv4 address 0.0.0.0 >>> [ 24.361893] netpoll: netconsole: interface 'enp1s2' >>> [ 24.362061] netpoll: netconsole: remote port 6666 >>> [ 24.362344] netpoll: netconsole: remote IPv4 address 192.168.1.1 >>> [ 24.362635] netpoll: netconsole: remote ethernet address >>> ff:ff:ff:ff:ff:ff >>> [ 24.362909] netpoll: netconsole: no IP address for enp1s2, aborting >>> [ 24.363186] netconsole: cleaning up >>> >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>> This turns out to be a bare minimum, i.e. >>> # modprobe netconsole netconsole=@/enp1s2,@192.168.1.1/ >>> but that is also squeeze breeze ... >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>> >>> $ cat /usr/lib/systemd/system/netconsole-poma.service >>> [Unit] >>> Description=Adds the netconsole module with the configured parameters >>> After=network.target >>> >>> [Service] >>> EnvironmentFile=/etc/sysconfig/netconsole-poma >>> RemainAfterExit=yes >>> ExecStart=/sbin/modprobe netconsole >>> netconsole=@${SRC_IP}/${SRC_DEV},@${DST_IP}/ >>> ExecStop=/sbin/modprobe -r netconsole >>> >>> [Install] >>> WantedBy=multi-user.target >>> >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>> >>> $ cat /etc/sysconfig/netconsole-poma >>> # This is the EnvironmentFile for the netconsole service. Starting this >>> # service enables the capture of dmesg output on a destination machine. >>> >>> # Source IP address >>> SRC_IP=192.168.1.2 >>> >>> # Source network device >>> SRC_DEV=enp1s2 >>> >>> # Destination IP address >>> DST_IP=192.168.1.1 >>> >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>> >>> $ dmesg | grep netcon >>> [ 23.156730] netpoll: netconsole: local port 6665 >>> [ 23.156735] netpoll: netconsole: local IPv4 address 192.168.1.2 >>> [ 23.156736] netpoll: netconsole: interface 'enp1s2' >>> [ 23.156737] netpoll: netconsole: remote port 6666 >>> [ 23.156738] netpoll: netconsole: remote IPv4 address 192.168.1.1 >>> [ 23.156739] netpoll: netconsole: remote ethernet address >>> ff:ff:ff:ff:ff:ff >>> [ 23.156742] netpoll: netconsole: device enp1s2 not up yet, forcing it >>> [ 25.539701] console [netcon0] enabled >>> [ 25.539720] netconsole: network logging started >>> >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>> And this turns out to be a true bare minimum, i.e. >>> # modprobe netconsole netconsole=@192.168.1.2/enp1s2,@192.168.1.1/ >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> >> This looks like a definitive improvement. >> >> Maybe one day we want to take things one step further and unify the >> logic for built-in and modular netconsole (the current way feels a bit >> odd). >> >> Cheers, >> >> Tom >> > > In fact, this method has long been known from the > Lm_sensors - Linux hardware monitoring > http://lm-sensors.org/browser/lm-sensors/trunk/prog/init/lm_sensors.service > [Unit] > Description=Initialize hardware monitoring sensors > > [Service] > EnvironmentFile=/etc/sysconfig/lm_sensors > Type=oneshot > RemainAfterExit=yes > ExecStart=-/sbin/modprobe -qab $BUS_MODULES $HWMON_MODULES > ExecStart=/usr/bin/sensors -s > ExecStop=-/sbin/modprobe -qabr $BUS_MODULES $HWMON_MODULES > > [Install] > WantedBy=multi-user.target >
Here is another beautiful example, $ cat /usr/lib/systemd/system/netconsole_ng.service [Unit] Description=Adds the netconsole module with the configured parameters After=network.target [Service] EnvironmentFile=/etc/netconsole_ng.conf RemainAfterExit=yes ExecStart=/usr/libexec/netconsole_ng/modprobe $MOD_PARM ${MOD_PARM}=@${SRC_IP}/${SRC_DEV},@${DST_IP}/ ExecStop=/usr/libexec/netconsole_ng/modprobe-r $MOD_PARM [Install] WantedBy=multi-user.target ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $ cat /etc/netconsole_ng.conf # This is the EnvironmentFile for the netconsole service. Starting this # service enables the capture of dmesg output on a destination machine. # Source IP address SRC_IP=192.168.1.2 # Source network device SRC_DEV=enp1s2 # Destination IP address DST_IP=192.168.1.1 # Module and parameter MOD_PARM=netconsole ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $ cat /usr/libexec/netconsole_ng/modprobe #!/bin/sh /sbin/modprobe -b $@ $ cat /usr/libexec/netconsole_ng/modprobe-r #!/bin/sh /sbin/modprobe -br $@ à la 'lm_sensors' ;) poma _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel