dorapon2000’s diary

忘備録的な。セキュリティとかネットワークすきです。

ns3.30でpybindgenが有効化されない

環境

問題

./waf configure時にPython Bindingsがnot enabledとなってしまう.enabledにならないとPyVizやそのたもろもろ使えない.

Checking for pybindgen location                                            : ../pybindgen (guessed) 
Checking for python module 'pybindgen'                                     : ok 
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'pybindgen.version'
Checking for pybindgen version                                             : not found 
pybindgen_version is an empty string

解決策

  1. pybindgenの最新版を公式サイトからダウンロード
  2. .tar.gzを解凍
  3. ./waf configure --with-pybindgen=path/to/pybindgen
  4. ./waf build  

1

PyBindGen · PyPI

からpybindgenをtar.gz形式でダウンロード.記事投稿時点では0.20.0が最新.

f:id:dorapon2000:20190919023344p:plain

2

.tar.gzを解凍.ns3を公式の手順通りにインストールしている人は,解凍フォルダを~/workspace/ns-3-allinone/に保存するとよき.外部モジュールはここに集められているみたい.

3

ns3のルートフォルダ(ns3.30の場合はns-3.30/)下で,--with-pybindgenオプションでpybindgenフォルダを指定しながら./waf configureする

./waf configure --with-pybindgen=path/to/PyBindGen-0.20.0

path/to/pyindgenには解凍したフォルダへのパスを指定する.~/workspace/ns-3-allinone/に保存した人は../PyBindGen-0.20.0

うまくいけば,Python Bindgingsがenabledになる.PyVizもenabledになってくれている.

Checking for pybindgen location                                            : ../PyBindGen-0.20.0/ (given) 
Checking for python module 'pybindgen'                                     : 0.20.0 
Checking for pybindgen version                                             : 0.20.0 

...

PyViz visualizer              : enabled
Python API Scanning Support   : not enabled (Missing 'pygccxml' Python module)
Python Bindings               : enabled

4

ビルドする

./waf build

試しに--visオプションを使ってシミュレーションを走らせてみる.

./waf --run first --vis
Waf: Entering directory `/home/ns3/workspace/ns-3-allinone/ns-3.30/build'
Waf: Leaving directory `/home/ns3/workspace/ns-3-allinone/ns-3.30/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (1.211s)
Could not load plugin 'show_last_packets.py': No module named 'kiwi'
Could not load icon applets-screenshooter due to missing gnomedesktop Python module
scanning topology: 2 nodes...
scanning topology: calling graphviz layout
scanning topology: all done.

f:id:dorapon2000:20190919025156p:plain

うまく動いている.標準出力上だとなにやら怪しい出力があるが,まぁ気にしないことに.

原因

./waf configure時に表示されていたpythonのエラーに原因が書かれている.

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'pybindgen.version'

ns-3-allinone/フォルダ内にもともとあったpybindgenにはversion.pyがなかった.それで./waf configureがpybindgenのバージョンをチェックできずエラーが発生してしまっていたようだ(該当コード - github).ダウンロードしてきた最新版にはちゃんとversion.pyが存在する.

$ pwd
/home/***/workspace/ns-3-allinone

$ find pybindgen/ -name version.py

$ find PyBindGen-0.20.0/ -name version.py
PyBindGen-0.20.0/pybindgen/version.py