第六章 frr整合sysrepo概述
技術標籤:# Sysrepo-1.4.2原始碼解讀
FRR7.2之後的版本,增加了sysrepo對其的管理,最新版本已對支援到bfd,bgp協議管理,是越來越完善。有興趣的夥伴可以參閱frr最新程式碼https://github.com/FRRouting/frr.git。主要還是聊聊frr是如何支援sysrepo對不同協議的管理的。簡單畫一個FRR的邏輯層次圖,支援sysrepo模式是在FRR原來的基礎上擴充套件通過netconf協議下發XML命令的功能。VTY_CLI模式是單機管理模式,XML模式是跨平臺,跨網路的統一管理模式。這點對於SDN網路,這點就特別重要,通過支援的netconf協議將路由的配置下發不同的網元節點上。支援sysrepo的實現,是增加了一種網元裝置的管理方法。
圖1 FRR簡易邏輯層次圖
1 sysrepo整合編譯
原始碼下載後,接FRR的說明文件安裝各類依賴包:
本地直接安裝模式:
1、./bootstrap.sh 2、./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 \ --enable-sysrepo \ //劃重點,必須帶上“--enable-sysrepo”,否則未實現sysrepo的整合 --with-pkg-git-version \ --with-pkg-extra-version=-ctyun \ SPHINXBUILD=/usr/bin/sphinx-build 3、make 4、make check 5、sudo make install
RPM包安裝模式:
修改{$frr}\redhat\frr.spec.in檔案,關鍵之處新增“--enable-sysrepo”,請參考:
增加如下編譯選項,應該都能看懂在哪新增,不詳細指出位置 %{!?with_sysrepo: %global with_sysrepo 1 } %if %{with_sysrepo} --enable-sysrepo \ %else --disable-sysrepo \ %endif %if %{with_sysrepo} %{_libdir}/frr/modules/sysrepo.so %endif
接官方文件步驟參考編譯,簡單寫了一個一健編譯的方法,可以參考
#!/usr/bin/env bash
#
# frr rpm build script
#
# PROVIDE: fump
##
if [ "$1" == "clean" ]
then
echo "clean frr"
make clean
exit 1
elif [ "$1" == "build" ]
then
echo "build frr rpm"
rm -fr frr-*.rpm
./bootstrap.sh
./configure --with-pkg-extra-version=-fump
make dist
LOCAL_LC_TIME=$LC_TIME
export LC_TIME="en_US.UTF-8"
FRRVERSION=frr-7.5-fump
mkdir -p rpms/{BUILD,RPMS,SOURCES,SPECS,SRPMS,tmp}
mv frr-7.5-dev-fump.tar.gz rpms/SOURCES
sed -e '7d' redhat/frr.spec > rpms/SPECS/frr.spec
rpmbuild --ba rpms/SPECS/frr.spec --define "_topdir `pwd`/rpms"
mv rpms/RPMS/x86_64/frr-*.rpm .
rm -fr rpms/
export LC_TIME=$LOCAL_LC_TIME
else
echo "Usage: ./rpm.sh clean or ./rpm.sh build"
exit 1
fi
Deb包的編譯類似,修改編譯rule, {$frr}\debian\rules,再按步驟編譯生成deb包。
載入frr相應庫到sysrepo後啟動程序,其中載入的指令碼實現
#!/bin/bash
#
# frr sysrepo-yang module auto-install script
#
# PROVIDE: fump
##
set -eu -o pipefail
shopt -s failglob
OPER=$1
MODNAME=$2
: ${SYSREPOCTL:=sysrepoctl}
: ${SYSREPOCTL_ROOT_PERMS:=-o root:root -p 666}
: ${YANG_DIR:=/lib/frr/yang}
echo "$OPER, $MODNAME"
is_yang_module_installed() {
module=$1
module_name=${module%%@*}
$SYSREPOCTL -l | grep --count "$module_name" > /dev/null
}
#install
if [ "$OPER" == "install" ]
then
if ! is_yang_module_installed $MODNAME; then
echo "- Installing module $MODNAME ..."
$SYSREPOCTL -i -g ${YANG_DIR}/$MODNAME.yang $SYSREPOCTL_ROOT_PERMS
else
echo "- Module $MODNAME already installed."
fi
elif [ "$OPER" == "uninstall" ]
then
if ! is_yang_module_installed $MODNAME; then
echo "- Module $MODNAME has not installed."
else
echo "- Uninstalling module $MODNAME ..."
$SYSREPOCTL -u --module=$MODNAME
fi
else
echo "Usage $0 <sysrepoctl-path> <install or uninstall> <module-name>"
frr-bgp y入sysrepo庫 ./setup.sh install frr-bgp
從sysrepo中解除安裝frr-interface庫:./setup.sh uninstallfrr-interface
完成入庫後,啟動bgpd程序,通過-M 可選引數將sysrepo模組載入並啟動bgp程序。
/usr/lib/frr/bgpd -d -M sysrepo:/usr/lib64/frr/modules/ --log-level debugging
完成啟動後,就有兩種模式可配置bgp咯。
本章只是簡單如何在frr中使用整合sysrepo,接下來一章,分析frr是怎麼實現sysrepo功能.