Skip to content

Commit 78ec75b

Browse files
feat: Minimized Docker-Containers
Add Dockerfile, build script, and module lists for OpenSIPS variants
1 parent 728eeff commit 78ec75b

8 files changed

Lines changed: 372 additions & 0 deletions

File tree

tiny/Dockerfile

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
ARG BUILDER_IMAGE=opensips-builder:latest
2+
3+
FROM ${BUILDER_IMAGE} AS debs
4+
5+
FROM debian:bookworm AS builder
6+
ARG MODULES_LIST=modules.lst.pcscf
7+
RUN export DEBIAN_FRONTEND=noninteractive && \
8+
apt-get update && apt-get install -y --no-install-recommends binutils && \
9+
rm -rf /var/lib/apt/lists/*
10+
COPY --from=debs /tmp/deb/ /tmp/debs/
11+
RUN export DEBIAN_FRONTEND=noninteractive && \
12+
dpkg -i /tmp/debs/*.deb || true && \
13+
apt-get update && apt-get -f -y install && \
14+
rm -rf /var/lib/apt/lists/*
15+
COPY make_min_archive.sh /tmp/opensips/make_min_archive.sh
16+
COPY modules/${MODULES_LIST} /tmp/modules.lst
17+
RUN /bin/bash -c "source /tmp/opensips/make_min_archive.sh"
18+
RUN mkdir /tmp/build_image && tar xzf ./opensips_img.tar.gz -C /tmp/build_image
19+
20+
FROM scratch
21+
COPY --from=builder /tmp/build_image /
22+
ENTRYPOINT ["/usr/sbin/opensips", "-F"]

tiny/build

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
5+
VERSION=$(head -1 < "${SCRIPT_DIR}/../VERSION")
6+
REGISTRY="${REGISTRY:-harbor.volte.io/cnaas}"
7+
IMAGE="opensips"
8+
BUILDER_TAG="${REGISTRY}/${IMAGE}:builder"
9+
10+
VARIANTS=(pcscf icscf scscf sbc ipsecgw)
11+
12+
usage() {
13+
echo "Usage: $(basename "$0") [--no-push] [--builder-only] [VARIANT ...]"
14+
echo ""
15+
echo "Builds tiny (FROM scratch) OpenSIPS images for the specified chart variants."
16+
echo "If no VARIANT is given, all variants are built: ${VARIANTS[*]}"
17+
echo ""
18+
echo "Options:"
19+
echo " --no-push Build images but do not push to the registry"
20+
echo " --builder-only Only build the builder image (deb packages), skip tiny images"
21+
echo ""
22+
echo "Environment:"
23+
echo " REGISTRY Override the container registry (default: harbor.volte.io/cnaas)"
24+
echo ""
25+
echo "Examples:"
26+
echo " ./build # build + push all variants"
27+
echo " ./build pcscf sbc # build + push only P-CSCF and SBC"
28+
echo " ./build --no-push scscf # build S-CSCF without pushing"
29+
exit 1
30+
}
31+
32+
PUSH=1
33+
BUILDER_ONLY=0
34+
SELECTED=()
35+
36+
while [[ $# -gt 0 ]]; do
37+
case "$1" in
38+
--no-push) PUSH=0; shift ;;
39+
--builder-only) BUILDER_ONLY=1; shift ;;
40+
--help|-h) usage ;;
41+
-*) echo "Unknown option: $1"; usage ;;
42+
*) SELECTED+=("$1"); shift ;;
43+
esac
44+
done
45+
46+
if [[ ${#SELECTED[@]} -eq 0 ]]; then
47+
SELECTED=("${VARIANTS[@]}")
48+
fi
49+
50+
for v in "${SELECTED[@]}"; do
51+
if [[ ! -f "${SCRIPT_DIR}/modules/modules.lst.${v}" ]]; then
52+
echo "Error: unknown variant '${v}' (no modules/modules.lst.${v} found)"
53+
exit 1
54+
fi
55+
done
56+
57+
echo "==> Building OpenSIPS builder image (deb packages)"
58+
docker build \
59+
--target builder \
60+
-t "${BUILDER_TAG}" \
61+
-f "${SCRIPT_DIR}/../Dockerfile" \
62+
"${SCRIPT_DIR}/.."
63+
64+
if [[ ${BUILDER_ONLY} -eq 1 ]]; then
65+
echo "==> Builder image ready: ${BUILDER_TAG}"
66+
exit 0
67+
fi
68+
69+
for variant in "${SELECTED[@]}"; do
70+
TAG="${VERSION}-${variant}"
71+
FULL="${REGISTRY}/${IMAGE}:${TAG}"
72+
LATEST="${REGISTRY}/${IMAGE}:latest-${variant}"
73+
74+
echo ""
75+
echo "==> Building tiny image: ${variant} (${FULL})"
76+
docker build \
77+
--build-arg "BUILDER_IMAGE=${BUILDER_TAG}" \
78+
--build-arg "MODULES_LIST=modules.lst.${variant}" \
79+
-t "${FULL}" \
80+
-f "${SCRIPT_DIR}/Dockerfile" \
81+
"${SCRIPT_DIR}"
82+
83+
docker tag "${FULL}" "${LATEST}"
84+
85+
if [[ ${PUSH} -eq 1 ]]; then
86+
echo " Pushing ${FULL}"
87+
docker push "${FULL}"
88+
echo " Pushing ${LATEST}"
89+
docker push "${LATEST}"
90+
fi
91+
done
92+
93+
echo ""
94+
echo "==> Done. Built variants: ${SELECTED[*]}"

tiny/make_min_archive.sh

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
#!/bin/sh
2+
3+
BUILD_ROOT=/tmp/opensips_build
4+
FILELIST=/tmp/filelist
5+
FILELIST_BINARY=/tmp/filelist_binary
6+
TMP_TAR=/tmp/opensips_min.tar.gz
7+
IMG_TAR=/tmp/opensips_img.tar.gz
8+
9+
clean_build_root() {
10+
rm -Rf $BUILD_ROOT
11+
mkdir -p $BUILD_ROOT
12+
rm -f $TMP_TAR
13+
rm -f $IMG_TAR
14+
}
15+
16+
fs_files_debian() {
17+
local PACKAGES
18+
PACKAGES=$(dpkg-query -f '${binary:Package}\n' -W 'opensips*')
19+
PACKAGES="libc6 $PACKAGES"
20+
for pkg in $PACKAGES
21+
do
22+
dpkg-query -L $pkg 2> /dev/null
23+
done
24+
}
25+
26+
extra_files_debian() {
27+
cat << EOF
28+
/etc
29+
/bin
30+
/usr/bin
31+
/usr/lib
32+
EOF
33+
}
34+
35+
sort_filelist() {
36+
sort $FILELIST | uniq > $FILELIST.new
37+
mv -f $FILELIST.new $FILELIST
38+
}
39+
40+
filter_unnecessary_files() {
41+
if [ -f /tmp/modules.lst ]; then
42+
rm -f /tmp/modules.lst.new
43+
for f in $(cat /tmp/modules.lst)
44+
do
45+
f=$(echo $f | sed "s/.so//")
46+
echo "$f.so" >> /tmp/modules.lst.new
47+
done
48+
ls -1 /usr/lib/x86_64-linux-gnu/opensips/modules/ > /tmp/modules.installed
49+
for f in $(grep -Fvf /tmp/modules.lst.new /tmp/modules.installed)
50+
do
51+
echo "Removing module $f..."
52+
sed -i \
53+
-e "\|^/usr/lib/x86_64-linux-gnu/opensips/modules/$f|d" \
54+
$FILELIST
55+
done
56+
fi
57+
58+
sed -i \
59+
-e '\|^/\.$|d' \
60+
-e '\|^/lib/systemd|d' \
61+
-e '\|^/etc|d' \
62+
-e '\|^/usr/share|d' \
63+
-e '\|^/usr/lib/x86_64-linux-gnu/gconv/|d' \
64+
-e '\|^/.*\.flac$|d' \
65+
-e '\|^/.*/flac$|d' \
66+
-e '\|^/usr/sbin/opensipsctl|d' \
67+
-e '\|^/usr/sbin/opensipsdbctl|d' \
68+
-e '\|^/usr/sbin/osipsconsole|d' \
69+
$FILELIST
70+
}
71+
72+
ldd_helper() {
73+
TESTFILE=$1
74+
ldd $TESTFILE 2> /dev/null > /dev/null || return
75+
76+
RESULT=$(ldd $TESTFILE | grep -oP '\s\S+\s\(\S+\)' | sed -e 's/^\s//' -e 's/\s.*$//') #'
77+
echo "$RESULT"
78+
}
79+
80+
find_binaries() {
81+
rm -f $FILELIST_BINARY
82+
for f in $(cat $FILELIST)
83+
do
84+
echo $f
85+
ldd_helper $f >> $FILELIST_BINARY
86+
done
87+
88+
sort $FILELIST_BINARY | sort | uniq | sed -e '/linux-vdso.so.1/d' > $FILELIST_BINARY.new
89+
mv -f $FILELIST_BINARY.new $FILELIST_BINARY
90+
cat $FILELIST_BINARY | xargs realpath > $FILELIST_BINARY.new
91+
cat $FILELIST_BINARY.new >> $FILELIST_BINARY
92+
rm -f $FILELIST_BINARY.new
93+
}
94+
95+
tar_files() {
96+
local TARLIST=/tmp/tarlist
97+
cat $FILELIST > $TARLIST
98+
cat $FILELIST_BINARY >> $TARLIST
99+
tar -czf $TMP_TAR --no-recursion -T $TARLIST
100+
rm -f $TARLIST
101+
}
102+
103+
make_image_tar() {
104+
local CURDIR=`pwd`
105+
cd $BUILD_ROOT
106+
tar xzf $TMP_TAR
107+
tar czf $IMG_TAR *
108+
cd $CURDIR
109+
}
110+
111+
clean_build_root
112+
fs_files_debian > $FILELIST
113+
extra_files_debian >> $FILELIST
114+
sort_filelist
115+
filter_unnecessary_files
116+
find_binaries
117+
tar_files
118+
make_image_tar
119+
mv $IMG_TAR .
120+
clean_build_root

tiny/modules/modules.lst.icscf

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
db_mysql
2+
httpd
3+
signaling
4+
sl
5+
tm
6+
rr
7+
maxfwd
8+
sipmsgops
9+
mi_fifo
10+
mi_http
11+
acc
12+
proto_udp
13+
proto_tcp
14+
proto_bin
15+
clusterer
16+
aaa_diameter
17+
json
18+
prometheus
19+
proto_hep
20+
tracer

tiny/modules/modules.lst.ipsecgw

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
httpd
2+
signaling
3+
sl
4+
tm
5+
rr
6+
maxfwd
7+
sipmsgops
8+
textops
9+
mi_fifo
10+
mi_http
11+
prometheus
12+
cachedb_local
13+
proto_udp
14+
proto_tcp
15+
proto_ipsec
16+
usrloc
17+
registrar
18+
proto_hep
19+
tracer

tiny/modules/modules.lst.pcscf

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
db_mysql
2+
signaling
3+
sl
4+
proto_bin
5+
mi_http
6+
httpd
7+
prometheus
8+
clusterer
9+
tm
10+
rr
11+
maxfwd
12+
nathelper
13+
sipmsgops
14+
mi_fifo
15+
usrloc
16+
registrar
17+
acc
18+
proto_udp
19+
proto_tcp
20+
dialog
21+
aaa_diameter
22+
rtpengine
23+
json
24+
presence
25+
presence_reginfo
26+
pua
27+
pua_reginfo
28+
textops
29+
cachedb_redis
30+
proto_hep
31+
tracer

