【ubuntu18.04】ubuntu18.04安装EasyCwmp操作说明

参考链接

Tutorial – EasyCwmphttps://easycwmp.org/tutorial/

EasyCwmp 介绍

EasyCwmp 设计包括 2 个部分:

  • EasyCwmp 核心:它包括 TR069 CWMP 引擎,负责与 ACS 服务器的通信。它是用 C 语言开发的。
  • EasyCwmp DataModel:它包括 TR-06 的 DATAModel,并且符合一些 DataModel 标准,例如 TR-098、TR-181、TR-104 等。

关键设计目标是将 CWMP 方法执行与 CWMP 引擎分开。这使得添加和测试新功能变得容易

DataModel 是使用 shell 作为免费解决方案和 C 作为商业解决方案开发的

EasyCwmp 依赖包

  1. libuci
  2. libcurl
  3. json-c
  4. libubox: minimum version [git version: 0608d1299546d4af1facc271a090cb2abb8c6105, date: 2012-05-30]
  5. libubus: minimum version [git version: a62e2f8c15a65efb1a82404d8f31e3bfc1cbe7d9, date: 2012-06-01]
  6. microxml: microxml is a fork of Mini-XML, it’s being used to parse XML blocks passed between ACS and the client and it’s published by freecwmp guys:
    • microxml source: git clone https://github.com/pivasoftware/microxml.git
    • microxml OpenWRT package: wget https://easycwmp.org/download/libmicroxml.tar.gz

安装工具包

apt install git 
apt install wget 
apt install curl

配置用户和组

新建AcsNet组

groupadd AcsNet

配置用户和组

USER=w1804
GROUP=AcsNet

说明:

       w1804是用户名

       AcsNet是组

创建安装目录git和dev

sudo mkdir -p /opt/{dev,git}
sudo chown -R $USER:$GROUP /opt/{dev,git}

安装json-c

 clone代码到/opt/git/json-c目录

git clone git://github.com/json-c/json-c.git /opt/git/json-c
cd /opt/git/json-c/
mkdir build
cd build

配置

cmake ../CMakeLists.txt
../cmake-configure --prefix=/usr

编译

cd ..
make

安装

sudo make install
sudo ln -sf /usr/include/json-c /usr/include/json

安装libubox

clone源码

git clone git://nbd.name/luci2/libubox.git /opt/git/libubox
cd /opt/git/libubox/

配置

cmake CMakeLists.txt -DBUILD_LUA=OFF

编译

make

安装

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

clone源码

git clone git://nbd.name/uci.git /opt/git/uci
cd /opt/git/uci/

配置

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

 安装libubox

clone源码

git clone git://nbd.name/luci2/libubox.git /opt/git/libubox
cd /opt/git/libubox/

配置

cmake CMakeLists.txt -DBUILD_LUA=OFF

编译

make

安装

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

安装ubus

clone源码

git clone git://nbd.name/luci2/ubus.git /opt/git/ubus
cd /opt/git/ubus/

配置

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

clone源码

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

Download – EasyCwmpicon-default.png?t=O83Ahttps://easycwmp.org/get/

解压easycwmp

cd /opt/dev/
tar -xzvf easycwmp-1.8.6.tar.gz
mv easycwmp-easycwmp-1.8.6.tar.gz easycwmp
cd /opt/dev/easycwmp/

配置

autoreconf -i
./configure --enable-debug --enable-devel --enable-acs=multi --enable-jsonc=1

编译

make

easycwmp配置

我们不会安装 easycwmp,我们将从 /opt/dev/easycwmp/ 目录使用它。确保我们位于如下位置:

cd /opt/dev/easycwmp/

      因为我们使用这个设置进行开发,所以我们希望我们所有的更改在我们的 git clone 中都是可见的。最好的方法是使用符号链接。首先创建脚本在实际设备上所在的目录:

sudo mkdir -p /usr/share/easycwmp/functions
sudo mkdir -p /etc/easycwmp

create symlinks for easycwmp scripts

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/*

创建软连接配置文件

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

导出环境变量

export UCI_CONFIG_DIR="/opt/dev/easycwmp/ext/openwrt/config/"
export UBUS_SOCKET="/var/run/ubus.sock"

安装sh脚本

sudo mkdir -p /lib/{config,functions}
sudo wget https://github.com/openwrt/openwrt/blob/main/package/base-files/files/lib/functions.sh -O /lib/functions.sh
sudo wget https://github.com/openwrt/openwrt/blob/main/package/system/uci/files/lib/config/uci.sh -O /lib/config/uci.sh
sudo wget https://github.com/openwrt/openwrt/blob/main/package/base-files/files/lib/functions/network.sh -O /lib/functions/network.sh

运行easycwmpd 

export PATH=$PATH:/usr/sbin:/sbin
sudo ln -sf bash /bin/sh
/usr/sbin/ubusd -s /var/run/ubus.sock
/usr/sbin/easycwmpd -f -broot@w1804-virtual-machine:/opt/jboss-4.2.2.GA/bin# /usr/sbin/easycwmpd -f -b
2024-12-12 09:20:49 [easycwmp] NOTICE - add event '0 BOOTSTRAP'
2024-12-12 09:20:49 [easycwmp] NOTICE - add event '1 BOOT'
2024-12-12 09:20:49 [easycwmp] NOTICE - add event '2 PERIODIC'
2024-12-12 09:20:49 [easycwmp] NOTICE - external script init
2024-12-12 09:20:49 [easycwmp] NOTICE - init periodic inform: reference time = -62135615268, interval = 100
2024-12-12 09:20:49 [easycwmp] NOTICE - external: execute update_value_change  
2024-12-12 09:20:49 [easycwmp] NOTICE - daemon started
2024-12-12 09:20:49 [easycwmp] NOTICE - external: execute inform device_id 
2024-12-12 09:20:49 [easycwmp] NOTICE - external script exit
2024-12-12 09:20:49 [easycwmp] NOTICE - add event '1 BOOT'
2024-12-12 09:20:49 [easycwmp] NOTICE - http server initialized
2024-12-12 09:20:49 [easycwmp] NOTICE - entering main loop
2024-12-12 09:20:49 [easycwmp] NOTICE - start session
2024-12-12 09:20:49 [easycwmp] NOTICE - configured acs url http://192.168.1.110:8080/openacs/acs
2024-12-12 09:20:49 [easycwmp] NOTICE - external script init
2024-12-12 09:20:49 [easycwmp] NOTICE - external: execute inform parameter 
2024-12-12 09:20:49 [easycwmp] NOTICE - send Inform
*   Trying 192.168.1.110...
* TCP_NODELAY set
ubus call tr069 notify

测试

easycwmp get value

root@w1804-virtual-machine:/opt/jboss-4.2.2.GA/bin# easycwmp get value
{ "parameter": "Device.DeviceInfo.SpecVersion", "value": "1.0" }
{ "parameter": "Device.DeviceInfo.ProvisioningCode", "value": "" }
{ "parameter": "Device.DeviceInfo.Manufacturer", "value": "easycwmp" }
{ "parameter": "Device.DeviceInfo.ManufacturerOUI", "value": "FFFFFF" }
{ "parameter": "Device.DeviceInfo.ProductClass", "value": "easycwmp" }
{ "parameter": "Device.DeviceInfo.SerialNumber", "value": "FFFFFF123456" }
{ "parameter": "Device.DeviceInfo.HardwareVersion", "value": "example_hw_version" }
{ "parameter": "Device.DeviceInfo.SoftwareVersion", "value": "example_sw_version" }
{ "parameter": "Device.DeviceInfo.UpTime", "value": "6502", "type": "xsd:unsignedInt" }
{ "parameter": "Device.DeviceInfo.DeviceLog", "value": "" }
{ "parameter": "Device.DeviceInfo.MemoryStatus.Total", "value": "4015420" }
{ "parameter": "Device.DeviceInfo.MemoryStatus.Free", "value": "212392" }
{ "parameter": "Device.IP.Diagnostics.IPPing.DiagnosticsState", "value": "None" }
{ "parameter": "Device.IP.Diagnostics.IPPing.Host", "value": "" }
{ "parameter": "Device.IP.Diagnostics.IPPing.NumberOfRepetitions", "value": "3", "type": "xsd:unsignedInt" }
{ "parameter": "Device.IP.Diagnostics.IPPing.Timeout", "value": "1000", "type": "xsd:unsignedInt" }
{ "parameter": "Device.IP.Diagnostics.IPPing.DataBlockSize", "value": "64", "type": "xsd:unsignedInt" }
{ "parameter": "Device.IP.Diagnostics.IPPing.SuccessCount", "value": "0", "type": "xsd:unsignedInt" }
{ "parameter": "Device.IP.Diagnostics.IPPing.FailureCount", "value": "0", "type": "xsd:unsignedInt" }
{ "parameter": "Device.IP.Diagnostics.IPPing.AverageResponseTime", "value": "0", "type": "xsd:unsignedInt" }
{ "parameter": "Device.IP.Diagnostics.IPPing.MinimumResponseTime", "value": "0", "type": "xsd:unsignedInt" }
{ "parameter": "Device.IP.Diagnostics.IPPing.MaximumResponseTime", "value": "0", "type": "xsd:unsignedInt" }
{ "parameter": "Device.ManagementServer.URL", "value": "http:\/\/192.168.1.110:8080\/openacs\/acs" }
{ "parameter": "Device.ManagementServer.Username", "value": "easycwmp" }
{ "parameter": "Device.ManagementServer.Password", "value": "" }
{ "parameter": "Device.ManagementServer.PeriodicInformEnable", "value": "1", "type": "xsd:boolean" }
{ "parameter": "Device.ManagementServer.PeriodicInformInterval", "value": "100", "type": "xsd:unsignedInt" }
{ "parameter": "Device.ManagementServer.PeriodicInformTime", "value": "0001-01-01T00:00:00Z", "type": "xsd:dateTime" }
{ "parameter": "Device.ManagementServer.ConnectionRequestURL", "value": "" }
{ "parameter": "Device.ManagementServer.ConnectionRequestUsername", "value": "easycwmp" }
{ "parameter": "Device.ManagementServer.ConnectionRequestPassword", "value": "" }
{ "parameter": "Device.ManagementServer.ParameterKey", "value": "" }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins流水线初体验(六)

DevOps之安装和配置 Jenkins (一) DevOps 之 CI/CD入门操作 (二) Sonar Qube介绍和安装(三) Harbor镜像仓库介绍&安装 (四) Jenkins容器使用宿主机Docker(五) Jenkins流水线初体验(六) 一、Jenkins流水线任务介绍 之前采用Jenkins的自由风格构建的项目,每个步骤…

CentOS 7.9 更换 YUM:解决宝塔安装困境的探索之旅

在进行网站搭建工作时,我满怀期待地准备安装宝塔面板,然而却遭遇了安装失败的挫折。经过一番排查与思考,我将目光聚焦到了系统的 YUM 上,怀疑它可能是导致问题的“罪魁祸首”。于是,我毅然决定对 CentOS 7.9 的 YUM 进…

如何解决垂直越权与水平越权问题

大家好,我是G探险者。 关于权限管理我们可能都了解过基于角色的访问控制RBAC技术。 但是关于水平越权和垂直越权的问题可能了解不多。 今天我们来聊聊垂直越权和水平越权的问题。 现在的Web应用和系统里,权限管理是确保数据安全和防止滥用的关键。垂直…

(SAST检测规则-8)连接字符串中的硬编码密码

严重等级:高危 缺陷详解: 在构建数据驱动的应用程序时,开发者通常需要通过数据库连接字符串与数据库进行交互。将敏感信息(如密码、服务器IP地址或加密密钥)硬编码在源代码中会带来以下风险: 信息暴露&a…

Spring Boot整合 RabbitMQ

文章目录 一. 引入依赖二. 添加配置三. Work Queue(工作队列模式)声明队列生产者消费者 四. Publish/Subscribe(发布订阅模式)声明队列和交换机生产者消费者 五. Routing(路由模式)声明队列和交换机生产者消费者 六. Topics(通配符模式)声明队列和交换机生产者消费者 一. 引入依…

Qwen 论文阅读记录

本文仅作自己初步熟悉大模型,梳理之用,慢慢会更改/增加/删除,部分细节尚未解释,希望不断学习之后,能够完善补充。若有同道之人,欢迎指正探讨。 关于后面的code-qwen and math-qwen,我个人认为依…

Python 元类(Meta Class):解密 Python 面向对象编程的幕后推手

在 Python 编程中,我们每天都在和类打交道,但是你是否也和我一样想过:类本身是什么?是谁创建了类?元类(Meta Class)就是用来创建类的"类"。今天让我们一起深入理解这个强大而神秘的特…

JCR一区牛顿-拉夫逊优化算法+分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测

JCR一区牛顿-拉夫逊优化算法分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测 目录 JCR一区牛顿-拉夫逊优化算法分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.中科院…

如何在小米平板5上运行 deepin 23 ?

deepin 23 加入了 ARM64 支持,这里尝试将 deepin 系统刷入平板中,平常使用中,带个笔记本电脑有时候也会嫌比较麻烦,把 Linux 系统刷入平板中既满足了使用需要,又满足了轻便的需求。为什么不使用 Termux ?虽…

QT6 Socket通讯封装(TCP/UDP)

为大家分享一下最近封装的以太网socket通讯接口 效果演示 如图,界面还没优化,后续更新 废话不多说直接上教程 添加库 如果为qmake项目中,在.pro文件添加 QT network QT core gui QT networkgreaterThan(QT_MAJOR_VERS…

all/any函数可以对“条件”打包(Python)

操作符直观易读适用简单逻辑,函数紧凑好写便于多条件处理。 (笔记模板由python脚本于2024年12月12日 22:19:10创建,本篇笔记适合有一定编程基础的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free&#xff…

js:v-for循环中我希望再次循环七张图片,需要在v-for中嵌套一个v-for还是?

问: div classxxxx v-for(item,index) in data :keyindex div classimgDiv div classimgDivBox /div /div .imgDivBox { .background-img(/assets/images/top_01.png) } 这是现在设置的图片,但是现在我希望遍历一个数组然后遍历top01-top07&…

Java使用MVEL公式引擎

为了增加更多的常用方法,如 sum、max 和 min 等等,我们可以扩展 Helper 类以包含这些方法。这样,MVEL 表达式就可以直接调用这些方法来执行相应的计算。我们将确保这些方法可以处理多种数值类型,并且返回适当的数值类型&#xff0…

黑皮书-计算机科学导论02

目录 第二部分:计算机硬件 第5章计算机组成 5.1中央处理单元 Ⅰ.算数逻辑单元 Ⅱ.控制单元 Ⅲ.寄存器 5.2主存储器 Ⅰ.随机存取存储器(RAM) Ⅱ.只读存储器(ROM) 高速缓冲存储器(Cache) 5.3输入/输出子系统 Ⅰ.非存储设备 Ⅱ.存储设备(辅助存…

小程序开发中的插件生态与应用-上

更多精彩内容都在公zhong号:小白的大数据之旅 在小程序的开发过程中,插件作为扩展功能、提升效率的重要工具,扮演着不可或缺的角色。它们不仅能够帮助开发者快速集成复杂的功能模块,还能优化开发流程,缩短项目周期。 …

优选算法——分治(快排)

1. 颜色分类 题目链接:75. 颜色分类 - 力扣(LeetCode) 题目展示: 题目分析:本题其实就要将数组最终分成3块儿,这也是后面快排的优化思路,具体大家来看下图。 这里我们上来先定义了3个指针&…

go开发中interface和方法接收器的使用

Go 语言中的接口和方法接收器学习 Go 中的 interface 就像是一个神奇的魔法杖,能让你轻松地将不同的类型拉到同一个阵营里。与其他语言的接口不同,Go 的接口无需显式声明“我实现了你”,只要你满足了接口规定的方法,Go 就会自动认…

llm chat场景下的数据同步

背景 正常的chat/im通常是有单点登录或者利用类似广播的机制做多设备间内容同步的。而且由于长连接的存在,数据同步(想起来)相对简单。而llm的chat在缺失这两个机制的情况下,没见到特别好的做到了数据同步的产品。 llm chat主要两…

【大模型系列篇】GPU资源容器化访问使用指南

在当今的高性能计算和机器学习领域,GPU(图形处理单元)因其卓越的并行计算能力而扮演着至关重要的角色。随着容器化技术如 Docker 的普及,越来越多的数据科学家和开发者选择将他们的应用和工作负载封装到 Docker 容器中&#xff0c…

【毕业设计选题】数据科学与大数据专业毕业设计选题与建议

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整…