声明:本文是对开源程序代码学习和研究,严禁用于商业目的。 若有任何问题,欢迎和我交流。(企鹅号:408797506)php
本文全部笔记和代码能够到csdn下载:http://download.csdn.net/detail/eryunyong/9590036linux
一. linux上安装git
为了更好理解easycwmp运行机制和以及部署在各种linux内核的操做系统环境,咱们选择官网的第二种安装方法。github
(1) linux系统:Ubuntu 12.04shell
(2) 安装EasyCwmp所须要的依赖:(若安装过程提示找不到安装包,请到官网更新Ubuntu源:http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1%A8)编程
libcurl :json
libuciubuntu
json-c:可能会遇到版本问题,后附解决放案.bash
libuboxcurl
libubus
libmicroxml:下载地址 http://easycwmp.org/download/libmicroxml.tar.gz
1. general安装
参考官网,在/opt/目录下建立git和dev两个目录。并赋予用户操做权限
为了省去sudo麻烦,后面全部操做能够直接使用root用户进行安装
2. curl安装
安装说明:
这里暂时不安装curl工具,由于咱们须要用curl进行编程,因此重点会介绍如何在c程序里使用curl提供的API接口。
若是喜欢curl命令行工具,可使用命令安装: sudo apt-get install curl
后续若是有必要,再安装该工具
1. sudo apt-get install libcurl4-openssl-dev (官网 Note: If you build libcurl with an SSL package dependency, then it is recommended to build with OpenSSL since EasyCwmp was mainly tested with libcurl using OpenSSL.)
提示:最后出现ldconfig deferred processing now taking place: 编写测试程序若出现找不到curl文件,最好重启生效。
2. 测试curl程序
参考:http://blog.csdn.net/u011641885/article/details/46900771
#include <stdio.h> #include <curl/curl.h> #include <stdlib.h> int main(int argc, char *argv[]) { CURL *curl; //定义CURL类型的指针 CURLcode res; //定义CURLcode类型的变量,保存返回状态码 if(argc!=2) { printf("Usage : file <url>;/n"); exit(1); } curl = curl_easy_init(); //初始化一个CURL类型的指针 if(curl!=NULL) { //设置curl选项. 其中CURLOPT_URL是让用户指定url. argv[1]中存放的命令行传进来的网址 curl_easy_setopt(curl, CURLOPT_URL, argv[1]); //调用curl_easy_perform 执行咱们的设置.并进行相关的操做. 在这里只在屏幕上显示出来. res = curl_easy_perform(curl); //清除curl操做. curl_easy_cleanup(curl); } return 0; }
3. json安装
0.依赖libtool
apt-get install libtool
1.get source
git clone git://github.com/json-c/json-c.git /opt/git/json-c
cd /opt/git/json-c/
2.Generate configuration files:
必须保证libtool工具已经安装好
./autogen.sh
3. Configure:
./configure
4.build & install
make
make install
ln -sf /usr/local/include/json-c /usr/include/json
4. libubox安装
0. 依赖工具包cmake
apt-get install cmake
1. 获取源码
git clone git://nbd.name/luci2/libubox.git /opt/git/libubox
cd /opt/git/libubox/
2. 配置
cmake CMakeLists.txt -DBUILD_LUA=OFF
遇到提示:package 'json' not found
只要json路径默认安装在/usr/local/include
能够不用担忧该提示
3. 编译安装
make
遇到错误:
blobmsg_json.c:78:2 error: implicit declaration of function 'is_error'
jshn.c:162:2: error: implicit declaration of function 'is_error'
解决办法:
对应的文件里加入下面定义
#define is_error(ptr) (ptr == NULL)
make install
ln -sf /usr/local/lib/libubox.so /usr/lib/libubox.so
mkdir -p /usr/share/libubox
ln -sf /usr/local/share/libubox/jshn.sh /usr/share/libubox/jshn.sh
5. uci安装
1. 获取源码
git clone git://nbd.name/uci.git /opt/git/uci
cd /opt/git/uci/
2. 配置
cmake CMakeLists.txt -DBUILD_LUA=OFF
3. 编译安装
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
6. ubus安装
1. 获取源码
git clone git://nbd.name/luci2/ubus.git /opt/git/ubus
cd /opt/git/ubus/
2. 配置
cmake CMakeLists.txt -DBUILD_LUA=OFF
提示: package 'systemd' not found
能够不用担忧该提示
3. 编译安装
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
7. microxml安装
1. 获取源码
git clone https://github.com/pivasoftware/microxml.git /opt/git/microxml
cd /opt/git/microxml/
2. 配置
autoconf -i
./configure --prefix=/usr --enable-threads --enable-shared --enable-static
3. 编译安装
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
8.easycwmp安装
1. 获取源码
cd /opt/dev/
wget http://easycwmp.org/download/easycwmp-{x}.{y}.{z}.tar.gz
tar -xzvf easycwmp-{x}.{y}.{z}.tar.gz
mv easycwmp-{x}.{y}.{z} easycwmp
cd /opt/dev/easycwmp/
2. 配置
autoconf -i
./configure --enable-debug --enable-devel --enable-jsonc=1
3. 编译安装
make
4. 准备配置开发环境
4.1 建立脚本存放目录
mkdir -p /usr/share/easycwmp/functions
mkdir -p /etc/easycwmp
4.2 建立easycwmp脚本运行的符号连接
ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/easycwmp.sh /usr/sbin/easycwmp
ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/defaults /usr/share/easycwmp/defaults
ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/common /usr/share/easycwmp/functions/common
ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/device_info /usr/share/easycwmp/functions/device_info
ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/lan_device /usr/share/easycwmp/functions/lan_device
ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/management_server /usr/share/easycwmp/functions/management_server
ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/management_server /usr/share/easycwmp/functions/management_server
4.3 建立easycwmp配置文件的符号连接
mkdir /etc/config
ln -sf /opt/dev/easycwmp/ext/openwrt/config/easycwmp /etc/config/easycwmp
4.4 建立easycwmpd进程的符号连接
ln -sf /opt/dev/easycwmp/bin/easycwmpd /usr/sbin/easycwmpd
4.5 export 在easycwmp脚本运行的环境变量
export UCI_CONFIG_DIR="/opt/dev/easycwmp/ext/openwrt/config/"
export UBUS_SOCKET="/var/run/ubus.sock"
4.6 使用Openwrt脚本测试是否easycwmp安装成功?
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 InternetGatewayDevice.
遇到错误:: 未有任何输出,解决办法参考下一步遇到的错误
4.7 运行easycwmp
export PATH=$PATH:/usr/sbin:/sbin
ln -sf bash /bin/sh
/usr/sbin/ubusd -s /var/run/ubus.sock &
/usr/sbin/easycwmpd -f -b
遇到错误:: error while loading shared libraries: libjson-c.so.3: cannot open shared object file: No such file or directory
解决办法:若是严格按照个人步骤,你会出现找不到libjson库的问题,由于在安装libjson的时候默认安装到/usr/local/lib/路径下面,因此建立软链接指向这里便可:
ln -sf /usr/local/lib/libjson-c.so.3.0.0 /usr/lib/libjson-c.so.3
二. 使用openacs测试
1. 设置acs url
vi /etc/config/easycwmp
修改acs url一行为以下
option url http://ip:8080/openacs/acs
2.打开openacs
http://ip:8080/openacs
在FindCPE下面看到设备型号,输入序列号便可进行操做
三. 代码阅读
初步阅读代码,未发现该开源代码有什么优点,这也许就是商业和非商业的区别。 并且在官网上,人家也说了:Data Model部分,shell写的是开源,随便大家蹂躏,C写的才是商业机密,性能比你shell吊炸天!!!!要的就是你在shell里面痛苦,再找我要商业版的,^_^,外国犊子够奸诈了吧!!!!
有空我也写个商业版的cwmp,并且要比他还牛逼,我要支持多平台的,不单单是linux,那就赶忙众筹我吧,哈哈,让我有更多的时间来写一个吊炸天的程序给大家用。
参考:http://www.easycwmp.org/index.php/manual