pkg/kamailio/alpine/APKBUILD
4fc13e27
 # Contributor: Ɓukasz Jendrysik <scadu@yandex.com>
 # Contributor: Michael Mason <ms13sp@gmail.com>
 # Contributor: Leonardo Arena <rnalrd@gmail.com>
 # Maintainer: Nathan Angelacos <nangel@alpinelinux.org>
b0929e75
 
4fc13e27
 pkgname=kamailio
aaa556f2
 pkgver=5.4.6
4fc13e27
 pkgrel=0
 
 # If building from a git snapshot, specify the gitcommit
c9b3ed04
 # If building a proper release, leave gitcommit blank or commented
44263839
 _gitcommit=991fe9b28e0e201309048f3b38a135037e40357a
4fc13e27
 
 [ ! -z "${_gitcommit}" ] && pkgver="${pkgver}.$(date +%Y%m%d)"
 [ ! -z "${_gitcommit}" ] && _suffix="-${_gitcommit:0:7}"
 [ ! -z "${_gitcommit}" ] && builddir="$srcdir/$pkgname-$_gitcommit" || builddir="$srcdir/$pkgname-$pkgver"
 [ -z "${_gitcommit}" ] && _gitcommit="${pkgver}"
 
 pkgdesc="Open Source SIP Server"
 url="http://www.kamailio.org/"
 arch="all"
 pkgusers="kamailio"
 pkggroups="kamailio"
 arch="all"
6aca6c0d
 license="GPL-2.0"
44263839
 depends="gawk"
c9b3ed04
 options="!check"
30746000
 makedepends="bison db-dev flex freeradius-client-dev expat-dev
 	lksctp-tools-dev perl-dev postgresql-dev python2-dev python3-dev
 	pcre-dev mariadb-dev libxml2-dev curl-dev unixodbc-dev
 	confuse-dev ncurses-dev sqlite-dev lua-dev openldap-dev openssl-dev
 	net-snmp-dev libuuid libev-dev jansson-dev json-c-dev libevent-dev
 	linux-headers libmemcached-dev rabbitmq-c-dev hiredis-dev
fa7e915b
 	ruby-dev libmaxminddb-dev libunistring-dev mongo-c-driver-dev"
30746000
 
4fc13e27
 install="$pkgname.pre-install $pkgname.pre-upgrade"
 
6aca6c0d
 # secfixes:
 #   5.1.4-r0:
 #   - CVE-2018-14767
 
4fc13e27
 # See Makefile.groups for the list of recommended modules for
 # each package.  What follows is a simplified version of Makefile.groups
 #
 # Alpine specific changes:
 #
 # _mod_list_debugger is not defined in the orginal
 #
 # Move avp from _mod_list_extras to _mod_list_basic, so that we can create
 # a kamailio-extras package
 #
 # Remove db_text from _mod_list_db because we create a separate dbtext package
 #
 # - basic used modules, with no extra dependency (widespread usage)
 _mod_list_basic="avp async auth benchmark blst cfg_rpc cfgt cfgutils corex counters \
 		ctl debugger diversion enum exec gzcompress ipops kex mangler \
 		maxfwd mediaproxy mqueue \
 		nat_traversal nathelper path pike pv ratelimit rr rtimer \
 		rtpproxy sanity sdpops siputils sl smsops statsc statistics \
 		textops textopsx tm tmx topoh topos xlog rtpengine stun sipt"
 
 # - extra used modules, with no extra dependency
 _mod_list_extras="auth_diameter call_control cnxcc dmq domainpolicy log_custom \
 		msrp pdb qos sca seas sms sst timer tmrec tsilo uac_redirect \
 		xhttp xhttp_rpc xprint nosip dmq_usrloc statsd rtjson tcpops \
 		auth_xkeys"
 
 # - common modules depending on database
