tkuchikiの日記

Linux やプログラミングについて書きます。

CentOS 5 で node.js をソースからビルドすると npm でエラーがでる

CentOS 5 で nodejs をビルドしたら npm install で、

node: /lib64/libc.so.6: version `GLIBC_2.9' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.6' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.7' not found (required by node)

というエラーが。
調べてみると node.jsインストール - ngtokuの日記 などのページが見つかった。
python のバージョンを上げれば何とかなりそう。
epel repo に python26 という package があるようなので、

yum install python26

でインストール。
これだけだと system python と同居する形になるので、

alias python=python26

で 2.6 を向くようにする。
./configure してみたら以下のようなエラーが。

./configure
File "./configure", line 355
    1 if options.unsafe_optimizations else 0)
       ^
SyntaxError: invalid syntax

if xxx else yyy のような記述は、python 2.5 からだそうで、
python26 を参照できていない模様。
alias はったのに。。。

configure を見てみると、

#!/usr/bin/env python -V

が。
これって、env 経由だと alias 効かないんじゃないかと思って、
同じように実行してみたところ、案の定 Python 2.4.3 と表示された。

ならば直接 python26 を使うようにすればいいのでは?ということで、
configure の 1行目を、

- #!/usr/bin/env python
+ #!/usr/bin/env python26

と書き換えて、実行してみたところ、

./configure --prefix=/usr/local/node-v0.8.15-linux-x64/
{ 'target_defaults': { 'cflags': [],
                       'default_configuration': 'Release',
                       'defines': [],
                       'include_dirs': [],
                       'libraries': []},
  'variables': { 'clang': 0,
                 'gcc_version': 41,
                 'host_arch': 'x64',
                 'node_install_npm': 'true',
                 'node_install_waf': 'true',
                 'node_prefix': '/usr/local/node-v0.8.15-linux-x64/',
                 'node_shared_openssl': 'false',
                 'node_shared_v8': 'false',
                 'node_shared_zlib': 'false',
                 'node_unsafe_optimizations': 0,
                 'node_use_dtrace': 'false',
                 'node_use_etw': 'false',
                 'node_use_openssl': 'true',
                 'target_arch': 'x64',
                 'v8_no_strict_aliasing': 1,
                 'v8_use_snapshot': 'true'}}
creating  ./config.gypi
creating  ./config.mk

できた!

make

も通った!
しかし、

make install 
make -C out BUILDTYPE=Release V=1
make[1]: Entering directory `/tmp/node-v0.8.15/out'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/tmp/node-v0.8.15/out'
ln -fs out/Release/node node
python tools/install.py install
  File "tools/install.py", line 219    cmd = args[1] if len(args) > 1 else 'install'                   ^SyntaxError: invalid syntax
make: *** [install] Error 1

は通らなかった。
今度も python のバージョンを指定できるといいなーと思いつつ、
Makefile を見てみるとそれっぽい記述が。
以下のように編集する。

# Makefile
- PYTHON ?= python
+ PYTHON ?= python26

これで make install したらインストールできた!

ファイルを修正してバージョンを指定したので、
alias 意味ないかなーと思ったけど、alias 貼らないでもう一回やり直したらnpm でエラーがでた。
どこかで効力を発揮している模様。