Frossky 发布的文章

装opennms真的是坑多多。。。
需要同时参考下面两个地址:
Installation Guide
Installation:Debian

使用标准的简化快速安装方式会出问题,主要是国内下载太慢。。。

首先,apt-get源需要增加一个。在/etc/apt/source.list.d/下增加一个文件,内容是:

···
deb http://debian.opennms.org opennms-19 main
deb-src http://debian.opennms.org opennms-19 main
···

然后更新源

sudo apt-get update
这儿不得不说第一个坑,默认的内容(如下)更新会遇到问题,所以一定要注意!!!
···
deb http://debian.opennms.org stable main
deb-src http://debian.opennms.org stable main
···

安装

sudo apt-get install opennms

照做不会错的部分

按照 4.2.2. Prepare PostgreSQL 这部分安装,没问题,复制如下:
···
The Debian package installs also PostgreSQL database and is already initialized and added in the runlevel configuration. It is only necessary to start the PostgreSQL database without a restart.

Startup PostgreSQL database
service postgresql start
The next step is creating an opennms database user with password and configure the authentication method.

Accounting and database management for OpenNMS
su - postgres
createuser -P opennms
createdb -O opennms opennms
exit
It is not necessary to change the authentication method in pg_hba.conf, it is by default set to md5 for localhost connections.
Set password for Postgres super user
su - postgres
psql -c "ALTER USER postgres WITH PASSWORD 'YOUR-POSTGRES-PASSWORD';"
exit
The super user is required to be able to initialize and change the database schema for installation and updates.
vi ${OPENNMS_HOME}/etc/opennms-datasources.xml
Configuration for database authentication in OpenNMS
database-name="opennms"
class-name="org.postgresql.Driver"
url="jdbc:postgresql://localhost:5432/opennms"
user-name="** YOUR-OPENNMS-USERNAME **"
password="** YOUR-OPENNMS-PASSWORD **" />

database-name="template1"
class-name="org.postgresql.Driver"
url="jdbc:postgresql://localhost:5432/template1"
user-name="postgres"
password="** YOUR-POSTGRES-PASSWORD **" />
Set the user name to access the OpenNMS database table
Set the password to access the OpenNMS database table
Set the postgres user for administrative access to PostgreSQL
Set the password for administrative access to PostgreSQL
···

初始化

后面记得OPENNMS_HOME位置是在/usr/share/opennms/

初始化JAVA_HOME

Configuration of Java environment for OpenNMS
${OPENNMS_HOME}/bin/runjava -s
看起来没问题,不顾我建议还是改一下/usr/default/opennms文件,内容为:
···
JAVA_HOME=/usr/bin
···

安装和初始化IPlike

确认一下装了没

sudo apt-get install iplike

使用脚本初始化

sudo /usr/sbin/install_iplike.sh

提示“CREATE FUNCTION”就是装好了。

初始化opennms

记住!检查一下你装的是jdk还是jre!jre是会有问题的!
最好再装一次jdk8

sudo apt-get install openjdk-8-jdk

然后
${OPENNMS_HOME}/bin/install -dis

终于可以运行服务就好了!

sudo service start opennms

deepin安装后默认是创建的deepin用户,怎么进入root和修改root密码?
其实很简单,用sudo passwd即可,不需要输入旧密码(本来也没有旧密码)
修改其他用户的密码,用sudo passwd username即可。

Windows下著名的当然是wireshark,这个在linux下也有,apt-get install wireshark就可以了,不过需要图形界面才能运行,不适合ssh登录。
ssh命令行下的抓包,就是tcpdump,包很小,1M左右,所以在openwrt下也能使用。
使用参考这篇文章12 Tcpdump Commands – A Network Sniffer Tool

抓包

抓指定网口
-i eth0
抓指定协议tcp ip udp
tcp
抓指定目的ip
dst 192.168.0.118
抓指定源ip
src 192.168.0.118
抓指定ip
host 192.168.0.118
抓指定端口
port 80

逻辑方式

和、或
host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 )
'host 210.27.48.1 and (210.27.48.2 or 210.27.48.3 )'

host 210.27.48.1 and ! 210.27.48.2

查看

抓5个包
-c 5
ASCII形式看包内容
-A
16进制看包内容
-XX
看有哪些硬件端口
-D

保存

存到文件
-w cap001.pcap
从文件读
-r cap001.pcap

可以通过命令上使用

Usage: uci [<options>] <command> [<arguments>]

