Ubuntu 18.04 LTS安装FreeSWITCH 1.8

FreeSWITCH 是一个免费的开源电信软件栈。它支持所有主要的操作系统,如Linux、Windows、macOS和freeBSD。在这篇文章中,我们将看到如何在Ubuntu 18.04 LTS上从源代码安装Freeswitch 1.8,代码命名为Bionic Beaver。

扩展

在Debian 9 Stretch上安装FreeSWITCH

在CentOS 7上安装FreeSWITCH

FreeSWICHI参考连接 FreeSWITCH Archive

从源代码安装

1. 获取更新程序包的列表

sudo apt update -y

2. 安装依赖环境

sudo apt install -y git subversion build-essential autoconf automake libtool libncurses5 libncurses5-dev make libjpeg-dev libtool libtool-bin libsqlite3-dev libpcre3-dev libspeexdsp-dev libldns-dev libedit-dev yasm liblua5.2-dev libopus-dev cmake

3. 安装一些可选的软件包

sudo apt install -y libcurl4-openssl-dev libexpat1-dev libgnutls28-dev libtiff5-dev libx11-dev unixodbc-dev libssl-dev python-dev zlib1g-dev libasound2-dev libogg-dev libvorbis-dev libperl-dev libgdbm-dev libdb-dev uuid-dev libsndfile1-dev

4. 安装 signalwire 发布包. 首先安装 libks.

sudo apt install cmake
cd /usr/src
sudo git clone https://github.com/signalwire/libks.git
cd libks
sudo cmake .
sudo make
sudo make install

5. 然后安装 signalwire-c

cd /usr/src
sudo git clone https://github.com/signalwire/signalwire-c.git
cd signalwire-c
sudo cmake .
sudo make
sudo make install

6. 现在拉取FreeSWITCH源码. 使用 -b 标识获取特定版本分支

⭐Github有可能被墙导致无法下载代码,需要更改服务器的host文件,Ubuntu下/etc/hosts 添加例如15.164.81.167 github.com

cd /usr/src
sudo git clone https://github.com/signalwire/freeswitch.git -bv1.8 freeswitch
cd freeswitch

7. 由于我们在一个将经历许多变基的分支,为了避免冲突,需要更好地配置变基设置

sudo git config pull.rebase true

8. 启动脚本

sudo ./bootstrap.sh -j

9. 默认情况下,仅启用少数模块。 您可以在此阶段启用/禁用这些模块。 编辑“modules.conf”并根据要求进行更改。 请记住启用新模块可能需要额外的依赖项。

10. 现在运行标准安装过程

sudo ./configure -C
sudo make
sudo make install

11. 编译声音模块

sudo make all cd-sounds-install cd-moh-install

12. 创建链接以轻松使用服务.

sudo ln -s /usr/local/freeswitch/bin/freeswitch /usr/bin/
sudo ln -s /usr/local/freeswitch/bin/fs_cli /usr/bin

13. 添加新的组和具有较少权限的用户来运行 FreeSWITCH 服务。

cd /usr/local
sudo groupadd freeswitch
sudo adduser --disabled-password  --quiet --system --home /usr/local/freeswitch --gecos "FreeSWITCH Voice Platform" --ingroup freeswitch freeswitch
sudo chown -R freeswitch:freeswitch /usr/local/freeswitch/
sudo chmod -R ug=rwX,o= /usr/local/freeswitch/
sudo chmod -R u=rwx,g=rx /usr/local/freeswitch/bin/

14.现在让我们添加 systemd 单元文件。 Systemd 是 Ubuntu 18.04 的默认初始化系统。 使用您喜欢的编辑器打开新文件“/etc/systemd/system/freeswitch.service”,然后将以下内容复制到其中。

[Unit]
Description=freeswitch
Wants=network-online.target
Requires=syslog.socket network.target local-fs.target
After=syslog.socket network.target network-online.target local-fs.target

[Service]
Type=forking
Environment="DAEMON_OPTS=-nonat"
EnvironmentFile=-/etc/default/freeswitch
ExecStartPre=/bin/chown -R freeswitch:freeswitch /usr/local/freeswitch
ExecStart=/usr/bin/freeswitch -u freeswitch -g freeswitch -ncwait $DAEMON_OPTS
TimeoutSec=45s
Restart=always

User=root
Group=daemon
LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=60000
LimitSTACK=250000
LimitRTPRIO=infinity
LimitRTTIME=infinity
IOSchedulingClass=realtime
IOSchedulingPriority=2
CPUSchedulingPolicy=rr
CPUSchedulingPriority=89
UMask=0007
NoNewPrivileges=false

[Install]
WantedBy=multi-user.target

15. 现在启动服务并设置开机启动。

sudo chmod ugo+x freeswitch.service
sudo systemctl start freeswitch.service
sudo systemctl enable freeswitch.service
  1. 查看FreeSWITCH是否启动成功
sudo systemctl status freeswitch.service
Status should be ‘active’ something like below
● freeswitch.service – freeswitch
Loaded: loaded (/lib/systemd/system/freeswitch.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-05-27 10:55:15 UTC; 7min ago

----------------------------------------FreeSwitch安装完毕-----------------------------------------------

17. 现在您可以使用客户端连接到 FreeSWITCH,如下所示
fs_cli -r

备注

在编译期间,如果遇到未知依赖项(特别是spansdsp)等错误,请在再次开始编译之前运行以下命令。

git clean -fdx



Hope you like this article. Let us know feedback in comments.

DEVOPSFREESWITCHUBUNTU

Post navigation

⟵How to Install FreeSWITCH 1.8 on Debian 9 Stretch

How to Install FreeSWITCH 1.6 on Debian 8 Jessie⟶

Leave a Reply

You must be logged in to post a comment.


修改FreeSwitch配置

配置简介

FreeSWITCH配置文件默认放在 conf/, 它由一系列XML配置文件组成。最顶层的文件是freeswitch.xml,系统启动时它依次装入其它一些XML文件并最终组成一个大的XML文件。

文件 | 说明
----------------------------------------------------------
vars.xml | 一些常用变量
dialplan/default.xml | 缺省的拨号计划
directory/default/*.xml | SIP用户,每用户一个文件
sip_profiles/internal.xml | 一个SIP profile,或称作一个SIP-UA,监听在本地IP及端口5060,一般供内网用户使用
sip_profiles/externa.xml | 另一个SIP-UA,用作外部连接,端口5080
autoload_configs/modules.conf.xml | 配置当FreeSWITCH启动时自动装载哪些模块

必须配置

cd /usr/local/freeswitch/conf/sip_profiles
root@beiyang2:/usr/local/freeswitch/conf/sip_profiles# ls
external  external-ipv6  external-ipv6.xml  external.xml  internal-ipv6.xml  internal.xml
root@beiyang2:/usr/local/freeswitch/conf/sip_profiles# vim internal.xml 
---------------------------------------------------
	<param name="watchdog-enabled" value="no"/>
    <param name="watchdog-step-timeout" value="30000"/>
    <param name="watchdog-event-timeout" value="30000"/>

    <param name="log-auth-failures" value="false"/>
    <param name="forward-unsolicited-mwi-notify" value="false"/>

    <param name="context" value="public"/>
    <param name="rfc2833-pt" value="101"/>
    <!-- port to bind to for sip traffic -->
    <param name="sip-port" value="$${internal_sip_port}"/>
    <param name="dialplan" value="XML"/>
    <param name="dtmf-duration" value="2000"/>
    <param name="inbound-codec-prefs" value="$${global_codec_prefs}"/>
    <param name="outbound-codec-prefs" value="$${global_codec_prefs}"/>
    <param name="rtp-timer-name" value="soft"/>
    <!-- ip address to use for rtp, DO NOT USE HOSTNAMES ONLY IP ADDRESSES -->
    <param name="rtp-ip" value="192.168.1.121"/> 
    <!-- ip address to bind to, DO NOT USE HOSTNAMES ONLY IP ADDRESSES -->
    <param name="sip-ip" value="192.168.1.121"/>
    <param name="hold-music" value="$${hold_music}"/>
    <param name="apply-nat-acl" value="nat.auto"/>
 -----------------------------------------------------------   
    
    修改为服务器的IP:
    <!-- ip address to use for rtp, DO NOT USE HOSTNAMES ONLY IP ADDRESSES -->
    <param name="rtp-ip" value="192.168.1.121"/> 
    <!-- ip address to bind to, DO NOT USE HOSTNAMES ONLY IP ADDRESSES -->
    <param name="sip-ip" value="192.168.1.121"/>

修改配置后需要重新启动服务器

sudo systemctl stop freeswitch.service
sudo systemctl start freeswitch.service

多网卡服务器绑定IP

关于如何指定FreeSWITCH使用多网卡服务器上的某一个IP地址,FS官网给了新的方法,如下:

设置方法:

1、修改文件internal.xml和external.xml

位置:/usr/local/freeswitch/conf/sip_profiles/internal.xml

修改内容:

<param name="rtp-ip" value="192.168.1.121"/>
<param name="sip-ip" value="192.168.1.121"/>

注:192.168.1.121为指定的IP地址

2、修改文件sofia.conf.xml

位置:/usr/local/freeswitch/conf/autoload_configs/sofia.conf.xml

修改内容:

<param name="auto-restart" value="false"/>

该属性设置的目的是防止FS在检测到IP地址发生改变后,自动重启sofia模块。

3、重启FreeSWITCH,开始测试。


添加一个新的SIP用户

FreeSWITCH默认设置了20个用户(1000-1019),如果你需要更多的用户,或者想通过添加一个用户来学习FreeSWITCH配置,只需要简单执行以下三步:

  • /usr/local/freeswitch/conf/directory/default/ 增加一个用户配置文件
  • 修改拨号计划(Dialplan)使其它用户可以呼叫到它
  • 重新加载配置使其生效

如果想添加用户Jack,分机号是1234。只需要到 /usr/local/freeswitch/conf/directory/default/ 目录下,将 1000.xml 拷贝到 1234.xml。打开1234.xml,将所有1000都改为1234。并把 effective_caller_id_name 的值改为 Jack,然后存盘退出。

接下来,打开 /usr/local/freeswitch/conf/default.xml,找到 一行,改为。熟悉正则表达式的人应该知道,“^(10[01][0-9])$”匹配被叫号码1000-1019。因此我们修改之后的表达式就多匹配了一个1234。FreeSWITCH使用Perl兼容的正则表达式(PCRE)。

<!--
         dial the extension (1000-1019) for 30 seconds and go to voicemail if the
         call fails (continue_on_fail=true), otherwise hang up after a successful
         bridge (hangup_after_bridge=true)
    -->
    <extension name="Local_Extension">
      <condition field="destination_number" expression="^(10[01][0-9])$"> <!--修改这里 expression="^(1[0-9][0-9][0-9])$" 支持1000-1999-->
        <action application="export" data="dialed_extension=$1"/>
        <!-- bind_meta_app can have these args <key> [a|b|ab] [a|b|o|s] <app> -->
        <action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/>
        <action application="bind_meta_app" data="2 b s record_session::$${recordings_dir}/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
        <action application="bind_meta_app" data="3 b s execute_extension::cf XML features"/>
        <action application="bind_meta_app" data="4 b s execute_extension::att_xfer XML features"/>
        <action application="set" data="ringback=${us-ring}"/>
        <action application="set" data="transfer_ringback=$${hold_music}"/>
<!-- <action application="set" data="sip_exclude_contact=${network_addr}"/> -->
        <action application="set" data="hangup_after_bridge=true"/>
        <!--<action application="set" data="continue_on_fail=NORMAL_TEMPORARY_FAILURE,USER_BUSY,NO_ANSWER,TIMEOUT,NO_ROUTE_DESTINATION"/> -->
        <action application="set" data="continue_on_fail=true"/>
        <action application="hash" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/>
        <action application="hash" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/>
        <action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/>
        <action application="hash" data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/>
        <action application="hash" data="insert/${domain_name}-last_dial_ext/global/${uuid}"/>
        <!--<action application="export" data="nolocal:rtp_secure_media=${user_data(${dialed_extension}@${domain_name} var rtp_secure_media)}"/>-->
        <action application="hash" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/>
        <action application="bridge" data="user/${dialed_extension}@${domain_name}"/>
        <action application="answer"/>
        <action application="sleep" data="1000"/>
        <action application="bridge" data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/>
      </condition>
    </extension>

现在,回到FS-Con,或启动fs_cli,执行 reloadxml 命令或按快捷键F6,使新的配置生效。


服务器调优

缩短FreeSWITCH进线等待时长

安装完FreeSWITCH,拨打内建用户时,会比较慢才能通,是使用默认密码时,有10秒的延时等待,修改密码或取消等待即可;

修改方法如下:

进入目录:/usr/local/freeswitch/conf/dialplan目录,修改default.xml里截图里的属性()。

原值是10000毫秒(也就是10秒),我这里改成了1000毫秒

<condition field="${call_debug}" expression="^true$" break="never">
        <action application="info"/>
      </condition>

      <condition field="${default_password}" expression="^1234$" break="never">
        <action application="log" data="CRIT WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING "/>
        <action application="log" data="CRIT Open $${conf_dir}/vars.xml and change the default_password."/>
        <action application="log" data="CRIT Once changed type 'reloadxml' at the console."/>
        <action application="log" data="CRIT WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING "/>
        <action application="sleep" data="1000"/>
      </condition>

修改后,执行fs_cli -r进入控制台后,执行reloadxml命令,重新加载dialplan。

如何修改默认密码

修改/usr/local/freeswitch/conf/vars.xml中以下内容:

<X-PRE-PROCESS cmd="set" data="default_password=1234"/>

修改完毕,依然需要reloadxml;

eysBeam配置

以管理员身份打开eyeBeam软件。

  1. 在“SIP账号设定”中设置相关参数。
  2. 任意选择一个号码,例如我选择的是1,在启用中打勾。点击属性,设置参数。
    账号 -> 用户情况:
  • 显示名:1000
  • 用户名:1000
  • 口令:1234 默认密码是1234
  • 鉴权用户名:1000
  • 域名:192.168.2.10 几个设置都是一致的。
    在网络拓补中:
  • IP地址选择:使用本地地址。
  • STUN服务器:自动获取服务器。
  1. 保存设置,退出。

ubuntu把freeswitch的sqlite换为mysql ubuntu freeswitch_FreeSwitch