zoukankan      html  css  js  c++  java
  • CWMP开源代码研究2——easycwmp安装和学习

    摘自并整理:https://www.cnblogs.com/myblesh/p/6225665.html

    声明:本文是对开源程序代码学习和研究,严禁用于商业目的。 如有任何问题,欢迎和我交流。(企鹅号:408797506)

    本文所有笔记和代码可以到csdn下载:http://download.csdn.net/detail/eryunyong/9590036

    一. linux上安装

    为了更好理解easycwmp运行机制和以及部署在各类linux内核的操作系统环境,我们选择官网的第二种安装方法。

    (1)       linux系统:Ubuntu 12.04

    (2)       安装EasyCwmp所需要的依赖:(若安装过程提示找不到安装包,请到官网更新Ubuntu源:http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1%A8)

    libcurl :

    libuci

    json-c:可能会遇到版本问题,后附解决放案.

    libubox

    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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #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安装

    我使用的是下面的方法安装的

    yum -y install json-devel.x86_64

    yum -y install json-c-devel.x86_64

    这里把原文的方法列出来
    
    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

    安装easycwmp时,提示找不到libcurl(rpm -qa | grep curl查询已安装)
    No package 'libcurl' found,找到libcurl的安装目录,设置成对应的pkgconfig即可
    如下设置即可
    export PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig/:/usr/lib64/pkgconfig/


    3. 编译安装
    make

    4. 准备配置开发环境
    4.1 创建脚本存放目录
    mkdir -p /usr/share/easycwmp/functions
    mkdir -p /etc/easycwmp

    4.2 创建easycwmp脚本运行的符号链接

    ln -sf /opt/dev/easycwmp-1.8.6/ext/openwrt/scripts/easycwmp.sh /usr/sbin/easycwmp
    ln -sf /opt/dev/easycwmp-1.8.6/ext/openwrt/scripts/defaults /usr/share/easycwmp/defaults
    ln -sf /opt/dev/easycwmp-1.8.6/ext/openwrt/scripts/functions/common/common /usr/share/easycwmp/functions/common
    ln -sf /opt/dev/easycwmp-1.8.6/ext/openwrt/scripts/functions/common/device_info /usr/share/easycwmp/functions/device_info
    ln -sf /opt/dev/easycwmp-1.8.6/ext/openwrt/scripts/functions/tr098/lan_device /usr/share/easycwmp/functions/lan_device
    ln -sf /opt/dev/easycwmp-1.8.6/ext/openwrt/scripts/functions/common/management_server /usr/share/easycwmp/functions/management_server
    ln -sf /opt/dev/easycwmp-1.8.6/ext/openwrt/scripts/functions/tr181/root /usr/share/easycwmp/functions/root

    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

    自从看到一个命令在我的手下,蹦的一下------------我就笑了
  • 相关阅读:
    VIJOS-P1340 拯救ice-cream(广搜+优先级队列)
    uva 11754 Code Feat
    uva11426 GCD Extreme(II)
    uvalive 4119 Always an Interger
    POJ 1442 Black Box 优先队列
    2014上海网络赛 HDU 5053 the Sum of Cube
    uvalive 4795 Paperweight
    uvalive 4589 Asteroids
    uvalive 4973 Ardenia
    DP——数字游戏
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/14199038.html
Copyright © 2011-2022 走看看