web-dev-qa-db-fra.com

Comment puis-je démarrer le serveur DHCP3 plus tard, afin qu'il attende qu'une interface de pont s'initialise avant de se charger?

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é?

8
user2009

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.

9
LassePoulsen

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

2
Riccardo Murri