f21eaf12
 _mod_list_db="acc alias_db auth_db avpops cfg_db db_berkeley db_flatstore \
4fc13e27
 		db_cluster dialog dispatcher domain drouting group \
 		htable imc matrix mohqueue msilo mtree p_usrloc pdt permissions \
 		pipelimit prefix_route registrar sipcapture siptrace speeddial \
 		sqlops uac uri_db userblacklist usrloc"
 
 # - common modules depending on database, using UID db schema
 _mod_list_dbuid="db2_ops uid_auth_db uid_avp_db uid_domain uid_gflags \
 		uid_uri_db"
 
 # - modules for devel purposes
 _mod_list_devel="malloc_test print print_lib"
 
 # - modules depending on pcre3 library
 _mod_list_pcre="dialplan lcr regex"
 
 # - modules depending on radius client library
 _mod_list_radius="acc_radius auth_radius misc_radius peering"
 
 # - modules depending on ldap client library
 _mod_list_ldap="db2_ldap h350 ldap"
 
 # - modules depending on mysql client library
 _mod_list_mysql="db_mysql"
 
 # - modules depending on postgres client library
 _mod_list_postgres="db_postgres"
 
 # - modules depending on unixodbc library
 _mod_list_unixodbc="db_unixodbc"
 
 # - modules depending on mysql cassandra library
 _mod_list_cassandra="db_cassandra ndb_cassandra"
 
 # - modules depending on xml2 library
 _mod_list_cpl="cplc"
 
 # - modules depending on xml2 library
 _mod_list_xml="xhttp_pi xmlrpc xmlops"
 
 # - modules depending on net-snmp library
 _mod_list_snmpstats="snmpstats"
 
 # - modules depending on expat library
 _mod_list_xmpp="xmpp"
 
 # - modules depending on confuse library
 _mod_list_carrierroute="carrierroute"
 
 # - modules depending on bdb (db4) library
 _mod_list_berkeley="db_berkeley"
 
 # - modules depending on curl library
 _mod_list_utils="utils http_client"
 
 # - async http_async_client
 _mod_list_http_async="http_async_client"
 
 # - modules depending on purple library
 _mod_list_purple="purple"
 
 # - modules depending on memcache library
 _mod_list_memcached="memcached"
 
 # - modules depending on openssl library
 _mod_list_tls="auth_identity crypto tls"
 
 # - modules depending on openssl library
 _mod_list_outbound="outbound"
 
 # - modules depending on unistring library
 _mod_list_websocket="websocket"
 
 # - modules depending on libval-threads libcrypto libsres libpthread
 _mod_list_dnssec="dnssec"
 
 # - modules depending on libsctp
 _mod_list_sctp="sctp"
 
 # - modules depending on openssl library
 _mod_list_authephemeral="auth_ephemeral"
 
 # - modules related to SIMPLE presence extensions
 _mod_list_presence="presence presence_conference presence_dialoginfo \
 			presence_mwi presence_profile presence_reginfo \
 			presence_xml \
 			pua pua_bla pua_dialoginfo pua_reginfo \
 			pua_rpc pua_usrloc pua_xmpp \
 			rls xcap_client xcap_server"
 
 # - modules depending on lua library
5c26e09f
 _mod_list_lua="app_lua app_lua_sr"
4fc13e27
 
 # - modules depending on perl library
 _mod_list_perl="app_perl db_perlvdb"
 
30746000
 # - modules depending on python2 library
4fc13e27
 _mod_list_python="app_python"
 
48624059
 # - modules depending on ruby library
 _mod_list_ruby="app_ruby"
 
30746000
 # - modules depending on python3 libarary
 _mod_list_python3="app_python3"
 
 # - modules depending on ruby library
 _mod_list_ruby="app_ruby"
 
4fc13e27
 # - modules depending on rabbitmq
 _mod_list_rabbitmq="rabbitmq"
 
 # - modules depending on geoip2 library
 _mod_list_geoip2="geoip2"
 
 # - modules depending on sqlite library
 _mod_list_sqlite="db_sqlite"
 
 # - modules depending on oracle library
 _mod_list_oracle="db_oracle"
 
 # - modules depending on json library
fd988201
 _mod_list_json="json jsonrpcc jsonrpcs pua_json"
4fc13e27
 
 # - modules depending on redis library
fd988201
 _mod_list_redis="db_redis ndb_redis topos_redis"
4fc13e27
 
 # - modules depending on mono library
 _mod_list_mono="app_mono"
 
 # - modules related to IMS extensions
44263839
 _mod_list_ims="cdp cdp_avp ims_dialog ims_diameter_server ims_auth ims_isc ims_icscf ims_qos \
fd988201
 		ims_ocs ims_registrar_pcscf ims_registrar_scscf ims_usrloc_pcscf \
