- Build from Source
- External dependencies
- Download Sources
- Build debian packages
- Details and Troubleshooting
- Example: completely build openbsc
- Example: build script
Build from Source¶
Before you consider building from source, be aware that there are Nightly Builds
available for Debian + Ubuntu platforms. These are recommended for normal users.
Osmocom projects use autoconf/automake.
The general pattern for building is:
cd source-tree autoreconf -fi ./configure make make check make install sudo ldconfig
./configure step may need further configuration options, and
./configure will tell you which dependencies are still missing, if any.
See below for project specific details and troubleshooting.
make step may be sped up by using multiple CPU cores:
make -j 8
We take care to make our builds parallelizable with
-j, but in case
make -j fails, issuing a simple
make could fix the problem (expecting
this only in libsmpp34).
Which libraries are needed by various Osmocom programs is best resolved during
./configure step described below. This script checks for any missing
dependencies and issues corresponding error messages.
Here is a (probably incomplete) overview of dependencies between Osmocom
|To build ...||... you also need ...|
|osmo-bts||libosmocore, libosmo-abis, openbsc (source tree only), L1 headers depending on BTS model|
|osmo-pcu||libosmocore, L1 headers depending on BTS model|
|openbsc: osmo-nitb, osmo-bsc, osmo-sgsn, osmo-bsc_nat, osmo-bsc_mgcp||libosmocore, libosmo-abis, libosmo-netif, libosmo-sccp, libsmpp34|
|openbsc: 3G osmo-msc (branch sysmocom/iu)||libosmocore, libosmo-abis, libosmo-netif (branch sysmocom/sctp), libosmo-sccp (branch sysmocom/iu), asn1c, libasn1c, osmo-iuh|
|osmo-iuh||libosmocore, libosmo-netif, libosmo-sccp, asn1c, libasn1c|
If you want to build on specific Linux distros, you might need to install additional dependencies before the build will succeed
-- this is a collection of various dependencies used by various osmocom projects:
|To build on ...||...you might need to install these packages:|
|Ubuntu 16.10||libpcsclite-dev libtalloc-dev libortp-dev libsctp-dev libmnl-dev libdbi-dev libdbd-sqlite3 libsqlite3-dev sqlite3 libc-ares-dev|
|Debian 8||build-essential gcc g++ make automake autoconf libtool pkg-config libtalloc-dev libpcsclite-dev libortp-dev libsctp-dev libssl-dev libdbi-dev libdbd-sqlite3 libsqlite3-dev libpcap-dev libc-ares-dev sqlite3|
|FreeBSD 11||automake autoconf libtool git pkgconf talloc pcsc-lite python gmake ortp|
|Fedora 25||dnf install @development-tools autoconf automake libtool libtalloc-devel pcsc-lite-devel ortp-devel openssl-devel lksctp-tools-devel libmnl-devel libdbi-devel libdbi-dbd-sqlite libpcap-devel|
The latest Osmocom sources are available from git at https://git.osmocom.org,
where each project's overview page displays the actual git URL.
The projects' repository URLs generally are of the pattern:
(To contribute, see Submitting Patches)
For example, to verify libosmocore's git repository URL, browse to
https://git.osmocom.org/libosmocore/ and observe the URL shown at the
bottom of the page under Clone:
Then download this URL using the
git clone git://git.osmocom.org/libosmocore
It is also possible to download specific releases' tarballs for each git ref
that is defined. For example, browse to https://git.osmocom.org/libosmocore/,
click on refs on the top and select any branch or tag, e.g. 0.9.0
All of these download instructions hold true for any of the git repositories,
not limited to libosmocore.
Build debian packages¶
Most Osmocom projects are setup and ready for building debian packages.
debian/ subdir in each source tree.
For example, to build a libosmocore debian package:
cd libosmocore/ dpkg-buildpackage -tc -uc -us # then, you can install the package on your system with sudo dpkg -i ../libosmocore*.deb
These steps are identical for all other Osmocom projects that are ready for debian packaging.Advantages of debian packages:
- they allow you to easily install the same binaries on several machines,
- you don't need to keep the source tree around,
- they guarantee a clean de-installation later.
Note: when not using debian packages, i.e. after a '
make install' directly from the source tree,
you can also achieve a clean de-installation with '
Details and Troubleshooting¶
Here is a list of the most common configuration items or pitfalls to be
aware of when building specific Osmocom projects.
On systems like FreeBSD, you need to run
gmake instead of
Cross-Compiling for a BTS Platform¶
To build new software for the sysmoBTS and Litecell 1.5, you will typically
cross-compile using an SDK matching the BTS. You should find specific instructions
in, for example, the sysmoBTS manual.
General ./configure options¶
To provide the installation location, which is /usr/local by default:
If you choose a non-standard location, later builds may fail to find it.
For example, if you built libosmocore with a custom prefix, a subsequent
build of libosmo-abis, which needs libosmocore installed, may fail.
You can tell a build process where to look for libraries to compile against
PKG_CONFIG_PATH environment variable.
Furthermore, when you want to run binaries compiled against libraries
installed in a non-standard location, you will have to use the
LD_LIBRARY_PATH environment variable to successfully load the binary.
make check step typically runs such binaries,
as well as when you would like to run the installed binaries yourself.
mkdir -p $HOME/osmo/src cd $HOME/osmo/src git clone git://git.osmocom.org/libosmocore cd libosmocore autoreconf -fi ./configure --prefix=$HOME/osmo/inst --disable-pcsc make -j5 make check make install cd .. git clone git://git.osmocom.org/libosmo-abis cd libosmo-abis autoreconf -fi export PKG_CONFIG_PATH=$HOME/osmo/inst/lib/pkgconfig ./configure --prefix=$HOME/osmo/inst make -j5 export LD_LIBRARY_PATH=$HOME/osmo/inst/lib make check make install
Note that PKG_CONFIG_PATH points at the prefix's lib/pkgconfig and is needed
during the configure step of a library;
And that LD_LIBRARY_PATH is needed when running binaries that need libraries
installed in the non-standard location, here via
Furthermore, when installing to an SDK's sysroot location, you would usually
DESTDIR to the sysroot with
--prefix=/usr, resulting in an install
libpcsclite is not easily available, e.g. when building for a BTS target platform:
openbsc is so far the only source tree where the build commands must be run
a level deeper than the source tree's root. Enter the second
git clone git://git.osmocom.org/openbsc cd openbsc/openbsc autoreconf -fi [...]
openbsc for 3G¶
Be sure to pass the
--enable-iu configure option so that osmo-msc gets Iu interface support.
cd openbsc/openbsc ./configure --enable-iu
Example: completely build openbsc¶
This is an example of a complete build process for 2G openbsc and openggsn,
including SMPP and the "nat" binaries, to the
/usr/local prefix; it is assumed
that your system by default scans
/usr/local for installed libraries:
osmo_src=$HOME/osmo/src mkdir -p $osmo_src cd $osmo_src git clone git://git.osmocom.org/libosmocore cd libosmocore autoreconf -fi ./configure make -j5 make check make install cd $osmo_src git clone git://git.osmocom.org/libosmo-abis cd libosmo-abis autoreconf -fi ./configure make -j5 make check make install cd $osmo_src git clone git://git.osmocom.org/libosmo-netif cd libosmo-netif autoreconf -fi ./configure make -j5 make check make install cd $osmo_src git clone git://git.osmocom.org/libosmo-sccp cd libosmo-sccp autoreconf -fi ./configure make -j5 make check make install cd $osmo_src git clone git://git.osmocom.org/libsmpp34 cd libsmpp34 autoreconf -fi ./configure make make check make install cd $osmo_src git clone git://git.osmocom.org/openggsn cd openggsn autoreconf -fi ./configure make -j5 make check make install cd $osmo_src git clone git://git.osmocom.org/openbsc cd openbsc/openbsc autoreconf -fi ./configure --enable-smpp --enable-osmo-bsc --enable-nat make -j5 make check make install which osmo-nitb osmo-nitb --version
Example: build script¶
This is a shell script that builds openbsc and openggsn,
expecting the git clones to be ready in the current directory: