GNU/Linux >> Linux の 問題 >  >> Linux

KannelDLRをMySQL/MariaDBに保存する

Kannelに関する以前の記事では、Kannelのインストール方法について学習しました。そのため、この構成では、SMS配信レポート(DLR)をベアラーボックスのメモリに保存します。 処理する。そのようにして、 Bearerbox クラッシュするか、プロセスを停止しますが、まだDLRが開いているため、SMSユーザーに問題が発生する可能性があります。

したがって、この状況を回避するために、 MySQLのような外部DLRストレージを使用できます。 データベース。前回の記事では、2つのカネルボックスを使用しました: Bearerbox およびsmsbox 。 DLRをMySQLデータベースに保存するには、別のKannelプログラム sqlboxを使用します。 。 Bearerbox間のすべての通信 およびsmsbox sqlboxを介して実行されます 。動作中、 sqlbox Bearerboxのように動作します smsbox およびsmsbox Bearerbox

異なるプロセス間の通信は、以下のように説明できます

LAB環境:

ホストOS:Debian 10(バスター)
ホストIP:192.168.10.38

同じホストにPlaySMSSMS管理アプリケーションがすでにインストールされています。 PlaySMSのインストールについては、この記事を確認してください。

理解を深めるために、この記事では、MySQLをサポートするKannelの完全なインストールプロセスを示しました。 Kannelインストール用のDebianホストを準備するには、このページを参照してください。

MariaDBサーバーをインストールする

つまり、 MySQL Oracle Corporationに買収され、コミュニティ版と商用版の両方があります。

このラボでは、 MariaDBを使用します データベース、MySQLのオープンソースの代替。 MariaDB MySQLから分岐しました オープンソースプロジェクトであり、 MySQLの元の開発者の一部によって開発およびサポートされています 。

したがって、必要な依存関係を使用してMariaDBサーバーをインストールします

# apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'

MariaDBリポジトリ情報をファイル/etc/apt/sources.list.d/MariaDB.listに入れます

# MariaDB 10.3 repository list - created 2021-12-28 18:41 UTC
# https://mariadb.org/download/
deb [arch=amd64,arm64,ppc64el] https://download.nus.edu.sg/mirror/mariadb/repo/10.3/debian buster main
deb-src https://download.nus.edu.sg/mirror/mariadb/repo/10.3/debian buster main

リポジトリを更新し、 MariaDBをインストールします 必要な依存関係を含む

# apt-get update
# apt-get install –y mariadb-server libmariadb-dev default-libmysqlclient-dev

MariaDBサービスを有効にして開始する

# systemctl enable mariadb.service
# systemctl start mariadb.service

mysql_secure_installationを実行します rootパスワードおよびその他のセキュリティディレクティブを以下のように設定するには

Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

MariaDBを作成します Kannelのデータベースとユーザー。

# mysql -u root –p
MariaDB [(none)]> CREATE DATABASE kannel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MariaDB [(none)]> CREATE USER 'kannel'@'localhost' IDENTIFIED BY 'kannelPassword';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON kannel.* TO 'kannel'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> quit

dlrを作成します カネルDLRのテーブル。他の2つのテーブルsend_sms およびsent_sms Kannel sqlboxによって自動的に作成されます 初回実行時のプロセス

CREATE TABLE `dlr` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`smsc` varchar(40) DEFAULT NULL,
`ts` varchar(40) DEFAULT NULL,
`destination` varchar(40) DEFAULT NULL,
`source` varchar(40) DEFAULT NULL,
`service` varchar(40) DEFAULT NULL,
`url` varchar(255) DEFAULT NULL,
`mask` int(10) DEFAULT NULL,
`status` int(10) DEFAULT NULL,
`boxc` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

MySQLをサポートするKannelをインストールする

DLRをMySQLに保存するには、MySQLサポートを使用してKannelをコンパイルする必要があります

# wget --no-check-certificate https://kannel.org/download/1.4.5/gateway-1.4.5.tar.gz
# tar -zxf gateway-1.4.5.tar.gz
# cd gateway-1.4.5/
# ./configure  --enable-start-stop-daemon --prefix=/usr/local/kannel --with-mysql
# make && make install

smsboxをインストールします プログラム

# cd addons/sqlbox
# ./bootstrap

