OpenIMSCore

IP Multimedia Subsystem tai IP Multimedia Core Network Subsystem (IMS) on arkkitehtuurikehys joka tarjoaa IP-pohjaisia multimediapalveluita tuomalla IP-pohjaiset verkot osaksi langatonta teknologiaa. IMS tarjoaa Quality of Serviceä (QoS), instant messagingia (IM), Voice over LTE (VoLTE) kiinteisiin ja mobiiliverkkoihin. OpenIMSCore on avoimen lähdekoodin projekti jota hallinnoi saksalainen Fraunhofer FOKUS organisaatio, joka keskittyy uusien teknologioiden tutkimiseen ja kehittämiseen.


OpenIMS sisältää neljä osaa:

Home Subscriber Server (HSS)
Proxy – Call Session Control Function (P-CSCF)
Interrogating – Call Session Control Function (I-CSCF)
Serving – Call Session Control Function (S-CSCF)

Asennus tapahtuu Debian 8 jakelulle. Asennetaan subversion ja luodaan hakemistot OpenIMS:lle.

# apt-get -y install subversion
...
0 upgraded, 5 newly installed, 0 to remove and 71 not upgraded.
...
# mkdir /opt/OpenIMSCore ; mkdir /opt/OpenIMSCore/ser_ims ; mkdir /opt/OpenIMSCore/FHoSS
# cd /opt/OpenIMSCore

# svn checkout https://svn.code.sf.net/p/openimscore/code/ser_ims/trunk ser_ims
...
Checked out revision 1198.

# svn checkout https://svn.code.sf.net/p/openimscore/code/FHoSS/trunk FHoSS
...
Checked out revision 1198.

Asennetaan tarvittavat paketit. Riippuen Linux-jakelun versiosta, jotkut paketit voivat poiketa versioltaan tai nimeltään.

# apt-get -y install openjdk-7-jdk make screen mysql-server ant ipsec-tools \
libmysqlclient-dev libcurl4-gnutls-dev libxml2 libxml2-dev bison flex bind9
...
10 upgraded, 81 newly installed, 0 to remove and 64 not upgraded.
...

Oletuksena OpenIMSCore kuuntelee localhost-osoitetta. Jotta clientit pääsevät palvelimeen ulkopuolelta käsiksi, täytyy IP-osoite muuttaa ja luoda tarvittavat zonet DNS-palvelimelle. Kopioidaan nimipalvelimen IMS-tietueet bindin hakemistoon ja muutetaan palveluiden IP-osoitteet C-luokan IP-avaruuteen, tässä tapauksessa palvelimen 192.168.0.50-osoitteeseen. Muutetaan domain foo.bariksi.

# cp /opt/OpenIMSCore/ser_ims/cfg/open-ims.dnszone /etc/bind/foo.bar.dnszone
# cd /etc/bind/
# sed -i 's/127.0.0.1/192.168.0.50/' foo.bar.dnszone
# sed -i 's/open-ims.test/foo.bar/g' foo.bar.dnszone

Luodaan 192.168.0.0 verkon reverse zone ja luodaan OpenIMS:lle oma konfiguraatio-tiedosto bindiin.

