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