我刚刚将 puppet 升级到 3.2.1 版本,在运行代理时,出现错误“非法指令(核心转储)”。以下是一些详细信息:
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 代理时,一切正常。问题仅在与主服务器相同的机器上运行代理时出现。知道发生了什么吗?
答案1
解决方案是升级glibc
。https://bugzilla.redhat.com/show_bug.cgi?id=752122
详情请参阅
答案2
如果您的 Ruby 安装及其依赖库未经过修改,则很有可能库搜索路径中的库与 Ruby 编译所针对的版本相冲突。例如,如果您构建了一个库(如 zlib 或 openssl),并将其放入而/usr/local/lib
不是将其放入自定义前缀中并为需要针对其编译的程序设置RPATH
/ ,这种情况很常见LD_LIBRARY_PATH
。
一般来说,诊断段错误的最佳方法是让内核转储核心文件(参见:ulimit
和core_pattern
sysctl),然后通过 GDB 等调试器运行它。它可以为您提供回溯,如果没有其他方法,它可以很容易地指出到底是哪个库的函数调用导致了错误。