2007年2月28日 星期三

Firestarter启动的问题

我和论坛里的很多朋友都遇到这样一个问题。启动Firestarter的时候,提示
“External network device $IF is not ready. Aborting..”
其中$IF是个变量,是当前使用的网络接口的名字。例如如果用eth0上网,那么显示的就是
“External network device eth0 is not ready. Aborting..”
这个问题也让我感到很困惑,并且至今没有发现有人解答。只好自己捣鼓。一番猜测和检查后,终于发现了问题所在。就此谈谈其原因和解决的办法。

在我的记忆中,该问题的发生,是在一次软件升级之后。在以前,我将firestarter设置为自启动,以方便随时查看防火墙的状态。它一直工作得很好,就在一次软件升级后,它出现了上述问题。为了查看我的eth0配置是否正确,当时便执行了ifconfig。结果发现软件升级前,ifconfig输出信息都是英文。而升级后,都是中文的了。当时并没有在意,觉得可能是安装了一些中文包的缘故。也并没有把这个变化和Firestarter无法启动的事情联系到一起。在后续检查中,发现虽然Firestarter提示错误,但iptables却运行正常。既然防火墙工作正常,那么这个图形前端,不看也罢。于是将该问题就此搁置,直到今天又想念这个图形前端了,才重新捡起来。

想到这两个变化,便做了一个推测。觉得可能是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的输出就是英文的了,这个启动脚本也就可以从它的输出信息中搜索出需要的几个参数了。这个方法更加简单,并且感觉上通用性似乎好一点。

标签:

26 条评论:

时间 2/28/2007 5:19 下午 , Anonymous jma 说...

是不是可以修改ifconfig的配置来避免进程输出中文化呢?只是猜想,ifconfig相应的软件应该都支持多语言的。

 
时间 2/28/2007 7:55 下午 , Blogger 冰岩 说...

还是linux好,设置都通过修改配置文件来完成,显得那么的专业,(嘿嘿,讽刺一下)

 
时间 2/28/2007 8:50 下午 , Anonymous yaway 说...

你终于有新文章了,怎么弄的跟生孩子似的...不过这篇文章不错,我也是有这样的问题,解决了

 
时间 3/01/2007 9:26 上午 , Blogger Sanhe 说...

能解决自己和别人的问题,是很快活的事。文章不在多,有用则名。有本事就订阅我的博客吧,我的炒作口号是:
Sanhe驳客,您身边的免费专业顾问。

其实大部分操作系统,包括Windows在内,软硬件的设置都是依赖配置文件的。只不过Windows把很多配置文件做成了一个树形结构的玩意,名为注册表。并无本质的区别。

多数操作系统实现的内容基本一致,只是实现的方式和用户的接口不太一样。没有哪个一定就比别的好,因地制宜为妙。

每次辩解和阐释,都是为了一个目的。如候捷所说:
正确的观念,重于一切。

 
时间 3/01/2007 10:17 上午 , Blogger 冰岩 说...

恩,其实这样更直接和简单。
我就是自己有时候会装专业,明明用鼠标可以完成的工作,在有别人看时就用命令来完成。教学嘛,总要刻意地表现出“不经意间流露出的高手风范”。

 
时间 3/01/2007 6:05 下午 , Blogger Sanhe 说...

我也很喜欢装酷,常常把键盘打得很快,无论周围有没有人。长此以往,损害了手关节。不得不贴膏药,并且多注意保养我的玉手。

 
时间 3/02/2007 9:51 上午 , Anonymous 匿名 说...

看了你的文章有收获,我也看过那些脚本。很烦的。而且同事曾经通过前端配置防火墙后,startx起不来,端口都不通,就是僵死状态。后来把放火墙搞掉了,就可以了。我估计可能是脚本出现了死循环导致的。呵呵!!!
我李海涛

 
时间 3/02/2007 9:59 上午 , Blogger Sanhe 说...

留言可以选择“其他”,这样就能够输入昵称和自己的网址了。而不必选择匿名。
让别人看了有收获倒不敢说,能达到自己总结和备忘的目的,就很满足了。
欢迎订阅 :)

 
时间 3/03/2007 12:54 下午 , Anonymous yaway 说...

这个情况使用在宿舍拨号上时可以,回到公司就不行了,或许说DHCP下不行?不具有通用性...

 
时间 3/04/2007 2:08 下午 , Blogger Sanhe 说...

怎么回事,说清楚情况。
例如具体的错误提示信息,firestarter配置文件的内容,以及出错时的ifconfig输出。

 
时间 3/16/2007 5:34 下午 , Anonymous 小江 说...

明知道我们英文不好,还要用英文显示,这种中文不是挺好???
终于找到留言的地方了,三何好!过年没见上,比较想念你的唠叨,ok,再留言好了

 
时间 3/16/2007 5:59 下午 , Blogger Sanhe 说...

是啊。我上班都两年了。你博士后毕业了没?我有空去你们宿舍找你?我现在也猛爱唠叨,更年期了,由不得自己。

 
时间 3/17/2007 9:41 上午 , Anonymous 还是小江 说...

靠!摆明没发现我是谁,还在这儿装酷!顺便问一句:内裤还是外裤???认不出我打死你,小心你的头!!

 
时间 3/17/2007 7:01 下午 , Anonymous 还是Sanhe 说...

咦?不是河北工业色情大学的在读博士张力王么?

 
时间 3/25/2007 10:58 下午 , Anonymous 匿名 说...

I am a newbies from Hong Kong and having the same problem. I don't know the steps you wrote down. Can you write down the steps one by one from the very beginning, thank you!

Sing

 
时间 3/26/2007 9:41 上午 , Blogger Sanhe 说...

Maybe u can try another method which is more simple, just check the update section of this article : )

 
时间 3/28/2007 8:06 下午 , Anonymous 匿名 说...

I followed the update to do, but failed because every time I typed on top of that line, the words jump to another line far away and some of the letter were missing.
Was I doing something wrong? After I finished editing, how can I return the terminal to original level?

Sing

 
时间 3/28/2007 9:01 下午 , Anonymous Sanhe 说...

If u're not able to use vi, use another editor instead, e.g. gedit.
sudo gedit /etc/firestarter/firestarter.sh

 
时间 3/29/2007 8:29 下午 , Anonymous 匿名 说...

Thank very much! I made it at last! Thank again for your patient guidance!

Sing

 
时间 5/20/2007 2:17 上午 , Blogger LiKui 说...

搞定了,谢谢大虾

 
时间 7/11/2007 2:50 下午 , Blogger q 说...

按你说的做了,但是还是不能启动Firestarter,显示The device echo is not ready.
给点建议吧

 
时间 2/26/2008 11:58 下午 , Anonymous 匿名 说...

grep addr | cut -d : -f 2 `
最后一个字符是什么意思?

我测试了下,我的机器这样该了后输出的字符串为192.168.1.50: not found
多了后面的: not found 对shell不太懂
楼主能指点下吗?
我的ifconfig输出为:
eth0 链路封装:以太网 硬件地址 00:30:18:12:46:BF
inet 地址:192.168.1.50 广播:192.168.1.255 掩码:255.255.255.0
inet6 地址: fe80::230:18ff:fe12:46bf/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:1043 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:850 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:1390668 (1.3 MB) 发送字节:79704 (77.8 KB)
中断:11 基本地址:0x8000

 
时间 2/27/2008 11:13 上午 , Blogger Sanhe 说...

这两个字符是成对出现的,在脚本中执行Shell命令时需要用``引用。
前面的方法不需要用了,用后面提到的方法就行了。即在
# External network interface data
这行注释的上面,添加一行:
LANG=en_US

 
时间 12/20/2008 8:50 下午 , Blogger jj 说...

非常感谢
解决困惑我很久的问题

 
时间 2/06/2009 1:46 上午 , Blogger Kris 说...

还好啊,最后东撞西撞的终于撞出了结果。用了您最后那句“LANG=en_US”。
还有非常重要的一点,少了他,您这方法我试了半天都没成功--

http://wiki.ubuntu-tw.org里Firestarter的一条FAQ:
假如您是使用ADSL撥接上網,請將網路介面改設為"ppp0"(而非"eth0"),即可正常執行 Firestarter。

我晕@@……

 
时间 2/07/2009 6:51 下午 , Blogger Sanhe 说...

是啊,这个当然要设置了,我用无线上网,所以我设置为wlan0。

 

发表评论

<< 主页