心地よいライフハック

これ便利だな〜と思ったことなど

Node-RED 上で java プログラムを動かす

今日は Node-RED  上で java のプログラムを 動かしてみたいと思います!
 

 
 
それではまず準備から。
 
 
環境としては、
 
java コンパイルが動作するホスト
・そのホストで動作するNode-RED 環境 です。
 
 
 
動作確認環境
・node-red のコンテナ  node-red v0.19.5
・OS : Debian GNU/Linux 9 (stretch)
 

 
 

 
手順
 
node-red コンテナ起動状態を確認。
 
# docker ps -a
 

 
動いてますね。

 
( 起動方法や、Node-RED 編集画面の 行き方 公式はこちら
Node-RED と java の 環境ができれば、コンテナ でなくてもOKです。)
 
 
コンテナ内 の操作に入ります。
 
$ docker exec -it -u root コンテナ名 /bin/bash
 
必要なツールをインストール
# apt-get update
# apt-get install vim less
 
open jdk 8 をインストール
 
# apt-get install openjdk-8-jdk
 
java Home とするパスを 確認
 
# update-alternatives --list java
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
 
( この jre より 上の階層を “ JAVA_HOME ”  と設定していきます。)
 
確認できたら 起動時設定ファイルの作成
# vim /etc/profile.d/java.sh
 
上記ファイルを取り込む
# source /etc/profile.d/java.sh
 
環境変数をチェック
# echo $JAVA_HOME
 
/usr/lib/jvm/java-8-openjdk-amd64
 
# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1~deb9u1-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
 
# javac -version
javac 1.8.0_222
 
java が入りました。
 
java環境の準備 は以上です。
 
 
# exit
 

 

 
それでは node-red で java を動かすノードをインストールします。
 
Node-red サービスに ブラウザからアクセス
 
( 詳細はこちら 参照 )
 
右上のメニューから
“ Manage palette “ を選択。
 

 
 
インストールタブを選択。
 

 
java-function  で サーチ
 

 
これをインストール
 
警告がでますが、問題なければ インストール で。
 
インストールできたら クローズ

 
念のため Docker コンテナ を restart しておきいましょう。
restart しておかないと、java が うまく動作しない可能性が あります。
 
# docker ps -a
node-red のコンテナ名を確認して、
 
# docker restart コンテナ名
 
 
 
以上で準備が終わりました。
 
早速、Node-red サービスへ ブラウザからアクセスし、
java-function ノードの動作 を確認してみましょう。
 

 
 

 
 

 

 
 
以上、あまり深く考えず、3つのノードを 並べて繋げます。
 

 
右上、虫マークのところを押して、debug 表示に。
 
そして、“ Deploy "

 
すると、、
 
java-function で コンパイル がなされます!

 
ソースはこちらです ↓
 
赤い この ノードをダブルクリック
下の方に java のソースがあります。

 
この inject ノードの 青いボタンを押すと、、

f:id:asuki_y:20190809222208p:plain

injectノード
 このソースが動作していることが確認できましたね。
 

 
あとは、 お好みの java ソース に編集してみてください。
 
以上で Node-RED 上 で java を 扱う 準備でした。
 

 
参照
 
apt-getでJavaをインストールしよう(Ubuntu)
 
 
 

Raspbery Pi 2  Model B V1.1 ( 2014年モデル? ) で Node-RED ver0.20.7 を使う

2019年8月8日 Raspberry Pi 2 Model B のセットアップ開始。
 
これまで IoT 関連のお仕事で、Arduino や Wio Node を使う機会 はあったものの、、
Raspberry Pi は 使う機会がなかったのです。
 
ですが やはり イーサー付きで HTTP REST API 連携させたくなり、今回 使ってみることに。

 
先日、ラズパイ譲り受けて(お借りして)つまづいたポイントがあったのでここに記録します。
 
また、新しい NOOBS から 初めて Raspberry Pi を使うときのポイント の備忘録です。
 
これまで Arduino を使う 機会が多かったのですが、初めて  ラズパイ を 最初から動かしてみました。
 
提供者からの情報を参考に準備したもの。
 
 
電源 - iPadMiniの電源アダプタ  5.1V 2.1A
上記とラズパイを繋げる USB Micro Type-B ケーブル
HDMI 接続で映る液晶ディスプレイ
マイクロSDカード 16GB ( 32GB 以上 だと少し難しい? )
家庭内LANケーブル&ネットワーク
USBマウス
USBキーボード
 
 
NOOBS ver.3.2.0 で 行いました。
Raspbian v10.0
 
