Назад | Перейти на главную страницу

Ошибка «Недопустимая инструкция (дамп ядра)» при запуске агента Puppet (версия 3.2.1)

Я только что обновил марионетку до версии 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. Он может дать вам обратную трассировку, которая, по крайней мере, может легко указать вам, какой именно вызов функции библиотеки виноват.