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).