siwind 发表于 2013-1-31 00:27:56

开源路由软件Quagga 源代码 编译/安装/运行/调试(Eclipse环境)

安装:
0) 安装依赖软件包(--enable-vtysh需要)
#sudo apt-get install libreadline6-dev (Ubuntu)
#sudo yum install readline-devel (CentOS)

创建用户(可选)
#sudo groupadd quagga
#sudo useradd quagga -g quagga

1) 下载软件包,解压缩, 编译并安装
#tar xzf quagga-0.99.21.tar.gz#cd quagga-0.99.21#sudo mkdir /var/run/quagga   (运行时的PID文件位置)#sudo chmod 777 /var/run/quagga#sudo mkdir /etc/quagga       (运行时的配置文件目录)#sudo chmod 777 /etc/quagga#./configure --enable-vtysh --localstatedir=/var/run/quagga --sysconfdir=/etc/quagga(默认运行用户为quagga, 确保运行的localstatedir对用户有读写的权限,建议配置)#./configure --localstatedir=/var/run/quagga#make #sudo make install#sudo ldconfig    (加载库文件路径)

注意: 配置文件路径, 默认为/usr/local/etc; 可执行文件路径, 默认为/usr/local/sbin
2) 修改文件/etc/services (某些linux平台可能不需要), 添加如下内容:
zebrasrv 2600/tcp # zebra service
zebra 2601/tcp # zebra vty
ripd 2602/tcp # RIPd vty
ripngd 2603/tcp # RIPngd vty
ospfd 2604/tcp # OSPFd vty
bgpd 2605/tcp # BGPd vty
ospf6d 2606/tcp # OSPF6d vty
ospfapi 2607/tcp # ospfapi
isid 2608/tcp # ISISd vty

3) 使用如下脚本启动/停止quagga: sudo ./run_quagga.sh start|stop|restart
   或者直接启动停止:
   #sudo /../zebra -u 用户 -g 用户组 -d   (确保编译时设置的localstatedir对用户有读写权限即可)
   #sudo ospfd -u 用户 -g 用户组 -d
   ......
   
4) 登录控制台:
#telnet localhost 2601    //zebra#telnet localhost 2604    //ospf#sudo /usr/local/bin/vtysh //vtysh......

5) 问题解决
    i) 如果遇到zebra库文件未找到错误,则到目录 /etc/ld.so.conf.d下面新建个文件,
内容为quagga安装的库路径,例如: /usr/local/lib
然后 sudo ldconfig即可。
ii) 如果不能连接vtysh的话,是因为在/var/run/quagga/*.vty文件对当前执行vtysh命令的用户没有权限。
可以使用: sudo /usr/local/bin/vtysh即可。
也可以: sudo chmod 777 /var/run/quagga/* ,(当zebra都启动之后), 然后运行vtysh即可。
iii) 如果需要设置IP地址,设置路由等,则建议使用root用户身份运行Quagga(zebra/ospfd/bgpd等), 否则修改路由IP等会导致没有权限的错误。


6) 如果要启用quagga的vtysh控制台:
#./configure --enable-vtysh --localstatedir=/var/run/quagga --sysconfdir=/etc/quagga #make #sudo make install
然后配置/etc/quagga/vtysh.conf文件内容即可。

====================================
在Eclipse中调试运行Quagga (CentOS环境)

0) 首先按照上面要求正确编译运行Quagga.1) 打开Eclipse, 新建项目 "Makefile Project with existing code", 选择Quagga的解压缩路径2) 选择 “Run Configuration ...", 新建C/C++可执行程序, 命名为 ”Quagga-0.99.21 zebra“    在C/C++ Application输入: zebra/.libs/zebra    在Argument处输入: -f /usr/local/etc/zebra.conf -u 当前用户 -g 当前用户    在Enviremont处新建变量: LD_LIBRARY_PATH, 取值为: :./lib/.libs:./ospfd/.libs3) 其它ospfd, bgpd等都可以同样如2)设置。4) 运行和调试都OK。

====================================
run_quagga.sh

#!/bin/bashEXEC_DIR=/usr/local/sbinCONF_DIR=/etc/quaggaLIB_DIR=/usr/local/libPID_DIR=/var/run/quaggaDAEMON=(zebra ospfd bgpd)USER=rootTIME_DELAY=2#DAEMON=(zebra ospfd ospf6d ripd bgpd) #set librery pathexport LD_LIBRARY_PATH=$LIB_DIR:$LD_LIBRARY_PATH#echo make sure user \"$USER\" has read-write privileges in directory \"$PID_DIR\" !start(){for d in ${DAEMON
[*]}; do$EXEC_DIR/$d -f $CONF_DIR/$d.conf -i $PID_DIR/$d.pid -u $USER -g $USER -dps -ef | grep $dif [ $d = "zebra" ] ; thensleep $TIME_DELAYfidoneecho "start (${DAEMON
[*]})finished!"}stop(){for d in ${DAEMON
[*]}; dokillall $d#rm -f $PID_DIR/$d.piddonerm -f $PID_DIR/*echo "stop (${DAEMON
[*]})finished!"}case $1 instart)start ;;stop)stop ;;restart)stopstart;;*)      echo "Usage: $0 start | stop | restart"esac
页: [1]
查看完整版本: 开源路由软件Quagga 源代码 编译/安装/运行/调试(Eclipse环境)