“fornecer net” no script de inicialização do gentoo não funciona como eu pensava

3

Estou me deparando com um problema estranho (para mim).

Estou executando um gentoo com duas interfaces de rede: enp5s0 (interface com fio) e wlan0 (wifi). Quando tento executar um programa, por exemplo, openvpn , de seu script em /etc/init.d , ele gera:

* WARNING: openvpn is scheduled to start when net.enp5s0 has started

e não inicia se a interface enp5s0 não for iniciada, mesmo que a outra interface esteja ativa.

Em /etc/init.d/openvpn , eu tenho estas linhas:

depend() {
        need localmount net
        use dns
        after bootmisc
}

e em /etc/init.d/net.enp5s0 e /etc/init.d/net.wlan0 (que são de fato links simbólicos para /etc/init.d/net.lo , o Gentoo lida com o nome do script para saber o que deve fazer):

depend()
{
        [...]

        case "${IFACE}" in
                lo|lo0) ;;
                *)
                        after net.lo net.lo0 dbus
                        provide net
                        ;;
        esac

        [...]
}

Então, como eu entendo o caso, qualquer um da minha interface fornece a net "capacidade" (não tenho a palavra correta / canônica para ela), e openvpn só deve confiar nessa capacidade, e não em uma interface específica. O mesmo problema ocorre com todo o programa que tem a dependência need net .

O que estou perdendo aqui?

Meu uname -a se puder ser de alguma ajuda:

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

    
por lgeorget 09.05.2013 / 18:35

1 resposta

2

Ok, ler os comentários nos arquivos de configuração funciona às vezes ...

Eu estava certo supondo que net funciona como uma "dependência virtual" no sentido de que mais de um serviço pode realmente fornecê-lo. E é realmente documentado dessa forma no manual: link . Mas, na verdade, isso é configurável e esse comportamento não é o padrão (pelo menos, não lembro de tê-lo modificado uma vez).

O arquivo /etc/rc.conf pode ser usado para personalizar a maneira como init e o init-scripts funcionam. E há uma opção interessante nele.

# 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"

Como você vê, isso é exatamente o que eu preciso, e foi simplesmente padronizado com o valor errado (do meu ponto de vista). Definir essa opção como NO resolveu meu problema.

Antes:

yavin ~ # /etc/init.d/openvpn ineed
 * Caching service dependencies ...             [ ok ]
fsck dmcrypt localmount sysfs net.wlan0 net.enp5s0

Após (no caso de wlan0 , eu acho que teria enp5s0 em vez de wlan0 se enp5s0 estivesse em alta):

yavin ~ # /etc/init.d/openvpn ineed
 * Caching service dependencies ...             [ ok ]
fsck dmcrypt localmount sysfs net.wlan0
    
por 09.05.2013 / 20:52