2018年09月29日

シングルボードコンピュータへElasticsearch&Kibanaインストール

今回はシングルボードコンピュータへ
ElasticsearchとKibanaをインストールする方法を紹介します。

対象のシングルボードコンピュータはTinkerboardといった
ARMベースのシングルボードです。
頑張ればraspberryPIでも可能です。
また、単にARMベースのシングルボード上で
ElasticsearchとKibanaをアプリケーションとして動かすのではなく、
サービスとして登録して運用する手順を紹介します。


予めJava8をインストールしておいてください。 
Elastic社のサイトから下記のパッケージをダウンロードします。
elasticsearch-6.X.X.deb
kibana-6.X.X-amd64.deb
※XXはバージョンに依る

また、Nodejsも併せてダウンロードしてください。
Linux Binaries (ARM)のARMv7を使用します。




■Elasticsearchインストール
@Elasticsearchインストール
Javaなので環境によらずそのままインストールできます。
sudo dpkg -i elasticsearch-6.X.X.deb

Aフォルダ権限変更
sudo chmod -vR 755 /etc/elasticsearch/
sudo chmod -vR 755 /var/lib/elasticsearch/
sudo chmod -vR 755 /usr/share/elasticsearch/

Belasticsearch.yml設定変更
amd64専用の機能などを無効化しないと起動に失敗します。
少しおまじないを追加します。
sudo leafpad /etc/elasticsearch/elasticsearch.yml

xpack.ml.enabled: false
bootstrap.system_call_filter: false

※必要に応じて下記も追記する。
network.host: "0.0.0.0"
http.port: 9200
transport.host: localhost
transport.tcp.port: 9300


CJava設定
必要に応じてElasticsearchのメモリ割り当てを変更します。
sudo leafpad /etc/elasticsearch/jvm.options

デフォルトは
-Xms1g
-Xmx1g
-server#追記
でメモリ1GをElasticsearchに割り当てる設定です。
Tinkerboardならメモリ2GBなのでデフォルトでも問題ありませんが、
raspberryPIの場合はメモリ1GBなので
システム領域が全く確保できなくなってしまいます。
設定したメモリ領域+200MBが実際のプロセス上で使用するため、
raspberryPIの場合は
-Xms600m
-Xmx600m
-server#追記
が妥当だと思います。

ガシガシ使うのであれば
メモリ2GBかつeMMCなTinkerboard Sしか選択肢はありません。

Dサービス起動設定変更
デフォルトでは自動再起動の設定が無効のため、
下記のファイルに追記します。
sudo /bin/systemctl enable elasticsearch.service#ファイル生成
sudo leafpad /etc/systemd/system/multi-user.target.wants/elasticsearch.service

[Service]
・・・・
Restart=always
↑1行追加する
・・・・

Eサービス登録
下記のコマンドでサービスを有効化します。
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo service elasticsearch start

これでElasticsearchがシステム起動時に自動的に起動します。

sudo service elasticsearch statusでサービス状態を確認できます。
http://localhost:9200へアクセスして確認してもよいと思います。

statusで問題なくても9200へアクセスできない場合は
elasticsearch.ymlかjavaの設定に何か問題があることが多いです。


■Kibanaインストール
Kibanaはamd64用にパッケージされているため、
そのままではインストールできません。

@強制的にARM環境にAMD64を追加するために設定を変更する
sudo dpkg --add-architecture amd64
※逆に削除する場合は dpkg --remove-architecture amd64

AAMD64が追加されているか確認する
sudo dpkg --print-foreign-architectures

BKibanaインストール
sudo dpkg -i kibana-6.X.X-amd64.deb

CARM版Nodejs解凍
tar xfv node-v8.XX.X-linux-armv7l.tar.xz

DARM版Nodejsへ置き換え
sudo cp  node-v8.XX.X-linux-armv7l/bin/node /usr/share/kibana/node/bin
sudo cp  node-v8.XX.X-linux-armv7l/bin/npx /usr/share/kibana/node/bin
sudo cp  node-v8.XX.X-linux-armv7l/bin/npm /usr/share/kibana/node/bin

Dkibana.yml設定変更
sudo leafpad /etc/kibana/kibana.yml
下記を追記する
server.host: "0.0.0.0"

Eサービス登録
下記のコマンドでサービスを有効化します。
sudo /bin/systemctl enable kibana.service
sudo service kibana start
これでKibanaがシステム起動時に自動的に起動します。
sudo service kibana statusでサービス状態を確認できます。
http://localhost:5601へアクセスして確認してもよいと思います。

必要に応じてKibanaのNode側もメモリ制限をしてもよいと思います。
NODE_OPTIONS="--max_old_space_size=256"


以上の手順でシングルボードコンピュータへ
ElasticsearchとKibanaをインストールすることができます。

正直、高性能なシングルボードコンピュータ、
Tinkerboard Sでもメモリ1.8GB状態が続くため、
Elasticスタックを運用するのは厳しい面もあります。
ただ、クラスタリングやkibanaとelasticsearchの別運用など
Elasticスタックの特徴を生かして色々遊べそうです。


posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2018年09月08日

gcc ARMコンパイラ エラー対処方法

System Workbench toolchain for STM32(SW4STM32) を使用している際、
突然、コンパイルができなくなりました。
その際の対処法について、紹介します。

コンパイルができなくなった際に下記のようなエラーメッセージがでました。


/usr/bin/ld: error: perf_test uses VFP register arguments, perf_test.o does not
/usr/bin/ld: failed to merge target specific data of file perf_test.o
/usr/bin/ld: error: perf_test uses VFP register arguments, util.o does not
/usr/bin/ld: failed to merge target specific data of file util.o
/usr/bin/ld: error: perf_test uses VFP register arguments, ../baseline/lib.a(a.o) does not
/usr/bin/ld: failed to merge target specific data of file ../baseline/lib.a(a.o)
/usr/bin/ld: error: perf_test uses VFP register arguments, ../baseline/lib.a(b.o) does not
/usr/bin/ld: failed to merge target specific data of file ../baseline/lib.a(b.o)
/usr/bin/ld: error: perf_test uses VFP register arguments, ../baseline/lib.a(c.o) does not
/usr/bin/ld: failed to merge target specific data of file ../baseline/lib.a(c.o)
/usr/bin/ld: error: perf_test uses VFP register arguments, ../baseline/lib.a(d.o) does not
/usr/bin/ld: failed to merge target specific data of file ../baseline/lib.a(d.o)
/usr/bin/ld: error: perf_test uses VFP register arguments, ../baseline/lib.a(e.o) does not
/usr/bin/ld: failed to merge target specific data of file ../baseline/lib.a(e.o)
/usr/bin/ld: error: perf_test uses VFP register arguments, ../baseline/lib.a(f.o) does not
/usr/bin/ld: failed to merge target specific data of file ../baseline/lib.a(f.o)
collect2: ld returned 1 exit status
make: *** [perf_test] Error 1


パラメータや設定を見直しても改善しませんでした。
結局、Eclipseのプロジェクトファイルの破損だと判明しました。
再度、.cprojectファイルを削除し、
CubeMXで再度生成すると正常にコンパイルできるようになりました。
posted by Crescent at 00:00| Comment(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする

2018年09月01日

Tensorflowインストール不具合解決方法

Tensorflowをインストールした際に
下記のような不具合が発生し、
Tensorflowライブラリが使用できない問題を
解決する方法を紹介します。

今回の不具合原因は古いCPUや一部の廉価版CPU
(PentiumN3700、N4200など)に起因します。
それ以外の最近のCPUではこの不具合は発生しません。

AnacondaからTensorflowをインストールしましたが、
動作確認のコードを実行すると
「ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。」
というエラーが出て、正常に実行されません。

原因を調査すると結論は
CPUの最近の拡張命令が古いCPUや一部の廉価版CPUでは使用できないために
発生する原因と分かりました。

ライブラリ処理でAVX2命令を使用しており、
通常のフローでTensorflowをインストールすると
AVX2対応CPUのライブラリがデフォルトでインストールされます。

古いCPUや廉価版CPUではAVX2といった拡張命令を搭載していないため、
DLLエラーが発生します。

この場合は手動でAVX2のライブラリを削除し、
SSE2のライブラリを手動でインストールします。


ライブラリを入れなおして実行すると正常に動作することが確認できました。
インストール時にCPUの種別までは自動で判断してくれないようです。

実験環境として使用している廉価版CPUに
古いCPUや廉価版CPUを搭載しているPCでTensorflowで遊んでみる
という方はご注意です。

エラー詳細
(tensorflow17) C:\Users\***>python
Python 3.6.6 |Anaconda, Inc.| (default, Jun 28 2018, 11:27:44) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
Traceback (most recent call last):
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 14, in swig_import_helper
return importlib.import_module(mname)
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
File "<frozen importlib._bootstrap>", line 571, in module_from_spec
File "<frozen importlib._bootstrap_external>", line 922, in create_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: DLL load failed: ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in <module>
from tensorflow.python.pywrap_tensorflow_internal import *
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 17, in <module>
_pywrap_tensorflow_internal = swig_import_helper()
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 16, in swig_import_helper
return importlib.import_module('_pywrap_tensorflow_internal')
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\site-packages\tensorflow\__init__.py", line 24, in <module>
from tensorflow.python import * # pylint: disable=redefined-builtin
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\site-packages\tensorflow\python\__init__.py", line 49, in <module>
from tensorflow.python import pywrap_tensorflow
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 74, in <module>
raise ImportError(msg)
ImportError: Traceback (most recent call last):
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 14, in swig_import_helper
return importlib.import_module(mname)
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
File "<frozen importlib._bootstrap>", line 571, in module_from_spec
File "<frozen importlib._bootstrap_external>", line 922, in create_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: DLL load failed: ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in <module>
from tensorflow.python.pywrap_tensorflow_internal import *
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 17, in <module>
_pywrap_tensorflow_internal = swig_import_helper()
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 16, in swig_import_helper
return importlib.import_module('_pywrap_tensorflow_internal')
File "C:\Users\***\Anaconda3\envs\tensorflow17\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'

Failed to load the native TensorFlow runtime.
for some common reasons and solutions. Include the entire stack trace
above this error message when asking for help.
>>>

posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする