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

(http://siwind.iteye.com/blog/1745643)


安装: 
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) 下载软件包,解压缩, 编译并安装 

Java代码   收藏代码
  1. #tar xzf quagga-0.99.21.tar.gz  
  2. #cd quagga-0.99.21  
  3.   
  4. #sudo mkdir /var/run/quagga   (运行时的PID文件位置)  
  5. #sudo chmod 777 /var/run/quagga  
  6.   
  7. #sudo mkdir /etc/quagga       (运行时的配置文件目录)  
  8. #sudo chmod 777 /etc/quagga  
  9.   
  10. #./configure --enable-vtysh --localstatedir=/var/run/quagga --sysconfdir=/etc/quagga  
  11. (默认运行用户为quagga, 确保运行的localstatedir对用户有读写的权限,建议配置)  
  12.   
  13. #./configure --localstatedir=/var/run/quagga  
  14.   
  15. #make   
  16. #sudo make install  
  17. #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) 登录控制台:  
Java代码   收藏代码
  1. #telnet localhost 2601    //zebra  
  2. #telnet localhost 2604    //ospf  
  3. #sudo /usr/local/bin/vtysh //vtysh  
  4. ......  


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等会导致没有权限的错误。 

     iii)  如果路由不能转发,修改/etc/sysctl.conf文件。 启用IPv4转发功能
        net.ipv4.ip_forward = 1

     iv) 如果发生了源路由验证的路由问题,  修改/etc/sysctl.conf文件。 禁用源路由验证功能 
        net.ipv4.conf.default.rp_filter = 1

     v)  如果要启用net-snmp支持,则如下:
            #sudo yum install net-snmp net-snmp-devel  net-snmp-perl net-snmp-utils
            #  ./configure --enable-vtysh --localstatedir=/var/run/quagga --sysconfdir=/etc/quagga  --enable-snmp=smux



6) 如果要启用quagga的vtysh控制台:  
Java代码   收藏代码
  1. #./configure --enable-vtysh --localstatedir=/var/run/quagga --sysconfdir=/etc/quagga   
  2. #make   
  3. #sudo make install  

然后配置/etc/quagga/vtysh.conf文件内容即可。  

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

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


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

Java代码   收藏代码
  1. #!/bin/bash  
  2.   
  3. EXEC_DIR=/usr/local/sbin  
  4. CONF_DIR=/etc/quagga  
  5. LIB_DIR=/usr/local/lib  
  6. PID_DIR=/var/run/quagga  
  7. DAEMON=(zebra ospfd bgpd)  
  8. USER=root  
  9. TIME_DELAY=2  
  10.   
  11. #DAEMON=(zebra ospfd ospf6d ripd bgpd)   
  12. #set librery path  
  13. export LD_LIBRARY_PATH=$LIB_DIR:$LD_LIBRARY_PATH  
  14.   
  15. #  
  16. echo make sure user \"$USER\" has read-write privileges in directory \"$PID_DIR\" !  
  17.   
  18. start()  
  19. {  
  20.     for d in ${DAEMON[*]}; do  
  21.         $EXEC_DIR/$d -f $CONF_DIR/$d.conf -i $PID_DIR/$d.pid -u $USER -g $USER -d  
  22.         ps -ef | grep $d  
  23.         if [ $d = "zebra" ] ; then  
  24.             sleep $TIME_DELAY  
  25.         fi  
  26.     done  
  27.     echo "start (${DAEMON[*]})  finished!"  
  28. }  
  29.   
  30. stop()  
  31. {  
  32.     for d in ${DAEMON[*]}; do  
  33.         killall $d  
  34.         #rm -f $PID_DIR/$d.pid  
  35.     done  
  36.     rm -f $PID_DIR/*  
  37.     echo "stop (${DAEMON[*]})  finished!"  
  38. }  
  39.   
  40. case $1 in  
  41.     start)  
  42.         start ;;  
  43.     stop)  
  44.         stop ;;  
  45.     restart)  
  46.         stop  
  47.         start  ;;  
  48.     *)  
  49.         echo "Usage: $0 start | stop | restart"  
  50. esac  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值