インストール手順

環境構築

pyenvを用いたPython3.9環境の構築

IROHA2.8以降はPython3.9実行環境が必要である(デバイス制御サーバーはPython2.7にも対応)。 pyenvおよびpyenv-virtualenvを用いたPython3.9の仮想環境の構築方法について説明する。

pyenvの導入

pyenvのインストール・動作に必要なパッケージをインストールする。

$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git libffi-devel

githubのリポジトリからソースコードをcloneする。

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

.bash_profile にパスを追加する。

$ echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

pyenvを有効化する。

$ source .bash_profile

pyenvによるPythonのインストール

インストール可能なPythonのバージョンを確認する。

$ pyenv install --list

例えば、3.9.16をインストールする。

$ pyenv install 3.9.16

pyenv-virtualenvの導入

githubのリポジトリからソースコードをcloneする。

$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

.bash_profile にパスを追加する。

$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

pyenv-virtualenvを有効化する。

$ source .bash_profile

仮想環境の構築

IROHA2を実行するためのPython3.9仮想環境( iroha2_p39 )を作成する。

$ pyenv virtualenv 3.9.16 iroha2_p39

Note

この場合、あらかじめpyenvでPython3.9.16をインストールしておく必要がある。

仮想環境の有効化

仮想環境 iroha2_p39 を有効化したいディレクトリにおいて以下のコマンドを実行する。

$ pyenv local iroha2_p39

このコマンドを実行したディレクトリ以下のディレクトリで仮想環境が有効化される。

CentOS7におけるPython3環境の構築

CentOS7系にPython3環境を構築する方法として、SCL(Software Collection Library)を用いる方法を説明する。

SCLとPython3のインストール

$ sudo yum install -y centos-release-scl
$ sudo yum install -y rh-python36

Python3の有効化

下記のコマンドを実行したターミナルではPython3が有効化する。

$ source /opt/rh/rh-python36/enable
$ python
Python 3.6.12 ~
>>>

ターミナル起動時にPython3を有効化したい場合には ~/.bashrc に以下の1行を追記する。

$ source /opt/rh/rh-python36/enable

Pythonのライブラリインストール

Python2

  • pycrypto

  • requests

  • future

$ pip install pycrypto
$ pip install requests
$ pip install future

Python3

  • future

  • six

  • pycrypto

  • lxml

$ pip3 install future
$ pip3 install six
$ pip3 install pycrypto
$ pip3 install lxml

Note

pip3でインストールする場合、SCLでPython3を有効化する必要がある

IROHA2のインストール

IROHA2ソースコードの展開

任意のディレクトリに iroha2.tar.gz を展開する。推奨するインストール先は /opt/mlfsoft である。

$ cd /opt
$ mkdir mlfsoft
$ cd mlfsoft
$ pwd
/opt/mlfsoft
# iroha2.tar.gzをコピー後
$ tar zxvf iroha2.tar.gz
$ ls
iroha2

シーケンス管理サーバーのシンボリックリンク作成(version 2.6のみ)

シーケンス管理サーバーのスクリプトおよびファサードは iroha2/iroha-settings/sequence/database 以下にその実体を格納しているが、 実装の都合上 iroha2/iroha-sequence-server/database にシンボリックリンクを貼ることで対応している。 ファイルの受け渡し方法などによってはこのシンボリックリンクが無効になる可能性があることから、 そのような場合には以下の手順でシンボリックリンクを作成する。

$ cd /opt/mlfsoft/iroha2/iroha-sequence-server/database
$ ln -s ../../iroha-settings/sequence/database/facades facades
$ ln -s ../../iroha-settings/sequence/database/scripts scripts

python3コマンドを使用する場合の修正

ディストリビューションの種類や設定によっては python コマンドでPython2系が、 python3 コマンドでPython3系が実行される場合がある。 IROHA2は python コマンドで実行するようにコーディングされているため、このような環境においてPython3でIROHA2を実行する場合、いくつかのファイルを修正する必要がある。

各サーバーのrun.sh
Table 4 run.shの修正点

修正前

修正後

python(Pythonを実行している部分)

python3

各サーバーの起動スクリプト

サービスとしてサーバーを実行する場合、後述するように起動スクリプトを修正する。

シーケンス管理サーバー(Version 2.6.2以前)

シーケンス管理サーバーの irhlibseq フォルダにある以下のファイルのシェバン(1行目のインタプリタを指定する部分)を修正する。

  • irhfacademngr.py

  • irhrunsrv.py

  • runcheck.py

Table 5 シーケンス管理サーバーの修正点

修正前

修正後

#!/usr/bin/env python(1行目)

#!/usr/bin/env python3

