2008年11月19日星期三

linux防火墙Firestarter 的network device eth0 is not ready

我和论坛里的很多朋友都遇到这样一个问题。启动Firestarter的时候,提示
“External network device $IF is not ready. Aborting..”
其中$IF是个变量,是当前使用的网络接口的名字。例如如果用eth0上网,那么显示的就是
“External network device eth0 is not ready. Aborting..”

Firestarter的 启动脚本比较愚蠢,会从ifconfig的输出信息中查找相关接口的配置信息。以前它查找的肯定是英文的字符串,现在由于ifconfig的输出信息变成 了中文的,一些参数信息它可能无法获取了,所以导致启动失败。于是检查Firestarter的启动脚本,发现竟和我预料的一样。于是问题迎刃而解。

Firestarter 的启动脚本是/etc/init.d/firestarter,其中执行了/etc/firestarter/firestarter.sh来启动防火 墙,因此,其实Firestarter真正的启动脚本是/etc/firestarter/firestarter.sh。

编辑/etc/firestarter/firestarter.sh
根据本机ifconfig的输出信息来修改以下几行代码:
IP=`/sbin/ifconfig $IF | grep inet | cut -d : -f 2 | cut -d \ -f 1`
MASK=`/sbin/ifconfig $IF | grep Mas | cut -d : -f 4`
BCAST=`/sbin/ifconfig $IF |grep Bcast: | cut -d : -f 3 | cut -d \ -f 1`

例如,我的系统使用eth0上网,就执行ifconfig eth0。其中IP地址依然可以通过以上代码的第一行获取,只是子网掩码和广播地址的获取会有问题。于是保留第一行不做修改,将后两行代码中grep搜索的英文字符串改为相应中文字符串即可。

IP=`/sbin/ifconfig $IF | grep inet | cut -d : -f 2 | cut -d \ -f 1`
MASK=`/sbin/ifconfig $IF | grep 掩码: | cut -d : -f 4`
BCAST=`/sbin/ifconfig $IF |grep 广播: | cut -d : -f 3 | cut -d \ -f 1`

保存文件后,启动Firestarter。一切正常。
不知道别人遇到的问题是否和我的一样,记录下来,仅供参考吧。

Update:
无意中看到有人转载了我这个文章,内心竟萌生出一点责任感。
其实这个方法挺傻的。没有任何通用性可言。
于是把想到的一个更好一些的法子写到这里,献丑了。
sudo vi /etc/firestarter/firestarter.sh
找个合适的地方,例如在
# External network interface data
这行注释的上面,添加一行:
LANG=en_US

这样,ifconfig的输出就是英文的了,这个启动脚本也就可以从它的输出信息中搜索出需要的几个参数了。这个方法更加简单,并且感觉上通用性似乎好一点。

0 评论: