Osmocom docker containers
Go to file
Pau Espin 78ae9377a7 common: Automatize UPSTREAM_DISTRO name based on image name
Similar to what is already done with DISTRO, which points to given image
of ours based on name. This time we do the same with upstream images,
such as debian:stretch or centos:centos8.

This way, for instance calling docker_images_require
"osmo-bsc-latest-centos8" would try to build the
osmo-bsc-latest/Dockerfile file starting from a centos8 image.

Change-Id: I33cb21aa024396974559fd98f9f3c64e2c351eda
2020-12-01 11:46:20 +00:00
alpine-build introduce 'REGISTRY' argument to all Dockerfiles 2020-11-02 17:02:26 +01:00
alpine-lighttpd Add Dockerfile for alpine Linux with lighttpd 2017-10-15 14:37:41 +00:00
bind9 Makefile support for our production infrastructure containers 2018-06-03 16:11:26 +00:00
centos-repo-install-test common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
centos8-build common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
cgit cgit: Increase fastcgi timeout from default 60s to 120s 2020-10-03 12:43:20 +02:00
debian-buster-build introduce 'REGISTRY' argument to all Dockerfiles 2020-11-02 17:02:26 +01:00
debian-buster-erlang introduce 'REGISTRY' argument to all Dockerfiles 2020-11-02 17:02:26 +01:00
debian-buster-simtrace2 update OBS Release.key; the old one expired today. 2020-03-30 18:06:58 +02:00
debian-jessie-build introduce 'REGISTRY' argument to all Dockerfiles 2020-11-02 17:02:26 +01:00
debian-jessie-buildslave Fix "'laforge/debian-jessie-build' not found" 2018-09-06 15:17:06 +02:00
debian-jessie-buildslave-st Fix "'laforge/debian-jessie-build' not found" 2018-09-06 15:17:06 +02:00
debian-jessie-osmocom introduce 'REGISTRY' argument to all Dockerfiles 2020-11-02 17:02:26 +01:00
debian-repo-install-test common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
debian-sid-build introduce 'REGISTRY' argument to all Dockerfiles 2020-11-02 17:02:26 +01:00
debian-stretch-build common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
debian-stretch-build-dist update OBS Release.key; the old one expired today. 2020-03-30 18:06:58 +02:00
debian-stretch-jenkins introduce 'REGISTRY' argument to all Dockerfiles 2020-11-02 17:02:26 +01:00
debian-stretch-titan common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
fpga-build New fpga-build image for building iCE40 gateware + RISC-V firmware 2020-09-14 22:38:40 +02:00
gerrit gerrit: upgrade to 3.2.3 2020-10-03 16:02:36 +02:00
git-daemon git-deamon: Make sure to create the git-daemon user 2018-07-21 09:38:52 +02:00
gitolite Makefile support for our production infrastructure containers 2018-06-03 16:11:26 +00:00
gr-gsm-master introduce 'REGISTRY' argument to all Dockerfiles 2020-11-02 17:02:26 +01:00
make common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
nplab-m3ua-test jenkins-common.sh: Add function to print docker network related parameters 2020-08-27 12:49:43 +02:00
nplab-sua-test jenkins-common.sh: Add function to print docker network related parameters 2020-08-27 12:49:43 +02:00
open5gs-master introduce 'REGISTRY' argument to all Dockerfiles 2020-11-02 17:02:26 +01:00
osmo-bsc-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-bsc-master osmo-*-master: Invalidate docker cache when CentOS repo changes 2020-10-16 13:13:08 +02:00
osmo-bts-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-bts-master osmo-*-master: Invalidate docker cache when CentOS repo changes 2020-10-16 13:13:08 +02:00
osmo-cn-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-dev-on-debian-sid add debian-sid-build, osmo-dev-on-debian-sid 2017-12-06 01:45:42 +01:00
osmo-gbproxy-master osmo-gbproxy-master (derived from osmo-sgsn-master) 2020-11-30 15:50:01 +01:00
osmo-gerrit-libosmo make: use $(nproc) instead of hard-coded number of cores 2020-07-13 02:52:10 +07:00
osmo-ggsn-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-ggsn-master osmo-*-master: Invalidate docker cache when CentOS repo changes 2020-10-16 13:13:08 +02:00
osmo-gsm-tester ogt: Install dependency python3-watchdog 2020-11-10 17:26:44 +01:00
osmo-hlr-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-hlr-master osmo-*-master: Invalidate docker cache when CentOS repo changes 2020-10-16 13:13:08 +02:00
osmo-hnbgw-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-hnbgw-master osmo-*-master: Invalidate docker cache when CentOS repo changes 2020-10-16 13:13:08 +02:00
osmo-mgw-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-mgw-master osmo-mgw-master: Add missing libosmo-abis dependency on CentOS 2020-10-25 10:47:03 +00:00
osmo-msc-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-msc-master osmo-*-master: Invalidate docker cache when CentOS repo changes 2020-10-16 13:13:08 +02:00
osmo-nitb-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-nitb-master osmo-*-master: Invalidate docker cache when CentOS repo changes 2020-10-16 13:13:08 +02:00
osmo-pcu-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-pcu-master osmo-*-master: Invalidate docker cache when CentOS repo changes 2020-10-16 13:13:08 +02:00
osmo-remsim-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-remsim-master osmo-*-master: Invalidate docker cache when CentOS repo changes 2020-10-16 13:13:08 +02:00
osmo-sgsn-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-sgsn-master osmo-*-master: Invalidate docker cache when CentOS repo changes 2020-10-16 13:13:08 +02:00
osmo-sip-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-sip-master osmo-*-master: Invalidate docker cache when CentOS repo changes 2020-10-16 13:13:08 +02:00
osmo-smlc-master osmo-*-master: Invalidate docker cache when CentOS repo changes 2020-10-16 13:13:08 +02:00
osmo-stp-latest common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-stp-master osmo-*-master: Invalidate docker cache when CentOS repo changes 2020-10-16 13:13:08 +02:00
osmo-uecups-master make: use $(nproc) instead of hard-coded number of cores 2020-07-13 02:52:10 +07:00
osmocom-bb-host-master make: use $(nproc) instead of hard-coded number of cores 2020-07-13 02:52:10 +07:00
patchwork Makefile support for our production infrastructure containers 2018-06-03 16:11:26 +00:00
public-inbox add "public-inbox" Dockerfile + Makefiel 2018-10-07 16:27:31 +00:00
redmine redmine: We no longer need the hmac diff 2020-02-16 10:47:10 +01:00
scripts Enable IPv6 in docker networking 2020-08-13 15:01:58 +00:00
sctp-test Switch all osmo-*-master and ttcn3-*-test from jessie to stretch 2019-03-30 09:56:36 +00:00
sigtran-tests Switch all osmo-*-master and ttcn3-*-test from jessie to stretch 2019-03-30 09:56:36 +00:00
tmp add non-working yml file with service/stack description 2017-05-03 20:50:12 +02:00
ttcn3-bsc-test bsc: add missing 'smlc / enable' for LCS tests 2020-10-16 15:49:04 +02:00
ttcn3-bsc-test-sccplite symlinks: ttcn3-bsc-test-sccplite 2018-10-26 10:19:05 +02:00
ttcn3-bscnat-test jenkins-common.sh: Add function to print docker network related parameters 2020-08-27 12:49:43 +02:00
ttcn3-bts-test ttcn3-bts: Enable gsmtap sapi for tch in osmo-bts.cfg 2020-10-21 11:55:19 +00:00
ttcn3-gbproxy-test Add ttcn3-gbproxy-test-fr for FR related testing 2020-11-30 15:50:31 +01:00
ttcn3-gbproxy-test-fr Add ttcn3-gbproxy-test-fr for FR related testing 2020-11-30 15:50:31 +01:00
ttcn3-ggsn-test jenkins-common.sh: Add function to print docker network related parameters 2020-08-27 12:49:43 +02:00
ttcn3-hlr-test jenkins-common.sh: Add function to print docker network related parameters 2020-08-27 12:49:43 +02:00
ttcn3-mgw-test ttcn3-mgw: Update module param addresses naming to support ipv6 2020-09-08 20:12:25 +02:00
ttcn3-msc-test ttcn3-msc: Force MNCCv6 on ttcn3-msc-test-latest 2020-09-16 12:35:21 +02:00
ttcn3-nitb-sysinfo jenkins-common.sh: Add function to print docker network related parameters 2020-08-27 12:49:43 +02:00
ttcn3-pcu-test NS_Configuration: Adjust config regarding support for NS-VCG 2020-11-13 09:23:11 +01:00
ttcn3-pcu-test-sns PCU: Differentiate between tests with classic and SNS Gb dialects 2019-03-14 21:38:44 +01:00
ttcn3-remsim-test jenkins-common.sh: Add function to print docker network related parameters 2020-08-27 12:49:43 +02:00
ttcn3-sccp-test jenkins-common.sh: Add function to print docker network related parameters 2020-08-27 12:49:43 +02:00
ttcn3-sgsn-test NS_Configuration: Adjust config regarding support for NS-VCG 2020-11-13 09:23:11 +01:00
ttcn3-sip-test ttcn3-sip: Update default mp_mncc_version 2020-09-16 12:34:08 +02:00
ttcn3-smlc-test fix ttcn3-smlc-test/Dockerfile 2020-10-21 00:46:10 +02:00
ttcn3-stp-test jenkins-common.sh: Add function to print docker network related parameters 2020-08-27 12:49:43 +02:00
ubuntu-zesty-build introduce 'REGISTRY' argument to all Dockerfiles 2020-11-02 17:02:26 +01:00
.gitignore gitignore: add .release 2019-04-04 10:46:14 +00:00
.gitreview add .gitreview 2018-04-12 09:20:24 +00:00
README.md ttcn3-*-test: remove implicit dependencies 2020-05-30 09:14:06 +02:00
Release.key update OBS Release.key; the old one expired today. 2020-03-30 18:06:58 +02:00
jenkins-common.sh common: Automatize UPSTREAM_DISTRO name based on image name 2020-12-01 11:46:20 +00:00
osmo-bisect.sh Add script to bisect test failures with ttcn3 and docker 2019-04-26 12:07:15 +02:00

