Osmocom docker containers
Go to file
Pau Espin 5f8e407ca7 asterisk: extensions.conf: Allow extra MO call from SIP UA which HOLDed previous call
We need to keep track of the SIP UA using the IMS endpoint, so that when
the IMS call is set on HOLD we can identidy that the same SIP UA can
still initiate new calls on the IMS endpoint.

Related: SYS#7003
Change-Id: Idad9e613669466f3aac8b1c7b43f8d9b6e0494e6
2024-07-17 16:48:24 +02:00
arm-none-eabi-gcc-4.8.2 */Dockerfile: drop MAINTAINER line 2022-05-13 18:17:06 +02:00
asterisk-master asterisk-master: Fetch required branch directly 2024-06-25 20:32:59 +02:00
bind9 */.release: remove 2022-07-06 12:36:26 +02:00
centos7-build centos7: use vault.centos.org 2024-07-12 09:09:22 +00:00
centos7-obs-latest centos7: use vault.centos.org 2024-07-12 09:09:22 +00:00
centos8-build Install liburing-dev in jenkins and build containers 2023-07-11 14:47:04 +00:00
centos8-obs-latest Use Osmocom OBS 2022-06-27 16:47:56 +02:00
cgit */.release: remove 2022-07-06 12:36:26 +02:00
common Revert "ttcn3-docker-run.sh: Fix dumpcap failing to access /data inside docker" 2024-05-17 11:23:13 +02:00
debian-bookworm-build debian-bookworm-*: useradd -d -m instead of mkdir 2024-06-11 12:58:15 +00:00
debian-bookworm-build-arm debian-bookworm-*: useradd -d -m instead of mkdir 2024-06-11 12:58:15 +00:00
debian-bookworm-erlang debian-{bullseye,bookworm}-erlang: install iproute2 2024-06-22 02:29:38 +07:00
debian-bookworm-obs-asan debian-bookworm-*: useradd -d -m instead of mkdir 2024-06-11 12:58:15 +00:00
debian-bookworm-obs-latest debian-bookworm-*: useradd -d -m instead of mkdir 2024-06-11 12:58:15 +00:00
debian-bookworm-titan ttcn3-asterisk: Configure docker testsuite to be able to set up ipsec tunnels 2024-05-17 12:47:06 +00:00
debian-bookworm-titan-master ttcn3-asterisk: Configure docker testsuite to be able to set up ipsec tunnels 2024-05-17 12:47:06 +00:00
debian-bullseye-build Install liburing-dev in jenkins and build containers 2023-07-11 14:47:04 +00:00
debian-bullseye-erlang debian-{bullseye,bookworm}-erlang: install iproute2 2024-06-22 02:29:38 +07:00
debian-bullseye-jenkins debian-*: install pylint from debian repos 2024-05-17 10:42:15 +00:00
debian-bullseye-jenkins-arm Install liburing-dev in jenkins and build containers 2023-07-11 14:47:04 +00:00
debian-bullseye-obs-latest debian-bullseye-*: apt-key is deprecated, use [signed-by] instead 2023-02-20 16:39:07 +07:00
debian-bullseye-titan debian-bullseye-titan-*/Dockerfile: Replace inetutils-ping with iputils-ping 2023-07-25 15:22:45 +00:00
debian-bullseye-titan-master debian-bullseye-titan-*/Dockerfile: Replace inetutils-ping with iputils-ping 2023-07-25 15:22:45 +00:00
debian-buster-build Revert "debian-buster-build: add LLVMEmbeddedToolchainForArm" 2022-10-13 14:47:35 +02:00
debian-buster-jenkins debian-*: install pylint from debian repos 2024-05-17 10:42:15 +00:00
debian-buster-jenkins-arm debian-buster-jenkins-arm: new image 2023-01-23 13:08:54 +00:00
debian-buster-simtrace2 Use Osmocom OBS 2022-06-27 16:47:56 +02:00
debian-sid-build */.release: remove 2022-07-06 12:36:26 +02:00
debian-sid-jenkins Use Osmocom OBS 2022-06-27 16:47:56 +02:00
debian10-obs-submit debian10-obs-submit: new container 2021-04-29 13:09:05 +00:00
dnsmasq dnsmasq: Log additional query info with --log-queries=extra 2024-07-11 13:53:28 +02:00
fpga-build fpga-build: use debian-bookworm-build 2023-08-17 13:04:26 +02:00
gerrit upgrade gerrit to 3.7.6 2024-01-10 17:04:30 +01:00
git-daemon */.release: remove 2022-07-06 12:36:26 +02:00
gr-gsm-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
make asterisk-master: Build from jolly/work branch by default 2024-06-25 20:37:02 +02:00
nplab-m3ua-test cosmetic: .txt file shouldn't have execute permissions set 2024-03-04 12:01:01 +00:00
nplab-sua-test ttcn3: use debian-bookworm-titan 2023-08-14 09:28:24 +00:00
open5gs-latest {open5gs,osmo-uecups}-latest: don't hardcode UID 2024-04-05 14:28:16 +00:00
open5gs-master open5gs-master: Make mongodb available in the image 2023-10-10 17:38:04 +02:00
openbts-umts openbts-umts: fix apt: use archive.debian.org 2024-03-20 17:09:46 +07:00
osmo-bsc-latest */osmo-bsc.cfg: BTS type 'sysmobts' (deprecated) -> osmo-bts 2024-03-28 04:42:35 +07:00
osmo-bsc-master */osmo-bsc.cfg: BTS type 'sysmobts' (deprecated) -> osmo-bts 2024-03-28 04:42:35 +07:00
osmo-bts-latest */.release: remove 2022-07-06 12:36:26 +02:00
osmo-bts-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-cbc-latest osmo-*-latest: use OSMOCOM_REPO_VERSION 2021-05-04 09:30:48 +02:00
osmo-cbc-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-cn-latest Explicitly configure ASPs asp-clnt-* as role=asp & sctp-role=client 2023-06-08 19:20:46 +02:00
osmo-dev-on-debian-sid */osmo-bsc.cfg: BTS type 'sysmobts' (deprecated) -> osmo-bts 2024-03-28 04:42:35 +07:00
osmo-epdg-latest osmo-epdg: add support for testing for latest 2024-07-04 19:01:42 +00:00
osmo-epdg-master debian-{bullseye,bookworm}-erlang: install iproute2 2024-06-22 02:29:38 +07:00
osmo-gbproxy-latest common/pipework: deduplicate 2022-02-14 07:46:23 +00:00
osmo-gbproxy-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-ggsn-latest */.release: remove 2022-07-06 12:36:26 +02:00
osmo-ggsn-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-gsm-tester network_create: find free subnet automatically 2023-01-16 15:19:29 +00:00
osmo-hlr-latest */.release: remove 2022-07-06 12:36:26 +02:00
osmo-hlr-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-hnbgw-latest Explicitly configure ASPs asp-clnt-* as role=asp & sctp-role=client 2023-06-08 19:20:46 +02:00
osmo-hnbgw-master Explicitly configure ASPs asp-clnt-* as role=asp & sctp-role=client 2023-06-08 19:20:46 +02:00
osmo-hnodeb-latest osmo-hnodeb-latest: new container 2022-08-03 16:16:37 +02:00
osmo-hnodeb-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-mgw-latest */.release: remove 2022-07-06 12:36:26 +02:00
osmo-mgw-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-msc-latest */.release: remove 2022-07-06 12:36:26 +02:00
osmo-msc-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-nitb-latest */osmo-bsc.cfg: BTS type 'sysmobts' (deprecated) -> osmo-bts 2024-03-28 04:42:35 +07:00
osmo-nitb-master */osmo-bsc.cfg: BTS type 'sysmobts' (deprecated) -> osmo-bts 2024-03-28 04:42:35 +07:00
osmo-ns-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-pcap-latest osmo-pcap-latest: fix install path for centos 2021-12-13 12:06:59 +00:00
osmo-pcap-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-pcu-latest */.release: remove 2022-07-06 12:36:26 +02:00
osmo-pcu-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-ran jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
osmo-remsim-latest */.release: remove 2022-07-06 12:36:26 +02:00
osmo-remsim-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-s1gw-master s1gw: add osmo-s1gw-master 2024-06-16 03:37:00 +07:00
osmo-sgsn-latest */.release: remove 2022-07-06 12:36:26 +02:00
osmo-sgsn-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-sip-latest */.release: remove 2022-07-06 12:36:26 +02:00
osmo-sip-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-smlc-latest osmo-*-latest: use OSMOCOM_REPO_VERSION 2021-05-04 09:30:48 +02:00
osmo-smlc-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo-stp-latest */osmo-stp.cfg: Explicitly define role & sctp-role 2023-07-05 13:48:55 +00:00
osmo-stp-master */osmo-stp.cfg: Explicitly define role & sctp-role 2023-07-05 13:48:55 +00:00
osmo-uecups-latest {open5gs,osmo-uecups}-latest: don't hardcode UID 2024-04-05 14:28:16 +00:00
osmo-uecups-master osmo-uecups-master: make osmocom user avilable 2023-07-25 15:21:35 +00:00
osmo-upf-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
osmo_dia2gsup-master dia2gsup: Fix logfile name 2023-08-28 18:31:10 +02:00
osmocom-bb-host-master */Dockerfile: clone from gerrit.osmocom.org using https:// 2023-01-06 23:10:13 +07:00
redmine redmine: run 'apt upgrade' in Dockerfile to get glibc fix from Debian 2023-11-06 17:16:01 +01:00
scripts scripts/kernel-test: build initrd+kernel as user 2024-04-03 12:41:11 +00:00
sctp-test */.release: remove 2022-07-06 12:36:26 +02:00
sigtran-tests sigtran-tests: Add note on why this is still using buster 2023-11-06 17:16:01 +01:00
systemd */Dockerfile: drop MAINTAINER line 2022-05-13 18:17:06 +02:00
ttcn3-asterisk-ims-ue-test asterisk: extensions.conf: Allow extra MO call from SIP UA which HOLDed previous call 2024-07-17 16:48:24 +02:00
ttcn3-bsc-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-bsc-test-sccplite symlinks: ttcn3-bsc-test-sccplite 2018-10-26 10:19:05 +02:00
ttcn3-bsc-test-vamos jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-bscnat-test ttcn3: use debian-bookworm-titan 2023-08-14 09:28:24 +00:00
ttcn3-bts-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-cbc-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-dia2gsup-test ttcn3-dia2gsup-test/osmo_dia2gsup: set connect timer to 200 ms 2023-11-11 19:07:58 +01:00
ttcn3-epdg-test osmo-epdg: add support for testing for latest 2024-07-04 19:01:42 +00:00
ttcn3-fr-test ttcn3: use debian-bookworm-titan 2023-08-14 09:28:24 +00:00
ttcn3-gbproxy-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-gbproxy-test-fr jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-ggsn-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-ggsn-test-ogs Add ttcn3-ggsn-ogs testsuite 2022-02-07 08:47:33 +00:00
ttcn3-hlr-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-hnbgw-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-hnodeb-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-hss-test-ogs jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-mgw-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-mme-test-ogs mme: Use LAC from SGSN with most significat bit set to 0 2023-12-22 14:29:04 +01:00
ttcn3-msc-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-nitb-sysinfo ttcn3: use debian-bookworm-titan 2023-08-14 09:28:24 +00:00
ttcn3-ns-test ttcn3: use debian-bookworm-titan 2023-08-14 09:28:24 +00:00
ttcn3-ns-test-fr Add ttcn3-ns-test-fr container 2021-03-31 10:17:14 +02:00
ttcn3-ns-test-sgsn-sns ttcn3-ns-test-sgsn-sns: add test run for ns sgsn role with sns 2021-09-06 16:53:38 +02:00
ttcn3-ns-test-sns Add ttcn3-ns-test-sns container 2021-03-30 22:38:45 +02:00
ttcn3-pcap-client-test ttcn3: use debian-bookworm-titan 2023-08-14 09:28:24 +00:00
ttcn3-pcu-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-pcu-test-sns PCU: Differentiate between tests with classic and SNS Gb dialects 2019-03-14 21:38:44 +01:00
ttcn3-pgw-test ttcn3-pgw-test: Configure open5gs-smfd S2b/S6b/P-CSCF related bits 2024-02-28 13:12:01 +00:00
ttcn3-remsim-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-s1gw-test ttcn3-s1gw-test: update logging config in osmo-s1gw.config 2024-07-09 16:11:27 +00:00
ttcn3-sccp-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-sgsn-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-sgsn-test-sns ttcn3-sgsn-test-sns: add missing symlink to osmo-stp.cfg 2024-04-25 14:50:20 +07:00
ttcn3-sip-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-smlc-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-stp-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
ttcn3-upf-test jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
.gitignore .gitignore vim swp files 2022-09-21 21:58:56 +02:00
.gitreview add .gitreview 2018-04-12 09:20:24 +00:00
README.md kernel-test/kernel-build: update net-next branch 2024-04-03 12:41:11 +00:00
jenkins-common.sh jenkins-common.sh: Store IP subnet prefix in global variable 2024-07-04 13:30:26 +00:00
osmo-bisect.sh Use osmo-hnbgw from osmo-hnbgw.git instead of osmo-iuh.git 2022-01-05 12:44:16 +01:00
seccomp_profile.json seccomp_profile: enable io_uring 2024-07-09 14:20:24 +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 from the "master" branch 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.
  • OSMO_BSC_BRANCH, OSMO_MSC_BRANCH, ...: branch of the appropriate Osmocom project. Defaults to master.
  • NO_DOCKER_IMAGE_BUILD: when set to 1, it won't try to update the containers (see "caching" below)
  • DOCKER_ARGS: pass extra arguments to docker, e.g. to mount local sources for building as done in osmo-dev.git/ttcn3/ttcn3.sh
  • TEST_CONFIGS: for tests that can run with multiple config sets (e.g. ttcn3-bts-test), run only some of them. See TEST_CONFIGS_ALL in the jenkins.sh for possible values.