Kannelのデフォルトのインストール場所を変更したため、KannelとMariaDBに必要なライブラリディレクトリとC++フラグ変数をconfigureで提供する必要があります。 スクリプト

MariaDBフラグ変数を見つけるには、コマンドの下で実行します

# mysql_config --cflags --libs

出力:

configureを実行します スクリプト

# ./configure  --prefix=/usr/local/kannel \
--with-kannel-dir=/usr/local/kannel \
LDFLAGS="-L/usr/local/kannel/lib -L/usr/lib/x86_64-linux-gnu/ -lmariadb"  \
CPPFLAGS="-I/usr/local/kannel/include/kannel -I/usr/include/mariadb -I/usr/include/mariadb/mysql"
>

sqlboxをコンパイルします プログラム

# make && make install

次に、必要なディレクトリを作成します

# mkdir /usr/local/kannel/etc
# mkdir /usr/local/kannel/run
# mkdir /var/log/kannel/

その後、以下の内容を /usr/local/kannel/etc/kannel.confに入れます。 ファイル

##CORE
group = core
admin-port = 13000
smsbox-port = 13001
admin-password = sms-gw-admin-passwd
status-password = sms-gw-status-passwd
admin-deny-ip = "*.*.*.*"
admin-allow-ip = "*.*.*.*"
box-deny-ip = "*.*.*.*"
box-allow-ip = "*.*.*.*"
log-level = 0
log-file = "https://1118798822.rsc.cdn77.org/var/log/kannel/kannel.log"
dlr-storage = mysql
sms-resend-retry = 1


##SMSC
group = smsc
smsc = at
smsc-id = smsc01
my-number = 015XXXXXXXX
allowed-smsc-id = smsc01
preferred-smsc-id = smsc01
modemtype = Huawei
device = /dev/ttyUSB0
speed = 9600
alt-charset = "GSM"
sim-buffering = true
log-file = /var/log/kannel/smsc01-gsm1.log
log-level = 0


##MODEMS
group = modems
id = Huawei
enable-mms = true
init-string = "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0;+CNMI=1,3,2,2,1;+CMEE=1;+CPMS=\"SM\",\"SM\",\"SM\";+CMGF=0;+CSCS=GSM
speed = 9600
detect-string = "huawei"


##SMSBOX
group = smsbox
bearerbox-host = localhost
sendsms-port = 13013
bearerbox-port = 13010
mo-recode = true
sendsms-chars = "0123456789 +-"
log-file = "https://1118798822.rsc.cdn77.org/var/log/kannel/smsbox.log"
log-level = 0
access-log = "https://1118798822.rsc.cdn77.org/var/log/kannel/access.log"


##SMS-USER
group = sendsms-user
user-deny-ip = "*.*.*.*"
user-allow-ip = "*.*.*.*"
# MAKE VERY SURE that you change the PASSWORD for security reasons
username = kannel
password = kannelpasswd
default-smsc = smsc01
concatenation = 1
max-messages = 10


##SMS-SERVICE
group = sms-service
keyword = default
get-url = "http://localhost/index.php?app=call&cat=gateway&plugin=kannel&access=geturl&t=%t&q=%q&a=%a&Q=%Q&smsc=kannel"
accept-x-kannel-headers = true
max-messages = 10
concatenation = true
catch-all = true
omit-empty = true


##MySQL-Connection 
group = mysql-connection
id = mysql-dlr
host = localhost
username = kannel
password = kannelPassword
database = kannel
max-connections = 1


##MySQL DLR Table
##You should not change this group name as bearerbox uses this name for MySQL DLR storage
group = dlr-db
id = mysql-dlr
table = dlr
field-smsc = smsc
field-timestamp = ts
field-destination = destination
field-source = source
field-service = service
field-url = url
field-mask = mask
field-status = status
field-boxc-id = boxc

/usr/local/kannel/etc/sqlbox.confを作成します 以下のコンテンツを含むファイル

##MySQL Connection
group = mysql-connection
id = sqlbox-db
host = localhost
port = 3306
username = kannel
password = kannelPassword
database = kannel


