软件安装
编译安装 dtn2 之前要保证 gcc 编译器是 3.3 版本以上(但其实如果用低于4.9版本的gcc编译make时会报错提示缺少-fstack-protector-strong,不好处理),并且需要安装了 TCL8.3 以 上版本及 BerkeleyDB4.2 以上版本,还需要先安装 oasys 才能安装 dtn2 。
本人是是在容器里的Ubuntu系统下安装的,与直接在Ubuntu系统安装相同,所用的文件: tcl8.5.12-src.tar.gz、Berkeley DB 5.3.21.tar.gz、 oasys-1.6.0.tgz、 dtn-2.9.0.tgz
软件下载
下载的dtn2网址(目前唯一可用):https://sourceforge.net/projects/dtn/
下载版tcl网址:https://nchc.dl.sourceforge.net/project/tcl/Tcl/
下载oasys网址:https://master.dl.sourceforge.net/project/dtn/oasys/
下载Berkeley DB:我在博客下的旧版本,也可去官网下载新版本,但不确定能否支持http://www.oracle.com/technetwork/products/berkeleydb/downloads/index.html
安装过程
将所有压缩包解压后放到/usr/local/目录下,然后依次安装:
- 安装 tcl :
注意: 后面要安装的1.6.0版本的oasys安装要求tcl版本低于8.6,只检索从8.5到8.3版本,检索不到就会安装失败。 我一开始安装8.6版本的tcl,官网很方便下载,到安装oasys时发现错误,因此又重新下载安装的8.5版本。官网各版本都有,但是很多版本我都无法下载,8.5.12版本也是尝试多次才成功的。
$cd tcl8.5.12/unix
$./configure
$make
$sudo make install
//不报错就是顺利安装成功,如果缺少如gcc,或者make等软件,apt-get安装上再来一次就ok。
- 安装 db
$cd db-5.3.21/build_unix
$../dist/configure
$make
$sudo make install
- 安装 oasys
安装之前先运行下面的命令,进行一些补丁的安装:
$sudo apt-get install mercurial autotools-dev libdb-dev tcl-dev libxerces-c2-dev build-essential
另外1.5版本的oasys 可能需要加载补丁文件 fix-aclocal-oasys_v1.5.patch,1.6版本不需要额外加载
$cd oasys-1.6.0
$./configure
$make
$sudo make install
注意:tcl版本要低于8.6,gcc版本要低于5,我的gcc是系统默认的5版本,因此需要降级,简单方法如下
在原有5版本gcc基础上,我安装了4.8
sudo apt-get install gcc-4.8
sudo apt-get install g+±4.8
装完后在/usr/bin目录下
$ ls -l gcc*
表明当前存在版本5与版本4.8,但是发现gcc 链接到gcc-5, 需要将它改为链接到gcc-4.8 :
$sudo mv gcc gcc.bak
$sudo ln -s gcc-4.8 gcc
再次查看链接,已经改变:(且系统内有两种版本gcc,可以随时采用此方式换回高版本)
查看gcc版本:
表明当前系统中的gcc版本成功改为4.8啦!
同理对g++进行操作
$ ls -l g++* //根据列表展示应该也是g++链接到g++5
则需要将g++链接改为g++ -4.8
/usr/bin$sudo mv g++ g++.bak
/usr/bin$sudo ln -s g++-4.8 g++
- 安装 dtn
$cd dtn-2.9.0
$./configure
$make
$sudo make install
注意:
- 此时dtn的安装需要gcc不低于4.8版本,否则会报error:
unrecognized command line option ‘-fstack-protector-strong’ ,此错误需要手动修复
the “-fstack-protector-strong” option was not added to the GCC compiler until version 4.9. Upgraded my GCC to the latest available fixed the issue.表明4.9以上版本的gcc自带。
可以按照前面讲的方法改变链接再把gcc版本切回高版本。再次编译安装,就可以成功。- 安装dtn时可能会提示要安装xerces
只需要根据提示,在./configure后面加相应–disable 的参数即可解决。
基础运用
- 环境配置
dtn2有两种配置方式:使用dtn.conf文件初始化配置以及利用控制台更改配置。先对配置文件进行简单配置,有其它需求再到控制台改动配置。
先选择一个目录,用于保存dtnd的一些需求文件,linux用户名为ubuntu,我选择/home/ubuntu/dtn,dtn文件夹是自己创建的,还要在dtn下创建bundles以及db文件夹。然后从dtn安装目录下/daemon/dtn.conf拷贝到/home/ubuntu/dtn目录下,接下来编辑此文件。
#daemon consloe configuration(守护进程控制台配置)
保持默认,不需要改动
#storage configure(存储配置)
(a)存储方式有三种,我们选择berkeleydb,语法storage set type berkeleydb
(b)目录改为自己创建的目录/home/ubuntu/dtn
dtn以及bundles目录系统会根据上面配置目录自己找到
#routing configuration(路由配置)
(a)路由算法有多种,默认为静态路由:route set type static
静态路由需要全部手动配置后面的link、route
(b)还要设置本地节点EID,作为节点名字route local_eid"dtn://node1.dtn"
#TCP convergence layer configuration(tcp汇聚层配置)
(a)interface汇聚层保持默认配置
(b)为对等节点添加链接,基于IP的链接,下一跳应该包含一个DNS主机名或一个IP地址,后面加冒号跟端口号,端口号默认4556,语法为:
$link add link1 192.168.10.11:4556 ONDEMAND tcp
©添加路由,语法route add dtn://node2.dtn/* link1
通过设定链接和路由来定位其它的dtn节点,表示到dtn://node2.dtn节点下一跳要经192.168.10.11。
#路由设置可以空着后面再设置,剩余设置也可以先保持默认 - 启动dtn应用
(1)初始化数据库
安装程序后第一次启动dtnd需要先初始化数据库:
$ cd dtn-2.9.0/
$ daemon/dtnd -C/home/ubuntu/dtn/dtn.conf --init-db
执行后可以看到守护进程启动,下次启动守护程序不需要再初始化数据库,直接启动就可以$ daemon/dtnd -c /home/ubuntu/dtn/dtn.conf
或者用以下命令可以看到更多详细信息:$ daemon/dtnd -c /home/ubuntu/dtn/dtn.conf -I info
(2)执行ping命令
$ cd dtn-2.9.0/apps/dtnping
$ ./dtnping localhost//ping localhost
$ ./dtnping dtn://node2.dtn/ping //ping node2节点
(3)执行dtnsend命令
假设两台机器建立连接,A机器为dtn://node1.dtn,B机器为dtn://node2.dtn, ip地址配好,dtn.conf均配置好对等节点的静态路由及链接,启动dtnd显示守护进程,用dtnping测试连通效果。再分别开一个终端用于启动应用程序dtnsend以及dtnrecv,发送端:
$ cd dtn-2.9.0/apps/dtnsend
$ ./dtnsend -s dtn://node1.dtn/me -d dtn://node2.dtn/testing -t m -p “hello,I am A”
接收端:
$ cd dtn-2.9.0/apps/dtnrecv
$ ./dtnrecv dtn://node2 dtn/testing
(4)有任何不懂的命令均可以在控制台输入help获取帮助,输入help [command]可以列出相应命令的用法,例如: help link会列出ink的全部命令及用法解释,link dump可以显示全部链接,route dump也会显示全部路由信息。