CentOS上でのBcryptのインストール

先の記事でCentOS 5.8にNode.jsをインストールし、MongoDBをUTF8対応しました。やっと環境が揃って、作ったアプリを確認していたらユーザ認証でNodeが落ちてしまいました。

/var/www/****/node_modules/bcrypt/node_modules/bindings/bindings.js:79
        throw e

どうやらbcryptモジュールでエラーになっているようです。gitでnode_modules以下も管理してしまったせいで、Mac上でコンパイルされたモジュールが原因のようです。
# npm packして、それを管理すれば良かったのかな

という事でbcryptをコンパイルし直しました。
一度node_modulesを削除して、npm installしましたが、node-gypが無いっぽいエラーが発生してしまいました。という事でインストールします。

$ npm install -g node-gyp
...
/root/nvm/v0.8.6/bin/node-gyp -> /root/nvm/v0.8.6/lib/node_modules/node-gyp/bin/node-gyp.js
node-gyp@0.6.7 /root/nvm/v0.8.6/lib/node_modules/node-gyp
├── graceful-fs@1.1.10
├── osenv@0.0.3
├── rimraf@2.0.2
├── mkdirp@0.3.3
├── request@2.9.203
├── which@1.0.5
├── semver@1.0.14
├── fstream@0.1.18 (inherits@1.0.0)
├── glob@3.1.12 (inherits@1.0.0)
├── nopt@2.0.0 (abbrev@1.0.3)
├── minimatch@0.2.6 (lru-cache@2.0.1)
├── npmlog@0.0.2 (ansi@0.1.2)
└── tar@0.1.13 (inherits@1.0.0, block-stream@0.0.6)

もう一度npm installしますが、またもやエラーになってしまいます。

> bcrypt@0.7.1 install /var/www/****/node_modules/bcrypt
> node-gyp rebuild

gyp ERR! configure error 
gyp ERR! stack Error: Command failed: Unknown option: --
gyp ERR! stack Unknown option: -e
gyp ERR! stack Unknown option: -r
gyp ERR! stack Unknown option: -s
gyp ERR! stack Unknown option: -o
gyp ERR! stack Unknown option: -n
gyp ERR! stack Unknown option: --
gyp ERR! stack usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
gyp ERR! stack Try `python -h' for more information.
gyp ERR! stack 
gyp ERR! stack     at ChildProcess.exithandler (child_process.js:536:15)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:91:17)
gyp ERR! stack     at maybeClose (child_process.js:634:16)
gyp ERR! stack     at Socket.ChildProcess.spawn.stdin (child_process.js:806:11)
gyp ERR! stack     at Socket.EventEmitter.emit (events.js:88:17)
gyp ERR! stack     at Socket._destroy.destroyed (net.js:356:10)
gyp ERR! stack     at process.startup.processNextTick.process._tickCallback (node.js:244:9)
gyp ERR! System Linux 2.6.18-308.1.1.el5
gyp ERR! command "node" "/root/nvm/v0.8.6/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /var/www/****/node_modules/bcrypt
gyp ERR! node -v v0.8.6
gyp ERR! node-gyp -v v0.6.3
gyp ERR! not ok 
npm ERR! bcrypt@0.7.1 install: `node-gyp rebuild`
npm ERR! `sh "-c" "node-gyp rebuild"` failed with 1
npm ERR! 
npm ERR! Failed at the bcrypt@0.7.1 install script.
npm ERR! This is most likely a problem with the bcrypt package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls bcrypt
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 2.6.18-308.1.1.el5
npm ERR! command "/root/nvm/v0.8.6/bin/node" "/root/nvm/v0.8.6/bin/npm" "install"
npm ERR! cwd /var/www/****
npm ERR! node -v v0.8.6
npm ERR! npm -v 1.1.48
npm ERR! code ELIFECYCLE
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /var/www/***/npm-debug.log
npm ERR! not ok code 0

そう言えば、pythonのバージョン違いをコンパイルしていたのを思い出して、こちらを使ってみました。

$ export PATH=/opt/python-2.7.3/bin:$PATH
$ npm install
npm WARN package.json application-name@0.0.1 No README.md file found!
npm http GET https://registry.npmjs.org/bcrypt
npm http 304 https://registry.npmjs.org/bcrypt
npm http GET https://registry.npmjs.org/bindings/1.0.0
npm http 304 https://registry.npmjs.org/bindings/1.0.0

> bcrypt@0.7.1 install /var/www/****/node_modules/bcrypt
> node-gyp rebuild

gyp http GET http://nodejs.org/dist/v0.8.6/node-v0.8.6.tar.gz
gyp http 200 http://nodejs.org/dist/v0.8.6/node-v0.8.6.tar.gz
make: Entering directory `/var/www/****/node_modules/bcrypt/build'
  CXX(target) Release/obj.target/bcrypt_lib/src/blowfish.o
  CXX(target) Release/obj.target/bcrypt_lib/src/bcrypt.o
  CXX(target) Release/obj.target/bcrypt_lib/src/bcrypt_node.o
  SOLINK_MODULE(target) Release/obj.target/bcrypt_lib.node
  SOLINK_MODULE(target) Release/obj.target/bcrypt_lib.node: Finished
  COPY Release/bcrypt_lib.node
make: Leaving directory `/var/www/****/node_modules/bcrypt/build'
bcrypt@0.7.1 node_modules/bcrypt
└── bindings@1.0.0

やっとインストールができました。

CentOS 5系は止めた方が良いのかもです。面倒ごとが多いです。