pyenv で Python をインストールしようとしたら5時間ハマった話(/usr/include 配下のパーミッション問題だった)

結論

/usr/include 配下のディレクトリのパーミッションが全て 744 になっていたため、コンパイルが通らなかった。

対応策

以下のように愚直に対応し、正しくインストール(コンパイル)することができた。

$ sudo chmod 755 asm-generic && sudo chmod 755 caja-sendto && sudo chmod 755 btrfs && sudo chmod 755 X11 && sudo chmod 755 drm && sudo chmod 755 gstreamer-0.10 && sudo chmod 755 misc && sudo chmod 755 mtd && sudo chmod 755 openvpn && sudo chmod 755 python2.7 && sudo chmod 755 python3.5m && sudo chmod 755 rdma && sudo chmod 755 readline && sudo chmod 755 reglib && sudo chmod 755 ruby-2.3.0 && sudo chmod 755 scsi && sudo chmod 755 sound && sudo chmod 755 uapi && sudo chmod 755 video && sudo chmod 755 xen && sudo chmod 755 xfs && sudo chmod 755 xorg && sudo chmod 755 x86_64-linux-gnu && sudo chmod 755 linux
$ pyenv install 3.6.4
Downloading Python-3.6.4.tar.xz...
-> https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz
Installing Python-3.6.4...
Installed Python-3.6.4 to /home/your_name/.pyenv/versions/3.6.4

経緯

別マシンではスムーズに行えた pyenv による Python のインストールがコケた。エラーログを見て、スムーズにインストールできたマシンと比較したところ「結論」のような状況だと分かった。root で pyenv して試してみたら問題なかったことが決め手となった。

エラーメッセージ

エラーメッセージは以下のようなものでした。

configure: error: C compiler cannot create executables
cc1: fatal error: /usr/include/x86_64-linux-gnu/stdc-predef.h: Permission denied
configure: error: C preprocessor "/lib/cpp" fails sanity check
/usr/include/x86_64-linux-gnu/bits/local_lim.h:38:26: fatal error: /usr/include/linux/limits.h: Permission denied
Makefile:1587: ターゲット 'Parser/acceler.o' のレシピで失敗しました
make: *** [Parser/acceler.o] エラー 1
make: *** 未完了のジョブを待っています....
Makefile:1587: ターゲット 'Parser/listnode.o' のレシピで失敗しました
make: *** [Parser/listnode.o] エラー 1
Makefile:763: ターゲット 'Programs/python.o' のレシピで失敗しました
make: *** [Programs/python.o] エラー 1
Makefile:1587: ターゲット 'Parser/grammar1.o' のレシピで失敗しました
make: *** [Parser/grammar1.o] エラー 1
/usr/include/asm-generic/types.h: Permission denied

こうなった理由

わからない……。

今回 pyenv で起きたことではありますが、もちろんたまたま pyenv だっただけで pyenv に限って起こることではないです。

Powered by はてなブログ