运行Puppet代理(版本3.2.1)时出错“非法指令(核心转储)”

我刚把puppet升级到3.2.1版本,运行代理的时候出现“Illegal instruction(core dumped)”错误。 以下是一些细节:

master和agent都在同一台机器上运行

#cat /etc/redhat-release CentOS release 6.2 (Final) #uname -r 3.9.3-x86_64-linode33 #ruby --version ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux] 

安装的RPM是"puppet-3.2.1-1.el6.noarch.rpm"

但是,当我在另一台主机上运行相同版本的puppet agent时,一切都很顺利。 问题只是在与主服务器在同一台机器上运行代理程序时。 任何想法是怎么回事?

解决scheme是升级glibc 。 有关详细信息,请参阅https://bugzilla.redhat.com/show_bug.cgi?id=752122

如果您的Ruby安装及其相关库未经修改,那么很有可能您的库searchpath中有一个与Ruby编译版本相冲突的库。 例如,如果您已经构build了诸如zlib或openssl之类的库并将其放到/usr/local/lib而不是将其放入自定义前缀中,并为需要编译的程序设置RPATH / LD_LIBRARY_PATH它。

通常,诊断段错误的最好方法是让内核转储一个核心文件(参见: ulimitcore_pattern sysctl),然后通过像GDB这样的debugging器来运行它。 它可以给你一个回溯,如果没有别的,可以很容易地指出你究竟是哪个库的函数调用是责备。