ARM系のLinuxでGPRINTを利用するとRRDTOOLが落ちるのはチラホラ報告されているようです。
cactiを利用してもGPRINTで落ちるようです。
最初はCDEFでunkwn値を0に書き換えることでGPRINTを利用出来たのですが
グラフの作成速度が非常に遅くて使い物になりませんでした。
もちろんCPU使用率もそのあいだは100%になってしまいます。
ちゃんとした方法でRRDTOOLのGPRINTを利用可能にする事を目標に一週間ほど格闘の旅に出ました(笑)
結論から先に書きますとカーネルがEABIでコンパイルされていることが問題でした。
EABIカーネルはiptablesの時もそうですが何かと問題を引き起こしてくれます。
※apt-getではOABI環境で構築されたものが配布されています。
ARM系のCPUは浮動小数点演算ユニットを持たないので
少しでも早くなるようにEABIで構築すべきでOABIなカーネルの構築をするのは得策とは言えません。
ということで自分でEABIなコンパイルで回避することに決定!
コンパイル方法はDLした圧縮ファイルの中にあるrrdbuild.htmlに詳しく書かれています。
ライブラリのバージョンが合わない場合はライブラリからコンパイル&インストールする必要があります。
まずRRDTOOLのソースをDLしてきて早速コンパイル!
configureが通りません(笑)
IEEE MATHがどうのとエラーが出ます。
これを回避するにはコンパイル前に以下を実行します。
export rd_cv_ieee_works=yes
またconfigure時の引数にはEABIコンパイル用のCFLAGSを書きます。
CFLAGS=”-Wall -g3 -ggdb3″
これでコンパイルしていけば無事にインストールが出来るはずです。
※dh_make -r
vi debian/roulesでCFLAGS編集
dpkg-buildpackageでパッケージを作成しようとしましたが
パッケージの作成まではうまく出来てもパッケージのインストールで失敗したので
普通にmake installでインストールしました。
無事インストールが完了したらGPRINTを試してみてください。
ちゃんと数値がグラフ画像内に書き込まれるはずです。
グラフ画像内ではなくグラフ画像外に数値を出したい場合はGPRINTででは無くPRINTを使います。
PRINTした後でグラフタグ外の書きたい部分にRRD::PRINTタグを利用すればテキスト出力されます。
numberの部分はPRINT記述の何個目かを指定できます。(スタートは0です)
殆どrrdbuild.htmlのままですがインストールまでを書いておきます。
※rrdtool-1.2.15を例にしていますがライブラリも含め
バージョンの部分が変わるくらいで手順は殆ど同じになります。
BUILD_DIR=/mnt/disk1/build/rrdbuild
INSTALL_DIR=/usr
mkdir -p $BUILD_DIR
cd $BUILD_DIR
export rd_cv_ieee_works=yes
※ライブラリのVersionが一致していない人はライブラリからインストールします。
他のアプリケーションで利用されている場合はPCが不安定になる場合があります。
特にバージョンダウンは止めたほうが良いでしょう。
もっとバージョンの新しいRRDTOOLソースをダウンロードしてインストールしましょう。
cd $BUILD_DIR
wget http://oss.oetiker.ch/rrdtool/pub/libs/zlib-1.2.3.tar.gz
tar zxf zlib-1.2.3.tar.gz
cd zlib-1.2.3
env CFLAGS=”-Wall -g3 -ggdb3″ ./configure –prefix=$BUILD_DIR/lb
make
make install
cd $BUILD_DIR
wget http://oss.oetiker.ch/rrdtool/pub/libs/libpng-1.2.10.tar.gz
tar zxvf libpng-1.2.10.tar.gz
cd libpng-1.2.10
env CPPFLAGS=”-I$BUILD_DIR/lb/include” LDFLAGS=”-L$BUILD_DIR/lb/lib” CFLAGS=”-Wall -g3 -ggdb3″
./configure –disable-shared –prefix=$BUILD_DIR/lb
make
make install
cd $BUILD_DIR
wget http://oss.oetiker.ch/rrdtool/pub/libs/freetype-2.1.10.tar.bz2
tar jxvf freetype-2.1.10.tar.bz2
cd freetype-2.1.10
env CPPFLAGS=”-I$BUILD_DIR/lb/include” LDFLAGS=”-L$BUILD_DIR/lb/lib” CFLAGS=”-Wall -g3 -ggdb3″
./configure –disable-shared –prefix=$BUILD_DIR/lb
make
make install
cd $BUILD_DIR
wget http://oss.oetiker.ch/rrdtool/pub/libs/libart_lgpl-2.3.17.tar.gz
tar zxvf libart_lgpl-2.3.17.tar.gz
cd libart_lgpl-2.3.17
env CFLAGS=”-Wall -g3 -ggdb3″ ./configure –disable-shared –prefix=$BUILD_DIR/lb
make
make install
※ライブラリが一致している人はここからでも構いませんがCPPFLAGS、LDFLAGSの書き換えは必要です。
IR=-I$BUILD_DIR/lb/include
CPPFLAGS=”$IR $IR/libart-2.0 $IR/freetype2 $IR/libpng”
LDFLAGS=”-L$BUILD_DIR/lb/lib”
CFLAGS=”-Wall -g3 -ggdb3″
export CPPFLAGS LDFLAGS CFLAGS
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.2.15.tar.gz
tar zxf rrdtool-1.2.15.tar.gz
cd $BUILD_DIR/rrdtool-1.2.15
./configure –prefix=$INSTALL_DIR –disable-python –disable-tcl
make clean
make
make install
以上