Run only one test

Run only TC_gsup_sai in ttcn3-hlr-test:

$ cd ttcn3-hlr-test
$ export DOCKER_ARGS="-e TEST_NAME=TC_gsup_sai"
$ ./jenkins.sh

Run only TC_est_dchan in ttcn3-bts-test, with the generic configuration:

$ cd ttcn3-bts-test
$ export DOCKER_ARGS="-e TEST_NAME=TC_est_dchan"
$ export TEST_CONFIGS="generic"
$ ./jenkins.sh

Using nightly packages from a different date

Pick a date from here and use it:

$ export OSMOCOM_REPO_PATH="obs-mirror/20230316-061901"
$ cd ttcn3-bsc-test
$ ./jenkins.sh

More examples

latest (debian):

$ export IMAGE_SUFFIX="latest"
$ cd ttcn3-mgw-test
$ ./jenkins.sh

latest-centos8:

$ export IMAGE_SUFFIX="latest-centos8"
$ cd ttcn3-mgw-test
$ ./jenkins.sh

2021q1-centos8:

export OSMOCOM_REPO_TESTSUITE_MIRROR="https://downloads.osmocom.org"
export OSMOCOM_REPO_MIRROR="https://downloads.osmocom.org"
export OSMOCOM_REPO_PATH="osmo-maintained"
export OSMOCOM_REPO_VERSION="2021q1"
export IMAGE_SUFFIX="2021q1-centos8"
$ cd ttcn3-mgw-test
$ ./jenkins.sh

