Project

General

Profile

Build from Source » History » Version 55

osmith, 10/16/2018 03:21 PM
add osmo-trx build dependencies

1 1 neels
{{>toc}}
2 1 neels
3 1 neels
h1. Build from Source
4 1 neels
5 32 laforge
bq. *Before you consider building from source, be aware that there are [[Binary Packages]]
6 1 neels
available for Debian + Ubuntu platforms. These are recommended for normal users.*
7 1 neels
8 5 neels
Osmocom projects use autoconf/automake.
9 2 neels
The general pattern for building is:
10 1 neels
11 1 neels
<pre>
12 1 neels
cd source-tree
13 1 neels
autoreconf -fi
14 50 osmith
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig"
15 1 neels
./configure
16 1 neels
make
17 1 neels
make check
18 46 osmith
sudo make install
19 15 wirelesss
sudo ldconfig
20 1 neels
</pre>
21 1 neels
22 3 neels
The @./configure@ step may need further configuration options, and
23 3 neels
@./configure@ will tell you which dependencies are still missing, if any.
24 3 neels
See below for project specific details and troubleshooting.
25 1 neels
26 6 neels
The @make@ step may be sped up by using multiple CPU cores:
27 1 neels
28 1 neels
<pre>
29 1 neels
make -j 8
30 1 neels
</pre>
31 1 neels
32 1 neels
We take care to make our builds parallelizable with @-j@, but in case
33 41 neels
@make -j@ fails, issuing a simple @make@ could fix the problem.
34 1 neels
35 1 neels
h1. Dependencies
36 1 neels
37 1 neels
Which libraries are needed by various Osmocom programs is best resolved during
38 1 neels
the @./configure@ step described below. This script checks for any missing
39 6 neels
dependencies and issues corresponding error messages.
40 1 neels
41 1 neels
Here is a (probably incomplete) overview of dependencies between Osmocom
42 1 neels
projects:
43 1 neels
44 1 neels
| _To build ..._ | _... you also need ..._ |
45 1 neels
| osmo-bts | libosmocore, libosmo-abis, openbsc (source tree only), L1 headers depending on BTS model |
46 1 neels
| osmo-pcu | libosmocore, L1 headers depending on BTS model |
47 40 neels
| osmo-hlr | libosmocore, libosmo-abis |
48 40 neels
| osmo-mgw | libosmocore, libosmo-abis, libosmo-netif |
49 40 neels
| osmo-msc | libosmocore, libosmo-abis, libosmo-netif, libosmo-sccp, osmo-mgw (for libosmo-mgcp-client), libsmpp34 (for --enable-smpp); for 3G, use --enable-iu and add: osmo-iuh, libasn1c |
50 40 neels
| osmo-bsc | libosmocore, libosmo-abis, libosmo-netif, libosmo-sccp, osmo-mgw (for libosmo-mgcp-client) |
51 40 neels
| osmo-sgsn | libosmocore, osmo-ggsn; for 3G, use --enable-iu and add: osmo-iuh, libasn1c |
52 40 neels
| osmo-ggsn | libosmocore |
53 53 osmith
| osmo-sip-connector | libosmocore |
54 55 osmith
| osmo-trx | libosmocore |
55 1 neels
56 20 Darkstar
h1. External dependencies
57 20 Darkstar
58 21 neels
If you want to build on specific Linux distros, you might need to install additional dependencies before the build will succeed
59 21 neels
-- this is a collection of various dependencies used by various osmocom projects:
60 20 Darkstar
61 20 Darkstar
| _To build on ..._ | _...you might need to install these packages:_ |
62 33 pespin
|Ubuntu 16.10 | libpcsclite-dev libtalloc-dev libortp-dev libsctp-dev libmnl-dev libdbi-dev libdbd-sqlite3 libsqlite3-dev sqlite3 libc-ares-dev libgnutls-dev |
63 54 osmith
|Debian 8 and 9| 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 libgnutls28-dev libsctp-dev sqlite3 libsofia-sip-ua-glib-dev|
64 22 laforge
|FreeBSD 11|automake autoconf libtool git pkgconf talloc pcsc-lite python gmake ortp|
65 52 osmith
|Fedora 28|@development-tools autoconf automake gnutls-devel libtool libtalloc-devel pcsc-lite-devel ortp-devel openssl-devel lksctp-tools-devel libmnl-devel libdbi-devel libdbi-dbd-sqlite libpcap-devel sqlite-devel gcc-g++ uhd-devel libusb-devel fftw-devel boost-devel|
66 20 Darkstar
67 1 neels
h1. Download Sources
68 1 neels
69 3 neels
The latest Osmocom sources are available from git at https://git.osmocom.org,
70 3 neels
where each project's overview page displays the actual git URL.
71 3 neels
72 1 neels
The projects' repository URLs generally are of the pattern:
73 3 neels
<pre>git://git.osmocom.org/project-name</pre>
74 6 neels
(To contribute, see [[Coding Standards#Submitting-Patches|Submitting Patches]])
75 3 neels
76 3 neels
For example, to verify libosmocore's git repository URL, browse to
77 1 neels
https://git.osmocom.org/libosmocore/ and observe the URL shown at the
78 3 neels
bottom of the page under _Clone_: @git://git.osmocom.org/libosmocore@
79 3 neels
80 6 neels
Then download this URL using the @git@ client:
81 3 neels
82 1 neels
<pre>
83 1 neels
git clone git://git.osmocom.org/libosmocore
84 1 neels
</pre>
85 1 neels
86 6 neels
It is also possible to download specific releases' tarballs for each git ref
87 6 neels
that is defined. For example, browse to https://git.osmocom.org/libosmocore/,
88 6 neels
click on _refs_ on the top and select any branch or tag, e.g. "0.9.0":https://git.osmocom.org/libosmocore/tag/?h=0.9.0
89 6 neels
90 16 neels
All of these download instructions hold true for any of the git repositories,
91 16 neels
not limited to libosmocore.
92 6 neels
93 17 neels
h1. Build debian packages
94 1 neels
95 17 neels
Most Osmocom projects are setup and ready for building debian packages.
96 17 neels
See the @debian/@ subdir in each source tree.
97 13 wirelesss
98 17 neels
For example, to build a libosmocore debian package:
99 1 neels
100 1 neels
<pre>
101 17 neels
cd libosmocore/
102 13 wirelesss
dpkg-buildpackage -tc -uc -us
103 17 neels
# then, you can install the package on your system with
104 17 neels
sudo dpkg -i ../libosmocore*.deb
105 13 wirelesss
</pre>
106 13 wirelesss
107 17 neels
These steps are identical for all other Osmocom projects that are ready for debian packaging.
108 13 wirelesss
109 17 neels
Advantages of debian packages:
110 17 neels
* they allow you to easily install the same binaries on several machines,
111 17 neels
* you don't need to keep the source tree around,
112 17 neels
* they guarantee a clean de-installation later.
113 17 neels
114 17 neels
Note: when not using debian packages, i.e. after a '@make install@' directly from the source tree,
115 17 neels
you can also achieve a clean de-installation with '@make uninstall@'.
116 11 wirelesss
117 12 wirelesss
h1. Details and Troubleshooting
118 11 wirelesss
119 12 wirelesss
Here is a list of the most common configuration items or pitfalls to be
120 12 wirelesss
aware of when building specific Osmocom projects.
121 12 wirelesss
122 6 neels
123 6 neels
h2. Non-GNU Systems
124 6 neels
125 6 neels
On systems like FreeBSD, you need to run @gmake@ instead of @make@.
126 6 neels
127 7 neels
h2. Cross-Compiling for a BTS Platform
128 7 neels
129 7 neels
To build new software for the sysmoBTS and Litecell 1.5, you will typically
130 7 neels
cross-compile using an SDK matching the BTS. You should find specific instructions
131 7 neels
in, for example, the sysmoBTS manual.
132 7 neels
133 6 neels
h2. General ./configure options
134 6 neels
135 6 neels
To provide the installation location, which is /usr/local by default:
136 6 neels
<pre>
137 6 neels
./configure --prefix=$HOME/my_osmocom_inst
138 6 neels
</pre>
139 6 neels
140 6 neels
If you choose a non-standard location, later builds may fail to find it.
141 6 neels
For example, if you built libosmocore with a custom prefix, a subsequent
142 6 neels
build of libosmo-abis, which needs libosmocore installed, may fail.
143 6 neels
You can tell a build process where to look for libraries to compile against
144 6 neels
using the @PKG_CONFIG_PATH@ environment variable.
145 6 neels
146 6 neels
Furthermore, when you want to run binaries compiled against libraries
147 6 neels
installed in a non-standard location, you will have to use the
148 6 neels
@LD_LIBRARY_PATH@ environment variable to successfully load the binary.
149 6 neels
Particularly, the @make check@ step typically runs such binaries,
150 6 neels
as well as when you would like to run the installed binaries yourself.
151 6 neels
152 6 neels
For example:
153 6 neels
154 6 neels
<pre>
155 6 neels
mkdir -p $HOME/osmo/src
156 6 neels
cd $HOME/osmo/src
157 6 neels
git clone git://git.osmocom.org/libosmocore
158 6 neels
cd libosmocore
159 6 neels
autoreconf -fi
160 6 neels
./configure --prefix=$HOME/osmo/inst --disable-pcsc
161 6 neels
make -j5
162 7 neels
make check
163 7 neels
make install
164 36 neels
sudo ldconfig
165 7 neels
166 7 neels
cd ..
167 7 neels
git clone git://git.osmocom.org/libosmo-abis
168 7 neels
cd libosmo-abis
169 7 neels
autoreconf -fi
170 7 neels
export PKG_CONFIG_PATH=$HOME/osmo/inst/lib/pkgconfig
171 7 neels
./configure --prefix=$HOME/osmo/inst
172 7 neels
make -j5
173 7 neels
export LD_LIBRARY_PATH=$HOME/osmo/inst/lib
174 7 neels
make check
175 7 neels
make install
176 36 neels
sudo ldconfig
177 6 neels
</pre>
178 6 neels
179 7 neels
Note that PKG_CONFIG_PATH points at the prefix's lib/pkgconfig and is needed
180 7 neels
during the configure step of a library;
181 7 neels
182 7 neels
And that LD_LIBRARY_PATH is needed when running binaries that need libraries
183 7 neels
installed in the non-standard location, here via @make check@.
184 7 neels
185 7 neels
Furthermore, when installing to an SDK's sysroot location, you would usually
186 7 neels
set @DESTDIR@ to the sysroot with @--prefix=/usr@, resulting in an install
187 7 neels
location of @$DESTDIR/usr@.
188 7 neels
189 6 neels
h2. libosmocore
190 6 neels
191 6 neels
When @libpcsclite@ is not easily available, e.g. when building for a BTS target platform:
192 6 neels
<pre>
193 6 neels
./configure --disable-pcsc
194 6 neels
</pre>
195 1 neels
196 7 neels
h2. openbsc
197 7 neels
198 7 neels
@openbsc@ is so far the only source tree where the build commands must be run
199 7 neels
a level deeper than the source tree's root. Enter the second @openbsc@ dir:
200 7 neels
201 7 neels
<pre>
202 7 neels
git clone git://git.osmocom.org/openbsc
203 7 neels
cd openbsc/openbsc
204 7 neels
autoreconf -fi
205 7 neels
[...]
206 7 neels
</pre>
207 7 neels
208 37 neels
h2. osmo-msc and osmo-sgsn for 3G
209 19 neels
210 37 neels
Be sure to pass the @--enable-iu@ configure option to enable Iu interface support.
211 19 neels
212 19 neels
<pre>
213 37 neels
cd osmo-msc
214 19 neels
./configure --enable-iu
215 19 neels
</pre>
216 19 neels
217 38 neels
h1. Example: completely build osmo-bsc, osmo-msc, osmo-sgsn and osmo-ggsn
218 7 neels
219 39 pespin
This is an example of a complete build process for 2G+3G core network,
220 7 neels
including SMPP and the "nat" binaries, to the @/usr/local@ prefix; it is assumed
221 7 neels
that your system by default scans @/usr/local@ for installed libraries:
222 1 neels
223 39 pespin
If you don't require 3G, you can omit build of osmo-iuh and remove configure flag "--enable-iu" in osmo-msc and osmo-sgsn.
224 39 pespin
225 7 neels
<pre>
226 7 neels
osmo_src=$HOME/osmo/src
227 7 neels
mkdir -p $osmo_src
228 7 neels
229 7 neels
cd $osmo_src
230 7 neels
git clone git://git.osmocom.org/libosmocore
231 7 neels
cd libosmocore
232 7 neels
autoreconf -fi
233 7 neels
./configure
234 7 neels
make -j5
235 7 neels
make check
236 1 neels
make install
237 38 neels
sudo ldconfig
238 7 neels
239 7 neels
cd $osmo_src
240 7 neels
git clone git://git.osmocom.org/libosmo-abis
241 7 neels
cd libosmo-abis
242 7 neels
autoreconf -fi
243 7 neels
./configure
244 7 neels
make -j5
245 7 neels
make check
246 1 neels
make install
247 38 neels
sudo ldconfig
248 7 neels
249 7 neels
cd $osmo_src
250 7 neels
git clone git://git.osmocom.org/libosmo-netif
251 7 neels
cd libosmo-netif
252 7 neels
autoreconf -fi
253 7 neels
./configure
254 7 neels
make -j5
255 7 neels
make check
256 1 neels
make install
257 38 neels
sudo ldconfig
258 7 neels
259 7 neels
cd $osmo_src
260 7 neels
git clone git://git.osmocom.org/libosmo-sccp
261 7 neels
cd libosmo-sccp
262 7 neels
autoreconf -fi
263 7 neels
./configure
264 7 neels
make -j5
265 7 neels
make check
266 1 neels
make install
267 38 neels
sudo ldconfig
268 7 neels
269 7 neels
cd $osmo_src
270 7 neels
git clone git://git.osmocom.org/libsmpp34
271 7 neels
cd libsmpp34
272 7 neels
autoreconf -fi
273 7 neels
./configure
274 7 neels
make
275 7 neels
make check
276 1 neels
make install
277 38 neels
sudo ldconfig
278 1 neels
279 7 neels
cd $osmo_src
280 38 neels
git clone git://git.osmocom.org/osmo-mgw
281 38 neels
cd osmo-mgw
282 7 neels
autoreconf -fi
283 7 neels
./configure
284 1 neels
make -j5
285 1 neels
make check
286 1 neels
make install
287 38 neels
sudo ldconfig
288 1 neels
289 1 neels
cd $osmo_src
290 38 neels
git clone git://git.osmocom.org/libasn1c
291 38 neels
cd libasn1c
292 1 neels
autoreconf -fi
293 38 neels
./configure
294 1 neels
make
295 39 pespin
make check
296 39 pespin
make install
297 39 pespin
sudo ldconfig
298 39 pespin
299 39 pespin
cd $osmo_src
300 39 pespin
git clone git://git.osmocom.org/osmo-iuh
301 39 pespin
cd osmo-iuh
302 39 pespin
autoreconf -fi
303 39 pespin
./configure
304 39 pespin
make -j5
305 38 neels
make check
306 38 neels
make install
307 38 neels
sudo ldconfig
308 38 neels
309 38 neels
cd $osmo_src
310 38 neels
git clone git://git.osmocom.org/osmo-msc
311 38 neels
cd osmo-msc
312 38 neels
autoreconf -fi
313 38 neels
./configure --enable-iu
314 1 neels
make -j5
315 1 neels
make check
316 1 neels
make install
317 38 neels
sudo ldconfig
318 1 neels
319 38 neels
cd $osmo_src
320 42 neels
git clone git://git.osmocom.org/osmo-ggsn
321 42 neels
cd osmo-ggsn
322 38 neels
autoreconf -fi
323 42 neels
./configure
324 38 neels
make -j5
325 38 neels
make check
326 38 neels
make install
327 38 neels
sudo ldconfig
328 38 neels
329 38 neels
cd $osmo_src
330 42 neels
git clone git://git.osmocom.org/osmo-sgsn
331 42 neels
cd osmo-sgsn
332 38 neels
autoreconf -fi
333 42 neels
./configure --enable-iu
334 1 neels
make -j5
335 38 neels
make check
336 38 neels
make install
337 38 neels
sudo ldconfig
338 38 neels
339 42 neels
export LD_LIBRARY_PATH="/usr/local/lib"
340 42 neels
export PATH="$PATH:/usr/local/bin"
341 38 neels
which osmo-msc
342 38 neels
osmo-msc --version
343 6 neels
</pre>
344 6 neels
345 9 neels
h1. Example: build script
346 31 laforge
347 9 neels
This is a shell script that builds openbsc and osmo-ggsn,
348 9 neels
expecting the git clones to be ready in the current directory:
349 9 neels
350 1 neels
attachment:build_2G.sh
351 43 neels
352 43 neels
h1. Example: top-level Makefile
353 43 neels
354 43 neels
I (neels) use a top-level makefile to manage various configurations and build all source trees in sequence.
355 43 neels
See https://git.osmocom.org/osmo-dev and look at the readme file.
356 47 osmith
357 47 osmith
h1. Example: script for cloning and building a single project
358 47 osmith
359 47 osmith
<pre>
360 47 osmith
#!/bin/sh -e
361 47 osmith
362 47 osmith
# Location where the git repositories will be stored (must exist)
363 47 osmith
DIR=~/code
364 47 osmith
365 47 osmith
# Check usage
366 47 osmith
if [ -z "$1" ]; then
367 47 osmith
	echo "usage: $(basename $0) PROJECT"
368 47 osmith
	exit 1
369 47 osmith
fi
370 47 osmith
371 47 osmith
# Clone
372 49 osmith
cd $DIR
373 47 osmith
if ! [ -d "$1" ]; then
374 47 osmith
	git clone "git://git.osmocom.org/$1"
375 47 osmith
fi
376 47 osmith
377 47 osmith
# Build
378 50 osmith
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig/"
379 49 osmith
cd $1
380 47 osmith
autoreconf -fi
381 47 osmith
./configure
382 47 osmith
make -j3
383 47 osmith
make check
384 47 osmith
sudo make install
385 47 osmith
sudo ldconfig
386 47 osmith
</pre>
Add picture from clipboard (Maximum size: 48.8 MB)