NextEPCを使ってEPCを構築する(ビルド編)

弊社は、「研究開発ITサービス」を行っているため、様々な実験システムに触れる機会があります。
その1つに、他社製のEPCとeNodeBが使用されているシステムがあり、このEPCではOpenEPCというソフトウェアが採用されていました。

OpenEPCの調査を続けているうちに、github上でソースコードが公開されているNextEPCというプロジェクトの存在を知り、各ノード間のインタフェースが堅持されているのであれば、もしかしたら比較的単純にNextEPCに置き換えられるのではないかと思い始めました。
そこで、既存システムのEPCをNextEPCに置き換えるべく悪戦苦闘したので、その内容を残しておきます。

NextEPCを使うにあたり、以下のURLの内容を参考にしました。

構築対象マシン

第一線を退いて社内で眠っていたThinkPad T430を使用しました。このマシンには、オンボードのネットワークインタフェースが1つしかなかったので、USBのEtherデバイスを2つ増設しました。
OSは、Ubuntu 16.04 LTSを使用しました。

構築環境

構築環境は、以下の図のとおりです。

eNodeBやUEについては、既存のシステムのノードをそのまま使用するため、手は入れません。

NextEPCの使用方法

NextEPCを使う方法は、aptでインストールする方法と、ソースからビルドする方法があります。
今回は、ソースコードに手を入れることを想定していたため、後者のソースからビルドする方法を採用しました。

ビルド手順

以下のURLの内容に従ってビルドします。

事前準備

・MongoDBのインストール
コンソール上で、以下のコマンドを実行し、MongoDBがactive(running)であることを確認します。

$ sudo apt update
$ sudo apt -y install mongodb
$ sudo systemctl status mongodb
● mongodb.service - An object/document-oriented database
   Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-03-26 13:42:54 JST; 10min ago
     Docs: man:mongod(1)
 Main PID: 725 (mongod)
    Tasks: 10
   Memory: 61.8M
      CPU: 3.716s
   CGroup: /system.slice/mongodb.service
           mq725 /usr/bin/mongod --config /etc/mongodb.conf

Mar 26 13:42:54 t430 systemd[1]: Started An object/document-oriented database.

・TUNデバイスの設定
コンソール上で、以下のコマンドを実行し、systemd-udevdがactive(running)であることを確認します。

$ ls -al /dev/net/tun
crw-rw-rw- 1 root root 10, 200 Mar 26 13:42 /dev/net/tun
$ sudo apt -y install udev
$ sudo systemctl status systemd-udevd
● systemd-udevd.service - udev Kernel Device Manager
   Loaded: loaded (/lib/systemd/system/systemd-udevd.service; static; vendor preset: enabled)
   Active: active (running) since Tue 2019-03-26 13:56:55 JST; 57s ago
     Docs: man:systemd-udevd.service(8)
           man:udev(7)
 Main PID: 2156 (systemd-udevd)
   Status: "Processing..."
    Tasks: 1
   Memory: 23.7M
      CPU: 5ms
   CGroup: /system.slice/systemd-udevd.service
           mq2156 /lib/systemd/systemd-udevd

Mar 26 13:56:55 t430 systemd[1]: Starting udev Kernel Device Manager...
Mar 26 13:56:55 t430 systemd[1]: Started udev Kernel Device Manager.

以下のコマンドを実行し、システム起動時にNextEPCで使用するTUNデバイスが作成されるように設定します。

$ sudo sh -c "cat << EOF > /etc/systemd/network/99-nextepc.netdev
> [NetDev]
> Name=pgwtun
> Kind=tun
> EOF"
$ cat /etc/systemd/network/99-nextepc.netdev
[NetDev]
Name=pgwtun
Kind=tun

以下のコマンドを実行し、pgwtunデバイスが作成されていることを確認します。

$ sudo systemctl enable systemd-networkd
$ sudo systemctl restart systemd-networkd
$ sudo apt-get -y install net-tools
$ ifconfig pgwtun
pgwtun    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          POINTOPOINT NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

・IPv6の設定
以下のコマンドを実行し、pgwtunデバイスのIPv6を無効化しないように設定します。

$ sysctl -n net.ipv6.conf.pgwtun.disable_ipv6
0
$ sudo sh -c "echo 'net.ipv6.conf.pgwtun.disable_ipv6=0' > /etc/sysctl.d/30-nextepc.conf"
$ sudo sysctl -p /etc/sysctl.d/30-nextepc.conf

・pgwtunデバイスのIPアドレスの設定
以下のコマンドを実行し、pgwtunデバイスにIPアドレスを設定します。

$ sudo sh -c "cat << EOF > /etc/systemd/network/99-nextepc.network
> [Match]
> Name=pgwtun
> [Network]
> Address=45.45.0.1/16
> Address=cafe::1/64
> EOF"

$ sudo systemctl restart systemd-networkd
$ ifconfig pgwtun
pgwtun    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:45.45.0.1  P-t-P:45.45.0.1  Mask:255.255.0.0
          inet6 addr: cafe::1/64 Scope:Global
          UP POINTOPOINT NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

NextEPCのビルド

以下のコマンドを実行し、NextEPCをビルドします。

$ sudo apt-get -y install autoconf libtool gcc pkg-config git flex bison libsctp-dev libgnutls28-devl-dev libidn11-dev libmongoc-dev libbson-dev libyaml-dev

$ git clone https://github.com/acetcom/nextepc
$ cd nextepc
$ autoreconf -iv
$ ./configure --prefix=`pwd`/install
$ make -j `nproc`
$ make install

$ ls -lF install/
total 16
drwxrwxr-x 2 bit bit 4096 Mar 26 14:13 bin/
drwxrwxr-x 3 bit bit 4096 Mar 26 14:13 etc/
drwxrwxr-x 3 bit bit 4096 Mar 26 14:13 lib/
drwxrwxr-x 4 bit bit 4096 Mar 26 14:13 var/
bit@t430:~/nextepc$ ls -lF install/bin/
total 12536
-rwxr-xr-x 1 bit bit 2689520 Mar 26 14:13 nextepc-epcd*
-rwxr-xr-x 1 bit bit  244768 Mar 26 14:13 nextepc-hssd*
-rwxr-xr-x 1 bit bit 1732000 Mar 26 14:13 nextepc-mmed*
-rwxr-xr-x 1 bit bit  295296 Mar 26 14:13 nextepc-pcrfd*
-rwxr-xr-x 1 bit bit  503016 Mar 26 14:13 nextepc-pgwd*
-rwxr-xr-x 1 bit bit  345984 Mar 26 14:13 nextepc-sgwd*
-rwxr-xr-x 1 bit bit  439528 Mar 26 14:13 testcore*
-rwxr-xr-x 1 bit bit 3507048 Mar 26 14:13 testepc*
-rwxr-xr-x 1 bit bit 3063600 Mar 26 14:13 testvolte*

Web UIのインストール

以下のコマンドを実行し、Web UIをインストールします。

$ sudo apt-get -y install curl
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get -y install nodejs
$ cd webui/
$ npm install

ここまでの手順で、NextEPCのビルドが完了し、設定を行うための準備ができました。
次回は、NextEPCの設定方法をご紹介します。
以上。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*