gentoo init 腳本中的“provide net”不像我想的那樣工作
我遇到了一個奇怪的(對我來說)問題。
我正在執行一個帶有兩個網路介面的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
and中/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
好的,所以閱讀配置文件中的註釋有時確實有效……
我正確地假設它
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"
如您所見,這正是我所需要的,它只是預設為錯誤的值(從我的角度來看)。將此選項設置為 NO 解決了我的問題。
前:
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