ここから OS が入っている、NOOBS をダウンロード
 

 
ダウンロード時間は長いことですし、( 2,3時間? )
一応 ダウンロード後、ハッシュ値を確認しておく方が確実ですね。
 
 
使うマイクロSD は、  誤動作を起こさせないために、
“ SDカードフォーマッター “ を使って正しくフォーマットしておきましょう。
 
 
 
 上記 ツールでフォーマットした マイクロSDカード に ダウンロードした中身を、解凍したままのデータを そのまま
マイクロSDカードに 格納しておきます。
 
その マイクロSDカード を 電源完全にOFFのRaspberry Pi に 装着
 
電源投入します。( 電流 の 過不足がないように注意。arduino とはちょっと 勝手が違います。 )
 
メニュー
 
“ Raspbian FULL " ( RECOMMENDED )
を選択せずに、 “ Raspbian pi “ を選択しました。 理由は余計なソフトが入ってきてほしくないのと、
少しくらい不足していても apt-get で 簡単に補えると見込みました。
 
また、自分は、debian は使ってことがあっても、 Raspberry Pi は初めてなので “ Raspbian Lite “ はやめておきました。
 
 

 
 
 一番下部にある、キーボード設定、 日本語、 jp にすることを忘れないようにしましょう。
 
 
 

ーーーーー
 
その他 arduino 使ってた感覚からして つまづいたところ。
 

 
・電源は結構パワーが結構必要。arduino でちょっと試す感覚とはちょっと違う気がした。
 
消費電流 900mA (Typ) 
 
 
接続するデバイスによっては、2.5A 以上 必要かもしれないです。
 
お持ちのデバイスの電源は各自チェックしてから電源投入しましょう。
 

 
 
HDMI の接続は電源入れる前から!
 
 電源立ち上げ後 HDMI接続しても、画面が チラチラ っと周期的に 一瞬だけ 映ってまともに 見えない。 なんてこともあった。
 

 
HDMI の 液晶出力 互換性を あげるためにした設定。
/boot/config.txt
 
#hdmi_safe=1 のコメントアウトを解除 して、セーフモードに。
hdmi_safe=1
 

 
・ config_hdmi_boost の設定
 
※デフォルトより強く信号を送る設定が可能ですが、破損のリスクがある そうなので、
今回は 特に変更せず。
ちらつき対策は、 「 HDMI 接続状態で電源ONする 」で  対策できたので一旦この設定は デフォルトにしておきました。
 

 
SSH 接続 有効化
 
 最初コマンドで ひとつひとつやろうかと思ったのですが、 今回は、GUI 操作 で ワンクリックでやることにしました。
 

 
メインメニュー
- 設定
- Raspberry Pi の設定
< Raspberry Pi の設定 >
- インタフェース タブ
SSH 無効 -> 有効
 

 
これのみでいけました。
 
 
いつもLinux で使ってる通り、sshd を手動 コマンドでやってもいいのですが、IoTデバイスごとにしきたりとかあるかもしれないので、ここは Raspbian に任せましたわ。
 

 
・ Node-RED の設定
 
ここを 参照しました。
ラズパイ用のNode-RED でしょうか。
 
$ sudo apt-get install build-essential
 
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  rpi.gpio-common
 
 と でますが、 一応必要になりそうなのでそのまま。
 
 
待ち時間 丁寧な UI ( ˘ω˘ )
 

 
こういう プログレスのUI 見ていて安心しますね。
ちゃんと Node-RED を使うための Nodejs は、最新の LTS から もってきてくれる模様。
特に Nodejs のバージョンにこだわりがない場合は、 楽チン。
 
時間は、結構かかります。15 分くらいはかかりそう。
 
たぶん 開始8分 くらいでこの進捗

 
node-RED は 0.20.7 最新ですね!
 

 
 できた!

 
15分くらいかかったような。
 
 
無事 Node-RED 開始 できました!

 
ラズパイ - Node-RED といったら やっぱりこれ!
GPIO がとても扱いやすそう!

f:id:asuki_y:20190808172422p:plain

raspai Nodered
 
 

 
( 2019/8/9 " iPadMiniの電源アダプタ" の spec表記修正 ) 
 
 
 
 
 
 

mac で 長く安全に使える python 環境を作る

とりあえず 手っ取り早く、ロングスパンで 安全に使える環境作りをしたい方向けに記事です。
 
根拠、詳細・準備は こちらが 参考になると思います。
 
