Nous supposons qu’un serveur dhcp fonctionne déjà et est correctement configuré pour fournir les noms de machine.
Par exemple, pour ISC dhcpd :
group { use-host-decl-names on; host joe { hardware ethernet 08:00:2b:4c:29:32; fixed-address joe.fugue.com; } }
Pour forcer Ubuntu a utiliser le hostname fourni (ici joe), nous allons forcer la distribution à ne pas utiliser network-manager. La machine concernée étant un poste de travail ordinaire, ne possédant qu’une seule carte réseau, nous allons tout simplement désinstaller network-manager.
sudo apt-get remove network-manager network-manager-gnome
Nous allons ensuite enlever les références à hostname et networkmanager dans /etc/init :
sudo mv /etc/init/hostname.conf /etc/init/hostname.conf.old
sudo mv /etc/init/network-manager.conf /etc/init/network-manager.conf.old
Nous allons ensuite modifier le fichier /etc/network/interfaces pour y rajouter les définitions concernant eth0 :
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp
La machine étant destinée a être déployée sur d’autre machine par clonage, il est nécessaire de modifier l’affectation du nom eth0, ce dernier possédant par défaut une référence à l’adresse MAC :
sudo gedit /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
devient :
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
La couche graphique étant chargée très tôt dans ubuntu 10.04, il est déconseillé de modifier le hostname à la volée une fois cette dernière lancée. Nous allons donc créer un script qui modifiera le /etc/hostname et donc la modification sera prise en compte lors du prochain démarrage de la machine :
sudo gedit /etc/dhcp3/dhclient-exit-hooks.d/sethostname
#!/bin/sh echo $new_host_name > /etc/hostname if test -r /var/run/gdm.pid && ps -ef | grep $(cat /var/run/gdm.pid) | grep -q /usr/sbin/gdm ; then echo "GDM is running, hostname will be updated at the next startup" >> /var/log/sethostname.log ; else hostname $new_host_name; fi
Nous terminons la manip en donnant les droits d’exécution :
sudo chmod +x /etc/dhcp3/dhclient-exit-hooks.d/sethostname
salut,
je tente sur natty (ubuntu 11.04) de faire quelque chose de similaire.
La différence, c’est que je n’ai pas besoin d’un ddns.
C’est juste pour remplir le /etc/hostname et éventuellement l’entrée dans /etc/hosts avec le nom de machine.
Je n’ai pas compris dans ton script sethostname où tu récupères la variable $new_host_name.
Enfin, moi, le hostname reste à (none) après reboot.
Le plus bizarre, c’est qu’en ssh, ça met bien utilisateur@host_déclaré_dans_dhcpd.conf
la variable $new_host_name est positionnée par dhclient lorsque ce dernier fait appel à dhclient-script.
dhclient-script va lui même executer ensuite les scripts présents sous /etc/dhcp3/dhclient-enter-hooks.d et /etc/dhcp3/dhclient-exit-hooks.d
Pour plus d’infos, man dhclient-script.
Je n’ai pas testé le fonctionnement sur ubuntu 11.04, cependant, il y a l’air d’avoir un bug ouvert la dessus :
https://bugs.launchpad.net/ubuntu/+source/dhcp3/+bug/837385
Je viens de tester la procédure décrite dans l’article sous ubuntu 11.10.
Pour la faire fonctionner il faut placer le script dans /etc/dhcp/dhclient-exit-hooks.d/sethostname au lieu de /etc/dhcp3/dhclient-exit-hooks.d/sethostname
Le reste de la procédure est strictement identique.