Project

General

Profile

Build from Source » History » Version 43

neels, 05/25/2018 12:06 PM

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