2024年6月2日发(作者:)

Ubuntu下安装CCNx(二)

(王羽 wangyulj@)

时隔一年,再次安装CCNx,这次真的需要开发应用了

Ubuntu版本:14.04

CCNx版本:0.8.2

VirturlBox版本:4.3.10

1. 系统安装(VirtualBox4.3.10 +Ubuntu14.04 Desktop)

简要描述,如需探讨邮件联系:

 下载;

 运行daemon tools lite,已经在本地安装,不过在程序组件里未能找到,在C盘的Program Files下

找到;

 加入镜像文件,映射虚拟光驱;

 启动VirtualBox,新建虚拟机;

 启动新建的虚拟机,指定引导的光盘(刚刚虚拟的光盘),注意如果网络很慢,可以不选择在安装

过程中联网,例如直接断开网线。

中间遇到的问题:

 安装后第一次启动,屏幕分辨率只有640*480。

解决:运行VirualBox主菜单中的‘安装增强功能’

此安装过程需要好几分钟,请耐心等待。

安装完毕后,重新启动系统,OK!

2. 安装CCNx

关于CCNx,安装者应当有所了解,欢迎邮件探讨有关NDN和CCNx的话题。

1、 创建ccnd账户

创建ccnx账户,方便于随后的开发和调试:

~$ sudo useradd -m -C "CCNx User" -s /bin/bash ccnx

~$ sudo passwd -l ccnx

~$ sudo gpasswd -a ccnx sudo ; add user ccnx to group sudo

~$ sudo gpasswd -a ccnx … ; 根据需要添加用户到相应的组

~$ su - ccnx

Verify you are in /home/ccnx

2、 下载源码:

解压文件,阅读根目录下的REAME文件;阅读csrc目录下的文件。

3、 拷贝代码到用户目录

为保险起见,设置压缩文件的属性:

~$ chmod 644

~$ tar –zxvf

~$ cd ccnx-0.8.2

4、 执行配置命令

~$ ./configure

注意输出的一个重要信息:INSTALL_BASE = /usr/local // 安装目录

如果执行 make install,则将编译后的可执行文件及库文件拷贝到 /usr/local 目录下。

5、 执行编译

~$ make

肯定失败,因为有依赖包尚未安装,具体安装了哪些依赖包参见下一步骤。

成功执行后当前目录将多出三个子目录:bin, include, lib

如果需要所有的测试工具(软件),则执行如下命令,我选择没有执行,因为make已经生成了绝大部

分的测试命令,不执行此命令,看看后面会发生什么(缺哪些测试命令)。

~$ make test

如果需要将代码安装到‘/usr/local’中,执行:

~$ make install

6、 安装依赖软件包

根据根目录下的README文件,C语言依赖的包有:libcrypto >= 0.9.8, expat, libpcap, libxml2,如果是要

使用CCNx的插件(plugins),则还需要包:vlc, wireshark;Java部分依赖的包有:ant >= 1.8.2, OpenJDK

文件中列表的依赖包更多。

通过以下命令查询软件包的安装情况:

~$ apt-cache pkgnames | grep ~

Ubuntu-14.04桌面版已经安装了绝大部分的软件包,实际仅安装了三个软件包,均可通过命令apt-get

install直接安装:

 libcurl4-openssl-dev

 libexpat1-dev

 libpcap-dev

7、 运行代码

~$ ./bin/ccnd -h // 看看都有哪些全局变量影响ccnd的运行

~$ ./bin/ccndstart

~$ sudo netstat -tunlp | grep ccnd // 可以看到ccnd在UDP/TCP端口9596监听,包括Ipv4和Ipv6。

8、 (单机)测试

运行ccnsendchunks命令,首先看看帮助。

~$ ./ccnsendchunks -h

./ccnsendchunks [-h] [-x freshness_seconds] [-b blocksize] [-o keydir] [-d digest] [-p password] URI

Chops stdin into blocks (1K by default) and sends them as consecutively numbered ContentObjects under

the given uri

根据提示,该命令将屏幕输入(chop)‘劈’为一个个的块(block),默认的块大小为1K,而且如果有

多个块的话,会将多个的块连续的(在指定的URI之下)编号。

封装(格式化)后的块将被保存到ccn本地的cache中。

运行ccnsendchunks注入数据到本地cache中,例如‘Hello, World!’,以Ctrl+D结束屏幕输入,命令执

行结果如下:

~$ ./ccnsendchunks ccnx://test_content

1399514909.608013 ccnd[1996]: accepted client fd=8 id=6

Hello, World!

Keystore [/home/ccnx/.ccnx/.ccnx_keystore] does not exist and will be automatically created

ccnx@Ubt-14-01:~/ccnx-0.8.2/bin$ 1399514945.992293 ccnd[1996]: shutdown client fd=8 id=6

1399514945.992317 ccnd[1996]: releasing face id 6 (slot 6)

注意接收数据的端口为(fd=8 id=6),应该是ccnd首先生成了一个Interest包,在该端口等待。

由于是第一次运行,所以ccnd自动创建了默认的keystore,在目录‘/home/ccnx/.ccnx/’下。

1996是ccnd的进程号。

运行ccncatchunks命令,首先看看帮助。

~$ ./ccncatchunks -h

./ccncatchunks [-a] ccnx:/a/b

Reads stuff written by ccnsendchunks under the given uri and writes to stdout

-a - allow stale data

将上一命令写入cache的内容读出来。

~$ ./ccncatchunks ccnx://test_content

1399515720.424830 ccnd[1996]: accepted client fd=8 id=7

Hello, World!

1399515720.426649 ccnd[1996]: shutdown client fd=8 id=7

1399515720.426858 ccnd[1996]: releasing face id 7 (slot 7)