Kamailio(前身为OpenSER)是一个开源的SIP服务器项目,基于GPL授权。它以处理性能见长,每秒钟能处理上千个并发呼叫。其官方主页为http://www.kamailio.org。本文描述Kamailio的安装配置过程。安装环境为CentOS7,kamailio版本V5.2.2。

 

安装MariaDB服务器

Kamailio服务器安装前,必须先确保系统上已经安装MySQL或 MariaDB

# yum install mariadb-server mariadb mariadb-devel

# systemctl start mariadb

获取kamailio源码

源码可以从GIT上克隆,或者下载发布的tar包。这里我们选择下载tar包。执行以下命令:

# cd /usr/local

# wget https://www.kamailio.org/pub/kamailio/5.2.2/src/kamailio-5.2.2_src.tar.gz

# tar vzxf kamailio-5.2.2_src.tar.gz

调优Makefile

首先生成编译相关的配置文件:

# cd kamailio-5.2.2/

# make cfg

接下来启用MySQL 模块。编辑 modules.lst文件:

# vim src/modules.lst

在变量include_modules下添加 db_mysqldialplan。

include_modules= db_mysql dialplan

存盘退出编辑。

说明:这是一种机制,用于配置编译一些扩展模块(这些模块缺省是不编译的),比如lcr、dialplan、presence。如果不习惯编辑配置文件,可以用下面命令生成配置:

# make include_modules="db_mysql dialplan" cfg

注意: 如果你希望变更缺省安装目录,可以在make cfg命令中指定 PREFIX变量来设置安装路径:

# make PREFIX="/usr/local/kamailio" include_modules="db_mysql dialplan" cfg

更多编译参数信息请参考以下链接:

编译Kamailio

 # make all

安装Kamailio:

# make install

按配置,二进制文件和脚本将被安装在以下目录中:

/usr/local/kamailio/sbin

主要可执行文件说明:

  • kamailio - Kamailio SIP 服务器的执行文件
  • kamdbctl – 用于创建管理数据库的脚本
  • kamctl – 用于控制管理Kamailio SIP 服务器的脚本
  • kamcmd – CLI命令行工具,是Kamailio SIP服务器提供的接口

要从命令行直接执行相应的二进制文件,请确保/usr/local/kamailio/sbin路径被设置在环境变量中。你可能通过命令echo $PATH检查一下。如果没有,可以使用bash,编辑/root/.bash_profile文件,添加以下两行:

  PATH=$PATH:/usr/local/kamailio/sbin

  export PATH

Kamailio 模块文件被安装在以下目录中:

/usr/local/kamailio/lib64/kamailio/modules/

相关文档和readme文件被安装在:

/usr/local/kamailio/share/doc/kamailio/

帮助手册被安装在:

/usr/local/kamailio/share/man/man5/

/usr/local/kamailio/share/man/man8/

配置文件的安装位置是:

/usr/local/kamailio/etc/kamailio/kamailio.cfg

创建MySQL数据库

要创建MySQL 数据库,就要用到数据库脚本。首先,编辑kamctlrc 文件配置数据库服务类型:

# vim /usr/local/kamailio/etc/kamailio/kamctlrc

找到 DBENGINE 变量,并把它的值设为:MYSQL:

DBENGINE=MYSQL

你可以修改kamctlrc 文件中的其他变量值,建议至少要修改用户连接创建数据库的缺省密码。

编辑好kamctlrc 文件之后,执行Kamailio提供的脚本创建数据库:

/usr/local/kamailio/sbin/kamdbctl create

你可以不加任何参数执行这个脚本,这时会得到脚本用法相关的一些帮助信息。创建过程中,创建过程中可能会要求你输入一些信息,比如Kamailio服务运行的域名,MySQL的root 用户密码待,还会有一些交互选择需要创建哪些表,我们把所有表都创建好。脚本将建立一个名为kamailio 的数据库,库中包含了运行Kamailio服务所需要的表。你可以随意修改kamctlrc文件中的缺省值。
     这个脚本会在MySQL中添加两个用户:

  • kamailio - (缺省密码 kamailiorw) – 拥有kamailio 数据库所有权限的用户
  • kamailioro - (缺省密码 kamailioro) - user which has read-only access rights to kamailio database

重要提醒: 务必修改这两个用户的密码!!!

编辑配置文件

为了适应你的VoIP平台的具体需求,你必须编辑配置文件。

  /usr/local/kamailio/etc/kamailio/kamailio.cfg

按照注释中的说明启用MySQL。基本上你必须在配置文件的顶部添加几行代码:

添加位置必须在####### Defined Values #########这一行之前。

#!define WITH_MYSQL

#!define WITH_AUTH

#!define WITH_USRLOCDB

如果kamailio 使用的MySQL用户的密码被修改,那么你必须更新 db_url参数中的对应值。

你可以在线参考kamailio.cfg 

启动脚本

init.d脚本用于控制Kamailio服务器的开机起停。

源码目录下的子目录有脚本实例:

pkg/kamailio/obs/kamailio.init

把脚本拷贝为/etc/init.d/kamailio,然后设置相应权限:

# chmod 755 /etc/init.d/kamailio

然后,编辑脚本文件,变更$KAM 和$KAMCFG 的值,设置RUN_KAMAILIO=yes:

  KAM =/usr/local/kamailio/sbin/kamailio

  KAMCFG =/usr/local/kamailio/etc/kamailio/kamailio.cfg

现在,可以通过以下命令来起停Kamailio服务了:

  /etc/init.d/kamailio start

  /etc/init.d/kamailio stop

Service脚本,在源码包里的pkg/kamailio/obs/目录下有一个名为kamailio.service的模板,把它拷贝到/usr/lib/systemd/system/

# cp kamailio.service  /usr/lib/systemd/system/

拷贝后,编辑文件,修改Environment变量CFGFILE和ExecStart的值,让它指向我们的安装目录:

Environment='CFGFILE=/usr/local/kamailio/etc/kamailio/kamailio.cfg'

ExecStart=/usr/local/kamailio/sbin/kamailio -DD -P /var/run/kamailio/kamailio.pid -f $CFGFILE -m $SHM_MEMORY -M $PKG_MEMORY

缺省设置条件下,运行Kamailio服务器的用户和组名字都是kamailio。因此,我们需要创建相应的Linux帐户:

# mkdir -p /var/run/kamailio
# groupadd kamailio
# adduser --system -g kamailio --shell /bin/false \
            --home /var/run/kamailio kamailio
 
# 将所有权限设置为/var/run/kamailio
# chown kamailio:kamailio /var/run/kamailio

现在,可以通过systemctl命令起停服务了,试一下:

# systemctl start kamailio
# systemctl stop kamailio

帐号测试

现在,万事俱备,只欠东风。你可以启动服务。但还需要分配帐号并设置话机终端。

可以通过kamctl 工具添加新帐号:

# kamctl add username password email

其中的email选项是可选的

# kamctl add test testpasswd test@mysipserver.com