上記 参照元のURL と python のバージョンが違うので、ここでは、2019/8/4 現在 最新の python 環境の構築 を行なっていきます。
 

 
環境:
10.13.6
 
事前準備
以下コマンドが使える状態にしておいてください。
 
 
 

 
pyenv コマンド をインストールします。
 
$ brew install pyenv
 
bash_profile の存在を確認。
$ ls -l ~/.bash_profile
 
$ vim ~/.bash_profile
 

( 追記内容 )
 
# pyenv コマンドは ~/.pyenvではなく、/usr/loca/var/pyenvを使うように設定
export PYENV_ROOT=/usr/local/var/pyenv
 
# pyenv に自動補完機能 を有効化
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

 
 
 ~/.bash_profileに書いた内容を有効にする
$ source ~/.bash_profile
 
インストールできたか確認
$ brew list | grep pyenv
pyenv    <-  いることを確認
$ pyenv --version
pyenv 1.2.13
 
 
インストールできる python のバージョン確認
$ pyenv install -l
・・・
  3.6.9
  3.7.0
  3.7-dev
  3.7.1
  3.7.2
  3.7.3
  3.7.4
  3.8-dev
  3.9-dev
・・・
今回は、3.7.4をインストールする。
 
$ pyenv install 3.7.4
 
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.4.tar.xz...
Installing Python-3.7.4...
python-build: use readline from homebrew
 
 
( ここらで 5分くらい待ちました。 )
 
Installed Python-3.7.4 to /usr/local/var/pyenv/versions/3.7.4
 
インストール 完了!
 
現在 使用中の Python バージョン確認
$ pyenv versions
* system (set by /usr/local/var/pyenv/version)
  3.7.4
 
システム全体に反映
$ pyenv global 3.7.4
 
確認
$ pyenv versions
  system
* 3.7.4 (set by /usr/local/var/pyenv/version)
 
このような環境になりました。
 
~$ pyenv versions
  system
