Ubuntu18.04安裝opensips一次過,實現sip語音視訊通話

face小鱼發表於2024-04-13

安裝方式

  • apt命令安裝,不建議使用此方式
    想要在ubuntu18.04(建議使用18.04,不出錯)上透過apt命令安裝的可以借鑑一下這篇文章,但是這篇文章中博主有錯誤並未解決,下面是解決方式

執行下列命令,使用 opensipsdbctl 建立資料庫的時候會報錯

opensipsdbctl create
# 錯誤資訊為
ERROR: could not load the script in /usr/local//lib64/opensips/opensipsctl/opensipsdbctl.mysql for database engine MYSQL
ERROR: database engine not loaded - tried 'MYSQL'

解決方式,安裝 opensips-mysql-module

apt install opensips-mysql-module

然後重新生成資料庫

opensipsdbctl create
# 表建立完成後(提示的兩個問題都選n)

然後結合上面博主的文章,也是一次過,無錯誤。⚠️這篇文章主要講原始碼安裝。

  • 原始碼安裝
    網上資料基本是原始碼安裝,也建議原始碼安裝
    opensips官方網站

Ubuntu18.04原始碼安裝opensips步驟,一次過

安裝依賴

apt update
apt install gcc -y
apt install g++ -y
apt install build-essential -y
# apt-get install mysql-server  如果mysql資料庫不在本機,可以不用在本機安裝資料庫,如果要在本機安裝mysql,自行安裝配置
apt install mysql-client
apt install libmysqlclient-dev -y
apt install pkg-config
apt install libssl-dev
apt-get install perl libdbi-perl libdbd-mysql-perl libdbd-pg-perl libfrontier-rpc-perl libterm-readline-gnu-perl libberkeleydb-perl
# libncurses5重要
apt-get install bison flex libncurses5 libncurses5-dev

下載程式,解壓,進入到解壓目錄

  • opensips目前最新是3.4.4,但是由於3.x之後版本砍了opensipsctlrc配置項,導致無法自動生成資料庫,官方3.0版本後建議手動增加庫,新增2張表,但是並沒有明確表示如何新增使用者,故建議大家不要使用3.0及之後的版本。本文以2.4.11版本為例。
wget https://download.opensips.org/opensips-2.4.11.tar.gz
//解壓
tar -zxvf opensips-2.4.11.tar.gz
//切換目錄
cd  opensips-2.4.11

opensips其它可下載版本

編譯原始碼

  1. mark編譯包
make menuconfig
  • mark過程應該不報錯,這樣為正常
  1. 進入選單,操作提示:空格/回車選擇,q返回上一級

    2.1 選擇mysql模組
  • 選擇Configure Compile Options,再選擇 Configure Excluded Modules,上下鍵翻滾選擇,按空格選中安裝mysql模組

    2.2 設定配置檔案安裝位置
  • 選擇mysql模組後按q返回,選擇Configure Install Prefix,回車預設安裝在/usr/local/下,可以輸入自己想安裝的路徑,比如:/usr/local/opensips/

    2.3 儲存修改
  • 選擇Save Changes 儲存修改,提示需要libmysqlclient-dev不用理會,前面已經安裝了

    2.4 編譯安裝
  • 按q返回,選擇Compile And Install OpenSIPS後回車,開始編譯,正常情況不會提示依賴問題,若有提示可能是某依賴裝失敗了需要重灌,按Ctrl+c退出介面後用apt安裝包,若包安裝失敗原因有很多,或許是apt源沒配置對ubuntu的版本,又或許是相容性,具體需要百度查詢。
  • 安裝完成,提示 Press any to return to menuconfig 後按 Exit & Save All Changes 後大概按三次q退出

配置資料來源

切換目錄

cd /usr/local/etc/opensips

編輯opensipsctlrc檔案(3.0版本後無此檔案)

vim opensipsctlrc
  • 配置項裡的內容修改了只對本工具有效,這個工具用來生成opensips資料庫和sip的使用者名稱和密碼用的工具

登入mysql,建立oepnsips使用者

  • 登入mysql後,建立opensips要用的新使用者opensips,使用預設的使用者名稱opensips和密碼opensipsrw
mysql -h 127.0.0.1 -u root -p
# 輸入root使用者的密碼,登入到mysql中
# 建立使用者和密碼
CREATE USER 'opensips'@'%' IDENTIFIED BY 'opensipsrw';
# 賦權
GRANT ALL ON opensips.* TO 'opensips'@'%';
flush privileges;

