![运行 Puppet 代理(版本 3.2.1)时出现错误“非法指令(核心转储)”](https://linux22.com/image/612374/%E8%BF%90%E8%A1%8C%20Puppet%20%E4%BB%A3%E7%90%86%EF%BC%88%E7%89%88%E6%9C%AC%203.2.1%EF%BC%89%E6%97%B6%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF%E2%80%9C%E9%9D%9E%E6%B3%95%E6%8C%87%E4%BB%A4%EF%BC%88%E6%A0%B8%E5%BF%83%E8%BD%AC%E5%82%A8%EF%BC%89%E2%80%9D.png)
我刚刚将 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 等调试器运行它。它可以为您提供回溯,如果没有其他方法,它可以很容易地指出到底是哪个库的函数调用导致了错误。