オラクる。

oracle専門ブログにしてみようかな~っと

2015年10月

node.jsをソースからインストールするにあたり、RHEL6.x標準のCコンパイラだとバージョンが古かったので、gccもソースからインストールしました。
今回は、その手順の確認

[root@node01 node.js]# wget https://nodejs.org/dist/v4.2.1/node-v4.2.1.tar.gz
[root@node01 node.js]# tar zxvf node-v4.2.1.tar.gz
[root@node01 node.js]# cd node-v4.2.1
[root@node01 node-v4.2.1]# ./configure
WARNING: C++ compiler too old, need g++ 4.8 or clang++ 3.4 (CXX=g++)
creating  ./icu_config.gypi
{ 'target_defaults': { 'cflags': [],
                       'default_configuration': 'Release',
                       'defines': [],
                       'include_dirs': [],
                       'libraries': []},
  'variables': { 'asan': 0,
                 'gas_version': '2.20',
                 'host_arch': 'x64',
                 'icu_small': 'false',
                 'node_byteorder': 'little',
                 'node_install_npm': 'true',
                 'node_prefix': '/usr/local',
                 'node_release_urlbase': '',
                 'node_shared_http_parser': 'false',
                 'node_shared_libuv': 'false',
                 'node_shared_openssl': 'false',
                 'node_shared_zlib': 'false',
                 'node_tag': '',
                 'node_use_dtrace': 'false',
                 'node_use_etw': 'false',
                 'node_use_lttng': 'false',
                 'node_use_openssl': 'true',
                 'node_use_perfctr': 'false',
                 'openssl_fips': '',
                 'openssl_no_asm': 0,
                 'python': '/usr/bin/python',
                 'target_arch': 'x64',
                 'uv_parent_path': '/deps/uv/',
                 'uv_use_dtrace': 'false',
                 'v8_enable_gdbjit': 0,
                 'v8_enable_i18n_support': 0,
                 'v8_no_strict_aliasing': 1,
                 'v8_optimized_debug': 0,
                 'v8_random_seed': 0,
                 'v8_use_snapshot': 1,
                 'want_separate_host_toolset': 0}}
creating  ./config.gypi
creating  ./config.mk
WARNING: warnings were emitted in the configure phase


バージョンが古いとconfigure時にエラーが出力されます。

[root@node01 node-v4.2.1]# gcc -v
Using built-in specs.
Target: x86_64-redhat-linux
コンフィグオプション: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
スレッドモデル: posix
gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)


現行のバージョンを確認します
4.4.7と古めです

[root@node01 gcc]# mkdir gmp
[root@node01 gcc]# cd gmp
[root@node01 gmp]# wget http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/gmp-4.3.2.tar.bz2
[root@node01 gmp]# tar jxvf gmp-4.3.2.tar.bz2
[root@node01 gmp]# cd gmp-4.3.2
[root@node01 gmp-4.3.2]# mkdir /usr/local/gcc
[root@node01 gmp-4.3.2]# ./configure --prefix=/usr/local/gcc
[root@node01 gmp-4.3.2]# make && make install


依存モジュールのインストール
まずはgmpから
以降のモジュールは全て/usr/local/gccにインストールしています。

[root@node01 gcc]# mkdir mpfr
[root@node01 gcc]# cd mpfr/
[root@node01 mpfr]# wget http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/mpfr-2.4.2.tar.bz2
[root@node01 mpfr]# tar jxvf mpfr-2.4.2.tar.bz2
[root@node01 mpfr-2.4.2]# ./configure --prefix=/usr/local/gcc --with-gmp=/usr/local/gcc/
[root@node01 mpfr-2.4.2]# make && make install


続いてmpfr
gmpを必要としているモジュールなので--with-gmpオプションでインストール場所を指定しています。

