5a74de5f8730f625ad645d918409af019d19e02f
[sip-router] / pkg / kamailio / alpine / APKBUILD
1 # Contributor: Ćukasz Jendrysik <scadu@yandex.com>
2 # Contributor: Michael Mason <ms13sp@gmail.com>
3 # Contributor: Leonardo Arena <rnalrd@gmail.com>
4 # Maintainer: Nathan Angelacos <nangel@alpinelinux.org>
5 pkgname=kamailio
6 pkgver=5.1.0
7 pkgrel=0
8
9 # If building from a git snapshot, specify the gitcommit
10 # If building a proper release, leave gitcommit blank
11 _gitcommit=c5ffc265cf83c7e329ee8d21c3bafba78b670c58
12
13 [ ! -z "${_gitcommit}" ] && pkgver="${pkgver}.$(date +%Y%m%d)"
14 [ ! -z "${_gitcommit}" ] && _suffix="-${_gitcommit:0:7}"
15 [ ! -z "${_gitcommit}" ] && builddir="$srcdir/$pkgname-$_gitcommit" || builddir="$srcdir/$pkgname-$pkgver"
16 [ -z "${_gitcommit}" ] && _gitcommit="${pkgver}"
17
18 pkgdesc="Open Source SIP Server"
19 url="http://www.kamailio.org/"
20 arch="all"
21 pkgusers="kamailio"
22 pkggroups="kamailio"
23 arch="all"
24 license="GPL2+"
25 depends=""
26 makedepends="bison db-dev flex freeradius-client-dev expat-dev lksctp-tools-dev perl-dev postgresql-dev python2-dev pcre-dev mariadb-dev
27         libxml2-dev curl-dev unixodbc-dev confuse-dev ncurses-dev sqlite-dev
28         lua-dev openldap-dev libressl-dev net-snmp-dev libuuid libev-dev
29         jansson-dev json-c-dev libevent-dev linux-headers libmemcached-dev
30         rabbitmq-c-dev hiredis-dev libmaxminddb-dev libunistring-dev"
31 install="$pkgname.pre-install $pkgname.pre-upgrade"
32
33 # See Makefile.groups for the list of recommended modules for
34 # each package.  What follows is a simplified version of Makefile.groups
35 #
36 # Alpine specific changes:
37 #
38 # _mod_list_debugger is not defined in the orginal
39 #
40 # Move avp from _mod_list_extras to _mod_list_basic, so that we can create
41 # a kamailio-extras package
42 #
43 # Remove db_text from _mod_list_db because we create a separate dbtext package
44 #
45 # - basic used modules, with no extra dependency (widespread usage)
46 _mod_list_basic="avp async auth benchmark blst cfg_rpc cfgt cfgutils corex counters \
47                 ctl debugger diversion enum exec gzcompress ipops kex mangler \
48                 maxfwd mediaproxy mqueue \
49                 nat_traversal nathelper path pike pv ratelimit rr rtimer \
50                 rtpproxy sanity sdpops siputils sl smsops statsc statistics \
51                 textops textopsx tm tmx topoh topos xlog rtpengine stun sipt"
52
53 # - extra used modules, with no extra dependency
54 _mod_list_extras="auth_diameter call_control cnxcc dmq domainpolicy log_custom \
55                 msrp pdb qos sca seas sms sst timer tmrec tsilo uac_redirect \
56                 xhttp xhttp_rpc xprint nosip dmq_usrloc statsd rtjson tcpops \
57                 auth_xkeys"
58
59 # - common modules depending on database
60 _mod_list_db="acc alias_db auth_db avpops cfg_db db_berkeley db_flatstore \
61                 db_cluster dialog dispatcher domain drouting group \
62                 htable imc matrix mohqueue msilo mtree p_usrloc pdt permissions \
63                 pipelimit prefix_route registrar sipcapture siptrace speeddial \
64                 sqlops uac uri_db userblacklist usrloc"
65
66 # - common modules depending on database, using UID db schema
67 _mod_list_dbuid="db2_ops uid_auth_db uid_avp_db uid_domain uid_gflags \
68                 uid_uri_db"
69
70 # - modules for devel purposes
71 _mod_list_devel="malloc_test print print_lib"
72
73 # - modules depending on pcre3 library
74 _mod_list_pcre="dialplan lcr regex"
75
76 # - modules depending on radius client library
77 _mod_list_radius="acc_radius auth_radius misc_radius peering"
78
79 # - modules depending on ldap client library
80 _mod_list_ldap="db2_ldap h350 ldap"
81
82 # - modules depending on mysql client library
83 _mod_list_mysql="db_mysql"
84
85 # - modules depending on postgres client library
86 _mod_list_postgres="db_postgres"
87
88 # - modules depending on unixodbc library
89 _mod_list_unixodbc="db_unixodbc"
90
91 # - modules depending on mysql cassandra library
92 _mod_list_cassandra="db_cassandra ndb_cassandra"
93
94 # - modules depending on xml2 library
95 _mod_list_cpl="cplc"
96
97 # - modules depending on xml2 library
98 _mod_list_xml="xhttp_pi xmlrpc xmlops"
99
100 # - modules depending on net-snmp library
101 _mod_list_snmpstats="snmpstats"
102
103 # - modules depending on expat library
104 _mod_list_xmpp="xmpp"
105
106 # - modules depending on confuse library
107 _mod_list_carrierroute="carrierroute"
108
109 # - modules depending on bdb (db4) library
110 _mod_list_berkeley="db_berkeley"
111
112 # - modules depending on curl library
113 _mod_list_utils="utils http_client"
114
115 # - async http_async_client
116 _mod_list_http_async="http_async_client"
117
118 # - modules depending on purple library
119 _mod_list_purple="purple"
120
121 # - modules depending on memcache library
122 _mod_list_memcached="memcached"
123
124 # - modules depending on openssl library
125 _mod_list_tls="auth_identity crypto tls"
126
127 # - modules depending on openssl library
128 _mod_list_outbound="outbound"
129
130 # - modules depending on unistring library
131 _mod_list_websocket="websocket"
132
133 # - modules depending on libval-threads libcrypto libsres libpthread
134 _mod_list_dnssec="dnssec"
135
136 # - modules depending on libsctp
137 _mod_list_sctp="sctp"
138
139 # - modules depending on openssl library
140 _mod_list_authephemeral="auth_ephemeral"
141
142 # - modules related to SIMPLE presence extensions
143 _mod_list_presence="presence presence_conference presence_dialoginfo \
144                         presence_mwi presence_profile presence_reginfo \
145                         presence_xml \
146                         pua pua_bla pua_dialoginfo pua_reginfo \
147                         pua_rpc pua_usrloc pua_xmpp \
148                         rls xcap_client xcap_server"
149
150 # - modules depending on lua library
151 _mod_list_lua="app_lua"
152
153 # - modules depending on perl library
154 _mod_list_perl="app_perl db_perlvdb"
155
156 # - modules depending on python library
157 _mod_list_python="app_python"
158
159 # - modules depending on rabbitmq
160 _mod_list_rabbitmq="rabbitmq"
161
162 # - modules depending on geoip2 library
163 _mod_list_geoip2="geoip2"
164
165 # - modules depending on sqlite library
166 _mod_list_sqlite="db_sqlite"
167
168 # - modules depending on oracle library
169 _mod_list_oracle="db_oracle"
170
171 # - modules depending on json library
172 _mod_list_json="json jsonrpcc jsonrpcs"
173
174 # - modules depending on redis library
175 _mod_list_redis="ndb_redis topos_redis"
176
177 # - modules depending on mono library
178 _mod_list_mono="app_mono"
179
180 # - modules related to IMS extensions
181 _mod_list_ims="cdp cdp_avp ims_dialog ims_auth ims_isc ims_icscf ims_qos \
182                 ims_registrar_pcscf ims_registrar_scscf ims_usrloc_pcscf \
183                 ims_usrloc_scscf ims_charging"
184
185 # - modules depending on osp toolkit library
186 _mod_list_osp="osp"
187
188 # - modules depending on java library
189 _mod_list_java="app_java"
190
191 # - modules depending on iptables library
192 _mod_list_iptrtpproxy="iptrtpproxy"
193
194 # - modules depending on gzip library
195 _mod_list_gzcompress="gzcompress"
196
197 # - modules depending on uuid library
198 _mod_list_uuid="uuid"
199
200 # - modules depending on ev library
201 _mod_list_ev="evapi"
202
203 # - modules depending on kazoo/rabbitmq
204 _mod_list_kazoo="kazoo"
205
206 # - modules depending on mongodb
207 _mod_list_mongodb="db_mongodb ndb_mongodb"
208
209 # - modules depending on jansson library
210 _mod_list_jansson="jansson janssonrpcc"
211
212 # - modules depending on libm
213 _mod_list_jsdt="app_jsdt"
214
215
216 # Alpine Specific
217 _mod_list_debugger="$_mod_list_devel benchmark debugger"
218
219 # Standard modules in main pkg
220 _module_group_kstandard="$_mod_list_basic $_mod_list_dbuid $_mod_list_pcre"
221
222 # END Makefile.groups #############################################################
223
224 subpackages="$pkgname-doc $pkgname-dbg"
225 _modules="$_module_group_kstandard"
226 for _i in db postgres sqlite dbtext mysql \
227         cpl xml unixodbc snmpstats xmpp carrierroute \
228         ldap utils tls presence lua ims outbound debugger \
229         extras json websocket authephemeral \
230         uuid ev memcached redis geoip2 jansson \
231         jsdt http_async kazoo rabbitmq sctp radius perl python; do
232
233    subpackages="$subpackages $pkgname-$_i"
234    eval "_modules=\"\$_modules \$_mod_list_$_i\""
235 done
236
237 source="${pkgname}-${pkgver}${_suffix}.tar.gz::https://github.com/kamailio/$pkgname/archive/$_gitcommit.tar.gz
238         0001-kamdbctl.base.patch
239         0004-src_core_tcp_read_c.patch
240         kamailio.initd
241         "
242
243 snapshot() {
244         if [ ! -f "$SRCDEST"/${pkgname}-${pkgver}${_suffix}.tar.gz ]; then
245             wget -O "$SRCDEST"/${pkgname}-${pkgver}${_suffix}.tar.gz https://github.com/kamailio/$pkgname/archive/$_gitcommit.tar.gz
246         fi
247         SHA512SUM=$(sha512sum "$SRCDEST"/${pkgname}-${pkgver}${_suffix}.tar.gz | sed -e "s:$SRCDEST/::")
248         sed -i -e "s/^\(sha512sums=.\).*/\1$SHA512SUM/" APKBUILD
249 }
250
251 prepare() {
252         default_prepare
253         cd "$builddir"
254
255         cd utils/kamctl/
256         sed -i -e 's:/var/run/kamailio.pid:/var/run/kamailio/kamailio.pid:g' \
257                 kamctl.base kamctlrc || return 1
258         # we actually dont need bash
259         sed -i -e 's:/bin/bash:/bin/sh:' kamctl kamdbctl \
260                 || return 1
261 }
262
263 build() {
264         cd "$builddir"
265         make FLAVOUR=kamailio STUN=1 \
266                 PREFIX=/usr \
267                 CC_EXTRA_OPTS="$CFLAGS -D_GNU_SOURCE" \
268                 cfg_target=/etc/kamailio/ \
269                 run_prefix="" \
270                 include_modules="$_modules" \
271                 LIBDIR=lib \
272                 DESTDIR="$pkgdir" \
273                 cfg_prefix="$pkgdir" \
274                 cfg
275         make EMBEDDED_UTF8_DECODE=1 STUN=1 FREERADIUS=1 \
276                 all || return 1
277 }
278
279 package() {
280         cd "$builddir"
281         make  FREERADIUS=1 -j1 install || return 1
282
283         install -m755 -D "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname
284         install -d -o kamailio "$pkgdir"/var/run/kamailio
285 }
286
287 _mv_mod() {
288         local moddir=usr/lib/kamailio/modules i=
289         mkdir -p "$subpkgdir"/$moddir
290         for i in $@; do
291                 mv "$pkgdir"/$moddir/$i.so "$subpkgdir"/$moddir/ || return 1
292         done
293 }
294
295 _generic_pkg() {
296         pkgdesc="Kamailio $1"
297         depends="$pkgname"
298         _mv_mod $2
299 }
300
301
302 _db_driver() {
303         pkgdesc="Database drivers for $1"
304         depends="$pkgname $pkgname-db"
305         _mv_mod db_$2 || return 1
306         mkdir -p "$subpkgdir"/usr/share/kamailio \
307                 "$subpkgdir"/usr/lib/kamailio/kamctl
308         mv "$pkgdir"/usr/share/kamailio/$3 \
309                 "$subpkgdir"/usr/share/kamailio/ || return 1
310         mv "$pkgdir"/usr/lib/kamailio/kamctl/*.$4 \
311                 "$subpkgdir"/usr/lib/kamailio/kamctl/ || return 1
312 }
313
314
315 db() {
316         _generic_pkg "modules using a database backend" "$_mod_list_db"
317 }
318
319 postgres() {
320         _db_driver Postgres postgres postgres pgsql
321 }
322
323 mysql() {
324         _db_driver Mysql mysql mysql mysql
325 }
326
327 sqlite() {
328         _db_driver SQlite sqlite db_sqlite sqlite
329 }
330
331 dbtext() {
332         _db_driver DBText text dbtext dbtext || return 1
333         # kamdbctl.dbtext is a python script - but we will not make python
334         # a dependency because kamdbctl is not normaly used
335         depends="$depends"
336         mkdir -p "$subpkgdir"/usr/lib/kamailio/kamctl || return 1
337         mv "$pkgdir"/usr/lib/kamailio/kamctl/dbtextdb \
338                 "$subpkgdir"/usr/lib/kamailio/kamctl/ || return 1
339 }
340
341 cpl() {
342         _generic_pkg "CPL (Call Processing Language) interpreter" \
343                 "$_mod_list_cpl"
344 }
345
346 xml() {
347         _generic_pkg "XML related modules: $_mod_list_xml" \
348                 "$_mod_list_xml" || return 1
349         mkdir -p "$subpkgdir"/usr/share/kamailio
350         mv "$pkgdir"/usr/share/kamailio/xhttp_pi \
351                 "$subpkgdir"/usr/share/kamailio || return 1
352         mkdir -p "$subpkgdir"/etc/kamailio/
353         mv "$pkgdir"/etc/kamailio/pi_framework.xml \
354                 "$subpkgdir"/etc/kamailio || return 1
355 }
356
357 unixodbc() {
358         _generic_pkg "Database drivers for unixodbc" \
359                 "$_mod_list_unixodbc"
360 }
361
362 snmpstats() {
363         _generic_pkg "SNMP statistics support" \
364                 "$_mod_list_snmpstats" || return 1
365         mkdir -p "$subpkgdir"/usr/share/snmp
366         mv "$builddir"/src/modules/snmpstats/mibs \
367                 "$subpkgdir"/usr/share/snmp/ || return 1
368 }
369
370 xmpp() {
371         _generic_pkg "XMPP (Jabber) gateway" \
372                 "$_mod_list_xmpp"
373 }
374
375 carrierroute() {
376         _generic_pkg "carrier grade routing functions" \
377                 "$_mod_list_carrierroute"
378 }
379
380 ldap() {
381         _generic_pkg "LDAP search functions" \
382                 "$_mod_list_ldap"
383 }
384
385 utils() {
386         _generic_pkg "miscelaneous utility functions" \
387                 "$_mod_list_utils"
388 }
389
390 tls() {
391         _generic_pkg "TLS support" \
392                 "$_mod_list_tls"
393 }
394
395 presence() {
396         _generic_pkg "SIP Notify (Presence) support" \
397                 "$_mod_list_presence"
398 }
399
400 lua() {
401         _generic_pkg "Lua script support" \
402                 "$_mod_list_lua"
403 }
404
405 ims() {
406         _generic_pkg "IP Multimedia Subsystem (IMS) support" \
407                 "$_mod_list_ims"
408 }
409
410 outbound() {
411         _generic_pkg "RFC 5626 section 5 Outbound support" \
412                 "$_mod_list_outbound"
413 }
414
415 debugger() {
416         _generic_pkg "debugging modules" \
417                 "$_mod_list_debugger"
418 }
419
420 extras() {
421         _generic_pkg "extra modules" \
422                 "$_mod_list_extras"
423 }
424
425 websocket() {
426         _generic_pkg "websocket support" \
427                 "$_mod_list_websocket"
428 }
429
430 authephemeral() {
431         _generic_pkg "auth ephemeral (webrtc)" \
432                 "$_mod_list_authephemeral"
433 }
434
435 json() {
436         _generic_pkg "Operations on json strings" \
437                 "$_mod_list_json"
438 }
439
440 jansson() {
441         _generic_pkg "Operations on json strings using jansson library" \
442                 "$_mod_list_jansson"
443 }
444
445 geoip2() {
446         _generic_pkg "MaxMind GeoIP lookup support" \
447                 "$_mod_list_geoip2"
448 }
449
450 ev() {
451         _generic_pkg "Network event broadcast API" \
452                 "$_mod_list_ev"
453 }
454
455 uuid() {
456         _generic_pkg "UUID generator using libuuid" \
457                 "$_mod_list_uuid"
458 }
459
460 memcached() {
461         _generic_pkg "memcached support" \
462                 "$_mod_list_memcached"
463 }
464
465 rabbitmq() {
466         _generic_pkg "RabbitMQ client for configuration file" \
467                 "$_mod_list_rabbitmq"
468 }
469
470 jsdt() {
471         _generic_pkg "Support for executing JavaScript" \
472                 "$_mod_list_jsdt"
473 }
474
475
476 redis() {
477         _generic_pkg "Redis NoSQL support" \
478                 "$_mod_list_redis"
479 }
480
481 http_async() {
482         _generic_pkg "Asynchronous HTTP queries support" \
483                 "$_mod_list_http_async"
484 }
485
486 kazoo() {
487         _generic_pkg "Kazoo VoIP platform support" \
488                 "$_mod_list_kazoo"
489 }
490
491 radius() {
492         _generic_pkg "RADIUS modules for Kamailio" \
493                 "$_mod_list_radius"
494 }
495
496 sctp() {
497         _generic_pkg "SCTP transport for Kamailio" \
498                 "$_mod_list_sctp"
499 }
500
501 perl() {
502         _generic_pkg "Perl extensions and database driver for Kamailio" \
503                 "$_mod_list_perl"
504 }
505
506 python() {
507         _generic_pkg "Python extensions for Kamailio" \
508                 "$_mod_list_python"
509 }
510
511
512 sha512sums="245411ac2445f4865cd09f56a3cfc4d10a64c9a1be90bfb35cfe80149e845c34c1a867ff661bbd9dac1c48a0416bc577b57ae6133edb69e2a2b43d3a2305ffde  kamailio-5.1.0.20170930-c5ffc26.tar.gz
513 6badfb611c02ffcb4c2e9937731162ea1a4b737f042ed52120e2f96ebb80b5b7d240b5612c9ca565e693eec9b8c52c1ee5db04dfc47d204501021f984b4b11db  0001-kamdbctl.base.patch
514 af8362201957eae6b66baf7368c9ca884024209a396d77c5c52180c9aabe13772e9c6513e59721d39503e5bb7a8c1030f5c10301ea9055bddafb7f01ee2f3076  0004-src_core_tcp_read_c.patch
515 cd6e3b677d803cd78561ad14d9b2589fd35ad0096f48047fdcb4ddc7d9103871357efba3b350946844cb53dbb081210746421fc420c22ac845b90251168a628e  kamailio.initd"