FRR编译安装及配置

  • 1. 编译安装问题排查
  • 2. FRR下载编译及安装
  • 3. FRR配置文件及权限
  • 4. 安装 daemon 配置文件并编辑
  • 5. 开启IP转发和frr服务

  本文基于官方文档进行编译安装,采用CentOS操作系统,其中部分爬坑过程在此记录一下,本文最新状态可点击查看源站文章链接。

  • frr源码打包

  如果需要给frr打包rpm,可以参看官方文档Packaging Red Hat。

  • frr二进制包直接安装

  如果读者需要直接采用rpm包安装,可以参看frr Release地址,直接下载rpm包,或者通过添加源来安装。

# possible values for FRRVER: frr-6 frr-7 frr-stable
# frr-stable will be the latest official stable release
FRRVER="frr-stable"
# add RPM repository on CentOS 6
curl -O https://rpm.frrouting.org/repo/$FRRVER-repo-1-0.el6.noarch.rpm
sudo yum install ./$FRRVER*
# add RPM repository on CentOS 7
curl -O https://rpm.frrouting.org/repo/$FRRVER-repo-1-0.el7.noarch.rpm
sudo yum install ./$FRRVER*
# add RPM repository on CentOS 8
curl -O https://rpm.frrouting.org/repo/$FRRVER-repo-1-0.el8.noarch.rpm
sudo yum install ./$FRRVER*
# install FRR
sudo yum install frr frr-pythontools

1. 编译安装问题排查

  1. **本文采用CentOS7 默认Git版本为1.8,版本过早,导致编译之前一些依赖无法安装,报错如下图和代码。解决方法是升级Git版本。**升级方法可参看文章https://turbock79.cn/?p=165。

FRR编译安装及配置_第1张图片
此时用make/make install,出现如下报错;

