pkg/kamailio/alpine_docker: Added docker packaging scripts
[sip-router] / pkg / kamailio / alpine_docker / build.sh
1 #!/bin/sh -e
2
3 # This script is wrote by Sergey Safarov <s.safarov@gmail.com>
4
5 BUILD_ROOT=/tmp/kamailio
6 FILELIST=/tmp/filelist
7 FILELIST_BINARY=/tmp/filelist_binary
8 TMP_TAR=/tmp/kamailio_min.tar.gz
9 IMG_TAR=kamailio_img.tar.gz
10
11 prepare_build() {
12 apk add --no-cache abuild git gcc build-base bison flex expat-dev postgresql-dev pcre-dev mariadb-dev \
13     libxml2-dev curl-dev unixodbc-dev confuse-dev ncurses-dev sqlite-dev lua-dev openldap-dev \
14     libressl-dev net-snmp-dev libuuid libev-dev jansson-dev json-c-dev libevent-dev linux-headers \
15     libmemcached-dev rabbitmq-c-dev hiredis-dev libmaxminddb-dev libunistring-dev
16
17     adduser -D build && addgroup build abuild
18     echo "%abuild ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/abuild
19     su - build -c "git config --global user.name 'Your Full Name'"
20     su - build -c "git config --global user.email 'your@email.address'"
21     su - build -c "abuild-keygen -a -i"
22 }
23
24 build_and_install(){
25     if [ ! -z "$GIT_TAG" ]; then
26         sed -i -e "s/^_gitcommit=.*/_gitcommit=$GIT_TAG/" /usr/src/kamailio/pkg/kamailio/alpine/APKBUILD
27     fi
28     chown -R build /usr/src/kamailio
29     su - build -c "cd /usr/src/kamailio/pkg/kamailio/alpine; abuild snapshot"
30     su - build -c "cd /usr/src/kamailio/pkg/kamailio/alpine; abuild -r"
31     cd /home/build/packages/kamailio/x86_64
32     ls -1 kamailio-*.apk |  xargs apk --no-cache --allow-untrusted add
33 }
34
35 list_installed_kamailio_packages() {
36         apk info | grep kamailio
37 }
38
39 kamailio_files() {
40     local PACKAGES
41     PACKAGES=$(apk info | grep kamailio)
42     PACKAGES="musl $PACKAGES"
43     for pkg in $PACKAGES
44     do
45         # list package files and filter package name
46         apk info --contents $pkg 2> /dev/null | sed -e '/\S\+ contains:/d'  -e '/^$/d' -e 's/^/\//'
47     done
48 }
49
50 extra_files() {
51     cat << EOF
52 /etc
53 /bin
54 /bin/busybox
55 /usr/bin
56 /usr/bin/dumpcap
57 /usr/lib
58 /usr/sbin
59 /usr/sbin/tcpdump
60 /var
61 /var/run
62 /run
63 EOF
64 }
65
66 sort_filelist() {
67     sort $FILELIST | uniq > $FILELIST.new
68     mv -f $FILELIST.new $FILELIST
69 }
70
71 filter_unnecessary_files() {
72 # excluded following files and directories recursive
73 # /usr/lib/debug/usr/lib/kamailio/
74 # /usr/share/doc/kamailio
75 # /usr/share/man
76 # /usr/share/snmp
77
78     sed -i \
79         -e '\|^/usr/lib/debug/|d' \
80         -e '\|^/usr/share/doc/kamailio/|d' \
81         -e '\|^/usr/share/man/|d' \
82         -e '\|^/usr/share/snmp/|d' \
83         $FILELIST
84 }
85
86 ldd_helper() {
87     TESTFILE=$1
88     LD_PRELOAD=/usr/sbin/kamailio ldd $TESTFILE 2> /dev/null > /dev/null || return
89
90     LD_PRELOAD=/usr/sbin/kamailio ldd $TESTFILE | sed -e 's/^.* => //' -e 's/ (.*)//' -e 's/\s\+//' -e '/^ldd$/d'
91 }
92
93 find_binaries() {
94     rm -f $FILELIST_BINARY
95     set +e
96     for f in $(cat $FILELIST)
97     do
98         ldd_helper /$f >> $FILELIST_BINARY
99     done
100     set -e
101     sort $FILELIST_BINARY | sort | uniq > $FILELIST_BINARY.new
102     mv -f $FILELIST_BINARY.new $FILELIST_BINARY
103
104     # Resolving simbolic links
105     cat $FILELIST_BINARY | xargs realpath > $FILELIST_BINARY.new
106     mv -f $FILELIST_BINARY.new $FILELIST_BINARY
107 }
108
109 tar_files() {
110     local TARLIST=/tmp/tarlist
111     cat $FILELIST > $TARLIST
112     cat $FILELIST_BINARY >> $TARLIST
113     tar -czf $TMP_TAR --no-recursion -T $TARLIST
114     rm -f $TARLIST
115 }
116
117 make_image_tar() {
118     mkdir -p $BUILD_ROOT
119     cd $BUILD_ROOT
120     tar xzf $TMP_TAR
121     /bin/busybox --install -s bin
122     sed -i -e '/mi_fifo/d' etc/kamailio/kamailio.cfg
123     tar czf /usr/src/kamailio/pkg/kamailio/alpine_docker/$IMG_TAR *
124 }
125
126 prepare_build
127 build_and_install
128 #install PCAP tools
129 apk add --no-cache wireshark-common tcpdump
130
131 kamailio_files > $FILELIST
132 extra_files >> $FILELIST
133 sort_filelist
134 filter_unnecessary_files
135 find_binaries
136 tar_files
137 make_image_tar