IBMi　node.jsのNative Addonモジュールをビルドする環境を構築してみた（chroot編）

試した環境　OS: 7.3
前提　5733-OPSのライセンスが導入済み
CCSID(5035)で作業しています。記事中の「paseで実施」はcall qp2termコマンドでPASE環境に入っての作業を指します。

基本的には[ここ](https://www.ibm.com/developerworks/community/wikis/home?lang=ja#!/wiki/IBM%20i%20Technology%20Updates/page/Chroot%20Scripts)を参考にして実施したのですが、内容が少し古そうなので自分で作業したものを掲載します。
### 1)chrootユーザーの作成。
この記事では「YMURATA」というユーザーIDで作成してみます。適宜置き換えて下さい。

``` 
（qcmdで実施）
CRTUSRPRF USRPRF(YMURATA) PASSWORD() USRCLS(*SECOFR) CHRIDCTL(*JOBCCSID) TEXT('オープンソース用') CCSID(5035)
CHGUSRPRF USRPRF(YMURATA) HOMEDIR('/QOpenSys/ymurata')
```

一旦サインオフして、「YMURATA」でサインオン

``` 
（qcmdで実施）
MKDIR DIR('/QOpenSys/ymurata')  
```
再びサインオフして、「YMURATA」でサインオン。念のためWRKLNKコマンドでホームディレクトリが変わっていることを確認しておいて下さい。

### 2)chroot用の環境を作っていきます。
``` 
（paseで実施）
cd /QOpenSys/QIBM/ProdData/OPS/GCC  
./chroot_setup.sh chroot_minimal.lst /QOpenSys/ymurata
./chroot_setup.sh chroot_bins.lst /QOpenSys/ymurata
./chroot_setup.sh chroot_includes.lst /QOpenSys/ymurata
./chroot_setup.sh chroot_libs.lst /QOpenSys/ymurata
./chroot_setup.sh chroot_OPS_GCC.lst /QOpenSys/ymurata
./chroot_setup.sh chroot_OPS_SC1.lst /QOpenSys/ymurata
```
### 3)Node.js V6をインストールする
chroot_OPS_NODE.lstはv0.12.17がインストールされてしまうので、ここではV6をインストールします。
といっても、スクリプトを少し変えるだけです。

``` 
（paseで実施）
cp chroot_OPS_NODE.lst chroot_OPS_NODE_V6.lst
```

``` 
（qcmdで実施）
EDTF STMF('/QOpenSys/QIBM/ProdData/OPS/GCC/chroot_OPS_NODE_V6.lst')
```
最後の行に

``` 
:cp_dir
/QOpenSys/QIBM/ProdData/Node

とあるので、これを
/QOpenSys/QIBM/ProdData/OPS/Node6

に置き換えます。
``` 

実行します。

``` 
（paseで実施）
cd /QOpenSys/QIBM/ProdData/OPS/GCC  
./chroot_setup.sh chroot_OPS_NODE_V6.lst /QOpenSys/ymurata
```
なお、chroot_OPS_PYTHONもここでは実施しません。

### 4)必要なコマンド類をインストールする
上記まででchroot環境に入れるはずです。

``` 
（paseで実施）
chroot /QOpenSys/ymurata /QOpenSys/usr/bin/bsh
```
lsコマンドやpwdコマンドで確認してみて下さい。

``` 
（paseで実施）
cd /QOpenSys/QIBM/ProdData/OPS/GCC
./pkg_setup.sh pkg_perzl_bash-4.3.lst
./pkg_setup.sh pkg_perzl_gcc-4.8.3.lst
./pkg_setup.sh pkg_perzl_utils.lst
```

ここではwgetを利用してソフトを取得＋インストールします。
IbmiがProxy配下にある場合は、次のファイルを修正して下さい。

``` 
（qcmdで実施）
EDTF STMF('/QOpenSys/ymurata/etc/wgetrc')
```
http_proxy = 
ftp_proxy =
がありますので、適宜置き換えて下さい。
例）http_proxy = http://xxx.xxx.xxx.xxx:port番号/

### 5)Node環境整備

4)でbashが入りましたので、bashでchrootしてみます。
NodeのPATHを通します。

