On 09/10/2010 10:33 AM, 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? :) Is there some reason to do something this complex instead of simply replacing /lib/rsyslog/ with /lib*/rsyslog/ on that one line? -- Peter Computers don't make errors. What they do, they do on purpose. -- Dale 01234567890123456789012345678901234567890123456789012345678901234567890123456789 -- 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