NS3中文教程:3下载及编译软件

首先感谢此稿的翻译工作人员,正是因为他们的劳动才让我们这些初学者有捷径可取。

 

3.1  下载ns-3
从现在起 ,我们假定读者使用的工作环境为 Linux 或者仿 Linux 环境 ( Linux , Cygwin 等等 .) 并且已经安装了可用的 GNU 工具链 ,而且还安装了 Mercurial (分布式版本控制系统) Waf 软件。细节已经在 ns-3 网页中详述过,参见以下链接:
http://www.nsnam.org/getting_started.html.
ns-3 源码可以在网站 http://code.nsnam.org 上的 Mercurial 源码库下载到 .你也可以从链接 http://www.nsnam.org/releases/ 处下载一个 tar格式 压缩包,或者直接使用 Mercurial 源码库下载。除非有特殊需要,我们推荐使用 Mercurial 源码库下载。 tar格式压缩包下载,请参见本节最后部分。最简单的方法就是使用 Mercurial 源码库下载一个 ns-3-allinone 压缩包,此压缩包内含一套脚本集来管理各种子系统下的 ns-3 下载和安装。我们推荐你使用这个压缩包来简化你的 ns-3 安装。
3.1.1 使用 Mercurial 下载 ns-3
作为练习,我们首先在 home 目录下建立一个目录并取名为 repos ,用来存放本地 Mercurial 源码库,注意:在本教程随后内容中,我们假定你已经这样做了。如果使用如下的方法,可以在 Linux shell 中下载到一份 ns-3-allinone 软件包 (假定你已经安装了 Mercurial ):
cd
mkdir repos
cd repos
 
Mercurail hg 命令执行后,可以看到如下结果 :
destination directory: ns-3-allinone
requesting all changes
adding changesets
adding manifests
adding file changes
added 31 changesets with 45 changes to 7 files
7 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
clone命令运行结束以后, 在前述建立的 repos 目录下,会出现一个 ns-3-allinone 目录,而且含有如下文件:
build.py*  constants.py  dist.py*  download.py*  README  util.py
注意:你实际上仅仅下载了一些 Python 脚本,下一步就是利用这些脚本根据需要下载并来安装 ns-3 软件包。如果你访问如下链接: http://code.nsnam.org/ 就会发现若干源码库,其中很多是 ns3开发团队专用的。其中在源码库 org/ 你会发现名为 ns-3.1 的源码库,这是 ns-3 的第一个稳定版本。还有一些分散的源码库 名为 ns-3.1-reftraces 它为 ns-3.1 保留了参考记录。保持这些文件的一致性是非常重要的,尤其是当你想对源码库做一个回归测试时。至少做一次测试来验证所有的程序都正确编译了。
当前的开发版 ns-3 的快照存放在 http://code.nsnam.org/ns-3-dev/ ;相关的参考记录存放在链接 http://code.nsnam.org/ns-3-dev-ref-traces/ ns3开发人员会尽量保持源码库中的代码处于一致,工作的状态,但是他们仍在开发中,有一些未发布过的代码。所以如果你不需要最新的特性的话还是考虑使用发行版。
由于发布版的版本号在变化中,我在指南中还是继续使用通常不变的 ns-3-dev ,但是你可以根据自己的需要选择其他的版本,并替换这里的 ns-3-dev ”, (例如, ns-3.6 ns-3.6-ref-traces ),在下文中,你可以通过访问源码库列表或者访问ns3开始网页找到最新的ns-3发布版软件。  
当你从源码库下载完后,继续切换进入你自己建立的 ns-3-allinone 目录中。 我们现在使用 download.py 脚本来下载 ns-3 需要使用的各个部件。继续在你的 shell 中输入以下命令 (如果你想使用任意发行版你可以将 ns-3-dev 替换为你选择的发行版的名字,例如 " ns-3.6 " " ns-3.6-reftraces " )
./download.py -n ns-3-dev -r ns-3-dev-ref-traces
注意, -n 选项的默认参数为 ns-3-dev -r 选项的默认参数为 ns-3-dev-ref-traces 所以上述命令中这两个选项的参数实际上是多余的。我们使用这个例子来描述如何指定源码库。你 只需简单键入如下命令就 可以使用默认参数来下载 ns-3-dev
./download.py
hg (Mercurial) 命令执行时,你可以看到如下的信息:
#
# Get NS-3
#
Cloning ns-3 branch
=> hg clone http://code.nsnam.org/ns-3-dev ns-3-dev
requesting all changes
adding changesets
adding manifests
adding file changes
Chapter 3: Getting Started 8
added 4634 changesets with 16500 changes to 1762 files
870 files updated, 0 files merged, 0 files removed, 0 files unresolved
这些输出信息显示下载脚本已经从源码库中下载到了实际的 ns-3 源码,紧接着,你就会看到这样的信息:
#
# Get the regression traces
#
Synchronizing reference traces using Mercurial.
=> hg clone http://code.nsnam.org/ns-3-dev-ref-traces ns-3-dev-ref-traces
requesting all changes
adding changesets
adding manifests
adding file changes
added 86 changesets with 1178 changes to 259 files
208 files updated, 0 files merged, 0 files removed, 0 files unresolved
这表明下载脚本为你下载了参考记录文件。下载脚本被设计成自适应的,它能检测在一些系统平台上某些 ns-3 模块 不被支持,在你的系统平台上,你可能看不到这些系统不支持的源码被下载。然而,在大多数系统平台上这样的过程会显示如下:
#
# Get PyBindGen
#
Required pybindgen version: 0.10.0.640
Trying to fetch  pybindgen; this will fail if no network connection is available. Hit Ctrl-=> bzr checkout -rrevno:640 https://launchpad.net/pybindgen pybindgen
Fetch was successful.
这些信息显示了下载脚本在为你下载 Python 绑定生成器的过程,下一步你就可能看到如下的信息 (不同的系统平台表现有所不同)
#
# Get NSC
#
Required NSC version: nsc-0.5.0
Retrieving nsc from https://secure.wand.net.nz/mercurial/nsc
=> hg clone https://secure.wand.net.nz/mercurial/nsc nsc
requesting all changes
adding changesets
adding manifests
adding file changes
added 273 changesets with 17565 changes to 15175 files
10622 files updated, 0 files merged, 0 files removed, 0 files unresolved
这些信息显示了下载脚本在为你下载网络仿真器支架程序 (NSC)的过程。
 
