【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 依赖包
- libuci
- libcurl
- json-c
- libubox: minimum version [git version: 0608d1299546d4af1facc271a090cb2abb8c6105, date: 2012-05-30]
- libubus: minimum version [git version: a62e2f8c15a65efb1a82404d8f31e3bfc1cbe7d9, date: 2012-06-01]
- 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 – EasyCwmphttps://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": "" }
相关文章:

【ubuntu18.04】ubuntu18.04安装EasyCwmp操作说明
参考链接 Tutorial – EasyCwmphttps://easycwmp.org/tutorial/ EasyCwmp 介绍 EasyCwmp 设计包括 2 个部分: EasyCwmp 核心:它包括 TR069 CWMP 引擎,负责与 ACS 服务器的通信。它是用 C 语言开发的。EasyCwmp DataModel:它包…...
使用Jackson库的ObjectMapper类将JSON字符串转换为Java的Map对象
本教程展示如何使用Jackson库的ObjectMapper类将JSON字符串转换为Java的Map对象。 下面是具体的步骤和代码示例,包括添加依赖项以及编写用于反序列化JSON字符串为Map的代码。 添加依赖项 首先,在你的项目中添加Jackson库的依赖。如果你使用的是Maven构…...
ASP.NET Core实现鉴权授权的几个库
System.IdentityModel.Tokens.Jwt 和 Microsoft.AspNetCore.Authentication.JwtBearer 是两个常用的库,分别用于处理 JWT(JSON Web Token)相关的任务。它们在功能上有一定重叠,但侧重点和使用场景有所不同。 1. System.IdentityM…...

MySql:数据类型
✨✨作者主页:嶔某✨✨ ✨✨所属专栏:MySql✨✨ 数据类型分类 分类数据类型说明数值类型BIT(M)位类型,M指定位数,默认值1,范围1~64TINYINT [UNSIGNED]占用一个字节,带符号的范围 -128~127,无符…...
Couchbase的OLAP支持情况
Couchbase 是一个高性能的 NoSQL 数据库,主要用于在线事务处理(OLTP)场景,但它也提供了一些功能来支持在线分析处理(OLAP)需求。以下是 Couchbase 对 OLAP 支持的几个方面: 1. N1QL 查询语言 …...
企业级包管理器之搭建 npm 私有服务器 (6)
在企业级应用开发中,常常需要处理私有包的发布和管理。搭建 npm 私有服务器是一个理想的解决方案,它不仅能保证代码的私密性,还能提供更快的下载速度和更精细的权限设置。 一、搭建 npm 私有服务器的优势 保证代码私密性:在企业…...
Elasticsearch的一些介绍
你想问的可能是 **Elasticsearch**,以下是关于它的一些介绍: ### 概述 Elasticsearch是一个基于Apache Lucene库构建的开源分布式搜索和分析引擎,采用Java语言编写,具有高性能、可扩展性和易用性等特点,可用于各种数据…...

音乐网站设计与实现
文末获取源码和万字论文,制作不易,感谢点赞支持。 音乐网站设计与实现 摘 要 本音乐网站是针对目前音乐网站管理的实际需求,从实际工作出发,对过去的音乐网站管理系统存在的问题进行分析,结合计算机系统的结构、概念、…...

UE5 蓝图节点中文化
文章目录 一、问题背景二、解决方法 一、问题背景 在虚幻引擎5.4、5.5版本中,即使将编辑器语言设置为中文,还是会出现大部分蓝图节点没有中文化。 蓝图节点没有中文化图示: 二、解决方法 在左上角找到 编辑,打开 编辑器偏好设置…...

java抽奖系统登录下(四)
6.4 关于登录 最简单的登录: 1、web登录页填写登录信息,前端发送登录信息到后端; 2、后端接受登录信息,并校验。校验成功,返回成功结果。 这种登录会出现一个问题,用户1成功登录之后,获取到后台…...

解决阿里云轻量级服务器 Ubuntu 24.04.1 LTS 没网也 ping 不通 8.8.8.8 以及 route -n 没有输出任何转发信息
事情发生在两天前,位于公网的阿里云轻量级服务器(Ubuntu 24.04.1 LTS)忽然没网。主要是上次上服务器进行配置已经是一个多月前,最近也没有做什么事情,就忽然没网了,让人纳闷。更主要的是,上次备…...

跨域问题及其解决方案
跨域问题及其解决方案 在Web开发中,跨域问题是一个常见的安全限制,它涉及到浏览器的同源策略(Same-Origin Policy)。本文将详细解释跨域问题的原因、影响以及几种常见的解决方案,并提供在Java中的实现方法。 目录 跨…...

在CentOS中安装和卸载mysql
在CentOS7中安装和卸载mysql 卸载mysql1、查看是否安装过mysql2、查看mysql服务状态3、关闭mysql服务4、卸载mysql相关的rpm程序5、删除mysql相关的文件6、删除mysql的配置文件my.cnf 安装mysql1、下载mysql相关的rpm程序2、检查/tmp临时目录权限3、安装mysql前的依赖检查3、安…...

React简单入门 - [Next.js项目] - 页面跳转、AntD组件、二级目录等
须知 1Next.js 官网(英文)https://nextjs.org/2Next.js 文档(中文)https://nextjscn.org/docs/3Ant Design组件总览https://ant-design.antgroup.com/components/overview-cn4tailwindcss类名大全 官网https://www.tailwindcss.cn/docs/justify-content 5tailwindcss常用类…...

Redis安装和Python练习(Windows11 + Python3.X + Pycharm社区版)
环境 Windows11 Python3.X Pycharm社区版 思路 1 github下载redis压缩包 ,安装并启动redis服务,在客户端连接redis服务。 2 在pycharm中运行python程序,连接redis服务,熟悉redis的使用和巩固python语言。 3 python开发环境…...

Sqoop脚本编写(Mysql---->>hdfs)
目录 语法手册编写方式脚本文件类型文件编写.jar路径指定 执行效果执行方式效果 语法手册 参考博客 编写方式 脚本文件类型 只要是可读的文件即可(.txt或者.sh等其他类型,不带文件后缀也可以,但二进制文件最好不要) 文件编写…...

帝可得项目redis连接不上
首先我一切配置都没问题: 1. redis-server启动 2. 可视化界面显示redis已连接 原因: 不知道是不是因为不同版本的问题(因为我之前的sky就没这个问题) 这里把password改成auth就可以了...
JS中this的值详细讲解以及面试指向练习
this 的值取决于它出现的上下文:函数、类或全局。 在函数内部,this 的值取决于函数如何被调用,this 是语言在函数体被执行时为你创建的绑定 对于典型的函数,this 的值是函数被访问的对象。换句话说,如果函数调用的形…...

显示浮动式窗口的方法
文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了AlertDialog Widget相关的内容,本章回中将介绍BottomSheet Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的BottomSheet是一种弹出式窗口,和上一章回中介绍的AlertDialog类似,但是也…...

FireFox火狐浏览器企业策略禁止更新
一直在用火狐浏览器,但是经常提示更新,进入浏览器右上角就弹出提示,比较烦。多方寻找,一直没有找到合适的方案,毕竟官方没有给出禁用检查更新的选项,甚至about:config里都没有。 最终找到了通过企业策略控…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...