Linux Netopeer2 编译指南
由于项目需求,需要使用基于Netopeer2的SDN,因此在Linux平台编译本地Netopeer2作为本地开发调试使用。一路走来踩了不少坑,现总结编译步骤如下:
Netopeer2环境
系统环境
VirtualBox平台 Ubuntu22虚拟机
ps: 我之前使用Ubunt20编译,结果发现apt 包中带的许多辅助lib版本较低,不符合Netopeer2相关lib编译需求。后续基于尝试基于Ubuntu20进行源码编译安装,但在编译libssh时遇到了一些问题,于是换为Ubuntu22。
GCC版本
G++版本
CMAKE版本
ps: 此虚拟机为项目新建虚拟机,所有编译工具均使用** sudo apt install xx **安装
Netopeer2编译
前置步骤
- 下载Netopeer2所需辅助lib文件
- 查看Netopeer2 README文件,可知需libyang、libnetconf2、sysrepo三个前置lib文件:
- 直接从README链接点进去下载就好了,我分别下载了他们的最新版本:
- 安装pkg-config包管理器
sudo apt install pkg-config -y
- ps: 由于后续Netopeer2编译时需要使用CMake中的find模块进行lib库查找,为了避免后续重新install文件,所以预先装上。我遇到的的情形如下
- 安装辅助lib
- libyang所需lib
sudo apt install libcmocka-dev -y
- 这个库使用来做后续Netopeer2 test的,需要使用
sudo apt install libpcre2-dev -y
- libnetconf2所需lib
sudo apt install libssl-dev -y
sudo apt install libssh-dev -y
sudo apt install libpam0g-dev -y
sudo apt install curl libcurl4-openssl-dev -y
- sysrepo所需lib
sudo apt install doxygen -y
sudo apt install graphviz -y
sudo apt install libsystemd-dev -y
- 以上三个lib库是用于生成sysrepo doc的,如果不需要也可以不安装
- libyang所需lib
至此所有依赖已经安装完毕,下面按libyang、libnetconf2、sysrepo的readme文件进行编译即可。
注意,在源码编译时,编译有先后顺序,即libyang --> libnetconf2 --> sysrepo
编译libyang、libnetconf2、sysrepo
mkdir build ; cd build
cmake ..
make
sudo make install
这三个lib都可以按上述步骤编译、安装.请留意在安装时有没有此LOG信息(以libnetconf2为例):
将lib库添加到系统lib中
sudo ln -s /usr/local/lib/libsysrepo.so.7 /lib/
sudo ln -s /usr/local/lib/libnetconf2.so.4 /lib/
sudo ln -s /usr/local/lib/libyang.so.2 /lib/
最后系统的链接关系如下图:
查看当前lib库是否正确
使用pkg-config --modversion lib
+ tab
自动补全,可以看到lib库红框标出
此时表明pkg-config已经就绪了。
编译Netopeer2
```
mkdir build ; cd build
cmake ..
make
sudo make install
```
安装完成后,输入netopeer2出现如下补全即证明安装成功:
Netopeer2验证
-
启动netopeer2-server,
sudo netopeer2-server -d -v 2
启动成功 -
尝试同时启动netopeer2-server和netopeer2-cli,先启动服务端后,再新开窗口启动客户端,截图如下:
-
使用netopeer2-cli连接到netopeer2-server:
- 此处我使用的账户和密码名和登陆的用户密码名相同
-
使用cli获取当前运行数据
可以看到客户端和服务端均正常运行了,证明Netopeer2环境已经就绪,后续可以尝试相关功能开发。 -
进入netopeer2编译目录,跑一下Netopeer2 test
cd ./build/ rm -rf ./* cmake -DENABLE_TESTS=ON .. make make test
结果如下:
后续可以再重新install一下,不过我只是想看下test结果,所以此处我没有重新install
Netopeer2踩坑
编译时
- 由于没有预先装pkg-config,导致后期编译netopeer2时找不到依赖库。
- 解决办法,重新编译三个依赖库,再进行make install
- 编译三个依赖库时提示缺少辅助库
- 解决办法,参见编译前准备
一般来说遇到的都是缺少编译依赖库,根据cmake报错提示安装即可,较为好解决。
验证时
-
验证netopeer2-server和netopeer2-cli交互时,cli使用root用户登陆,无法与server建立连接
- 搜索了一下,好像由于ubuntu中默认是没有root用户的,因此需要使用你登陆系统的用户名和密码连接,连接命令如下
connet --host localhost --port 830 --login lwj
ps:使用help命令可以查看cli支持的操作
- 搜索了一下,好像由于ubuntu中默认是没有root用户的,因此需要使用你登陆系统的用户名和密码连接,连接命令如下
-
在开启netopeer2-server时,出现
[ERR]: SR: Failed to open mod shared memory (Permission denied). [ERR]: SR: Caused by kernel parameter "fs.protected_regular", which must be "0" (currently "2").
解决办法:
- 进入root用户
- 执行
echo 0 > /proc/sys/fs/protected_regular
exit
,再次重启netopper2-server即可
原因:
- github上看netopeer2官方对此问题的答复,好像是由于新版ubuntu的新特性引起的,他们也不知道原因。