当复制命令结束,你在 ~/repos/ns-3-allinone 目录下会有几个新目录 :
build.py* constants.pyc download.py* ns-3-dev-ref-traces/ pybindgen/ util.py
constants.py dist.py* ns-3-dev/ nsc/ README util.pyc
继续进入 ns-3-dev 目录, 你会见到如下的文件 :
AUTHORS examples/ regression/ scratch/ waf*
bindings/ LICENSE regression.py src/ waf.bat*
CHANGES.html ns3/ RELEASE_NOTES utils/ wscript
doc/ README samples/ VERSION wutils.py
现在可以准备编译 ns-3 软件了。
 
3.1.2 使用 Tarball 下载 ns-3
使用 tarball 下载 ns-3 比使用 Mercurail 下载 ns-3 要简单一些,因为需要下载的各个部分都已经预先被打包在一个压缩包中了,你只需要选择一个 发行版 版本,下载并且解压就可以。如上所述,在 Mercurial 下载方法中,是在 home 目录下创建一个 repos 目录,保存本地 Mercurial 源码库。你也可以建立一个 tarball 目录来下载。(注意 :本教程后面会假定你把它下载到了 repoa 目录,所以请留意这个选择)。如果你选择了 tarballs 方法下载,你可以键入如下命令来下载一份 ns-3 发行版 (当然,可以根据需要选择你想要的版本):
cd
mkdir tarballs
cd tarballs
wget http://www.nsnam.org/releases/ns-allinone-3.6.tar.bz2
tar xjf ns-allinone-3.6.tar.bz2
如果你切换到 ns-allinone-3.6 目录,你会看到下述文件 :
build.py* ns-3.6/ nsc-0.5.1/ README
constants.py ns-3.6-ref-traces/ pybindgen-0.12.0.700/ util.py
现在就可以编译 ns-3 软件包了。
 