Version 2.6.3以降はこの修正を行わずにPython3によるファサードの実行が可能になっている。

サーバーの起動

コマンドラインからの起動

各サーバーの起動コマンドについて説明する。設定等の詳細は装置スタッフマニュアルを参照のこと。

デバイス制御サーバー

$ cd /opt/mlfsoft/iroha2/iroha-device-server
$ ./run.sh

装置管理サーバー

$ cd /opt/mlfsoft/iroha2/iroha-management-server
$ ./run.sh

シーケンス管理サーバー

$ cd /opt/mlfsoft/iroha2/iroha-sequence-server
$ ./run.sh

統合制御サーバー

$ cd /opt/mlfsoft/iroha2/iroha-integrate-server
$ ./run.sh

サービスとしての登録と起動(version 2.6以降)

CentOS7以降ではsystemctlコマンドを利用して各サーバーを起動・停止する。 IROHA2.6以降はCentOS7以降のOSで動作することを想定していることから、 サービスとして実行する場合にはsystemctlコマンドを使用することとしている。 各サーバーフォルダに格納されているユニットファイル(.service)を /etc/systemd/system/ に コピーし、登録コマンドを実行することでサービスとして登録することができる。

1. ファイルの準備

ユニットファイルおよび起動スクリプトを編集する。デバイス制御サーバーを例に説明する。

ユニットファイル:irhdevsrv.service

[Service]の ExecStart で指定している起動スクリプトのパスをマシンの環境に合わせて修正する。

[Unit]
Description = IROHA2 Device Server

[Service]
ExecStart = /opt/mlfsoft/iroha2/iroha-device-server/irhdevsrv start
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target
起動スクリプト:irhdevsrv

Pythonの実行体のパス PYTHON 、 起動スクリプト自身のパス EXE_PATH 、サーバーのポート番号 SRV_PORT 、 実行するユーザー名 EXE_USER をマシンの環境に合わせて修正する。

特に、Python3で実行する場合には PYTHON の変更が必要な場合が多いので注意する。

# スクリプトの先頭付近
PYTHON=/usr/bin/python
EXE_PATH=/opt/mlfsoft/iroha2/iroha-device-server
SRV_PORT=8085
EXE_USER=mlfdev

また、起動スクリプトには実行権限を付与しておく。

$ chmod 755 irhdevsrv

2. ユニットファイルの登録

ユニットファイルを登録し、サービスに反映させる。

$ sudo cp irhdevsrv.service /etc/systemd/system
$ sudo systemctl daemon-reload

3. サービスとしての起動

以下のコマンドでIROHA2サーバーの起動を制御することができる。

# 起動
$ sudo systemctl start irhdevsrv
# 状態確認
$ sudo systemctl status irhdevsrv
# 再起動
$ sudo systemctl restart irhdevsrv
# 停止
$ sudo systemctl stop irhdevsrv

サービスの自動起動の有効化、無効化は以下のコマンドで設定する。

# 自動起動の有効化
$ sudo systemctl enable irhdevsrv
# 自動起動の無効化
$ sudo systemctl disable irhdevsrv

サービスとしての登録と起動(version 2.6以前)

各サーバーフォルダに格納されている起動スクリプトを /etc/init.d に コピーし、登録コマンドを実行することで各サーバーをサービスとして起動・停止できる。

1. ファイルの準備

起動スクリプトを編集する。デバイス制御サーバーを例に説明する。

起動スクリプト:irhdevsrv

起動スクリプト自身のパス EXE_PATH 、サーバーのポート番号 SRV_PORT 、 実行するユーザー名 EXE_USER をマシンの環境に合わせて修正する。

# スクリプトの先頭付近
EXE_PATH=/opt/mlfsoft/iroha2/iroha-device-server
SRV_PORT=8085
EXE_USER=mlfdev

また、起動スクリプトには実行権限を付与しておく。

$ chmod 755 irhdevsrv

2. 起動スクリプトの登録

起動スクリプトを /etc/init.d にコピーする。

$ sudo cp irhdevsrv /etc/init.d/

起動スクリプトをサービスに登録する。

$ sudo chkconfig --add irhdevsrv

3. サービスとしての起動

以下のコマンドでIROHA2サーバーの起動を制御することができる。

# 起動
$ sudo service irhdevsrv start
# 状態確認
$ sudo service irhdevsrv status
# 再起動
$ sudo service irhdevsrv restart
# 停止
$ sudo service irhdevsrv stop

自動起動の有効化、無効化は以下のコマンドで設定する。

# 自動起動の有効化
$ sudo chkconfig irhdevsrv on
# 自動起動の無効化
$ sudo chkconfig irhdevsrv off