4 ========================================
6 This document describes installation from source. If you want to build an RPM,
7 see :ref:`packaging-redhat`.
9 Instructions are tested with ``CentOS 6.8`` on ``x86_64`` platform
13 ``CentOS 6`` is very old and not fully supported by the FRR community
14 anymore. Building FRR takes multiple manual steps to update the build
15 system with newer packages than what's available from the archives.
16 However, the built packages can still be installed afterwards on
17 a standard ``CentOS 6`` without any special packages.
19 Support for CentOS 6 is now on a best-effort base by the community.
21 CentOS 6 restrictions:
22 ----------------------
24 - PIMd is not supported on ``CentOS 6``. Upgrade to ``CentOS 7`` if
26 - MPLS is not supported on ``CentOS 6``. MPLS requires Linux Kernel 4.5
27 or higher (LDP can be built, but may have limited use without MPLS)
28 - Zebra is unable to detect what bridge/vrf an interface is associated
29 with (IFLA\_INFO\_SLAVE\_KIND does not exist in the kernel headers,
30 you can use a newer kernel + headers to get this functionality)
31 - frr\_reload.py will not work, as this requires Python 2.7, and CentOS
32 6 only has 2.6. You can install Python 2.7 via IUS, but it won't work
33 properly unless you compile and install the ipaddr package for it.
34 - Building the package requires Sphinx >= 1.1. Only a non-standard
35 package provides a newer sphinx and requires manual installation
39 Install required packages
40 -------------------------
46 sudo yum install git autoconf automake libtool make \
47 readline-devel texinfo net-snmp-devel groff pkgconfig \
48 json-c-devel pam-devel flex epel-release c-ares-devel libcap-devel \
49 elfutils-libelf-devel protobuf-c-devel
51 Install newer version of bison (CentOS 6 package source is too old) from CentOS
56 sudo yum install rpm-build
57 curl -O http://vault.centos.org/7.0.1406/os/Source/SPackages/bison-2.7-4.el7.src.rpm
58 rpmbuild --rebuild ./bison-2.7-4.el7.src.rpm
59 sudo yum install ./rpmbuild/RPMS/x86_64/bison-2.7-4.el6.x86_64.rpm
62 Install newer version of autoconf and automake (Package versions are too old):
66 curl -O http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
67 tar xvf autoconf-2.69.tar.gz
69 ./configure --prefix=/usr
74 curl -O http://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz
75 tar xvf automake-1.15.tar.gz
77 ./configure --prefix=/usr
82 Install ``Python 2.7`` in parallel to default 2.6. Make sure you've install
83 EPEL (``epel-release`` as above). Then install current ``python27``:
84 ``python27-devel`` and ``pytest``
88 sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
89 sudo rpm -ivh https://centos6.iuscommunity.org/ius-release.rpm
90 sudo yum install python27 python27-pip python27-devel
91 sudo pip2.7 install pytest
93 Please note that ``CentOS 6`` needs to keep python pointing to version 2.6 for
94 ``yum`` to keep working, so don't create a symlink for python2.7 to python.
96 Install newer ``Sphinx-Build`` based on ``Python 2.7``.
98 Create a new repo ``/etc/yum.repos.d/puias6.repo`` with the following contents:
102 ### Name: RPM Repository for RHEL 6 - PUIAS (used for Sphinx-Build)
103 ### URL: http://springdale.math.ias.edu/data/puias/computational
104 [puias-computational]
105 name = RPM Repository for RHEL 6 - Sphinx-Build
106 baseurl = http://springdale.math.ias.edu/data/puias/computational/$releasever/$basearch
113 Update rpm database & Install newer sphinx
115 .. code-block:: shell
118 sudo yum install python27-sphinx
120 Install libyang and its dependencies:
122 .. code-block:: shell
124 sudo yum install pcre-devel doxygen cmake
125 git clone https://github.com/CESNET/libyang.git
127 git checkout 090926a89d59a3c4000719505d563aaf6ac60f2
128 mkdir build ; cd build
129 cmake -DENABLE_LYD_PRIV=ON -DCMAKE_INSTALL_PREFIX:PATH=/usr -D CMAKE_BUILD_TYPE:String="Release" ..
131 sudo yum install ./rpms/RPMS/x86_64/libyang-0.16.111-0.x86_64.rpm ./rpms/RPMS/x86_64/libyang-devel-0.16.111-0.x86_64.rpm
134 Get FRR, compile it and install it (from Git)
135 ---------------------------------------------
137 **This assumes you want to build and install FRR from source and not using any
140 Add frr groups and user
141 ^^^^^^^^^^^^^^^^^^^^^^^
143 .. code-block:: shell
145 sudo groupadd -g 92 frr
146 sudo groupadd -r -g 85 frrvty
147 sudo useradd -u 92 -g 92 -M -r -G frrvty -s /sbin/nologin \
148 -c "FRR FRRouting suite" -d /var/run/frr frr
150 Download Source, configure and compile it
151 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
153 (You may prefer different options on configure statement. These are just
156 .. code-block:: shell
158 git clone https://github.com/frrouting/frr.git frr
163 --sbindir=/usr/lib/frr \
164 --sysconfdir=/etc/frr \
165 --libdir=/usr/lib/frr \
166 --libexecdir=/usr/lib/frr \
167 --localstatedir=/var/run/frr \
168 --with-moduledir=/usr/lib/frr/modules \
170 --enable-snmp=agentx \
171 --enable-multipath=64 \
174 --enable-vty-group=frrvty \
177 --with-pkg-git-version \
178 --with-pkg-extra-version=-MyOwnFRRVersion
183 Create empty FRR configuration files
184 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
186 .. code-block:: shell
188 sudo mkdir /var/log/frr
191 For integrated config file:
193 .. code-block:: shell
195 sudo touch /etc/frr/frr.conf
197 For individual config files:
199 .. note:: Integrated config is preferred to individual config.
201 .. code-block:: shell
203 sudo touch /etc/frr/babeld.conf
204 sudo touch /etc/frr/bfdd.conf
205 sudo touch /etc/frr/bgpd.conf
206 sudo touch /etc/frr/eigrpd.conf
207 sudo touch /etc/frr/isisd.conf
208 sudo touch /etc/frr/ldpd.conf
209 sudo touch /etc/frr/nhrpd.conf
210 sudo touch /etc/frr/ospf6d.conf
211 sudo touch /etc/frr/ospfd.conf
212 sudo touch /etc/frr/pbrd.conf
213 sudo touch /etc/frr/pimd.conf
214 sudo touch /etc/frr/ripd.conf
215 sudo touch /etc/frr/ripngd.conf
216 sudo touch /etc/frr/staticd.conf
217 sudo touch /etc/frr/zebra.conf
218 sudo chown -R frr:frr /etc/frr/
219 sudo touch /etc/frr/vtysh.conf
220 sudo chown frr:frrvty /etc/frr/vtysh.conf
221 sudo chmod 640 /etc/frr/*.conf
223 Install daemon config file
224 ^^^^^^^^^^^^^^^^^^^^^^^^^^
226 .. code-block:: shell
228 sudo install -p -m 644 tools/etc/frr/daemons /etc/frr/
229 sudo chown frr:frr /etc/frr/daemons
231 Edit /etc/frr/daemons as needed to select the required daemons
232 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
234 Look for the section with ``watchfrr_enable=...`` and ``zebra=...`` etc.
235 Enable the daemons as required by changing the value to ``yes``
237 Enable IP & IPv6 forwarding
238 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
240 Edit :file:`/etc/sysctl.conf` and set the following values (ignore the other
243 # Controls IP packet forwarding
244 net.ipv4.ip_forward = 1
245 net.ipv6.conf.all.forwarding=1
247 # Controls source route verification
248 net.ipv4.conf.default.rp_filter = 0
250 Load the modified sysctl's on the system:
252 .. code-block:: shell
254 sudo sysctl -p /etc/sysctl.d/90-routing-sysctl.conf
256 Add init.d startup file
257 ^^^^^^^^^^^^^^^^^^^^^^^
259 .. code-block:: shell
261 sudo install -p -m 755 tools/frr /etc/init.d/frr
262 sudo chkconfig --add frr
264 Enable FRR daemon at startup
265 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
267 .. code-block:: shell
269 sudo chkconfig frr on
271 Start FRR manually (or reboot)
272 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
274 .. code-block:: shell
276 sudo /etc/init.d/frr start