]> git.proxmox.com Git - mirror_frr.git/blob - doc/user/installation.rst
Merge pull request #4941 from ton31337/fix/do_not_include_nexthop_dash_dash
[mirror_frr.git] / doc / user / installation.rst
1 .. _installation:
2
3 Installation
4 ============
5
6 .. index:: How to install FRR
7 .. index:: Installation
8 .. index:: Installing FRR
9 .. index:: Building the system
10 .. index:: Making FRR
11
12 This section covers the basics of building, installing and setting up FRR.
13
14 From Packages
15 -------------
16
17 The project publishes packages for Red Hat, Centos, Debian and Ubuntu on the
18 `GitHub releases <https://github.com/FRRouting/frr/releases>`_. page. External
19 contributors offer packages for many other platforms including \*BSD, Alpine,
20 Gentoo, Docker, and others. There is currently no documentation on how to use
21 those but we hope to add it soon.
22
23 From Snapcraft
24 --------------
25
26 In addition to traditional packages the project also builds and publishes
27 universal Snap images, available at https://snapcraft.io/frr.
28
29 From Source
30 -----------
31
32 Building FRR from source is the best way to ensure you have the latest features
33 and bug fixes. Details for each supported platform, including dependency
34 package listings, permissions, and other gotchas, are in the developer's
35 documentation. This section provides a brief overview on the process.
36
37 Getting the Source
38 ^^^^^^^^^^^^^^^^^^
39
40 FRR's source is available on the project
41 `GitHub page <https://github.com/FRRouting/frr>`_.
42
43 .. code-block:: shell
44
45 git clone https://github.com/FRRouting/frr.git
46
47 When building from Git there are several branches to choose from. The
48 ``master`` branch is the primary development branch. It should be considered
49 unstable. Each release has its own branch named ``stable/X.X``, where ``X.X``
50 is the release version.
51
52 In addition, release tarballs are published on the GitHub releases page
53 `here <https://github.com/FRRouting/frr/releases>`_.
54
55 Configuration
56 ^^^^^^^^^^^^^
57
58 .. index:: Configuration options
59 .. index:: Options for configuring
60 .. index:: Build options
61 .. index:: Distribution configuration
62 .. index:: Options to `./configure`
63
64 FRR has an excellent configure script which automatically detects most host
65 configurations. There are several additional configure options to customize the
66 build to include or exclude specific features and dependencies.
67
68 First, update the build system. Change into your FRR source directory and issue:
69
70 .. code-block:: shell
71
72 ./bootstrap.sh
73
74 This will install any missing build scripts and update the Autotools
75 configuration. Once this is done you can move on to choosing your configuration
76 options from the list below.
77
78 .. _frr-configuration:
79
80 .. program:: configure
81
82 .. option:: --enable-tcmalloc
83
84 Enable the alternate malloc library. In some cases this is faster and more efficient,
85 in some cases it is not.
86
87 .. option:: --disable-doc
88
89 Do not build any documentation, including this one.
90
91 .. option:: --enable-doc-html
92
93 From the documentation build html docs as well in addition to the normal output.
94
95 .. option:: --disable-zebra
96
97 Do not build zebra daemon. This generally only be useful in a scenario where
98 you are building bgp as a standalone server.
99
100 .. option:: --disable-ripd
101
102 Do not build ripd.
103
104 .. option:: --disable-ripngd
105
106 Do not build ripngd.
107
108 .. option:: --disable-ospfd
109
110 Do not build ospfd.
111
112 .. option:: --disable-ospf6d
113
114 Do not build ospf6d.
115
116 .. option:: --disable-bgpd
117
118 Do not build bgpd.
119
120 .. option:: --disable-ldpd
121
122 Do not build ldpd.
123
124 .. option:: --disable-nhrpd
125
126 Do not build nhrpd.
127
128 .. option:: --disable-eigrpd
129
130 Do not build eigrpd.
131
132 .. option:: --disable-babeld
133
134 Do not build babeld.
135
136 .. option:: --disable-watchfrr
137
138 Do not build watchfrr. Watchfrr is used to integrate daemons into startup/shutdown
139 software available on your machine. This is needed for systemd integration, if you
140 disable watchfrr you cannot have any systemd integration.
141
142 .. option:: --enable-systemd
143
144 Build watchfrr with systemd integration, this will allow FRR to communicate with
145 systemd to tell systemd if FRR has come up properly.
146
147 .. option:: --disable-pimd
148
149 Turn off building of pimd. On some BSD platforms pimd will not build properly due
150 to lack of kernel support.
151
152 .. option:: --disable-vrrpd
153
154 Turn off building of vrrpd. Linux is required for vrrpd support;
155 other platforms are not supported.
156
157 .. option:: --disable-pbrd
158
159 Turn off building of pbrd. This daemon currently requires linux in order to function
160 properly.
161
162 .. option:: --enable-sharpd
163
164 Turn on building of sharpd. This daemon facilitates testing of FRR and can also
165 be used as a quick and easy route generator.
166
167 .. option:: --disable-staticd
168
169 Do not build staticd. This daemon is necessary if you want static routes.
170
171 .. option:: --disable-bfdd
172
173 Do not build bfdd.
174
175 .. option:: --disable-bgp-announce
176
177 Make *bgpd* which does not make bgp announcements at all. This
178 feature is good for using *bgpd* as a BGP announcement listener.
179
180 .. option:: --disable-bgp-vnc
181
182 Turn off bgpd's ability to use VNC.
183
184 .. option:: --enable-datacenter
185
186 Enable system defaults to work as if in a Data Center. See defaults.h
187 for what is changed by this configure option.
188
189 .. option:: --enable-snmp
190
191 Enable SNMP support. By default, SNMP support is disabled.
192
193 .. option:: --disable-ospfapi
194
195 Disable support for OSPF-API, an API to interface directly with ospfd.
196 OSPF-API is enabled if --enable-opaque-lsa is set.
197
198 .. option:: --disable-ospfclient
199
200 Disable building of the example OSPF-API client.
201
202 .. option:: --disable-isisd
203
204 Do not build isisd.
205
206 .. option:: --disable-fabricd
207
208 Do not build fabricd.
209
210 .. option:: --enable-isis-topology
211
212 Enable IS-IS topology generator.
213
214 .. option:: --enable-realms
215
216 Enable the support of Linux Realms. Convert tag values from 1-255 into a
217 realm value when inserting into the Linux kernel. Then routing policy can be
218 assigned to the realm. See the tc man page.
219
220 .. option:: --disable-rtadv
221
222 Disable support IPV6 router advertisement in zebra.
223
224 .. option:: --enable-gcc-rdynamic
225
226 Pass the ``-rdynamic`` option to the linker driver. This is in most cases
227 necessary for getting usable backtraces. This option defaults to on if the
228 compiler is detected as gcc, but giving an explicit enable/disable is
229 suggested.
230
231 .. option:: --disable-backtrace
232
233 Controls backtrace support for the crash handlers. This is autodetected by
234 default. Using the switch will enforce the requested behaviour, failing with
235 an error if support is requested but not available. On BSD systems, this
236 needs libexecinfo, while on glibc support for this is part of libc itself.
237
238 .. option:: --enable-dev-build
239
240 Turn on some options for compiling FRR within a development environment in
241 mind. Specifically turn on -g3 -O0 for compiling options and add inclusion
242 of grammar sandbox.
243
244 .. option:: --enable-fuzzing
245
246 Turn on some compile options to allow you to run fuzzing tools against the
247 system. This flag is intended as a developer only tool and should not be
248 used for normal operations.
249
250 .. option:: --disable-snmp
251
252 Build without SNMP support.
253
254 .. option:: --disable-vtysh
255
256 Build without VTYSH.
257
258 .. option:: --enable-fpm
259
260 Build with FPM module support.
261
262 .. option:: --enable-numeric-version
263
264 Alpine Linux does not allow non-numeric characters in the version string.
265 With this option, we provide a way to strip out these characters for APK dev
266 package builds.
267
268 .. option:: --enable-multipath=X
269
270 Compile FRR with up to X way ECMP supported. This number can be from 0-999.
271 For backwards compatibility with older configure options when setting X = 0,
272 we will build FRR with 64 way ECMP. This is needed because there are
273 hardcoded arrays that FRR builds towards, so we need to know how big to
274 make these arrays at build time. Additionally if this parameter is
275 not passed in FRR will default to 16 ECMP.
276
277 .. option:: --enable-shell-access
278
279 Turn on the ability of FRR to access some shell options( telnet/ssh/bash/etc. )
280 from vtysh itself. This option is considered extremely unsecure and should only
281 be considered for usage if you really really know what you are doing.
282
283 .. option:: --enable-gcov
284
285 Code coverage reports from gcov require adjustments to the C and LD flags.
286 With this option, gcov instrumentation is added to the build and coverage
287 reports are created during execution. The check-coverage make target is
288 also created to ease report uploading to codecov.io. The upload requires
289 the COMMIT (git hash) and TOKEN (codecov upload token) environment variables
290 be set.
291
292 .. option:: --enable-config-rollbacks
293
294 Build with configuration rollback support. Requires SQLite3.
295
296 .. option:: --enable-confd=<dir>
297
298 Build the ConfD northbound plugin. Look for the libconfd libs and headers
299 in `dir`.
300
301 .. option:: --enable-sysrepo
302
303 Build the Sysrepo northbound plugin.
304
305 .. option:: --enable-time-check XXX
306
307 When this is enabled with a XXX value in microseconds, any thread that
308 runs for over this value will cause a warning to be issued to the log.
309 If you do not specify any value or don't include this option then
310 the default time is 5 seconds. If --disable-time-check is specified
311 then no warning is issued for any thread run length.
312
313 .. option:: --disable-cpu-time
314
315 Disable cpu process accounting, this command also disables the `show thread cpu`
316 command. If this option is disabled, --enable-time-check is ignored. This
317 disabling of cpu time effectively means that the getrusage call is skipped.
318 Since this is a process switch into the kernel, systems with high FRR
319 load might see improvement in behavior. Be aware that `show thread cpu`
320 is considered a good data gathering tool from the perspective of developers.
321
322 You may specify any combination of the above options to the configure
323 script. By default, the executables are placed in :file:`/usr/local/sbin`
324 and the configuration files in :file:`/usr/local/etc`. The :file:`/usr/local/`
325 installation prefix and other directories may be changed using the following
326 options to the configuration script.
327
328 .. option:: --prefix <prefix>
329
330 Install architecture-independent files in `prefix` [/usr/local].
331
332 .. option:: --sysconfdir <dir>
333
334 Look for configuration files in `dir` [`prefix`/etc]. Note that sample
335 configuration files will be installed here.
336
337 .. option:: --localstatedir <dir>
338
339 Configure zebra to use `dir` for local state files, such as pid files and
340 unix sockets.
341
342 .. option:: --with-yangmodelsdir <dir>
343
344 Look for YANG modules in `dir` [`prefix`/share/yang]. Note that the FRR
345 YANG modules will be installed here.
346
347 Python dependency, documentation and tests
348 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
349
350 FRR's documentation and basic unit tests heavily use code written in Python.
351 Additionally, FRR ships Python extensions written in C which are used during
352 its build process.
353
354 To this extent, FRR needs the following:
355
356 * an installation of CPython, preferably version 3.2 or newer (2.7 works but
357 is end of life and will stop working at some point.)
358 * development files (mostly headers) for that version of CPython
359 * an installation of `sphinx` for that version of CPython, to build the
360 documentation
361 * an installation of `pytest` for that version of CPython, to run the unit
362 tests
363
364 The `sphinx` and `pytest` dependencies can be avoided by not building
365 documentation / not running ``make check``, but the CPython dependency is a
366 hard dependency of the FRR build process (for the `clippy` tool.)
367
368 .. _least-privilege-support:
369
370 Least-Privilege Support
371 """""""""""""""""""""""
372
373 .. index:: FRR Least-Privileges
374 .. index:: FRR Privileges
375
376 Additionally, you may configure zebra to drop its elevated privileges
377 shortly after startup and switch to another user. The configure script will
378 automatically try to configure this support. There are three configure
379 options to control the behaviour of FRR daemons.
380
381 .. option:: --enable-user <user>
382
383 Switch to user `user shortly after startup, and run as user `user` in normal
384 operation.
385
386 .. option:: --enable-group <user>
387
388 Switch real and effective group to `group` shortly after startup.
389
390 .. option:: --enable-vty-group <group>
391
392 Create Unix Vty sockets (for use with vtysh) with group ownership set to
393 `group`. This allows one to create a separate group which is restricted to
394 accessing only the vty sockets, hence allowing one to delegate this group to
395 individual users, or to run vtysh setgid to this group.
396
397 The default user and group which will be configured is 'frr' if no user or
398 group is specified. Note that this user or group requires write access to the
399 local state directory (see :option:`--localstatedir`) and requires at least
400 read access, and write access if you wish to allow daemons to write out their
401 configuration, to the configuration directory (see :option:`--sysconfdir`).
402
403 On systems which have the 'libcap' capabilities manipulation library (currently
404 only Linux), FRR will retain only minimal capabilities required and will only
405 raise these capabilities for brief periods. On systems without libcap, FRR will
406 run as the user specified and only raise its UID to 0 for brief periods.
407
408 Linux Notes
409 """""""""""
410
411 .. index:: Building on Linux boxes
412 .. index:: Linux configurations
413
414 There are several options available only to GNU/Linux systems. If you use
415 GNU/Linux, make sure that the current kernel configuration is what you want.
416 FRR will run with any kernel configuration but some recommendations do exist.
417
418 :makevar:`CONFIG_NETLINK`
419 Kernel/User Netlink socket. This enables an advanced interface between
420 the Linux kernel and *zebra* (:ref:`kernel-interface`).
421
422 :makevar:`CONFIG_RTNETLINK`
423 This makes it possible to receive Netlink routing messages. If you specify
424 this option, *zebra* can detect routing information updates directly from
425 the kernel (:ref:`kernel-interface`).
426
427 :makevar:`CONFIG_IP_MULTICAST`
428 This option enables IP multicast and should be specified when you use *ripd*
429 (:ref:`rip`) or *ospfd* (:ref:`ospfv2`) because these protocols use
430 multicast.
431
432 Linux sysctl settings and kernel modules
433 ````````````````````````````````````````
434
435 There are several kernel parameters that impact overall operation of FRR when
436 using Linux as a router. Generally these parameters should be set in a
437 sysctl related configuration file, e.g., :file:`/etc/sysctl.conf` on
438 Ubuntu based systems and a new file
439 :file:`/etc/sysctl.d/90-routing-sysctl.conf` on Centos based systems.
440 Additional kernel modules are also needed to support MPLS forwarding.
441
442 :makevar:`IPv4 and IPv6 forwarding`
443 The following are set to enable IP forwarding in the kernel:
444
445 .. code-block:: shell
446
447 net.ipv4.conf.all.forwarding=1
448 net.ipv6.conf.all.forwarding=1
449
450 :makevar:`MPLS forwarding`
451 Basic MPLS support was introduced in the kernel in version 4.1 and
452 additional capability was introduced in 4.3 and 4.5.
453 For some general information on Linux MPLS support, see
454 https://www.netdevconf.org/1.1/proceedings/slides/prabhu-mpls-tutorial.pdf.
455 The following modules should be loaded to support MPLS forwarding,
456 and are generally added to a configuration file such as
457 :file:`/etc/modules-load.d/modules.conf`:
458
459 .. code-block:: shell
460
461 # Load MPLS Kernel Modules
462 mpls_router
463 mpls_iptunnel
464
465 The following is an example to enable MPLS forwarding in the
466 kernel, typically by editing :file:`/etc/sysctl.conf`:
467
468 .. code-block:: shell
469
470 # Enable MPLS Label processing on all interfaces
471 net.mpls.conf.eth0.input=1
472 net.mpls.conf.eth1.input=1
473 net.mpls.conf.eth2.input=1
474 net.mpls.platform_labels=100000
475
476 Make sure to add a line equal to :file:`net.mpls.conf.<if>.input` for
477 each interface *'<if>'* used with MPLS and to set labels to an
478 appropriate value.
479
480 :makevar:`VRF forwarding`
481 General information on Linux VRF support can be found in
482 https://www.kernel.org/doc/Documentation/networking/vrf.txt. Kernel
483 support for VRFs was introduced in 4.3 and improved upon through
484 4.13, which is the version most used in FRR testing (as of June
485 2018). Additional background on using Linux VRFs and kernel specific
486 features can be found in
487 http://schd.ws/hosted_files/ossna2017/fe/vrf-tutorial-oss.pdf.
488
489 The following impacts how BGP TCP sockets are managed across VRFs:
490
491 .. code-block:: shell
492
493 net.ipv4.tcp_l3mdev_accept=0
494
495 With this setting a BGP TCP socket is opened per VRF. This setting
496 ensures that other TCP services, such as SSH, provided for non-VRF
497 purposes are blocked from VRF associated Linux interfaces.
498
499 .. code-block:: shell
500
501 net.ipv4.tcp_l3mdev_accept=1
502
503 With this setting a single BGP TCP socket is shared across the
504 system. This setting exposes any TCP service running on the system,
505 e.g., SSH, to all VRFs. Generally this setting is not used in
506 environments where VRFs are used to support multiple administrative
507 groups.
508
509 **Important note** as of June 2018, Kernel versions 4.14-4.18 have a
510 known bug where VRF-specific TCP sockets are not properly handled. When
511 running these kernel versions, if unable to establish any VRF BGP
512 adjacencies, either downgrade to 4.13 or set
513 'net.ipv4.tcp_l3mdev_accept=1'. The fix for this issue is planned to be
514 included in future kernel versions. So upgrading your kernel may also
515 address this issue.
516
517
518 Building
519 ^^^^^^^^
520
521 Once you have chosen your configure options, run the configure script and pass
522 the options you chose:
523
524 .. code-block:: shell
525
526 ./configure \
527 --prefix=/usr \
528 --enable-exampledir=/usr/share/doc/frr/examples/ \
529 --localstatedir=/var/run/frr \
530 --sbindir=/usr/lib/frr \
531 --sysconfdir=/etc/frr \
532 --enable-pimd \
533 --enable-watchfrr \
534 ...
535
536 After configuring the software, you are ready to build and install it in your
537 system.
538
539 .. code-block:: shell
540
541 make && sudo make install
542
543 If everything finishes successfully, FRR should be installed. You should now
544 skip to the section on :ref:`basic-setup`.