Update(20230927):请尽量使用本文推荐的git方法下载ns-3,以及注意相关软件版本信息。有些读者因为安装过程中出现的问题私聊我,但是由于本人水平有限,很多问题也未能解答。大部分读者均是通过重新按照本文推荐的git方法,依照本文步骤一步步安装成功的。
近期因工作需要开始接触ns-3。作者零基础,从零开始顺利完成了ns-3的安装。本篇为ns-3安装过程记录贴或针对小白的零基础教程。
本篇内容所使用到的软件版本信息如下:VMware Workstation 16 Pro、Ubuntu 22.10以及ns-3.37。所有内容亲测无误。
作者首先使用VMware Workstation 16 Pro安装虚拟机,然后在此基础上安装了Ubuntu 22.10系统。由于这方面教程较多,因此作者在此不再赘述,具体可参考以下几篇文章:
虚拟机VMware下载与安装教程(详细)
VMware安装Ubuntu 18.04虚拟机(镜像下载、硬盘分区、创建虚拟机、安装系统、桥接模式网络配置)
完成上面安装虚拟机及Ubuntu的准备工作之后,我们就可以在Ubuntu的终端(Terminal)中通过命令行安装ns-3了。ns-3在其官方教程的”Getting Started“章节中提供了安装说明,并在官方wiki中提供了详细的ns-3官方安装指导,只要耐心仔细、逐条对照即可顺利完成ns-3安装。以下安装教程即参照这些官方说明,作者进行了翻译以及一定程度的总结、提炼。需要说明的是,该教程主要面向ns-3.37版本以及Ubuntu 22.10版本,如需安装其他版本的Ubuntu及ns-3还请仔细阅读ns-3官方安装指导,避免踩坑。
ns-3主要在GNU/Linux和macOS平台上使用C++语言开发。使用ns-3进行仿真至少需要c++编译器(g++或clang++),构建系统(CMake和make或ninja等),以及Python解释器。这是使用ns-3进行仿真的最低要求。
对于ns-3.36及以后的版本,在ns-3官方安装指导中推荐通过下面的命令行安装这些必需的库:
sudo apt install g++ python3 cmake ninja-build git
有几点说明:
除此之外,ns-3官方安装指导还推荐ns-3.37及以后的版本安装ccache,命令行如下:
sudo apt install ccache
Ccache是一种编译器缓存优化工具,其可以加快跨多个ns-3目录的构建,代价是在缓存中使用高达5 GB的额外磁盘空间。需要说明的是,对于Ubuntu 20.04及更早的版本,通过apt命令安装的ccache版本(3.7.7或更早)可能无法提供性能优势,因此ns-3官方安装指导建议这部分用户安装4或4以上版本的ccache(可以通过源安装的方式)。对于Ubuntu 22.04及更高版本,可以直接使用apt命令安装ccache。
除了上述必需的库之外,一般还需要安装以下一些可选的库,以支持ns-3的部分拓展功能和特性:
python3 -m pip install --user cppyy
sudo apt install gir1.2-goocanvas-2.0 python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython3
如果上述命令行结果报如下错误:
/usr/bin/python3: No module named pip
那么可以通过以下命令行先安装pip:
sudo apt install python3-pip
sudo apt install python3-setuptools git
sudo apt install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools
sudo apt install openmpi-bin openmpi-common openmpi-doc libopenmpi-dev
sudo apt install mercurial unzip
sudo apt install gdb valgrind
sudo apt install clang-format
sudo apt install doxygen graphviz imagemagick
sudo apt install texlive texlive-extra-utils texlive-latex-extra texlive-font-utils dvipng latexmk
sudo apt install python3-sphinx dia
sudo apt install gsl-bin libgsl-dev libgslcblas0
sudo apt install tcpdump
sudo apt install sqlite sqlite3 libsqlite3-dev
sudo apt install libxml2 libxml2-dev
sudo apt install libgtk-3-dev
sudo apt install vtun lxc uml-utilities
sudo apt install libxml2 libxml2-dev libboost-all-dev
最后汇总一下上述安装命令:
sudo apt install g++ python3 cmake ninja-build git
sudo apt install ccache
sudo apt install python3-pip
python3 -m pip install --user cppyy
sudo apt install gir1.2-goocanvas-2.0 python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython3
sudo apt install python3-setuptools git
sudo apt install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools
sudo apt install openmpi-bin openmpi-common openmpi-doc libopenmpi-dev
sudo apt install mercurial unzip
sudo apt install gdb valgrind
sudo apt install clang-format
sudo apt install doxygen graphviz imagemagick
sudo apt install texlive texlive-extra-utils texlive-latex-extra texlive-font-utils dvipng latexmk
sudo apt install python3-sphinx dia
sudo apt install gsl-bin libgsl-dev libgslcblas0
sudo apt install tcpdump
sudo apt install sqlite sqlite3 libsqlite3-dev
sudo apt install libxml2 libxml2-dev
sudo apt install libgtk-3-dev
sudo apt install vtun lxc uml-utilities
sudo apt install libxml2 libxml2-dev libboost-all-dev
以上安装命令在Ubuntu 22.10中亲测无误,其他发行版本或其他基于Debian的系统可能略有不同。需要注意的是,ns-3官方安装指导提示Ubuntu 16.04 LTS版本可能是已知的与最新ns-3版本兼容的最古老的版本。
ns-3是以源代码的形式发布的。ns-3官方提供了3种下载ns-3源码的方式:
这里推荐使用git。
首先在主目录下新建一个目录(注意目录名不要有空格,如”ns 3“),用于保存本地git仓库:
cd
mkdir repos # 新建repos目录
cd repos
git clone https://gitlab.com/nsnam/ns-3-allinone.git # 克隆git仓库到本地
在执行上述git命令时,我们会看到如下所示的内容:
上述git命令完成后,我们会在我们的~/repos目录下发现一个名为ns-3-allinone的目录,如下图所示:
点击进入ns-3-allinone目录,我们会发现其包括以下一些文件:
需要注意的是,目前为止我们实际上只是下载了一些Python脚本(如上图所示),还没有下载ns-3的c++源码。下一步,我们即利用这些脚本下载并构建ns-3发行版本。
注意到在上面的ns-3-allinone目录下有一个download.py脚本,我们即利用它进一步获取ns-3相关源代码(需要在ns-3-allinone目录下执行命令),命令行如下:
cd ns-3-allinone # 进入ns-3-allinone目录
python3 download.py -n ns-3.37 # 下载ns-3.37源代码(如果想下载其他版本的ns-3,只需指定版本号)
在执行上述命令时,我们会看到如下所示的内容:
上述命令完成后,我们会发现ns-3-allinone目录下多了几个目录,如ns-3主项目(ns-3.37)、ns-3源代码包管理工具bake(bake)、可视化模拟工具NetAnim(netanim):
注释:
除了ns-3.37这种发行版本,ns-3官方还提供开发版的ns-3下载,命令行如下:
python3 download.py
开发版包含一些正在开发的功能,没有经过完整的测试。除非是准备向ns-3提交代码或必须要使用某个新特性这种特殊情况,建议读者选择更为稳定的发行版本。
第一次构建ns-3项目,最常用的方式是使用ns-3-allinone目录下的build.py脚本(需要在ns-3-allinone目录下执行命令):
./build.py --enable-examples --enable-tests
上述命令行中的”–enable-examples“和”–enable-tests“参数可以让build.py同时编译ns-3自带的示例脚本和测试脚本。
构建完成后会显示如下信息:
”Summary of optional ns-3 features“部分列出了ns-3哪些特性被启用,哪些特性被禁用。”OFF (not requested)“表示该特性默认情况下不启用,或者需要底层系统正常工作。”OFF(missing dependency)“表示该特性依赖第三方库,而第三方库没有找到,因此被禁用。“Modules configured to be built”部分列出了已完成编译的模块。“Modules that cannot be built”部分是未编译的模块。这些模块一般需要第三方库的支持,可以在后续按需添加。如果编译出错,则有可能是缺失依赖包。
为了让用户能够快速验证ns-3是否已经正确构建,ns-3项目自带了test.py脚本(在ns主项目ns-3.37目录下)。通过运行ns-3中自带的测试用例,test.py可以对ns-3的各个模块进行逐一测试:
cd ns-3.37
./test.py
在执行上述命令时,我们会看到如下所示的内容:
上述命令完成后,如果显示如下信息(0 failed, 0 crashed, 0 valgrind errors),则代表ns-3已经正确构建!