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