Ok. Eu encontrei uma solução para mim mesmo. Não tenho certeza se essa é a solução mais otimizada ou não, mas aqui estão minhas razões.
1) Eu não quero abrir o módulo ethernet na inicialização do kernel, para evitar ip = dhcp ou ip = $ {ipaddr}: $ {serverip}: $ {gatewayip}: $ {netmask}: $ { hostname}: eth0: off, já que não tenho certeza qual será a configuração do usuário final.
2) Eu escrevi meu próprio script de configuração de rede que traz a interface de rede como mostrado abaixo.
link_up_waittime=60
interface=""
tmpfile="/tmp/cspnetwork"
linkups="Link is Up"
function error_out
{
exit -1
}
function search_ifc_dev()
{
for iface in 'awk '{print $1}' /proc/net/dev | cut -f1 -d":"'; do
if [[ ${iface} == eth* ]]; then
interface=${iface}
fi
done
if [[ ${interface} == "" ]]; then
echo "Unable to find network interface. Can not continue"
error_out
fi
}
function wait_for_link_up()
{
startsec='date +%s'
endsec='expr ${startsec} + ${link_up_waittime}'
while [[ ${startsec} -lt ${endsec} ]]; do
found='dmesg | grep "${linkups}"'
if [[ ! -z ${found} ]]; then
break;
fi
# Increment current time
startsec='date +%s'
done
# We will not continue if interface can not be brought up..."
if [[ -z ${found} ]]; then
echo "Unable to bring up interface. Can not continue"
error_out
fi
}
function dynamic_ip_assign()
{
ifconfig ${interface} 0.0.0.0
wait_for_link_up
udhcpc -D -s /usr/share/udhcpc/default.script
}
Vamos ver esse script. search_ifc_dev irá procurar o nome do dispositivo atribuído à interface ehternet pelo kernel. (Você deve ter apenas uma interface para isso funcionar).
dynamic_ip_assign atribuirá endereço ip dinamicamente. Eu estou usando o ifconfig em vez de ifup -a porque ifup -a chama automaticamente (veja interface homem) utilitários udhcpc ou dhcpclient (se você configurou seu iface como dhcp em / etc / network / interface) sem esperar que a interface seja exibida na realidade. Isso causa o problema quando o servidor DHCP está respondendo (na maioria dos casos) lento, pois o script de rede será encerrado antes que a interface seja ativada e o script de inicialização do aplicativo seja iniciado e a interface ainda não esteja ativa. Você pode ver acima Estou aguardando o link para UP antes de continuar a sair do meu script, então sempre que eu estou lançando meu próprio aplicativo na inicialização, tenho certeza que a interface é realmente criada, caso contrário, eu posso fazer algo de bom em error_out função.
Note que se você estiver usando ip = dhcp na linha de comando do kernel, seu driver ethernet não continuará até que sua interface esteja ativa, então sempre que o script de ativação do aplicativo for invocado você tem certeza de que a interface já está UP, mas como eu mencionei, eu não quero fornecer o parâmetro ip na linha de comando do kernel.
Qualquer pessoa por favor forneça feedback se você tiver uma solução compacta para este problema. Observe também que essa é uma distro incorporada personalizada, por isso estou com falta de utilitários de rede, exceto o busybox. Usar algum outro utilitário (como usado em distros de desktop) pode me dar uma solução compacta.
Atenciosamente, Farrukh Arshad.