Commands:
        batch
        export     [<config>]
        import     [<config>]
        changes    [<config>]
        commit     [<config>]
        add        <config> <section-type>
        add_list   <config>.<section>.<option>=<string>
        del_list   <config>.<section>.<option>=<string>
        show       [<config>[.<section>[.<option>]]]
        get        <config>.<section>[.<option>]
        set        <config>.<section>[.<option>]=<value>
        delete     <config>[.<section>[[.<option>][=<id>]]]
        rename     <config>.<section>[.<option>]=<name>
        revert     <config>[.<section>[.<option>]]
        reorder    <config>.<section>=<position>

Options:
        -c <path>  set the search path for config files (default: /etc/config)
        -d <str>   set the delimiter for list values in uci show
        -f <file>  use <file> as input instead of stdin
        -m         when importing, merge data into an existing package
        -n         name unnamed sections on export (default)
        -N         don't name unnamed sections
        -p <path>  add a search path for config change files
        -P <path>  add a search path for config change files and use as default
        -q         quiet mode (don't print error messages)
        -s         force strict mode (stop on parser errors, default)
        -S         disable strict mode
        -X         do not use extended syntax on 'show'

/

斜杠划分不同的级别,如

“sport/tennis/player1”

#

井号通配当前级别以下的所有内容
如“sport/tennis/player1/#”匹配:
· “sport/tennis/player1”
· “sport/tennis/player1/ranking”
· “sport/tennis/player1/score/wimbledon”
如果只是一个#,则匹配所有。

+

加号匹配单级内容
如 “sport/tennis/+” 匹配 “sport/tennis/player1” 和 “sport/tennis/player2”, 但是不匹配 “sport/tennis/player1/ranking”,也不匹配““sport/tennis”

$

美元符号在发布时放在主题名称前面,用作系统特定的一些消息发布,并且不能被#、+通配符所匹配到。
$SYS/一般用于发布和服务器系统相关的信息
应用不应使用$开头的名称。

20201/5/17更新: Windows上也支持mosquitto了,在mosquitto官网上有windows版本的下载, 可以使用. 以前的似乎不能用:windows(win10) 就别费劲了。。。两个版本win32和cygwin装完都不能运行,坑爹的是它还需要一大堆的dll,这些dll它不提供还要你去找。。。
ubuntu上装起来很容易,直接

sudo apt-get install mosquitto

就可以了。装完了直接作为服务运行。开始还奇怪,为什么运行mosquitto老是提示地址被占用(Address already in use.)
装完服务装客户端,命令是

sudo apt-get install mosquitto-clients

mosquitto_sub命令

这样你才可以用mosquitto-sub命令
输入

mosquitto_sub -t 'test/topic' -v

订阅消息,等待消息输出。
使用-h命令可以指定服务器地址, 否则是以本机为服务器.
mosquitto的payload可以是二进制数据, 如果要以16进制显示, 使用-F命令跟上格式%x, 注意-F命令在旧版的mosquitto上不支持:

mosquitto_sub -h 192.168.0.108 -t rgb/show -F %x

mosquitto_pub

另开一个终端,输入:

mosquitto_pub -t 'test/topic' -m 'hello world'

在前一个终端窗口就能看到消息了。

远程连接MQTT服务器,加入参数 -h xxx.xxx.xxx.xxx 就可以了。

mosquitto pub发送二进制的方式

命令行直接发送(限于Linux BASH)

echo -ne "\x45\x23\x43" | mosquitto_pub -h test.mosquitto.org -t 'test/binary' -s

通过文件发送

mosquitto_pub -t test -f filename

转载并翻译自溢栈Stackoveflow

作者是Marc Gravell

JSON

  • 人类可读写
  • 解析时不需要知道范式
  • 浏览器支持极佳
  • 不像XML那么累赘

XML

  • 人类可读写
  • 解析时不需要知道范式
  • SOAP等的标准
  • 工具支持好(xsd、xslt、sax、dom等)
  • 超累赘

protobuf

  • 数据很密(输出少)
  • 不知道范式很难解析(数据格式内部是模糊的,需要范式去明确)
  • 处理极快
  • 不是为人眼阅读准备的(高密度二进制)
    以上在大多数平台都有很好的支持。
    个人来说,我现在几乎不用XML了。如果消费方是浏览器或者公共API我倾向于用JSON。内部API,由于性能原因我倾向于用protobuf。公共API两个都提供也可以(通过headers或者独立的endpoints)