0、安装须知:版本适配问题
安装ns3真是太折磨人了,经过多次试验,目前可行的适配方案有:Ubuntu20.04+ns3.35 (主要参考在Ubuntu 20.04上安装NS3.34和NS3-gym - Minaduki’s Blog)和 Ubuntu22.04+ns3.38(主要参考Installation of ns3 in Ubuntu 22.04 | NS-3.38 | Engineering Clinic和在Ubuntu 20.04上安装NS3.38和NS3-gym - Minaduki’s Blog)
ns3gym目前只分为适用于ns3.36+的版本和适用于ns3.36以下的版本,这是因为从ns3.36开始,编译命令就由./waf变成./ns3了
1、创建虚拟环境,并安装依赖
首先要更新系统软件
如果更新失败或者特别慢的话,要考虑换源,并且换源的时候也要根据具体的Ubuntu版本搜索。如果镜像仓库源和Ubuntu的版本不适配的话,后面的步骤都无法进行
然后利用anaconda创建虚拟环境(这里我省略了配置anaconda和pytorch的步骤,可以参考这篇文章在WSL2下配置Pytorch(Linux+Anaconda+PyTorch-GPU)_wsl2 pytorch-CSDN博客)
1
| conda create -n torch python=3.x
|
进入虚拟环境
接下来要在虚拟环境中安装依赖,这个其实要根据Ubuntu的版本修改某些依赖包的名称,并没有一个完全通用的办法,这里也困住了我很久
Ubuntu20.04目前可行的安装指令(参考在Ubuntu 20.04上安装NS3.34和NS3-gym - Minaduki’s Blog):
1 2 3 4 5 6 7 8 9 10 11
| sudo apt install -y gcc g++ python gcc g++ python3 python3-dev mercurial python3-setuptools git qt5-default gir1.2-goocanvas-2.0 python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython3 ipython3 openmpi-bin openmpi-common openmpi-doc libopenmpi-dev autoconf cvs bzr unrar gdb valgrind uncrustify doxygen graphviz imagemagick texlive texlive-extra-utils texlive-latex-extra texlive-font-utils texlive-lang-portuguese dvipng latexmk python3-sphinx dia gsl-bin libgslcblas0 libgsl-dev flex bison libfl-dev tcpdump sqlite sqlite3 libsqlite3-dev libxml2 libxml2-dev cmake libc6-dev libc6-dev-i386 libclang-dev llvm-dev automake libgtk2.0-0 libgtk2.0-dev vtun lxc libboost-all-dev libboost-filesystem-dev pkg-config sqlite3 cmake libc6-dev libc6-dev-i386 libclang-6.0-dev llvm-6.0-dev automake python3-pip
|
1
| sudo apt install -y libzmq5 libzmq3-dev libprotobuf-dev protobuf-compiler
|
Ubuntu22.04目前可行的安装指令(参考Installation of ns3 in Ubuntu 22.04 | NS-3.38 | Engineering Clinic):
1 2 3 4 5 6 7 8
| sudo apt install g++ python3 cmake ninja-build git gir1.2-goocanvas-2.0 python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython3 tcpdump wireshark sqlite sqlite3 libsqlite3-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools openmpi-bin openmpi-common openmpi-doc libopenmpi-dev doxygen graphviz imagemagick python3-sphinx dia imagemagick texlive dvipng latexmk texlive-extra-utils texlive-latex-extra texlive-font-utils libeigen3-dev gsl-bin libgsl-dev libgslcblas0 libxml2 libxml2-dev libgtk-3-dev lxc-utils lxc-templates vtun uml-utilities ebtables bridge-utils libxml2 libxml2-dev libboost-all-dev
|
要看到每个安装包都不报错才行,不然后面会出现一些奇奇怪怪的问题
2、安装ns3
首先要从官方镜像拉取ns3安装包(xx换成需要的ns3版本号)
1
| wget https://www.nsnam.org/releases/ns-allinone-3.xx.tar.bz2
|
解压
1
| tar -jxvf ns-allinone-3.xx.tar.bz2
|
然后编译测试,这个部分只需要注意编译命令有区别(<=3.35用./waf,>=3.36用./ns3)
如果一开始用的就不是root用户,最好之后的操作中都不要用sudo,不然会出现一些奇奇怪怪的权限错误,把我坑惨了
1 2 3 4 5 6 7
| cd ns-allinone-3.xx cd ns-3.xx ./ns3 configure --enable-python-bindings --enable-test --enable-examples ./ns3 run hello-simulator
./waf configure --enable-test --enable-examples ./waf build
|
看到输出Hello Simulator就成功了
PS.有些教程还会在这里用./ns3 run third –vis测试可视化模块,如果是用的本地虚拟机或者子系统应该没有问题,用远程连接的服务器暂时看不到图形化界面,只要前面的步骤都是成功的,即使出现了这个问题,也不用担心,远程连接服务器就是在配置图形化界面上比较麻烦,参考Pycharm+远程连接Linux服务器用matplotlib画图不显示_pycharm连接远程服务器运行画不出图-CSDN博客,这个问题以后有空再研究吧。
3、安装ns3gym
其实和安装ns3的流程差不多,先拉取源码,再进行编译等后续操作,只是要注意现在都要在**ns-allinone-3.xx/ns-3.xx/**这个位置下进行操作
如果clone的时候报错“无法访问”,先检查本地网速,然后把”https”换成”http”试试,这一步很玄学,说不定等一会儿就好了
如果ns3版本<=3.35:
1 2 3 4
| cd contrib git clone https://github.com/tkn-tub/ns3-gym.git ./opengym cd opengym/ git checkout app
|
如果ns3版本>=3.36:
1 2 3 4
| cd contrib git clone https://github.com/tkn-tub/ns3-gym.git ./opengym cd opengym/ git checkout app-ns-3.36+
|
重新编译,这个时候要返回ns-allinone-3.xx/ns-3.xx/
1 2
| ./ns3 configure --enable-python-bindings --enable-test --enable-examples ./ns3 build
|
继续在ns-allinone-3.xx/ns-3.xx/ 路径下安装ns3gym需要的python模块
1 2
| cd contrib/opengym/ pip3 install --user ./model/ns3gym
|
这一步也有坑,有可能下载不了,检查是否安装pip;
用pip下载成功以后,最好查看一下是否成功安装ns3gym:
要看到ns3gym已经安装到了当前虚拟环境下才算成功
如果没有的话,需要重新检查pip的位置:
如果发现这里指向的是全局路径下的pip,试试在当前虚拟环境下用 conda install pip 重新安装pip
如果还是不行的话,只有建立一个新的虚拟环境,从头来过
继续在ns-allinone-3.xx/ns-3.xx/ 路径下运行测试
测试一(仅需一个终端):
1 2
| cd contrib/opengym/examples/opengym/ ./simple_test.py
|
测试二(需要两个终端):
一个终端在ns-allinone-3.xx/ns-3.xx/ 路径下运行c++脚本:
另一个终端要找到具体的路径运行.py脚本:
1 2
| cd contrib/opengym/examples/opengym/ ./test.py --start=0
|
就能看到一个简单的运行结果:


大功告成!