深度实战Ubuntu 20.04源码编译Asterisk 18全流程与疑难攻克在开源通信领域Asterisk始终占据着不可替代的地位。作为一款功能强大的PBX系统它支持VoIP、会议桥接、呼叫路由等丰富功能。对于追求性能优化或需要深度定制的开发者而言从源码手动编译安装Asterisk是必经之路。本文将聚焦Ubuntu 20.04环境下Asterisk 18的源码编译全过程特别针对pjproject和jansson等关键依赖的配置难题提供经过验证的解决方案。1. 环境准备与依赖管理编译Asterisk前的系统准备工作至关重要。Ubuntu 20.04虽然提供了稳定的基础环境但仍需特别注意以下几点基础依赖安装sudo apt update sudo apt upgrade -y sudo apt install -y build-essential libncurses5-dev libssl-dev \ libxml2-dev libsqlite3-dev uuid-dev libjansson-dev \ libedit-dev libxslt1-dev libcurl4-openssl-dev \ libgsm1-dev libspeex-dev libspeexdsp-dev \ libopus-dev libvorbis-dev libnewt-dev注意上述依赖包中已包含jansson的开发库但后续仍需从源码编译特定版本以满足Asterisk的要求。Ubuntu仓库中的版本可能与Asterisk所需不兼容。源码下载与验证wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz.sha256 sha256sum -c asterisk-18-current.tar.gz.sha256若校验失败可能是下载过程中出现错误应重新获取文件。解压源码包tar xvf asterisk-18-current.tar.gz cd asterisk-18.*2. 第三方依赖的深度配置2.1 pjproject的定制化编译pjproject作为SIP协议栈的实现其编译过程常因网络问题和版本不匹配导致失败。以下是经过验证的配置方法修改Makefile.rules 进入third-party/pjproject目录编辑Makefile.rulesPACKAGE_URL https://codeload.github.com/pjsip/pjproject/tar.gz/refs/tags/2.13.1 TARBALL_FILE pjproject-$(PJPROJECT_VERSION).tar.gz调整解压方式 同一目录下修改Makefile找到解压命令部分约111行$(TAR) -xjf $(TARBALL_FILE) 改为 → $(TAR) -xvf $(TARBALL_FILE)URL结构修正 返回third-party目录编辑Makefile.rulesTARBALL_URL $(PACKAGE_URL)/$(TARBALL_FILE) 改为 → TARBALL_URL $(PACKAGE_URL)手动下载校验文件 由于网络原因自动下载校验文件可能失败。建议手动操作wget https://github.com/pjsip/pjproject/archive/refs/tags/2.13.1.tar.gz -O pjproject-2.13.1.tar.gz wget https://raw.githubusercontent.com/pjsip/pjproject/2.13.1/version.mak -O pjproject-2.13.1.tar.gz.md5 mv pjproject-2.13.1.tar.gz.md5 third-party/pjproject/2.2 jansson的特定版本配置Asterisk对jansson版本有严格要求Ubuntu仓库中的版本可能不兼容。配置步骤如下修改jansson的Makefile.rulesPACKAGE_URL https://fossies.org/linux/www/jansson-2.14.tar.bz2手动下载源码包可选 如果自动下载失败可手动操作wget https://fossies.org/linux/www/jansson-2.14.tar.bz2 -O third-party/jansson/jansson-2.14.tar.bz23. Asterisk核心编译与优化完成依赖配置后进入Asterisk的主体编译阶段MP3支持准备sudo contrib/scripts/get_mp3_source.sh依赖检查与安装sudo contrib/scripts/install_prereq install配置阶段./configure常见问题若出现configure: error: *** Please install the editline development package错误需安装sudo apt install libedit-dev模块选择与编译make menuselect在界面中确保选中以下关键模块format_mp3MP3支持chan_sip传统SIP通道res_pjsipPJSIP模块并行编译加速make -j$(nproc)安装与初始化sudo make install sudo make samples sudo make config4. 系统集成与服务配置4.1 服务管理优化创建systemd服务文件/etc/systemd/system/asterisk.service[Unit] DescriptionAsterisk PBX Afternetwork.target [Service] Typesimple Userasterisk Groupasterisk ExecStart/usr/sbin/asterisk -f -vvvg -c ExecStop/usr/sbin/asterisk -rx core stop now Restartalways [Install] WantedBymulti-user.target创建专用用户并设置权限sudo adduser --system --group --home /var/lib/asterisk --no-create-home asterisk sudo chown -R asterisk:asterisk /var/lib/asterisk /var/spool/asterisk /var/log/asterisk /var/run/asterisk4.2 网络与安全配置防火墙规则sudo ufw allow 5060/udp sudo ufw allow 5060/tcp sudo ufw allow 10000:20000/udpSIP基础配置/etc/asterisk/sip.conf[general] contextdefault bindport5060 tcpbindaddr0.0.0.0 tcpenableyes videosupportyes [1001] typefriend username1001 secret1001 hostdynamic contextdefault dtmfmoderfc2833 canreinviteno disallowall allowulaw allowalaw拨号计划配置/etc/asterisk/extensions.conf[default] exten 1001,1,Answer() exten 1001,n,Dial(SIP/1001,20) exten 1001,n,Hangup()5. 高级调试与性能优化5.1 日志与调试技巧详细日志配置/etc/asterisk/logger.conf[general] dateformat%F %T appendhostnameyes [logfiles] console notice,warning,error,debug messages notice,warning,error full notice,warning,error,debug,verbose实时调试命令asterisk -rvvv # 控制台内命令 sip set debug on pjsip set logger on core set verbose 55.2 性能调优参数系统限制调整/etc/security/limits.confasterisk soft nofile 65535 asterisk hard nofile 65535 asterisk soft nproc 65535 asterisk hard nproc 65535Asterisk内存管理/etc/asterisk/asterisk.conf[options] execincludesyes highpriorityyes cache_record_filesyes6. 常见问题解决方案库依赖下载失败现象Error downloading...解决手动下载对应文件到third-party/对应目录然后重新执行makepjproject编译错误现象undefined reference to pj_str解决确保完全清理后重新编译make distclean ./configure make模块加载失败现象Module chan_sip.so did not register解决检查modules.conf配置noload res_pjsip.so load chan_sip.so音频问题现象单通或无声解决检查NAT设置[general] externip你的公网IP localnet192.168.0.0/255.255.0.0 natyes经过上述步骤的系统部署后不仅能够获得一个稳定运行的Asterisk环境更重要的是掌握了从源码构建到深度定制的完整技术栈。在实际生产环境中建议定期检查Asterisk的安全公告并及时更新到稳定版本。
保姆级教程:在Ubuntu 20.04上手动编译Asterisk 18,解决pjproject和jansson依赖问题
深度实战Ubuntu 20.04源码编译Asterisk 18全流程与疑难攻克在开源通信领域Asterisk始终占据着不可替代的地位。作为一款功能强大的PBX系统它支持VoIP、会议桥接、呼叫路由等丰富功能。对于追求性能优化或需要深度定制的开发者而言从源码手动编译安装Asterisk是必经之路。本文将聚焦Ubuntu 20.04环境下Asterisk 18的源码编译全过程特别针对pjproject和jansson等关键依赖的配置难题提供经过验证的解决方案。1. 环境准备与依赖管理编译Asterisk前的系统准备工作至关重要。Ubuntu 20.04虽然提供了稳定的基础环境但仍需特别注意以下几点基础依赖安装sudo apt update sudo apt upgrade -y sudo apt install -y build-essential libncurses5-dev libssl-dev \ libxml2-dev libsqlite3-dev uuid-dev libjansson-dev \ libedit-dev libxslt1-dev libcurl4-openssl-dev \ libgsm1-dev libspeex-dev libspeexdsp-dev \ libopus-dev libvorbis-dev libnewt-dev注意上述依赖包中已包含jansson的开发库但后续仍需从源码编译特定版本以满足Asterisk的要求。Ubuntu仓库中的版本可能与Asterisk所需不兼容。源码下载与验证wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz.sha256 sha256sum -c asterisk-18-current.tar.gz.sha256若校验失败可能是下载过程中出现错误应重新获取文件。解压源码包tar xvf asterisk-18-current.tar.gz cd asterisk-18.*2. 第三方依赖的深度配置2.1 pjproject的定制化编译pjproject作为SIP协议栈的实现其编译过程常因网络问题和版本不匹配导致失败。以下是经过验证的配置方法修改Makefile.rules 进入third-party/pjproject目录编辑Makefile.rulesPACKAGE_URL https://codeload.github.com/pjsip/pjproject/tar.gz/refs/tags/2.13.1 TARBALL_FILE pjproject-$(PJPROJECT_VERSION).tar.gz调整解压方式 同一目录下修改Makefile找到解压命令部分约111行$(TAR) -xjf $(TARBALL_FILE) 改为 → $(TAR) -xvf $(TARBALL_FILE)URL结构修正 返回third-party目录编辑Makefile.rulesTARBALL_URL $(PACKAGE_URL)/$(TARBALL_FILE) 改为 → TARBALL_URL $(PACKAGE_URL)手动下载校验文件 由于网络原因自动下载校验文件可能失败。建议手动操作wget https://github.com/pjsip/pjproject/archive/refs/tags/2.13.1.tar.gz -O pjproject-2.13.1.tar.gz wget https://raw.githubusercontent.com/pjsip/pjproject/2.13.1/version.mak -O pjproject-2.13.1.tar.gz.md5 mv pjproject-2.13.1.tar.gz.md5 third-party/pjproject/2.2 jansson的特定版本配置Asterisk对jansson版本有严格要求Ubuntu仓库中的版本可能不兼容。配置步骤如下修改jansson的Makefile.rulesPACKAGE_URL https://fossies.org/linux/www/jansson-2.14.tar.bz2手动下载源码包可选 如果自动下载失败可手动操作wget https://fossies.org/linux/www/jansson-2.14.tar.bz2 -O third-party/jansson/jansson-2.14.tar.bz23. Asterisk核心编译与优化完成依赖配置后进入Asterisk的主体编译阶段MP3支持准备sudo contrib/scripts/get_mp3_source.sh依赖检查与安装sudo contrib/scripts/install_prereq install配置阶段./configure常见问题若出现configure: error: *** Please install the editline development package错误需安装sudo apt install libedit-dev模块选择与编译make menuselect在界面中确保选中以下关键模块format_mp3MP3支持chan_sip传统SIP通道res_pjsipPJSIP模块并行编译加速make -j$(nproc)安装与初始化sudo make install sudo make samples sudo make config4. 系统集成与服务配置4.1 服务管理优化创建systemd服务文件/etc/systemd/system/asterisk.service[Unit] DescriptionAsterisk PBX Afternetwork.target [Service] Typesimple Userasterisk Groupasterisk ExecStart/usr/sbin/asterisk -f -vvvg -c ExecStop/usr/sbin/asterisk -rx core stop now Restartalways [Install] WantedBymulti-user.target创建专用用户并设置权限sudo adduser --system --group --home /var/lib/asterisk --no-create-home asterisk sudo chown -R asterisk:asterisk /var/lib/asterisk /var/spool/asterisk /var/log/asterisk /var/run/asterisk4.2 网络与安全配置防火墙规则sudo ufw allow 5060/udp sudo ufw allow 5060/tcp sudo ufw allow 10000:20000/udpSIP基础配置/etc/asterisk/sip.conf[general] contextdefault bindport5060 tcpbindaddr0.0.0.0 tcpenableyes videosupportyes [1001] typefriend username1001 secret1001 hostdynamic contextdefault dtmfmoderfc2833 canreinviteno disallowall allowulaw allowalaw拨号计划配置/etc/asterisk/extensions.conf[default] exten 1001,1,Answer() exten 1001,n,Dial(SIP/1001,20) exten 1001,n,Hangup()5. 高级调试与性能优化5.1 日志与调试技巧详细日志配置/etc/asterisk/logger.conf[general] dateformat%F %T appendhostnameyes [logfiles] console notice,warning,error,debug messages notice,warning,error full notice,warning,error,debug,verbose实时调试命令asterisk -rvvv # 控制台内命令 sip set debug on pjsip set logger on core set verbose 55.2 性能调优参数系统限制调整/etc/security/limits.confasterisk soft nofile 65535 asterisk hard nofile 65535 asterisk soft nproc 65535 asterisk hard nproc 65535Asterisk内存管理/etc/asterisk/asterisk.conf[options] execincludesyes highpriorityyes cache_record_filesyes6. 常见问题解决方案库依赖下载失败现象Error downloading...解决手动下载对应文件到third-party/对应目录然后重新执行makepjproject编译错误现象undefined reference to pj_str解决确保完全清理后重新编译make distclean ./configure make模块加载失败现象Module chan_sip.so did not register解决检查modules.conf配置noload res_pjsip.so load chan_sip.so音频问题现象单通或无声解决检查NAT设置[general] externip你的公网IP localnet192.168.0.0/255.255.0.0 natyes经过上述步骤的系统部署后不仅能够获得一个稳定运行的Asterisk环境更重要的是掌握了从源码构建到深度定制的完整技术栈。在实际生产环境中建议定期检查Asterisk的安全公告并及时更新到稳定版本。