Ubuntu 18.04 LTS

Install dependencies

Required packages

sudo apt-get install \
   git autoconf automake libtool make gawk libreadline-dev texinfo \
   pkg-config libpam0g-dev libjson-c-dev bison flex python-pytest \
   libc-ares-dev python3-dev libsystemd-dev python-ipaddress \
   python3-sphinx install-info build-essential libsystemd-dev

FRR depends on the relatively new libyang library to provide YANG/NETCONF support. Unfortunately, most distributions do not yet offer a libyang package from their repositories. Therefore we offer two options to install this library.

Option 1: Binary Install

The FRR project builds binary libyang packages, which we offer for download here.

Warning

libyang version 0.16.74 or newer is required to build FRR.

Note

The libyang development packages need to be installed in addition to the libyang core package in order to build FRR successfully. Make sure to download and install those from the link above alongside the binary packages.

Depending on your platform, you may also need to install the PCRE development package. Typically this is libpcre-dev or pcre-devel.

Note

For Debian-based systems, the official libyang package requires recent versions of swig (3.0.12) and debhelper (11) which are only available in Debian buster (10). However, libyang packages built on Debian buster can be installed on both Debian jessie (8) and Debian stretch (9), as well as various Ubuntu systems. The python3-yang package will not work, but the other packages (libyang-dev is the one needed for FRR) will.

Option 2: Source Install

Note

Ensure that the libyang build requirements are met before continuing. Usually this entails installing cmake and libpcre-dev or pcre-devel.

git clone https://github.com/CESNET/libyang.git
cd libyang
mkdir build; cd build
cmake -DENABLE_LYD_PRIV=ON -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
make
sudo make install

When building libyang on CentOS 6, it’s also necessary to pass the -DENABLE_CACHE=OFF parameter to cmake.

Optional packages

Dependencies for additional functionality can be installed as-desired.

Protobuf

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

ZeroMQ

sudo apt-get install \
    libzmq5 \
    libzmq3-dev

Get FRR, compile it and install it (from Git)

This assumes you want to build and install FRR from source and not using any packages

Add frr groups and user

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

Download source

git clone https://github.com/frrouting/frr.git frr

Configure

Options below are provided as an example.

See also

Installation section of user guide

cd frr
./bootstrap.sh
./configure \
    --prefix=/usr \
    --enable-exampledir=/usr/share/doc/frr/examples/ \
    --localstatedir=/var/run/frr \
    --sbindir=/usr/lib/frr \
    --sysconfdir=/etc/frr \
    --enable-multipath=64 \
    --enable-user=frr \
    --enable-group=frr \
    --enable-vty-group=frrvty \
    --enable-configfile-mask=0640 \
    --enable-logfile-mask=0640 \
    --enable-fpm \
    --enable-systemd=yes \
    --with-pkg-git-version \
    --with-pkg-extra-version=-MyOwnFRRVersion

If optional packages were installed, the associated feature may now be enabled.

--enable-protobuf

Enable support for protobuf transport

--enable-zeromq

Enable support for ZeroMQ transport

Compile

make
make check
sudo make install

Create empty FRR configuration files

Although not strictly necessary, it’s good practice to create empty configuration files _before_ starting FRR. This assures that the permissions are correct. If the files are not already present, FRR will create them.

It’s also important to consider _which_ files to create. FRR supports writing configuration to a monolithic file, /etc/frr/frr.conf.

See also

VTYSH section of user guide

The presence of /etc/frr/frr.conf on startup implicitly configures FRR to ignore daemon-specific configuration files.

Daemon-specific configuration

sudo install -m 755 -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 frr /dev/null /etc/frr/zebra.conf
sudo install -m 640 -o frr -g frr /dev/null /etc/frr/bgpd.conf
sudo install -m 640 -o frr -g frr /dev/null /etc/frr/ospfd.conf
sudo install -m 640 -o frr -g frr /dev/null /etc/frr/ospf6d.conf
sudo install -m 640 -o frr -g frr /dev/null /etc/frr/isisd.conf
sudo install -m 640 -o frr -g frr /dev/null /etc/frr/ripd.conf
sudo install -m 640 -o frr -g frr /dev/null /etc/frr/ripngd.conf
sudo install -m 640 -o frr -g frr /dev/null /etc/frr/pimd.conf
sudo install -m 640 -o frr -g frr /dev/null /etc/frr/ldpd.conf
sudo install -m 640 -o frr -g frr /dev/null /etc/frr/nhrpd.conf

Monolithic configuration

sudo install -m 755 -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 frr /dev/null /etc/frr/frr.conf

Enable IPv4 & IPv6 forwarding

Edit /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

Add MPLS kernel modules

Ubuntu 18.04 ships with kernel 4.15. MPLS modules are present by default. To enable, add the following lines to /etc/modules-load.d/modules.conf:

# Load MPLS Kernel Modules
mpls_router
mpls_iptunnel

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

Enable MPLS Forwarding

Edit /etc/sysctl.conf and the following lines. Make sure to add a line equal to 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 the systemd service

sudo install -m 644 tools/frr.service /etc/systemd/system/frr.service
sudo install -m 644 tools/etc/frr/daemons /etc/frr/daemons
sudo install -m 644 tools/etc/frr/frr.conf /etc/frr/frr.conf
sudo install -m 644 -o frr -g frr tools/etc/frr/vtysh.conf /etc/frr/vtysh.conf

Enable daemons

Edit /etc/frr/daemons and change the value from “no” to “yes” for those daemons you want to start by systemd. For example:

zebra=yes
bgpd=yes
ospfd=yes
ospf6d=yes
ripd=yes
ripngd=yes
isisd=yes

Enable the systemd service

Enabling the systemd service causes FRR to be started upon boot. To enable it, use the following command:

systemctl enable frr

Start the systemd service

systemctl start frr

After starting the service, you can use systemctl status frr to check its status.