michael@389: ## michael@389: ## kamailio.spec -- OpenPKG RPM Package Specification michael@389: ## Copyright (c) 2011 Michael Schloh von Bennewitz michael@389: ## michael@389: ## Permission to use, copy, modify, and distribute this software for michael@389: ## any purpose with or without fee is hereby granted, provided that michael@389: ## the above copyright notice and this permission notice appear in all michael@389: ## copies. michael@389: ## michael@389: ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED michael@389: ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF michael@389: ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. michael@389: ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR michael@389: ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, michael@389: ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT michael@389: ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF michael@389: ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND michael@389: ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, michael@389: ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT michael@389: ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF michael@389: ## SUCH DAMAGE. michael@389: ## michael@389: michael@389: # package information michael@389: Name: kamailio michael@389: Summary: Open Source SIP Server michael@389: URL: http://www.kamailio.org/ michael@389: Vendor: IPTelorg GmbH, Fraunhofer FOKUS, SIP Router Project michael@389: Packager: Michael Schloh von Bennewitz michael@389: Distribution: Europalab Networks Production michael@389: Class: PLUS michael@389: Group: VoIP michael@389: License: GPL michael@389: Version: 3.1.5 michael@391: Release: 20111001 michael@389: michael@389: # package options michael@389: %option with_cons yes michael@389: %option with_fsl yes michael@389: %option with_ssl yes michael@389: %option with_sctp no michael@389: %option with_croute no michael@389: %option with_ldap no michael@389: %option with_memcached no michael@389: %option with_radius no michael@389: %option with_snmp no michael@389: %option with_bdb no michael@389: %option with_mysql no michael@389: %option with_osp no michael@389: %option with_pgsql no michael@389: %option with_odbc no michael@389: %option with_geoip no michael@389: %option with_lua no michael@389: %option with_python no michael@389: michael@389: # list of sources michael@389: Source0: http://www.kamailio.org/pub/kamailio/%{version}/src/kamailio-%{version}_src.tar.gz michael@389: Source2: rc.kamailio michael@389: Source3: fsl.kamailio michael@389: michael@389: # build information michael@389: Prefix: %{l_prefix} michael@389: BuildRoot: %{l_buildroot} michael@389: BuildPreReq: OpenPKG, openpkg >= 20060823 michael@389: PreReq: OpenPKG, openpkg >= 20060823 michael@389: BuildPreReq: libxml, expat, curl, readline michael@389: PreReq: libxml, expat, curl, readline michael@389: BuildPreReq: make, gcc, flex, bison, sed, pkgconfig michael@389: PreReq: bash michael@389: %if "%{with_cons}" == "yes" michael@389: PreReq: perl-dbi, perl-term michael@389: %endif michael@389: %if "%{with_fsl}" == "yes" michael@389: BuildPreReq: fsl michael@389: PreReq: fsl michael@389: %endif michael@389: %if "%{with_ssl}" == "yes" michael@389: BuildPreReq: openssl michael@389: PreReq: openssl michael@389: %endif michael@389: %if "%{with_croute}" == "yes" michael@389: BuildPreReq: confuse michael@389: PreReq: confuse michael@389: %endif michael@389: %if "%{with_ldap}" == "yes" michael@389: BuildPreReq: openldap michael@389: PreReq: openldap michael@389: %endif michael@389: %if "%{with_memcached}" == "yes" michael@389: BuildPreReq: memcached michael@389: PreReq: memcached michael@389: %endif michael@389: %if "%{with_osp}" == "yes" michael@389: BuildPreReq: osptoolkit michael@389: PreReq: osptoolkit michael@389: %endif michael@389: %if "%{with_radius}" == "yes" michael@389: BuildPreReq: radiusclient michael@389: PreReq: radiusclient michael@389: %endif michael@389: %if "%{with_snmp}" == "yes" michael@389: BuildPreReq: snmp michael@389: PreReq: snmp michael@389: %endif michael@389: %if "%{with_bdb}" == "yes" michael@389: BuildPreReq: db michael@389: PreReq: db michael@389: %endif michael@389: %if "%{with_mysql}" == "yes" michael@389: BuildPreReq: mysql michael@389: PreReq: mysql michael@389: %endif michael@389: %if "%{with_pgsql}" == "yes" michael@389: BuildPreReq: postgresql michael@389: PreReq: postgresql michael@389: %endif michael@389: %if "%{with_odbc}" == "yes" michael@389: BuildPreReq: unixodbc michael@389: PreReq: unixodbc michael@389: %endif michael@389: %if "%{with_geoip}" == "yes" michael@389: BuildPreReq: geoip michael@389: PreReq: geoip michael@389: %endif michael@389: %if "%{with_lua}" == "yes" michael@389: BuildPreReq: lua michael@389: PreReq: lua michael@389: %endif michael@389: %if "%{with_python}" == "yes" michael@389: BuildPreReq: python michael@389: PreReq: python michael@389: %endif michael@389: AutoReq: no michael@389: AutoReqProv: no michael@389: michael@389: %description michael@389: Kamailio is (beside Opensips) a successor to OpenSER, which in michael@389: turn was spawned from FhG FOKUS's SIP Express Router (SER). It michael@389: provides SIP (RFC3621) registrar, proxy and routing functionality. michael@389: A C shell like scripting language provides for control over the michael@389: server's behaviour. It's modular architecture allows for fine michael@389: grained loading of required functionality. michael@389: michael@389: Kamailio can be used as a: Kamailio fits in scenarios: michael@389: michael@389: Registrar server SIP trunking michael@389: Router, proxy SIP load balancing michael@389: Redirect server SIP front end termination michael@389: Presence agent Residential providers michael@389: Back to back user agent white label solutions michael@389: Instant messaging server Enterprise services michael@389: SIP to SMS gateway LCR for multi gateways michael@389: SIP to XMPP gateway michael@389: Load balancer or dispatcher michael@389: Front end for asterisk michael@389: NAT traversal unit michael@389: Application server michael@389: michael@389: %track michael@389: prog kamailio = { michael@389: version = %{version} michael@389: url = http://www.kamailio.org/pub/kamailio/ michael@389: regex = (\d+\.\d+\.\d+)/ michael@389: url = http://www.kamailio.org/pub/kamailio/__NEWVER__/src/ michael@389: regex = kamailio-(__VER__)_src\.tar\.gz michael@389: } michael@389: michael@389: %prep michael@389: %setup -q michael@389: %{l_shtool} subst \ michael@389: -e 's;\$(LOCALBASE)/[^/][^/]*/sctp.h;;g' \ michael@389: -e 's;\$(LOCALBASE)/ssl/include;`%{l_prefix}/bin/pkg-config --cflags-only-I openssl`;g' \ michael@389: -e 's;\$(LOCALBASE)/ssl/lib;`%{l_prefix}/bin/pkg-config --libs openssl`;g' \ michael@389: -e 's;LOCALBASE *[\?:]*=.*;LOCALBASE = %{l_prefix};g' \ michael@391: -e 's;\(data_dir\) *=.*;\1 = share/$(MAIN_NAME);g' \ michael@391: -e 's;\(doc_dir\) *=.*;\1 = share/$(MAIN_NAME)/doc;g' \ michael@391: -e 's;\(man_dir\) *=.*;\1 = man/;g' \ michael@389: Makefile.defs michael@389: %{l_shtool} subst \ michael@389: -e 's;CFLAGS *= *$;CFLAGS = %{l_cflags -O};g' \ michael@389: -e 's;LDFLAGS *= *$;LDFLAGS = %{l_ldflags};g' \ michael@389: -e 's;C_INCLUDES *= *$;C_INCLUDES = %{l_cppflags};g' \ michael@389: Makefile.defs michael@389: %{l_shtool} subst \ michael@389: -e 's;/usr/include/readline/readline.h;;g' \ michael@389: utils/sercmd/Makefile michael@389: %{l_shtool} subst \ michael@389: -e 's;-I$(LOCALBASE)/Berkeley[^ ]* *;;g' \ michael@389: -e 's;-I$(LOCALBASE)/include[^ ]* *;;g' \ michael@389: -e 's;-I$(SYSBASE)/include[^ ]* *;;g' \ michael@389: -e 's;LIBS=.*;LIBS=`%{l_prefix}/bin/pkg-config --libs db`;g' \ michael@389: utils/db_berkeley/Makefile michael@389: %{l_shtool} subst \ michael@391: -e 's;\(\$(data_prefix)/\$(data_dir)/.*\)/kamailio;\1;g' \ michael@389: utils/kamctl/Makefile michael@389: %{l_shtool} subst \ michael@389: -e 's;\(radiusclient\)-ng;\1;g' \ michael@389: -e 's;/usr/local\(/etc/radiusclient/radiusclient.conf\);%{l_prefix}\1;' \ michael@389: Makefile.radius \ michael@389: lib/kcore/radius.h \ michael@389: modules_s/avp_radius/avp_radius.c \ michael@389: modules_s/uri_radius/checks.c \ michael@389: modules_s/uri_radius/urirad_mod.c \ michael@389: modules_s/acc_radius/acc_radius.c \ michael@389: modules_s/auth_radius/authrad_mod.c \ michael@389: modules_s/auth_radius/sterman.h michael@389: %{l_shtool} subst \ michael@389: -e 's;\(DEFS *[\?:+]*=[^\\]*\);\1 -D__EXTENSIONS__;g' \ michael@389: modules/db_mysql/Makefile \ michael@389: modules/xmlrpc/Makefile michael@389: %{l_shtool} subst \ michael@389: -e 's;\(-keyout.*\);\1 || true;' \ michael@389: modules/tls/sip-router_cert.sh michael@389: michael@389: %build michael@389: # select modules michael@389: modslist='acc alias_db auth auth_identity avp avpops avp_db benchmark blst call_control cfgutils cfg_db cfg_rpc counters cpl-c ctl db_text db_flatstore db_ops debugger dialog dialplan dispatcher diversion domain domainpolicy drouting eval exec enum fifo gflags group htable identity imc kex lcr malloc_test mangler matrix maxfwd mi_datagram mi_fifo mi_rpc mediaproxy mqueue msilo mtree nathelper nat_traversal options path pdb pdt peering perl perlvdb permissions pike pipelimit prefix_route presence presence_conference presence_dialoginfo presence_mwi presence_xml privacy pua pua_bla pua_dialoginfo pua_mi pua_usrloc pua_xmpp pv qos ratelimit regex registrar rr rls rtimer rtpproxy sanity seas siptrace siputils sl sms speeddial sqlops sst statistics textops textopsx timer tm tmx topoh uac uac_redirect uri uri_db userblacklist usrloc utils xcap xcap_client xcap_server xhttp xlog xmlops xmlrpc xmpp' michael@389: %if "%{with_ssl}" == "yes" michael@389: modslist="$modslist tls" michael@389: %endif michael@389: %if "%{with_croute}" == "yes" michael@389: modslist="$modslist carrierroute" michael@389: %endif michael@389: %if "%{with_ldap}" == "yes" michael@389: modslist="$modslist ldap h350" michael@389: %endif michael@389: %if "%{with_memcached}" == "yes" michael@389: modslist="$modslist memcached" michael@389: %endif michael@389: %if "%{with_osp}" == "yes" michael@389: modslist="$modslist osp" michael@389: %endif michael@389: %if "%{with_radius}" == "yes" michael@389: modslist="$modslist acc_radius auth_radius avp_radius group misc_radius uri_radius" michael@389: %endif michael@389: %if "%{with_snmp}" == "yes" michael@389: modslist="$modslist snmpstats" michael@389: %endif michael@389: %if "%{with_bdb}" == "yes" michael@389: modslist="$modslist db_berkeley" michael@389: %endif michael@389: %if "%{with_mysql}" == "yes" michael@389: modslist="$modslist db_mysql" michael@389: %endif michael@389: %if "%{with_pgsql}" == "yes" michael@389: modslist="$modslist db_postgres" michael@389: %endif michael@389: %if "%{with_odbc}" == "yes" michael@389: modslist="$modslist db_unixodbc" michael@389: %endif michael@389: %if "%{with_lua}" == "yes" michael@389: modslist="$modslist app_lua" michael@389: %endif michael@389: %if "%{with_python}" == "yes" michael@389: modslist="$modslist app_python" michael@389: %endif michael@389: %if "%{with_geoip}" == "yes" michael@389: modslist="$modslist geoip" michael@389: %endif michael@389: michael@389: # build configuration michael@389: %{l_make} %{l_mflags} \ michael@389: CC="%{l_cc}" \ michael@389: FLAVOUR=kamailio \ michael@389: %if "%{with_sctp}" == "yes" michael@389: SCTP=1 \ michael@389: %endif michael@389: %if "%{with_ssl}" == "yes" michael@389: TLS_HOOKS=1 \ michael@389: %endif michael@389: prefix=%{l_prefix} \ michael@389: cfg michael@389: michael@389: # build program michael@389: %{l_make} %{l_mflags -O} \ michael@389: CC="%{l_cc}" \ michael@389: %if "%{with_sctp}" == "yes" michael@389: SCTP=1 \ michael@389: %endif michael@389: %if "%{with_ssl}" == "yes" michael@389: TLS_HOOKS=1 \ michael@389: %endif michael@389: prefix=%{l_prefix} \ michael@389: kamailio michael@389: michael@389: # build utilities michael@389: %{l_make} %{l_mflags -O} \ michael@389: CC="%{l_cc}" \ michael@389: %if "%{with_sctp}" == "yes" michael@389: SCTP=1 \ michael@389: %endif michael@389: %if "%{with_ssl}" == "yes" michael@389: TLS_HOOKS=1 \ michael@389: %endif michael@389: prefix=%{l_prefix} \ michael@389: modules="$modslist" \ michael@389: utils utils/kamctl michael@389: michael@389: # build modules michael@389: %{l_make} %{l_mflags -O} \ michael@389: CC="%{l_cc}" \ michael@389: LD_RPATH=-Wl,-rpath, \ michael@389: SER_RPATH_LST=%{l_prefix}/lib/kamailio \ michael@389: %if "%{with_sctp}" == "yes" michael@389: SCTP=1 \ michael@389: %endif michael@389: %if "%{with_ssl}" == "yes" michael@389: TLS_HOOKS=1 \ michael@389: %endif michael@389: include_modules="$modslist" \ michael@389: skip_modules="" \ michael@389: prefix=%{l_prefix} \ michael@389: every-module michael@389: michael@389: %install michael@389: rm -rf $RPM_BUILD_ROOT michael@389: michael@389: # select modules michael@389: modslist='acc alias_db auth auth_identity avp avpops avp_db benchmark blst call_control cfgutils cfg_db cfg_rpc counters cpl-c ctl db_text db_flatstore db_ops debugger dialog dialplan dispatcher diversion domain domainpolicy drouting eval exec enum fifo gflags group htable identity imc kex lcr malloc_test mangler matrix maxfwd mi_datagram mi_fifo mi_rpc mediaproxy mqueue msilo mtree nathelper nat_traversal options path pdb pdt peering perl perlvdb permissions pike pipelimit prefix_route presence presence_conference presence_dialoginfo presence_mwi presence_xml privacy pua pua_bla pua_dialoginfo pua_mi pua_usrloc pua_xmpp pv qos ratelimit regex registrar rr rls rtimer rtpproxy sanity seas siptrace siputils sl sms speeddial sqlops sst statistics textops textopsx timer tm tmx topoh uac uac_redirect uri uri_db userblacklist usrloc utils xcap xcap_client xcap_server xhttp xlog xmlops xmlrpc xmpp' michael@389: %if "%{with_ssl}" == "yes" michael@389: modslist="$modslist tls" michael@389: %endif michael@389: %if "%{with_croute}" == "yes" michael@389: modslist="$modslist carrierroute" michael@389: %endif michael@389: %if "%{with_ldap}" == "yes" michael@389: modslist="$modslist ldap h350" michael@389: %endif michael@389: %if "%{with_memcached}" == "yes" michael@389: modslist="$modslist memcached" michael@389: %endif michael@389: %if "%{with_osp}" == "yes" michael@389: modslist="$modslist osp" michael@389: %endif michael@389: %if "%{with_radius}" == "yes" michael@389: modslist="$modslist acc_radius auth_radius avp_radius group misc_radius uri_radius" michael@389: %endif michael@389: %if "%{with_snmp}" == "yes" michael@389: modslist="$modslist snmpstats" michael@389: %endif michael@389: %if "%{with_bdb}" == "yes" michael@389: modslist="$modslist db_berkeley" michael@389: %endif michael@389: %if "%{with_mysql}" == "yes" michael@389: modslist="$modslist db_mysql" michael@389: %endif michael@389: %if "%{with_pgsql}" == "yes" michael@389: modslist="$modslist db_postgres" michael@389: %endif michael@389: %if "%{with_odbc}" == "yes" michael@389: modslist="$modslist db_unixodbc" michael@389: %endif michael@389: %if "%{with_lua}" == "yes" michael@389: modslist="$modslist app_lua" michael@389: %endif michael@389: %if "%{with_python}" == "yes" michael@389: modslist="$modslist app_python" michael@389: %endif michael@389: %if "%{with_geoip}" == "yes" michael@389: modslist="$modslist geoip" michael@389: %endif michael@389: michael@389: # install program, utils, and modules michael@389: %{l_make} %{l_mflags} \ michael@389: INSTALL="%{l_shtool} install -c" \ michael@389: INSTALL_CFG="%{l_shtool} install -c" \ michael@389: INSTALL_BIN="%{l_shtool} install -c" \ michael@389: INSTALL_SCRIPT="%{l_shtool} install -c" \ michael@389: INSTALL_MODULES="%{l_shtool} install -c" \ michael@389: INSTALL_LIB="%{l_shtool} install -c" \ michael@389: INSTALL_DOC="%{l_shtool} install -c" \ michael@389: INSTALL_MAN="%{l_shtool} install -c" \ michael@389: INSTALL_SHARE="%{l_shtool} install -c" \ michael@389: basedir=$RPM_BUILD_ROOT \ michael@389: prefix=%{l_prefix} \ michael@389: doc-dir=share/kamailio/doc \ michael@389: man-dir=man \ michael@389: data-dir=share/kamailio \ michael@389: include_modules="$modslist" \ michael@389: skip_modules="" \ michael@389: install michael@389: michael@389: # strip down installation michael@389: strip $RPM_BUILD_ROOT%{l_prefix}/sbin/* >/dev/null 2>&1 || true michael@389: michael@389: # create installation hierarchy michael@389: %{l_shtool} mkdir -f -p -m 700 \ michael@389: $RPM_BUILD_ROOT%{l_prefix}/var/kamailio michael@389: michael@389: # install OSSP fsl configuration michael@389: %{l_shtool} mkdir -f -p -m 755 \ michael@389: $RPM_BUILD_ROOT%{l_prefix}/etc/fsl michael@389: %{l_shtool} install -c -m 644 %{l_value -s -a} \ michael@389: %{SOURCE fsl.kamailio} \ michael@389: $RPM_BUILD_ROOT%{l_prefix}/etc/fsl/ michael@389: michael@389: # install runcommand script michael@389: %{l_shtool} mkdir -f -p -m 755 \ michael@389: $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d michael@389: %{l_shtool} install -c -m 755 %{l_value -s -a} \ michael@389: %{SOURCE rc.kamailio} \ michael@389: $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/ michael@389: michael@389: # determine installation files michael@389: %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \ michael@389: %{l_files_std} \ michael@389: '%not %dir %{l_prefix}/etc/fsl' \ michael@389: '%config %{l_prefix}/etc/fsl/*' \ michael@389: '%config %{l_prefix}/etc/kamailio/*' \ michael@389: '%doc %{l_prefix}/share/kamailio/doc/*' \ michael@389: '%attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/kamailio' michael@389: michael@389: %files -f files michael@389: michael@389: %clean michael@389: rm -rf $RPM_BUILD_ROOT michael@389: michael@389: %post michael@389: # on install, setup database (kamctl db create /pfx/var/kamailio/db) michael@389: if [ ! -d $RPM_INSTALL_PREFIX/var/kamailio/db ]; then michael@389: %{l_shtool} mkdir -f -p -m 700 -o %{l_rusr} -g %{l_rgrp} \ michael@389: $RPM_INSTALL_PREFIX/var/kamailio/db michael@389: rm -f $RPM_INSTALL_PREFIX/share/kamailio/dbtext/*.orig michael@389: %{l_shtool} install -c -m 600 -o %{l_rusr} -g %{l_rgrp} \ michael@389: $RPM_INSTALL_PREFIX/share/kamailio/dbtext/* \ michael@389: $RPM_INSTALL_PREFIX/var/kamailio/db/ michael@389: fi michael@389: michael@389: # after upgrade, restart service michael@389: [ $1 -eq 2 ] || exit 0 michael@389: eval `%{l_rc} kamailio status 2>/dev/null` michael@389: [ ".$kamailio_active" = .yes ] && %{l_rc} kamailio restart michael@389: exit 0 michael@389: michael@389: %preun michael@389: # before erase, stop service and remove log files michael@389: [ $1 -eq 0 ] || exit 0 michael@389: %{l_rc} kamailio stop 2>/dev/null michael@389: rm -rf $RPM_INSTALL_PREFIX/var/kamailio/db 2>/dev/null || true michael@389: rm -f $RPM_INSTALL_PREFIX/var/kamailio/* 2>/dev/null || true michael@389: exit 0 michael@389: