[완료] rpm설치 / 소스설치 방법에 따라 에러발생거나 그렇지 않다면 그 원인은 어디서 찾을 수 있을까요?

pogusm의 이미지

CentOS-5.5-x86_64 시스템에서, httpd,php 등을 yum을 이용해 설치한 환경하에서
php의 확장모듈중 하나인 gnupg(# pecl install gnupg 으로 설치)가 부분적으로 segfault를 일으킵니다
제가 확인한바로는 gnupg 에서 ERROR_EXCEPTION이 발생할때, /var/log/httpd/error_log를 보면, httpd가 segfault를 일으킵니다..
(# php 해당소스.php 의 방법으로하면, ERROR_EXCEPTION이 발생할때도 segfault없이 정상적으로 작동)

pecl-gnupg 가 64bit환경에서 여러문제를 일으키는것 같습니다..

그런데, apache2, php 등을 소스설치한 상태에서
# pecl install gnupg 를 설치해주면, ERROR_EXCEPTION이 발생할때에도 segfault 없이 정상적인 작동을 보입니다..

http://pecl.php.net/package/gnupg 사이트에서도 2007년 이후로는 해당 패키지에 대한 업데이트가 이루어지지 않고 있어서 답답하네요... ㅠㅠ

역시나.. pecl-gnupg 자체가 64bit를 완벽히 지원하지 못해서 이런 문제들이 발생하는걸까요?

-----------------------------------------------------------------

# gdb /usr/sbin/httpd /tmp/core.22933
...
Reading symbols from /usr/lib64/php/modules/json.so...(no debugging
symbols found)...done.
Loaded symbols for /usr/lib64/php/modules/json.so
Reading symbols from /usr/lib64/php/modules/ldap.so...(no debugging
symbols found)...done.
Loaded symbols for /usr/lib64/php/modules/ldap.so
Reading symbols from /usr/lib64/php/modules/phar.so...(no debugging
symbols found)...done.
Loaded symbols for /usr/lib64/php/modules/phar.so
Reading symbols from /usr/lib64/php/modules/zip.so...(no debugging
symbols found)...done.
Loaded symbols for /usr/lib64/php/modules/zip.so
Core was generated by `/usr/sbin/httpd'.
Program terminated with signal 11, Segmentation fault.
#0 0x00002b2418264b23 in instanceof_function_ex () from
/etc/httpd/modules/libphp5.so
(gdb) bt
#0 0x00002b2418264b23 in instanceof_function_ex () from
/etc/httpd/modules/libphp5.so
#1 0x00002b2418264afb in instanceof_function () from
/etc/httpd/modules/libphp5.so
#2 0x00002b2418284959 in zend_throw_exception () from
/etc/httpd/modules/libphp5.so
#3 0x00002b2419f78091 in zif_gnupg_decrypt (ht=1,
return_value=0x2b242cc02918,
return_value_ptr=, this_ptr= out>,
return_value_used=) at
/root/t_download/gnupg-1.3.1/gnupg.c:1210
#4 0x00002b2419d42cf3 in xdebug_execute_internal
(current_execute_data=0x2b240cf75050,
return_value_used=1) at /var/tmp/xdebug/xdebug.c:1339
#5 0x00002b24182baa7d in ?? () from /etc/httpd/modules/libphp5.so
#6 0x00002b2418290d0b in execute () from /etc/httpd/modules/libphp5.so
#7 0x00002b2419d4296e in xdebug_execute (op_array=0x2b242cc01798) at
/var/tmp/xdebug/xdebug.c:1272
#8 0x00002b241826d325 in zend_execute_scripts () from
/etc/httpd/modules/libphp5.so
#9 0x00002b241821e208 in php_execute_script () from
/etc/httpd/modules/libphp5.so
#10 0x00002b24182f59ad in ?? () from /etc/httpd/modules/libphp5.so
#11 0x00002b240ce14a4a in ap_run_handler ()
#12 0x00002b240ce17ec2 in ap_invoke_handler ()
#13 0x00002b240ce22918 in ap_process_request ()
#14 0x00002b240ce1fb50 in ?? ()
#15 0x00002b240ce1bcb2 in ap_run_process_connection ()
#16 0x00002b240ce26769 in ?? ()
#17 0x00002b240ce269fa in ?? ()
#18 0x00002b240ce26ab0 in ?? ()
#19 0x00002b240ce2779b in ap_mpm_run ()
#20 0x00002b240ce01e48 in main ()
(gdb)

Reproduce code:
---------------

putenv('GNUPGHOME=/var/www/html/.gnupg');

$ciphertext="-----BEGIN PGP MESSAGE-----
Version: haneWIN JavascriptPG v2.0
hI8DsyTuUapgGVQQAAd9A/47cJAOKwa++fEfXKjFDsj1e01vZQVRqS4fCcLR
KbcHQe+L04vU2bRMycshlWXy/fWWkB0woK49Fto7GTi1zUvYj24TQvt/1Bev
xdcbBskJLO5tEPlZ7byV98ZJ7gL6rBs+rC4otG9UwDISVXzh6tqw43Q6c68i
JNxvy2y7MQQ0MqRxPSy5oIL/14OV2nhrgG+jIXfamlMNadZOQuD10/6G8zuo
svrkxLjFE9FtPQPXfn+S0hHWo5BRHtsJ21mkhxTnpsh0S0zM4Di1icQTQV2l
vMrlu+fSr+bEu1jD3vTgljGZTyTv8fsBa/RuNt+lu6Utk3Y=
=DULO
-----END PGP MESSAGE-----";

$gpg = new gnupg();

$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
//$gpg->seterrormode(gnupg::ERROR_WARNING);
//$gpg->seterrormode(gnupg::ERROR_SILENT);

try {
$gpg->adddecryptkey('keyname','password');
$plaintext = $gpg->decrypt($ciphertext);
echo $plaintext;
} catch (Exception $e) {
echo "Error : ".$e->getMessage();
}
?>

Expected result:
----------------
Error : get_key failed

Actual result:
--------------
# tail -n1 /var/log/httpd/error_log
[Thu Jul 15 03:43:19 2010] [notice] child pid 23330 exit signal
Segmentation fault (11)

academic의 이미지

아는 바가 없어서 너무 원론적인 얘기밖에 드리지 못하네요.

source rpm 을 받아서 컴파일 옵션을 비교해보시죠.

정 안되면 소스 컴파일할 때와 동일하게 컴파일 옵션 주고 설치하시던지요.

--
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

pogusm의 이미지

source rpm 으로 rpmbuild 해서 재설치는 시도해봤었는데..
source rpm 에 대한 컴파일 옵션도 확인/변경이 가능한건지는 지금에야 알았습니다.

구글링해봐야겠네요 ㅋ

조언 감사합니다~

ps. 그런데.. src.rpm 을 아래처럼 풀어보았는데..
# rpm -ivh php-5.1.6-27.el5.src.rpm
# tar xfvz php-5.1.6.tar.gz
소스rpm에서 기본으로 설정되어있는 configure 옵션은 어느 파일에 들어있는건가요??
찾아보고 있는데... 못찾겠네요... 혹시 아시면 리플부탁드립니다..

academic의 이미지

/usr/src/redhat/SPECS 디렉토리에 보면 php.spec 같은 파일이 있을 겁니다.

%build 항목 같은데 보면 configure 옵션이라든지 그런 게 있을 겁니다.

이걸 소스로 컴파일할 때랑 동일하게 해시죠.

--
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

pogusm의 이미지

파일내 ./configure 를 검색해 보니까 정말 있네요 ㅎㅎ

감사합니다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.