File opensips.spec of Package opensips
#
# spec file for package OpenSIPS v.3.4 LTS
#
# Created by jamesp@vicidial.com
#
# Copyright (c) 2023 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#Compat macro for new _fillupdir macro introduced in Nov 2017
%if ! %{defined _fillupdir}
%define _fillupdir /var/adm/fillup-templates
%endif
Name: opensips
Version: 3.4.14
Release: 0
License: GPL-2.0
Summary: A very fast and flexible SIP Proxy server
Url: http://opensips.org
Group: Productivity/Telephony/SIP/Servers
Source: opensips-%{version}.tar.gz
Source1: opensips.service
Source2: sysconfig.opensips
Source3: opensips.init.suse
#Patch0:
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: bison
BuildRequires: cmake
BuildRequires: fdupes
BuildRequires: flex
BuildRequires: freeradius-client-devel
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: glibc
BuildRequires: hiredis-devel
BuildRequires: libconfuse-devel
BuildRequires: libcurl-devel
BuildRequires: libdb-4_8-devel
BuildRequires: libev-devel
BuildRequires: libexpat-devel
BuildRequires: libGeoIP-devel
BuildRequires: libjson-c-devel
BuildRequires: libmaxminddb-devel
BuildRequires: libmemcached-devel
BuildRequires: libmicrohttpd-devel
BuildRequires: librdkafka-devel
BuildRequires: libtool
BuildRequires: libuuid-devel
BuildRequires: libxml2-devel
BuildRequires: libxslt-tools
BuildRequires: lksctp-tools-devel
BuildRequires: lua51-devel
BuildRequires: lynx
BuildRequires: mysql-devel
BuildRequires: ncurses-devel
BuildRequires: net-snmp-devel
BuildRequires: openldap2-devel
#BuildRequires: osp-toolkit-devel
BuildRequires: pcre-devel
BuildRequires: pkg-config
BuildRequires: postgresql-devel
BuildRequires: python-devel
BuildRequires: sqlite3-devel
BuildRequires: unixODBC-devel
BuildRequires: zlib-devel
BuildRequires: libopenssl-1_1-devel
%if 0%{?sle_version} >= 150300
BuildRequires: librabbitmq-devel
%endif
Requires: glibc
Recommends: python3-opensips-cli
BuildRoot: %{_tmppath}/%{name}-%{version}-build
# BuildArch:
# Excluded mainly through lib dependencies, although some are just problematic
#
%if 0%{?sle_version} >= 150300
%define EXCLUDED_MODULES aaa_diameter auth_jwt cachedb_cassandra cachedb_couchbase cachedb_mongodb db_oracle osp sngtc
%else
%define EXCLUDED_MODULES aaa_diameter auth_jwt cachedb_cassandra cachedb_couchbase cachedb_mongodb db_oracle osp sngtc event_rabbitmq rabbitmq_consumer rabbitmq
%endif
%description
OpenSIPS is an Open Source SIP proxy/server for voice, video, IM, presence and
any other SIP extensions.
OpenSIPS is a multi-functional, multi-purpose signaling SIP server used by
carriers, telecoms or ITSPs for solutions like Class4/5 Residential Platforms,
Trunking / Wholesale, Enterprise / Virtual PBX Solutions, Session Border
Controllers, Application Servers, Front-End Load Balancers, IMS Platforms, Call
Centers, and many others - see the full Set of Features at
http://www.opensips.org/About/Features
The following modules are not included since the libraries to compile them
aren't available as a package or the module is just problematic :
%{EXCLUDED_MODULES}
%package bdb
Summary: Berkeley DB connectivity for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: db
Requires: %{name} = %{version}
%description bdb
The %{name}-bdb package contains Berkeley database connectivity that you
need to use digest authentication module or persistent user location
entries.
%package cpl
Summary: CPL interpreter engine for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: %{name} = %{version}
%description cpl
The opensips-cpl package contains a SIP CPL interpreter engine.
%package dbtext
Summary: DBText connectivity for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: %{name} = %{version}
%description dbtext
The %{name}-dbtext package contains dbtext database connectivity that you
need to use digest authentication module or persistent user location
entries.
%package jabber
Summary: SIP jabber message translation support for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: expat
Requires: %{name} = %{version}
%description jabber
The %{name}-jabber package contains a sip to jabber message translator.
%package lua
Summary: LUA interface for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: %{name} = %{version}
%description lua
The %{name}-lua package contains lua connectivity module for OpenSIPS.
%package mysql
Summary: MySQL connectivity for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: mysql
Requires: %{name} = %{version}
%description mysql
The %{name}-mysql package contains MySQL database connectivity that you
need to use digest authentication module or persistent user location
entries.
%if 0%{?sle_version} >= 150300
%package rabbitmq
Summary: RabbitMQ Client and Consumer modules
Group: Productivity/Telephony/SIP/Servers
Requires: %{name} = %{version}
%description rabbitmq
The %{name}-rabbitmq package contains the rabbitmq client and Consumer
modules. The client module provide thes implementation of a RabbitMQ client
for the Event Interface. It is used to send AMQP messages to a RabbitMQ
server each time the Event Interface triggers an event subscribed for. The
consumer module can subscribe consumers to a RabbitMQ broker in order to
receive AMQP messages for specified queues. The messages will be delivered
by triggering events through the OpenSIPS Event Interface.
%endif
%package sqlite
Summary: SQLite connectivity for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: sqlite3
Requires: %{name} = %{version}
%description sqlite
The %{name}-sqlite package contains SQLite database connectivity that you
need to use digest authentication module or persistent user location
entries.
%package odbc
Summary: UnixODBC connectivity for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: unixODBC
Requires: %{name} = %{version}
%description odbc
The %{name}-pgsql package contains ODBC database connectivity that you
need to use digest authentication module or persistent user location
entries.
%package cachedb
Summary: CacheDB connectivity for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: %{name} = %{version}
%description cachedb
The %{name}-cachedb package will expose the same front db api, however
it will run on top of a NoSQL back-end, emulating the SQL calls to the
back-end specific queries. Thus, any OpenSIPS module that would
regularily need a regular SQL-based database, will now be able to run
over a NoSQL back-end, allowing for a much easier distribution and
integration of the currently existing OpenSIPS modules in a distributed
environment.
%package perl
Summary: Perl modules for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: perl
Requires: %{name} = %{version}
%description perl
The %{name}-perl package contains perl modules for OpenSIPS.
%package pgsql
Summary: PostgreSQL connectivity for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: postgresql
Requires: %{name} = %{version}
%description pgsql
The %{name}-pgsql package contains PostgreSQL database connectivity that you
need to use digest authentication module or persistent user location
entries.
%package python
Summary: Python modules for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: python
Requires: %{name} = %{version}
%description python
The %{name}-python package contains python modules for OpenSIPS.
%package radius
Summary: RADIUS authentication, group and uri check modules for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: freeradius-client
Requires: %{name} = %{version}
%description radius
The %{name}-radius package contains modules for radius authentication, group
membership and uri checking.
%package rest
Summary: Rest modules for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: %{name} = %{version}
%description rest
The %{name}-perl package provides a means of interacting with an HTTP server
by doing RESTful queries, such as GET and POST.
%package rtpproxy
Summary: Rtpproxy modules for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: rtpproxy
Requires: %{name} = %{version}
%description rtpproxy
The %{name}-rtpproxy package contains rtpproxy modules for OpenSIPS.
%package rtpengine
Summary: RTPEngine modules for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: %{name} = %{version}
%description rtpengine
The %{name}-rtpengine packages contains RTP engine modules for OpenSIPS.
%package http
Summary: The pi_http modules for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: %{name} = %{version}
%description http
The %{name}-http package contains pi_http modules for OpenSIPS.
%package event
Summary: The event modules for OpenSIPS
Group: Productivity/Telephony/SIP/Servers
Requires: %{name} = %{version}
%description event
The %{name}-event package contains event modules for OpenSIPS.
%prep
%setup -q -n %{name}-%{version}
#%patch -P 0 -p1
%build
export CFLAGS="$RPM_OPT_FLAGS -DNDEBUG"
export CXXFLAGS="$RPM_OPT_FLAGS -DNDEBUG"
export TLS=1
export RADIUSCLIENT=FREERADIUS
make %{?jobs:-j%jobs} all exclude_modules="%EXCLUDED_MODULES" \
PREFIX=%{_prefix} \
basedir=/ \
cfg-prefix=/ \
cfg-dir=/etc/%{name}/ \
doc-prefix=/ \
doc-dir=%{_docdir}/%{name}/ \
modules-dir=%_lib/%{name}/modules/
%install
export CFLAGS="$RPM_OPT_FLAGS -DNDEBUG"
export CXXFLAGS="$RPM_OPT_FLAGS -DNDEBUG"
export TLS=1
export RADIUSCLIENT=FREERADIUS
make install exclude_modules="%EXCLUDED_MODULES" \
PREFIX=%{_prefix} \
basedir=%{buildroot} \
cfg-prefix=%{buildroot} \
cfg-dir=/etc/%{name}/ \
doc-prefix=%{buildroot} \
doc-dir=%{_docdir}/%{name}/ \
modules-dir=%_lib/%{name}/modules/
# Setup init/systemd files and such
install -d -m 755 %{buildroot}%{_initddir}
install -m 0755 %{SOURCE3} ./opensips.init
install -D -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/opensips.service
ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcopensips
install -d -m 755 %{buildroot}%{_fillupdir}
install -m 644 %{SOURCE2} %{buildroot}%{_fillupdir}
# Fix-ups since none of the make options appear to change where things are installed
mv %{buildroot}/usr/%{_sysconfdir}/%{name} %{buildroot}/%{_sysconfdir}/
mkdir -p %{buildroot}/%{_docdir}
mv %{buildroot}/%{_datarootdir}/doc/%{name} %{buildroot}/%{_docdir}/
rm %{buildroot}/%{_docdir}/%{name}/INSTALL
mkdir -p %{buildroot}/%{_datarootdir}/snmp/mibs
mv %{buildroot}/usr/%{_datarootdir}/snmp/mibs %{buildroot}/%{_datarootdir}/snmp/mibs
sed -i 's+^mpath=.*+mpath="%{_prefix}/%_lib/%{name}/modules/"+' %{buildroot}/%{_sysconfdir}/%{name}/opensips.cfg
#rpmlint
%fdupes -s %{buildroot}
%pre
%service_add_pre opensips.service
%post
%{fillup_only -n opensips}
%service_add_post opensips.service
%preun
%service_del_preun opensips.service
%postun
%service_del_postun opensips.service
%clean
%{__rm} -rf %{buildroot}
%files
%defattr(-,root,root)
%dir %{_docdir}/%{name}
%doc %{_docdir}/%{name}/*
%attr(0755,root,root) %dir %{_datarootdir}/%{name}
%attr(0755,root,root) %dir %{_sysconfdir}/%{name}
%config(noreplace) %{_sysconfdir}/%{name}/*
%{_fillupdir}/sysconfig.opensips
%doc opensips.init
%attr(0644,root,root) %{_unitdir}/opensips.service
%attr(0755,root,root) %{_sbindir}/*
%{_datarootdir}/snmp/mibs/*
%attr(0444,root,root) %doc %{_mandir}/man5/*
%attr(0444,root,root) %doc %{_mandir}/man8/*
%dir %{_libdir}/%{name}
%dir %{_libdir}/%{name}/modules
%{_libdir}/%{name}/modules/*
%dir %{_datarootdir}/%{name}/menuconfig_templates
%{_datarootdir}/%{name}/menuconfig_templates/*
# Excluded files cause they're part of installable extensions
%exclude %{_sysconfdir}/%{name}/dictionary.opensips
%exclude %doc %{_docdir}/%{name}/README.*_radius
%exclude %doc %{_docdir}/%{name}/README.cpl_c
%exclude %doc %{_docdir}/%{name}/README.db_berkeley
%exclude %doc %{_docdir}/%{name}/README.db_mysql
%exclude %doc %{_docdir}/%{name}/README.db_sqlite
%exclude %doc %{_docdir}/%{name}/README.db_postgres
%exclude %doc %{_docdir}/%{name}/README.db_text
%exclude %doc %{_docdir}/%{name}/README.db_unixodbc
%exclude %doc %{_docdir}/%{name}/README.jabber
%exclude %doc %{_docdir}/%{name}/README.perl*
%exclude %doc %{_docdir}/%{name}/README.lua*
%exclude %doc %{_docdir}/%{name}/README.rtpproxy*
%exclude %doc %{_docdir}/%{name}/README.rtpengine*
%exclude %{_libdir}/%{name}/modules/python.so
%exclude %{_libdir}/%{name}/modules/rtpproxy.so
%exclude %{_libdir}/%{name}/modules/aaa_radius.so
%exclude %{_libdir}/%{name}/modules/cpl_c.so
%exclude %{_libdir}/%{name}/modules/db_berkeley.so
%exclude %{_libdir}/%{name}/modules/db_mysql.so
%exclude %{_libdir}/%{name}/modules/db_postgres.so
%exclude %{_libdir}/%{name}/modules/db_text.so
%exclude %{_libdir}/%{name}/modules/db_unixodbc.so
%exclude %{_libdir}/%{name}/modules/jabber.so
%exclude %{_libdir}/%{name}/modules/perl.so
%exclude %{_libdir}/%{name}/modules/lua.so
%exclude %{_libdir}/%{name}/modules/cachedb*
%exclude %{_libdir}/%{name}/modules/db_cachedb.so
%exclude %{_libdir}/%{name}/modules/sql_cacher.so
%exclude %{_libdir}/%{name}/modules/event*
%exclude %{_libdir}/%{name}/modules/pi_http.so
%exclude %{_libdir}/%{name}/modules/db_perlvdb.so
%exclude %{_libdir}/%{name}/modules/rest_client.so
%exclude %{_libdir}/%{name}/modules/rtpengine.so
%exclude %{_libdir}/%{name}/modules/db_sqlite.so
%exclude %{_datarootdir}/%{name}/mysql/
%exclude %{_datarootdir}/%{name}/dbtext/
%exclude %{_datarootdir}/%{name}/db_berkeley/
%exclude %{_datarootdir}/%{name}/postgres
%exclude %{_sbindir}/bdb_recover
%if 0%{?sle_version} >= 150300
%exclude %doc %{_docdir}/%{name}/README.rabbitmq*
%exclude %doc %{_docdir}/%{name}/README.event_rabbitmq
%exclude %doc %{_docdir}/%{name}/README.rabbitmq_consumer
%exclude %{_libdir}/%{name}/modules/rabbitmq.so
%exclude %{_libdir}/%{name}/modules/rabbitmq_consumer.so
%files rabbitmq
%defattr(-,root,root)
%{_libdir}/%{name}/modules/rabbitmq.so
%{_libdir}/%{name}/modules/rabbitmq_consumer.so
%doc %{_docdir}/%{name}/README.event_rabbitmq
%doc %{_docdir}/%{name}/README.rabbitmq_consumer
%doc %{_docdir}/%{name}/README.rabbitmq
%endif
%files bdb
%defattr(-,root,root)
%attr(0755,root,root) %{_sbindir}/bdb_recover
%{_libdir}/%{name}/modules/db_berkeley.so
%doc %{_docdir}/%{name}/README.db_berkeley
%dir %{_datarootdir}/%{name}/db_berkeley
%{_datarootdir}/%{name}/db_berkeley/*
%files cpl
%defattr(-,root,root)
%{_libdir}/%{name}/modules/cpl_c.so
%doc %{_docdir}/%{name}/README.cpl_c
%files dbtext
%defattr(-,root,root)
%dir %{_datarootdir}/%{name}/dbtext
%{_libdir}/%{name}/modules/db_text.so
%doc %{_docdir}/%{name}/README.db_text
%{_datarootdir}/%{name}/dbtext/*
%files jabber
%defattr(-,root,root)
%{_libdir}/%{name}/modules/jabber.so
%doc %{_docdir}/%{name}/README.jabber
%files lua
%defattr(-,root,root)
%{_libdir}/%{name}/modules/lua.so
%doc %{_docdir}/%{name}/README.lua
%files mysql
%defattr(-,root,root)
%{_libdir}/%{name}/modules/db_mysql.so
%doc %{_docdir}/%{name}/README.db_mysql
%dir %{_datarootdir}/%{name}/mysql
%{_datarootdir}/%{name}/mysql/*
%files sqlite
%defattr(-,root,root)
%{_libdir}/%{name}/modules/db_sqlite.so
%doc %{_docdir}/%{name}/README.db_sqlite
%dir %{_datarootdir}/%{name}/sqlite
%{_datarootdir}/%{name}/sqlite/*
%files python
%defattr(-,root,root)
%{_libdir}/%{name}/modules/python.so
%files rtpproxy
%defattr(-,root,root)
%{_libdir}/%{name}/modules/rtpproxy.so
%doc %{_docdir}/%{name}/README.rtpproxy
%files rtpengine
%defattr(-,root,root)
%{_libdir}/%{name}/modules/rtpengine.so
%doc %{_docdir}/%{name}/README.rtpengine
%files cachedb
%defattr(-,root,root)
%{_libdir}/%{name}/modules/db_cachedb.so
%{_libdir}/%{name}/modules/cachedb_local.so
%{_libdir}/%{name}/modules/cachedb_memcached.so
%{_libdir}/%{name}/modules/cachedb_redis.so
%{_libdir}/%{name}/modules/cachedb_sql.so
%{_libdir}/%{name}/modules/sql_cacher.so
%files odbc
%defattr(-,root,root)
%{_libdir}/%{name}/modules/db_unixodbc.so
%doc %{_docdir}/%{name}/README.db_unixodbc
%files perl
%defattr(-,root,root)
%dir %{_libdir}/%{name}/perl
%{_libdir}/%{name}/modules/perl.so
%{_libdir}/%{name}/modules/db_perlvdb.so
%{_libdir}/%{name}/perl/*
%doc %{_docdir}/%{name}/README.perl
%files pgsql
%defattr(-,root,root)
%{_libdir}/%{name}/modules/db_postgres.so
%doc %{_docdir}/%{name}/README.db_postgres
%dir %{_datarootdir}/%{name}/postgres
%{_datarootdir}/%{name}/postgres/*
%files radius
%defattr(-,root,root)
%{_libdir}/%{name}/modules/*_radius.so
%doc %{_docdir}/%{name}/README.*_radius
%config %{_sysconfdir}/%{name}/dictionary.opensips
%files http
%defattr(-,root,root)
%{_libdir}/%{name}/modules/pi_http.so
%dir %{_datarootdir}/%{name}/pi_http
%{_datarootdir}/%{name}/pi_http/*
%{_libdir}/%{name}/modules/pi_http.so
%files event
%defattr(-,root,root)
%{_libdir}/%{name}/modules/event_flatstore.so
%{_libdir}/%{name}/modules/event_route.so
%{_libdir}/%{name}/modules/event_virtual.so
%{_libdir}/%{name}/modules/event_xmlrpc.so
%files rest
%defattr(-,root,root)
%{_libdir}/%{name}/modules/rest_client.so
%changelog