きっかけ
node.jsで新規で開発するプロジェクト
既存はv0.12.xだったのですがそろそろ新しい構文も使いたいし、いい加減にv4ぐらいには移行しとかないとなあ・・・と
で、手元のCentOS 6.xなマシンにnode.js v4をnvmでインストール
package.jsonはあるのでプロジェクトの依存パッケージをnpm install・・・したらコケた
iconvなどのネイティブコードを扱うモジュールのコンパイルが一部失敗していて、調べたらg++のバージョン古すぎる(C++11/14あたりをサポートしてない)というのが問題らしい
気になる現在のバージョンは
$ g++ -v
(略)
gcc version 4.4.7
・・・node.jsだけじゃなくC++も新しくしないとそろそろ苦しいな
とはいえCentOS6のホストにDockerなどでCentOS7ゲストはsystemd周りで別な地雷を踏みそう
じゃあこのマシンをまるっとCentOS7にしろっていうのももうしばらくは避けたい
Developer Toolset
RedHatも10年も続くRHELのサポート期間と開発関係のツールチェーンの進歩との整合性をとるべくSoftware Collectionsとビルド関連のDeveloper Toolsetをまとめてくれている
CentOSにもTru HuynhさんがDevtools-2をポーティングしてくれているのでありがたく使わせてもらうことにする
$ sudo wget http://people.centos.org/tru/devtools-2/devtools-2.repo
$ sudo yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++
さてインストールはできたものの、インストール先は
/opt/rh/devtoolset-2/root/usr/bin/gcc
/opt/rh/devtoolset-2/root/usr/bin/g++
でこのままだとパスが通ってない
$ scl enable devtoolset-2 bash
で一時的にパスを通して有効にする
$ g++ -v
(略)
gcc version 4.8.2 20140120 (Red Hat 4.8.2-15) (GCC)
この状態で npm install もつつがなく完了
もうこっちしか使わないよって場合は /opt/rh/devtoolset-2/enable を .bash_profile あたりに追加しておけばいいはず
私はこの構成にしたDockerイメージを作ってやりくりすることにした