Я только что обновил марионетку до версии 3.2.1, и при запуске агента я получаю сообщение об ошибке «Недопустимая инструкция (дамп ядра)». Вот некоторые подробности:
И мастер, и агент работают на одной машине
#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"
Однако, когда я запускаю марионеточный агент с той же версией на другом хосте, все идет нормально. Проблема возникает только при запуске агента на той же машине, что и мастер. Есть идеи, что происходит?
Решение было обновить glibc
. Видеть https://bugzilla.redhat.com/show_bug.cgi?id=752122
для подробностей
Если ваша установка Ruby и ее зависимые библиотеки не изменены, есть большая вероятность, что у вас есть библиотека в пути поиска библиотеки, которая конфликтует с версией, с которой был скомпилирован Ruby. Это действительно часто, если, например, вы создали библиотеку, такую как zlib или openssl, и поместили ее в /usr/local/lib
вместо того, чтобы помещать его в собственный префикс и устанавливать RPATH
/LD_LIBRARY_PATH
для программ, которые вам нужно скомпилировать против него.
Как правило, лучший способ диагностировать segfault - заставить ядро выгрузить файл ядра (см.: ulimit
и core_pattern
sysctl), затем запустите его через отладчик, например GDB. Он может дать вам обратную трассировку, которая, по крайней мере, может легко указать вам, какой именно вызов функции библиотеки виноват.