ソースからのビルド

Orion Context Broker のリファレンス配布は CentOS 8.x です。これは、broker を他のディストリビューションに組み込むことができないことを意味しません (実際には可能です)。このセクションでは、他のディストリビューションをビルドする方法についても説明しています。CentOS を使用していない人に役立つかもしれません。ただし、"公式にサポートされている" 唯一の手順は CentOS 8.x 用の手順です。他のものは "現状のまま" 提供され、随時時代遅れになる可能性があります。

CentOS 8.x (正式サポート)

Orion Context Broker は、以下のライブラリをビルドの依存関係として使用します :

  • boost: 1.66
  • libmicrohttpd: 0.9.70 (ソースから)
  • libcurl: 7.61.1
  • openssl: 1.1.1g
  • libuuid: 2.32.1
  • libmosquitto: 2.0.12 (ソースから)
  • Mongo C driver: 1.17.4 (ソースから)
  • rapidjson: 1.1.0 (ソースから)
  • gtest (make unit_test ビルディング・ターゲットのみ) : 1.5 (ソースから)
  • gmock (make unit_test ビルディング・ターゲットのみ) : 1.5 (ソースから)

基本的な手順は次のとおりです (root 権限でコマンドを実行しないと仮定し、root 権限が必要なコマンドに sudo を使用します) :

  • 必要なビルドツール (コンパイラなど) をインストールします

    sudo yum install make cmake gcc-c++
    
  • 必要なライブラリをインストールします (次の手順で説明する、ソースから取得する必要があるものを除きます)

    sudo yum install boost-devel libcurl-devel gnutls-devel libgcrypt-devel openssl-devel libuuid-devel cyrus-sasl-devel
    
  • ソースから Mongo Driver をインストールします

    wget https://github.com/mongodb/mongo-c-driver/releases/download/1.17.4/mongo-c-driver-1.17.4.tar.gz
    tar xfvz mongo-c-driver-1.17.4.tar.gz
    cd mongo-c-driver-1.17.4
    mkdir cmake-build
    cd cmake-build
    cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF ..
    make
    sudo make install
    
  • ソースから rapidjson をインストールする :

    wget https://github.com/miloyip/rapidjson/archive/v1.1.0.tar.gz
    tar xfvz v1.1.0.tar.gz
    sudo mv rapidjson-1.1.0/include/rapidjson/ /usr/local/include
    
  • ソースから libmicrohttpd をインストールします (./configure 下のコマンドはライブラリの最小限のフットプリントを得るための推奨ビルド設定を示していますが、上級ユーザの方は好きなように設定できます)

    wget http://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.70.tar.gz
    tar xvf libmicrohttpd-0.9.70.tar.gz
    cd libmicrohttpd-0.9.70
    ./configure --disable-messages --disable-postprocessor --disable-dauth
    make
    sudo make install  # installation puts .h files in /usr/local/include and library in /usr/local/lib
    sudo ldconfig      # just in case... it doesn't hurt :)
    
  • ソースから mosquitto をインストールします (WITH_CJSON, WITH_STATIC_LIBRARIES, WITH_SHARED_LIBRARIES の設定を変更することで、mosquitto-2.0.12/ の下の config.mk ファイルを変更してビルドを微調整できます)

    wget http://mosquitto.org/files/source/mosquitto-2.0.12.tar.gz
    tar xvf mosquitto-2.0.12.tar.gz
    cd mosquitto-2.0.12
    sed -i 's/WITH_CJSON:=yes/WITH_CJSON:=no/g' config.mk
    sed -i 's/WITH_STATIC_LIBRARIES:=no/WITH_STATIC_LIBRARIES:=yes/g' config.mk
    sed -i 's/WITH_SHARED_LIBRARIES:=yes/WITH_SHARED_LIBRARIES:=no/g' config.mk
    make
    sudo make install  # installation puts .h files in /usr/local/include and library in /usr/local/lib
    sudo ldconfig      # Update /etc/ld.so.cache with the new library files in /usr/local/lib
    
  • コードを取得します (または、圧縮されたバージョンや別の URL パターンを使用してダウンロードできます。例えば、git clone git@github.com:telefonicaid/fiware-orion.git) :

    sudo yum install git
    git clone https://github.com/telefonicaid/fiware-orion
    
  • ソースをビルドします :

    cd fiware-orion
    make
    
  • (オプションですが強く推奨されます) 単体テストと機能テストを実行します。 これについては、以下の特定のセクションで詳しく説明します。

  • バイナリをインストールします。INSTALL_DIR を使用して、インストール・プレフィックス・パス (デフォルトは /usr) を設定することができます。したがって、broker は $INSTALL_DIR/bin ディレクトリにインストールされます

    sudo make install INSTALL_DIR=/usr
    
  • broker のバージョン・メッセージを呼び出す、すべてが正常であることを確認してください :

    contextBroker --version
    