* 3.7.4 (set by /usr/local/var/pyenv/version)
Python 3.7.4 (default, Aug  4 2019, 14:15:00) 
[Clang 10.0.0 (clang-1000.10.44.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>  ここで ctrl+d  すると 安全にコマンドを終えます。
 

venv 仮想環境の作成
 
自分のユーザー名を確認
$ whoami
 
例えば 
/Users/ ユーザー名  /dev/python_dev に作成
 
$ mkdir -p 上記パス
 
$ cd /Users/ ユーザー名  /dev/python_dev
 
仮想環境を作るためのディレクトリ内 でコマンド
$ python -m venv py3env
 
以上で Python を使い始める準備が整いました。
 

 
今後  python コマンドを使うとき は、py3envを有効化してから使います。
 
$ cd /Users/ ユーザー名  /dev/python_dev
$ source py3env/bin/activate
 
python を使う。
 
仮想環境py3envを無効化するには、
(py3env) $ deactivate
 

 
以上です。
 
そのほか 実践的な python 系 ツールの紹介もしたの方にありますので、
とても 参考になります。
 

H2O.ai の java インストール

はじめに
 
 H2O.ai   ( H2O社 )      とは?
 
機械学習自動化プラットフォーム の OSSです。
GPU で 走らせることもできる とのことです。
 
 

 
 
Bigデータから AI で解析! など、役に立つところは多そうです。
 
より詳しく紹介している ところは多いと思いますので、、
 
自分は、インストール方法だけ ご紹介します。
 
ーーーーー
 
手元の環境 CentOS Linux release 7.4.1708 (Core)  VMです。
 
java から インストールしていきます。
 
こちらを参考に
 
version は 1.8 にしてみました。
 
 
# yum search java-1.8.0-openjdk
 
ランタイムのみ インストール
# yum install java-1.8.0-openjdk -y
 
 
java 8 (JDK) 開発環境のインストール
 
# yum install java-1.8.0-openjdk-devel
 
バージョン確認
 
# java -version
openjdk version "1.8.0_222"
 
ーーーーー
 

 
まずここから h2o の zipファイル を ダウンロード
 
 
任意のディレクトリにおきます。
自分は h2oAI  というディレクトリ を作成してそこにおきました。
 
zipは、500MBくらい ありました。
 
# pwd
/dev/h2oAI
 
# ls
h2o-3.19.0.4275.zip
 
# unzip ./h2o-3.19.0.4275.zip 
Archive:  ./h2o-3.19.0.4275.zip
・・・・・
 
# cd h2o-3.19.0.4275
 
 
# java -jar 
・・・・・
INFO: Open H2O Flow in your web browser: http://ホストのIPアドレス :54321
 
となれば 立ち上がり完了!
 
ここへ ブラウザでアクセスしにいきます。
 
 

 
完了!
 
とりあえず CPU GPU 関係なしに、はじめるには、VMjava で 始めるほうが コンテナ より簡単な気がしました。
 
 ( 2019.08.07 一部 H2O 関連固有名詞を修正 )
 

docker コンテナ内の 設定ミス で動かなくなったら、、、

 もし docker コンテナ 内の 設定 ファイルの編集ミスなどをしてしまって、
コンテナが起動しなくてしまったら、 何も知らないと結構困る。
 
起動しなくなったコンテナを、無理やり起動させて、修正作業ができるようにしたい。 
 
「docker logo」の画像検索結果

 
 
 
ここの通り対処すればOK かと思うが、、
 
 
自分は、上記とは、多少 環境が 異なるため、一応 ここに 記録。
 

< できた環境 > 
 
ホストOS macos 10.13.6 ターミナル
仮想 ( VM ) CentOS
CentOS Linux release 7.4.1708 (Core)
 

 
まず Docker ホストの OS に ログイン状態
# docker -v
Docker version 1.13.1, build 07f3374/1.13.1
 
停止した コンテナの ID を確認 (前方の数桁がわかればOK)
# docker ps -a
・・・

 
 
該当 コンテナのディレクトリ へ移動
cd /var/lib/docker/containers/ae98d...4f6/

( * 編集前に この ファイル のバックアップを忘れずに! )
cp -p 上記config.v2.json /バックアップ退避しておきたいディレクトリ/config.v2.json
 
一時的にコンテナ起動時コマンドを編集する
vi ./config.v2.json
 
> 編集 内容
コンテナ起動時のコマンド と そのコマンドの引数を 操作する。
 
コマンド  “ Path “ 要素にかかれたものを適当なコマンドに変更する。
“ PATH “ ではないので注意。
 
たとえば  tail 。 node-red コンテナの場合は  以下のように指定した。
 

“Path" : “ /usr/bin/tail "
 
 
/usr/bin/tail 
 
続いて そのコマンドの引数の指定は “ Args “ で。
確実に有効な オプションや、ファイルパス を指定する。
 

"Args":["-f","/usr/src/node-red/package.json"]
 
 
上記で 指定 うまくいくと コンテナ起動時
tail -f /usr/src/node-red/package.json 
というコマンドがうまくいけば  コンテナが立ち上がりっぱなしになる。
 
編集した config.v2.json を 有効化する。
 
# systemctl restart docker
 
# docker start -ai  問題のコンテナ名
 
ここで、上記 で 設定した指定がうまくいけば、 立ち上がる。
立ち上がらなければ、 エラー内容を よく読み config.v2.json で 対処できそうな 問題なら、それで 立ち上げる。
 
もしうまく立ち上がったらなら、 上記の例では tail -f コマンド を実行したままになるはず。
 
この状態で、通常起動時の問題箇所を修正しておく。
( 自分の場合は、 node-red コンテナの /data/setting.js の内容を修正した。)
 
この時、 ctrl + p つづけて q と押す  と コンテナ は デーモン化して バックグラウンドへ。
 
docker ホスト側 の ターミナル操作に復帰できる。
 
また、修正したければ docker exec -it コマンドで 中に入って修正作業できる と思う。
 
 
 修正が完了したら、さきほどバックアップした、config.v2.json を使って通常コンテナ起動の設定に戻す。
( cp -p バックアップ退避しておいたパス/config.v2.json 起動方法を弄ったconfig.v2.json )
 
⬇︎その config.v2.json を 有効化する。
# systemctl restart docker
 

 
あとは通常通り、起動 できればOK。
問題があれば、docker logs コマンドを使ったりして 解析を進めよう。
 
 
 
 
 

ログイン シェル を変える

debian 9 にて。
 
< 目的 >
 
自分で作ったユーザーは、 sh でログインしてしまうので、bashにしたい。
 

 
< やり方 >
 
$ su root
 
# chsh 対象ユーザー名
 
->ここで 指定をおこなう。
 
/bin/bash 
 
あとは、ログインシェルが変わったか 確認すればOK

Centos7.6 バグ ipv6 で dadlyfailed

対策1
ipv6 を 使わない。
 
対策2 パッチを当てる
やり方までは終えてないけど。 
 
関連技術 OpenvSwitch
( Open Virtual Switch、通称「OVS」)は、ソフトウェア定義型ネットワーク(SDN)を実現する仮想スイッチです。