[JavaScript, Database, Linux] Getting a C++11 compiler for Node 4, 5 and 6 on Oracle Linux 6

原文はこちら。
https://blogs.oracle.com/opal/entry/getting_a_c_11_compatible

Node.js 4以後でnode-oracledbのようなadd-onを使う場合、Oracle Linux 6ではより新しいコンパイラが必要です。
node-oracledb
https://www.npmjs.com/package/oracledb
これは、Node.js 4以後のadd-onではC++11互換のコンパイラを使ってビルドする必要があるためです。
#if NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION && !NAN_HAS_CPLUSPLUS_11
https://github.com/nodejs/nan/blob/v2.2.1/nan.h#L40
Oracle Linux 6のデフォルトコンパイラではC++11互換をサポートしていません。Oracle Linux 7ではC++11互換をサポートしていますので、以下の手順はOracle Linux 7では実施する必要はありません。
Software Collection Library (SCL)から入手するのが最も簡単に新しいコンパイラを入手する一番簡単な方法です。
Software Collection Library (SCL)
http://yum.oracle.com/repo/OracleLinux/OL6/SoftwareCollections12/x86_64/index.html
Software Collectionをyumチャネルで有効化し、yum installを実行すると、コンパイラがすぐに利用可能になります。SCLの設定、手順などは以下のドキュメントに記載があります。
Software Collection Library 1.2 for Oracle® Linux Release Notes
Installing the Software Collection Library Utility from Oracle Public Yum
https://docs.oracle.com/cd/E37670_01/E59096/html/section_e3v_nbl_cr.html
以下は、node-oracledbをOracle Linux 6上で動作するNode.js 4以後にインストールする方法です。

Enabling the Software Collection Library

yum.oracle.com(以前はpublic-yum.oracle.comとしても知られていました)をお使いの場合、/etc/yum.repos.d/public-yum-ol6.repoを編集し、ol6_software_collectionsチャネルを有効化する必要があります。
Oracle Linux Yum Server
http://yum.oracle.com/
[ol6_software_collections]
  name=Software Collection Library release 1.2 packages for Oracle Linux 6 (x86_64)
  baseurl=http://yum.oracle.com/repo/OracleLinux/OL6/SoftwareCollections12/x86_64/
  gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
  gpgcheck=1
  enabled=1
必要であれば、http://yum.oracle.com/public-yum-ol6.repo から最新のチャネルリストを取得し、アップデートを既存の /etc/yum.repos.d/public-yum-ol6.repo ファイルにマージすることもできます。
その他の方法として、ULN(Unbreakable Linux Network)サポート・サブスクリプションをお持ちであれば、linux.oracle.comの「Manage Subscription 」ページにあるOracle Software Collections 1.2 for Oracle Linux 6 チャネルをサブスクライブすることができます。

Installing the Updated Compiler

チャネルを有効化したら、以下のコマンドでアップデートされたコンパイラをインストールします。
yum install scl-utils devtoolset-3
このコマンドにより、完全な、更新されたツールセットを構成する数多くのパッケージがインストールされます。

Installing node-oracledb

Node.js 4以後へのnode-oracledbのインストール手順は以下のインストール手順と変わりありませんが、新しいコンパイラを使う必要があります。
Installing node-oracledb
https://github.com/oracle/node-oracledb/blob/master/INSTALL.md
Oracle Linuxのドキュメントに開発ツールセットを有効化する様々な方法が記載されています。
Software Collection Library 1.2 for Oracle® Linux Release Notes
Using the Software Collection Version of a Command
https://docs.oracle.com/cd/E37670_01/E59096/html/section_ksc_t2f_dq.html
まとめると、Oracle Linux 6とNode.js 4以後の組合せでnode-oracledbをインストールするためには、まずInstant ClientのようなOracleクライアントをインストールする必要があります。
Instant Client Downloads for Linux x86-64
http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
Instant Client RPMパッケージ以外のものがある場合、ライブラリやヘッダファイルの在処をインストーラに伝える必要があります。以下はその例です。
export OCI_LIB_DIR=$HOME/instantclient
export OCI_INC_DIR=$HOME/instantclient/sdk/include
ファイアウォールで守られている場合には、プロキシサーバの設定をしておきましょう。
export http_proxy=http://my.proxy.example.com:80/
筆者の開発環境では、クリーンアップを何度かするとよい感じです。
which npm && rm -rf $(npm root)/oracledb $(npm root)/nan $HOME/.node-gyp $HOME/.npm && npm cache clean
ようやく新しいコンパイラを使ってnode-oracledbをインストールすることができます。
scl enable devtoolset-3 -- npm install oracledb

Using Node

これで、Nodeを使うことができるようになります。
$ node version.js 
  node.js version: v4.4.3
  node-oracledb version: 10900
  node-oracledb text format: 1.9.0
  oracle client library version: 1201000200
  oracle client library text format: 12.1.0.2.0
  oracle database version: 1201000200
  oracle database text format: 12.1.0.2.0

  $ cat /etc/oracle-release 
  oracle linux server release 6.7

0 件のコメント:

コメントを投稿