#SQL BOX CONFIG
group = sqlbox
id = sqlbox-db
smsbox-id = sqlbox
bearerbox-host = localhost
bearerbox-port = 13001
smsbox-port = 13010
sql-log-table = sent_sms
sql-insert-table = send_sms
log-level = 0
log-file = "https://1118798822.rsc.cdn77.org/var/log/kannel/sqlbox.log"

次に、開始/停止スクリプト / usr / local / kanel / sbin / kannel を作成します 以下のコンテンツを含む

#!/bin/bash
# Start/stop the Kannel boxes: One bearer box and one WAP box.
# This is the default init.d script for Kannel. Its configuration is
# appropriate for a small site running Kannel on one machine.
# Make sure that the Kannel binaries can be found in $BOXPATH or somewhere
# else along $PATH. run_kannel_box has to be in $BOXPATH.
#
BOXPATH=/usr/local/kannel/sbin
PIDFILES=/usr/local/kannel/run
CONFDIR=/usr/local/kannel/etc
CONF=$CONFDIR/kannel.conf
SQL_CONF=$CONFDIR/sqlbox.conf


USER=kannel
VERSION=""


RB=$BOXPATH/run_kannel_box$VERSION
BB=$BOXPATH/bearerbox$VERSION
WB=$BOXPATH/wapbox$VERSION
SB=$BOXPATH/smsbox$VERSION
SSD=$BOXPATH/start-stop-daemon$VERSION

PATH=$BOXPATH:$PATH

# On Debian, the most likely reason for the bearerbox not being available
# is that the package is in the "removed" or "unconfigured" state, and the
# init.d script is still around because it's a conffile. This is normal,
# so don't generate any output.
# test -x $BOXPATH/$BB || exit 0

case "$1" in
  start)
    echo -n "Starting WAP gateway: bearerbox"
    $SSD --start --quiet --pidfile $PIDFILES/kannel_bearerbox.pid --exec $RB -- --pidfile $PIDFILES/kannel_bearerbox.pid $BB -- $CONF
    sleep 2
    echo -n " sqlbox"
    $BOXPATH/sqlbox -d $SQL_CONF
    sleep 2
    echo -n " smsbox"
    $SSD --start --quiet --pidfile $PIDFILES/kannel_smsbox.pid --exec $RB -- --pidfile $PIDFILES/kannel_smsbox.pid $SB -- $CONF
    sleep 1
    echo "."
    ;;

  stop)
    echo -n "Stopping WAP gateway: "
    echo -n " smsbox"
    $SSD --stop --quiet --pidfile $PIDFILES/kannel_smsbox.pid --exec $RB
    sleep 1
    echo -n " sqlbox"
    pkill "sqlbox"
    sleep 1
    echo -n " bearerbox"
    $SSD --stop --quiet --pidfile $PIDFILES/kannel_bearerbox.pid --exec $RB
    echo "."
    ;;

  status)
    CORE_CONF=$(grep -r 'group[[:space:]]*=[[:space:]]*core' $CONFDIR | cut -d: -f1)
    ADMIN_PORT=$(grep '^admin-port' $CORE_CONF | sed "s/.*=[[:space:]]*//")
    ADMIN_PASS=$(grep '^admin-password' $CORE_CONF | sed "s/.*=[[:space:]]*//")
    STATUS_URL="http://127.0.0.1:${ADMIN_PORT}/status.txt?password=${ADMIN_PASS}"
    curl $STATUS_URL
    ;;

  reload)
    # We don't have support for this yet.
    exit 1
    ;;

  restart|force-reload)
    $0 stop
    sleep 3
    $0 start
    ;;

  *)
    echo "Usage: $0 {start|stop|status|reload|restart|force-reload}"
    exit 1

esac
exit 0

ファイルを/usr / local / kannel / sbin / kannelにします。 実行可能ファイル

# chmod +x /usr/local/kannel/sbin/kannel

systemdを使用してスタートアップにKannelを追加

次に、systemdユニットファイル /etc/systemd/system/kannel-gateway.serviceを作成します。 以下の内容を含む

[Unit]
Description=Kannel - WAP and SMS Gateway
Documentation=https://www.kannel.org/doc.shtml
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/usr/local/kannel/sbin/kannel start
ExecReload=/usr/local/kannel/sbin/kannel  restart
ExecStop=/usr/local/kannel/sbin/kannel stop

