路遇CentOS6.9的initscripts的bug

作者: haw_haw | 来源:发表于2017-04-13 19:26 被阅读28次

    缘起

    某台机器(CentOS 6.*)升级到最新的 6.9 版本,重启结果发现以前开机自起的 GRE 设备 greXXX 没有自动起来?!

    发现问题

    最初怀疑是 iptables 没有放开 GRE 数据包的入站导致,结果发现不是,而且手工 ifup greXXX 能直接将这个设备起来。

    于是查代码 /etc/init.d/network,发现这段:

                    if [ "$TYPE" = "IPSEC" ] || [ "$TYPE" = "IPIP" ] || [ "$TYPE" = "GRE" ]; then
                            vpninterfaces="$vpninterfaces $i"
                            continue
                    fi
    

    看起来设备 greXXX 被放到变量 vpninterfaces 里了,但是再翻遍 /etc/init.d/network,也没发现最后要把 vpninterfaces 怎么着呀,这到底是个什么情况呀?!

    在 /etc/init.d/network 发现还有一段:

            # Bring up xDSL and VPN interfaces
            for i in $vlaninterfaces $bridgeinterfaces $xdslinterfaces ; do
                if ! LANG=C egrep -L "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i >/dev/null 2>&1 ; then
                    # If we're in confirmation mode, get user confirmation.
                    if [ -f /var/run/confirm ]; then
                            confirm $i
                            test $? = 1 && continue
                    fi
                    action $"Bringing up interface $i: " ./ifup $i boot
                    [ $? -ne 0 ] && rc=1
                fi
            done
    

    看见没有看见没有,注释里写了这一段会启动 xDSL 和 VPN 设备的,但是在具体的代码里,却又为嘛把变量 vpninterfaces 丢掉了呀?!这个程序员得有多粗心呀!

    查一下

    rpm -qf /etc/init.d/network
    

    发现这个文件是属于包:initscripts-9.03.58-1.el6.centos.x86_64,再接着查:

    rpm -qV initscripts
    

    发现包 initscripts 里的文件 /etc/init.d/network 没有被修改过。所以猜想可能是 bug,google 上一查,果不其然,在这里:0013020: initscripts 9.03.58-1.el6.centos breaks gre interfaces

    解决办法

    来龙去脉搞明白了,解决问题其实非常简单,可以直接修改文件 /etc/init.d/network,但我不想这么做,因为 CentOS 官方迟早是会修复这个 bug 的,不用我来凑这个热闹。不过目前的问题的话,直接在 /etc/rc.local 里加一句,手工起这个设备算了:

    echo "/etc/sysconfig/network-scripts/ifup greXXX">>/etc/rc.local
    

    相关文章

      网友评论

        本文标题:路遇CentOS6.9的initscripts的bug

        本文链接:https://www.haomeiwen.com/subject/whciattx.html