テスト, カバレッジと RPM

Orion Context Broker には、次の手順に従って実行できる一連のユニット・テスト, valgrind, およびエンドツーエンドのテストが付属しています (オプションですが、強くお勧めします):

  • ソースから GoogleTest/Mock をインストールします (これには RPM パッケージがありますが、現在の CMakeLists.txt 構成では機能しません)。以前の URL は http://googlemock.googlecode.com/files/gmock-1.5.0.tar.bz2 でしたが、Google は2016年8月下旬にそのパッケージを削除し、機能しなくなりました。
    sudo yum install python2
    wget https://nexus.lab.fiware.org/repository/raw/public/storage/gmock-1.5.0.tar.bz2
    tar xfvj gmock-1.5.0.tar.bz2
    cd gmock-1.5.0
    ./configure
    sed -i 's/env python/env python2/' gtest/scripts/fuse_gtest_files.py  # little hack to make installation to work on CentOS 8
    make
    sudo make install  # installation puts .h files in /usr/local/include and library in /usr/local/lib
    sudo ldconfig      # just in case... it doesn't hurt :)
    

aarch64 アーキテクチャの場合、yum を使用して libxslt をインストールし、--build=arm-linux オプションを指定して /configure を実行します。

  • MongoDB をインストールします (テストはローカルホストで実行されている mongod に依存します)。詳細については、MongoDB の公式ドキュメントを確認してください。推奨バージョンは 4.4 です (以前のバージョンで動作する可能性がありますが、お勧めしません)。

  • ユニット・テストを実行します

    make unit_test
    
  • 機能テストと valgrind テストに必要な追加のツールをインストールします:

    sudo yum install curl nc valgrind bc
    sudo pip2 install virtualenv
    

aarch64 アーキテクチャの場合、さらに yum で、python2-devel, rpm-build と libffi-devel をインストールします。これは、pyOpenSSL をビルドするときに必要です。

  • テスト・ハーネスのための環境を準備します。基本的には、accumulator-server.py スクリプトをコントロールの下にあるパスにインストールしなければならず、~/bin が推奨です。また、/usr/bin のようなシステム・ディレクトリにインストールすることもできますが、RPM インストールと衝突する可能性がありますので、お勧めしません。さらに、ハーネス・スクリプト (scripts/testEnv.sh ファイル参照) で使用されるいくつかの環境変数を設定し、必要な Python パッケージを使用して virtualenv 環境を作成します。

    mkdir ~/bin
    export PATH=~/bin:$PATH
    make install_scripts INSTALL_DIR=~
    . scripts/testEnv.sh
    virtualenv /opt/ft_env --python=/usr/bin/python2
    . /opt/ft_env/bin/activate
    pip install Flask==1.0.2 pyOpenSSL==19.0.0 paho-mqtt==1.5.1
    
  • この環境でテスト・ハーネスを実行してください (時間がかかりますので、気をつけてください)

    make functional_test INSTALL_DIR=~
    
  • すべての機能テストに合格したら、valgrind テストを実行できます (これは機能テストよりも時間がかかります) :

    make valgrind INSTALL_DIR=~
    

次の手順を使用して、Orion Context Broker のカバレッジレポートを生成できます (オプション) :

  • lcov ツールをインストールします

    # Download .rpm file from http://downloads.sourceforge.net/ltp/lcov-1.14-1.noarch.rpm
    sudo yum install lcov-1.14-1.noarch.rpm
    
  • まず、unit_test と functional_test の成功パスを実行して、すべてが正常であることを確認します (上記参照)

  • カバレッジを実行します

    make coverage INSTALL_DIR=~
    

ソースコードの RPM を生成することができます (オプション) :

  • 必要なツールをインストールします

    sudo yum install rpm-build
    
  • RPM を生成します

    make rpm
    
  • 生成された RPM は ~/rpmbuild/RPMS/x86_64 ディレクトリに置かれます

Ubuntu 20.04 LTS