3.2 编译 ns-3
 
3.2.1 使用 build.py 编译
如果你是第一次编译 ns-3 软件包,建议使用 allinone 环境 ,它会为你以最常用的方式配置工程。
切换到你在上文下载一节中创建的目录下。如果你使用 Mercurial 下载,请进入 ~/repos 目录下的 ns-3-allinone 目录 ,如果你使用 tarball 下载,找到 ~/tarballs 目录下类似 ns-allinone-3.6 的目录,键入如下的命令,并请耐心等待:
./build.py
编译脚本开始编译下载的 ns3时,你会看到大量常见的编译器输入信息。最后你会看到如下编译成功的好消息:
Waf: Leaving directory /home/craigdo/repos/ns-3-allinone/ns-3-dev/build
build finished successfully (2m30.586s)
一旦工程编译好,你就可以不再使用 ns-3-allinone 脚本包了。你已经从其中获取必要的东西,现在是你直接同 Waf 交互的时候了,它位于 ns-3-dev 目录中,并不在 ns-3-allinone 目录中 。切换到 ns-3-dev 目录下 (或者你下载的版本的相应目录下)
cd ns-3-dev
 
3.2.2使用 Waf 编译
我们使用 waf 来配置和编译 ns-3 工程软件包,这一点不是严格必须的,但是做一个简单的介绍是很有必要的,起码可以了解如何修改工程的配置。也许你能做出的最有用的配置修改就是编译工程的优化版本了,默认你会将你的工程编译为 调试 版本,让我们来使工程做出优化的编译。
为了通知 waf 进行 优化编译,你需要执行如下的命令:
./waf -d optimized configure
这会 Waf 可能会切换到其他目录收集信息 . 当编译系统检查各种依存关系时,你可以看到类似如下的输出结果:
Checking for program g++ : ok /usr/bin/g++
Checking for program cpp : ok /usr/bin/cpp
Checking for program ar : ok /usr/bin/ar
Checking for program ranlib : ok /usr/bin/ranlib
Checking for g++ : ok
(鉴于长度限制,省略)
Checking for program valgrind : ok /usr/bin/valgrind
---- Summary of optional NS-3 features:
Threading Primitives : enabled
Real Time Simulator : enabled
Emulated Net Device : enabled
GNU Scientific Library (GSL) : enabled
Tap Bridge : enabled
GtkConfigStore : enabled
XmlIo : enabled
SQlite stats data output : enabled
Network Simulation Cradle : enabled
Python Bindings : enabled
Python API Scanning Support : enabled
Use sudo to set suid bit : not enabled (option --enable-sudo not selected)
Build examples and samples : enabled
Static build : not enabled (option --enable-static not selected)
configure finished successfully (2.870s)
需要注意输入的最后一部分。部分 ns-3 选项并不是默认的,需要底层系统的支持才能够顺利运行。例如:为了运行 XmlTo , 系统必须安装 libxml-2.0 ,如果没有发现这个库,相应的 ns-3 特性就不会被激活,这会以消息显示出来。另一个需要注意的地方是:对于一些特定的程序,需要使用 sudo 命令来设置该程序的。这个是默认设置为关的,所以此性质会显示出未激活,现在我们可以进一步返回到调试编译上来:
./waf -d debug configure
此时编译系统被配置好,你可以编译 ns-3 程序的 debug 版本了,只需简单的命令如下:
./waf
一些 waf 命令在编译阶段是很重要的,另一些命令是在配置阶段有用的,例如,如果你想使用 ns-3 的仿真( emaulation)特性,你一定要通过上述的 sudo 来设置用户标识位( suid 为有效位。这将是一个配置命令,你可以使用如下命令通知 Waf来重新设置:
./waf -d debug --enable-sudo configure
如果你这样做 , waf 会运行 sudo root 的权限来改变仿真代码的 socket 创建程序。在 waf 中还有许多其它的配置和编译选项可用。若要察看详细的选项 ,键入以下命令:
./waf --help
我们将会在下一节中使用测试相关的命令。好的,你已经编译 ns-3 两遍了,现在你知道如何修改配置和编译优化代码了。

 

你可能感兴趣的:(下载)