README.md

Osmocom docker playground

This repository contains some humble attempts at creating some Docker containers + related stacks around Osmocom. So far, the main focus is test automation.

Running a testsuite

All testsuite folders start with ttcn3 or nplab. Run the following to build/update all required containers and start a specific testsuite:

$ cd ttcn3-mgw-test
$ ./jenkins.sh

Environment variables:

  • IMAGE_SUFFIX: the version of the Osmocom stack to run the testsuite against. Default is master, set this to latest to test the last stable releases.
  • OSMO_TTCN3_BRANCH: osmo-ttcn3-hacks.git branch, which will be used when building a ttcn3-* docker image. Defaults to master.
  • NO_DOCKER_IMAGE_BUILD: when set to 1, it won't try to update the containers (see "caching" below)

Building containers manually

Most folders in this repository contain a Dockerfile. Build a docker container with the same name as the folder like this:

$ cd debian-stretch-build
$ make

Caching

All folders named osmo-*-latest and osmo-*-master build the latest stable or most recent commit from master of the corresponding Osmocom program's git repository. When you have built it already, running make will only do a small HTTP request to check if the sources are outdated and skip the build in case it is still up-to-date.

Dependencies

Folders that don't have a jenkins.sh usually only depend on the container that is specified in the FROM line of their Dockerfile. Testsuites depend on multiple containers, they are defined on top of each jenkins.sh:

