文章目录
- 前言
- 1. 安装虚拟机及Ubuntu
- 2. 安装依赖库
- 3. 下载ns-3
- 4. 构建ns-3
前言
近期因工作需要开始接触ns-3。作者零基础,从零开始顺利完成了ns-3的安装。本篇为ns-3安装过程记录贴或针对小白的零基础教程。
本篇内容所使用到的软件版本信息如下:VMware Workstation 16 Pro、Ubuntu 22.10以及ns-3.37。所有内容亲测无误。
1. 安装虚拟机及Ubuntu
作者首先使用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官方安装指导,避免踩坑。
2. 安装依赖库
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
有几点说明:
- 自2022年1月(ns-3.36版本)起,g++需要8或以上版本,但旧版的Ubuntu(18.04,16.04)默认安装的是旧版的g++,因此旧版Ubuntu用户需注意g++版本问题,ns-3官方安装指导中也给出了解决方案(亲测在Ubuntu 22.10中使用上述命令行安装的是g++ 12.2.0版本)。
- 自2019年8月(ns-3.30版本)起,ns-3默认使用Python 3,而早期版本使用的是Python 2,因此ns-3.30版本之前的ns-3用户推荐在上面的命令行中使用“python”而不是“python 3”安装Python 2解释器。而且,在最新版(ns-3.37)的ns-3官方安装指导中要求3.6或以上版本的Python 3。
- 如果是通过下载源存档的方式安装ns-3,则不需要安装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的部分拓展功能和特性:
- Python可视化器和绑定(ns-3.37及更新版本):cppyy Python模块和Pyviz依赖
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
- Python(开发)的额外最低需要:对于使用ns-3-allinone仓库(从Git克隆),需要获取额外的包并成功安装pybindgen和netanim
sudo apt install python3-setuptools git
- Netanim:Netanim需要qt5开发工具
sudo apt install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools
- 支持基于MPI的分布式模拟:
sudo apt install openmpi-bin openmpi-common openmpi-doc libopenmpi-dev
- 支持bake构建工具:
sudo apt install mercurial unzip
- 调试:
sudo apt install gdb valgrind
- 支持utils/check-style-clang-format.py代码风格检查程序(从ns-3.37开始):
sudo apt install clang-format
- Doxygen和相关的内联文档:
sudo apt install doxygen graphviz imagemagick
sudo apt install texlive texlive-extra-utils texlive-latex-extra texlive-font-utils dvipng latexmk
- ns-3手册和教程是用Sphinx写的,图片一般也是以dia的格式:
sudo apt install python3-sphinx dia
- GNU Scientific Library (GSL)(为支持更准确的802.11b WiFi错误模型):
sudo apt install gsl-bin libgsl-dev libgslcblas0
- 读取pcap数据包trace:
sudo apt install tcpdump
- 支持统计框架的数据库:
sudo apt install sqlite sqlite3 libsqlite3-dev
- 基于Xml的配置存储版本(需要libxml2 >= version 2.7):
sudo apt install libxml2 libxml2-dev
- 基于GTK的配置系统:
sudo apt install libgtk-3-dev
- 使用虚拟机和ns-3进行实验:
sudo apt install vtun lxc uml-utilities
- 支持openflow模块和Boost开发库:
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版本兼容的最古老的版本。
3. 下载ns-3
ns-3是以源代码的形式发布的。ns-3官方提供了3种下载ns-3源码的方式:
- 从ns-3网站上下载源代码存档(即tarball)
- 从gitlab.com克隆git存储库
- 使用ns-3自带的源代码包管理工具bake下载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的下载。
注释:
除了ns-3.37这种发行版本,ns-3官方还提供开发版的ns-3下载,命令行如下:
python3 download.py
开发版包含一些正在开发的功能,没有经过完整的测试。除非是准备向ns-3提交代码或必须要使用某个新特性这种特殊情况,建议读者选择更为稳定的发行版本。
4. 构建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已经正确构建!