4fc13e27
 		ims_usrloc_scscf ims_charging"
 
 # - modules depending on osp toolkit library
 _mod_list_osp="osp"
 
 # - modules depending on java library
 _mod_list_java="app_java"
 
 # - modules depending on iptables library
 _mod_list_iptrtpproxy="iptrtpproxy"
 
 # - modules depending on gzip library
 _mod_list_gzcompress="gzcompress"
 
 # - modules depending on uuid library
 _mod_list_uuid="uuid"
 
 # - modules depending on ev library
 _mod_list_ev="evapi"
 
 # - modules depending on kazoo/rabbitmq
 _mod_list_kazoo="kazoo"
 
 # - modules depending on mongodb
 _mod_list_mongodb="db_mongodb ndb_mongodb"
 
 # - modules depending on jansson library
fd988201
 _mod_list_jansson="acc_json jansson janssonrpcc"
4fc13e27
 
 # - modules depending on libm
 _mod_list_jsdt="app_jsdt"
 
44263839
 # - modules depending on sqlang
 _mod_list_sqlang="app_sqlang"
 
 # - modules depending on rabbitmq
 _mod_list_rabbitmq="rabbitmq"
 
 # - modules depending on sipdump
 _mod_list_sipdump="sipdump"
 
4fc13e27
 
 # Alpine Specific
 _mod_list_debugger="$_mod_list_devel benchmark debugger"
 
 # Standard modules in main pkg
 _module_group_kstandard="$_mod_list_basic $_mod_list_dbuid $_mod_list_pcre"
 
 # END Makefile.groups #############################################################
 
30746000
 subpackages="$pkgname-doc $pkgname-dbg $pkgname-openrc"
4fc13e27
 _modules="$_module_group_kstandard"
 for _i in db postgres sqlite dbtext mysql \
 	cpl xml unixodbc snmpstats xmpp carrierroute \
 	ldap utils tls presence lua ims outbound debugger \
fa7e915b
 	extras json websocket authephemeral mongodb\
44263839
 	uuid ev memcached redis geoip2 jansson sqlang sipdump \
30746000
 	jsdt http_async kazoo rabbitmq sctp radius perl python \
 	python3 ruby; do
4fc13e27
 
    subpackages="$subpackages $pkgname-$_i"
    eval "_modules=\"\$_modules \$_mod_list_$_i\""
 done
 
 source="${pkgname}-${pkgver}${_suffix}.tar.gz::https://github.com/kamailio/$pkgname/archive/$_gitcommit.tar.gz
 	kamailio.initd
 	"
 
c9b3ed04
 get_source_from_local_git(){
         cd ../../.. && git archive --format=tar.gz --prefix=${pkgname}-${_gitcommit}/ -o "$SRCDEST"/${pkgname}-${pkgver}${_suffix}.tar.gz ${_gitcommit} && cd pkg/kamailio/alpine || return 1
         echo Created dist archive "$SRCDEST"/${pkgname}-${pkgver}${_suffix}.tar.gz
 }
 
 get_source_from_github(){
         echo Cannot create archive using local git repo. Trying create source from GutHub.
         wget -O "$SRCDEST"/${pkgname}-${pkgver}${_suffix}.tar.gz https://github.com/kamailio/$pkgname/archive/${_gitcommit}.tar.gz || return 1
         echo Created dist archive "$SRCDEST"/${pkgname}-${pkgver}${_suffix}.tar.gz
 }
 