この手順は、Ubuntu 20.04 LTS 上で x86_64 および aarch64 アーキテクチャ用の Orion Context Broker をすることです。 また、Orion が依存する MongoDB 4.4 をビルドするための手順が含まれています。Orion Context Brokerは、ビルドの依存関係と して次のライブラリを使用します :

  • boost: 1.71.0
  • libmicrohttpd: 0.9.70 (ソースから)
  • libcurl: 7.68.0
  • openssl: 1.1.1f
  • libuuid: 2.34-0.1
  • libmosquitto: 2.0.12 (ソースから)
  • Mongo C driver: 1.17.4 (ソースから)
  • rapidjson: 1.1.0 (ソースから)
  • gtest (only for make unit_test building target): 1.5 (ソースから)
  • gmock (only for make unit_test building target): 1.5 (ソースから)

基本的な手順は次のとおりです (root 権限でコマンドを実行しないと仮定し、root 権限が必要なコマンドに sudo を使用します) :

  • 必要なビルドツール (コンパイラなど) をインストールします

    sudo apt install build-essential cmake
    
  • 必要なライブラリをインストールします (次の手順で説明する、ソースから取得する必要があるものを除きます)

    sudo apt install libboost-dev libboost-regex-dev libboost-thread-dev libboost-filesystem-dev \
                     libcurl4-gnutls-dev gnutls-dev libgcrypt-dev libssl-dev uuid-dev libsasl2-dev
    
  • ソースから Mongo Driver をインストールします

    wget https://github.com/mongodb/mongo-c-driver/releases/download/1.17.4/mongo-c-driver-1.17.4.tar.gz
    tar xfvz mongo-c-driver-1.17.4.tar.gz
    cd mongo-c-driver-1.17.4
    mkdir cmake-build
    cd cmake-build
    cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF ..
    make
    sudo make install
    
  • ソースから rapidjson をインストールします :

    wget https://github.com/miloyip/rapidjson/archive/v1.1.0.tar.gz
    tar xfvz v1.1.0.tar.gz
    sudo mv rapidjson-1.1.0/include/rapidjson/ /usr/local/include
    
  • ソースから libmicrohttpd をインストールします (./configure 下のコマンドはライブラリの最小限のフットプリントを 得るための推奨ビルド設定を示していますが、上級ユーザの方は好きなように設定できます)

    wget http://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.70.tar.gz
    tar xvf libmicrohttpd-0.9.70.tar.gz
    cd libmicrohttpd-0.9.70
    ./configure --disable-messages --disable-postprocessor --disable-dauth
    make
    sudo make install  # installation puts .h files in /usr/local/include and library in /usr/local/lib
    sudo ldconfig      # just in case... it doesn't hurt :)
    
  • ソースから mosquitto をインストールします (WITH_CJSON, WITH_STATIC_LIBRARIES, WITH_SHARED_LIBRARIES の設定を変更することで、mosquitto-2.0.12/ の下の config.mk ファイルを変更してビルドを微調整できます)

    wget http://mosquitto.org/files/source/mosquitto-2.0.12.tar.gz
    tar xvf mosquitto-2.0.12.tar.gz
    cd mosquitto-2.0.12
    sed -i 's/WITH_CJSON:=yes/WITH_CJSON:=no/g' config.mk
    sed -i 's/WITH_STATIC_LIBRARIES:=no/WITH_STATIC_LIBRARIES:=yes/g' config.mk
    sed -i 's/WITH_SHARED_LIBRARIES:=yes/WITH_SHARED_LIBRARIES:=no/g' config.mk
    make
    sudo make install  # installation puts .h files in /usr/local/include and library in /usr/local/lib
    sudo ldconfig      # Update /etc/ld.so.cache with the new library files in /usr/local/lib
    
  • コードを取得します (または、圧縮されたバージョンや別の URL パターンを使用してダウンロードできます。例えば、 git clone git@github.com:telefonicaid/fiware-orion.git) :

    sudo apt install git
    git clone https://github.com/telefonicaid/fiware-orion
    
  • ソースをビルドします :

    cd fiware-orion
    make
    
  • (オプションですが、強くお勧めします) 単体テスト (unit test) と機能テスト (functional tests) を実行します。 詳細については、以下のセクションをご覧ください。

  • バイナリをインストールします。INSTALL_DIR を使用して、インストール・プレフィックス・パス (デフォルトは /usr) を設定する ことができます。したがって、broker は $INSTALL_DIR/bin ディレクトリにインストールされます

    sudo make install INSTALL_DIR=/usr
    
  • broker のバージョン・メッセージを呼び出し、すべてが正常であることを確認してください :

    contextBroker --version
    

テストとカバレッジ

Orion Context Broker には、次の手順 (オプション) に従って実行することができる、valgrind およびエンド・ツー・エンドのテストの 機能的なスイートが付属しています :

  • ソースから Google Test/Mock をインストールします (このための RPM パッケージがありますが、現在の CMakeLists.txt の設定では動作しません)。以前は URL は http://googlemock.googlecode.com/files/gmock-1.5.0.tar.bz2 でしたが、 Google では2016年8月下旬にそのパッケージを削除したため、動作しなくなりました
    sudo apt install python-is-python2 xsltproc
    wget https://nexus.lab.fiware.org/repository/raw/public/storage/gmock-1.5.0.tar.bz2
    tar xfvj gmock-1.5.0.tar.bz2
    cd gmock-1.5.0
    ./configure
    make
    sudo make install  # installation puts .h files in /usr/local/include and library in /usr/local/lib
    sudo ldconfig      # just in case... it doesn't hurt :)
    

aarch64 アーキテクチャの場合、.-configure--build=arm-linux オプションとともに実行します。

  • MongoDB をインストールします (テストはローカルホストで実行されている mongod に依存します)。詳細については、 MongoDB の公式ドキュメントを確認してください。 推奨バージョンは 4.4 です (以前のバージョンで動作する可能性がありますが、お勧めしません)。

  • 単体テストを実行します :

    make unit_test
    
  • 機能テストと valgrind テストに必要な追加のツールをインストールします :

    curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py 
    sudo python get-pip.py 
    sudo apt install netcat valgrind bc 
    sudo pip install --upgrade pip 
    pip install virtualenv
    

aarch64 アーキテクチャの場合、さらに apt で、python2-devlibffi-dev をインストールします。これは、pyOpenSSL をビルドするときに必要です。

  • テスト・ハーネスのための環境を準備します。基本的には、accumulator-server.py スクリプトをコントロールの下にあるパスに インストールしなければならず、~/bin が推奨です。また、/usr/bin のようなシステム・ディレクトリにインストールすることも できますが、RPM インストールと衝突する可能性がありますので、お勧めしません。さらに、ハーネス・スクリプト (scripts/testEnv.sh ファイル参照) で使用されるいくつかの環境変数を設定し、Ubuntu のデフォルトの Flask の代わりに Flask version 1.0.2 を使用する ために、virtualenv 環境を作成する必要があります。この環境でテスト・ハーネスを実行します。

    mkdir ~/bin
    export PATH=~/bin:$PATH
    make install_scripts INSTALL_DIR=~
    . scripts/testEnv.sh
    virtualenv /opt/ft_env
    . /opt/ft_env/bin/activate
    pip install Flask==1.0.2 pyOpenSSL==19.0.0 paho-mqtt==1.5.1
    
  • テスト・ハーネスを実行してください (時間がかかりますので、気をつけてください) make コマンドでテストを開始する前に、テストが失敗しないように次のパッチを適用してください。

    sed -i -e "s/Peer certificate cannot be authenticated[^\"]*/SSL peer certificate or SSH remote key was not OK/" /opt/fiware-orion/test/functionalTest/cases/0706_direct_https_notifications/direct_https_notifications_no_accept_selfsigned.test
    make functional_test INSTALL_DIR=~
    
  • すべての機能テストに合格したら、valgrind テストを実行できます (これは機能テストよりも時間がかかります) :

    make valgrind
    

次の手順を使用して、Orion Context Broker のカバレッジレポートを生成できます (オプション) :

  • lcov ツールをインストールします

    sudo apt install lcov
    
  • まず、unit_test と functional_test の成功パスを実行して、すべてが正常であることを確認します (上記参照)

  • カバレッジを実行します

    make coverage INSTALL_DIR=~
    
  • テストの実行後にシステムサービスとして Orion を実行するためのセットアップを行います。curl localhost:1026/version コマンドを実行して、 セットアップが成功したことを確認します :

    sudo mkdir /etc/sysconfig
    sudo cp /opt/fiware-orion/etc/config/contextBroker /etc/sysconfig/
    sudo touch /var/log/contextBroker/contextBroker.log
    sudo chown orion /var/log/contextBroker/contextBroker.log
    sudo cp /opt/fiware-orion/rpm/SOURCES/etc/logrotate.d/logrotate-contextBroker-daily /etc/logrotate.d/
    sudo cp /opt/fiware-orion/rpm/SOURCES/etc/sysconfig/logrotate-contextBroker-size /etc/sysconfig/
    sudo cp /opt/fiware-orion/rpm/SOURCES/etc/cron.d/cron-logrotate-contextBroker-size /etc/cron.d/
    sudo systemctl daemon-reload
    sudo systemctl start contextBroker.service