summaryrefslogtreecommitdiffstats
path: root/doc/developer/building-frr-for-ubuntu2004.rst
blob: fdfc25da9df0e06392122821c3757178f7b08880 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
Ubuntu 20.04 LTS
================

This document describes installation from source. If you want to build a
``deb``, see :ref:`packaging-debian`.

Installing Dependencies
-----------------------

.. code-block:: console

   sudo apt update
   sudo apt-get install \
      git autoconf automake libtool make libreadline-dev texinfo \
      pkg-config libpam0g-dev libjson-c-dev bison flex \
      libc-ares-dev python3-dev python3-sphinx \
      install-info build-essential libsnmp-dev perl \
      libcap-dev python2 libelf-dev libunwind-dev

.. include:: building-libunwind-note.rst

Note that Ubuntu 20 no longer installs python 2.x, so it must be
installed explicitly. Ensure that your system has a symlink named
``/usr/bin/python`` pointing at ``/usr/bin/python3``.

In addition, ``pip`` for python2 must be installed if you wish to run
the FRR topotests. That version of ``pip`` is not available from the
ubuntu apt repositories; in order to install it:

.. code-block:: shell

   curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
   sudo python2 ./get-pip.py

   # And verify the installation
   pip2 --version

.. include:: building-libyang.rst

Protobuf
^^^^^^^^

.. code-block:: console

   sudo apt-get install protobuf-c-compiler libprotobuf-c-dev

ZeroMQ
^^^^^^

.. code-block:: console

   sudo apt-get install libzmq5 libzmq3-dev

Building & Installing FRR
-------------------------

Add FRR user and groups
^^^^^^^^^^^^^^^^^^^^^^^

.. code-block:: console

   sudo groupadd -r -g 92 frr
   sudo groupadd -r -g 85 frrvty
   sudo adduser --system --ingroup frr --home /var/run/frr/ \
      --gecos "FRR suite" --shell /sbin/nologin frr
   sudo usermod -a -G frrvty frr

Compile
^^^^^^^

.. include:: include-compile.rst

Install FRR configuration files
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code-block:: console

   sudo install -m 775 -o frr -g frr -d /var/log/frr
   sudo install -m 775 -o frr -g frrvty -d /etc/frr
   sudo install -m 640 -o frr -g frrvty tools/etc/frr/vtysh.conf /etc/frr/vtysh.conf
   sudo install -m 640 -o frr -g frr tools/etc/frr/frr.conf /etc/frr/frr.conf
   sudo install -m 640 -o frr -g frr tools/etc/frr/daemons.conf /etc/frr/daemons.conf
   sudo install -m 640 -o frr -g frr tools/etc/frr/daemons /etc/frr/daemons

Tweak sysctls
^^^^^^^^^^^^^

Some sysctls need to be changed in order to enable IPv4/IPv6 forwarding and
MPLS (if supported by your platform). If your platform does not support MPLS,
skip the MPLS related configuration in this section.

Edit :file:`/etc/sysctl.conf` and uncomment the following values (ignore the
other settings):

::

   # Uncomment the next line to enable packet forwarding for IPv4
   net.ipv4.ip_forward=1

   # Uncomment the next line to enable packet forwarding for IPv6
   #  Enabling this option disables Stateless Address Autoconfiguration
   #  based on Router Advertisements for this host
   net.ipv6.conf.all.forwarding=1

Reboot or use ``sysctl -p`` to apply the same config to the running system.

Add MPLS kernel modules
"""""""""""""""""""""""

Ubuntu 20.04 ships with kernel 5.4; MPLS modules are present by default.  To
enable, add the following lines to :file:`/etc/modules-load.d/modules.conf`:

::

   # Load MPLS Kernel Modules
   mpls_router
   mpls_iptunnel


And load the kernel modules on the running system:

.. code-block:: console

   sudo modprobe mpls-router mpls-iptunnel

If the above command returns an error, you may need to install the appropriate
or latest linux-modules-extra-<kernel-version>-generic package. For example
``apt-get install linux-modules-extra-`uname -r`-generic``

Enable MPLS Forwarding
""""""""""""""""""""""

Edit :file:`/etc/sysctl.conf` and the following lines. Make sure to add a line
equal to :file:`net.mpls.conf.eth0.input` for each interface used with MPLS.

::

   # Enable MPLS Label processing on all interfaces
   net.mpls.conf.eth0.input=1
   net.mpls.conf.eth1.input=1
   net.mpls.conf.eth2.input=1
   net.mpls.platform_labels=100000

Install service files
^^^^^^^^^^^^^^^^^^^^^

.. code-block:: console

   sudo install -m 644 tools/frr.service /etc/systemd/system/frr.service
   sudo systemctl enable frr

Enable daemons
^^^^^^^^^^^^^^

Open :file:`/etc/frr/daemons` with your text editor of choice. Look for the
section with ``watchfrr_enable=...`` and ``zebra=...`` etc.  Enable the daemons
as required by changing the value to ``yes``.

Start FRR
^^^^^^^^^

.. code-block:: shell

   systemctl start frr