Kernel test

OsmoGGSN can be configured to either run completely in userspace, or to use the GTP-U kernel module. To test the kernel module, OsmoGGSN and the kernel module will run with a Linux kernel (either the pre-built one from Debian, or a custom built one) in QEMU inside docker. As of writing, ttcn3-ggsn-test is the only testsuite where it makes sense to test kernel modules. But the same environment variables could be used for other testsuites in the future.

Environment variables:

  • KERNEL_TEST: set to 1 to run the SUT in QEMU
  • KERNEL_TEST_KVM: set to 0 to disable KVM acceleration
  • KERNEL_BUILD: set to 1 to build the kernel instead of using the pre-built one
  • KERNEL_REMOTE_NAME: git remote name (to add multiple git repositories in the same local linux clone, default: net-next)
  • KERNEL_URL: git remote url (default: net-next.git on kernel.org)
  • KERNEL_BRANCH branch to checkout (default: main)
  • KERNEL_SKIP_REBUILD: set to 1 to not build the kernel again if already built with KERNEL_BUILD=1
  • KERNEL_SKIP_SMOKE_TEST: don't boot up the kernel in QEMU once before running the testsuite

The OBS repository mirror consists of ${OSMOCOM_REPO_MIRROR}/${OSMOCOM_REPO_PATH}/${OSMOCOM_REPO_VERSION}, e.g. https://downloads.osmocom.org/packages/osmocom:/latest/.

Creating kernel config fragments

For the kernel tests, we are storing kernel config fragments in the git repository instead of full kernel configs. Generate them as follows:

$ cd _cache/linux
$ cp custom.config .config
$ make olddefconfig
$ cp .config custom-updated.config
$ make defconfig  # config to which to diff
$ scripts/diffconfig -m .config custom-updated.config > fragment.config

Verify that it was done right:

$ make defconfig
$ scripts/kconfig/merge_config.sh -m .config fragment.config
$ make olddefconfig
$ diff .config custom-updated.config  # should be the same

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