[root@node01 gcc]# mkdir mpc
[root@node01 gcc]# cd mpc
[root@node01 mpc]# wget http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/mpc-0.8.1.tar.gz
[root@node01 mpc]# tar zxvf mpc-0.8.1.tar.gz
[root@node01 mpc]# cd mpc-0.8.1
[root@node01 mpc-0.8.1]# ./configure --prefix=/usr/local/gcc --with-gmp=/usr/local/gcc --with-mpfr=/usr/local/gcc
[root@node01 mpc-0.8.1]# make && make install

次にmpc
gmpを必要としているので--with-gmpオプション、mpfrオプションを必要としているので--with-mpfrオプションを指定しています。

[root@node01 tmp]# mkdir gcc
[root@node01 tmp]# cd gcc
[root@node01 gcc]# wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-5.2.0/gcc-5.2.0.tar.gz
--2015-10-29 18:49:54--  http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-5.2.0/gcc-5.2.0.tar.gz
ftp.tsukuba.wide.ad.jp をDNSに問いあわせています... 203.178.132.80, 2001:200:0:7c06::9393
ftp.tsukuba.wide.ad.jp|203.178.132.80|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 122655932 (117M) [application/x-gzip]
`gcc-5.2.0.tar.gz' に保存中

100%[======================================>] 122,655,932 10.7M/s 時間 11s

2015-10-29 18:50:05 (10.5 MB/s) - `gcc-5.2.0.tar.gz' へ保存完了 [122655932/122655932]

[root@node01 gcc]# tar zxvf gcc-5.2.0.tar.gz
[root@node01 gcc]# cd gcc-5.2.0
[root@node01 gcc-5.2.0]# ./configure -prefix=/usr/local/gcc -with-gmp=/usr/local/gcc --with-mpfr=/usr/local/gcc -with-mpc=/usr/local/gcc -disable-multilib
[root@node01 gcc-5.2.0]# make && make install


そして、gcc
gmp、mpfr、mpcのインストール場所をそれぞれ指定しています。
makeは相当な時間がかかりました。

[root@node01 gcc-5.2.0]# /usr/local/gcc/bin/gcc -v
組み込み spec を使用しています。
COLLECT_GCC=/usr/local/gcc/bin/gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc/libexec/gcc/x86_64-unknown-linux-gnu/5.2.0/lto-wrapper
ターゲット: x86_64-unknown-linux-gnu
configure 設定: ./configure -prefix=/usr/local/gcc -with-gmp=/usr/local/gcc --with-mpfr=/usr/local/gcc -with-mpc=/usr/local/gcc -disable-multilib
スレッドモデル: posix
gcc バージョン 5.2.0 (GCC)

[root@node01 gcc-5.2.0]# ln -sb /usr/local/gcc/bin/gcc /usr/bin/gcc
[root@node01 gcc-5.2.0]# ln -sb /usr/local/gcc/bin/g++ /usr/bin/g++


バージョンアップ後のバージョンを確認
既存コンパイラのリンク先を新規コンパイラに設定します。

[root@node01 node-v4.2.1]# ./configure
creating  ./icu_config.gypi
{ 'target_defaults': { 'cflags': [],
                       'default_configuration': 'Release',
                       'defines': [],
                       'include_dirs': [],
                       'libraries': []},
  'variables': { 'asan': 0,
                 'gas_version': '2.20',
                 'host_arch': 'x64',
                 'icu_small': 'false',
                 'node_byteorder': 'little',
                 'node_install_npm': 'true',
                 'node_prefix': '/usr/local',
                 'node_release_urlbase': '',
                 'node_shared_http_parser': 'false',
                 'node_shared_libuv': 'false',
                 'node_shared_openssl': 'false',
                 'node_shared_zlib': 'false',
                 'node_tag': '',
                 'node_use_dtrace': 'false',
                 'node_use_etw': 'false',
                 'node_use_lttng': 'false',
                 'node_use_openssl': 'true',
                 'node_use_perfctr': 'false',
                 'openssl_fips': '',
                 'openssl_no_asm': 0,
                 'python': '/usr/bin/python',
                 'target_arch': 'x64',
                 'uv_parent_path': '/deps/uv/',
                 'uv_use_dtrace': 'false',
                 'v8_enable_gdbjit': 0,
                 'v8_enable_i18n_support': 0,
                 'v8_no_strict_aliasing': 1,
                 'v8_optimized_debug': 0,
                 'v8_random_seed': 0,
                 'v8_use_snapshot': 1,
                 'want_separate_host_toolset': 0}}
