.. _ManyoLibInstallationOnLinux:

==============================================
Manyo Library Installation on Linux
==============================================
ここでは、万葉ライブラリ(C++)および関連する装置専用ライブラリのビルドおよびインストールについて述べる。

概要
========
万葉ライブラリの機能はC++コードで実装されており、それらの機能はPythonから簡単に呼び出せるようになっている。従って万葉ライブラリのビルドにはC++の開発（ビルド）環境に加え、Pythonの開発環境やPythonラッパー用のツール(SWIG)などのインストールも必要である。

本章で対象としているディストリビューションは以下の通り。

- Ubuntu 24.04 / 22.04 (Mint Linux 22/21)
- AlmaLinux9
- AlmaLinux8 / RockyLinux8


同系列のディストリビューションなら同じ手順でインストール可能であろう。


ビルド環境構築
=================

------------------------------
ツール類のインストール
------------------------------
ここでは万葉ライブラリのビルドに必要なツールのインストール等の構築手段を示す。

主なツールは以下の通り。

- g++
- cmake
- swig


Ubuntu系列の場合
---------------------------
Ubuntuであれば、特にレポジトリの追加も必要なく下記のようにインストールできる。

::

    $ sudo apt install g++ cmake swig



AlmaLinux/RockyLinuxの場合
-----------------------------
AlmaLinuxなどRedhat系列のディストリビューションでは、ビルドに必要なgccなど開発系パッケージや、各種ライブラリのパッケージを導入するためにあらかじめレポジトリの追加が必要である。


.. table:: External repositories required for build
    :align: center

    +----------------------------+-----------------------------------------------+
    |作業                        |内容                                           |
    +============================+===============================================+
    |追加のレポジトリ(AlmaLinux9)|epel および CRB (CodeReady Linux Builder)を追加|
    +----------------------------+-----------------------------------------------+
    |追加のレポジトリ(AlmaLinux8)|epel および PowerTools を追加                  |
    +----------------------------+-----------------------------------------------+
    |その他必要なツール類        |swig, git および cmake 導入                    |
    +----------------------------+-----------------------------------------------+

ビルドにはSwigが必要となるため、そのパッケージをインストールするために AlmaLinux9では *CRB (CodeReady Linux Builder)* が、 AlmaLinux8/RockyLinux8では *PowerTools* が必要となる。

上記のうち、開発環境パッケージとepelの導入を以下のように行う。

::

    $ sudo dnf install epel-release

次に、レポジトリ *CRB* もしくは *PowerTools* の追加には以下のファイルを編集する。

.. table:: repo files for each Distribution
    :align: center

    +------------+------------------------------------------+
    |Distribution|File path                                 |
    +============+==========================================+
    |AlmaLinux9  |/etc/yum.repos.d/almalinux-crb.repo       |
    +------------+------------------------------------------+
    |AlmaLinux8  |/etc/yum.repos.d/almalinux-powertools.repo|
    +------------+------------------------------------------+
    |RockyLinux8 |/etc/yum.repos.d/Rocky-PowerTools.repo    |
    +------------+------------------------------------------+


これらのファイルの以下の行

::

    enabled=0

を

::

    enabled=1

に書き換える。

続けてこれらのレポジトリの情報を更新するために、アップデートを行う（epelとCRB/PowerToolsのため）。

::

    $ sudo dnf update


最後に、cmake や swig, git（既にインストールされている場合もあるかもしれないが）を以下のようにインストールする。

::

    $ sudo dnf install g++ cmake swig git






---------------------------
インストール先の作成
---------------------------
本章では万葉ライブラリや空蝉の全てのコードをホームフォルダ（${HOME}）以下に *mlfsoft* というフォルダを作成しインストールする方法を取る場合を例にして説明する。ユーザー名を *hogehoge* とすると、以下のようになる。

::

    /home/hogehoge/mlfsoft

このフォルダの下に以下のように万葉ライブラリや空蟬パッケージのフォルダが置かれることになる。

::

    /home/hogehoge/mlfsoft/manyo
    /home/hogehoge/mlfsoft/python-utsusemi/utsusemi


インストール作業の記述を簡略化するために、このフォルダの場所を環境変数 *MLFSOFT_PATH* として指定し、以降の作業ではこれを用いる。またディストリビューションでは提供されないパッケージ（本マニュアルでは別途ビルドするNeXusライブラリ）をビルド・インストールする必要があるが、そのインストール先は万葉ライブラリのインストール先と同じとする。そのために、環境変数 *MANYO_PATH* も指定しておく。

::

    $ export MLFSOFT_PATH=${HOME}/mlfsoft
    $ export MANYO_PATH=${MLFSOFT_PATH}/manyo
    $ mkdir -p ${MLFSOFT_PATH}
    $ mkdir -p ${MANYO_PATH}

.. table:: Example for environment variables
    :align: center

    +------------+------------------------------+
    |環境変数    |例                            |
    +============+==============================+
    |MLFSOFT_PATH|"/home/hogehoge/mlfsoft"      |
    +------------+------------------------------+
    |MANYO_PATH  |"/home/hogehoge/mlfsoft/manyo"|
    +------------+------------------------------+


----------------------------------------------
必要な外部ライブラリのインストール
----------------------------------------------

万葉ライブラリのコンパイルや、空蟬可視化コードを動作させるのにいくつかの外部ライブラリなどのパッケージの導入が必要である。AlmaLinux9におけるパッケージの情報を下記の一覧に示す。

Python3関連で必要となるライブラリに関し、未だデフォルトのパッケージでは少し古いバージョンがインストールされたりパッケージ間の整合性がよくなかったりするために、 pip3 (python3用pip)を用いてインストールする方法を示す。

.. table:: External Shared Library required to build C++ code
    :align: center

    +-----------------------+-------------------------------+--------------------+
    |                       | ライブラリ                    | 必要なバージョン   |
    +=======================+===============================+====================+
    |                       | Python3                       | 3.9 or later       |
    |                       +-------------------------------+--------------------+
    |万葉ライブラリ関連     | Mini-XML                      | 3.5 or later       |
    |                       +-------------------------------+--------------------+
    |（C++コード）          | HDF5                          | 1.8.x              |
    |                       +-------------------------------+--------------------+
    |                       | NeXus API                     | latest version     |
    |                       +-------------------------------+--------------------+
    |                       | Gnu Scientific Library        | 1.1x or later      |
    |                       +-------------------------------+--------------------+
    |                       | Boost C++ Library             | 1.46 or later      |
    |                       +-------------------------------+--------------------+
    |                       | Open SSL                      |                    |
    |                       +-------------------------------+--------------------+
    |                       | zLib                          |                    |
    +-----------------------+-------------------------------+--------------------+


C++コード用ライブラリのインストール
-------------------------------------------------
パッケージで存在するC++コード用ライブラリを導入する。それぞれのディストリビューションでのパッケージは以下のようになる。


.. table:: Python packages required for Utsusemi environment
    :align: center

    +----------------+---------------------------------------------------------------------------------------+
    |Distribution    |Packages                                                                               |
    +================+=======================================================================================+
    |Ubuntu 24/22    |python3-dev, libhdf5-dev, libmxml-dev, libgsl-dev, libssl-dev, liblapack-dev,          |
    +----------------+libnexus-dev, libboost-serialization-dev, libboost-filesystem-dev, libboost-system-dev,|
    |Mint Linux 22/21|libboost-program-options-dev, zlib1g-dev                                               |
    +----------------+---------------------------------------------------------------------------------------+
    |AlmaLinux9      |python3-devel, mxml-devel, hdf5-devel, gsl-devel, boost-devel, openssl-devel           |
    +----------------+---------------------------------------------------------------------------------------+
    |AlmaLinux8      |python3.11-devel, mxml-devel, hdf5-devel, gsl-devel, boost-devel, openssl-devel        |
    +----------------+---------------------------------------------------------------------------------------+

これらの具体的なインストール例としては、Ubuntu系（Ubuntu, Mint）であれば以下のようになる。

::

    $ sudo apt install -y python3-dev libhdf5-dev libmxml-dev libgsl-dev libssl-dev liblapack-dev libnexus-dev libboost-serialization-dev libboost-filesystem-dev libboost-system-dev libboost-program-options-dev zlib1g-dev


また、RedHat9系（AlmaLinux9）では以下のようになる。

::

    $ sudo dnf install python3-devel mxml-devel hdf5-devel gsl-devel boost-devel openssl-devel


Redhat8系（AlmaLinux8/RockyLinux8）では、デフォルトのPython3のバージョンが3.6と少し古いので、ここでは3.11を導入しalternativesコマンドでデフォルトのPython3とする。

::

    $ sudo dnf install python3.11-devel mxml-devel hdf5-devel gsl-devel boost-devel openssl-devel
    $ sudo alternatives --set python3 /usr/bin/python3.11



NeXusのインストール(AlmaLinux/RockyLinux)
---------------------------------------------
AlmaLinuxやRockyLinuxでは、NeXus APIはパッケージが存在しないためインストールにはコードをダウンロードしビルドする必要がある。なおインストール先は万葉ライブラリのインストール先と同じとする。

ダウンロード先: https://github.com/nexusformat/code/releases

ファイル: 最新版をgitでダウンロード

