Introduce osmo-gsm-tester docker setup

This set up allows running a typical osmo-gsm-tester set up with a main
unit (ogt-master) attached to one (or more) slaves where resources are
located and processes are run.

As an example, current config allows running an iperf3 test over an srsLTE
stack using the ZeroMQ backend.

Change-Id: Iac7c0b613048ce332642d3957c55cc7c53b56d42
This commit is contained in:
Pau Espin 2020-01-30 16:29:08 +01:00 committed by laforge
parent dc6979956c
commit c9fa2a8808
12 changed files with 334 additions and 0 deletions

View File

@ -21,6 +21,7 @@ OSMO_BB_BRANCH?=master
OSMO_BSC_BRANCH?=master
OSMO_BTS_BRANCH?=master
OSMO_GGSN_BRANCH?=master
OSMO_GSM_TESTER_BRANCH?=master
OSMO_HLR_BRANCH?=master
OSMO_IUH_BRANCH?=master
OSMO_MGW_BRANCH?=master
@ -59,6 +60,7 @@ docker-build: .release
--build-arg OSMO_BSC_BRANCH=$(OSMO_BSC_BRANCH) \
--build-arg OSMO_BTS_BRANCH=$(OSMO_BTS_BRANCH) \
--build-arg OSMO_GGSN_BRANCH=$(OSMO_GGSN_BRANCH) \
--build-arg OSMO_GSM_TESTER_BRANCH=$(OSMO_GSM_TESTER_BRANCH) \
--build-arg OSMO_HLR_BRANCH=$(OSMO_HLR_BRANCH) \
--build-arg OSMO_IUH_BRANCH=$(OSMO_IUH_BRANCH) \
--build-arg OSMO_MGW_BRANCH=$(OSMO_MGW_BRANCH) \

135
osmo-gsm-tester/Dockerfile Normal file
View File

@ -0,0 +1,135 @@
ARG USER
FROM $USER/debian-stretch-build
MAINTAINER Pau Espin Pedrol <pespin@sysmocom.de>
# Create jenkins user
RUN useradd -ms /bin/bash jenkins
# Create osmo-gsm-tester group and add user to it
RUN groupadd osmo-gsm-tester
RUN usermod -a -G osmo-gsm-tester jenkins
# install osmo-gsm-tester dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \
dbus \
tcpdump \
sqlite3 \
python3 \
python3-setuptools \
python3-yaml \
python3-mako \
python3-gi \
python3-wheel \
ofono \
patchelf \
sudo \
libcap2-bin \
python3-pip \
udhcpc \
iperf3 \
locales
# install osmo-gsm-tester pip dependencies
RUN pip3 install \
"git+https://github.com/podshumok/python-smpplib.git@master#egg=smpplib" \
pydbus \
pyusb \
pysispm
# install srsLTE runtime dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \
cmake \
libfftw3-dev \
libmbedtls-dev \
libboost-program-options-dev \
libconfig++-dev \
libsctp-dev \
libpcsclite-dev \
libuhd-dev \
libczmq-dev
# Intall sshd:
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
COPY ssh /root/.ssh
COPY --chown=jenkins:jenkins ssh /home/jenkins/.ssh
RUN chmod -R 0700 /home/jenkins/.ssh /root/.ssh
# Create directories for slaves with correct file permissions:
RUN mkdir -p /osmo-gsm-tester-srsue \
/osmo-gsm-tester-srsenb \
/osmo-gsm-tester-srsepc \
/osmo-gsm-tester-trx
RUN chown -R jenkins:jenkins \
/osmo-gsm-tester-srsue \
/osmo-gsm-tester-srsenb \
/osmo-gsm-tester-srsepc \
/osmo-gsm-tester-trx
# Set a UTF-8 locale
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
dpkg-reconfigure --frontend=noninteractive locales && \
update-locale LANG=en_US.UTF-8
ENV LANG en_US.UTF-8
# We require a newer patchelf for srsue (OS#4389)
ADD https://nixos.org/releases/patchelf/patchelf-0.10/patchelf-0.10.tar.bz2 /tmp/patchelf-0.10.tar.bz2
RUN cd /tmp && \
tar -jxf /tmp/patchelf-0.10.tar.bz2 && \
cd patchelf-0.10 && \
./configure --prefix=/opt && \
make && \
mkdir -p /opt/bin/ && \
cp src/patchelf /opt/bin/patchelf-v0.10
ARG OSMOCOM_REPO="http://download.opensuse.org/repositories/network:/osmocom:/nightly/Debian_9.0/"
COPY Release.key /tmp/Release.key
RUN apt-key add /tmp/Release.key && \
rm /tmp/Release.key && \
echo "deb " $OSMOCOM_REPO " ./" > /etc/apt/sources.list.d/osmocom-nightly.list
ADD $OSMOCOM_REPO/Release /tmp/Release
RUN apt-get update && \
apt-get install -y --no-install-recommends \
telnet \
libosmocore-dev \
libosmo-abis-dev \
libosmo-gsup-client-dev \
libosmo-netif-dev \
libosmo-ranap-dev \
libosmo-sccp-dev \
libosmo-sigtran-dev \
libsmpp34-dev \
libgtp-dev \
libasn1c-dev && \
apt-get clean
WORKDIR /tmp
ARG OSMO_GSM_TESTER_BRANCH="master"
RUN git clone git://git.osmocom.org/osmo-gsm-tester.git
ADD http://git.osmocom.org/osmo-gsm-tester/patch?h=$OSMO_GSM_TESTER_BRANCH /tmp/commit
RUN cd osmo-gsm-tester && \
git fetch && git checkout $OSMO_GSM_TESTER_BRANCH && \
(git symbolic-ref -q HEAD && git reset --hard origin/$OSMO_GSM_TESTER_BRANCH || exit 1); \
git rev-parse --abbrev-ref HEAD && git rev-parse HEAD
# Copy several scripts and permission for osmo-gsm-tester:
RUN mkdir -p /usr/local/bin/ && cp osmo-gsm-tester/utils/bin/* /usr/local/bin/
RUN mkdir -p /etc/sudoers.d/ && cp osmo-gsm-tester/utils/sudoers.d/* /etc/sudoers.d/
VOLUME /data
COPY resources.conf /tmp/osmo-gsm-tester/example/resources.conf
ENV OSMO_GSM_TESTER_CONF /tmp/osmo-gsm-tester/example
WORKDIR /data
CMD ["/bin/sh", "-c", "/data/osmo-gsm-tester.sh >/data/osmo-gsm-tester.log 2>&1"]
EXPOSE 22/tcp

3
osmo-gsm-tester/Makefile Normal file
View File

@ -0,0 +1,3 @@
RUN_ARGS?=--rm --privileged --cap-add=NET_ADMIN --device /dev/net/tun:/dev/net/tun --network sigtran --ip 172.18.50.21 -v ogt-vol:/data
include ../make/Makefile

View File

@ -0,0 +1,20 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQENBFJBt/wBCADAht3d/ilNuyzaXYw/QwTRvmjyoDvfXw+H/3Fvk1zlDZoiKPPc
a1wCVBINUZl7vYM2OXqbJwYa++JP2Q48xKSvC6thbRc/YLievkbcvTemf7IaREfl
CTjoYpoqXHa9kHMw1aALDm8CNU88jZmnV7v9L6hKkbYDxie+jpoj7D6B9JlxgNJ4
5dQyRNsFGVcIl4Vplt1HyGc5Q5nQI/VgS2rlF/IOXmhRQBc4LEDdU8R2IKnkU4ee
S7TWanAigGAQhxGuCkS39/CWzc1DhLhjlNhBl/+RTPejkqJtAy00ZLps3+RqUN1Y
CU/Fsr7aRlYVGqQ/BlptwV0XQ2VVYJX2oEBBABEBAAG0MG5ldHdvcmsgT0JTIFBy
b2plY3QgPG5ldHdvcmtAYnVpbGQub3BlbnN1c2Uub3JnPokBPAQTAQIAJgUCWmMc
aQIbAwUJDEAUbQYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEGLrGgkXKA3fjsoI
ALSXmXzFCpTxg8a6tvXkqddY/qAmeBMNUf7hslI9wN3leNmCrnuHS8TbHWYJZgtw
8M5fKL3aRQYaIiqqm1XOUF0OqwYNDj5V3y38mM68NYOkzgSP7foMwZp9Y0TlGhtI
L8weA+2RUjB4hwwGMAYMqkRZyKW3NhPqdlGGoXac1ilwEyGXFHdOLbkhtyS+P2yb
/EvaKIN5cMLzRZKeYgdp9WuAirV+yV/SDbgvabW098lrWhGLltlRRDQgMV883p8I
ERMI1wlLFZGnHL3mfBWGeQ24M/DaBOdXQDtfBLCJ9nGztmDBUb8i6GFWU7nD2TGi
8mYUsED1ZDwO/0jdvJ4gSluIRgQTEQIABgUCUkG3/AAKCRA7MBG3a51lIzhdAJ9v
d6XPffMZRcCGgDEY5OaTn/MsCQCgrXbeZpFJgnirSrc8rRonvzYFiF4=
=Gvly
-----END PGP PUBLIC KEY BLOCK-----

56
osmo-gsm-tester/jenkins.sh Executable file
View File

@ -0,0 +1,56 @@
#!/bin/sh
# This docket env allows running a typical osmo-gsm-tester setup with a main
# unit (ogt-master) running osmo-gsm-tester process, and using another docker
# container as a remote host where to run child processes.
#
# Trial directory must be set in the parent host's /tmp/trial path, which will
# then be mounted to ogt-master and used my osmo-gsm-tester.
#
# osmo-gsm-tester parameters and suites are passed in osmo-gsm-tester.sh in same
# directory as this script.
#
# Log files can be found in host's /tmp/logs/ directory.
. ../jenkins-common.sh
IMAGE_SUFFIX="${IMAGE_SUFFIX:-master}"
docker_images_require \
"debian-stretch-build" \
"osmo-gsm-tester"
network_create 172.18.50.0/24
mkdir $VOL_BASE_DIR/ogt-slave
mkdir $VOL_BASE_DIR/ogt-master
cp osmo-gsm-tester.sh $VOL_BASE_DIR/ogt-master/
echo Starting container with osmo-gsm-tester slave
docker run --rm \
--cap-add=NET_ADMIN \
--cap-add=SYS_ADMIN \
--device /dev/net/tun:/dev/net/tun \
--network $NET_NAME \
--ip 172.18.50.100 \
-v $VOL_BASE_DIR/ogt-slave:/data \
--name ${BUILD_TAG}-ogt-slave -d \
$REPO_USER/osmo-gsm-tester \
/bin/sh -c "/usr/sbin/sshd -D -e >/data/sshd.log 2>&1"
echo Starting container with osmo-gsm-tester main unit
docker run --rm \
--cap-add=NET_ADMIN \
--cap-add=SYS_ADMIN \
--device /dev/net/tun:/dev/net/tun \
--network $NET_NAME \
--ip 172.18.50.2 \
-v $VOL_BASE_DIR/ogt-master:/data \
-v /tmp/trial:/tmp/trial \
--name ${BUILD_TAG}-ogt-master \
$REPO_USER/osmo-gsm-tester
echo Stopping containers
docker container kill ${BUILD_TAG}-ogt-slave
network_remove
collect_logs

View File

@ -0,0 +1,14 @@
#!/bin/bash
# Add local IP addresses required by osmo-gsm-tester resources:
ip addr add 172.18.50.2/24 dev eth0
ip addr add 172.18.50.3/24 dev eth0
ip addr add 172.18.50.4/24 dev eth0
ip addr add 172.18.50.5/24 dev eth0
ip addr add 172.18.50.6/24 dev eth0
ip addr add 172.18.50.7/24 dev eth0
ip addr add 172.18.50.8/24 dev eth0
ip addr add 172.18.50.9/24 dev eth0
ip addr add 172.18.50.10/24 dev eth0
su -c "python3 -u /tmp/osmo-gsm-tester/src/osmo-gsm-tester.py /tmp/trial -T -l dbg -s 4g -t iperf3" -m jenkins

View File

@ -0,0 +1,60 @@
# all hardware and interfaces available to this osmo-gsm-tester
ip_address:
- addr: 172.18.50.2
- addr: 172.18.50.3
- addr: 172.18.50.4
- addr: 172.18.50.5
- addr: 172.18.50.6
- addr: 172.18.50.7
- addr: 172.18.50.8
- addr: 172.18.50.9
- addr: 172.18.50.10
run_node:
- run_type: ssh
run_addr: 172.18.50.100
ssh_user: jenkins
ssh_addr: 172.18.50.100
bts:
- label: Ettus B200
type: osmo-bts-trx
ipa_unit_id: 6
addr: 172.18.50.3
band: GSM-1800
ciphers: [a5_0, a5_1, a5_3]
osmo_trx:
type: uhd
launch_trx: true
remote_user: jenkins
trx_ip: 172.18.50.100
dev_args: "type=b200,serial=306BD11"
clock_reference: external
multi_arfcn: true
enb:
- label: srsENB-zmq
type: srsenb
remote_user: jenkins
addr: 172.18.50.100
arfcn:
- arfcn: 512
band: GSM-1800
modem:
- label: sierra_1st
path: '/sys/devices/pci0000:00/0000:00:12.2/usb1/1-5/1-5.4/1-5.4.1/1-5.4.1.2'
ki: 'EBAB63D06C3F546A16C977CB40E57C68'
auth_algo: 'comp128v1'
ciphers: [a5_0, a5_1]
features: ['sms', 'voice', 'ussd', 'sim']
- label: srsUE-zmq_1
type: srsue
remote_user: jenkins
addr: 172.18.50.100
imsi: '001010123456789'
ki: '8CCBE85A62C6DC7AC2A9886F4BBC3146'
auth_algo: 'xor'

View File

@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDGYP7+YrCjZ04y+4arcB8Iv72g64nYJJvu+M66EDWVMr2Gvb0yHLvi/jeIfHlI3TvxBvouwX4wuFnLlI5BNvrwB0rCPnDzzPfX+osnAmqvBbVWFbAQkq4y9+tTiwqhAPV+PVW/AkTGoDGdiMdDL12AwT9HHRKCZUZBdPV3SmKqxRTI+pFZTROROulWMCBEn7LnEiQiqrcS2t79dDLFmbnZ75c9lOewHZfGgLUUwj5b+CHKwLNiFhJYdVq6LtyJ11D/sktEs+yyKbn7/1mbGy9Uwe2Rk+521XdmuHow86f9tOPvdRVqm7kzugkANOe2qz4PvT167bQHhm3I975d86fEeC6Ro+OvDDxARxLsCBFFZxmbNMg2+Ggt5y7l0GUa5lyjY+prKGrQ2ZWHASlwby8FCGe8fFzaJbag6841xiHE0PKPSySAnVq2gUHcLMAdsjCZsfAi0i15VDfKrd1W3Zlu6ikE9II/N89gVCVHI53Nnb7L9W445C8ido9qDSLEgOM= pespin@pespin-thinkpad

View File

@ -0,0 +1,3 @@
Host 172.18.50.*
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null

View File

@ -0,0 +1,38 @@
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----

View File

@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDGYP7+YrCjZ04y+4arcB8Iv72g64nYJJvu+M66EDWVMr2Gvb0yHLvi/jeIfHlI3TvxBvouwX4wuFnLlI5BNvrwB0rCPnDzzPfX+osnAmqvBbVWFbAQkq4y9+tTiwqhAPV+PVW/AkTGoDGdiMdDL12AwT9HHRKCZUZBdPV3SmKqxRTI+pFZTROROulWMCBEn7LnEiQiqrcS2t79dDLFmbnZ75c9lOewHZfGgLUUwj5b+CHKwLNiFhJYdVq6LtyJ11D/sktEs+yyKbn7/1mbGy9Uwe2Rk+521XdmuHow86f9tOPvdRVqm7kzugkANOe2qz4PvT167bQHhm3I975d86fEeC6Ro+OvDDxARxLsCBFFZxmbNMg2+Ggt5y7l0GUa5lyjY+prKGrQ2ZWHASlwby8FCGe8fFzaJbag6841xiHE0PKPSySAnVq2gUHcLMAdsjCZsfAi0i15VDfKrd1W3Zlu6ikE9II/N89gVCVHI53Nnb7L9W445C8ido9qDSLEgOM= pespin@pespin-thinkpad

View File

@ -0,0 +1 @@
|1|eVQDORaCD0M0PU3796H/UNBd7UY=|HOZgOCC2cv57PWiBdDr60diz68A= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIW6ho8F4O1Mr9kTFbQAWTa7hB8UoaDzRha2ycVE8JmGRgX/L2iy4SeqlDDizoOT2kk4KBRWU0QxUWsxoUfzN6o=