在 CentOS 7 上从源安装 Kamailio SIP 代理服务器
欢迎阅读我们有关如何在 CentOS 7 服务器上从源代码安装 Kamailio SIP 代理服务器的指南。我之前写过一篇关于如何从存储库在 CentOS 7 中安装 Kamailio 的教程。文章链接如下:
如何在 CentOS 7 上安装最新的 Kamailio SIP 服务器
使用存储库安装的缺点是您无法始终获得最新版本的 Kamailio SIP 服务器。如果您想在服务器上获取最新版本的 Kamailio,请考虑从源文件构建 Kamailio SIP 服务器。
设置先决条件
- 运行 CentOS 7 服务器
- MariaDB 数据库服务器
确保服务器已更新:
sudo yum -y update
sudo reboot
然后安装 MariaDB 数据库服务器。
sudo yum install mariadb-server
现在启动并启用 MariaDB 数据库服务并使其在启动时运行:
sudo systemctl enable --now mariadb
设置MariaDB登录root密码:
sudo mysql_secure_installation
它会要求您设置 root 密码并禁用远程 root 登录:
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
在 CentOS 7 中从源安装 Kamailio SIP 代理服务器
如果 SELinux 对你没用,你可以考虑将其置于 Permissive 模式:
sudo sed -i 's/(^SELINUX=).*/SELINUX=permissive/' /etc/selinux/config
如果您之前安装过 Kamailio(尤其是从存储库安装过),请彻底清除:
sudo su -
find / -name "kamai*" -print0 | xargs -0 /bin/rm -rf
然后删除旧数据库:
$ mysql -u root -p
MariaDB [(none)]> SHOW DATABASES;
If there's a database called kamailio,drop it:
MariaDB [(none)]> DROP DATABASE kamailio;
MariaDB [(none)]> EXIT
安装以下必需的依赖项:
sudo yum -y install epel-release
sudo yum groupinstall "Development Tools"
sudo yum install bison pcre-devel libpcap-devel flex git libevent json* libunistring-devel webkitgtk3-devel perl librabbitmq mariadb-devel libevent-devel librabbitmq-devel perl-devel mod_perl-devel perl-Encode-devel perl-Qt-devel perl-Glib-devel perl-Tk-devel
从 github 下载最新版本的 Kamailio 并安装。
sudo su -
cd /usr/src/
git clone git://git.sip-router.org/kamailio kamailio
cd kamailio/
安装 Kamailio 时启用默认未编译的模块,这些是我编译的模块:
sudo make include_modules="db_mysql dialplan websocket debugger permissions usrloc dispatcher registrar uuid sdpops presence auth auth_db avp tm presence_mwi outbound sl maxfwd nat xhttp helper kazoo db_text textops siputils uac presence_dialoginfo kex uac_redirect xlog sanity htable rr pv app_perl path ctrl tls ctl mi_fifo dmq dialog avpops textopsx tmx presence_xml" cfg
输出 :
make -C src/ cfg
target architecture <x86_64>, host architecture <x86_64>
make[1]: Entering directory `/usr/src/kamailio/src'
making config...
rm -f modules.lst
make --no-print-directory modules.lst
saving modules list...
make[1]: Leaving directory `/usr/src/kamailio/src'
编译 Kamailio:
sudo make all
安装 Kamailio:
sudo make install
与 kamailio 关联的所有二进制文件和可执行脚本都安装在:
$ ls /usr/local/sbin/kam*
每项的解释:
- kamdbctl – 数据库命令行控制和管理实用程序。
- kamailio – Kamailio SIP 服务器守护程序应用程序。
- kamctl – 用于管理 Kamailio SIP 服务器的命令行实用程序
- kamcmd – 用于调用 Kamailio RPC 函数的 Unix 工具
安装的 Kamailio 模块位于:/usr/local/lib64/kamailio/modules/
$ ls /usr/local/lib64/kamailio/modules/
请参阅我的所有模块的屏幕截图。
打开Kamailio配置文件:
sudo vi /usr/local/etc/kamailio/kamailio.cfg
在 #!KAMAILIO 行之后添加以下行。
#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
#!define WITH_NAT
#!define WITH_PRESENCE
#!define WITH_ACCDB
#!define WITH_VOICEMAIL
#!define WITH_PSTN
在/etc/default/目录中创建默认的kamailio文件。
sudo tee /etc/default/kamailio<<EOF
RUN_KAMAILIO=yes
USER=kamailio
GROUP=kamailio
SHM_MEMORY=64
PKG_MEMORY=8
PIDFILE=/var/run/kamailio/kamailio.pid
CFGFILE=/usr/local/etc/kamailio/kamailio.cfg
#DUMP_CORE=yes
EOF
添加 Kamailio 用户和组:
sudo groupadd -g 5000 kamailio
sudo useradd -u 5000 -g 5000 -d /var/run/kamailio -M -s /bin/false kamailio
创建pid文件目录
sudo mkdir -p /var/run/kamailio
sudo chown kamailio:kamailio -R /var/run/kamailio
创建 Kamailio Systemd 文件以启动和停止 kamailio 服务。
sudo tee /etc/systemd/system/kamailio.service<<EOF
[Unit]
Description=Kamailio SIP Proxy Server
After=syslog.target network.target mariadb.service
[Service]
Type=forking
EnvironmentFile=-/etc/default/kamailio
PIDFile=\$PIDFILE
# ExecStart requires a full absolute path
ExecStart=/usr/local/sbin/kamailio -P \$PIDFILE -f \$CFGFILE -m \$SHM_MEMORY -M \$PKG_MEMORY -u \$USER -g \$GROUP
ExecStopPost=/bin/rm -f $PIDFILE
Restart=on-abort
[Install]
WantedBy=multi-user.target
EOF
编辑文件kamctlrc以设置数据库引擎
$ sudo vi /usr/local/etc/kamailio/kamctlrc
DBENGINE=MYSQL
创建kamailio使用的数据库:
sudo /usr/local/sbin/kamdbctl create
您已完成 Kamailio SIP 代理服务的安装。通过以下方式开始:
sudo systemctl daemon-reload
sudo systemctl start kamailio
sudo systemctl enable kamailio
确认服务状态:
$ sudo systemctl status kamailio
● kamailio.service - Kamailio SIP Proxy Server
Loaded: loaded (/etc/systemd/system/kamailio.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2020-05-03 16:31:49 UTC; 10s ago
Process: 18887 ExecStopPost=/bin/rm -f (code=exited, status=0/SUCCESS)
Process: 18907 ExecStart=/usr/local/sbin/kamailio -P $PIDFILE -f $CFGFILE -m $SHM_MEMORY -M $PKG_MEMORY -u $USER -g $GROUP (code=exited, status=0/SUCCESS)
Main PID: 18909 (kamailio)
CGroup: /system.slice/kamailio.service
├─18909 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
├─18913 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
├─18914 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
├─18915 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
├─18916 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
├─18917 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
├─18918 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
├─18919 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
├─18920 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
├─18921 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
├─18922 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
├─18923 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
├─18924 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
├─18925 /usr/local/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /usr/local/etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamai...
....
如果你想使用
如何在 CentOS 7.x 中从源安装 RTPProxy