tiny/modules/modules.lst.sbc

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
db_mysql
2+
signaling
3+
sl
4+
tm
5+
rr
6+
maxfwd
7+
sipmsgops
8+
mi_http
9+
httpd
10+
prometheus
11+
mi_fifo
12+
uac
13+
uac_auth
14+
uac_registrant
15+
b2b_entities
16+
b2b_logic
17+
drouting
18+
carrierroute
19+
enum
20+
dialplan
21+
json
22+
dialog
23+
permissions
24+
cachedb_local
25+
textops
26+
proto_udp
27+
proto_tcp
28+
proto_hep
29+
tracer
30+
rtpengine
31+
rtp_relay
32+
cachedb_redis

tiny/modules/modules.lst.scscf

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
db_mysql
2+
httpd
3+
signaling
4+
sl
5+
tm
6+
rr
7+
maxfwd
8+
sipmsgops
9+
mi_fifo
10+
mi_http
11+
usrloc
12+
registrar
13+
acc
14+
proto_udp
15+
proto_tcp
16+
proto_bin
17+
clusterer
18+
aaa_diameter
19+
auth_aka
20+
aka_av_diameter
21+
dialplan
22+
auth
23+
json
24+
xml
25+
enum
26+
uac_auth
27+
uac
28+
dialog
29+
prometheus
30+
rest_client
31+
cachedb_redis
32+
dispatcher
33+
proto_hep
34+
tracer

0 commit comments

Comments
 (0)