我遇到了一个奇怪的(对我来说)问题。
我正在运行一个带有两个网络接口的gentoo:(enp5s0
有线接口)和wlan0
(wifi)。当我尝试运行一个程序时,例如openvpn
,从它的脚本中运行一个程序/etc/init.d
,它输出:
* WARNING: openvpn is scheduled to start when net.enp5s0 has started
如果接口enp5s0
未启动,即使其他接口已启动,也不会启动。
在 中/etc/init.d/openvpn
,我有这些行:
depend() {
need localmount net
use dns
after bootmisc
}
在/etc/init.d/net.enp5s0
和中/etc/init.d/net.wlan0
(实际上是到 的符号链接/etc/init.d/net.lo
,Gentoo 处理脚本的名称以了解它应该做什么):
depend()
{
[...]
case "${IFACE}" in
lo|lo0) ;;
*)
after net.lo net.lo0 dbus
provide net
;;
esac
[...]
}
因此,据我了解,无论我的哪个接口提供了net
“能力”(我没有正确/规范的词),并且openvpn
应该只依赖于这种能力,而不是特定的接口。所有具有依赖关系的程序都会出现同样的问题need net
。
我在这里缺少什么?
我的uname -a
如果它可以有一些帮助:
Linux yavin 3.7.10-gentoo-r1 #2 SMP Sat Apr 20 16:27:52 CEST 2013 x86_64 Intel(R) Core(TM) i3 CPU M 330 @ 2.13GHz GenuineIntel GNU/Linux
答案1
好的,所以阅读配置文件中的注释有时确实有效......
我的假设是正确的,它net
作为一种“虚拟依赖”起作用,因为多个服务实际上可以提供它。手册中实际上是这样记录的:http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=4。但事实上,这是可配置的,并且这种行为不是默认的(至少,我不记得修改过一次)。
该/etc/rc.conf
文件可用于自定义init
初始化脚本的工作方式和工作方式。其中有一个有趣的选项。
# Do we allow any started service in the runlevel to satisfy the dependency
# or do we want all of them regardless of state? For example, if net.eth0
# and net.eth1 are in the default runlevel then with rc_depend_strict="NO"
# both will be started, but services that depend on 'net' will work if either
# one comes up. With rc_depend_strict="YES" we would require them both to
# come up.
#rc_depend_strict="YES"
如您所见,这正是我所需要的,并且它只是默认为错误的值(从我的角度来看)。将此选项设置为“否”解决了我的问题。
前:
yavin ~ # /etc/init.d/openvpn ineed
* Caching service dependencies ... [ ok ]
fsck dmcrypt localmount sysfs net.wlan0 net.enp5s0
之后(在这种情况wlan0
下;我想我会用enp5s0
而不是用wlan0
如果enp5s0
是的话):
yavin ~ # /etc/init.d/openvpn ineed
* Caching service dependencies ... [ ok ]
fsck dmcrypt localmount sysfs net.wlan0