本文最新状态可点击查看https://turbock79.cn/?p=334
CSDN可点击查看https://blog.csdn.net/turbock/article/details/107039031
爬坑
本文基于官方文档进行编译,发现构建文档并未及时更新,其中部分爬坑过程在此记录一下。此处用make install,出现如下报错;
1. CentOS7 默认Git版本为1.8.3,版本过早,导致编译之前一些依赖无法安装。需要升级Git版本,本文升级2.25。升级方法可参看文章https://blog.csdn.net/turbock/article/details/103761644。
2.官方文档http://docs.frrouting.org/projects/dev-guide/en/latest/building-frr-for-centos7.html ,其中可能安装frr服务和初始化文件存在问题。无法找到路径redhat/frr.service中文件,现在已转移到tools目录下面。同时没有frr.init文件生成,此处可忽略。
编译FRR方法
git clone https://github.com/frrouting/frr.git frr
cd frr
./bootstrap.sh
./configure \
--bindir=/usr/bin \
--sbindir=/usr/lib/frr \
--sysconfdir=/etc/frr \
--libdir=/usr/lib/frr \
--libexecdir=/usr/lib/frr \
--localstatedir=/var/run/frr \
--with-moduledir=/usr/lib/frr/modules \
--enable-snmp=agentx \
--enable-multipath=64 \
--enable-user=frr \
--enable-group=frr \
--enable-vty-group=frrvty \
--enable-systemd=yes \
--disable-exampledir \
--disable-ldpd \
--enable-fpm \
--with-pkg-git-version \
--with-pkg-extra-version=-MyOwnFRRVersion \
SPHINXBUILD=/usr/bin/sphinx-build
make
make check
sudo make install
#make install命令之后
sudo find . -name frr.service
sudo cp ./tools/frr.service /etc/systemd/system/frr.service
#install -p -m 644 ./tools/frr.service /usr/lib/systemd/system/frr.service
创建FRR 配置文件
#./configure命令之后
mkdir -p /etc/frr
sudo chmod -R 777 /etc/frr
mkdir -p /var/run/frr
sudo chmod -R 777 /var/run/frr
sudo mkdir /var/log/frr
sudo mkdir /etc/frr
sudo touch /etc/frr/zebra.conf
sudo touch /etc/frr/bgpd.conf
sudo touch /etc/frr/ospfd.conf
sudo touch /etc/frr/ospf6d.conf
sudo touch /etc/frr/isisd.conf
sudo touch /etc/frr/ripd.conf
sudo touch /etc/frr/ripngd.conf
sudo touch /etc/frr/pimd.conf
sudo touch /etc/frr/nhrpd.conf
sudo touch /etc/frr/eigrpd.conf
sudo touch /etc/frr/babeld.conf
sudo chown -R frr:frr /etc/frr/
sudo touch /etc/frr/vtysh.conf
sudo chown frr:frrvty /etc/frr/vtysh.conf
sudo chmod 640 /etc/frr/*.conf
Install daemon config file
sudo install -p -m 644 tools/etc/frr/daemons /etc/frr/
sudo chown frr:frr /etc/frr/daemons
启动服务frr(systemctl start frr)后,通过修改配置文件,修改配置。通过命令systemctl reload frr热加载配置。配置文件都在/etc/frr目录中
通过命令vtysh进入frr操作界面
Edit /etc/frr/daemons as needed to select the required daemons
创建frr默认配置文件/etc/frr/daemon,修改相关配置如下。判断是否开启zebra、bgp等功能;设置watchfrr_enable=...
和zebra=...为yes
。查看官方文档http://docs.frrouting.org/en/latest/setup.html
创建frr默认配置文件/etc/frr/frr.conf
!
! Zebra configuration file
!
frr version 6.0
frr defaults traditional
!
hostname Router
password zebra
enable password zebra
!
log stdout
!
!
4.启动服务后,可以动态启动其中插件。可以参看文章
http://docs.frrouting.org/en/latest/setup.html#starting-a-new-daemon修改文件/etc/frr/daemons。例如启动bgpd则修改如下图,然后通过命令service frr reload热加载配置。通过netstat -tunlp| grep bgpd可以查看是否开启bgp守护进程。
官方文档编译
CentOS 7
文章描述如何通过源码安装FRR。如果想要构建一个RPM包,查看 Packaging Red Hat。
CentOS 7 限制:
CentOS 7 默认内核不支持MPLS,需要内核级别4.5或更高。
安装依赖包
Add packages:
sudo yum install git autoconf automake libtool make \
readline-devel texinfo net-snmp-devel groff pkgconfig \
json-c-devel pam-devel bison flex pytest c-ares-devel \
python-devel systemd-devel python-sphinx libcap-devel
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.
1: 二进制安装
The FRR project builds binary libyang
packages, which we offer for download here.
Warning
libyang
version 0.16.105 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:源码安装
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 \
-D CMAKE_BUILD_TYPE:String="Release" ..
make
sudo make install
When building libyang
version 0.16.x
it’s also necessary to pass the -DENABLE_CACHE=OFF
parameter to cmake
to work around a known bug in libyang.
获取FRR,编译并安装 (from Git)
Add frr groups and user
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
Download Source, configure and compile it
(You may prefer different options on configure statement. These are just an example.)
git clone https://github.com/frrouting/frr.git frr
cd frr
./bootstrap.sh
./configure \
--bindir=/usr/bin \
--sbindir=/usr/lib/frr \
--sysconfdir=/etc/frr \
--libdir=/usr/lib/frr \
--libexecdir=/usr/lib/frr \
--localstatedir=/var/run/frr \
--with-moduledir=/usr/lib/frr/modules \
--enable-snmp=agentx \
--enable-multipath=64 \
--enable-user=frr \
--enable-group=frr \
--enable-vty-group=frrvty \
--enable-systemd=yes \
--disable-exampledir \
--disable-ldpd \
--enable-fpm \
--with-pkg-git-version \
--with-pkg-extra-version=-MyOwnFRRVersion \
SPHINXBUILD=/usr/bin/sphinx-build
make
make check
sudo make install
Create empty FRR configuration files
sudo mkdir /var/log/frr
sudo mkdir /etc/frr
sudo touch /etc/frr/zebra.conf
sudo touch /etc/frr/bgpd.conf
sudo touch /etc/frr/ospfd.conf
sudo touch /etc/frr/ospf6d.conf
sudo touch /etc/frr/isisd.conf
sudo touch /etc/frr/ripd.conf
sudo touch /etc/frr/ripngd.conf
sudo touch /etc/frr/pimd.conf
sudo touch /etc/frr/nhrpd.conf
sudo touch /etc/frr/eigrpd.conf
sudo touch /etc/frr/babeld.conf
sudo chown -R frr:frr /etc/frr/
sudo touch /etc/frr/vtysh.conf
sudo chown frr:frrvty /etc/frr/vtysh.conf
sudo chmod 640 /etc/frr/*.conf
Install daemon config file
sudo install -p -m 644 redhat/daemons /etc/frr/
sudo chown frr:frr /etc/frr/daemons
Edit /etc/frr/daemons as needed to select the required daemons
Look for the section with watchfrr_enable=...
and zebra=...
etc. Enable the daemons as required by changing the value to yes
Enable IP & IPv6 forwarding
Create a new file /etc/sysctl.d/90-routing-sysctl.conf
with the following content:
# Sysctl for routing
#
# Routing: We need to forward packets
net.ipv4.conf.all.forwarding=1
net.ipv6.conf.all.forwarding=1
Load the modified sysctl’s on the system:
sudo sysctl -p /etc/sysctl.d/90-routing-sysctl.conf
Install frr Service and redhat init files
sudo install -p -m 644 redhat/frr.service /usr/lib/systemd/system/frr.service
sudo install -p -m 755 redhat/frr.init /usr/lib/frr/frr
Register the systemd files
sudo systemctl preset frr.service
Enable required frr at startup
sudo systemctl enable frr
Reboot or start FRR manually
sudo systemctl start frr