最近开始接触可信接入技术,从网上搜到德国汉诺威应用科学与艺术大学开发了一版开源的基于TNC架构的可信接入框架,于是在github上找到他们的源码,从头开始安装。但这个项目目前已经停止更新了,它开发时用到了一些较老的库,我在编译时遇到各种问题,千辛万苦地搞了一周,总算解决了所有问题。现在将安装过程中碰到的问题和解决方案列举如下。
传送门:tnc-fhh@github
一、依赖的库
先说明我的编译环境为ubuntu14.04, GCC版本4.8.4,要想完整安装tnc@fhh项目的所有功能需要用到以下几个库:
- apache-log4cxx
- xerces-c
- TrouSers
- libtnc
- libssl-dev、libgtk2.0-dev、libxml2-dev
- libboost-dev
此外,还需要一些编译工具,有cmake、autoconf、automake、libtool等。
二、安装log4cxx
由于log4cxx依赖apache的另外两个库,因此需要先安装libapr和libapr-util,其编译命令即一般的./configure-->make-->make install,只是需注意在configure时的选项。
- libapr的配置选项: ./configure,这里推荐默认位置安装,是为了之后使用cmake时能找到各个模块;
- libapr-util的配置选项:./configure --with-apr=/usr/local/apr;
- log4cxx的配置选项:./configure --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --with-charset=utf-8 --with-logchar=utf-8
这里要注意修改一下源码,否则make时会报错,具体位置如下:
src/main/cpp/inputstreamreader.cpp添加#include <string.h>
src/main/cpp/socketoutputstream.cpp添加#include <string.h>
src/examples/cpp/console.cpp添加#include <string.h>;#include <stdio.h>;
完了可以上网找一段log4cxx的c++代码测试一下。如果编译完执行时出错,记得修改/etc/ld.so.conf,添加动态库的路径,并sudo ldconfig。
三、安装xerces-c和TrouSers
这里安装TrouSers时可能高版本的gcc会报错,我在一台较新的fedora上安装时碰到过,可惜没有记录错误信息,解决方法是按照报错记录找到对应的c文件,将buffer定义行的incline关键字注解掉。然后就能通过了,当然,gcc4.8.4没碰到这个问题。
四、安装libtnc
可能在make之后make check测试时有一项显示失败,但这个错误可以忽略,并不影响后面的编译工作。
五、安装tnc@fhh框架
先解压源码包,在到目录下按照下面步骤来:
- mkdir ./build && cd build
- cmake -DCOMPONENT=all -DNAL=8021x -DTPM=on ../
- make
- make install
- sudo ldconfig
编译到某个地方会出现如下错误:
/usr/local/lib/libtnc.a(libtnctncc.o): In function `libtnc_tncc_EndBatch':
/libtnc-1.23/src/libtnc/libtnctncc.c:80: undefined reference to `xmlDocDumpFormatMemory'
/libtnc-1.23/src/libtnc/libtnctncc.c:82: undefined reference to `xmlFree'
... ... ...
这类错误是链接库的顺序不对造成的,将tncsim/CMakeFiles/tncsim.dir/link.txt的最后部分修改一下:
原来:-o tncsim -rdynamic -lxml2/usr/local/lib/libtnc.a
改后:-o tncsim -rdynamic /usr/local/lib/libtnc.a -ldl -lxml2
这里再加入dl库即可通过连接,这样就完成了框架的编译工作。
六、用tncsim验证
可以用项目里本身开发的tncsim模拟器来验证框架能否工作,因为完整的能够应用到实际中的框架还需要安装修改过的freeradius才行,项目成员开发tncsim就是在不需要NAL层的情况下验证IMCV对,默认加载的模块在/etc/tnc/tncsim_config文件里,这里需要修改一下:
IMV "exampleimv" /usr/local/lib/libexampleimv.so
#IMV "dummyimv" /usr/local/lib/libdummyimv.so
#IMV "hostscannerimv" /usr/local/lib/libhostscannerimv.so
#IMV "platidimv" /usr/local/lib/libplatidimv.so
#IMV "clamavimv" /usr/local/lib/libclamavimv.so
IMC "exampleimc" /usr/local/lib/libexampleimc.so
#IMC "dummyimc" /usr/local/lib/libdummyimc.so
#IMC "hostscannerimc" /usr/local/lib/libhostscannerimc.so
#IMC "platidimc" /usr/local/lib/libplatidimc.so
#IMC "clamavimc" /usr/local/lib/libclamavimc.so
这里先用最简单的exampleimc/v来验证。进入之前创建的build/tncsim/目录下运行tncsim,可以看到详细的数据收发流程。P.S.数据是以xml语言传输的,应该是TNC组织定义的标准吧,有待验证。
总结
好了,以上就是在这次安装过程中遇到的全部问题和解决方案,希望能对后来人有所帮助。最后把安装过程中看过的博客以及网站列出来,对前人的经验分享表示感谢。
http://blog.csdn.net/zqm0209/article/details/7032457
http://blog.csdn.net/fhxpp_27/article/details/8280024
http://trust.f4.hs-hannover.de/projects/tncatfhh.html