Le serveur Ubuntu 10.04 est actuellement configuré avec le serveur dhcp3 ainsi qu’une interface pontée (br0) pour une utilisation avec des machines virtuelles. Le problème que j'ai est que lorsque le serveur redémarre, dhcp3-server ne parvient pas à se charger en raison du délai supplémentaire causé par la mise en place de l'interface pontée.
Essentiellement, br0 n'a pas d'adresse IP à utiliser avec DHCP3-Server jusqu'à la fin du cycle de démarrage, bien après que le serveur DHCP3 a tenté de se charger.
Une fois que le serveur a démarré, je peux exécuter '/etc/init.d/dhcp3-server start' sans aucun problème.
Est-il possible de: - forcer dhcp3-server à attendre le chargement de l'interface avant d'essayer de le charger? - Démarrer dhcp3-server après que tout le reste soit chargé?
Une solution consiste à indiquer au serveur DHCP de ne pas démarrer automatiquement, puis d’ajouter les deux lignes suivantes au fichier /etc/network/interfaces
pour la définition du pont.
post-up /etc/init.d/dhcp3-server start
pre-down /etc/init.d/dhcp3-server stop
Donc ça va ressembler à ça
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
De cette façon, la gestion du réseau (ifup/ifdown, NOT network-manager) démarrera le serveur DHCP après la mise en place du pont et l’arrêtera avant de supprimer le pont.
Vous pouvez modifier le script de démarrage /etc/init.d/dhcp3-server
pour attendre qu'une adresse IP soit disponible sur br0
. Par exemple: (Attention: code non testé!)
# wait 5 secs between br0-ready tests
wait_time_between_probes=5
# maximum number of attempts (i.e., 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
Le fragment de code doit être inséré dans le script de démarrage, dans la partie case ... start)
, avant le démarrage du démon DHCP3. Bien sûr, vous devez ajuster le temps d’attente et le nombre de tentatives pour correspondre à votre environnement (combien de temps faut-il au maximum pour que br0 obtienne l’adresse IP?)