洛阳铲的日志

2010年04月21日

cfengine中的literal string和regext string

Filed under: Linux — 标签:, , , , — HackGou @ 15:24

这篇日志的起因是因为cfengine加了一项auto mount项,但是在/etc/auto_*的配置中却无法更新。

加上-v执行cfagent之后,得到一个提示:

resetting pointers to line 1
Edit: Search for \* -rw,vers=3,proto=tcp,sec=sys,rsize=32768,wsize=32768,timeo=600,actimeo=1200,retrans=2,nodev,hard,context=system_u:object_r:httpd_sys_content_t:s0 nss1.la.vclk.net:/vol/mezi_websites_beta/& failed. Current line still 1
LocateLineMatchingRegexp failed in /etc/auto_mezi_sites, aborting editing
End editing /etc/auto_mezi_sites

这个提示信息来自这段配置:

BeginGroupIfNoSuchLine “* -$(optsRWwebSe) nss1.la.vclk.net:/vol/mezi_websites_beta/&”
DefineInGroup “ReloadAutoFS”
ResetSearch “1”
DeleteLinesMatching “\*[ ].*”
AppendIfNoSuchLine “\* -$(optsRWwebSe) nss1.la.vclk.net:/vol/mezi_websites_beta/&”
EndGroup
ResetSearch “1”
LocateLineMatching “* -$(optsRWwebSe) nss1.la.vclk.net:/vol/mezi_websites_beta/&”
DeleteLinesAfterThisMatching “\*[ ].*”

上面这个配置,其实是为了增加下面这一行:

* -rw,vers=3,proto=tcp,sec=sys,rsize=32768,wsize=32768,timeo=600,actimeo=1200,retrans=2,nodev,hard,context=system_u:object_r:httpd_sys_content_t:s0 nss1.l
a.vclk.net:/vol/mezi_websites_beta/&

这对于把一大堆目录放到存储然后auto mount时经常使用的方法,比如把HOME放到存储上,这儿是把所有的beta环境放到存储上面

同时使用auto mount自动挂载。这一行里面的*就是问题的关键点

出现这个错误根本是因为在cfengine中,有的编辑命令接受的参数是正则表达式、有的接受literal string(我还没有看到有这个词的合适的翻译
暂且理解为:原意字符串,本身是什么就是什么,*代表的就是星号而非正则表达式中的任意个;.代表的就是符号而非正则表达式中的任意字符 )。

literal string的编辑命令不需要做任何转义,它执行的是严格的匹配;

regex string的编辑命令则执行的是基于正则表达式的编辑操作,任何元字符(.*^-?())都必须转义

上面涉及到的几个编辑指令按照这个标准可以这么分类:

BeginGroupIfNoSuchLine: literal string
DeleteLinesMatching: literal string
AppendIfNoSuchLine: literal string

LocateLineMatching: regex string
DeleteLinesAfterThisMatching: regex string

换句话说,红色的都有错误,Orz。

改成这样,按照上面的规则,修改如下

BeginGroupIfNoSuchLine “* -$(optsRWwebSe) nss1.la.vclk.net:/vol/mezi_websites_beta/&”
DefineInGroup “ReloadAutoFS”
ResetSearch “1”
DeleteLinesMatching “*[ ].*”
AppendIfNoSuchLine “* -$(optsRWwebSe) nss1.la.vclk.net:/vol/mezi_websites_beta/&”
EndGroup
ResetSearch “1”
LocateLineMatching “\* -$(optsRWwebSe) nss1.la.vclk.net:/vol/mezi_websites_beta/&”
DeleteLinesAfterThisMatching “\*[ ].*”

一切皆如想像

Del.icio.us : , , , ,

Powered by WordPress