Como posso iniciar o servidor DHCP3 mais tarde, para que aguarde que uma interface de ponte seja inicializada antes do carregamento?

Eu tenho Ubuntu 10.04 servidor atualmente configurado com dhcp3-server, bem como uma interface em ponte (br0) para uso com máquinas virtuais. O problema que tenho é que quando o servidor é reinicializado, o dhcp3-server não carrega devido ao atraso extra causado pela interface em ponte.

Essencialmente, o br0 não possui um endereço IP para uso com o DHCP3-Server até o final do ciclo de boot, bem depois que o servidor DHCP3 tentou carregar.

Uma vez que o servidor tenha iniciado, posso executar o ‘/etc/init.d/dhcp3-server start’ sem qualquer problema.

Existe alguma maneira que eu possa: – Forçar o dhcp3-server a esperar até que a interface seja carregada antes de tentar carregar? – Iniciar o dhcp3-server depois que todo o resto foi carregado?

Uma solução é dizer ao dhcp-server para não iniciar automaticamente e, em seguida, adicionar as duas linhas seguintes ao arquivo /etc/network/interfaces para a definição da ponte.

 post-up /etc/init.d/dhcp3-server start pre-down /etc/init.d/dhcp3-server stop 

Então vai acabar parecendo assim

 iface br0 inet static bridge_ports eth0 eth1 address 192.168.1.2 broadcast 192.168.1.255 netmask 255.255.255.0 gateway 192.168.1.1 post-up /etc/init.d/dhcp3-server start pre-down /etc/init.d/dhcp3-server stop 

Desta forma, o gerenciamento de rede (ifup / ifdown, NOT network-manager) iniciará o servidor DHCP depois de ativar a ponte e desligará antes de remover a ponte.

Você pode modificar o script de boot /etc/init.d/dhcp3-server para aguardar um endereço IP estar disponível em br0 . Por exemplo: (Aviso: código não testado!)

 # wait 5 secs between br0-ready tests wait_time_between_probes=5 # maximum number of attempts (ie, timeout) max_attempts=10 log_progress_msg "Waiting for br0 to get an IP address" for n in $(seq 1 $max_attempts); do if /sbin/ifconfig br0 | egrep -q "inet addr:" ; then # IP address ready on br0, exit loop break else sleep $wait_time_between_probes fi done if [ "$n" = "$max_attempts" ]; then log_warning_msg "Maximum number of attempts reached, but br0 has no IP address yet" log_warning_msg "Continuing anyway but DHCP3 server might not start correctly" fi 

O snippet deve entrar no script de boot, dentro do case ... start) antes da boot do daemon DHCP3. Obviamente, você deve ajustar o tempo de espera e o número de tentativas para corresponder ao seu ambiente (quanto tempo leva para que o br0 obtenha o endereço IP?)