|
硬件配置:
Processor : Intel Pentium III 733
Memory : Samsung PC-133 256MiB x 2
Graphic : nVIDIA GeForce 3 Ti
Network : D-Link DFE-530TX
HDD : Seagate ST380011A 80GiB x 2
Sound : Creative Sound Blaster Vibra 16
Mouse : Microsoft IntelliMouse Explorer 4.0
Keyboard : ViewSonic KMB-KU-206SCH USB
Monitor : Samsung SyncMaster 753DF
Combo : Samsung DVD/CDRW 52x
系统平台:
Gentoo Linux (Kernel 2.6.12-gentoo-r6)
Apache 2.0.54-r8
冲突症状:
起动引导阶段出现如下提示:
bringing eth0 up
SIOCSIFADDR: No such device
eth0: unknown interface: No such device
SIOCSIFBRDADDR: No such device
eth0: unknown interface: No such device
SIOCSIFNETMASK: No such device [!!]
* ERROR: Problem starting needed services.
* "netmount" not started
原因分析:
由于出错提示在系统上配置了HTTP服务后产生, 所以初部断定是加载 apache2 产产生的问提, 将 apache2 从起动自动加载的列表中删除:
rc-update del apache2
重新引导症状消示, 好了出错的根源已经找到, 下面来着手解决.
在 X 中检查网络设备状态:
ifconfig
eth0 设备运行正常, 手动挂载网络:
/etc/init.d/netmount start
网络被成功起用了, 难到是加载时机的关系?
是的! 我仔细对比了一下出错和正确起动时 in scripts 的执行顺序, 发现关键在于 coldplug, 它的加载情况直接关系到网络设备的起动. 在一般情况下, init scripts 执行顺序是按 "/etc/init.d/" 文件夹内的字母顺序 (a-z) 来依次执行的, coldplug > netmount 因此这样的起动不会发生异常; apache2 > coldplug 所以 apache2 的 init scripts 优先级较高, 会优先被执行.
我简单研究了一下 "/etc/init.d/apache2", 其中的 depend() {} 引起了我的注意, 其中的 need 限定符指派了 net 的依赖关系, 查了一下手册, 的确如此! apache2 起动是依赖性得起动了 net 而此时 coldplug 还还未被加载, 所以网络设备起动必定失败.
解决方法
好了, 问题原因基本已经说明, 要解决问题其实非常容易了, 增加 apache2 对 coldplug 的起动依赖, 然后再起动网络设备 (net) 便可正常工作了:
depend() {
need coldplug net
...
}
注意, 请在 need 中增加依赖, 因为它将优先于 before, ues, after 中的程序, 而被更早的触发.
欢迎大家一起交流 
http://www.ruly.cn/ |
|