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