. ../jenkins-common.sh
IMAGE_SUFFIX="${IMAGE_SUFFIX:-master}"
docker_images_require \
	"osmo-stp-$IMAGE_SUFFIX" \
	"osmo-bsc-$IMAGE_SUFFIX" \
	"osmo-bts-$IMAGE_SUFFIX" \
	"ttcn3-bsc-test"

Reasoning for this implementation

Before having the docker_images_require lines, there used to be a top-level Makefile for resolving dependencies between the containers. But it was prone to mistakes: when new folders in the repository were added without related targets in the Makefile, make would always assume that the targets where the always existing folders and therefore never build the containers.

In order to implement testing latest in addition to master (OS#3268), it would have been necessary to add further complexity to the Makefile. Instead it was decided to scrap the file, and just keep the short list of dependencies right above where they would be needed in the jenkins.sh.

Obtaining gdb backtrace from crash

If for instance TTCN3 test is producing a crash on a program running in docker, eg. osmo-msc, it is desirable to get a full crash report. This section describes how to do so.

First, open osmo-$program/Dockerfile and add lines to install gdb plus $program dependency debug packages. For instance:

+RUN    apt-get install -y --no-install-recommends \
+               gdb \
+               libosmocore-dbg libosmo-abis-dbg libosmo-netif-dbg libosmo-sigtran-dbg osmo-msc-dbg && \
+               apt-get clean

In same Dockerfile file, modify configure to build with debug symbols enabled and other interesting options, such as --enable-sanitize:

-       ./configure --enable-smpp --enable-iu && \
+       export CPPFLAGS="-g -O0 -fno-omit-frame-pointer" && \
+       export CFLAGS="-g -O0 -fno-omit-frame-pointer" && \
+       export CXXFLAGS="-g -O0 -fno-omit-frame-pointer" && \
+       ./configure --enable-smpp --enable-iu --enable-sanitize && \

Finally open the script you use to run the program (for instance ttcn3-$program-master/jenkins.sh), and modify it to launch the process using gdb, and to print a full backtrace when control returns to gdb (when the process crashes):

-/bin/sh -c "osmo-msc -c /data/osmo-msc.cfg >>/data/osmo-msc.log 2>&1"
+/bin/sh -c "gdb -ex 'run' -ex 'bt full' --arg osmo-msc -c /data/osmo-msc.cfg >>/data/osmo-msc.log 2>&1"

See also