moguriso@balthazar:~/$ gbs Segmentation fault
そもそも、gbsはpythonスクリプトでしか無いハズなのに何故にSeg落ちなのか。Seg落ちという事はpythonインタプリタそのものがお亡くなりになっているということですがなんでやねん、と。。
というわけで、pythonのデバッガ pdb とやらで追っかけようとする。
moguriso@balthazar:~/$ python -m pdb /usr/bin/gbs > /usr/bin/gbs(19)<module>() -> """Gbs - commandline tool for Tizen developers. Main module."""
n:next、s:step、r:runでゴリゴリ追っかけてみるものの
(Pdb) s > /usr/bin/gbs(21)<module>() -> import sys (Pdb) s > /usr/bin/gbs(22)<module>() -> import os (Pdb) s > /usr/bin/gbs(24)<module>() -> from argparse import ArgumentParser (Pdb) s --Call-- > /usr/lib64/python2.7/argparse.py(62)<module>() -> """
pythonわからないので意味不明。。。仕方ないのでgdbでpythonごとデバッグする
moguriso@balthazar:~/$ gdb python ~(略)~ (gdb) r /usr/bin/gbs Starting program: /usr/bin/python /usr/bin/gbs Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2 ~(略)~ Program received signal SIGSEGV, Segmentation fault. 0x00007ffff3ad7290 in initpycurl () from /usr/lib64/python2.7/site-packages/pycurl.so
btの結果が
(gdb) bt #0 0x00007ffff3ad7290 in initpycurl () from /usr/lib64/python2.7/site-packages/pycurl.so #1 0x00007ffff7b2ca16 in _PyImport_LoadDynamicModule () from /usr/lib64/libpython2.7.so.1.0 #2 0x00007ffff7af8f1d in ?? () from /usr/lib64/libpython2.7.so.1.0 #3 0x00007ffff7af9269 in ?? () from /usr/lib64/libpython2.7.so.1.0 #4 0x00007ffff7af9564 in ?? () from /usr/lib64/libpython2.7.so.1.0 #5 0x00007ffff7af9b2a in PyImport_ImportModuleLevel () from /usr/lib64/libpython2.7.so.1.0 ~(略)~ #39 0x00007ffff7b3b1fd in Py_Main () from /usr/lib64/libpython2.7.so.1.0 #40 0x00007ffff7494a15 in __libc_start_main () from /lib64/libc.so.6 #41 0x0000000000400791 in _start ()
というわけで、pythonからcurlを呼び出すラッパーライブラリらしきもので引っかかっているらしい。gbsのコマンドライブラリは↓にまとめられていて
moguriso@balthazar:/usr/lib/python2.7/site-packages/gitbuildsys$ ls
__init__.py cmd_chroot.pyc cmd_export.py cmd_remotebuild.pyc log.py safe_url.pyc
__init__.pyc cmd_clone.py cmd_export.pyc cmd_submit.py log.pyc utils.py
cmd_build.py cmd_clone.pyc cmd_import.py cmd_submit.pyc oscapi.py utils.pyc
cmd_build.pyc cmd_createimage.py cmd_import.pyc conf.py
gbsが該当のスクリプトを読んでいる部分はutil.pyの↓の辺り
186 class URLGrabber(object): 187 '''grab an url and save to local file''' 188 189 def __init__(self, connect_timeout=30): 190 '''create Curl object and set one-time options''' 191 curl = pycurl.Curl() 192 curl.setopt(pycurl.FAILONERROR, True) 193 curl.setopt(pycurl.FOLLOWLOCATION, True) 194 curl.setopt(pycurl.SSL_VERIFYPEER, False) 195 curl.setopt(pycurl.SSL_VERIFYHOST, False) 196 curl.setopt(pycurl.CONNECTTIMEOUT, connect_timeout)
この__init__時点で既に吹っ飛んでる模様。ここの、SSLをゴニョゴニョしてる辺りが、実はlibsslの更新に追従してないんじゃないかと勝手に辺りを付けて、gitから最新のpycurlを取ってきて入れなおしたら動く様になりました。
手順は↓の感じ
moguriso@balthazar:~/$ git clone https://github.com/pycurl/pycurl cd pycurl make sudo make install
で、gbsが落ちずに動く様になりました。zypper upしても更新無いっぽいので、SuSEのrepoではマダ治ってないんだろうか・・・*1
個人的には動けば良いのでどうでもいいですが、本来の手順としては、いいのかどうかは知りません、、、
*1:あまり興味ありません...