Oliver Smith
19594be9e8
Fix error message reported by Pau:
docker: invalid reference format: repository name must be lowercase.
This happens in the "docker run" command after the "Starting container
to merge logs" message, because the arguments to --entrypoint are not in
quotation marks. The command fails.
Logs were merged anyway, because
If03422bb8fb126fe6f204a4f8bc6edf0cbb7f194 had already reverted half the
patch and added the log merging back to the Dockerfile.
This reverts commit
|
||
---|---|---|
alpine-build | ||
alpine-lighttpd | ||
bind9 | ||
centos8-build | ||
centos8-repo-install-test | ||
cgit | ||
debian-buster-build | ||
debian-buster-erlang | ||
debian-buster-simtrace2 | ||
debian-jessie-build | ||
debian-jessie-buildslave | ||
debian-jessie-buildslave-st | ||
debian-jessie-osmocom | ||
debian-sid-build | ||
debian-stretch-build | ||
debian-stretch-build-dist | ||
debian-stretch-jenkins | ||
debian-stretch-titan | ||
debian9-repo-install-test | ||
debian10-repo-install-test | ||
fpga-build | ||
gerrit | ||
git-daemon | ||
gitolite | ||
gr-gsm-master | ||
make | ||
nplab-m3ua-test | ||
nplab-sua-test | ||
open5gs-master | ||
osmo-bsc-latest | ||
osmo-bsc-master | ||
osmo-bts-latest | ||
osmo-bts-master | ||
osmo-cn-latest | ||
osmo-dev-on-debian-sid | ||
osmo-gbproxy-master | ||
osmo-gerrit-libosmo | ||
osmo-ggsn-latest | ||
osmo-ggsn-master | ||
osmo-gsm-tester | ||
osmo-hlr-latest | ||
osmo-hlr-master | ||
osmo-hnbgw-latest | ||
osmo-hnbgw-master | ||
osmo-mgw-latest | ||
osmo-mgw-master | ||
osmo-msc-latest | ||
osmo-msc-master | ||
osmo-nitb-latest | ||
osmo-nitb-master | ||
osmo-pcu-latest | ||
osmo-pcu-master | ||
osmo-ran | ||
osmo-remsim-latest | ||
osmo-remsim-master | ||
osmo-sgsn-latest | ||
osmo-sgsn-master | ||
osmo-sip-latest | ||
osmo-sip-master | ||
osmo-smlc-master | ||
osmo-stp-latest | ||
osmo-stp-master | ||
osmo-uecups-master | ||
osmocom-bb-host-master | ||
patchwork | ||
public-inbox | ||
redmine | ||
scripts | ||
sctp-test | ||
sigtran-tests | ||
systemd | ||
tmp | ||
ttcn3-bsc-test | ||
ttcn3-bsc-test-sccplite | ||
ttcn3-bscnat-test | ||
ttcn3-bts-test | ||
ttcn3-fr-test | ||
ttcn3-gbproxy-test | ||
ttcn3-gbproxy-test-fr | ||
ttcn3-ggsn-test | ||
ttcn3-hlr-test | ||
ttcn3-mgw-test | ||
ttcn3-msc-test | ||
ttcn3-nitb-sysinfo | ||
ttcn3-pcu-test | ||
ttcn3-pcu-test-sns | ||
ttcn3-remsim-test | ||
ttcn3-sccp-test | ||
ttcn3-sgsn-test | ||
ttcn3-sip-test | ||
ttcn3-smlc-test | ||
ttcn3-stp-test | ||
ubuntu-zesty-build | ||
.gitignore | ||
.gitreview | ||
README.md | ||
Release.key | ||
jenkins-common.sh | ||
osmo-bisect.sh |
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 ismaster
, set this tolatest
to test the last stable releases.OSMO_TTCN3_BRANCH
: osmo-ttcn3-hacks.git branch, which will be used when building attcn3-*
docker image. Defaults tomaster
.NO_DOCKER_IMAGE_BUILD
: when set to1
, 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
- Overhyped Docker for related rambling on why this doesn't work as well as one would want.
- Osmocom wiki: Titan TTCN3 Testsuites