Docker images

It's possible to run the software in Docker containers. This way is recommended for beginners.

Note: at the moment, there is a build script for gr-gsm based transceiver only.

The build script for gr-gsm (i.e. Dockerfile) is shipped as a part of a separate project called "docker-playground". It's based on "base/archlinux" image, which provides the recent versions of both UHD and GNU Radio without tons of dependencies such as Xorg, GTK, fonts, etc.

Building Docker image

You need to clone the "docker-playground" repository first:

$ git clone git://

Then make sure you have stable Internet connection and enough disk space, and start building:

$ cd docker-playground/
$ cd gr-gsm-master/
$ make build

It will take a while...

As soon as the building process is finished, you should see the new images:

$ docker image ls
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
user/gr-gsm-master        latest              c5912ee7d6ae        About an hour ago   2.09GB
base/archlinux            latest              7477438791e3        28 hours ago        689MB

Please note that this container requires privileged access to the host USB devices (USRPs).

Running Docker image

Read the above part about running first.

As soon as you build the image, feel free to start it:

$ cd docker-playground/
$ cd gr-gsm-master/
$ make run

The last command will drop you into a bash shell. As there are no build scripts for the higher layer applications of OsmocomBB, the following part assumes that you are running OsmocomBB on the host side.

By default, Docker should create a network interface for interacting with containers:

$ ip addr
# ...
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:13:85:c2:c9 brd ff:ff:ff:ff:ff:ff
    inet scope global docker0
       valid_lft forever preferred_lft forever

In this example, the host has assigned. Remember this address.

Note: make sure your firewall doesn't block the connections with Docker's interface.

The container itself should also have it's own address. You can check it:

[root@f7e86148c1c2 tmp]# pacman -S net-tools
[root@f7e86148c1c2 tmp]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet  netmask  broadcast
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 40  bytes 139097 (135.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 32  bytes 2752 (2.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet  netmask
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Now, make sure your hardware is available within the container:

[root@f7e86148c1c2 tmp]# uhd_find_devices
# Device list will appear here

And finally, start the transceiver:

# You need to use IP address of the host
[root@f7e86148c1c2 tmp]# grgsm_trx --remote-addr

and trxcon on the host side:

$ cd osmocom-bb/src/host/trxcon/trxcon/

# You need to use IP address of the host
$ ./trxcon --trx-ip

That's it!

Add picture from clipboard (Maximum size: 48.8 MB)