4fc13e27
 snapshot() {
         if [ ! -f "$SRCDEST"/${pkgname}-${pkgver}${_suffix}.tar.gz ]; then
c9b3ed04
             get_source_from_local_git || get_source_from_github
4fc13e27
         fi
c9b3ed04
         SHA512SUM=$(sha512sum "$SRCDEST"/${pkgname}-${pkgver}${_suffix}.tar.gz | sed -e "s:${SRCDEST}/::")
4fc13e27
         sed -i -e "s/^\(sha512sums=.\).*/\1$SHA512SUM/" APKBUILD
 }
 
 prepare() {
 	default_prepare
 	cd "$builddir"
 
 	cd utils/kamctl/
475a54cb
 	sed -i -e 's:/run/kamailio.pid:/run/kamailio/kamailio.pid:g' \
4fc13e27
 		kamctl.base kamctlrc || return 1
 	# we actually dont need bash
 	sed -i -e 's:/bin/bash:/bin/sh:' kamctl kamdbctl \
 		|| return 1
 }
 
 build() {
 	cd "$builddir"
 	make FLAVOUR=kamailio STUN=1 \
 		PREFIX=/usr \
 		CC_EXTRA_OPTS="$CFLAGS -D_GNU_SOURCE" \
 		cfg_target=/etc/kamailio/ \
 		run_prefix="" \
 		include_modules="$_modules" \
 		LIBDIR=lib \
 		DESTDIR="$pkgdir" \
 		cfg_prefix="$pkgdir" \
 		cfg
38d746e6
 	make EMBEDDED_UTF8_DECODE=1 STUN=1 FREERADIUS=1 \
4fc13e27
 		all || return 1
 }
 
 package() {
 	cd "$builddir"
38d746e6
 	make  FREERADIUS=1 -j1 install || return 1
4fc13e27
 
 	install -m755 -D "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname
475a54cb
 	install -d -o kamailio "$pkgdir"/run/kamailio
4fc13e27
 }
 
 _mv_mod() {
 	local moddir=usr/lib/kamailio/modules i=
 	mkdir -p "$subpkgdir"/$moddir
 	for i in $@; do
 		mv "$pkgdir"/$moddir/$i.so "$subpkgdir"/$moddir/ || return 1
 	done
 }
 
 _generic_pkg() {
 	pkgdesc="Kamailio $1"
 	depends="$pkgname"
 	_mv_mod $2
 }
 
 
 _db_driver() {
 	pkgdesc="Database drivers for $1"
 	depends="$pkgname $pkgname-db"
 	_mv_mod db_$2 || return 1
 	mkdir -p "$subpkgdir"/usr/share/kamailio \
 		"$subpkgdir"/usr/lib/kamailio/kamctl
 	mv "$pkgdir"/usr/share/kamailio/$3 \
 		"$subpkgdir"/usr/share/kamailio/ || return 1
 	mv "$pkgdir"/usr/lib/kamailio/kamctl/*.$4 \
 		"$subpkgdir"/usr/lib/kamailio/kamctl/ || return 1
 }
 
 
 db() {
 	_generic_pkg "modules using a database backend" "$_mod_list_db"
 }
 
 postgres() {
 	_db_driver Postgres postgres postgres pgsql
 }
 
 mysql() {
 	_db_driver Mysql mysql mysql mysql
 }
 
 sqlite() {
 	_db_driver SQlite sqlite db_sqlite sqlite
 }
 
 dbtext() {
 	_db_driver DBText text dbtext dbtext || return 1
 	# kamdbctl.dbtext is a python script - but we will not make python
 	# a dependency because kamdbctl is not normaly used
 	depends="$depends"
 	mkdir -p "$subpkgdir"/usr/lib/kamailio/kamctl || return 1
 	mv "$pkgdir"/usr/lib/kamailio/kamctl/dbtextdb \
 		"$subpkgdir"/usr/lib/kamailio/kamctl/ || return 1
 }
 
 cpl() {
 	_generic_pkg "CPL (Call Processing Language) interpreter" \
 		"$_mod_list_cpl"
 }
 
 xml() {
 	_generic_pkg "XML related modules: $_mod_list_xml" \
 		"$_mod_list_xml" || return 1
 	mkdir -p "$subpkgdir"/usr/share/kamailio
 	mv "$pkgdir"/usr/share/kamailio/xhttp_pi \
 		"$subpkgdir"/usr/share/kamailio || return 1
 	mkdir -p "$subpkgdir"/etc/kamailio/
 	mv "$pkgdir"/etc/kamailio/pi_framework.xml \
 		"$subpkgdir"/etc/kamailio || return 1
 }
 
 unixodbc() {
 	_generic_pkg "Database drivers for unixodbc" \
 		"$_mod_list_unixodbc"
 }
 
 snmpstats() {
 	_generic_pkg "SNMP statistics support" \
 		"$_mod_list_snmpstats" || return 1
 	mkdir -p "$subpkgdir"/usr/share/snmp
 	mv "$builddir"/src/modules/snmpstats/mibs \
 		"$subpkgdir"/usr/share/snmp/ || return 1
 }
 
 xmpp() {
 	_generic_pkg "XMPP (Jabber) gateway" \
 		"$_mod_list_xmpp"
 }
 
 carrierroute() {
 	_generic_pkg "carrier grade routing functions" \
 		"$_mod_list_carrierroute"
 }
 
 ldap() {
 	_generic_pkg "LDAP search functions" \
 		"$_mod_list_ldap"
 }
 
 utils() {
 	_generic_pkg "miscelaneous utility functions" \
 		"$_mod_list_utils"
 }
 
 tls() {
 	_generic_pkg "TLS support" \
 		"$_mod_list_tls"
 }
 
 presence() {
 	_generic_pkg "SIP Notify (Presence) support" \
 		"$_mod_list_presence"
 }
 
 lua() {
 	_generic_pkg "Lua script support" \
 		"$_mod_list_lua"
 }
 
 ims() {
 	_generic_pkg "IP Multimedia Subsystem (IMS) support" \
 		"$_mod_list_ims"
 }
 
 outbound() {
 	_generic_pkg "RFC 5626 section 5 Outbound support" \
 		"$_mod_list_outbound"
 }
 
 debugger() {
 	_generic_pkg "debugging modules" \
 		"$_mod_list_debugger"
 }
 
 extras() {
 	_generic_pkg "extra modules" \
 		"$_mod_list_extras"
 }
 
 websocket() {
 	_generic_pkg "websocket support" \
 		"$_mod_list_websocket"
 }
 
 authephemeral() {
 	_generic_pkg "auth ephemeral (webrtc)" \
 		"$_mod_list_authephemeral"
 }
 
 json() {
 	_generic_pkg "Operations on json strings" \
 		"$_mod_list_json"
 }
 
 jansson() {
 	_generic_pkg "Operations on json strings using jansson library" \
 		"$_mod_list_jansson"
 }
 
 geoip2() {
 	_generic_pkg "MaxMind GeoIP lookup support" \
 		"$_mod_list_geoip2"
 }
 
 ev() {
 	_generic_pkg "Network event broadcast API" \
 		"$_mod_list_ev"
 }
 
 uuid() {
 	_generic_pkg "UUID generator using libuuid" \
 		"$_mod_list_uuid"
 }
 
 memcached() {
 	_generic_pkg "memcached support" \
 		"$_mod_list_memcached"
 }
 
fa7e915b
 mongodb() {
 	_generic_pkg "MongoDB database connectivity" \
 	"$_mod_list_mongodb"
 }
 
4fc13e27
 rabbitmq() {
 	_generic_pkg "RabbitMQ client for configuration file" \
 		"$_mod_list_rabbitmq"
 }
 
 jsdt() {
 	_generic_pkg "Support for executing JavaScript" \
 		"$_mod_list_jsdt"
 }
 
 
 redis() {
 	_generic_pkg "Redis NoSQL support" \
 		"$_mod_list_redis"
 }
 
 http_async() {
 	_generic_pkg "Asynchronous HTTP queries support" \
 		"$_mod_list_http_async"
 }
 
 kazoo() {
 	_generic_pkg "Kazoo VoIP platform support" \
 		"$_mod_list_kazoo"
 }
 
38d746e6
 radius() {
 	_generic_pkg "RADIUS modules for Kamailio" \
 		"$_mod_list_radius"
 }
 
 sctp() {
 	_generic_pkg "SCTP transport for Kamailio" \
 		"$_mod_list_sctp"
 }
 
f21eaf12
 perl() {
 	_generic_pkg "Perl extensions and database driver for Kamailio" \
 		"$_mod_list_perl"
 }
 
 python() {
30746000
 	_generic_pkg "Execute embedded Python2 scripts" \
f21eaf12
 		"$_mod_list_python"
 }
 
48624059
 ruby() {
 	_generic_pkg "Ruby extensions for Kamailio" \
 		"$_mod_list_ruby"
 }
 
30746000
 python3() {
 	_generic_pkg "Execute embedded Python3 scripts" \
 		"$_mod_list_python3"
 }
 
 ruby() {
 	_generic_pkg "Execute embedded Ruby scripts" \
 		"$_mod_list_ruby"
 }
 
44263839
 sqlang() {
 	_generic_pkg "Squirrel Language (SQLang) for Kamailio" \
 		"$_mod_list_sqlang"
 }
 
 rabbitmq() {
 	_generic_pkg "RabbitMQ related modules for Kamailio" \
 		"$_mod_list_rabbitmq"
 }
 
 sipdump() {
 	_generic_pkg "This module writes SIP traffic and some associated details into local files" \
 		"$_mod_list_sipdump"
 }
4fc13e27
 
44263839
 sha512sums="51ea5fccd27a9d3d1783cfc5596eb28ab27e34faeec3268600363f43c48a3634c3c584c479ba874fdb53b85766a0ce8fe7df0e20954c9c6514b1d9d41d9237e6  kamailio-5.1.0.20171125-991fe9b.tar.gz
fb41fe59
 a777338f1a60b95aa2bf3e38314a0cfa77a3397ccad342955409eb95f66ad9c38a3a64d2974d353d50f2aced3936b209063a0f0a7127851b1c278d8384f4cc45  kamailio.initd"