安裝方式
- 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其它可下載版本
編譯原始碼
- mark編譯包
make menuconfig
- mark過程應該不報錯,這樣為正常
- 進入選單,操作提示:空格/回車選擇,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到此就搭建完成了