Re: [PATCH] 98syslog: try to dynamically check for rsyslog moddir

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 09/10/2010 04:33 PM, Andrey Borzenkov wrote:
On Friday 10 of September 2010 15:48:22 Harald Hoyer wrote:
On 09/08/2010 06:48 PM, Tomasz Paweł Gajc wrote:
Dnia 2010-09-08, o godz. 18:52:13

Andrey Borzenkov<arvidjaar@xxxxxxx>   napisał(a):
Thomas pointed out that default module path may not be correct
(Mandriva installs modules under architecture dependent path).
Unfortunately rsyslog does not seem to offer any way to query
for
default configuration values. Here is rather hack - try to load
non-existing module and fetch path from error message.

Example of error message from version 4.6.4:

rsyslogd: could not load module
'/lib64/rsyslog/_No_sUcH_MOduLe.so', dlopen:
/lib64/rsyslog/_No_sUcH_MOduLe.so: cannot open shared object
file: No such file or directory

Signed-off-by: Andrey Borzenkov<arvidjaar@xxxxxxx>

---

   modules.d/98syslog/install |   17 ++++++++++++++++-
   1 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/modules.d/98syslog/install
b/modules.d/98syslog/install index 1fd1b6f..e3d02bf 100755
--- a/modules.d/98syslog/install
+++ b/modules.d/98syslog/install
@@ -1,6 +1,21 @@

   #!/bin/sh
   if type -P rsyslogd>/dev/null; then

-
installs="rsyslogd /lib/rsyslog/lmnet.so /lib/rsyslog/imklog.so
/lib/rsyslog/imuxsock.so" +	# module path can be changed during
build and currently rsyslog
+	# does not provide any means to query for it. Use hack - try
to
+	# load non-existent module and look at error message
+	R_CONF=/tmp/dracut.rsyslog.conf.$$
+	R_ERR=/tmp/dracut.rsyslog.err.$$
+	R_MODDIR=
+	echo '$ModLoad _No_sUcH_MOduLe'>   $R_CONF
+	if [ -s $R_CONF ]; then
+		rsyslogd -N 1 -f $R_CONF 2>   $R_ERR>   /dev/null
+		R_MODDIR=$(grep ' could not load
module .*_No_sUcH_MOduLe' $R_ERR)
+		R_MODDIR=${R_MODDIR#*could not load module \'}
+		R_MODDIR=${R_MODDIR%\', *}
+		R_MODDIR=${R_MODDIR%/*}
+	fi
+	[ -n "$R_MODDIR" ] || R_MODDIR=/lib/rsyslog
+	installs="rsyslogd $R_MODDIR/lmnet.so $R_MODDIR/imklog.so
$R_MODDIR/imuxsock.so" elif type -P syslogd>/dev/null; then

       installs="syslogd"

   elif type -P syslog-ng>/dev/null; then

Indeed this patch is more precise than my simplified one ;)

ugly hack :-/ plus you want mktemp to prevent attacks..

Just to make sure - it was NAK? :)

NAK without mktemp... with mktemp, I am willing to accept the hackiness for the sake of portability :)
--
To unsubscribe from this list: send the line "unsubscribe initramfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux