Arch Linux: eth0 sem portadora - a rede falha na inicialização

4

O problema

Meu computador está conectado a uma rede onde o dhcp é necessário. Então, minha configuração de rede em /etc/rc.conf parece

interface=eth0
address=
netmask=
broadcast=
gateway=

Meus deamons são

DAEMONS=(!hwclock syslog-ng network netfs crond ntpd)

Com esta configuração, o Arch trava no boot há muito tempo em "Network" (Ainda diz "[done]", mas depois da inicialização eu não tenho conexão). Eu descobri duas soluções alternativas:

Solução 1

  • remova network dos deamons
  • execute mii-tool --reset eth0 e dhcpcd eth0 após a inicialização (de alguma forma, isso não funciona ao colocar esses comandos em /etc/rc.local .

Então o dhcp trabalha muito rapidamente (por causa do reset !). Antes de executar o primeiro comando, ip link show eth0 tem "NO CARRIER" na saída. Depois disso, não. (Além disso, mii-tool primeiro mostra "sem link", depois eth0: 10 Mbit, half duplex, link ok .

Solução 2

  • Alterar a configuração de rede para

    interface=eth0
    address=x.y.z.21
    netmask=255.255.255.0
    broadcast=xxx.y.z.255
    gateway=x.y.z.254
    

    ao passo que x, y, z constroem os endereços específicos da rede (Embora o dhcp seja usado, recebo um ip estático).

  • Adicione os comandos mii-tool --reset eth0 e dhcpcd eth0 a /etc/rc.local

Agora a rede começa rapidamente na inicialização (embora eu não saiba se com sucesso), os comandos em /etc/rc.local são executados e a conexão é boa após o login.

O que fazer?

Então, o problema parece ser que dhcpcd stucks em "wating for carrier" ou sth.

Eu não gosto da solução alternativa, porque alguns demônios precisam de rede (embora pareçam começar). O que posso fazer para ter o eth0 pronto para o dhcp na inicialização? Ou há outro problema?

    
por user905686 23.02.2012 / 12:25

1 resposta

1

Você não pode ter eth0 pronto antes que o DHCP seja concluído, supondo que você deseja DHCP. Eu suspeito que o que você realmente quer é fazer com que a máquina complete o processo de inicialização sem esperar por ela, e ter a configuração de rede prosseguindo em segundo plano. Por exemplo, isso permitirá que você faça o login rapidamente e, geralmente, a configuração da rede será feita quando você precisar. Para fazer isso, em vez de fazer com que os scripts de inicialização tentem o próprio DHCP, você precisa fazer com que eles iniciem um daemon que cuida da configuração da rede dinamicamente, incluindo o DHCP.

Com relação à sua observação de serviços de rede dependendo da rede, eles geralmente não precisam mais do que a interface de loopback a ser configurada, supondo que você os tenha vinculado a 0.0.0.0 em vez de qualquer endereço local específico. (os daemons normalmente fazem isso por padrão, então deve funcionar a menos que você os tenha vinculado a algum endereço específico)

Para fins de configuração de rede em segundo plano, eu recomendo minha linguagem de programação NCD , que permite programar a configuração de rede em uma linguagem especial. Aqui está um script NCD simples ( /etc/ncd.conf ) que executará o DHCP em eth0 :

process lan {
    # Set device.
    var("eth0") dev;

    # Wait for device, set it up, and wait for network cable.
    net.backend.waitdevice(dev);
    net.up(dev);
    net.backend.waitlink(dev);

    # DHCP configuration.
    # net.ipv4.dhcp() will block here until it obtaines an IP address.
    # Note that it will only obtain the IP address, and *not* assign it;
    # we do that with a separate command below.
    net.ipv4.dhcp(dev) dhcp;

    # Check IP address - make sure it's not local.
    # If you have other reserved subnets around, check for those too.
    ip_in_network(dhcp.addr, "127.0.0.0", "8") test_local;
    ifnot(test_local);

    # Assign IP address, as obtained by DHCP.
    net.ipv4.addr(dev, dhcp.addr, dhcp.prefix);

    # Add default route, as obtained by DHCP.
    net.ipv4.route("0.0.0.0", "0", dhcp.gateway, "20", dev);

    # Configure DNS servers, as obtained by DHCP.
    net.dns(dhcp.dns_servers, "20");
}

Para usar isso, desative o daemon network e, em vez disso, use o daemon badvpn-ncd . Quando iniciado, o daemon do NCD cuidará da sua configuração de rede em segundo plano. Alternativamente, você pode testá-lo diretamente no terminal usando o programa badvpn-ncd . Você pode instalar o NCD do AUR .

Se os seus daemons dependem de fato das interfaces de rede, você pode iniciar os daemons no tempo apropriado a partir do NCD usando o comando daemon() , sem usar seus scripts de inicialização (não disponível na versão estável).

Algumas alternativas ao NCD são netcfg e ifplugd . Embora eles possam usar os arquivos de configuração de rede do Arch, eles são extremamente limitados em comparação com o NCD.

EDIT : Parece que senti falta do fato de o seu sistema estar com problemas na detecção de links. Para verificar, tente inicializar sem qualquer configuração de interface automática, mantendo eth0 abaixo. Então faça o login e tente:

ip link set dev eth0 up

Supondo que o cabo de rede esteja conectado, o link deve ser estabelecido rapidamente, fazendo com que o sinalizador NO CARRIER desapareça. Se não, é provável problema com o seu hardware (ou drivers).

    
por 23.02.2012 / 14:19