インストール手順 ========================== .. contents:: 目次: :depth: 3 環境構築 ##################################### pyenvを用いたPython3.9環境の構築 ************************************* IROHA2.8以降はPython3.9実行環境が必要である(デバイス制御サーバーはPython2.7にも対応)。 pyenvおよびpyenv-virtualenvを用いたPython3.9の仮想環境の構築方法について説明する。 pyenvの導入 ------------------------------------- pyenvのインストール・動作に必要なパッケージをインストールする。 .. code-block:: sh $ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git libffi-devel githubのリポジトリからソースコードをcloneする。 .. code-block:: sh $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv :file:`.bash_profile` にパスを追加する。 .. code-block:: sh $ echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile pyenvを有効化する。 .. code-block:: sh $ source .bash_profile pyenvによるPythonのインストール ------------------------------------- インストール可能なPythonのバージョンを確認する。 .. code-block:: sh $ pyenv install --list 例えば、3.9.16をインストールする。 .. code-block:: sh $ pyenv install 3.9.16 pyenv-virtualenvの導入 ------------------------------------- githubのリポジトリからソースコードをcloneする。 .. code-block:: sh $ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv :file:`.bash_profile` にパスを追加する。 .. code-block:: sh $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile pyenv-virtualenvを有効化する。 .. code-block:: sh $ source .bash_profile 仮想環境の構築 ------------------------------------- IROHA2を実行するためのPython3.9仮想環境( `iroha2_p39` )を作成する。 .. code-block:: sh $ pyenv virtualenv 3.9.16 iroha2_p39 .. note:: この場合、あらかじめpyenvでPython3.9.16をインストールしておく必要がある。 仮想環境の有効化 ------------------------------------- 仮想環境 `iroha2_p39` を有効化したいディレクトリにおいて以下のコマンドを実行する。 .. code-block:: sh $ pyenv local iroha2_p39 このコマンドを実行したディレクトリ以下のディレクトリで仮想環境が有効化される。 CentOS7におけるPython3環境の構築 ************************************* CentOS7系にPython3環境を構築する方法として、SCL(Software Collection Library)を用いる方法を説明する。 SCLとPython3のインストール ------------------------------------- .. code-block:: sh $ sudo yum install -y centos-release-scl $ sudo yum install -y rh-python36 Python3の有効化 ------------------------------------- 下記のコマンドを実行したターミナルではPython3が有効化する。 .. code-block:: sh $ source /opt/rh/rh-python36/enable $ python Python 3.6.12 ~ >>> ターミナル起動時にPython3を有効化したい場合には :file:`~/.bashrc` に以下の1行を追記する。 .. code-block:: sh $ source /opt/rh/rh-python36/enable Pythonのライブラリインストール ************************************* Python2 ------------------------------------- - pycrypto - requests - future .. code-block:: sh $ pip install pycrypto $ pip install requests $ pip install future Python3 ------------------------------------- - future - six - pycrypto - lxml .. code-block:: sh $ pip3 install future $ pip3 install six $ pip3 install pycrypto $ pip3 install lxml .. note:: pip3でインストールする場合、SCLでPython3を有効化する必要がある IROHA2のインストール ##################################### IROHA2ソースコードの展開 ************************************* 任意のディレクトリに :file:`iroha2.tar.gz` を展開する。推奨するインストール先は :file:`/opt/mlfsoft` である。 .. code-block:: sh $ cd /opt $ mkdir mlfsoft $ cd mlfsoft $ pwd /opt/mlfsoft # iroha2.tar.gzをコピー後 $ tar zxvf iroha2.tar.gz $ ls iroha2 シーケンス管理サーバーのシンボリックリンク作成(version 2.6のみ) -------------------------------------------------------- シーケンス管理サーバーのスクリプトおよびファサードは :file:`iroha2/iroha-settings/sequence/database` 以下にその実体を格納しているが、 実装の都合上 :file:`iroha2/iroha-sequence-server/database` にシンボリックリンクを貼ることで対応している。 ファイルの受け渡し方法などによってはこのシンボリックリンクが無効になる可能性があることから、 そのような場合には以下の手順でシンボリックリンクを作成する。 .. code-block:: sh $ 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 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. csv-table:: run.shの修正点 :header-rows: 1 :name: py3_runsh 修正前, 修正後 python(Pythonを実行している部分), python3 各サーバーの起動スクリプト ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ サービスとしてサーバーを実行する場合、後述するように起動スクリプトを修正する。 シーケンス管理サーバー(Version 2.6.2以前) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ シーケンス管理サーバーの :file:`irhlibseq` フォルダにある以下のファイルのシェバン(1行目のインタプリタを指定する部分)を修正する。 - irhfacademngr.py - irhrunsrv.py - runcheck.py .. csv-table:: シーケンス管理サーバーの修正点 :header-rows: 1 :name: py3_irhlibseq 修正前, 修正後 #!/usr/bin/env python(1行目), #!/usr/bin/env python3 Version 2.6.3以降はこの修正を行わずにPython3によるファサードの実行が可能になっている。 サーバーの起動 ##################################### コマンドラインからの起動 ************************************* 各サーバーの起動コマンドについて説明する。設定等の詳細は装置スタッフマニュアルを参照のこと。 デバイス制御サーバー ------------------------------------- .. code-block:: sh $ cd /opt/mlfsoft/iroha2/iroha-device-server $ ./run.sh 装置管理サーバー ------------------------------------- .. code-block:: sh $ cd /opt/mlfsoft/iroha2/iroha-management-server $ ./run.sh シーケンス管理サーバー ------------------------------------- .. code-block:: sh $ cd /opt/mlfsoft/iroha2/iroha-sequence-server $ ./run.sh 統合制御サーバー ------------------------------------- .. code-block:: sh $ cd /opt/mlfsoft/iroha2/iroha-integrate-server $ ./run.sh サービスとしての登録と起動(version 2.6以降) ************************************* CentOS7以降ではsystemctlコマンドを利用して各サーバーを起動・停止する。 IROHA2.6以降はCentOS7以降のOSで動作することを想定していることから、 サービスとして実行する場合にはsystemctlコマンドを使用することとしている。 各サーバーフォルダに格納されているユニットファイル(:file:`.service`)を :file:`/etc/systemd/system/` に コピーし、登録コマンドを実行することでサービスとして登録することができる。 1. ファイルの準備 ----------------------- ユニットファイルおよび起動スクリプトを編集する。デバイス制御サーバーを例に説明する。 ユニットファイル:irhdevsrv.service ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [Service]の **ExecStart** で指定している起動スクリプトのパスをマシンの環境に合わせて修正する。 .. code-block:: config [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** の変更が必要な場合が多いので注意する。 .. code-block:: sh # スクリプトの先頭付近 PYTHON=/usr/bin/python EXE_PATH=/opt/mlfsoft/iroha2/iroha-device-server SRV_PORT=8085 EXE_USER=mlfdev また、起動スクリプトには実行権限を付与しておく。 .. code-block:: sh $ chmod 755 irhdevsrv 2. ユニットファイルの登録 ----------------------- ユニットファイルを登録し、サービスに反映させる。 .. code-block:: sh $ sudo cp irhdevsrv.service /etc/systemd/system $ sudo systemctl daemon-reload 3. サービスとしての起動 ----------------------- 以下のコマンドでIROHA2サーバーの起動を制御することができる。 .. code-block:: sh # 起動 $ sudo systemctl start irhdevsrv # 状態確認 $ sudo systemctl status irhdevsrv # 再起動 $ sudo systemctl restart irhdevsrv # 停止 $ sudo systemctl stop irhdevsrv サービスの自動起動の有効化、無効化は以下のコマンドで設定する。 .. code-block:: sh # 自動起動の有効化 $ sudo systemctl enable irhdevsrv # 自動起動の無効化 $ sudo systemctl disable irhdevsrv サービスとしての登録と起動(version 2.6以前) ************************************* 各サーバーフォルダに格納されている起動スクリプトを :file:`/etc/init.d` に コピーし、登録コマンドを実行することで各サーバーをサービスとして起動・停止できる。 1. ファイルの準備 ----------------------- 起動スクリプトを編集する。デバイス制御サーバーを例に説明する。 起動スクリプト:irhdevsrv ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 起動スクリプト自身のパス **EXE_PATH** 、サーバーのポート番号 **SRV_PORT** 、 実行するユーザー名 **EXE_USER** をマシンの環境に合わせて修正する。 .. code-block:: sh # スクリプトの先頭付近 EXE_PATH=/opt/mlfsoft/iroha2/iroha-device-server SRV_PORT=8085 EXE_USER=mlfdev また、起動スクリプトには実行権限を付与しておく。 .. code-block:: sh $ chmod 755 irhdevsrv 2. 起動スクリプトの登録 ----------------------- 起動スクリプトを :file:`/etc/init.d` にコピーする。 .. code-block:: sh $ sudo cp irhdevsrv /etc/init.d/ 起動スクリプトをサービスに登録する。 .. code-block:: sh $ sudo chkconfig --add irhdevsrv 3. サービスとしての起動 ----------------------- 以下のコマンドでIROHA2サーバーの起動を制御することができる。 .. code-block:: sh # 起動 $ sudo service irhdevsrv start # 状態確認 $ sudo service irhdevsrv status # 再起動 $ sudo service irhdevsrv restart # 停止 $ sudo service irhdevsrv stop 自動起動の有効化、無効化は以下のコマンドで設定する。 .. code-block:: sh # 自動起動の有効化 $ sudo chkconfig irhdevsrv on # 自動起動の無効化 $ sudo chkconfig irhdevsrv off