コンパイル手順は下記の通り。インストール先は${MANYO_PATH}を指定。ただし、RedHat7以降の系列でも64bitのライブラリは *lib64* というフォルダに入れられるため、万葉ライブラリでのデフォルトである *lib* にコピーする。


::

    $ git clone https://github.com/nexusformat/code
    $ cd code
    $ mkdir build
    $ cd build
    $ cmake -DCMAKE_INSTALL_PREFIX:PATH=${MANYO_PATH} ..
    $ make
    $ make install
    $ mkdir ${MANYO_PATH}/lib
    $ cp ${MANYO_PATH}/lib64/* ${MANYO_PATH}/lib
    $ cp ${MANYO_PATH}/include/nexus/* ${MANYO_PATH}/include/




手順の概要
============================================
主な手順は以下の通りである。

1. ソースコードの準備
2. 万葉ライブラリ コアコード
3. 空蟬基本コード
4. 空蟬 装置専用コード

ビルド作業
================

-------------------------
ソースコードの準備
-------------------------


ソースコードは、subversionやgithubなどで管理されているが、空蝉Install PortalサイトにあるLinux汎用版のインストールパッケージにまとまって入っているので、本稿ではこれを利用する。

`空蟬ポータルサイト <https://mlfinfo.jp/groups/comp/ja/utsusemi.html>`_ の **Linux（汎用版）** における *Download links* からダウンロードする。

これを展開した *src* ディレクトリにあるので、それを利用する。

::

    $ tar xzvf Utsusemi_4.0.250718.tar.gz
    $ cd Utsusemi_4.0.250718
    $ ls -F
    Install.py src/
    $ ls -F src/
        manyo/  uGao/  Utsusemi/  Utsusemi-DNA/  Utsusemi-ENG/  Utsusemi-SAS/




---------------------------------------------
万葉ライブラリコアコード
---------------------------------------------
基本的に万葉ライブラリ関連のビルドには **CMake** を使用する。
万葉ライブラリコアコードのインストールは以下のように行う。結果、C++コードがビルドされ、作成されたライブラリがインストールされる。

::

    $ cd manyo
    $ mkdir build
    $ cd build
    $ cmake .. -DCMAKE_INSTALL_PREFIX=${MANYO_PATH} -DMULTH=8 -DMANYO_INSTTYPE=O
    $ make install

なお、 *MANYO_PATH* は前節で示したようにインストール先のパスである。

ビルドについて
---------------------------------

上記のようにビルドにはCMakeを使用する。
万葉ライブラリのC++コード、及び後述する空蟬のC++コードが対応する。
いずれもCMakeで同じ手順でビルドできるように共通化してある。

書式とパラメータは以下のとおり。

::

    cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/Manyo [-DMULTH=<n>[, -DNEXUS_PATH=/path/to/nexul, -DMANYO_INSTTYPE=(N/O)]]


.. table:: CMake options for Manyo-lib build
    :align: center

    +--------------------+--------------------------------------------------+
    |Options             |必須|説明                                         |
    +====================+====+=============================================+
    |CMAKE_INSTALL_PREFIX|Y   |インストール先となるMANYO_PATHを指定         |
    +--------------------+----+---------------------------------------------+
    |MULTH               |N   |マルチスレッド処理の数の指定                 |
    +--------------------+----+---------------------------------------------+
    |NEXUS_PATH          |N   |Nexusformatのインストール先                  |
    +--------------------+----+---------------------------------------------+
    |MANYO_INSTTYPE      |N   |インストール方式: "N"/"O"（省略時"O"riginal）|
    +--------------------+----+---------------------------------------------+


---------------------------------
空蟬基本コード
---------------------------------

空蟬基本コードとしては

1. C++（万葉ライブラリ）コード
2. Pythonコード

から構成されているが、本章ではC++（万葉ライブラリ用）のビルドのみを示す。

実際には万葉ライブラリコアコードとほぼ同じ方法である。以下のようにC++コードがビルドされ、ライブラリがインストールされる。

::

    $ cd Utsusemi
    $ mkdir build
    $ cmake .. -DCMAKE_INSTALL_PREFIX=${MANYO_PATH} -DMULTH=8 -DMANYO_INSTTYPE=O
    $ make install


それぞれの装置における固有の関数が必要な場合がある。固有の関数を機能させるためには空蟬基本コードを拡張する装置固有コードが必要となる場合がある。
そのため、いくつかの装置は下記のように万葉ライブラリ用のC++コードを空蝉基本コード以外に別途ビルドする必要がある。
それぞれのBLごとのインストール方法は後述する。

.. table:: Manyo Library codes for each beamline
    :align: center

    +----+----------------------------+
    |BL  |万葉ライブラリ用コード      |
    +====+============================+
    |BL01|（空蝉基本コードに含まれる）|
    +----+----------------------------+
    |BL02|Utsusemi-DNA/manyo          |
    +----+----------------------------+
    |BL11|（空蝉基本コードに含まれる）|
    +----+----------------------------+
    |BL14|（空蝉基本コードに含まれる）|
    +----+----------------------------+
    |BL15|Utsusemi-SAS/manyo.         |
    +----+----------------------------+
    |BL17|（BL15のものを流用）        |
    +----+----------------------------+
    |BL19|Utsusemi-ENG/manyo          |
    +----+----------------------------+


------------------------------------------------
BL01, BL11, BL14の場合
------------------------------------------------

空蝉基本コードに含まれるので、特に追加の作業は生じない。


------------------------------------------------
BL15, BL17の場合
------------------------------------------------

BL15は、専用の万葉ライブラリ用のコード(C++)のビルドが必要である。

BL17は基本BL15の環境を利用するので、BL15のインストールを行った後であれば使用可能である。

万葉ライブラリ用コード
------------------------------------------------
空蟬の万葉ライブラリコードと同じである。インストール先などのパラメータも一致させること。

::

    $ cd Utsusemi-SAS
    $ mkdir build
    $ cmake .. -DCMAKE_INSTALL_PREFIX=${MANYO_PATH} -DMULTH=8 -DMANYO_INSTTYPE=O
    $ make install



------------------------------------------------
BL02の場合
------------------------------------------------

BL02においては、独自の計算用関数（C++）が導入されているので、それらに必要なライブラリを追加でインストールする必要がある。

.. table:: External Shared Libraries for BL02 environment (AlmaLinux9)
    :align: center

    +-----------------------+-------------------------------+--------------------+
    |                       | 必要なC++ライブラリ           | 必要なバージョン   |
    +=======================+===============================+====================+
    |                       | blas                          | 指定なし           |
    |                       +-------------------------------+--------------------+
    |万葉ライブラリ関連     | lapack                        | 指定なし           |
    |                       +-------------------------------+--------------------+
    |（C++コード）          | levmar                        | 2.5                |
    +-----------------------+-------------------------------+--------------------+

万葉ライブラリ用C++コード
------------------------------------------------

levmarコードのコンパイルに必要な、blasおよびlapackのパッケージインストールを行う。

Ubuntuであれば

::
    $ sudo apt install liblapack-dev

AlmaLinux/RockyLinuxであれば

::

    $ su -
    # dnf install lapack-devel blas-devel
    # exit

となる。
続けてUtsusemi-DNAのC++関数群のビルドとインストールを以下に示すように実行する。これにより、 *levmar* , *manyo/LevmarTools* , *manyo/DNA* といったライブラリがビルド・インストールされる。

::

    $ cd Utsusemi-DNA
    $ mkdir build
    $ cd build
    $ cmake .. -DCMAKE_INSTALL_PREFIX=${MANYO_PATH} -DMULTH=8 -DMANYO_INSTTYPE=O
    $ make install


------------------------
BL19の場合
------------------------

BL19は、専用の万葉ライブラリ用のコード(C++)のコンパイル・インストールが必要である。

万葉ライブラリ用コード
------------------------------------------------
空蟬の万葉ライブラリコードと同じである。インストール先などのパラメータも一致させること。

::

    $ cd Utsusemi-ENG
    $ mkdir build
    $ cd build
    $ cmake .. -DCMAKE_INSTALL_PREFIX=${MANYO_PATH} -DMULTH=8 -DMANYO_INSTTYPE=O
    $ make install



動作環境構築
==============
万葉ライブラリをPythonからimportするために必要な最小限の設定は下記のようになる。

::

    export MLFSOFT_PATH=${HOME}/mlfsoft
    export MANYO_PATH=${MLFSOFT_PATH}/manyo
    export LD_LIBRARY_PATH=${MANYO_PATH}/lib:${LD_LIBRARY_PATH}
    export PYTHONPATH=${MANYO_PATH}:${PYTHONPATH}


.. table:: Environment variables to import Manyo
    :align: center

    +---------------+---------------------------------------------------------------+
    |環境変数       |役割                                                           |
    +===============+===============================================================+
    |MLFSOFT_PATH   |万葉ライブラリ、空蝉を含めたMLF関連ソフトウェアのインストール先|
    +---------------+---------------------------------------------------------------+
    |MANYO_PATH     |万葉ライブラリのインストール先                                 |
    +---------------+---------------------------------------------------------------+
    |LD_LIBRARY_PATH|共有ライブラリの検索パス（Linux一般で使用）                    |
    +---------------+---------------------------------------------------------------+
    |PYTHONPATH     |Pythonのライブラリ検索パス（Pythonが使用）                     |
    +---------------+---------------------------------------------------------------+


::

    $ python3
    >>> import Manyo
    Manyo >>>