``` 
（paseで実施）
chroot /QOpenSys/ymurata /QOpenSys/usr/bin/bash
export PATH=$PATH:/QOpenSys/QIBM/ProdData/OPS/Node6/bin
```

``` 
（paseで実施）
node -v
v6.11.5

npm -v
module.js:471
    throw err;
Error: Cannot find module 'npmlog'
：
：
```

npmはエラーが出て実行できません。これを修正します。

``` 
（paseで実施）
cd /QOpenSys/QIBM/ProdData/OPS/Node6/bin
mv npm npm.original
ln -s ../lib/node_modules/npm/bin/npm-cli.js ./npm
npm -v
3.10.10
```

### 6)gmakeのインストール
``` 
（paseで実施）
gmake --version
gmake: *** virtual memory exhausted.   中止 .
```
エラーが出ますので、これを修正します。
wgetで必要なソフトをダウンロードし、rpmを使ってインストールします。
wget用のフォルダ「download」を作り、そこで作業します。

``` 
（paseで実施）
cd /
mkdir download
cd download
wget http://www.oss4aix.org/download/RPMS/make/make-4.2.1-1.aix5.3.ppc.rpm
rpm --ignoreos --ignorearch --nodeps --replacepkgs -hUv make-4.2.1-1.aix5.3.ppc.rpm
```

proxy配下の場合、wget -e HTTP_PROXY=xxx.xxx.xxx.xxx:port番号 http://～として下さい。

``` 
（paseで実施）
export LIBPATH=$LIBPATH:/QOpenSys/usr/lib:/opt/freeware/lib
gmake --version
GNU Make 4.2.1
```

### 7)追加のソフトのインストール
pythin2.7とビルドに必要なgcc関係をインストールします。

``` 
（paseで実施）
wget http://www.oss4aix.org/download/RPMS/python/python-2.7.13-1.aix5.1.ppc.rpm
wget http://www.oss4aix.org/download/RPMS/python/python-libs-2.7.13-1.aix5.1.ppc.rpm
wget http://www.oss4aix.org/download/RPMS/python/python-tools-2.7.13-1.aix5.1.ppc.rpm
wget http://www.oss4aix.org/download/RPMS/gcc/libgcc-4.8.3-1.aix6.1.ppc.rpm
wget http://www.oss4aix.org/download/RPMS/gcc/libstdc++-4.8.3-1.aix6.1.ppc.rpm
wget http://www.oss4aix.org/download/RPMS/gcc/libstdc++-devel-4.8.3-1.aix6.1.ppc.rpm

rpm --ignoreos --ignorearch --nodeps --replacepkgs -hUv python-2.7.13-1.aix5.1.ppc.rpm
rpm --ignoreos --ignorearch --nodeps --replacepkgs -hUv python-libs-2.7.13-1.aix5.1.ppc.rpm
rpm --ignoreos --ignorearch --nodeps --replacepkgs -hUv python-tools-2.7.13-1.aix5.1.ppc.rpm
rpm --ignoreos --ignorearch --nodeps --replacepkgs -hUv libgcc-4.8.3-1.aix6.1.ppc.rpm
rpm --ignoreos --ignorearch --nodeps --replacepkgs -hUv libstdc++-4.8.3-1.aix6.1.ppc.rpm
rpm --ignoreos --ignorearch --nodeps --replacepkgs -hUv libstdc++-devel-4.8.3-1.aix6.1.ppc.rpm
```

### 8)確認

``` 
（paseで実施）
gcc --version  
 gcc (GCC) 4.8.3

python -V    
 Python 2.7.13
``` 

以上で終了です。