# vi foo.bar-rev.192
$TTL 1W
$ORIGIN 0.168.192.IN-ADDR.ARPA.
@                       1D IN SOA       ns.foo.bar. hostmaster.foo.bar. (
                                        2006101001      ; serial
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

0.168.192.IN-ADDR.ARPA.             IN  NS      ns.foo.bar.

50      IN              PTR     foo.bar.
50      IN              PTR     pcscf.foo.bar.
50      IN              PTR     icscf.foo.bar.
50      IN              PTR     scscf.foo.bar.
50      IN              PTR     hss.foo.bar.

# vi foo.bar
zone "foo.bar" {
    type master;
    file "/etc/bind/foo.bar.dnszone";

	    };

       zone "0.168.192.in-addr.arpa" {
       type master;
       file "/etc/bind/foo.bar-rev.192";
       allow-query {any;};
       notify no;
       };

Konfiguroidaan bind käyttämään IMS:lle luotuja zoneja, käynnistetään bind uudelleen ja testataan pingillä.

# echo 'include "/etc/bind/foo.bar";' >> named.conf.local
# echo "nameserver 192.168.0.50" > /etc/resolv.conf
# service bind9 restart

# ping -c 1 pcscf.foo.bar
PING pcscf.foo.bar (192.168.0.50) 56(84) bytes of data.
64 bytes from palvelin (192.168.0.50): icmp_seq=1 ttl=64 time=0.011 ms

--- pcscf.foo.bar ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.011/0.011/0.011/0.000 ms

Käännetään modulit ja asennetaan. Tehdään myös tarvittavat muutokset asetus-tiedostoihin.

# cd /opt/OpenIMSCore/ser_ims/
# make install-libs all


# cd /opt/OpenIMSCore/FHoSS
# ant compile deploy

# cd /opt/OpenIMSCore
# cp /opt/OpenIMSCore/ser_ims/cfg/* /opt/OpenIMSCore/
# ./configurator.sh
Domain Name:foo.bar
IP Adress:192.168.0.50
File to change ["all" for everything, "exit" to quit]:all

# sed -i 's/open-ims.test/foo.bar/g' /opt/OpenIMSCore/FHoSS/deploy/DiameterPeerHSS.xml
# sed -i 's/127.0.0.1/192.168.0.50/g' /opt/OpenIMSCore/FHoSS/deploy/DiameterPeerHSS.xml
# sed -i 's/open-ims.test/foo.bar/g' /opt/OpenIMSCore/FHoSS/scripts/*.sql

# mysql -u root -p < ser_ims/cfg/icscf.sql
Enter password:
# mysql -u root -p < FHoSS/scripts/hss_db.sql
Enter password:
# mysql -u root -p < FHoSS/scripts/userdata.sql
Enter password:

# sed -i 's/http:\/\/www.w3.org\/2001\/xml.xsd/file:\/\/\/opt\/OpenIMSCore\/FHoSS\/xsd\/xml.xsd/g' \
/opt/OpenIMSCore/FHoSS/xsd/ZhDataType.xsd

Valinnaista: Muutetaan *cscf käynnistys-scriptejä niin, että ajettavat prosessit nimetään. Helpottaa mahdollista debugausta. Muutama huomio käytettyihin portteihin: icscf kuuntelee porttia 3869 ja scscf porttia 3870. HSS kommunikoi näiden porttien kautta icscf:n ja scscf:n kanssa. pcscf kuuntelee Clien-yhteyksiä portissa 4060.

# cd /opt/OpenIMSCore/
# vi pcscf.sh

#!/bin/bash

./ser_ims/cfg/killser pcscf
setkey -F
setkey -FP
export LD_LIBRARY_PATH="/usr/local/lib/ser"
bash -c "exec -a pcscf /opt/OpenIMSCore/ser_ims/ser -f /opt/OpenIMSCore/pcscf.cfg -D -D"
# vi icscf.sh

 #!/bin/bash

./ser_ims/cfg/killser icscf
bash -c "exec -a icscf /opt/OpenIMSCore/ser_ims/ser -f /opt/OpenIMSCore/icscf.cfg -D -D"
ipcs -s
# vi scscf.sh

#!/bin/bash

./ser_ims/cfg/killser scscf
export LD_LIBRARY_PATH=/usr/local/lib/ser
bash -c "exec -a scscf /opt/OpenIMSCore/ser_ims/ser -f /opt/OpenIMSCore/scscf.cfg -D -D"
ipcs -s
# vi FHoSS/deploy/startup.sh

#!/bin/bash
# --------------------------------------------------------------
# Include JAR Files
# --------------------------------------------------------------

echo "Building Classpath"
CLASSPATH=$CLASSPATH:log4j.properties:.
for i in lib/*.jar; do CLASSPATH="$i":"$CLASSPATH"; done
echo "Classpath is $CLASSPATH."

# --------------------------------------------------------------
# Start-up
# --------------------------------------------------------------

bash -c "exec -a HSS $JAVA_HOME/java -cp $CLASSPATH de.fhg.fokus.hss.main.HSSContainer $1 $2 $3 $4 $5 $6 $7 $8 $9"

HSS vaatii ympäristömuuttujiin java-polut.

# vi fhoss.sh

#!/bin/bash
export JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/bin"
export CLASSPAT=.$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:/usr/lib/jvm/java-7-openjdk-amd64/lib/
cd /opt/OpenIMSCore/FHoSS/deploy/
./startup.sh

Käynnistetään prosessit screeniin. Tiettyyn screeniin pääsee screen -r "nimi" -komennolla. Esim. screen -r pcscf. Screen kiinnitetään takaisin Crtl+a+d. Screenit voi käynnistää yksitellen tai luoda käynnistystiedoston, joka käynnistää kaikki OpenIMS:n palvelut.

# vi openims.sh
#!/bin/bash

screen -dmS pcscf /opt/OpenIMSCore/pcscf.sh
screen -dmS icscf /opt/OpenIMSCore/icscf.sh
screen -dmS scscf /opt/OpenIMSCore/scscf.sh
screen -dmS hss /opt/OpenIMSCore/fhoss.sh
# chmod +x openims.sh
# ./openims.sh

Windowsille löytyy Boghe-IMS Client, jolla voidaan testata IMS:n toimintaa. Windowsissa täytyy vaihtaa nimipalvelimeksi palvelimen IP-osoite 192.168.0.50. Boghen asetuksista tulee vaihtaa protokollaksi UDP ja pcscf-palvelimen portiksi 4060. OpenIMSCoressa on kaksi valmista käyttäjää; Bob ja Alice joiden salasanat ovat bob ja alice. IMS-palvelimelle voi luoda lisää käyttäjiä ottamalla selaimella yhteyttä palvelimen osoitteeseen 192.168.0.50:8080. Oletustunnus ja salasana hss/hss.


Boghe IMS Client setup Boghe IMS Client setup Alice
Boghe IMS Client Boghe IMS Client Chat