error: unknown option `first-parent'
用法:git describe [选项] <提交号>*
  1. 需要安装libjson-c

  如果报错如下

CLIPPY   bgpd/bgp_debug_clippy.c
lib/clippy: error while loading shared libraries: libjson-c.so.5: cannot open shared object file: No such file or directory

  解决方法

  • 读者可以尝试yum install libjson-c-devel json-c-devel.x86_64解决问题

  • 本文采用源码安装,读者可参看文章https://turbock79.cn/?p=1923.

#libjson-c安装路径/usr/local/lib64添加到环境变量
find / -name "libjson-c.so.5"
/usr/local/lib64/libjson-c.so.5
echo "/usr/local/lib64" >> /etc/ld.so.conf
ldconfig

  读者可以参考该篇文章error while loading shared libraries: xxx.so.x"错误的原因和解决办法

  1. systemd以及readline开发环境依赖
#报错如下:
configure: error: enable systemd has been specified but systemd development env not found on your system
#解决方法:需要安装systemd的开发依赖
yum install systemd-devel

#报错如下:
configure: error: libreadline (needed for vtysh) not found and/or missing dependencies
#解决方法:需要安装readline和其开发依赖库,可以通过yum search readline搜索相应库
yum install readline readline-devel.x86_64
  1. 官方文档http://docs.frrouting.org/projects/dev-guide/en/latest/building-frr-for-centos7.html ,其中可能安装frr服务和初始化文件存在问题。无法找到路径redhat/frr.service中文件,现在已转移到tools目录下面。同时没有frr.init文件生成,此处可忽略。

  2. 启动服务后,可以动态启动其中插件

  修改文件/etc/frr/daemons。例如启动bgpd则修改如下图,然后通过命令service frr reload热加载配置。通过netstat -tunlp| grep bgpd可以查看是否开启bgp守护进程。
FRR编译安装及配置_第2张图片

2. FRR下载编译及安装

  整篇安装文章可以参看官方文档http://docs.frrouting.org/en/latest/setup.html

  • 构建
git clone https://github.com/frrouting/frr.git frr
cd frr

# 安装依赖项,打包还需安装rpm-build net-snmp-devel pam-devel python3-sphinx
yum install -y 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

# 增加用户组和用户
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

#根据configure.ac实现配置依赖检查,生成configure文件
./bootstrap.sh #根据版本,可有可无.若无该文件并编译报错,尝试运行命令autoreconf -i。

#执行./configure,生成Makefile文件,这里makefile.am是链接其他编译模块的重点
./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
# 安装该frr.service到系统服务
install -p -m 644 ./tools/frr.service /usr/lib/systemd/system/frr.service
# 注册该文件
sudo systemctl preset frr.service
#sudo cp ./tools/frr.service /etc/systemd/system/frr.service

  在编译的过程中,configure.ac定义了检查当前系统环境,并配置各种(包含第三方)依赖项检查和相关函数,通过./bootstrap.sh运行autoreconf,并将根据configure.ac参数生成configure脚本文件;然后运行该脚本文件configure,并结合makefile.am生成我们熟知的Makefile文件。在makefile里面定义了编译当前项目需要的源码文件以及各种依赖头文件,编译输出等等。
参考文档http://docs.frrouting.org/projects/dev-guide/en/latest/building-frr-for-centos7.html#install-required-packages

  • 打包
# 1.make distribution tar.gz
./configure --with-pkg-extra-version=-MyRPMVersion
make dist
# 2.Create RPM directory structure and populate with sources
mkdir rpmbuild
mkdir rpmbuild/SOURCES
mkdir rpmbuild/SPECS
cp redhat/*.spec rpmbuild/SPECS/
cp frr*.tar.gz rpmbuild/SOURCES/
# 3.Edit rpmbuild/SPECS/frr.spec with configuration as needed.
# 4.Build the RPM
rpmbuild --define "_topdir `pwd`/rpmbuild" -ba rpmbuild/SPECS/frr.spec
#构建完文件位于rpmbuild/RPMS

3. 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

4. 安装 daemon 配置文件并编辑

sudo install -p -m 644 tools/etc/frr/daemons /etc/frr/
sudo chown frr:frr /etc/frr/daemons

  创建frr默认配置文件/etc/frr/daemon,修改相关配置如下。判断是否开启zebra、bgp等功能;设置watchfrr_enable=... 和zebra=...为yes。查看官方文档http://docs.frrouting.org/en/latest/basic.html#common-invocation-options

  修改/etc/frr/daemons配置文件,本文将bgp开启,并启动FD最大数量。

#这里开启bpg
bgpd=yes
zebra=yes
ospfd=no
ospf6d=no

vtysh_enable=yes
zebra_options="  -A 127.0.0.1 -s 90000000 -n"
bgpd_options="   -A 127.0.0.1 -f /etc/frr/bpgd.conf --log file:/var/log/frr/bgpd.log"
ospfd_options="  -A 127.0.0.1"
ospf6d_options=" -A ::1"
ripd_options="   -A 127.0.0.1"
ripngd_options=" -A ::1"
isisd_options="  -A 127.0.0.1"
pimd_options="   -A 127.0.0.1"
ldpd_options="   -A 127.0.0.1"
nhrpd_options="  -A 127.0.0.1"
eigrpd_options=" -A 127.0.0.1"
babeld_options=" -A 127.0.0.1"
sharpd_options=" -A 127.0.0.1"
pbrd_options="   -A 127.0.0.1"
staticd_options="-A 127.0.0.1"
bfdd_options="   -A 127.0.0.1"
fabricd_options="-A 127.0.0.1"
vrrpd_options="  -A 127.0.0.1"

#开启文件的数量
MAX_FDS=1024

5. 开启IP转发和frr服务

  • 启动IP转发

创建文件/etc/sysctl.d/90-routing-sysctl.conf,并写入如下内容

# Sysctl for routing
#
# Routing: We need to forward packets
net.ipv4.conf.all.forwarding=1
net.ipv6.conf.all.forwarding=1

载入修改的systemctl到系统:

sudo sysctl -p /etc/sysctl.d/90-routing-sysctl.conf
  • 启动frr服务

  启动服务frr(systemctl start frr)后,通过修改配置文件,修改配置。通过命令systemctl reload frr热加载配置。配置文件都在/etc/frr目录中通过命令vtysh进入frr操作界面。

sudo systemctl start frr
sudo systemctl enable frr
#然后通过CLI登录,登录CLI交互接口
vtysh
#登录某具体进程交互接口
vtysh -d bgpd
#配置进程读取配置文件进行配置
vtysh -f /etc/frr/test.conf
#bash中配置进程执行某条具体命令但不登录进入vtysh交互接口
vtysh -c "show running-config"

你可能感兴趣的:(SDN/NFV)