kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

PPP3: Pythonのビルド(続き)

たまたまTwitterで、仮想マシンとホストの共有ディレクトリ上だと
ファイルI/Oが遅い、みたいな考えてみるとそりゃそうだね、って話を見て
自分もPythonのビルドを共有ディレクトリでやってたので
共有されてないところでやってみたら速い速い

テストもどんどん消化
どんどん・・・

$ make test
  :
== Tests result: SUCCESS ==

400 tests OK.

16 tests skipped:
    test_ctypes test_curses test_dbm_ndbm test_devpoll test_kqueue
    test_lzma test_msilib test_ossaudiodev test_startfile test_tix
    test_tk test_ttk_guionly test_winconsoleio test_winreg
    test_winsound test_zipfile64

Total duration: 7 min 10 sec
Tests result: SUCCESS

(共有ディレクトリ上でやってたときは34分かかってたから5倍!)

え、通ったの
なんなの
あんまり本筋とは関係ないと思ってたけど

しかし残念ながらこれでめでたしめでたしとはいかず
こんなメッセージが(実は書き忘れてたけど昨日も出てた)

f:id:kb84tkhr:20190420235625p:plain

regrtest.pyっていう名前からしリグレッションテストだろうから
これはmake testの結果の信頼性の根幹にかかわる

詳細を見てみるとSegmentation Faultが出ている
PythonでSegmentation Faultとは
これはヘッダが3.6.7用だからという疑惑をちょっと強化したかな

切り分け的にはまず3.6.7をビルドしてみるかなあ
それでだめだったら一度、本の通りにubuntu/xenial64で3.6.4を
ビルドしてみて何の問題もなく成功っていうのを体験してみる

あと、まっさらのOSから依存しているパッケージを入れずに
ビルドしてみるとどうなるかとかbento/ubuntu-16.04で
3.6.4をビルドしてみるとどうなるかもちょっと興味ある
あとは流れで

普通に入ってるPythonでもこの先進めるはずだからあまり
力を入れすぎないのがいいかなあ(すでに(略

では3.6.7でビルド
makeまでは問題なし
regrtest.pyの停止もなし
けど・・・

$ make test
  :
======================================================================
ERROR: test_find (ctypes.test.test_loading.LoaderTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/vagrant/pybuild/Python-3.6.7/Lib/ctypes/test/test_loading.py", line 47, in test_find
    cdll.LoadLibrary(lib)
  File "/home/vagrant/pybuild/Python-3.6.7/Lib/ctypes/__init__.py", line 426, in LoadLibrary
    return self._dlltype(name)
  File "/home/vagrant/pybuild/Python-3.6.7/Lib/ctypes/__init__.py", line 348, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: /usr/lib/x86_64-linux-gnu/VBoxOGLcrutil.so: undefined symbol: crypt_r

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

Ran 471 tests in 0.930s

FAILED (errors=1, skipped=88)
test test_ctypes failed
1 test failed again:
    test_ctypes

== Tests result: FAILURE then FAILURE ==

391 tests OK.

1 test failed:
    test_ctypes

15 tests skipped:
    test_curses test_dbm_ndbm test_devpoll test_kqueue test_lzma
    test_msilib test_ossaudiodev test_startfile test_tix test_tk
    test_ttk_guionly test_winconsoleio test_winreg test_winsound
    test_zipfile64

1 re-run test:
    test_ctypes

Total duration: 7 min 23 sec
Tests result: FAILURE then FAILURE
Makefile:1047: recipe for target 'test' failed
make: *** [test] Segmentation fault (コアダンプしました)

おしい!
1 test failed

しかし
“OSError: /usr/lib/x86_64-linux-gnu/VBoxOGLcrutil.so: undefined symbol: crypt_r”
っていうのはPythonのせいなのか
crypt_rがないっていう環境なのでは
ファイル名からしVirtualBoxのせいってこともありそう

たぶんこれだ
#18324 (Vbox guest additions: missing shared library dependency -> fixed after (not in) 6.0.4 and in test builds) – Oracle VM VirtualBox

VirtualBoxのGuest Additionsの依存関係が不足しているそうな
そしてテスト用のモジュールでは直っているという
まだ正式リリースされたものでは直ってないけどこうすると依存関係を直せるとのこと

sudo apt install patchelf
sudo patchelf --add-needed libcrypt.so.1 /opt/VBoxGuestAdditions-6.0.6/lib/VBoxOGLcrutil.so

やってみた
そういえばVirtualBoxの6.0.6が出てるよっていうの無視してたんで
6.0.4だけど、「6.0.6になっても直ってない」って書いてあったんで
問題ないだろう

で、make testだけやってみればいいのかなこの場合は
存在しなかったcrypt_rが存在するようになった、ってことだし
configureからやりなおそう
ねんのためmake cleanもしておこう
どうかな・・・

== Tests result: SUCCESS ==

392 tests OK.

15 tests skipped:
    test_curses test_dbm_ndbm test_devpoll test_kqueue test_lzma
    test_msilib test_ossaudiodev test_startfile test_tix test_tk
    test_ttk_guionly test_winconsoleio test_winreg test_winsound
    test_zipfile64

Total duration: 7 min 25 sec
Tests result: SUCCESS

できた!

skipされてていいのかはよくわからない
cursesとかtkとかやらなくていいの?
winナントカはいいと思うけど