node-iconvのインストールで若干詰まったメモ


過去にNode.jsでメールを取得する記事を書きましたが、

> [Node.jsで社内日報メールを取得してFacebookページに自動投稿する仕組みを実装したので解説します。](http://liginc.co.jp/web/service/facebook/153850) 

久々にやろうとしてnode-iconvのインストールでこけたのでメモ。(前にどっかで書いてるかも。。。?)

> https://github.com/bnoordhuis/node-iconv

## 環境
- CentOS 7系
- Node.js v4.1.2

## 流れと解決

```bash
$ npm i --save iconv
```

こんな感じのエラーログが出ました。

```bash
npm WARN package.json mail@1.0.0 No description
npm WARN package.json mail@1.0.0 No repository field.
npm WARN package.json mail@1.0.0 No README data
|
> iconv@2.1.11 install /root/mail/node_modules/iconv
> node-gyp rebuild

make: ディレクトリ `/root/mail/node_modules/iconv/build' に入ります
  CC(target) Release/obj.target/libiconv/deps/libiconv/lib/iconv.o
make: cc: コマンドが見つかりませんでした
make: *** [Release/obj.target/libiconv/deps/libiconv/lib/iconv.o] エラー 127
make: ディレクトリ `/root/mail/node_modules/iconv/build' から出ます
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/root/.nvm/versions/node/v4.1.2/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:270:23)
gyp ERR! stack     at emitTwo (events.js:87:13)
gyp ERR! stack     at ChildProcess.emit (events.js:172:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 3.10.0-229.el7.x86_64
gyp ERR! command "/root/.nvm/versions/node/v4.1.2/bin/node" "/root/.nvm/versions/node/v4.1.2/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /root/mail/node_modules/iconv
gyp ERR! node -v v4.1.2
gyp ERR! node-gyp -v v3.0.3
gyp ERR! not ok
npm ERR! Linux 3.10.0-229.el7.x86_64
npm ERR! argv "/root/.nvm/versions/node/v4.1.2/bin/node" "/root/.nvm/versions/node/v4.1.2/bin/npm" "i" "--save" "iconv"
npm ERR! node v4.1.2
npm ERR! npm  v2.14.4
npm ERR! code ELIFECYCLE

npm ERR! iconv@2.1.11 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the iconv@2.1.11 install script 'node-gyp rebuild'.
npm ERR! This is most likely a problem with the iconv 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 iconv
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /root/mail/npm-debug.log
```

`cc: コマンドが見つかりませんでした`って書いてるところがポイントっぽいですね。
[この辺](https://github.com/bnoordhuis/node-iconv/tree/master/deps/libiconv/lib)覗くと、node-iconvは内部がCで書かれてるっぽいですね、`cc`や`gcc`といったコンパイラが無いからうまくビルドでき無いみたいです。

yumでgccをインストールしましょう。

```bash
$ yum install gcc
```

再チャレンジ

```bash
$ npm i --save iconv
npm WARN package.json mail@1.0.0 No description
npm WARN package.json mail@1.0.0 No repository field.
npm WARN package.json mail@1.0.0 No README data
/
> iconv@2.1.11 install /root/mail/node_modules/iconv
> node-gyp rebuild

make: ディレクトリ `/root/mail/node_modules/iconv/build' に入ります
  CC(target) Release/obj.target/libiconv/deps/libiconv/lib/iconv.o
  AR(target) Release/obj.target/iconv.a
  COPY Release/iconv.a
  CXX(target) Release/obj.target/iconv/src/binding.o
make: g++: コマンドが見つかりませんでした
make: *** [Release/obj.target/iconv/src/binding.o] エラー 127
make: ディレクトリ `/root/mail/node_modules/iconv/build' から出ます
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/root/.nvm/versions/node/v4.1.2/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:270:23)
gyp ERR! stack     at emitTwo (events.js:87:13)
gyp ERR! stack     at ChildProcess.emit (events.js:172:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 3.10.0-229.el7.x86_64
gyp ERR! command "/root/.nvm/versions/node/v4.1.2/bin/node" "/root/.nvm/versions/node/v4.1.2/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /root/mail/node_modules/iconv
gyp ERR! node -v v4.1.2
gyp ERR! node-gyp -v v3.0.3
gyp ERR! not ok
npm ERR! Linux 3.10.0-229.el7.x86_64
npm ERR! argv "/root/.nvm/versions/node/v4.1.2/bin/node" "/root/.nvm/versions/node/v4.1.2/bin/npm" "i" "--save" "iconv"
npm ERR! node v4.1.2
npm ERR! npm  v2.14.4
npm ERR! code ELIFECYCLE

npm ERR! iconv@2.1.11 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the iconv@2.1.11 install script 'node-gyp rebuild'.
npm ERR! This is most likely a problem with the iconv 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 iconv
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /root/mail/npm-debug.log
```

`make: g++: コマンドが見つかりませんでした`って出ました。

[g++をCentOSへインストールする](http://kaworu.jpn.org/cpp/g++%E3%82%92CentOS%E3%81%B8%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B)

`g++`コマンドが無いらしいのでインストールします。

```bash
$ yum -y install gcc-c++
```

これで`g++`が使えるようになったので再度チャレンジ

```bash
$ npm i --save iconv
npm WARN package.json mail@1.0.0 No description
npm WARN package.json mail@1.0.0 No repository field.
npm WARN package.json mail@1.0.0 No README data
-
> iconv@2.1.11 install /root/mail/node_modules/iconv
> node-gyp rebuild

make: ディレクトリ `/root/mail/node_modules/iconv/build' に入ります
  CC(target) Release/obj.target/libiconv/deps/libiconv/lib/iconv.o
  AR(target) Release/obj.target/iconv.a
  COPY Release/iconv.a
  CXX(target) Release/obj.target/iconv/src/binding.o
  SOLINK_MODULE(target) Release/obj.target/iconv.node
  COPY Release/iconv.node
make: ディレクトリ `/root/mail/node_modules/iconv/build' から出ます
iconv@2.1.11 node_modules/iconv
└── nan@2.0.9
```

これでうまくインストールされました。

お疲れ様です！