Update(20230927):请尽量使用本文推荐的git方法下载ns-3,以及注意相关软件版本信息。有些读者因为安装过程中出现的问题私聊我,但是由于本人水平有限,很多问题也未能解答。大部分读者均是通过重新按照本文推荐的git方法,依照本文步骤一步步安装成功的。


前言

近期因工作需要开始接触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已经正确构建!

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