openSUSE¶
This document describes installation from source.
These instructions have been tested on openSUSE Tumbleweed in a Raspberry Pi 400.
Installing Dependencies¶
zypper in git autoconf automake libtool make \
readline-devel texinfo net-snmp-devel groff pkgconfig libjson-c-devel\
pam-devel python3-pytest bison flex c-ares-devel python3-devel\
python3-Sphinx perl patch libcap-devel libyang-devel \
libelf-devel libunwind-devel protobuf-c
Note
The libunwind
library is optional but highly recommended, as it improves
backtraces printed for crashes and debugging. However, if it is not
available for some reason, it can simply be left out without any loss of
functionality.
Building & Installing FRR¶
Add FRR user and groups¶
sudo groupadd -g 92 frr
sudo groupadd -r -g 85 frrvty
sudo useradd -u 92 -g 92 -M -r -G frrvty -s /sbin/nologin \
-c "FRR FRRouting suite" -d /var/run/frr frr
Compile¶
Clone the FRR git repo and use the included configure
script to configure
FRR’s build time options to your liking. The full option listing can be
obtained by running ./configure -h
. The options shown below are examples.
git clone https://github.com/frrouting/frr.git frr
cd frr
./bootstrap.sh
./configure \
--prefix=/usr \
--includedir=\${prefix}/include \
--bindir=\${prefix}/bin \
--sbindir=\${prefix}/lib/frr \
--libdir=\${prefix}/lib/frr \
--libexecdir=\${prefix}/lib/frr \
--localstatedir=/var/run/frr \
--sysconfdir=/etc/frr \
--with-moduledir=\${prefix}/lib/frr/modules \
--enable-configfile-mask=0640 \
--enable-logfile-mask=0640 \
--enable-snmp=agentx \
--enable-multipath=64 \
--enable-user=frr \
--enable-group=frr \
--enable-vty-group=frrvty \
--with-pkg-git-version \
--with-pkg-extra-version=-MyOwnFRRVersion
make
sudo make install
Install FRR configuration files¶
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
Note
In some platforms like raspberry for performance reasons some directories are in file systems (/var/run, …) mounted with tempfs so will disapear after every reboot. In frr the /var/run/frr is used to store pid files for every daemon.
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.
Create a new file /etc/sysctl.d/90-routing-sysctl.conf
with the following
content:
#
# Enable packet forwarding
#
net.ipv4.conf.all.forwarding=1
net.ipv6.conf.all.forwarding=1
#
# 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
Note
MPLS must be invidividually enabled on each interface that requires it. See the example in the config block above.
Load the modified sysctls on the system:
sudo sysctl -p /etc/sysctl.d/90-routing-sysctl.conf
Create a new file /etc/modules-load.d/mpls.conf
with the following content:
# Load MPLS Kernel Modules
mpls-router
mpls-iptunnel
And load the kernel modules on the running system:
sudo modprobe mpls-router mpls-iptunnel
Note
The firewalld
service could be enabled. You may run into some
issues with the iptables rules it installs by default. If you wish to just
stop the service and clear ALL rules do these commands:
sudo systemctl disable firewalld.service
sudo systemctl stop firewalld.service
sudo iptables -F
Install frr Service¶
sudo install -p -m 644 tools/frr.service /usr/lib/systemd/system/frr.service
sudo systemctl enable frr
Enable daemons¶
Open /etc/frr/daemons
with your text editor of choice. Look for the
section with bgpd=no
etc. Enable the daemons
as required by changing the value to yes
.
Start FRR¶
sudo systemctl start frr
Check the starting messages of frr with
journalctl -u frr --follow