creating  ./config.gypi
creating  ./config.mk


今度はちゃんとconfigureしてくれました。

今回はfluentdでnode.jsを使ってみます。
時間の関係上、まずはnode.jsのインストールからです。
今回は最新の4.2.1を利用しました。
ソースからインストールの方法で行いましたが、コンパイラにバージョンの縛りがあるので要注意です。

RHEL6.x系の場合は、こちらが詳しいです。

Compile Node.js 4.0 on CentOS 6
http://krisreeves.com/code/compile-node-js-4-0-on-centos-6/

[root@node01 node-v4.2.1]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-3/root/usr/libexec/gcc/x86_64-redhat-linux/4.9.1/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/opt/rh/devtoolset-3/root/usr --mandir=/opt/rh/devtoolset-3/root/usr/share/man --infodir=/opt/rh/devtoolset-3/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --enable-languages=c,c++,fortran,lto --enable-plugin --with-linker-hash-style=gnu --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.9.1-20140922/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.9.1-20140922/obj-x86_64-redhat-linux/cloog-install --with-mpc=/builddir/build/BUILD/gcc-4.9.1-20140922/obj-x86_64-redhat-linux/mpc-install --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.9.1 20140922 (Red Hat 4.9.1-10) (GCC)

[root@node01 node-v4.2.1]# python -V
Python 2.6.6


gccとpythonが必要になりますが、今回コンパイルに成功したバージョンはgcc 4.9.1、Python 2.6.6になります。

[root@node01 node.js]# wget https://nodejs.org/dist/v4.2.1/node-v4.2.1.tar.gz
--2015-10-28 23:49:47--  https://nodejs.org/dist/v4.2.1/node-v4.2.1.tar.gz
nodejs.org をDNSに問いあわせています... 104.20.23.46, 104.20.22.46, 2400:cb00:2048:1::6814:162e, ...
nodejs.org|104.20.23.46|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 22505860 (21M) [application/gzip]
`node-v4.2.1.tar.gz' に保存中

100%[==========================================>] 22,505,860  2.95M/s 時間 8.6s

2015-10-28 23:49:59 (2.49 MB/s) - `node-v4.2.1.tar.gz' へ保存完了 [22505860/22505860]


ソースは本家サイトからwgetでダウンロードしました。

[root@node01 node.js]# tar zxvf node-v4.2.1.tar.gz
[root@node01 node.js]# cd node-v4.2.1
[root@node01 node-v4.2.1]# ./configure
[root@node01 node-v4.2.1]# make
[root@node01 node-v4.2.1]# make install


ソースを解凍して、ビルド、インストールを行ないます。
makeに相当の時間がかかりました。
CPUリソースが少ないだけかもしれませんが。

[root@node01 node-v4.2.1]# node -v
v4.2.1


インストールできました

input先をpythonとした場合の手順を確認します。

[root@node01 ~]# python -V
Python 3.5.0


pythonは今日時点の最新バージョンを利用しています。

[root@node01 Python-3.5.0]# vi /etc/td-agent/td-agent.conf



<source>
        type forward
        port 24225
</source>
<match fluentd.test.**>
        type stdout
</match>


設定ファイル(td-agent.conf)を編集して24225番ポートで待ち受けるようにします。

[root@node01 Python-3.5.0]# service td-agent restart
Shutting down td-agent:                                    [  OK  ]
Starting td-agent:                                         [  OK  ]
[root@node01 Python-3.5.0]# service td-agent status
td-agent (pid  10000) を実行中..
.

設定ファイルの編集後、サービスを再起動します。

