From ff6077789ee6f265014617186a67e5a6099ee8fb Mon Sep 17 00:00:00 2001 From: Brendan Germain Date: Tue, 24 May 2016 15:37:30 -0400 Subject: [PATCH 1/6] correctly install rsyslog.conf template --- modules.d/98syslog/module-setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.d/98syslog/module-setup.sh b/modules.d/98syslog/module-setup.sh index 22bc497b..4458229b 100755 --- a/modules.d/98syslog/module-setup.sh +++ b/modules.d/98syslog/module-setup.sh @@ -34,7 +34,7 @@ install() { inst_simple "$moddir/rsyslogd-start.sh" /sbin/rsyslogd-start inst_simple "$moddir/rsyslogd-stop.sh" /sbin/rsyslogd-stop mkdir -m 0755 -p ${initdir}/etc/templates - inst_simple "${moddir}/rsyslog.conf" /etc/templates + inst_simple "${moddir}/rsyslog.conf" /etc/templates/rsyslog.conf fi dracut_need_initqueue } From 3568d947db73cbe0d8bf75e46b2dce8f7bb44f43 Mon Sep 17 00:00:00 2001 From: Brendan Germain Date: Wed, 25 May 2016 08:29:55 -0400 Subject: [PATCH 2/6] source dracut-lib for warn() --- modules.d/98syslog/rsyslogd-stop.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules.d/98syslog/rsyslogd-stop.sh b/modules.d/98syslog/rsyslogd-stop.sh index 010d56a5..52c8edf6 100755 --- a/modules.d/98syslog/rsyslogd-stop.sh +++ b/modules.d/98syslog/rsyslogd-stop.sh @@ -1,5 +1,7 @@ #!/bin/sh +type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + # Kills rsyslogd if [ -f /var/run/syslogd.pid ]; then @@ -8,4 +10,4 @@ if [ -f /var/run/syslogd.pid ]; then kill -0 $pid && kill -9 $pid else warn "rsyslogd-stop: Could not find a pid for rsyslogd. Won't kill it." -fi \ No newline at end of file +fi From 223547feab5eb85ee96e0e097b6172705803e260 Mon Sep 17 00:00:00 2001 From: Brendan Germain Date: Wed, 25 May 2016 13:25:09 -0400 Subject: [PATCH 3/6] move start from udev to initqueue/online --- modules.d/98syslog/module-setup.sh | 3 +-- modules.d/98syslog/parse-syslog-opts.sh | 22 +++++++++++++++++- modules.d/98syslog/rsyslogd-start.sh | 21 ++++++++++++----- modules.d/98syslog/syslog-genrules.sh | 30 ------------------------- 4 files changed, 37 insertions(+), 39 deletions(-) delete mode 100755 modules.d/98syslog/syslog-genrules.sh diff --git a/modules.d/98syslog/module-setup.sh b/modules.d/98syslog/module-setup.sh index 4458229b..e18aecbc 100755 --- a/modules.d/98syslog/module-setup.sh +++ b/modules.d/98syslog/module-setup.sh @@ -29,9 +29,8 @@ install() { if [ -n "$_installs" ]; then inst_multiple cat $_installs inst_hook cmdline 90 "$moddir/parse-syslog-opts.sh" - inst_hook pre-udev 61 "$moddir/syslog-genrules.sh" inst_hook cleanup 99 "$moddir/syslog-cleanup.sh" - inst_simple "$moddir/rsyslogd-start.sh" /sbin/rsyslogd-start + inst_hook initqueue/online 70 "$moddir/rsyslogd-start.sh" inst_simple "$moddir/rsyslogd-stop.sh" /sbin/rsyslogd-stop mkdir -m 0755 -p ${initdir}/etc/templates inst_simple "${moddir}/rsyslog.conf" /etc/templates/rsyslog.conf diff --git a/modules.d/98syslog/parse-syslog-opts.sh b/modules.d/98syslog/parse-syslog-opts.sh index 39432588..50ec2759 100755 --- a/modules.d/98syslog/parse-syslog-opts.sh +++ b/modules.d/98syslog/parse-syslog-opts.sh @@ -9,10 +9,30 @@ # Don't auto detect syslog but set it type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh +detect_syslog() { + syslogtype="" + if [ -e /sbin/rsyslogd ]; then + syslogtype="rsyslogd" + elif [ -e /sbin/syslogd ]; then + syslogtype="syslogd" + elif [ /sbin/syslog-ng ]; then + syslogtype="syslog-ng" + else + warn "Could not find any syslog binary although the syslogmodule is selected to be installed. Please check." + fi + echo "$syslogtype" + [ -n "$syslogtype" ] +} + syslogserver=$(getarg syslog.server -d syslog) syslogfilters=$(getargs syslog.filter -d filter) syslogtype=$(getarg syslog.type -d syslogtype) [ -n "$syslogserver" ] && echo $syslogserver > /tmp/syslog.server [ -n "$syslogfilters" ] && echo "$syslogfilters" > /tmp/syslog.filters -[ -n "$syslogtype" ] && echo "$syslogtype" > /tmp/syslog.type +if [ -n "$syslogtype" ]; then + echo "$syslogtype" > /tmp/syslog.type +else + syslogtype=$(detect_syslog) + echo $syslogtype > /tmp/syslog.type +fi diff --git a/modules.d/98syslog/rsyslogd-start.sh b/modules.d/98syslog/rsyslogd-start.sh index c08e6675..25dfb16d 100755 --- a/modules.d/98syslog/rsyslogd-start.sh +++ b/modules.d/98syslog/rsyslogd-start.sh @@ -1,9 +1,15 @@ #!/bin/sh -# Triggered by udev and starts rsyslogd with bootparameters +# Triggered by initqueue/online and starts rsyslogd with bootparameters type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh +# prevent starting again if already running +if [ -f /var/run/syslogd.pid ]; then + read pid < /var/run/syslogd.pid + kill -0 $pid && exit 0 +fi + rsyslog_config() { local server=$1 shift @@ -17,17 +23,20 @@ rsyslog_config() { for filter in $filters; do echo "${filter} @${server}" done -# echo "*.* /tmp/syslog" + #echo "*.* /tmp/syslog" } +read type < /tmp/syslog.type read server < /tmp/syslog.server read filters < /tmp/syslog.filters [ -z "$filters" ] && filters="kern.*" read conf < /tmp/syslog.conf [ -z "$conf" ] && conf="/etc/rsyslog.conf" && echo "$conf" > /tmp/syslog.conf -template=/etc/templates/rsyslog.conf -if [ -n "$server" ]; then - rsyslog_config "$server" "$template" "$filters" > $conf - rsyslogd -c3 +if [ $type == "rsyslogd" ]; then + template=/etc/templates/rsyslog.conf + if [ -n "$server" ]; then + rsyslog_config "$server" "$template" "$filters" > $conf + rsyslogd -c3 + fi fi diff --git a/modules.d/98syslog/syslog-genrules.sh b/modules.d/98syslog/syslog-genrules.sh deleted file mode 100755 index 072bdea0..00000000 --- a/modules.d/98syslog/syslog-genrules.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh - -# Creates the syslog udev rules to be triggered when interface becomes online. -type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh - -detect_syslog() { - syslogtype="" - if [ -e /sbin/rsyslogd ]; then - syslogtype="rsyslogd" - elif [ -e /sbin/syslogd ]; then - syslogtype="syslogd" - elif [ /sbin/syslog-ng ]; then - syslogtype="syslog-ng" - else - warn "Could not find any syslog binary although the syslogmodule is selected to be installed. Please check." - fi - echo "$syslogtype" - [ -n "$syslogtype" ] -} - -read syslogtype < /tmp/syslog.type -if [ -z "$syslogtype" ]; then - syslogtype=$(detect_syslog) - echo $syslogtype > /tmp/syslog.type -fi -if [ -e "/sbin/${syslogtype}-start" ]; then - printf 'ACTION=="online", SUBSYSTEM=="net", RUN+="/sbin/initqueue --onetime /sbin/'${syslogtype}'-start $env{INTERFACE}"\n' > /etc/udev/rules.d/70-syslog.rules -else - warn "syslog-genrules: Could not find binary to start syslog of type \"$syslogtype\". Syslog will not be started." -fi From b37b141ecc9588bc5b29a8474943ec603b1f3ba4 Mon Sep 17 00:00:00 2001 From: Brendan Germain Date: Wed, 25 May 2016 15:40:02 -0400 Subject: [PATCH 4/6] fixup No such file or directory errors when module is not configured --- modules.d/98syslog/rsyslogd-start.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules.d/98syslog/rsyslogd-start.sh b/modules.d/98syslog/rsyslogd-start.sh index 25dfb16d..08b6fb24 100755 --- a/modules.d/98syslog/rsyslogd-start.sh +++ b/modules.d/98syslog/rsyslogd-start.sh @@ -26,11 +26,11 @@ rsyslog_config() { #echo "*.* /tmp/syslog" } -read type < /tmp/syslog.type -read server < /tmp/syslog.server -read filters < /tmp/syslog.filters +[ -f /tmp/syslog.type ] && read type < /tmp/syslog.type +[ -f /tmp/syslog.server ] && read server < /tmp/syslog.server +[ -f /tmp/syslog.filters ] && read filters < /tmp/syslog.filters [ -z "$filters" ] && filters="kern.*" -read conf < /tmp/syslog.conf +[ -f /tmp/syslog.conf ] && read conf < /tmp/syslog.conf [ -z "$conf" ] && conf="/etc/rsyslog.conf" && echo "$conf" > /tmp/syslog.conf if [ $type == "rsyslogd" ]; then From 1d9d43713db58f6aafab6c0692fc2ebb9a26b4c7 Mon Sep 17 00:00:00 2001 From: Brendan Germain Date: Wed, 25 May 2016 16:11:11 -0400 Subject: [PATCH 5/6] subshell and set -f to prevent expansion --- modules.d/98syslog/rsyslogd-start.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/modules.d/98syslog/rsyslogd-start.sh b/modules.d/98syslog/rsyslogd-start.sh index 08b6fb24..c64f2121 100755 --- a/modules.d/98syslog/rsyslogd-start.sh +++ b/modules.d/98syslog/rsyslogd-start.sh @@ -20,9 +20,14 @@ rsyslog_config() { cat $syslog_template - for filter in $filters; do - echo "${filter} @${server}" - done + ( + # disable shell expansion / globbing + # since filters contain such characters + set -f + for filter in $filters; do + echo "${filter} @${server}" + done + ) #echo "*.* /tmp/syslog" } From a1ea214a874514401c318551b93c9ae06be1747d Mon Sep 17 00:00:00 2001 From: Brendan Germain Date: Mon, 19 Sep 2016 13:41:32 -0400 Subject: [PATCH 6/6] add imjournal.so to read systemd journal --- modules.d/98syslog/module-setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.d/98syslog/module-setup.sh b/modules.d/98syslog/module-setup.sh index e18aecbc..aa0c8eaf 100755 --- a/modules.d/98syslog/module-setup.sh +++ b/modules.d/98syslog/module-setup.sh @@ -17,7 +17,7 @@ install() { local _installs if type -P rsyslogd >/dev/null; then _installs="rsyslogd" - inst_libdir_file rsyslog/lmnet.so rsyslog/imklog.so rsyslog/imuxsock.so + inst_libdir_file rsyslog/lmnet.so rsyslog/imklog.so rsyslog/imuxsock.so rsyslog/imjournal.so elif type -P syslogd >/dev/null; then _installs="syslogd" elif type -P syslog-ng >/dev/null; then