建立opensips資料庫

//進入資料夾
cd /usr/local/sbin
//執行該命令後會讓選擇資料庫編碼,選擇最後一個gb18030,或者gb2312,這兩個都是適用於簡體中文的字符集,是 GB2312 和 GBK 的擴充套件,支援簡體中文、繁體中文及一些特殊字元
opensipsdbctl create
//表建立完成後(提示的兩個問題都選n)

  • 建立的表結構如下

生成特定配置檔案

//進入目錄
cd /usr/local/etc/opensips
# 執行
osipsconfig

  • 操作內容

依次選擇—> Generate OpenSIPS Script —> Residential Script —> Configure Residential Script
選中如下幾項
[*] ENABLE_TCP
[*] USE_AUTH
[*] USE_DBACC
[*] USE_DBUSRLOC
[*] USE_DIALOG
按q返回,選擇 —> Generate Residential Script 回車,生成新的配置檔案,檔案格式為opensips_residential_xxxxx.cfg,按qqq退出命令,生成新的配置檔案

備份舊檔案,修改新檔案

# 備份原配置檔案
mv opensips.cfg opensipsold.cfg-back
# 用生成的opensips_residential_xxx.cfg替換原先的opensips.cfg:
mv opensips_residential_2024-4-13_10:30:0.cfg opensips.cfg
# 編輯新生成的配置檔案,修改監聽埠和ip,ip把127.0.0.1改為自己的ip,儲存
vim opensips.cfg

注意配置資料庫連線,若都用預設且mysql服務在本機可不用配置

  • 前面配置的opensipsctlrc只是輔助工具,用的不是opensips主程式用的
  • 官網說明配置檔案opensips.cfg配置資料庫方式為,故前一步開啟的opensips.cfg檔案內有關於mysql相關的配置要修改(可修改地方通常標記CUSTOMIZE ME),比如mysql的地址,埠,庫名稱按如下格式修改,例如:mysql://root:123456@192.168.1.15:3360/opensips

建立賬號

# 建立賬號1000 密碼123456
opensipsctl add 1000 123456  
# 建立賬號1001 密碼123456
opensipsctl add 1001 123456  
# 建立賬號將在表subscriber新增一條記錄,也可以在資料庫直接修改
  • 注意事項,異常項
# 如果建立使用者時提示
“ERROR: domain unknown: use usernames with domain or set default domain in SIP_DOMAIN”,
# 可修改opensipsctlrc檔案將SIP_DOMAIN設為本機域名或外網IP地址

啟用

opensipsctl start

啟動的時候會如果報錯,報錯資訊為,按照我上面的步驟一般不會報錯

ERROR: PID file /var/run/opensips.pid does not exist -- OpenSIPS start failed

檢視系統日誌資訊 /var/log/syslog

# 裡面記錄了具體的錯誤資訊,然後根據錯誤資訊很容易解決
tail -f /var/log/syslog -n 500
# 錯誤資訊為: 造成這個的原因就是udp和tcp的ip設定為了伺服器的外網ip而不是內網ip
Apr 12 23:20:40 localhost /usr/local/sbin/opensips[2385]: INFO:core:mod_init: initializing TCP-plain protocol
Apr 12 23:20:40 localhost /usr/local/sbin/opensips[2385]: ERROR:core:udp_init_listener: bind(30, 0x7fc65b3aa734, 16) on 1.xx.xx.160: Cannot assign requested address
Apr 12 23:20:40 localhost /usr/local/sbin/opensips[2385]: ERROR:core:trans_init_all_listeners: failed to init listener [1.xx.xx.160], proto udp
Apr 12 23:20:40 localhost /usr/local/sbin/opensips[2385]: ERROR:core:main: failed to init all SIP listeners, aborting

常用命令

# 啟動服務
sudo opensipsctl start
# 停止服務
sudo opensipsctl stop 
# 重啟服務
sudo opensipsctl restart 

手機安裝軟體測試

  • 安卓安裝 Linphone
  • 蘋果安裝Linphone

蘋果如果app store是國內賬號,得換成美國賬號才能下載這個APP,可以下載其他的sip app,比如PortSIP,app store裡面有很多型別的軟體。

以Linphone為例

  • 設定賬號為1000的賬號,另一個手機設定為1001的賬號

  • 兩個手機就可以實現語音和視訊通話了
    -通話完成後在acc表會新增1條INVITE記錄和一條BYE記錄

opensips到此就搭建完成了

相關文章