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

The libyang library can be installed from third-party packages available here.

Note: the libyang dev/devel packages need to be installed in addition to the libyang core package in order to build FRR successfully.

For example, for CentOS 7.x:

wget https://ci1.netdef.org/artifact/LIBYANG-YANGRELEASE/shared/build-1/CentOS-7-x86_64-Packages/libyang-0.16.46-0.x86_64.rpm
wget https://ci1.netdef.org/artifact/LIBYANG-YANGRELEASE/shared/build-1/CentOS-7-x86_64-Packages/libyang-devel-0.16.46-0.x86_64.rpm
sudo rpm -i libyang-0.16.46-0.x86_64.rpm libyang-devel-0.16.46-0.x86_64.rpm

or Ubuntu 18.04:

wget https://ci1.netdef.org/artifact/LIBYANG-YANGRELEASE/shared/build-1/Ubuntu-18.04-x86_64-Packages/libyang-dev_0.16.46_amd64.deb
wget https://ci1.netdef.org/artifact/LIBYANG-YANGRELEASE/shared/build-1/Ubuntu-18.04-x86_64-Packages/libyang_0.16.46_amd64.deb
sudo apt install libpcre3-dev
sudo dpkg -i libyang-dev_0.16.46_amd64.deb libyang_0.16.46_amd64.deb

Alternatively, libyang can be built and installed manually by following the steps below:

git clone https://github.com/opensourcerouting/libyang
cd libyang
git checkout -b tmp origin/tmp
mkdir build; cd build
sudo make install

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

Note: please check the libyang build requirements first.

Optional packages

Dependencies for additional functionality can be installed as-desired.


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


sudo apt-get install \
    libzmq5 \

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


Options below are provided as an example.

See also

Installation section of user guide

cd frr
./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 \

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


Enable support for protobuf transport


Enable support for ZeroMQ transport


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

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host

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

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

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:


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.