EasyCwmp 安装
源代码下载地址为:http://easycwmp.org/download/easycwmp-1.8.6.tar.gz
一般参考官网发布版本中README文件就可以成功安装,但是部分同学可能会遇到各种问题,本文按照官方提供的安装方法一步一步安装验证,其中遇到一些依赖库安装问题,已整理到本文安装步骤中。
1. OpenWRT Linux 上安装 EasyCwmp
EasyCwmp 部分
EasyCwmp主要是在OpenWRT Linux平台上开发和测试的。
下载:
下载 easycwmp-openwrt- {x}.{y}.{z}.tar.gz,然后将其复制到您的/path/to/openwrt/package/
cd /path/to/openwrt/package/
tar -xzvf easycwmp-openwrt.tar.gz
cd ..
编译:
make menuconfig #(And then select the package as <*>)
make
编译打包:
make menuconfig #(And then select the package as <M>)
make package/easycwmp/compile
安装:
编译:根据OpenWRT手册在设备中安装OpenWRT系统 ,然后启动系统,您将自动运行 easycwmp
编译打包:将软件包复制到OpenWRT系统,然后使用以下方法安装:
opkg install
启动 easycwmpd 方式1:
/etc/init.d/easycwmpd start
启动 easycwmpd 方式2:
/etc/init.d/easycwmpd boot
注意: 如果使用start命令运行easycwmpd,它将向ACS发送包含“ 2 PERIODIC”事件的通知,并将GetRPCMethods发送到ACS。并且,如果使用boot命令运行easycwmpd,它将向ACS发送包含“ 1 BOOT”事件的通知。
注意: 第三方应用程序可以通过调用以下命令来触发EasyCwmp守护程序发送通知(带有值更改事件的通知):
ubus call tr069 notify
如果EasyCwmp守护程序接收到ubus调用notify,则它将检查是否存在告警信息。
microxml
如果在OpenWRT中构建EasyCwmp时遇到与lib microxml有关的任何问题,则可以使用以下libmicroxml软件包:
cd /path/to/openwrt/package/
wget http://easycwmp.org/download/libmicroxml.tar.gz
2. 其他 Linux 发行版本安装 EasyCwmp
general
easycwmp将放置在/opt/dev/目录中。所有其他依赖项将安装在/opt/git/目录中。
配置我们将要使用的USER和GROUP变量:
USER=your_user
GROUP=your_group
创建目录:
sudo mkdir -p /opt/{dev,git}
sudo chown -R $USER:$GROUP /opt/{dev,git}
curl
sudo apt install libcurl4-openssl-dev
您的发行版应该已经包含curl开发包。可以直接使用。
注意:如果使用SSL软件包依赖关系来构建libcurl,则建议使用OpenSSL进行构建,因为EasyCwmp主要是使用OpenSSL与libcurl一起测试的。
如果使用PolarSSL构建libcurl,则无法使用ACS服务器进行摘要身份验证。
json-c
git clone git://github.com/json-c/json-c.git /opt/git/json-c
cd /opt/git/json-c/
生成配置文件:
mkdir json-c-build
cd json-c-build
cmake ../../json-c # See CMake section below for custom arguments
编译:
make
make test
make USE_VALGRIND=0 test # optionally skip using valgrind
安装:
sudo make install
sudo ln -sf /usr/local/include/json-c /usr/include/json
libubox
下载源码:
git clone git://nbd.name/luci2/libubox.git /opt/git/libubox
cd /opt/git/libubox/
配置cmake:
cmake CMakeLists.txt -DBUILD_LUA=OFF
编译:
make
libubox在make时,报错
blobmsg_json.c:78:2 error: implicit declaration of function 'is_error'
jshn.c:162:2: error: implicit declaration of function 'is_error'
需要在对应C文件中添加 #define is_error(ptr) (ptr == NULL)
宏定义重新编译
安装:
sudo make install
sudo ln -sf /usr/local/lib/libubox.so /usr/lib/libubox.so
sudo mkdir -p /usr/share/libubox
sudo ln -sf /usr/local/share/libubox/jshn.sh /usr/share/libubox/jshn.sh
uci
下载源码:
git clone git://nbd.name/uci.git /opt/git/uci
cd /opt/git/uci/
配置cmake:
cmake CMakeLists.txt -DBUILD_LUA=OFF
编译:
make
安装:
class="western"
sudo make install
sudo ln -sf /usr/local/bin/uci /sbin/uci
sudo ln -sf /usr/local/lib/libuci.so /usr/lib/libuci.so
ubus
下载源码:
git clone git://nbd.name/luci2/ubus.git /opt/git/ubus
cd /opt/git/ubus/
配置cmake:
cmake CMakeLists.txt -DBUILD_LUA=OFF
编译:
make
安装:
sudo make install
sudo ln -sf /usr/local/sbin/ubusd /usr/sbin/ubusd
sudo ln -sf /usr/local/lib/libubus.so /usr/lib/libubus.so
microxml
下载源码:
git clone https://github.com/pivasoftware/microxml.git /opt/git/microxml
cd /opt/git/microxml/
生成配置文件:
autoconf -i
配置:
./configure --prefix=/usr --enable-threads --enable-shared --enable-static
编译:
make
安装:
sudo make install
sudo ln -sf /usr/lib/libmicroxml.so.1.0 /lib/libmicroxml.so
sudo ln -sf /usr/lib/libmicroxml.so.1.0 /lib/libmicroxml.so.1
easycwmp
编译:
一旦安装了依赖项,我们就可以开始编译easycwmp。
下载源码:
下载 easycwmp-{x}.{y}.{z}.tar.gz 解压到 /opt/dev/
cd /opt/dev/
tar -xzvf easycwmp-{x}.{y}.{z}.tar.gz
mv easycwmp-{x}.{y}.{z} easycwmp
cd /opt/dev/easycwmp/
生成配置文件:
autoreconf -i
配置编译:
./configure --enable-debug --enable-devel --enable-acs=multi --enable-jsonc=1
编译:
make
可能出现如下错误:
./configure: line 4129: syntax error near unexpected token `LIBCURL,'
./configure: line 4129: `PKG_CHECK_MODULES(LIBCURL, libcurl)'
解决方法:安装PKG依赖包
apt install pkg-config
apt install libssl-dev
然后从 autoreconf -i 开始重新安装
不用安装easycwmp,将其存放到/opt/dev/easycwmp/目录中,可直接使用它,进入 /opt/dev/easycwmp/目录
cd /opt/dev/easycwmp/
因为我们正在使用此设置进行开发,所以我们希望所有更改都在git克隆中可见。最好的方法是使用符号链接。首先在实际设备上创建脚本所在的目录:
sudo mkdir -p /usr/share/easycwmp/functions
sudo mkdir -p /etc/easycwmp
然后为easycwmp脚本创建符号链接:
sudo ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/easycwmp.sh /usr/sbin/easycwmp
sudo ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/defaults /usr/share/easycwmp/defaults
sudo ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/common/common /usr/share/easycwmp/functions/common
sudo ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/common/device_info /usr/share/easycwmp/functions/device_info
sudo ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/common/management_server /usr/share/easycwmp/functions/management_server
sudo ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/common/ipping_launch /usr/share/easycwmp/functions/ipping_launch
sudo ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/tr181/root /usr/share/easycwmp/functions/root
sudo ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/tr181/ip /usr/share/easycwmp/functions/ip
sudo ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/tr181/ipping_diagnostic /usr/share/easycwmp/functions/ipping_diagnostic
然后修改脚本为可执行
chmod +x /opt/dev/easycwmp/ext/openwrt/scripts/functions/*
同样,可以为easycwmp配置文件创建符号链接:
sudo mkdir /etc/config
sudo ln -sf /opt/dev/easycwmp/ext/openwrt/config/easycwmp /etc/config/easycwmp
最后为easycwmpd二进制文件创建符号链接:
sudo ln -sf /opt/dev/easycwmp/bin/easycwmpd /usr/sbin/easycwmpd
导出在easycwmp脚本中使用的一些变量:
export UCI_CONFIG_DIR="/opt/dev/easycwmp/ext/openwrt/config/"
export UBUS_SOCKET="/var/run/ubus.sock"
从OpenWrt安装一些shell脚本:
sudo mkdir -p /lib/{config,functions}
sudo wget http://pastebin.lukaperkov.net/openwrt/20121219_lib_functions.sh -O /lib/functions.sh
sudo wget http://pastebin.lukaperkov.net/openwrt/20121219_lib_config_uci.sh -O /lib/config/uci.sh
sudo wget http://pastebin.lukaperkov.net/openwrt/20121219_lib_functions_network.sh -O /lib/functions/network.sh
如果在运行时一切配置正确,执行以下操作:
bash /usr/sbin/easycwmp get value Device.
可以看到打印输出如下:
{ "parameter": "Device.DeviceInfo.Manufacturer", "fault_code": "", "value": "easycwmp", "type": "xsd:string" }
{ "parameter": "Device.DeviceInfo.ManufacturerOUI", "fault_code": "", "value": "FFFFFF", "type": "xsd:string" }
{ "parameter": "Device.DeviceInfo.ProductClass", "fault_code": "", "value": "easycwmp", "type": "xsd:string" }
{ "parameter": "Device.DeviceInfo.SerialNumber", "fault_code": "", "value": "FFFFFF123456", "type": "xsd:string" }
{ "parameter": "Device.DeviceInfo.HardwareVersion", "fault_code": "", "value": "example_hw_version", "type": "xsd:string" }
{ "parameter": "Device.DeviceInfo.SoftwareVersion", "fault_code": "", "value": "example_sw_version", "type": "xsd:string" }
{ "parameter": "Device.DeviceInfo.UpTime", "fault_code": "", "value": "429120", "type": "xsd:string" }
...
根据您的系统,您可能需要:
export PATH=$PATH:/usr/sbin:/sbin
sudo ln -sf bash /bin/sh
请注意,您的系统/bin/sh符号链接应指向bash解释器。
在/etc/config/easycwmp和/usr/share/easycwmp/defaults中进行更改,以便easycwmpd可以连接到ACS服务器。但是在运行easycwmpd之前,请确保已在另一个运行ubusd的终端中:
ubusd -s /var/run/ubus.sock
最后以根用户身份运行easycwmpd:
/usr/sbin/easycwmpd -f -b
注意: 第三方应用程序可以通过调用以下命令来触发EasyCwmp守护程序发送通知(带有值更改事件的通知):
ubus call tr069 notify
如果EasyCwmp守护程序接收到ubus调用notify,则它将检查是否存在告警信息。