[Install]
WantedBy=multi-user.target

systemdをリロード

# systemctl daemon-reload

kannel-gatewayを開始して有効にします サービス

# systemctl enable kannel-gateway.service
# systemctl start kannel-gateway.service
# systemctl status kannel-gateway.service

DLR-MASKおよびDLR-URL

Kannelは、以下の配信レポートタイプを提供します

1:配信の成功
2:配達の失敗
4:メッセージバッファリング
8:smsc送信
16:smsc拒否

したがって、複数の配信レポートタイプの場合、各タイプに対応する値を合計し、 dlr-maskとして設定する必要があります。 メッセージの送信中。

例:SMSの成功、失敗、および/またはバッファリングされた配信ステータスレポートの場合、 dlr-maskを設定する必要があります。 1 + 2 + 4=7として。

dlr-maskを使用 dlr-urlを送信する必要があります SMSで配信レポートを返送します。

PlaySMSアプリケーションからのSMS送信リクエストに従うと、以下のようなhtmlリクエストが見つかります

ここでは、PlaySMSが dlr-mask で成功、失敗、バッファリング、および/またはsmsc送信要求を要求していることを理解しています。 (15)また、 dlr-urlを送信します リクエストに応じて。

SMSログを送信する

そこで、PlaySMS WebポータルからSMSを送信し、MariaDBコンソールからさまざまな状態を確認しました

SMSは送信されましたが、受信者はまだ受信していません:

MariaDB [kannel]> select * from dlr;
+----+---------------------+--------+------+---------------+-------------+---------+------------------------------------------------------------------------------------------------------------------+------+--------+------+
| id | datetime | smsc | ts | destination | source | service | url | mask | status | boxc |
+----+---------------------+--------+------+---------------+-------------+---------+------------------------------------------------------------------------------------------------------------------+------+--------+------+
| 1 | 2022-01-08 23:07:51 | smsc01 | 165 | 88017XXXXXXXX | 015XXXXXXXX | kannel | http://localhost//index.php?app=call&cat=gateway&plugin=kannel&access=dlr&type=%d&smslog_id=20&uid=1&smsc=kannel | 15 | 0 | |
+----+---------------------+--------+------+---------------+-------------+---------+------------------------------------------------------------------------------------------------------------------+------+--------+------+
1 row in set (0.000 sec)

MariaDB [kannel]> select * from sent_sms;
+--------+------+-------------+---------------+---------+----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------+------+---------+------+---------+---------+-------+------------------------+----------+------------+
| sql_id | momt | sender | receiver | udhdata | msgdata | time | smsc_id | service | account | id | sms_type | mclass | mwi | coding | compress | validity | deferred | dlr_mask | dlr_url | pid | alt_dcs | rpi | charset | boxc_id | binfo | meta_data | priority | foreign_id |
+--------+------+-------------+---------------+---------+----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------+------+---------+------+---------+---------+-------+------------------------+----------+------------+
| 1 | MT | 015XXXXXXXX | 88017XXXXXXXX | NULL | MySQL+DLR+Test | 1641661668 | smsc01 | kannel | admin | NULL | 2 | NULL | NULL | 0 | NULL | NULL | NULL | 15 | http://localhost//index.php?app=call&cat=gateway&plugin=kannel&access=dlr&type=%d&smslog_id=20&uid=1&smsc=kannel | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| 2 | DLR | 015XXXXXXXX | 88017XXXXXXXX | NULL | ACK%2F | 1641661671 | smsc01 | kannel | NULL | NULL | 3 | NULL | NULL | NULL | NULL | NULL | NULL | 8 | http://localhost//index.php?app=call&cat=gateway&plugin=kannel&access=dlr&type=%d&smslog_id=20&uid=1&smsc=kannel | NULL | NULL | NULL | NULL | NULL | NULL | ?orig_msg?dlr_mask=15& | NULL | 165 |
+--------+------+-------------+---------------+---------+----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------+------+---------+------+---------+---------+-------+------------------------+----------+------------+
2 rows in set (0.001 sec)

宛先の携帯電話がSMSを受信し、GSMモデムからSuccessDLRを取得した後

MariaDB [kannel]> select * from dlr;
Empty set (0.000 sec)

