在Ubuntu上安装NS3和ns3gym

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、创建虚拟环境,并安装依赖

首先要更新系统软件

1
sudo apt update
1
sudo apt upgrade

如果更新失败或者特别慢的话,要考虑换源,并且换源的时候也要根据具体的Ubuntu版本搜索。如果镜像仓库源和Ubuntu的版本不适配的话,后面的步骤都无法进行

然后利用anaconda创建虚拟环境(这里我省略了配置anaconda和pytorch的步骤,可以参考这篇文章在WSL2下配置Pytorch(Linux+Anaconda+PyTorch-GPU)_wsl2 pytorch-CSDN博客

1
conda create -n torch python=3.x

进入虚拟环境

1
conda activate torch

接下来要在虚拟环境中安装依赖,这个其实要根据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:

1
pip show ns3gym

要看到ns3gym已经安装到了当前虚拟环境下才算成功
如果没有的话,需要重新检查pip的位置:

1
which 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++脚本:

1
./ns3 run "opengym"

另一个终端要找到具体的路径运行.py脚本:

1
2
cd contrib/opengym/examples/opengym/
./test.py --start=0

就能看到一个简单的运行结果:


大功告成!


在Ubuntu上安装NS3和ns3gym
http://example.com/2025/02/14/ns3安装/
作者
Zoe Jiang
发布于
2025年2月14日
许可协议