1. Start from Bionic Ubuntu cloud image 2. Use the following Cloud init data while spawning an instance #cloud-config disable_root: 0 ssh_pwauth: True users: - name: root chpasswd: list: | root:xxxxxxxxxxxxxxxxxxxxxxxxx expire: False runcmd: - sed -i -e '/^#PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config - systemctl restart sshd this removes all existing cloud users and allows only root user and sets a password 3. Install all Kamailio Packages $ apt update && apt upgrade -y && apt install -y mysql-server tcpdump screen ntp ntpdate git-core dkms gcc flex bison libmysqlclient-dev make \ libssl-dev libcurl4-openssl-dev libxml2-dev libpcre3-dev bash-completion g++ autoconf rtpproxy libmnl-dev \ libsctp-dev ipsec-tools $ wget -O- http://deb.kamailio.org/kamailiodebkey.gpg | sudo apt-key add - $ add-apt-repository 'deb http://deb.kamailio.org/kamailio52 bionic main' $ ntpdate pool.ntp.org $ apt install -y kamailio kamailio-mysql-modules kamailio-ims-modules kamailio-presence-modules kamailio-tls-modules kamailio-xml-modules kamailio-xmlrpc-modules \ kamailio-sctp-modules kamailio-outbound-modules kamailio-dbg Configuration files for Kamailio IMS are located in /etc/kamailio/ folder Create the directory for pid file: $ mkdir -p /var/run/kamailio_icscf $ mkdir -p /var/run/kamailio_pcscf $ mkdir -p /var/run/kamailio_scscf Default setting is to run Kamailio as user kamailio and group kamailio. For that you need to create the user: $ adduser --quiet --system --group --disabled-password \ --shell /bin/false --gecos "Kamailio" \ --home /var/run/kamailio_icscf kamailio $ adduser --quiet --system --group --disabled-password \ --shell /bin/false --gecos "Kamailio" \ --home /var/run/kamailio_pcscf kamailio $ adduser --quiet --system --group --disabled-password \ --shell /bin/false --gecos "Kamailio" \ --home /var/run/kamailio_scscf kamailio Set ownership $ chown kamailio:kamailio /var/run/kamailio_icscf $ chown kamailio:kamailio /var/run/kamailio_pcscf $ chown kamailio:kamailio /var/run/kamailio_scscf 4. Clone Kamailio repository and checkout 5.2 version of repository to get the sample configuration files $ mkdir -p /usr/local/src/kamailio-5.2 $ cd /usr/local/src/kamailio-5.2/ $ git clone git://git.kamailio.org/kamailio kamailio $ cd kamailio $ git checkout -b 5.2 origin/5.2 6. Setup the DNS for resolving IMS components names - Refer Appendix 3 7. Populate MySQL database using kamctlrc command Edit SIP_DOMAIN and DBENGINE in the /etc/kamailio/kamctlrc configuration file (Used by kamctl and kamdbctl tools). Set the SIP_DOMAIN to your SIP service domain (or IP address if you don't have a DNS hostname associated with your SIP service). Set the DBENGINE to be MYSQL and adjust other setting as you want. Finally, uncomment both SIP_DOMAIN and DBENGINE. In my example, the following values are set for SIP_DOMAIN and DBENGINE SIP_DOMAIN=mnc096.mcc262.3gppnetwork.org DBENGINE=MYSQL You can change other values in kamctlrc file. Once you are done updating kamctlrc file, run the script to create the database used by Kamailio: $ kamdbctl create (When prompted for mysql root user password enter the root password if its is set or else leave it blank i.e. Press Enter) check database manually; $ mysql show databases; use kamailio; show tables; select * from subscriber; No Subscribers are added yet The kamdbctl will add two users in MySQL user tables: - kamailio - (with default password 'kamailiorw') - user which has full access rights to 'kamailio' database - kamailioro - (with default password 'kamailioro') - user which has read-only access rights to 'kamailio' database 8. Edit /etc/default/rtpproxy file as follows (This step is needed only if SIP client and/or SIP server is behind a NAT): # Defaults for rtpproxy # The control socket. #CONTROL_SOCK="unix:/var/run/rtpproxy/rtpproxy.sock" # To listen on an UDP socket, uncomment this line: CONTROL_SOCK=udp:127.0.0.1:22222 # Additional options that are passed to the daemon. EXTRA_OPTS="-l 172.24.15.21 -d DBUG:LOG_LOCAL0" here, "-l ", PUBLIC_IP is the publicly reachable IP address (Floating IP) Then run, $ systemctl restart rtpproxy 9. Edit configuration file to fit your requirements for the VoIP platform, you have to edit the /etc/kamailio/kamailio.cfg configuration file. Follow the instruction in the comments to enable usage of MySQL. Basically you have to add several lines at the top of config file, like: #!define WITH_MYSQL #!define WITH_AUTH #!define WITH_USRLOCDB #!define WITH_NAT (Include this if client and/or SIP server is behind a NAT) (uncomment this line and enter the DNS domain created above) alias="mnc096.mcc262.3gppnetwork.org" (uncomment this line, 10.4.128.7 is the internal IP and 172.24.15.21 is the Public/Floating IP) listen=udp:10.4.128.7:5060 advertise 172.24.15.21:5060 listen=tcp:10.4.128.3:5060 advertise 172.24.15.30:5060 Further down, we will need to modify the rtpproxy_sock value to match the CONTROL_SOCK option we set for RTPProxy in /etc/default/rtpproxy modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:22222") If you changed the password for the 'kamailio' user of MySQL, you have to update the value for 'DBURL' parameters. Then run, $ systemctl restart kamailio 10. A quick check for the basic working of SIP server can be done as follows: Make sure the kamailio sip server is running Create new subscriber accounts. A new account can be added using 'kamctl' tool via 'kamctl add ' (When asked for entering MySQL password for user 'kamailio@localhost': type 'kamailiorw', as provided in kamailio.cfg) $ kamctl add test testpasswd $ kamctl add test2 testpasswd Setting on OnePlus phones - Connect to a network through which SIP server is reachable (either Wi-Fi or LTE) - Goto phone dialer and select the "Settings" in the menu on top right corner - Then select "Call settings" - Configure SIP accounts in phones as added above using kamctl: In Phone 1: Username: test Password: testpasswd Server: mnc096.mcc262.3gppnetwork.org (Created DNS Domain Name or IP to which IMS components are bound to, visible interface IP address) Optional Settings: Authentication username: test Outbound proxy address: 172.24.15.21 (Floating IP of VM in case of OpenStack or else no need to fill in case of physical machine) Transport type: UDP In Phone 2: Username: test2 Password: testpasswd Server: mnc096.mcc262.3gppnetwork.org (Created DNS Domain Name or IP to which IMS components are bound to, visible interface IP address) Optional Settings: Authentication username: test2 Outbound proxy address: 172.24.15.21 (Floating IP of VM in case of OpenStack or else no need to fill in case of physical machine) Transport type: UDP - Set "Receive incoming calls" option to enabled state in both phones - Set "Use SIP calling" to "For all calls" - Add a new contact as follows: In Phone 1: Select "more" option Name: SIP Contact test2 (Any arbitary name) SIP: test2@mnc096.mcc262.3gppnetwork.org (Created DNS Domain Name or IP to which IMS components are bound to, visible interface IP address) Save and exit In Phone 2: Select "more" option Name: SIP Contact test (Any arbitary name) SIP: test@mnc096.mcc262.3gppnetwork.org (Created DNS Domain Name or IP to which IMS components are bound to, visible interface IP address) Save and exit - Now try calling from either phone 11. Create new mysql database for pcscf, scscf and icscf, populate databases and grant permissions to respective users identified by a password $ mysql CREATE DATABASE `pcscf`; CREATE DATABASE `scscf`; CREATE DATABASE `icscf`; In all of the below steps, when prompted for mysql root user password, leave it blank i.e. Press Enter if password is not set or enter password if set $ cd /usr/local/src/kamailio-5.2/kamailio/utils/kamctl/mysql $ mysql -u root -p pcscf < standard-create.sql $ mysql -u root -p pcscf < presence-create.sql $ mysql -u root -p pcscf < ims_usrloc_pcscf-create.sql $ mysql -u root -p pcscf < ims_dialog-create.sql $ mysql -u root -p scscf < standard-create.sql $ mysql -u root -p scscf < presence-create.sql $ mysql -u root -p scscf < ims_usrloc_scscf-create.sql $ mysql -u root -p scscf < ims_dialog-create.sql $ mysql -u root -p scscf < ims_charging-create.sql $ cd /usr/local/src/kamailio-5.2/kamailio/misc/examples/ims/icscf $ mysql -u root -p icscf < icscf.sql Verify that following tables are present in respective databases by logging into mysql +-----------------+ | Tables_in_pcscf | +-----------------+ | active_watchers | | dialog_in | | dialog_out | | dialog_vars | | location | | presentity | | pua | | version | | watchers | | xcap | +-----------------+ +-----------------+ | Tables_in_scscf | +-----------------+ | active_watchers | | contact | | dialog_in | | dialog_out | | dialog_vars | | impu | | impu_contact | | impu_subscriber | | presentity | | pua | | ro_session | | subscriber | | version | | watchers | | xcap | +-----------------+ +---------------------+ | Tables_in_icscf | +---------------------+ | nds_trusted_domains | | s_cscf | | s_cscf_capabilities | +---------------------+ grant delete,insert,select,update on pcscf.* to pcscf@localhost identified by 'heslo'; grant delete,insert,select,update on scscf.* to scscf@localhost identified by 'heslo'; grant delete,insert,select,update on icscf.* to icscf@localhost identified by 'heslo'; grant delete,insert,select,update on icscf.* to provisioning@localhost identified by 'provi'; Then, $ mysql use icscf; INSERT INTO `nds_trusted_domains` VALUES (1,'mnc096.mcc262.3gppnetwork.org'); INSERT INTO `s_cscf` VALUES (1,'First and only S-CSCF','sip:scscf.mnc096.mcc262.3gppnetwork.org:6060'); INSERT INTO `s_cscf_capabilities` VALUES (1,1,0),(2,1,1); 12. Copy pcscf, icscf and scscf configuration files to /etc/ folder and edit accordingly $ cd /usr/local/src/kamailio-5.2/kamailio/misc/examples/ims/ $ cp -r icscf/ /etc/kamailio_icscf $ cp -r pcscf/ /etc/kamailio_pcscf $ cp -r scscf/ /etc/kamailio_scscf Rename files in these folder kamailio_pcscf, kamailio_icscf and kamailio_scscf by removing .sample part from the configuration files. And, rename kamailio.cfg in respective folder as follows: kamailio_pcscf.cfg, kamailio_icscf.cfg and kamailio_scscf.cfg Edit the configuration files as per your deployment --------------------------------- I-CSCF ------------------------------------------------------------------------------- $ cd /etc/kamailio_icscf Edit the DNS domain names, DB URL and IP addresses at all places in the icscf.cfg, icscf.xml files accordingly ************* Changes required in icscf.cfg ************* # SIP / UDP listen=udp:10.4.128.7:4060 advertise 172.24.15.21:4060 # SIP / TCP listen=tcp:10.4.128.7:4060 advertise 172.24.15.21:4060 alias=icscf.mnc096.mcc262.3gppnetwork.org #!define NETWORKNAME "mnc096.mcc262.3gppnetwork.org" #!define HOSTNAME "icscf.mnc096.mcc262.3gppnetwork.org" #!define DB_URL "mysql://icscf:heslo@localhost/icscf" #!define WITH_TCP #!define FALLBACK_AUTH ************* Changes required in icscf.xml ************* FQDN="icscf.mnc096.mcc262.3gppnetwork.org" Realm="mnc096.mcc262.3gppnetwork.org" ************* Changes required in kamailio_icscf.cfg ************* # ------------------ module loading ---------------------------------- mpath="/usr/lib64/kamailio/modules_k/:/usr/lib64/kamailio/modules/:/usr/lib/kamailio/modules_k/:/usr/lib/kamailio/modules/:/usr/lib/x86_64-linux-gnu/kamailio/modules/" /* set the path to RPC fifo control file */ modparam("jsonrpcs", "fifo_name", "/var/run/kamailio_icscf/kamailio_rpc.fifo") /* set the path to RPC unix socket control file */ modparam("jsonrpcs", "dgram_socket", "/var/run/kamailio_icscf/kamailio_rpc.sock") # -- cdp params -- modparam("cdp","config_file","/etc/kamailio_icscf/icscf.xml") modparam("tls", "config", "/etc/kamailio_icscf/tls.cfg") # ----- ctl params ----- modparam("ctl", "binrpc", "unix:/var/run/kamailio_icscf/kamailio_ctl") Comment out the below line #loadmodule "debugger.so" Comment out below in main route logic # if !($rU =~ "\+.*") { # prefix("+"); # } OR add the line in route[initial_request] logic route[initial_request] { $avp(prefix)="+"; $ru= $(ru{s.rm,$avp(prefix)}); xlog("$$ru => $ru\n"); I_perform_location_information_request("LIR_REPLY", "0"); } A quick check for correctness of settings: Edit the /etc/default/kamailio file, by changing the configuration file parameter as follows: # Config file CFGFILE=/etc/kamailio_icscf/kamailio_icscf.cfg After altering the above file, execute below command $ systemctl restart kamailio.service And, check that there are no error by viewing logs using the below command $ journalctl -f --unit kamailio ** I-CSCF as can also be run as follows: kamailio -f /etc/kamailio_icscf/kamailio_icscf.cfg --------------------------------- P-CSCF ------------------------------------------------------------------------------- $ cd /etc/kamailio_pcscf Edit the DNS domain names, DB URL and IP addresses at all places in the pcscf.cfg, pcscf.xml files accordingly ************* Changes required in pcscf.cfg ************* # SIP / UDP listen=udp:10.4.128.7:5060 advertise 172.24.15.21:5060 # SIP / TCP listen=tcp:10.4.128.7:5060 advertise 172.24.15.21:5060 #!define IPSEC_LISTEN_ADDR "10.4.128.7" alias=pcscf.mnc096.mcc262.3gppnetwork.org #!define PCSCF_URL "sip:pcscf.mnc096.mcc262.3gppnetwork.org" #!subst "/NETWORKNAME/mnc096.mcc262.3gppnetwork.org/" #!subst "/HOSTNAME/pcscf.mnc096.mcc262.3gppnetwork.org/" #!define DB_URL "mysql://pcscf:heslo@localhost/pcscf" #!define SQLOPS_DBURL "pcscf=>mysql://pcscf:heslo@localhost/pcscf" ##!define TRF_FUNCTION "trf.mnc096.mcc262.3gppnetwork.org" #!define WITH_TCP ************* Changes required in pcscf.xml ************* FQDN="pcscf.mnc096.mcc262.3gppnetwork.org" Realm="mnc096.mcc262.3gppnetwork.org" ************* Changes required in kamailio_pcscf.cfg ************* # ------------------ module loading ---------------------------------- mpath="/usr/lib64/kamailio/modules_k/:/usr/lib64/kamailio/modules/:/usr/lib/kamailio/modules_k/:/usr/lib/kamailio/modules/:/usr/lib/x86_64-linux-gnu/kamailio/modules/" Comment out the below line #loadmodule "debugger.so" modparam("debugger", "cfgtrace", 0) #modparam("debugger", "cfgtrace", 1) /* set the path to RPC fifo control file */ modparam("jsonrpcs", "fifo_name", "/var/run/kamailio_pcscf/kamailio_rpc.fifo") /* set the path to RPC unix socket control file */ modparam("jsonrpcs", "dgram_socket", "/var/run/kamailio_pcscf/kamailio_rpc.sock") modparam("tls", "config", "/etc/kamailio_pcscf/tls.cfg") # ----- ctl params ----- modparam("ctl", "binrpc", "unix:/var/run/kamailio_pcscf/kamailio_ctl") # ----------------- Settings for Dispatcher --------------- modparam("dispatcher", "list_file", "/etc/kamailio_pcscf/dispatcher.list") # AVP's required for Fail-Over-Support: #modparam("dispatcher", "dst_avp", "$avp(DISPATCHER_DST_AVP)") #modparam("dispatcher", "grp_avp", "$avp(DISPATCHER_GRP_AVP)") #modparam("dispatcher", "cnt_avp", "$avp(DISPATCHER_CNT_AVP)") #modparam("dispatcher", "sock_avp", "$avp(DISPATCHER_SOCK_AVP)") modparam("dispatcher", "xavp_dst", "$avp(DISPATCHER_DST_AVP)") modparam("dispatcher", "xavp_dst_mode", 0) modparam("dispatcher", "xavp_ctx", "$avp(DISPATCHER_CNT_AVP)") modparam("dispatcher", "xavp_ctx_mode", 0) #modparam("ims_usrloc_pcscf", "hashing_type", 2) #!ifdef WITH_RX # -- CDP params -- modparam("cdp","config_file","/etc/kamailio_pcscf/pcscf.xml") # -- diameter_rx params -- modparam("ims_qos", "rx_dest_realm", "localdomain") # Enter realm to which PCRF belongs to #modparam("ims_qos", "rx_dest_realm", "NETWORKNAME") Change the route[REQINIT] as follows: #!ifdef WITH_IPSEC if (!is_method("REGISTER")) { ipsec_forward("location"); } #!endif Change the event_route[uac:reply] as follows: #!ifdef WITH_IPSEC ipsec_destroy("location"); #!endif ************* Changes required in dispatcher.list ************* # SBC's #2 sip:10.4.128.7:5070 A quick check for correctness of settings: Edit the /etc/default/kamailio file, by changing the configuration file parameter as follows: # Config file CFGFILE=/etc/kamailio_pcscf/kamailio_pcscf.cfg After altering the above file, execute below command $ systemctl restart kamailio.service And, check that there are no error by viewing logs using the below command (Ignore the rtpengine errors for now, as we will install in next step) $ journalctl -f --unit kamailio ** P-CSCF as can also be run as follows: kamailio -f /etc/kamailio_pcscf/kamailio_pcscf.cfg --------------------------------- S-CSCF ------------------------------------------------------------------------------- $ cd /etc/kamailio_scscf Edit the DNS domain names, DB URL and IP addresses at all places in the scscf.cfg, scscf.xml files accordingly ************* Changes required in scscf.cfg ************* # SIP / UDP listen=udp:10.4.128.7:6060 advertise 172.24.15.21:6060 # SIP / TCP listen=tcp:10.4.128.7:6060 advertise 172.24.15.21:6060 #!define NETWORKNAME "mnc096.mcc262.3gppnetwork.org" #!define HOSTNAME "scscf.mnc096.mcc262.3gppnetwork.org" #!define URI "sip:scscf.mnc096.mcc262.3gppnetwork.org:6060" alias=scscf.mnc096.mcc262.3gppnetwork.org # ENUM-Server to query: #!define ENUM_SUFFIX "mnc096.mcc262.3gppnetwork.org." #!define DB_URL "mysql://scscf:heslo@localhost/scscf" #!define RO_MNC "96" #!define WITH_TCP ************* Changes required in scscf.xml ************* FQDN="scscf.mnc096.mcc262.3gppnetwork.org" Realm="mnc096.mcc262.3gppnetwork.org" ************* Changes required in kamailio_scscf.cfg ************* # ------------------ module loading ---------------------------------- mpath="/usr/lib64/kamailio/modules_k/:/usr/lib64/kamailio/modules/:/usr/lib/kamailio/modules_k/:/usr/lib/kamailio/modules/:/usr/lib/x86_64-linux-gnu/kamailio/modules/" Comment out the below line #loadmodule "debugger.so" /* set the path to RPC fifo control file */ modparam("jsonrpcs", "fifo_name", "/var/run/kamailio_scscf/kamailio_rpc.fifo") /* set the path to RPC unix socket control file */ modparam("jsonrpcs", "dgram_socket", "/var/run/kamailio_scscf/kamailio_rpc.sock") # ----- ctl params ----- modparam("ctl", "binrpc", "unix:/var/run/kamailio_scscf/kamailio_ctl") # -- CDP params -- modparam("cdp","config_file","/etc/kamailio_scscf/scscf.xml") modparam("debugger", "cfgtrace", 0) modparam("ims_registrar_scscf", "user_data_xsd","/etc/kamailio_scscf/CxDataType_Rel7.xsd") # ----------------- Settings for Dispatcher --------------- modparam("dispatcher", "list_file", "/etc/kamailio_scscf/dispatcher.list") # AVP's required for Fail-Over-Support: #modparam("dispatcher", "dst_avp", "$avp(DISPATCHER_DST_AVP)") #modparam("dispatcher", "grp_avp", "$avp(DISPATCHER_GRP_AVP)") #modparam("dispatcher", "cnt_avp", "$avp(DISPATCHER_CNT_AVP)") #modparam("dispatcher", "sock_avp", "$avp(DISPATCHER_SOCK_AVP)") modparam("dispatcher", "xavp_dst", "$avp(DISPATCHER_DST_AVP)") modparam("dispatcher", "xavp_dst_mode", 0) modparam("dispatcher", "xavp_ctx", "$avp(DISPATCHER_CNT_AVP)") modparam("dispatcher", "xavp_ctx_mode", 0) ************* Changes required in dispatcher.list ************* (Not sure what to do hence comment out as follows) # ng-voice Interconnect #1 sip:sbc-1.ng-voice.com #1 sip:sbc-2.ng-voice.com A quick check for correctness of settings: Edit the /etc/default/kamailio file, by changing the configuration file parameter as follows: # Config file CFGFILE=/etc/kamailio_scscf/kamailio_scscf.cfg After altering the above file, execute below command $ systemctl restart kamailio.service And, check that there are no error by viewing logs using the below command $ journalctl -f --unit kamailio ** S-CSCF as can also be run as follows: kamailio -f /etc/kamailio_scscf/kamailio_scscf.cfg 13. For IMS, rtpengine is used rather than rtpproxy since the former supports more features than latter: Installing RTPEngine Check for dependencies, install dependencies and build .deb packages $ export DEB_BUILD_PROFILES="pkg.ngcp-rtpengine.nobcg729" $ apt install dpkg-dev $ git clone https://github.com/sipwise/rtpengine $ cd rtpengine && git checkout mr7.4.1 $ dpkg-checkbuilddeps (The above command checks for dependencies and give you a list of dependencies which are missing in the system. The below list is the result of this command) $ apt install debhelper default-libmysqlclient-dev gperf iptables-dev libavcodec-dev libavfilter-dev libavformat-dev libavutil-dev libbencode-perl libcrypt-openssl-rsa-perl libcrypt-rijndael-perl libdigest-crc-perl libdigest-hmac-perl libevent-dev libhiredis-dev libio-multiplex-perl libio-socket-inet6-perl libiptc-dev libjson-glib-dev libnet-interface-perl libpcap0.8-dev libsocket6-perl libspandsp-dev libswresample-dev libsystemd-dev libxmlrpc-core-c3-dev markdown dkms module-assistant keyutils libnfsidmap2 libtirpc1 nfs-common rpcbind (After installing dependencies run the below command again and verify that no dependencies are left out) $ dpkg-checkbuilddeps (This should just return back to shell with no output if all depedencies are met) $ dpkg-buildpackage -uc -us $ cd .. $ dpkg -i *.deb $ cp /etc/rtpengine/rtpengine.sample.conf /etc/rtpengine/rtpengine.conf Add the following to this copied file under "[rtpengine]" section: interface = 10.4.128.7!172.24.15.21 listen-ng = 2223 Port on which rtpengine binds i.e. listen-ng parameter is udp port 2223. This should be updated in /etc/kamailio_pcscf/kamailio_pcscf.cfg file at modparam(rtpengine ... # ----- rtpproxy params ----- modparam("rtpengine", "rtpengine_sock", "1 == udp:localhost:2223") modparam("rtpengine", "rtpengine_sock", "2 == udp6:localhost:2223") Edit /etc/default/ngcp-rtpengine-daemon and /etc/default/ngcp-rtpengine-recording-daemon as follows in respective files: RUN_RTPENGINE=yes RUN_RTPENGINE_RECORDING=yes $ cp /etc/rtpengine/rtpengine-recording.sample.conf /etc/rtpengine/rtpengine-recording.conf $ mkdir /var/spool/rtpengine $ systemctl start ngcp-rtpengine-daemon.service ngcp-rtpengine-recording-daemon.service ngcp-rtpengine-recording-nfs-mount.service $ systemctl enable ngcp-rtpengine-daemon.service ngcp-rtpengine-recording-daemon.service ngcp-rtpengine-recording-nfs-mount.service $ systemctl stop rtpproxy $ systemctl disable rtpproxy $ systemctl mask rtpproxy 14. Running I-CSCF, P-CSCF and S-CSCF as separate systemctl process $ systemctl stop kamailio $ systemctl disable kamailio $ systemctl mask kamailio $ cp /etc/init.d/kamailio /etc/init.d/kamailio_icscf $ cp /etc/init.d/kamailio /etc/init.d/kamailio_pcscf $ cp /etc/init.d/kamailio /etc/init.d/kamailio_scscf Changes required in /etc/init.d/kamailio_icscf NAME="kamailio_icscf" CFGFILE=/etc/$NAME/kamailio_icscf.cfg Changes required in /etc/init.d/kamailio_pcscf NAME="kamailio_pcscf" CFGFILE=/etc/$NAME/kamailio_pcscf.cfg Changes required in /etc/init.d/kamailio_scscf NAME="kamailio_scscf" CFGFILE=/etc/$NAME/kamailio_scscf.cfg $ cd /etc/default/ $ cp kamailio kamailio_icscf $ cp kamailio kamailio_pcscf $ cp kamailio kamailio_scscf Changes required in /etc/default/kamailio_icscf CFGFILE=/etc/kamailio_icscf/kamailio_icscf.cfg RUN_KAMAILIO=yes (Uncomment) Changes required in /etc/default/kamailio_pcscf CFGFILE=/etc/kamailio_pcscf/kamailio_pcscf.cfg RUN_KAMAILIO=yes (Uncomment) Changes required in /etc/default/kamailio_scscf CFGFILE=/etc/kamailio_scscf/kamailio_scscf.cfg RUN_KAMAILIO=yes (Uncomment) Finally, $ systemctl daemon-reload $ systemctl start kamailio_icscf kamailio_pcscf kamailio_scscf 15. Setup FoHSS in order to talk with I-CSCF and S-CSCF Installation of FoHSS Requirements for FoHSS: Install Java JDK and ant Download Oracle Java 7 JDK from following link using a browser: https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html $ mkdir -p /usr/lib/jvm/ $ tar -zxf jdk-7u79-linux-x64.tar.gz -C /usr/lib/jvm/ $ update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_79/bin/java 100 $ update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_79/bin/javac 100 Verify that java has been successfully configured by running: $ update-alternatives --display java java - auto mode link best version is /usr/lib/jvm/jdk1.7.0_79/bin/java link currently points to /usr/lib/jvm/jdk1.7.0_79/bin/java link java is /usr/bin/java /usr/lib/jvm/jdk1.7.0_79/bin/java - priority 100 $ update-alternatives --display javac javac - auto mode link best version is /usr/lib/jvm/jdk1.7.0_79/bin/javac link currently points to /usr/lib/jvm/jdk1.7.0_79/bin/javac link javac is /usr/bin/javac /usr/lib/jvm/jdk1.7.0_79/bin/javac - priority 100 $ update-alternatives --config java (select java jdk1.7.0_79) $ update-alternatives --config javac Check java version $ java -version Install Ant $ cd ~ $ wget http://archive.apache.org/dist/ant/binaries/apache-ant-1.9.14-bin.tar.gz $ tar xvfvz apache-ant-1.9.14-bin.tar.gz $ mv apache-ant-1.9.14 /usr/local/ $ sh -c 'echo ANT_HOME=/usr/local/ >> /etc/environment' $ ln -s /usr/local/apache-ant-1.9.14/bin/ant /usr/bin/ant Verfiy ant version as follows: $ ant -version Apache Ant(TM) version 1.9.14 compiled on March 12 2019 Create working directories for OpenIMSCore: $ mkdir /opt/OpenIMSCore $ cd /opt/OpenIMSCore Download: $ svn checkout svn://svn.code.sf.net/p/openimscore/code/FHoSS/trunk Rename "/opt/OpenIMSCore/trunk" subdirectory to "/opt/OpenIMSCore/FHoSS" $ mv trunk FHoSS Compile: $ cd FHoSS $ export JAVA_HOME="/usr/lib/jvm/jdk1.7.0_79" $ export CLASSPATH="/usr/lib/jvm/jdk1.7.0_79/jre/lib/" $ ant compile deploy | tee ant_compile_deploy.txt Create configurator.sh using below script to change domain names and IP address in all configuration files $ cd deploy $ vim configurator.sh #!/bin/bash # Initialization & global vars # if you execute this script for the second time # you should change these variables to the latest # domain name and ip address DDOMAIN="open-ims\.test" DSDOMAIN="open-ims\\\.test" DEFAULTIP="127\.0\.0\.1" CONFFILES=`ls *.cfg *.xml *.sql *.properties 2>/dev/null` # Interaction printf "Domain Name:" read domainname printf "IP Adress:" read ip_address # input domain is to be slashed for cfg regexes slasheddomain=`echo $domainname | sed 's/\./\\\\\\\\\./g'` if [ $# != 0 ] then printf "changing: " for j in $* do sed -i -e "s/$DDOMAIN/$domainname/g" $j sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $j sed -i -e "s/$DEFAULTIP/$ip_address/g" $j printf "$j " done echo else printf "File to change [\"all\" for everything, \"exit\" to quit]:" # loop while read filename ; do if [ "$filename" = "exit" ] then printf "exitting...\n" break ; elif [ "$filename" = "all" ] then printf "changing: " for i in $CONFFILES do sed -i -e "s/$DDOMAIN/$domainname/g" $i sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $i sed -i -e "s/$DEFAULTIP/$ip_address/g" $i printf "$i " done echo break; elif [ -w $filename ] then printf "changing $filename \n" sed -i -e "s/$DDOMAIN/$domainname/g" $filename sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $filename sed -i -e "s/$DEFAULTIP/$ip_address/g" $filename else printf "cannot access file $filename. skipping... \n" fi printf "File to Change:" done fi $ chmod +x configurator.sh $ ./configurator.sh Domain Name:mnc096.mcc262.3gppnetwork.org IP Adress:10.4.128.7 $ grep -r "open-ims" $ vim webapps/hss.web.console/WEB-INF/web.xml $ vim hibernate.properties And, change the following line hibernate.connection.url=jdbc:mysql://127.0.0.1:3306/hss_db $ cp configurator.sh ../scripts/ $ cd ../scripts $ grep -r "open-ims" $ ./configurator.sh Domain Name:mnc096.mcc262.3gppnetwork.org IP Adress:10.4.128.7 $ cp configurator.sh ../config/ $ cd ../config $ ./configurator.sh Domain Name:mnc096.mcc262.3gppnetwork.org IP Adress:10.4.128.7 $ cd ../src-web $ vim WEB-INF/web.xml Prepare mysql database: Drop old databases: hss_db $ mysql drop database hss_db; create database hss_db; quit Import database located at /opt/OpenIMSCore into hss_db $ cd /opt/OpenIMSCore $ mysql -u root -p hss_db < FHoSS/scripts/hss_db.sql $ mysql -u root -p hss_db < FHoSS/scripts/userdata.sql Check grants for mysql access rights at first time installation: $ mysql # See last line in hss_db.sql: grant delete,insert,select,update on hss_db.* to hss@localhost identified by 'hss'; grant delete,insert,select,update on hss_db.* to hss@'%' identified by 'hss'; Check database with MySQL Workbench if domain names are o.k. in various entries and privileges $ mysql -u hss -p show databases; use hss_db; select * from impu; Prepare script-file, start HSS Copy startup.sh to hss.sh in root directory $ cp /opt/OpenIMSCore/FHoSS/deploy/startup.sh /root/hss.sh And, add the following to hss.sh before echo "Building Classpath" cd /opt/OpenIMSCore/FHoSS/deploy JAVA_HOME="/usr/lib/jvm/jdk1.7.0_79" CLASSPATH="/usr/lib/jvm/jdk1.7.0_79/jre/lib/" Start HSS using hss.sh $ ./hss.sh Access the web-interface of HSS: http://:8080/hss.web.console/ http://172.24.15.21:8080/hss.web.console/ user: hssAdmin password: hss