[root@node01 Python-3.5.0]# pip install fluent-logger
Collecting fluent-logger
  Downloading fluent-logger-0.4.0.tar.gz
Collecting msgpack-python (from fluent-logger)
  Downloading msgpack-python-0.4.6.tar.gz (116kB)
    100% |????????????????????????????????| 118kB 425kB/s
Installing collected packages: msgpack-python, fluent-logger
  Running setup.py install for msgpack-python
  Running setup.py install for fluent-logger
Successfully installed fluent-logger-0.4.0 msgpack-python-0.4.6


python用fluentプラグインをpipコマンドを利用してインストールします。

[root@node01 ~]# vi test.py
from fluent import sender
from fluent import event
sender.setup('fluentd.test', host='localhost', port=24225)
event.Event('follow', {
        'from': 'userA',
        'to':   'userB'
})


fluent-loggerを利用してfluentdにログをフォワードするpythonプログラムを作成します。

[root@node01 ~]# python test.py
[root@node01 ~]# less /var/log/td-agent/td-agent.log



2015-10-28 00:35:49 +0900 fluentd.test.follow: {"to":"userB","from":"userA"}


実行し、ログが出力されたことを確認しました。

rubyで出力したログをfluentdで待ち受ける手順を確認します。

[root@node01 init.d]# vi /etc/td-agent/td-agent.conf



<source>
        type forward
        port 24225
</source>
<match fluentd.test.**>
        type stdout
</match>


設定ファイルtd-agent.confを編集します。
<source>~</source>の部分は入力の部分で例では24225ポートで入力を待ち受けています。
<match>~</match>の部分は出力の部分で例ではfluentd.test.**にマッチするログを標準入出力に出力します。

[root@node01 init.d]# service td-agent restart
Shutting down td-agent:                                    [  OK  ]
Starting td-agent:                                         [  OK  ]


設定ファイルを編集した後はサービスを再起動します。

[root@node01 fluent]# gem i fluent-logger
Fetching: fluent-logger-0.5.0.gem (100%)
Successfully installed fluent-logger-0.5.0
Parsing documentation for fluent-logger-0.5.0
Installing ri documentation for fluent-logger-0.5.0
Done installing documentation for fluent-logger after 0 seconds
1 gem installed


rubyでfluentdへの入力を扱うにはfluent-loggerというパッケージが必要なようです。
gemコマンドでインストールします。

[root@node01 fluent]# vi test.rb
require 'fluent-logger'
Fluent::Logger::FluentLogger.open(nil, :host=>'localhost', :port=>24225)
Fluent::Logger.post("fluentd.test.follow", {"from"=>"userA", "to"=>"userB"})


準備が整ったので早速、rubyスクリプトを作成します。

[root@node01 fluent]# ruby test.rb
[root@node01 fluent]# less /var/log/td-agent/td-agent.log
2015-10-25 01:08:49 +0900 fluentd.test.follow: {"from":"userA","to":"userB"}

作成したrubyスクリプトを実行します。
td-agent.logにログが出力されているのが確認できました。

限定トッピングが毎回違っていて、とても楽しめる二郎になっています
ラーメン二郎環七新代田店
今週も行ってしまいました
渋谷から井の頭線に乗って新代田駅
そこから改札出て左側にテクテクと
すぐに黄色い看板を見つけることが出来ます

20151025_055401484_iOS

いつも通りの小ラーメンアブラ辛めに、この日の限定トッピングの「男ちゃんぽん」
この「男ちゃんぽん」はなると、竹輪、コーン、魚肉?ソーセージ、野菜と色々と具材が入った、とても賑やかなトッピングです
「ちゃんぽん」の味はあんまりしないけれど、ラーメンに投入すると、少しだけぜいたくな気分になれました

さて、来週のトッピングはなんだろう
今から楽しみなのである
メルマガで限定のお知らせをしているので、要チェック♪
店主も気さくな方で、あの凛砂町店の店主を思い出します

このページのトップヘ