Ubuntu 10.04 : Obtenir le hostname de la machine via le dhcp

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

3 thoughts on “Ubuntu 10.04 : Obtenir le hostname de la machine via le dhcp”

  1. 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

  2. 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

  3. 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.