Here i will install OpenSIPS 1.11. To get more control over the installation process, I will compile the OpenSIPS from the source.
# cd /usr/local/src/
Get the latest release of OpenSIPS source from OpenSIPS’s GitHub repository:
Go to the place where “GitHub.com” is remotely storing OpenSIPS and get the OpenSIPS ‘s repo HTTP-address “https://github.com/OpenSIPS/opensips.git“. Then clone the repo.
# git clone https://github.com/OpenSIPS/opensips.git -b 1.11 opensips_1_11
# cd opensips_1_11
Note: The option -b is used to choose the branch “-b 1.11”
Install the prerequisites needed to configure the compilation:
- Flex and Bison needed for parsing of configuration file.
- ncurses-libs, ncurses-devel, and ncurses-static for grafical display (text-based user interfaces).
Some prerequisites must be installed for GCC like Flex, Bison, TCl and others. If you could not compile, check what is missed in your system. Have a look here.
Open the configuration interface:
# make menuconfig
If you couldn’t open the interface and have an error like “Make error *255*“, this means needed prerequisites are not all installed. You could also need to try these:
- Remove GCC and install it again:
# yum remove gcc
# yum install gcc
If you are patient, try to do the same thing with some broken installed prerequisites.
- You could need to change the Makefile (In my case: “/usr/local/src/opensips_1_11/menuconfig/Makefile“). For example adding include (-I) and library (-L) paths.
$(CC) -o $(EXEC_NAME) $(CFLAGS) $^ -I/usr/include -L/usr/lib -lncurses
- Still have a problem, do system restart.
The text-based user interface to configure and compile will look like this:
Here we can do the following
- Configure some compile options used at OpenSIPS compilation time.
- Compile and install OpenSIPS.
- Cleanup OpenSIPS sources.
- Generate OpenSIPS script
- Exit and save all changes.
To get the features you want, go to the first menu and configure the compilation. You can select the modules you want to compile (“Configure Compile Options” –> “Configure Excluded Modules”). The selected modules here (marked with star *) will be included in the compilation of the OpenSIPS. Also you can configure the installation directories (“Configure Compile Options” –> “Configure Install Prefix”). It can be for example “/usr/local/opensips_1_11/”. Note: press q letter or left-arrow to go back to the previous screen.
After the configuration press on “Save Changes” to save the changes you did. After this you will get a message of the required libraries which must be installed according to the modules included in the configuration of the compilation (module dependencies). Go ahead and download them before compilation. Put the graphical interface in the background (press control-Z) or open a new terminal so you can see the names of the required libraries from the graphical interface and install them in the new terminal.
For example the module “db_mysql” needs mysql-devel (mysql client development library) to be installed.
Back to the interface and select “Compile and Install OpenSIPS” , then the compilation will start. It takes few minutes.
After the installation is completed, we get OpenSIPS installed as it is configured. In my case, it will be installed in “/usr/local/opensips_1_11/”. This directory contains these:
In “etc” we have the OpenSIPS configuration files.
In “lib” we have OpenSIPS modules
In “sbin” we have the executable files.
In “share” we have the documentation.
Create OpenSIPS Mysql Database
Install your database server. As an example install MySQL database server.
Now we are in “/usr/local/opensips_1_11/”
- Configure the database parameters: Edit the configuration file “etc/opensips/opensipsctlrc”. This file contains the configuration of the database connection. # vim opensipsctlrc. Adjust the parameters like the name of the database, the read/write user that the opensips will be using, password, the database root user, and others.
- Create the OpenSIPS database.Now back to “/usr/local/opensips_1_11/”. In the sub-directory /sbin we have opensipsdbctl tool. Use it to create the database. Here is the command and its output:
# ./opensipsdbctl create
MySQL password for root:
INFO: test server charset
INFO: creating database opensips …
INFO: Core OpenSIPS tables succesfully created.
Install presence related tables? (y/n): y
INFO: creating presence tables into opensips …
INFO: Presence tables succesfully created.
Install tables for imc cpl siptrace domainpolicy carrierroute userblacklist b2b registrant call_center? (y/n): y
INFO: creating extra tables into opensips …
INFO: Extra tables succesfully created.
opensipsdbctl tool takes its configuration from the file “etc/opensipsctlrc”
- Install and configure mysqld as a system service:
# yum -y install community-mysql-server
# systemctl start mysqld.service
# systemctl enable mysqld.service
- Check if its running: # ps aux | grep mysql
- Default password is empty so only press “Enter” when asking for password. For security, set root password as following:
mysql> set password for root@localhost=password(‘fedoracore2’);
Generate OpenSIPS Configuration File
The prerequisite is to install m4 package which comes by default with most Linux distribution. M4 is GNU macro processor and it is useful for writing text files which can be logically parsed.
Now we are in “/usr/local/opensips_1_11/”
Go to sbin and execute ./osipsconfig. You will get the text interface to generate the configuration file.
Three kinds of configuration files/scripts can be generated:
- Residential scripts: If we have customers and we want to offer them certain services.
- Trunking scripts: where we have PBXs and SIP trunks and we want to route the traffic.
- Load-balancing scripts: Simple load balancer that can load the traffic between chosen destinations.
Example: Generating residential script (“Generate OpenSIPS Script” –> “Residential Script” –> “Configure Residential Script”) so we come to this page:
Here we can configure how OpenSIPs will work. After this configuration press “q” to go to the previous page then click on “Generate Residential Script”.
The generated script will be placed in the OpenSIPs etc folder (/usr/local/opensips_1_11/etc/opensips) marked with the date of its generation. Example: “opensips_residential_2014-9-25_12:30:52.cfg”. After the generation of the file we need to customize it little bit. For example fix the IP addresses and ports that the OpenSIPs will be working on. For example:
listen=udp:10.0.0.4:5060 # CUSTOMIZE ME
Also customization of the places where DB connection is required. Example:
modparam(“siptrace”, “db_url”, “mysql://user:passwd@host/dbname”)
modparam(“usrloc”, “db_url”,”mysql://opensips:fedoracore2@localhost/opensips”) # CUSTOMIZE ME
Don’t forget to check the path of the installed modules: mpath=”/usr/local/opensips_proxy/lib/opensips/modules”
OpenSIPS Init Script
To make OpenSIPS works as system service, we need Init script. Follow these steps:
- Go to the src folder : “/usr/local/src/opensips_1_11/packaging”
- Here you have to select your system. For example if you have Fedora go to fedora sub-directory.
- In that folder you will see the script opensips.init which is the actual init script. Copy this script to /etc/init.d/opensips and give it execution right.
# cp opensips.init /etc/init.d/opensips
# chmod +x /etc/init.d/opensips
- Edit the script
# vim /etc/init.d/opensips
Here is a part of the script where there will be changes. The red line replace the line above it. Please see the corresponding to this in your system.
Include New Syslog Entry for OpenSIPS
- Open the configuration file. In the Global Configuration section you will see the following :
Change 0 to 1
- Edit rsyslog.conf: #vim /etc/rsyslog.conf
Add this entry: local1.* – /var/log/opensips.log
- Restart rsyslog daemon : #systemctl restart rsyslog OR #service rsyslog restart
All OpenSIPs log messages will be stored in this file /var/log/opensips.log
By adding “–“, the logging will be in Asynchronous mode so opensips will not wait until the messages are propagated.
Add Linux User and Group For OpenSIPS
Execute “# system-config-users”. Add user=opensips and create group=opensips for that user
The database server must be running before starting OpenSIPS. For example if the database server is mysql, check its status (# systemctl status mysqld.service) and run it if it is not running (# systemctl start mysqld.service).
To enable and start opensips as a system service.
# systemctl start opensips.service
# systemctl enable opensips.service
Check the file “/var/log/opensips.log” to see if everything is ok and no error messages (# tail -f /var/log/opensips.log).
Example of an error message in the opensips.log:
ERROR:uri:db_checks_fixup1: configuration error – no database URL is configured!
“uri” is the name of the module which has a problem.
Note: Problems which arise before the loading of the configuration file are still going to “/var/log/messages”.
Now the opensips should be running and we can check this by executing some commands:
♠ Check the status of the OpenSIPS’s service (i.e. Loaded and Running): #systemctl status opensips.service
♠ Check network’s state of the OpenSIPS server: # netstat -lpn |grep opensips
tcp 0 0 127.0.0.1:5060 0.0.0.0:* LISTEN 32634/opensips
udp 0 0 127.0.0.1:5060 0.0.0.0:* 32634/opensips
Note: OpenSIPS will not start on database init failure and it will exit immediately (return -1) on module initialization failure (calling the function “mod_init”).
To restart OpenSIPS, do the following:
# systemctl restart opensips.service
# cd /etc/init.d/
# ./opensips restart
Now after OpenSIPS has been installed successfully, you can start using its modules in the routing script. What i recommend when using any module:
- Reading in the module documentation (Last Version). Note the section “Exported MI Functions” in the documentation of each module lists the module’s exported MI functions that can be called from outside of OpenSIPS (External applications). Example:
# opensipsctl fifo debug 1
OpenSIPS project is growing quickly so please always read in the latest documentation.
- Sometimes you need to look at the Database Schema. Some fields are pushed to database only when a specific module parameter is set. Example: In multi-domain scenarios, you might need to save the domain part of the user so the domain part and the username part are used to identify the user. So in this case you need to set the “use_domain” parameter of “usrloc” module to non zero value which means true.
modparam(“usrloc”, “use_domain”, 1)