MariaDB [kannel]> select * from sent_sms;
+--------+------+-------------+---------------+---------+----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------+------+---------+------+---------+---------+-------+------------------------+----------+------------+
| sql_id | momt | sender | receiver | udhdata | msgdata | time | smsc_id | service | account | id | sms_type | mclass | mwi | coding | compress | validity | deferred | dlr_mask | dlr_url | pid | alt_dcs | rpi | charset | boxc_id | binfo | meta_data | priority | foreign_id |
+--------+------+-------------+---------------+---------+----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------+------+---------+------+---------+---------+-------+------------------------+----------+------------+
| 1 | MT | 015XXXXXXXX | 88017XXXXXXXX | NULL | MySQL+DLR+Test | 1641661668 | smsc01 | kannel | admin | NULL | 2 | NULL | NULL | 0 | NULL | NULL | NULL | 15 | http://localhost//index.php?app=call&cat=gateway&plugin=kannel&access=dlr&type=%d&smslog_id=20&uid=1&smsc=kannel | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| 2 | DLR | 015XXXXXXXX | 88017XXXXXXXX | NULL | ACK%2F | 1641661671 | smsc01 | kannel | NULL | NULL | 3 | NULL | NULL | NULL | NULL | NULL | NULL | 8 | http://localhost//index.php?app=call&cat=gateway&plugin=kannel&access=dlr&type=%d&smslog_id=20&uid=1&smsc=kannel | NULL | NULL | NULL | NULL | NULL | NULL | ?orig_msg?dlr_mask=15& | NULL | 165 |
| 3 | DLR | 015XXXXXXXX | 88017XXXXXXXX | NULL | Success | 1641661727 | smsc01 | kannel | NULL | NULL | 3 | NULL | NULL | NULL | NULL | NULL | NULL | 1 | http://localhost//index.php?app=call&cat=gateway&plugin=kannel&access=dlr&type=%d&smslog_id=20&uid=1&smsc=kannel | NULL | NULL | NULL | NULL | NULL | NULL | ?orig_msg?dlr_mask=15& | NULL | 165 |
+--------+------+-------------+---------------+---------+----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------+------+---------+------+---------+---------+-------+------------------------+----------+------------+
3 rows in set (0.000 sec)

受信SMS:

MariaDB [kannel]> select * from sent_sms where momt='MO';
+--------+------+----------------+-------------+---------+-----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+---------+------+---------+------+---------+---------+-------+-----------+----------+------------+
| sql_id | momt | sender | receiver | udhdata | msgdata | time | smsc_id | service | account | id | sms_type | mclass | mwi | coding | compress | validity | deferred | dlr_mask | dlr_url | pid | alt_dcs | rpi | charset | boxc_id | binfo | meta_data | priority | foreign_id |
+--------+------+----------------+-------------+---------+-----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+---------+------+---------+------+---------+---------+-------+-----------+----------+------------+
| 4 | MO | +88017XXXXXXXX | 015XXXXXXXX | NULL | SQLBOX+incoming | 1641663435 | smsc01 | NULL | NULL | NULL | 0 | NULL | NULL | 0 | 0 | NULL | NULL | NULL | NULL | 0 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
+--------+------+----------------+-------------+---------+-----------------+------------+---------+---------+---------+------+----------+--------+------+--------+----------+----------+----------+----------+---------+------+---------+------+---------+---------+-------+-----------+----------+------------+
1 row in set (0.000 sec)

SMSBOXログ:

PlaySMSポータルの送信ログ:

受信者の電話から:

参照

  • https://www.kannel.org/download/kannel-userguide-snapshot/userguide.html

Linux
  1. LinuxにMariaDBまたはMySQLをインストールする

  2. Ubuntu 16.04/18.04でのMySQL/MariaDBルートパスワードのリセット

  3. SHOW PROCESSLISTの出力をMySQLのファイルに保存するにはどうすればよいですか?

  1. MySQLとMariaDB:それらの主な違いは何ですか

  2. MySQL/MariaDBクエリログを有効にする方法

  3. MYSQL MariaDB でエクスポート データベースをインポートする方法

  1. MySQLまたはMariaDBのルートパスワードをリセットする方法

  2. 新しいデータベースを作成し、MySQL/MariaDBで使用します

  3. CentOS6.4にMariaDBをインストールします